@ottochain/sdk 2.4.0 → 2.6.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 (227) hide show
  1. package/dist/cjs/apps/compute/index.js +33 -0
  2. package/dist/cjs/apps/compute/state-machines/compute-rule110.js +164 -0
  3. package/dist/cjs/apps/compute/state-machines/index.js +9 -0
  4. package/dist/cjs/apps/contracts/index.js +1 -1
  5. package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +126 -148
  6. package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +153 -174
  7. package/dist/cjs/apps/contracts/state-machines/contract-universal.js +46 -58
  8. package/dist/cjs/apps/corporate/state-machines/corp-board.js +415 -481
  9. package/dist/cjs/apps/corporate/state-machines/corp-entity.js +368 -440
  10. package/dist/cjs/apps/corporate/state-machines/corp-securities.js +532 -647
  11. package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +499 -603
  12. package/dist/cjs/apps/governance/index.js +7 -7
  13. package/dist/cjs/apps/governance/state-machines/dao-multisig.js +170 -209
  14. package/dist/cjs/apps/governance/state-machines/dao-reputation.js +161 -214
  15. package/dist/cjs/apps/governance/state-machines/dao-single.js +92 -92
  16. package/dist/cjs/apps/governance/state-machines/dao-token.js +169 -223
  17. package/dist/cjs/apps/governance/state-machines/governance-simple.js +185 -217
  18. package/dist/cjs/apps/governance/state-machines/governance-universal.js +64 -64
  19. package/dist/cjs/apps/identity/constants.js +16 -24
  20. package/dist/cjs/apps/identity/index.js +1 -1
  21. package/dist/cjs/apps/identity/state-machines/identity-agent.js +124 -158
  22. package/dist/cjs/apps/identity/state-machines/identity-oracle.js +151 -169
  23. package/dist/cjs/apps/identity/state-machines/identity-registry.js +89 -115
  24. package/dist/cjs/apps/identity/state-machines/identity-universal.js +51 -57
  25. package/dist/cjs/apps/index.js +4 -1
  26. package/dist/cjs/apps/lending/assets.js +41 -17
  27. package/dist/cjs/apps/lending/credit-scoring.js +4 -4
  28. package/dist/cjs/apps/lending/eligibility.js +9 -25
  29. package/dist/cjs/apps/lending/index.js +1 -1
  30. package/dist/cjs/apps/lending/state-machines/lending-zk-loan.js +177 -156
  31. package/dist/cjs/apps/markets/index.js +1 -1
  32. package/dist/cjs/apps/markets/state-machines/market-auction.js +115 -134
  33. package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +122 -137
  34. package/dist/cjs/apps/markets/state-machines/market-group-buy.js +158 -177
  35. package/dist/cjs/apps/markets/state-machines/market-prediction.js +193 -227
  36. package/dist/cjs/apps/markets/state-machines/market-universal.js +65 -80
  37. package/dist/cjs/apps/oracles/index.js +1 -1
  38. package/dist/cjs/apps/privacy/index.js +67 -0
  39. package/dist/cjs/apps/privacy/state-machines/index.js +17 -0
  40. package/dist/cjs/apps/privacy/state-machines/mixer-ddhRing.js +286 -0
  41. package/dist/cjs/apps/privacy/state-machines/note-pool.js +476 -0
  42. package/dist/cjs/apps/staked-pool/assets.js +103 -0
  43. package/dist/cjs/apps/staked-pool/base.js +498 -0
  44. package/dist/cjs/apps/staked-pool/consumer.js +55 -0
  45. package/dist/cjs/apps/staked-pool/index.js +83 -0
  46. package/dist/cjs/apps/staked-pool/state-machines/index.js +12 -0
  47. package/dist/cjs/apps/staked-pool/state-machines/staked-pool-base.js +49 -0
  48. package/dist/cjs/apps/staked-pool/state-machines/staked-pool-oracle.js +131 -0
  49. package/dist/cjs/generated/google/protobuf/struct.js +1 -1
  50. package/dist/cjs/generated/google/protobuf/timestamp.js +1 -1
  51. package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +1 -1
  52. package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
  53. package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +1 -1
  54. package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +1 -1
  55. package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +1 -1
  56. package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +1 -1
  57. package/dist/cjs/generated/ottochain/v1/common.js +1 -1
  58. package/dist/cjs/generated/ottochain/v1/fiber.js +40 -2
  59. package/dist/cjs/generated/ottochain/v1/messages.js +1 -1
  60. package/dist/cjs/generated/ottochain/v1/records.js +1 -1
  61. package/dist/cjs/index.js +21 -3
  62. package/dist/cjs/ottochain/genesis-manifest.js +6 -0
  63. package/dist/cjs/ottochain/metagraph-client.js +63 -11
  64. package/dist/cjs/ottochain/snapshot.js +2 -4
  65. package/dist/cjs/ottochain/transaction.js +10 -0
  66. package/dist/cjs/privacy/sealed-bid.js +85 -82
  67. package/dist/cjs/privacy/shield-app.js +32 -32
  68. package/dist/cjs/schema/effects.js +145 -1
  69. package/dist/cjs/schema/fiber-app.js +139 -5
  70. package/dist/cjs/schema/guard-lint.js +3 -12
  71. package/dist/cjs/schema/guards.js +38 -38
  72. package/dist/cjs/templates/asset-policy.js +190 -0
  73. package/dist/cjs/templates/index.js +86 -0
  74. package/dist/cjs/templates/machine.js +130 -0
  75. package/dist/cjs/templates/migration.js +39 -0
  76. package/dist/cjs/templates/state-shape.js +38 -0
  77. package/dist/cjs/validation.js +1 -3
  78. package/dist/esm/apps/compute/index.js +29 -0
  79. package/dist/esm/apps/compute/state-machines/compute-rule110.js +161 -0
  80. package/dist/esm/apps/compute/state-machines/index.js +5 -0
  81. package/dist/esm/apps/contracts/index.js +4 -4
  82. package/dist/esm/apps/contracts/state-machines/contract-agreement.js +128 -150
  83. package/dist/esm/apps/contracts/state-machines/contract-escrow.js +155 -176
  84. package/dist/esm/apps/contracts/state-machines/contract-universal.js +47 -59
  85. package/dist/esm/apps/corporate/index.js +2 -2
  86. package/dist/esm/apps/corporate/state-machines/corp-board.js +418 -484
  87. package/dist/esm/apps/corporate/state-machines/corp-entity.js +371 -443
  88. package/dist/esm/apps/corporate/state-machines/corp-securities.js +535 -650
  89. package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +502 -606
  90. package/dist/esm/apps/governance/index.js +10 -10
  91. package/dist/esm/apps/governance/state-machines/dao-multisig.js +172 -211
  92. package/dist/esm/apps/governance/state-machines/dao-reputation.js +163 -216
  93. package/dist/esm/apps/governance/state-machines/dao-single.js +94 -94
  94. package/dist/esm/apps/governance/state-machines/dao-token.js +171 -225
  95. package/dist/esm/apps/governance/state-machines/governance-simple.js +187 -219
  96. package/dist/esm/apps/governance/state-machines/governance-universal.js +65 -65
  97. package/dist/esm/apps/identity/constants.js +18 -26
  98. package/dist/esm/apps/identity/index.js +8 -8
  99. package/dist/esm/apps/identity/state-machines/identity-agent.js +125 -159
  100. package/dist/esm/apps/identity/state-machines/identity-oracle.js +153 -171
  101. package/dist/esm/apps/identity/state-machines/identity-registry.js +91 -117
  102. package/dist/esm/apps/identity/state-machines/identity-universal.js +52 -58
  103. package/dist/esm/apps/index.js +9 -6
  104. package/dist/esm/apps/lending/assets.js +41 -17
  105. package/dist/esm/apps/lending/credit-scoring.js +6 -6
  106. package/dist/esm/apps/lending/eligibility.js +10 -26
  107. package/dist/esm/apps/lending/index.js +5 -5
  108. package/dist/esm/apps/lending/state-machines/lending-zk-loan.js +178 -157
  109. package/dist/esm/apps/markets/index.js +5 -5
  110. package/dist/esm/apps/markets/state-machines/market-auction.js +117 -136
  111. package/dist/esm/apps/markets/state-machines/market-crowdfund.js +124 -139
  112. package/dist/esm/apps/markets/state-machines/market-group-buy.js +160 -179
  113. package/dist/esm/apps/markets/state-machines/market-prediction.js +195 -229
  114. package/dist/esm/apps/markets/state-machines/market-universal.js +66 -81
  115. package/dist/esm/apps/oracles/index.js +3 -3
  116. package/dist/esm/apps/privacy/index.js +56 -0
  117. package/dist/esm/apps/privacy/state-machines/index.js +6 -0
  118. package/dist/esm/apps/privacy/state-machines/mixer-ddhRing.js +282 -0
  119. package/dist/esm/apps/privacy/state-machines/note-pool.js +470 -0
  120. package/dist/esm/apps/staked-pool/assets.js +91 -0
  121. package/dist/esm/apps/staked-pool/base.js +493 -0
  122. package/dist/esm/apps/staked-pool/consumer.js +49 -0
  123. package/dist/esm/apps/staked-pool/index.js +60 -0
  124. package/dist/esm/apps/staked-pool/state-machines/index.js +6 -0
  125. package/dist/esm/apps/staked-pool/state-machines/staked-pool-base.js +46 -0
  126. package/dist/esm/apps/staked-pool/state-machines/staked-pool-oracle.js +127 -0
  127. package/dist/esm/generated/google/protobuf/struct.js +1 -1
  128. package/dist/esm/generated/google/protobuf/timestamp.js +1 -1
  129. package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +1 -1
  130. package/dist/esm/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
  131. package/dist/esm/generated/ottochain/apps/governance/v1/governance.js +1 -1
  132. package/dist/esm/generated/ottochain/apps/identity/v1/attestation.js +1 -1
  133. package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +1 -1
  134. package/dist/esm/generated/ottochain/apps/markets/v1/market.js +1 -1
  135. package/dist/esm/generated/ottochain/v1/common.js +1 -1
  136. package/dist/esm/generated/ottochain/v1/fiber.js +40 -2
  137. package/dist/esm/generated/ottochain/v1/messages.js +1 -1
  138. package/dist/esm/generated/ottochain/v1/records.js +1 -1
  139. package/dist/esm/index.js +10 -4
  140. package/dist/esm/ottochain/genesis-manifest.js +6 -0
  141. package/dist/esm/ottochain/metagraph-client.js +63 -11
  142. package/dist/esm/ottochain/snapshot.js +2 -4
  143. package/dist/esm/ottochain/transaction.js +8 -0
  144. package/dist/esm/privacy/index.js +2 -2
  145. package/dist/esm/privacy/sealed-bid.js +87 -84
  146. package/dist/esm/privacy/shield-app.js +33 -33
  147. package/dist/esm/schema/effects.js +137 -0
  148. package/dist/esm/schema/fiber-app.js +134 -5
  149. package/dist/esm/schema/guard-lint.js +3 -12
  150. package/dist/esm/schema/guards.js +36 -37
  151. package/dist/esm/templates/asset-policy.js +182 -0
  152. package/dist/esm/templates/index.js +41 -0
  153. package/dist/esm/templates/machine.js +125 -0
  154. package/dist/esm/templates/migration.js +34 -0
  155. package/dist/esm/templates/state-shape.js +34 -0
  156. package/dist/esm/validation.js +1 -3
  157. package/dist/esm/zk/index.js +4 -4
  158. package/dist/types/apps/compute/index.d.ts +176 -0
  159. package/dist/types/apps/compute/state-machines/compute-rule110.d.ts +157 -0
  160. package/dist/types/apps/compute/state-machines/index.d.ts +5 -0
  161. package/dist/types/apps/contracts/index.d.ts +14 -14
  162. package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +3 -3
  163. package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +3 -3
  164. package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +4 -4
  165. package/dist/types/apps/corporate/index.d.ts +162 -162
  166. package/dist/types/apps/corporate/state-machines/corp-board.d.ts +88 -88
  167. package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +14 -14
  168. package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +18 -18
  169. package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +43 -43
  170. package/dist/types/apps/governance/index.d.ts +81 -81
  171. package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +16 -16
  172. package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +22 -22
  173. package/dist/types/apps/governance/state-machines/dao-token.d.ts +21 -21
  174. package/dist/types/apps/governance/state-machines/governance-simple.d.ts +11 -11
  175. package/dist/types/apps/governance/state-machines/governance-universal.d.ts +4 -4
  176. package/dist/types/apps/identity/constants.d.ts +2 -2
  177. package/dist/types/apps/identity/index.d.ts +70 -70
  178. package/dist/types/apps/identity/state-machines/identity-agent.d.ts +23 -23
  179. package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +11 -11
  180. package/dist/types/apps/identity/state-machines/identity-registry.d.ts +27 -27
  181. package/dist/types/apps/identity/state-machines/identity-universal.d.ts +4 -4
  182. package/dist/types/apps/index.d.ts +9 -6
  183. package/dist/types/apps/lending/assets.d.ts +2 -2
  184. package/dist/types/apps/lending/credit-scoring.d.ts +5 -5
  185. package/dist/types/apps/lending/eligibility.d.ts +2 -2
  186. package/dist/types/apps/lending/index.d.ts +20 -12
  187. package/dist/types/apps/lending/state-machines/lending-zk-loan.d.ts +15 -7
  188. package/dist/types/apps/markets/index.d.ts +76 -76
  189. package/dist/types/apps/markets/state-machines/market-auction.d.ts +12 -12
  190. package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +19 -19
  191. package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +18 -18
  192. package/dist/types/apps/markets/state-machines/market-prediction.d.ts +15 -15
  193. package/dist/types/apps/markets/state-machines/market-universal.d.ts +7 -7
  194. package/dist/types/apps/oracles/index.d.ts +1 -1
  195. package/dist/types/apps/privacy/index.d.ts +328 -0
  196. package/dist/types/apps/privacy/state-machines/index.d.ts +6 -0
  197. package/dist/types/apps/privacy/state-machines/mixer-ddhRing.d.ts +337 -0
  198. package/dist/types/apps/privacy/state-machines/note-pool.d.ts +196 -0
  199. package/dist/types/apps/staked-pool/assets.d.ts +53 -0
  200. package/dist/types/apps/staked-pool/base.d.ts +80 -0
  201. package/dist/types/apps/staked-pool/consumer.d.ts +29 -0
  202. package/dist/types/apps/staked-pool/index.d.ts +51 -0
  203. package/dist/types/apps/staked-pool/state-machines/index.d.ts +6 -0
  204. package/dist/types/apps/staked-pool/state-machines/staked-pool-base.d.ts +8 -0
  205. package/dist/types/apps/staked-pool/state-machines/staked-pool-oracle.d.ts +34 -0
  206. package/dist/types/generated/openapi.d.ts +13 -0
  207. package/dist/types/generated/ottochain/v1/fiber.d.ts +7 -0
  208. package/dist/types/index.d.ts +3 -3
  209. package/dist/types/openapi.d.ts +4 -2
  210. package/dist/types/ottochain/genesis-manifest.d.ts +6 -0
  211. package/dist/types/ottochain/index.d.ts +1 -1
  212. package/dist/types/ottochain/metagraph-client.d.ts +69 -15
  213. package/dist/types/ottochain/transaction.d.ts +9 -1
  214. package/dist/types/ottochain/types.d.ts +1 -1
  215. package/dist/types/privacy/index.d.ts +2 -2
  216. package/dist/types/privacy/sealed-bid.d.ts +9 -9
  217. package/dist/types/privacy/shield-app.d.ts +1 -1
  218. package/dist/types/schema/effects.d.ts +132 -0
  219. package/dist/types/schema/fiber-app.d.ts +281 -0
  220. package/dist/types/schema/guards.d.ts +12 -0
  221. package/dist/types/templates/asset-policy.d.ts +119 -0
  222. package/dist/types/templates/index.d.ts +26 -0
  223. package/dist/types/templates/machine.d.ts +139 -0
  224. package/dist/types/templates/migration.d.ts +34 -0
  225. package/dist/types/templates/state-shape.d.ts +30 -0
  226. package/dist/types/zk/index.d.ts +4 -4
  227. package/package.json +31 -13
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ /**
3
+ * The generic staked-pool BASE definition (`StakedPool`) — the reusable epoch-pool skeleton with a
4
+ * minimal pass-through `finalize` (authority settles; publishes a trivial result and an EMPTY in-consensus
5
+ * set, zero transfers). It is the lowest-common-denominator def; downstream apps should prefer a
6
+ * specialization (e.g. the oracle pool) that supplies real aggregation. Exposed for definition-validity
7
+ * round-tripping and as the explicit "base, unspecialized" instance.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.stakedPoolBaseDef = void 0;
11
+ const base_js_1 = require("../base.js");
12
+ /** Minimal finalize: authority settles; no aggregation, empty entitlement set, zero transfers. */
13
+ const baseFinalizeArm = {
14
+ from: 'COLLECTING',
15
+ to: 'SETTLED',
16
+ eventName: 'finalize',
17
+ guard: {
18
+ and: [
19
+ { in: [{ var: 'state.authority' }, { map: [{ var: 'proofs' }, { var: 'address' }] }] },
20
+ { '>=': [{ count: [{ var: 'state.submissions' }] }, { var: 'state.quorum' }] },
21
+ ],
22
+ },
23
+ effect: {
24
+ merge: [
25
+ { var: 'state' },
26
+ {
27
+ status: 'SETTLED',
28
+ inConsensus: [],
29
+ claimed: {},
30
+ result: {
31
+ submissionCount: { count: [{ var: 'state.submissions' }] },
32
+ epoch: { var: 'state.epoch' },
33
+ finalizedAt: { var: '$ordinal' },
34
+ },
35
+ },
36
+ ],
37
+ },
38
+ dependencies: [],
39
+ };
40
+ exports.stakedPoolBaseDef = (0, base_js_1.makeStakedPoolDef)({
41
+ metadata: {
42
+ name: 'StakedPool',
43
+ type: 'base',
44
+ description: 'Generic staked-epoch-pool base (FORMING→COLLECTING→SETTLED→COLLECTING…→CLOSED): registry-gated ' +
45
+ 'join with stake custody, append-only submissions, a state-resident claim entitlement ledger, and ' +
46
+ 'one-whole-asset claim/withdraw transfers. Specialize `submit`/`finalize` for a concrete pool.',
47
+ },
48
+ finalize: baseFinalizeArm,
49
+ });
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ /**
3
+ * Oracle-pool specialization of the staked-pool base (`StakedPoolOracle`).
4
+ *
5
+ * `submit` appends a numeric datapoint `{ addr, value }` (the base default arm).
6
+ * `finalize` (COLLECTING→SETTLED) aggregates the array with an outlier-bounded mean and publishes the
7
+ * answer + the in-consensus address set — emitting ZERO asset transfers (the entitlement ledger is
8
+ * `inConsensus`; rewards are pulled per-claim via the base `claim_reward` arm).
9
+ *
10
+ * Aggregation (default `trimmedMean`):
11
+ * 1. vals = map(submissions, .value)
12
+ * 2. trimmed = filter(submissions, value != min(vals) && value != max(vals)) — drop single min + single max
13
+ * 3. center = sum(trimmed.value) / count(trimmed) — EXACT rational (no truncation)
14
+ * 4. kept = filter(submissions, abs(value - center) <= outlierBound) — the in-consensus set
15
+ * 5. answer = sum(kept.value) / count(kept)
16
+ *
17
+ * CRITICAL JLVM SCOPING (verified against @constellation-network/metagraph-sdk-jlvm@1.8.0-rc.5):
18
+ * - Inside a `map`/`filter` callback the data scope is the BARE element, BUT the outer `state.*` is
19
+ * still readable (verified: `{cat:[addr,"|",{var:"state.epoch"}]}` reads epoch correctly).
20
+ * - A `let`-bound name does NOT cross into a `map`/`filter` callback. So `center` is INLINED into the
21
+ * `kept` predicate (it reads `state.submissions`, which IS visible) rather than `let`-hoisted — a
22
+ * `let`-bound `center` resolves to null inside `filter`, evicting every submission (div-by-zero).
23
+ * - A `reduce` with a MAP initial accumulator is rejected (`opReduce` requires `isPrimitive(init)`),
24
+ * so the reward ledger is NOT a folded `{addr:int}` map — it is the `inConsensus` array (membership =
25
+ * entitlement), consumed by `claim_reward` + a `claimed` dedup map.
26
+ */
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.stakedPoolOracleDef = void 0;
29
+ exports.makeOraclePoolDef = makeOraclePoolDef;
30
+ const base_js_1 = require("../base.js");
31
+ const sum = (arr) => ({
32
+ reduce: [arr, { '+': [{ var: 'accumulator' }, { var: 'current' }] }, 0],
33
+ });
34
+ const meanOf = (arr) => ({ '/': [sum(arr), { count: [arr] }] });
35
+ /** vals = map(submissions, .value) */
36
+ const VALS = { map: [{ var: 'state.submissions' }, { get: [{ var: '' }, 'value'] }] };
37
+ /**
38
+ * The aggregation `center` as a CLOSED expression over `state.submissions` (must be inlined into the
39
+ * `kept` filter — see file header). `trimmedMean` drops the single min + single max before averaging.
40
+ */
41
+ function centerExpr(aggregation) {
42
+ if (aggregation === 'mean')
43
+ return meanOf(VALS);
44
+ const trimmed = {
45
+ filter: [
46
+ { var: 'state.submissions' },
47
+ {
48
+ and: [
49
+ { '!==': [{ get: [{ var: '' }, 'value'] }, { min: [VALS] }] },
50
+ { '!==': [{ get: [{ var: '' }, 'value'] }, { max: [VALS] }] },
51
+ ],
52
+ },
53
+ ],
54
+ };
55
+ const trimmedVals = { map: [trimmed, { get: [{ var: '' }, 'value'] }] };
56
+ return meanOf(trimmedVals);
57
+ }
58
+ /** finalize COLLECTING→SETTLED — publish answer + inConsensus; ZERO asset transfers. */
59
+ function finalizeArm(aggregation) {
60
+ const center = centerExpr(aggregation);
61
+ // kept = the in-consensus submissions; `center` is INLINED (visible state.submissions inside filter).
62
+ const kept = {
63
+ filter: [
64
+ { var: 'state.submissions' },
65
+ {
66
+ '<=': [{ abs: [{ '-': [{ get: [{ var: '' }, 'value'] }, center] }] }, { var: 'state.outlierBound' }],
67
+ },
68
+ ],
69
+ };
70
+ const keptVals = { map: [kept, { get: [{ var: '' }, 'value'] }] };
71
+ const inConsensus = { map: [kept, { get: [{ var: '' }, 'addr'] }] };
72
+ return {
73
+ from: 'COLLECTING',
74
+ to: 'SETTLED',
75
+ eventName: 'finalize',
76
+ // Authority finalizes once quorum is met AND the window has elapsed.
77
+ guard: {
78
+ and: [
79
+ { in: [{ var: 'state.authority' }, { map: [{ var: 'proofs' }, { var: 'address' }] }] },
80
+ { '>=': [{ count: [{ var: 'state.submissions' }] }, { var: 'state.quorum' }] },
81
+ {
82
+ '>=': [{ var: '$ordinal' }, { '+': [{ var: 'state.epochStartedAt' }, { var: 'state.epochLength' }] }],
83
+ },
84
+ ],
85
+ },
86
+ // ZERO _transferAsset: publish result + record the in-consensus entitlement set + reset claimed.
87
+ effect: {
88
+ merge: [
89
+ { var: 'state' },
90
+ {
91
+ status: 'SETTLED',
92
+ inConsensus,
93
+ claimed: {},
94
+ result: {
95
+ value: meanOf(keptVals),
96
+ epoch: { var: 'state.epoch' },
97
+ finalizedAt: { var: '$ordinal' },
98
+ },
99
+ },
100
+ ],
101
+ },
102
+ dependencies: [],
103
+ };
104
+ }
105
+ /** Build the oracle-pool definition. `outlierPenalty` is soft-only (no-credit for outliers); hard slash is v2. */
106
+ function makeOraclePoolDef(options = {}) {
107
+ const aggregation = options.aggregation ?? 'trimmedMean';
108
+ return (0, base_js_1.makeStakedPoolDef)({
109
+ metadata: {
110
+ name: 'StakedPoolOracle',
111
+ type: 'oraclePool',
112
+ description: 'Reputation-gated staked oracle pool: participants stake + submit numeric datapoints; finalize ' +
113
+ 'publishes an outlier-bounded (default trimmed-mean) consensus answer and credits the in-consensus ' +
114
+ 'set as a claim entitlement (zero finalize-time transfers); a consumer reads the published value ' +
115
+ 'cross-fiber via an epoch-pinned depInState(SETTLED) gate.',
116
+ },
117
+ finalize: finalizeArm(aggregation),
118
+ extraCreateProperties: {
119
+ rewardPolicy: {
120
+ type: 'string',
121
+ description: 'Asset policy of the shared fungible reward token.',
122
+ immutable: true,
123
+ },
124
+ },
125
+ extraStateProperties: {
126
+ rewardPolicy: { type: 'string', immutable: true },
127
+ },
128
+ });
129
+ }
130
+ /** Default oracle-pool definition (trimmed-mean). */
131
+ exports.stakedPoolOracleDef = makeOraclePoolDef();
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
3
3
  // versions:
