@degenerate/generic 0.4.0 → 0.7.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 (166) hide show
  1. package/dist/_settings/cryptography-settings.d.ts +5 -1
  2. package/dist/_settings/cryptography-settings.d.ts.map +1 -1
  3. package/dist/_settings/cryptography-settings.js +5 -1
  4. package/dist/crypto/index.d.ts +5 -9
  5. package/dist/crypto/index.d.ts.map +1 -1
  6. package/dist/crypto/index.js +7 -9
  7. package/dist/crypto/private-public-keys/create-ed25519-keys-from-mnemonic.d.ts +22 -0
  8. package/dist/crypto/private-public-keys/create-ed25519-keys-from-mnemonic.d.ts.map +1 -0
  9. package/dist/crypto/private-public-keys/create-ed25519-keys-from-mnemonic.js +65 -0
  10. package/dist/crypto/private-public-keys/get-ed25519-public-key-from-private-key.d.ts +11 -0
  11. package/dist/crypto/private-public-keys/get-ed25519-public-key-from-private-key.d.ts.map +1 -0
  12. package/dist/crypto/private-public-keys/get-ed25519-public-key-from-private-key.js +15 -0
  13. package/dist/crypto/signature/create-ed25519-signature.d.ts +16 -0
  14. package/dist/crypto/signature/create-ed25519-signature.d.ts.map +1 -0
  15. package/dist/crypto/signature/create-ed25519-signature.js +26 -0
  16. package/dist/crypto/signature/ed25519-primitives.d.ts +25 -0
  17. package/dist/crypto/signature/ed25519-primitives.d.ts.map +1 -0
  18. package/dist/crypto/signature/ed25519-primitives.js +65 -0
  19. package/dist/crypto/signature/verify-ed25519-signature.d.ts +13 -0
  20. package/dist/crypto/signature/verify-ed25519-signature.d.ts.map +1 -0
  21. package/dist/crypto/signature/verify-ed25519-signature.js +31 -0
  22. package/dist/errors/index.d.ts +2 -0
  23. package/dist/errors/index.d.ts.map +1 -1
  24. package/dist/errors/index.js +2 -0
  25. package/dist/errors/library/library-errors.d.ts +101 -0
  26. package/dist/errors/library/library-errors.d.ts.map +1 -0
  27. package/dist/errors/library/library-errors.js +133 -0
  28. package/dist/errors/settlement/settlement-errors.d.ts +74 -0
  29. package/dist/errors/settlement/settlement-errors.d.ts.map +1 -0
  30. package/dist/errors/settlement/settlement-errors.js +93 -0
  31. package/dist/errors/share-data/share-data-errors.d.ts +21 -0
  32. package/dist/errors/share-data/share-data-errors.d.ts.map +1 -1
  33. package/dist/errors/share-data/share-data-errors.js +30 -1
  34. package/dist/helpers/apply-share-function.d.ts +23 -0
  35. package/dist/helpers/apply-share-function.d.ts.map +1 -0
  36. package/dist/helpers/apply-share-function.js +32 -0
  37. package/dist/helpers/index.d.ts +1 -0
  38. package/dist/helpers/index.d.ts.map +1 -1
  39. package/dist/helpers/index.js +1 -0
  40. package/dist/index.d.ts +2 -0
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +2 -0
  43. package/dist/library/authorize-library.d.ts +17 -0
  44. package/dist/library/authorize-library.d.ts.map +1 -0
  45. package/dist/library/authorize-library.js +39 -0
  46. package/dist/library/build-library.d.ts +49 -0
  47. package/dist/library/build-library.d.ts.map +1 -0
  48. package/dist/library/build-library.js +119 -0
  49. package/dist/library/caching-library-store.d.ts +19 -0
  50. package/dist/library/caching-library-store.d.ts.map +1 -0
  51. package/dist/library/caching-library-store.js +56 -0
  52. package/dist/library/canonical-json.d.ts +12 -0
  53. package/dist/library/canonical-json.d.ts.map +1 -0
  54. package/dist/library/canonical-json.js +30 -0
  55. package/dist/library/compile-rule-source.d.ts +21 -0
  56. package/dist/library/compile-rule-source.d.ts.map +1 -0
  57. package/dist/library/compile-rule-source.js +91 -0
  58. package/dist/library/evaluate-library-rules.d.ts +36 -0
  59. package/dist/library/evaluate-library-rules.d.ts.map +1 -0
  60. package/dist/library/evaluate-library-rules.js +47 -0
  61. package/dist/library/evaluate-library.d.ts +34 -0
  62. package/dist/library/evaluate-library.d.ts.map +1 -0
  63. package/dist/library/evaluate-library.js +66 -0
  64. package/dist/library/in-memory-library-store.d.ts +22 -0
  65. package/dist/library/in-memory-library-store.d.ts.map +1 -0
  66. package/dist/library/in-memory-library-store.js +92 -0
  67. package/dist/library/index.d.ts +18 -0
  68. package/dist/library/index.d.ts.map +1 -0
  69. package/dist/library/index.js +33 -0
  70. package/dist/library/library-hash.d.ts +9 -0
  71. package/dist/library/library-hash.d.ts.map +1 -0
  72. package/dist/library/library-hash.js +14 -0
  73. package/dist/library/library-models.d.ts +134 -0
  74. package/dist/library/library-models.d.ts.map +1 -0
  75. package/dist/library/library-models.js +84 -0
  76. package/dist/library/library-proof.d.ts +40 -0
  77. package/dist/library/library-proof.d.ts.map +1 -0
  78. package/dist/library/library-proof.js +44 -0
  79. package/dist/library/library-reference.d.ts +75 -0
  80. package/dist/library/library-reference.d.ts.map +1 -0
  81. package/dist/library/library-reference.js +98 -0
  82. package/dist/library/library-server.d.ts +17 -0
  83. package/dist/library/library-server.d.ts.map +1 -0
  84. package/dist/library/library-server.js +45 -0
  85. package/dist/library/library-store.d.ts +37 -0
  86. package/dist/library/library-store.d.ts.map +1 -0
  87. package/dist/library/library-store.js +2 -0
  88. package/dist/library/remote-library-models.d.ts +54 -0
  89. package/dist/library/remote-library-models.d.ts.map +1 -0
  90. package/dist/library/remote-library-models.js +2 -0
  91. package/dist/library/remote-library-store.d.ts +15 -0
  92. package/dist/library/remote-library-store.d.ts.map +1 -0
  93. package/dist/library/remote-library-store.js +59 -0
  94. package/dist/library/verify-library.d.ts +21 -0
  95. package/dist/library/verify-library.d.ts.map +1 -0
  96. package/dist/library/verify-library.js +86 -0
  97. package/dist/models/functions/share-data-function-models.d.ts +6 -74
  98. package/dist/models/functions/share-data-function-models.d.ts.map +1 -1
  99. package/dist/models/functions/share-data-function-models.js +7 -65
  100. package/dist/models/index.d.ts +1 -0
  101. package/dist/models/index.d.ts.map +1 -1
  102. package/dist/models/index.js +1 -0
  103. package/dist/models/safe/transactions/sharedata-transactions-models.d.ts +5 -0
  104. package/dist/models/safe/transactions/sharedata-transactions-models.d.ts.map +1 -1
  105. package/dist/models/settlement/settlement-models.d.ts +221 -0
  106. package/dist/models/settlement/settlement-models.d.ts.map +1 -0
  107. package/dist/models/settlement/settlement-models.js +152 -0
  108. package/dist/models/share-data/share-data-models.d.ts +12 -0
  109. package/dist/models/share-data/share-data-models.d.ts.map +1 -1
  110. package/dist/models/share-data/share-data-persistence-models.d.ts +3 -0
  111. package/dist/models/share-data/share-data-persistence-models.d.ts.map +1 -1
  112. package/dist/models/shareblock/shareblock-models.d.ts +179 -3
  113. package/dist/models/shareblock/shareblock-models.d.ts.map +1 -1
  114. package/dist/models/shareblock/shareblock-models.js +99 -7
  115. package/dist/sandbox/in-process-executor.d.ts +13 -0
  116. package/dist/sandbox/in-process-executor.d.ts.map +1 -0
  117. package/dist/sandbox/in-process-executor.js +31 -0
  118. package/dist/sandbox/index.d.ts +8 -0
  119. package/dist/sandbox/index.d.ts.map +1 -0
  120. package/dist/sandbox/index.js +23 -0
  121. package/dist/sandbox/remote-sandbox-executor.d.ts +12 -0
  122. package/dist/sandbox/remote-sandbox-executor.d.ts.map +1 -0
  123. package/dist/sandbox/remote-sandbox-executor.js +49 -0
  124. package/dist/sandbox/remote-sandbox-models.d.ts +37 -0
  125. package/dist/sandbox/remote-sandbox-models.d.ts.map +1 -0
  126. package/dist/sandbox/remote-sandbox-models.js +2 -0
  127. package/dist/sandbox/rule-evaluator.d.ts +32 -0
  128. package/dist/sandbox/rule-evaluator.d.ts.map +1 -0
  129. package/dist/sandbox/rule-evaluator.js +23 -0
  130. package/dist/sandbox/run-sandboxed.d.ts +24 -0
  131. package/dist/sandbox/run-sandboxed.d.ts.map +1 -0
  132. package/dist/sandbox/run-sandboxed.js +88 -0
  133. package/dist/sandbox/sandbox-models.d.ts +40 -0
  134. package/dist/sandbox/sandbox-models.d.ts.map +1 -0
  135. package/dist/sandbox/sandbox-models.js +2 -0
  136. package/dist/sandbox/sandbox-server.d.ts +22 -0
  137. package/dist/sandbox/sandbox-server.d.ts.map +1 -0
  138. package/dist/sandbox/sandbox-server.js +62 -0
  139. package/package.json +3 -4
  140. package/dist/crypto/private-public-keys/create-key-pair-from-mnemonic.d.ts +0 -12
  141. package/dist/crypto/private-public-keys/create-key-pair-from-mnemonic.d.ts.map +0 -1
  142. package/dist/crypto/private-public-keys/create-key-pair-from-mnemonic.js +0 -54
  143. package/dist/crypto/private-public-keys/create-key-pair-from-private-key.d.ts +0 -11
  144. package/dist/crypto/private-public-keys/create-key-pair-from-private-key.d.ts.map +0 -1
  145. package/dist/crypto/private-public-keys/create-key-pair-from-private-key.js +0 -50
  146. package/dist/crypto/private-public-keys/create-key-pair-from-public-key.d.ts +0 -11
  147. package/dist/crypto/private-public-keys/create-key-pair-from-public-key.d.ts.map +0 -1
  148. package/dist/crypto/private-public-keys/create-key-pair-from-public-key.js +0 -51
  149. package/dist/crypto/private-public-keys/generation/create-entropy-for-elliptical-curve.d.ts +0 -10
  150. package/dist/crypto/private-public-keys/generation/create-entropy-for-elliptical-curve.d.ts.map +0 -1
  151. package/dist/crypto/private-public-keys/generation/create-entropy-for-elliptical-curve.js +0 -51
  152. package/dist/crypto/private-public-keys/generation/generate-key-pair.d.ts +0 -11
  153. package/dist/crypto/private-public-keys/generation/generate-key-pair.d.ts.map +0 -1
  154. package/dist/crypto/private-public-keys/generation/generate-key-pair.js +0 -49
  155. package/dist/crypto/private-public-keys/generation/get-private-public-key-from-keypair.d.ts +0 -15
  156. package/dist/crypto/private-public-keys/generation/get-private-public-key-from-keypair.d.ts.map +0 -1
  157. package/dist/crypto/private-public-keys/generation/get-private-public-key-from-keypair.js +0 -21
  158. package/dist/crypto/signature/create-crypto-signature.d.ts +0 -20
  159. package/dist/crypto/signature/create-crypto-signature.d.ts.map +0 -1
  160. package/dist/crypto/signature/create-crypto-signature.js +0 -26
  161. package/dist/crypto/signature/verify-crypto-signature-by-data.d.ts +0 -17
  162. package/dist/crypto/signature/verify-crypto-signature-by-data.d.ts.map +0 -1
  163. package/dist/crypto/signature/verify-crypto-signature-by-data.js +0 -61
  164. package/dist/crypto/signature/verify-crypto-signature-by-hash.d.ts +0 -17
  165. package/dist/crypto/signature/verify-crypto-signature-by-hash.d.ts.map +0 -1
  166. package/dist/crypto/signature/verify-crypto-signature-by-hash.js +0 -58
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LibraryEntityInvalidError = exports.LibraryVersionNotFoundError = exports.LibraryEntityNotFoundError = exports.LibraryKindMismatchError = exports.LibraryStoreConflictError = exports.LibraryVersionNotAuthorizedError = exports.LibraryDelegationNotAuthorizedError = exports.LibraryProofInvalidError = exports.LibraryChainBrokenError = exports.LibraryVersionHashMismatchError = void 0;
4
+ const base_error_1 = require("../base-error");
5
+ /**
6
+ * Thrown when a library version's recorded `currentHash` does not match the
7
+ * hash recomputed from its `source` + `previousHash`. The content of the
8
+ * version has been altered (or the hash was forged).
9
+ */
10
+ class LibraryVersionHashMismatchError extends base_error_1.BaseError {
11
+ constructor(entityId, claimedHash, recomputedHash) {
12
+ super(`Library ${entityId}: version hash mismatch — recorded ${claimedHash}, recomputed ${recomputedHash}.`);
13
+ this.entityId = entityId;
14
+ this.claimedHash = claimedHash;
15
+ this.recomputedHash = recomputedHash;
16
+ }
17
+ }
18
+ exports.LibraryVersionHashMismatchError = LibraryVersionHashMismatchError;
19
+ /**
20
+ * Thrown when a version's `previousHash` does not equal the `currentHash` of
21
+ * the version before it (the prior version's hash, or the empty seed for the
22
+ * first version). The append-only chain has been broken or reordered.
23
+ */
24
+ class LibraryChainBrokenError extends base_error_1.BaseError {
25
+ constructor(entityId, expectedPreviousHash, actualPreviousHash) {
26
+ super(`Library ${entityId}: broken version chain — expected previousHash ${expectedPreviousHash || '<seed>'}, got ${actualPreviousHash || '<seed>'}.`);
27
+ this.entityId = entityId;
28
+ this.expectedPreviousHash = expectedPreviousHash;
29
+ this.actualPreviousHash = actualPreviousHash;
30
+ }
31
+ }
32
+ exports.LibraryChainBrokenError = LibraryChainBrokenError;
33
+ /**
34
+ * Thrown when a version or head proof's Ed25519 signature does not verify
35
+ * against the canonical, purpose-bound payload reconstructed from the record.
36
+ * A signature was forged, or a signed field (including metadata such as
37
+ * `createdAt`, which is bound by the signature though not by the content hash)
38
+ * was tampered with.
39
+ */
40
+ class LibraryProofInvalidError extends base_error_1.BaseError {
41
+ constructor(entityId, proofKind) {
42
+ super(`Library ${entityId}: ${proofKind} proof signature did not verify.`);
43
+ this.entityId = entityId;
44
+ this.proofKind = proofKind;
45
+ }
46
+ }
47
+ exports.LibraryProofInvalidError = LibraryProofInvalidError;
48
+ /**
49
+ * Thrown when a delegation is registered by a key that is not the entity owner.
50
+ * Only the owner (the key that signed the first version) may delegate, which
51
+ * also blocks transitive delegation — a delegate's key is never the owner key,
52
+ * so a delegate can never register further delegates.
53
+ */
54
+ class LibraryDelegationNotAuthorizedError extends base_error_1.BaseError {
55
+ constructor(entityId, attemptedBy, reason) {
56
+ super(`Library ${entityId}: delegation not authorized${reason ? ` (${reason})` : ''} — attempted by ${attemptedBy}.`);
57
+ this.entityId = entityId;
58
+ this.attemptedBy = attemptedBy;
59
+ }
60
+ }
61
+ exports.LibraryDelegationNotAuthorizedError = LibraryDelegationNotAuthorizedError;
62
+ /**
63
+ * Thrown when a version's signer is neither the entity owner nor a verified
64
+ * delegate. Signature validity alone only proves *someone* signed the version;
65
+ * this proves the *authorized* someone did.
66
+ */
67
+ class LibraryVersionNotAuthorizedError extends base_error_1.BaseError {
68
+ constructor(entityId, signerPublicKey) {
69
+ super(`Library ${entityId}: version signer ${signerPublicKey} is not the owner or an authorized delegate.`);
70
+ this.entityId = entityId;
71
+ this.signerPublicKey = signerPublicKey;
72
+ }
73
+ }
74
+ exports.LibraryVersionNotAuthorizedError = LibraryVersionNotAuthorizedError;
75
+ /**
76
+ * Thrown when a store `save` would violate the append-only ledger: the incoming
77
+ * entity truncates or diverges from the stored history rather than extending it.
78
+ * The ledger may only grow, and existing versions may never change.
79
+ */
80
+ class LibraryStoreConflictError extends base_error_1.BaseError {
81
+ constructor(entityId, reason) {
82
+ super(`Library ${entityId}: store conflict — ${reason}.`);
83
+ this.entityId = entityId;
84
+ this.reason = reason;
85
+ }
86
+ }
87
+ exports.LibraryStoreConflictError = LibraryStoreConflictError;
88
+ /**
89
+ * Thrown when an entity is evaluated as the wrong kind — e.g. evaluating a rule
90
+ * entity through the function path. The entity is valid; the call is not.
91
+ */
92
+ class LibraryKindMismatchError extends base_error_1.BaseError {
93
+ constructor(entityId, expected, actual) {
94
+ super(`Library ${entityId}: expected a ${expected} entity, got a ${actual}.`);
95
+ this.entityId = entityId;
96
+ this.expected = expected;
97
+ this.actual = actual;
98
+ }
99
+ }
100
+ exports.LibraryKindMismatchError = LibraryKindMismatchError;
101
+ /** Thrown when a reference resolves to an id the store does not hold. */
102
+ class LibraryEntityNotFoundError extends base_error_1.BaseError {
103
+ constructor(entityId) {
104
+ super(`Library ${entityId}: entity not found in store.`);
105
+ this.entityId = entityId;
106
+ }
107
+ }
108
+ exports.LibraryEntityNotFoundError = LibraryEntityNotFoundError;
109
+ /**
110
+ * Thrown when a reference pins a `currentHash` that is not present in the
111
+ * entity's version ledger (e.g. a stale or forged reference).
112
+ */
113
+ class LibraryVersionNotFoundError extends base_error_1.BaseError {
114
+ constructor(entityId, currentHash) {
115
+ super(`Library ${entityId}: no version ${currentHash} in the ledger.`);
116
+ this.entityId = entityId;
117
+ this.currentHash = currentHash;
118
+ }
119
+ }
120
+ exports.LibraryVersionNotFoundError = LibraryVersionNotFoundError;
121
+ /**
122
+ * Thrown when a library entity is structurally invalid: no versions, an `id`
123
+ * that is not the first version's `currentHash` (identity is content-addressed
124
+ * to the first version), a `head` that does not match the latest version, or an
125
+ * out-of-range `gasLimit`.
126
+ */
127
+ class LibraryEntityInvalidError extends base_error_1.BaseError {
128
+ constructor(reason) {
129
+ super(`Library entity invalid: ${reason}.`);
130
+ this.reason = reason;
131
+ }
132
+ }
133
+ exports.LibraryEntityInvalidError = LibraryEntityInvalidError;
@@ -0,0 +1,74 @@
1
+ import { BaseError } from '../base-error';
2
+ import { SettlementPhase } from '../../models/settlement/settlement-models';
3
+ /**
4
+ * Thrown when a settlement leg's target block has advanced since the leg was
5
+ * signed. The leg's `againstHash` no longer matches the block's current-state
6
+ * hash, so reserving against it would bind a stale transition (D5 drift
7
+ * guard). The orchestrator treats this as a reserve failure and aborts the
8
+ * whole settlement.
9
+ */
10
+ export declare class SettlementLegDriftError extends BaseError {
11
+ readonly settlementId: string;
12
+ readonly blockId: string;
13
+ readonly expectedHash: string;
14
+ readonly actualHash: string;
15
+ constructor(settlementId: string, blockId: string, expectedHash: string, actualHash: string);
16
+ }
17
+ /**
18
+ * Thrown when a coordinator phase transition is illegal under the 2PC graph
19
+ * (e.g. `PREPARING → COMMITTED` skipping `COMMITTING`, or any move out of a
20
+ * terminal phase). Enforced by `buildSettlementPhaseRule`.
21
+ */
22
+ export declare class SettlementPhaseError extends BaseError {
23
+ readonly settlementId: string;
24
+ readonly fromPhase: SettlementPhase;
25
+ readonly toPhase: SettlementPhase;
26
+ constructor(settlementId: string, fromPhase: SettlementPhase, toPhase: SettlementPhase);
27
+ }
28
+ /**
29
+ * Thrown when a settlement tries to reserve against a block that already holds
30
+ * a different, conflicting reservation under the same `settlementId`. (A
31
+ * re-drive with identical terms is idempotent and is not a conflict.)
32
+ */
33
+ export declare class SettlementReservationConflictError extends BaseError {
34
+ readonly settlementId: string;
35
+ readonly blockId: string;
36
+ constructor(settlementId: string, blockId: string);
37
+ }
38
+ /**
39
+ * Thrown when an operation references a leg (by `blockId`) that is not part of
40
+ * the settlement's plan.
41
+ */
42
+ export declare class SettlementLegNotFoundError extends BaseError {
43
+ readonly settlementId: string;
44
+ readonly blockId: string;
45
+ constructor(settlementId: string, blockId: string);
46
+ }
47
+ /**
48
+ * Thrown when a mutating operation targets a settlement already in a terminal
49
+ * phase (`COMMITTED` or `ABORTED`). The journal says it finished; it cannot be
50
+ * reopened.
51
+ */
52
+ export declare class SettlementAlreadyTerminalError extends BaseError {
53
+ readonly settlementId: string;
54
+ readonly phase: SettlementPhase;
55
+ constructor(settlementId: string, phase: SettlementPhase);
56
+ }
57
+ /**
58
+ * Thrown when a leg's block-side reserve does not take hold — the member block
59
+ * refused the PREPARE. The reserve function no-ops (returns `current`) on an
60
+ * overdraw, a closed block, a currency mismatch, or malformed input, and the
61
+ * rule engine can reject a crafted proposal; in every case the post-condition
62
+ * (`reservations[settlementId]` present and matching the leg) is unmet. The
63
+ * in-process executor surfaces that as this error, which the orchestrator
64
+ * treats as a reserve failure and aborts the whole settlement. `reason` carries
65
+ * human-readable context (the underlying cause cannot always be distinguished
66
+ * from a no-op flag alone).
67
+ */
68
+ export declare class SettlementLegReserveFailedError extends BaseError {
69
+ readonly settlementId: string;
70
+ readonly blockId: string;
71
+ readonly reason: string;
72
+ constructor(settlementId: string, blockId: string, reason: string);
73
+ }
74
+ //# sourceMappingURL=settlement-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settlement-errors.d.ts","sourceRoot":"","sources":["../../../src/errors/settlement/settlement-errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAE5E;;;;;;GAMG;AACH,qBAAa,uBAAwB,SAAQ,SAAS;IAClD,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,UAAU,EAAE,MAAM,CAAC;gBAEvB,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAS9F;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,SAAS;IAC/C,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,SAAS,EAAE,eAAe,CAAC;IAC3C,SAAgB,OAAO,EAAE,eAAe,CAAC;gBAE7B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe;CAQzF;AAED;;;;GAIG;AACH,qBAAa,kCAAmC,SAAQ,SAAS;IAC7D,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAOpD;AAED;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,SAAS;IACrD,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAOpD;AAED;;;;GAIG;AACH,qBAAa,8BAA+B,SAAQ,SAAS;IACzD,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,KAAK,EAAE,eAAe,CAAC;gBAE3B,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe;CAO3D;AAED;;;;;;;;;;GAUG;AACH,qBAAa,+BAAgC,SAAQ,SAAS;IAC1D,SAAgB,YAAY,EAAE,MAAM,CAAC;IACrC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAEnB,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAQpE"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SettlementLegReserveFailedError = exports.SettlementAlreadyTerminalError = exports.SettlementLegNotFoundError = exports.SettlementReservationConflictError = exports.SettlementPhaseError = exports.SettlementLegDriftError = void 0;
4
+ const base_error_1 = require("../base-error");
5
+ /**
6
+ * Thrown when a settlement leg's target block has advanced since the leg was
7
+ * signed. The leg's `againstHash` no longer matches the block's current-state
8
+ * hash, so reserving against it would bind a stale transition (D5 drift
9
+ * guard). The orchestrator treats this as a reserve failure and aborts the
10
+ * whole settlement.
11
+ */
12
+ class SettlementLegDriftError extends base_error_1.BaseError {
13
+ constructor(settlementId, blockId, expectedHash, actualHash) {
14
+ super(`Settlement ${settlementId}: block ${blockId} drifted — leg signed against ${expectedHash}, block is now ${actualHash}.`);
15
+ this.settlementId = settlementId;
16
+ this.blockId = blockId;
17
+ this.expectedHash = expectedHash;
18
+ this.actualHash = actualHash;
19
+ }
20
+ }
21
+ exports.SettlementLegDriftError = SettlementLegDriftError;
22
+ /**
23
+ * Thrown when a coordinator phase transition is illegal under the 2PC graph
24
+ * (e.g. `PREPARING → COMMITTED` skipping `COMMITTING`, or any move out of a
25
+ * terminal phase). Enforced by `buildSettlementPhaseRule`.
26
+ */
27
+ class SettlementPhaseError extends base_error_1.BaseError {
28
+ constructor(settlementId, fromPhase, toPhase) {
29
+ super(`Settlement ${settlementId}: illegal phase transition ${fromPhase} → ${toPhase}.`);
30
+ this.settlementId = settlementId;
31
+ this.fromPhase = fromPhase;
32
+ this.toPhase = toPhase;
33
+ }
34
+ }
35
+ exports.SettlementPhaseError = SettlementPhaseError;
36
+ /**
37
+ * Thrown when a settlement tries to reserve against a block that already holds
38
+ * a different, conflicting reservation under the same `settlementId`. (A
39
+ * re-drive with identical terms is idempotent and is not a conflict.)
40
+ */
41
+ class SettlementReservationConflictError extends base_error_1.BaseError {
42
+ constructor(settlementId, blockId) {
43
+ super(`Settlement ${settlementId}: block ${blockId} already has a conflicting reservation for this settlement.`);
44
+ this.settlementId = settlementId;
45
+ this.blockId = blockId;
46
+ }
47
+ }
48
+ exports.SettlementReservationConflictError = SettlementReservationConflictError;
49
+ /**
50
+ * Thrown when an operation references a leg (by `blockId`) that is not part of
51
+ * the settlement's plan.
52
+ */
53
+ class SettlementLegNotFoundError extends base_error_1.BaseError {
54
+ constructor(settlementId, blockId) {
55
+ super(`Settlement ${settlementId}: no leg for block ${blockId} in the plan.`);
56
+ this.settlementId = settlementId;
57
+ this.blockId = blockId;
58
+ }
59
+ }
60
+ exports.SettlementLegNotFoundError = SettlementLegNotFoundError;
61
+ /**
62
+ * Thrown when a mutating operation targets a settlement already in a terminal
63
+ * phase (`COMMITTED` or `ABORTED`). The journal says it finished; it cannot be
64
+ * reopened.
65
+ */
66
+ class SettlementAlreadyTerminalError extends base_error_1.BaseError {
67
+ constructor(settlementId, phase) {
68
+ super(`Settlement ${settlementId}: already terminal (${phase}); no further transitions allowed.`);
69
+ this.settlementId = settlementId;
70
+ this.phase = phase;
71
+ }
72
+ }
73
+ exports.SettlementAlreadyTerminalError = SettlementAlreadyTerminalError;
74
+ /**
75
+ * Thrown when a leg's block-side reserve does not take hold — the member block
76
+ * refused the PREPARE. The reserve function no-ops (returns `current`) on an
77
+ * overdraw, a closed block, a currency mismatch, or malformed input, and the
78
+ * rule engine can reject a crafted proposal; in every case the post-condition
79
+ * (`reservations[settlementId]` present and matching the leg) is unmet. The
80
+ * in-process executor surfaces that as this error, which the orchestrator
81
+ * treats as a reserve failure and aborts the whole settlement. `reason` carries
82
+ * human-readable context (the underlying cause cannot always be distinguished
83
+ * from a no-op flag alone).
84
+ */
85
+ class SettlementLegReserveFailedError extends base_error_1.BaseError {
86
+ constructor(settlementId, blockId, reason) {
87
+ super(`Settlement ${settlementId}: reserve failed for block ${blockId} — ${reason}.`);
88
+ this.settlementId = settlementId;
89
+ this.blockId = blockId;
90
+ this.reason = reason;
91
+ }
92
+ }
93
+ exports.SettlementLegReserveFailedError = SettlementLegReserveFailedError;
@@ -1,6 +1,19 @@
1
+ import { z } from 'zod';
1
2
  import { BaseError } from '../base-error';
