@layerzerolabs/lz-iotal1-sdk-v2 3.0.143

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 (279) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +19 -0
  3. package/deployments/iotal1-mainnet/blocked_message_lib.json +58 -0
  4. package/deployments/iotal1-mainnet/blocked_msglib_ptb_builder.json +58 -0
  5. package/deployments/iotal1-mainnet/call.json +46 -0
  6. package/deployments/iotal1-mainnet/counter.json +85 -0
  7. package/deployments/iotal1-mainnet/dvn.json +49 -0
  8. package/deployments/iotal1-mainnet/dvn_call_type.json +45 -0
  9. package/deployments/iotal1-mainnet/dvn_fee_lib.json +59 -0
  10. package/deployments/iotal1-mainnet/dvn_layerzero.json +56 -0
  11. package/deployments/iotal1-mainnet/dvn_ptb_builder.json +45 -0
  12. package/deployments/iotal1-mainnet/endpoint_ptb_builder.json +70 -0
  13. package/deployments/iotal1-mainnet/endpoint_v2.json +86 -0
  14. package/deployments/iotal1-mainnet/executor.json +49 -0
  15. package/deployments/iotal1-mainnet/executor_call_type.json +45 -0
  16. package/deployments/iotal1-mainnet/executor_fee_lib.json +60 -0
  17. package/deployments/iotal1-mainnet/executor_layerzero.json +56 -0
  18. package/deployments/iotal1-mainnet/executor_ptb_builder.json +45 -0
  19. package/deployments/iotal1-mainnet/layerzero_views.json +46 -0
  20. package/deployments/iotal1-mainnet/message_lib_common.json +47 -0
  21. package/deployments/iotal1-mainnet/msglib_ptb_builder_call_types.json +45 -0
  22. package/deployments/iotal1-mainnet/multi_call.json +45 -0
  23. package/deployments/iotal1-mainnet/oapp.json +50 -0
  24. package/deployments/iotal1-mainnet/object-BlockedMessageLib.json +9 -0
  25. package/deployments/iotal1-mainnet/object-BlockedMsglibPtbBuilder.json +9 -0
  26. package/deployments/iotal1-mainnet/object-Counter.json +9 -0
  27. package/deployments/iotal1-mainnet/object-CounterAdminCap.json +9 -0
  28. package/deployments/iotal1-mainnet/object-CounterOApp.json +9 -0
  29. package/deployments/iotal1-mainnet/object-DVN.json +5 -0
  30. package/deployments/iotal1-mainnet/object-DVNCap.json +9 -0
  31. package/deployments/iotal1-mainnet/object-DVNFeeLib.json +9 -0
  32. package/deployments/iotal1-mainnet/object-EndpointPtbBuilder.json +9 -0
  33. package/deployments/iotal1-mainnet/object-EndpointPtbBuilderAdminCap.json +9 -0
  34. package/deployments/iotal1-mainnet/object-EndpointV2.json +9 -0
  35. package/deployments/iotal1-mainnet/object-EndpointV2AdminCap.json +9 -0
  36. package/deployments/iotal1-mainnet/object-Executor.json +5 -0
  37. package/deployments/iotal1-mainnet/object-ExecutorCap.json +9 -0
  38. package/deployments/iotal1-mainnet/object-ExecutorFeeLib.json +9 -0
  39. package/deployments/iotal1-mainnet/object-ExecutorOwnerCap.json +5 -0
  40. package/deployments/iotal1-mainnet/object-OFTComposerManager.json +9 -0
  41. package/deployments/iotal1-mainnet/object-PackageWhitelistValidator.json +9 -0
  42. package/deployments/iotal1-mainnet/object-PriceFeed.json +9 -0
  43. package/deployments/iotal1-mainnet/object-PriceFeedOwnerCap.json +9 -0
  44. package/deployments/iotal1-mainnet/object-SimpleMessageLib.json +9 -0
  45. package/deployments/iotal1-mainnet/object-SimpleMessageLibAdminCap.json +9 -0
  46. package/deployments/iotal1-mainnet/object-SmlPtbBuilder.json +9 -0
  47. package/deployments/iotal1-mainnet/object-Treasury.json +9 -0
  48. package/deployments/iotal1-mainnet/object-TreasuryAdminCap.json +9 -0
  49. package/deployments/iotal1-mainnet/object-ULN302.json +9 -0
  50. package/deployments/iotal1-mainnet/object-ULN302AdminCap.json +9 -0
  51. package/deployments/iotal1-mainnet/object-Uln302PtbBuilder.json +9 -0
  52. package/deployments/iotal1-mainnet/object-Uln302Verification.json +9 -0
  53. package/deployments/iotal1-mainnet/object-WorkerRegistry.json +9 -0
  54. package/deployments/iotal1-mainnet/object-ZroCoinMetadata.json +9 -0
  55. package/deployments/iotal1-mainnet/object-ZroTreasuryCap.json +9 -0
  56. package/deployments/iotal1-mainnet/oft_common.json +61 -0
  57. package/deployments/iotal1-mainnet/package_whitelist_validator.json +113 -0
  58. package/deployments/iotal1-mainnet/price_feed.json +70 -0
  59. package/deployments/iotal1-mainnet/price_feed_call_types.json +45 -0
  60. package/deployments/iotal1-mainnet/ptb_move_call.json +48 -0
  61. package/deployments/iotal1-mainnet/simple_message_lib.json +69 -0
  62. package/deployments/iotal1-mainnet/simple_msglib_ptb_builder.json +58 -0
  63. package/deployments/iotal1-mainnet/treasury.json +69 -0
  64. package/deployments/iotal1-mainnet/uln_302.json +87 -0
  65. package/deployments/iotal1-mainnet/uln_302_ptb_builder.json +58 -0
  66. package/deployments/iotal1-mainnet/uln_common.json +49 -0
  67. package/deployments/iotal1-mainnet/utils.json +57 -0
  68. package/deployments/iotal1-mainnet/worker_common.json +46 -0
  69. package/deployments/iotal1-mainnet/worker_registry.json +58 -0
  70. package/deployments/iotal1-mainnet/zro.json +67 -0
  71. package/deployments/iotal1-sandbox-local/blocked_message_lib.json +58 -0
  72. package/deployments/iotal1-sandbox-local/blocked_msglib_ptb_builder.json +58 -0
  73. package/deployments/iotal1-sandbox-local/call.json +46 -0
  74. package/deployments/iotal1-sandbox-local/counter.json +148 -0
  75. package/deployments/iotal1-sandbox-local/dvn.json +49 -0
  76. package/deployments/iotal1-sandbox-local/dvn_call_type.json +73 -0
  77. package/deployments/iotal1-sandbox-local/dvn_fee_lib.json +59 -0
  78. package/deployments/iotal1-sandbox-local/dvn_layerzero.json +56 -0
  79. package/deployments/iotal1-sandbox-local/dvn_ptb_builder.json +45 -0
  80. package/deployments/iotal1-sandbox-local/endpoint_ptb_builder.json +70 -0
  81. package/deployments/iotal1-sandbox-local/endpoint_v2.json +86 -0
  82. package/deployments/iotal1-sandbox-local/executor.json +49 -0
  83. package/deployments/iotal1-sandbox-local/executor_call_type.json +73 -0
  84. package/deployments/iotal1-sandbox-local/executor_fee_lib.json +60 -0
  85. package/deployments/iotal1-sandbox-local/executor_layerzero.json +56 -0
  86. package/deployments/iotal1-sandbox-local/executor_ptb_builder.json +45 -0
  87. package/deployments/iotal1-sandbox-local/layerzero_views.json +46 -0
  88. package/deployments/iotal1-sandbox-local/message_lib_common.json +47 -0
  89. package/deployments/iotal1-sandbox-local/msglib_ptb_builder_call_types.json +45 -0
  90. package/deployments/iotal1-sandbox-local/multi_call.json +45 -0
  91. package/deployments/iotal1-sandbox-local/oapp.json +50 -0
  92. package/deployments/iotal1-sandbox-local/object-BlockedMessageLib.json +9 -0
  93. package/deployments/iotal1-sandbox-local/object-BlockedMsglibPtbBuilder.json +9 -0
  94. package/deployments/iotal1-sandbox-local/object-Counter.json +9 -0
  95. package/deployments/iotal1-sandbox-local/object-CounterAdminCap.json +9 -0
  96. package/deployments/iotal1-sandbox-local/object-CounterOApp.json +9 -0
  97. package/deployments/iotal1-sandbox-local/object-DVN.json +5 -0
  98. package/deployments/iotal1-sandbox-local/object-DVNCap.json +9 -0
  99. package/deployments/iotal1-sandbox-local/object-DVNFeeLib.json +9 -0
  100. package/deployments/iotal1-sandbox-local/object-EndpointPtbBuilder.json +9 -0
  101. package/deployments/iotal1-sandbox-local/object-EndpointPtbBuilderAdminCap.json +9 -0
  102. package/deployments/iotal1-sandbox-local/object-EndpointV2.json +9 -0
  103. package/deployments/iotal1-sandbox-local/object-EndpointV2AdminCap.json +9 -0
  104. package/deployments/iotal1-sandbox-local/object-Executor.json +5 -0
  105. package/deployments/iotal1-sandbox-local/object-ExecutorCap.json +9 -0
  106. package/deployments/iotal1-sandbox-local/object-ExecutorFeeLib.json +9 -0
  107. package/deployments/iotal1-sandbox-local/object-ExecutorOwnerCap.json +5 -0
  108. package/deployments/iotal1-sandbox-local/object-PackageWhitelistValidator.json +9 -0
  109. package/deployments/iotal1-sandbox-local/object-PriceFeed.json +9 -0
  110. package/deployments/iotal1-sandbox-local/object-PriceFeedOwnerCap.json +9 -0
  111. package/deployments/iotal1-sandbox-local/object-SimpleMessageLib.json +9 -0
  112. package/deployments/iotal1-sandbox-local/object-SimpleMessageLibAdminCap.json +9 -0
  113. package/deployments/iotal1-sandbox-local/object-SmlPtbBuilder.json +9 -0
  114. package/deployments/iotal1-sandbox-local/object-Treasury.json +9 -0
  115. package/deployments/iotal1-sandbox-local/object-TreasuryAdminCap.json +9 -0
  116. package/deployments/iotal1-sandbox-local/object-ULN302.json +9 -0
  117. package/deployments/iotal1-sandbox-local/object-ULN302AdminCap.json +9 -0
  118. package/deployments/iotal1-sandbox-local/object-Uln302PtbBuilder.json +9 -0
  119. package/deployments/iotal1-sandbox-local/object-Uln302Verification.json +9 -0
  120. package/deployments/iotal1-sandbox-local/object-WorkerRegistry.json +9 -0
  121. package/deployments/iotal1-sandbox-local/object-ZroCoinMetadata.json +9 -0
  122. package/deployments/iotal1-sandbox-local/object-ZroTreasuryCap.json +9 -0
  123. package/deployments/iotal1-sandbox-local/package_whitelist_validator.json +113 -0
  124. package/deployments/iotal1-sandbox-local/price_feed.json +98 -0
  125. package/deployments/iotal1-sandbox-local/price_feed_call_types.json +45 -0
  126. package/deployments/iotal1-sandbox-local/ptb_move_call.json +48 -0
  127. package/deployments/iotal1-sandbox-local/simple_message_lib.json +69 -0
  128. package/deployments/iotal1-sandbox-local/simple_msglib_ptb_builder.json +58 -0
  129. package/deployments/iotal1-sandbox-local/treasury.json +97 -0
  130. package/deployments/iotal1-sandbox-local/uln_302.json +87 -0
  131. package/deployments/iotal1-sandbox-local/uln_302_ptb_builder.json +58 -0
  132. package/deployments/iotal1-sandbox-local/uln_common.json +49 -0
  133. package/deployments/iotal1-sandbox-local/utils.json +78 -0
  134. package/deployments/iotal1-sandbox-local/worker_common.json +46 -0
  135. package/deployments/iotal1-sandbox-local/worker_registry.json +58 -0
  136. package/deployments/iotal1-sandbox-local/zro.json +67 -0
  137. package/deployments/iotal1-testnet/blocked_message_lib.json +58 -0
  138. package/deployments/iotal1-testnet/blocked_msglib_ptb_builder.json +58 -0
  139. package/deployments/iotal1-testnet/call.json +46 -0
  140. package/deployments/iotal1-testnet/counter.json +85 -0
  141. package/deployments/iotal1-testnet/dvn.json +49 -0
  142. package/deployments/iotal1-testnet/dvn_call_type.json +45 -0
  143. package/deployments/iotal1-testnet/dvn_fee_lib.json +59 -0
  144. package/deployments/iotal1-testnet/dvn_layerzero.json +56 -0
  145. package/deployments/iotal1-testnet/dvn_ptb_builder.json +45 -0
  146. package/deployments/iotal1-testnet/endpoint_ptb_builder.json +70 -0
  147. package/deployments/iotal1-testnet/endpoint_v2.json +86 -0
  148. package/deployments/iotal1-testnet/executor.json +49 -0
  149. package/deployments/iotal1-testnet/executor_call_type.json +45 -0
  150. package/deployments/iotal1-testnet/executor_fee_lib.json +60 -0
  151. package/deployments/iotal1-testnet/executor_layerzero.json +56 -0
  152. package/deployments/iotal1-testnet/executor_ptb_builder.json +45 -0
  153. package/deployments/iotal1-testnet/layerzero_views.json +46 -0
  154. package/deployments/iotal1-testnet/message_lib_common.json +47 -0
  155. package/deployments/iotal1-testnet/msglib_ptb_builder_call_types.json +45 -0
  156. package/deployments/iotal1-testnet/multi_call.json +45 -0
  157. package/deployments/iotal1-testnet/oapp.json +50 -0
  158. package/deployments/iotal1-testnet/object-BlockedMessageLib.json +9 -0
  159. package/deployments/iotal1-testnet/object-BlockedMsglibPtbBuilder.json +9 -0
  160. package/deployments/iotal1-testnet/object-Counter.json +9 -0
  161. package/deployments/iotal1-testnet/object-CounterAdminCap.json +9 -0
  162. package/deployments/iotal1-testnet/object-CounterOApp.json +9 -0
  163. package/deployments/iotal1-testnet/object-DVN.json +5 -0
  164. package/deployments/iotal1-testnet/object-DVNCap.json +9 -0
  165. package/deployments/iotal1-testnet/object-DVNFeeLib.json +9 -0
  166. package/deployments/iotal1-testnet/object-EndpointPtbBuilder.json +9 -0
  167. package/deployments/iotal1-testnet/object-EndpointPtbBuilderAdminCap.json +9 -0
  168. package/deployments/iotal1-testnet/object-EndpointV2.json +9 -0
  169. package/deployments/iotal1-testnet/object-EndpointV2AdminCap.json +9 -0
  170. package/deployments/iotal1-testnet/object-Executor.json +5 -0
  171. package/deployments/iotal1-testnet/object-ExecutorCap.json +9 -0
  172. package/deployments/iotal1-testnet/object-ExecutorFeeLib.json +9 -0
  173. package/deployments/iotal1-testnet/object-ExecutorOwnerCap.json +5 -0
  174. package/deployments/iotal1-testnet/object-PackageWhitelistValidator.json +9 -0
  175. package/deployments/iotal1-testnet/object-PriceFeed.json +9 -0
  176. package/deployments/iotal1-testnet/object-PriceFeedOwnerCap.json +9 -0
  177. package/deployments/iotal1-testnet/object-SimpleMessageLib.json +9 -0
  178. package/deployments/iotal1-testnet/object-SimpleMessageLibAdminCap.json +9 -0
  179. package/deployments/iotal1-testnet/object-SmlPtbBuilder.json +9 -0
  180. package/deployments/iotal1-testnet/object-Treasury.json +9 -0
  181. package/deployments/iotal1-testnet/object-TreasuryAdminCap.json +9 -0
  182. package/deployments/iotal1-testnet/object-ULN302.json +9 -0
  183. package/deployments/iotal1-testnet/object-ULN302AdminCap.json +9 -0
  184. package/deployments/iotal1-testnet/object-Uln302PtbBuilder.json +9 -0
  185. package/deployments/iotal1-testnet/object-Uln302Verification.json +9 -0
  186. package/deployments/iotal1-testnet/object-WorkerRegistry.json +9 -0
  187. package/deployments/iotal1-testnet/object-ZroCoinMetadata.json +9 -0
  188. package/deployments/iotal1-testnet/object-ZroTreasuryCap.json +9 -0
  189. package/deployments/iotal1-testnet/package_whitelist_validator.json +113 -0
  190. package/deployments/iotal1-testnet/price_feed.json +70 -0
  191. package/deployments/iotal1-testnet/price_feed_call_types.json +45 -0
  192. package/deployments/iotal1-testnet/ptb_move_call.json +48 -0
  193. package/deployments/iotal1-testnet/simple_message_lib.json +69 -0
  194. package/deployments/iotal1-testnet/simple_msglib_ptb_builder.json +58 -0
  195. package/deployments/iotal1-testnet/treasury.json +69 -0
  196. package/deployments/iotal1-testnet/uln_302.json +87 -0
  197. package/deployments/iotal1-testnet/uln_302_ptb_builder.json +58 -0
  198. package/deployments/iotal1-testnet/uln_common.json +49 -0
  199. package/deployments/iotal1-testnet/utils.json +57 -0
  200. package/deployments/iotal1-testnet/worker_common.json +46 -0
  201. package/deployments/iotal1-testnet/worker_registry.json +58 -0
  202. package/deployments/iotal1-testnet/zro.json +67 -0
  203. package/dist/index.cjs +11279 -0
  204. package/dist/index.cjs.map +1 -0
  205. package/dist/index.d.mts +5824 -0
  206. package/dist/index.d.ts +5824 -0
  207. package/dist/index.mjs +11107 -0
  208. package/dist/index.mjs.map +1 -0
  209. package/package.json +68 -0
  210. package/src/bcs/dvn.ts +7 -0
  211. package/src/bcs/endpoint.ts +7 -0
  212. package/src/bcs/executor.ts +27 -0
  213. package/src/bcs/index.ts +8 -0
  214. package/src/bcs/messaging-fee.ts +6 -0
  215. package/src/bcs/move-call.ts +28 -0
  216. package/src/bcs/oapp.ts +14 -0
  217. package/src/bcs/price-feed.ts +21 -0
  218. package/src/bcs/uln.ts +15 -0
  219. package/src/generated/addresses.ts +344 -0
  220. package/src/index.ts +5 -0
  221. package/src/module-manager.ts +360 -0
  222. package/src/modules/call.ts +245 -0
  223. package/src/modules/endpoint.ts +2417 -0
  224. package/src/modules/index.ts +10 -0
  225. package/src/modules/layerzero-views.ts +205 -0
  226. package/src/modules/message-libs/blocked-message-lib.ts +112 -0
  227. package/src/modules/message-libs/index.ts +4 -0
  228. package/src/modules/message-libs/simple-message-lib.ts +270 -0
  229. package/src/modules/message-libs/uln302.ts +827 -0
  230. package/src/modules/oapps/counter.ts +458 -0
  231. package/src/modules/oapps/index.ts +3 -0
  232. package/src/modules/oapps/oapp.ts +744 -0
  233. package/src/modules/ptb-builders/blocked-message-lib-ptb-builder.ts +49 -0
  234. package/src/modules/ptb-builders/dvn-ptb-builder.ts +58 -0
  235. package/src/modules/ptb-builders/endpoint-ptb-builder.ts +520 -0
  236. package/src/modules/ptb-builders/executor-ptb-builder.ts +58 -0
  237. package/src/modules/ptb-builders/index.ts +9 -0
  238. package/src/modules/ptb-builders/package-whitelist-validator.ts +142 -0
  239. package/src/modules/ptb-builders/ptb-builder.ts +357 -0
  240. package/src/modules/ptb-builders/simple-message-lib-ptb-builder.ts +53 -0
  241. package/src/modules/ptb-builders/uln302-ptb-builder.ts +222 -0
  242. package/src/modules/utils.ts +902 -0
  243. package/src/modules/workers/dvn-fee-lib.ts +89 -0
  244. package/src/modules/workers/dvn-layerzero.ts +85 -0
  245. package/src/modules/workers/dvn.ts +1727 -0
  246. package/src/modules/workers/executor-fee-lib.ts +94 -0
  247. package/src/modules/workers/executor-layerzero.ts +79 -0
  248. package/src/modules/workers/executor.ts +1170 -0
  249. package/src/modules/workers/index.ts +10 -0
  250. package/src/modules/workers/price-feed.ts +575 -0
  251. package/src/modules/workers/treasury.ts +295 -0
  252. package/src/modules/workers/worker-registry.ts +110 -0
  253. package/src/modules/zro.ts +94 -0
  254. package/src/resource.ts +104 -0
  255. package/src/sdk.ts +183 -0
  256. package/src/types/dvn.ts +20 -0
  257. package/src/types/endpoint.ts +16 -0
  258. package/src/types/errors.ts +10 -0
  259. package/src/types/executor.ts +23 -0
  260. package/src/types/index.ts +13 -0
  261. package/src/types/layerzero-views.ts +59 -0
  262. package/src/types/message-lib.ts +38 -0
  263. package/src/types/modules.ts +36 -0
  264. package/src/types/move-types.ts +24 -0
  265. package/src/types/oapp.ts +6 -0
  266. package/src/types/options.ts +333 -0
  267. package/src/types/price-feed.ts +21 -0
  268. package/src/types/ptb-builder.ts +29 -0
  269. package/src/types/simulation.ts +8 -0
  270. package/src/utils/argument.ts +198 -0
  271. package/src/utils/index.ts +8 -0
  272. package/src/utils/move-call-object-fetcher.ts +105 -0
  273. package/src/utils/non-sender-object-validator.ts +102 -0
  274. package/src/utils/package-allowlist-validator.ts +134 -0
  275. package/src/utils/ptb-validator.ts +14 -0
  276. package/src/utils/share-object-validator.ts +37 -0
  277. package/src/utils/transaction.ts +157 -0
  278. package/src/utils/type-name.ts +99 -0
  279. package/src/utils/validate-with-details.ts +50 -0
