@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
@@ -0,0 +1,668 @@
1
+ import { defineFiberApp } from "../../../schema/fiber-app.js";
2
+ /**
3
+ * Master corporate record tracking the lifecycle of a business entity from incorporation through dissolution.
4
+ * Manages legal identity, share structure, and corporate status.
5
+ */
6
+ export const corpEntityDef = defineFiberApp({
7
+ metadata: {
8
+ name: "CorpEntity",
9
+ app: "corporate",
10
+ type: "entity",
11
+ version: "1.0.0",
12
+ description: "Master corporate record tracking the lifecycle of a business entity from incorporation through dissolution. Manages legal identity, share structure, and corporate status.",
13
+ crossReferences: {
14
+ board: {
15
+ machine: "corporate-board",
16
+ description: "Board of directors for this entity",
17
+ foreignKey: "entityId",
18
+ },
19
+ officers: {
20
+ machine: "corporate-officers",
21
+ description: "Executive officers for this entity",
22
+ foreignKey: "entityId",
23
+ },
24
+ bylaws: {
25
+ machine: "corporate-bylaws",
26
+ description: "Governing bylaws for this entity",
27
+ foreignKey: "entityId",
28
+ },
29
+ shareholders: {
30
+ machine: "corporate-shareholders",
31
+ description: "Shareholder meeting instances",
32
+ foreignKey: "entityId",
33
+ },
34
+ securities: {
35
+ machine: "corporate-securities",
36
+ description: "Stock issuance records",
37
+ foreignKey: "entityId",
38
+ },
39
+ compliance: {
40
+ machine: "corporate-compliance",
41
+ description: "Regulatory compliance tracking",
42
+ foreignKey: "entityId",
43
+ },
44
+ },
45
+ },
46
+ createSchema: {
47
+ required: ["entityId", "legalName", "entityType", "jurisdiction"],
48
+ properties: {
49
+ entityId: {
50
+ type: "string",
51
+ description: "Unique identifier for this corporate entity",
52
+ immutable: true,
53
+ },
54
+ legalName: {
55
+ type: "string",
56
+ description: "Full legal name of the corporation",
57
+ },
58
+ tradeName: {
59
+ type: "string",
60
+ nullable: true,
61
+ description: "DBA or trade name if different",
62
+ },
63
+ entityType: {
64
+ type: "string",
65
+ enum: ["C_CORP", "S_CORP", "B_CORP", "LLC", "LP", "LLP"],
66
+ description: "Legal entity type",
67
+ },
68
+ jurisdiction: {
69
+ type: "object",
70
+ properties: {
71
+ state: {
72
+ type: "string",
73
+ description: "State of incorporation (e.g., DE, NV, WY)",
74
+ },
75
+ country: { type: "string", default: "USA" },
76
+ foreignQualifications: {
77
+ type: "array",
78
+ items: { type: "string" },
79
+ description: "States where foreign qualified to do business",
80
+ },
81
+ },
82
+ },
83
+ fiscalYearEnd: {
84
+ type: "string",
85
+ description: "Fiscal year end (MM-DD format)",
86
+ },
87
+ registeredAgent: {
88
+ type: "object",
89
+ properties: {
90
+ name: { type: "string" },
91
+ address: { type: "object" },
92
+ phone: { type: "string" },
93
+ email: { type: "string" },
94
+ effectiveDate: { type: "string", format: "date" },
95
+ },
96
+ },
97
+ principalOffice: {
98
+ type: "object",
99
+ properties: {
100
+ street: { type: "string" },
101
+ city: { type: "string" },
102
+ state: { type: "string" },
103
+ zip: { type: "string" },
104
+ country: { type: "string", default: "USA" },
105
+ },
106
+ },
107
+ shareStructure: {
108
+ type: "object",
109
+ properties: {
110
+ classes: {
111
+ type: "array",
112
+ items: { $ref: "#/definitions/ShareClass" },
113
+ },
114
+ totalAuthorized: {
115
+ type: "integer",
116
+ description: "Sum of all authorized shares",
117
+ },
118
+ totalIssued: { type: "integer" },
119
+ totalOutstanding: { type: "integer" },
120
+ },
121
+ },
122
+ incorporators: {
123
+ type: "array",
124
+ items: { $ref: "#/definitions/Incorporator" },
125
+ },
126
+ ein: {
127
+ type: "string",
128
+ nullable: true,
129
+ description: "Federal EIN",
130
+ },
131
+ stateIds: {
132
+ type: "object",
133
+ additionalProperties: { type: "string" },
134
+ description: "State-specific entity IDs keyed by state code",
135
+ },
136
+ },
137
+ },
138
+ stateSchema: {
139
+ properties: {
140
+ entityId: { type: "string", immutable: true },
141
+ legalName: { type: "string" },
142
+ tradeName: { type: "string", nullable: true },
143
+ entityType: { type: "string" },
144
+ jurisdiction: { type: "object" },
145
+ formationDate: { type: "string", format: "date", computed: true },
146
+ fiscalYearEnd: { type: "string" },
147
+ registeredAgent: { type: "object" },
148
+ principalOffice: { type: "object" },
149
+ shareStructure: { type: "object" },
150
+ incorporators: { type: "array" },
151
+ ein: { type: "string", nullable: true },
152
+ stateIds: { type: "object" },
153
+ status: {
154
+ type: "string",
155
+ enum: ["INCORPORATING", "ACTIVE", "SUSPENDED", "DISSOLVED"],
156
+ computed: true,
157
+ },
158
+ suspensionReason: { type: "string", nullable: true, computed: true },
159
+ suspensionDate: {
160
+ type: "string",
161
+ format: "date",
162
+ nullable: true,
163
+ computed: true,
164
+ },
165
+ dissolutionDate: {
166
+ type: "string",
167
+ format: "date",
168
+ nullable: true,
169
+ computed: true,
170
+ },
171
+ dissolutionReason: { type: "string", nullable: true, computed: true },
172
+ charterAmendments: {
173
+ type: "array",
174
+ items: { $ref: "#/definitions/CharterAmendment" },
175
+ computed: true,
176
+ },
177
+ createdAt: { type: "timestamp", computed: true },
178
+ updatedAt: { type: "timestamp", computed: true },
179
+ },
180
+ },
181
+ eventSchemas: {
182
+ incorporate: {
183
+ description: "State approves articles of incorporation, corporation comes into existence",
184
+ required: ["approvalDate", "stateFileNumber"],
185
+ properties: {
186
+ approvalDate: { type: "string", format: "date" },
187
+ stateFileNumber: { type: "string" },
188
+ certificateOfIncorporation: {
189
+ type: "string",
190
+ description: "Document reference",
191
+ },
192
+ },
193
+ },
194
+ amend_charter: {
195
+ description: "Amend the certificate/articles of incorporation (requires shareholder approval for most amendments)",
196
+ required: [
197
+ "amendmentId",
198
+ "description",
199
+ "amendmentType",
200
+ "resolutionRef",
201
+ "effectiveDate",
202
+ "filedDate",
203
+ ],
204
+ properties: {
205
+ amendmentId: { type: "string" },
206
+ description: { type: "string" },
207
+ amendmentType: {
208
+ type: "string",
209
+ enum: [
210
+ "NAME_CHANGE",
211
+ "SHARE_AUTHORIZATION",
212
+ "PURPOSE_CHANGE",
213
+ "OTHER",
214
+ ],
215
+ },
216
+ resolutionRef: {
217
+ type: "string",
218
+ description: "Reference to board/shareholder resolution",
219
+ },
220
+ effectiveDate: { type: "string", format: "date" },
221
+ filedDate: { type: "string", format: "date" },
222
+ newShareAuthorization: {
223
+ type: "object",
224
+ nullable: true,
225
+ description: "If increasing/changing authorized shares",
226
+ },
227
+ newLegalName: { type: "string", nullable: true },
228
+ },
229
+ },
230
+ update_share_class: {
231
+ description: "Update authorized shares for an existing class or add new class (requires charter amendment)",
232
+ required: [
233
+ "classId",
234
+ "className",
235
+ "authorized",
236
+ "parValue",
237
+ "votingRights",
238
+ "charterAmendmentRef",
239
+ ],
240
+ properties: {
241
+ classId: { type: "string" },
242
+ className: { type: "string" },
243
+ authorized: { type: "integer" },
244
+ parValue: { type: "number" },
245
+ votingRights: { type: "boolean" },
246
+ votesPerShare: { type: "number", default: 1 },
247
+ liquidationPreference: { type: "number", nullable: true },
248
+ dividendRate: { type: "number", nullable: true },
249
+ convertible: { type: "boolean", default: false },
250
+ charterAmendmentRef: { type: "string" },
251
+ },
252
+ },
253
+ update_registered_agent: {
254
+ description: "Change the registered agent on file with the state",
255
+ required: ["name", "address", "effectiveDate"],
256
+ properties: {
257
+ name: { type: "string" },
258
+ address: { type: "object" },
259
+ phone: { type: "string" },
260
+ email: { type: "string" },
261
+ effectiveDate: { type: "string", format: "date" },
262
+ filingConfirmation: {
263
+ type: "string",
264
+ description: "State filing confirmation number",
265
+ },
266
+ },
267
+ },
268
+ suspend: {
269
+ description: "State suspends corporate powers (typically for tax/filing noncompliance)",
270
+ required: ["reason", "suspensionDate"],
271
+ properties: {
272
+ reason: {
273
+ type: "string",
274
+ enum: [
275
+ "FRANCHISE_TAX_DELINQUENT",
276
+ "ANNUAL_REPORT_MISSING",
277
+ "REGISTERED_AGENT_LAPSE",
278
+ "ADMINISTRATIVE",
279
+ "OTHER",
280
+ ],
281
+ },
282
+ suspensionDate: { type: "string", format: "date" },
283
+ stateNotice: {
284
+ type: "string",
285
+ description: "Reference to state notice",
286
+ },
287
+ cureDeadline: { type: "string", format: "date", nullable: true },
288
+ },
289
+ },
290
+ reinstate: {
291
+ description: "Cure deficiencies and reinstate corporate powers",
292
+ required: [
293
+ "reinstatementDate",
294
+ "curativeActions",
295
+ "stateConfirmation",
296
+ ],
297
+ properties: {
298
+ reinstatementDate: { type: "string", format: "date" },
299
+ curativeActions: {
300
+ type: "array",
301
+ items: { type: "string" },
302
+ description: "List of actions taken to cure",
303
+ },
304
+ stateConfirmation: { type: "string" },
305
+ penaltiesPaid: { type: "number", nullable: true },
306
+ },
307
+ },
308
+ dissolve_voluntary: {
309
+ description: "Voluntary dissolution approved by board and shareholders",
310
+ required: [
311
+ "dissolutionDate",
312
+ "boardResolutionRef",
313
+ "shareholderResolutionRef",
314
+ ],
315
+ properties: {
316
+ dissolutionDate: { type: "string", format: "date" },
317
+ boardResolutionRef: { type: "string" },
318
+ shareholderResolutionRef: { type: "string" },
319
+ windingUpPlan: {
320
+ type: "string",
321
+ description: "Reference to winding up plan",
322
+ },
323
+ certificateOfDissolution: { type: "string" },
324
+ },
325
+ },
326
+ dissolve_administrative: {
327
+ description: "Administrative dissolution by state after prolonged suspension",
328
+ required: ["dissolutionDate", "stateOrder", "reason"],
329
+ properties: {
330
+ dissolutionDate: { type: "string", format: "date" },
331
+ stateOrder: { type: "string" },
332
+ reason: { type: "string" },
333
+ },
334
+ },
335
+ },
336
+ definitions: {
337
+ ShareClass: {
338
+ type: "object",
339
+ properties: {
340
+ className: {
341
+ type: "string",
342
+ description: "e.g., Common, Series A Preferred",
343
+ },
344
+ classId: { type: "string" },
345
+ authorized: { type: "integer", description: "Total shares authorized" },
346
+ issued: { type: "integer", description: "Shares currently issued" },
347
+ outstanding: { type: "integer", description: "Issued minus treasury" },
348
+ treasury: { type: "integer", description: "Shares held by company" },
349
+ parValue: { type: "number", description: "Par value per share" },
350
+ votingRights: {
351
+ type: "boolean",
352
+ description: "Whether class has voting rights",
353
+ },
354
+ votesPerShare: { type: "number", default: 1 },
355
+ liquidationPreference: {
356
+ type: "number",
357
+ nullable: true,
358
+ description: "Liquidation preference multiple",
359
+ },
360
+ dividendRate: {
361
+ type: "number",
362
+ nullable: true,
363
+ description: "Annual dividend rate %",
364
+ },
365
+ convertible: { type: "boolean", default: false },
366
+ conversionRatio: { type: "number", nullable: true },
367
+ antidilution: {
368
+ type: "string",
369
+ enum: [
370
+ "NONE",
371
+ "BROAD_BASED",
372
+ "NARROW_BASED",
373
+ "FULL_RATCHET",
374
+ ],
375
+ nullable: true,
376
+ },
377
+ },
378
+ },
379
+ Incorporator: {
380
+ type: "object",
381
+ properties: {
382
+ name: { type: "string" },
383
+ address: { type: "object" },
384
+ signatureDate: { type: "string", format: "date" },
385
+ },
386
+ },
387
+ CharterAmendment: {
388
+ type: "object",
389
+ properties: {
390
+ amendmentId: { type: "string" },
391
+ description: { type: "string" },
392
+ effectiveDate: { type: "string", format: "date" },
393
+ resolutionRef: {
394
+ type: "string",
395
+ description: "Reference to approving resolution",
396
+ },
397
+ filedDate: { type: "string", format: "date" },
398
+ },
399
+ },
400
+ },
401
+ states: {
402
+ INCORPORATING: {
403
+ id: "INCORPORATING",
404
+ isFinal: false,
405
+ description: "Initial state during formation process. Articles filed but not yet approved by state.",
406
+ },
407
+ ACTIVE: {
408
+ id: "ACTIVE",
409
+ isFinal: false,
410
+ description: "Corporation is in good standing and authorized to conduct business.",
411
+ },
412
+ SUSPENDED: {
413
+ id: "SUSPENDED",
414
+ isFinal: false,
415
+ description: "Corporate powers suspended due to compliance failure (tax, filings, etc). Can be reinstated.",
416
+ },
417
+ DISSOLVED: {
418
+ id: "DISSOLVED",
419
+ isFinal: true,
420
+ description: "Corporation has been legally dissolved. Terminal state.",
421
+ },
422
+ },
423
+ initialState: "INCORPORATING",
424
+ transitions: [
425
+ // INCORPORATING -> ACTIVE
426
+ {
427
+ from: "INCORPORATING",
428
+ to: "ACTIVE",
429
+ eventName: "incorporate",
430
+ guard: {
431
+ and: [
432
+ { "!=": [{ var: "state.legalName" }, null] },
433
+ { "!=": [{ var: "state.jurisdiction.state" }, null] },
434
+ { "!=": [{ var: "state.registeredAgent" }, null] },
435
+ { ">": [{ var: "state.incorporators.length" }, 0] },
436
+ { ">": [{ var: "state.shareStructure.classes.length" }, 0] },
437
+ { ">": [{ var: "state.shareStructure.totalAuthorized" }, 0] },
438
+ ],
439
+ },
440
+ effect: {
441
+ merge: [
442
+ { var: "state" },
443
+ {
444
+ status: "ACTIVE",
445
+ formationDate: { var: "event.approvalDate" },
446
+ updatedAt: { var: "$timestamp" },
447
+ },
448
+ ],
449
+ },
450
+ emits: ["CORPORATION_FORMED"],
451
+ },
452
+ // ACTIVE -> ACTIVE (amend_charter)
453
+ {
454
+ from: "ACTIVE",
455
+ to: "ACTIVE",
456
+ eventName: "amend_charter",
457
+ guard: { "!=": [{ var: "event.resolutionRef" }, null] },
458
+ dependencies: [
459
+ {
460
+ machine: "corporate-resolution",
461
+ instanceRef: { var: "event.resolutionRef" },
462
+ requiredState: "EXECUTED",
463
+ },
464
+ ],
465
+ effect: {
466
+ merge: [
467
+ { var: "state" },
468
+ {
469
+ charterAmendments: {
470
+ cat: [
471
+ { var: "state.charterAmendments" },
472
+ [
473
+ {
474
+ amendmentId: { var: "event.amendmentId" },
475
+ description: { var: "event.description" },
476
+ effectiveDate: { var: "event.effectiveDate" },
477
+ resolutionRef: { var: "event.resolutionRef" },
478
+ filedDate: { var: "event.filedDate" },
479
+ },
480
+ ],
481
+ ],
482
+ },
483
+ legalName: {
484
+ if: [
485
+ { "!=": [{ var: "event.newLegalName" }, null] },
486
+ { var: "event.newLegalName" },
487
+ { var: "state.legalName" },
488
+ ],
489
+ },
490
+ updatedAt: { var: "$timestamp" },
491
+ },
492
+ ],
493
+ },
494
+ emits: ["CHARTER_AMENDED"],
495
+ },
496
+ // ACTIVE -> ACTIVE (update_share_class)
497
+ {
498
+ from: "ACTIVE",
499
+ to: "ACTIVE",
500
+ eventName: "update_share_class",
501
+ guard: {
502
+ some: [
503
+ { var: "state.charterAmendments" },
504
+ {
505
+ "==": [
506
+ { var: ".amendmentId" },
507
+ { var: "event.charterAmendmentRef" },
508
+ ],
509
+ },
510
+ ],
511
+ },
512
+ effect: {
513
+ merge: [
514
+ { var: "state" },
515
+ {
516
+ shareStructure: {
517
+ merge: [
518
+ { var: "state.shareStructure" },
519
+ {
520
+ classes: {
521
+ map: [
522
+ { var: "state.shareStructure.classes" },
523
+ {
524
+ if: [
525
+ {
526
+ "==": [
527
+ { var: ".classId" },
528
+ { var: "event.classId" },
529
+ ],
530
+ },
531
+ {
532
+ classId: { var: "event.classId" },
533
+ className: { var: "event.className" },
534
+ authorized: { var: "event.authorized" },
535
+ issued: 0,
536
+ outstanding: 0,
537
+ treasury: 0,
538
+ parValue: { var: "event.parValue" },
539
+ votingRights: { var: "event.votingRights" },
540
+ votesPerShare: { var: "event.votesPerShare" },
541
+ liquidationPreference: {
542
+ var: "event.liquidationPreference",
543
+ },
544
+ dividendRate: { var: "event.dividendRate" },
545
+ convertible: { var: "event.convertible" },
546
+ },
547
+ { var: "" },
548
+ ],
549
+ },
550
+ ],
551
+ },
552
+ },
553
+ ],
554
+ },
555
+ },
556
+ ],
557
+ },
558
+ },
559
+ // ACTIVE -> ACTIVE (update_registered_agent)
560
+ {
561
+ from: "ACTIVE",
562
+ to: "ACTIVE",
563
+ eventName: "update_registered_agent",
564
+ guard: { "==": [1, 1] },
565
+ effect: {
566
+ merge: [
567
+ { var: "state" },
568
+ {
569
+ registeredAgent: {
570
+ name: { var: "event.name" },
571
+ address: { var: "event.address" },
572
+ phone: { var: "event.phone" },
573
+ email: { var: "event.email" },
574
+ effectiveDate: { var: "event.effectiveDate" },
575
+ },
576
+ },
577
+ ],
578
+ },
579
+ emits: ["REGISTERED_AGENT_CHANGED"],
580
+ },
581
+ // ACTIVE -> SUSPENDED
582
+ {
583
+ from: "ACTIVE",
584
+ to: "SUSPENDED",
585
+ eventName: "suspend",
586
+ guard: { "==": [1, 1] },
587
+ effect: {
588
+ merge: [
589
+ { var: "state" },
590
+ {
591
+ status: "SUSPENDED",
592
+ suspensionReason: { var: "event.reason" },
593
+ suspensionDate: { var: "event.suspensionDate" },
594
+ },
595
+ ],
596
+ },
597
+ emits: ["CORPORATION_SUSPENDED"],
598
+ },
599
+ // SUSPENDED -> ACTIVE
600
+ {
601
+ from: "SUSPENDED",
602
+ to: "ACTIVE",
603
+ eventName: "reinstate",
604
+ guard: { "==": [1, 1] },
605
+ effect: {
606
+ merge: [
607
+ { var: "state" },
608
+ {
609
+ status: "ACTIVE",
610
+ suspensionReason: null,
611
+ suspensionDate: null,
612
+ },
613
+ ],
614
+ },
615
+ emits: ["CORPORATION_REINSTATED"],
616
+ },
617
+ // ACTIVE -> DISSOLVED (voluntary)
618
+ {
619
+ from: "ACTIVE",
620
+ to: "DISSOLVED",
621
+ eventName: "dissolve_voluntary",
622
+ guard: { "==": [1, 1] },
623
+ dependencies: [
624
+ {
625
+ machine: "corporate-resolution",
626
+ instanceRef: { var: "event.boardResolutionRef" },
627
+ requiredState: "EXECUTED",
628
+ },
629
+ {
630
+ machine: "corporate-resolution",
631
+ instanceRef: { var: "event.shareholderResolutionRef" },
632
+ requiredState: "EXECUTED",
633
+ },
634
+ ],
635
+ effect: {
636
+ merge: [
637
+ { var: "state" },
638
+ {
639
+ status: "DISSOLVED",
640
+ dissolutionDate: { var: "event.dissolutionDate" },
641
+ dissolutionReason: "VOLUNTARY",
642
+ },
643
+ ],
644
+ },
645
+ emits: ["CORPORATION_DISSOLVED"],
646
+ },
647
+ // SUSPENDED -> DISSOLVED (administrative)
648
+ {
649
+ from: "SUSPENDED",
650
+ to: "DISSOLVED",
651
+ eventName: "dissolve_administrative",
652
+ guard: { "==": [1, 1] },
653
+ effect: {
654
+ merge: [
655
+ { var: "state" },
656
+ {
657
+ status: "DISSOLVED",
658
+ dissolutionDate: { var: "event.dissolutionDate" },
659
+ dissolutionReason: {
660
+ cat: ["ADMINISTRATIVE: ", { var: "event.reason" }],
661
+ },
662
+ },
663
+ ],
664
+ },
665
+ emits: ["CORPORATION_DISSOLVED"],
666
+ },
667
+ ],
668
+ });