2
3
  import { ShareDataTypes } from '../../models/share-data/share-data-models';
3
4
  import { IShareDataFunction } from '../../models/functions/share-data-function-models';
5
+ /**
6
+ * Thrown when a share function's runtime input fails its declared
7
+ * `inputSchema` (input well-formedness). Distinct from a stateful no-op: a
8
+ * malformed input is a caller/attacker error, surfaced explicitly rather than
9
+ * collapsed into a silent "no change". Carries the function id and the Zod
10
+ * issue list so callers (and HTTP layers) can render a precise rejection.
11
+ */
12
+ export declare class ShareFunctionInputInvalidError extends BaseError {
13
+ readonly functionId?: string;
14
+ readonly issues: z.ZodError['issues'];
15
+ constructor(functionId: string | undefined, error: z.ZodError);
16
+ }
4
17
  /**
5
18
  * This error is thrown when a function is tried to be applied to the share data thats state is locked.
6
19
  */
@@ -19,6 +32,14 @@ export declare class ShareDataCurrentAndProposalDataMatchesError extends BaseErr
19
32
  */
20
33
  constructor(shareDataId: string);
21
34
  }
35
+ /**
36
+ * Thrown when a block carries library rule references but no library store has
37
+ * been injected to resolve them. Fail-closed: rather than silently skip the
38
+ * governing rules, evaluation refuses to proceed.
39
+ */
40
+ export declare class ShareDataLibraryStoreNotSetError extends BaseError {
41
+ constructor(shareDataId: string);
42
+ }
22
43
  /**
23
44
  * This error is thrown when the share data integrity check fails.
24
45
  */
