@xyo-network/xl1-protocol-sdk 3.0.14 → 3.0.16

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 (29) hide show
  1. package/dist/neutral/boundwitness/buildUnsignedBoundWitness.d.ts +10 -0
  2. package/dist/neutral/boundwitness/buildUnsignedBoundWitness.d.ts.map +1 -0
  3. package/dist/neutral/boundwitness/index.d.ts +2 -0
  4. package/dist/neutral/boundwitness/index.d.ts.map +1 -0
  5. package/dist/neutral/index.d.ts +1 -0
  6. package/dist/neutral/index.d.ts.map +1 -1
  7. package/dist/neutral/index.mjs +192 -82
  8. package/dist/neutral/index.mjs.map +4 -4
  9. package/dist/neutral/model/CreatableProviderContext.zod.d.ts +9 -10
  10. package/dist/neutral/model/CreatableProviderContext.zod.d.ts.map +1 -1
  11. package/dist/neutral/simple/index.d.ts +1 -0
  12. package/dist/neutral/simple/index.d.ts.map +1 -1
  13. package/dist/neutral/simple/signer/SimpleXyoSigner.d.ts +5 -6
  14. package/dist/neutral/simple/signer/SimpleXyoSigner.d.ts.map +1 -1
  15. package/dist/neutral/simple/systemStatus/ConsoleSystemStatusPublisher.d.ts +21 -0
  16. package/dist/neutral/simple/systemStatus/ConsoleSystemStatusPublisher.d.ts.map +1 -0
  17. package/dist/neutral/simple/systemStatus/SimpleSystemStatusViewer.d.ts +27 -0
  18. package/dist/neutral/simple/systemStatus/SimpleSystemStatusViewer.d.ts.map +1 -0
  19. package/dist/neutral/simple/systemStatus/index.d.ts +3 -0
  20. package/dist/neutral/simple/systemStatus/index.d.ts.map +1 -0
  21. package/dist/neutral/status/SimpleSystemStatusRunner.d.ts +35 -0
  22. package/dist/neutral/status/SimpleSystemStatusRunner.d.ts.map +1 -0
  23. package/dist/neutral/status/index.d.ts +1 -1
  24. package/dist/neutral/status/index.d.ts.map +1 -1
  25. package/dist/neutral/transaction/signTransaction.d.ts +11 -36
  26. package/dist/neutral/transaction/signTransaction.d.ts.map +1 -1
  27. package/package.json +7 -7
  28. package/dist/neutral/status/RuntimeStatusMonitor.d.ts +0 -34
  29. package/dist/neutral/status/RuntimeStatusMonitor.d.ts.map +0 -1
@@ -0,0 +1,10 @@
1
+ import type { Payload, UnsignedBoundWitness } from '@xyo-network/sdk-js';
2
+ /**
3
+ * Builds an unsigned hydrated bound witness over the given payloads — the bound-witness analog of
4
+ * {@link buildUnsignedTransaction}. The returned `[boundWitness, payloads]` tuple is ready to pass
5
+ * to `XyoSigner.sign`.
6
+ * @param payloads The payloads the bound witness should witness
7
+ * @returns The unsigned bound witness paired with its (hydrated) payloads
8
+ */
9
+ export declare function buildUnsignedBoundWitness(payloads: Payload[]): Promise<[UnsignedBoundWitness, Payload[]]>;
10
+ //# sourceMappingURL=buildUnsignedBoundWitness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildUnsignedBoundWitness.d.ts","sourceRoot":"","sources":["../../../src/boundwitness/buildUnsignedBoundWitness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAGxE;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,oBAAoB,EAAE,OAAO,EAAE,CAAC,CAAC,CAG/G"}
@@ -0,0 +1,2 @@
1
+ export * from './buildUnsignedBoundWitness.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/boundwitness/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA"}
@@ -1,6 +1,7 @@
1
1
  export * from './amount/index.ts';
2
2
  export * from './Archivists/index.ts';
3
3
  export * from './block/index.ts';
4
+ export * from './boundwitness/index.ts';
4
5
  export * from './capabilities/index.ts';
5
6
  export * from './ChainContextHelpers.ts';
6
7
  export * from './config/index.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gCAAgC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gCAAgC,CAAA"}
@@ -985,6 +985,13 @@ async function validateTransactionsOpcodes(txs) {
985
985
  return txElevatedPayloads;
986
986
  }
987
987
 
988
+ // src/boundwitness/buildUnsignedBoundWitness.ts
989
+ import { BoundWitnessBuilder } from "@xyo-network/sdk-js";
990
+ async function buildUnsignedBoundWitness(payloads) {
991
+ const [boundWitness, builtPayloads] = await new BoundWitnessBuilder().meta({ $signatures: [] }).payloads(payloads).build(false);
992
+ return [boundWitness, builtPayloads];
993
+ }
994
+
988
995
  // src/capabilities/Backing.ts
