@ottochain/sdk 2.0.0 → 2.2.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 (142) hide show
  1. package/dist/cjs/apps/contracts/index.js +1 -1
  2. package/dist/cjs/apps/contracts/state-machines/contract-agreement.js +272 -0
  3. package/dist/cjs/apps/contracts/state-machines/contract-escrow.js +284 -0
  4. package/dist/cjs/apps/contracts/state-machines/contract-universal.js +93 -0
  5. package/dist/cjs/apps/contracts/state-machines/index.js +177 -1
  6. package/dist/cjs/apps/corporate/state-machines/corp-board.js +1022 -0
  7. package/dist/cjs/apps/corporate/state-machines/corp-entity.js +671 -0
  8. package/dist/cjs/apps/corporate/state-machines/corp-securities.js +998 -0
  9. package/dist/cjs/apps/corporate/state-machines/corp-shareholders.js +1102 -0
  10. package/dist/cjs/apps/corporate/state-machines/index.js +20 -4440
  11. package/dist/cjs/apps/governance/index.js +7 -7
  12. package/dist/cjs/apps/governance/state-machines/dao-multisig.js +467 -0
  13. package/dist/cjs/apps/governance/state-machines/dao-reputation.js +458 -0
  14. package/dist/cjs/apps/governance/state-machines/dao-single.js +199 -0
  15. package/dist/cjs/apps/governance/state-machines/dao-token.js +503 -0
  16. package/dist/cjs/apps/governance/state-machines/governance-simple.js +482 -0
  17. package/dist/cjs/apps/governance/state-machines/governance-universal.js +138 -0
  18. package/dist/cjs/apps/governance/state-machines/index.js +16 -2934
  19. package/dist/cjs/apps/identity/constants.js +28 -14
  20. package/dist/cjs/apps/identity/index.js +27 -12
  21. package/dist/cjs/apps/identity/state-machines/identity-agent.js +256 -0
  22. package/dist/cjs/apps/identity/state-machines/identity-oracle.js +321 -0
  23. package/dist/cjs/apps/identity/state-machines/identity-universal.js +106 -0
  24. package/dist/cjs/apps/identity/state-machines/index.js +15 -784
  25. package/dist/cjs/apps/markets/index.js +1 -1
  26. package/dist/cjs/apps/markets/state-machines/index.js +14 -2298
  27. package/dist/cjs/apps/markets/state-machines/market-auction.js +283 -0
  28. package/dist/cjs/apps/markets/state-machines/market-crowdfund.js +312 -0
  29. package/dist/cjs/apps/markets/state-machines/market-group-buy.js +407 -0
  30. package/dist/cjs/apps/markets/state-machines/market-prediction.js +485 -0
  31. package/dist/cjs/apps/markets/state-machines/market-universal.js +129 -0
  32. package/dist/cjs/apps/oracles/index.js +36 -0
  33. package/dist/cjs/generated/google/protobuf/struct.js +1 -1
  34. package/dist/cjs/generated/google/protobuf/timestamp.js +1 -1
  35. package/dist/cjs/generated/index.js +26 -22
  36. package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +1 -1
  37. package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
  38. package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +1 -1
  39. package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +12 -12
  40. package/dist/cjs/generated/ottochain/apps/identity/v1/identity.js +1688 -0
  41. package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +1 -1
  42. package/dist/cjs/generated/ottochain/v1/common.js +1 -1
  43. package/dist/cjs/generated/ottochain/v1/fiber.js +1 -1
  44. package/dist/cjs/generated/ottochain/v1/messages.js +1 -1
  45. package/dist/cjs/generated/ottochain/v1/records.js +1 -1
  46. package/dist/cjs/schema/fiber-app.js +95 -0
  47. package/dist/cjs/schema/index.js +20 -0
  48. package/dist/esm/apps/contracts/index.js +3 -3
  49. package/dist/esm/apps/contracts/state-machines/contract-agreement.js +269 -0
  50. package/dist/esm/apps/contracts/state-machines/contract-escrow.js +281 -0
  51. package/dist/esm/apps/contracts/state-machines/contract-universal.js +90 -0
  52. package/dist/esm/apps/contracts/state-machines/index.js +177 -1
  53. package/dist/esm/apps/corporate/index.js +3 -3
  54. package/dist/esm/apps/corporate/state-machines/corp-board.js +1019 -0
  55. package/dist/esm/apps/corporate/state-machines/corp-entity.js +668 -0
  56. package/dist/esm/apps/corporate/state-machines/corp-securities.js +995 -0
  57. package/dist/esm/apps/corporate/state-machines/corp-shareholders.js +1099 -0
  58. package/dist/esm/apps/corporate/state-machines/index.js +15 -4439
  59. package/dist/esm/apps/governance/index.js +9 -9
  60. package/dist/esm/apps/governance/state-machines/dao-multisig.js +464 -0
  61. package/dist/esm/apps/governance/state-machines/dao-reputation.js +455 -0
  62. package/dist/esm/apps/governance/state-machines/dao-single.js +196 -0
  63. package/dist/esm/apps/governance/state-machines/dao-token.js +500 -0
  64. package/dist/esm/apps/governance/state-machines/governance-simple.js +479 -0
  65. package/dist/esm/apps/governance/state-machines/governance-universal.js +135 -0
  66. package/dist/esm/apps/governance/state-machines/index.js +9 -2933
  67. package/dist/esm/apps/identity/constants.js +28 -14
  68. package/dist/esm/apps/identity/index.js +7 -5
  69. package/dist/esm/apps/identity/state-machines/identity-agent.js +253 -0
  70. package/dist/esm/apps/identity/state-machines/identity-oracle.js +318 -0
  71. package/dist/esm/apps/identity/state-machines/identity-universal.js +103 -0
  72. package/dist/esm/apps/identity/state-machines/index.js +11 -783
  73. package/dist/esm/apps/index.js +5 -5
  74. package/dist/esm/apps/markets/index.js +3 -3
  75. package/dist/esm/apps/markets/state-machines/index.js +8 -2297
  76. package/dist/esm/apps/markets/state-machines/market-auction.js +280 -0
  77. package/dist/esm/apps/markets/state-machines/market-crowdfund.js +309 -0
  78. package/dist/esm/apps/markets/state-machines/market-group-buy.js +404 -0
  79. package/dist/esm/apps/markets/state-machines/market-prediction.js +482 -0
  80. package/dist/esm/apps/markets/state-machines/market-universal.js +126 -0
  81. package/dist/esm/apps/oracles/index.js +21 -0
  82. package/dist/esm/generated/google/protobuf/struct.js +1 -1
  83. package/dist/esm/generated/google/protobuf/timestamp.js +1 -1
  84. package/dist/esm/generated/index.js +8 -4
  85. package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +1 -1
  86. package/dist/esm/generated/ottochain/apps/corporate/v1/corporate.js +1 -1
  87. package/dist/esm/generated/ottochain/apps/governance/v1/governance.js +1 -1
  88. package/dist/esm/generated/ottochain/apps/identity/v1/attestation.js +2 -2
  89. package/dist/esm/generated/ottochain/apps/identity/v1/identity.js +1676 -0
  90. package/dist/esm/generated/ottochain/apps/markets/v1/market.js +1 -1
  91. package/dist/esm/generated/ottochain/v1/common.js +1 -1
  92. package/dist/esm/generated/ottochain/v1/fiber.js +1 -1
  93. package/dist/esm/generated/ottochain/v1/messages.js +1 -1
  94. package/dist/esm/generated/ottochain/v1/records.js +1 -1
  95. package/dist/esm/schema/fiber-app.js +86 -0
  96. package/dist/esm/schema/index.js +4 -0
  97. package/dist/types/apps/contracts/index.d.ts +151 -2
  98. package/dist/types/apps/contracts/state-machines/contract-agreement.d.ts +462 -0
  99. package/dist/types/apps/contracts/state-machines/contract-escrow.d.ts +511 -0
  100. package/dist/types/apps/contracts/state-machines/contract-universal.d.ts +147 -0
  101. package/dist/types/apps/contracts/state-machines/index.d.ts +149 -0
  102. package/dist/types/apps/corporate/index.d.ts +5263 -3825
  103. package/dist/types/apps/corporate/state-machines/corp-board.d.ts +1479 -0
  104. package/dist/types/apps/corporate/state-machines/corp-entity.d.ts +970 -0
  105. package/dist/types/apps/corporate/state-machines/corp-securities.d.ts +1381 -0
  106. package/dist/types/apps/corporate/state-machines/corp-shareholders.d.ts +1631 -0
  107. package/dist/types/apps/corporate/state-machines/index.d.ts +5245 -3802
  108. package/dist/types/apps/governance/index.d.ts +875 -37
  109. package/dist/types/apps/governance/state-machines/dao-multisig.d.ts +644 -0
  110. package/dist/types/apps/governance/state-machines/dao-reputation.d.ts +610 -0
  111. package/dist/types/apps/governance/state-machines/dao-single.d.ts +276 -0
  112. package/dist/types/apps/governance/state-machines/dao-token.d.ts +601 -0
  113. package/dist/types/apps/governance/state-machines/governance-simple.d.ts +652 -0
  114. package/dist/types/apps/governance/state-machines/governance-universal.d.ts +181 -0
  115. package/dist/types/apps/governance/state-machines/index.d.ts +9 -2136
  116. package/dist/types/apps/identity/constants.d.ts +8 -6
  117. package/dist/types/apps/identity/index.d.ts +1078 -577
  118. package/dist/types/apps/identity/state-machines/identity-agent.d.ts +401 -0
  119. package/dist/types/apps/identity/state-machines/identity-oracle.d.ts +550 -0
  120. package/dist/types/apps/identity/state-machines/identity-universal.d.ts +151 -0
  121. package/dist/types/apps/identity/state-machines/index.d.ts +1069 -567
  122. package/dist/types/apps/index.d.ts +5 -5
  123. package/dist/types/apps/markets/index.d.ts +535 -7
  124. package/dist/types/apps/markets/state-machines/index.d.ts +8 -1678
  125. package/dist/types/apps/markets/state-machines/market-auction.d.ts +392 -0
  126. package/dist/types/apps/markets/state-machines/market-crowdfund.d.ts +443 -0
  127. package/dist/types/apps/markets/state-machines/market-group-buy.d.ts +539 -0
  128. package/dist/types/apps/markets/state-machines/market-prediction.d.ts +651 -0
  129. package/dist/types/apps/markets/state-machines/market-universal.d.ts +191 -0
  130. package/dist/types/apps/oracles/index.d.ts +18 -0
  131. package/dist/types/generated/index.d.ts +3 -2
  132. package/dist/types/generated/ottochain/apps/identity/v1/attestation.d.ts +1 -1
  133. package/dist/types/generated/ottochain/apps/identity/v1/identity.d.ts +187 -0
  134. package/dist/types/schema/fiber-app.d.ts +172 -0
  135. package/dist/types/schema/index.d.ts +4 -0
  136. package/package.json +1 -1
  137. package/dist/cjs/generated/ottochain/apps/identity/v1/agent.js +0 -619
  138. package/dist/cjs/generated/ottochain/apps/oracles/v1/oracle.js +0 -1223
  139. package/dist/esm/generated/ottochain/apps/identity/v1/agent.js +0 -610
  140. package/dist/esm/generated/ottochain/apps/oracles/v1/oracle.js +0 -1217
  141. package/dist/types/generated/ottochain/apps/identity/v1/agent.d.ts +0 -94
  142. package/dist/types/generated/ottochain/apps/oracles/v1/oracle.d.ts +0 -150
