@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 +159 -0
- package/dist/browser/Xl1BrowserConfig.d.ts +6 -1
- package/dist/browser/Xl1BrowserConfig.d.ts.map +1 -1
- package/dist/browser/Xl1BrowserProvider.d.ts +3 -0
- package/dist/browser/Xl1BrowserProvider.d.ts.map +1 -1
- package/dist/browser/Xl1BrowserSystemActor.d.ts +8 -2
- package/dist/browser/Xl1BrowserSystemActor.d.ts.map +1 -1
- package/dist/browser/Xl1FinalizedBlockActor.d.ts +35 -0
- package/dist/browser/Xl1FinalizedBlockActor.d.ts.map +1 -0
- package/dist/browser/compileXl1BrowserSystem.d.ts.map +1 -1
- package/dist/browser/index.d.ts +1 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.mjs +209 -45
- package/dist/browser/index.mjs.map +4 -4
- package/dist/browser/launchXl1BrowserGatewaySystem.d.ts +3 -1
- package/dist/browser/launchXl1BrowserGatewaySystem.d.ts.map +1 -1
- package/package.json +27 -24
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,
|
|
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;
|
|
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<
|
|
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
|
|
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;
|
|
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,
|
|
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"}
|
package/dist/browser/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/browser/index.mjs
CHANGED
|
@@ -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
|
-
|
|
48
|
+
const captured = Object.freeze({
|
|
49
|
+
...descriptor,
|
|
48
50
|
connectionTypes: Object.freeze([...descriptor.connectionTypes]),
|
|
49
|
-
dependencies: Object.freeze([...descriptor.dependencies ??
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
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.
|
|
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(
|
|
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
|
|
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
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
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 () =>
|
|
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
|
|
534
|
-
if (
|
|
607
|
+
const cleanupErrors = await stopSessionAndHandles(session, ownedHandles);
|
|
608
|
+
if (cleanupErrors.length > 0) {
|
|
535
609
|
throw new AggregateError(
|
|
536
|
-
[launchError,
|
|
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
|
|
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,
|
|
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.
|
|
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": "~
|
|
44
|
-
"@xyo-network/xl1-sdk": "~5.
|
|
43
|
+
"@ariestools/provider-model": "~2.0.0",
|
|
44
|
+
"@xyo-network/xl1-sdk": "~5.6.1"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@ariestools/actor": "~
|
|
48
|
-
"@ariestools/actor-model": "~
|
|
49
|
-
"@ariestools/actor-system": "~
|
|
50
|
-
"@ariestools/browser-kit": "~
|
|
51
|
-
"@ariestools/browser-kit-page": "~
|
|
52
|
-
"@ariestools/browser-kit-plugin": "~
|
|
53
|
-
"@ariestools/browser-kit-service-worker": "~
|
|
54
|
-
"@ariestools/browser-kit-worker": "~
|
|
55
|
-
"@ariestools/provider": "~
|
|
56
|
-
"@ariestools/sdk": "~
|
|
57
|
-
"@ariestools/toolchain": "~10.0.
|
|
58
|
-
"@ariestools/tsconfig": "~10.0.
|
|
59
|
-
"@ariestools/tsconfig-dom": "~10.0.
|
|
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
|
-
"@
|
|
62
|
-
"@xyo-network/sdk
|
|
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.
|
|
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.
|
|
71
|
-
"zod": "~4.6.
|
|
72
|
+
"vitest": "~5.0.1",
|
|
73
|
+
"zod": "~4.6.5"
|
|
72
74
|
},
|
|
73
75
|
"peerDependencies": {
|
|
74
|
-
"@ariestools/actor": "^
|
|
75
|
-
"@ariestools/
|
|
76
|
+
"@ariestools/actor": "^2.0",
|
|
77
|
+
"@ariestools/actor-model": "^2.0",
|
|
78
|
+
"@ariestools/browser-kit": "^2.0"
|
|
76
79
|
},
|
|
77
80
|
"engines": {
|
|
78
|
-
"node": ">=
|
|
81
|
+
"node": ">=26"
|
|
79
82
|
},
|
|
80
83
|
"engineStrict": true,
|
|
81
84
|
"publishConfig": {
|