@xyo-network/xl1-protocol-sdk 1.18.0 → 1.18.2

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 (219) hide show
  1. package/dist/neutral/CreatableProvider/AbstractCreatableProvider.d.ts +52 -21
  2. package/dist/neutral/CreatableProvider/AbstractCreatableProvider.d.ts.map +1 -1
  3. package/dist/neutral/CreatableProvider/CreatableProvider.d.ts +13 -8
  4. package/dist/neutral/CreatableProvider/CreatableProvider.d.ts.map +1 -1
  5. package/dist/neutral/CreatableProvider/CreatableProviderRegistry.d.ts +2 -4
  6. package/dist/neutral/CreatableProvider/CreatableProviderRegistry.d.ts.map +1 -1
  7. package/dist/neutral/CreatableProvider/ProviderFactory.d.ts +6 -4
  8. package/dist/neutral/CreatableProvider/ProviderFactory.d.ts.map +1 -1
  9. package/dist/neutral/CreatableProvider/ProviderFactoryLocator.d.ts +7 -7
  10. package/dist/neutral/CreatableProvider/ProviderFactoryLocator.d.ts.map +1 -1
  11. package/dist/neutral/CreatableProvider/ProviderFactoryLocatorInstance.d.ts +3 -2
  12. package/dist/neutral/CreatableProvider/ProviderFactoryLocatorInstance.d.ts.map +1 -1
  13. package/dist/neutral/actor/Actor.d.ts +176 -0
  14. package/dist/neutral/actor/Actor.d.ts.map +1 -0
  15. package/dist/neutral/actor/index.d.ts +2 -0
  16. package/dist/neutral/actor/index.d.ts.map +1 -0
  17. package/dist/neutral/block/hydrate/allHashesPresent.d.ts +2 -2
  18. package/dist/neutral/block/hydrate/allHashesPresent.d.ts.map +1 -1
  19. package/dist/neutral/block/hydrate/hydrateBlock.d.ts +2 -2
  20. package/dist/neutral/block/hydrate/hydrateBlock.d.ts.map +1 -1
  21. package/dist/neutral/config/Api.d.ts +1 -1
  22. package/dist/neutral/config/Api.d.ts.map +1 -1
  23. package/dist/neutral/config/Bridge.d.ts +41 -21
  24. package/dist/neutral/config/Bridge.d.ts.map +1 -1
  25. package/dist/neutral/config/Chain.d.ts +7 -3
  26. package/dist/neutral/config/Chain.d.ts.map +1 -1
  27. package/dist/neutral/config/Config.d.ts +48 -20
  28. package/dist/neutral/config/Config.d.ts.map +1 -1
  29. package/dist/neutral/config/Evm.d.ts +1 -1
  30. package/dist/neutral/config/Evm.d.ts.map +1 -1
  31. package/dist/neutral/config/Log.d.ts +2 -2
  32. package/dist/neutral/config/Log.d.ts.map +1 -1
  33. package/dist/neutral/config/Mempool.d.ts +1 -1
  34. package/dist/neutral/config/Mempool.d.ts.map +1 -1
  35. package/dist/neutral/config/Producer.d.ts +6 -2
  36. package/dist/neutral/config/Producer.d.ts.map +1 -1
  37. package/dist/neutral/config/RewardRedemptionApi.d.ts +1 -1
  38. package/dist/neutral/config/RewardRedemptionApi.d.ts.map +1 -1
  39. package/dist/neutral/config/Services.d.ts +1 -1
  40. package/dist/neutral/config/Services.d.ts.map +1 -1
  41. package/dist/neutral/config/Telemetry.d.ts +11 -4
  42. package/dist/neutral/config/Telemetry.d.ts.map +1 -1
  43. package/dist/neutral/config/UsageMeta.d.ts +1 -1
  44. package/dist/neutral/config/UsageMeta.d.ts.map +1 -1
  45. package/dist/neutral/config/Validation.d.ts +11 -3
  46. package/dist/neutral/config/Validation.d.ts.map +1 -1
  47. package/dist/neutral/config/index.d.ts +1 -0
  48. package/dist/neutral/config/index.d.ts.map +1 -1
  49. package/dist/neutral/config/storage/Storage.d.ts +1 -1
  50. package/dist/neutral/config/storage/Storage.d.ts.map +1 -1
  51. package/dist/neutral/config/storage/driver/Mongo.d.ts +1 -1
  52. package/dist/neutral/config/storage/driver/Mongo.d.ts.map +1 -1
  53. package/dist/neutral/eip-712/Payloads/EIP712Data.d.ts +4 -4
  54. package/dist/neutral/eip-712/Payloads/EIP712Data.d.ts.map +1 -1
  55. package/dist/neutral/eip-712/Payloads/EIP712Signature.d.ts +3 -3
  56. package/dist/neutral/eip-712/Payloads/EIP712Signature.d.ts.map +1 -1
  57. package/dist/neutral/eip-712/Types.d.ts +4 -4
  58. package/dist/neutral/eip-712/Types.d.ts.map +1 -1
  59. package/dist/neutral/index.d.ts +1 -0
  60. package/dist/neutral/index.d.ts.map +1 -1
  61. package/dist/neutral/index.mjs +3271 -3246
  62. package/dist/neutral/index.mjs.map +1 -1
  63. package/dist/neutral/model/ChainQualification.d.ts +15 -15
  64. package/dist/neutral/model/ChainQualification.d.ts.map +1 -1
  65. package/dist/neutral/payloads/netBalancesForPayloads.d.ts +5 -2
  66. package/dist/neutral/payloads/netBalancesForPayloads.d.ts.map +1 -1
  67. package/dist/neutral/payloads/netSchemasForPayloads.d.ts +5 -2
  68. package/dist/neutral/payloads/netSchemasForPayloads.d.ts.map +1 -1
  69. package/dist/neutral/primitives/chain/getWindowedChain.d.ts +8 -23
  70. package/dist/neutral/primitives/chain/getWindowedChain.d.ts.map +1 -1
  71. package/dist/neutral/primitives/rewards/networkStakeStepRewardPositionWeight.d.ts.map +1 -1
  72. package/dist/neutral/primitives/stake/weightedStakeForRangeByPosition.d.ts +2 -1
  73. package/dist/neutral/primitives/stake/weightedStakeForRangeByPosition.d.ts.map +1 -1
  74. package/dist/neutral/primitives/uncle/findBestUncle.d.ts +21 -13
  75. package/dist/neutral/primitives/uncle/findBestUncle.d.ts.map +1 -1
  76. package/dist/neutral/primitives/uncle/findUncles.d.ts +21 -14
  77. package/dist/neutral/primitives/uncle/findUncles.d.ts.map +1 -1
  78. package/dist/neutral/provider/signer/XyoSigner.d.ts +2 -0
  79. package/dist/neutral/provider/signer/XyoSigner.d.ts.map +1 -1
  80. package/dist/neutral/runners/Finalization.d.ts +12 -0
  81. package/dist/neutral/runners/Finalization.d.ts.map +1 -0
  82. package/dist/neutral/runners/index.d.ts +1 -0
  83. package/dist/neutral/runners/index.d.ts.map +1 -1
  84. package/dist/neutral/simple/accountBalance/SimpleAccountBalanceViewer.d.ts +66 -33
  85. package/dist/neutral/simple/accountBalance/SimpleAccountBalanceViewer.d.ts.map +1 -1
  86. package/dist/neutral/simple/block/SimpleBlockViewer.d.ts +9 -25
  87. package/dist/neutral/simple/block/SimpleBlockViewer.d.ts.map +1 -1
  88. package/dist/neutral/simple/blockReward/SimpleBlockRewardViewer.d.ts +1 -0
  89. package/dist/neutral/simple/blockReward/SimpleBlockRewardViewer.d.ts.map +1 -1
  90. package/dist/neutral/simple/blockValidation/SimpleBlockValidationViewer.d.ts +4 -3
  91. package/dist/neutral/simple/blockValidation/SimpleBlockValidationViewer.d.ts.map +1 -1
  92. package/dist/neutral/simple/chainStake/SimpleStakeViewer.d.ts +1 -0
  93. package/dist/neutral/simple/chainStake/SimpleStakeViewer.d.ts.map +1 -1
  94. package/dist/neutral/simple/datalake/SimpleDataLakeRunner.d.ts +1 -0
  95. package/dist/neutral/simple/datalake/SimpleDataLakeRunner.d.ts.map +1 -1
  96. package/dist/neutral/simple/datalake/SimpleDataLakeViewer.d.ts +1 -0
  97. package/dist/neutral/simple/datalake/SimpleDataLakeViewer.d.ts.map +1 -1
  98. package/dist/neutral/simple/finalization/SimpleFinalizationRunner.d.ts +21 -0
  99. package/dist/neutral/simple/finalization/SimpleFinalizationRunner.d.ts.map +1 -0
  100. package/dist/neutral/simple/finalization/SimpleFinalizationViewer.d.ts +61 -0
  101. package/dist/neutral/simple/finalization/SimpleFinalizationViewer.d.ts.map +1 -0
  102. package/dist/neutral/simple/finalization/index.d.ts +3 -0
  103. package/dist/neutral/simple/finalization/index.d.ts.map +1 -0
  104. package/dist/neutral/simple/index.d.ts +2 -0
  105. package/dist/neutral/simple/index.d.ts.map +1 -1
  106. package/dist/neutral/simple/mempool/SimpleMempoolRunner.d.ts +2 -0
  107. package/dist/neutral/simple/mempool/SimpleMempoolRunner.d.ts.map +1 -1
  108. package/dist/neutral/simple/mempool/SimpleMempoolViewer.d.ts +7 -2
  109. package/dist/neutral/simple/mempool/SimpleMempoolViewer.d.ts.map +1 -1
  110. package/dist/neutral/simple/runner/SimpleXyoRunner.d.ts +1 -0
  111. package/dist/neutral/simple/runner/SimpleXyoRunner.d.ts.map +1 -1
  112. package/dist/neutral/simple/signer/SimpleXyoSigner.d.ts +19 -3
  113. package/dist/neutral/simple/signer/SimpleXyoSigner.d.ts.map +1 -1
  114. package/dist/neutral/simple/stakeEvents/SimpleStakeEventsViewer.d.ts +1 -0
  115. package/dist/neutral/simple/stakeEvents/SimpleStakeEventsViewer.d.ts.map +1 -1
  116. package/dist/neutral/simple/timesync/SimpleTimeSyncViewer.d.ts +2 -1
  117. package/dist/neutral/simple/timesync/SimpleTimeSyncViewer.d.ts.map +1 -1
  118. package/dist/neutral/simple/windowedBlock/SimpleWindowedBlockViewer.d.ts +191 -0
  119. package/dist/neutral/simple/windowedBlock/SimpleWindowedBlockViewer.d.ts.map +1 -0
  120. package/dist/neutral/simple/windowedBlock/index.d.ts +2 -0
  121. package/dist/neutral/simple/windowedBlock/index.d.ts.map +1 -0
  122. package/dist/neutral/summary/model/summary.d.ts +3 -1
  123. package/dist/neutral/summary/model/summary.d.ts.map +1 -1
  124. package/dist/neutral/summary/primitives/transfers/transfersSummary.d.ts +1 -1
  125. package/dist/neutral/summary/primitives/transfers/transfersSummary.d.ts.map +1 -1
  126. package/dist/neutral/transaction/TransactionBuilder.d.ts +56 -33
  127. package/dist/neutral/transaction/TransactionBuilder.d.ts.map +1 -1
  128. package/dist/neutral/transaction/signTransaction.d.ts +24 -12
  129. package/dist/neutral/transaction/signTransaction.d.ts.map +1 -1
  130. package/dist/neutral/utils/isZodError.d.ts +1 -1
  131. package/dist/neutral/utils/isZodError.d.ts.map +1 -1
  132. package/dist/neutral/validation/schema/Mnemonic.d.ts +1 -1
  133. package/dist/neutral/validation/schema/Mnemonic.d.ts.map +1 -1
  134. package/dist/neutral/viewers/AccountBalance.d.ts +70 -42
  135. package/dist/neutral/viewers/AccountBalance.d.ts.map +1 -1
  136. package/dist/neutral/viewers/Block.d.ts +2 -2
  137. package/dist/neutral/viewers/Block.d.ts.map +1 -1
  138. package/dist/neutral/viewers/BlockValidation.d.ts +10 -10
  139. package/dist/neutral/viewers/BlockValidation.d.ts.map +1 -1
  140. package/dist/neutral/viewers/Finalization.d.ts +14 -0
  141. package/dist/neutral/viewers/Finalization.d.ts.map +1 -0
  142. package/dist/neutral/viewers/Mempool.d.ts +5 -5
  143. package/dist/neutral/viewers/Mempool.d.ts.map +1 -1
  144. package/dist/neutral/viewers/TransactionValidation.d.ts +8 -8
  145. package/dist/neutral/viewers/TransactionValidation.d.ts.map +1 -1
  146. package/dist/neutral/viewers/WindowedBlock.d.ts +14 -0
  147. package/dist/neutral/viewers/WindowedBlock.d.ts.map +1 -0
  148. package/dist/neutral/viewers/index.d.ts +2 -0
  149. package/dist/neutral/viewers/index.d.ts.map +1 -1
  150. package/package.json +24 -22
  151. package/src/CreatableProvider/AbstractCreatableProvider.ts +12 -6
  152. package/src/CreatableProvider/CreatableProvider.ts +21 -9
  153. package/src/CreatableProvider/CreatableProviderRegistry.ts +3 -3
  154. package/src/CreatableProvider/ProviderFactory.ts +18 -10
  155. package/src/CreatableProvider/ProviderFactoryLocator.ts +6 -5
  156. package/src/CreatableProvider/ProviderFactoryLocatorInstance.ts +6 -2
  157. package/src/actor/Actor.ts +209 -0
  158. package/src/actor/index.ts +1 -0
  159. package/src/block/hydrate/allHashesPresent.ts +2 -2
  160. package/src/block/hydrate/hydrateBlock.ts +2 -2
  161. package/src/config/Api.ts +1 -2
  162. package/src/config/Bridge.ts +1 -2
  163. package/src/config/Chain.ts +1 -2
  164. package/src/config/Config.ts +1 -1
  165. package/src/config/Evm.ts +1 -2
  166. package/src/config/Log.ts +1 -2
  167. package/src/config/Mempool.ts +1 -2
  168. package/src/config/Producer.ts +1 -2
  169. package/src/config/RewardRedemptionApi.ts +1 -2
  170. package/src/config/Services.ts +1 -2
  171. package/src/config/Telemetry.ts +10 -4
  172. package/src/config/UsageMeta.ts +1 -1
  173. package/src/config/Validation.ts +1 -2
  174. package/src/config/index.ts +1 -0
  175. package/src/config/storage/Storage.ts +1 -2
  176. package/src/config/storage/driver/Mongo.ts +1 -2
  177. package/src/eip-712/Payloads/EIP712Data.ts +1 -1
  178. package/src/eip-712/Payloads/EIP712Signature.ts +1 -1
  179. package/src/eip-712/Types.ts +1 -1
  180. package/src/index.ts +1 -0
  181. package/src/model/ChainQualification.ts +1 -1
  182. package/src/primitives/chain/getWindowedChain.ts +33 -14
  183. package/src/primitives/rewards/networkStakeStepRewardPositionWeight.ts +3 -2
  184. package/src/primitives/stake/allStakersForStep.ts +1 -1
  185. package/src/primitives/stake/weightedStakeForRangeByPosition.ts +10 -2
  186. package/src/provider/signer/XyoSigner.ts +3 -0
  187. package/src/runners/Finalization.ts +15 -0
  188. package/src/runners/index.ts +1 -0
  189. package/src/simple/accountBalance/SimpleAccountBalanceViewer.ts +1 -0
  190. package/src/simple/block/SimpleBlockViewer.ts +23 -37
  191. package/src/simple/blockReward/SimpleBlockRewardViewer.ts +1 -0
  192. package/src/simple/blockValidation/SimpleBlockValidationViewer.ts +16 -13
  193. package/src/simple/chainStake/SimpleStakeViewer.ts +1 -0
  194. package/src/simple/datalake/SimpleDataLakeRunner.ts +1 -0
  195. package/src/simple/datalake/SimpleDataLakeViewer.ts +1 -0
  196. package/src/simple/finalization/SimpleFinalizationRunner.ts +45 -0
  197. package/src/simple/finalization/SimpleFinalizationViewer.ts +101 -0
  198. package/src/simple/finalization/index.ts +2 -0
  199. package/src/simple/index.ts +2 -0
  200. package/src/simple/mempool/SimpleMempoolRunner.ts +11 -1
  201. package/src/simple/mempool/SimpleMempoolViewer.ts +41 -8
  202. package/src/simple/runner/SimpleXyoRunner.ts +3 -1
  203. package/src/simple/signer/SimpleXyoSigner.ts +26 -5
  204. package/src/simple/stakeEvents/SimpleStakeEventsViewer.ts +1 -0
  205. package/src/simple/timesync/SimpleTimeSyncViewer.ts +3 -1
  206. package/src/simple/windowedBlock/SimpleWindowedBlockViewer.ts +208 -0
  207. package/src/simple/windowedBlock/index.ts +1 -0
  208. package/src/summary/model/summary.ts +3 -3
  209. package/src/summary/primitives/transfers/transfersSummary.ts +1 -1
  210. package/src/utils/isZodError.ts +1 -1
  211. package/src/validation/schema/Mnemonic.ts +1 -1
  212. package/src/viewers/AccountBalance.ts +1 -1
  213. package/src/viewers/Block.ts +2 -2
  214. package/src/viewers/BlockValidation.ts +1 -1
  215. package/src/viewers/Finalization.ts +19 -0
  216. package/src/viewers/Mempool.ts +1 -1
  217. package/src/viewers/TransactionValidation.ts +1 -1
  218. package/src/viewers/WindowedBlock.ts +17 -0
  219. package/src/viewers/index.ts +2 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package.json",