4
- // protoc-gen-ts_proto v2.11.5
4
+ // protoc-gen-ts_proto v2.11.8
5
5
  // protoc unknown
6
6
  // source: google/protobuf/struct.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
3
3
  // versions:
4
- // protoc-gen-ts_proto v2.11.5
4
+ // protoc-gen-ts_proto v2.11.8
5
5
  // protoc unknown
6
6
  // source: google/protobuf/timestamp.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
3
3
  // versions:
4
- // protoc-gen-ts_proto v2.11.5
4
+ // protoc-gen-ts_proto v2.11.8
5
5
  // protoc unknown
6
6
  // source: ottochain/apps/contracts/v1/contract.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
3
3
  // versions:
4
- // protoc-gen-ts_proto v2.11.5
4
+ // protoc-gen-ts_proto v2.11.8
5
5
  // protoc unknown
6
6
  // source: ottochain/apps/corporate/v1/corporate.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
3
3
  // versions:
4
- // protoc-gen-ts_proto v2.11.5
4
+ // protoc-gen-ts_proto v2.11.8
5
5
  // protoc unknown
6
6
  // source: ottochain/apps/governance/v1/governance.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
3
3
  // versions:
4
- // protoc-gen-ts_proto v2.11.5
4
+ // protoc-gen-ts_proto v2.11.8
5
5
  // protoc unknown
