@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
@@ -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.2
4
+ // protoc-gen-ts_proto v2.11.5
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.2
4
+ // protoc-gen-ts_proto v2.11.5
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.2
4
+ // protoc-gen-ts_proto v2.11.5
5
5
  // protoc unknown
6
6
  // source: ottochain/v1/fiber.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.2
4
+ // protoc-gen-ts_proto v2.11.5
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.2
4
+ // protoc-gen-ts_proto v2.11.5
5
5
  // protoc unknown
6
6
  // source: ottochain/v1/records.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ /**
3
+ * Fiber App Definition Schema
4
+ *
5
+ * TypeScript-first definitions for fiber apps. This is the source of truth —
6
+ * no JSON, no code generation. Import types directly.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.toProtoDefinition = exports.toJSON = exports.isFinalState = exports.getEventsFrom = exports.getTransitionsFrom = exports.defineFiberApp = void 0;
10
+ // =============================================================================
11
+ // Helper: defineFiberApp
12
+ // =============================================================================
13
+ /**
14
+ * Define a fiber app with full type inference.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * const agentDef = defineFiberApp({
19
+ * metadata: { name: 'Agent', app: 'identity', type: 'agent', version: '1.0.0' },
20
+ * states: {
21
+ * REGISTERED: { id: 'REGISTERED', isFinal: false },
22
+ * ACTIVE: { id: 'ACTIVE', isFinal: false },
23
+ * },
24
+ * initialState: 'REGISTERED',
25
+ * transitions: [
26
+ * { from: 'REGISTERED', to: 'ACTIVE', eventName: 'activate' },
27
+ * ],
28
+ * });
29
+ * ```
30
+ */
31
+ function defineFiberApp(definition) {
32
+ // Runtime validation could go here
33
+ return definition;
34
+ }
35
+ exports.defineFiberApp = defineFiberApp;
36
+ /** Get valid transitions from a given state */
37
+ function getTransitionsFrom(def, state) {
38
+ return def.transitions.filter(t => t.from === state);
39
+ }
40
+ exports.getTransitionsFrom = getTransitionsFrom;
41
+ /** Get valid event names from a given state */
42
+ function getEventsFrom(def, state) {
43
+ return getTransitionsFrom(def, state).map(t => t.eventName);
44
+ }
45
+ exports.getEventsFrom = getEventsFrom;
46
+ /** Check if a state is final */
47
+ function isFinalState(def, state) {
48
+ return def.states[state]?.isFinal ?? false;
49
+ }
50
+ exports.isFinalState = isFinalState;
51
+ /** Convert definition to plain JSON (for serialization) */
52
+ function toJSON(def) {
53
+ return JSON.parse(JSON.stringify(def));
54
+ }
55
+ exports.toJSON = toJSON;
56
+ /**
57
+ * Extract proto-compatible StateMachineDefinition from a FiberAppDefinition.
58
+ * Use this when submitting to the metagraph.
59
+ *
60
+ * @example
61
+ * ```ts
62
+ * const def = getContractDefinition('agreement');
63
+ * const protoDef = toProtoDefinition(def);
64
+ * // Submit protoDef to metagraph
65
+ * ```
66
+ */
67
+ function toProtoDefinition(def) {
68
+ // Extract only the proto-compatible fields
69
+ const protoDef = {
70
+ states: {},
71
+ initialState: def.initialState,
72
+ transitions: def.transitions.map(t => ({
73
+ from: t.from,
74
+ to: t.to,
75
+ eventName: t.eventName,
76
+ ...(t.guard && { guard: t.guard }),
77
+ ...(t.effect && { effect: t.effect }),
78
+ ...(t.dependencies?.length && { dependencies: [...t.dependencies] }),
79
+ ...(t.emits?.length && { emits: [...t.emits] }),
80
+ })),
81
+ };
82
+ // Copy states (only id and isFinal)
83
+ for (const [key, state] of Object.entries(def.states)) {
84
+ protoDef.states[key] = {
85
+ id: state.id,
86
+ isFinal: state.isFinal,
87
+ };
88
+ }
89
+ // Pass metadata through unchanged - it's an optional unstructured object
90
+ if (def.metadata) {
91
+ protoDef.metadata = def.metadata;
92
+ }
93
+ return protoDef;
94
+ }
95
+ exports.toProtoDefinition = toProtoDefinition;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ /**
18
+ * Fiber App Schema
19
+ */
20
+ __exportStar(require("./fiber-app.js"), exports);
@@ -19,11 +19,11 @@
19
19
  * @packageDocumentation
