@xyo-network/xl1-browser-system 5.5.4 → 5.6.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.
package/README.md CHANGED
@@ -86,6 +86,29 @@ const localConfig = createXl1RestBrowserSystemConfig({
86
86
  })
87
87
  ```
88
88
 
89
+ For sequential block scans, set `blockViewerOptions`. It is merged into
90
+ `providerBindings.BlockViewer.options`, and a `blockByNumber` miss then loads the
91
+ containing published 31, 211, or 2311-block step (`readStep` 1, 2, or 3)
92
+ instead of a single block file:
93
+
94
+ ```ts
95
+ const scanConfig = createXl1RestBrowserSystemConfig({
96
+ blockViewerOptions: { readStep: 3 },
97
+ endpoint: 'https://sample.mainnet.xyo.space',
98
+ host: 'worker',
99
+ })
100
+ ```
101
+
102
+ Memory: at `readStep: 3` each cold step is a ~6 MB download and the actor realm
103
+ keeps up to `maxCacheSize` blocks (default 4622, ~12 MB; at most 100000, since
104
+ each per-block cache allocates its full size up front). Use `readStep` 0-1
105
+ for random access.
106
+
107
+ Read-ahead runs at most 4 step downloads at once, queued downloads have no wait
108
+ limit, and the browser system adds no fetch timeout. A stalled step download
109
+ therefore delays later read-ahead misses until its connection fails. Use
110
+ `readStep` 0 against endpoints that can stall.
111
+
89
112
  ## Read-only and signed gateway systems
90
113
 
91
114
  `launchXl1BrowserGatewaySystem` is the stock launcher for all four gateway
@@ -338,3 +361,139 @@ pnpm --filter @xyo-network/xl1-browser-system test:e2e
338
361
  Browser-kit owns realm lifecycle and transport. This package owns only the XL1
339
362
  provider catalog, locator provisioning, standard actor, and XL1 configuration
340
363
  helpers.
364
+
365
+ ## Actor-owned finalized block consumption
366
+
367
+ Subclass `Xl1FinalizedBlockActor` and implement its awaited `onBlock(event, context)`
368
+ handler. Register that subclass in your actor catalog with
369
+ `Xl1FinalizedBlockActorDependencies`, then use the existing compiled XL1 system
370
+ launcher. The Actor borrows BlockViewer and FinalizationViewer from that system;
371
+ it does not instantiate a FinalizedBlockStream or another SDK graph.
372
+
373
+ Pass a consumer-owned `after` checkpoint and optional `fetchWindow` in the Actor
374
+ factory parameters. With no checkpoint, delivery begins at the observed head.
375
+ Scheduling is off by default: invoke `runOnce()` or `wake()`, or explicitly set
376
+ inherited `isSchedulingEnabled`, `intervalMs` and first-run options. Each pass
377
+ catches up gaplessly to one observed head through bounded reads. The inherited
378
+ Actor owner serializes passes and drains accepted work on stop.
379
+
380
+ A cursor advances only after the handler succeeds. Failed acknowledgement may
381
+ redeliver a block, including the initial head; persist checkpoints in the consumer
382
+ and make effects idempotent. Cancellation does not undo a handler's effects.
383
+ Continuity failure is terminal for that Actor instance. Its handler must not await
384
+ its own stop. Borrowed handlers/readers must settle for shutdown to complete.
385
+
386
+ This gapless consumer is separate from legacy hot gap/live event semantics. See
387
+ [the source-build qualification](https://github.com/XYOracleNetwork/xl1-protocol/blob/main/docs/evidence/FINALIZED_BLOCK_ACTOR_2026_09_17_EVIDENCE.md)
388
+ for the compiled graph and actual REST composition evidence and remaining gates.
389
+
390
+ ## Optional SDK metadata
391
+
392
+ SDK provider declarations and exact factory registrations retain separate
393
+ `optionalDependencies`. SimpleTimeSyncViewer's EVM edge is optional; an absent
394
+ connection must not be supplied merely to satisfy it. Explicit empty factory
395
+ metadata is preserved as an override. This declaration transport does not upgrade
396
+ the installed generic planner or enforce SDK factory access scopes. See the
397
+ [SDK optional-dependency evidence](https://github.com/XYOracleNetwork/xl1-protocol/blob/main/docs/evidence/OPTIONAL_PROVIDER_DEPENDENCIES_2026_09_17_EVIDENCE.md)
398
+ for the qualified SDK resolver behavior and remaining browser planning/adoption gate.
399
+
400
+ ## Declared provider lookups at browser provisioning
401
+
402
+ The browser provisioner will enable the SDK's declared-dependency mode for every
403
+ provider it creates. Provider factories may request only captured required/optional
404
+ edges; the root system owner retains administration and lifecycle ownership.
405
+ Connection viewers/runners and gateway runners must declare their existing optional
406
+ data-lake lookups. This changes dependency enforcement, not the scope of a gateway
407
+ operation or the authority of a platform handle.
408
+
409
+ Compilation must snapshot descriptor arrays (including explicit empty optional
410
+ edges) and exact factory registrations. A caller changing these after compile may
411
+ not change the factory/edges that launch uses. Exact registrations must describe
412
+ the same monikers and required/optional edges as their factories; mismatches and
413
+ global factories fail before runtime acquisition. Preserve custom factory execution
414
+ and aliases without reconstructing custom behavior from a class.
415
+
416
+ Keep one browser planner and one SDK locator. This slice does not retrofit optional
417
+ selection into the installed generic browser planner, nor claim that Actor lookup
418
+ scoping from newer actor/browser-kit sources has been adopted. Qualify default REST
419
+ and RPC viewer/runner boot, native account and borrowed signer composition, failed
420
+ undeclared acquisition rollback, metadata mutation, and the existing finalized-block
421
+ Actor path. Publication, release-family adoption and Crypto Cards runtime activation
422
+ remain separate gates.
423
+
424
+ Initial strict-profile execution also identifies existing optional index lookup in
425
+ SimpleAccountBalanceViewer and optional rewards sub-viewers in the RPC rewards
426
+ facade. The aggregate SimpleXyoViewer source also optionally queries mempool and
427
+ stake totals. These edges must be declared without changing their absence/error
428
+ semantics or weakening enforcement. Other non-selected legacy/local/EVM optional
429
+ paths require their own profile qualification.
430
+
431
+ The default browser provisioner now enables declared provider lookups. The named
432
+ REST/RPC profiles and compile-to-launch metadata capture are locally qualified in
433
+ [Browser provider scope evidence](https://github.com/XYOracleNetwork/xl1-protocol/blob/main/docs/evidence/BROWSER_PROVIDER_SCOPES_2026_09_17_EVIDENCE.md).
434
+ This qualifies provider factories; installed generic Actor/planner adoption and
435
+ application release-family qualification remain separate.
436
+
437
+ ## Packed engine-family qualification contract
438
+
439
+ Qualify the newer generic browser planner and Actor scopes through an isolated
440
+ consumer of public tarballs for XL1 protocol/SDK/browser-system, actor-model,
441
+ actor, actor-system, provider-model, provider and browser-kit. Pin every local
442
+ family member with workspace overrides and require strict peer installation;
443
+ never suppress peer mismatches or label local version strings as registry evidence.
444
+ Record archive hashes, fixture hashes, source commits and package-manager version.
445
+
446
+ Reuse the native XL1 browser suites through public package imports. Add direct
447
+ checks for generic optional selection, declared Actor lookups and scope revocation
448
+ through the XL1 custom provisioner. Keep one compiled graph and preserve provider
449
+ identity. If the Aries SDK 8/9 peer boundary fails, qualify compatibility in the
450
+ owning Actor packages before changing the consumer's package set. The harness may
451
+ use local artifacts while publication is pending, but must not modify the XL1 or
452
+ Crypto Cards installed dependency graph. Application release admission stays open.
453
+
454
+ The first packed family probe exposed two adoption defects: public Actor params
455
+ require the full SDK administrative locator, although the generic launcher supplies
456
+ only scoped lookup; and `getGateway()` chooses a Runner by inspecting the whole
457
+ system's bindings, even for a Viewer Actor. Before adoption, narrow Actor params
458
+ and catalog construction to the lookup/context surface. Select the gateway role
459
+ explicitly at Actor creation (Viewer by default, Runner for runner catalog entries),
460
+ capture that role before start, and never derive it from another Actor's bindings.
461
+ Mixed Viewer/Runner systems must preserve per-Actor declarations and provider
462
+ identity. The packed test must reject Viewer `getGatewayRunner()` access, keep a
463
+ sibling's provider live after one Actor stops, and close retained Actor lookups.
464
+
465
+ The local packed family now passes the named checks in
466
+ [Packed browser engine evidence](https://github.com/XYOracleNetwork/xl1-protocol/blob/main/docs/evidence/PACKED_BROWSER_ENGINE_2026_09_18_EVIDENCE.md).
467
+ Actor contexts require only scoped lookups and the catalog fixes gateway roles.
468
+ Publication and application adoption remain separate.
469
+
470
+ ## Package-native test entrypoint
471
+
472
+ The package `test` and `test:ci` commands must use the repository's configured
473
+ Node/Chromium unit projects, restricted to this package's source specs. They must
474
+ not collect the separately owned Playwright example E2E suites as Vitest tests.
475
+ Keep `test:e2e` as the explicit example-realm command; unit success does not imply
476
+ that those example realms ran. Qualify the correction through `pnpm xy test
477
+ @xyo-network/xl1-browser-system --strict` from the repository root.
478
+
479
+ The package-native entrypoint now passes the configured 78 Node/Chromium unit
480
+ executions and strict build; see [native test evidence](https://github.com/XYOracleNetwork/xl1-protocol/blob/main/docs/evidence/BROWSER_NATIVE_TESTS_2026_09_18_EVIDENCE.md).
481
+
482
+ ## Existing application SDK-family qualification
483
+
484
+ The upgraded graph must be qualified on Aries SDK 8.3 / XYO SDK 7.4 as well as
485
+ Aries SDK 9 / XYO SDK 8 before a consumer with an exact protocol hashing pin can
486
+ adopt it. Compatibility may broaden protocol/SDK peer ranges and the SDK runtime
487
+ range only after native builds, existing lifecycle regressions and strict public
488
+ packed graph tests pass on both families. Do not downgrade the native development
489
+ family, copy a second resolver, disable declared scopes, or alter a consumer's
490
+ protocol artifacts to make graph qualification pass.
491
+
492
+ The isolated fixture selects an explicit `current` or `next` family and verifies
493
+ actual runtime resolution from Actor, XL1 protocol and SDK package locations.
494
+ Every local archive remains hash-pinned. No peer exceptions, workspace/source
495
+ links, private runtime imports or application lockfile edits are permitted.
496
+ Existing generic browser planning, Viewer/Runner scope, provider identity,
497
+ cancellation and stop tests remain mandatory. Record the tested scope separately
498
+ from unrelated SDK/network implementations and registry publication. The consumer
499
+ must still qualify its real domain providers and retained-state operations.
@@ -1,5 +1,5 @@
1
1
  import type { BrowserActorSelection, BrowserSystemConfig } from '@ariestools/browser-kit';
2
- import type { ChainId, LocatorConfig, PrimeCachesMode } from '@xyo-network/xl1-sdk';
2
+ import type { ChainId, LocatorConfig, PrimeCachesMode, RestGatewayConfig } from '@xyo-network/xl1-sdk';
3
3
  /** Authored XL1 locator fields plus browser actor selections. */
4
4
  export interface Xl1BrowserSystemConfig extends LocatorConfig {
5
5
  readonly actors: readonly BrowserActorSelection[];
@@ -7,6 +7,11 @@ export interface Xl1BrowserSystemConfig extends LocatorConfig {
7
7
  /** Options for a standard REST-backed XL1 browser system. */
8
8
  export interface CreateXl1RestBrowserSystemConfigOptions {
9
9
  readonly actors?: readonly BrowserActorSelection[];
10
+ /**
11
+ * RestBlockViewer read-ahead (`readStep`) and per-block cache size (`maxCacheSize`), merged into the
12
+ * BlockViewer binding's `options`; the provider validates them in its actor realm.
13
+ */
14
+ readonly blockViewerOptions?: RestGatewayConfig['blockViewerOptions'];
10
15
  /** Optional staking-contract address pin; otherwise the finalized chain head supplies it. */
11
16
  readonly chainId?: ChainId;
12
17
  readonly dataLakeEndpoint?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Xl1BrowserConfig.d.ts","sourceRoot":"","sources":["../../src/Xl1BrowserConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EACV,OAAO,EAEP,aAAa,EACb,eAAe,EAGhB,MAAM,sBAAsB,CAAA;AAqC7B,iEAAiE;AACjE,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,QAAQ,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAA;CAClD;AAED,6DAA6D;AAC7D,MAAM,WAAW,uCAAuC;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAA;IAClD,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAA;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAA;CACzC;AAED,4DAA4D;AAC5D,MAAM,WAAW,sCAAsC;IACrD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAA;IAClD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAA;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAA;CACzC;AAED,gFAAgF;AAChF,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CACzB;AAED,2EAA2E;AAC3E,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAC1B;AAED,oFAAoF;AACpF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CACrB;AAED,wEAAwE;AACxE,MAAM,MAAM,sBAAsB,GAC5B,6BAA6B,GAC7B,8BAA8B,GAC9B,yBAAyB,CAAA;AAE/B,mGAAmG;AACnG,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,WAAW,CAAA;AAExD,iGAAiG;AACjG,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAWlF;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,sBAAsB,GAC7B,mBAAmB,CAMrB;AAED,iGAAiG;AACjG,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,uCAAuC,GAC/C,sBAAsB,CA8DxB;AAED,gGAAgG;AAChG,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,sCAAsC,GAC9C,sBAAsB,CA4CxB"}
1
+ {"version":3,"file":"Xl1BrowserConfig.d.ts","sourceRoot":"","sources":["../../src/Xl1BrowserConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EACV,OAAO,EAEP,aAAa,EACb,eAAe,EAEf,iBAAiB,EAClB,MAAM,sBAAsB,CAAA;AAqC7B,iEAAiE;AACjE,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,QAAQ,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAA;CAClD;AAED,6DAA6D;AAC7D,MAAM,WAAW,uCAAuC;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAA;IAClD;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,CAAA;IACrE,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAA;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAA;CACzC;AAED,4DAA4D;AAC5D,MAAM,WAAW,sCAAsC;IACrD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAA;IAClD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAA;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAA;CACzC;AAED,gFAAgF;AAChF,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CACzB;AAED,2EAA2E;AAC3E,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAC1B;AAED,oFAAoF;AACpF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CACrB;AAED,wEAAwE;AACxE,MAAM,MAAM,sBAAsB,GAC5B,6BAA6B,GAC7B,8BAA8B,GAC9B,yBAAyB,CAAA;AAE/B,mGAAmG;AACnG,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,WAAW,CAAA;AAExD,iGAAiG;AACjG,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAWlF;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,sBAAsB,GAC7B,mBAAmB,CAMrB;AAED,iGAAiG;AACjG,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,uCAAuC,GAC/C,sBAAsB,CAsExB;AAED,gGAAgG;AAChG,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,sCAAsC,GAC9C,sBAAsB,CA4CxB"}
@@ -18,6 +18,7 @@ export interface Xl1BrowserProviderDeclaration {
18
18
  readonly dependencies: readonly string[];
19
19
  readonly id: string;
20
20
  readonly monikers: readonly string[];
21
+ readonly optionalDependencies?: readonly string[];
21
22
  readonly xl1: Xl1ProviderDescriptor;
22
23
  }
23
24
  /** Non-serializable XL1 runtime homes supplied by the realm that owns the system. */
@@ -40,6 +41,8 @@ export declare function xl1BrowserProviderCandidates(): Xl1ProviderDescriptor[];
40
41
  * the provisioner after resolution rather than reconstructed from its class.
41
42
  */
42
43
  export declare function xl1BrowserProviderRegistrationFromFactory(factory: CreatableProviderFactory, id?: string): Xl1BrowserProviderRegistration;
44
+ /** Captures and checks exact runtime factory metadata before any resource acquisition. */
45
+ export declare function captureXl1BrowserProviderRegistration(registration: Xl1BrowserProviderRegistration): Xl1BrowserProviderRegistration;
43
46
  /** Adapts an XL1 provider catalog for browser-kit planning. */
44
47
  export declare function xl1BrowserProviderDeclarations(candidates?: readonly Xl1ProviderDescriptor[]): Xl1BrowserProviderDeclaration[];
45
48
  /** Creates the owner-realm provisioner that instantiates one resolved XL1 locator. */
@@ -1 +1 @@
1
- {"version":3,"file":"Xl1BrowserProvider.d.ts","sourceRoot":"","sources":["../../src/Xl1BrowserProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAGvE,OAAO,KAAK,EAEV,wBAAwB,EACxB,wBAAwB,EAExB,kBAAkB,IAAI,qBAAqB,EAC3C,8BAA8B,EAC/B,MAAM,sBAAsB,CAAA;AAY7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAEnE,kFAAkF;AAClF,eAAO,MAAM,mCAAmC,8BAA8B,CAAA;AAC9E,kFAAkF;AAClF,eAAO,MAAM,0BAA0B,qBAAqB,CAAA;AAC5D,iFAAiF;AACjF,eAAO,MAAM,gCAAgC,2BAA2B,CAAA;AAExE,sFAAsF;AACtF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAA;IAC1C,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAA;CAC3C;AAED,0FAA0F;AAC1F,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3C,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,QAAQ,CAAC,GAAG,EAAE,qBAAqB,CAAA;CACpC;AAED,qFAAqF;AACrF,MAAM,MAAM,gCAAgC,GAAG,IAAI,CACjD,wBAAwB,EACxB,QAAQ,GAAG,SAAS,CACrB,CAAA;AAED,8DAA8D;AAC9D,MAAM,WAAW,wCAAwC;IACvD,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAA;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,gCAAgC,CAAA;IACnD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,8BAA8B,EAAE,CAAA;CAC3E;AAED,gFAAgF;AAChF,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,qBAAqB,GAChC,6BAA6B,CAQ/B;AAED,kFAAkF;AAClF,wBAAgB,4BAA4B,IAAI,qBAAqB,EAAE,CAOtE;AAED;;;;;;GAMG;AACH,wBAAgB,yCAAyC,CACvD,OAAO,EAAE,wBAAwB,EACjC,EAAE,GAAE,MAA6B,GAChC,8BAA8B,CAShC;AAED,+DAA+D;AAC/D,wBAAgB,8BAA8B,CAC5C,UAAU,GAAE,SAAS,qBAAqB,EAAmC,GAC5E,6BAA6B,EAAE,CAEjC;AAED,sFAAsF;AACtF,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,wCAAwC,GAChD,wBAAwB,CAAC,8BAA8B,CAAC,CAqE1D"}
1
+ {"version":3,"file":"Xl1BrowserProvider.d.ts","sourceRoot":"","sources":["../../src/Xl1BrowserProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAGvE,OAAO,KAAK,EAEV,wBAAwB,EACxB,wBAAwB,EAExB,kBAAkB,IAAI,qBAAqB,EAC3C,8BAA8B,EAC/B,MAAM,sBAAsB,CAAA;AAa7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAEnE,kFAAkF;AAClF,eAAO,MAAM,mCAAmC,8BAA8B,CAAA;AAC9E,kFAAkF;AAClF,eAAO,MAAM,0BAA0B,qBAAqB,CAAA;AAC5D,iFAAiF;AACjF,eAAO,MAAM,gCAAgC,2BAA2B,CAAA;AAExE,sFAAsF;AACtF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAA;IAC1C,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAA;CAC3C;AAED,0FAA0F;AAC1F,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3C,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACjD,QAAQ,CAAC,GAAG,EAAE,qBAAqB,CAAA;CACpC;AAED,qFAAqF;AACrF,MAAM,MAAM,gCAAgC,GAAG,IAAI,CACjD,wBAAwB,EACxB,QAAQ,GAAG,SAAS,CACrB,CAAA;AAED,8DAA8D;AAC9D,MAAM,WAAW,wCAAwC;IACvD,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAA;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,gCAAgC,CAAA;IACnD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,8BAA8B,EAAE,CAAA;CAC3E;AAED,gFAAgF;AAChF,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,qBAAqB,GAChC,6BAA6B,CAgB/B;AAED,kFAAkF;AAClF,wBAAgB,4BAA4B,IAAI,qBAAqB,EAAE,CAOtE;AAED;;;;;;GAMG;AACH,wBAAgB,yCAAyC,CACvD,OAAO,EAAE,wBAAwB,EACjC,EAAE,GAAE,MAA6B,GAChC,8BAA8B,CAUhC;AAED,0FAA0F;AAC1F,wBAAgB,qCAAqC,CACnD,YAAY,EAAE,8BAA8B,GAC3C,8BAA8B,CAehC;AAED,+DAA+D;AAC/D,wBAAgB,8BAA8B,CAC5C,UAAU,GAAE,SAAS,qBAAqB,EAAmC,GAC5E,6BAA6B,EAAE,CAEjC;AAED,sFAAsF;AACtF,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,wCAAwC,GAChD,wBAAwB,CAAC,8BAA8B,CAAC,CAwE1D"}
@@ -1,16 +1,22 @@
1
1
  import type { ProviderActorParams } from '@ariestools/actor';
2
2
  import { ProviderActor } from '@ariestools/actor';
3
+ import type { RawInstanceLocator } from '@ariestools/actor-model';
3
4
  import type { BrowserActor, ResolvedBrowserProviderPlan, ResolvedBrowserSystemConfig } from '@ariestools/browser-kit';
4
5
  import { BrowserActorCatalog as BrowserActorCatalogInstance } from '@ariestools/browser-kit';
5
6
  import type { ProviderFactoryLocatorInstance, XyoGateway, XyoGatewayRunner } from '@xyo-network/xl1-sdk';
7
+ import { XyoGatewayMoniker, XyoGatewayRunnerMoniker } from '@xyo-network/xl1-sdk';
6
8
  export declare const Xl1BrowserSystemActorType: "xl1-system";
7
9
  export declare const Xl1BrowserSystemWithDataLakeActorType: "xl1-system-with-data-lake";
8
10
  export declare const Xl1BrowserRunnerSystemActorType: "xl1-runner-system";
9
11
  export declare const Xl1BrowserRunnerSystemWithDataLakeActorType: "xl1-runner-system-with-data-lake";
10
- export interface Xl1BrowserSystemActorParams extends ProviderActorParams<ProviderFactoryLocatorInstance, ResolvedBrowserSystemConfig, unknown, ResolvedBrowserProviderPlan> {
12
+ export interface Xl1BrowserSystemActorParams extends ProviderActorParams<RawInstanceLocator, ResolvedBrowserSystemConfig, unknown, ResolvedBrowserProviderPlan> {
13
+ /** Fixed by the catalog entry; a sibling Runner does not upgrade a Viewer. */
14
+ readonly gatewayMoniker?: typeof XyoGatewayMoniker | typeof XyoGatewayRunnerMoniker;
11
15
  }
12
16
  /** Resident actor representing one configured XL1 gateway system. */
13
17
  export declare class Xl1BrowserSystemActor extends ProviderActor<Xl1BrowserSystemActorParams> {
18
+ private _gatewayMoniker;
19
+ createHandler(): Promise<void>;
14
20
  /** Resolves the gateway owned by this actor's immutable provider system. */
15
21
  getGateway(): Promise<XyoGateway | XyoGatewayRunner>;
16
22
  /** Resolves the required write-capable gateway from a runner-system actor. */
@@ -20,6 +26,6 @@ export declare const Xl1BrowserSystemActorDependencies: readonly ["XyoGateway"];
20
26
  export declare const Xl1BrowserSystemWithDataLakeActorDependencies: readonly ["XyoGateway", "DataLakeViewer"];
21
27
  export declare const Xl1BrowserRunnerSystemActorDependencies: readonly ["XyoGatewayRunner"];
22
28
  export declare const Xl1BrowserRunnerSystemWithDataLakeActorDependencies: readonly ["XyoGatewayRunner", "DataLakeRunner", "DataLakeViewer"];
23
- /** Creates the default actor catalog and optionally installs application actors. */
29
+ /** Creates the default actor catalog and optionally installs app actors. */
24
30
  export declare function createXl1BrowserActorCatalog(): BrowserActorCatalogInstance<BrowserActor, ProviderFactoryLocatorInstance<import("@xyo-network/xl1-sdk").ProcessProviderContextType>>;
25
31
  //# sourceMappingURL=Xl1BrowserSystemActor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Xl1BrowserSystemActor.d.ts","sourceRoot":"","sources":["../../src/Xl1BrowserSystemActor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,mBAAmB,EACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EACV,YAAY,EACZ,2BAA2B,EAC3B,2BAA2B,EAC5B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,mBAAmB,IAAI,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAE5F,OAAO,KAAK,EACV,8BAA8B,EAC9B,UAAU,EACV,gBAAgB,EACjB,MAAM,sBAAsB,CAAA;AAQ7B,eAAO,MAAM,yBAAyB,EAAG,YAAqB,CAAA;AAC9D,eAAO,MAAM,qCAAqC,EAAG,2BAAoC,CAAA;AACzF,eAAO,MAAM,+BAA+B,EAAG,mBAA4B,CAAA;AAC3E,eAAO,MAAM,2CAA2C,EAAG,kCAA2C,CAAA;AAEtG,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB,CACtE,8BAA8B,EAC9B,2BAA2B,EAC3B,OAAO,EACP,2BAA2B,CAC5B;CAAG;AAEJ,qEAAqE;AACrE,qBAAa,qBAAsB,SAAQ,aAAa,CAAC,2BAA2B,CAAC;IACnF,4EAA4E;IACtE,UAAU,IAAI,OAAO,CAAC,UAAU,GAAG,gBAAgB,CAAC;IAU1D,8EAA8E;IACxE,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAMpD;AAED,eAAO,MAAM,iCAAiC,yBAA+B,CAAA;AAC7E,eAAO,MAAM,6CAA6C,2CAGhD,CAAA;AACV,eAAO,MAAM,uCAAuC,+BAAqC,CAAA;AACzF,eAAO,MAAM,mDAAmD,mEAItD,CAAA;AAEV,oFAAoF;AACpF,wBAAgB,4BAA4B,yIAmC3C"}
1
+ {"version":3,"file":"Xl1BrowserSystemActor.d.ts","sourceRoot":"","sources":["../../src/Xl1BrowserSystemActor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,mBAAmB,EACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,KAAK,EACV,YAAY,EACZ,2BAA2B,EAC3B,2BAA2B,EAC5B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,mBAAmB,IAAI,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAE5F,OAAO,KAAK,EACV,8BAA8B,EAC9B,UAAU,EACV,gBAAgB,EACjB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAGL,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,sBAAsB,CAAA;AAE7B,eAAO,MAAM,yBAAyB,EAAG,YAAqB,CAAA;AAC9D,eAAO,MAAM,qCAAqC,EAAG,2BAAoC,CAAA;AACzF,eAAO,MAAM,+BAA+B,EAAG,mBAA4B,CAAA;AAC3E,eAAO,MAAM,2CAA2C,EAAG,kCAA2C,CAAA;AAEtG,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB,CACtE,kBAAkB,EAClB,2BAA2B,EAC3B,OAAO,EACP,2BAA2B,CAC5B;IACC,8EAA8E;IAC9E,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,iBAAiB,GAAG,OAAO,uBAAuB,CAAA;CACpF;AAQD,qEAAqE;AACrE,qBAAa,qBAAsB,SAAQ,aAAa,CAAC,2BAA2B,CAAC;IACnF,OAAO,CAAC,eAAe,CAA+E;IAEvF,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7C,4EAA4E;IACtE,UAAU,IAAI,OAAO,CAAC,UAAU,GAAG,gBAAgB,CAAC;IAU1D,8EAA8E;IACxE,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC;CASpD;AAED,eAAO,MAAM,iCAAiC,yBAA+B,CAAA;AAC7E,eAAO,MAAM,6CAA6C,2CAGhD,CAAA;AACV,eAAO,MAAM,uCAAuC,+BAAqC,CAAA;AACzF,eAAO,MAAM,mDAAmD,mEAItD,CAAA;AAEV,4EAA4E;AAC5E,wBAAgB,4BAA4B,yIAqC3C"}
@@ -0,0 +1,35 @@
1
+ import type { PeriodicPassContext } from '@ariestools/actor';
2
+ import { ProviderActor } from '@ariestools/actor';
3
+ import type { FinalizedBlockStreamCursor, FinalizedBlockStreamNextBlockEvent } from '@xyo-network/xl1-sdk';
4
+ import type { Xl1BrowserSystemActorParams } from './Xl1BrowserSystemActor.ts';
5
+ /** Only these two providers are required; no stream provider or nested graph. */
6
+ export declare const Xl1FinalizedBlockActorDependencies: readonly ["BlockViewer", "FinalizationViewer"];
7
+ /** Consumer-owned resume checkpoint and bounded read controls. */
8
+ export interface Xl1FinalizedBlockActorParams extends Xl1BrowserSystemActorParams {
9
+ readonly after?: FinalizedBlockStreamCursor['hash'];
10
+ readonly fetchWindow?: number;
11
+ }
12
+ /**
13
+ * Gapless Actor-owned catch-up and polling over the shared resolved SDK graph.
14
+ * Hosts opt into inherited periodic scheduling or explicitly call runOnce/wake.
15
+ * Acknowledgement precedes cursor advancement; durable checkpoints belong to the
16
+ * consumer, which must tolerate redelivery after a failed handler or process loss.
17
+ */
18
+ export declare abstract class Xl1FinalizedBlockActor extends ProviderActor<Xl1FinalizedBlockActorParams> {
19
+ private _after?;
20
+ private _cursor?;
21
+ private _desync?;
22
+ private _fetchWindow?;
23
+ private _initialHead?;
24
+ private _walk?;
25
+ private _walkSignal?;
26
+ /** Last successfully acknowledged position, copied so callers cannot move it. */
27
+ get cursor(): FinalizedBlockStreamCursor | undefined;
28
+ createHandler(): Promise<void>;
29
+ protected isFatalError(error: Error): boolean;
30
+ protected run(context: PeriodicPassContext): Promise<void>;
31
+ private walkPass;
32
+ /** Await durable/idempotent consumer work here; never call and await own stop. */
33
+ protected abstract onBlock(event: FinalizedBlockStreamNextBlockEvent, context: PeriodicPassContext): Promise<void>;
34
+ }
35
+ //# sourceMappingURL=Xl1FinalizedBlockActor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Xl1FinalizedBlockActor.d.ts","sourceRoot":"","sources":["../../src/Xl1FinalizedBlockActor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAEV,0BAA0B,EAAE,kCAAkC,EAC/D,MAAM,sBAAsB,CAAA;AAM7B,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAE7E,iFAAiF;AACjF,eAAO,MAAM,kCAAkC,gDAA2D,CAAA;AAE1G,kEAAkE;AAClE,MAAM,WAAW,4BAA6B,SAAQ,2BAA2B;IAC/E,QAAQ,CAAC,KAAK,CAAC,EAAE,0BAA0B,CAAC,MAAM,CAAC,CAAA;IACnD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED;;;;;GAKG;AACH,8BAAsB,sBAAuB,SAAQ,aAAa,CAAC,4BAA4B,CAAC;IAC9F,OAAO,CAAC,MAAM,CAAC,CAAoC;IACnD,OAAO,CAAC,OAAO,CAAC,CAA4B;IAC5C,OAAO,CAAC,OAAO,CAAC,CAAiC;IACjD,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,OAAO,CAAC,YAAY,CAAC,CAAoC;IACzD,OAAO,CAAC,KAAK,CAAC,CAAoB;IAClC,OAAO,CAAC,WAAW,CAAC,CAAa;IAEjC,iFAAiF;IACjF,IAAI,MAAM,IAAI,0BAA0B,GAAG,SAAS,CAEnD;IAEc,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;cAM1B,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;cAI7B,GAAG,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;YAU3D,QAAQ;IAuCtB,kFAAkF;IAClF,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,kCAAkC,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CACnH"}
@@ -1 +1 @@
1
- {"version":3,"file":"compileXl1BrowserSystem.d.ts","sourceRoot":"","sources":["../../src/compileXl1BrowserSystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EACV,kBAAkB,IAAI,qBAAqB,EAC3C,8BAA8B,EAC/B,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAKnE,OAAO,EAEL,KAAK,6BAA6B,EAElC,KAAK,8BAA8B,EACpC,MAAM,yBAAyB,CAAA;AAGhC,oEAAoE;AACpE,MAAM,WAAW,8BAA8B,CAAC,MAAM,SAAS,YAAY,GAAG,YAAY;IACxF,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAA;IACnF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAA;IAC9D,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,8BAA8B,EAAE,CAAA;CAC3E;AAED;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB,CAAC,MAAM,SAAS,YAAY,GAAG,YAAY;IAClF,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAA;IAClF,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAC,6BAA6B,CAAC,CAAA;IAC5E,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAA;IACvC,QAAQ,CAAC,qBAAqB,EAAE,SAAS,8BAA8B,EAAE,CAAA;CAC1E;AAED,sFAAsF;AACtF,wBAAgB,uBAAuB,CAAC,MAAM,SAAS,YAAY,GAAG,YAAY,EAChF,OAAO,EAAE,8BAA8B,CAAC,MAAM,CAAC,GAC9C,wBAAwB,CAAC,MAAM,CAAC,CA2BlC"}
1
+ {"version":3,"file":"compileXl1BrowserSystem.d.ts","sourceRoot":"","sources":["../../src/compileXl1BrowserSystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EACV,kBAAkB,IAAI,qBAAqB,EAC3C,8BAA8B,EAC/B,MAAM,sBAAsB,CAAA;AAE7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAKnE,OAAO,EAGL,KAAK,6BAA6B,EAElC,KAAK,8BAA8B,EACpC,MAAM,yBAAyB,CAAA;AAGhC,oEAAoE;AACpE,MAAM,WAAW,8BAA8B,CAAC,MAAM,SAAS,YAAY,GAAG,YAAY;IACxF,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAA;IACnF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAA;IAC9D,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,8BAA8B,EAAE,CAAA;CAC3E;AAED;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB,CAAC,MAAM,SAAS,YAAY,GAAG,YAAY;IAClF,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAA;IAClF,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAC,6BAA6B,CAAC,CAAA;IAC5E,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAA;IACvC,QAAQ,CAAC,qBAAqB,EAAE,SAAS,8BAA8B,EAAE,CAAA;CAC1E;AAED,sFAAsF;AACtF,wBAAgB,uBAAuB,CAAC,MAAM,SAAS,YAAY,GAAG,YAAY,EAChF,OAAO,EAAE,8BAA8B,CAAC,MAAM,CAAC,GAC9C,wBAAwB,CAAC,MAAM,CAAC,CA2BlC"}
@@ -5,4 +5,5 @@ export * from './launchXl1BrowserSystem.ts';
5
5
  export * from './Xl1BrowserConfig.ts';
6
6
  export * from './Xl1BrowserProvider.ts';
7
7
  export * from './Xl1BrowserSystemActor.ts';
8
+ export * from './Xl1FinalizedBlockActor.ts';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA;AAC5C,cAAc,qCAAqC,CAAA;AACnD,cAAc,oCAAoC,CAAA;AAClD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,4BAA4B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA;AAC5C,cAAc,qCAAqC,CAAA;AACnD,cAAc,oCAAoC,CAAA;AAClD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,6BAA6B,CAAA"}
@@ -32,6 +32,7 @@ import { createResolvedBrowserProviderPlan } from "@ariestools/browser-kit";
32
32
  import { createResolvedProviderSystem } from "@ariestools/provider-model";
33
33
  import {
34
34
  allProviderCandidates,
35
+ captureCreatableProviderFactory,
35
36
  compileLocatorConfig,
36
37
  providerCandidateFromClass,
37
38
  ProviderFactoryLocator,
@@ -44,12 +45,20 @@ var SimpleXyoConnectionViewerProviderId = "SimpleXyoConnectionViewer";
44
45
  var SimpleXyoGatewayProviderId = "SimpleXyoGateway";
45
46
  var BrowserSimpleXyoSignerProviderId = "BrowserSimpleXyoSigner";
46
47
  function xl1BrowserProviderDeclaration(descriptor) {
47
- return Object.freeze({
48
+ const captured = Object.freeze({
49
+ ...descriptor,
48
50
  connectionTypes: Object.freeze([...descriptor.connectionTypes]),
49
- dependencies: Object.freeze([...descriptor.dependencies ?? []]),
50
- id: descriptor.id,
51
- monikers: Object.freeze([...descriptor.satisfies]),
52
- xl1: descriptor
51
+ dependencies: Object.freeze([...descriptor.dependencies ?? descriptor.creatableProvider.dependencies]),
52
+ optionalDependencies: Object.freeze([...descriptor.optionalDependencies ?? descriptor.creatableProvider.optionalDependencies ?? []]),
53
+ satisfies: Object.freeze([...descriptor.satisfies])
54
+ });
55
+ return Object.freeze({
56
+ connectionTypes: captured.connectionTypes,
57
+ dependencies: captured.dependencies,
58
+ id: captured.id,
59
+ monikers: captured.satisfies,
60
+ optionalDependencies: captured.optionalDependencies,
61
+ xl1: captured
53
62
  });
54
63
  }
55
64
  function xl1BrowserProviderCandidates() {
@@ -65,22 +74,37 @@ function xl1BrowserProviderRegistrationFromFactory(factory, id = factory.provide
65
74
  descriptor: {
66
75
  ...providerCandidateFromClass(factory.creatableProvider, id),
67
76
  connectionTypes: ["none"],
68
- dependencies: [...factory.dependencies]
77
+ dependencies: [...factory.dependencies],
78
+ optionalDependencies: [...factory.optionalDependencies ?? factory.creatableProvider.optionalDependencies ?? []]
69
79
  },
70
80
  factory
71
81
  };
72
82
  }
83
+ function captureXl1BrowserProviderRegistration(registration) {
84
+ const factory = captureCreatableProviderFactory(registration.factory);
85
+ const descriptor = xl1BrowserProviderDeclaration(registration.descriptor).xl1;
86
+ if (factory.scope === "global") throw new Error(`Browser provider [${descriptor.id}] cannot use global factory scope`);
87
+ const same = (left, right) => {
88
+ const leftSet = new Set(left);
89
+ const rightSet = new Set(right);
90
+ return leftSet.size === rightSet.size && left.every((value) => rightSet.has(value));
91
+ };
92
+ if (!same(descriptor.satisfies, factory.monikers) || !same(descriptor.dependencies ?? [], factory.dependencies) || !same(descriptor.optionalDependencies ?? [], factory.optionalDependencies ?? [])) {
93
+ throw new Error(`Browser provider [${descriptor.id}] descriptor differs from its exact factory dependencies or monikers`);
94
+ }
95
+ return Object.freeze({ descriptor, factory });
96
+ }
73
97
  function xl1BrowserProviderDeclarations(candidates = xl1BrowserProviderCandidates()) {
74
98
  return candidates.map(xl1BrowserProviderDeclaration);
75
99
  }
76
100
  function createXl1BrowserSystemProvisioner(options) {
101
+ const registeredFactories = new Map(
102
+ options.providerRegistrations?.map((registration) => {
103
+ const captured = captureXl1BrowserProviderRegistration(registration);
104
+ return [captured.descriptor.id, captured.factory];
105
+ })
106
+ );
77
107
  return async (input) => {
78
- const registeredFactories = new Map(
79
- options.providerRegistrations?.map((registration) => [
80
- registration.descriptor.id,
81
- registration.factory
82
- ])
83
- );
84
108
  const providerBindings = mergeResolvedProviderBindings(
85
109
  options.config.providerBindings,
86
110
  input.compiled.config.providerBindings
@@ -95,21 +119,25 @@ function createXl1BrowserSystemProvisioner(options) {
95
119
  singletons: {},
96
120
  ...options.context,
97
121
  config: locatorConfig
98
- });
99
- for (const selected of input.compiled.resolution.selected) {
100
- const declaration = selected;
101
- const descriptor = declaration.xl1;
102
- locator.register(registeredFactories.get(descriptor.id) ?? descriptor.creatableProvider.factory([
103
- ...descriptor.dependencies ?? descriptor.creatableProvider.dependencies
104
- ]));
105
- }
106
- locator.freeze();
122
+ }, {}, false, { dependencyAccess: "declared" });
107
123
  try {
124
+ for (const selected of input.compiled.resolution.selected) {
125
+ const declaration = selected;
126
+ const descriptor = declaration.xl1;
127
+ const factory = registeredFactories.get(descriptor.id) ?? descriptor.creatableProvider.factory([...declaration.dependencies], {}, declaration.optionalDependencies ?? []);
128
+ locator.register(captureXl1BrowserProviderRegistration({ descriptor, factory }).factory);
129
+ }
130
+ locator.freeze();
108
131
  for (const moniker of input.compiled.declaration.dependencies) {
109
132
  await locator.getInstance(moniker);
110
133
  }
111
134
  } catch (startError) {
112
- const releaseError = await releaseProviderFactoryLocator(locator).catch((error) => error);
135
+ let releaseError;
136
+ try {
137
+ await releaseProviderFactoryLocator(locator);
138
+ } catch (error) {
139
+ releaseError = error;
140
+ }
113
141
  if (releaseError !== void 0) {
114
142
  throw new AggregateError(
115
143
  [startError, releaseError],
@@ -169,13 +197,22 @@ var Xl1BrowserSystemActorType = "xl1-system";
169
197
  var Xl1BrowserSystemWithDataLakeActorType = "xl1-system-with-data-lake";
170
198
  var Xl1BrowserRunnerSystemActorType = "xl1-runner-system";
171
199
  var Xl1BrowserRunnerSystemWithDataLakeActorType = "xl1-runner-system-with-data-lake";
200
+ var Xl1BrowserActorDependencyError = class extends Error {
201
+ code = "dependency-undeclared";
202
+ name = "Xl1BrowserActorDependencyError";
203
+ };
172
204
  var Xl1BrowserSystemActor = class extends ProviderActor {
205
+ _gatewayMoniker = XyoGatewayMoniker;
206
+ async createHandler() {
207
+ this._gatewayMoniker = this.params.gatewayMoniker ?? XyoGatewayMoniker;
208
+ await super.createHandler();
209
+ }
173
210
  /** Resolves the gateway owned by this actor's immutable provider system. */
174
211
  async getGateway() {
175
212
  if (this.status !== "started") {
176
213
  throw new Error(`XL1 browser system actor is not running (status: ${this.status})`);
177
214
  }
178
- if (this.providerSystem.resolution.bindings[XyoGatewayRunnerMoniker] !== void 0) {
215
+ if (this._gatewayMoniker === XyoGatewayRunnerMoniker) {
179
216
  return await this.getProvider(XyoGatewayRunnerMoniker);
180
217
  }
181
218
  return await this.getProvider(XyoGatewayMoniker);
@@ -185,6 +222,9 @@ var Xl1BrowserSystemActor = class extends ProviderActor {
185
222
  if (this.status !== "started") {
186
223
  throw new Error(`XL1 browser system actor is not running (status: ${this.status})`);
187
224
  }
225
+ if (this._gatewayMoniker !== XyoGatewayRunnerMoniker) {
226
+ throw new Xl1BrowserActorDependencyError(`XL1 browser system actor [${this.name}] does not declare ${XyoGatewayRunnerMoniker}`);
227
+ }
188
228
  return await this.getProvider(XyoGatewayRunnerMoniker);
189
229
  }
190
230
  };
@@ -201,27 +241,28 @@ var Xl1BrowserRunnerSystemWithDataLakeActorDependencies = [
201
241
  ];
202
242
  function createXl1BrowserActorCatalog() {
203
243
  const catalog = new BrowserActorCatalogInstance();
204
- const create = async (id, providerContext) => await Xl1BrowserSystemActor.create({
244
+ const create = async (id, providerContext, gatewayMoniker) => await Xl1BrowserSystemActor.create({
245
+ gatewayMoniker,
205
246
  name: id,
206
247
  providerContext
207
248
  });
208
249
  catalog.register({
209
- create: async ({ id, providerContext }) => await create(id, providerContext),
250
+ create: async ({ id, providerContext }) => await create(id, providerContext, XyoGatewayMoniker),
210
251
  dependencies: Xl1BrowserSystemActorDependencies,
211
252
  type: Xl1BrowserSystemActorType
212
253
  });
213
254
  catalog.register({
214
- create: async ({ id, providerContext }) => await create(id, providerContext),
255
+ create: async ({ id, providerContext }) => await create(id, providerContext, XyoGatewayMoniker),
215
256
  dependencies: Xl1BrowserSystemWithDataLakeActorDependencies,
216
257
  type: Xl1BrowserSystemWithDataLakeActorType
217
258
  });
218
259
  catalog.register({
219
- create: async ({ id, providerContext }) => await create(id, providerContext),
260
+ create: async ({ id, providerContext }) => await create(id, providerContext, XyoGatewayRunnerMoniker),
220
261
  dependencies: Xl1BrowserRunnerSystemActorDependencies,
221
262
  type: Xl1BrowserRunnerSystemActorType
222
263
  });
223
264
  catalog.register({
224
- create: async ({ id, providerContext }) => await create(id, providerContext),
265
+ create: async ({ id, providerContext }) => await create(id, providerContext, XyoGatewayRunnerMoniker),
225
266
  dependencies: Xl1BrowserRunnerSystemWithDataLakeActorDependencies,
226
267
  type: Xl1BrowserRunnerSystemWithDataLakeActorType
227
268
  });
@@ -294,6 +335,13 @@ function createXl1RestBrowserSystemConfig(options) {
294
335
  primeCaches: options.primeCaches
295
336
  };
296
337
  }
338
+ const blockViewerOptions = definedOptions(options.blockViewerOptions);
339
+ if (blockViewerOptions !== void 0) {
340
+ providerBindings[BlockViewerMoniker] = {
341
+ ...providerBindings[BlockViewerMoniker],
342
+ options: { ...providerBindings[BlockViewerMoniker]?.options, ...blockViewerOptions }
343
+ };
344
+ }
297
345
  return parseXl1BrowserSystemConfig({
298
346
  actors: options.actors ?? [{
299
347
  host: options.host,
@@ -393,6 +441,11 @@ function addRunnerBindings(connections, providerBindings, rpcUrl, signer, hasDat
393
441
  }
394
442
  }
395
443
  }
444
+ function definedOptions(options) {
445
+ if (options === void 0) return void 0;
446
+ const entries = Object.entries(options).filter(([, value]) => value !== void 0);
447
+ return entries.length === 0 ? void 0 : Object.fromEntries(entries);
448
+ }
396
449
  function xl1BrowserSystemActorType(isRunner, hasDataLake) {
397
450
  if (isRunner) {
398
451
  return hasDataLake ? Xl1BrowserRunnerSystemWithDataLakeActorType : Xl1BrowserRunnerSystemActorType;
@@ -425,7 +478,7 @@ function isRecord(value) {
425
478
  function compileXl1BrowserSystem(options) {
426
479
  const config = parseXl1BrowserSystemConfig(options.config);
427
480
  const actorCatalog = options.actorCatalog ?? createXl1BrowserActorCatalog();
428
- const providerRegistrations = Object.freeze([...options.providerRegistrations ?? []]);
481
+ const providerRegistrations = Object.freeze((options.providerRegistrations ?? []).map(captureXl1BrowserProviderRegistration));
429
482
  const providerCandidates = mergedProviderCandidates(
430
483
  options.providerCandidates ?? xl1BrowserProviderCandidates(),
431
484
  providerRegistrations
@@ -447,7 +500,7 @@ function mergedProviderCandidates(candidates, registrations) {
447
500
  for (const registration of registrations) {
448
501
  result.set(registration.descriptor.id, registration.descriptor);
449
502
  }
450
- return [...result.values()];
503
+ return result.values().toArray();
451
504
  }
452
505
 
453
506
  // src/launchCompiledXl1BrowserSystem.ts
@@ -491,6 +544,7 @@ async function launchXl1BrowserSystem(options) {
491
544
  async function launchXl1BrowserGatewaySystem(options) {
492
545
  const signing = browserSignerRuntime(options);
493
546
  const config = options.transport === "rest" ? createXl1RestBrowserSystemConfig({
547
+ blockViewerOptions: options.blockViewerOptions,
494
548
  chainId: options.chainId,
495
549
  dataLakeEndpoint: options.dataLakeEndpoint,
496
550
  endpoint: options.endpoint,
@@ -506,15 +560,29 @@ async function launchXl1BrowserGatewaySystem(options) {
506
560
  primeCaches: options.primeCaches,
507
561
  signer: signing.config
508
562
  });
509
- const session = await launchXl1BrowserSystem({
510
- config,
511
- context: signing.context,
512
- host: options.host,
513
- identity: options.identity,
514
- providerCandidates: options.providerCandidates,
515
- providerRegistrations: signing.registrations,
516
- readyTimeoutMs: options.readyTimeoutMs
517
- });
563
+ const ownedHandles = signing.ownedConnectionHandles;
564
+ let session;
565
+ try {
566
+ session = await launchXl1BrowserSystem({
567
+ config,
568
+ context: signing.context,
569
+ host: options.host,
570
+ identity: options.identity,
571
+ providerCandidates: options.providerCandidates,
572
+ providerRegistrations: signing.registrations,
573
+ readyTimeoutMs: options.readyTimeoutMs
574
+ });
575
+ } catch (launchError) {
576
+ const [closeResult] = await Promise.allSettled([ownedHandles?.close?.()]);
577
+ if (closeResult.status === "rejected") {
578
+ throw new AggregateError(
579
+ [launchError, closeResult.reason],
580
+ "XL1 browser system failed to launch and close its connection handles",
581
+ { cause: launchError }
582
+ );
583
+ }
584
+ throw launchError;
585
+ }
518
586
  try {
519
587
  const actor = session.actors.find((candidate) => candidate instanceof Xl1BrowserSystemActor);
520
588
  if (actor === void 0) throw new Error("XL1 browser system actor was not created");
@@ -524,16 +592,22 @@ async function launchXl1BrowserGatewaySystem(options) {
524
592
  actors: session.actors,
525
593
  gateway,
526
594
  identity: session.identity,
527
- stop: async () => await session.stop(),
595
+ stop: async () => {
596
+ const errors = await stopSessionAndHandles(session, ownedHandles);
597
+ if (errors.length === 1) throw errors[0];
598
+ if (errors.length > 1) {
599
+ throw new AggregateError(errors, "XL1 browser system and its connection handles failed to stop", { cause: errors[0] });
600
+ }
601
+ },
528
602
  system: session.system,
529
603
  whenFailed: () => session.whenFailed(),
530
604
  whenTerminal: () => session.whenTerminal()
531
605
  };
532
606
  } catch (launchError) {
533
- const [stopResult] = await Promise.allSettled([session.stop()]);
534
- if (stopResult.status === "rejected") {
607
+ const cleanupErrors = await stopSessionAndHandles(session, ownedHandles);
608
+ if (cleanupErrors.length > 0) {
535
609
  throw new AggregateError(
536
- [launchError, stopResult.reason],
610
+ [launchError, ...cleanupErrors],
537
611
  "XL1 browser system failed to expose a gateway and stop cleanly",
538
612
  { cause: launchError }
539
613
  );
@@ -541,6 +615,11 @@ async function launchXl1BrowserGatewaySystem(options) {
541
615
  throw launchError;
542
616
  }
543
617
  }
618
+ async function stopSessionAndHandles(session, handles) {
619
+ const [stopResult] = await Promise.allSettled([session.stop()]);
620
+ const [closeResult] = await Promise.allSettled([handles?.close?.()]);
621
+ return [stopResult, closeResult].flatMap((result) => result.status === "rejected" ? [result.reason] : []);
622
+ }
544
623
  function browserSignerRuntime(options) {
545
624
  if (options.signerFactory !== void 0) {
546
625
  const registration = xl1BrowserProviderRegistrationFromFactory(
@@ -568,7 +647,8 @@ function browserSignerRuntime(options) {
568
647
  };
569
648
  }
570
649
  if (options.signerTransport !== void 0) {
571
- const connectionHandles = options.context?.connectionHandles ?? new SimpleConnectionHandleCache();
650
+ const suppliedHandles = options.context?.connectionHandles;
651
+ const connectionHandles = suppliedHandles ?? new SimpleConnectionHandleCache();
572
652
  connectionHandles.set(`rpc-transport:${XyoSignerMoniker2}`, options.signerTransport);
573
653
  return {
574
654
  config: { type: "rpc" },
@@ -577,11 +657,92 @@ function browserSignerRuntime(options) {
577
657
  singletons: {},
578
658
  ...options.context,
579
659
  connectionHandles
580
- }
660
+ },
661
+ ...suppliedHandles === void 0 && { ownedConnectionHandles: connectionHandles }
581
662
  };
582
663
  }
583
664
  return { context: options.context };
584
665
  }
666
+
667
+ // src/Xl1FinalizedBlockActor.ts
668
+ import { ProviderActor as ProviderActor2 } from "@ariestools/actor";
669
+ import {
670
+ advanceFinalizedBlockCursor,
671
+ BlockViewerMoniker as BlockViewerMoniker2,
672
+ createFinalizedBlockWalk,
673
+ FinalizationViewerMoniker as FinalizationViewerMoniker2,
674
+ finalizedBlockCursor,
675
+ FinalizedBlockStreamDesyncError
676
+ } from "@xyo-network/xl1-sdk";
677
+ var Xl1FinalizedBlockActorDependencies = [BlockViewerMoniker2, FinalizationViewerMoniker2];
678
+ var Xl1FinalizedBlockActor = class extends ProviderActor2 {
679
+ _after;
680
+ _cursor;
681
+ _desync;
682
+ _fetchWindow;
683
+ _initialHead;
684
+ _walk;
685
+ _walkSignal;
686
+ /** Last successfully acknowledged position, copied so callers cannot move it. */
687
+ get cursor() {
688
+ return this._cursor === void 0 ? void 0 : { ...this._cursor };
689
+ }
690
+ async createHandler() {
691
+ this._after = this.params.after;
692
+ this._fetchWindow = this.params.fetchWindow;
693
+ await super.createHandler();
694
+ }
695
+ isFatalError(error) {
696
+ return error instanceof FinalizedBlockStreamDesyncError;
697
+ }
698
+ async run(context) {
699
+ if (this._desync !== void 0) throw this._desync;
700
+ try {
701
+ await this.walkPass(context);
702
+ } catch (error) {
703
+ if (error instanceof FinalizedBlockStreamDesyncError) this._desync = error;
704
+ throw error;
705
+ }
706
+ }
707
+ async walkPass(context) {
708
+ const { signal } = context;
709
+ signal.throwIfAborted();
710
+ if (this._walk === void 0 || this._walkSignal !== signal) {
711
+ const blocks = await this.getProvider(BlockViewerMoniker2);
712
+ signal.throwIfAborted();
713
+ const finalization = await this.getProvider(FinalizationViewerMoniker2);
714
+ signal.throwIfAborted();
715
+ this._walk = createFinalizedBlockWalk({ blocks, finalization }, { fetchWindow: this._fetchWindow }, signal);
716
+ this._walkSignal = signal;
717
+ }
718
+ const walk = this._walk;
719
+ if (this._cursor === void 0 && this._after !== void 0) this._cursor = await walk.checkpoint(this._after);
720
+ if (this._cursor === void 0) {
721
+ if (this._initialHead === void 0) {
722
+ const head2 = await walk.head();
723
+ this._initialHead = { block: head2, head: head2[0].block };
724
+ }
725
+ const next = finalizedBlockCursor(this._initialHead.block);
726
+ await this.onBlock(this._initialHead, context);
727
+ signal.throwIfAborted();
728
+ this._cursor = next;
729
+ this._initialHead = void 0;
730
+ return;
731
+ }
732
+ const head = await walk.head();
733
+ const headNumber = head[0].block;
734
+ while (this._cursor.block < headNumber) {
735
+ const window = await walk.next(this._cursor, headNumber);
736
+ for (const block of window) {
737
+ signal.throwIfAborted();
738
+ const next = advanceFinalizedBlockCursor(this._cursor, block);
739
+ await this.onBlock({ block, head: headNumber }, context);
740
+ signal.throwIfAborted();
741
+ this._cursor = next;
742
+ }
743
+ }
744
+ }
745
+ };
585
746
  export {
586
747
  BrowserSimpleXyoSignerProviderId,
587
748
  SimpleXyoConnectionViewerProviderId,
@@ -595,6 +756,9 @@ export {
595
756
  Xl1BrowserSystemActorType,
596
757
  Xl1BrowserSystemWithDataLakeActorDependencies,
597
758
  Xl1BrowserSystemWithDataLakeActorType,
759
+ Xl1FinalizedBlockActor,
760
+ Xl1FinalizedBlockActorDependencies,
761
+ captureXl1BrowserProviderRegistration,
598
762
  compileXl1BrowserSystem,
599
763
  createXl1BrowserActorCatalog,
600
764
  createXl1BrowserSystemProvisioner,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/compileXl1BrowserSystem.ts", "../../src/Xl1BrowserConfig.ts", "../../src/Xl1BrowserProvider.ts", "../../src/Xl1BrowserSystemActor.ts", "../../src/launchCompiledXl1BrowserSystem.ts", "../../src/launchXl1BrowserGatewaySystem.ts", "../../src/launchXl1BrowserSystem.ts"],
4
- "sourcesContent": ["import type {\n BrowserActor,\n BrowserActorCatalog,\n CompiledBrowserSystem,\n} from '@ariestools/browser-kit'\nimport { compileBrowserSystem } from '@ariestools/browser-kit'\nimport type {\n ProviderDescriptor as Xl1ProviderDescriptor,\n ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-sdk'\n\nimport type { Xl1BrowserSystemConfig } from './Xl1BrowserConfig.ts'\nimport {\n parseXl1BrowserSystemConfig,\n toBrowserSystemConfig,\n} from './Xl1BrowserConfig.ts'\nimport {\n xl1BrowserProviderCandidates,\n type Xl1BrowserProviderDeclaration,\n xl1BrowserProviderDeclarations,\n type Xl1BrowserProviderRegistration,\n} from './Xl1BrowserProvider.ts'\nimport { createXl1BrowserActorCatalog } from './Xl1BrowserSystemActor.ts'\n\n/** Inputs that deterministically compile one XL1 browser system. */\nexport interface CompileXl1BrowserSystemOptions<TActor extends BrowserActor = BrowserActor> {\n readonly actorCatalog?: BrowserActorCatalog<TActor, ProviderFactoryLocatorInstance>\n readonly config: unknown\n readonly providerCandidates?: readonly Xl1ProviderDescriptor[]\n readonly providerRegistrations?: readonly Xl1BrowserProviderRegistration[]\n}\n\n/**\n * One owner-local XL1 browser plan before providers or actors are created.\n *\n * The catalog and provider registrations retain executable factories and must\n * not cross a structured-clone boundary.\n */\nexport interface CompiledXl1BrowserSystem<TActor extends BrowserActor = BrowserActor> {\n readonly actorCatalog: BrowserActorCatalog<TActor, ProviderFactoryLocatorInstance>\n readonly browserSystem: CompiledBrowserSystem<Xl1BrowserProviderDeclaration>\n readonly config: Xl1BrowserSystemConfig\n readonly providerRegistrations: readonly Xl1BrowserProviderRegistration[]\n}\n\n/** Parses and resolves one XL1 browser system without acquiring runtime resources. */\nexport function compileXl1BrowserSystem<TActor extends BrowserActor = BrowserActor>(\n options: CompileXl1BrowserSystemOptions<TActor>,\n): CompiledXl1BrowserSystem<TActor> {\n const config = parseXl1BrowserSystemConfig(options.config)\n const actorCatalog = options.actorCatalog\n ?? createXl1BrowserActorCatalog() as BrowserActorCatalog<\n TActor,\n ProviderFactoryLocatorInstance\n >\n const providerRegistrations = Object.freeze([...(options.providerRegistrations ?? [])])\n const providerCandidates = mergedProviderCandidates(\n options.providerCandidates ?? xl1BrowserProviderCandidates(),\n providerRegistrations,\n )\n const browserSystem = compileBrowserSystem<\n TActor,\n ProviderFactoryLocatorInstance,\n Xl1BrowserProviderDeclaration\n >({\n actorCatalog,\n config: toBrowserSystemConfig(config),\n providerDescriptors: xl1BrowserProviderDeclarations(providerCandidates),\n })\n return Object.freeze({\n actorCatalog,\n browserSystem,\n config,\n providerRegistrations,\n })\n}\n\nfunction mergedProviderCandidates(\n candidates: readonly Xl1ProviderDescriptor[],\n registrations: readonly Xl1BrowserProviderRegistration[],\n): Xl1ProviderDescriptor[] {\n const result = new Map(candidates.map(candidate => [candidate.id, candidate]))\n for (const registration of registrations) {\n result.set(registration.descriptor.id, registration.descriptor)\n }\n return [...result.values()]\n}\n", "import type {\n BrowserActorSelection,\n BrowserSystemConfig,\n} from '@ariestools/browser-kit'\nimport { parseBrowserSystemConfig } from '@ariestools/browser-kit'\nimport type {\n ChainId,\n ConnectionsConfig,\n LocatorConfig,\n PrimeCachesMode,\n ProviderBindingsConfig,\n RestGatewayConfig,\n} from '@xyo-network/xl1-sdk'\nimport {\n BlockViewerMoniker,\n ChainContractViewerMoniker,\n ChainStateViewerMoniker,\n DataLakeRunnerMoniker,\n DataLakeViewerMoniker,\n FinalizationViewerMoniker,\n IndexViewerMoniker,\n MempoolRunnerMoniker,\n NetworkStakeStepRewardsByPositionViewerMoniker,\n parseLocatorConfigFields,\n restConnectionFromS3Bucket,\n restGatewayConfigFromEndpoint,\n SIGNER_RPC_CONNECTION,\n StakeEventsViewerMoniker,\n StakeViewerMoniker,\n synthesizeRpcConnectionBindings,\n XyoConnectionMoniker,\n XyoGatewayMoniker,\n XyoGatewayRunnerMoniker,\n XyoRunnerMoniker,\n XyoSignerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport {\n BrowserSimpleXyoSignerProviderId,\n SimpleXyoConnectionViewerProviderId,\n SimpleXyoGatewayProviderId,\n} from './Xl1BrowserProvider.ts'\nimport {\n Xl1BrowserRunnerSystemActorType,\n Xl1BrowserRunnerSystemWithDataLakeActorType,\n Xl1BrowserSystemActorType,\n Xl1BrowserSystemWithDataLakeActorType,\n} from './Xl1BrowserSystemActor.ts'\n\n/** Authored XL1 locator fields plus browser actor selections. */\nexport interface Xl1BrowserSystemConfig extends LocatorConfig {\n readonly actors: readonly BrowserActorSelection[]\n}\n\n/** Options for a standard REST-backed XL1 browser system. */\nexport interface CreateXl1RestBrowserSystemConfigOptions {\n readonly actors?: readonly BrowserActorSelection[]\n /** Optional staking-contract address pin; otherwise the finalized chain head supplies it. */\n readonly chainId?: ChainId\n readonly dataLakeEndpoint?: string\n readonly endpoint: string\n readonly host?: string\n readonly layout?: Xl1RestEndpointLayout\n readonly primeCaches?: PrimeCachesMode\n readonly rpcUrl?: string\n readonly signer?: Xl1BrowserSignerConfig\n}\n\n/** Options for a standard RPC-backed XL1 browser system. */\nexport interface CreateXl1RpcBrowserSystemConfigOptions {\n readonly actors?: readonly BrowserActorSelection[]\n readonly dataLakeEndpoint?: string\n readonly endpoint: string\n readonly host?: string\n readonly primeCaches?: PrimeCachesMode\n readonly signer?: Xl1BrowserSignerConfig\n}\n\n/** Selects the built-in account signer supplied through the runtime context. */\nexport interface Xl1BrowserAccountSignerConfig {\n readonly type: 'account'\n}\n\n/** Selects a connectionless signer factory supplied by the owner realm. */\nexport interface Xl1BrowserProviderSignerConfig {\n readonly provider: string\n readonly type: 'provider'\n}\n\n/** Selects a JsonRpc signer whose transport is supplied through runtime handles. */\nexport interface Xl1BrowserRpcSignerConfig {\n readonly type: 'rpc'\n}\n\n/** Serializable signer selection for a write-capable browser system. */\nexport type Xl1BrowserSignerConfig\n = | Xl1BrowserAccountSignerConfig\n | Xl1BrowserProviderSignerConfig\n | Xl1BrowserRpcSignerConfig\n\n/** How the REST gateway's finalized, chain-state, and index URLs are derived from its endpoint. */\nexport type Xl1RestEndpointLayout = 'path' | 'subdomain'\n\n/** Parses XL1 locator fields and browser actor selections without importing code from config. */\nexport function parseXl1BrowserSystemConfig(input: unknown): Xl1BrowserSystemConfig {\n const locatorConfig = parseLocatorConfigFields(input)\n const browserConfig = parseBrowserSystemConfig({\n actors: isRecord(input) ? input.actors : undefined,\n connections: locatorConfig.connections,\n providerBindings: toBrowserProviderBindings(locatorConfig.providerBindings),\n })\n return Object.freeze({\n ...locatorConfig,\n actors: Object.freeze([...(browserConfig.actors ?? [])]),\n })\n}\n\n/** Projects the XL1 config onto the neutral fields browser-kit compiles. */\nexport function toBrowserSystemConfig(\n config: Xl1BrowserSystemConfig,\n): BrowserSystemConfig {\n return {\n actors: config.actors,\n connections: config.connections,\n providerBindings: toBrowserProviderBindings(config.providerBindings),\n }\n}\n\n/** Creates explicit REST connections and provider bindings for one XL1 browser gateway actor. */\nexport function createXl1RestBrowserSystemConfig(\n options: CreateXl1RestBrowserSystemConfigOptions,\n): Xl1BrowserSystemConfig {\n const buckets = options.layout === 'path'\n ? restGatewayConfigFromPathEndpoint(options.endpoint)\n : restGatewayConfigFromEndpoint(options.endpoint)\n const finalized = buckets.finalized\n if (finalized === undefined) throw new Error('XL1 REST gateway has no finalized bucket')\n\n const connections: ConnectionsConfig = {\n 'rest-chain-state': restConnectionFromS3Bucket(buckets.chainState ?? finalized),\n 'rest-finalized': restConnectionFromS3Bucket(finalized),\n 'rest-index': restConnectionFromS3Bucket(buckets.index ?? finalized),\n }\n const providerBindings: ProviderBindingsConfig = {\n [BlockViewerMoniker]: { connection: 'rest-finalized' },\n [ChainContractViewerMoniker]: { connection: 'rest-chain-state' },\n [ChainStateViewerMoniker]: { connection: 'rest-chain-state' },\n [FinalizationViewerMoniker]: { connection: 'rest-finalized' },\n [IndexViewerMoniker]: { connection: 'rest-index' },\n [NetworkStakeStepRewardsByPositionViewerMoniker]: { connection: 'rest-index' },\n [StakeEventsViewerMoniker]: { connection: 'rest-index' },\n [StakeViewerMoniker]: { connection: 'rest-index' },\n [XyoConnectionMoniker]: { provider: SimpleXyoConnectionViewerProviderId },\n [XyoGatewayMoniker]: { provider: SimpleXyoGatewayProviderId },\n }\n if (options.dataLakeEndpoint !== undefined) {\n connections['rest-data-lake'] = {\n baseUrl: options.dataLakeEndpoint,\n type: 'rest',\n }\n providerBindings[DataLakeViewerMoniker] = { connection: 'rest-data-lake' }\n }\n if (options.signer !== undefined) {\n if (options.rpcUrl === undefined) {\n throw new Error('XL1 REST runner browser system requires rpcUrl')\n }\n addRunnerBindings(\n connections,\n providerBindings,\n options.rpcUrl,\n options.signer,\n options.dataLakeEndpoint !== undefined,\n )\n }\n if (options.primeCaches !== undefined) {\n providerBindings[NetworkStakeStepRewardsByPositionViewerMoniker] = {\n ...providerBindings[NetworkStakeStepRewardsByPositionViewerMoniker],\n primeCaches: options.primeCaches,\n }\n }\n\n return parseXl1BrowserSystemConfig({\n actors: options.actors ?? [{\n host: options.host,\n type: xl1BrowserSystemActorType(\n options.signer !== undefined,\n options.dataLakeEndpoint !== undefined,\n ),\n }],\n chain: { id: options.chainId },\n connections,\n providerBindings,\n })\n}\n\n/** Creates explicit RPC connections and provider bindings for one XL1 browser gateway actor. */\nexport function createXl1RpcBrowserSystemConfig(\n options: CreateXl1RpcBrowserSystemConfigOptions,\n): Xl1BrowserSystemConfig {\n const connections: ConnectionsConfig = {\n 'default-rpc': {\n protocol: 'http',\n type: 'rpc',\n url: options.endpoint,\n },\n }\n const providerBindings: ProviderBindingsConfig = {\n ...synthesizeRpcConnectionBindings(),\n [XyoConnectionMoniker]: { provider: SimpleXyoConnectionViewerProviderId },\n [XyoGatewayMoniker]: { provider: SimpleXyoGatewayProviderId },\n }\n if (options.dataLakeEndpoint !== undefined) {\n connections['rest-data-lake'] = {\n baseUrl: options.dataLakeEndpoint,\n type: 'rest',\n }\n providerBindings[DataLakeViewerMoniker] = { connection: 'rest-data-lake' }\n }\n if (options.signer !== undefined) {\n addRunnerBindings(\n connections,\n providerBindings,\n options.endpoint,\n options.signer,\n options.dataLakeEndpoint !== undefined,\n )\n }\n if (options.primeCaches !== undefined) {\n providerBindings[NetworkStakeStepRewardsByPositionViewerMoniker] = { primeCaches: options.primeCaches }\n }\n\n return parseXl1BrowserSystemConfig({\n actors: options.actors ?? [{\n host: options.host,\n type: xl1BrowserSystemActorType(\n options.signer !== undefined,\n options.dataLakeEndpoint !== undefined,\n ),\n }],\n connections,\n providerBindings,\n })\n}\n\nfunction addRunnerBindings(\n connections: ConnectionsConfig,\n providerBindings: ProviderBindingsConfig,\n rpcUrl: string,\n signer: Xl1BrowserSignerConfig,\n hasDataLake: boolean,\n): void {\n connections['default-rpc'] = {\n protocol: 'http',\n type: 'rpc',\n url: rpcUrl,\n }\n providerBindings[MempoolRunnerMoniker] = {\n connection: 'default-rpc',\n provider: 'JsonRpcMempoolRunner',\n }\n providerBindings[XyoRunnerMoniker] = {\n connection: 'default-rpc',\n provider: 'JsonRpcXyoRunner',\n }\n providerBindings[XyoConnectionMoniker] = { provider: 'SimpleXyoConnectionRunner' }\n providerBindings[XyoGatewayMoniker] = { provider: 'SimpleXyoGatewayRunner' }\n providerBindings[XyoGatewayRunnerMoniker] = { provider: 'SimpleXyoGatewayRunner' }\n if (hasDataLake) {\n providerBindings[DataLakeRunnerMoniker] = {\n connection: 'rest-data-lake',\n provider: 'RestDataLakeRunner',\n }\n }\n\n switch (signer.type) {\n case 'account': {\n providerBindings[XyoSignerMoniker] = { provider: BrowserSimpleXyoSignerProviderId }\n break\n }\n case 'provider': {\n providerBindings[XyoSignerMoniker] = { provider: signer.provider }\n break\n }\n case 'rpc': {\n connections[SIGNER_RPC_CONNECTION] = { protocol: 'http', type: 'rpc' }\n providerBindings[XyoSignerMoniker] = {\n connection: SIGNER_RPC_CONNECTION,\n provider: 'JsonRpcXyoSigner',\n }\n break\n }\n }\n}\n\nfunction xl1BrowserSystemActorType(\n isRunner: boolean,\n hasDataLake: boolean,\n): typeof Xl1BrowserSystemActorType\n | typeof Xl1BrowserSystemWithDataLakeActorType\n | typeof Xl1BrowserRunnerSystemActorType\n | typeof Xl1BrowserRunnerSystemWithDataLakeActorType {\n if (isRunner) {\n return hasDataLake\n ? Xl1BrowserRunnerSystemWithDataLakeActorType\n : Xl1BrowserRunnerSystemActorType\n }\n return hasDataLake\n ? Xl1BrowserSystemWithDataLakeActorType\n : Xl1BrowserSystemActorType\n}\n\nfunction restGatewayConfigFromPathEndpoint(\n endpoint: string,\n): Required<Pick<RestGatewayConfig, 'chainState' | 'finalized' | 'index'>> {\n const baseUrl = endpoint.endsWith('/') ? endpoint.slice(0, -1) : endpoint\n return {\n chainState: { readUrl: `${baseUrl}/state` },\n finalized: { readUrl: `${baseUrl}/blocks` },\n index: { readUrl: `${baseUrl}/indexes` },\n }\n}\n\nfunction toBrowserProviderBindings(\n bindings: ProviderBindingsConfig,\n): NonNullable<BrowserSystemConfig['providerBindings']> {\n return Object.fromEntries(Object.entries(bindings).map(([moniker, binding]) => [\n moniker,\n binding === undefined\n ? {}\n : {\n connection: binding.connection,\n options: binding.options,\n provider: binding.provider,\n },\n ]))\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n", "import type { BrowserSystemProvisioner } from '@ariestools/browser-kit'\nimport { createResolvedBrowserProviderPlan } from '@ariestools/browser-kit'\nimport { createResolvedProviderSystem } from '@ariestools/provider-model'\nimport type {\n ConnectionsConfig,\n CreatableProviderContext,\n CreatableProviderFactory,\n ProviderBindingsConfig,\n ProviderDescriptor as Xl1ProviderDescriptor,\n ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-sdk'\nimport {\n allProviderCandidates,\n compileLocatorConfig,\n providerCandidateFromClass,\n ProviderFactoryLocator,\n releaseProviderFactoryLocator,\n SimpleXyoConnectionViewer,\n SimpleXyoGateway,\n SimpleXyoSigner,\n} from '@xyo-network/xl1-sdk'\n\nimport type { Xl1BrowserSystemConfig } from './Xl1BrowserConfig.ts'\n\n/** Stable browser-provider identifier retained across production minification. */\nexport const SimpleXyoConnectionViewerProviderId = 'SimpleXyoConnectionViewer'\n/** Stable browser-provider identifier retained across production minification. */\nexport const SimpleXyoGatewayProviderId = 'SimpleXyoGateway'\n/** Stable id for the account-backed signer adapted to a browser runtime home. */\nexport const BrowserSimpleXyoSignerProviderId = 'BrowserSimpleXyoSigner'\n\n/** Exact runtime factory paired with the descriptor used during config resolution. */\nexport interface Xl1BrowserProviderRegistration {\n readonly descriptor: Xl1ProviderDescriptor\n readonly factory: CreatableProviderFactory\n}\n\n/** Browser-kit plan metadata retaining the XL1 provider class used by the provisioner. */\nexport interface Xl1BrowserProviderDeclaration {\n readonly connectionTypes: readonly string[]\n readonly dependencies: readonly string[]\n readonly id: string\n readonly monikers: readonly string[]\n readonly xl1: Xl1ProviderDescriptor\n}\n\n/** Non-serializable XL1 runtime homes supplied by the realm that owns the system. */\nexport type Xl1BrowserProviderRuntimeContext = Omit<\n CreatableProviderContext,\n 'config' | 'locator'\n>\n\n/** Options captured by the XL1 browser-system provisioner. */\nexport interface CreateXl1BrowserSystemProvisionerOptions {\n readonly config: Xl1BrowserSystemConfig\n readonly context?: Xl1BrowserProviderRuntimeContext\n readonly providerRegistrations?: readonly Xl1BrowserProviderRegistration[]\n}\n\n/** Adapts one XL1 provider candidate into neutral browser-kit plan metadata. */\nexport function xl1BrowserProviderDeclaration(\n descriptor: Xl1ProviderDescriptor,\n): Xl1BrowserProviderDeclaration {\n return Object.freeze({\n connectionTypes: Object.freeze([...descriptor.connectionTypes]),\n dependencies: Object.freeze([...(descriptor.dependencies ?? [])]),\n id: descriptor.id,\n monikers: Object.freeze([...descriptor.satisfies]),\n xl1: descriptor,\n })\n}\n\n/** Returns the XL1 provider catalog available to browser-system configuration. */\nexport function xl1BrowserProviderCandidates(): Xl1ProviderDescriptor[] {\n return [\n ...allProviderCandidates(),\n browserRuntimeProviderCandidateFromClass(SimpleXyoSigner, BrowserSimpleXyoSignerProviderId),\n providerCandidateFromClass(SimpleXyoConnectionViewer, SimpleXyoConnectionViewerProviderId),\n providerCandidateFromClass(SimpleXyoGateway, SimpleXyoGatewayProviderId),\n ]\n}\n\n/**\n * Adapts an exact factory supplied by the owner realm into plan metadata.\n *\n * The factory is a runtime home, so its provider is intentionally presented as\n * connectionless to the serializable planner. The exact factory is restored by\n * the provisioner after resolution rather than reconstructed from its class.\n */\nexport function xl1BrowserProviderRegistrationFromFactory(\n factory: CreatableProviderFactory,\n id: string = factory.providerName,\n): Xl1BrowserProviderRegistration {\n return {\n descriptor: {\n ...providerCandidateFromClass(factory.creatableProvider, id),\n connectionTypes: ['none'],\n dependencies: [...factory.dependencies],\n },\n factory,\n }\n}\n\n/** Adapts an XL1 provider catalog for browser-kit planning. */\nexport function xl1BrowserProviderDeclarations(\n candidates: readonly Xl1ProviderDescriptor[] = xl1BrowserProviderCandidates(),\n): Xl1BrowserProviderDeclaration[] {\n return candidates.map(xl1BrowserProviderDeclaration)\n}\n\n/** Creates the owner-realm provisioner that instantiates one resolved XL1 locator. */\nexport function createXl1BrowserSystemProvisioner(\n options: CreateXl1BrowserSystemProvisionerOptions,\n): BrowserSystemProvisioner<ProviderFactoryLocatorInstance> {\n return async (input) => {\n const registeredFactories = new Map(\n options.providerRegistrations?.map(registration => [\n registration.descriptor.id,\n registration.factory,\n ]),\n )\n const providerBindings = mergeResolvedProviderBindings(\n options.config.providerBindings,\n input.compiled.config.providerBindings,\n )\n const locatorConfig = compileLocatorConfig({\n ...options.config,\n connections: input.compiled.config.connections as ConnectionsConfig,\n providerBindings,\n })\n const locator = new ProviderFactoryLocator({\n caches: {},\n singletons: {},\n ...options.context,\n config: locatorConfig,\n })\n for (const selected of input.compiled.resolution.selected) {\n const declaration = selected as unknown as Xl1BrowserProviderDeclaration\n const descriptor = declaration.xl1\n locator.register(registeredFactories.get(descriptor.id)\n ?? descriptor.creatableProvider.factory([\n ...(descriptor.dependencies ?? descriptor.creatableProvider.dependencies),\n ]))\n }\n locator.freeze()\n\n try {\n for (const moniker of input.compiled.declaration.dependencies) {\n await locator.getInstance(moniker)\n }\n } catch (startError) {\n const releaseError = await releaseProviderFactoryLocator(locator).catch((error: unknown) => error)\n if (releaseError !== undefined) {\n throw new AggregateError(\n [startError, releaseError],\n 'XL1 browser provider provisioning and cleanup both failed',\n { cause: startError },\n )\n }\n throw startError\n }\n\n const resolvedConfig = Object.freeze({\n ...options.config,\n actors: input.config.actors,\n connections: input.compiled.config.connections as ConnectionsConfig,\n providerBindings,\n })\n const system = createResolvedProviderSystem({\n config: resolvedConfig,\n locator,\n resolution: createResolvedBrowserProviderPlan(input.compiled.resolution),\n })\n let releasePromise: Promise<void> | undefined\n return {\n release: () => {\n releasePromise ??= releaseProviderFactoryLocator(locator)\n return releasePromise\n },\n system,\n }\n }\n}\n\nfunction browserRuntimeProviderCandidateFromClass(\n creatableProvider: Parameters<typeof providerCandidateFromClass>[0],\n id: string,\n): Xl1ProviderDescriptor {\n return {\n ...providerCandidateFromClass(creatableProvider, id),\n connectionTypes: ['none'],\n }\n}\n\nfunction mergeResolvedProviderBindings(\n authored: ProviderBindingsConfig,\n resolved: Readonly<Record<string, {\n readonly connection?: string\n readonly options?: Readonly<Record<string, unknown>>\n readonly provider?: string\n } | undefined>>,\n): ProviderBindingsConfig {\n return Object.fromEntries(Object.entries(resolved).map(([moniker, binding]) => [\n moniker,\n {\n ...authored[moniker],\n ...binding,\n },\n ]))\n}\n", "import type {\n ProviderActorContext,\n ProviderActorParams,\n} from '@ariestools/actor'\nimport { ProviderActor } from '@ariestools/actor'\nimport type {\n BrowserActor,\n ResolvedBrowserProviderPlan,\n ResolvedBrowserSystemConfig,\n} from '@ariestools/browser-kit'\nimport { BrowserActorCatalog as BrowserActorCatalogInstance } from '@ariestools/browser-kit'\nimport type { CreatableName } from '@ariestools/sdk'\nimport type {\n ProviderFactoryLocatorInstance,\n XyoGateway,\n XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\nimport {\n DataLakeRunnerMoniker,\n DataLakeViewerMoniker,\n XyoGatewayMoniker,\n XyoGatewayRunnerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nexport const Xl1BrowserSystemActorType = 'xl1-system' as const\nexport const Xl1BrowserSystemWithDataLakeActorType = 'xl1-system-with-data-lake' as const\nexport const Xl1BrowserRunnerSystemActorType = 'xl1-runner-system' as const\nexport const Xl1BrowserRunnerSystemWithDataLakeActorType = 'xl1-runner-system-with-data-lake' as const\n\nexport interface Xl1BrowserSystemActorParams extends ProviderActorParams<\n ProviderFactoryLocatorInstance,\n ResolvedBrowserSystemConfig,\n unknown,\n ResolvedBrowserProviderPlan\n> {}\n\n/** Resident actor representing one configured XL1 gateway system. */\nexport class Xl1BrowserSystemActor extends ProviderActor<Xl1BrowserSystemActorParams> {\n /** Resolves the gateway owned by this actor's immutable provider system. */\n async getGateway(): Promise<XyoGateway | XyoGatewayRunner> {\n if (this.status !== 'started') {\n throw new Error(`XL1 browser system actor is not running (status: ${this.status})`)\n }\n if (this.providerSystem.resolution.bindings[XyoGatewayRunnerMoniker] !== undefined) {\n return await this.getProvider<XyoGatewayRunner>(XyoGatewayRunnerMoniker)\n }\n return await this.getProvider<XyoGateway>(XyoGatewayMoniker)\n }\n\n /** Resolves the required write-capable gateway from a runner-system actor. */\n async getGatewayRunner(): Promise<XyoGatewayRunner> {\n if (this.status !== 'started') {\n throw new Error(`XL1 browser system actor is not running (status: ${this.status})`)\n }\n return await this.getProvider<XyoGatewayRunner>(XyoGatewayRunnerMoniker)\n }\n}\n\nexport const Xl1BrowserSystemActorDependencies = [XyoGatewayMoniker] as const\nexport const Xl1BrowserSystemWithDataLakeActorDependencies = [\n XyoGatewayMoniker,\n DataLakeViewerMoniker,\n] as const\nexport const Xl1BrowserRunnerSystemActorDependencies = [XyoGatewayRunnerMoniker] as const\nexport const Xl1BrowserRunnerSystemWithDataLakeActorDependencies = [\n XyoGatewayRunnerMoniker,\n DataLakeRunnerMoniker,\n DataLakeViewerMoniker,\n] as const\n\n/** Creates the default actor catalog and optionally installs application actors. */\nexport function createXl1BrowserActorCatalog() {\n const catalog = new BrowserActorCatalogInstance<BrowserActor, ProviderFactoryLocatorInstance>()\n const create = async (\n id: string,\n providerContext: ProviderActorContext<\n ProviderFactoryLocatorInstance,\n ResolvedBrowserSystemConfig,\n unknown,\n ResolvedBrowserProviderPlan\n >,\n ) => await Xl1BrowserSystemActor.create({\n name: id as CreatableName,\n providerContext,\n })\n catalog.register({\n create: async ({ id, providerContext }) => await create(id, providerContext),\n dependencies: Xl1BrowserSystemActorDependencies,\n type: Xl1BrowserSystemActorType,\n })\n catalog.register({\n create: async ({ id, providerContext }) => await create(id, providerContext),\n dependencies: Xl1BrowserSystemWithDataLakeActorDependencies,\n type: Xl1BrowserSystemWithDataLakeActorType,\n })\n catalog.register({\n create: async ({ id, providerContext }) => await create(id, providerContext),\n dependencies: Xl1BrowserRunnerSystemActorDependencies,\n type: Xl1BrowserRunnerSystemActorType,\n })\n catalog.register({\n create: async ({ id, providerContext }) => await create(id, providerContext),\n dependencies: Xl1BrowserRunnerSystemWithDataLakeActorDependencies,\n type: Xl1BrowserRunnerSystemWithDataLakeActorType,\n })\n return catalog\n}\n", "import type {\n BrowserActor,\n BrowserSystemIdentity,\n BrowserSystemSession,\n} from '@ariestools/browser-kit'\nimport { launchCompiledBrowserSystem } from '@ariestools/browser-kit'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nimport type { CompiledXl1BrowserSystem } from './compileXl1BrowserSystem.ts'\nimport {\n createXl1BrowserSystemProvisioner,\n type Xl1BrowserProviderDeclaration,\n type Xl1BrowserProviderRuntimeContext,\n} from './Xl1BrowserProvider.ts'\n\n/** Runtime-only options applied to an already-compiled XL1 browser system. */\nexport interface LaunchCompiledXl1BrowserSystemOptions<\n TActor extends BrowserActor = BrowserActor,\n> {\n readonly compiled: CompiledXl1BrowserSystem<TActor>\n readonly context?: Xl1BrowserProviderRuntimeContext\n readonly host?: string\n readonly identity?: BrowserSystemIdentity\n readonly readyTimeoutMs?: number\n}\n\n/** Provisions and starts one compiled XL1 browser system without resolving it again. */\nexport async function launchCompiledXl1BrowserSystem<\n TActor extends BrowserActor = BrowserActor,\n>(\n options: LaunchCompiledXl1BrowserSystemOptions<TActor>,\n): Promise<BrowserSystemSession<TActor, ProviderFactoryLocatorInstance>> {\n return await launchCompiledBrowserSystem<\n TActor,\n ProviderFactoryLocatorInstance,\n Xl1BrowserProviderDeclaration\n >({\n actorCatalog: options.compiled.actorCatalog,\n compiled: options.compiled.browserSystem,\n ...options.host !== undefined && { host: options.host },\n ...options.identity !== undefined && { identity: options.identity },\n provision: createXl1BrowserSystemProvisioner({\n config: options.compiled.config,\n ...options.context !== undefined && { context: options.context },\n providerRegistrations: options.compiled.providerRegistrations,\n }),\n ...options.readyTimeoutMs !== undefined && { readyTimeoutMs: options.readyTimeoutMs },\n })\n}\n", "import type {\n BrowserSystemIdentity,\n BrowserSystemSession,\n} from '@ariestools/browser-kit'\nimport type {\n ChainId,\n CreatableProviderFactory,\n PrimeCachesMode,\n ProviderDescriptor as Xl1ProviderDescriptor,\n ProviderFactoryLocatorInstance,\n RpcTransport,\n XyoGateway,\n XyoGatewayRunner,\n XyoSignerRpcSchemas,\n} from '@xyo-network/xl1-sdk'\nimport {\n DefaultAccountKey,\n SimpleConnectionHandleCache,\n XyoSignerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport { launchXl1BrowserSystem } from './launchXl1BrowserSystem.ts'\nimport type {\n Xl1BrowserSignerConfig,\n Xl1RestEndpointLayout,\n} from './Xl1BrowserConfig.ts'\nimport {\n createXl1RestBrowserSystemConfig,\n createXl1RpcBrowserSystemConfig,\n} from './Xl1BrowserConfig.ts'\nimport type {\n Xl1BrowserProviderRegistration,\n Xl1BrowserProviderRuntimeContext,\n} from './Xl1BrowserProvider.ts'\nimport { xl1BrowserProviderRegistrationFromFactory } from './Xl1BrowserProvider.ts'\nimport { Xl1BrowserSystemActor } from './Xl1BrowserSystemActor.ts'\n\n/** How a browser gateway reads XL1 chain data. */\nexport type Xl1BrowserGatewayTransport = 'rest' | 'rpc'\n\n/** Account instance accepted by the browser provider runtime home. */\nexport type Xl1BrowserSignerAccount = NonNullable<\n Xl1BrowserProviderRuntimeContext['accounts']\n>[string]\n\n/** Inputs for launching one standard browser-owned XL1 gateway system. */\nexport interface LaunchXl1BrowserGatewaySystemOptions {\n /** Staking contract address required by finalized REST stake readers. */\n readonly chainId?: ChainId\n readonly context?: Xl1BrowserProviderRuntimeContext\n readonly dataLakeEndpoint?: string\n /** REST root for REST mode, or the complete RPC URL for RPC mode. */\n readonly endpoint: string\n readonly host?: string\n readonly identity?: BrowserSystemIdentity\n readonly layout?: Xl1RestEndpointLayout\n readonly primeCaches?: PrimeCachesMode\n readonly providerCandidates?: readonly Xl1ProviderDescriptor[]\n readonly readyTimeoutMs?: number\n /** Required for a signed REST system; ignored for RPC systems. */\n readonly rpcUrl?: string\n readonly signerAccount?: Xl1BrowserSignerAccount\n readonly signerFactory?: CreatableProviderFactory\n /** Stable config identifier for signerFactory; defaults to its providerName. */\n readonly signerProviderId?: string\n readonly signerTransport?: RpcTransport<XyoSignerRpcSchemas>\n readonly transport: Xl1BrowserGatewayTransport\n}\n\n/** Running stock XL1 browser system with its actor and gateway exposed. */\nexport interface Xl1BrowserGatewaySystemSession\n extends BrowserSystemSession<Xl1BrowserSystemActor, ProviderFactoryLocatorInstance> {\n readonly actor: Xl1BrowserSystemActor\n readonly gateway: XyoGateway | XyoGatewayRunner\n}\n\n/**\n * Launches a read-only or signed REST/RPC gateway through one browser-kit\n * provider system. Signing precedence is factory, account, then RPC transport.\n */\nexport async function launchXl1BrowserGatewaySystem(\n options: LaunchXl1BrowserGatewaySystemOptions,\n): Promise<Xl1BrowserGatewaySystemSession> {\n const signing = browserSignerRuntime(options)\n const config = options.transport === 'rest'\n ? createXl1RestBrowserSystemConfig({\n chainId: options.chainId,\n dataLakeEndpoint: options.dataLakeEndpoint,\n endpoint: options.endpoint,\n host: options.host,\n layout: options.layout,\n primeCaches: options.primeCaches,\n rpcUrl: options.rpcUrl,\n signer: signing.config,\n })\n : createXl1RpcBrowserSystemConfig({\n dataLakeEndpoint: options.dataLakeEndpoint,\n endpoint: options.endpoint,\n host: options.host,\n primeCaches: options.primeCaches,\n signer: signing.config,\n })\n const session = await launchXl1BrowserSystem<Xl1BrowserSystemActor>({\n config,\n context: signing.context,\n host: options.host,\n identity: options.identity,\n providerCandidates: options.providerCandidates,\n providerRegistrations: signing.registrations,\n readyTimeoutMs: options.readyTimeoutMs,\n })\n\n try {\n const actor = session.actors.find(candidate => candidate instanceof Xl1BrowserSystemActor)\n if (actor === undefined) throw new Error('XL1 browser system actor was not created')\n const gateway = await actor.getGateway()\n return {\n actor,\n actors: session.actors,\n gateway,\n identity: session.identity,\n stop: async () => await session.stop(),\n system: session.system,\n whenFailed: () => session.whenFailed(),\n whenTerminal: () => session.whenTerminal(),\n }\n } catch (launchError) {\n const [stopResult] = await Promise.allSettled([session.stop()])\n if (stopResult.status === 'rejected') {\n throw new AggregateError(\n [launchError, stopResult.reason],\n 'XL1 browser system failed to expose a gateway and stop cleanly',\n { cause: launchError },\n )\n }\n throw launchError\n }\n}\n\ninterface BrowserSignerRuntime {\n readonly config?: Xl1BrowserSignerConfig\n readonly context?: Xl1BrowserProviderRuntimeContext\n readonly registrations?: readonly Xl1BrowserProviderRegistration[]\n}\n\nfunction browserSignerRuntime(\n options: LaunchXl1BrowserGatewaySystemOptions,\n): BrowserSignerRuntime {\n if (options.signerFactory !== undefined) {\n const registration = xl1BrowserProviderRegistrationFromFactory(\n options.signerFactory,\n options.signerProviderId,\n )\n return {\n config: { provider: registration.descriptor.id, type: 'provider' },\n context: options.context,\n registrations: [registration],\n }\n }\n if (options.signerAccount !== undefined) {\n return {\n config: { type: 'account' },\n context: {\n caches: {},\n singletons: {},\n ...options.context,\n accounts: {\n ...options.context?.accounts,\n [DefaultAccountKey]: options.signerAccount,\n },\n },\n }\n }\n if (options.signerTransport !== undefined) {\n const connectionHandles = options.context?.connectionHandles\n ?? new SimpleConnectionHandleCache()\n connectionHandles.set(`rpc-transport:${XyoSignerMoniker}`, options.signerTransport)\n return {\n config: { type: 'rpc' },\n context: {\n caches: {},\n singletons: {},\n ...options.context,\n connectionHandles,\n },\n }\n }\n return { context: options.context }\n}\n", "import type {\n BrowserActor,\n BrowserSystemIdentity,\n BrowserSystemSession,\n} from '@ariestools/browser-kit'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nimport type { CompileXl1BrowserSystemOptions } from './compileXl1BrowserSystem.ts'\nimport { compileXl1BrowserSystem } from './compileXl1BrowserSystem.ts'\nimport {\n launchCompiledXl1BrowserSystem,\n type LaunchCompiledXl1BrowserSystemOptions,\n} from './launchCompiledXl1BrowserSystem.ts'\nimport type { Xl1BrowserProviderRuntimeContext } from './Xl1BrowserProvider.ts'\n\n/** Inputs for launching one owner-resolved XL1 browser provider system. */\nexport interface LaunchXl1BrowserSystemOptions<TActor extends BrowserActor = BrowserActor>\n extends CompileXl1BrowserSystemOptions<TActor> {\n readonly context?: Xl1BrowserProviderRuntimeContext\n readonly host?: string\n readonly identity?: BrowserSystemIdentity\n readonly readyTimeoutMs?: number\n}\n\n/** Parses, resolves, provisions, and starts one XL1 system from browser-safe config. */\nexport async function launchXl1BrowserSystem<TActor extends BrowserActor = BrowserActor>(\n options: LaunchXl1BrowserSystemOptions<TActor>,\n): Promise<BrowserSystemSession<TActor, ProviderFactoryLocatorInstance>> {\n const compiled = compileXl1BrowserSystem(options)\n const runtimeOptions: LaunchCompiledXl1BrowserSystemOptions<TActor> = {\n compiled,\n ...options.context !== undefined && { context: options.context },\n ...options.host !== undefined && { host: options.host },\n ...options.identity !== undefined && { identity: options.identity },\n ...options.readyTimeoutMs !== undefined && { readyTimeoutMs: options.readyTimeoutMs },\n }\n return await launchCompiledXl1BrowserSystem(runtimeOptions)\n}\n"],
5
- "mappings": "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",
6
- "names": ["DataLakeRunnerMoniker", "DataLakeViewerMoniker", "XyoGatewayMoniker", "XyoGatewayRunnerMoniker", "XyoGatewayMoniker", "DataLakeViewerMoniker", "XyoGatewayRunnerMoniker", "DataLakeRunnerMoniker", "XyoSignerMoniker", "XyoSignerMoniker"]
3
+ "sources": ["../../src/compileXl1BrowserSystem.ts", "../../src/Xl1BrowserConfig.ts", "../../src/Xl1BrowserProvider.ts", "../../src/Xl1BrowserSystemActor.ts", "../../src/launchCompiledXl1BrowserSystem.ts", "../../src/launchXl1BrowserGatewaySystem.ts", "../../src/launchXl1BrowserSystem.ts", "../../src/Xl1FinalizedBlockActor.ts"],
4
+ "sourcesContent": ["import type {\n BrowserActor,\n BrowserActorCatalog,\n CompiledBrowserSystem,\n} from '@ariestools/browser-kit'\nimport { compileBrowserSystem } from '@ariestools/browser-kit'\nimport type {\n ProviderDescriptor as Xl1ProviderDescriptor,\n ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-sdk'\n\nimport type { Xl1BrowserSystemConfig } from './Xl1BrowserConfig.ts'\nimport {\n parseXl1BrowserSystemConfig,\n toBrowserSystemConfig,\n} from './Xl1BrowserConfig.ts'\nimport {\n captureXl1BrowserProviderRegistration,\n xl1BrowserProviderCandidates,\n type Xl1BrowserProviderDeclaration,\n xl1BrowserProviderDeclarations,\n type Xl1BrowserProviderRegistration,\n} from './Xl1BrowserProvider.ts'\nimport { createXl1BrowserActorCatalog } from './Xl1BrowserSystemActor.ts'\n\n/** Inputs that deterministically compile one XL1 browser system. */\nexport interface CompileXl1BrowserSystemOptions<TActor extends BrowserActor = BrowserActor> {\n readonly actorCatalog?: BrowserActorCatalog<TActor, ProviderFactoryLocatorInstance>\n readonly config: unknown\n readonly providerCandidates?: readonly Xl1ProviderDescriptor[]\n readonly providerRegistrations?: readonly Xl1BrowserProviderRegistration[]\n}\n\n/**\n * One owner-local XL1 browser plan before providers or actors are created.\n *\n * The catalog and provider registrations retain executable factories and must\n * not cross a structured-clone boundary.\n */\nexport interface CompiledXl1BrowserSystem<TActor extends BrowserActor = BrowserActor> {\n readonly actorCatalog: BrowserActorCatalog<TActor, ProviderFactoryLocatorInstance>\n readonly browserSystem: CompiledBrowserSystem<Xl1BrowserProviderDeclaration>\n readonly config: Xl1BrowserSystemConfig\n readonly providerRegistrations: readonly Xl1BrowserProviderRegistration[]\n}\n\n/** Parses and resolves one XL1 browser system without acquiring runtime resources. */\nexport function compileXl1BrowserSystem<TActor extends BrowserActor = BrowserActor>(\n options: CompileXl1BrowserSystemOptions<TActor>,\n): CompiledXl1BrowserSystem<TActor> {\n const config = parseXl1BrowserSystemConfig(options.config)\n const actorCatalog = options.actorCatalog\n ?? createXl1BrowserActorCatalog() as BrowserActorCatalog<\n TActor,\n ProviderFactoryLocatorInstance\n >\n const providerRegistrations = Object.freeze((options.providerRegistrations ?? []).map(captureXl1BrowserProviderRegistration))\n const providerCandidates = mergedProviderCandidates(\n options.providerCandidates ?? xl1BrowserProviderCandidates(),\n providerRegistrations,\n )\n const browserSystem = compileBrowserSystem<\n TActor,\n ProviderFactoryLocatorInstance,\n Xl1BrowserProviderDeclaration\n >({\n actorCatalog,\n config: toBrowserSystemConfig(config),\n providerDescriptors: xl1BrowserProviderDeclarations(providerCandidates),\n })\n return Object.freeze({\n actorCatalog,\n browserSystem,\n config,\n providerRegistrations,\n })\n}\n\nfunction mergedProviderCandidates(\n candidates: readonly Xl1ProviderDescriptor[],\n registrations: readonly Xl1BrowserProviderRegistration[],\n): Xl1ProviderDescriptor[] {\n const result = new Map(candidates.map(candidate => [candidate.id, candidate]))\n for (const registration of registrations) {\n result.set(registration.descriptor.id, registration.descriptor)\n }\n return result.values().toArray()\n}\n", "import type {\n BrowserActorSelection,\n BrowserSystemConfig,\n} from '@ariestools/browser-kit'\nimport { parseBrowserSystemConfig } from '@ariestools/browser-kit'\nimport type {\n ChainId,\n ConnectionsConfig,\n LocatorConfig,\n PrimeCachesMode,\n ProviderBindingsConfig,\n RestGatewayConfig,\n} from '@xyo-network/xl1-sdk'\nimport {\n BlockViewerMoniker,\n ChainContractViewerMoniker,\n ChainStateViewerMoniker,\n DataLakeRunnerMoniker,\n DataLakeViewerMoniker,\n FinalizationViewerMoniker,\n IndexViewerMoniker,\n MempoolRunnerMoniker,\n NetworkStakeStepRewardsByPositionViewerMoniker,\n parseLocatorConfigFields,\n restConnectionFromS3Bucket,\n restGatewayConfigFromEndpoint,\n SIGNER_RPC_CONNECTION,\n StakeEventsViewerMoniker,\n StakeViewerMoniker,\n synthesizeRpcConnectionBindings,\n XyoConnectionMoniker,\n XyoGatewayMoniker,\n XyoGatewayRunnerMoniker,\n XyoRunnerMoniker,\n XyoSignerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport {\n BrowserSimpleXyoSignerProviderId,\n SimpleXyoConnectionViewerProviderId,\n SimpleXyoGatewayProviderId,\n} from './Xl1BrowserProvider.ts'\nimport {\n Xl1BrowserRunnerSystemActorType,\n Xl1BrowserRunnerSystemWithDataLakeActorType,\n Xl1BrowserSystemActorType,\n Xl1BrowserSystemWithDataLakeActorType,\n} from './Xl1BrowserSystemActor.ts'\n\n/** Authored XL1 locator fields plus browser actor selections. */\nexport interface Xl1BrowserSystemConfig extends LocatorConfig {\n readonly actors: readonly BrowserActorSelection[]\n}\n\n/** Options for a standard REST-backed XL1 browser system. */\nexport interface CreateXl1RestBrowserSystemConfigOptions {\n readonly actors?: readonly BrowserActorSelection[]\n /**\n * RestBlockViewer read-ahead (`readStep`) and per-block cache size (`maxCacheSize`), merged into the\n * BlockViewer binding's `options`; the provider validates them in its actor realm.\n */\n readonly blockViewerOptions?: RestGatewayConfig['blockViewerOptions']\n /** Optional staking-contract address pin; otherwise the finalized chain head supplies it. */\n readonly chainId?: ChainId\n readonly dataLakeEndpoint?: string\n readonly endpoint: string\n readonly host?: string\n readonly layout?: Xl1RestEndpointLayout\n readonly primeCaches?: PrimeCachesMode\n readonly rpcUrl?: string\n readonly signer?: Xl1BrowserSignerConfig\n}\n\n/** Options for a standard RPC-backed XL1 browser system. */\nexport interface CreateXl1RpcBrowserSystemConfigOptions {\n readonly actors?: readonly BrowserActorSelection[]\n readonly dataLakeEndpoint?: string\n readonly endpoint: string\n readonly host?: string\n readonly primeCaches?: PrimeCachesMode\n readonly signer?: Xl1BrowserSignerConfig\n}\n\n/** Selects the built-in account signer supplied through the runtime context. */\nexport interface Xl1BrowserAccountSignerConfig {\n readonly type: 'account'\n}\n\n/** Selects a connectionless signer factory supplied by the owner realm. */\nexport interface Xl1BrowserProviderSignerConfig {\n readonly provider: string\n readonly type: 'provider'\n}\n\n/** Selects a JsonRpc signer whose transport is supplied through runtime handles. */\nexport interface Xl1BrowserRpcSignerConfig {\n readonly type: 'rpc'\n}\n\n/** Serializable signer selection for a write-capable browser system. */\nexport type Xl1BrowserSignerConfig\n = | Xl1BrowserAccountSignerConfig\n | Xl1BrowserProviderSignerConfig\n | Xl1BrowserRpcSignerConfig\n\n/** How the REST gateway's finalized, chain-state, and index URLs are derived from its endpoint. */\nexport type Xl1RestEndpointLayout = 'path' | 'subdomain'\n\n/** Parses XL1 locator fields and browser actor selections without importing code from config. */\nexport function parseXl1BrowserSystemConfig(input: unknown): Xl1BrowserSystemConfig {\n const locatorConfig = parseLocatorConfigFields(input)\n const browserConfig = parseBrowserSystemConfig({\n actors: isRecord(input) ? input.actors : undefined,\n connections: locatorConfig.connections,\n providerBindings: toBrowserProviderBindings(locatorConfig.providerBindings),\n })\n return Object.freeze({\n ...locatorConfig,\n actors: Object.freeze([...(browserConfig.actors ?? [])]),\n })\n}\n\n/** Projects the XL1 config onto the neutral fields browser-kit compiles. */\nexport function toBrowserSystemConfig(\n config: Xl1BrowserSystemConfig,\n): BrowserSystemConfig {\n return {\n actors: config.actors,\n connections: config.connections,\n providerBindings: toBrowserProviderBindings(config.providerBindings),\n }\n}\n\n/** Creates explicit REST connections and provider bindings for one XL1 browser gateway actor. */\nexport function createXl1RestBrowserSystemConfig(\n options: CreateXl1RestBrowserSystemConfigOptions,\n): Xl1BrowserSystemConfig {\n const buckets = options.layout === 'path'\n ? restGatewayConfigFromPathEndpoint(options.endpoint)\n : restGatewayConfigFromEndpoint(options.endpoint)\n const finalized = buckets.finalized\n if (finalized === undefined) throw new Error('XL1 REST gateway has no finalized bucket')\n\n const connections: ConnectionsConfig = {\n 'rest-chain-state': restConnectionFromS3Bucket(buckets.chainState ?? finalized),\n 'rest-finalized': restConnectionFromS3Bucket(finalized),\n 'rest-index': restConnectionFromS3Bucket(buckets.index ?? finalized),\n }\n const providerBindings: ProviderBindingsConfig = {\n [BlockViewerMoniker]: { connection: 'rest-finalized' },\n [ChainContractViewerMoniker]: { connection: 'rest-chain-state' },\n [ChainStateViewerMoniker]: { connection: 'rest-chain-state' },\n [FinalizationViewerMoniker]: { connection: 'rest-finalized' },\n [IndexViewerMoniker]: { connection: 'rest-index' },\n [NetworkStakeStepRewardsByPositionViewerMoniker]: { connection: 'rest-index' },\n [StakeEventsViewerMoniker]: { connection: 'rest-index' },\n [StakeViewerMoniker]: { connection: 'rest-index' },\n [XyoConnectionMoniker]: { provider: SimpleXyoConnectionViewerProviderId },\n [XyoGatewayMoniker]: { provider: SimpleXyoGatewayProviderId },\n }\n if (options.dataLakeEndpoint !== undefined) {\n connections['rest-data-lake'] = {\n baseUrl: options.dataLakeEndpoint,\n type: 'rest',\n }\n providerBindings[DataLakeViewerMoniker] = { connection: 'rest-data-lake' }\n }\n if (options.signer !== undefined) {\n if (options.rpcUrl === undefined) {\n throw new Error('XL1 REST runner browser system requires rpcUrl')\n }\n addRunnerBindings(\n connections,\n providerBindings,\n options.rpcUrl,\n options.signer,\n options.dataLakeEndpoint !== undefined,\n )\n }\n if (options.primeCaches !== undefined) {\n providerBindings[NetworkStakeStepRewardsByPositionViewerMoniker] = {\n ...providerBindings[NetworkStakeStepRewardsByPositionViewerMoniker],\n primeCaches: options.primeCaches,\n }\n }\n // block read-ahead / cache sizing rides the binding as provider options\n const blockViewerOptions = definedOptions(options.blockViewerOptions)\n if (blockViewerOptions !== undefined) {\n providerBindings[BlockViewerMoniker] = {\n ...providerBindings[BlockViewerMoniker],\n options: { ...providerBindings[BlockViewerMoniker]?.options, ...blockViewerOptions },\n }\n }\n\n return parseXl1BrowserSystemConfig({\n actors: options.actors ?? [{\n host: options.host,\n type: xl1BrowserSystemActorType(\n options.signer !== undefined,\n options.dataLakeEndpoint !== undefined,\n ),\n }],\n chain: { id: options.chainId },\n connections,\n providerBindings,\n })\n}\n\n/** Creates explicit RPC connections and provider bindings for one XL1 browser gateway actor. */\nexport function createXl1RpcBrowserSystemConfig(\n options: CreateXl1RpcBrowserSystemConfigOptions,\n): Xl1BrowserSystemConfig {\n const connections: ConnectionsConfig = {\n 'default-rpc': {\n protocol: 'http',\n type: 'rpc',\n url: options.endpoint,\n },\n }\n const providerBindings: ProviderBindingsConfig = {\n ...synthesizeRpcConnectionBindings(),\n [XyoConnectionMoniker]: { provider: SimpleXyoConnectionViewerProviderId },\n [XyoGatewayMoniker]: { provider: SimpleXyoGatewayProviderId },\n }\n if (options.dataLakeEndpoint !== undefined) {\n connections['rest-data-lake'] = {\n baseUrl: options.dataLakeEndpoint,\n type: 'rest',\n }\n providerBindings[DataLakeViewerMoniker] = { connection: 'rest-data-lake' }\n }\n if (options.signer !== undefined) {\n addRunnerBindings(\n connections,\n providerBindings,\n options.endpoint,\n options.signer,\n options.dataLakeEndpoint !== undefined,\n )\n }\n if (options.primeCaches !== undefined) {\n providerBindings[NetworkStakeStepRewardsByPositionViewerMoniker] = { primeCaches: options.primeCaches }\n }\n\n return parseXl1BrowserSystemConfig({\n actors: options.actors ?? [{\n host: options.host,\n type: xl1BrowserSystemActorType(\n options.signer !== undefined,\n options.dataLakeEndpoint !== undefined,\n ),\n }],\n connections,\n providerBindings,\n })\n}\n\nfunction addRunnerBindings(\n connections: ConnectionsConfig,\n providerBindings: ProviderBindingsConfig,\n rpcUrl: string,\n signer: Xl1BrowserSignerConfig,\n hasDataLake: boolean,\n): void {\n connections['default-rpc'] = {\n protocol: 'http',\n type: 'rpc',\n url: rpcUrl,\n }\n providerBindings[MempoolRunnerMoniker] = {\n connection: 'default-rpc',\n provider: 'JsonRpcMempoolRunner',\n }\n providerBindings[XyoRunnerMoniker] = {\n connection: 'default-rpc',\n provider: 'JsonRpcXyoRunner',\n }\n providerBindings[XyoConnectionMoniker] = { provider: 'SimpleXyoConnectionRunner' }\n providerBindings[XyoGatewayMoniker] = { provider: 'SimpleXyoGatewayRunner' }\n providerBindings[XyoGatewayRunnerMoniker] = { provider: 'SimpleXyoGatewayRunner' }\n if (hasDataLake) {\n providerBindings[DataLakeRunnerMoniker] = {\n connection: 'rest-data-lake',\n provider: 'RestDataLakeRunner',\n }\n }\n\n switch (signer.type) {\n case 'account': {\n providerBindings[XyoSignerMoniker] = { provider: BrowserSimpleXyoSignerProviderId }\n break\n }\n case 'provider': {\n providerBindings[XyoSignerMoniker] = { provider: signer.provider }\n break\n }\n case 'rpc': {\n connections[SIGNER_RPC_CONNECTION] = { protocol: 'http', type: 'rpc' }\n providerBindings[XyoSignerMoniker] = {\n connection: SIGNER_RPC_CONNECTION,\n provider: 'JsonRpcXyoSigner',\n }\n break\n }\n }\n}\n\n/** Drops undefined-valued keys; undefined when nothing remains (keeps bindings exactly `{ connection }` when unset). */\nfunction definedOptions(options: object | undefined): Record<string, unknown> | undefined {\n if (options === undefined) return undefined\n const entries = Object.entries(options).filter(([, value]) => value !== undefined)\n return entries.length === 0 ? undefined : Object.fromEntries(entries)\n}\n\nfunction xl1BrowserSystemActorType(\n isRunner: boolean,\n hasDataLake: boolean,\n): typeof Xl1BrowserSystemActorType\n | typeof Xl1BrowserSystemWithDataLakeActorType\n | typeof Xl1BrowserRunnerSystemActorType\n | typeof Xl1BrowserRunnerSystemWithDataLakeActorType {\n if (isRunner) {\n return hasDataLake\n ? Xl1BrowserRunnerSystemWithDataLakeActorType\n : Xl1BrowserRunnerSystemActorType\n }\n return hasDataLake\n ? Xl1BrowserSystemWithDataLakeActorType\n : Xl1BrowserSystemActorType\n}\n\nfunction restGatewayConfigFromPathEndpoint(\n endpoint: string,\n): Required<Pick<RestGatewayConfig, 'chainState' | 'finalized' | 'index'>> {\n const baseUrl = endpoint.endsWith('/') ? endpoint.slice(0, -1) : endpoint\n return {\n chainState: { readUrl: `${baseUrl}/state` },\n finalized: { readUrl: `${baseUrl}/blocks` },\n index: { readUrl: `${baseUrl}/indexes` },\n }\n}\n\nfunction toBrowserProviderBindings(\n bindings: ProviderBindingsConfig,\n): NonNullable<BrowserSystemConfig['providerBindings']> {\n return Object.fromEntries(Object.entries(bindings).map(([moniker, binding]) => [\n moniker,\n binding === undefined\n ? {}\n : {\n connection: binding.connection,\n options: binding.options,\n provider: binding.provider,\n },\n ]))\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n", "import type { BrowserSystemProvisioner } from '@ariestools/browser-kit'\nimport { createResolvedBrowserProviderPlan } from '@ariestools/browser-kit'\nimport { createResolvedProviderSystem } from '@ariestools/provider-model'\nimport type {\n ConnectionsConfig,\n CreatableProviderContext,\n CreatableProviderFactory,\n ProviderBindingsConfig,\n ProviderDescriptor as Xl1ProviderDescriptor,\n ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-sdk'\nimport {\n allProviderCandidates,\n captureCreatableProviderFactory,\n compileLocatorConfig,\n providerCandidateFromClass,\n ProviderFactoryLocator,\n releaseProviderFactoryLocator,\n SimpleXyoConnectionViewer,\n SimpleXyoGateway,\n SimpleXyoSigner,\n} from '@xyo-network/xl1-sdk'\n\nimport type { Xl1BrowserSystemConfig } from './Xl1BrowserConfig.ts'\n\n/** Stable browser-provider identifier retained across production minification. */\nexport const SimpleXyoConnectionViewerProviderId = 'SimpleXyoConnectionViewer'\n/** Stable browser-provider identifier retained across production minification. */\nexport const SimpleXyoGatewayProviderId = 'SimpleXyoGateway'\n/** Stable id for the account-backed signer adapted to a browser runtime home. */\nexport const BrowserSimpleXyoSignerProviderId = 'BrowserSimpleXyoSigner'\n\n/** Exact runtime factory paired with the descriptor used during config resolution. */\nexport interface Xl1BrowserProviderRegistration {\n readonly descriptor: Xl1ProviderDescriptor\n readonly factory: CreatableProviderFactory\n}\n\n/** Browser-kit plan metadata retaining the XL1 provider class used by the provisioner. */\nexport interface Xl1BrowserProviderDeclaration {\n readonly connectionTypes: readonly string[]\n readonly dependencies: readonly string[]\n readonly id: string\n readonly monikers: readonly string[]\n readonly optionalDependencies?: readonly string[]\n readonly xl1: Xl1ProviderDescriptor\n}\n\n/** Non-serializable XL1 runtime homes supplied by the realm that owns the system. */\nexport type Xl1BrowserProviderRuntimeContext = Omit<\n CreatableProviderContext,\n 'config' | 'locator'\n>\n\n/** Options captured by the XL1 browser-system provisioner. */\nexport interface CreateXl1BrowserSystemProvisionerOptions {\n readonly config: Xl1BrowserSystemConfig\n readonly context?: Xl1BrowserProviderRuntimeContext\n readonly providerRegistrations?: readonly Xl1BrowserProviderRegistration[]\n}\n\n/** Adapts one XL1 provider candidate into neutral browser-kit plan metadata. */\nexport function xl1BrowserProviderDeclaration(\n descriptor: Xl1ProviderDescriptor,\n): Xl1BrowserProviderDeclaration {\n const captured = Object.freeze({\n ...descriptor,\n connectionTypes: Object.freeze([...descriptor.connectionTypes]),\n dependencies: Object.freeze([...(descriptor.dependencies ?? descriptor.creatableProvider.dependencies)]),\n optionalDependencies: Object.freeze([...(descriptor.optionalDependencies ?? descriptor.creatableProvider.optionalDependencies ?? [])]),\n satisfies: Object.freeze([...descriptor.satisfies]),\n })\n return Object.freeze({\n connectionTypes: captured.connectionTypes,\n dependencies: captured.dependencies,\n id: captured.id,\n monikers: captured.satisfies,\n optionalDependencies: captured.optionalDependencies,\n xl1: captured,\n })\n}\n\n/** Returns the XL1 provider catalog available to browser-system configuration. */\nexport function xl1BrowserProviderCandidates(): Xl1ProviderDescriptor[] {\n return [\n ...allProviderCandidates(),\n browserRuntimeProviderCandidateFromClass(SimpleXyoSigner, BrowserSimpleXyoSignerProviderId),\n providerCandidateFromClass(SimpleXyoConnectionViewer, SimpleXyoConnectionViewerProviderId),\n providerCandidateFromClass(SimpleXyoGateway, SimpleXyoGatewayProviderId),\n ]\n}\n\n/**\n * Adapts an exact factory supplied by the owner realm into plan metadata.\n *\n * The factory is a runtime home, so its provider is intentionally presented as\n * connectionless to the serializable planner. The exact factory is restored by\n * the provisioner after resolution rather than reconstructed from its class.\n */\nexport function xl1BrowserProviderRegistrationFromFactory(\n factory: CreatableProviderFactory,\n id: string = factory.providerName,\n): Xl1BrowserProviderRegistration {\n return {\n descriptor: {\n ...providerCandidateFromClass(factory.creatableProvider, id),\n connectionTypes: ['none'],\n dependencies: [...factory.dependencies],\n optionalDependencies: [...factory.optionalDependencies ?? factory.creatableProvider.optionalDependencies ?? []],\n },\n factory,\n }\n}\n\n/** Captures and checks exact runtime factory metadata before any resource acquisition. */\nexport function captureXl1BrowserProviderRegistration(\n registration: Xl1BrowserProviderRegistration,\n): Xl1BrowserProviderRegistration {\n const factory = captureCreatableProviderFactory(registration.factory)\n const descriptor = xl1BrowserProviderDeclaration(registration.descriptor).xl1\n if (factory.scope === 'global') throw new Error(`Browser provider [${descriptor.id}] cannot use global factory scope`)\n const same = (left: readonly string[], right: readonly string[]) => {\n const leftSet = new Set(left)\n const rightSet = new Set(right)\n return leftSet.size === rightSet.size && left.every(value => rightSet.has(value))\n }\n if (!same(descriptor.satisfies, factory.monikers)\n || !same(descriptor.dependencies ?? [], factory.dependencies)\n || !same(descriptor.optionalDependencies ?? [], factory.optionalDependencies ?? [])) {\n throw new Error(`Browser provider [${descriptor.id}] descriptor differs from its exact factory dependencies or monikers`)\n }\n return Object.freeze({ descriptor, factory })\n}\n\n/** Adapts an XL1 provider catalog for browser-kit planning. */\nexport function xl1BrowserProviderDeclarations(\n candidates: readonly Xl1ProviderDescriptor[] = xl1BrowserProviderCandidates(),\n): Xl1BrowserProviderDeclaration[] {\n return candidates.map(xl1BrowserProviderDeclaration)\n}\n\n/** Creates the owner-realm provisioner that instantiates one resolved XL1 locator. */\nexport function createXl1BrowserSystemProvisioner(\n options: CreateXl1BrowserSystemProvisionerOptions,\n): BrowserSystemProvisioner<ProviderFactoryLocatorInstance> {\n const registeredFactories = new Map(\n options.providerRegistrations?.map((registration) => {\n const captured = captureXl1BrowserProviderRegistration(registration)\n return [captured.descriptor.id, captured.factory]\n }),\n )\n return async (input) => {\n const providerBindings = mergeResolvedProviderBindings(\n options.config.providerBindings,\n input.compiled.config.providerBindings,\n )\n const locatorConfig = compileLocatorConfig({\n ...options.config,\n connections: input.compiled.config.connections as ConnectionsConfig,\n providerBindings,\n })\n const locator = new ProviderFactoryLocator({\n caches: {},\n singletons: {},\n ...options.context,\n config: locatorConfig,\n }, {}, false, { dependencyAccess: 'declared' })\n try {\n for (const selected of input.compiled.resolution.selected) {\n const declaration = selected as unknown as Xl1BrowserProviderDeclaration\n const descriptor = declaration.xl1\n const factory = registeredFactories.get(descriptor.id)\n ?? descriptor.creatableProvider.factory([...declaration.dependencies], {}, declaration.optionalDependencies ?? [])\n locator.register(captureXl1BrowserProviderRegistration({ descriptor, factory }).factory)\n }\n locator.freeze()\n for (const moniker of input.compiled.declaration.dependencies) {\n await locator.getInstance(moniker)\n }\n } catch (startError) {\n let releaseError: unknown\n try {\n await releaseProviderFactoryLocator(locator)\n } catch (error: unknown) {\n releaseError = error\n }\n if (releaseError !== undefined) {\n throw new AggregateError(\n [startError, releaseError],\n 'XL1 browser provider provisioning and cleanup both failed',\n { cause: startError },\n )\n }\n throw startError\n }\n\n const resolvedConfig = Object.freeze({\n ...options.config,\n actors: input.config.actors,\n connections: input.compiled.config.connections as ConnectionsConfig,\n providerBindings,\n })\n const system = createResolvedProviderSystem({\n config: resolvedConfig,\n locator,\n resolution: createResolvedBrowserProviderPlan(input.compiled.resolution),\n })\n let releasePromise: Promise<void> | undefined\n return {\n release: () => {\n releasePromise ??= releaseProviderFactoryLocator(locator)\n return releasePromise\n },\n system,\n }\n }\n}\n\nfunction browserRuntimeProviderCandidateFromClass(\n creatableProvider: Parameters<typeof providerCandidateFromClass>[0],\n id: string,\n): Xl1ProviderDescriptor {\n return {\n ...providerCandidateFromClass(creatableProvider, id),\n connectionTypes: ['none'],\n }\n}\n\nfunction mergeResolvedProviderBindings(\n authored: ProviderBindingsConfig,\n resolved: Readonly<Record<string, {\n readonly connection?: string\n readonly options?: Readonly<Record<string, unknown>>\n readonly provider?: string\n } | undefined>>,\n): ProviderBindingsConfig {\n return Object.fromEntries(Object.entries(resolved).map(([moniker, binding]) => [\n moniker,\n {\n ...authored[moniker],\n ...binding,\n },\n ]))\n}\n", "import type {\n ProviderActorContext,\n ProviderActorParams,\n} from '@ariestools/actor'\nimport { ProviderActor } from '@ariestools/actor'\nimport type { RawInstanceLocator } from '@ariestools/actor-model'\nimport type {\n BrowserActor,\n ResolvedBrowserProviderPlan,\n ResolvedBrowserSystemConfig,\n} from '@ariestools/browser-kit'\nimport { BrowserActorCatalog as BrowserActorCatalogInstance } from '@ariestools/browser-kit'\nimport type { CreatableName } from '@ariestools/sdk'\nimport type {\n ProviderFactoryLocatorInstance,\n XyoGateway,\n XyoGatewayRunner,\n} from '@xyo-network/xl1-sdk'\nimport {\n DataLakeRunnerMoniker,\n DataLakeViewerMoniker,\n XyoGatewayMoniker,\n XyoGatewayRunnerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nexport const Xl1BrowserSystemActorType = 'xl1-system' as const\nexport const Xl1BrowserSystemWithDataLakeActorType = 'xl1-system-with-data-lake' as const\nexport const Xl1BrowserRunnerSystemActorType = 'xl1-runner-system' as const\nexport const Xl1BrowserRunnerSystemWithDataLakeActorType = 'xl1-runner-system-with-data-lake' as const\n\nexport interface Xl1BrowserSystemActorParams extends ProviderActorParams<\n RawInstanceLocator,\n ResolvedBrowserSystemConfig,\n unknown,\n ResolvedBrowserProviderPlan\n> {\n /** Fixed by the catalog entry; a sibling Runner does not upgrade a Viewer. */\n readonly gatewayMoniker?: typeof XyoGatewayMoniker | typeof XyoGatewayRunnerMoniker\n}\n\n/** Matches Actor dependency scoping: a Viewer catalog entry never declares the Runner capability. */\nclass Xl1BrowserActorDependencyError extends Error {\n readonly code = 'dependency-undeclared'\n override readonly name = 'Xl1BrowserActorDependencyError'\n}\n\n/** Resident actor representing one configured XL1 gateway system. */\nexport class Xl1BrowserSystemActor extends ProviderActor<Xl1BrowserSystemActorParams> {\n private _gatewayMoniker: typeof XyoGatewayMoniker | typeof XyoGatewayRunnerMoniker = XyoGatewayMoniker\n\n override async createHandler(): Promise<void> {\n this._gatewayMoniker = this.params.gatewayMoniker ?? XyoGatewayMoniker\n await super.createHandler()\n }\n\n /** Resolves the gateway owned by this actor's immutable provider system. */\n async getGateway(): Promise<XyoGateway | XyoGatewayRunner> {\n if (this.status !== 'started') {\n throw new Error(`XL1 browser system actor is not running (status: ${this.status})`)\n }\n if (this._gatewayMoniker === XyoGatewayRunnerMoniker) {\n return await this.getProvider<XyoGatewayRunner>(XyoGatewayRunnerMoniker)\n }\n return await this.getProvider<XyoGateway>(XyoGatewayMoniker)\n }\n\n /** Resolves the required write-capable gateway from a runner-system actor. */\n async getGatewayRunner(): Promise<XyoGatewayRunner> {\n if (this.status !== 'started') {\n throw new Error(`XL1 browser system actor is not running (status: ${this.status})`)\n }\n if (this._gatewayMoniker !== XyoGatewayRunnerMoniker) {\n throw new Xl1BrowserActorDependencyError(`XL1 browser system actor [${this.name}] does not declare ${XyoGatewayRunnerMoniker}`)\n }\n return await this.getProvider<XyoGatewayRunner>(XyoGatewayRunnerMoniker)\n }\n}\n\nexport const Xl1BrowserSystemActorDependencies = [XyoGatewayMoniker] as const\nexport const Xl1BrowserSystemWithDataLakeActorDependencies = [\n XyoGatewayMoniker,\n DataLakeViewerMoniker,\n] as const\nexport const Xl1BrowserRunnerSystemActorDependencies = [XyoGatewayRunnerMoniker] as const\nexport const Xl1BrowserRunnerSystemWithDataLakeActorDependencies = [\n XyoGatewayRunnerMoniker,\n DataLakeRunnerMoniker,\n DataLakeViewerMoniker,\n] as const\n\n/** Creates the default actor catalog and optionally installs app actors. */\nexport function createXl1BrowserActorCatalog() {\n const catalog = new BrowserActorCatalogInstance<BrowserActor, ProviderFactoryLocatorInstance>()\n const create = async (\n id: string,\n providerContext: ProviderActorContext<\n RawInstanceLocator,\n ResolvedBrowserSystemConfig,\n unknown,\n ResolvedBrowserProviderPlan\n >,\n gatewayMoniker: typeof XyoGatewayMoniker | typeof XyoGatewayRunnerMoniker,\n ) => await Xl1BrowserSystemActor.create({\n gatewayMoniker,\n name: id as CreatableName,\n providerContext,\n })\n catalog.register({\n create: async ({ id, providerContext }) => await create(id, providerContext, XyoGatewayMoniker),\n dependencies: Xl1BrowserSystemActorDependencies,\n type: Xl1BrowserSystemActorType,\n })\n catalog.register({\n create: async ({ id, providerContext }) => await create(id, providerContext, XyoGatewayMoniker),\n dependencies: Xl1BrowserSystemWithDataLakeActorDependencies,\n type: Xl1BrowserSystemWithDataLakeActorType,\n })\n catalog.register({\n create: async ({ id, providerContext }) => await create(id, providerContext, XyoGatewayRunnerMoniker),\n dependencies: Xl1BrowserRunnerSystemActorDependencies,\n type: Xl1BrowserRunnerSystemActorType,\n })\n catalog.register({\n create: async ({ id, providerContext }) => await create(id, providerContext, XyoGatewayRunnerMoniker),\n dependencies: Xl1BrowserRunnerSystemWithDataLakeActorDependencies,\n type: Xl1BrowserRunnerSystemWithDataLakeActorType,\n })\n return catalog\n}\n", "import type {\n BrowserActor,\n BrowserSystemIdentity,\n BrowserSystemSession,\n} from '@ariestools/browser-kit'\nimport { launchCompiledBrowserSystem } from '@ariestools/browser-kit'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nimport type { CompiledXl1BrowserSystem } from './compileXl1BrowserSystem.ts'\nimport {\n createXl1BrowserSystemProvisioner,\n type Xl1BrowserProviderDeclaration,\n type Xl1BrowserProviderRuntimeContext,\n} from './Xl1BrowserProvider.ts'\n\n/** Runtime-only options applied to an already-compiled XL1 browser system. */\nexport interface LaunchCompiledXl1BrowserSystemOptions<\n TActor extends BrowserActor = BrowserActor,\n> {\n readonly compiled: CompiledXl1BrowserSystem<TActor>\n readonly context?: Xl1BrowserProviderRuntimeContext\n readonly host?: string\n readonly identity?: BrowserSystemIdentity\n readonly readyTimeoutMs?: number\n}\n\n/** Provisions and starts one compiled XL1 browser system without resolving it again. */\nexport async function launchCompiledXl1BrowserSystem<\n TActor extends BrowserActor = BrowserActor,\n>(\n options: LaunchCompiledXl1BrowserSystemOptions<TActor>,\n): Promise<BrowserSystemSession<TActor, ProviderFactoryLocatorInstance>> {\n return await launchCompiledBrowserSystem<\n TActor,\n ProviderFactoryLocatorInstance,\n Xl1BrowserProviderDeclaration\n >({\n actorCatalog: options.compiled.actorCatalog,\n compiled: options.compiled.browserSystem,\n ...options.host !== undefined && { host: options.host },\n ...options.identity !== undefined && { identity: options.identity },\n provision: createXl1BrowserSystemProvisioner({\n config: options.compiled.config,\n ...options.context !== undefined && { context: options.context },\n providerRegistrations: options.compiled.providerRegistrations,\n }),\n ...options.readyTimeoutMs !== undefined && { readyTimeoutMs: options.readyTimeoutMs },\n })\n}\n", "import type {\n BrowserSystemIdentity,\n BrowserSystemSession,\n} from '@ariestools/browser-kit'\nimport type {\n ChainId,\n ConnectionHandleCache,\n CreatableProviderFactory,\n PrimeCachesMode,\n ProviderDescriptor as Xl1ProviderDescriptor,\n ProviderFactoryLocatorInstance,\n RestGatewayConfig,\n RpcTransport,\n XyoGateway,\n XyoGatewayRunner,\n XyoSignerRpcSchemas,\n} from '@xyo-network/xl1-sdk'\nimport {\n DefaultAccountKey,\n SimpleConnectionHandleCache,\n XyoSignerMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport { launchXl1BrowserSystem } from './launchXl1BrowserSystem.ts'\nimport type {\n Xl1BrowserSignerConfig,\n Xl1RestEndpointLayout,\n} from './Xl1BrowserConfig.ts'\nimport {\n createXl1RestBrowserSystemConfig,\n createXl1RpcBrowserSystemConfig,\n} from './Xl1BrowserConfig.ts'\nimport type {\n Xl1BrowserProviderRegistration,\n Xl1BrowserProviderRuntimeContext,\n} from './Xl1BrowserProvider.ts'\nimport { xl1BrowserProviderRegistrationFromFactory } from './Xl1BrowserProvider.ts'\nimport { Xl1BrowserSystemActor } from './Xl1BrowserSystemActor.ts'\n\n/** How a browser gateway reads XL1 chain data. */\nexport type Xl1BrowserGatewayTransport = 'rest' | 'rpc'\n\n/** Account instance accepted by the browser provider runtime home. */\nexport type Xl1BrowserSignerAccount = NonNullable<\n Xl1BrowserProviderRuntimeContext['accounts']\n>[string]\n\n/** Inputs for launching one standard browser-owned XL1 gateway system. */\nexport interface LaunchXl1BrowserGatewaySystemOptions {\n /** RestBlockViewer read-ahead and cache sizing (`readStep`, `maxCacheSize`). REST transport only; ignored for RPC systems. */\n readonly blockViewerOptions?: RestGatewayConfig['blockViewerOptions']\n /** Staking contract address required by finalized REST stake readers. */\n readonly chainId?: ChainId\n readonly context?: Xl1BrowserProviderRuntimeContext\n readonly dataLakeEndpoint?: string\n /** REST root for REST mode, or the complete RPC URL for RPC mode. */\n readonly endpoint: string\n readonly host?: string\n readonly identity?: BrowserSystemIdentity\n readonly layout?: Xl1RestEndpointLayout\n readonly primeCaches?: PrimeCachesMode\n readonly providerCandidates?: readonly Xl1ProviderDescriptor[]\n readonly readyTimeoutMs?: number\n /** Required for a signed REST system; ignored for RPC systems. */\n readonly rpcUrl?: string\n readonly signerAccount?: Xl1BrowserSignerAccount\n readonly signerFactory?: CreatableProviderFactory\n /** Stable config identifier for signerFactory; defaults to its providerName. */\n readonly signerProviderId?: string\n readonly signerTransport?: RpcTransport<XyoSignerRpcSchemas>\n readonly transport: Xl1BrowserGatewayTransport\n}\n\n/** Running stock XL1 browser system with its actor and gateway exposed. */\nexport interface Xl1BrowserGatewaySystemSession\n extends BrowserSystemSession<Xl1BrowserSystemActor, ProviderFactoryLocatorInstance> {\n readonly actor: Xl1BrowserSystemActor\n readonly gateway: XyoGateway | XyoGatewayRunner\n}\n\n/**\n * Launches a read-only or signed REST/RPC gateway through one browser-kit\n * provider system. Signing precedence is factory, account, then RPC transport.\n */\nexport async function launchXl1BrowserGatewaySystem(\n options: LaunchXl1BrowserGatewaySystemOptions,\n): Promise<Xl1BrowserGatewaySystemSession> {\n const signing = browserSignerRuntime(options)\n const config = options.transport === 'rest'\n ? createXl1RestBrowserSystemConfig({\n blockViewerOptions: options.blockViewerOptions,\n chainId: options.chainId,\n dataLakeEndpoint: options.dataLakeEndpoint,\n endpoint: options.endpoint,\n host: options.host,\n layout: options.layout,\n primeCaches: options.primeCaches,\n rpcUrl: options.rpcUrl,\n signer: signing.config,\n })\n : createXl1RpcBrowserSystemConfig({\n dataLakeEndpoint: options.dataLakeEndpoint,\n endpoint: options.endpoint,\n host: options.host,\n primeCaches: options.primeCaches,\n signer: signing.config,\n })\n const ownedHandles = signing.ownedConnectionHandles\n let session: BrowserSystemSession<Xl1BrowserSystemActor, ProviderFactoryLocatorInstance>\n try {\n session = await launchXl1BrowserSystem<Xl1BrowserSystemActor>({\n config,\n context: signing.context,\n host: options.host,\n identity: options.identity,\n providerCandidates: options.providerCandidates,\n providerRegistrations: signing.registrations,\n readyTimeoutMs: options.readyTimeoutMs,\n })\n } catch (launchError) {\n const [closeResult] = await Promise.allSettled([ownedHandles?.close?.()])\n if (closeResult.status === 'rejected') {\n throw new AggregateError(\n [launchError, closeResult.reason],\n 'XL1 browser system failed to launch and close its connection handles',\n { cause: launchError },\n )\n }\n throw launchError\n }\n\n try {\n const actor = session.actors.find(candidate => candidate instanceof Xl1BrowserSystemActor)\n if (actor === undefined) throw new Error('XL1 browser system actor was not created')\n const gateway = await actor.getGateway()\n return {\n actor,\n actors: session.actors,\n gateway,\n identity: session.identity,\n stop: async () => {\n const errors = await stopSessionAndHandles(session, ownedHandles)\n if (errors.length === 1) throw errors[0]\n if (errors.length > 1) {\n throw new AggregateError(errors, 'XL1 browser system and its connection handles failed to stop', { cause: errors[0] })\n }\n },\n system: session.system,\n whenFailed: () => session.whenFailed(),\n whenTerminal: () => session.whenTerminal(),\n }\n } catch (launchError) {\n const cleanupErrors = await stopSessionAndHandles(session, ownedHandles)\n if (cleanupErrors.length > 0) {\n throw new AggregateError(\n [launchError, ...cleanupErrors],\n 'XL1 browser system failed to expose a gateway and stop cleanly',\n { cause: launchError },\n )\n }\n throw launchError\n }\n}\n\n/** Stops the session first, then closes a launcher-created cache; returns every failure. */\nasync function stopSessionAndHandles(\n session: { stop(): Promise<void> },\n handles: ConnectionHandleCache | undefined,\n): Promise<unknown[]> {\n const [stopResult] = await Promise.allSettled([session.stop()])\n const [closeResult] = await Promise.allSettled([handles?.close?.()])\n return [stopResult, closeResult].flatMap(result => result.status === 'rejected' ? [result.reason as unknown] : [])\n}\n\ninterface BrowserSignerRuntime {\n readonly config?: Xl1BrowserSignerConfig\n readonly context?: Xl1BrowserProviderRuntimeContext\n /** A cache this launcher created; the locator borrows it, so the launcher closes it. */\n readonly ownedConnectionHandles?: ConnectionHandleCache\n readonly registrations?: readonly Xl1BrowserProviderRegistration[]\n}\n\nfunction browserSignerRuntime(\n options: LaunchXl1BrowserGatewaySystemOptions,\n): BrowserSignerRuntime {\n if (options.signerFactory !== undefined) {\n const registration = xl1BrowserProviderRegistrationFromFactory(\n options.signerFactory,\n options.signerProviderId,\n )\n return {\n config: { provider: registration.descriptor.id, type: 'provider' },\n context: options.context,\n registrations: [registration],\n }\n }\n if (options.signerAccount !== undefined) {\n return {\n config: { type: 'account' },\n context: {\n caches: {},\n singletons: {},\n ...options.context,\n accounts: {\n ...options.context?.accounts,\n [DefaultAccountKey]: options.signerAccount,\n },\n },\n }\n }\n if (options.signerTransport !== undefined) {\n const suppliedHandles = options.context?.connectionHandles\n const connectionHandles = suppliedHandles ?? new SimpleConnectionHandleCache()\n connectionHandles.set(`rpc-transport:${XyoSignerMoniker}`, options.signerTransport)\n return {\n config: { type: 'rpc' },\n context: {\n caches: {},\n singletons: {},\n ...options.context,\n connectionHandles,\n },\n ...(suppliedHandles === undefined && { ownedConnectionHandles: connectionHandles }),\n }\n }\n return { context: options.context }\n}\n", "import type {\n BrowserActor,\n BrowserSystemIdentity,\n BrowserSystemSession,\n} from '@ariestools/browser-kit'\nimport type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'\n\nimport type { CompileXl1BrowserSystemOptions } from './compileXl1BrowserSystem.ts'\nimport { compileXl1BrowserSystem } from './compileXl1BrowserSystem.ts'\nimport {\n launchCompiledXl1BrowserSystem,\n type LaunchCompiledXl1BrowserSystemOptions,\n} from './launchCompiledXl1BrowserSystem.ts'\nimport type { Xl1BrowserProviderRuntimeContext } from './Xl1BrowserProvider.ts'\n\n/** Inputs for launching one owner-resolved XL1 browser provider system. */\nexport interface LaunchXl1BrowserSystemOptions<TActor extends BrowserActor = BrowserActor>\n extends CompileXl1BrowserSystemOptions<TActor> {\n readonly context?: Xl1BrowserProviderRuntimeContext\n readonly host?: string\n readonly identity?: BrowserSystemIdentity\n readonly readyTimeoutMs?: number\n}\n\n/** Parses, resolves, provisions, and starts one XL1 system from browser-safe config. */\nexport async function launchXl1BrowserSystem<TActor extends BrowserActor = BrowserActor>(\n options: LaunchXl1BrowserSystemOptions<TActor>,\n): Promise<BrowserSystemSession<TActor, ProviderFactoryLocatorInstance>> {\n const compiled = compileXl1BrowserSystem(options)\n const runtimeOptions: LaunchCompiledXl1BrowserSystemOptions<TActor> = {\n compiled,\n ...options.context !== undefined && { context: options.context },\n ...options.host !== undefined && { host: options.host },\n ...options.identity !== undefined && { identity: options.identity },\n ...options.readyTimeoutMs !== undefined && { readyTimeoutMs: options.readyTimeoutMs },\n }\n return await launchCompiledXl1BrowserSystem(runtimeOptions)\n}\n", "import type { PeriodicPassContext } from '@ariestools/actor'\nimport { ProviderActor } from '@ariestools/actor'\nimport type {\n BlockViewer, FinalizationViewer,\n FinalizedBlockStreamCursor, FinalizedBlockStreamNextBlockEvent, FinalizedBlockWalk,\n} from '@xyo-network/xl1-sdk'\nimport {\n advanceFinalizedBlockCursor, BlockViewerMoniker, createFinalizedBlockWalk, FinalizationViewerMoniker, finalizedBlockCursor,\n FinalizedBlockStreamDesyncError,\n} from '@xyo-network/xl1-sdk'\n\nimport type { Xl1BrowserSystemActorParams } from './Xl1BrowserSystemActor.ts'\n\n/** Only these two providers are required; no stream provider or nested graph. */\nexport const Xl1FinalizedBlockActorDependencies = [BlockViewerMoniker, FinalizationViewerMoniker] as const\n\n/** Consumer-owned resume checkpoint and bounded read controls. */\nexport interface Xl1FinalizedBlockActorParams extends Xl1BrowserSystemActorParams {\n readonly after?: FinalizedBlockStreamCursor['hash']\n readonly fetchWindow?: number\n}\n\n/**\n * Gapless Actor-owned catch-up and polling over the shared resolved SDK graph.\n * Hosts opt into inherited periodic scheduling or explicitly call runOnce/wake.\n * Acknowledgement precedes cursor advancement; durable checkpoints belong to the\n * consumer, which must tolerate redelivery after a failed handler or process loss.\n */\nexport abstract class Xl1FinalizedBlockActor extends ProviderActor<Xl1FinalizedBlockActorParams> {\n private _after?: FinalizedBlockStreamCursor['hash']\n private _cursor?: FinalizedBlockStreamCursor\n private _desync?: FinalizedBlockStreamDesyncError\n private _fetchWindow?: number\n private _initialHead?: FinalizedBlockStreamNextBlockEvent\n private _walk?: FinalizedBlockWalk\n private _walkSignal?: AbortSignal\n\n /** Last successfully acknowledged position, copied so callers cannot move it. */\n get cursor(): FinalizedBlockStreamCursor | undefined {\n return this._cursor === undefined ? undefined : { ...this._cursor }\n }\n\n override async createHandler(): Promise<void> {\n this._after = this.params.after\n this._fetchWindow = this.params.fetchWindow\n await super.createHandler()\n }\n\n protected override isFatalError(error: Error): boolean {\n return error instanceof FinalizedBlockStreamDesyncError\n }\n\n protected override async run(context: PeriodicPassContext): Promise<void> {\n if (this._desync !== undefined) throw this._desync\n try {\n await this.walkPass(context)\n } catch (error) {\n if (error instanceof FinalizedBlockStreamDesyncError) this._desync = error\n throw error\n }\n }\n\n private async walkPass(context: PeriodicPassContext): Promise<void> {\n const { signal } = context\n signal.throwIfAborted()\n if (this._walk === undefined || this._walkSignal !== signal) {\n const blocks = await this.getProvider<BlockViewer>(BlockViewerMoniker)\n signal.throwIfAborted()\n const finalization = await this.getProvider<FinalizationViewer>(FinalizationViewerMoniker)\n signal.throwIfAborted()\n this._walk = createFinalizedBlockWalk({ blocks, finalization }, { fetchWindow: this._fetchWindow }, signal)\n this._walkSignal = signal\n }\n const walk = this._walk\n if (this._cursor === undefined && this._after !== undefined) this._cursor = await walk.checkpoint(this._after)\n if (this._cursor === undefined) {\n if (this._initialHead === undefined) {\n const head = await walk.head()\n this._initialHead = { block: head, head: head[0].block }\n }\n const next = finalizedBlockCursor(this._initialHead.block)\n await this.onBlock(this._initialHead, context)\n signal.throwIfAborted()\n this._cursor = next\n this._initialHead = undefined\n return\n }\n const head = await walk.head()\n const headNumber = head[0].block\n while (this._cursor.block < headNumber) {\n const window = await walk.next(this._cursor, headNumber)\n for (const block of window) {\n signal.throwIfAborted()\n const next = advanceFinalizedBlockCursor(this._cursor, block)\n await this.onBlock({ block, head: headNumber }, context)\n signal.throwIfAborted()\n this._cursor = next\n }\n }\n }\n\n /** Await durable/idempotent consumer work here; never call and await own stop. */\n protected abstract onBlock(event: FinalizedBlockStreamNextBlockEvent, context: PeriodicPassContext): Promise<void>\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["DataLakeRunnerMoniker", "DataLakeViewerMoniker", "XyoGatewayMoniker", "XyoGatewayRunnerMoniker", "XyoGatewayMoniker", "DataLakeViewerMoniker", "XyoGatewayRunnerMoniker", "DataLakeRunnerMoniker", "XyoSignerMoniker", "XyoSignerMoniker", "ProviderActor", "BlockViewerMoniker", "FinalizationViewerMoniker", "head"]
7
7
  }
@@ -1,5 +1,5 @@
1
1
  import type { BrowserSystemIdentity, BrowserSystemSession } from '@ariestools/browser-kit';
2
- import type { ChainId, CreatableProviderFactory, PrimeCachesMode, ProviderDescriptor as Xl1ProviderDescriptor, ProviderFactoryLocatorInstance, RpcTransport, XyoGateway, XyoGatewayRunner, XyoSignerRpcSchemas } from '@xyo-network/xl1-sdk';
2
+ import type { ChainId, CreatableProviderFactory, PrimeCachesMode, ProviderDescriptor as Xl1ProviderDescriptor, ProviderFactoryLocatorInstance, RestGatewayConfig, RpcTransport, XyoGateway, XyoGatewayRunner, XyoSignerRpcSchemas } from '@xyo-network/xl1-sdk';
3
3
  import type { Xl1RestEndpointLayout } from './Xl1BrowserConfig.ts';
4
4
  import type { Xl1BrowserProviderRuntimeContext } from './Xl1BrowserProvider.ts';
5
5
  import { Xl1BrowserSystemActor } from './Xl1BrowserSystemActor.ts';
@@ -9,6 +9,8 @@ export type Xl1BrowserGatewayTransport = 'rest' | 'rpc';
9
9
  export type Xl1BrowserSignerAccount = NonNullable<Xl1BrowserProviderRuntimeContext['accounts']>[string];
10
10
  /** Inputs for launching one standard browser-owned XL1 gateway system. */
11
11
  export interface LaunchXl1BrowserGatewaySystemOptions {
12
+ /** RestBlockViewer read-ahead and cache sizing (`readStep`, `maxCacheSize`). REST transport only; ignored for RPC systems. */
13
+ readonly blockViewerOptions?: RestGatewayConfig['blockViewerOptions'];
12
14
  /** Staking contract address required by finalized REST stake readers. */
13
15
  readonly chainId?: ChainId;
14
16
  readonly context?: Xl1BrowserProviderRuntimeContext;
@@ -1 +1 @@
1
- {"version":3,"file":"launchXl1BrowserGatewaySystem.d.ts","sourceRoot":"","sources":["../../src/launchXl1BrowserGatewaySystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EACV,OAAO,EACP,wBAAwB,EACxB,eAAe,EACf,kBAAkB,IAAI,qBAAqB,EAC3C,8BAA8B,EAC9B,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,sBAAsB,CAAA;AAQ7B,OAAO,KAAK,EAEV,qBAAqB,EACtB,MAAM,uBAAuB,CAAA;AAK9B,OAAO,KAAK,EAEV,gCAAgC,EACjC,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAElE,kDAAkD;AAClD,MAAM,MAAM,0BAA0B,GAAG,MAAM,GAAG,KAAK,CAAA;AAEvD,sEAAsE;AACtE,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAC/C,gCAAgC,CAAC,UAAU,CAAC,CAC7C,CAAC,MAAM,CAAC,CAAA;AAET,0EAA0E;AAC1E,MAAM,WAAW,oCAAoC;IACnD,yEAAyE;IACzE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,gCAAgC,CAAA;IACnD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAA;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAA;IACtC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAA;IAC9D,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,kEAAkE;IAClE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,uBAAuB,CAAA;IAChD,QAAQ,CAAC,aAAa,CAAC,EAAE,wBAAwB,CAAA;IACjD,gFAAgF;IAChF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,YAAY,CAAC,mBAAmB,CAAC,CAAA;IAC5D,QAAQ,CAAC,SAAS,EAAE,0BAA0B,CAAA;CAC/C;AAED,2EAA2E;AAC3E,MAAM,WAAW,8BACf,SAAQ,oBAAoB,CAAC,qBAAqB,EAAE,8BAA8B,CAAC;IACnF,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,gBAAgB,CAAA;CAChD;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,8BAA8B,CAAC,CAuDzC"}
1
+ {"version":3,"file":"launchXl1BrowserGatewaySystem.d.ts","sourceRoot":"","sources":["../../src/launchXl1BrowserGatewaySystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EACV,OAAO,EAEP,wBAAwB,EACxB,eAAe,EACf,kBAAkB,IAAI,qBAAqB,EAC3C,8BAA8B,EAC9B,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,sBAAsB,CAAA;AAQ7B,OAAO,KAAK,EAEV,qBAAqB,EACtB,MAAM,uBAAuB,CAAA;AAK9B,OAAO,KAAK,EAEV,gCAAgC,EACjC,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAElE,kDAAkD;AAClD,MAAM,MAAM,0BAA0B,GAAG,MAAM,GAAG,KAAK,CAAA;AAEvD,sEAAsE;AACtE,MAAM,MAAM,uBAAuB,GAAG,WAAW,CAC/C,gCAAgC,CAAC,UAAU,CAAC,CAC7C,CAAC,MAAM,CAAC,CAAA;AAET,0EAA0E;AAC1E,MAAM,WAAW,oCAAoC;IACnD,8HAA8H;IAC9H,QAAQ,CAAC,kBAAkB,CAAC,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,CAAA;IACrE,yEAAyE;IACzE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,gCAAgC,CAAA;IACnD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAA;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAA;IACtC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAA;IAC9D,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,kEAAkE;IAClE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,uBAAuB,CAAA;IAChD,QAAQ,CAAC,aAAa,CAAC,EAAE,wBAAwB,CAAA;IACjD,gFAAgF;IAChF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,YAAY,CAAC,mBAAmB,CAAC,CAAA;IAC5D,QAAQ,CAAC,SAAS,EAAE,0BAA0B,CAAA;CAC/C;AAED,2EAA2E;AAC3E,MAAM,WAAW,8BACf,SAAQ,oBAAoB,CAAC,qBAAqB,EAAE,8BAA8B,CAAC;IACnF,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAA;IACrC,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,gBAAgB,CAAA;CAChD;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,oCAAoC,GAC5C,OAAO,CAAC,8BAA8B,CAAC,CA4EzC"}
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-browser-system",
4
- "version": "5.5.4",
4
+ "version": "5.6.1",
5
5
  "description": "Config-driven XL1 provider actor systems for browser runtimes",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -40,42 +40,45 @@
40
40
  "README.md"
41
41
  ],
42
42
  "dependencies": {
43
- "@ariestools/provider-model": "~1.3.0",
44
- "@xyo-network/xl1-sdk": "~5.5.4"
43
+ "@ariestools/provider-model": "~2.0.0",
44
+ "@xyo-network/xl1-sdk": "~5.6.1"
45
45
  },
46
46
  "devDependencies": {
47
- "@ariestools/actor": "~1.3.0",
48
- "@ariestools/actor-model": "~1.3.0",
49
- "@ariestools/actor-system": "~1.3.0",
50
- "@ariestools/browser-kit": "~1.1.0",
51
- "@ariestools/browser-kit-page": "~1.1.0",
52
- "@ariestools/browser-kit-plugin": "~1.1.0",
53
- "@ariestools/browser-kit-service-worker": "~1.1.0",
54
- "@ariestools/browser-kit-worker": "~1.1.0",
55
- "@ariestools/provider": "~1.3.0",
56
- "@ariestools/sdk": "~8.3.0",
57
- "@ariestools/toolchain": "~10.0.6",
58
- "@ariestools/tsconfig": "~10.0.6",
59
- "@ariestools/tsconfig-dom": "~10.0.6",
47
+ "@ariestools/actor": "~2.0.0",
48
+ "@ariestools/actor-model": "~2.0.0",
49
+ "@ariestools/actor-system": "~2.0.0",
50
+ "@ariestools/browser-kit": "~2.0.0",
51
+ "@ariestools/browser-kit-page": "~2.0.0",
52
+ "@ariestools/browser-kit-plugin": "~2.0.0",
53
+ "@ariestools/browser-kit-service-worker": "~2.0.0",
54
+ "@ariestools/browser-kit-worker": "~2.0.0",
55
+ "@ariestools/provider": "~2.0.0",
56
+ "@ariestools/sdk": "~9.0.0",
57
+ "@ariestools/toolchain": "~10.0.7",
58
+ "@ariestools/tsconfig": "~10.0.7",
59
+ "@ariestools/tsconfig-dom": "~10.0.7",
60
+ "@ariestools/vitest-config": "~10.0.7",
60
61
  "@opentelemetry/api": "~1.9.1",
61
- "@xyo-network/sdk": "~7.4.2",
62
- "@xyo-network/sdk-protocol": "~7.4.2",
62
+ "@vitest/browser-playwright": "~5.0.1",
63
+ "@xyo-network/sdk": "~8.0.1",
64
+ "@xyo-network/sdk-protocol": "~8.0.1",
63
65
  "ajv": "~8.20.0",
64
66
  "async-mutex": "~0.5.0",
65
- "eslint": "~10.10.0",
67
+ "eslint": "~10.11.0",
66
68
  "ethers": "~6.17.0",
67
69
  "playwright": "~1.63.0",
68
70
  "typescript": "~6.0.3",
69
71
  "vite": "~8.3.0",
70
- "vitest": "~5.0.0",
71
- "zod": "~4.6.2"
72
+ "vitest": "~5.0.1",
73
+ "zod": "~4.6.5"
72
74
  },
73
75
  "peerDependencies": {
74
- "@ariestools/actor": "^1.3",
75
- "@ariestools/browser-kit": "^1.1"
76
+ "@ariestools/actor": "^2.0",
77
+ "@ariestools/actor-model": "^2.0",
78
+ "@ariestools/browser-kit": "^2.0"
76
79
  },
77
80
  "engines": {
78
- "node": ">=22.3"
81
+ "node": ">=26"
79
82
  },
80
83
  "engineStrict": true,
81
84
  "publishConfig": {