6
6
  // source: ottochain/apps/identity/v1/attestation.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
3
3
  // versions:
4
- // protoc-gen-ts_proto v2.11.5
4
+ // protoc-gen-ts_proto v2.11.8
5
5
  // protoc unknown
6
6
  // source: ottochain/apps/identity/v1/identity.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
3
3
  // versions:
4
- // protoc-gen-ts_proto v2.11.5
4
+ // protoc-gen-ts_proto v2.11.8
5
5
  // protoc unknown
6
6
  // source: ottochain/apps/markets/v1/market.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
3
3
  // versions:
4
- // protoc-gen-ts_proto v2.11.5
4
+ // protoc-gen-ts_proto v2.11.8
5
5
  // protoc unknown
6
6
  // source: ottochain/v1/common.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
3
3
  // versions:
4
- // protoc-gen-ts_proto v2.11.5
4
+ // protoc-gen-ts_proto v2.11.8
5
5
  // protoc unknown
6
6
  // source: ottochain/v1/fiber.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -433,7 +433,7 @@ exports.StateMachineDefinition = {
433
433
  },
434
434
  };
435
435
  function createBaseEmittedEvent() {
436
- return { name: "", data: undefined, destination: undefined };
436
+ return { name: "", data: undefined, destination: undefined, emitterFiberId: "", emissionIndex: 0 };
437
437
  }