@@ -1 +1 @@
1
- {"version":3,"file":"share-data-errors.d.ts","sourceRoot":"","sources":["../../../src/errors/share-data/share-data-errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AAEvF;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;IACjD;;OAEG;gBACS,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc;CAGjE;AAED;;GAEG;AACH,qBAAa,2CAA4C,SAAQ,SAAS;IACtE;;OAEG;gBACS,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,SAAS;IAClD;;OAEG;gBACS,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,yDAA0D,SAAQ,SAAS;IACpF;;OAEG;gBACS,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAI5E;AAGD;;GAEG;AACH,qBAAa,6BAA8B,SAAQ,SAAS;IACxD;;OAEG;gBACS,WAAW,EAAE,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM;CAIjG;AAKD;;GAEG;AACH,qBAAa,yCAA0C,SAAQ,SAAS;IACpE;;OAEG;gBACS,MAAM,EAAE,MAAM;CAG7B;AAED;;GAEG;AACH,qBAAa,0CAA2C,SAAQ,SAAS;IACrE;;OAEG;gBACS,MAAM,EAAE,MAAM;CAG7B;AAID;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,SAAS;gBAC1C,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;gBACrC,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,SAAS;gBACtC,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,iCAAkC,SAAQ,SAAS;gBAChD,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,6CAA8C,SAAQ,SAAS;gBAC5D,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,+BAAgC,SAAQ,SAAS;gBAC9C,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,0CAA2C,SAAQ,SAAS;gBACzD,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,mCAAoC,SAAQ,SAAS;gBAClD,WAAW,EAAE,MAAM;CAGlC;AAED;;;;;;;;;GASG;AACH,qBAAa,oCAAqC,SAAQ,SAAS;gBACnD,WAAW,EAAE,MAAM;CAGlC;AAED;;;;;;;;;GASG;AACH,qBAAa,sCAAuC,SAAQ,SAAS;gBACrD,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM;CAM5D;AAED;;;;;;;;;GASG;AACH,qBAAa,qCAAsC,SAAQ,SAAS;gBACpD,WAAW,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM;CAOhE;AAED;;;GAGG;AACH,qBAAa,sCAAuC,SAAQ,SAAS;gBACrD,WAAW,EAAE,MAAM;CAIlC;AAED;;;;;;GAMG;AACH,qBAAa,yBAA0B,SAAQ,SAAS;gBACxC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAGlD"}
1
+ {"version":3,"file":"share-data-errors.d.ts","sourceRoot":"","sources":["../../../src/errors/share-data/share-data-errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AAEvF;;;;;;GAMG;AACH,qBAAa,8BAA+B,SAAQ,SAAS;IACzD,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpC,SAAgB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAEjC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ;CAQhE;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;IACjD;;OAEG;gBACS,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc;CAGjE;AAED;;GAEG;AACH,qBAAa,2CAA4C,SAAQ,SAAS;IACtE;;OAEG;gBACS,WAAW,EAAE,MAAM;CAGlC;AAED;;;;GAIG;AACH,qBAAa,gCAAiC,SAAQ,SAAS;gBAC/C,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,SAAS;IAClD;;OAEG;gBACS,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,yDAA0D,SAAQ,SAAS;IACpF;;OAEG;gBACS,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAI5E;AAGD;;GAEG;AACH,qBAAa,6BAA8B,SAAQ,SAAS;IACxD;;OAEG;gBACS,WAAW,EAAE,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM;CAIjG;AAKD;;GAEG;AACH,qBAAa,yCAA0C,SAAQ,SAAS;IACpE;;OAEG;gBACS,MAAM,EAAE,MAAM;CAG7B;AAED;;GAEG;AACH,qBAAa,0CAA2C,SAAQ,SAAS;IACrE;;OAEG;gBACS,MAAM,EAAE,MAAM;CAG7B;AAID;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,SAAS;gBAC1C,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;gBACrC,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,SAAS;gBACtC,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,iCAAkC,SAAQ,SAAS;gBAChD,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,6CAA8C,SAAQ,SAAS;gBAC5D,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,+BAAgC,SAAQ,SAAS;gBAC9C,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,0CAA2C,SAAQ,SAAS;gBACzD,WAAW,EAAE,MAAM;CAGlC;AAED;;GAEG;AACH,qBAAa,mCAAoC,SAAQ,SAAS;gBAClD,WAAW,EAAE,MAAM;CAGlC;AAED;;;;;;;;;GASG;AACH,qBAAa,oCAAqC,SAAQ,SAAS;gBACnD,WAAW,EAAE,MAAM;CAGlC;AAED;;;;;;;;;GASG;AACH,qBAAa,sCAAuC,SAAQ,SAAS;gBACrD,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM;CAM5D;AAED;;;;;;;;;GASG;AACH,qBAAa,qCAAsC,SAAQ,SAAS;gBACpD,WAAW,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM;CAOhE;AAED;;;GAGG;AACH,qBAAa,sCAAuC,SAAQ,SAAS;gBACrD,WAAW,EAAE,MAAM;CAIlC;AAED;;;;;;GAMG;AACH,qBAAa,yBAA0B,SAAQ,SAAS;gBACxC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAGlD"}
@@ -1,7 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ShareDataPersistenceError = exports.ShareDataPreviousHashNotAvailableError = exports.ShareDataDelegationNotAuthorizedError = exports.ShareDataTransactionNotAuthorizedError = exports.ShareDataTransactionProofFailedError = exports.ShareDataStructuralProofFailedError = exports.ShareDataStructuralProofAlreadyExistsError = exports.ShareDataCryptoProofFailedError = exports.CryptoInitializationPublicKeyIsDifferentError = exports.ShareDataCryptoAlreadyExistsError = exports.ShareDataDuplicateError = exports.ShareDataNotFoundError = exports.ShareDataAlreadyExistsError = exports.ShareRuleProposedConditionsNotPresentError = exports.ShareRuleCurrentConditionsNotPresentError = exports.ShareDataFunctionHashNotValid = exports.ShareDataFunctionBeingAppliedDoesNotExistOnShareDataError = exports.ShareDataIntegrityError = exports.ShareDataCurrentAndProposalDataMatchesError = exports.ShareDataIsLockedError = void 0;
3
+ exports.ShareDataPersistenceError = exports.ShareDataPreviousHashNotAvailableError = exports.ShareDataDelegationNotAuthorizedError = exports.ShareDataTransactionNotAuthorizedError = exports.ShareDataTransactionProofFailedError = exports.ShareDataStructuralProofFailedError = exports.ShareDataStructuralProofAlreadyExistsError = exports.ShareDataCryptoProofFailedError = exports.CryptoInitializationPublicKeyIsDifferentError = exports.ShareDataCryptoAlreadyExistsError = exports.ShareDataDuplicateError = exports.ShareDataNotFoundError = exports.ShareDataAlreadyExistsError = exports.ShareRuleProposedConditionsNotPresentError = exports.ShareRuleCurrentConditionsNotPresentError = exports.ShareDataFunctionHashNotValid = exports.ShareDataFunctionBeingAppliedDoesNotExistOnShareDataError = exports.ShareDataIntegrityError = exports.ShareDataLibraryStoreNotSetError = exports.ShareDataCurrentAndProposalDataMatchesError = exports.ShareDataIsLockedError = exports.ShareFunctionInputInvalidError = void 0;
4
4
  const base_error_1 = require("../base-error");
5
+ /**
6
+ * Thrown when a share function's runtime input fails its declared
7
+ * `inputSchema` (input well-formedness). Distinct from a stateful no-op: a
8
+ * malformed input is a caller/attacker error, surfaced explicitly rather than
9
+ * collapsed into a silent "no change". Carries the function id and the Zod
10
+ * issue list so callers (and HTTP layers) can render a precise rejection.
11
+ */
12
+ class ShareFunctionInputInvalidError extends base_error_1.BaseError {
13
+ constructor(functionId, error) {
14
+ const detail = error.issues
15
+ .map((issue) => `${issue.path.join('.') || '(root)'}: ${issue.message}`)
16
+ .join('; ');
17
+ super(`Input for share function ${functionId ?? '(anonymous)'} is invalid: ${detail}`);
18
+ this.functionId = functionId;
19
+ this.issues = error.issues;
20
+ }
21
+ }
22
+ exports.ShareFunctionInputInvalidError = ShareFunctionInputInvalidError;
5
23
  /**
6
24
  * This error is thrown when a function is tried to be applied to the share data thats state is locked.
7
25
  */
@@ -26,6 +44,17 @@ class ShareDataCurrentAndProposalDataMatchesError extends base_error_1.BaseError
26
44
  }
27
45
  }