989
996
  function backingsSatisfied(required, available) {
990
997
  for (const need of required) {
@@ -3094,7 +3101,7 @@ import {
3094
3101
  } from "@xylabs/sdk-js";
3095
3102
  import { CachingContextZod } from "@xyo-network/xl1-protocol-lib";
3096
3103
  import { z as z19 } from "zod/mini";
3097
- var RuntimeStatusMonitorZod = z19.custom((val) => val !== null && val !== void 0 && typeof val === "object");
3104
+ var SystemStatusRunnerZod = z19.custom((val) => val !== null && val !== void 0 && typeof val === "object");
3098
3105
  var ProviderFactoryLocatorZod = z19.lazy(() => z19.custom((val) => val !== null && val !== void 0 && typeof val === "object" && "context" in val && "registry" in val));
3099
3106
  var BaseConfigContextZod = z19.extend(CachingContextZod, {
3100
3107
  config: z19.looseObject(BaseConfigZod.shape),
@@ -3103,7 +3110,7 @@ var BaseConfigContextZod = z19.extend(CachingContextZod, {
3103
3110
  var CreatableProviderContextZod = z19.lazy(() => z19.extend(BaseConfigContextZod, {
3104
3111
  _id: z19.optional(z19.string()),
3105
3112
  locator: ProviderFactoryLocatorZod,
3106
- statusReporter: z19.optional(RuntimeStatusMonitorZod)
3113
+ statusReporter: z19.optional(SystemStatusRunnerZod)
3107
3114
  }));
3108
3115
  var isBaseConfigContext = zodIsFactory4(BaseConfigContextZod);
3109
3116
  var asBaseConfigContext = zodAsFactory5(BaseConfigContextZod, "asBaseConfigContext");
@@ -3156,7 +3163,7 @@ import { PayloadBuilder as PayloadBuilder12 } from "@xyo-network/sdk-js";
3156
3163
  import { assertEx as assertEx22, toHex } from "@xylabs/sdk-js";
3157
3164
  import {
3158
3165
  asAnyPayload as asAnyPayload2,
3159
- BoundWitnessBuilder,
3166
+ BoundWitnessBuilder as BoundWitnessBuilder2,
3160
3167
  PayloadBuilder as PayloadBuilder7
3161
3168
  } from "@xyo-network/sdk-js";
3162
3169
  import { defaultTransactionFees } from "@xyo-network/xl1-protocol-lib";
@@ -3184,7 +3191,7 @@ async function buildTransaction(chain, onChainPayloads, offChainPayloads, signer
3184
3191
  if (script.length > 0) {
3185
3192
  fields.script = script;
3186
3193
  }
3187
- const boundWitnessBuilder = new BoundWitnessBuilder();
3194
+ const boundWitnessBuilder = new BoundWitnessBuilder2();
3188
3195
  const builder = boundWitnessBuilder.fields(fields).meta({ $signatures: [] }).payloads([...onChainPayloads, ...offChainPayloads]).signers(Array.isArray(signer) ? signer : [signer]);
3189
3196
  const [tx, txPayloads] = await builder.build();
3190
3197
  return [await PayloadBuilder7.addHashMeta(tx), await PayloadBuilder7.addHashMeta(txPayloads.map((p) => asAnyPayload2(p, true)))];
@@ -3192,7 +3199,7 @@ async function buildTransaction(chain, onChainPayloads, offChainPayloads, signer
3192
3199
 
3193
3200
  // src/transaction/buildUnsignedTransaction.ts
3194
3201
  import { toHex as toHex2 } from "@xylabs/sdk-js";
3195
- import { BoundWitnessBuilder as BoundWitnessBuilder2, PayloadBuilder as PayloadBuilder8 } from "@xyo-network/sdk-js";
3202
+ import { BoundWitnessBuilder as BoundWitnessBuilder3, PayloadBuilder as PayloadBuilder8 } from "@xyo-network/sdk-js";
3196
3203
  import { defaultTransactionFees as defaultTransactionFees2 } from "@xyo-network/xl1-protocol-lib";
3197
3204
  async function buildUnsignedTransaction(chain, onChainPayloads, offChainPayloads, nbf, exp, from, fees = defaultTransactionFees2) {
3198
3205
  const txBoundWitnessFields = {
@@ -3215,7 +3222,7 @@ async function buildUnsignedTransaction(chain, onChainPayloads, offChainPayloads
3215
3222
  if (script.length > 0) {
3216
3223
  fields.script = script;
3217
3224
  }
3218
- const boundWitnessBuilder = new BoundWitnessBuilder2();
3225
+ const boundWitnessBuilder = new BoundWitnessBuilder3();
3219
3226
  const builder = boundWitnessBuilder.fields(fields).meta({ $signatures: [] }).payloads([...onChainPayloads, ...offChainPayloads]);
3220
3227
  const [tx, txPayloads] = await builder.build(false);
3221
3228
  return [tx, txPayloads];
@@ -3393,19 +3400,20 @@ import {
3393
3400
  toArrayBuffer
3394
3401
  } from "@xylabs/sdk-js";
3395
3402
  import { PayloadBuilder as PayloadBuilder10 } from "@xyo-network/sdk-js";
3396
- async function signTransaction(tx, account) {
3397
- assertEx24(tx.from === account.address, () => "Signer address does not match transaction from address");
3398
- const unsignedTx = structuredClone(tx);
3399
- unsignedTx.addresses = [account.address];
3400
- unsignedTx.previous_hashes = [account.previousHash ?? null];
3401
- const hash = await PayloadBuilder10.dataHash(unsignedTx);
3402
- const hashBytes = toArrayBuffer(hash);
3403
- const [signature] = await account.sign(hashBytes);
3404
- const result = {
3405
- ...unsignedTx,
3403
+ async function signBoundWitness(bw, account) {
3404
+ const unsigned = structuredClone(bw);
3405
+ unsigned.addresses = [account.address];
3406
+ unsigned.previous_hashes = [account.previousHash ?? null];
3407
+ const hash = await PayloadBuilder10.dataHash(unsigned);
3408
+ const [signature] = await account.sign(toArrayBuffer(hash));
3409
+ return {
3410
+ ...unsigned,
3406
3411
  $signatures: [hexFromArrayBuffer(signature)]
3407
3412
  };
3408
- return result;
3413
+ }
3414
+ async function signTransaction(tx, account) {
3415
+ assertEx24(tx.from === account.address, () => "Signer address does not match transaction from address");
3416
+ return await signBoundWitness(tx, account);
3409
3417
  }
3410
3418
 
3411
3419
  // src/transaction/TransactionBuilder.ts
@@ -6370,11 +6378,9 @@ SimpleXyoRunner = __decorateClass([
6370
6378
  ], SimpleXyoRunner);
6371
6379
 
6372
6380
  // src/simple/signer/SimpleXyoSigner.ts
6381
+ import { assertEx as assertEx47 } from "@xylabs/sdk-js";
6373
6382
  import { Account, PayloadBuilder as PayloadBuilder23 } from "@xyo-network/sdk-js";
6374
- import {
6375
- SignedHydratedTransactionWithHashMetaZod,
6376
- XyoSignerMoniker as XyoSignerMoniker2
6377
- } from "@xyo-network/xl1-protocol-lib";
6383
+ import { asSignedHydratedTransactionWithHashMeta, XyoSignerMoniker as XyoSignerMoniker2 } from "@xyo-network/xl1-protocol-lib";
6378
6384
  var SimpleXyoSigner = class _SimpleXyoSigner extends AbstractCreatableProvider {
6379
6385
  static connectionTypes = ["wallet"];
6380
6386
  static defaultMoniker = XyoSignerMoniker2;
@@ -6388,7 +6394,7 @@ var SimpleXyoSigner = class _SimpleXyoSigner extends AbstractCreatableProvider {
6388
6394
  account = params.account;
6389
6395
  } else {
6390
6396
  const localLogger = params?.logger ?? params?.context?.logger;
6391
- localLogger?.warn(`No account provided to SimpleXyoSigner, generating a random account.
6397
+ localLogger?.warn(`No account provided to SimpleXyoSigner, generating a random account.
6392
6398
  This account will not be persisted and any transactions signed with it may be lost.
6393
6399
  `);
6394
6400
  account = await Account.random();
@@ -6398,24 +6404,16 @@ var SimpleXyoSigner = class _SimpleXyoSigner extends AbstractCreatableProvider {
6398
6404
  address() {
6399
6405
  return this.params.account.address;
6400
6406
  }
6401
- /** @deprecated - use signTransaction instead */
6402
- async createSignedTransaction(chain, elevatedPayloads, additionalPayloads, nbf, exp, fees, from) {
6403
- const fromAddress = from ?? await this.address();
6404
- const transaction = await buildTransaction(
6405
- chain,
6406
- elevatedPayloads,
6407
- additionalPayloads,
6408
- this.params.account,
6409
- nbf,
6410
- exp,
6411
- fromAddress,
6412
- fees
6413
- );
6414
- return transaction[0];
6407
+ async sign(bw) {
6408
+ const signed = await signBoundWitness(bw[0], this.params.account);
6409
+ return [
6410
+ await PayloadBuilder23.addHashMeta(signed),
6411
+ await PayloadBuilder23.addHashMeta(bw[1])
6412
+ ];
6415
6413
  }
6416
6414
  async signTransaction(tx) {
6417
- const txBW = await signTransaction(tx[0], this.params.account);
6418
- return SignedHydratedTransactionWithHashMetaZod.parse([await PayloadBuilder23.addStorageMeta(txBW), await PayloadBuilder23.addStorageMeta(tx[1])]);
6415
+ assertEx47(tx[0].from === this.params.account.address, () => "Signer address does not match transaction from address");
6416
+ return asSignedHydratedTransactionWithHashMeta(await this.sign(tx), true);
6419
6417
  }
6420
6418
  };
6421
6419
 
@@ -6500,7 +6498,7 @@ SimpleStakeEventsViewer = __decorateClass([
6500
6498
  ], SimpleStakeEventsViewer);
6501
6499
 
6502
6500
  // src/simple/StakeTotalsViewer/SimpleStakeTotalsViewer.ts
6503
- import { assertEx as assertEx47 } from "@xylabs/sdk-js";
6501
+ import { assertEx as assertEx48 } from "@xylabs/sdk-js";
6504
6502
  import { asXyoAddress as asXyoAddress3 } from "@xyo-network/sdk-js";
6505
6503
  import {
6506
6504
  StakeTotalsViewerMoniker,
@@ -6544,7 +6542,7 @@ var SimpleStakeTotalsViewer = class extends AbstractCreatableProvider {
6544
6542
  }
6545
6543
  async createHandler() {
6546
6544
  await super.createHandler();
6547
- this._stakeViewer = assertEx47(
6545
+ this._stakeViewer = assertEx48(
6548
6546
  await this.locateAndCreate(StakeViewerMoniker),
6549
6547
  () => "Failed to create StakeViewer"
6550
6548
  );
@@ -6600,14 +6598,14 @@ SimpleStakeTotalsViewer = __decorateClass([
6600
6598
  ], SimpleStakeTotalsViewer);
6601
6599
 
6602
6600
  // src/simple/StakeViewer/SimpleStakeViewer.ts
6603
- import { assertEx as assertEx48, toAddress } from "@xylabs/sdk-js";
6601
+ import { assertEx as assertEx49, toAddress } from "@xylabs/sdk-js";
6604
6602
  import { asXyoAddress as asXyoAddress4 } from "@xyo-network/sdk-js";
6605
6603
  import { StakeEventsViewerMoniker as StakeEventsViewerMoniker2, StakeViewerMoniker as StakeViewerMoniker2 } from "@xyo-network/xl1-protocol-lib";
6606
6604
  var SimpleStakeViewer = class extends AbstractCreatableProvider {
6607
6605
  moniker = SimpleStakeViewer.defaultMoniker;
6608
6606
  _chainStakeEventsViewer;
6609
6607
  get stakeEvents() {
6610
- return assertEx48(this._chainStakeEventsViewer, () => "Stake events viewer not set");
6608
+ return assertEx49(this._chainStakeEventsViewer, () => "Stake events viewer not set");
6611
6609
  }
6612
6610
  get positions() {
6613
6611
  return this.params.positions;
@@ -6647,7 +6645,7 @@ var SimpleStakeViewer = class extends AbstractCreatableProvider {
6647
6645
  }
6648
6646
  async createHandler() {
6649
6647
  await super.createHandler();
6650
- this._chainStakeEventsViewer = assertEx48(
6648
+ this._chainStakeEventsViewer = assertEx49(
6651
6649
  await this.locateAndCreate(StakeEventsViewerMoniker2),
6652
6650
  () => "Failed to create StakeEventsViewer"
6653
6651
  );
@@ -6682,7 +6680,7 @@ var SimpleStakeViewer = class extends AbstractCreatableProvider {
6682
6680
  return toAddress(toAddress(1n));
6683
6681
  }
6684
6682
  stakeById(id) {
6685
- return assertEx48(this.positions[id], () => new Error(`Stake with id ${id} not found`));
6683
+ return assertEx49(this.positions[id], () => new Error(`Stake with id ${id} not found`));
6686
6684
  }
6687
6685
  stakeByStaker(staker, slot) {
6688
6686
  return this.positions.filter((s) => asXyoAddress4(s.staker) === asXyoAddress4(staker))[slot];
@@ -6783,10 +6781,71 @@ RestSyncViewer = __decorateClass([
6783
6781
  creatableProvider()
6784
6782
  ], RestSyncViewer);
6785
6783
 
6784
+ // src/simple/systemStatus/ConsoleSystemStatusPublisher.ts
6785
+ import { assertEx as assertEx50 } from "@xylabs/sdk-js";
6786
+ import { SystemStatusPublisherMoniker } from "@xyo-network/xl1-protocol-lib";
6787
+ var ConsoleSystemStatusPublisher = class extends AbstractCreatableProvider {
6788
+ moniker = ConsoleSystemStatusPublisher.defaultMoniker;
6789
+ async startHandler() {
6790
+ await super.startHandler();
6791
+ const runner = assertEx50(
6792
+ this.context.statusReporter,
6793
+ () => "ConsoleSystemStatusPublisher requires a SystemStatusRunner (context.statusReporter)"
6794
+ );
6795
+ runner.onGlobalTransition({ to: "started" }, () => {
6796
+ this.logger?.info("All services started.");
6797
+ });
6798
+ runner.onGlobalTransition({ to: "error" }, () => {
6799
+ this.logger?.error("A service entered an error state.");
6800
+ });
6801
+ }
6802
+ };
6803
+ __publicField(ConsoleSystemStatusPublisher, "connectionTypes", ["memory"]);
6804
+ __publicField(ConsoleSystemStatusPublisher, "defaultMoniker", SystemStatusPublisherMoniker);
6805
+ __publicField(ConsoleSystemStatusPublisher, "dependencies", []);
6806
+ __publicField(ConsoleSystemStatusPublisher, "monikers", [SystemStatusPublisherMoniker]);
6807
+ __publicField(ConsoleSystemStatusPublisher, "surface", "node");
6808
+ ConsoleSystemStatusPublisher = __decorateClass([
6809
+ creatableProvider()
6810
+ ], ConsoleSystemStatusPublisher);
6811
+
6812
+ // src/simple/systemStatus/SimpleSystemStatusViewer.ts
6813
+ import { assertEx as assertEx51 } from "@xylabs/sdk-js";
6814
+ import { SystemStatusViewerMoniker } from "@xyo-network/xl1-protocol-lib";
6815
+ var SimpleSystemStatusViewer = class extends AbstractCreatableProvider {
6816
+ moniker = SimpleSystemStatusViewer.defaultMoniker;
6817
+ get runner() {
6818
+ return assertEx51(this.context.statusReporter, () => "SystemStatusViewer requires a SystemStatusRunner (context.statusReporter)");
6819
+ }
6820
+ getGlobalStatus() {
6821
+ return this.runner.getGlobalStatus();
6822
+ }
6823
+ getStatus(name) {
6824
+ return this.runner.getStatus(name);
6825
+ }
6826
+ isReady() {
6827
+ return this.runner.isReady();
6828
+ }
6829
+ isShuttingDown() {
6830
+ return this.runner.isShuttingDown();
6831
+ }
6832
+ snapshot() {
6833
+ return this.runner.snapshot();
6834
+ }
6835
+ };
6836
+ __publicField(SimpleSystemStatusViewer, "connectionTypes", ["memory"]);
6837
+ __publicField(SimpleSystemStatusViewer, "defaultMoniker", SystemStatusViewerMoniker);
6838
+ __publicField(SimpleSystemStatusViewer, "dependencies", []);
6839
+ __publicField(SimpleSystemStatusViewer, "monikers", [SystemStatusViewerMoniker]);
6840
+ __publicField(SimpleSystemStatusViewer, "surface", "node");
6841
+ SimpleSystemStatusViewer = __decorateClass([
6842
+ creatableProvider()
6843
+ ], SimpleSystemStatusViewer);
6844
+
6786
6845
  // src/simple/timeSync2/SimpleTimeSyncViewer.ts
6787
6846
  import {
6788
6847
  asHash as asHash5,
6789
- assertEx as assertEx49,
6848
+ assertEx as assertEx52,
6790
6849
  isDefined as isDefined22
6791
6850
  } from "@xylabs/sdk-js";
6792
6851
  import {
@@ -6808,7 +6867,7 @@ var SimpleTimeSyncViewer = class extends AbstractCreatableProvider {
6808
6867
  async convertTime(fromDomain, toDomain, from) {
6809
6868
  switch (fromDomain) {
6810
6869
  case "xl1": {
6811
- const [block, payloads] = assertEx49(await this.blockViewer.blockByNumber(asXL1BlockNumber11(from, true)), () => "Block not found");
6870
+ const [block, payloads] = assertEx52(await this.blockViewer.blockByNumber(asXL1BlockNumber11(from, true)), () => "Block not found");
6812
6871
  const timeSchemaIndex = block.payload_schemas.indexOf(TimeSchema);
6813
6872
  const hash = timeSchemaIndex === -1 ? void 0 : block.payload_hashes[timeSchemaIndex];
6814
6873
  const timePayload = asTimePayload2(isDefined22(hash) ? payloads.find((p) => p._hash === hash) : void 0);
@@ -6864,10 +6923,10 @@ var SimpleTimeSyncViewer = class extends AbstractCreatableProvider {
6864
6923
  return [Date.now(), null];
6865
6924
  }
6866
6925
  case "ethereum": {
6867
- const provider = assertEx49(this.ethProvider, () => "Ethereum provider not configured");
6926
+ const provider = assertEx52(this.ethProvider, () => "Ethereum provider not configured");
6868
6927
  const blockNumber = await provider.getBlockNumber() ?? 0;
6869
6928
  const block = await provider.getBlock(blockNumber);
6870
- const blockHash = asHash5(assertEx49(block?.hash, () => "Block hash not found"), true);
6929
+ const blockHash = asHash5(assertEx52(block?.hash, () => "Block hash not found"), true);
6871
6930
  return [blockNumber, blockHash];
6872
6931
  }
6873
6932
  default: {
@@ -6882,7 +6941,7 @@ var SimpleTimeSyncViewer = class extends AbstractCreatableProvider {
6882
6941
  // this is for the previous block
6883
6942
  xl1,
6884
6943
  // this is for the previous block
6885
- xl1Hash: assertEx49(xl1Hash, () => "No xl1 hash available from time sync service"),
6944
+ xl1Hash: assertEx52(xl1Hash, () => "No xl1 hash available from time sync service"),
6886
6945
  epoch: Date.now()
6887
6946
  };
6888
6947
  if (isDefined22(this.ethProvider)) {
@@ -6904,7 +6963,7 @@ SimpleTimeSyncViewer = __decorateClass([
6904
6963
  ], SimpleTimeSyncViewer);
6905
6964
 
6906
6965
  // src/simple/transactionValidation/SimpleTransactionValidationViewer.ts
6907
- import { assertEx as assertEx50 } from "@xylabs/sdk-js";
6966
+ import { assertEx as assertEx53 } from "@xylabs/sdk-js";
6908
6967
  import { PayloadBuilder as PayloadBuilder24 } from "@xyo-network/sdk-js";
6909
6968
  import {
6910
6969
  AccountBalanceViewerMoniker as AccountBalanceViewerMoniker3,
@@ -6958,7 +7017,7 @@ var SimpleTransactionValidationViewer = class extends AbstractCreatableProvider
6958
7017
  let head;
6959
7018
  if (isChainQualifiedHeadConfig6(config)) {
6960
7019
  const headBlockResult = await this.blockViewer.blockByHash(config.head);
6961
- head = headBlockResult == null ? assertEx50(
7020
+ head = headBlockResult == null ? assertEx53(
6962
7021
  void 0,
6963
7022
  () => `Specified a head that is not in the chain [${config.head}]`
6964
7023
  ) : headBlockResult[0];
@@ -7030,10 +7089,10 @@ SimpleTransactionValidationViewer = __decorateClass([
7030
7089
  ], SimpleTransactionValidationViewer);
7031
7090
 
7032
7091
  // src/simple/TransactionViewer/SimpleTransactionViewer.ts
7033
- import { assertEx as assertEx51, exists as exists10 } from "@xylabs/sdk-js";
7092
+ import { assertEx as assertEx54, exists as exists10 } from "@xylabs/sdk-js";
7034
7093
  import { BoundWitnessSchema } from "@xyo-network/sdk-js";
7035
7094
  import {
7036
- asSignedHydratedTransactionWithHashMeta,
7095
+ asSignedHydratedTransactionWithHashMeta as asSignedHydratedTransactionWithHashMeta2,
7037
7096
  asSignedTransactionBoundWitness,
7038
7097
  BlockViewerMoniker as BlockViewerMoniker6,
7039
7098
  isTransactionBoundWitnessWithHashMeta as isTransactionBoundWitnessWithHashMeta2,
@@ -7047,7 +7106,7 @@ var SimpleTransactionViewer = class extends AbstractCreatableProvider {
7047
7106
  }
7048
7107
  async byBlockHashAndIndex(blockHash, transactionIndex) {
7049
7108
  return await this.spanAsync("byBlockHashAndIndex", async () => {
7050
- assertEx51(transactionIndex >= 0, () => "transactionIndex must be greater than or equal to 0");
7109
+ assertEx54(transactionIndex >= 0, () => "transactionIndex must be greater than or equal to 0");
7051
7110
  try {
7052
7111
  const block = await this.blockViewer.blockByHash(blockHash);
7053
7112
  if (!block) return null;
@@ -7080,7 +7139,7 @@ var SimpleTransactionViewer = class extends AbstractCreatableProvider {
7080
7139
  const transaction = asSignedTransactionBoundWitness(await this.blockViewer.payloadByHash(transactionHash));
7081
7140
  if (transaction) {
7082
7141
  const payloads = await this.blockViewer.payloadsByHash(transaction.payload_hashes);
7083
- return asSignedHydratedTransactionWithHashMeta([transaction, payloads]) ?? null;
7142
+ return asSignedHydratedTransactionWithHashMeta2([transaction, payloads]) ?? null;
7084
7143
  }
7085
7144
  return null;
7086
7145
  } catch {
@@ -7112,7 +7171,7 @@ SimpleTransactionViewer = __decorateClass([
7112
7171
 
7113
7172
  // src/simple/windowedBlock/SimpleWindowedBlockViewer.ts
7114
7173
  import {
7115
- assertEx as assertEx52,
7174
+ assertEx as assertEx55,
7116
7175
  exists as exists11,
7117
7176
  isNull as isNull2
7118
7177
  } from "@xylabs/sdk-js";
@@ -7194,7 +7253,7 @@ var SimpleWindowedBlockViewer = class extends AbstractCreatableProvider {
7194
7253
  }
7195
7254
  async createHandler() {
7196
7255
  await super.createHandler();
7197
- this._blockViewer = assertEx52(
7256
+ this._blockViewer = assertEx55(
7198
7257
  this.params.blockViewer ?? await this.locator.getInstance(BlockViewerMoniker7),
7199
7258
  () => "BlockViewer instance is required"
7200
7259
  );
@@ -7203,13 +7262,13 @@ var SimpleWindowedBlockViewer = class extends AbstractCreatableProvider {
7203
7262
  this._transactionHashMap = new MemoryMap2();
7204
7263
  }
7205
7264
  currentBlock() {
7206
- return assertEx52(this._chain.at(-1));
7265
+ return assertEx55(this._chain.at(-1));
7207
7266
  }
7208
7267
  currentBlockHash() {
7209
- return assertEx52(this._chain.at(-1)?.[0]._hash);
7268
+ return assertEx55(this._chain.at(-1)?.[0]._hash);
7210
7269
  }
7211
7270
  currentBlockNumber() {
7212
- return assertEx52(this._chain.at(-1)?.[0].block);
7271
+ return assertEx55(this._chain.at(-1)?.[0].block);
7213
7272
  }
7214
7273
  async payloadByHash(hash) {
7215
7274
  const payloads = await this.payloadsByHash([hash]);
@@ -7303,7 +7362,8 @@ var LoggerStatusReporter = class {
7303
7362
  }
7304
7363
  };
7305
7364
 
7306
- // src/status/RuntimeStatusMonitor.ts
7365
+ // src/status/SimpleSystemStatusRunner.ts
7366
+ import { SystemStatusRunnerMoniker } from "@xyo-network/xl1-protocol-lib";
7307
7367
  var statusPriority = {
7308
7368
  error: 0,
7309
7369
  stopped: 1,
@@ -7326,22 +7386,35 @@ var reduceToMinimumStatus = (statuses) => {
7326
7386
  }
7327
7387
  return minStatus;
7328
7388
  };
7329
- var RuntimeStatusMonitor = class extends LoggerStatusReporter {
7389
+ var SimpleSystemStatusRunner = class extends LoggerStatusReporter {
7390
+ moniker = SystemStatusRunnerMoniker;
7330
7391
  globalTransitions = [];
7392
+ progressMap = {};
7393
+ readinessMap = {};
7394
+ reportErrorMap = {};
7395
+ shuttingDown = false;
7331
7396
  transitions = [];
7397
+ updatedAtMap = {};
7332
7398
  getGlobalStatus() {
7333
- if (Object.keys(this.statusMap).length === 0) return SENTINEL_STATUS;
7334
- return reduceToMinimumStatus(Object.values(this.statusMap));
7399
+ const statuses = Object.values(this.statusMap);
7400
+ if (statuses.length === 0) return SENTINEL_STATUS;
7401
+ return reduceToMinimumStatus(statuses);
7335
7402
  }
7336
7403
  getStatus(name) {
7337
7404
  return this.statusMap[name];
7338
7405
  }
7406
+ isReady() {
7407
+ if (this.shuttingDown) return false;
7408
+ const entries = Object.values(this.readinessMap);
7409
+ if (entries.length === 0) return false;
7410
+ return entries.every((entry) => entry?.readiness === "ready");
7411
+ }
7412
+ isShuttingDown() {
7413
+ return this.shuttingDown;
7414
+ }
7339
7415
  onGlobalTransition(match, handler) {
7340
7416
  this.globalTransitions.push({ ...match, handler });
7341
7417
  }
7342
- /**
7343
- * Register a callback to be called on a specific transition.
7344
- */
7345
7418
  onTransition(match, handler) {
7346
7419
  this.transitions.push({ ...match, handler });
7347
7420
  }
@@ -7349,12 +7422,45 @@ var RuntimeStatusMonitor = class extends LoggerStatusReporter {
7349
7422
  const previous = this.statusMap[name];
7350
7423
  const previousGlobal = this.getGlobalStatus();
7351
7424
  super.report(name, status, progress);
7425
+ this.updatedAtMap[name] = Date.now();
7426
+ if (progress instanceof Error) {
7427
+ this.reportErrorMap[name] = progress.message;
7428
+ } else if (typeof progress === "number") {
7429
+ this.progressMap[name] = progress;
7430
+ }
7352
7431
  if (previous === status) return;
7353
- this.runTransitions(this.transitions, previous, status, name);
7432
+ this.runTransitions(this.transitions, previous ?? status, status, name);
7354
7433
  const globalStatus = this.getGlobalStatus();
7355
7434
  if (previousGlobal === globalStatus) return;
7356
7435
  this.runTransitions(this.globalTransitions, previousGlobal, globalStatus);
7357
7436
  }
7437
+ reportReady(name, readiness, error) {
7438
+ const message = error instanceof Error ? error.message : error;
7439
+ this.readinessMap[name] = { readiness, error: message };
7440
+ this.updatedAtMap[name] = Date.now();
7441
+ }
7442
+ setShuttingDown(shuttingDown) {
7443
+ this.shuttingDown = shuttingDown;
7444
+ }
7445
+ snapshot() {
7446
+ const components = Object.entries(this.statusMap).map(([name, lifecycle]) => {
7447
+ const readinessEntry = this.readinessMap[name];
7448
+ return {
7449
+ name,
7450
+ lifecycle,
7451
+ readiness: readinessEntry?.readiness,
7452
+ progress: this.progressMap[name],
7453
+ error: readinessEntry?.error ?? this.reportErrorMap[name],
7454
+ updatedAt: this.updatedAtMap[name] ?? 0
7455
+ };
7456
+ });
7457
+ return {
7458
+ components,
7459
+ globalStatus: this.getGlobalStatus(),
7460
+ isReady: this.isReady(),
7461
+ isShuttingDown: this.shuttingDown
7462
+ };
7463
+ }
7358
7464
  runTransitions(transitions, prev, next, name) {
7359
7465
  for (const {
7360
7466
  from,
@@ -7370,7 +7476,7 @@ var RuntimeStatusMonitor = class extends LoggerStatusReporter {
7370
7476
  };
7371
7477
 
7372
7478
  // src/test/buildRandomChain.ts
7373
- import { asAddress as asAddress2, assertEx as assertEx55 } from "@xylabs/sdk-js";
7479
+ import { asAddress as asAddress2, assertEx as assertEx58 } from "@xylabs/sdk-js";
7374
7480
  import {
7375
7481
  Account as Account4,
7376
7482
  asSchema as asSchema9,
@@ -7389,10 +7495,10 @@ import {
7389
7495
  } from "@xyo-network/xl1-protocol-lib";
7390
7496
 
7391
7497
  // src/test/buildBlock.ts
7392
- import { assertEx as assertEx53, isDefined as isDefined23 } from "@xylabs/sdk-js";
7498
+ import { assertEx as assertEx56, isDefined as isDefined23 } from "@xylabs/sdk-js";
7393
7499
  import {
7394
7500
  asAnyPayload as asAnyPayload5,
7395
- BoundWitnessBuilder as BoundWitnessBuilder3,
7501
+ BoundWitnessBuilder as BoundWitnessBuilder4,
7396
7502
  PayloadBuilder as PayloadBuilder25
7397
7503
  } from "@xyo-network/sdk-js";
7398
7504
  import {
@@ -7472,7 +7578,7 @@ function buildStepHashes(blockNumber, inStepHashes, previousBlockHash, chainStep
7472
7578
  const completedStepReward = calculateCompletedStepReward(i, stepRewardPoolBalance);
7473
7579
  completedStepRewardTransfers.push(createTransferPayload(chainStepRewardAddress2, { [completedStepRewardHolderAddress]: completedStepReward }));
7474
7580
  }
7475
- step_hashes.push(assertEx53(previousBlockHash, () => `Previous block hash is required for step ${step} at block ${blockNumber}`));
7581
+ step_hashes.push(assertEx56(previousBlockHash, () => `Previous block hash is required for step ${step} at block ${blockNumber}`));
7476
7582
  } else if (isDefined23(inStepHashes.at(i))) {
7477
7583
  step_hashes.push(inStepHashes[i]);
7478
7584
  }
@@ -7517,7 +7623,7 @@ async function buildBlock(options) {
7517
7623
  ...txElevatedPayloads,
7518
7624
  ...completedStepRewardTransfers
7519
7625
  ];
7520
- const boundWitnessBuilder = new BoundWitnessBuilder3();
7626
+ const boundWitnessBuilder = new BoundWitnessBuilder4();
7521
7627
  const builder = boundWitnessBuilder.fields({
7522
7628
  block,
7523
7629
  chain: chainId,
@@ -7526,7 +7632,7 @@ async function buildBlock(options) {
7526
7632
  protocol
7527
7633
  }).meta({ $epoch: Date.now(), $signatures: [] }).signers(signers).payloads(await PayloadBuilder25.addStorageMeta(payloads));
7528
7634
  const [bw, txPayloads] = await builder.build();
7529
- assertEx53(isBlockBoundWitness(bw), () => "Build of BlockBoundWitness failed");
7635
+ assertEx56(isBlockBoundWitness(bw), () => "Build of BlockBoundWitness failed");
7530
7636
  return [await PayloadBuilder25.addStorageMeta(bw), txPayloads.map((p) => asAnyPayload5(p, true))];
7531
7637
  }
7532
7638
 
@@ -7547,7 +7653,7 @@ async function buildNextBlock(previousBlock, txs, blockPayloads, signers, chainS
7547
7653
  }
7548
7654
 
7549
7655
  // src/test/buildRandomGenesisBlock.ts
7550
- import { asAddress, assertEx as assertEx54 } from "@xylabs/sdk-js";
7656
+ import { asAddress, assertEx as assertEx57 } from "@xylabs/sdk-js";
7551
7657
  import {
7552
7658
  Account as Account3,
7553
7659
  asAnyPayload as asAnyPayload6,
@@ -7591,7 +7697,7 @@ var buildRandomTransaction = async (chain, payloads, account, nbf = asXL1BlockNu
7591
7697
  };
7592
7698
 
7593
7699
  // src/test/buildRandomGenesisBlock.ts
7594
- var TestChainId = assertEx54(asAddress("c5fe2e6F6841Cbab12d8C0618Be2DF8C6156cC44"));
7700
+ var TestChainId = assertEx57(asAddress("c5fe2e6F6841Cbab12d8C0618Be2DF8C6156cC44"));
7595
7701
 
7596
7702
  // src/test/createGenesisBlock.ts
7597
7703
  import { PayloadBuilder as PayloadBuilder28 } from "@xyo-network/sdk-js";
@@ -7646,7 +7752,7 @@ var createGenesisBlock = async (initialBlockProducer, nextContractAddress, genes
7646
7752
  };
7647
7753
 
7648
7754
  // src/test/buildRandomChain.ts
7649
- var TestGenesisBlockRewardAddress = assertEx55(asAddress2("fa7f0bb865a4bfff3d5e2c726d3e063297014da9"));
7755
+ var TestGenesisBlockRewardAddress = assertEx58(asAddress2("fa7f0bb865a4bfff3d5e2c726d3e063297014da9"));
7650
7756
  var buildRandomChain = async (blockProducer, count = 10, previousBlock, chainId, transactionAccount, receiverAddresses) => {
7651
7757
  const chainIdToUse = chainId ?? TestChainId;
7652
7758
  const blocks = [];
@@ -7690,7 +7796,7 @@ var buildRandomChain = async (blockProducer, count = 10, previousBlock, chainId,
7690
7796
  receiverAddress
7691
7797
  ));
7692
7798
  }
7693
- const previousBlock2 = assertEx55(lastBlock?.[0], () => new Error("No last block"));
7799
+ const previousBlock2 = assertEx58(lastBlock?.[0], () => new Error("No last block"));
7694
7800
  const block = await buildNextBlock(previousBlock2, txs, [], [blockProducer], transactionAccountToUse.address);
7695
7801
  blocks.push(block);
7696
7802
  remaining = remaining - 1;
@@ -7751,13 +7857,13 @@ function getTestProviderContext2(config) {
7751
7857
  }
7752
7858
 
7753
7859
  // src/time/primitives/xl1BlockNumberToEthBlockNumber.ts
7754
- import { assertEx as assertEx56 } from "@xylabs/sdk-js";
7860
+ import { assertEx as assertEx59 } from "@xylabs/sdk-js";
7755
7861
  import { asTimePayload as asTimePayload3, TimeSchema as TimeSchema2 } from "@xyo-network/xl1-protocol-lib";
7756
7862
  async function xl1BlockNumberToEthBlockNumber(context, xl1BlockNumber) {
7757
7863
  const blockHash = await hashFromBlockNumber(context, xl1BlockNumber);
7758
7864
  const hydratedBlock = await hydrateBlock(context, blockHash);
7759
7865
  const timePayload = asTimePayload3(hydratedBlock[1].find((p) => p.schema === TimeSchema2), { required: true });
7760
- return assertEx56(timePayload.ethereum, () => "No ethereum timestamp found on block");
7866
+ return assertEx59(timePayload.ethereum, () => "No ethereum timestamp found on block");
7761
7867
  }
7762
7868
 
7763
7869
  // src/validation/lib/isLocalhost.ts
@@ -7823,6 +7929,7 @@ export {
7823
7929
  ConfigZod,
7824
7930
  ConnectionConfigZod,
7825
7931
  ConnectionsConfigZod,
7932
+ ConsoleSystemStatusPublisher,
7826
7933
  CreatableProviderContextZod,
7827
7934
  DEFAULT_BACKOFF_MS,
7828
7935
  DEFAULT_MAX_ATTEMPTS,
@@ -7873,8 +7980,6 @@ export {
7873
7980
  RpcConnectionConfigZod,
7874
7981
  RpcRemoteConfigBaseZod,
7875
7982
  RpcRemoteConfigZod,
7876
- RuntimeStatusMonitor,
7877
- RuntimeStatusMonitorZod,
7878
7983
  S3BucketConfigZod,
7879
7984
  S3ConnectionConfigZod,
7880
7985
  SchemasStepSummarySchema,
@@ -7893,6 +7998,8 @@ export {
7893
7998
  SimpleStakeEventsViewer,
7894
7999
  SimpleStakeTotalsViewer,
7895
8000
  SimpleStakeViewer,
8001
+ SimpleSystemStatusRunner,
8002
+ SimpleSystemStatusViewer,
7896
8003
  SimpleTimeSyncViewer,
7897
8004
  SimpleTransactionValidationViewer,
7898
8005
  SimpleTransactionViewer,
@@ -7904,6 +8011,7 @@ export {
7904
8011
  SimpleXyoPermissions,
7905
8012
  SimpleXyoRunner,
7906
8013
  SimpleXyoSigner,
8014
+ SystemStatusRunnerZod,
7907
8015
  TODO,
7908
8016
  TestGenesisBlockRewardAddress,
7909
8017
  TransactionBuilder,
@@ -7968,6 +8076,7 @@ export {
7968
8076
  buildRandomChainArchivist,
7969
8077
  buildRandomTransaction,
7970
8078
  buildTransaction,
8079
+ buildUnsignedBoundWitness,
7971
8080
  buildUnsignedTransaction,
7972
8081
  bundledPayloadToHydratedBlock,
7973
8082
  bundledPayloadToHydratedTransaction,
@@ -8083,6 +8192,7 @@ export {
8083
8192
  schemasStepSummaryFromRange,
8084
8193
  schemasSummary,
8085
8194
  scoreUncle,
8195
+ signBoundWitness,
8086
8196
  signEIP712Message,
8087
8197
  signTransaction,
8088
8198
  splitOnDecimal,