@codemem/core 0.39.1 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/api-types.d.ts +35 -1
  2. package/dist/api-types.d.ts.map +1 -1
  3. package/dist/attribution-assessment.d.ts +78 -0
  4. package/dist/attribution-assessment.d.ts.map +1 -0
  5. package/dist/attribution-diagnostics.d.ts +53 -0
  6. package/dist/attribution-diagnostics.d.ts.map +1 -0
  7. package/dist/better-sqlite-coordinator-store.d.ts +6 -2
  8. package/dist/better-sqlite-coordinator-store.d.ts.map +1 -1
  9. package/dist/coordinator-actions.d.ts +81 -0
  10. package/dist/coordinator-actions.d.ts.map +1 -1
  11. package/dist/coordinator-api-DJVH2jw5.js +21107 -0
  12. package/dist/coordinator-api-DJVH2jw5.js.map +1 -0
  13. package/dist/coordinator-api.d.ts.map +1 -1
  14. package/dist/coordinator-enrollment-reconciler.d.ts +24 -0
  15. package/dist/coordinator-enrollment-reconciler.d.ts.map +1 -0
  16. package/dist/coordinator-enrollment-reconciliation-issues.d.ts +34 -0
  17. package/dist/coordinator-enrollment-reconciliation-issues.d.ts.map +1 -0
  18. package/dist/coordinator-invites.d.ts +14 -1
  19. package/dist/coordinator-invites.d.ts.map +1 -1
  20. package/dist/coordinator-membership-effects.d.ts +31 -0
  21. package/dist/coordinator-membership-effects.d.ts.map +1 -0
  22. package/dist/coordinator-runtime.d.ts +14 -0
  23. package/dist/coordinator-runtime.d.ts.map +1 -1
  24. package/dist/coordinator-store-contract.d.ts +134 -1
  25. package/dist/coordinator-store-contract.d.ts.map +1 -1
  26. package/dist/coordinator-store-test-harness.d.ts +4 -0
  27. package/dist/coordinator-store-test-harness.d.ts.map +1 -1
  28. package/dist/coordinator-store.d.ts +1 -1
  29. package/dist/coordinator-store.d.ts.map +1 -1
  30. package/dist/d1-coordinator-store.d.ts +6 -2
  31. package/dist/d1-coordinator-store.d.ts.map +1 -1
  32. package/dist/db.d.ts +2 -19
  33. package/dist/db.d.ts.map +1 -1
  34. package/dist/embeddings.d.ts +2 -0
  35. package/dist/embeddings.d.ts.map +1 -1
  36. package/dist/extraction-benchmark-scoring.d.ts +99 -0
  37. package/dist/extraction-benchmark-scoring.d.ts.map +1 -0
  38. package/dist/extraction-benchmarks.d.ts +29 -0
  39. package/dist/extraction-benchmarks.d.ts.map +1 -1
  40. package/dist/extraction-eval.d.ts +5 -0
  41. package/dist/extraction-eval.d.ts.map +1 -1
  42. package/dist/extraction-model-pricing.d.ts +21 -0
  43. package/dist/extraction-model-pricing.d.ts.map +1 -0
  44. package/dist/extraction-replay.d.ts +30 -3
  45. package/dist/extraction-replay.d.ts.map +1 -1
  46. package/dist/extraction-tier-routing.d.ts.map +1 -1
  47. package/dist/index.d.ts +65 -18
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +10684 -18254
  50. package/dist/index.js.map +1 -1
  51. package/dist/ingest-pipeline.d.ts.map +1 -1
  52. package/dist/ingest-prompts.d.ts +5 -0
  53. package/dist/ingest-prompts.d.ts.map +1 -1
  54. package/dist/ingest-xml-parser.d.ts +21 -0
  55. package/dist/ingest-xml-parser.d.ts.map +1 -1
  56. package/dist/internal/cloudflare-coordinator.js +528 -213
  57. package/dist/internal/cloudflare-coordinator.js.map +1 -1
  58. package/dist/legacy-recipient-policy-projection.d.ts +122 -0
  59. package/dist/legacy-recipient-policy-projection.d.ts.map +1 -0
  60. package/dist/maintenance/relink.d.ts +1 -1
  61. package/dist/maintenance/relink.d.ts.map +1 -1
  62. package/dist/observer-client.d.ts +15 -6
  63. package/dist/observer-client.d.ts.map +1 -1
  64. package/dist/observer-config.d.ts +2 -0
  65. package/dist/observer-config.d.ts.map +1 -1
  66. package/dist/outcome-evidence.d.ts +193 -0
  67. package/dist/outcome-evidence.d.ts.map +1 -0
  68. package/dist/pack.d.ts +8 -0
  69. package/dist/pack.d.ts.map +1 -1
  70. package/dist/project-invite-acceptance.d.ts +10 -0
  71. package/dist/project-invite-acceptance.d.ts.map +1 -0
  72. package/dist/project-invite-identity.d.ts +14 -0
  73. package/dist/project-invite-identity.d.ts.map +1 -0
  74. package/dist/project-scope-settings.d.ts.map +1 -1
  75. package/dist/prompt-pack-ledger.d.ts +21 -0
  76. package/dist/prompt-pack-ledger.d.ts.map +1 -0
  77. package/dist/raw-event-flush.d.ts.map +1 -1
  78. package/dist/recipient-policy-contract.d.ts +153 -0
  79. package/dist/recipient-policy-contract.d.ts.map +1 -0
  80. package/dist/recipient-policy-edges.d.ts +85 -0
  81. package/dist/recipient-policy-edges.d.ts.map +1 -0
  82. package/dist/recipient-policy-intent.d.ts +12 -0
  83. package/dist/recipient-policy-intent.d.ts.map +1 -0
  84. package/dist/recipient-policy-migration.d.ts +22 -0
  85. package/dist/recipient-policy-migration.d.ts.map +1 -0
  86. package/dist/recipient-policy-onboarding.d.ts +111 -0
  87. package/dist/recipient-policy-onboarding.d.ts.map +1 -0
  88. package/dist/recipient-policy-reconciler.d.ts +83 -0
  89. package/dist/recipient-policy-reconciler.d.ts.map +1 -0
  90. package/dist/recipient-policy-reconciliation.d.ts +221 -0
  91. package/dist/recipient-policy-reconciliation.d.ts.map +1 -0
  92. package/dist/recipient-policy-review.d.ts +47 -0
  93. package/dist/recipient-policy-review.d.ts.map +1 -0
  94. package/dist/recipient-reviewed-intent.d.ts +63 -0
  95. package/dist/recipient-reviewed-intent.d.ts.map +1 -0
  96. package/dist/retrieval-ledger.d.ts +216 -0
  97. package/dist/retrieval-ledger.d.ts.map +1 -0
  98. package/dist/retrieval-surface-ledger.d.ts +17 -0
  99. package/dist/retrieval-surface-ledger.d.ts.map +1 -0
  100. package/dist/schema-bootstrap.d.ts +2 -0
  101. package/dist/schema-bootstrap.d.ts.map +1 -1
  102. package/dist/schema.d.ts +11830 -3158
  103. package/dist/schema.d.ts.map +1 -1
  104. package/dist/scope-membership-cache.d.ts +1 -1
  105. package/dist/scope-membership-cache.d.ts.map +1 -1
  106. package/dist/share-operation-lifecycle.d.ts +46 -0
  107. package/dist/share-operation-lifecycle.d.ts.map +1 -0
  108. package/dist/share-operation.d.ts +87 -0
  109. package/dist/share-operation.d.ts.map +1 -0
  110. package/dist/share-provisioning.d.ts +57 -0
  111. package/dist/share-provisioning.d.ts.map +1 -0
  112. package/dist/store.d.ts +9 -3
  113. package/dist/store.d.ts.map +1 -1
  114. package/dist/sync-bootstrap.d.ts +3 -2
  115. package/dist/sync-bootstrap.d.ts.map +1 -1
  116. package/dist/sync-capability.d.ts +7 -0
  117. package/dist/sync-capability.d.ts.map +1 -1
  118. package/dist/sync-daemon.d.ts +14 -1
  119. package/dist/sync-daemon.d.ts.map +1 -1
  120. package/dist/sync-pass.d.ts +1 -0
  121. package/dist/sync-pass.d.ts.map +1 -1
  122. package/dist/sync-replication.d.ts +24 -0
  123. package/dist/sync-replication.d.ts.map +1 -1
  124. package/dist/sync-scope-protocol.d.ts.map +1 -1
  125. package/dist/test-schema.generated.d.ts +1 -1
  126. package/dist/test-schema.generated.d.ts.map +1 -1
  127. package/package.json +1 -1
  128. package/dist/coordinator-api-hZ1RVJUN.js +0 -2111
  129. package/dist/coordinator-api-hZ1RVJUN.js.map +0 -1