28
46
  exports.ShareDataCurrentAndProposalDataMatchesError = ShareDataCurrentAndProposalDataMatchesError;
47
+ /**
48
+ * Thrown when a block carries library rule references but no library store has
49
+ * been injected to resolve them. Fail-closed: rather than silently skip the
50
+ * governing rules, evaluation refuses to proceed.
51
+ */
52
+ class ShareDataLibraryStoreNotSetError extends base_error_1.BaseError {
53
+ constructor(shareDataId) {
54
+ super(`Share data with id ${shareDataId} has rule references but no library store set to resolve them.`);
55
+ }
56
+ }
57
+ exports.ShareDataLibraryStoreNotSetError = ShareDataLibraryStoreNotSetError;
29
58
  /**
30
59
  * This error is thrown when the share data integrity check fails.
31
60
  */
@@ -0,0 +1,23 @@
1
+ import { IShareFunction } from '../models/share-data/share-data-models';
2
+ /**
3
+ * Validates a share function's runtime input against its declared
4
+ * `inputSchema`, if any. Opt-in: a function with no schema is not checked.
5
+ * Throws {@link ShareFunctionInputInvalidError} (carrying the function id and
6
+ * the Zod issues) on a malformed input — input well-formedness only; stateful
7
+ * legality stays in `func` / the rule engine.
8
+ */
9
+ export declare const validateShareFunctionInput: (fn: Pick<IShareFunction<unknown, any, unknown>, "id" | "inputSchema">, input: unknown) => void;
10
+ /**
11
+ * The single place a share function turns an `input` into a proposed state:
12
+ * validate the input first (throwing on malformed), then run `func`. Both
13
+ * application points (`safeSubmitTransaction` and the manager proposer) route
14
+ * through here, so the input contract cannot be silently bypassed.
15
+ */
16
+ export declare const applyShareFunction: <TState, TInput>(fn: IShareFunction<{
17
+ current: TState;
18
+ input: TInput;
19
+ }, (args: {
20
+ current: TState;
21
+ input: TInput;
22
+ }) => TState, TState>, current: TState, input: TInput) => TState;
23
+ //# sourceMappingURL=apply-share-function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-share-function.d.ts","sourceRoot":"","sources":["../../src/helpers/apply-share-function.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAExE;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,GACnC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,IAAI,GAAG,aAAa,CAAC,EACrE,OAAO,OAAO,KACf,IAQF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,EAAE,MAAM,EAC7C,IAAI,cAAc,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KAAK,MAAM,EAAE,MAAM,CAAC,EACpH,SAAS,MAAM,EACf,OAAO,MAAM,KACd,MAGF,CAAC"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyShareFunction = exports.validateShareFunctionInput = void 0;
4
+ const share_data_errors_1 = require("../errors/share-data/share-data-errors");
5
+ /**
6
+ * Validates a share function's runtime input against its declared
7
+ * `inputSchema`, if any. Opt-in: a function with no schema is not checked.
8
+ * Throws {@link ShareFunctionInputInvalidError} (carrying the function id and
9
+ * the Zod issues) on a malformed input — input well-formedness only; stateful
10
+ * legality stays in `func` / the rule engine.
11
+ */
12
+ const validateShareFunctionInput = (fn, input) => {
13
+ if (!fn.inputSchema) {
14
+ return; // opt-in: no schema, no check
15
+ }
16
+ const result = fn.inputSchema.safeParse(input);
17
+ if (!result.success) {
18
+ throw new share_data_errors_1.ShareFunctionInputInvalidError(fn.id, result.error);
19
+ }
20
+ };
21
+ exports.validateShareFunctionInput = validateShareFunctionInput;
22
+ /**
23
+ * The single place a share function turns an `input` into a proposed state:
24
+ * validate the input first (throwing on malformed), then run `func`. Both
25
+ * application points (`safeSubmitTransaction` and the manager proposer) route
26
+ * through here, so the input contract cannot be silently bypassed.
27
+ */
28
+ const applyShareFunction = (fn, current, input) => {
29
+ (0, exports.validateShareFunctionInput)(fn, input);
30
+ return fn.func({ current, input });
31
+ };
32
+ exports.applyShareFunction = applyShareFunction;
@@ -1,6 +1,7 @@
1
1
  export * from './id-helpers';