3
3
  "name": "@xyo-network/xl1-protocol-sdk",
4
- "version": "1.18.0",
4
+ "version": "1.18.2",
5
5
  "description": "XYO Layer One SDK Protocol",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -40,37 +40,39 @@
40
40
  ],
41
41
  "dependencies": {
42
42
  "@opentelemetry/api": "^1.9.0",
43
- "@xylabs/hex": "~5.0.51",
44
- "@xylabs/sdk-js": "~5.0.51",
45
- "@xylabs/zod": "~5.0.51",
46
- "@xyo-network/account": "~5.2.17",
47
- "@xyo-network/account-model": "~5.2.17",
48
- "@xyo-network/archivist-model": "~5.2.17",
49
- "@xyo-network/boundwitness-builder": "~5.2.17",
50
- "@xyo-network/boundwitness-model": "~5.2.17",
51
- "@xyo-network/payload-builder": "~5.2.17",
52
- "@xyo-network/payload-model": "~5.2.17",
53
- "@xyo-network/wallet": "~5.2.17",
54
- "@xyo-network/wallet-model": "~5.2.17",
55
- "@xyo-network/xl1-protocol": "~1.14.17",
43
+ "@xylabs/hex": "~5.0.61",
44
+ "@xylabs/sdk-js": "~5.0.61",
45
+ "@xylabs/zod": "~5.0.61",
46
+ "@xyo-network/account": "~5.2.19",
47
+ "@xyo-network/account-model": "~5.2.19",
48
+ "@xyo-network/archivist-model": "~5.2.19",
49
+ "@xyo-network/boundwitness-builder": "~5.2.19",
50
+ "@xyo-network/boundwitness-model": "~5.2.19",
51
+ "@xyo-network/payload-builder": "~5.2.19",
52
+ "@xyo-network/payload-model": "~5.2.19",
53
+ "@xyo-network/wallet": "~5.2.19",
54
+ "@xyo-network/wallet-model": "~5.2.19",
55
+ "@xyo-network/xl1-protocol": "~1.18.2",
56
56
  "async-mutex": "~0.5.0",
57
57
  "ethers": "^6.16.0",
58
58
  "lru-cache": "^11.2.4",
59
- "zod": "~4.1.13"
59
+ "zod": "~4.2.1"
60
60
  },
