@ottochain/sdk 0.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 (330) hide show
  1. package/README.md +305 -0
  2. package/dist/apps/contracts/index.d.ts +21 -0
  3. package/dist/apps/contracts/index.js +39 -0
  4. package/dist/apps/contracts/types.d.ts +24 -0
  5. package/dist/apps/contracts/types.js +48 -0
  6. package/dist/apps/identity/index.d.ts +22 -0
  7. package/dist/apps/identity/index.js +40 -0
  8. package/dist/apps/identity/types.d.ts +30 -0
  9. package/dist/apps/identity/types.js +53 -0
  10. package/dist/apps/index.d.ts +29 -0
  11. package/dist/apps/index.js +60 -0
  12. package/dist/apps/markets/index.d.ts +26 -0
  13. package/dist/apps/markets/index.js +46 -0
  14. package/dist/apps/markets/types.d.ts +185 -0
  15. package/dist/apps/markets/types.js +252 -0
  16. package/dist/apps/oracles/index.d.ts +26 -0
  17. package/dist/apps/oracles/index.js +46 -0
  18. package/dist/apps/oracles/types.d.ts +211 -0
  19. package/dist/apps/oracles/types.js +306 -0
  20. package/dist/cjs/apps/contracts/index.js +60 -0
  21. package/dist/cjs/apps/contracts/state-machines/contract.json +420 -0
  22. package/dist/cjs/apps/contracts/state-machines/escrow.json +426 -0
  23. package/dist/cjs/apps/contracts/types.js +48 -0
  24. package/dist/cjs/apps/corporate/index.js +112 -0
  25. package/dist/cjs/apps/corporate/state-machines/corporate-board.json +1064 -0
  26. package/dist/cjs/apps/corporate/state-machines/corporate-bylaws.json +751 -0
  27. package/dist/cjs/apps/corporate/state-machines/corporate-committee.json +957 -0
  28. package/dist/cjs/apps/corporate/state-machines/corporate-compliance.json +1293 -0
  29. package/dist/cjs/apps/corporate/state-machines/corporate-entity.json +861 -0
  30. package/dist/cjs/apps/corporate/state-machines/corporate-officers.json +843 -0
  31. package/dist/cjs/apps/corporate/state-machines/corporate-proxy.json +783 -0
  32. package/dist/cjs/apps/corporate/state-machines/corporate-resolution.json +1174 -0
  33. package/dist/cjs/apps/corporate/state-machines/corporate-securities.json +1215 -0
  34. package/dist/cjs/apps/corporate/state-machines/corporate-shareholders.json +1298 -0
  35. package/dist/cjs/apps/corporate/types.js +44 -0
  36. package/dist/cjs/apps/governance/index.js +203 -0
  37. package/dist/cjs/apps/governance/state-machines/dao-multisig.json +711 -0
  38. package/dist/cjs/apps/governance/state-machines/dao-single.json +258 -0
  39. package/dist/cjs/apps/governance/state-machines/dao-threshold.json +660 -0
  40. package/dist/cjs/apps/governance/state-machines/dao-token.json +680 -0
  41. package/dist/cjs/apps/governance/state-machines/governance-constitution.json +401 -0
  42. package/dist/cjs/apps/governance/state-machines/governance-executive.json +441 -0
  43. package/dist/cjs/apps/governance/state-machines/governance-judiciary.json +626 -0
  44. package/dist/cjs/apps/governance/state-machines/governance-legislature.json +726 -0
  45. package/dist/cjs/apps/governance/state-machines/governance-simple.json +679 -0
  46. package/dist/cjs/apps/governance/types.js +42 -0
  47. package/dist/cjs/apps/identity/constants.js +58 -0
  48. package/dist/cjs/apps/identity/index.js +78 -0
  49. package/dist/cjs/apps/identity/state-machines/agent-identity.json +320 -0
  50. package/dist/cjs/apps/identity/types.js +53 -0
  51. package/dist/cjs/apps/index.js +58 -0
  52. package/dist/cjs/apps/markets/index.js +55 -0
  53. package/dist/cjs/apps/markets/state-machines/market-universal.json +354 -0
  54. package/dist/cjs/apps/markets/types.js +219 -0
  55. package/dist/cjs/apps/oracles/index.js +62 -0
  56. package/dist/cjs/apps/oracles/state-machines/oracle.json +452 -0
  57. package/dist/cjs/apps/oracles/types.js +282 -0
  58. package/dist/cjs/errors.js +293 -0
  59. package/dist/cjs/generated/google/protobuf/struct.js +514 -0
  60. package/dist/cjs/generated/google/protobuf/timestamp.js +92 -0
  61. package/dist/cjs/generated/index.js +150 -0
  62. package/dist/cjs/generated/ottochain/apps/contracts/v1/contract.js +873 -0
  63. package/dist/cjs/generated/ottochain/apps/contracts/v1/contract_pb.js +100 -0
  64. package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate.js +4515 -0
  65. package/dist/cjs/generated/ottochain/apps/corporate/v1/corporate_pb.js +392 -0
  66. package/dist/cjs/generated/ottochain/apps/governance/v1/governance.js +3255 -0
  67. package/dist/cjs/generated/ottochain/apps/governance/v1/governance_pb.js +235 -0
  68. package/dist/cjs/generated/ottochain/apps/identity/v1/agent.js +619 -0
  69. package/dist/cjs/generated/ottochain/apps/identity/v1/agent_pb.js +116 -0
  70. package/dist/cjs/generated/ottochain/apps/identity/v1/attestation.js +780 -0
  71. package/dist/cjs/generated/ottochain/apps/identity/v1/attestation_pb.js +79 -0
  72. package/dist/cjs/generated/ottochain/apps/markets/v1/market.js +1261 -0
  73. package/dist/cjs/generated/ottochain/apps/markets/v1/market_pb.js +151 -0
  74. package/dist/cjs/generated/ottochain/apps/oracles/v1/oracle.js +1223 -0
  75. package/dist/cjs/generated/ottochain/apps/oracles/v1/oracle_pb.js +109 -0
  76. package/dist/cjs/generated/ottochain/v1/common.js +10 -0
  77. package/dist/cjs/generated/ottochain/v1/common_pb.js +37 -0
  78. package/dist/cjs/generated/ottochain/v1/fiber.js +1057 -0
  79. package/dist/cjs/generated/ottochain/v1/fiber_pb.js +86 -0
  80. package/dist/cjs/generated/ottochain/v1/messages.js +740 -0
  81. package/dist/cjs/generated/ottochain/v1/messages_pb.js +44 -0
  82. package/dist/cjs/generated/ottochain/v1/records.js +1253 -0
  83. package/dist/cjs/generated/ottochain/v1/records_pb.js +44 -0
  84. package/dist/cjs/index.js +79 -0
  85. package/dist/cjs/metakit/binary.js +58 -0
  86. package/dist/cjs/metakit/canonicalize.js +40 -0
  87. package/dist/cjs/metakit/codec.js +45 -0
  88. package/dist/cjs/metakit/currency-transaction.js +319 -0
  89. package/dist/cjs/metakit/currency-types.js +13 -0
  90. package/dist/cjs/metakit/hash.js +84 -0
  91. package/dist/cjs/metakit/index.js +74 -0
  92. package/dist/cjs/metakit/network/client.js +78 -0
  93. package/dist/cjs/metakit/network/currency-l1-client.js +101 -0
  94. package/dist/cjs/metakit/network/data-l1-client.js +76 -0
  95. package/dist/cjs/metakit/network/index.js +16 -0
  96. package/dist/cjs/metakit/network/types.js +20 -0
  97. package/dist/cjs/metakit/sign.js +120 -0
  98. package/dist/cjs/metakit/signed-object.js +100 -0
  99. package/dist/cjs/metakit/types.js +14 -0
  100. package/dist/cjs/metakit/verify.js +217 -0
  101. package/dist/cjs/metakit/wallet.js +127 -0
  102. package/dist/cjs/ottochain/index.js +47 -0
  103. package/dist/cjs/ottochain/metagraph-client.js +157 -0
  104. package/dist/cjs/ottochain/snapshot.js +110 -0
  105. package/dist/cjs/ottochain/types.js +11 -0
  106. package/dist/cjs/package.json +1 -0
  107. package/dist/cjs/types.js +25 -0
  108. package/dist/cjs/validation.js +312 -0
  109. package/dist/errors.d.ts +221 -0
  110. package/dist/errors.js +293 -0
  111. package/dist/esm/apps/contracts/index.js +42 -0
  112. package/dist/esm/apps/contracts/state-machines/contract.json +420 -0
  113. package/dist/esm/apps/contracts/state-machines/escrow.json +426 -0
  114. package/dist/esm/apps/contracts/types.js +44 -0
  115. package/dist/esm/apps/corporate/index.js +57 -0
  116. package/dist/esm/apps/corporate/state-machines/corporate-board.json +1064 -0
  117. package/dist/esm/apps/corporate/state-machines/corporate-bylaws.json +751 -0
  118. package/dist/esm/apps/corporate/state-machines/corporate-committee.json +957 -0
  119. package/dist/esm/apps/corporate/state-machines/corporate-compliance.json +1293 -0
  120. package/dist/esm/apps/corporate/state-machines/corporate-entity.json +861 -0
  121. package/dist/esm/apps/corporate/state-machines/corporate-officers.json +843 -0
  122. package/dist/esm/apps/corporate/state-machines/corporate-proxy.json +783 -0
  123. package/dist/esm/apps/corporate/state-machines/corporate-resolution.json +1174 -0
  124. package/dist/esm/apps/corporate/state-machines/corporate-securities.json +1215 -0
  125. package/dist/esm/apps/corporate/state-machines/corporate-shareholders.json +1298 -0
  126. package/dist/esm/apps/corporate/types.js +38 -0
  127. package/dist/esm/apps/governance/index.js +154 -0
  128. package/dist/esm/apps/governance/state-machines/dao-multisig.json +711 -0
  129. package/dist/esm/apps/governance/state-machines/dao-single.json +258 -0
  130. package/dist/esm/apps/governance/state-machines/dao-threshold.json +660 -0
  131. package/dist/esm/apps/governance/state-machines/dao-token.json +680 -0
  132. package/dist/esm/apps/governance/state-machines/governance-constitution.json +401 -0
  133. package/dist/esm/apps/governance/state-machines/governance-executive.json +441 -0
  134. package/dist/esm/apps/governance/state-machines/governance-judiciary.json +626 -0
  135. package/dist/esm/apps/governance/state-machines/governance-legislature.json +726 -0
  136. package/dist/esm/apps/governance/state-machines/governance-simple.json +679 -0
  137. package/dist/esm/apps/governance/types.js +35 -0
  138. package/dist/esm/apps/identity/constants.js +53 -0
  139. package/dist/esm/apps/identity/index.js +50 -0
  140. package/dist/esm/apps/identity/state-machines/agent-identity.json +320 -0
  141. package/dist/esm/apps/identity/types.js +50 -0
  142. package/dist/esm/apps/index.js +32 -0
  143. package/dist/esm/apps/markets/index.js +34 -0
  144. package/dist/esm/apps/markets/state-machines/market-universal.json +354 -0
  145. package/dist/esm/apps/markets/types.js +206 -0
  146. package/dist/esm/apps/oracles/index.js +42 -0
  147. package/dist/esm/apps/oracles/state-machines/oracle.json +452 -0
  148. package/dist/esm/apps/oracles/types.js +267 -0
  149. package/dist/esm/errors.js +283 -0
  150. package/dist/esm/generated/google/protobuf/struct.js +508 -0
  151. package/dist/esm/generated/google/protobuf/timestamp.js +89 -0
  152. package/dist/esm/generated/index.js +26 -0
  153. package/dist/esm/generated/ottochain/apps/contracts/v1/contract.js +867 -0
  154. package/dist/esm/generated/ottochain/apps/contracts/v1/contract_pb.js +97 -0
  155. package/dist/esm/generated/ottochain/apps/corporate/v1/corporate.js +4493 -0
  156. package/dist/esm/generated/ottochain/apps/corporate/v1/corporate_pb.js +389 -0
  157. package/dist/esm/generated/ottochain/apps/governance/v1/governance.js +3240 -0
  158. package/dist/esm/generated/ottochain/apps/governance/v1/governance_pb.js +232 -0
  159. package/dist/esm/generated/ottochain/apps/identity/v1/agent.js +610 -0
  160. package/dist/esm/generated/ottochain/apps/identity/v1/agent_pb.js +113 -0
  161. package/dist/esm/generated/ottochain/apps/identity/v1/attestation.js +774 -0
  162. package/dist/esm/generated/ottochain/apps/identity/v1/attestation_pb.js +76 -0
  163. package/dist/esm/generated/ottochain/apps/markets/v1/market.js +1252 -0
  164. package/dist/esm/generated/ottochain/apps/markets/v1/market_pb.js +148 -0
  165. package/dist/esm/generated/ottochain/apps/oracles/v1/oracle.js +1217 -0
  166. package/dist/esm/generated/ottochain/apps/oracles/v1/oracle_pb.js +106 -0
  167. package/dist/esm/generated/ottochain/v1/common.js +7 -0
  168. package/dist/esm/generated/ottochain/v1/common_pb.js +34 -0
  169. package/dist/esm/generated/ottochain/v1/fiber.js +1051 -0
  170. package/dist/esm/generated/ottochain/v1/fiber_pb.js +83 -0
  171. package/dist/esm/generated/ottochain/v1/messages.js +737 -0
  172. package/dist/esm/generated/ottochain/v1/messages_pb.js +41 -0
  173. package/dist/esm/generated/ottochain/v1/records.js +1250 -0
  174. package/dist/esm/generated/ottochain/v1/records_pb.js +41 -0
  175. package/dist/esm/index.js +33 -0
  176. package/dist/esm/metakit/binary.js +53 -0
  177. package/dist/esm/metakit/canonicalize.js +33 -0
  178. package/dist/esm/metakit/codec.js +38 -0
  179. package/dist/esm/metakit/currency-transaction.js +306 -0
  180. package/dist/esm/metakit/currency-types.js +10 -0
  181. package/dist/esm/metakit/hash.js +77 -0
  182. package/dist/esm/metakit/index.js +30 -0
  183. package/dist/esm/metakit/network/client.js +74 -0
  184. package/dist/esm/metakit/network/currency-l1-client.js +97 -0
  185. package/dist/esm/metakit/network/data-l1-client.js +72 -0
  186. package/dist/esm/metakit/network/index.js +9 -0
  187. package/dist/esm/metakit/network/types.js +16 -0
  188. package/dist/esm/metakit/sign.js +114 -0
  189. package/dist/esm/metakit/signed-object.js +94 -0
  190. package/dist/esm/metakit/types.js +11 -0
  191. package/dist/esm/metakit/verify.js +210 -0
  192. package/dist/esm/metakit/wallet.js +117 -0
  193. package/dist/esm/ottochain/index.js +13 -0
  194. package/dist/esm/ottochain/metagraph-client.js +153 -0
  195. package/dist/esm/ottochain/snapshot.js +100 -0
  196. package/dist/esm/ottochain/types.js +10 -0
  197. package/dist/esm/package.json +1 -0
  198. package/dist/esm/types.js +20 -0
  199. package/dist/esm/validation.js +301 -0
  200. package/dist/generated/index.d.ts +15 -0
  201. package/dist/generated/index.js +34 -0
  202. package/dist/generated/ottochain/apps/contracts/v1/contract_pb.d.ts +274 -0
  203. package/dist/generated/ottochain/apps/contracts/v1/contract_pb.js +100 -0
  204. package/dist/generated/ottochain/apps/identity/v1/agent_pb.d.ts +211 -0
  205. package/dist/generated/ottochain/apps/identity/v1/agent_pb.js +116 -0
  206. package/dist/generated/ottochain/apps/identity/v1/attestation_pb.d.ts +238 -0
  207. package/dist/generated/ottochain/apps/identity/v1/attestation_pb.js +79 -0
  208. package/dist/generated/ottochain/apps/markets/v1/market_pb.d.ts +436 -0
  209. package/dist/generated/ottochain/apps/markets/v1/market_pb.js +151 -0
  210. package/dist/generated/ottochain/apps/oracles/v1/oracle_pb.d.ts +393 -0
  211. package/dist/generated/ottochain/apps/oracles/v1/oracle_pb.js +109 -0
  212. package/dist/generated/ottochain/v1/common_pb.d.ts +86 -0
  213. package/dist/generated/ottochain/v1/common_pb.js +37 -0
  214. package/dist/generated/ottochain/v1/fiber_pb.d.ts +292 -0
  215. package/dist/generated/ottochain/v1/fiber_pb.js +86 -0
  216. package/dist/generated/ottochain/v1/messages_pb.d.ts +190 -0
  217. package/dist/generated/ottochain/v1/messages_pb.js +44 -0
  218. package/dist/generated/ottochain/v1/records_pb.d.ts +221 -0
  219. package/dist/generated/ottochain/v1/records_pb.js +44 -0
  220. package/dist/index.d.ts +21 -0
  221. package/dist/index.js +77 -0
  222. package/dist/metakit/binary.d.ts +38 -0
  223. package/dist/metakit/binary.js +58 -0
  224. package/dist/metakit/canonicalize.d.ts +26 -0
  225. package/dist/metakit/canonicalize.js +40 -0
  226. package/dist/metakit/codec.d.ts +16 -0
  227. package/dist/metakit/codec.js +45 -0
  228. package/dist/metakit/currency-transaction.d.ts +157 -0
  229. package/dist/metakit/currency-transaction.js +319 -0
  230. package/dist/metakit/currency-types.d.ts +55 -0
  231. package/dist/metakit/currency-types.js +13 -0
  232. package/dist/metakit/hash.d.ts +50 -0
  233. package/dist/metakit/hash.js +84 -0
  234. package/dist/metakit/index.d.ts +23 -0
  235. package/dist/metakit/index.js +74 -0
  236. package/dist/metakit/network/client.d.ts +23 -0
  237. package/dist/metakit/network/client.js +78 -0
  238. package/dist/metakit/network/currency-l1-client.d.ts +71 -0
  239. package/dist/metakit/network/currency-l1-client.js +101 -0
  240. package/dist/metakit/network/data-l1-client.d.ts +57 -0
  241. package/dist/metakit/network/data-l1-client.js +76 -0
  242. package/dist/metakit/network/index.d.ts +10 -0
  243. package/dist/metakit/network/index.js +16 -0
  244. package/dist/metakit/network/types.d.ts +74 -0
  245. package/dist/metakit/network/types.js +20 -0
  246. package/dist/metakit/sign.d.ts +65 -0
  247. package/dist/metakit/sign.js +120 -0
  248. package/dist/metakit/signed-object.d.ts +66 -0
  249. package/dist/metakit/signed-object.js +100 -0
  250. package/dist/metakit/types.d.ts +67 -0
  251. package/dist/metakit/types.js +14 -0
  252. package/dist/metakit/verify.d.ts +55 -0
  253. package/dist/metakit/verify.js +217 -0
  254. package/dist/metakit/wallet.d.ts +70 -0
  255. package/dist/metakit/wallet.js +127 -0
  256. package/dist/ottochain/index.d.ts +13 -0
  257. package/dist/ottochain/index.js +45 -0
  258. package/dist/ottochain/metagraph-client.d.ts +111 -0
  259. package/dist/ottochain/metagraph-client.js +157 -0
  260. package/dist/ottochain/snapshot.d.ts +86 -0
  261. package/dist/ottochain/snapshot.js +110 -0
  262. package/dist/ottochain/types.d.ts +278 -0
  263. package/dist/ottochain/types.js +11 -0
  264. package/dist/types/apps/contracts/index.d.ts +30 -0
  265. package/dist/types/apps/contracts/types.d.ts +24 -0
  266. package/dist/types/apps/corporate/index.d.ts +27 -0
  267. package/dist/types/apps/corporate/types.d.ts +9861 -0
  268. package/dist/types/apps/governance/index.d.ts +77 -0
  269. package/dist/types/apps/governance/types.d.ts +344 -0
  270. package/dist/types/apps/identity/constants.d.ts +27 -0
  271. package/dist/types/apps/identity/index.d.ts +39 -0
  272. package/dist/types/apps/identity/types.d.ts +30 -0
  273. package/dist/types/apps/index.d.ts +31 -0
  274. package/dist/types/apps/markets/index.d.ts +26 -0
  275. package/dist/types/apps/markets/types.d.ts +155 -0
  276. package/dist/types/apps/oracles/index.d.ts +34 -0
  277. package/dist/types/apps/oracles/types.d.ts +193 -0
  278. package/dist/types/errors.d.ts +221 -0
  279. package/dist/types/generated/google/protobuf/struct.d.ts +134 -0
  280. package/dist/types/generated/google/protobuf/timestamp.d.ts +134 -0
  281. package/dist/types/generated/index.d.ts +18 -0
  282. package/dist/types/generated/ottochain/apps/contracts/v1/contract.d.ts +112 -0
  283. package/dist/types/generated/ottochain/apps/contracts/v1/contract_pb.d.ts +274 -0
  284. package/dist/types/generated/ottochain/apps/corporate/v1/corporate.d.ts +376 -0
  285. package/dist/types/generated/ottochain/apps/corporate/v1/corporate_pb.d.ts +1172 -0
  286. package/dist/types/generated/ottochain/apps/governance/v1/governance.d.ts +296 -0
  287. package/dist/types/generated/ottochain/apps/governance/v1/governance_pb.d.ts +772 -0
  288. package/dist/types/generated/ottochain/apps/identity/v1/agent.d.ts +94 -0
  289. package/dist/types/generated/ottochain/apps/identity/v1/agent_pb.d.ts +211 -0
  290. package/dist/types/generated/ottochain/apps/identity/v1/attestation.d.ts +102 -0
  291. package/dist/types/generated/ottochain/apps/identity/v1/attestation_pb.d.ts +238 -0
  292. package/dist/types/generated/ottochain/apps/markets/v1/market.d.ts +174 -0
  293. package/dist/types/generated/ottochain/apps/markets/v1/market_pb.d.ts +436 -0
  294. package/dist/types/generated/ottochain/apps/oracles/v1/oracle.d.ts +150 -0
  295. package/dist/types/generated/ottochain/apps/oracles/v1/oracle_pb.d.ts +393 -0
  296. package/dist/types/generated/ottochain/v1/common.d.ts +1 -0
  297. package/dist/types/generated/ottochain/v1/common_pb.d.ts +86 -0
  298. package/dist/types/generated/ottochain/v1/fiber.d.ts +130 -0
  299. package/dist/types/generated/ottochain/v1/fiber_pb.d.ts +292 -0
  300. package/dist/types/generated/ottochain/v1/messages.d.ts +89 -0
  301. package/dist/types/generated/ottochain/v1/messages_pb.d.ts +190 -0
  302. package/dist/types/generated/ottochain/v1/records.d.ts +128 -0
  303. package/dist/types/generated/ottochain/v1/records_pb.d.ts +221 -0
  304. package/dist/types/index.d.ts +22 -0
  305. package/dist/types/metakit/binary.d.ts +38 -0
  306. package/dist/types/metakit/canonicalize.d.ts +26 -0
  307. package/dist/types/metakit/codec.d.ts +16 -0
  308. package/dist/types/metakit/currency-transaction.d.ts +157 -0
  309. package/dist/types/metakit/currency-types.d.ts +55 -0
  310. package/dist/types/metakit/hash.d.ts +50 -0
  311. package/dist/types/metakit/index.d.ts +23 -0
  312. package/dist/types/metakit/network/client.d.ts +23 -0
  313. package/dist/types/metakit/network/currency-l1-client.d.ts +71 -0
  314. package/dist/types/metakit/network/data-l1-client.d.ts +57 -0
  315. package/dist/types/metakit/network/index.d.ts +10 -0
  316. package/dist/types/metakit/network/types.d.ts +74 -0
  317. package/dist/types/metakit/sign.d.ts +65 -0
  318. package/dist/types/metakit/signed-object.d.ts +66 -0
  319. package/dist/types/metakit/types.d.ts +67 -0
  320. package/dist/types/metakit/verify.d.ts +55 -0
  321. package/dist/types/metakit/wallet.d.ts +70 -0
  322. package/dist/types/ottochain/index.d.ts +13 -0
  323. package/dist/types/ottochain/metagraph-client.d.ts +111 -0
  324. package/dist/types/ottochain/snapshot.d.ts +86 -0
  325. package/dist/types/ottochain/types.d.ts +210 -0
  326. package/dist/types/types.d.ts +51 -0
  327. package/dist/types/validation.d.ts +449 -0
  328. package/dist/validation.d.ts +449 -0
  329. package/dist/validation.js +312 -0
  330. package/package.json +136 -0
