@xyo-network/chain-orchestration 1.23.2 → 2.0.1

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 (55) hide show
  1. package/dist/browser/index.mjs +95 -76
  2. package/dist/browser/index.mjs.map +3 -3
  3. package/dist/browser/node/config/tryParseConfig.d.ts +0 -1
  4. package/dist/browser/node/config/tryParseConfig.d.ts.map +1 -1
  5. package/dist/browser/shared/actor/v3/ActorV3.d.ts +7 -7
  6. package/dist/browser/shared/actor/v3/ActorV3.d.ts.map +1 -1
  7. package/dist/browser/shared/config/actors/Api.d.ts +57 -61
  8. package/dist/browser/shared/config/actors/Api.d.ts.map +1 -1
  9. package/dist/browser/shared/config/actors/Bridge.d.ts +86 -86
  10. package/dist/browser/shared/config/actors/Bridge.d.ts.map +1 -1
  11. package/dist/browser/shared/config/actors/Finalizer.d.ts +55 -61
  12. package/dist/browser/shared/config/actors/Finalizer.d.ts.map +1 -1
  13. package/dist/browser/shared/config/actors/Mempool.d.ts +57 -63
  14. package/dist/browser/shared/config/actors/Mempool.d.ts.map +1 -1
  15. package/dist/browser/shared/config/actors/Producer.d.ts +56 -62
  16. package/dist/browser/shared/config/actors/Producer.d.ts.map +1 -1
  17. package/dist/browser/shared/config/actors/RewardRedemption.d.ts +52 -58
  18. package/dist/browser/shared/config/actors/RewardRedemption.d.ts.map +1 -1
  19. package/dist/neutral/index.mjs +95 -76
  20. package/dist/neutral/index.mjs.map +3 -3
  21. package/dist/neutral/node/config/tryParseConfig.d.ts +0 -1
  22. package/dist/neutral/node/config/tryParseConfig.d.ts.map +1 -1
  23. package/dist/neutral/shared/actor/v3/ActorV3.d.ts +7 -7
  24. package/dist/neutral/shared/actor/v3/ActorV3.d.ts.map +1 -1
  25. package/dist/neutral/shared/config/actors/Api.d.ts +57 -61
  26. package/dist/neutral/shared/config/actors/Api.d.ts.map +1 -1
  27. package/dist/neutral/shared/config/actors/Bridge.d.ts +86 -86
  28. package/dist/neutral/shared/config/actors/Bridge.d.ts.map +1 -1
  29. package/dist/neutral/shared/config/actors/Finalizer.d.ts +55 -61
  30. package/dist/neutral/shared/config/actors/Finalizer.d.ts.map +1 -1
  31. package/dist/neutral/shared/config/actors/Mempool.d.ts +57 -63
  32. package/dist/neutral/shared/config/actors/Mempool.d.ts.map +1 -1
  33. package/dist/neutral/shared/config/actors/Producer.d.ts +56 -62
  34. package/dist/neutral/shared/config/actors/Producer.d.ts.map +1 -1
  35. package/dist/neutral/shared/config/actors/RewardRedemption.d.ts +52 -58
  36. package/dist/neutral/shared/config/actors/RewardRedemption.d.ts.map +1 -1
  37. package/dist/node/index.mjs +97 -77
  38. package/dist/node/index.mjs.map +3 -3
  39. package/dist/node/node/config/tryParseConfig.d.ts +0 -1
  40. package/dist/node/node/config/tryParseConfig.d.ts.map +1 -1
  41. package/dist/node/shared/actor/v3/ActorV3.d.ts +7 -7
  42. package/dist/node/shared/actor/v3/ActorV3.d.ts.map +1 -1
  43. package/dist/node/shared/config/actors/Api.d.ts +57 -61
  44. package/dist/node/shared/config/actors/Api.d.ts.map +1 -1
  45. package/dist/node/shared/config/actors/Bridge.d.ts +86 -86
  46. package/dist/node/shared/config/actors/Bridge.d.ts.map +1 -1
  47. package/dist/node/shared/config/actors/Finalizer.d.ts +55 -61
  48. package/dist/node/shared/config/actors/Finalizer.d.ts.map +1 -1
  49. package/dist/node/shared/config/actors/Mempool.d.ts +57 -63
  50. package/dist/node/shared/config/actors/Mempool.d.ts.map +1 -1
  51. package/dist/node/shared/config/actors/Producer.d.ts +56 -62
  52. package/dist/node/shared/config/actors/Producer.d.ts.map +1 -1
  53. package/dist/node/shared/config/actors/RewardRedemption.d.ts +52 -58
  54. package/dist/node/shared/config/actors/RewardRedemption.d.ts.map +1 -1
  55. package/package.json +87 -87