@@ -50,7 +50,7 @@ exports.CONTRACTS_DEFINITIONS = {
50
50
  * Get a contract state machine definition by type.
51
51
  * @param type - 'universal' | 'agreement' | 'escrow' (default: 'agreement')
52
52
  */
53
- function getContractDefinition(type = 'agreement') {
53
+ function getContractDefinition(type = "agreement") {
54
54
  return exports.CONTRACTS_DEFINITIONS[type];
55
55
  }
56
56
  exports.getContractDefinition = getContractDefinition;
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.contractAgreementDef = void 0;
4
+ const fiber_app_js_1 = require("../../../schema/fiber-app.js");
5
+ /**
6
+ * Two-party agreement with mutual completion attestation and dispute resolution.
7
+ */
8
+ exports.contractAgreementDef = (0, fiber_app_js_1.defineFiberApp)({
9
+ metadata: {
10
+ name: "ContractAgreement",
11
+ app: "contracts",
12
+ type: "agreement",
13
+ version: "1.0.0",
14
+ description: "Two-party agreement with mutual completion attestation and dispute resolution",
15
+ crossReferences: {
16
+ proposerIdentityId: {
17
+ machine: "identity-agent",
18
+ field: "proposer",
19
+ description: "Links to proposer's AgentIdentity fiber",
20
+ },
21
+ counterpartyIdentityId: {
22
+ machine: "identity-agent",
23
+ field: "counterparty",
24
+ description: "Links to counterparty's AgentIdentity fiber",
25
+ },
26
+ escrowId: {
27
+ machine: "contract-escrow",
28
+ field: "escrowId",
29
+ description: "Links to Escrow if payment is escrowed",
30
+ },
31
+ arbitrationPoolId: {
32
+ machine: "arbitration-pool",
33
+ field: "arbitrationPoolId",
34
+ description: "Links to ArbitrationPool for dispute resolution",
35
+ },
36
+ },
37
+ },
38
+ createSchema: {
39
+ required: ["proposer", "counterparty"],
40
+ properties: {
41
+ proposer: {
42
+ type: "address",
43
+ description: "DAG address of the proposer",
44
+ immutable: true,
45
+ },
46
+ counterparty: {
47
+ type: "address",
48
+ description: "DAG address of the counterparty",
49
+ immutable: true,
50
+ },
51
+ },
52
+ },
53
+ stateSchema: {
54
+ properties: {
55
+ status: { type: "string" },
56
+ proposer: { type: "address" },
57
+ counterparty: { type: "address" },
58
+ completions: { type: "array" },
59
+ acceptedAt: { type: "integer", nullable: true },
60
+ rejectedAt: { type: "integer", nullable: true },
61
+ rejectReason: { type: "string", nullable: true },
62
+ cancelledAt: { type: "integer", nullable: true },
63
+ completedAt: { type: "integer", nullable: true },
64
+ disputedAt: { type: "integer", nullable: true },
65
+ disputeReason: { type: "string", nullable: true },
66
+ disputedBy: { type: "address", nullable: true },
67
+ resolvedAt: { type: "integer", nullable: true },
68
+ resolution: { type: "string", nullable: true },
69
+ rulingId: { type: "string", nullable: true },
70
+ },
71
+ },
72
+ eventSchemas: {
73
+ accept: {},
74
+ reject: { properties: { reason: { type: "string" } } },
75
+ cancel: {},
76
+ submit_completion: { properties: { proof: { type: "string" } } },
77
+ finalize: {},
78
+ dispute: { properties: { reason: { type: "string" } } },
79
+ resolve: {
80
+ properties: {
81
+ judicialRuling: { type: "boolean", nullable: true },
82
+ proposerApproves: { type: "boolean", nullable: true },
83
+ counterpartyApproves: { type: "boolean", nullable: true },
84
+ resolution: { type: "string" },
85
+ rulingId: { type: "string", nullable: true },
86
+ },
87
+ },
88
+ },
89
+ states: {
90
+ PROPOSED: { id: "PROPOSED", isFinal: false, metadata: null },
91
+ ACTIVE: { id: "ACTIVE", isFinal: false, metadata: null },
92
+ COMPLETED: { id: "COMPLETED", isFinal: true, metadata: null },
93
+ DISPUTED: { id: "DISPUTED", isFinal: false, metadata: null },
94
+ REJECTED: { id: "REJECTED", isFinal: true, metadata: null },
95
+ CANCELLED: { id: "CANCELLED", isFinal: true, metadata: null },
96
+ },
97
+ initialState: "PROPOSED",
98
+ transitions: [
99
+ {
100
+ from: "PROPOSED",
101
+ to: "ACTIVE",
102
+ eventName: "accept",
103
+ guard: { "===": [{ var: "event.agent" }, { var: "state.counterparty" }] },
104
+ effect: {
105
+ merge: [
106
+ { var: "state" },
107
+ { status: "ACTIVE", acceptedAt: { var: "$timestamp" } },
108
+ ],
109
+ },
110
+ dependencies: [],
111
+ },
112
+ {
113
+ from: "PROPOSED",
114
+ to: "REJECTED",
115
+ eventName: "reject",
116
+ guard: { "===": [{ var: "event.agent" }, { var: "state.counterparty" }] },
117
+ effect: {
118
+ merge: [
119
+ { var: "state" },
120
+ {
121
+ status: "REJECTED",
122
+ rejectedAt: { var: "$timestamp" },
123
+ rejectReason: { var: "event.reason" },
124
+ },
125
+ ],
126
+ },
127
+ dependencies: [],
128
+ },
129
+ {
130
+ from: "PROPOSED",
131
+ to: "CANCELLED",
132
+ eventName: "cancel",
133
+ guard: { "===": [{ var: "event.agent" }, { var: "state.proposer" }] },
134
+ effect: {
135
+ merge: [
136
+ { var: "state" },
137
+ { status: "CANCELLED", cancelledAt: { var: "$timestamp" } },
138
+ ],
139
+ },
140
+ dependencies: [],
141
+ },
142
+ {
143
+ from: "ACTIVE",
144
+ to: "ACTIVE",
145
+ eventName: "submit_completion",
146
+ guard: {
147
+ and: [
148
+ {
149
+ or: [
150
+ { "===": [{ var: "event.agent" }, { var: "state.proposer" }] },
151
+ {
152
+ "===": [{ var: "event.agent" }, { var: "state.counterparty" }],
153
+ },
154
+ ],
155
+ },
156
+ {
157
+ "!": [
158
+ {
159
+ in: [
160
+ { var: "event.agent" },
161
+ { map: [{ var: "state.completions" }, { var: "agent" }] },
162
+ ],
163
+ },
164
+ ],
165
+ },
166
+ ],
167
+ },
168
+ effect: {
169
+ merge: [
170
+ { var: "state" },
171
+ {
172
+ completions: {
173
+ cat: [
174
+ { var: "state.completions" },
175
+ [
176
+ {
177
+ agent: { var: "event.agent" },
178
+ proof: { var: "event.proof" },
179
+ submittedAt: { var: "$timestamp" },
180
+ },
181
+ ],
182
+ ],
183
+ },
184
+ },
185
+ ],
186
+ },
187
+ dependencies: [],
188
+ },
189
+ {
190
+ from: "ACTIVE",
191
+ to: "COMPLETED",
192
+ eventName: "finalize",
193
+ guard: { ">=": [{ size: { var: "state.completions" } }, 2] },
194
+ effect: {
195
+ merge: [
196
+ { var: "state" },
197
+ { status: "COMPLETED", completedAt: { var: "$timestamp" } },
198
+ ],
199
+ },
200
+ dependencies: [],
201
+ },
202
+ {
203
+ from: "ACTIVE",
204
+ to: "DISPUTED",
205
+ eventName: "dispute",
206
+ guard: {
207
+ or: [
208
+ { "===": [{ var: "event.agent" }, { var: "state.proposer" }] },
209
+ { "===": [{ var: "event.agent" }, { var: "state.counterparty" }] },
210
+ ],
211
+ },
212
+ effect: {
213
+ merge: [
214
+ { var: "state" },
215
+ {
216
+ status: "DISPUTED",
217
+ disputedAt: { var: "$timestamp" },
218
+ disputeReason: { var: "event.reason" },
219
+ disputedBy: { var: "event.agent" },
220
+ },
221
+ ],
222
+ },
223
+ dependencies: [],
224
+ },
225
+ {
226
+ from: "DISPUTED",
227
+ to: "COMPLETED",
228
+ eventName: "resolve",
229
+ guard: {
230
+ or: [
231
+ { var: "event.judicialRuling" },
232
+ {
233
+ and: [
234
+ { "===": [{ var: "event.proposerApproves" }, true] },
235
+ { "===": [{ var: "event.counterpartyApproves" }, true] },
236
+ ],
237
+ },
238
+ ],
239
+ },
240
+ effect: {
241
+ merge: [
242
+ { var: "state" },
243
+ {
244
+ status: "COMPLETED",
245
+ resolvedAt: { var: "$timestamp" },
246
+ resolution: { var: "event.resolution" },
247
+ rulingId: { var: "event.rulingId" },
248
+ },
249
+ ],
250
+ },
251
+ dependencies: [],
252
+ },
253
+ {
254
+ from: "ACTIVE",
255
+ to: "CANCELLED",
256
+ eventName: "cancel",
257
+ guard: {
258
+ or: [
259
+ { "===": [{ var: "event.agent" }, { var: "state.proposer" }] },
260
+ { "===": [{ var: "event.agent" }, { var: "state.counterparty" }] },
261
+ ],
262
+ },
263
+ effect: {
264
+ merge: [
265
+ { var: "state" },
266
+ { status: "CANCELLED", cancelledAt: { var: "$timestamp" } },
267
+ ],
268
+ },
269
+ dependencies: [],
270
+ },
271
+ ],
272
+ });
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.contractEscrowDef = void 0;
4
+ const fiber_app_js_1 = require("../../../schema/fiber-app.js");
5
+ /**
6
+ * Asset custody with conditional release, dispute resolution, and split payments.
7
+ */
8
+ exports.contractEscrowDef = (0, fiber_app_js_1.defineFiberApp)({
9
+ metadata: {
10
+ name: "ContractEscrow",
11
+ app: "contracts",
12
+ type: "escrow",
13
+ version: "1.0.0",
14
+ description: "Asset custody with conditional release, dispute resolution, and split payments",
15
+ crossReferences: {
16
+ contractId: {
17
+ machine: "contract-agreement",
18
+ field: "contractId",
19
+ description: "Links to Contract SM that created this escrow",
20
+ },
21
+ marketId: {
22
+ machine: "market-universal",
23
+ field: "marketId",
24
+ description: "Links to Market SM for market-based escrow",
25
+ },
26
+ insuranceId: {
27
+ machine: "insurance",
28
+ field: "insuranceId",
29
+ description: "Links to Insurance SM for protected escrow",
30
+ },
31
+ arbitrationPoolId: {
32
+ machine: "arbitration-pool",
33
+ field: "arbitrationPoolId",
34
+ description: "Links to ArbitrationPool for dispute resolution",
35
+ },
36
+ treasuryId: {
37
+ machine: "treasury",
38
+ field: "treasuryId",
39
+ description: "Links to Treasury for fee collection",
40
+ },
41
+ },
42
+ },
43
+ createSchema: {
44
+ required: ["depositor", "beneficiary", "requiredAmount"],
45
+ properties: {
46
+ depositor: {
47
+ type: "address",
48
+ description: "DAG address of the depositor",
49
+ },
50
+ beneficiary: {
51
+ type: "address",
52
+ description: "DAG address of the beneficiary",
53
+ },
54
+ requiredAmount: {
55
+ type: "number",
56
+ minimum: 0,
57
+ description: "Required escrow amount",
58
+ },
59
+ releaseWindowMs: {
60
+ type: "integer",
61
+ description: "Time window for dispute before auto-release",
62
+ nullable: true,
63
+ },
64
+ expiresAt: {
65
+ type: "integer",
66
+ description: "Timestamp when escrow expires",
67
+ nullable: true,
68
+ },
69
+ autoActivate: {
70
+ type: "boolean",
71
+ description: "Whether to auto-activate on funding",
72
+ nullable: true,
73
+ },
74
+ },
75
+ },
76
+ stateSchema: {
77
+ properties: {
78
+ depositor: { type: "address" },
79
+ beneficiary: { type: "address" },
80
+ requiredAmount: { type: "number" },
81
+ balance: { type: "number" },
82
+ fundedAt: { type: "integer", nullable: true },
83
+ activatedAt: { type: "integer", nullable: true },
84
+ releaseRequest: { type: "object", nullable: true },
85
+ releaseDeadline: { type: "integer", nullable: true },
86
+ releasedAt: { type: "integer", nullable: true },
87
+ releasedTo: { type: "address", nullable: true },
88
+ disputedAt: { type: "integer", nullable: true },
89
+ refundedAt: { type: "integer", nullable: true },
90
+ splits: { type: "array", nullable: true },
91
+ rulingId: { type: "string", nullable: true },
92
+ releaseWindowMs: { type: "integer", nullable: true },
93
+ expiresAt: { type: "integer", nullable: true },
94
+ autoActivate: { type: "boolean", nullable: true },
95
+ },
96
+ },
97
+ eventSchemas: {
98
+ deposit: {
99
+ properties: {
100
+ amount: { type: "number" },
101
+ },
102
+ },
103
+ activate: {},
104
+ request_release: {
105
+ properties: {
106
+ amount: { type: "number" },
107
+ reason: { type: "string", nullable: true },
108
+ },
109
+ },
110
+ approve_release: {},
111
+ dispute: {},
112
+ ruling: {
113
+ properties: {
114
+ judicialRuling: { type: "boolean" },
115
+ splits: { type: "array" },
116
+ rulingId: { type: "string" },
117
+ },
118
+ },
119
+ refund: {
120
+ properties: {
121
+ mutualConsent: { type: "boolean", nullable: true },
122
+ },
123
+ },
124
+ cancel: {},
125
+ },
126
+ states: {
127
+ CREATED: { id: "CREATED", isFinal: false, metadata: null },
128
+ FUNDED: { id: "FUNDED", isFinal: false, metadata: null },
129
+ ACTIVE: { id: "ACTIVE", isFinal: false, metadata: null },
130
+ RELEASING: { id: "RELEASING", isFinal: false, metadata: null },
131
+ DISPUTED: { id: "DISPUTED", isFinal: false, metadata: null },
132
+ RELEASED: { id: "RELEASED", isFinal: true, metadata: null },
133
+ REFUNDED: { id: "REFUNDED", isFinal: true, metadata: null },
134
+ SPLIT: { id: "SPLIT", isFinal: true, metadata: null },
135
+ },
136
+ initialState: "CREATED",
137
+ transitions: [
138
+ {
139
+ from: "CREATED",
140
+ to: "FUNDED",
141
+ eventName: "deposit",
142
+ guard: {
143
+ and: [
144
+ { "===": [{ var: "event.agent" }, { var: "state.depositor" }] },
145
+ { ">=": [{ var: "event.amount" }, { var: "state.requiredAmount" }] },
146
+ ],
147
+ },
148
+ effect: {
149
+ merge: [
150
+ { var: "state" },
151
+ { balance: { var: "event.amount" }, fundedAt: { var: "$timestamp" } },
152
+ ],
153
+ },
154
+ dependencies: [],
155
+ },
156
+ {
157
+ from: "FUNDED",
158
+ to: "ACTIVE",
159
+ eventName: "activate",
160
+ guard: {
161
+ or: [
162
+ { "===": [{ var: "event.agent" }, { var: "state.beneficiary" }] },
163
+ { var: "state.autoActivate" },
164
+ ],
165
+ },
166
+ effect: {
167
+ merge: [{ var: "state" }, { activatedAt: { var: "$timestamp" } }],
168
+ },
169
+ dependencies: [],
170
+ },
171
+ {
172
+ from: "ACTIVE",
173
+ to: "RELEASING",
174
+ eventName: "request_release",
175
+ guard: { "===": [{ var: "event.agent" }, { var: "state.beneficiary" }] },
176
+ effect: {
177
+ merge: [
178
+ { var: "state" },
179
+ {
180
+ releaseRequest: {
181
+ requestedBy: { var: "event.agent" },
182
+ amount: { var: "event.amount" },
183
+ reason: { var: "event.reason" },
184
+ requestedAt: { var: "$timestamp" },
185
+ },
186
+ releaseDeadline: {
187
+ "+": [{ var: "$timestamp" }, { var: "state.releaseWindowMs" }],
188
+ },
189
+ },
190
+ ],
191
+ },
192
+ dependencies: [],
193
+ },
194
+ {
195
+ from: "RELEASING",
196
+ to: "RELEASED",
197
+ eventName: "approve_release",
198
+ guard: {
199
+ or: [
200
+ { "===": [{ var: "event.agent" }, { var: "state.depositor" }] },
201
+ { ">=": [{ var: "$timestamp" }, { var: "state.releaseDeadline" }] },
202
+ ],
203
+ },
204
+ effect: {
205
+ merge: [
206
+ { var: "state" },
207
+ {
208
+ releasedAt: { var: "$timestamp" },
209
+ releasedTo: { var: "state.beneficiary" },
210
+ },
211
+ ],
212
+ },
213
+ dependencies: [],
214
+ },
215
+ {
216
+ from: "RELEASING",
217
+ to: "DISPUTED",
218
+ eventName: "dispute",
219
+ guard: {
220
+ and: [
221
+ { "===": [{ var: "event.agent" }, { var: "state.depositor" }] },
222
+ { "<": [{ var: "$timestamp" }, { var: "state.releaseDeadline" }] },
223
+ ],
224
+ },
225
+ effect: {
226
+ merge: [{ var: "state" }, { disputedAt: { var: "$timestamp" } }],
227
+ },
228
+ spawns: {
229
+ sm: "Judiciary",
230
+ initialData: {
231
+ caseType: "escrow_dispute",
232
+ plaintiff: { var: "state.depositor" },
233
+ defendant: { var: "state.beneficiary" },
234
+ claim: {
235
+ escrowId: { var: "fiberId" },
236
+ amount: { var: "state.balance" },
237
+ },
238
+ },
239
+ },
240
+ dependencies: [],
241
+ },
242
+ {
243
+ from: "DISPUTED",
244
+ to: "SPLIT",
245
+ eventName: "ruling",
246
+ guard: { var: "event.judicialRuling" },
247
+ effect: {
248
+ merge: [
249
+ { var: "state" },
250
+ {
251
+ splits: { var: "event.splits" },
252
+ rulingId: { var: "event.rulingId" },
253
+ },
254
+ ],
255
+ },
256
+ dependencies: [],
257
+ },
258
+ {
259
+ from: "ACTIVE",
260
+ to: "REFUNDED",
261
+ eventName: "refund",
262
+ guard: {
263
+ or: [
264
+ { var: "event.mutualConsent" },
265
+ { ">=": [{ var: "$timestamp" }, { var: "state.expiresAt" }] },
266
+ ],
267
+ },
268
+ effect: {
269
+ merge: [{ var: "state" }, { refundedAt: { var: "$timestamp" } }],
270
+ },
271
+ dependencies: [],
272
+ },
273
+ {
274
+ from: "CREATED",
275
+ to: "REFUNDED",
276
+ eventName: "cancel",
277
+ guard: { "===": [{ var: "event.agent" }, { var: "state.depositor" }] },
278
+ effect: {
279
+ merge: [{ var: "state" }, { refundedAt: { var: "$timestamp" } }],
280
+ },
281
+ dependencies: [],
282
+ },
283
+ ],
284
+ });
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.contractUniversalDef = void 0;
4
+ const fiber_app_js_1 = require("../../../schema/fiber-app.js");
5
+ /**
6
+ * Minimal contract state machine - extend for custom use cases.
7
+ */
8
+ exports.contractUniversalDef = (0, fiber_app_js_1.defineFiberApp)({
9
+ metadata: {
10
+ name: "ContractUniversal",
11
+ app: "contracts",
12
+ type: "universal",
13
+ version: "1.0.0",
14
+ description: "Minimal contract state machine - extend for custom use cases",
15
+ },
16
+ createSchema: {
17
+ properties: {},
18
+ },
19
+ stateSchema: {
20
+ properties: {
21
+ status: { type: "string" },
22
+ acceptedAt: { type: "integer", nullable: true },
23
+ cancelledAt: { type: "integer", nullable: true },
24
+ completedAt: { type: "integer", nullable: true },
25
+ },
26
+ },
27
+ eventSchemas: {
28
+ accept: {},
29
+ cancel: {},
30
+ complete: {},
31
+ },
32
+ states: {
33
+ PROPOSED: { id: "PROPOSED", isFinal: false, metadata: null },
34
+ ACTIVE: { id: "ACTIVE", isFinal: false, metadata: null },
35
+ COMPLETED: { id: "COMPLETED", isFinal: true, metadata: null },
36
+ CANCELLED: { id: "CANCELLED", isFinal: true, metadata: null },
37
+ },
38
+ initialState: "PROPOSED",
39
+ transitions: [
40
+ {
41
+ from: "PROPOSED",
42
+ to: "ACTIVE",
43
+ eventName: "accept",
44
+ guard: { "==": [1, 1] },
45
+ effect: {
46
+ merge: [
47
+ { var: "state" },
48
+ { status: "ACTIVE", acceptedAt: { var: "$timestamp" } },
49
+ ],
50
+ },
51
+ dependencies: [],
52
+ },
53
+ {
54
+ from: "PROPOSED",
55
+ to: "CANCELLED",
56
+ eventName: "cancel",
57
+ guard: { "==": [1, 1] },
58
+ effect: {
59
+ merge: [
60
+ { var: "state" },
61
+ { status: "CANCELLED", cancelledAt: { var: "$timestamp" } },
62
+ ],
63
+ },
64
+ dependencies: [],
65
+ },
66
+ {
67
+ from: "ACTIVE",
68
+ to: "COMPLETED",
69
+ eventName: "complete",
70
+ guard: { "==": [1, 1] },
71
+ effect: {
72
+ merge: [
73
+ { var: "state" },
74
+ { status: "COMPLETED", completedAt: { var: "$timestamp" } },
75
+ ],
76
+ },
77
+ dependencies: [],
78
+ },
79
+ {
80
+ from: "ACTIVE",
81
+ to: "CANCELLED",
82
+ eventName: "cancel",
83
+ guard: { "==": [1, 1] },
84
+ effect: {
85
+ merge: [
86
+ { var: "state" },
87
+ { status: "CANCELLED", cancelledAt: { var: "$timestamp" } },
88
+ ],
89
+ },
90
+ dependencies: [],
91
+ },
92
+ ],
93
+ });