2
2
  export * from './object-helpers';
3
3
  export * from './object-validation-helpers';
4
+ export * from './apply-share-function';
4
5
  export * from './request/params-object-helpers';
5
6
  export * from './request/query-object-helpers';
6
7
  export * from './request/request-object-helpers';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAM5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AAKjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AAMvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AAKjD,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC"}
@@ -18,6 +18,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
18
18
  __exportStar(require("./id-helpers"), exports);
19
19
  __exportStar(require("./object-helpers"), exports);
20
20
  __exportStar(require("./object-validation-helpers"), exports);
21
+ __exportStar(require("./apply-share-function"), exports);
21
22
  // #endregion main exports
22
23
  // #region request exports
23
24
  __exportStar(require("./request/params-object-helpers"), exports);
package/dist/index.d.ts CHANGED
@@ -5,5 +5,7 @@ export * from './authorization';
5
5
  export * from './crypto';
6
6
  export * from './errors';
7
7
  export * from './helpers';
8
+ export * from './library';
8
9
  export * from './models';
10
+ export * from './sandbox';
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAM9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAM9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -25,4 +25,6 @@ __exportStar(require("./authorization"), exports);
25
25
  __exportStar(require("./crypto"), exports);
26
26
  __exportStar(require("./errors"), exports);