@@ -0,0 +1,1174 @@
1
+ {
2
+ "$schema": "https://ottochain.dev/schemas/state-machine-v1.json",
3
+ "name": "corporate-resolution",
4
+ "version": "1.0.0",
5
+ "category": "corporate-governance",
6
+ "description": "Formal corporate resolutions state machine tracking the lifecycle from proposal through approval, execution, and expiration. Supports board resolutions, shareholder resolutions, and written consents.",
7
+ "context": {
8
+ "resolutionId": {
9
+ "type": "string",
10
+ "description": "Unique identifier for this resolution"
11
+ },
12
+ "entityId": {
13
+ "type": "string",
14
+ "description": "Reference to parent corporate-entity"
15
+ },
16
+ "resolutionNumber": {
17
+ "type": "string",
18
+ "description": "Sequential resolution number (e.g., 2024-B-001 for board, 2024-S-001 for shareholder)"
19
+ },
20
+ "title": {
21
+ "type": "string",
22
+ "description": "Brief title of the resolution"
23
+ },
24
+ "resolutionType": {
25
+ "type": "string",
26
+ "enum": [
27
+ "BOARD_RESOLUTION",
28
+ "SHAREHOLDER_RESOLUTION",
29
+ "BOARD_WRITTEN_CONSENT",
30
+ "SHAREHOLDER_WRITTEN_CONSENT",
31
+ "UNANIMOUS_WRITTEN_CONSENT"
32
+ ],
33
+ "description": "Type of resolution"
34
+ },
35
+ "category": {
36
+ "type": "string",
37
+ "enum": [
38
+ "OFFICER_APPOINTMENT",
39
+ "OFFICER_REMOVAL",
40
+ "STOCK_ISSUANCE",
41
+ "DIVIDEND_DECLARATION",
42
+ "CONTRACT_APPROVAL",
43
+ "BANKING",
44
+ "CHARTER_AMENDMENT",
45
+ "BYLAW_AMENDMENT",
46
+ "MERGER_ACQUISITION",
47
+ "DISSOLUTION",
48
+ "COMMITTEE_ACTION",
49
+ "COMPENSATION",
50
+ "AUDIT",
51
+ "GENERAL",
52
+ "OTHER"
53
+ ],
54
+ "description": "Category of action"
55
+ },
56
+ "proposedDate": {
57
+ "type": "string",
58
+ "format": "date"
59
+ },
60
+ "proposedBy": {
61
+ "type": "object",
62
+ "properties": {
63
+ "type": {
64
+ "type": "string",
65
+ "enum": [
66
+ "DIRECTOR",
67
+ "OFFICER",
68
+ "SHAREHOLDER",
69
+ "COMMITTEE"
70
+ ]
71
+ },
72
+ "personId": {
73
+ "type": "string"
74
+ },
75
+ "name": {
76
+ "type": "string"
77
+ }
78
+ }
79
+ },
80
+ "resolvedText": {
81
+ "type": "string",
82
+ "description": "Full text of the resolution including WHEREAS and RESOLVED clauses"
83
+ },
84
+ "whereAsClauses": {
85
+ "type": "array",
86
+ "items": {
87
+ "type": "string"
88
+ },
89
+ "description": "Background/recital clauses"
90
+ },
91
+ "resolvedClauses": {
92
+ "type": "array",
93
+ "items": {
94
+ "type": "string"
95
+ },
96
+ "description": "Operative clauses"
97
+ },
98
+ "attachments": {
99
+ "type": "array",
100
+ "items": {
101
+ "type": "object",
102
+ "properties": {
103
+ "attachmentId": {
104
+ "type": "string"
105
+ },
106
+ "title": {
107
+ "type": "string"
108
+ },
109
+ "documentRef": {
110
+ "type": "string"
111
+ },
112
+ "type": {
113
+ "type": "string"
114
+ }
115
+ }
116
+ }
117
+ },
118
+ "approvalRequirements": {
119
+ "type": "object",
120
+ "properties": {
121
+ "approverType": {
122
+ "type": "string",
123
+ "enum": [
124
+ "BOARD",
125
+ "SHAREHOLDERS",
126
+ "COMMITTEE",
127
+ "BOARD_AND_SHAREHOLDERS"
128
+ ]
129
+ },
130
+ "threshold": {
131
+ "type": "string",
132
+ "enum": [
133
+ "MAJORITY_PRESENT",
134
+ "MAJORITY_FULL",
135
+ "SUPERMAJORITY",
136
+ "UNANIMOUS"
137
+ ],
138
+ "description": "Vote threshold required"
139
+ },
140
+ "supermajorityPercent": {
141
+ "type": "number",
142
+ "nullable": true
143
+ },
144
+ "quorumRequired": {
145
+ "type": "boolean",
146
+ "default": true
147
+ },
148
+ "shareholderClassVotes": {
149
+ "type": "array",
150
+ "items": {
151
+ "type": "string"
152
+ },
153
+ "description": "Share classes that must approve (for class voting)"
154
+ }
155
+ }
156
+ },
157
+ "meetingRef": {
158
+ "type": "object",
159
+ "nullable": true,
160
+ "description": "Reference to meeting where resolution was considered",
161
+ "properties": {
162
+ "meetingType": {
163
+ "type": "string",
164
+ "enum": [
165
+ "BOARD_MEETING",
166
+ "SHAREHOLDER_MEETING",
167
+ "COMMITTEE_MEETING"
168
+ ]
169
+ },
170
+ "meetingId": {
171
+ "type": "string"
172
+ },
173
+ "meetingDate": {
174
+ "type": "string",
175
+ "format": "date"
176
+ }
177
+ }
178
+ },
179
+ "voting": {
180
+ "type": "object",
181
+ "properties": {
182
+ "votingOpenedAt": {
183
+ "type": "string",
184
+ "format": "date-time",
185
+ "nullable": true
186
+ },
187
+ "votingClosedAt": {
188
+ "type": "string",
189
+ "format": "date-time",
190
+ "nullable": true
191
+ },
192
+ "votes": {
193
+ "type": "array",
194
+ "items": {
195
+ "type": "object",
196
+ "properties": {
197
+ "voterId": {
198
+ "type": "string"
199
+ },
200
+ "voterName": {
201
+ "type": "string"
202
+ },
203
+ "voterType": {
204
+ "type": "string",
205
+ "enum": [
206
+ "DIRECTOR",
207
+ "SHAREHOLDER",
208
+ "COMMITTEE_MEMBER"
209
+ ]
210
+ },
211
+ "vote": {
212
+ "type": "string",
213
+ "enum": [
214
+ "FOR",
215
+ "AGAINST",
216
+ "ABSTAIN",
217
+ "RECUSE"
218
+ ]
219
+ },
220
+ "votingPower": {
221
+ "type": "integer",
222
+ "default": 1,
223
+ "description": "Number of votes (shares for shareholders)"
224
+ },
225
+ "timestamp": {
226
+ "type": "string",
227
+ "format": "date-time"
228
+ },
229
+ "comment": {
230
+ "type": "string",
231
+ "nullable": true
232
+ }
233
+ }
234
+ }
235
+ },
236
+ "tally": {
237
+ "type": "object",
238
+ "properties": {
239
+ "for": {
240
+ "type": "integer",
241
+ "default": 0
242
+ },
243
+ "against": {
244
+ "type": "integer",
245
+ "default": 0
246
+ },
247
+ "abstain": {
248
+ "type": "integer",
249
+ "default": 0
250
+ },
251
+ "recused": {
252
+ "type": "integer",
253
+ "default": 0
254
+ },
255
+ "totalEligible": {
256
+ "type": "integer"
257
+ },
258
+ "totalVoted": {
259
+ "type": "integer"
260
+ }
261
+ }
262
+ }
263
+ }
264
+ },
265
+ "writtenConsent": {
266
+ "type": "object",
267
+ "nullable": true,
268
+ "description": "For written consent resolutions (no meeting)",
269
+ "properties": {
270
+ "consentForm": {
271
+ "type": "string",
272
+ "description": "Document reference"
273
+ },
274
+ "circulationDate": {
275
+ "type": "string",
276
+ "format": "date"
277
+ },
278
+ "consentDeadline": {
279
+ "type": "string",
280
+ "format": "date"
281
+ },
282
+ "consents": {
283
+ "type": "array",
284
+ "items": {
285
+ "type": "object",
286
+ "properties": {
287
+ "consentorId": {
288
+ "type": "string"
289
+ },
290
+ "consentorName": {
291
+ "type": "string"
292
+ },
293
+ "signedDate": {
294
+ "type": "string",
295
+ "format": "date"
296
+ },
297
+ "votingPower": {
298
+ "type": "integer",
299
+ "default": 1
300
+ },
301
+ "signatureRef": {
302
+ "type": "string"
303
+ }
304
+ }
305
+ }
306
+ },
307
+ "totalConsentPower": {
308
+ "type": "integer"
309
+ },
310
+ "requiredConsentPower": {
311
+ "type": "integer"
312
+ }
313
+ }
314
+ },
315
+ "approvalDetails": {
316
+ "type": "object",
317
+ "nullable": true,
318
+ "properties": {
319
+ "approved": {
320
+ "type": "boolean"
321
+ },
322
+ "approvalDate": {
323
+ "type": "string",
324
+ "format": "date"
325
+ },
326
+ "approvalMethod": {
327
+ "type": "string",
328
+ "enum": [
329
+ "MEETING_VOTE",
330
+ "WRITTEN_CONSENT"
331
+ ]
332
+ },
333
+ "certifiedBy": {
334
+ "type": "string"
335
+ },
336
+ "certificationDate": {
337
+ "type": "string",
338
+ "format": "date"
339
+ }
340
+ }
341
+ },
342
+ "effectiveDate": {
343
+ "type": "string",
344
+ "format": "date",
345
+ "nullable": true
346
+ },
347
+ "expirationDate": {
348
+ "type": "string",
349
+ "format": "date",
350
+ "nullable": true,
351
+ "description": "For authorizations with time limits"
352
+ },
353
+ "executionDetails": {
354
+ "type": "object",
355
+ "nullable": true,
356
+ "properties": {
357
+ "executedDate": {
358
+ "type": "string",
359
+ "format": "date"
360
+ },
361
+ "executedBy": {
362
+ "type": "string"
363
+ },
364
+ "executionNotes": {
365
+ "type": "string"
366
+ },
367
+ "resultingActions": {
368
+ "type": "array",
369
+ "items": {
370
+ "type": "object",
371
+ "properties": {
372
+ "actionType": {
373
+ "type": "string"
374
+ },
375
+ "reference": {
376
+ "type": "string"
377
+ },
378
+ "completedDate": {
379
+ "type": "string",
380
+ "format": "date"
381
+ }
382
+ }
383
+ }
384
+ }
385
+ }
386
+ },
387
+ "rescissionDetails": {
388
+ "type": "object",
389
+ "nullable": true,
390
+ "properties": {
391
+ "rescindedDate": {
392
+ "type": "string",
393
+ "format": "date"
394
+ },
395
+ "rescindingResolutionRef": {
396
+ "type": "string"
397
+ },
398
+ "reason": {
399
+ "type": "string"
400
+ }
401
+ }
402
+ },
403
+ "relatedResolutions": {
404
+ "type": "array",
405
+ "items": {
406
+ "type": "object",
407
+ "properties": {
408
+ "resolutionId": {
409
+ "type": "string"
410
+ },
411
+ "relationship": {
412
+ "type": "string",
413
+ "enum": [
414
+ "SUPERSEDES",
415
+ "SUPERSEDED_BY",
416
+ "AMENDS",
417
+ "AMENDED_BY",
418
+ "DEPENDS_ON",
419
+ "ENABLES"
420
+ ]
421
+ }
422
+ }
423
+ }
424
+ },
425
+ "createdAt": {
426
+ "type": "string",
427
+ "format": "date-time"
428
+ },
429
+ "updatedAt": {
430
+ "type": "string",
431
+ "format": "date-time"
432
+ }
433
+ },
434
+ "states": {
435
+ "DRAFT": {
436
+ "description": "Resolution drafted but not yet formally proposed",
437
+ "metadata": null
438
+ },
439
+ "PROPOSED": {
440
+ "description": "Resolution formally proposed and awaiting vote",
441
+ "metadata": null
442
+ },
443
+ "VOTING": {
444
+ "description": "Voting or consent collection in progress",
445
+ "metadata": null
446
+ },
447
+ "APPROVED": {
448
+ "description": "Resolution approved but not yet executed/effective",
449
+ "metadata": null
450
+ },
451
+ "EXECUTED": {
452
+ "description": "Resolution has been carried out; authorized actions completed",
453
+ "metadata": null
454
+ },
455
+ "REJECTED": {
456
+ "description": "Resolution failed to obtain required approval",
457
+ "metadata": null,
458
+ "terminal": true
459
+ },
460
+ "EXPIRED": {
461
+ "description": "Resolution expired without execution",
462
+ "metadata": null,
463
+ "terminal": true
464
+ },
465
+ "RESCINDED": {
466
+ "description": "Resolution was rescinded by subsequent action",
467
+ "metadata": null,
468
+ "terminal": true
469
+ }
470
+ },
471
+ "initialState": "DRAFT",
472
+ "transitions": {
473
+ "draft_resolution": {
474
+ "from": null,
475
+ "to": "DRAFT",
476
+ "description": "Create a new draft resolution",
477
+ "event": {
478
+ "name": "draft_resolution",
479
+ "payload": {
480
+ "resolutionId": {
481
+ "type": "string",
482
+ "required": true
483
+ },
484
+ "entityId": {
485
+ "type": "string",
486
+ "required": true
487
+ },
488
+ "title": {
489
+ "type": "string",
490
+ "required": true
491
+ },
492
+ "resolutionType": {
493
+ "type": "string",
494
+ "required": true
495
+ },
496
+ "category": {
497
+ "type": "string",
498
+ "required": true
499
+ },
500
+ "whereAsClauses": {
501
+ "type": "array"
502
+ },
503
+ "resolvedClauses": {
504
+ "type": "array",
505
+ "required": true
506
+ },
507
+ "approvalRequirements": {
508
+ "type": "object",
509
+ "required": true
510
+ }
511
+ }
512
+ },
513
+ "effects": [
514
+ {
515
+ "type": "SET_CONTEXT",
516
+ "path": "resolutionId",
517
+ "value": "{{ event.resolutionId }}"
518
+ },
519
+ {
520
+ "type": "SET_CONTEXT",
521
+ "path": "entityId",
522
+ "value": "{{ event.entityId }}"
523
+ },
524
+ {
525
+ "type": "SET_CONTEXT",
526
+ "path": "title",
527
+ "value": "{{ event.title }}"
528
+ },
529
+ {
530
+ "type": "SET_CONTEXT",
531
+ "path": "resolutionType",
532
+ "value": "{{ event.resolutionType }}"
533
+ },
534
+ {
535
+ "type": "SET_CONTEXT",
536
+ "path": "category",
537
+ "value": "{{ event.category }}"
538
+ },
539
+ {
540
+ "type": "SET_CONTEXT",
541
+ "path": "whereAsClauses",
542
+ "value": "{{ event.whereAsClauses }}"
543
+ },
544
+ {
545
+ "type": "SET_CONTEXT",
546
+ "path": "resolvedClauses",
547
+ "value": "{{ event.resolvedClauses }}"
548
+ },
549
+ {
550
+ "type": "SET_CONTEXT",
551
+ "path": "approvalRequirements",
552
+ "value": "{{ event.approvalRequirements }}"
553
+ },
554
+ {
555
+ "type": "SET_CONTEXT",
556
+ "path": "voting.votes",
557
+ "value": []
558
+ },
559
+ {
560
+ "type": "SET_CONTEXT",
561
+ "path": "voting.tally",
562
+ "value": {
563
+ "for": 0,
564
+ "against": 0,
565
+ "abstain": 0,
566
+ "recused": 0,
567
+ "totalVoted": 0
568
+ }
569
+ }
570
+ ]
571
+ },
572
+ "propose": {
573
+ "from": "DRAFT",
574
+ "to": "PROPOSED",
575
+ "description": "Formally propose the resolution for consideration",
576
+ "event": {
577
+ "name": "propose",
578
+ "payload": {
579
+ "proposedBy": {
580
+ "type": "object",
581
+ "required": true
582
+ },
583
+ "meetingRef": {
584
+ "type": "object",
585
+ "description": "If proposing for a specific meeting"
586
+ },
587
+ "resolutionNumber": {
588
+ "type": "string",
589
+ "required": true
590
+ }
591
+ }
592
+ },
593
+ "effects": [
594
+ {
595
+ "type": "SET_CONTEXT",
596
+ "path": "proposedDate",
597
+ "value": "{{ today() }}"
598
+ },
599
+ {
600
+ "type": "SET_CONTEXT",
601
+ "path": "proposedBy",
602
+ "value": "{{ event.proposedBy }}"
603
+ },
604
+ {
605
+ "type": "SET_CONTEXT",
606
+ "path": "meetingRef",
607
+ "value": "{{ event.meetingRef }}"
608
+ },
609
+ {
610
+ "type": "SET_CONTEXT",
611
+ "path": "resolutionNumber",
612
+ "value": "{{ event.resolutionNumber }}"
613
+ },
614
+ {
615
+ "type": "EMIT_EVENT",
616
+ "eventType": "RESOLUTION_PROPOSED",
617
+ "payload": {
618
+ "resolutionId": "{{ context.resolutionId }}",
619
+ "title": "{{ context.title }}",
620
+ "type": "{{ context.resolutionType }}"
621
+ }
622
+ }
623
+ ]
624
+ },
625
+ "open_voting": {
626
+ "from": "PROPOSED",
627
+ "to": "VOTING",
628
+ "description": "Open voting on the resolution (at meeting or via written consent)",
629
+ "event": {
630
+ "name": "open_voting",
631
+ "payload": {
632
+ "votingOpenedAt": {
633
+ "type": "string",
634
+ "format": "date-time",
635
+ "required": true
636
+ },
637
+ "totalEligibleVoters": {
638
+ "type": "integer",
639
+ "required": true
640
+ },
641
+ "isWrittenConsent": {
642
+ "type": "boolean",
643
+ "default": false
644
+ },
645
+ "consentDeadline": {
646
+ "type": "string",
647
+ "format": "date"
648
+ }
649
+ }
650
+ },
651
+ "guards": [
652
+ {
653
+ "name": "meetingHasQuorumIfRequired",
654
+ "description": "If board/shareholder vote at meeting, meeting must have quorum",
655
+ "expression": "!event.isWrittenConsent || !context.approvalRequirements.quorumRequired"
656
+ }
657
+ ],
658
+ "effects": [
659
+ {
660
+ "type": "SET_CONTEXT",
661
+ "path": "voting.votingOpenedAt",
662
+ "value": "{{ event.votingOpenedAt }}"
663
+ },
664
+ {
665
+ "type": "SET_CONTEXT",
666
+ "path": "voting.tally.totalEligible",
667
+ "value": "{{ event.totalEligibleVoters }}"
668
+ },
669
+ {
670
+ "type": "CONDITIONAL",
671
+ "condition": "event.isWrittenConsent",
672
+ "then": {
673
+ "type": "SET_CONTEXT",
674
+ "path": "writtenConsent",
675
+ "value": {
676
+ "circulationDate": "{{ today() }}",
677
+ "consentDeadline": "{{ event.consentDeadline }}",
678
+ "consents": [],
679
+ "totalConsentPower": 0
680
+ }
681
+ }
682
+ }
683
+ ]
684
+ },
685
+ "record_vote": {
686
+ "from": "VOTING",
687
+ "to": "VOTING",
688
+ "description": "Record an individual vote on the resolution",
689
+ "event": {
690
+ "name": "record_vote",
691
+ "payload": {
692
+ "voterId": {
693
+ "type": "string",
694
+ "required": true
695
+ },
696
+ "voterName": {
697
+ "type": "string",
698
+ "required": true
699
+ },
700
+ "voterType": {
701
+ "type": "string",
702
+ "required": true
703
+ },
704
+ "vote": {
705
+ "type": "string",
706
+ "enum": [
707
+ "FOR",
708
+ "AGAINST",
709
+ "ABSTAIN",
710
+ "RECUSE"
711
+ ],
712
+ "required": true
713
+ },
714
+ "votingPower": {
715
+ "type": "integer",
716
+ "default": 1
717
+ },
718
+ "comment": {
719
+ "type": "string"
720
+ }
721
+ }
722
+ },
723
+ "guards": [
724
+ {
725
+ "name": "hasNotAlreadyVoted",
726
+ "expression": "!context.voting.votes.some(v => v.voterId === event.voterId)"
727
+ }
728
+ ],
729
+ "effects": [
730
+ {
731
+ "type": "APPEND_ARRAY",
732
+ "path": "voting.votes",
733
+ "value": {
734
+ "voterId": "{{ event.voterId }}",
735
+ "voterName": "{{ event.voterName }}",
736
+ "voterType": "{{ event.voterType }}",
737
+ "vote": "{{ event.vote }}",
738
+ "votingPower": "{{ event.votingPower }}",
739
+ "timestamp": "{{ now() }}",
740
+ "comment": "{{ event.comment }}"
741
+ }
742
+ },
743
+ {
744
+ "type": "CONDITIONAL",
745
+ "condition": "event.vote === 'FOR'",
746
+ "then": {
747
+ "type": "INCREMENT",
748
+ "path": "voting.tally.for",
749
+ "amount": "{{ event.votingPower }}"
750
+ }
751
+ },
752
+ {
753
+ "type": "CONDITIONAL",
754
+ "condition": "event.vote === 'AGAINST'",
755
+ "then": {
756
+ "type": "INCREMENT",
757
+ "path": "voting.tally.against",
758
+ "amount": "{{ event.votingPower }}"
759
+ }
760
+ },
761
+ {
762
+ "type": "CONDITIONAL",
763
+ "condition": "event.vote === 'ABSTAIN'",
764
+ "then": {
765
+ "type": "INCREMENT",
766
+ "path": "voting.tally.abstain",
767
+ "amount": "{{ event.votingPower }}"
768
+ }
769
+ },
770
+ {
771
+ "type": "CONDITIONAL",
772
+ "condition": "event.vote === 'RECUSE'",
773
+ "then": {
774
+ "type": "INCREMENT",
775
+ "path": "voting.tally.recused",
776
+ "amount": "{{ event.votingPower }}"
777
+ }
778
+ },
779
+ {
780
+ "type": "INCREMENT",
781
+ "path": "voting.tally.totalVoted",
782
+ "amount": "{{ event.votingPower }}"
783
+ }
784
+ ]
785
+ },
786
+ "record_consent": {
787
+ "from": "VOTING",
788
+ "to": "VOTING",
789
+ "description": "Record a written consent signature",
790
+ "event": {
791
+ "name": "record_consent",
792
+ "payload": {
793
+ "consentorId": {
794
+ "type": "string",
795
+ "required": true
796
+ },
797
+ "consentorName": {
798
+ "type": "string",
799
+ "required": true
800
+ },
801
+ "signedDate": {
802
+ "type": "string",
803
+ "format": "date",
804
+ "required": true
805
+ },
806
+ "votingPower": {
807
+ "type": "integer",
808
+ "default": 1
809
+ },
810
+ "signatureRef": {
811
+ "type": "string"
812
+ }
813
+ }
814
+ },
815
+ "guards": [
816
+ {
817
+ "name": "isWrittenConsentResolution",
818
+ "expression": "context.writtenConsent != null"
819
+ },
820
+ {
821
+ "name": "hasNotAlreadyConsented",
822
+ "expression": "!context.writtenConsent.consents.some(c => c.consentorId === event.consentorId)"
823
+ }
824
+ ],
825
+ "effects": [
826
+ {
827
+ "type": "APPEND_ARRAY",
828
+ "path": "writtenConsent.consents",
829
+ "value": {
830
+ "consentorId": "{{ event.consentorId }}",
831
+ "consentorName": "{{ event.consentorName }}",
832
+ "signedDate": "{{ event.signedDate }}",
833
+ "votingPower": "{{ event.votingPower }}",
834
+ "signatureRef": "{{ event.signatureRef }}"
835
+ }
836
+ },
837
+ {
838
+ "type": "INCREMENT",
839
+ "path": "writtenConsent.totalConsentPower",
840
+ "amount": "{{ event.votingPower }}"
841
+ }
842
+ ]
843
+ },
844
+ "close_voting_approved": {
845
+ "from": "VOTING",
846
+ "to": "APPROVED",
847
+ "description": "Close voting - resolution passes",
848
+ "event": {
849
+ "name": "close_voting_approved",
850
+ "payload": {
851
+ "votingClosedAt": {
852
+ "type": "string",
853
+ "format": "date-time",
854
+ "required": true
855
+ },
856
+ "certifiedBy": {
857
+ "type": "string",
858
+ "required": true
859
+ },
860
+ "effectiveDate": {
861
+ "type": "string",
862
+ "format": "date"
863
+ },
864
+ "expirationDate": {
865
+ "type": "string",
866
+ "format": "date"
867
+ }
868
+ }
869
+ },
870
+ "guards": [
871
+ {
872
+ "name": "meetsApprovalThreshold",
873
+ "description": "Vote tally meets required threshold",
874
+ "expression": "context.voting.tally.for > context.voting.tally.against"
875
+ }
876
+ ],
877
+ "effects": [
878
+ {
879
+ "type": "SET_CONTEXT",
880
+ "path": "voting.votingClosedAt",
881
+ "value": "{{ event.votingClosedAt }}"
882
+ },
883
+ {
884
+ "type": "SET_CONTEXT",
885
+ "path": "approvalDetails",
886
+ "value": {
887
+ "approved": true,
888
+ "approvalDate": "{{ today() }}",
889
+ "approvalMethod": "{{ context.writtenConsent ? 'WRITTEN_CONSENT' : 'MEETING_VOTE' }}",
890
+ "certifiedBy": "{{ event.certifiedBy }}",
891
+ "certificationDate": "{{ today() }}"
892
+ }
893
+ },
894
+ {
895
+ "type": "SET_CONTEXT",
896
+ "path": "effectiveDate",
897
+ "value": "{{ event.effectiveDate || today() }}"
898
+ },
899
+ {
900
+ "type": "SET_CONTEXT",
901
+ "path": "expirationDate",
902
+ "value": "{{ event.expirationDate }}"
903
+ },
904
+ {
905
+ "type": "EMIT_EVENT",
906
+ "eventType": "RESOLUTION_APPROVED",
907
+ "payload": {
908
+ "resolutionId": "{{ context.resolutionId }}",
909
+ "title": "{{ context.title }}",
910
+ "votesFor": "{{ context.voting.tally.for }}",
911
+ "votesAgainst": "{{ context.voting.tally.against }}"
912
+ }
913
+ }
914
+ ]
915
+ },
916
+ "close_voting_rejected": {
917
+ "from": "VOTING",
918
+ "to": "REJECTED",
919
+ "description": "Close voting - resolution fails",
920
+ "event": {
921
+ "name": "close_voting_rejected",
922
+ "payload": {
923
+ "votingClosedAt": {
924
+ "type": "string",
925
+ "format": "date-time",
926
+ "required": true
927
+ },
928
+ "certifiedBy": {
929
+ "type": "string",
930
+ "required": true
931
+ }
932
+ }
933
+ },
934
+ "effects": [
935
+ {
936
+ "type": "SET_CONTEXT",
937
+ "path": "voting.votingClosedAt",
938
+ "value": "{{ event.votingClosedAt }}"
939
+ },
940
+ {
941
+ "type": "SET_CONTEXT",
942
+ "path": "approvalDetails",
943
+ "value": {
944
+ "approved": false,
945
+ "approvalDate": "{{ today() }}",
946
+ "approvalMethod": "{{ context.writtenConsent ? 'WRITTEN_CONSENT' : 'MEETING_VOTE' }}",
947
+ "certifiedBy": "{{ event.certifiedBy }}",
948
+ "certificationDate": "{{ today() }}"
949
+ }
950
+ },
951
+ {
952
+ "type": "EMIT_EVENT",
953
+ "eventType": "RESOLUTION_REJECTED",
954
+ "payload": {
955
+ "resolutionId": "{{ context.resolutionId }}",
956
+ "title": "{{ context.title }}"
957
+ }
958
+ }
959
+ ]
960
+ },
961
+ "execute": {
962
+ "from": "APPROVED",
963
+ "to": "EXECUTED",
964
+ "description": "Execute the resolution - carry out authorized actions",
965
+ "event": {
966
+ "name": "execute",
967
+ "payload": {
968
+ "executedBy": {
969
+ "type": "string",
970
+ "required": true
971
+ },
972
+ "executionNotes": {
973
+ "type": "string"
974
+ },
975
+ "resultingActions": {
976
+ "type": "array"
977
+ }
978
+ }
979
+ },
980
+ "guards": [
981
+ {
982
+ "name": "effectiveDateReached",
983
+ "description": "Cannot execute before effective date",
984
+ "expression": "new Date() >= new Date(context.effectiveDate)"
985
+ },
986
+ {
987
+ "name": "notExpired",
988
+ "description": "Cannot execute after expiration",
989
+ "expression": "context.expirationDate == null || new Date() <= new Date(context.expirationDate)"
990
+ }
991
+ ],
992
+ "effects": [
993
+ {
994
+ "type": "SET_CONTEXT",
995
+ "path": "executionDetails",
996
+ "value": {
997
+ "executedDate": "{{ today() }}",
998
+ "executedBy": "{{ event.executedBy }}",
999
+ "executionNotes": "{{ event.executionNotes }}",
1000
+ "resultingActions": "{{ event.resultingActions }}"
1001
+ }
1002
+ },
1003
+ {
1004
+ "type": "EMIT_EVENT",
1005
+ "eventType": "RESOLUTION_EXECUTED",
1006
+ "payload": {
1007
+ "resolutionId": "{{ context.resolutionId }}",
1008
+ "title": "{{ context.title }}",
1009
+ "category": "{{ context.category }}"
1010
+ }
1011
+ }
1012
+ ]
1013
+ },
1014
+ "expire": {
1015
+ "from": "APPROVED",
1016
+ "to": "EXPIRED",
1017
+ "description": "Resolution expires without being executed",
1018
+ "event": {
1019
+ "name": "expire",
1020
+ "payload": {
1021
+ "expiredDate": {
1022
+ "type": "string",
1023
+ "format": "date",
1024
+ "required": true
1025
+ }
1026
+ }
1027
+ },
1028
+ "guards": [
1029
+ {
1030
+ "name": "hasExpirationDate",
1031
+ "expression": "context.expirationDate != null"
1032
+ },
1033
+ {
1034
+ "name": "isPastExpiration",
1035
+ "expression": "new Date(event.expiredDate) >= new Date(context.expirationDate)"
1036
+ }
1037
+ ],
1038
+ "effects": [
1039
+ {
1040
+ "type": "EMIT_EVENT",
1041
+ "eventType": "RESOLUTION_EXPIRED",
1042
+ "payload": {
1043
+ "resolutionId": "{{ context.resolutionId }}",
1044
+ "title": "{{ context.title }}"
1045
+ }
1046
+ }
1047
+ ]
1048
+ },
1049
+ "rescind": {
1050
+ "from": [
1051
+ "APPROVED",
1052
+ "EXECUTED"
1053
+ ],
1054
+ "to": "RESCINDED",
1055
+ "description": "Rescind the resolution by subsequent formal action",
1056
+ "event": {
1057
+ "name": "rescind",
1058
+ "payload": {
1059
+ "rescindingResolutionRef": {
1060
+ "type": "string",
1061
+ "required": true
1062
+ },
1063
+ "reason": {
1064
+ "type": "string",
1065
+ "required": true
1066
+ },
1067
+ "rescindedDate": {
1068
+ "type": "string",
1069
+ "format": "date",
1070
+ "required": true
1071
+ }
1072
+ }
1073
+ },
1074
+ "guards": [
1075
+ {
1076
+ "name": "hasRescindingResolution",
1077
+ "description": "Must have a subsequent resolution authorizing rescission",
1078
+ "crossMachine": {
1079
+ "machine": "corporate-resolution",
1080
+ "instanceRef": "{{ event.rescindingResolutionRef }}",
1081
+ "requiredState": "APPROVED"
1082
+ }
1083
+ }
1084
+ ],
1085
+ "effects": [
1086
+ {
1087
+ "type": "SET_CONTEXT",
1088
+ "path": "rescissionDetails",
1089
+ "value": {
1090
+ "rescindedDate": "{{ event.rescindedDate }}",
1091
+ "rescindingResolutionRef": "{{ event.rescindingResolutionRef }}",
1092
+ "reason": "{{ event.reason }}"
1093
+ }
1094
+ },
1095
+ {
1096
+ "type": "APPEND_ARRAY",
1097
+ "path": "relatedResolutions",
1098
+ "value": {
1099
+ "resolutionId": "{{ event.rescindingResolutionRef }}",
1100
+ "relationship": "SUPERSEDED_BY"
1101
+ }
1102
+ },
1103
+ {
1104
+ "type": "EMIT_EVENT",
1105
+ "eventType": "RESOLUTION_RESCINDED",
1106
+ "payload": {
1107
+ "resolutionId": "{{ context.resolutionId }}",
1108
+ "rescindedBy": "{{ event.rescindingResolutionRef }}"
1109
+ }
1110
+ }
1111
+ ]
1112
+ },
1113
+ "withdraw": {
1114
+ "from": [
1115
+ "DRAFT",
1116
+ "PROPOSED"
1117
+ ],
1118
+ "to": "REJECTED",
1119
+ "description": "Withdraw the resolution before voting",
1120
+ "event": {
1121
+ "name": "withdraw",
1122
+ "payload": {
1123
+ "withdrawnBy": {
1124
+ "type": "string",
1125
+ "required": true
1126
+ },
1127
+ "reason": {
1128
+ "type": "string"
1129
+ }
1130
+ }
1131
+ },
1132
+ "effects": [
1133
+ {
1134
+ "type": "EMIT_EVENT",
1135
+ "eventType": "RESOLUTION_WITHDRAWN",
1136
+ "payload": {
1137
+ "resolutionId": "{{ context.resolutionId }}",
1138
+ "withdrawnBy": "{{ event.withdrawnBy }}"
1139
+ }
1140
+ }
1141
+ ]
1142
+ }
1143
+ },
1144
+ "crossMachineRefs": {
1145
+ "entity": {
1146
+ "machine": "corporate-entity",
1147
+ "description": "Parent corporate entity",
1148
+ "foreignKey": "entityId"
1149
+ },
1150
+ "board": {
1151
+ "machine": "corporate-board",
1152
+ "description": "Board for board resolutions",
1153
+ "foreignKey": "entityId"
1154
+ },
1155
+ "shareholders": {
1156
+ "machine": "corporate-shareholders",
1157
+ "description": "Shareholder meeting for shareholder resolutions",
1158
+ "foreignKey": "meetingRef.meetingId"
1159
+ }
1160
+ },
1161
+ "metadata": {
1162
+ "author": "OttoChain",
1163
+ "license": "MIT",
1164
+ "tags": [
1165
+ "corporate",
1166
+ "governance",
1167
+ "resolution",
1168
+ "voting",
1169
+ "board",
1170
+ "shareholders"
1171
+ ],
1172
+ "documentation": "https://ottochain.dev/docs/corporate/resolution"
1173
+ }
1174
+ }