61
61
  "devDependencies": {
62
- "@types/node": "~25.0.2",
63
- "@xylabs/events": "~5.0.51",
62
+ "@types/node": "~25.0.3",
63
+ "@xylabs/events": "~5.0.61",
64
64
  "@xylabs/ts-scripts-yarn3": "~7.2.32",
65
65
  "@xylabs/tsconfig": "~7.2.32",
66
- "@xylabs/vitest-extended": "~5.0.51",
67
- "@xyo-network/account": "~5.2.17",
68
- "@xyo-network/archivist-mongodb": "~5.2.17",
69
- "@xyo-network/boundwitness-validator": "~5.2.17",
66
+ "@xylabs/vitest-extended": "~5.0.61",
67
+ "@xyo-network/account": "~5.2.19",
68
+ "@xyo-network/archivist-memory": "~5.2.19",
69
+ "@xyo-network/archivist-mongodb": "~5.2.19",
70
+ "@xyo-network/boundwitness-validator": "~5.2.19",
70
71
  "axios": "^1.13.2",
71
72
  "eslint": "^9.39.2",
73
+ "tslib": "^2.8.1",
72
74
  "typescript": "~5.9.3",
73
- "vitest": "~4.0.15"
75
+ "vitest": "~4.0.16"
74
76
  },