@@ -0,0 +1,360 @@
1
+ import { createHash } from 'crypto'
2
+
3
+ import { IotaClient } from '@iota/iota-sdk/client'
4
+
5
+ import {
6
+ BlockedMessageLib,
7
+ BlockedMessageLibPtbBuilder,
8
+ Call,
9
+ Counter,
10
+ DVN,
11
+ DVNFeeLib,
12
+ DvnLayerZero,
13
+ DvnPtbBuilder,
14
+ Endpoint,
15
+ EndpointPtbBuilder,
16
+ Executor,
17
+ ExecutorFeeLib,
18
+ ExecutorLayerZero,
19
+ ExecutorPtbBuilder,
20
+ LayerZeroViews,
21
+ OApp,
22
+ PackageWhitelistValidator,
23
+ PriceFeed,
24
+ PtbBuilder,
25
+ SimpleMessageLib,
26
+ SimpleMessageLibPtbBuilder,
27
+ Treasury,
28
+ Uln302,
29
+ Uln302PtbBuilder,
30
+ Utils,
31
+ WorkerRegistry,
32
+ Zro,
33
+ } from './modules'
34
+ import { ModuleOptions, ObjectOptions, PackageOptions } from './types'
35
+ import { Modules } from './types/modules'
36
+
37
+ /**
38
+ * Module Manager - Centralized management for all SDK modules
39
+ * Uses unified storage for both core modules and cached modules with options
40
+ */
41
+ export class ModuleManager {
42
+ public packages: PackageOptions
43
+ public objects: ObjectOptions
44
+
45
+ private storage = new Map<string, unknown>()
46
+
47
+ constructor(packages: PackageOptions, objects: ObjectOptions) {
48
+ this.packages = packages
49
+ this.objects = objects
50
+ }
51
+
52
+ /**
53
+ * Generate a cache key using hash for modules with options
54
+ */
55
+ private generateCacheKey(moduleName: string, options?: ModuleOptions): string {
56
+ if (!options) {
57
+ return `${moduleName}:default`
58
+ }
59
+
60
+ // Create hash from JSON string
61
+ const jsonStr = JSON.stringify(options, Object.keys(options).sort())
62
+ const hash = createHash('sha256').update(jsonStr).digest('hex').substring(0, 16)
63
+
64
+ return `${moduleName}:${hash}`
65
+ }
66
+
67
+ private setCoreModules(modules: { [key: string]: unknown }): void {
68
+ Object.entries(modules).forEach(([name, instance]) => {
69
+ this.setModule(name, undefined, instance)
70
+ })
71
+ }
72
+
73
+ /**
74
+ * Get module instance (with options), throws error if not found
75
+ */
76
+ getModule<T>(moduleName: string, options?: ModuleOptions): T {
77
+ const key = this.generateCacheKey(moduleName, options)
78
+ const module = this.storage.get(key) as T | undefined
79
+ if (module === undefined) {
80
+ const optionsStr = options ? ` with options ${JSON.stringify(options)}` : ''
81
+ throw new Error(`Module '${moduleName}'${optionsStr} not found`)
82
+ }
83
+ return module
84
+ }
85
+
86
+ /**
87
+ * Store module instance (with options)
88
+ */
89
+ setModule<T>(moduleName: string, options: ModuleOptions | undefined, instance: T): void {
90
+ const key = this.generateCacheKey(moduleName, options)
91
+ this.storage.set(key, instance)
92
+ }
93
+
94
+ /**
95
+ * Check if module (with options) exists
96
+ */
97
+ hasModule(moduleName: string, options?: ModuleOptions): boolean {
98
+ const key = this.generateCacheKey(moduleName, options)
99
+ return this.storage.has(key)
100
+ }
101
+
102
+ /**
103
+ * Get module instance or create new one using factory function
104
+ */
105
+ getOrCreateModule<T>(moduleName: string, options: ModuleOptions | undefined, factory: () => T): T {
106
+ // Check if module exists first
107
+ if (this.hasModule(moduleName, options)) {
108
+ return this.getModule<T>(moduleName, options)
109
+ }
110
+
111
+ // Create new instance and store it
112
+ const instance = factory()
113
+ this.setModule(moduleName, options, instance)
114
+ return instance
115
+ }
116
+
117
+ /**
118
+ * Get all core modules as an object
119
+ */
120
+ getAllCoreModules(): { [key: string]: unknown } {
121
+ const result: { [key: string]: unknown } = {}
122
+ const coreModuleKeys = Array.from(this.storage.keys()).filter((key) => key.endsWith(':default'))
123
+
124
+ for (const key of coreModuleKeys) {
125
+ const moduleName = key.replace(':default', '')
126
+ result[moduleName] = this.storage.get(key)
127
+ }
128
+
129
+ return result
130
+ }
131
+
132
+ /**
133
+ * Clear all modules and cache
134
+ */
135
+ clear(): void {
136
+ this.storage.clear()
137
+ }
138
+
139
+ /**
140
+ * Remove a module with specific options
141
+ */
142
+ removeModule(moduleName: string, options?: ModuleOptions): boolean {
143
+ const key = this.generateCacheKey(moduleName, options)
144
+ return this.storage.delete(key)
145
+ }
146
+
147
+ /**
148
+ * Initialize all standard LayerZero modules
149
+ * @param packages - Package addresses configuration
150
+ * @param objects - Object addresses configuration
151
+ * @param client - Iota client instance
152
+ * @param context - Context object to be populated with module references
153
+ */
154
+ initializeCoreModules(packages: PackageOptions, objects: ObjectOptions, client: IotaClient): void {
155
+ this.setCoreModules({
156
+ [Modules.Endpoint]: new Endpoint(packages.endpointV2, client, objects, this),
157
+ [Modules.SimpleMessageLib]: new SimpleMessageLib(packages.simpleMessageLib, client, objects, this),
158
+ [Modules.BlockedMessageLib]: new BlockedMessageLib(packages.blockedMessageLib, client, objects, this),
159
+ [Modules.Uln302]: new Uln302(packages.uln302, client, objects, this),
160
+ [Modules.Utils]: new Utils(packages.utils, client),
161
+ [Modules.Zro]: new Zro(packages.zro, client, this),
162
+ [Modules.Call]: new Call(packages.call, client),
163
+ [Modules.Treasury]: new Treasury(packages.treasury, client, objects, this),
164
+ [Modules.LayerZeroViews]: new LayerZeroViews(packages.layerzeroViews, client, objects, this),
165
+ [Modules.PtbBuilder]: new PtbBuilder(packages.ptbMoveCall, client),
166
+ })
167
+ }
168
+
169
+ // === Core Module Getters ===
170
+
171
+ getEndpoint(): Endpoint {
172
+ return this.getModule(Modules.Endpoint)
173
+ }
174
+
175
+ getSimpleMessageLib(): SimpleMessageLib {
176
+ return this.getModule(Modules.SimpleMessageLib)
177
+ }
178
+
179
+ getBlockedMessageLib(): BlockedMessageLib {
180
+ return this.getModule(Modules.BlockedMessageLib)
181
+ }
182
+
183
+ getUln302(): Uln302 {
184
+ return this.getModule(Modules.Uln302)
185
+ }
186
+
187
+ getUtils(): Utils {
188
+ return this.getModule(Modules.Utils)
189
+ }
190
+
191
+ getZro(): Zro {
192
+ return this.getModule(Modules.Zro)
193
+ }
194
+
195
+ getCall(): Call {
196
+ return this.getModule(Modules.Call)
197
+ }
198
+
199
+ getTreasury(): Treasury {
200
+ return this.getModule(Modules.Treasury)
201
+ }
202
+
203
+ getLayerZeroViews(): LayerZeroViews {
204
+ return this.getModule(Modules.LayerZeroViews)
205
+ }
206
+
207
+ getPtbBuilder(): PtbBuilder {
208
+ return this.getModule(Modules.PtbBuilder)
209
+ }
210
+
211
+ getOApp(client: IotaClient, callCapId: string, options?: ModuleOptions): OApp {
212
+ return this.getOrCreateModule(Modules.Oapp + callCapId, options, () => {
213
+ const packageId = options?.packageId ?? this.packages.oapp
214
+ const objects = this.mergeObjectsOptions(options)
215
+ return new OApp(packageId, callCapId, client, objects, this)
216
+ })
217
+ }
218
+
219
+ // === Non-core Module Getters (created on-demand with caching) ===
220
+
221
+ getCounter(client: IotaClient, options?: ModuleOptions): Counter {
222
+ return this.getOrCreateModule(Modules.Counter, options, () => {
223
+ const packageId = options?.packageId ?? this.packages.counterV2
224
+ const objects = this.mergeObjectsOptions(options)
225
+ return new Counter(packageId, client, objects, this)
226
+ })
227
+ }
228
+
229
+ getExecutor(client: IotaClient, options?: ModuleOptions): Executor {
230
+ return this.getOrCreateModule(Modules.Executor, options, () => {
231
+ const packageId = options?.packageId ?? this.packages.executor
232
+ const objects = this.mergeObjectsOptions(options)
233
+ return new Executor(packageId, client, objects, this)
234
+ })
235
+ }
236
+
237
+ getDvn(client: IotaClient, options?: ModuleOptions): DVN {
238
+ return this.getOrCreateModule(Modules.Dvn, options, () => {
239
+ const packageId = options?.packageId ?? this.packages.dvn
240
+ const objects = this.mergeObjectsOptions(options)
241
+ return new DVN(packageId, client, objects, this)
242
+ })
243
+ }
244
+
245
+ getDvnFeeLib(client: IotaClient, options?: ModuleOptions): DVNFeeLib {
246
+ return this.getOrCreateModule(Modules.DvnFeeLib, options, () => {
247
+ const packageId = options?.packageId ?? this.packages.dvnFeeLib
248
+ const objects = this.mergeObjectsOptions(options)
249
+ return new DVNFeeLib(packageId, client, objects, this)
250
+ })
251
+ }
252
+
253
+ getExecutorFeeLib(client: IotaClient, options?: ModuleOptions): ExecutorFeeLib {
254
+ return this.getOrCreateModule(Modules.ExecutorFeeLib, options, () => {
255
+ const packageId = options?.packageId ?? this.packages.executorFeeLib
256
+ const objects = this.mergeObjectsOptions(options)
257
+ return new ExecutorFeeLib(packageId, client, objects, this)
258
+ })
259
+ }
260
+
261
+ getPriceFeed(client: IotaClient, options?: ModuleOptions): PriceFeed {
262
+ return this.getOrCreateModule(Modules.PriceFeed, options, () => {
263
+ const packageId = options?.packageId ?? this.packages.priceFeed
264
+ const objects = this.mergeObjectsOptions(options)
265
+ return new PriceFeed(packageId, client, objects, this)
266
+ })
267
+ }
268
+
269
+ getDvnLayerZero(client: IotaClient, options?: ModuleOptions): DvnLayerZero {
270
+ return this.getOrCreateModule(Modules.DvnLayerZero, options, () => {
271
+ const packageId = options?.packageId ?? this.packages.dvnLayerzero
272
+ return new DvnLayerZero(packageId, client, this)
273
+ })
274
+ }
275
+
276
+ getExecutorLayerZero(client: IotaClient, options?: ModuleOptions): ExecutorLayerZero {
277
+ return this.getOrCreateModule(Modules.ExecutorLayerZero, options, () => {
278
+ const packageId = options?.packageId ?? this.packages.executorLayerzero
279
+ return new ExecutorLayerZero(packageId, client, this)
280
+ })
281
+ }
282
+
283
+ getDvnPtbBuilder(client: IotaClient, options?: ModuleOptions): DvnPtbBuilder {
284
+ return this.getOrCreateModule(Modules.DvnPtbBuilder, options, () => {
285
+ const packageId = options?.packageId ?? this.packages.dvnPtbBuilder
286
+ const objects = this.mergeObjectsOptions(options)
287
+ return new DvnPtbBuilder(packageId, client, objects, this)
288
+ })
289
+ }
290
+
291
+ getExecutorPtbBuilder(client: IotaClient, options?: ModuleOptions): ExecutorPtbBuilder {
292
+ return this.getOrCreateModule(Modules.ExecutorPtbBuilder, options, () => {
293
+ const packageId = options?.packageId ?? this.packages.executorPtbBuilder
294
+ const objects = this.mergeObjectsOptions(options)
295
+ return new ExecutorPtbBuilder(packageId, client, objects, this)
296
+ })
297
+ }
298
+
299
+ getPackageWhitelistValidator(client: IotaClient, options?: ModuleOptions): PackageWhitelistValidator {
300
+ return this.getOrCreateModule(Modules.PackageWhitelistValidator, options, () => {
301
+ const packageId = options?.packageId ?? this.packages.packageWhitelistValidator
302
+ const objects = this.mergeObjectsOptions(options)
303
+ return new PackageWhitelistValidator(packageId, client, objects, this)
304
+ })
305
+ }
306
+
307
+ getUln302PtbBuilder(client: IotaClient, options?: ModuleOptions): Uln302PtbBuilder {
308
+ return this.getOrCreateModule(Modules.Uln302PtbBuilder, options, () => {
309
+ const packageId = options?.packageId ?? this.packages.uln302PtbBuilder
310
+ const objects = this.mergeObjectsOptions(options)
311
+ return new Uln302PtbBuilder(packageId, client, objects, this)
312
+ })
313
+ }
314
+
315
+ getEndpointPtbBuilder(client: IotaClient, options?: ModuleOptions): EndpointPtbBuilder {
316
+ return this.getOrCreateModule(Modules.EndpointPtbBuilder, options, () => {
317
+ const packageId = options?.packageId ?? this.packages.endpointPtbBuilder
318
+ const objects = this.mergeObjectsOptions(options)
319
+ return new EndpointPtbBuilder(packageId, client, objects, this)
320
+ })
321
+ }
322
+
323
+ getSimpleMessageLibPtbBuilder(client: IotaClient, options?: ModuleOptions): SimpleMessageLibPtbBuilder {
324
+ return this.getOrCreateModule(Modules.SimpleMessageLibPtbBuilder, options, () => {
325
+ const packageId = options?.packageId ?? this.packages.simpleMessageLibPtbBuilder
326
+ const objects = this.mergeObjectsOptions(options)
327
+ return new SimpleMessageLibPtbBuilder(packageId, client, objects, this)
328
+ })
329
+ }
330
+ getBlockedMessageLibPtbBuilder(client: IotaClient, options?: ModuleOptions): BlockedMessageLibPtbBuilder {
331
+ return this.getOrCreateModule(Modules.BlockedMessageLibPtbBuilder, options, () => {
332
+ const packageId = options?.packageId ?? this.packages.blockedMessageLibPtbBuilder
333
+ const objects = this.mergeObjectsOptions(options)
334
+ return new BlockedMessageLibPtbBuilder(packageId, client, objects, this)
335
+ })
336
+ }
337
+
338
+ getWorkerRegistry(client: IotaClient, options?: ModuleOptions): WorkerRegistry {
339
+ return this.getOrCreateModule(Modules.WorkerRegistry, options, () => {
340
+ const packageId = options?.packageId ?? this.packages.workerRegistry
341
+ const objects = this.mergeObjectsOptions(options)
342
+ return new WorkerRegistry(packageId, client, objects, this)
343
+ })
344
+ }
345
+
346
+ // === Private Utility Methods ===
347
+
348
+ /**
349
+ * Merge objects configuration with options, avoiding unnecessary object spreading
350
+ */
351
+ private mergeObjectsOptions(options?: ModuleOptions): ObjectOptions {
352
+ // If no options or options.objects is empty, return original objects
353
+ if (!options?.objects || Object.keys(options.objects).length === 0) {
354
+ return this.objects
355
+ }
356
+
357
+ // Only perform object spreading when there are actual properties to merge
358
+ return { ...this.objects, ...options.objects }
359
+ }
360
+ }
@@ -0,0 +1,245 @@
1
+ import { bcs } from '@iota/iota-sdk/bcs'
2
+ import { IotaClient } from '@iota/iota-sdk/client'
3
+ import { Transaction, TransactionArgument, TransactionResult } from '@iota/iota-sdk/transactions'
4
+
5
+ import { asObject, executeSimulate } from '../utils'
6
+
7
+ const DEFAULT_MODULE_NAME = 'call'
8
+
9
+ export const CallErrorCode = {
10
+ // Call related errors (matching call.move)
11
+ Call_ECallNotActive: 1,
12
+ Call_ECallNotCompleted: 2,
13
+ Call_ECallNotCreating: 3,
14
+ Call_ECallNotRoot: 4,
15
+ Call_ECallNotWaiting: 5,
16
+ Call_EInvalidChild: 6,
17
+ Call_EInvalidNonce: 7,
18
+ Call_EInvalidParent: 8,
19
+ Call_EParameterNotMutable: 9,
20
+ Call_EUnauthorized: 10,
21
+
22
+ // CallCap related errors (matching call_cap.move)
23
+ CallCap_EBadWitness: 1,
24
+
25
+ // MultiCall related errors (matching dynamic-call/multi-call/multi_call.move)
26
+ MultiCall_ENoMoreCalls: 1,
27
+ MultiCall_EUnauthorized: 2,
28
+ } as const
29
+
30
+ export class Call {
31
+ public packageId: string
32
+ public readonly client: IotaClient
33
+
34
+ constructor(packageId: string, client: IotaClient) {
35
+ this.packageId = packageId
36
+ this.client = client
37
+ }
38
+
39
+ // === Set function ===
40
+
41
+ /**
42
+ * Create a new CallCap for a user (direct interaction)
43
+ * Creates a user-based CallCap that uses its own UID as the identifier
44
+ * @param tx - The transaction to add the move call to
45
+ * @returns Transaction result containing the new individual CallCap
46
+ */
47
+ newIndividualCapMoveCall(tx: Transaction): TransactionResult {
48
+ return tx.moveCall({
49
+ target: this.#target('new_individual_cap', 'call_cap'),
50
+ arguments: [],
51
+ })
52
+ }
53
+
54
+ /**
55
+ * Create a void result for calls with no meaningful return value
56
+ * @param tx - The transaction to add the move call to
57
+ * @returns Transaction result containing a void result
58
+ */
59
+ voidMoveCall(tx: Transaction): TransactionResult {
60
+ return tx.moveCall({
61
+ target: this.#target('void'),
62
+ arguments: [],
63
+ })
64
+ }
65
+
66
+ // === View function ===
67
+
68
+ /**
69
+ * Get the result from a call
70
+ * @param tx - The transaction to add the move call to
71
+ * @param paramType - The parameter type for the call
72
+ * @param resultType - The result type for the call
73
+ * @param call - The call transaction result or transaction argument
74
+ * @returns Transaction result containing the call result
75
+ */
76
+ resultMoveCall(
77
+ tx: Transaction,
78
+ paramType: string,
79
+ resultType: string,
80
+ call: TransactionArgument
81
+ ): TransactionResult {
82
+ return tx.moveCall({
83
+ target: this.#target('result'),
84
+ typeArguments: [paramType, resultType],
85
+ arguments: [call],
86
+ })
87
+ }
88
+
89
+ /**
90
+ * Get the recipient from a call
91
+ * @param tx - The transaction to add the move call to
92
+ * @param paramType - The parameter type for the call
93
+ * @param resultType - The result type for the call
94
+ * @param call - The call transaction result or transaction argument
95
+ * @returns Transaction result containing the call recipient
96
+ */
97
+ recipientMoveCall(
98
+ tx: Transaction,
99
+ paramType: string,
100
+ resultType: string,
101
+ call: TransactionArgument
102
+ ): TransactionResult {
103
+ return tx.moveCall({
104
+ target: this.#target('recipient'),
105
+ typeArguments: [paramType, resultType],
106
+ arguments: [call],
107
+ })
108
+ }
109
+
110
+ /**
111
+ * Get the unique identifier for a CallCap
112
+ * Returns the appropriate identifier based on the source type
113
+ * @param tx - The transaction to add the move call to
114
+ * @param callCap - The CallCap object ID or transaction argument
115
+ * @returns Transaction result containing the CallCap identifier
116
+ */
117
+ callCapIdMoveCall(tx: Transaction, callCap: string | TransactionArgument): TransactionResult {
118
+ return tx.moveCall({
119
+ target: this.#target('id', 'call_cap'),
120
+ arguments: [asObject(tx, callCap)],
121
+ })
122
+ }
123
+
124
+ /**
125
+ * Get the unique identifier for a CallCap
126
+ * Returns the appropriate identifier based on the source type
127
+ * @param callCap - The CallCap object ID
128
+ * @returns Promise resolving to the CallCap identifier as a string
129
+ */
130
+ async getCallCapId(callCap: string): Promise<string> {
131
+ return executeSimulate(
132
+ this.client,
133
+ (tx) => {
134
+ this.callCapIdMoveCall(tx, callCap)
135
+ },
136
+ (result) => bcs.Address.parse(result[0].value)
137
+ )
138
+ }
139
+
140
+ /**
141
+ * Check if this is an Individual CallCap
142
+ * @param tx - The transaction to add the move call to
143
+ * @param callCap - The CallCap object ID or transaction argument
144
+ * @returns Transaction result containing a boolean indicating if it's an Individual CallCap
145
+ */
146
+ isIndividualCapMoveCall(tx: Transaction, callCap: string | TransactionArgument): TransactionResult {
147
+ return tx.moveCall({
148
+ target: this.#target('is_individual', 'call_cap'),
149
+ arguments: [asObject(tx, callCap)],
150
+ })
151
+ }
152
+
153
+ /**
154
+ * Check if this is an Individual CallCap
155
+ * @param callCap - The CallCap object ID
156
+ * @returns Promise resolving to true if it's an Individual CallCap
157
+ */
158
+ async isIndividualCap(callCap: string): Promise<boolean> {
159
+ return executeSimulate(
160
+ this.client,
161
+ (tx) => {
162
+ this.isIndividualCapMoveCall(tx, callCap)
163
+ },
164
+ (result) => bcs.Bool.parse(result[0].value)
165
+ )
166
+ }
167
+
168
+ /**
169
+ * Check if this is a Package CallCap
170
+ * @param tx - The transaction to add the move call to
171
+ * @param callCap - The CallCap object ID or transaction argument
172
+ * @returns Transaction result containing a boolean indicating if it's a Package CallCap
173
+ */
174
+ isPackageCapMoveCall(tx: Transaction, callCap: string | TransactionArgument): TransactionResult {
175
+ return tx.moveCall({
176
+ target: this.#target('is_package', 'call_cap'),
177
+ arguments: [asObject(tx, callCap)],
178
+ })
179
+ }
180
+
181
+ /**
182
+ * Check if this is a Package CallCap
183
+ * @param callCap - The CallCap object ID
184
+ * @returns Promise resolving to true if it's a Package CallCap
185
+ */
186
+ async isPackageCap(callCap: string): Promise<boolean> {
187
+ return executeSimulate(
188
+ this.client,
189
+ (tx) => {
190
+ this.isPackageCapMoveCall(tx, callCap)
191
+ },
192
+ (result) => bcs.Bool.parse(result[0].value)
193
+ )
194
+ }
195
+
196
+ /**
197
+ * Get the package address for a Package CallCap
198
+ * Returns None if this is a User CallCap
199
+ * @param tx - The transaction to add the move call to
200
+ * @param callCap - The CallCap object ID or transaction argument
201
+ * @returns Transaction result containing the package address option
202
+ */
203
+ packageAddressMoveCall(tx: Transaction, callCap: string | TransactionArgument): TransactionResult {
204
+ return tx.moveCall({
205
+ target: this.#target('package_address', 'call_cap'),
206
+ arguments: [asObject(tx, callCap)],
207
+ })
208
+ }
209
+
210
+ /**
211
+ * Get the package address for a Package CallCap
212
+ * Returns null if this is an Individual CallCap
213
+ * @param callCap - The CallCap object ID
214
+ * @returns Promise resolving to the package address or null if Individual CallCap
215
+ */
216
+ async getPackageAddress(callCap: string): Promise<string | null> {
217
+ return executeSimulate(
218
+ this.client,
219
+ (tx) => {
220
+ this.packageAddressMoveCall(tx, callCap)
221
+ },
222
+ (result) => {
223
+ try {
224
+ // Try to parse as Option<address>
225
+ const option = bcs.option(bcs.Address).parse(result[0].value)
226
+ return option ?? null
227
+ } catch {
228
+ // If parsing fails, it might be None
229
+ return null
230
+ }
231
+ }
232
+ )
233
+ }
234
+
235
+ /**
236
+ * Generate the full target path for move calls
237
+ * @param name - The function name to call
238
+ * @param module_name - The module name (defaults to DEFAULT_MODULE_NAME)
239
+ * @returns The full module path for the move call
240
+ * @private
241
+ */
242
+ #target(name: string, module_name = DEFAULT_MODULE_NAME): string {
243
+ return `${this.packageId}::${module_name}::${name}`
244
+ }
245
+ }