@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
@@ -10,659 +10,607 @@ const effects_js_1 = require("../../../schema/effects.js");
10
10
  */
11
11
  exports.corpShareholdersDef = (0, fiber_app_js_1.defineFiberApp)({
12
12
  metadata: {
13
- name: "CorpShareholders",
14
- app: "corporate",
15
- type: "shareholders",
16
- version: "1.0.0",
17
- description: "Shareholder meeting state machine managing annual/special meetings, record dates, proxy periods, voting, and certification of results. Supports multiple share classes and cumulative voting.",
13
+ name: 'CorpShareholders',
14
+ app: 'corporate',
15
+ type: 'shareholders',
16
+ version: '1.0.0',
17
+ description: 'Shareholder meeting state machine managing annual/special meetings, record dates, proxy periods, voting, and certification of results. Supports multiple share classes and cumulative voting.',
18
18
  crossReferences: {
19
19
  entity: {
20
- machine: "corporate-entity",
21
- description: "Parent corporate entity",
22
- foreignKey: "entityId",
20
+ machine: 'corporate-entity',
21
+ description: 'Parent corporate entity',
22
+ foreignKey: 'entityId',
23
23
  },
24
24
  proxies: {
25
- machine: "corporate-proxy",
26
- description: "Proxy grants for this meeting",
27
- foreignKey: "meetingId",
25
+ machine: 'corporate-proxy',
26
+ description: 'Proxy grants for this meeting',
27
+ foreignKey: 'meetingId',
28
28
  },
29
29
  resolutions: {
30
- machine: "corporate-resolution",
31
- description: "Resolutions resulting from meeting votes",
32
- foreignKey: "meetingId",
30
+ machine: 'corporate-resolution',
31
+ description: 'Resolutions resulting from meeting votes',
32
+ foreignKey: 'meetingId',
33
33
  },
34
34
  securities: {
35
- machine: "corporate-securities",
36
- description: "Share records for determining voting rights",
37
- foreignKey: "entityId",
35
+ machine: 'corporate-securities',
36
+ description: 'Share records for determining voting rights',
37
+ foreignKey: 'entityId',
38
38
  },
39
39
  },
40
40
  },
41
41
  createSchema: {
42
- required: ["meetingId", "entityId", "registrar"],
42
+ required: ['meetingId', 'entityId', 'registrar'],
43
43
  properties: {
44
44
  meetingId: {
45
- type: "string",
46
- description: "Unique identifier for this shareholder meeting",
45
+ type: 'string',
46
+ description: 'Unique identifier for this shareholder meeting',
47
47
  immutable: true,
48
48
  },
49
49
  entityId: {
50
- type: "string",
51
- description: "Reference to parent corporate-entity",
50
+ type: 'string',
51
+ description: 'Reference to parent corporate-entity',
52
52
  immutable: true,
53
53
  },
54
54
  registrar: {
55
- type: "address",
56
- description: "State-pinned DAG address of the transfer agent / registrar authorized to register the eligible-shareholder roster of record. Verified against proofs[].address.",
55
+ type: 'address',
56
+ description: 'State-pinned DAG address of the transfer agent / registrar authorized to register the eligible-shareholder roster of record. Verified against proofs[].address.',
57
57
  immutable: true,
58
58
  },
59
59
  meetingType: {
60
- type: "string",
61
- enum: ["ANNUAL", "SPECIAL"],
62
- description: "Annual meetings are required; special meetings called for specific purposes",
60
+ type: 'string',
61
+ enum: ['ANNUAL', 'SPECIAL'],
62
+ description: 'Annual meetings are required; special meetings called for specific purposes',
63
63
  },
64
64
  fiscalYear: {
65
- type: "integer",
66
- description: "Fiscal year for annual meetings",
65
+ type: 'integer',
66
+ description: 'Fiscal year for annual meetings',
67
67
  },
68
68
  scheduledDate: {
69
- type: "string",
70
- format: "date-time",
69
+ type: 'string',
70
+ format: 'date-time',
71
71
  },
72
72
  location: {
73
- type: "object",
73
+ type: 'object',
74
74
  properties: {
75
- physical: { type: "string", nullable: true },
76
- virtualUrl: { type: "string", nullable: true },
77
- isHybrid: { type: "boolean", default: false },
75
+ physical: { type: 'string', nullable: true },
76
+ virtualUrl: { type: 'string', nullable: true },
77
+ isHybrid: { type: 'boolean', default: false },
78
78
  },
79
79
  },
80
80
  },
81
81
  },
82
82
  stateSchema: {
83
83
  properties: {
84
- meetingId: { type: "string", immutable: true },
85
- entityId: { type: "string", immutable: true },
86
- registrar: { type: "address", immutable: true },
87
- meetingType: { type: "string" },
88
- fiscalYear: { type: "integer" },
89
- scheduledDate: { type: "string", format: "date-time" },
90
- location: { type: "object" },
91
- calledBy: { $ref: "#/definitions/CalledBy", computed: true },
92
- noticeInfo: { $ref: "#/definitions/NoticeInfo", computed: true },
84
+ meetingId: { type: 'string', immutable: true },
85
+ entityId: { type: 'string', immutable: true },
86
+ registrar: { type: 'address', immutable: true },
87
+ meetingType: { type: 'string' },
88
+ fiscalYear: { type: 'integer' },
89
+ scheduledDate: { type: 'string', format: 'date-time' },
90
+ location: { type: 'object' },
91
+ calledBy: { $ref: '#/definitions/CalledBy', computed: true },
92
+ noticeInfo: { $ref: '#/definitions/NoticeInfo', computed: true },
93
93
  recordDate: {
94
- $ref: "#/definitions/RecordDate",
94
+ $ref: '#/definitions/RecordDate',
95
95
  nullable: true,
96
96
  computed: true,
97
97
  },
98
98
  eligibleVoters: {
99
- type: "array",
100
- items: { $ref: "#/definitions/EligibleVoter" },
99
+ type: 'array',
100
+ items: { $ref: '#/definitions/EligibleVoter' },
101
101
  computed: true,
102
102
  },
103
103
  quorumRequirements: {
104
- $ref: "#/definitions/QuorumRequirements",
104
+ $ref: '#/definitions/QuorumRequirements',
105
105
  computed: true,
106
106
  },
107
107
  agenda: {
108
- type: "array",
109
- items: { $ref: "#/definitions/AgendaItem" },
108
+ type: 'array',
109
+ items: { $ref: '#/definitions/AgendaItem' },
110
110
  computed: true,
111
111
  },
112
112
  proxyPeriod: {
113
- $ref: "#/definitions/ProxyPeriod",
113
+ $ref: '#/definitions/ProxyPeriod',
114
114
  nullable: true,
115
115
  computed: true,
116
116
  },
117
117
  votes: {
118
- type: "array",
119
- items: { $ref: "#/definitions/Vote" },
118
+ type: 'array',
119
+ items: { $ref: '#/definitions/Vote' },
120
120
  computed: true,
121
121
  },
122
122
  voteTallies: {
123
- type: "array",
124
- items: { $ref: "#/definitions/VoteTally" },
123
+ type: 'array',
124
+ items: { $ref: '#/definitions/VoteTally' },
125
125
  computed: true,
126
126
  },
127
127
  inspectorOfElections: {
128
- $ref: "#/definitions/Inspector",
128
+ $ref: '#/definitions/Inspector',
129
129
  nullable: true,
130
130
  computed: true,
131
131
  },
132
132
  sessionInfo: {
133
- $ref: "#/definitions/SessionInfo",
133
+ $ref: '#/definitions/SessionInfo',
134
134
  nullable: true,
135
135
  computed: true,
136
136
  },
137
137
  certification: {
138
- $ref: "#/definitions/Certification",
138
+ $ref: '#/definitions/Certification',
139
139
  nullable: true,
140
140
  computed: true,
141
141
  },
142
142
  status: {
143
- type: "string",
144
- enum: [
145
- "SCHEDULED",
146
- "RECORD_DATE_SET",
147
- "PROXY_PERIOD",
148
- "IN_SESSION",
149
- "VOTING",
150
- "CLOSED",
151
- ],
143
+ type: 'string',
144
+ enum: ['SCHEDULED', 'RECORD_DATE_SET', 'PROXY_PERIOD', 'IN_SESSION', 'VOTING', 'CLOSED'],
152
145
  computed: true,
153
146
  },
154
- createdAt: { type: "timestamp", computed: true },
155
- updatedAt: { type: "timestamp", computed: true },
147
+ createdAt: { type: 'timestamp', computed: true },
148
+ updatedAt: { type: 'timestamp', computed: true },
156
149
  // Two-phase scheduling (#24): propose_schedule_annual binds the board-resolution fiber + records the
157
150
  // pending meeting here; schedule_annual asserts the bound resolution is EXECUTED, then clears this.
158
- pendingschedule_annual: { type: "object", nullable: true, computed: true },
151
+ pendingschedule_annual: { type: 'object', nullable: true, computed: true },
159
152
  },
160
153
  },
161
154
  eventSchemas: {
162
155
  propose_schedule_annual: {
163
- description: "Phase 1 of annual-meeting scheduling: bind the executing board-resolution fiber (#24 _addDependency) and record the pending meeting",
164
- required: [
165
- "meetingId",
166
- "entityId",
167
- "fiscalYear",
168
- "scheduledDate",
169
- "boardResolutionRef",
170
- ],
156
+ description: 'Phase 1 of annual-meeting scheduling: bind the executing board-resolution fiber (#24 _addDependency) and record the pending meeting',
157
+ required: ['meetingId', 'entityId', 'fiscalYear', 'scheduledDate', 'boardResolutionRef'],
171
158
  properties: {
172
- meetingId: { type: "string" },
173
- entityId: { type: "string" },
174
- fiscalYear: { type: "integer" },
175
- scheduledDate: { type: "string", format: "date-time" },
176
- location: { type: "object" },
177
- boardResolutionRef: { type: "string" },
159
+ meetingId: { type: 'string' },
160
+ entityId: { type: 'string' },
161
+ fiscalYear: { type: 'integer' },
162
+ scheduledDate: { type: 'string', format: 'date-time' },
163
+ location: { type: 'object' },
164
+ boardResolutionRef: { type: 'string' },
178
165
  },
179
166
  },
180
167
  schedule_annual: {
181
- description: "Phase 2 of annual-meeting scheduling: execute once the bound board resolution is EXECUTED",
182
- required: [
183
- "meetingId",
184
- "entityId",
185
- "fiscalYear",
186
- "scheduledDate",
187
- ],
168
+ description: 'Phase 2 of annual-meeting scheduling: execute once the bound board resolution is EXECUTED',
169
+ required: ['meetingId', 'entityId', 'fiscalYear', 'scheduledDate'],
188
170
  properties: {
189
- meetingId: { type: "string" },
190
- entityId: { type: "string" },
191
- fiscalYear: { type: "integer" },
192
- scheduledDate: { type: "string", format: "date-time" },
193
- location: { type: "object" },
171
+ meetingId: { type: 'string' },
172
+ entityId: { type: 'string' },
173
+ fiscalYear: { type: 'integer' },
174
+ scheduledDate: { type: 'string', format: 'date-time' },
175
+ location: { type: 'object' },
194
176
  },
195
177
  },
196
178
  schedule_special: {
197
- description: "Schedule a special shareholder meeting",
198
- required: [
199
- "meetingId",
200
- "entityId",
201
- "scheduledDate",
202
- "purpose",
203
- "calledByType",
204
- ],
179
+ description: 'Schedule a special shareholder meeting',
180
+ required: ['meetingId', 'entityId', 'scheduledDate', 'purpose', 'calledByType'],
205
181
  properties: {
206
- meetingId: { type: "string" },
207
- entityId: { type: "string" },
208
- scheduledDate: { type: "string", format: "date-time" },
209
- location: { type: "object" },
182
+ meetingId: { type: 'string' },
183
+ entityId: { type: 'string' },
184
+ scheduledDate: { type: 'string', format: 'date-time' },
185
+ location: { type: 'object' },
210
186
  purpose: {
211
- type: "string",
212
- description: "Specific purpose for special meeting",
187
+ type: 'string',
188
+ description: 'Specific purpose for special meeting',
213
189
  },
214
190
  calledByType: {
215
- type: "string",
216
- enum: ["BOARD", "SHAREHOLDERS", "COURT"],
191
+ type: 'string',
192
+ enum: ['BOARD', 'SHAREHOLDERS', 'COURT'],
217
193
  },
218
- resolutionRef: { type: "string" },
219
- petitionRef: { type: "string" },
194
+ resolutionRef: { type: 'string' },
195
+ petitionRef: { type: 'string' },
220
196
  },
221
197
  },
222
198
  set_record_date: {
223
- description: "Board sets the record date for determining eligible shareholders",
224
- required: ["recordDate", "resolutionRef"],
199
+ description: 'Board sets the record date for determining eligible shareholders',
200
+ required: ['recordDate', 'resolutionRef'],
225
201
  properties: {
226
- recordDate: { type: "string", format: "date" },
227
- resolutionRef: { type: "string" },
202
+ recordDate: { type: 'string', format: 'date' },
203
+ resolutionRef: { type: 'string' },
228
204
  },
229
205
  },
230
206
  register_eligible_shareholders: {
231
- description: "Register shareholders of record as of record date",
232
- required: ["shareholders", "totalSharesOutstanding"],
207
+ description: 'Register shareholders of record as of record date',
208
+ required: ['shareholders', 'totalSharesOutstanding'],
233
209
  properties: {
234
210
  shareholders: {
235
- type: "array",
211
+ type: 'array',
236
212
  items: {
237
- type: "object",
213
+ type: 'object',
238
214
  properties: {
239
- shareholderId: { type: "string" },
240
- name: { type: "string" },
215
+ shareholderId: { type: 'string' },
216
+ name: { type: 'string' },
241
217
  address: {
242
- type: "address",
243
- description: "DAG wallet address of record for this shareholder; the only key a verified signer can vote under.",
218
+ type: 'address',
219
+ description: 'DAG wallet address of record for this shareholder; the only key a verified signer can vote under.',
244
220
  },
245
- shareholdings: { type: "array" },
221
+ shareholdings: { type: 'array' },
246
222
  },
247
223
  },
248
224
  },
249
- totalSharesOutstanding: { type: "integer" },
225
+ totalSharesOutstanding: { type: 'integer' },
250
226
  },
251
227
  },
252
228
  open_proxy_period: {
253
- description: "Distribute proxy materials and open proxy solicitation period",
254
- required: [
255
- "startDate",
256
- "proxyStatementRef",
257
- "formOfProxyRef",
258
- "agenda",
259
- ],
229
+ description: 'Distribute proxy materials and open proxy solicitation period',
230
+ required: ['startDate', 'proxyStatementRef', 'formOfProxyRef', 'agenda'],
260
231
  properties: {
261
- startDate: { type: "string", format: "date" },
262
- proxyStatementRef: { type: "string" },
263
- formOfProxyRef: { type: "string" },
264
- annualReportRef: { type: "string" },
265
- agenda: { type: "array" },
232
+ startDate: { type: 'string', format: 'date' },
233
+ proxyStatementRef: { type: 'string' },
234
+ formOfProxyRef: { type: 'string' },
235
+ annualReportRef: { type: 'string' },
236
+ agenda: { type: 'array' },
266
237
  },
267
238
  },
268
239
  add_agenda_item: {
269
- description: "Add an item to the meeting agenda (e.g., shareholder proposal)",
270
- required: ["itemId", "title", "type", "voteRequired"],
240
+ description: 'Add an item to the meeting agenda (e.g., shareholder proposal)',
241
+ required: ['itemId', 'title', 'type', 'voteRequired'],
271
242
  properties: {
272
- itemId: { type: "string" },
273
- title: { type: "string" },
274
- description: { type: "string" },
275
- type: { type: "string" },
276
- voteRequired: { type: "string" },
277
- eligibleClasses: { type: "array", items: { type: "string" } },
278
- allowCumulativeVoting: { type: "boolean", default: false },
243
+ itemId: { type: 'string' },
244
+ title: { type: 'string' },
245
+ description: { type: 'string' },
246
+ type: { type: 'string' },
247
+ voteRequired: { type: 'string' },
248
+ eligibleClasses: { type: 'array', items: { type: 'string' } },
249
+ allowCumulativeVoting: { type: 'boolean', default: false },
279
250
  },
280
251
  },
281
252
  open_meeting: {
282
- description: "Convene the shareholder meeting",
283
- required: [
284
- "openedAt",
285
- "chairPerson",
286
- "secretaryPresent",
287
- "initialQuorumCount",
288
- ],
253
+ description: 'Convene the shareholder meeting',
254
+ required: ['openedAt', 'chairPerson', 'secretaryPresent', 'initialQuorumCount'],
289
255
  properties: {
290
- openedAt: { type: "string", format: "date-time" },
291
- chairPerson: { type: "string" },
292
- secretaryPresent: { type: "string" },
293
- inspectorOfElections: { type: "object" },
294
- initialQuorumCount: { type: "integer" },
256
+ openedAt: { type: 'string', format: 'date-time' },
257
+ chairPerson: { type: 'string' },
258
+ secretaryPresent: { type: 'string' },
259
+ inspectorOfElections: { type: 'object' },
260
+ initialQuorumCount: { type: 'integer' },
295
261
  },
296
262
  },
297
263
  open_polls: {
298
- description: "Open polls for voting on agenda items",
299
- required: ["pollsOpenedAt"],
264
+ description: 'Open polls for voting on agenda items',
265
+ required: ['pollsOpenedAt'],
300
266
  properties: {
301
- pollsOpenedAt: { type: "string", format: "date-time" },
267
+ pollsOpenedAt: { type: 'string', format: 'date-time' },
302
268
  },
303
269
  },
304
270
  cast_vote: {
305
- description: "Record a vote from a shareholder or proxy holder",
306
- required: [
307
- "voteId",
308
- "agendaItemId",
309
- "voterId",
310
- "shareholderId",
311
- "shareClass",
312
- ],
271
+ description: 'Record a vote from a shareholder or proxy holder',
272
+ required: ['voteId', 'agendaItemId', 'voterId', 'shareholderId', 'shareClass'],
313
273
  properties: {
314
- voteId: { type: "string" },
315
- agendaItemId: { type: "string" },
316
- voterId: { type: "string" },
317
- shareholderId: { type: "string" },
318
- shareClass: { type: "string" },
319
- votesFor: { type: "integer", default: 0 },
320
- votesAgainst: { type: "integer", default: 0 },
321
- votesAbstain: { type: "integer", default: 0 },
322
- votesWithhold: { type: "integer", default: 0 },
323
- cumulativeVoteAllocation: { type: "object", nullable: true },
324
- viaProxy: { type: "boolean", default: false },
274
+ voteId: { type: 'string' },
275
+ agendaItemId: { type: 'string' },
276
+ voterId: { type: 'string' },
277
+ shareholderId: { type: 'string' },
278
+ shareClass: { type: 'string' },
279
+ votesFor: { type: 'integer', default: 0 },
280
+ votesAgainst: { type: 'integer', default: 0 },
281
+ votesAbstain: { type: 'integer', default: 0 },
282
+ votesWithhold: { type: 'integer', default: 0 },
283
+ cumulativeVoteAllocation: { type: 'object', nullable: true },
284
+ viaProxy: { type: 'boolean', default: false },
325
285
  },
326
286
  },
327
287
  close_polls: {
328
- description: "Close polls and begin vote tabulation",
329
- required: ["pollsClosedAt"],
288
+ description: 'Close polls and begin vote tabulation',
289
+ required: ['pollsClosedAt'],
330
290
  properties: {
331
- pollsClosedAt: { type: "string", format: "date-time" },
291
+ pollsClosedAt: { type: 'string', format: 'date-time' },
332
292
  },
333
293
  },
334
294
  certify_results: {
335
- description: "Inspector of elections certifies vote results",
336
- required: ["certifiedAt", "certifiedBy", "certificateRef"],
295
+ description: 'Inspector of elections certifies vote results',
296
+ required: ['certifiedAt', 'certifiedBy', 'certificateRef'],
337
297
  properties: {
338
- certifiedAt: { type: "string", format: "date-time" },
339
- certifiedBy: { type: "string" },
340
- certificateRef: { type: "string" },
298
+ certifiedAt: { type: 'string', format: 'date-time' },
299
+ certifiedBy: { type: 'string' },
300
+ certificateRef: { type: 'string' },
341
301
  results: {
342
- type: "array",
302
+ type: 'array',
343
303
  items: {
344
- type: "object",
304
+ type: 'object',
345
305
  properties: {
346
- agendaItemId: { type: "string" },
306
+ agendaItemId: { type: 'string' },
347
307
  result: {
348
- type: "string",
349
- enum: ["APPROVED", "REJECTED"],
308
+ type: 'string',
309
+ enum: ['APPROVED', 'REJECTED'],
350
310
  },
351
311
  },
352
312
  },
353
313
  },
354
- minutesRef: { type: "string" },
314
+ minutesRef: { type: 'string' },
355
315
  },
356
316
  },
357
317
  adjourn_without_action: {
358
- description: "Adjourn meeting without completing agenda (e.g., quorum lost)",
359
- required: ["adjournedAt", "reason"],
318
+ description: 'Adjourn meeting without completing agenda (e.g., quorum lost)',
319
+ required: ['adjournedAt', 'reason'],
360
320
  properties: {
361
- adjournedAt: { type: "string", format: "date-time" },
362
- reason: { type: "string" },
363
- adjournedTo: { type: "string", format: "date-time", nullable: true },
321
+ adjournedAt: { type: 'string', format: 'date-time' },
322
+ reason: { type: 'string' },
323
+ adjournedTo: { type: 'string', format: 'date-time', nullable: true },
364
324
  },
365
325
  },
366
326
  },
367
327
  definitions: {
368
328
  CalledBy: {
369
- type: "object",
329
+ type: 'object',
370
330
  properties: {
371
331
  type: {
372
- type: "string",
373
- enum: ["BOARD", "SHAREHOLDERS", "COURT"],
332
+ type: 'string',
333
+ enum: ['BOARD', 'SHAREHOLDERS', 'COURT'],
374
334
  },
375
- resolutionRef: { type: "string", nullable: true },
376
- shareholderPetitionRef: { type: "string", nullable: true },
377
- courtOrderRef: { type: "string", nullable: true },
335
+ resolutionRef: { type: 'string', nullable: true },
336
+ shareholderPetitionRef: { type: 'string', nullable: true },
337
+ courtOrderRef: { type: 'string', nullable: true },
378
338
  },
379
339
  },
380
340
  NoticeInfo: {
381
- type: "object",
341
+ type: 'object',
382
342
  properties: {
383
- noticeSentDate: { type: "string", format: "date" },
343
+ noticeSentDate: { type: 'string', format: 'date' },
384
344
  noticeMethod: {
385
- type: "string",
386
- enum: ["MAIL", "EMAIL", "ELECTRONIC_ACCESS"],
345
+ type: 'string',
346
+ enum: ['MAIL', 'EMAIL', 'ELECTRONIC_ACCESS'],
387
347
  },
388
- minimumNoticeDays: { type: "integer", default: 10 },
389
- maximumNoticeDays: { type: "integer", default: 60 },
348
+ minimumNoticeDays: { type: 'integer', default: 10 },
349
+ maximumNoticeDays: { type: 'integer', default: 60 },
390
350
  },
391
351
  },
392
352
  RecordDate: {
393
- type: "object",
353
+ type: 'object',
394
354
  nullable: true,
395
355
  properties: {
396
- date: { type: "string", format: "date" },
397
- setByBoardOn: { type: "string", format: "date" },
398
- resolutionRef: { type: "string" },
356
+ date: { type: 'string', format: 'date' },
357
+ setByBoardOn: { type: 'string', format: 'date' },
358
+ resolutionRef: { type: 'string' },
399
359
  },
400
360
  },
401
361
  EligibleVoter: {
402
- type: "object",
362
+ type: 'object',
403
363
  properties: {
404
- shareholderId: { type: "string" },
405
- name: { type: "string" },
364
+ shareholderId: { type: 'string' },
365
+ name: { type: 'string' },
406
366
  address: {
407
- type: "address",
408
- description: "State-pinned DAG wallet address of record; cast_vote requires this address ∈ proofs[].address.",
367
+ type: 'address',
368
+ description: 'State-pinned DAG wallet address of record; cast_vote requires this address ∈ proofs[].address.',
409
369
  },
410
370
  shareholdings: {
411
- type: "array",
371
+ type: 'array',
412
372
  items: {
413
- type: "object",
373
+ type: 'object',
414
374
  properties: {
415
- shareClass: { type: "string" },
416
- shares: { type: "integer" },
375
+ shareClass: { type: 'string' },
376
+ shares: { type: 'integer' },
417
377
  votes: {
418
- type: "integer",
419
- description: "Votes this holding represents",
378
+ type: 'integer',
379
+ description: 'Votes this holding represents',
420
380
  },
421
381
  },
422
382
  },
423
383
  },
424
- totalVotes: { type: "integer" },
384
+ totalVotes: { type: 'integer' },
425
385
  proxyGrantedTo: {
426
- type: "string",
386
+ type: 'string',
427
387
  nullable: true,
428
- description: "Proxy holder ID if proxied",
388
+ description: 'Proxy holder ID if proxied',
429
389
  },
430
- hasVoted: { type: "boolean", default: false },
390
+ hasVoted: { type: 'boolean', default: false },
431
391
  },
432
392
  },
433
393
  QuorumRequirements: {
434
- type: "object",
394
+ type: 'object',
435
395
  properties: {
436
396
  type: {
437
- type: "string",
438
- enum: ["SHARES_REPRESENTED", "SHARES_OUTSTANDING"],
397
+ type: 'string',
398
+ enum: ['SHARES_REPRESENTED', 'SHARES_OUTSTANDING'],
439
399
  },
440
400
  threshold: {
441
- type: "number",
401
+ type: 'number',
442
402
  default: 0.5,
443
- description: "Fraction required for quorum",
403
+ description: 'Fraction required for quorum',
444
404
  },
445
- sharesRequired: { type: "integer" },
446
- sharesRepresented: { type: "integer", default: 0 },
447
- quorumMet: { type: "boolean", default: false },
405
+ sharesRequired: { type: 'integer' },
406
+ sharesRepresented: { type: 'integer', default: 0 },
407
+ quorumMet: { type: 'boolean', default: false },
448
408
  },
449
409
  },
450
410
  AgendaItem: {
451
- type: "object",
411
+ type: 'object',
452
412
  properties: {
453
- itemId: { type: "string" },
454
- itemNumber: { type: "integer" },
455
- title: { type: "string" },
456
- description: { type: "string" },
413
+ itemId: { type: 'string' },
414
+ itemNumber: { type: 'integer' },
415
+ title: { type: 'string' },
416
+ description: { type: 'string' },
457
417
  type: {
458
- type: "string",
418
+ type: 'string',
459
419
  enum: [
460
- "DIRECTOR_ELECTION",
461
- "AUDITOR_RATIFICATION",
462
- "SAY_ON_PAY",
463
- "CHARTER_AMENDMENT",
464
- "MERGER",
465
- "STOCK_PLAN",
466
- "SHAREHOLDER_PROPOSAL",
467
- "OTHER",
420
+ 'DIRECTOR_ELECTION',
421
+ 'AUDITOR_RATIFICATION',
422
+ 'SAY_ON_PAY',
423
+ 'CHARTER_AMENDMENT',
424
+ 'MERGER',
425
+ 'STOCK_PLAN',
426
+ 'SHAREHOLDER_PROPOSAL',
427
+ 'OTHER',
468
428
  ],
469
429
  },
470
430
  voteRequired: {
471
- type: "string",
472
- enum: [
473
- "PLURALITY",
474
- "MAJORITY_CAST",
475
- "MAJORITY_OUTSTANDING",
476
- "SUPERMAJORITY",
477
- "UNANIMOUS",
478
- ],
479
- description: "Vote threshold for approval",
431
+ type: 'string',
432
+ enum: ['PLURALITY', 'MAJORITY_CAST', 'MAJORITY_OUTSTANDING', 'SUPERMAJORITY', 'UNANIMOUS'],
433
+ description: 'Vote threshold for approval',
480
434
  },
481
- supermajorityThreshold: { type: "number", nullable: true },
435
+ supermajorityThreshold: { type: 'number', nullable: true },
482
436
  eligibleClasses: {
483
- type: "array",
484
- items: { type: "string" },
485
- description: "Share classes that can vote on this item",
437
+ type: 'array',
438
+ items: { type: 'string' },
439
+ description: 'Share classes that can vote on this item',
486
440
  },
487
441
  allowCumulativeVoting: {
488
- type: "boolean",
442
+ type: 'boolean',
489
443
  default: false,
490
- description: "For director elections",
444
+ description: 'For director elections',
491
445
  },
492
446
  status: {
493
- type: "string",
494
- enum: [
495
- "PENDING",
496
- "VOTING",
497
- "CLOSED",
498
- "APPROVED",
499
- "REJECTED",
500
- ],
447
+ type: 'string',
448
+ enum: ['PENDING', 'VOTING', 'CLOSED', 'APPROVED', 'REJECTED'],
501
449
  },
502
450
  },
503
451
  },
504
452
  ProxyPeriod: {
505
- type: "object",
453
+ type: 'object',
506
454
  nullable: true,
507
455
  properties: {
508
- startDate: { type: "string", format: "date" },
456
+ startDate: { type: 'string', format: 'date' },
509
457
  endDate: {
510
- type: "string",
511
- format: "date-time",
512
- description: "Usually meeting start time",
458
+ type: 'string',
459
+ format: 'date-time',
460
+ description: 'Usually meeting start time',
513
461
  },
514
462
  proxyMaterials: {
515
- type: "object",
463
+ type: 'object',
516
464
  properties: {
517
- proxyStatementRef: { type: "string" },
518
- formOfProxyRef: { type: "string" },
519
- annualReportRef: { type: "string", nullable: true },
465
+ proxyStatementRef: { type: 'string' },
466
+ formOfProxyRef: { type: 'string' },
467
+ annualReportRef: { type: 'string', nullable: true },
520
468
  },
521
469
  },
522
470
  },
523
471
  },
524
472
  Vote: {
525
- type: "object",
473
+ type: 'object',
526
474
  properties: {
527
- voteId: { type: "string" },
528
- agendaItemId: { type: "string" },
475
+ voteId: { type: 'string' },
476
+ agendaItemId: { type: 'string' },
529
477
  voterId: {
530
- type: "string",
531
- description: "Shareholder or proxy holder ID",
478
+ type: 'string',
479
+ description: 'Shareholder or proxy holder ID',
532
480
  },
533
- shareholderId: { type: "string", description: "Beneficial owner" },
534
- shareClass: { type: "string" },
535
- votesFor: { type: "integer", default: 0 },
536
- votesAgainst: { type: "integer", default: 0 },
537
- votesAbstain: { type: "integer", default: 0 },
481
+ shareholderId: { type: 'string', description: 'Beneficial owner' },
482
+ shareClass: { type: 'string' },
483
+ votesFor: { type: 'integer', default: 0 },
484
+ votesAgainst: { type: 'integer', default: 0 },
485
+ votesAbstain: { type: 'integer', default: 0 },
538
486
  votesWithhold: {
539
- type: "integer",
487
+ type: 'integer',
540
488
  default: 0,
541
- description: "For director elections",
489
+ description: 'For director elections',
542
490
  },
543
491
  cumulativeVoteAllocation: {
544
- type: "object",
545
- additionalProperties: { type: "integer" },
492
+ type: 'object',
493
+ additionalProperties: { type: 'integer' },
546
494
  nullable: true,
547
- description: "For cumulative voting: candidate ID -> votes allocated",
495
+ description: 'For cumulative voting: candidate ID -> votes allocated',
548
496
  },
549
- viaProxy: { type: "boolean", default: false },
550
- timestamp: { type: "string", format: "date-time" },
497
+ viaProxy: { type: 'boolean', default: false },
498
+ timestamp: { type: 'string', format: 'date-time' },
551
499
  },
552
500
  },
553
501
  VoteTally: {
554
- type: "object",
502
+ type: 'object',
555
503
  properties: {
556
- agendaItemId: { type: "string" },
557
- forVotes: { type: "integer", default: 0 },
558
- againstVotes: { type: "integer", default: 0 },
559
- abstainVotes: { type: "integer", default: 0 },
560
- withholdVotes: { type: "integer", default: 0 },
561
- brokerNonVotes: { type: "integer", default: 0 },
504
+ agendaItemId: { type: 'string' },
505
+ forVotes: { type: 'integer', default: 0 },
506
+ againstVotes: { type: 'integer', default: 0 },
507
+ abstainVotes: { type: 'integer', default: 0 },
508
+ withholdVotes: { type: 'integer', default: 0 },
509
+ brokerNonVotes: { type: 'integer', default: 0 },
562
510
  candidateVotes: {
563
- type: "object",
564
- additionalProperties: { type: "integer" },
511
+ type: 'object',
512
+ additionalProperties: { type: 'integer' },
565
513
  nullable: true,
566
- description: "For director elections: candidate ID -> total votes",
514
+ description: 'For director elections: candidate ID -> total votes',
567
515
  },
568
516
  result: {
569
- type: "string",
570
- enum: ["APPROVED", "REJECTED", "PENDING"],
517
+ type: 'string',
518
+ enum: ['APPROVED', 'REJECTED', 'PENDING'],
571
519
  },
572
- certified: { type: "boolean", default: false },
520
+ certified: { type: 'boolean', default: false },
573
521
  },
574
522
  },
575
523
  Inspector: {
576
- type: "object",
524
+ type: 'object',
577
525
  nullable: true,
578
526
  properties: {
579
- name: { type: "string" },
580
- company: { type: "string", nullable: true },
581
- appointedBy: { type: "string" },
582
- appointmentDate: { type: "string", format: "date" },
527
+ name: { type: 'string' },
528
+ company: { type: 'string', nullable: true },
529
+ appointedBy: { type: 'string' },
530
+ appointmentDate: { type: 'string', format: 'date' },
583
531
  },
584
532
  },
585
533
  SessionInfo: {
586
- type: "object",
534
+ type: 'object',
587
535
  nullable: true,
588
536
  properties: {
589
- openedAt: { type: "string", format: "date-time" },
590
- chairPerson: { type: "string" },
591
- secretaryPresent: { type: "string" },
592
- pollsOpenedAt: { type: "string", format: "date-time", nullable: true },
593
- pollsClosedAt: { type: "string", format: "date-time", nullable: true },
594
- adjournedAt: { type: "string", format: "date-time", nullable: true },
595
- minutesRef: { type: "string", nullable: true },
537
+ openedAt: { type: 'string', format: 'date-time' },
538
+ chairPerson: { type: 'string' },
539
+ secretaryPresent: { type: 'string' },
540
+ pollsOpenedAt: { type: 'string', format: 'date-time', nullable: true },
541
+ pollsClosedAt: { type: 'string', format: 'date-time', nullable: true },
542
+ adjournedAt: { type: 'string', format: 'date-time', nullable: true },
543
+ minutesRef: { type: 'string', nullable: true },
596
544
  },
597
545
  },
598
546
  Certification: {
599
- type: "object",
547
+ type: 'object',
600
548
  nullable: true,
601
549
  properties: {
602
- certifiedAt: { type: "string", format: "date-time" },
603
- certifiedBy: { type: "string" },
604
- certificateRef: { type: "string" },
550
+ certifiedAt: { type: 'string', format: 'date-time' },
551
+ certifiedBy: { type: 'string' },
552
+ certificateRef: { type: 'string' },
605
553
  },
606
554
  },
607
555
  },
608
556
  states: {
609
557
  SCHEDULED: {
610
- id: "SCHEDULED",
558
+ id: 'SCHEDULED',
611
559
  isFinal: false,
612
- description: "Meeting has been scheduled but record date not yet set",
560
+ description: 'Meeting has been scheduled but record date not yet set',
613
561
  },
614
562
  RECORD_DATE_SET: {
615
- id: "RECORD_DATE_SET",
563
+ id: 'RECORD_DATE_SET',
616
564
  isFinal: false,
617
- description: "Record date established; eligible shareholders determined",
565
+ description: 'Record date established; eligible shareholders determined',
618
566
  },
619
567
  PROXY_PERIOD: {
620
- id: "PROXY_PERIOD",
568
+ id: 'PROXY_PERIOD',
621
569
  isFinal: false,
622
- description: "Proxy materials distributed; shareholders may submit proxies",
570
+ description: 'Proxy materials distributed; shareholders may submit proxies',
623
571
  },
624
572
  IN_SESSION: {
625
- id: "IN_SESSION",
573
+ id: 'IN_SESSION',
626
574
  isFinal: false,
627
- description: "Meeting is convened and in progress",
575
+ description: 'Meeting is convened and in progress',
628
576
  },
629
577
  VOTING: {
630
- id: "VOTING",
578
+ id: 'VOTING',
631
579
  isFinal: false,
632
- description: "Polls are open for voting on agenda items",
580
+ description: 'Polls are open for voting on agenda items',
633
581
  },
634
582
  CLOSED: {
635
- id: "CLOSED",
583
+ id: 'CLOSED',
636
584
  isFinal: true,
637
- description: "Meeting concluded; results certified",
585
+ description: 'Meeting concluded; results certified',
638
586
  },
639
587
  },
640
- initialState: "SCHEDULED",
588
+ initialState: 'SCHEDULED',
641
589
  transitions: [
642
590
  // Initial creation transitions (from: null means creation)
643
591
  // SCHEDULED -> SCHEDULED (propose_schedule_annual) — phase 1 (#24): bind the executing board-resolution
644
592
  // fiber and record the pending meeting, so the next transition can read the resolution's state.
645
593
  {
646
- from: "SCHEDULED",
647
- to: "SCHEDULED",
648
- eventName: "propose_schedule_annual",
649
- guard: { "==": [1, 1] },
594
+ from: 'SCHEDULED',
595
+ to: 'SCHEDULED',
596
+ eventName: 'propose_schedule_annual',
597
+ guard: { '==': [1, 1] },
650
598
  effect: {
651
599
  merge: [
652
- { var: "state" },
600
+ { var: 'state' },
653
601
  {
654
602
  pendingschedule_annual: {
655
- meetingId: { var: "event.meetingId" },
656
- entityId: { var: "event.entityId" },
657
- fiscalYear: { var: "event.fiscalYear" },
658
- scheduledDate: { var: "event.scheduledDate" },
659
- location: { var: "event.location" },
660
- ref: { var: "event.boardResolutionRef" },
661
- proposedAt: { var: "$ordinal" },
603
+ meetingId: { var: 'event.meetingId' },
604
+ entityId: { var: 'event.entityId' },
605
+ fiscalYear: { var: 'event.fiscalYear' },
606
+ scheduledDate: { var: 'event.scheduledDate' },
607
+ location: { var: 'event.location' },
608
+ ref: { var: 'event.boardResolutionRef' },
609
+ proposedAt: { var: '$ordinal' },
662
610
  },
663
611
  },
664
612
  // bind the resolution fiber so schedule_annual can assert its state next transition
665
- (0, effects_js_1.addDependency)({ var: "event.boardResolutionRef" }),
613
+ (0, effects_js_1.addDependency)({ var: 'event.boardResolutionRef' }),
666
614
  ],
667
615
  },
668
616
  dependencies: [],
@@ -670,42 +618,37 @@ exports.corpShareholdersDef = (0, fiber_app_js_1.defineFiberApp)({
670
618
  // SCHEDULED -> SCHEDULED (schedule_annual) — phase 2 (#24): execute once the bound board resolution is
671
619
  // EXECUTED. depInState replaces the dropped object-form dependency (which silently never gated).
672
620
  {
673
- from: "SCHEDULED",
674
- to: "SCHEDULED",
675
- eventName: "schedule_annual",
621
+ from: 'SCHEDULED',
622
+ to: 'SCHEDULED',
623
+ eventName: 'schedule_annual',
676
624
  guard: {
677
625
  and: [
678
626
  // the proposal must target this meeting, and its bound resolution must be EXECUTED
679
627
  {
680
- "==": [
681
- { var: "state.pendingschedule_annual.meetingId" },
682
- { var: "event.meetingId" },
683
- ],
628
+ '==': [{ var: 'state.pendingschedule_annual.meetingId' }, { var: 'event.meetingId' }],
684
629
  },
685
- (0, guards_js_1.depInState)("state.pendingschedule_annual.ref", "EXECUTED"),
630
+ (0, guards_js_1.depInState)('state.pendingschedule_annual.ref', 'EXECUTED'),
686
631
  ],
687
632
  },
688
633
  effect: {
689
634
  merge: [
690
- { var: "state" },
635
+ { var: 'state' },
691
636
  {
692
- meetingId: { var: "event.meetingId" },
693
- entityId: { var: "event.entityId" },
694
- meetingType: "ANNUAL",
695
- fiscalYear: { var: "event.fiscalYear" },
696
- scheduledDate: { var: "event.scheduledDate" },
697
- location: { var: "event.location" },
637
+ meetingId: { var: 'event.meetingId' },
638
+ entityId: { var: 'event.entityId' },
639
+ meetingType: 'ANNUAL',
640
+ fiscalYear: { var: 'event.fiscalYear' },
641
+ scheduledDate: { var: 'event.scheduledDate' },
642
+ location: { var: 'event.location' },
698
643
  calledBy: {
699
- type: "BOARD",
700
- resolutionRef: { var: "state.pendingschedule_annual.ref" },
644
+ type: 'BOARD',
645
+ resolutionRef: { var: 'state.pendingschedule_annual.ref' },
701
646
  },
702
647
  // clear the consumed proposal
703
648
  pendingschedule_annual: null,
704
649
  },
705
650
  {
706
- _emit: [
707
- { name: "SHAREHOLDER_MEETING_SCHEDULED", data: { var: "event" }, destination: "external" },
708
- ],
651
+ _emit: [{ name: 'SHAREHOLDER_MEETING_SCHEDULED', data: { var: 'event' }, destination: 'external' }],
709
652
  },
710
653
  ],
711
654
  },
@@ -713,73 +656,69 @@ exports.corpShareholdersDef = (0, fiber_app_js_1.defineFiberApp)({
713
656
  },
714
657
  // schedule_special -> SCHEDULED
715
658
  {
716
- from: "SCHEDULED",
717
- to: "SCHEDULED",
718
- eventName: "schedule_special",
719
- guard: { "==": [1, 1] },
659
+ from: 'SCHEDULED',
660
+ to: 'SCHEDULED',
661
+ eventName: 'schedule_special',
662
+ guard: { '==': [1, 1] },
720
663
  effect: {
721
664
  merge: [
722
- { var: "state" },
665
+ { var: 'state' },
723
666
  {
724
- meetingId: { var: "event.meetingId" },
725
- entityId: { var: "event.entityId" },
726
- meetingType: "SPECIAL",
727
- scheduledDate: { var: "event.scheduledDate" },
667
+ meetingId: { var: 'event.meetingId' },
668
+ entityId: { var: 'event.entityId' },
669
+ meetingType: 'SPECIAL',
670
+ scheduledDate: { var: 'event.scheduledDate' },
728
671
  calledBy: {
729
- type: { var: "event.calledByType" },
672
+ type: { var: 'event.calledByType' },
730
673
  },
731
674
  },
732
675
  {
733
- _emit: [
734
- { name: "SPECIAL_MEETING_SCHEDULED", data: { var: "event" }, destination: "external" },
735
- ],
676
+ _emit: [{ name: 'SPECIAL_MEETING_SCHEDULED', data: { var: 'event' }, destination: 'external' }],
736
677
  },
737
678
  ],
738
679
  },
739
680
  },
740
681
  // SCHEDULED -> RECORD_DATE_SET
741
682
  {
742
- from: "SCHEDULED",
743
- to: "RECORD_DATE_SET",
744
- eventName: "set_record_date",
745
- guard: { "==": [1, 1] }, // validRecordDateTiming simplified
683
+ from: 'SCHEDULED',
684
+ to: 'RECORD_DATE_SET',
685
+ eventName: 'set_record_date',
686
+ guard: { '==': [1, 1] }, // validRecordDateTiming simplified
746
687
  effect: {
747
688
  merge: [
748
- { var: "state" },
689
+ { var: 'state' },
749
690
  {
750
- status: "RECORD_DATE_SET",
691
+ status: 'RECORD_DATE_SET',
751
692
  recordDate: {
752
- date: { var: "event.recordDate" },
753
- setByBoardOn: { var: "$ordinal" },
754
- resolutionRef: { var: "event.resolutionRef" },
693
+ date: { var: 'event.recordDate' },
694
+ setByBoardOn: { var: '$ordinal' },
695
+ resolutionRef: { var: 'event.resolutionRef' },
755
696
  },
756
697
  },
757
698
  {
758
- _emit: [
759
- { name: "RECORD_DATE_SET", data: { var: "event" }, destination: "external" },
760
- ],
699
+ _emit: [{ name: 'RECORD_DATE_SET', data: { var: 'event' }, destination: 'external' }],
761
700
  },
762
701
  ],
763
702
  },
764
703
  },
765
704
  // RECORD_DATE_SET -> RECORD_DATE_SET (register_eligible_shareholders)
766
705
  {
767
- from: "RECORD_DATE_SET",
768
- to: "RECORD_DATE_SET",
769
- eventName: "register_eligible_shareholders",
706
+ from: 'RECORD_DATE_SET',
707
+ to: 'RECORD_DATE_SET',
708
+ eventName: 'register_eligible_shareholders',
770
709
  // authority gate — only the pinned registrar may set the roster of record; an identity role attestation (ISSUER/BOARD_MEMBER/...) layers on additively when the identity registry lands (docs/design/app-hardening-identity-integration.md §4.2)
771
- guard: (0, guards_js_1.signerIsParty)("state.registrar"),
710
+ guard: (0, guards_js_1.signerIsParty)('state.registrar'),
772
711
  effect: {
773
712
  merge: [
774
- { var: "state" },
713
+ { var: 'state' },
775
714
  {
776
- eligibleVoters: { var: "event.shareholders" },
715
+ eligibleVoters: { var: 'event.shareholders' },
777
716
  quorumRequirements: {
778
717
  merge: [
779
- { var: "state.quorumRequirements" },
718
+ { var: 'state.quorumRequirements' },
780
719
  {
781
720
  sharesRequired: {
782
- "*": [{ var: "event.totalSharesOutstanding" }, 0.5],
721
+ '*': [{ var: 'event.totalSharesOutstanding' }, 0.5],
783
722
  },
784
723
  },
785
724
  ],
@@ -790,66 +729,61 @@ exports.corpShareholdersDef = (0, fiber_app_js_1.defineFiberApp)({
790
729
  },
791
730
  // RECORD_DATE_SET -> PROXY_PERIOD
792
731
  {
793
- from: "RECORD_DATE_SET",
794
- to: "PROXY_PERIOD",
795
- eventName: "open_proxy_period",
796
- guard: { "==": [1, 1] },
732
+ from: 'RECORD_DATE_SET',
733
+ to: 'PROXY_PERIOD',
734
+ eventName: 'open_proxy_period',
735
+ guard: { '==': [1, 1] },
797
736
  effect: {
798
737
  merge: [
799
- { var: "state" },
738
+ { var: 'state' },
800
739
  {
801
- status: "PROXY_PERIOD",
740
+ status: 'PROXY_PERIOD',
802
741
  proxyPeriod: {
803
- startDate: { var: "event.startDate" },
804
- endDate: { var: "state.scheduledDate" },
742
+ startDate: { var: 'event.startDate' },
743
+ endDate: { var: 'state.scheduledDate' },
805
744
  proxyMaterials: {
806
- proxyStatementRef: { var: "event.proxyStatementRef" },
807
- formOfProxyRef: { var: "event.formOfProxyRef" },
808
- annualReportRef: { var: "event.annualReportRef" },
745
+ proxyStatementRef: { var: 'event.proxyStatementRef' },
746
+ formOfProxyRef: { var: 'event.formOfProxyRef' },
747
+ annualReportRef: { var: 'event.annualReportRef' },
809
748
  },
810
749
  },
811
- agenda: { var: "event.agenda" },
750
+ agenda: { var: 'event.agenda' },
812
751
  noticeInfo: {
813
- merge: [
814
- { var: "state.noticeInfo" },
815
- { noticeSentDate: { var: "event.startDate" } },
816
- ],
752
+ merge: [{ var: 'state.noticeInfo' }, { noticeSentDate: { var: 'event.startDate' } }],
817
753
  },
818
754
  },
819
755
  {
820
- _emit: [
821
- { name: "PROXY_PERIOD_OPENED", data: { var: "event" }, destination: "external" },
822
- ],
756
+ _emit: [{ name: 'PROXY_PERIOD_OPENED', data: { var: 'event' }, destination: 'external' }],
823
757
  },
824
758
  ],
825
759
  },
826
760
  },
827
761
  // add_agenda_item (can be from multiple states)
828
762
  {
829
- from: "SCHEDULED",
830
- to: "SCHEDULED",
831
- eventName: "add_agenda_item",
832
- guard: { "==": [1, 1] },
763
+ from: 'SCHEDULED',
764
+ to: 'SCHEDULED',
765
+ eventName: 'add_agenda_item',
766
+ guard: { '==': [1, 1] },
833
767
  effect: {
834
768
  merge: [
835
- { var: "state" },
769
+ { var: 'state' },
836
770
  {
837
771
  agenda: {
838
772
  merge: [
839
- { var: "state.agenda" },
773
+ { var: 'state.agenda' },
840
774
  [
841
775
  {
842
- itemId: { var: "event.itemId" },
843
- itemNumber: { "+": [{ length: [{ var: "state.agenda" }] }, 1] },
844
- title: { var: "event.title" },
845
- description: { var: "event.description" },
846
- type: { var: "event.type" },
847
- voteRequired: { var: "event.voteRequired" },
848
- eligibleClasses: { var: "event.eligibleClasses" },
776
+ itemId: { var: 'event.itemId' },
777
+ itemNumber: { '+': [{ length: [{ var: 'state.agenda' }] }, 1] },
778
+ title: { var: 'event.title' },
779
+ description: { var: 'event.description' },
780
+ type: { var: 'event.type' },
781
+ voteRequired: { var: 'event.voteRequired' },
782
+ eligibleClasses: { var: 'event.eligibleClasses' },
849
783
  allowCumulativeVoting: {
850
- var: "event.allowCumulativeVoting",
784
+ var: 'event.allowCumulativeVoting',
851
785
  },
852
- status: "PENDING",
786
+ status: 'PENDING',
853
787
  },
854
788
  ],
855
789
  ],
@@ -859,30 +793,30 @@ exports.corpShareholdersDef = (0, fiber_app_js_1.defineFiberApp)({
859
793
  },
860
794
  },
861
795
  {
862
- from: "RECORD_DATE_SET",
863
- to: "RECORD_DATE_SET",
864
- eventName: "add_agenda_item",
865
- guard: { "==": [1, 1] },
796
+ from: 'RECORD_DATE_SET',
797
+ to: 'RECORD_DATE_SET',
798
+ eventName: 'add_agenda_item',
799
+ guard: { '==': [1, 1] },
866
800
  effect: {
867
801
  merge: [
868
- { var: "state" },
802
+ { var: 'state' },
869
803
  {
870
804
  agenda: {
871
805
  merge: [
872
- { var: "state.agenda" },
806
+ { var: 'state.agenda' },
873
807
  [
874
808
  {
875
- itemId: { var: "event.itemId" },
876
- itemNumber: { "+": [{ length: [{ var: "state.agenda" }] }, 1] },
877
- title: { var: "event.title" },
878
- description: { var: "event.description" },
879
- type: { var: "event.type" },
880
- voteRequired: { var: "event.voteRequired" },
881
- eligibleClasses: { var: "event.eligibleClasses" },
809
+ itemId: { var: 'event.itemId' },
810
+ itemNumber: { '+': [{ length: [{ var: 'state.agenda' }] }, 1] },
811
+ title: { var: 'event.title' },
812
+ description: { var: 'event.description' },
813
+ type: { var: 'event.type' },
814
+ voteRequired: { var: 'event.voteRequired' },
815
+ eligibleClasses: { var: 'event.eligibleClasses' },
882
816
  allowCumulativeVoting: {
883
- var: "event.allowCumulativeVoting",
817
+ var: 'event.allowCumulativeVoting',
884
818
  },
885
- status: "PENDING",
819
+ status: 'PENDING',
886
820
  },
887
821
  ],
888
822
  ],
@@ -892,30 +826,30 @@ exports.corpShareholdersDef = (0, fiber_app_js_1.defineFiberApp)({
892
826
  },
893
827
  },
894
828
  {
895
- from: "PROXY_PERIOD",
896
- to: "PROXY_PERIOD",
897
- eventName: "add_agenda_item",
898
- guard: { "==": [1, 1] },
829
+ from: 'PROXY_PERIOD',
830
+ to: 'PROXY_PERIOD',
831
+ eventName: 'add_agenda_item',
832
+ guard: { '==': [1, 1] },
899
833
  effect: {
900
834
  merge: [
901
- { var: "state" },
835
+ { var: 'state' },
902
836
  {
903
837
  agenda: {
904
838
  merge: [
905
- { var: "state.agenda" },
839
+ { var: 'state.agenda' },
906
840
  [
907
841
  {
908
- itemId: { var: "event.itemId" },
909
- itemNumber: { "+": [{ length: [{ var: "state.agenda" }] }, 1] },
910
- title: { var: "event.title" },
911
- description: { var: "event.description" },
912
- type: { var: "event.type" },
913
- voteRequired: { var: "event.voteRequired" },
914
- eligibleClasses: { var: "event.eligibleClasses" },
842
+ itemId: { var: 'event.itemId' },
843
+ itemNumber: { '+': [{ length: [{ var: 'state.agenda' }] }, 1] },
844
+ title: { var: 'event.title' },
845
+ description: { var: 'event.description' },
846
+ type: { var: 'event.type' },
847
+ voteRequired: { var: 'event.voteRequired' },
848
+ eligibleClasses: { var: 'event.eligibleClasses' },
915
849
  allowCumulativeVoting: {
916
- var: "event.allowCumulativeVoting",
850
+ var: 'event.allowCumulativeVoting',
917
851
  },
918
- status: "PENDING",
852
+ status: 'PENDING',
919
853
  },
920
854
  ],
921
855
  ],
@@ -926,66 +860,58 @@ exports.corpShareholdersDef = (0, fiber_app_js_1.defineFiberApp)({
926
860
  },
927
861
  // PROXY_PERIOD -> IN_SESSION
928
862
  {
929
- from: "PROXY_PERIOD",
930
- to: "IN_SESSION",
931
- eventName: "open_meeting",
863
+ from: 'PROXY_PERIOD',
864
+ to: 'IN_SESSION',
865
+ eventName: 'open_meeting',
932
866
  guard: {
933
- ">=": [
934
- { var: "event.initialQuorumCount" },
935
- { var: "state.quorumRequirements.sharesRequired" },
936
- ],
867
+ '>=': [{ var: 'event.initialQuorumCount' }, { var: 'state.quorumRequirements.sharesRequired' }],
937
868
  },
938
869
  effect: {
939
870
  merge: [
940
- { var: "state" },
871
+ { var: 'state' },
941
872
  {
942
- status: "IN_SESSION",
873
+ status: 'IN_SESSION',
943
874
  sessionInfo: {
944
- openedAt: { var: "event.openedAt" },
945
- chairPerson: { var: "event.chairPerson" },
946
- secretaryPresent: { var: "event.secretaryPresent" },
875
+ openedAt: { var: 'event.openedAt' },
876
+ chairPerson: { var: 'event.chairPerson' },
877
+ secretaryPresent: { var: 'event.secretaryPresent' },
947
878
  },
948
- inspectorOfElections: { var: "event.inspectorOfElections" },
879
+ inspectorOfElections: { var: 'event.inspectorOfElections' },
949
880
  quorumRequirements: {
950
881
  merge: [
951
- { var: "state.quorumRequirements" },
882
+ { var: 'state.quorumRequirements' },
952
883
  {
953
- sharesRepresented: { var: "event.initialQuorumCount" },
884
+ sharesRepresented: { var: 'event.initialQuorumCount' },
954
885
  quorumMet: true,
955
886
  },
956
887
  ],
957
888
  },
958
889
  },
959
890
  {
960
- _emit: [
961
- { name: "SHAREHOLDER_MEETING_OPENED", data: { var: "event" }, destination: "external" },
962
- ],
891
+ _emit: [{ name: 'SHAREHOLDER_MEETING_OPENED', data: { var: 'event' }, destination: 'external' }],
963
892
  },
964
893
  ],
965
894
  },
966
895
  },
967
896
  // IN_SESSION -> VOTING
968
897
  {
969
- from: "IN_SESSION",
970
- to: "VOTING",
971
- eventName: "open_polls",
972
- guard: { "==": [1, 1] },
898
+ from: 'IN_SESSION',
899
+ to: 'VOTING',
900
+ eventName: 'open_polls',
901
+ guard: { '==': [1, 1] },
973
902
  effect: {
974
903
  merge: [
975
- { var: "state" },
904
+ { var: 'state' },
976
905
  {
977
- status: "VOTING",
906
+ status: 'VOTING',
978
907
  sessionInfo: {
979
- merge: [
980
- { var: "state.sessionInfo" },
981
- { pollsOpenedAt: { var: "event.pollsOpenedAt" } },
982
- ],
908
+ merge: [{ var: 'state.sessionInfo' }, { pollsOpenedAt: { var: 'event.pollsOpenedAt' } }],
983
909
  },
984
910
  agenda: {
985
911
  map: [
986
- { var: "state.agenda" },
912
+ { var: 'state.agenda' },
987
913
  {
988
- merge: [{ var: "" }, { status: "VOTING" }],
914
+ merge: [{ var: '' }, { status: 'VOTING' }],
989
915
  },
990
916
  ],
991
917
  },
@@ -995,50 +921,38 @@ exports.corpShareholdersDef = (0, fiber_app_js_1.defineFiberApp)({
995
921
  },
996
922
  // VOTING -> VOTING (cast_vote)
997
923
  {
998
- from: "VOTING",
999
- to: "VOTING",
1000
- eventName: "cast_vote",
924
+ from: 'VOTING',
925
+ to: 'VOTING',
926
+ eventName: 'cast_vote',
1001
927
  // authority gate — the roster entry identified by event.shareholderId must carry an address that signed (address ∈ proofs[].address), so the recorded shareholderId is provably the matched entry's, not a forged one; an identity attestation layers on additively when the identity registry lands (docs/design/app-hardening-identity-integration.md §4.2)
1002
928
  guard: {
1003
929
  and: [
1004
930
  {
1005
931
  some: [
1006
- { var: "state.eligibleVoters" },
932
+ { var: 'state.eligibleVoters' },
1007
933
  {
1008
934
  and: [
1009
935
  {
1010
- "==": [
1011
- { var: "shareholderId" },
1012
- { var: "event.shareholderId" },
1013
- ],
936
+ '==': [{ var: 'shareholderId' }, { var: 'event.shareholderId' }],
1014
937
  },
1015
938
  {
1016
- in: [
1017
- { var: "address" },
1018
- { map: [{ var: "proofs" }, { var: "address" }] },
1019
- ],
939
+ in: [{ var: 'address' }, { map: [{ var: 'proofs' }, { var: 'address' }] }],
1020
940
  },
1021
941
  ],
1022
942
  },
1023
943
  ],
1024
944
  },
1025
945
  {
1026
- "!": {
946
+ '!': {
1027
947
  some: [
1028
- { var: "state.votes" },
948
+ { var: 'state.votes' },
1029
949
  {
1030
950
  and: [
1031
951
  {
1032
- "==": [
1033
- { var: "shareholderId" },
1034
- { var: "event.shareholderId" },
1035
- ],
952
+ '==': [{ var: 'shareholderId' }, { var: 'event.shareholderId' }],
1036
953
  },
1037
954
  {
1038
- "==": [
1039
- { var: "agendaItemId" },
1040
- { var: "event.agendaItemId" },
1041
- ],
955
+ '==': [{ var: 'agendaItemId' }, { var: 'event.agendaItemId' }],
1042
956
  },
1043
957
  ],
1044
958
  },
@@ -1049,46 +963,43 @@ exports.corpShareholdersDef = (0, fiber_app_js_1.defineFiberApp)({
1049
963
  },
1050
964
  effect: {
1051
965
  merge: [
1052
- { var: "state" },
966
+ { var: 'state' },
1053
967
  {
1054
968
  votes: {
1055
969
  merge: [
1056
- { var: "state.votes" },
970
+ { var: 'state.votes' },
1057
971
  [
1058
972
  {
1059
- voteId: { var: "event.voteId" },
1060
- agendaItemId: { var: "event.agendaItemId" },
1061
- voterId: { var: "event.voterId" },
1062
- shareholderId: { var: "event.shareholderId" },
1063
- shareClass: { var: "event.shareClass" },
1064
- votesFor: { var: "event.votesFor" },
1065
- votesAgainst: { var: "event.votesAgainst" },
1066
- votesAbstain: { var: "event.votesAbstain" },
1067
- votesWithhold: { var: "event.votesWithhold" },
973
+ voteId: { var: 'event.voteId' },
974
+ agendaItemId: { var: 'event.agendaItemId' },
975
+ voterId: { var: 'event.voterId' },
976
+ shareholderId: { var: 'event.shareholderId' },
977
+ shareClass: { var: 'event.shareClass' },
978
+ votesFor: { var: 'event.votesFor' },
979
+ votesAgainst: { var: 'event.votesAgainst' },
980
+ votesAbstain: { var: 'event.votesAbstain' },
981
+ votesWithhold: { var: 'event.votesWithhold' },
1068
982
  cumulativeVoteAllocation: {
1069
- var: "event.cumulativeVoteAllocation",
983
+ var: 'event.cumulativeVoteAllocation',
1070
984
  },
1071
- viaProxy: { var: "event.viaProxy" },
1072
- timestamp: { var: "$ordinal" },
985
+ viaProxy: { var: 'event.viaProxy' },
986
+ timestamp: { var: '$ordinal' },
1073
987
  },
1074
988
  ],
1075
989
  ],
1076
990
  },
1077
991
  eligibleVoters: {
1078
992
  map: [
1079
- { var: "state.eligibleVoters" },
993
+ { var: 'state.eligibleVoters' },
1080
994
  {
1081
995
  if: [
1082
996
  {
1083
- "==": [
1084
- { var: "shareholderId" },
1085
- { var: "event.shareholderId" },
1086
- ],
997
+ '==': [{ var: 'shareholderId' }, { var: 'event.shareholderId' }],
1087
998
  },
1088
999
  {
1089
- merge: [{ var: "" }, { hasVoted: true }],
1000
+ merge: [{ var: '' }, { hasVoted: true }],
1090
1001
  },
1091
- { var: "" },
1002
+ { var: '' },
1092
1003
  ],
1093
1004
  },
1094
1005
  ],
@@ -1099,26 +1010,23 @@ exports.corpShareholdersDef = (0, fiber_app_js_1.defineFiberApp)({
1099
1010
  },
1100
1011
  // VOTING -> IN_SESSION (close_polls)
1101
1012
  {
1102
- from: "VOTING",
1103
- to: "IN_SESSION",
1104
- eventName: "close_polls",
1105
- guard: { "==": [1, 1] },
1013
+ from: 'VOTING',
1014
+ to: 'IN_SESSION',
1015
+ eventName: 'close_polls',
1016
+ guard: { '==': [1, 1] },
1106
1017
  effect: {
1107
1018
  merge: [
1108
- { var: "state" },
1019
+ { var: 'state' },
1109
1020
  {
1110
- status: "IN_SESSION",
1021
+ status: 'IN_SESSION',
1111
1022
  sessionInfo: {
1112
- merge: [
1113
- { var: "state.sessionInfo" },
1114
- { pollsClosedAt: { var: "event.pollsClosedAt" } },
1115
- ],
1023
+ merge: [{ var: 'state.sessionInfo' }, { pollsClosedAt: { var: 'event.pollsClosedAt' } }],
1116
1024
  },
1117
1025
  agenda: {
1118
1026
  map: [
1119
- { var: "state.agenda" },
1027
+ { var: 'state.agenda' },
1120
1028
  {
1121
- merge: [{ var: "" }, { status: "CLOSED" }],
1029
+ merge: [{ var: '' }, { status: 'CLOSED' }],
1122
1030
  },
1123
1031
  ],
1124
1032
  },
@@ -1128,86 +1036,74 @@ exports.corpShareholdersDef = (0, fiber_app_js_1.defineFiberApp)({
1128
1036
  },
1129
1037
  // IN_SESSION -> CLOSED (certify_results)
1130
1038
  {
1131
- from: "IN_SESSION",
1132
- to: "CLOSED",
1133
- eventName: "certify_results",
1134
- guard: { "==": [1, 1] },
1039
+ from: 'IN_SESSION',
1040
+ to: 'CLOSED',
1041
+ eventName: 'certify_results',
1042
+ guard: { '==': [1, 1] },
1135
1043
  effect: {
1136
1044
  merge: [
1137
- { var: "state" },
1045
+ { var: 'state' },
1138
1046
  {
1139
- status: "CLOSED",
1047
+ status: 'CLOSED',
1140
1048
  certification: {
1141
- certifiedAt: { var: "event.certifiedAt" },
1142
- certifiedBy: { var: "event.certifiedBy" },
1143
- certificateRef: { var: "event.certificateRef" },
1049
+ certifiedAt: { var: 'event.certifiedAt' },
1050
+ certifiedBy: { var: 'event.certifiedBy' },
1051
+ certificateRef: { var: 'event.certificateRef' },
1144
1052
  },
1145
1053
  sessionInfo: {
1146
1054
  merge: [
1147
- { var: "state.sessionInfo" },
1055
+ { var: 'state.sessionInfo' },
1148
1056
  {
1149
- adjournedAt: { var: "event.certifiedAt" },
1150
- minutesRef: { var: "event.minutesRef" },
1057
+ adjournedAt: { var: 'event.certifiedAt' },
1058
+ minutesRef: { var: 'event.minutesRef' },
1151
1059
  },
1152
1060
  ],
1153
1061
  },
1154
1062
  },
1155
1063
  {
1156
- _emit: [
1157
- { name: "MEETING_RESULTS_CERTIFIED", data: { var: "event" }, destination: "external" },
1158
- ],
1064
+ _emit: [{ name: 'MEETING_RESULTS_CERTIFIED', data: { var: 'event' }, destination: 'external' }],
1159
1065
  },
1160
1066
  ],
1161
1067
  },
1162
1068
  },
1163
1069
  // IN_SESSION -> CLOSED (adjourn_without_action)
1164
1070
  {
1165
- from: "IN_SESSION",
1166
- to: "CLOSED",
1167
- eventName: "adjourn_without_action",
1168
- guard: { "==": [1, 1] },
1071
+ from: 'IN_SESSION',
1072
+ to: 'CLOSED',
1073
+ eventName: 'adjourn_without_action',
1074
+ guard: { '==': [1, 1] },
1169
1075
  effect: {
1170
1076
  merge: [
1171
- { var: "state" },
1077
+ { var: 'state' },
1172
1078
  {
1173
- status: "CLOSED",
1079
+ status: 'CLOSED',
1174
1080
  sessionInfo: {
1175
- merge: [
1176
- { var: "state.sessionInfo" },
1177
- { adjournedAt: { var: "event.adjournedAt" } },
1178
- ],
1081
+ merge: [{ var: 'state.sessionInfo' }, { adjournedAt: { var: 'event.adjournedAt' } }],
1179
1082
  },
1180
1083
  },
1181
1084
  {
1182
- _emit: [
1183
- { name: "MEETING_ADJOURNED", data: { var: "event" }, destination: "external" },
1184
- ],
1085
+ _emit: [{ name: 'MEETING_ADJOURNED', data: { var: 'event' }, destination: 'external' }],
1185
1086
  },
1186
1087
  ],
1187
1088
  },
1188
1089
  },
1189
1090
  // VOTING -> CLOSED (adjourn_without_action)
1190
1091
  {
1191
- from: "VOTING",
1192
- to: "CLOSED",
1193
- eventName: "adjourn_without_action",
1194
- guard: { "==": [1, 1] },
1092
+ from: 'VOTING',
1093
+ to: 'CLOSED',
1094
+ eventName: 'adjourn_without_action',
1095
+ guard: { '==': [1, 1] },
1195
1096
  effect: {
1196
1097
  merge: [
1197
- { var: "state" },
1098
+ { var: 'state' },
1198
1099
  {
1199
- status: "CLOSED",
1100
+ status: 'CLOSED',
1200
1101
  sessionInfo: {
1201
- merge: [
1202
- { var: "state.sessionInfo" },
1203
- { adjournedAt: { var: "event.adjournedAt" } },
1204
- ],
1102
+ merge: [{ var: 'state.sessionInfo' }, { adjournedAt: { var: 'event.adjournedAt' } }],
1205
1103
  },
1206
1104
  },
1207
1105
  {
1208
- _emit: [
1209
- { name: "MEETING_ADJOURNED", data: { var: "event" }, destination: "external" },
1210
- ],
1106
+ _emit: [{ name: 'MEETING_ADJOURNED', data: { var: 'event' }, destination: 'external' }],
1211
1107
  },
1212
1108
  ],
1213
1109
  },