438
438
  exports.EmittedEvent = {
439
439
  encode(message, writer = new wire_1.BinaryWriter()) {
@@ -446,6 +446,12 @@ exports.EmittedEvent = {
446
446
  if (message.destination !== undefined) {
447
447
  writer.uint32(26).string(message.destination);
448
448
  }
449
+ if (message.emitterFiberId !== "") {
450
+ writer.uint32(34).string(message.emitterFiberId);
451
+ }
452
+ if (message.emissionIndex !== 0) {
453
+ writer.uint32(40).int32(message.emissionIndex);
454
+ }
449
455
  return writer;
450
456
  },
451
457
  decode(input, length) {
@@ -476,6 +482,20 @@ exports.EmittedEvent = {
476
482
  message.destination = reader.string();
477
483
  continue;
478
484
  }
485
+ case 4: {
486
+ if (tag !== 34) {
487
+ break;
488
+ }
489
+ message.emitterFiberId = reader.string();
490
+ continue;
491
+ }
492
+ case 5: {
493
+ if (tag !== 40) {
494
+ break;
495
+ }
496
+ message.emissionIndex = reader.int32();
497
+ continue;
498
+ }
479
499
  }
480
500
  if ((tag & 7) === 4 || tag === 0) {
481
501
  break;
@@ -489,6 +509,16 @@ exports.EmittedEvent = {
489
509
  name: isSet(object.name) ? globalThis.String(object.name) : "",
490
510
  data: isSet(object?.data) ? object.data : undefined,
491
511
  destination: isSet(object.destination) ? globalThis.String(object.destination) : undefined,
512
+ emitterFiberId: isSet(object.emitterFiberId)
513
+ ? globalThis.String(object.emitterFiberId)
514
+ : isSet(object.emitter_fiber_id)
515
+ ? globalThis.String(object.emitter_fiber_id)
516
+ : "",
517
+ emissionIndex: isSet(object.emissionIndex)
518
+ ? globalThis.Number(object.emissionIndex)
519
+ : isSet(object.emission_index)
520
+ ? globalThis.Number(object.emission_index)
521
+ : 0,
492
522
  };
493
523
  },
494
524
  toJSON(message) {
@@ -502,6 +532,12 @@ exports.EmittedEvent = {
502
532
  if (message.destination !== undefined) {
503
533
  obj.destination = message.destination;
504
534
  }
535
+ if (message.emitterFiberId !== "") {
536
+ obj.emitterFiberId = message.emitterFiberId;
537
+ }
538
+ if (message.emissionIndex !== 0) {
539
+ obj.emissionIndex = Math.round(message.emissionIndex);
540
+ }
505
541
  return obj;
506
542
  },
507
543
  create(base) {
@@ -512,6 +548,8 @@ exports.EmittedEvent = {
512
548
  message.name = object.name ?? "";
513
549
  message.data = object.data ?? undefined;
514
550
  message.destination = object.destination ?? undefined;
551
+ message.emitterFiberId = object.emitterFiberId ?? "";
552
+ message.emissionIndex = object.emissionIndex ?? 0;
515
553
  return message;
516
554
  },
517
555
  };
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
3
3
  // versions:
4
- // protoc-gen-ts_proto v2.11.5
4
+ // protoc-gen-ts_proto v2.11.8
5
5
  // protoc unknown
6
6
  // source: ottochain/v1/messages.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
3
3
  // versions:
4
- // protoc-gen-ts_proto v2.11.5
4
+ // protoc-gen-ts_proto v2.11.8
5
5
  // protoc unknown
6
6
  // source: ottochain/v1/records.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
package/dist/cjs/index.js CHANGED
@@ -31,8 +31,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
31
31
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
32
32
  };
33
33
  Object.defineProperty(exports, "__esModule", { value: true });
34
- exports.signerIsNotParty = exports.signerInSet = exports.signerIsAnyParty = exports.signerIsParty = exports.defineFiberApp = exports.toProtoDefinition = exports.OttoMetagraphClient = exports.assert = exports.safeParse = exports.validateKeyPair = exports.validateAddress = exports.validatePublicKey = exports.validatePrivateKey = exports.validate = exports.CompleteContractRequestSchema = exports.AcceptContractRequestSchema = exports.ProposeContractRequestSchema = exports.ContractTermsSchema = exports.PlatformLinkSchema = exports.AgentIdentityRegistrationSchema = exports.TransferParamsSchema = exports.CurrencyTransactionSchema = exports.CurrencyTransactionValueSchema = exports.TransactionReferenceSchema = exports.SignedSchema = exports.SignatureProofSchema = exports.KeyPairSchema = exports.PublicKeySchema = exports.PrivateKeySchema = exports.DagAddressSchema = exports.wrapError = exports.isErrorCode = exports.ErrorCode = exports.TransactionError = exports.SigningError = exports.ValidationError = exports.NetworkError = exports.OttoChainError = exports.GENESIS_MANIFEST_VERSION = exports.buildGenesisManifest = exports.dropNulls = exports.MetagraphNetworkError = exports.HttpClient = exports.createMetagraphClient = exports.MetagraphClient = exports.batchSign = exports.addSignature = exports.createSignedObject = exports.signDataUpdate = exports.verify = void 0;
35
- exports.SHIELDED_POOL_STATE = exports.shieldApp = exports.setDependencyActive = exports.addDependency = exports.depInState = exports.signerHasRoleVia = exports.signerHasReputationVia = exports.signerHasRole = exports.signerHasReputation = exports.actorHasEntry = exports.actorInSet = exports.actorIsSigner = exports.assetSignerIs = exports.signerHasEntry = void 0;
34
+ exports.IMMUTABLE_POLICY = exports.immutable = exports.unconstrained = exports.constrained = exports.defineFiberApp = exports.toProtoDefinition = exports.OttoMetagraphClient = exports.assert = exports.safeParse = exports.validateKeyPair = exports.validateAddress = exports.validatePublicKey = exports.validatePrivateKey = exports.validate = exports.CompleteContractRequestSchema = exports.AcceptContractRequestSchema = exports.ProposeContractRequestSchema = exports.ContractTermsSchema = exports.PlatformLinkSchema = exports.AgentIdentityRegistrationSchema = exports.TransferParamsSchema = exports.CurrencyTransactionSchema = exports.CurrencyTransactionValueSchema = exports.TransactionReferenceSchema = exports.SignedSchema = exports.SignatureProofSchema = exports.KeyPairSchema = exports.PublicKeySchema = exports.PrivateKeySchema = exports.DagAddressSchema = exports.wrapError = exports.isErrorCode = exports.ErrorCode = exports.TransactionError = exports.SigningError = exports.ValidationError = exports.NetworkError = exports.OttoChainError = exports.GENESIS_MANIFEST_VERSION = exports.buildGenesisManifest = exports.dropNulls = exports.MetagraphNetworkError = exports.HttpClient = exports.createMetagraphClient = exports.MetagraphClient = exports.batchSign = exports.addSignature = exports.createSignedObject = exports.signDataUpdate = exports.verify = void 0;
35
+ exports.SHIELDED_POOL_STATE = exports.shieldApp = exports.RESERVED_EFFECT_KEYS = exports.toWallet = exports.toFiber = exports.scriptCall = exports.emit = exports.spawn = exports.triggers = exports.transferAsset = exports.setDependencyActive = exports.addDependency = exports.actorNotInArray = exports.depInState = exports.signerHasRoleVia = exports.signerHasReputationVia = exports.signerHasRole = exports.signerHasReputation = exports.actorHasEntry = exports.actorInSet = exports.actorIsSigner = exports.assetSignerIs = exports.signerHasEntry = exports.signerIsNotParty = exports.signerInSet = exports.signerIsAnyParty = exports.signerIsParty = exports.projectFiberPolicy = void 0;
36
36
  // ─── Core metagraph SDK ───────────────────────────────────────────────────────
37
37
  // Consumers can also import directly from '@constellation-network/metagraph-sdk'
38
38
  __exportStar(require("@constellation-network/metagraph-sdk"), exports);
@@ -112,6 +112,13 @@ Object.defineProperty(exports, "OttoMetagraphClient", { enumerable: true, get: f
112
112
  var fiber_app_js_1 = require("./schema/fiber-app.js");
113
113
  Object.defineProperty(exports, "toProtoDefinition", { enumerable: true, get: function () { return fiber_app_js_1.toProtoDefinition; } });
114
114
  Object.defineProperty(exports, "defineFiberApp", { enumerable: true, get: function () { return fiber_app_js_1.defineFiberApp; } });
115
+ // Fiber policy (the fiber constitution): mirrors the chain ADT
116
+ // `FiberPolicy = Unconstrained | Immutable | Constrained(<dials>)`.
117
+ Object.defineProperty(exports, "constrained", { enumerable: true, get: function () { return fiber_app_js_1.constrained; } });
118
+ Object.defineProperty(exports, "unconstrained", { enumerable: true, get: function () { return fiber_app_js_1.unconstrained; } });
119
+ Object.defineProperty(exports, "immutable", { enumerable: true, get: function () { return fiber_app_js_1.immutable; } });
120
+ Object.defineProperty(exports, "IMMUTABLE_POLICY", { enumerable: true, get: function () { return fiber_app_js_1.IMMUTABLE_POLICY; } });
121
+ Object.defineProperty(exports, "projectFiberPolicy", { enumerable: true, get: function () { return fiber_app_js_1.projectFiberPolicy; } });
115
122
  // Canonical authorization-guard builders (bind to verified signers, not attacker payloads).
116
123
  var guards_js_1 = require("./schema/guards.js");
117
124
  Object.defineProperty(exports, "signerIsParty", { enumerable: true, get: function () { return guards_js_1.signerIsParty; } });
@@ -132,10 +139,21 @@ Object.defineProperty(exports, "signerHasReputationVia", { enumerable: true, get
132
139
  Object.defineProperty(exports, "signerHasRoleVia", { enumerable: true, get: function () { return guards_js_1.signerHasRoleVia; } });
133
140
  // cross-fiber state gate (runtime-bound dependency, #24) — replaces object-form deps
134
141
  Object.defineProperty(exports, "depInState", { enumerable: true, get: function () { return guards_js_1.depInState; } });
135
- // Reserved EFFECT-directive builders (dynamic dependencies, #24).
142
+ // append-only-array dedup: actor not yet present in an array of records
143
+ Object.defineProperty(exports, "actorNotInArray", { enumerable: true, get: function () { return guards_js_1.actorNotInArray; } });
144
+ // Reserved EFFECT-directive builders (dynamic dependencies, #24; whole-asset custody moves;
145
+ // cross-fiber triggers, spawn, emit + recipient-intent helpers; the reserved-key set for validators).
136
146
  var effects_js_1 = require("./schema/effects.js");
137
147
  Object.defineProperty(exports, "addDependency", { enumerable: true, get: function () { return effects_js_1.addDependency; } });
138
148
  Object.defineProperty(exports, "setDependencyActive", { enumerable: true, get: function () { return effects_js_1.setDependencyActive; } });
149
+ Object.defineProperty(exports, "transferAsset", { enumerable: true, get: function () { return effects_js_1.transferAsset; } });
150
+ Object.defineProperty(exports, "triggers", { enumerable: true, get: function () { return effects_js_1.triggers; } });
151
+ Object.defineProperty(exports, "spawn", { enumerable: true, get: function () { return effects_js_1.spawn; } });
152
+ Object.defineProperty(exports, "emit", { enumerable: true, get: function () { return effects_js_1.emit; } });
153
+ Object.defineProperty(exports, "scriptCall", { enumerable: true, get: function () { return effects_js_1.scriptCall; } });
154
+ Object.defineProperty(exports, "toFiber", { enumerable: true, get: function () { return effects_js_1.toFiber; } });
155
+ Object.defineProperty(exports, "toWallet", { enumerable: true, get: function () { return effects_js_1.toWallet; } });
156
+ Object.defineProperty(exports, "RESERVED_EFFECT_KEYS", { enumerable: true, get: function () { return effects_js_1.RESERVED_EFFECT_KEYS; } });
139
157
  // ─── Privacy: shield any fiber app into a zk-jlvm-shielded private-state pool ──
140
158
  // See docs/design/zk-private-contract-state-rfc.md.
141
159
  var shield_app_js_1 = require("./privacy/shield-app.js");
@@ -149,6 +149,12 @@ function toWireDefinition(def) {
149
149
  })),
150
150
  // Strip FiberAppMetadata — the chain's `metadata` is `Option[JsonLogicValue]`.
151
151
  metadata: null,
152
+ // Carry the fiber constitution through verbatim from the shared projector: PRESENT for
153
+ // `Constrained` (a bare object of set dials) and `Immutable` (the bare string
154
+ // `"Immutable"`), ABSENT for `Unconstrained`. The `policy` key is only set here when
155
+ // `toProtoDefinition` emitted one, so an unconstrained def keeps NO `policy` key
156
+ // (omit-on-unconstrained wire parity).
157
+ ...(proto.policy !== undefined ? { policy: proto.policy } : {}),
152
158
  };
153
159
  }
154
160
  // ─── Builder ──────────────────────────────────────────────────────────────────
@@ -119,7 +119,11 @@ class MetagraphClient {
119
119
  // -------------------------------------------------------------------------
120
120
  // Registry, audit, state-proofs, fee estimates (ML0 /data-application/v1/*)
121
121
  // -------------------------------------------------------------------------
122
- /** Get the metagraph version string. */
122
+ /**
123
+ * Get the node's service identity + build metadata. The chain's `GET …/version` returns a
124
+ * `VersionInfo` OBJECT (`{ service, version, name, scalaVersion, sbtVersion, gitCommit, buildTime,
125
+ * tessellationVersion }`) — chain `ServiceMeta.scala` — NOT a bare string.
126
+ */
123
127
  async getVersion() {
124
128
  return this.ml0.get('/data-application/v1/version');
125
129
  }
@@ -165,15 +169,55 @@ class MetagraphClient {
165
169
  async getAssetStateProof(assetId, field) {
166
170
  return this.ml0.get(`/data-application/v1/assets/${assetId}/state-proof?field=${encodeURIComponent(field)}`);
167
171
  }
168
- /** Estimate the fee/gas for a transition event on a state-machine fiber. */
172
+ /**
173
+ * Estimate the fee/gas for a transition event on a state-machine fiber. Returns a
174
+ * {@link TransitionFeeEstimate} (`{ fiberId, currentState, event, gasEstimate, opCount, maxDepth,
175
+ * candidateTransitions, note }`) — chain `FeeEstimates.scala`.
176
+ */
169
177
  async estimateTransitionFee(fiberId, eventName) {
170
178
  return this.ml0.get(`/data-application/v1/state-machines/${fiberId}/estimate-fee?event=${encodeURIComponent(eventName)}`);
171
179
  }
172
- /** Estimate the fee/gas for invoking a script fiber. */
180
+ /**
181
+ * Estimate the fee/gas for invoking a script fiber. Returns a {@link ScriptFeeEstimate}
182
+ * (`{ scriptId, gasEstimate, opCount, maxDepth, note }`) — chain `FeeEstimates.scala`.
183
+ */
173
184
  async estimateScriptFee(fiberId) {
174
185
  return this.ml0.get(`/data-application/v1/scripts/${fiberId}/estimate-fee`);
175
186
  }
176
187
  // -------------------------------------------------------------------------
188
+ // Webhook subscriptions (ML0 /data-application/v1/webhooks/*)
189
+ // -------------------------------------------------------------------------
190
+ /**
191
+ * Subscribe a callback URL to snapshot-notification webhooks.
192
+ *
193
+ * `POST …/webhooks/subscribe` with `SubscribeRequest { callbackUrl, secret? }`; the chain replies
194
+ * `201 Created` with `SubscribeResponse { id, callbackUrl, createdAt }`. Chain: `ML0Routes.scala`
195
+ * (`webhook.subscribe`) + `webhooks/Subscriber.scala`.
196
+ */
197
+ async subscribeWebhook(request) {
198
+ return this.ml0.post('/data-application/v1/webhooks/subscribe', request);
199
+ }
200
+ /**
201
+ * Unsubscribe a webhook by its subscriber id.
202
+ *
203
+ * `DELETE …/webhooks/subscribe/{id}` → `204 No Content` (empty body) on success, or `404` if the id is
204
+ * unknown. Chain: `ML0Routes.scala` (`webhook.unsubscribe`). The vendored `HttpClient` exposes only
205
+ * `get`/`post`, so this reuses its shared private `request` helper — same `NetworkError`/timeout
206
+ * handling as every other call — to issue the DELETE.
207
+ */
208
+ async unsubscribeWebhook(id) {
209
+ await this.ml0.request('DELETE', `/data-application/v1/webhooks/subscribe/${encodeURIComponent(id)}`);
210
+ }
211
+ /**
212
+ * List the current webhook subscribers (secrets are redacted server-side).
213
+ *
214
+ * `GET …/webhooks/subscribers` → `SubscriberList { subscribers: Subscriber[] }`. Chain:
215
+ * `ML0Routes.scala` (`webhook.list`) + `webhooks/Subscriber.scala`.
216
+ */
217
+ async listWebhookSubscribers() {
218
+ return this.ml0.get('/data-application/v1/webhooks/subscribers');
219
+ }
220
+ // -------------------------------------------------------------------------
177
221
  // Framework snapshot endpoints (ML0 /snapshots/*)
178
222
  // -------------------------------------------------------------------------
179
223
  /**
@@ -247,7 +291,9 @@ class MetagraphClient {
247
291
  try {
248
292
  onError(cbErr instanceof Error ? cbErr : new Error(String(cbErr)));
249
293
  }
250
- catch { /* ignore */ }
294
+ catch {
295
+ /* ignore */
296
+ }
251
297
  }
252
298
  };
253
299
  const poll = async () => {
@@ -264,7 +310,9 @@ class MetagraphClient {
264
310
  try {
265
311
  onError(err instanceof Error ? err : new Error(String(err)));
266
312
  }
267
- catch { /* ignore */ }
313
+ catch {
314
+ /* ignore */
315
+ }
268
316
  if (active)
269
317
  setTimeout(poll, intervalMs);
270
318
  return;
@@ -297,7 +345,9 @@ class MetagraphClient {
297
345
  // callers can unsubscribe before the first poll runs, and each
298
346
  // jest.runOnlyPendingTimersAsync() advances exactly one poll cycle.
299
347
  setTimeout(poll, 0);
300
- return () => { active = false; };
348
+ return () => {
349
+ active = false;
350
+ };
301
351
  }
302
352
  /**
303
353
  * Wait for a fiber to reach a specific state, with an optional timeout.
@@ -395,14 +445,16 @@ class MetagraphClient {
395
445
  let settled = false;
396
446
  let pending = this.dl1Clients.length;
397
447
  for (const client of this.dl1Clients) {
398
- client.post('/data', request).then((result) => { if (!settled) {
399
- settled = true;
400
- resolve(result);
401
- } }, (err) => {
448
+ client.post('/data', request).then((result) => {
449
+ if (!settled) {
450
+ settled = true;
451
+ resolve(result);
452
+ }
453
+ }, (err) => {
402
454
  errors.push(err instanceof Error ? err : new Error(String(err)));
403
455
  pending--;
404
456
  if (pending === 0 && !settled) {
405
- reject(new Error('All DL1 nodes failed: ' + errors.map(e => e.message).join('; ')));
457
+ reject(new Error('All DL1 nodes failed: ' + errors.map((e) => e.message).join('; ')));
406
458
  }
407
459
  });
408
460
  }
@@ -90,8 +90,7 @@ function getLogsForFiber(onChain, fiberId) {
90
90
  * @returns Array of EventReceipt entries
91
91
  */
92
92
  function getEventReceipts(onChain, fiberId) {
93
- return getLogsForFiber(onChain, fiberId)
94
- .filter((entry) => 'eventName' in entry && 'success' in entry);
93
+ return getLogsForFiber(onChain, fiberId).filter((entry) => 'eventName' in entry && 'success' in entry);
95
94
  }
96
95
  /**
97
96
  * Get ScriptInvocation log entries for a specific fiber.
@@ -104,6 +103,5 @@ function getEventReceipts(onChain, fiberId) {
104
103
  * @returns Array of ScriptInvocation entries
105
104
  */
106
105
  function getScriptInvocations(onChain, fiberId) {
107
- return getLogsForFiber(onChain, fiberId)
108
- .filter((entry) => 'method' in entry && 'result' in entry);
106
+ return getLogsForFiber(onChain, fiberId).filter((entry) => 'method' in entry && 'result' in entry);
109
107
  }
@@ -15,6 +15,8 @@ exports.createAssetPolicyPayload = createAssetPolicyPayload;
15
15
  exports.createMintAssetPayload = createMintAssetPayload;
16
16
  exports.createApplyMorphismPayload = createApplyMorphismPayload;
17
17
  exports.createAuthorizeComposePayload = createAuthorizeComposePayload;
18
+ exports.createPublishMachineVersionPayload = createPublishMachineVersionPayload;
19
+ exports.createUpgradeFiberPayload = createUpgradeFiberPayload;
18
20
  exports.signTransaction = signTransaction;
19
21
  exports.createDataTransactionRequest = createDataTransactionRequest;
20
22
  exports.addTransactionSignature = addTransactionSignature;
@@ -172,6 +174,14 @@ function createApplyMorphismPayload(params) {
172
174
  function createAuthorizeComposePayload(params) {
173
175
  return { AuthorizeCompose: params };
174
176
  }
177
+ /** Wrap a {@link PublishMachineVersion} (create-or-append a STATE-MACHINE registry version). */
178
+ function createPublishMachineVersionPayload(params) {
179
+ return { PublishMachineVersion: params };
180
+ }
181
+ /** Wrap an {@link UpgradeFiber} (re-pin a fiber to another registered version of the SAME package). */
182
+ function createUpgradeFiberPayload(params) {
183
+ return { UpgradeFiber: params };
184
+ }
175
185
  /**
176
186
  * Sign a transaction payload for self-signed mode.
177
187
  *