75
77
  "peerDependencies": {
76
78
  "axios": "^1.13.2"
@@ -3,15 +3,20 @@ import { AbstractCreatable, assertEx } from '@xylabs/sdk-js'
3
3
  import type { Provider, ProviderMoniker } from '../model/index.ts'
4
4
  import type {
5
5
  CreatableProvider,
6
- CreatableProviderEventData, CreatableProviderFactory, CreatableProviderInstance, CreatableProviderParams,
6
+ CreatableProviderEventData, CreatableProviderInstance, CreatableProviderParams,
7
+ ProviderMap,
7
8
  } from './CreatableProvider.ts'
8
9
  import { ProviderFactory } from './ProviderFactory.ts'
9
10
 
10
11
  export abstract class AbstractCreatableProvider<TParams extends CreatableProviderParams = CreatableProviderParams,
11
12
  TEventData extends CreatableProviderEventData = CreatableProviderEventData> extends AbstractCreatable<TParams, TEventData>
12
13
  implements Omit<CreatableProviderInstance, 'moniker'> {
14
+ dependencies: ProviderMap = {}
15
+
13
16
  protected _contextCache: TParams['context'] | undefined
14
17
 
18
+ abstract readonly moniker: ProviderMoniker
19
+
15
20
  protected get config() {
16
21
  return this.context.config!
17
22
  }
@@ -24,11 +29,12 @@ export abstract class AbstractCreatableProvider<TParams extends CreatableProvide
24
29
  return this.context.locator!
25
30
  }
26
31
 
27
- static factory<TModule extends CreatableProviderInstance>(
28
- this: CreatableProvider<TModule>,
29
- params?: Partial<TModule['params']>,
30
- ): CreatableProviderFactory<TModule> {
31
- const factory = ProviderFactory.withParams<TModule>(this, params)
32
+ static factory<TInstance extends CreatableProviderInstance, TDependencies extends ProviderMoniker[] = ProviderMoniker[]>(
33
+ this: CreatableProvider<TInstance>,
34
+ dependencies: TDependencies,
35
+ params?: Partial<TInstance['params']>,
36
+ ) {
37
+ const factory = ProviderFactory.withParams<TInstance, TDependencies>(this, dependencies, params)
32
38
  return factory
33
39
  }
34
40
 
@@ -27,18 +27,25 @@ export interface CreatableProviderParams<TContext extends CreatableProviderConte
27
27
  }
28
28
  export interface CreatableProviderEventData extends EventData {}
29
29
 
30
- export type CreatableProviderInstance<TProvider extends Provider<ProviderMoniker> = Provider<ProviderMoniker>,
30
+ export type CreatableProviderInstance<
31
+ TProvider extends Provider<ProviderMoniker> = Provider<ProviderMoniker>,
32
+ TDependencies extends ProviderMoniker[] = ProviderMoniker[],
31
33
  TParams extends CreatableProviderParams = CreatableProviderParams,
32
34
  TEventData extends CreatableProviderEventData = CreatableProviderEventData>
33
- = CreatableInstance<TParams, TEventData> & TProvider
35
+ = CreatableInstance<TParams, TEventData> & TProvider & {
36
+ dependencies: ProviderMap<TDependencies[number]>
37
+ }
34
38
 
35
39
  export type ProviderFactoryScope = 'global' | 'context' | 'local'
36
40
 
37
- export interface CreatableProviderFactory<T extends CreatableProviderInstance = CreatableProviderInstance>
41
+ export interface CreatableProviderFactory<T extends CreatableProviderInstance = CreatableProviderInstance,
42
+ TDependencies extends ProviderMoniker[] = ProviderMoniker[]>
38
43
  extends Omit<CreatableProvider<T>, 'create' | 'createHandler' | 'paramsHandler'> {
39
44
  creatableProvider: CreatableProvider<T>
40
45
  defaultParams?: Partial<T['params']>
41
46
 
47
+ readonly dependencies: TDependencies
48
+
42
49
  labels?: Labels
43
50
  resolvedMoniker: string
44
51
  scope: ProviderFactoryScope
@@ -58,14 +65,19 @@ export interface CreatableProviderFactory<T extends CreatableProviderInstance =
58
65
 
59
66
  }
60
67
 
61
- export interface LabeledCreatableProvider<T extends CreatableProviderInstance = CreatableProviderInstance> extends CreatableProvider<T>, WithOptionalLabels {
62
- factory(params?: Partial<T['params'] & CreatableProviderParams>): LabeledCreatableProviderFactory<T>
68
+ export interface LabeledCreatableProvider<T extends CreatableProviderInstance = CreatableProviderInstance,
69
+ TDependencies extends ProviderMoniker[] = ProviderMoniker[]> extends CreatableProvider<T>, WithOptionalLabels {
70
+ factory(dependencies: TDependencies, params?: Partial<T['params'] & CreatableProviderParams>): LabeledCreatableProviderFactory<T>
63
71
  }
64
72
 
65
- export interface CreatableProvider<T extends CreatableProviderInstance = CreatableProviderInstance> extends Creatable<T> {
66
- defaultMoniker: ProviderMoniker
67
- monikers: ProviderMoniker[]
68
- factory(params?: Partial<T['params'] & CreatableProviderParams>): CreatableProviderFactory<T>
73
+ export type ProviderMap<T extends ProviderMoniker = ProviderMoniker> = Partial<Record<T, CreatableProviderInstance<Provider<T>>>>
74
+
75
+ export interface CreatableProvider<T extends CreatableProviderInstance = CreatableProviderInstance,
76
+ TDependencies extends ProviderMoniker[] = ProviderMoniker[]> extends Creatable<T> {
77
+ readonly defaultMoniker: ProviderMoniker
78
+ readonly dependencies: TDependencies
79
+ readonly monikers: ProviderMoniker[]
80
+ factory(dependencies: TDependencies, params?: Partial<T['params'] & CreatableProviderParams>): CreatableProviderFactory<T>
69
81
  }
70
82
 
71
83
  /**
@@ -5,9 +5,8 @@ import type { ProviderMoniker } from '../model/index.ts'
5
5
  import type { CreatableProviderFactory, CreatableProviderInstance } from './CreatableProvider.ts'
6
6
  import type { LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'
7
7
 
8
- export interface CreatableProviderRegistry {
9
- [key: string]: (CreatableProviderFactory | LabeledCreatableProviderFactory)[] | undefined
10
- }
8
+ export type CreatableProviderRegistry<TMonikers extends ProviderMoniker[] = ProviderMoniker[]>
9
+ = Record<TMonikers[number], (CreatableProviderFactory | LabeledCreatableProviderFactory)[] | undefined>
11
10
 
12
11
  const buildProviderFactory = <TProvider extends CreatableProviderInstance>(
13
12
  provider: CreatableProviderFactory<TProvider>,
@@ -22,6 +21,7 @@ const buildProviderFactory = <TProvider extends CreatableProviderInstance>(
22
21
  // Merge module & supplied labels
23
22
  labels: { ...(provider as LabeledCreatableProviderFactory).labels, ...labels },
24
23
  creatableProvider: provider.creatableProvider,
24
+ dependencies: provider.dependencies,
25
25
  resolvedMoniker: provider.resolvedMoniker,
26
26
  scope: provider.scope,
27
27
  getInstance: provider.getInstance.bind(provider) as LabeledCreatableProviderFactory<TProvider>['getInstance'],
@@ -1,6 +1,7 @@
1
1
  import type { Labels, WithOptionalLabels } from '@xylabs/sdk-js'
2
2
  import { assertEx } from '@xylabs/sdk-js'
3
3
 
4
+ import type { ProviderMoniker } from '../model/index.ts'
4
5
  import type {
5
6
  CreatableProvider, CreatableProviderFactory, CreatableProviderInstance,
6
7
  ProviderFactoryScope,
@@ -10,13 +11,16 @@ declare global {
10
11
  var xyoServiceSingletons: Record<string, unknown>
11
12
  }
12
13
 
13
- export class ProviderFactory<TProvider extends CreatableProviderInstance> implements CreatableProviderFactory<TProvider> {
14
+ export class ProviderFactory<TProvider extends CreatableProviderInstance,
15
+ TDependencies extends ProviderMoniker[]> implements CreatableProviderFactory<TProvider> {
14
16
  creatableProvider: CreatableProvider<TProvider>
15
17
 
16
18
  defaultMoniker: CreatableProvider<TProvider>['monikers'][number]
17
19
 
18
20
  defaultParams?: Partial<TProvider['params']>
19
21
 
22
+ dependencies: TDependencies
23
+
20
24
  labels?: Labels
21
25
 
22
26
  monikers: CreatableProvider<TProvider>['monikers']
@@ -25,6 +29,7 @@ export class ProviderFactory<TProvider extends CreatableProviderInstance> implem
25
29
 
26
30
  constructor(
27
31
  creatableProvider: CreatableProvider<TProvider>,
32
+ dependencies: TDependencies,
28
33
  params?: Partial<TProvider['params']>,
29
34
  labels: Labels = {},
30
35
  scope: ProviderFactoryScope = 'context',
@@ -32,6 +37,7 @@ export class ProviderFactory<TProvider extends CreatableProviderInstance> implem
32
37
  this.creatableProvider = creatableProvider
33
38
  this.defaultParams = params
34
39
  this.defaultMoniker = creatableProvider.defaultMoniker
40
+ this.dependencies = dependencies
35
41
  this.monikers = creatableProvider.monikers
36
42
  this.scope = scope
37
43
  assertEx(this.monikers.includes(this.defaultMoniker), () => 'defaultMoniker must be in monikers')
@@ -44,12 +50,13 @@ export class ProviderFactory<TProvider extends CreatableProviderInstance> implem
44
50
  return labelString.length === 0 ? `${this.defaultMoniker}` : `${this.defaultMoniker}|${labelString}`
45
51
  }
46
52
 
47
- static withParams<T extends CreatableProviderInstance>(
48
- creatableProvider: CreatableProvider<T>,
49
- params?: Partial<T['params']>,
53
+ static withParams<TInstance extends CreatableProviderInstance, TDependencies extends ProviderMoniker[]>(
54
+ creatableProvider: CreatableProvider<TInstance>,
55
+ dependencies: TDependencies,
56
+ params?: Partial<TInstance['params']>,
50
57
  labels: Labels = {},
51
58
  ) {
52
- return new ProviderFactory<T>(creatableProvider, params, labels)
59
+ return new ProviderFactory<TInstance, TDependencies>(creatableProvider, dependencies, params, labels)
53
60
  }
54
61
 
55
62
  /** @deprecated use getInstance instead */
@@ -57,12 +64,13 @@ export class ProviderFactory<TProvider extends CreatableProviderInstance> implem
57
64
  return await this.getInstance(params as TProvider['params'], start)
58
65
  }
59
66
 
60
- factory<T extends CreatableProviderInstance>(
61
- this: CreatableProviderFactory<T>,
62
- params?: Partial<T['params']>,
67
+ factory<TInstance extends CreatableProviderInstance, TDependencies extends ProviderMoniker[]>(
68
+ this: CreatableProviderFactory<TInstance, TDependencies>,
69
+ dependencies: TDependencies,
70
+ params?: Partial<TInstance['params']>,
63
71
  labels: Labels = {},
64
- ): CreatableProviderFactory<T> {
65
- return new ProviderFactory<T>(this.creatableProvider, params, labels)
72
+ ) {
73
+ return new ProviderFactory<TInstance, TDependencies>(this.creatableProvider, dependencies, params, labels)
66
74
  }
67
75
 
68
76
  async getInstance(this: CreatableProviderFactory<TProvider>, params: TProvider['params'], start = true): Promise<TProvider> {
@@ -12,15 +12,16 @@ import type { ProviderFactoryLocatorInstance } from './ProviderFactoryLocatorIns
12
12
  /**
13
13
  * A class which encapsulates the Service Locator Pattern for Provider Factories
14
14
  */
15
- export class ProviderFactoryLocator implements ProviderFactoryLocatorInstance {
16
- protected readonly _context: CreatableProviderContext
17
- protected readonly _registry: CreatableProviderRegistry
15
+ export class ProviderFactoryLocator<TContext extends CreatableProviderContext = CreatableProviderContext,
16
+ TMonikers extends ProviderMoniker[] = ProviderMoniker[]> implements ProviderFactoryLocatorInstance<TContext> {
17
+ protected readonly _context: TContext
18
+ protected readonly _registry: CreatableProviderRegistry<TMonikers>
18
19
 
19
20
  private _frozen = false
20
21
 
21
- constructor(context: Omit<CreatableProviderContext, 'locator'>, registry: CreatableProviderRegistry = {}) {
22
+ constructor(context: Omit<TContext, 'locator'>, registry: CreatableProviderRegistry = {}) {
22
23
  this._registry = registry
23
- this._context = { ...context, locator: this }
24
+ this._context = { ...context, locator: this } as unknown as TContext
24
25
  }
25
26
 
26
27
  get context() {
@@ -1,11 +1,15 @@
1
1
  import type { Labels } from '@xylabs/sdk-js'
2
2
 
3
3
  import type { Provider, ProviderMoniker } from '../model/index.ts'
4
- import type { CreatableProviderFactory, CreatableProviderInstance } from './CreatableProvider.ts'
4
+ import type {
5
+ CreatableProviderContext, CreatableProviderFactory, CreatableProviderInstance,
6
+ } from './CreatableProvider.ts'
5
7
  import type { CreatableProviderRegistry } from './CreatableProviderRegistry.ts'
6
8
  import type { LabeledCreatableProviderFactory } from './LabeledCreatableProviderFactory.ts'
7
9
 
8
- export interface ProviderFactoryLocatorInstance {
10
+ export interface ProviderFactoryLocatorInstance<T extends CreatableProviderContext = CreatableProviderContext> {
11
+
12
+ context: T
9
13
 
10
14
  /**
11
15
  * The current registry for the module factory
@@ -0,0 +1,209 @@
1
+ import type {
2
+ CreatableInstance, CreatableParams, EmptyObject,
3
+ Promisable,
4
+ } from '@xylabs/sdk-js'
5
+ import {
6
+ AbstractCreatable,
7
+ assertEx,
8
+ Base, creatable, delay, IdLogger,
9
+ } from '@xylabs/sdk-js'
10
+ import { AccountInstance } from '@xyo-network/account-model'
11
+ import { Semaphore } from 'async-mutex'
12
+
13
+ import { Config, getDefaultConfig } from '../config/index.ts'
14
+ import { ProviderFactoryLocator, ProviderFactoryLocatorInstance } from '../CreatableProvider/index.ts'
15
+ import { BaseContext } from '../model/index.ts'
16
+
17
+ export type ActorContext = BaseContext & {
18
+ config: Config
19
+ locator?: ProviderFactoryLocatorInstance
20
+ singletons: Record<string, unknown>
21
+ }
22
+
23
+ export type ActorParams<T extends EmptyObject | void = void> = CreatableParams & {
24
+ account: AccountInstance
25
+ context?: ActorContext
26
+ displayName?: string
27
+ id: string
28
+ } & (T extends void ? EmptyObject : T)
29
+
30
+ export type ActorInstance<T extends ActorParams = ActorParams> = CreatableInstance<T>
31
+
32
+ @creatable()
33
+ export class Actor<TParams extends ActorParams = ActorParams> extends AbstractCreatable<TParams> {
34
+ protected readonly _intervals: Map<string, ReturnType<typeof setInterval>> = new Map()
35
+ protected readonly _semaphores: Map<string, Semaphore> = new Map()
36
+ protected readonly _timeouts: Map<string, ReturnType<typeof setTimeout>> = new Map()
37
+ private _active = false
38
+
39
+ get displayName() {
40
+ return this.params.displayName ?? this.params.name ?? 'UnnamedActor'
41
+ }
42
+
43
+ get id() {
44
+ return this.params.id
45
+ }
46
+
47
+ protected get account() {
48
+ return this.params.account!
49
+ }
50
+
51
+ protected get config() {
52
+ return this.context.config
53
+ }
54
+
55
+ protected get context() {
56
+ return this.params.context!
57
+ }
58
+
59
+ protected get locator() {
60
+ return this.context.locator
61
+ }
62
+
63
+ protected get logPrefix() {
64
+ return `[${this.displayName} (${this.id})] `
65
+ }
66
+
67
+ static override async paramsHandler<T extends ActorInstance>(params?: Partial<T['params']>) {
68
+ const baseParams = await super.paramsHandler(params)
69
+ const id = params?.id ?? baseParams.name ?? 'UnnamedActor'
70
+ const displayName = params?.displayName ?? baseParams.name
71
+ const account = assertEx(params?.account, () => `Account is required for actor ${id}.`)
72
+ const context = await this.initContext({
73
+ ...params, account, id, displayName,
74
+ })
75
+ const logger = context?.logger ?? new IdLogger(Base.defaultLogger ?? console, () => `[${displayName} (${id})] `)
76
+ return {
77
+ ...baseParams, account, context, displayName, id, logger,
78
+ } satisfies ActorParams
79
+ }
80
+
81
+ protected static initContext<T extends ActorInstance>(
82
+ params: T['params'],
83
+ ): Promisable<T['params']['context']> {
84
+ const logger = params?.context?.logger
85
+ const config: Config = params?.context?.config ?? getDefaultConfig()
86
+ const singletons = params?.context?.singletons ?? {}
87
+
88
+ const context: ActorContext = {
89
+ ...params?.context,
90
+ config,
91
+ logger,
92
+ singletons,
93
+ }
94
+
95
+ const locator = params?.context?.locator ?? new ProviderFactoryLocator(context)
96
+ return locator.context
97
+ }
98
+
99
+ /**
100
+ * The timer runs until the actor is deactivated (or you manually stop it).
101
+ */
102
+ registerTimer(timerName: string, callback: () => Promise<void>, dueTimeMs: number, periodMs: number) {
103
+ if (!this._active) {
104
+ this.logger?.warn(
105
+ `Cannot register timer '${timerName}' because actor is not active.`,
106
+ )
107
+ return
108
+ }
109
+
110
+ let running = false
111
+
112
+ this._semaphores.set(timerName, new Semaphore(1))
113
+
114
+ const timeoutId = setTimeout(() => {
115
+ const intervalId = setInterval(() => {
116
+ const semaphore = this._semaphores.get(timerName)
117
+ if (!this._active || !this._intervals.has(timerName) || !semaphore || running) return
118
+ if (semaphore.isLocked()) {
119
+ this.logger?.warn(
120
+ `Skipping timer '${this.name}:${timerName}' execution because previous execution is still running.`,
121
+ )
122
+ return
123
+ }
124
+ semaphore.acquire().then(([, release]) => {
125
+ const startTime = Date.now()
126
+ running = true
127
+ callback()
128
+ .then(() => {
129
+ const duration = Date.now() - startTime
130
+ if (duration > periodMs) {
131
+ this.logger?.warn(
132
+ `Timer '${this.name}:${timerName}' execution took longer (${duration}ms) than the period (${periodMs}ms).`,
133
+ )
134
+ } else if (duration > 5000) {
135
+ this.logger?.warn(
136
+ `Timer '${this.name}:${timerName}' execution took longer (${duration}ms) than 5000ms.`,
137
+ )
138
+ }
139
+ })
140
+ .catch((error) => {
141
+ this.logger?.error(`Error in timer '${this.name}:${timerName}': ${error}`)
142
+ this.logger?.error(error.stack)
143
+ })
144
+ .finally(() => {
145
+ release()
146
+ running = false
147
+ })
148
+ }).catch((error) => {
149
+ this.logger?.error(`Error acquiring semaphore for timer '${this.name}:${timerName}': ${error}`)
150
+ })
151
+ }, periodMs)
152
+
153
+ // store interval so we can clear it on stop()
154
+ this._intervals.set(timerName, intervalId)
155
+ }, dueTimeMs)
156
+
157
+ // store timeout so we can clear it on stop() if interval hasn't started yet
158
+ this._timeouts.set(timerName, timeoutId)
159
+
160
+ this.logger?.log(
161
+ `Timer '${this.name}:${timerName}' registered: first call after ${dueTimeMs}ms, recurring every ${periodMs}ms.`,
162
+ )
163
+ }
164
+
165
+ /**
166
+ * Called by the Orchestrator when the actor is activated.
167
+ */
168
+ override async startHandler() {
169
+ await super.startHandler()
170
+ this._active = true
171
+ this.logger?.log('Started.')
172
+ }
173
+
174
+ /**
175
+ * Called by the Orchestrator when the actor is deactivated.
176
+ * Stop all running timers.
177
+ */
178
+ override async stopHandler() {
179
+ await super.stopHandler()
180
+ this._active = false
181
+ this.logger?.log('Stopping all timers...')
182
+
183
+ // wait for all semaphores to be free and acquire them to prevent new tasks from starting
184
+ await Promise.all(
185
+ [...this._semaphores.values()].map(async (semaphore) => {
186
+ // Wait for any running tasks to complete
187
+ while (semaphore.isLocked()) {
188
+ this.logger?.log('Waiting for running timer task to complete...')
189
+ await delay(500)
190
+ }
191
+ await semaphore.acquire()
192
+ }),
193
+ )
194
+
195
+ this._semaphores.clear()
196
+
197
+ for (const [, timeoutRef] of this._timeouts.entries()) {
198
+ clearTimeout(timeoutRef)
199
+ }
200
+ this._timeouts.clear()
201
+
202
+ for (const [, intervalRef] of this._intervals.entries()) {
203
+ clearInterval(intervalRef)
204
+ }
205
+ this._intervals.clear()
206
+
207
+ this.logger?.log('Stopped.')
208
+ }
209
+ }
@@ -0,0 +1 @@
1
+ export * from './Actor.ts'
@@ -1,7 +1,7 @@
1
1
  import type { Hash } from '@xylabs/sdk-js'
2
- import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'
2
+ import type { Payload, WithHashMeta } from '@xyo-network/payload-model'
3
3
 
4
- export function allHashesPresent(hashes: Hash[], payloads: WithStorageMeta<Payload>[]): boolean {
4
+ export function allHashesPresent(hashes: Hash[], payloads: WithHashMeta<Payload>[]): boolean {
5
5
  const payloadHashes = new Set(payloads.map(p => p._hash))
6
6
  return hashes.every(hash => payloadHashes.has(hash))
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import type { Hash } from '@xylabs/sdk-js'
2
2
  import { assertEx } from '@xylabs/sdk-js'
3
- import type { HydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol'
3
+ import type { HydratedBlockWithStorageMeta } from '@xyo-network/xl1-protocol'
4
4
  import { asBlockBoundWitnessWithStorageMeta, isTransactionBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'
5
5
 
6
6
  import type { ChainStoreRead } from '../../model/index.ts'
@@ -11,7 +11,7 @@ export const hydrateBlock = async (
11
11
  hash: Hash,
12
12
  maxDepth: number = 1,
13
13
  minDepth = maxDepth,
14
- ): Promise<HydratedBlockWithHashMeta> => {
14
+ ): Promise<HydratedBlockWithStorageMeta> => {
15
15
  assertEx(maxDepth >= 0, () => 'maxDepth must be greater than or equal to 0')
16
16
  assertEx(minDepth >= 0, () => 'minDepth must be greater than or equal to 0')
17
17
  assertEx(maxDepth >= minDepth, () => 'maxDepth must be greater than or equal to minDepth')
package/src/config/Api.ts CHANGED
@@ -1,5 +1,4 @@
1
- import { globalRegistry } from 'zod'
2
- import * as z from 'zod'
1
+ import { globalRegistry, z } from 'zod'
3
2
 
4
3
  import { MnemonicStringZod } from '../validation/index.ts'
5
4
 
@@ -3,8 +3,7 @@ import {
3
3
  } from '@xylabs/hex'
4
4
  import type { ChainId } from '@xyo-network/xl1-protocol'
5
5
  import { AttoXL1ConvertFactor, XL1 } from '@xyo-network/xl1-protocol'
6
- import { globalRegistry } from 'zod'
7
- import * as z from 'zod'
6
+ import { globalRegistry, z } from 'zod'
8
7
 
9
8
  import { MnemonicStringZod } from '../validation/index.ts'
10
9
 
@@ -1,6 +1,5 @@
1
1
  import { AddressZod, HexZod } from '@xylabs/sdk-js'
2
- import { globalRegistry } from 'zod'
3
- import * as z from 'zod'
2
+ import { globalRegistry, z } from 'zod'
4
3
 
5
4
  export const ChainConfigZod = z.object({
6
5
  id: HexZod.optional()
@@ -1,4 +1,4 @@
1
- import * as z from 'zod'
1
+ import { z } from 'zod'
2
2
 
3
3
  import { ApiConfigZod } from './Api.ts'
4
4
  import { BridgeConfigZod } from './Bridge.ts'
package/src/config/Evm.ts CHANGED
@@ -1,5 +1,4 @@
1
- import { globalRegistry } from 'zod'
2
- import * as z from 'zod'
1
+ import { globalRegistry, z } from 'zod'
3
2
 
4
3
  export const EvmInfuraConfigZod = z.object({
5
4
  projectId: z.string().optional().register(globalRegistry, {
package/src/config/Log.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import type { LogLevelKey } from '@xylabs/sdk-js'
2
2
  import { LogLevel } from '@xylabs/sdk-js'
3
- import { globalRegistry } from 'zod'
4
- import * as z from 'zod'
3
+ import { globalRegistry, z } from 'zod'
5
4
  const LogLevels = Object.keys(LogLevel) as [LogLevelKey, ...LogLevelKey[]]
6
5
 
7
6
  export const LogConfigZod = z.object({
@@ -1,5 +1,4 @@
1
- import { globalRegistry } from 'zod'
2
- import * as z from 'zod'
1
+ import { globalRegistry, z } from 'zod'
3
2
 
4
3
  import { MnemonicStringZod } from '../validation/index.ts'
5
4
 
@@ -1,6 +1,5 @@
1
1
  import { AddressZod, asAddress } from '@xylabs/sdk-js'
2
- import { globalRegistry } from 'zod'
3
- import * as z from 'zod'
2
+ import { globalRegistry, z } from 'zod'
4
3
 
5
4
  import { MnemonicStringZod } from '../validation/index.ts'
6
5
 
@@ -1,5 +1,4 @@
1
- import { globalRegistry } from 'zod'
2
- import * as z from 'zod'
1
+ import { globalRegistry, z } from 'zod'
3
2
 
4
3
  import { MnemonicStringZod } from '../validation/index.ts'
5
4
 
@@ -1,5 +1,4 @@
1
- import { globalRegistry } from 'zod'
2
- import * as z from 'zod'
1
+ import { globalRegistry, z } from 'zod'
3
2
 
4
3
  export const ServicesConfigZod = z.object({
5
4
  accountBalanceViewerEndpoint: z.string().default('http://localhost:8080/rpc').register(globalRegistry, {