@tearleads/client-sdk 0.1.56 → 0.1.58

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 (59) hide show
  1. package/data/persistence/organizations/organizationAccessRevocationPersistence.js +2 -2
  2. package/data/persistence/organizations/organizationAccessRevocationPersistence.js.map +1 -1
  3. package/data/persistence/organizations/organizationReadModelPersistence.js +2 -2
  4. package/data/persistence/organizations/organizationReadModelPersistence.js.map +1 -1
  5. package/data/principals/principalPolicyCoordinator.js +40 -0
  6. package/data/principals/principalPolicyCoordinator.js.map +1 -0
  7. package/index.d.ts +4 -4
  8. package/index.js +2 -2
  9. package/index.js.map +1 -1
  10. package/package.json +1 -1
  11. package/workflows/organizations/currentOrganizationMutationRetention.js +1 -1
  12. package/workflows/organizations/currentOrganizationMutationRetention.js.map +1 -1
  13. package/workflows/organizations/index.d.ts +0 -1
  14. package/workflows/organizations/index.js +0 -1
  15. package/workflows/organizations/index.js.map +1 -1
  16. package/workflows/organizations/principalMutationJournalManagement.js +3 -3
  17. package/workflows/organizations/principalMutationJournalManagement.js.map +1 -1
  18. package/workflows/organizations/principalMutationJournalSession.js +3 -3
  19. package/workflows/organizations/principalMutationJournalSession.js.map +1 -1
  20. package/workflows/organizations/retainAcknowledgedPrincipalCurrents.d.ts +4 -24
  21. package/workflows/organizations/retainAcknowledgedPrincipalCurrents.js +13 -133
  22. package/workflows/organizations/retainAcknowledgedPrincipalCurrents.js.map +1 -1
  23. package/workflows/organizations/runtimeCurrentGroupMutation.js +1 -1
  24. package/workflows/organizations/runtimeCurrentGroupMutation.js.map +1 -1
  25. package/workflows/principals/acknowledgedPrincipalCurrents.d.ts +33 -0
  26. package/workflows/principals/acknowledgedPrincipalCurrents.js +140 -0
  27. package/workflows/principals/acknowledgedPrincipalCurrents.js.map +1 -0
  28. package/workflows/{organizations → principals}/acknowledgedPrincipalPredecessor.d.ts +1 -1
  29. package/workflows/{organizations → principals}/acknowledgedPrincipalPredecessor.js +1 -1
  30. package/workflows/principals/acknowledgedPrincipalPredecessor.js.map +1 -0
  31. package/workflows/principals/index.d.ts +1 -0
  32. package/workflows/principals/index.js +1 -0
  33. package/workflows/principals/index.js.map +1 -1
  34. package/workflows/{organizations → principals}/initialPrincipalCurrentPublication.js +5 -7
  35. package/workflows/principals/initialPrincipalCurrentPublication.js.map +1 -0
  36. package/workflows/principals/principalAcknowledgementChecks.d.ts +30 -0
  37. package/workflows/principals/principalAcknowledgementChecks.js +2 -0
  38. package/workflows/principals/principalAcknowledgementChecks.js.map +1 -0
  39. package/workflows/{organizations → principals}/principalCurrentPublicationSeal.js.map +1 -1
  40. package/workflows/principals/principalRecoveryMemoValidity.js +2 -2
  41. package/workflows/principals/principalRecoveryMemoValidity.js.map +1 -1
  42. package/workflows/{organizations → principals}/reconcileAcknowledgedPrincipalCurrent.js +2 -2
  43. package/workflows/principals/reconcileAcknowledgedPrincipalCurrent.js.map +1 -0
  44. package/workflows/principals/runtimePolicyRecovery.js +2 -2
  45. package/workflows/principals/runtimePolicyRecovery.js.map +1 -1
  46. package/workflows/principals/runtimeProjectionPolicyRecovery.js +2 -2
  47. package/workflows/principals/runtimeProjectionPolicyRecovery.js.map +1 -1
  48. package/workflows/registration/provisionedPrincipalHistory.js +2 -2
  49. package/workflows/registration/provisionedPrincipalHistory.js.map +1 -1
  50. package/data/principals/principalRecoveryEpoch.js +0 -18
  51. package/data/principals/principalRecoveryEpoch.js.map +0 -1
  52. package/workflows/organizations/acknowledgedPrincipalPredecessor.js.map +0 -1
  53. package/workflows/organizations/initialPrincipalCurrentPublication.js.map +0 -1
  54. package/workflows/organizations/principalMutationJournalLane.js +0 -26
  55. package/workflows/organizations/principalMutationJournalLane.js.map +0 -1
  56. package/workflows/organizations/reconcileAcknowledgedPrincipalCurrent.js.map +0 -1
  57. package/workflows/principals/principalRecoveryQueue.js +0 -22
  58. package/workflows/principals/principalRecoveryQueue.js.map +0 -1
  59. /package/workflows/{organizations → principals}/principalCurrentPublicationSeal.js +0 -0