@@ -0,0 +1,85 @@
1
+ import type { Database } from "./db.js";
2
+ export type RecipientPolicyEdgeRecipientRefV1 = {
3
+ recipientKind: "identity";
4
+ identityId: string;
5
+ } | {
6
+ recipientKind: "team";
7
+ teamId: string;
8
+ };
9
+ export interface RecipientPolicyEdgeChangeV1 {
10
+ canonicalProjectIdentity: string;
11
+ recipient: RecipientPolicyEdgeRecipientRefV1;
12
+ action: "add" | "remove";
13
+ }
14
+ export interface RecipientPolicyEdgePreviewRequestV1 {
15
+ version: 1;
16
+ changes: RecipientPolicyEdgeChangeV1[];
17
+ }
18
+ export interface RecipientPolicyEdgeCommitRequestV1 extends RecipientPolicyEdgePreviewRequestV1 {
19
+ reviewedPolicyDigest: string;
20
+ }
21
+ export interface RecipientPolicyEdgePreviewProjectV1 {
22
+ canonicalProjectIdentity: string;
23
+ displayName: string;
24
+ existingMemoryCount: number;
25
+ futureMemoriesShared: true;
26
+ }
27
+ export interface RecipientPolicyEdgeIdentitySummaryV1 {
28
+ identityId: string;
29
+ displayName: string;
30
+ verification: "local";
31
+ }
32
+ export type RecipientPolicyEdgeSelectedRecipientV1 = ({
33
+ recipientKind: "identity";
34
+ } & RecipientPolicyEdgeIdentitySummaryV1) | {
35
+ recipientKind: "team";
36
+ teamId: string;
37
+ displayName: string;
38
+ currentMembers: RecipientPolicyEdgeIdentitySummaryV1[];
39
+ futureMembersInherit: true;
40
+ };
41
+ export interface RecipientPolicyEdgeEffectiveDeviceV1 {
42
+ canonicalProjectIdentity: string;
43
+ identityId: string;
44
+ deviceId: string;
45
+ displayName: string;
46
+ }
47
+ export interface RecipientPolicyEdgePreviewResponseV1 {
48
+ version: 1;
49
+ normalizedChanges: RecipientPolicyEdgeChangeV1[];
50
+ outcomes: RecipientPolicyEdgeCommitOutcomeV1[];
51
+ projects: RecipientPolicyEdgePreviewProjectV1[];
52
+ selectedRecipients: RecipientPolicyEdgeSelectedRecipientV1[];
53
+ effectiveDevices: RecipientPolicyEdgeEffectiveDeviceV1[];
54
+ unchangedProjects: RecipientPolicyEdgePreviewProjectV1[];
55
+ reviewedPolicyDigest: string;
56
+ addCount: number;
57
+ removeCount: number;
58
+ netWriteCount: number;
59
+ }
60
+ export type RecipientPolicyEdgeOutcomeV1 = "added" | "removed" | "already_present" | "already_absent";
61
+ export interface RecipientPolicyEdgeCommitOutcomeV1 {
62
+ change: RecipientPolicyEdgeChangeV1;
63
+ outcome: RecipientPolicyEdgeOutcomeV1;
64
+ }
65
+ export interface RecipientPolicyEdgeCommitResultV1 {
66
+ version: 1;
67
+ status: "applied" | "stale" | "invalid" | "not_found" | "conflict";
68
+ reviewedPolicyDigest: string;
69
+ errorCode: string | null;
70
+ outcomes: RecipientPolicyEdgeCommitOutcomeV1[];
71
+ writeCount: number;
72
+ idempotent: boolean;
73
+ }
74
+ export declare class RecipientPolicyEdgeRequestError extends Error {
75
+ readonly status: "invalid" | "not_found";
76
+ readonly errorCode: string;
77
+ constructor(status: "invalid" | "not_found", errorCode: string);
78
+ }
79
+ export declare function parseRecipientPolicyEdgePreviewRequest(value: unknown): RecipientPolicyEdgePreviewRequestV1 | null;
80
+ export declare function parseRecipientPolicyEdgeCommitRequest(value: unknown): RecipientPolicyEdgeCommitRequestV1 | null;
81
+ export declare function previewRecipientPolicyEdges(db: Database, value: unknown): RecipientPolicyEdgePreviewResponseV1;
82
+ export declare function commitRecipientPolicyEdges(db: Database, value: unknown, options?: {
83
+ now?: () => string;
84
+ }): RecipientPolicyEdgeCommitResultV1;
85
+ //# sourceMappingURL=recipient-policy-edges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipient-policy-edges.d.ts","sourceRoot":"","sources":["../src/recipient-policy-edges.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Database } from "./db.js";
2
+ import { type RecipientPolicyContractVersion, type RecipientPolicyIdentityDeviceV1, type RecipientPolicyIdentityV1, type RecipientPolicyProjectRecipientV1, type RecipientPolicyTeamMembershipV1, type RecipientPolicyTeamV1 } from "./recipient-policy-contract.js";
3
+ export interface RecipientPolicyIntentGraphV1 {
4
+ version: RecipientPolicyContractVersion;
5
+ identities: RecipientPolicyIdentityV1[];
6
+ teams: RecipientPolicyTeamV1[];
7
+ teamMemberships: RecipientPolicyTeamMembershipV1[];
8
+ identityDevices: RecipientPolicyIdentityDeviceV1[];
9
+ projectRecipients: RecipientPolicyProjectRecipientV1[];
10
+ }
11
+ export declare function listRecipientPolicyIntent(db: Database): RecipientPolicyIntentGraphV1;
12
+ //# sourceMappingURL=recipient-policy-intent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipient-policy-intent.d.ts","sourceRoot":"","sources":["../src/recipient-policy-intent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAEN,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,EACpC,KAAK,yBAAyB,EAC9B,KAAK,iCAAiC,EACtC,KAAK,+BAA+B,EACpC,KAAK,qBAAqB,EAC1B,MAAM,gCAAgC,CAAC;AAExC,MAAM,WAAW,4BAA4B;IAC5C,OAAO,EAAE,8BAA8B,CAAC;IACxC,UAAU,EAAE,yBAAyB,EAAE,CAAC;IACxC,KAAK,EAAE,qBAAqB,EAAE,CAAC;IAC/B,eAAe,EAAE,+BAA+B,EAAE,CAAC;IACnD,eAAe,EAAE,+BAA+B,EAAE,CAAC;IACnD,iBAAiB,EAAE,iCAAiC,EAAE,CAAC;CACvD;AAMD,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,QAAQ,GAAG,4BAA4B,CAwGpF"}
@@ -0,0 +1,22 @@
1
+ import type { Database } from "./db.js";
2
+ import { RECIPIENT_POLICY_CONTRACT_VERSION } from "./recipient-policy-contract.js";
3
+ import type { RecipientPolicyReviewContext } from "./recipient-policy-review.js";
4
+ export interface RecipientPolicyMigrationOptions {
5
+ dryRun?: boolean;
6
+ }
7
+ export type RecipientPolicyMigrationProjectStatus = "migrated" | "would_migrate" | "unchanged" | "skipped" | "blocked";
8
+ export interface RecipientPolicyMigrationProjectResultV1 {
9
+ canonicalProjectIdentity: string;
10
+ status: RecipientPolicyMigrationProjectStatus;
11
+ writeCount: number;
12
+ idempotent: boolean;
13
+ errorCode: string | null;
14
+ }
15
+ export interface RecipientPolicyMigrationResultV1 {
16
+ version: typeof RECIPIENT_POLICY_CONTRACT_VERSION;
17
+ dryRun: boolean;
18
+ results: RecipientPolicyMigrationProjectResultV1[];
19
+ }
20
+ export declare function deterministicPolicyTeamId(teamCandidateId: string): string;
21
+ export declare function migrateRecipientPolicyIntent(db: Database, context: RecipientPolicyReviewContext, options?: RecipientPolicyMigrationOptions): RecipientPolicyMigrationResultV1;
22
+ //# sourceMappingURL=recipient-policy-migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipient-policy-migration.d.ts","sourceRoot":"","sources":["../src/recipient-policy-migration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKxC,OAAO,EAAE,iCAAiC,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,KAAK,EAEX,4BAA4B,EAC5B,MAAM,8BAA8B,CAAC;AAItC,MAAM,WAAW,+BAA+B;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,qCAAqC,GAC9C,UAAU,GACV,eAAe,GACf,WAAW,GACX,SAAS,GACT,SAAS,CAAC;AAEb,MAAM,WAAW,uCAAuC;IACvD,wBAAwB,EAAE,MAAM,CAAC;IACjC,MAAM,EAAE,qCAAqC,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,gCAAgC;IAChD,OAAO,EAAE,OAAO,iCAAiC,CAAC;IAClD,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,uCAAuC,EAAE,CAAC;CACnD;AA0DD,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAEzE;AA4jBD,wBAAgB,4BAA4B,CAC3C,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,4BAA4B,EACrC,OAAO,GAAE,+BAAoC,GAC3C,gCAAgC,CA0IlC"}
@@ -0,0 +1,111 @@
1
+ import type { Database } from "./db.js";
2
+ import { type RecipientReviewedIntentV1 } from "./recipient-reviewed-intent.js";
3
+ export type RecipientPolicyOnboardingJourneyV1 = "team" | "direct_project" | "add_device";
4
+ export interface RecipientPolicyOnboardingBindingV1 {
5
+ invitationId: string;
6
+ identityId: string;
7
+ deviceId: string;
8
+ deviceKeyFingerprint: string;
9
+ deviceDisplayName: string;
10
+ }
11
+ interface RecipientPolicyOnboardingRequestBaseV1 {
12
+ version: 1;
13
+ invitationId: string;
14
+ identityId: string;
15
+ deviceId: string;
16
+ devicePublicKey: string;
17
+ deviceDisplayName: string;
18
+ }
19
+ export interface RecipientPolicyTeamOnboardingRequestV1 extends RecipientPolicyOnboardingRequestBaseV1 {
20
+ journey: "team";
21
+ teamId: string;
22
+ }
23
+ export interface RecipientPolicyDirectProjectOnboardingRequestV1 extends RecipientPolicyOnboardingRequestBaseV1 {
24
+ journey: "direct_project";
25
+ canonicalProjectIdentities: string[];
26
+ }
27
+ export interface RecipientPolicyAddDeviceOnboardingRequestV1 extends RecipientPolicyOnboardingRequestBaseV1 {
28
+ journey: "add_device";
29
+ }
30
+ export type RecipientPolicyOnboardingPreviewRequestV1 = RecipientPolicyTeamOnboardingRequestV1 | RecipientPolicyDirectProjectOnboardingRequestV1 | RecipientPolicyAddDeviceOnboardingRequestV1;
31
+ export type RecipientPolicyOnboardingCommitRequestV1 = RecipientPolicyOnboardingPreviewRequestV1 & {
32
+ reviewedOnboardingDigest: string;
33
+ };
34
+ export type RecipientPolicyReviewedIntentPreviewRequestV1 = RecipientPolicyTeamOnboardingRequestV1 | RecipientPolicyAddDeviceOnboardingRequestV1;
35
+ export type RecipientPolicyReviewedIntentCommitRequestV1 = RecipientPolicyReviewedIntentPreviewRequestV1 & {
36
+ identityDisplayName: string;
37
+ reviewedIntent: RecipientReviewedIntentV1;
38
+ reviewedOnboardingDigest: string;
39
+ };
40
+ export type RecipientPolicyOnboardingProjectSourceV1 = {
41
+ kind: "direct";
42
+ } | {
43
+ kind: "team";
44
+ teamId: string;
45
+ displayName: string;
46
+ };
47
+ export interface RecipientPolicyOnboardingProjectV1 {
48
+ canonicalProjectIdentity: string;
49
+ displayName: string;
50
+ existingMemoryCount: number;
51
+ futureMemoriesShared: true;
52
+ sources: RecipientPolicyOnboardingProjectSourceV1[];
53
+ }
54
+ export interface RecipientPolicyOnboardingExcludedProjectV1 {
55
+ canonicalProjectIdentity: string;
56
+ displayName: string;
57
+ existingMemoryCount: number;
58
+ }
59
+ export interface RecipientPolicyOnboardingPreviewV1 {
60
+ version: 1;
61
+ journey: RecipientPolicyOnboardingJourneyV1;
62
+ binding: RecipientPolicyOnboardingBindingV1;
63
+ team: {
64
+ teamId: string;
65
+ displayName: string;
66
+ futureProjectsInherit: true;
67
+ } | null;
68
+ projects: RecipientPolicyOnboardingProjectV1[];
69
+ excludedProjects: RecipientPolicyOnboardingExcludedProjectV1[];
70
+ reviewedOnboardingDigest: string;
71
+ }
72
+ export interface RecipientPolicyOnboardingCommitResultV1 {
73
+ version: 1;
74
+ status: "applied" | "stale" | "invalid" | "not_found" | "conflict";
75
+ journey: RecipientPolicyOnboardingJourneyV1 | null;
76
+ reviewedOnboardingDigest: string;
77
+ errorCode: string | null;
78
+ writeCount: number;
79
+ idempotent: boolean;
80
+ }
81
+ export interface DirectProjectSharePolicyCommitInput {
82
+ operationId: string;
83
+ inviterIdentityId: string;
84
+ inviterDevices: Array<{
85
+ deviceId: string;
86
+ displayName: string;
87
+ }>;
88
+ recipientIdentityId: string;
89
+ recipientDeviceId: string;
90
+ recipientDevicePublicKey: string;
91
+ recipientDeviceDisplayName: string;
92
+ canonicalProjectIdentities: string[];
93
+ now: string;
94
+ }
95
+ export declare class RecipientPolicyOnboardingRequestError extends Error {
96
+ readonly status: "invalid" | "not_found";
97
+ readonly errorCode: string;
98
+ constructor(status: "invalid" | "not_found", errorCode: string);
99
+ }
100
+ export declare function previewRecipientPolicyOnboarding(db: Database, request: RecipientPolicyOnboardingPreviewRequestV1): RecipientPolicyOnboardingPreviewV1;
101
+ export declare function previewRecipientPolicyOnboardingFromReviewedIntent(reviewedIntent: RecipientReviewedIntentV1, request: RecipientPolicyReviewedIntentPreviewRequestV1): RecipientPolicyOnboardingPreviewV1;
102
+ export declare function assertAddDeviceIdentityAdoptionAllowed(db: Database, targetIdentityId: string, deviceId: string): void;
103
+ export declare function commitDirectProjectSharePolicyInTransaction(db: Database, input: DirectProjectSharePolicyCommitInput): number;
104
+ export declare function commitRecipientPolicyOnboarding(db: Database, request: RecipientPolicyOnboardingCommitRequestV1, options?: {
105
+ now?: () => string;
106
+ }): RecipientPolicyOnboardingCommitResultV1;
107
+ export declare function commitRecipientPolicyOnboardingFromReviewedIntent(db: Database, request: RecipientPolicyReviewedIntentCommitRequestV1, options?: {
108
+ now?: () => string;
109
+ }): RecipientPolicyOnboardingCommitResultV1;
110
+ export {};
111
+ //# sourceMappingURL=recipient-policy-onboarding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipient-policy-onboarding.d.ts","sourceRoot":"","sources":["../src/recipient-policy-onboarding.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAEN,KAAK,yBAAyB,EAC9B,MAAM,gCAAgC,CAAC;AAOxC,MAAM,MAAM,kCAAkC,GAAG,MAAM,GAAG,gBAAgB,GAAG,YAAY,CAAC;AAE1F,MAAM,WAAW,kCAAkC;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,sCAAsC;IAC/C,OAAO,EAAE,CAAC,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sCAChB,SAAQ,sCAAsC;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,+CAChB,SAAQ,sCAAsC;IAC9C,OAAO,EAAE,gBAAgB,CAAC;IAC1B,0BAA0B,EAAE,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,2CAChB,SAAQ,sCAAsC;IAC9C,OAAO,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,MAAM,yCAAyC,GAClD,sCAAsC,GACtC,+CAA+C,GAC/C,2CAA2C,CAAC;AAE/C,MAAM,MAAM,wCAAwC,GAAG,yCAAyC,GAAG;IAClG,wBAAwB,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,6CAA6C,GACtD,sCAAsC,GACtC,2CAA2C,CAAC;AAE/C,MAAM,MAAM,4CAA4C,GACvD,6CAA6C,GAAG;IAC/C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,yBAAyB,CAAC;IAC1C,wBAAwB,EAAE,MAAM,CAAC;CACjC,CAAC;AAEH,MAAM,MAAM,wCAAwC,GACjD;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,MAAM,WAAW,kCAAkC;IAClD,wBAAwB,EAAE,MAAM,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,IAAI,CAAC;IAC3B,OAAO,EAAE,wCAAwC,EAAE,CAAC;CACpD;AAED,MAAM,WAAW,0CAA0C;IAC1D,wBAAwB,EAAE,MAAM,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,kCAAkC;IAClD,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,kCAAkC,CAAC;IAC5C,OAAO,EAAE,kCAAkC,CAAC;IAC5C,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,qBAAqB,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAClF,QAAQ,EAAE,kCAAkC,EAAE,CAAC;IAC/C,gBAAgB,EAAE,0CAA0C,EAAE,CAAC;IAC/D,wBAAwB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,uCAAuC;IACvD,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;IACnE,OAAO,EAAE,kCAAkC,GAAG,IAAI,CAAC;IACnD,wBAAwB,EAAE,MAAM,CAAC;IACjC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mCAAmC;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wBAAwB,EAAE,MAAM,CAAC;IACjC,0BAA0B,EAAE,MAAM,CAAC;IACnC,0BAA0B,EAAE,MAAM,EAAE,CAAC;IACrC,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,qBAAa,qCAAsC,SAAQ,KAAK;IAC/D,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,MAAM,EAAE,SAAS,GAAG,WAAW,EAAE,SAAS,EAAE,MAAM;CAM9D;AA2eD,wBAAgB,gCAAgC,CAC/C,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,yCAAyC,GAChD,kCAAkC,CAEpC;AAyCD,wBAAgB,kDAAkD,CACjE,cAAc,EAAE,yBAAyB,EACzC,OAAO,EAAE,6CAA6C,GACpD,kCAAkC,CAEpC;AAkQD,wBAAgB,sCAAsC,CACrD,EAAE,EAAE,QAAQ,EACZ,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,GACd,IAAI,CA+BN;AAuKD,wBAAgB,2CAA2C,CAC1D,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,mCAAmC,GACxC,MAAM,CA4CR;AA4BD,wBAAgB,+BAA+B,CAC9C,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,wCAAwC,EACjD,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAAO,GAClC,uCAAuC,CA6DzC;AAED,wBAAgB,iDAAiD,CAChE,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,4CAA4C,EACrD,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CAAO,GAClC,uCAAuC,CA2FzC"}
@@ -0,0 +1,83 @@
1
+ import type { Database } from "./db.js";
2
+ export type RecipientPolicyPeerCapability = "supported" | "unsupported" | "undetermined";
3
+ export interface RecipientPolicyCoordinatorSnapshot {
4
+ authoritative: boolean;
5
+ scopeId: string;
6
+ scopeMembershipEpoch?: number;
7
+ fingerprint: string;
8
+ observedAt: string;
9
+ memberships: Array<{
10
+ deviceId: string;
11
+ status: "active" | "revoked";
12
+ membershipEpoch?: number;
13
+ }>;
14
+ }
15
+ export interface RecipientPolicyCoordinatorEffectReceipt {
16
+ effectId: string;
17
+ scopeId: string;
18
+ deviceId: string;
19
+ status: "active" | "revoked";
20
+ }
21
+ export interface RecipientPolicyBoundaryEnrollment {
22
+ deviceId: string;
23
+ identityId: string | null;
24
+ publicKey: string;
25
+ fingerprint: string;
26
+ enabled: boolean;
27
+ }
28
+ export interface RecipientPolicyReconcilerEffects {
29
+ now(): string;
30
+ snapshot(input: {
31
+ canonicalProjectIdentity: string;
32
+ scopeId: string;
33
+ }): Promise<RecipientPolicyCoordinatorSnapshot>;
34
+ listBoundaryEnrollments(input: {
35
+ canonicalProjectIdentity: string;
36
+ scopeId: string;
37
+ }): Promise<RecipientPolicyBoundaryEnrollment[]>;
38
+ probeCapability(input: {
39
+ deviceId: string;
40
+ scopeId: string;
41
+ }): Promise<RecipientPolicyPeerCapability>;
42
+ revoke(input: {
43
+ effectId: string;
44
+ canonicalProjectIdentity: string;
45
+ generation: number;
46
+ scopeId: string;
47
+ deviceId: string;
48
+ }): Promise<RecipientPolicyCoordinatorEffectReceipt>;
49
+ grant(input: {
50
+ effectId: string;
51
+ canonicalProjectIdentity: string;
52
+ generation: number;
53
+ scopeId: string;
54
+ deviceId: string;
55
+ role: "member";
56
+ }): Promise<RecipientPolicyCoordinatorEffectReceipt>;
57
+ refresh(input: {
58
+ canonicalProjectIdentity: string;
59
+ scopeId: string;
60
+ }): Promise<void>;
61
+ }
62
+ export type RecipientPolicyReconcileStatus = "active" | "busy" | "needs_attention" | "parity_pending" | "stale" | "waiting";
63
+ export interface RecipientPolicyReconcileResult {
64
+ canonicalProjectIdentity: string;
65
+ status: RecipientPolicyReconcileStatus;
66
+ generation: number;
67
+ safeErrorCode: string | null;
68
+ revokedDeviceIds: string[];
69
+ grantedDeviceIds: string[];
70
+ deliveredCopiesMayRemain: true;
71
+ revocationWarning: string;
72
+ }
73
+ export interface ReconcileRecipientPolicyProjectInput {
74
+ canonicalProjectIdentity: string;
75
+ leaseOwner: string;
76
+ leaseDurationMs?: number;
77
+ }
78
+ export declare function assertLegacyShareGrantAllowed(db: Database, input: {
79
+ canonicalProjectIdentity: string;
80
+ deviceId: string;
81
+ }): void;
82
+ export declare function reconcileRecipientPolicyProject(db: Database, input: ReconcileRecipientPolicyProjectInput, effects: RecipientPolicyReconcilerEffects): Promise<RecipientPolicyReconcileResult>;
83
+ //# sourceMappingURL=recipient-policy-reconciler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipient-policy-reconciler.d.ts","sourceRoot":"","sources":["../src/recipient-policy-reconciler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,221 @@
1
+ import type { Database } from "./db.js";
2
+ export type RecipientPolicyAuthorityState = "legacy" | "eligible" | "active" | "rolled_back";
3
+ export type RecipientPolicyDerivationBlockCode = "canonical_project_identity_invalid" | "project_recipient_invalid" | "identity_missing" | "identity_not_active" | "identity_merged" | "team_missing" | "team_not_active" | "team_membership_invalid" | "team_member_identity_missing" | "team_member_identity_not_active" | "team_member_identity_merged" | "identity_device_invalid" | "device_identity_conflict";
4
+ export interface RecipientPolicyDerivationIdentity {
5
+ identityId: string;
6
+ status: string;
7
+ mergedIntoIdentityId?: string | null;
8
+ }
9
+ export interface RecipientPolicyDerivationTeam {
10
+ teamId: string;
11
+ status: string;
12
+ }
13
+ export interface RecipientPolicyDerivationTeamMembership {
14
+ teamId: string;
15
+ identityId: string;
16
+ status: string;
17
+ }
18
+ export interface RecipientPolicyDerivationIdentityDevice {
19
+ identityId: string;
20
+ deviceId: string;
21
+ status: string;
22
+ }
23
+ export interface RecipientPolicyDerivationProjectRecipient {
24
+ canonicalProjectIdentity: string;
25
+ recipientKind: string;
26
+ recipientId: string;
27
+ status: string;
28
+ }
29
+ export interface RecipientPolicyEffectiveDeviceSource {
30
+ kind: "direct_identity" | "team_membership";
31
+ teamId?: string;
32
+ }
33
+ export interface StrictRecipientPolicyEffectiveDevice {
34
+ canonicalProjectIdentity: string;
35
+ identityId: string;
36
+ deviceId: string;
37
+ sources: RecipientPolicyEffectiveDeviceSource[];
38
+ }
39
+ export interface RecipientPolicyDerivationBlock {
40
+ code: RecipientPolicyDerivationBlockCode;
41
+ referenceId: string;
42
+ }
43
+ export interface DeriveRecipientPolicyEffectiveDevicesInput {
44
+ canonicalProjectIdentity: string;
45
+ projectRecipients: RecipientPolicyDerivationProjectRecipient[];
46
+ identities: RecipientPolicyDerivationIdentity[];
47
+ teams: RecipientPolicyDerivationTeam[];
48
+ teamMemberships: RecipientPolicyDerivationTeamMembership[];
49
+ identityDevices: RecipientPolicyDerivationIdentityDevice[];
50
+ }
51
+ export interface StrictRecipientPolicyEffectiveDeviceDerivation {
52
+ canonicalProjectIdentity: string;
53
+ status: "eligible" | "blocked";
54
+ devices: StrictRecipientPolicyEffectiveDevice[];
55
+ blocked: RecipientPolicyDerivationBlock[];
56
+ desiredDevicesDigest: string;
57
+ }
58
+ export interface RecipientPolicyAuthorityStateRecord {
59
+ canonicalProjectIdentity: string;
60
+ authorityState: RecipientPolicyAuthorityState;
61
+ generation: number;
62
+ desiredDevicesDigest: string | null;
63
+ currentDevicesDigest: string | null;
64
+ stableParityEvidenceDigest: string | null;
65
+ stableParityPassedAt: string | null;
66
+ freshSnapshotFingerprint: string | null;
67
+ freshSnapshotObservedAt: string | null;
68
+ safeErrorCode: string | null;
69
+ stateChangedAt: string;
70
+ lastErrorAt: string | null;
71
+ attemptCount: number;
72
+ lastAttemptAt: string | null;
73
+ lastCompletedAt: string | null;
74
+ leaseOwner: string | null;
75
+ leaseAcquiredAt: string | null;
76
+ leaseExpiresAt: string | null;
77
+ createdAt: string;
78
+ updatedAt: string;
79
+ }
80
+ export interface UpsertRecipientPolicyAuthorityObservationInput {
81
+ canonicalProjectIdentity: string;
82
+ generation: number;
83
+ desiredDevicesDigest: string;
84
+ currentDevicesDigest: string | null;
85
+ freshSnapshotFingerprint: string | null;
86
+ freshSnapshotObservedAt: string | null;
87
+ now: string;
88
+ }
89
+ export interface RecordRecipientPolicyAuthorityExecutionInput {
90
+ canonicalProjectIdentity: string;
91
+ generation: number;
92
+ attemptCount: number;
93
+ lastAttemptAt: string | null;
94
+ lastCompletedAt: string | null;
95
+ safeErrorCode: string | null;
96
+ lastErrorAt: string | null;
97
+ leaseOwner: string | null;
98
+ leaseAcquiredAt: string | null;
99
+ leaseExpiresAt: string | null;
100
+ updatedAt: string;
101
+ }
102
+ export interface EnsureRecipientPolicyReconciliationStepInput {
103
+ canonicalProjectIdentity: string;
104
+ generation: number;
105
+ stepKey: string;
106
+ payloadDigest: string;
107
+ now: string;
108
+ }
109
+ export interface RecordRecipientPolicyReconciliationStepStateInput {
110
+ canonicalProjectIdentity: string;
111
+ generation: number;
112
+ stepKey: string;
113
+ effectId: string;
114
+ status: "pending" | "running" | "waiting" | "completed" | "failed";
115
+ attemptCount: number;
116
+ startedAt: string | null;
117
+ completedAt: string | null;
118
+ lastAttemptAt: string | null;
119
+ safeErrorCode: string | null;
120
+ errorAt: string | null;
121
+ leaseOwner: string | null;
122
+ leaseAcquiredAt: string | null;
123
+ leaseExpiresAt: string | null;
124
+ updatedAt: string;
125
+ }
126
+ export interface RecipientPolicyReconciliationStepRecord {
127
+ canonicalProjectIdentity: string;
128
+ generation: number;
129
+ stepKey: string;
130
+ effectId: string;
131
+ payloadDigest: string;
132
+ status: string;
133
+ attemptCount: number;
134
+ startedAt: string | null;
135
+ completedAt: string | null;
136
+ lastAttemptAt: string | null;
137
+ safeErrorCode: string | null;
138
+ errorAt: string | null;
139
+ leaseOwner: string | null;
140
+ leaseAcquiredAt: string | null;
141
+ leaseExpiresAt: string | null;
142
+ createdAt: string;
143
+ updatedAt: string;
144
+ }
145
+ export interface PendingRecipientPolicyRevocationRefreshStep {
146
+ generation: number;
147
+ stepKey: string;
148
+ }
149
+ export interface PendingRecipientPolicyRefreshStep {
150
+ generation: number;
151
+ stepKey: string;
152
+ }
153
+ export interface PruneRecipientPolicyReconciliationStepsInput {
154
+ canonicalProjectIdentity: string;
155
+ retainCompletedPerKind?: number;
156
+ }
157
+ export interface PruneSupersededRecipientPolicyCapabilityStepsInput {
158
+ canonicalProjectIdentity: string;
159
+ activeGeneration: number;
160
+ activePassKey: string;
161
+ }
162
+ export interface RecipientPolicyDenyOverlayRecord {
163
+ canonicalProjectIdentity: string;
164
+ scopeId: string;
165
+ deviceId: string;
166
+ generation: number;
167
+ reasonCode: string;
168
+ createdAt: string;
169
+ updatedAt: string;
170
+ }
171
+ export declare const PENDING_RECIPIENT_POLICY_REVOCATION_REFRESH_STEPS_SQL = "SELECT generation, step_key FROM recipient_policy_reconciliation_steps\n\t WHERE canonical_project_identity = ?\n\t AND step_key GLOB 'refresh-after-revocations-v2:*'\n\t AND status IN ('pending', 'running', 'failed')\n\t ORDER BY generation, step_key\n\t LIMIT ?";
172
+ export declare function recipientPolicyDevicesDigest(devices: readonly StrictRecipientPolicyEffectiveDevice[]): string;
173
+ export declare function deriveRecipientPolicyEffectiveDevices(input: DeriveRecipientPolicyEffectiveDevicesInput): StrictRecipientPolicyEffectiveDeviceDerivation;
174
+ export declare function deriveRecipientPolicyEffectiveDevicesFromDatabase(db: Database, canonicalProjectIdentity: string): StrictRecipientPolicyEffectiveDeviceDerivation;
175
+ export declare function getRecipientPolicyAuthorityState(db: Database, canonicalProjectIdentity: string): RecipientPolicyAuthorityStateRecord | null;
176
+ export declare function upsertRecipientPolicyAuthorityObservation(db: Database, input: UpsertRecipientPolicyAuthorityObservationInput): RecipientPolicyAuthorityStateRecord;
177
+ export declare function recordRecipientPolicyStableParityPass(db: Database, input: {
178
+ canonicalProjectIdentity: string;
179
+ generation: number;
180
+ evidenceDigest: string;
181
+ snapshotFingerprint: string;
182
+ passedAt: string;
183
+ }): RecipientPolicyAuthorityStateRecord;
184
+ export declare function recordRecipientPolicyAuthorityExecution(db: Database, input: RecordRecipientPolicyAuthorityExecutionInput): RecipientPolicyAuthorityStateRecord;
185
+ export declare function deterministicRecipientPolicyReconciliationEffectId(input: {
186
+ canonicalProjectIdentity: string;
187
+ generation: number;
188
+ stepKey: string;
189
+ payloadDigest: string;
190
+ }): string;
191
+ export declare function listPendingRecipientPolicyRevocationRefreshSteps(db: Database, canonicalProjectIdentity: string, limit?: number): PendingRecipientPolicyRevocationRefreshStep[];
192
+ export declare function listPendingRecipientPolicyRefreshSteps(db: Database, canonicalProjectIdentity: string, limit?: number): PendingRecipientPolicyRefreshStep[];
193
+ export declare function pruneRecipientPolicyReconciliationSteps(db: Database, input: PruneRecipientPolicyReconciliationStepsInput): number;
194
+ export declare function pruneSupersededRecipientPolicyCapabilitySteps(db: Database, input: PruneSupersededRecipientPolicyCapabilityStepsInput): number;
195
+ export declare function ensureRecipientPolicyReconciliationStep(db: Database, input: EnsureRecipientPolicyReconciliationStepInput): RecipientPolicyReconciliationStepRecord;
196
+ export declare function recordRecipientPolicyReconciliationStepState(db: Database, input: RecordRecipientPolicyReconciliationStepStateInput): RecipientPolicyReconciliationStepRecord;
197
+ export declare function putRecipientPolicyDenyOverlay(db: Database, input: {
198
+ canonicalProjectIdentity: string;
199
+ scopeId: string;
200
+ deviceId: string;
201
+ generation: number;
202
+ reasonCode: string;
203
+ now: string;
204
+ }): RecipientPolicyDenyOverlayRecord;
205
+ export declare function listRecipientPolicyDenyOverlays(db: Database, canonicalProjectIdentity: string): RecipientPolicyDenyOverlayRecord[];
206
+ /**
207
+ * Returns any deny for a scope/device pair. Active policy reconciliation requires
208
+ * one exact Project per managed scope, so enforcement intentionally fails closed
209
+ * if corrupt legacy state contains more than one Project overlay for the pair.
210
+ */
211
+ export declare function getAnyRecipientPolicyDenyOverlayForScopeDevice(db: Database, input: {
212
+ scopeId: string;
213
+ deviceId: string;
214
+ }): RecipientPolicyDenyOverlayRecord | null;
215
+ export declare function clearRecipientPolicyDenyOverlay(db: Database, input: {
216
+ canonicalProjectIdentity: string;
217
+ scopeId: string;
218
+ deviceId: string;
219
+ verifiedGeneration: number;
220
+ }): boolean;
221
+ //# sourceMappingURL=recipient-policy-reconciliation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipient-policy-reconciliation.d.ts","sourceRoot":"","sources":["../src/recipient-policy-reconciliation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { Database } from "./db.js";
2
+ import { type LegacyRecipientPolicyConditionCodeV1, type LegacyRecipientPolicyProjectionV1 } from "./legacy-recipient-policy-projection.js";
3
+ import { type RecipientPolicyBlockedItemV1, type RecipientPolicyContractVersion, type RecipientPolicyReviewDecisionV1, type RecipientPolicyReviewItemV1, type RecipientPolicyReviewOptionV1, type RecipientPolicyReviewPreviewV1 } from "./recipient-policy-contract.js";
4
+ export interface RecipientPolicyReviewContext {
5
+ localActorId: string;
6
+ localDeviceId: string;
7
+ now?: () => string;
8
+ }
9
+ export type RecipientPolicyReviewActionOptionV1 = RecipientPolicyReviewOptionV1 & {
10
+ preview: RecipientPolicyReviewPreviewV1;
11
+ };
12
+ export type RecipientPolicyActionableReviewItemV1 = Omit<RecipientPolicyReviewItemV1, "options"> & {
13
+ options: RecipientPolicyReviewActionOptionV1[];
14
+ };
15
+ export interface RecipientPolicyReviewListV1 {
16
+ version: RecipientPolicyContractVersion;
17
+ reviewItems: RecipientPolicyActionableReviewItemV1[];
18
+ blockedItems: RecipientPolicyBlockedItemV1[];
19
+ }
20
+ export interface RecipientPolicyReviewResolveRequestV1 {
21
+ reviewItemId: string;
22
+ sourceFingerprint: string;
23
+ decision: RecipientPolicyReviewDecisionV1;
24
+ decisionInput?: unknown;
25
+ }
26
+ export type RecipientPolicyReviewResolveStatusV1 = "applied" | "stale" | "not_found" | "invalid" | "conflict";
27
+ export interface RecipientPolicyReviewResolveResultV1 {
28
+ reviewItemId: string;
29
+ sourceFingerprint: string;
30
+ status: RecipientPolicyReviewResolveStatusV1;
31
+ errorCode: string | null;
32
+ idempotent: boolean;
33
+ }
34
+ export interface RecipientPolicyReviewBulkResultV1 {
35
+ version: RecipientPolicyContractVersion;
36
+ results: RecipientPolicyReviewResolveResultV1[];
37
+ }
38
+ export interface RecipientPolicyDerivedReviewState {
39
+ allReviewItems: RecipientPolicyActionableReviewItemV1[];
40
+ blockedItems: RecipientPolicyBlockedItemV1[];
41
+ }
42
+ export declare function recipientPolicyReviewSourceFingerprint(projection: LegacyRecipientPolicyProjectionV1, conditionCode: LegacyRecipientPolicyConditionCodeV1): string;
43
+ export declare function deriveRecipientPolicyReviewState(db: Database, context: RecipientPolicyReviewContext, projections?: LegacyRecipientPolicyProjectionV1[]): RecipientPolicyDerivedReviewState;
44
+ export declare function listRecipientPolicyReview(db: Database, context: RecipientPolicyReviewContext): RecipientPolicyReviewListV1;
45
+ export declare function resolveRecipientPolicyReview(db: Database, context: RecipientPolicyReviewContext, request: RecipientPolicyReviewResolveRequestV1): RecipientPolicyReviewResolveResultV1;
46
+ export declare function resolveRecipientPolicyReviewBulk(db: Database, context: RecipientPolicyReviewContext, requests: RecipientPolicyReviewResolveRequestV1[]): RecipientPolicyReviewBulkResultV1;
47
+ //# sourceMappingURL=recipient-policy-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipient-policy-review.d.ts","sourceRoot":"","sources":["../src/recipient-policy-review.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EACN,KAAK,oCAAoC,EAEzC,KAAK,iCAAiC,EAGtC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAEN,KAAK,4BAA4B,EACjC,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,EACpC,KAAK,2BAA2B,EAChC,KAAK,6BAA6B,EAClC,KAAK,8BAA8B,EACnC,MAAM,gCAAgC,CAAC;AAGxC,MAAM,WAAW,4BAA4B;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,mCAAmC,GAAG,6BAA6B,GAAG;IACjF,OAAO,EAAE,8BAA8B,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,qCAAqC,GAAG,IAAI,CAAC,2BAA2B,EAAE,SAAS,CAAC,GAAG;IAClG,OAAO,EAAE,mCAAmC,EAAE,CAAC;CAC/C,CAAC;AAEF,MAAM,WAAW,2BAA2B;IAC3C,OAAO,EAAE,8BAA8B,CAAC;IACxC,WAAW,EAAE,qCAAqC,EAAE,CAAC;IACrD,YAAY,EAAE,4BAA4B,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,qCAAqC;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,+BAA+B,CAAC;IAC1C,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,oCAAoC,GAC7C,SAAS,GACT,OAAO,GACP,WAAW,GACX,SAAS,GACT,UAAU,CAAC;AAEd,MAAM,WAAW,oCAAoC;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,oCAAoC,CAAC;IAC7C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iCAAiC;IACjD,OAAO,EAAE,8BAA8B,CAAC;IACxC,OAAO,EAAE,oCAAoC,EAAE,CAAC;CAChD;AAED,MAAM,WAAW,iCAAiC;IACjD,cAAc,EAAE,qCAAqC,EAAE,CAAC;IACxD,YAAY,EAAE,4BAA4B,EAAE,CAAC;CAC7C;AAgFD,wBAAgB,sCAAsC,CACrD,UAAU,EAAE,iCAAiC,EAC7C,aAAa,EAAE,oCAAoC,GACjD,MAAM,CAER;AAmKD,wBAAgB,gCAAgC,CAC/C,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,4BAA4B,EACrC,WAAW,sCAAoD,GAC7D,iCAAiC,CAgEnC;AAaD,wBAAgB,yBAAyB,CACxC,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,4BAA4B,GACnC,2BAA2B,CAO7B;AAyMD,wBAAgB,4BAA4B,CAC3C,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,4BAA4B,EACrC,OAAO,EAAE,qCAAqC,GAC5C,oCAAoC,CAmBtC;AAED,wBAAgB,gCAAgC,CAC/C,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,4BAA4B,EACrC,QAAQ,EAAE,qCAAqC,EAAE,GAC/C,iCAAiC,CAanC"}