@@ -19,7 +19,7 @@ import {
19
19
  IdLogger
20
20
  } from "@xylabs/sdk-js";
21
21
  import { Semaphore } from "async-mutex";
22
- import z from "zod";
22
+ import { z } from "zod/mini";
23
23
  var noopCounter = { add: () => {
24
24
  } };
25
25
  var noopUpDownCounter = { add: () => {
@@ -39,7 +39,7 @@ var ActorParamsV3Zod = z.object({
39
39
  account: AccountInstanceZod,
40
40
  locator: z.unknown(),
41
41
  name: CreatableNameZod,
42
- statusReporter: StatusReporterInstanceZod.optional()
42
+ statusReporter: z.optional(StatusReporterInstanceZod)
43
43
  });
44
44
  function createDeferred() {
45
45
  let resolve;
@@ -255,11 +255,14 @@ import {
255
255
  zodToFactory
256
256
  } from "@xylabs/sdk-js";
257
257
  import { BaseConfigContextZod, HostActorConfigZod } from "@xyo-network/xl1-sdk";
258
- import { globalRegistry, z as z2 } from "zod";
259
- var ApiConfigZod = HostActorConfigZod.extend(z2.object({
260
- initRewardsCache: z2.union([z2.number(), z2.string(), z2.boolean()]).transform(
261
- (v) => v !== "0" && v !== "false" && v !== false && v != 0
262
- ).default(true).register(globalRegistry, {
258
+ import { globalRegistry, z as z2 } from "zod/mini";
259
+ var toBooleanDefaultTrue = (v) => v !== "0" && v !== "false" && v !== false && v !== 0;
260
+ var toBooleanDefaultFalse = (v) => v === "1" || v === "true" || v === true || v === 1;
261
+ var ApiConfigZod = z2.extend(HostActorConfigZod, {
262
+ initRewardsCache: z2._default(
263
+ z2.pipe(z2.union([z2.number(), z2.string(), z2.boolean()]), z2.transform(toBooleanDefaultTrue)),
264
+ true
265
+ ).register(globalRegistry, {
263
266
  description: "Whether to initialize the rewards cache on startup",
264
267
  title: "api.initRewardsCache",
265
268
  type: "boolean"
@@ -272,9 +275,10 @@ var ApiConfigZod = HostActorConfigZod.extend(z2.object({
272
275
  * balancer for horizontal scaling. Requires `remote.rpc` to point at the
273
276
  * upstream API/Finalizer/Mempool/Indexer surfaces.
274
277
  */
275
- stateless: z2.union([z2.number(), z2.string(), z2.boolean()]).transform(
276
- (v) => v === "1" || v === "true" || v === true || v == 1
277
- ).default(false).register(globalRegistry, {
278
+ stateless: z2._default(
279
+ z2.pipe(z2.union([z2.number(), z2.string(), z2.boolean()]), z2.transform(toBooleanDefaultFalse)),
280
+ false
281
+ ).register(globalRegistry, {
278
282
  description: "Run the API actor as a stateless federation node (availableBackings: [network])",
279
283
  title: "api.stateless",
280
284
  type: "boolean"
@@ -293,18 +297,19 @@ var ApiConfigZod = HostActorConfigZod.extend(z2.object({
293
297
  * `false` per environment once external clients (explorers, wallets, dApps)
294
298
  * have moved their indexed-method calls to `/rpc/indexed`.
295
299
  */
296
- legacyMixedRpc: z2.union([z2.number(), z2.string(), z2.boolean()]).transform(
297
- (v) => v !== "0" && v !== "false" && v !== false && v != 0
298
- ).default(true).register(globalRegistry, {
300
+ legacyMixedRpc: z2._default(
301
+ z2.pipe(z2.union([z2.number(), z2.string(), z2.boolean()]), z2.transform(toBooleanDefaultTrue)),
302
+ true
303
+ ).register(globalRegistry, {
299
304
  description: "Serve the full XyoConnection at POST /rpc (no surface filter). Set false to enforce node-surface-only at /rpc; indexed methods always available at /rpc/indexed regardless.",
300
305
  title: "api.legacyMixedRpc",
301
306
  type: "boolean"
302
307
  })
303
- }).shape);
308
+ });
304
309
  var isApiConfig = zodIsFactory(ApiConfigZod);
305
310
  var asApiConfig = zodAsFactory(ApiConfigZod, "asApiConfig");
306
311
  var toApiConfig = zodToFactory(ApiConfigZod, "toApiConfig");
307
- var ApiConfigContext = BaseConfigContextZod.extend({ config: ApiConfigZod });
312
+ var ApiConfigContext = z2.extend(BaseConfigContextZod, { config: ApiConfigZod });
308
313
  var isApiConfigContext = zodIsFactory(ApiConfigContext);
309
314
  var asApiConfigContext = zodAsFactory(ApiConfigContext, "asApiConfigContext");
310
315
  var toApiConfigContext = zodToFactory(ApiConfigContext, "toApiConfigContext");
@@ -325,7 +330,7 @@ import {
325
330
  HostActorConfigZod as HostActorConfigZod2,
326
331
  XL1
327
332
  } from "@xyo-network/xl1-sdk";
328
- import { globalRegistry as globalRegistry2, z as z3 } from "zod";
333
+ import { globalRegistry as globalRegistry2, z as z3 } from "zod/mini";
329
334
  var DEFAULT_FIXED_FEE = toHex(XL1(1000n) * AttoXL1ConvertFactor.xl1);
330
335
  var DEFAULT_VARIABLE_FEE_BASIS_POINTS = 300;
331
336
  var DEFAULT_HARDHAT_BRIDGE_CONTRACT = toAddress("2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6");
@@ -335,103 +340,108 @@ var DEFAULT_HARDHAT_TOKEN_CONTRACT = toAddress("5FbDB2315678afecb367f032d93F642f
335
340
  var DEFAULT_MAX_BRIDGE_AMOUNT = toHex(XL1(1000000n) * AttoXL1ConvertFactor.xl1);
336
341
  var DEFAULT_MIN_BRIDGE_AMOUNT = toHex(XL1(1500n) * AttoXL1ConvertFactor.xl1);
337
342
  var DEFAULT_SCANNER_INTERVAL_MS = 3e4;
338
- var BasisPointsZod = z3.coerce.number().int().nonnegative().max(1e4);
339
- var BridgeConfigZod = HostActorConfigZod2.extend({
340
- escrowAddress: AddressZod.optional().register(globalRegistry2, {
343
+ var BasisPointsZod = z3.coerce.number().check(z3.multipleOf(1), z3.nonnegative(), z3.maximum(1e4));
344
+ var BridgeConfigZod = z3.extend(HostActorConfigZod2, {
345
+ escrowAddress: z3.optional(AddressZod).register(globalRegistry2, {
341
346
  description: "Address to which bridge escrow will be sent",
342
347
  title: "bridge.escrowAddress",
343
348
  type: "string"
344
349
  }),
345
- feesAddress: AddressZod.optional().register(globalRegistry2, {
350
+ feesAddress: z3.optional(AddressZod).register(globalRegistry2, {
346
351
  description: "Address to which bridge fees will be sent",
347
352
  title: "bridge.feesAddress",
348
353
  type: "string"
349
354
  }),
350
- feeFixed: HexZod.default(DEFAULT_FIXED_FEE).register(globalRegistry2, {
355
+ feeFixed: z3._default(HexZod, DEFAULT_FIXED_FEE).register(globalRegistry2, {
351
356
  default: DEFAULT_FIXED_FEE,
352
357
  description: "Fixed fee (in AttoXL1) applied to bridge transfers",
353
358
  title: "bridge.feeFixed",
354
359
  type: "bigint"
355
360
  }),
356
- feeRateBasisPoints: BasisPointsZod.default(DEFAULT_VARIABLE_FEE_BASIS_POINTS).register(globalRegistry2, {
361
+ feeRateBasisPoints: z3._default(BasisPointsZod, DEFAULT_VARIABLE_FEE_BASIS_POINTS).register(globalRegistry2, {
357
362
  default: DEFAULT_VARIABLE_FEE_BASIS_POINTS,
358
363
  description: "Variable rate fee (in basis points where 1 bps = 0.01%) applied to bridge transfers",
359
364
  title: "bridge.feeRateBasisPoints",
360
365
  type: "number"
361
366
  }),
362
- maxBridgeAmount: HexZod.default(DEFAULT_MAX_BRIDGE_AMOUNT).register(globalRegistry2, {
367
+ maxBridgeAmount: z3._default(HexZod, DEFAULT_MAX_BRIDGE_AMOUNT).register(globalRegistry2, {
363
368
  default: DEFAULT_MAX_BRIDGE_AMOUNT,
364
369
  description: "Maximum amount allowed for a bridge transfer",
365
370
  title: "bridge.maxBridgeAmount",
366
371
  type: "string"
367
372
  }),
368
- minBridgeAmount: HexZod.default(DEFAULT_MIN_BRIDGE_AMOUNT).register(globalRegistry2, {
373
+ minBridgeAmount: z3._default(HexZod, DEFAULT_MIN_BRIDGE_AMOUNT).register(globalRegistry2, {
369
374
  default: DEFAULT_MIN_BRIDGE_AMOUNT,
370
375
  description: "Minimum amount required for a bridge transfer",
371
376
  title: "bridge.minBridgeAmount",
372
377
  type: "string"
373
378
  }),
374
- redisHost: z3.string().default("localhost").register(globalRegistry2, {
379
+ redisHost: z3._default(z3.string(), "localhost").register(globalRegistry2, {
375
380
  default: "localhost",
376
381
  description: "Host for the Bridge Redis instance",
377
382
  title: "bridge.redisHost",
378
383
  type: "string"
379
384
  }),
380
- redisPort: z3.coerce.number().int().positive().default(6379).register(globalRegistry2, {
385
+ redisPort: z3._default(z3.coerce.number().check(z3.multipleOf(1), z3.positive()), 6379).register(globalRegistry2, {
381
386
  default: 6379,
382
387
  description: "Port for the Bridge Redis instance",
383
388
  title: "bridge.redisPort",
384
389
  type: "number"
385
390
  }),
386
- scannerIntervalMs: z3.coerce.number().int().positive().default(DEFAULT_SCANNER_INTERVAL_MS).register(globalRegistry2, {
391
+ scannerIntervalMs: z3._default(z3.coerce.number().check(z3.multipleOf(1), z3.positive()), DEFAULT_SCANNER_INTERVAL_MS).register(globalRegistry2, {
387
392
  default: DEFAULT_SCANNER_INTERVAL_MS,
388
393
  description: "How often (ms) the EVM->XL1 scanner polls the remote bridge contract for new BridgedToRemote ids confirmed at depth.",
389
394
  title: "bridge.scannerIntervalMs",
390
395
  type: "number"
391
396
  }),
392
- remoteBridgeContractAddress: AddressZod.default(DEFAULT_HARDHAT_BRIDGE_CONTRACT).register(globalRegistry2, {
397
+ remoteBridgeContractAddress: z3._default(AddressZod, DEFAULT_HARDHAT_BRIDGE_CONTRACT).register(globalRegistry2, {
393
398
  default: DEFAULT_HARDHAT_BRIDGE_CONTRACT,
394
399
  description: "Hex representation of remote token address used for bridging",
395
400
  title: "bridge.remoteBridgeContractAddress",
396
401
  type: "string"
397
402
  }),
398
- remoteChainId: HexZod.default(DEFAULT_HARDHAT_CHAIN_ID).register(globalRegistry2, {
403
+ remoteBridgeContractDeployBlock: z3.optional(z3.coerce.number().check(z3.multipleOf(1), z3.nonnegative())).register(globalRegistry2, {
404
+ description: "EVM block at which the remote bridge contract was deployed. When unset, the bridge actor probes the chain via eth_getCode at actor startup. Setting this avoids the probe and is cheaper for chains with high heads; it must be at or before the actual deploy block.",
405
+ title: "bridge.remoteBridgeContractDeployBlock",
406
+ type: "number"
407
+ }),
408
+ remoteChainId: z3._default(HexZod, DEFAULT_HARDHAT_CHAIN_ID).register(globalRegistry2, {
399
409
  default: DEFAULT_HARDHAT_CHAIN_ID,
400
410
  description: "Remote chain ID",
401
411
  title: "bridge.remoteChainId",
402
412
  type: "string"
403
413
  }),
404
- remoteConfirmationDepth: z3.union([
405
- z3.coerce.number().int().nonnegative(),
414
+ remoteConfirmationDepth: z3.optional(z3.union([
415
+ z3.coerce.number().check(z3.multipleOf(1), z3.nonnegative()),
406
416
  z3.literal("finalized")
407
- ]).optional().register(globalRegistry2, {
417
+ ])).register(globalRegistry2, {
408
418
  description: "Block depth or BlockTag at which the remote (EVM) chain is read as canonical. Numeric: number of confirmations behind head. 'finalized': Casper FFG finalized block. Resolved per-chain by getRemoteConfirmationDepth when unset.",
409
419
  title: "bridge.remoteConfirmationDepth",
410
420
  type: "string"
411
421
  }),
412
- remoteTokenAddress: HexZod.default(DEFAULT_HARDHAT_TOKEN_CONTRACT).register(globalRegistry2, {
422
+ remoteTokenAddress: z3._default(HexZod, DEFAULT_HARDHAT_TOKEN_CONTRACT).register(globalRegistry2, {
413
423
  default: DEFAULT_HARDHAT_TOKEN_CONTRACT,
414
424
  description: "Hex representation of remote token address used for bridging",
415
425
  title: "bridge.remoteTokenAddress",
416
426
  type: "string"
417
427
  }),
418
- remoteChainWalletPrivateKey: HexZod.default(DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY).register(globalRegistry2, {
428
+ remoteChainWalletPrivateKey: z3._default(HexZod, DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY).register(globalRegistry2, {
419
429
  description: "Private key for the wallet to use for the remote chain wallet",
420
430
  title: "bridge.remoteChainWalletPrivateKey",
421
431
  type: "string"
422
432
  }),
423
- xl1ChainId: HexZod.optional().register(globalRegistry2, {
433
+ xl1ChainId: z3.optional(HexZod).register(globalRegistry2, {
424
434
  description: "XL1 chain id used for bridging",
425
435
  title: "bridge.xl1ChainId",
426
436
  type: "string"
427
437
  }),
428
- xl1TokenAddress: HexZod.optional().register(globalRegistry2, {
438
+ xl1TokenAddress: z3.optional(HexZod).register(globalRegistry2, {
429
439
  description: "XL1 token address used for bridging",
430
440
  title: "bridge.xl1TokenAddress",
431
441
  type: "string"
432
442
  })
433
443
  });
434
- var BridgeSettingsZod = BridgeConfigZod.pick({
444
+ var BridgeSettingsZod = z3.required(z3.pick(BridgeConfigZod, {
435
445
  feeFixed: true,
436
446
  feeRateBasisPoints: true,
437
447
  feesAddress: true,
@@ -442,11 +452,11 @@ var BridgeSettingsZod = BridgeConfigZod.pick({
442
452
  remoteTokenAddress: true,
443
453
  xl1TokenAddress: true,
444
454
  xl1ChainId: true
445
- }).required();
455
+ }));
446
456
  var isBridgeConfig = zodIsFactory2(BridgeConfigZod);
447
457
  var asBridgeConfig = zodAsFactory2(BridgeConfigZod, "asBridgeConfig");
448
458
  var toBridgeConfig = zodToFactory2(BridgeConfigZod, "toBridgeConfig");
449
- var BridgeConfigContext = BaseConfigContextZod2.extend({ config: BridgeConfigZod });
459
+ var BridgeConfigContext = z3.extend(BaseConfigContextZod2, { config: BridgeConfigZod });
450
460
  var isBridgeConfigContext = zodIsFactory2(BridgeConfigContext);
451
461
  var asBridgeConfigContext = zodAsFactory2(BridgeConfigContext, "asBridgeConfigContext");
452
462
  var toBridgeConfigContext = zodToFactory2(BridgeConfigContext, "toBridgeConfigContext");
@@ -463,19 +473,19 @@ import {
463
473
  DEFAULT_MIN_CANDIDATES,
464
474
  HostActorConfigZod as HostActorConfigZod3
465
475
  } from "@xyo-network/xl1-sdk";
466
- import { z as z4 } from "zod";
467
- var FinalizerConfigZod = HostActorConfigZod3.extend({
468
- allowedProducers: z4.array(AddressZod2).optional(),
476
+ import { z as z4 } from "zod/mini";
477
+ var FinalizerConfigZod = z4.extend(HostActorConfigZod3, {
478
+ allowedProducers: z4.optional(z4.array(AddressZod2)),
469
479
  // Period (ms) between finalizer ticks. Default matches the historical
470
480
  // hardcoded value in FinalizerActor; tests can lower it to drive faster
471
481
  // block finalization.
472
- finalizationCheckInterval: z4.coerce.number().default(500),
473
- minCandidates: z4.number().int().min(0).default(DEFAULT_MIN_CANDIDATES)
482
+ finalizationCheckInterval: z4._default(z4.coerce.number(), 500),
483
+ minCandidates: z4._default(z4.number().check(z4.multipleOf(1), z4.nonnegative()), DEFAULT_MIN_CANDIDATES)
474
484
  });
475
485
  var isFinalizerConfig = zodIsFactory3(FinalizerConfigZod);
476
486
  var asFinalizerConfig = zodAsFactory3(FinalizerConfigZod, "asFinalizerConfig");
477
487
  var toFinalizerConfig = zodToFactory3(FinalizerConfigZod, "toFinalizerConfig");
478
- var FinalizerConfigContext = BaseConfigContextZod3.extend({ config: FinalizerConfigZod });
488
+ var FinalizerConfigContext = z4.extend(BaseConfigContextZod3, { config: FinalizerConfigZod });
479
489
  var isFinalizerConfigContext = zodIsFactory3(FinalizerConfigContext);
480
490
  var asFinalizerConfigContext = zodAsFactory3(FinalizerConfigContext, "asFinalizerConfigContext");
481
491
  var toFinalizerConfigContext = zodToFactory3(FinalizerConfigContext, "toFinalizerConfigContext");
@@ -487,45 +497,53 @@ import {
487
497
  zodToFactory as zodToFactory4
488
498
  } from "@xylabs/sdk-js";
489
499
  import { BaseConfigContextZod as BaseConfigContextZod4, HostActorConfigZod as HostActorConfigZod4 } from "@xyo-network/xl1-sdk";
490
- import { globalRegistry as globalRegistry3, z as z5 } from "zod";
500
+ import { globalRegistry as globalRegistry3, z as z5 } from "zod/mini";
491
501
  var DEFAULT_MEMPOOL_BLOCK_PRUNE_INTERVAL = 1e3;
492
502
  var DEFAULT_MEMPOOL_TRANSACTION_PRUNE_INTERVAL = 1e3;
493
503
  var DEFAULT_MEMPOOL_DEMOTION_THRESHOLD = 3;
494
504
  var DEFAULT_MEMPOOL_MAX_PENDING_TRANSACTIONS = 0;
495
- var MempoolConfigZod = HostActorConfigZod4.extend({
496
- enabled: z5.union([z5.string(), z5.boolean()]).default("false").transform((val, ctx) => {
497
- if (typeof val === "boolean") return val;
505
+ var TRUE_VALUES = /* @__PURE__ */ new Set(["true", "1", "yes", "on"]);
506
+ var FALSE_VALUES = /* @__PURE__ */ new Set(["false", "0", "no", "off"]);
507
+ var FlexibleBooleanZod = z5.pipe(
508
+ z5.union([z5.string(), z5.boolean()]).check(z5.refine((val) => {
509
+ if (typeof val === "boolean") return true;
498
510
  const normalized = val.toLowerCase().trim();
499
- if (["true", "1", "yes", "on"].includes(normalized)) return true;
500
- if (["false", "0", "no", "off"].includes(normalized)) return false;
501
- ctx.addIssue({
502
- code: "invalid_type",
503
- expected: "boolean",
504
- message: `Invalid boolean value: "${val}". Use true/false, 1/0, yes/no.`
505
- });
506
- return z5.NEVER;
507
- }).register(globalRegistry3, {
508
- default: "false",
511
+ return TRUE_VALUES.has(normalized) || FALSE_VALUES.has(normalized);
512
+ }, { error: "Invalid boolean value. Use true/false, 1/0, yes/no." })),
513
+ z5.transform((val) => {
514
+ if (typeof val === "boolean") return val;
515
+ return TRUE_VALUES.has(val.toLowerCase().trim());
516
+ })
517
+ );
518
+ var MempoolConfigZod = z5.extend(HostActorConfigZod4, {
519
+ enabled: z5._default(FlexibleBooleanZod, false).register(globalRegistry3, {
520
+ default: false,
509
521
  description: "Enable the Mempool",
510
522
  title: "mempool.enabled",
511
523
  type: "boolean"
512
524
  }),
513
- blockPruneInterval: z5.coerce.number().default(DEFAULT_MEMPOOL_BLOCK_PRUNE_INTERVAL).register(globalRegistry3, {
525
+ blockPruneInterval: z5._default(z5.coerce.number(), DEFAULT_MEMPOOL_BLOCK_PRUNE_INTERVAL).register(globalRegistry3, {
514
526
  description: "The interval time (in milliseconds) between pending block prune attempts",
515
527
  title: "mempool.blockPruneInterval",
516
528
  type: "number"
517
529
  }),
518
- demotionThreshold: z5.coerce.number().int().positive().default(DEFAULT_MEMPOOL_DEMOTION_THRESHOLD).register(globalRegistry3, {
530
+ demotionThreshold: z5._default(
531
+ z5.coerce.number().check(z5.multipleOf(1), z5.positive()),
532
+ DEFAULT_MEMPOOL_DEMOTION_THRESHOLD
533
+ ).register(globalRegistry3, {
519
534
  description: "Number of times a transaction may be handed out to producers without being included in a block before it is considered demoted",
520
535
  title: "mempool.demotionThreshold",
521
536
  type: "number"
522
537
  }),
523
- maxPendingTransactions: z5.coerce.number().int().nonnegative().default(DEFAULT_MEMPOOL_MAX_PENDING_TRANSACTIONS).register(globalRegistry3, {
538
+ maxPendingTransactions: z5._default(
539
+ z5.coerce.number().check(z5.multipleOf(1), z5.nonnegative()),
540
+ DEFAULT_MEMPOOL_MAX_PENDING_TRANSACTIONS
541
+ ).register(globalRegistry3, {
524
542
  description: "Maximum number of pending transactions in the pool. When exceeded, demoted transactions are evicted first, then oldest by sequence. 0 disables the cap.",
525
543
  title: "mempool.maxPendingTransactions",
526
544
  type: "number"
527
545
  }),
528
- transactionPruneInterval: z5.coerce.number().default(DEFAULT_MEMPOOL_TRANSACTION_PRUNE_INTERVAL).register(globalRegistry3, {
546
+ transactionPruneInterval: z5._default(z5.coerce.number(), DEFAULT_MEMPOOL_TRANSACTION_PRUNE_INTERVAL).register(globalRegistry3, {
529
547
  description: "The interval time (in milliseconds) between pending transaction prune attempts",
530
548
  title: "mempool.transactionPruneInterval",
531
549
  type: "number"
@@ -534,7 +552,7 @@ var MempoolConfigZod = HostActorConfigZod4.extend({
534
552
  var isMempoolConfig = zodIsFactory4(MempoolConfigZod);
535
553
  var asMempoolConfig = zodAsFactory4(MempoolConfigZod, "asMempoolConfig");
536
554
  var toMempoolConfig = zodToFactory4(MempoolConfigZod, "toMempoolConfig");
537
- var MempoolConfigContext = BaseConfigContextZod4.extend({ config: MempoolConfigZod });
555
+ var MempoolConfigContext = z5.extend(BaseConfigContextZod4, { config: MempoolConfigZod });
538
556
  var isMempoolConfigContext = zodIsFactory4(MempoolConfigContext);
539
557
  var asMempoolConfigContext = zodAsFactory4(MempoolConfigContext, "asMempoolConfigContext");
540
558
  var toMempoolConfigContext = zodToFactory4(MempoolConfigContext, "toMempoolConfigContext");
@@ -547,46 +565,46 @@ import {
547
565
  zodToFactory as zodToFactory5
548
566
  } from "@xylabs/sdk-js";
549
567
  import { ActorConfigZod, BaseConfigContextZod as BaseConfigContextZod5 } from "@xyo-network/xl1-sdk";
550
- import { globalRegistry as globalRegistry4, z as z6 } from "zod";
568
+ import { globalRegistry as globalRegistry4, z as z6 } from "zod/mini";
551
569
  var DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL = 1e4;
552
- var ProducerConfigZod = ActorConfigZod.extend(z6.object({
553
- allowlist: z6.array(AddressZod3).optional().register(globalRegistry4, {
570
+ var ProducerConfigZod = z6.extend(ActorConfigZod, {
571
+ allowlist: z6.optional(z6.array(AddressZod3)).register(globalRegistry4, {
554
572
  description: "List of allowed producer addresses, if undefined anyone can participate",
555
573
  title: "allowlist",
556
574
  type: "array"
557
575
  }),
558
- blockProductionCheckInterval: z6.coerce.number().default(DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL).register(globalRegistry4, {
576
+ blockProductionCheckInterval: z6._default(z6.coerce.number(), DEFAULT_BLOCK_PRODUCTION_CHECK_INTERVAL).register(globalRegistry4, {
559
577
  description: "The interval time (in milliseconds) between block production attempts",
560
578
  title: "producer.blockProductionCheckInterval",
561
579
  type: "number"
562
580
  }),
563
- disableIntentRedeclaration: z6.boolean().optional().register(globalRegistry4, {
581
+ disableIntentRedeclaration: z6.optional(z6.boolean()).register(globalRegistry4, {
564
582
  description: "Should the producer skip redeclaring their intent to continue producing blocks",
565
583
  title: "producer.disableIntentRedeclaration",
566
584
  type: "boolean"
567
585
  }),
568
- heartbeatInterval: z6.coerce.number().default(36e5).register(globalRegistry4, {
586
+ heartbeatInterval: z6._default(z6.coerce.number(), 36e5).register(globalRegistry4, {
569
587
  description: "The number of milliseconds between heartbeats if no blocks are produced",
570
588
  title: "producer.heartbeatInterval",
571
589
  type: "number"
572
590
  }),
573
591
  // TODO: BigInt schema
574
- minStake: z6.coerce.number().default(1).register(globalRegistry4, {
592
+ minStake: z6._default(z6.coerce.number(), 1).register(globalRegistry4, {
575
593
  description: "Minimum stake required to be a Producer",
576
594
  title: "producer.minStake",
577
595
  type: "number"
578
596
  }),
579
597
  // TODO: Address schema
580
- rewardAddress: z6.string().optional().register(globalRegistry4, {
598
+ rewardAddress: z6.optional(z6.string()).register(globalRegistry4, {
581
599
  description: "Address to receive block rewards",
582
600
  title: "producer.rewardAddress",
583
601
  type: "string"
584
602
  })
585
- }).shape);
603
+ });
586
604
  var isProducerConfig = zodIsFactory5(ProducerConfigZod);
587
605
  var asProducerConfig = zodAsFactory5(ProducerConfigZod, "asProducerConfig");
588
606
  var toProducerConfig = zodToFactory5(ProducerConfigZod, "toProducerConfig");
589
- var ProducerConfigContext = BaseConfigContextZod5.extend({ config: ProducerConfigZod });
607
+ var ProducerConfigContext = z6.extend(BaseConfigContextZod5, { config: ProducerConfigZod });
590
608
  var isProducerConfigContext = zodIsFactory5(ProducerConfigContext);
591
609
  var asProducerConfigContext = zodAsFactory5(ProducerConfigContext, "asProducerConfigContext");
592
610
  var toProducerConfigContext = zodToFactory5(ProducerConfigContext, "toProducerConfigContext");
@@ -598,11 +616,12 @@ import {
598
616
  zodToFactory as zodToFactory6
599
617
  } from "@xylabs/sdk-js";
600
618
  import { BaseConfigContextZod as BaseConfigContextZod6, HostActorConfigZod as HostActorConfigZod5 } from "@xyo-network/xl1-sdk";
601
- var RewardRedemptionConfigZod = HostActorConfigZod5.extend({});
619
+ import { z as z7 } from "zod/mini";
620
+ var RewardRedemptionConfigZod = z7.extend(HostActorConfigZod5, {});
602
621
  var isRewardRedemptionConfig = zodIsFactory6(RewardRedemptionConfigZod);
603
622
  var asRewardRedemptionConfig = zodAsFactory6(RewardRedemptionConfigZod, "asRewardRedemptionConfig");
604
623
  var toRewardRedemptionConfig = zodToFactory6(RewardRedemptionConfigZod, "toRewardRedemptionConfig");
605
- var RewardRedemptionConfigContext = BaseConfigContextZod6.extend({ config: RewardRedemptionConfigZod });
624
+ var RewardRedemptionConfigContext = z7.extend(BaseConfigContextZod6, { config: RewardRedemptionConfigZod });
606
625
  var isRewardRedemptionConfigContext = zodIsFactory6(RewardRedemptionConfigContext);
607
626
  var asRewardRedemptionConfigContext = zodAsFactory6(RewardRedemptionConfigContext, "asRewardRedemptionConfigContext");
608
627
  var toRewardRedemptionConfigContext = zodToFactory6(RewardRedemptionConfigContext, "toRewardRedemptionConfigContext");
@@ -2906,6 +2925,7 @@ async function locatorsFromConfig(context, { actors, ...config }, onInsecureGene
2906
2925
  import { isDefined as isDefined4, isNull } from "@xylabs/sdk-js";
2907
2926
  import { ConfigZod } from "@xyo-network/xl1-sdk";
2908
2927
  import { cosmiconfig } from "cosmiconfig";
2928
+ import { z as z8 } from "zod/mini";
2909
2929
  var configName = "xyo";
2910
2930
  var configSection = "xl1";
2911
2931
  var ConfigFileNotFoundError = class extends Error {
@@ -2949,7 +2969,7 @@ async function tryParseConfig(options) {
2949
2969
  if (isRecord(result)) {
2950
2970
  const section = result[configSection];
2951
2971
  if (isRecord(section)) {
2952
- const parsed = ConfigZod.loose().parse(section);
2972
+ const parsed = z8.looseObject(ConfigZod.shape).parse(section);
2953
2973
  return typeof section.mnemonic === "string" ? { ...parsed, mnemonic: section.mnemonic } : parsed;
2954
2974
  }
2955
2975
  }