@@ -1,26 +0,0 @@
1
- import { principalMutationJournalScopeId, } from "../../data/principals/principalMutationJournal.js";
2
- import { resolveCanonicalExecSql, } from "../../data/sqlite/sqlSchema.js";
3
- const lanes = new WeakMap();
4
- /** An owned dispatch finishes before another caller can recover or abandon it. */
5
- export async function runPrincipalMutationJournalOperation(execSql, scope, run) {
6
- const executor = resolveCanonicalExecSql(execSql);
7
- const scopeId = await principalMutationJournalScopeId(scope);
8
- let active = lanes.get(executor);
9
- if (!active) {
10
- active = new Map();
11
- lanes.set(executor, active);
12
- }
13
- const pending = (active.get(scopeId) ?? Promise.resolve()).then(run);
14
- const settled = pending.then(() => { }, () => { });
15
- active.set(scopeId, settled);
16
- try {
17
- return await pending;
18
- }
19
- finally {
20
- if (active.get(scopeId) === settled)
21
- active.delete(scopeId);
22
- if (active.size === 0)
23
- lanes.delete(executor);
24
- }
25
- }
26
- //# sourceMappingURL=principalMutationJournalLane.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"principalMutationJournalLane.js","sourceRoot":"","sources":["principalMutationJournalLane.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,+BAA+B,GAChC,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAEL,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAErC,MAAM,KAAK,GAAG,IAAI,OAAO,EAAuC,CAAC;AAEjE,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,oCAAoC,CACxD,OAAgB,EAChB,KAAoC,EACpC,GAAqB;IAErB,MAAM,QAAQ,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,+BAA+B,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACnB,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAC1B,GAAG,EAAE,GAAE,CAAC,EACR,GAAG,EAAE,GAAE,CAAC,CACT,CAAC;IACF,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,OAAO;YAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;YAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;AACH,CAAC","sourcesContent":["import {\n type PrincipalMutationJournalScope,\n principalMutationJournalScopeId,\n} from \"../../data/principals/principalMutationJournal\";\nimport {\n type ExecSql,\n resolveCanonicalExecSql,\n} from \"../../data/sqlite/sqlSchema\";\n\nconst lanes = new WeakMap<ExecSql, Map<string, Promise<void>>>();\n\n/** An owned dispatch finishes before another caller can recover or abandon it. */\nexport async function runPrincipalMutationJournalOperation<T>(\n execSql: ExecSql,\n scope: PrincipalMutationJournalScope,\n run: () => Promise<T>,\n): Promise<T> {\n const executor = resolveCanonicalExecSql(execSql);\n const scopeId = await principalMutationJournalScopeId(scope);\n let active = lanes.get(executor);\n if (!active) {\n active = new Map();\n lanes.set(executor, active);\n }\n const pending = (active.get(scopeId) ?? Promise.resolve()).then(run);\n const settled = pending.then(\n () => {},\n () => {},\n );\n active.set(scopeId, settled);\n try {\n return await pending;\n } finally {\n if (active.get(scopeId) === settled) active.delete(scopeId);\n if (active.size === 0) lanes.delete(executor);\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"reconcileAcknowledgedPrincipalCurrent.js","sourceRoot":"","sources":["reconcileAcknowledgedPrincipalCurrent.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n KeyingVerificationError,\n type PrincipalPolicyCheckpoint,\n verifyPrincipalPolicyCurrent,\n} from \"@tearleads/crypto\";\nimport { loadPrincipalPolicyCheckpoint } from \"../../data/persistence/keyingCheckpointPersistence\";\nimport type {\n AcknowledgedPrincipalCurrentPublication,\n ReconciledPrincipalCurrentPublication,\n} from \"../../data/persistence/principalCurrentAcknowledgementPersistence\";\nimport { loadPrincipalHistoryPrefix } from \"../../data/persistence/principalHistoryPrefixPersistence\";\nimport { principalHeadMatchesReference } from \"../../data/principals/organizationAuthorityDescriptor\";\nimport {\n PrincipalHistoryEvidenceUnavailableError,\n selectRecoveredPrincipalHistory,\n} from \"../principals/principalHistoryRecoveryReferences\";\nimport type { RecoverPrincipalPolicyHistoryOptions } from \"../principals/principalHistoryRecoveryTypes\";\nimport { principalHistoryVerificationContext } from \"../principals/principalHistoryRecoveryVerification\";\nimport { restoreAcknowledgedPrincipalPrefix } from \"./acknowledgedPrincipalPredecessor\";\n\n/** Only the receipt is proven; a newer local pin needs scoped history covering it. */\nfunction reconcileReceiptOnly(\n publication: AcknowledgedPrincipalCurrentPublication,\n observedPrefixProgress: string | null,\n checkpoint: PrincipalPolicyCheckpoint | null,\n): ReconciledPrincipalCurrentPublication {\n // Other verified evidence, such as a document purge proof, can pin a newer\n // head without advancing this scope's prefix. That is honest progress this\n // receipt cannot prove membership in: retry after recovery, not a rollback.\n // A genesis receipt has no predecessor, so any existing pin stays a conflict.\n if (\n publication.predecessorStage &&\n checkpoint &&\n checkpoint.version > publication.policy.version\n )\n throw new PrincipalHistoryEvidenceUnavailableError(\n new KeyingVerificationError(\n \"missing_dependency\",\n \"A newer local principal pin is not covered by scoped history\",\n ),\n );\n return {\n ...publication,\n preservePrefix: false,\n observedPrefixProgress,\n observedCheckpoint: checkpoint,\n retainedPrefix: publication.prefix,\n checkpointPolicy: publication.policy,\n };\n}\n\n/** Prove an already observed successor contains this receipt before preserving it. */\nexport async function reconcileAcknowledgedPrincipalCurrent(\n input: RecoverPrincipalPolicyHistoryOptions,\n publication: AcknowledgedPrincipalCurrentPublication,\n): Promise<ReconciledPrincipalCurrentPublication> {\n const options = {\n ...input,\n protection: {\n ...input.protection,\n context: principalHistoryVerificationContext(input),\n },\n };\n const checkpoint = await loadPrincipalPolicyCheckpoint(\n options.execSql,\n publication.policy.principalType,\n publication.policy.principalId,\n );\n const saved = await loadPrincipalHistoryPrefix(\n options.execSql,\n publication.prefix.scopeId,\n );\n const observedPrefixProgress = saved?.progress ?? null;\n if (observedPrefixProgress === publication.previousPrefixProgress)\n return reconcileReceiptOnly(\n publication,\n observedPrefixProgress,\n checkpoint,\n );\n const restored = await restoreAcknowledgedPrincipalPrefix(options, saved);\n if (restored.previous.version < publication.policy.version) {\n if (\n !principalHeadMatchesReference(\n restored.previous.state,\n options.expectedHead,\n )\n )\n throw new KeyingVerificationError(\n \"stale_predecessor\",\n \"Acknowledgement does not extend the authenticated current prefix\",\n );\n return reconcileReceiptOnly(\n publication,\n observedPrefixProgress,\n checkpoint,\n );\n }\n const history = await selectRecoveredPrincipalHistory({\n options: { ...options, retainedReferences: [publication.policy.state] },\n scopeId: publication.prefix.scopeId,\n history: restored.history,\n checkpoint,\n });\n const policy = await verifyPrincipalPolicyCurrent({\n current: restored.artifacts,\n history,\n });\n if (!policy.ok) throw policy.error;\n return {\n ...publication,\n preservePrefix: true,\n observedPrefixProgress,\n observedCheckpoint: checkpoint,\n retainedPrefix: restored.saved,\n checkpointPolicy: policy.value,\n };\n}\n"]}
@@ -1,22 +0,0 @@
1
- // Directory and Admins stages are shared by every reference in an organization.
2
- // Coordinate runtime callers across warmer instances; different databases and
3
- // organizations keep independent queues. Completed queues retain no work.
4
- // Queued work must not re-enter this queue for the same organization.
5
- const queues = new WeakMap();
6
- export function queuePrincipalRecovery(execSql, organizationId, work) {
7
- let scoped = queues.get(execSql);
8
- if (!scoped) {
9
- scoped = new Map();
10
- queues.set(execSql, scoped);
11
- }
12
- const operation = (scoped.get(organizationId) ?? Promise.resolve()).then(work);
13
- const settled = operation.then(() => undefined, () => undefined);
14
- scoped.set(organizationId, settled);
15
- const owned = scoped;
16
- void settled.then(() => {
17
- if (owned.get(organizationId) === settled)
18
- owned.delete(organizationId);
19
- });
20
- return operation;
21
- }
22
- //# sourceMappingURL=principalRecoveryQueue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"principalRecoveryQueue.js","sourceRoot":"","sources":["principalRecoveryQueue.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,8EAA8E;AAC9E,0EAA0E;AAC1E,sEAAsE;AACtE,MAAM,MAAM,GAAG,IAAI,OAAO,EAAuC,CAAC;AAElE,MAAM,UAAU,sBAAsB,CACpC,OAAgB,EAChB,cAAsB,EACtB,IAAsB;IAEtB,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CACtE,IAAI,CACL,CAAC;IACF,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAC5B,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;IACF,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,MAAM,CAAC;IACrB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;QACrB,IAAI,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,OAAO;YAAE,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import type { ExecSql } from \"../../data/sqlite/sqlSchema\";\n\n// Directory and Admins stages are shared by every reference in an organization.\n// Coordinate runtime callers across warmer instances; different databases and\n// organizations keep independent queues. Completed queues retain no work.\n// Queued work must not re-enter this queue for the same organization.\nconst queues = new WeakMap<ExecSql, Map<string, Promise<void>>>();\n\nexport function queuePrincipalRecovery<T>(\n execSql: ExecSql,\n organizationId: string,\n work: () => Promise<T>,\n): Promise<T> {\n let scoped = queues.get(execSql);\n if (!scoped) {\n scoped = new Map();\n queues.set(execSql, scoped);\n }\n const operation = (scoped.get(organizationId) ?? Promise.resolve()).then(\n work,\n );\n const settled = operation.then(\n () => undefined,\n () => undefined,\n );\n scoped.set(organizationId, settled);\n const owned = scoped;\n void settled.then(() => {\n if (owned.get(organizationId) === settled) owned.delete(organizationId);\n });\n return operation;\n}\n"]}