summaryrefslogtreecommitdiff
path: root/packages/anastasis-core/src/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/anastasis-core/src/index.ts')
-rw-r--r--packages/anastasis-core/src/index.ts32
1 files changed, 32 insertions, 0 deletions
diff --git a/packages/anastasis-core/src/index.ts b/packages/anastasis-core/src/index.ts
index 5a9199e02..542e7eafb 100644
--- a/packages/anastasis-core/src/index.ts
+++ b/packages/anastasis-core/src/index.ts
@@ -74,6 +74,7 @@ import {
DiscoveryResult,
PolicyMetaInfo,
ChallengeInfo,
+ AggregatedPolicyMetaInfo,
} from "./reducer-types.js";
import fetchPonyfill from "fetch-ponyfill";
import {
@@ -1451,6 +1452,37 @@ async function updateSecretExpiration(
});
}
+export function mergeDiscoveryAggregate(
+ newPolicies: PolicyMetaInfo[],
+ oldAgg: AggregatedPolicyMetaInfo[],
+): AggregatedPolicyMetaInfo[] {
+ const aggregatedPolicies: AggregatedPolicyMetaInfo[] = [...oldAgg] ?? [];
+ const polHashToIndex: Record<string, number> = {};
+ for (const pol of newPolicies) {
+ const oldIndex = polHashToIndex[pol.policy_hash];
+ if (oldIndex != null) {
+ aggregatedPolicies[oldIndex].providers.push({
+ provider_url: pol.provider_url,
+ version: pol.version,
+ });
+ } else {
+ aggregatedPolicies.push({
+ attribute_mask: pol.attribute_mask,
+ policy_hash: pol.policy_hash,
+ providers: [
+ {
+ provider_url: pol.provider_url,
+ version: pol.version,
+ },
+ ],
+ secret_name: pol.secret_name,
+ });
+ polHashToIndex[pol.policy_hash] = aggregatedPolicies.length - 1;
+ }
+ }
+ return aggregatedPolicies;
+}
+
const backupTransitions: Record<
BackupStates,
Transition<ReducerStateBackup>