27
27
  __exportStar(require("./helpers"), exports);
28
+ __exportStar(require("./library"), exports);
28
29
  __exportStar(require("./models"), exports);
30
+ __exportStar(require("./sandbox"), exports);
@@ -0,0 +1,17 @@
1
+ import { ILibraryDelegation, ILibraryEntity } from './library-models';
2
+ /**
3
+ * Whether `delegation` is a genuine, owner-signed grant for this entity: its
4
+ * proof must be signed by the entity owner over the canonical, purpose-bound
5
+ * payload that binds the entity id and the granted key. A forged delegation
6
+ * entry (no valid owner signature) returns `false`.
7
+ */
8
+ export declare const isValidLibraryDelegation: (entity: ILibraryEntity, delegation: ILibraryDelegation) => boolean;
9
+ /**
10
+ * Whether `publicKey` may append a version to `entity`: the owner is always
11
+ * authorized; a delegated key is authorized only if it carries a valid,
12
+ * owner-signed delegation. This is the single predicate behind the append gate
13
+ * and the per-version authorization check in `verifyLibraryEntity`, so the live
14
+ * and verify paths cannot drift.
15
+ */
16
+ export declare const isLibraryAuthorizedSigner: (entity: ILibraryEntity, publicKey: string) => boolean;
17
+ //# sourceMappingURL=authorize-library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorize-library.d.ts","sourceRoot":"","sources":["../../src/library/authorize-library.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGtE;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACjC,QAAQ,cAAc,EACtB,YAAY,kBAAkB,KAC/B,OAYF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,GAAI,QAAQ,cAAc,EAAE,WAAW,MAAM,KAAG,OAQrF,CAAC"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isLibraryAuthorizedSigner = exports.isValidLibraryDelegation = void 0;
4
+ const verify_ed25519_signature_1 = require("../crypto/signature/verify-ed25519-signature");
5
+ const library_proof_1 = require("./library-proof");
6
+ /**
7
+ * Whether `delegation` is a genuine, owner-signed grant for this entity: its
8
+ * proof must be signed by the entity owner over the canonical, purpose-bound
9
+ * payload that binds the entity id and the granted key. A forged delegation
10
+ * entry (no valid owner signature) returns `false`.
11
+ */
12
+ const isValidLibraryDelegation = (entity, delegation) => {
13
+ // Only the owner may delegate; the proof must be the owner's signature.
14
+ if (delegation.proof.publicKey !== entity.owner.publicKey) {
15
+ return false;
16
+ }
17
+ const payload = (0, library_proof_1.buildDelegationProofPayload)({
18
+ id: entity.id,
19
+ signerPublicKey: delegation.signerPublicKey,
20
+ purpose: (0, library_proof_1.delegatePurpose)(entity.kind),
21
+ publicKey: entity.owner.publicKey,
22
+ });
23
+ return (0, verify_ed25519_signature_1.verifyEd25519Signature)(entity.owner.publicKey, payload, delegation.proof.signature);
24
+ };
25
+ exports.isValidLibraryDelegation = isValidLibraryDelegation;
26
+ /**
27
+ * Whether `publicKey` may append a version to `entity`: the owner is always
28
+ * authorized; a delegated key is authorized only if it carries a valid,
29
+ * owner-signed delegation. This is the single predicate behind the append gate
30
+ * and the per-version authorization check in `verifyLibraryEntity`, so the live
31
+ * and verify paths cannot drift.
32
+ */
33
+ const isLibraryAuthorizedSigner = (entity, publicKey) => {
34
+ if (publicKey === entity.owner.publicKey) {
35
+ return true;
36
+ }
37
+ return entity.delegations.some((delegation) => delegation.signerPublicKey === publicKey && (0, exports.isValidLibraryDelegation)(entity, delegation));
38
+ };
39
+ exports.isLibraryAuthorizedSigner = isLibraryAuthorizedSigner;
@@ -0,0 +1,49 @@
1
+ import { ILibraryEntity, LibraryEntityKind } from './library-models';
2
+ export interface CreateLibraryEntityArgs {
3
+ kind: LibraryEntityKind;
4
+ name: string;
5
+ description: string;
6
+ gasLimit: number;
7
+ /** The stringified function/rule source for the first version. */
8
+ source: string;
9
+ /** 32-byte Ed25519 secret seed (hex) — becomes the entity owner. */
10
+ privateKey: string;
11
+ /** Defaults to `Date.now()`. Signed, but not part of the content hash. */
12
+ createdAt?: number;
13
+ }
14
+ export interface AppendLibraryVersionArgs {
15
+ source: string;
16
+ privateKey: string;
17
+ createdAt?: number;
18
+ }
19
+ /**
20
+ * Creates a new library entity from its first version. The entity `id` is the
21
+ * first version's `currentHash` (content-addressed identity); the signing key
22
+ * becomes the entity owner.
23
+ */
24
+ export declare const createLibraryEntity: (args: CreateLibraryEntityArgs) => ILibraryEntity;
25
+ export interface AddLibraryDelegateArgs {
26
+ /** The key being granted append rights. */
27
+ signerPublicKey: string;
28
+ /** Must be the entity owner's private key — only the owner may delegate. */
29
+ ownerPrivateKey: string;
30
+ createdAt?: number;
31
+ }
32
+ /**
33
+ * Grants `signerPublicKey` the right to append versions, signed by the owner.
34
+ * Returns a new entity (the input is not mutated). Rejects with
35
+ * {@link LibraryDelegationNotAuthorizedError} if the signing key is not the
36
+ * owner (which also blocks a delegate from re-delegating — a delegate's key is
37
+ * never the owner key) or if the grant targets the owner itself.
38
+ */
39
+ export declare const addLibraryDelegate: (entity: ILibraryEntity, args: AddLibraryDelegateArgs) => ILibraryEntity;
40
+ /**
41
+ * Appends a new signed version to an entity's ledger and returns a new entity
42
+ * (the input is not mutated). The new version chains to the prior tip via
43
+ * `previousHash`, and a fresh head proof is minted over the new tip.
44
+ *
45
+ * Gated: the signer must be the owner or a verified delegate
46
+ * ({@link isLibraryAuthorizedSigner}), else {@link LibraryVersionNotAuthorizedError}.
47
+ */
48
+ export declare const appendLibraryVersion: (entity: ILibraryEntity, args: AppendLibraryVersionArgs) => ILibraryEntity;
49
+ //# sourceMappingURL=build-library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-library.d.ts","sourceRoot":"","sources":["../../src/library/build-library.ts"],"names":[],"mappings":"AASA,OAAO,EAEH,cAAc,EAGd,iBAAiB,EAGpB,MAAM,kBAAkB,CAAC;AAU1B,MAAM,WAAW,uBAAuB;IACpC,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAiDD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,uBAAuB,KAAG,cAuBnE,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACnC,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,4EAA4E;IAC5E,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAC3B,QAAQ,cAAc,EACtB,MAAM,sBAAsB,KAC7B,cAqBF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAC7B,QAAQ,cAAc,EACtB,MAAM,wBAAwB,KAC/B,cAeF,CAAC"}