20
20
  */
21
21
  // Re-export generated protobuf types (source of truth)
22
- export { ContractState, Contract, ProposeContractRequest, AcceptContractRequest, CompleteContractRequest, RejectContractRequest, DisputeContractRequest, ContractDefinition, contractStateFromJSON, contractStateToJSON, } from '../../generated/ottochain/apps/contracts/v1/contract.js';
22
+ export { ContractState, Contract, ProposeContractRequest, AcceptContractRequest, CompleteContractRequest, RejectContractRequest, DisputeContractRequest, ContractDefinition, contractStateFromJSON, contractStateToJSON, } from "../../generated/ottochain/apps/contracts/v1/contract.js";
23
23
  // ---------------------------------------------------------------------------
24
24
  // State Machine Definitions (generated from JSON at build time)
25
25
  // ---------------------------------------------------------------------------
26
- import { contractUniversalDef, contractAgreementDef, contractEscrowDef, } from './state-machines/index.js';
26
+ import { contractUniversalDef, contractAgreementDef, contractEscrowDef, } from "./state-machines/index.js";
27
27
  export { contractUniversalDef, contractAgreementDef, contractEscrowDef };
28
28
  /** All contract state machine definitions */
29
29
  export const CONTRACTS_DEFINITIONS = {
@@ -35,7 +35,7 @@ export const CONTRACTS_DEFINITIONS = {
35
35
  * Get a contract state machine definition by type.
36
36
  * @param type - 'universal' | 'agreement' | 'escrow' (default: 'agreement')
37
37
  */
38
- export function getContractDefinition(type = 'agreement') {
38
+ export function getContractDefinition(type = "agreement") {
39
39
  return CONTRACTS_DEFINITIONS[type];
40
40
  }
41
41
  /** @deprecated Use getContractDefinition('escrow') */
@@ -0,0 +1,269 @@
1
+ import { defineFiberApp } from "../../../schema/fiber-app.js";
2
+ /**
3
+ * Two-party agreement with mutual completion attestation and dispute resolution.
4
+ */
5
+ export const contractAgreementDef = defineFiberApp({
6
+ metadata: {
7
+ name: "ContractAgreement",
8
+ app: "contracts",
9
+ type: "agreement",
10
+ version: "1.0.0",
11
+ description: "Two-party agreement with mutual completion attestation and dispute resolution",
12
+ crossReferences: {
13
+ proposerIdentityId: {
14
+ machine: "identity-agent",
15
+ field: "proposer",
16
+ description: "Links to proposer's AgentIdentity fiber",
17
+ },
18
+ counterpartyIdentityId: {
19
+ machine: "identity-agent",
20
+ field: "counterparty",
21
+ description: "Links to counterparty's AgentIdentity fiber",
22
+ },
23
+ escrowId: {
24
+ machine: "contract-escrow",
25
+ field: "escrowId",
26
+ description: "Links to Escrow if payment is escrowed",
27
+ },
28
+ arbitrationPoolId: {
29
+ machine: "arbitration-pool",
30
+ field: "arbitrationPoolId",
31
+ description: "Links to ArbitrationPool for dispute resolution",
32
+ },
33
+ },
34
+ },
35
+ createSchema: {
36
+ required: ["proposer", "counterparty"],
37
+ properties: {
38
+ proposer: {
39
+ type: "address",
40
+ description: "DAG address of the proposer",
41
+ immutable: true,
42
+ },
43
+ counterparty: {
44
+ type: "address",
45
+ description: "DAG address of the counterparty",
46
+ immutable: true,
47
+ },
48
+ },
49
+ },
50
+ stateSchema: {
51
+ properties: {
52
+ status: { type: "string" },
53
+ proposer: { type: "address" },
54
+ counterparty: { type: "address" },
55
+ completions: { type: "array" },
56
+ acceptedAt: { type: "integer", nullable: true },
57
+ rejectedAt: { type: "integer", nullable: true },
58
+ rejectReason: { type: "string", nullable: true },
59
+ cancelledAt: { type: "integer", nullable: true },
60
+ completedAt: { type: "integer", nullable: true },
61
+ disputedAt: { type: "integer", nullable: true },
62
+ disputeReason: { type: "string", nullable: true },
63
+ disputedBy: { type: "address", nullable: true },
64
+ resolvedAt: { type: "integer", nullable: true },
65
+ resolution: { type: "string", nullable: true },
66
+ rulingId: { type: "string", nullable: true },
67
+ },
68
+ },
69
+ eventSchemas: {
70
+ accept: {},
71
+ reject: { properties: { reason: { type: "string" } } },
72
+ cancel: {},
73
+ submit_completion: { properties: { proof: { type: "string" } } },
74
+ finalize: {},
75
+ dispute: { properties: { reason: { type: "string" } } },
76
+ resolve: {
77
+ properties: {
78
+ judicialRuling: { type: "boolean", nullable: true },
79
+ proposerApproves: { type: "boolean", nullable: true },
80
+ counterpartyApproves: { type: "boolean", nullable: true },
81
+ resolution: { type: "string" },
82
+ rulingId: { type: "string", nullable: true },
83
+ },
84
+ },
85
+ },
86
+ states: {
87
+ PROPOSED: { id: "PROPOSED", isFinal: false, metadata: null },
88
+ ACTIVE: { id: "ACTIVE", isFinal: false, metadata: null },
89
+ COMPLETED: { id: "COMPLETED", isFinal: true, metadata: null },
90
+ DISPUTED: { id: "DISPUTED", isFinal: false, metadata: null },
91
+ REJECTED: { id: "REJECTED", isFinal: true, metadata: null },
92
+ CANCELLED: { id: "CANCELLED", isFinal: true, metadata: null },
93
+ },
94
+ initialState: "PROPOSED",
95
+ transitions: [
96
+ {
97
+ from: "PROPOSED",
98
+ to: "ACTIVE",
99
+ eventName: "accept",
100
+ guard: { "===": [{ var: "event.agent" }, { var: "state.counterparty" }] },
101
+ effect: {
102
+ merge: [
103
+ { var: "state" },
104
+ { status: "ACTIVE", acceptedAt: { var: "$timestamp" } },
105
+ ],
106
+ },
107
+ dependencies: [],
108
+ },
109
+ {
110
+ from: "PROPOSED",
111
+ to: "REJECTED",
112
+ eventName: "reject",
113
+ guard: { "===": [{ var: "event.agent" }, { var: "state.counterparty" }] },
114
+ effect: {
115
+ merge: [
116
+ { var: "state" },
117
+ {
118
+ status: "REJECTED",
119
+ rejectedAt: { var: "$timestamp" },
120
+ rejectReason: { var: "event.reason" },
121
+ },
122
+ ],
123
+ },
124
+ dependencies: [],
125
+ },
126
+ {
127
+ from: "PROPOSED",
128
+ to: "CANCELLED",
129
+ eventName: "cancel",
130
+ guard: { "===": [{ var: "event.agent" }, { var: "state.proposer" }] },
131
+ effect: {
132
+ merge: [
133
+ { var: "state" },
134
+ { status: "CANCELLED", cancelledAt: { var: "$timestamp" } },
135
+ ],
136
+ },
137
+ dependencies: [],
138
+ },
139
+ {
140
+ from: "ACTIVE",
141
+ to: "ACTIVE",
142
+ eventName: "submit_completion",
143
+ guard: {
144
+ and: [
145
+ {
146
+ or: [
147
+ { "===": [{ var: "event.agent" }, { var: "state.proposer" }] },
148
+ {
149
+ "===": [{ var: "event.agent" }, { var: "state.counterparty" }],
150
+ },
151
+ ],
152
+ },
153
+ {
154
+ "!": [
155
+ {
156
+ in: [
157
+ { var: "event.agent" },
158
+ { map: [{ var: "state.completions" }, { var: "agent" }] },
159
+ ],
160
+ },
161
+ ],
162
+ },
163
+ ],
164
+ },
165
+ effect: {
166
+ merge: [
167
+ { var: "state" },
168
+ {
169
+ completions: {
170
+ cat: [
171
+ { var: "state.completions" },
172
+ [
173
+ {
174
+ agent: { var: "event.agent" },
175
+ proof: { var: "event.proof" },
176
+ submittedAt: { var: "$timestamp" },
177
+ },
178
+ ],
179
+ ],
180
+ },
181
+ },
182
+ ],
183
+ },
184
+ dependencies: [],
185
+ },
186
+ {
187
+ from: "ACTIVE",
188
+ to: "COMPLETED",
189
+ eventName: "finalize",
190
+ guard: { ">=": [{ size: { var: "state.completions" } }, 2] },
191
+ effect: {
192
+ merge: [
193
+ { var: "state" },
194
+ { status: "COMPLETED", completedAt: { var: "$timestamp" } },
195
+ ],
196
+ },
197
+ dependencies: [],
198
+ },
199
+ {
200
+ from: "ACTIVE",
201
+ to: "DISPUTED",
202
+ eventName: "dispute",
203
+ guard: {
204
+ or: [
205
+ { "===": [{ var: "event.agent" }, { var: "state.proposer" }] },
206
+ { "===": [{ var: "event.agent" }, { var: "state.counterparty" }] },
207
+ ],
208
+ },
209
+ effect: {
210
+ merge: [
211
+ { var: "state" },
212
+ {
213
+ status: "DISPUTED",
214
+ disputedAt: { var: "$timestamp" },
215
+ disputeReason: { var: "event.reason" },
216
+ disputedBy: { var: "event.agent" },
217
+ },
218
+ ],
219
+ },
220
+ dependencies: [],
221
+ },
222
+ {
223
+ from: "DISPUTED",
224
+ to: "COMPLETED",
225
+ eventName: "resolve",
226
+ guard: {
227
+ or: [
228
+ { var: "event.judicialRuling" },
229
+ {
230
+ and: [
231
+ { "===": [{ var: "event.proposerApproves" }, true] },
232
+ { "===": [{ var: "event.counterpartyApproves" }, true] },
233
+ ],
234
+ },
235
+ ],
236
+ },
237
+ effect: {
238
+ merge: [
239
+ { var: "state" },
240
+ {
241
+ status: "COMPLETED",
242
+ resolvedAt: { var: "$timestamp" },
243
+ resolution: { var: "event.resolution" },
244
+ rulingId: { var: "event.rulingId" },
245
+ },
246
+ ],
247
+ },
248
+ dependencies: [],
249
+ },
250
+ {
251
+ from: "ACTIVE",
252
+ to: "CANCELLED",
253
+ eventName: "cancel",
254
+ guard: {
255
+ or: [
256
+ { "===": [{ var: "event.agent" }, { var: "state.proposer" }] },
257
+ { "===": [{ var: "event.agent" }, { var: "state.counterparty" }] },
258
+ ],
259
+ },
260
+ effect: {
261
+ merge: [
262
+ { var: "state" },
263
+ { status: "CANCELLED", cancelledAt: { var: "$timestamp" } },
264
+ ],
265
+ },
266
+ dependencies: [],
267
+ },
268
+ ],
269
+ });