@xyo-network/xl1-browser-system 5.0.11

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/LICENSE ADDED
@@ -0,0 +1,165 @@
1
+ GNU LESSER GENERAL PUBLIC LICENSE
2
+ Version 3, 29 June 2007
3
+
4
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
5
+ Everyone is permitted to copy and distribute verbatim copies
6
+ of this license document, but changing it is not allowed.
7
+
8
+
9
+ This version of the GNU Lesser General Public License incorporates
10
+ the terms and conditions of version 3 of the GNU General Public
11
+ License, supplemented by the additional permissions listed below.
12
+
13
+ 0. Additional Definitions.
14
+
15
+ As used herein, "this License" refers to version 3 of the GNU Lesser
16
+ General Public License, and the "GNU GPL" refers to version 3 of the GNU
17
+ General Public License.
18
+
19
+ "The Library" refers to a covered work governed by this License,
20
+ other than an Application or a Combined Work as defined below.
21
+
22
+ An "Application" is any work that makes use of an interface provided
23
+ by the Library, but which is not otherwise based on the Library.
24
+ Defining a subclass of a class defined by the Library is deemed a mode
25
+ of using an interface provided by the Library.
26
+
27
+ A "Combined Work" is a work produced by combining or linking an
28
+ Application with the Library. The particular version of the Library
29
+ with which the Combined Work was made is also called the "Linked
30
+ Version".
31
+
32
+ The "Minimal Corresponding Source" for a Combined Work means the
33
+ Corresponding Source for the Combined Work, excluding any source code
34
+ for portions of the Combined Work that, considered in isolation, are
35
+ based on the Application, and not on the Linked Version.
36
+
37
+ The "Corresponding Application Code" for a Combined Work means the
38
+ object code and/or source code for the Application, including any data
39
+ and utility programs needed for reproducing the Combined Work from the
40
+ Application, but excluding the System Libraries of the Combined Work.
41
+
42
+ 1. Exception to Section 3 of the GNU GPL.
43
+
44
+ You may convey a covered work under sections 3 and 4 of this License
45
+ without being bound by section 3 of the GNU GPL.
46
+
47
+ 2. Conveying Modified Versions.
48
+
49
+ If you modify a copy of the Library, and, in your modifications, a
50
+ facility refers to a function or data to be supplied by an Application
51
+ that uses the facility (other than as an argument passed when the
52
+ facility is invoked), then you may convey a copy of the modified
53
+ version:
54
+
55
+ a) under this License, provided that you make a good faith effort to
56
+ ensure that, in the event an Application does not supply the
57
+ function or data, the facility still operates, and performs
58
+ whatever part of its purpose remains meaningful, or
59
+
60
+ b) under the GNU GPL, with none of the additional permissions of
61
+ this License applicable to that copy.
62
+
63
+ 3. Object Code Incorporating Material from Library Header Files.
64
+
65
+ The object code form of an Application may incorporate material from
66
+ a header file that is part of the Library. You may convey such object
67
+ code under terms of your choice, provided that, if the incorporated
68
+ material is not limited to numerical parameters, data structure
69
+ layouts and accessors, or small macros, inline functions and templates
70
+ (ten or fewer lines in length), you do both of the following:
71
+
72
+ a) Give prominent notice with each copy of the object code that the
73
+ Library is used in it and that the Library and its use are
74
+ covered by this License.
75
+
76
+ b) Accompany the object code with a copy of the GNU GPL and this license
77
+ document.
78
+
79
+ 4. Combined Works.
80
+
81
+ You may convey a Combined Work under terms of your choice that,
82
+ taken together, effectively do not restrict modification of the
83
+ portions of the Library contained in the Combined Work and reverse
84
+ engineering for debugging such modifications, if you also do each of
85
+ the following:
86
+
87
+ a) Give prominent notice with each copy of the Combined Work that
88
+ the Library is used in it and that the Library and its use are
89
+ covered by this License.
90
+
91
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
92
+ document.
93
+
94
+ c) For a Combined Work that displays copyright notices during
95
+ execution, include the copyright notice for the Library among
96
+ these notices, as well as a reference directing the user to the
97
+ copies of the GNU GPL and this license document.
98
+
99
+ d) Do one of the following:
100
+
101
+ 0) Convey the Minimal Corresponding Source under the terms of this
102
+ License, and the Corresponding Application Code in a form
103
+ suitable for, and under terms that permit, the user to
104
+ recombine or relink the Application with a modified version of
105
+ the Linked Version to produce a modified Combined Work, in the
106
+ manner specified by section 6 of the GNU GPL for conveying
107
+ Corresponding Source.
108
+
109
+ 1) Use a suitable shared library mechanism for linking with the
110
+ Library. A suitable mechanism is one that (a) uses at run time
111
+ a copy of the Library already present on the user's computer
112
+ system, and (b) will operate properly with a modified version
113
+ of the Library that is interface-compatible with the Linked
114
+ Version.
115
+
116
+ e) Provide Installation Information, but only if you would otherwise
117
+ be required to provide such information under section 6 of the
118
+ GNU GPL, and only to the extent that such information is
119
+ necessary to install and execute a modified version of the
120
+ Combined Work produced by recombining or relinking the
121
+ Application with a modified version of the Linked Version. (If
122
+ you use option 4d0, the Installation Information must accompany
123
+ the Minimal Corresponding Source and Corresponding Application
124
+ Code. If you use option 4d1, you must provide the Installation
125
+ Information in the manner specified by section 6 of the GNU GPL
126
+ for conveying Corresponding Source.)
127
+
128
+ 5. Combined Libraries.
129
+
130
+ You may place library facilities that are a work based on the
131
+ Library side by side in a single library together with other library
132
+ facilities that are not Applications and are not covered by this
133
+ License, and convey such a combined library under terms of your
134
+ choice, if you do both of the following:
135
+
136
+ a) Accompany the combined library with a copy of the same work based
137
+ on the Library, uncombined with any other library facilities,
138
+ conveyed under the terms of this License.
139
+
140
+ b) Give prominent notice with the combined library that part of it
141
+ is a work based on the Library, and explaining where to find the
142
+ accompanying uncombined form of the same work.
143
+
144
+ 6. Revised Versions of the GNU Lesser General Public License.
145
+
146
+ The Free Software Foundation may publish revised and/or new versions
147
+ of the GNU Lesser General Public License from time to time. Such new
148
+ versions will be similar in spirit to the present version, but may
149
+ differ in detail to address new problems or concerns.
150
+
151
+ Each version is given a distinguishing version number. If the
152
+ Library as you received it specifies that a certain numbered version
153
+ of the GNU Lesser General Public License "or any later version"
154
+ applies to it, you have the option of following the terms and
155
+ conditions either of that published version or of any later version
156
+ published by the Free Software Foundation. If the Library as you
157
+ received it does not specify a version number of the GNU Lesser
158
+ General Public License, you may choose any version of the GNU Lesser
159
+ General Public License ever published by the Free Software Foundation.
160
+
161
+ If the Library as you received it specifies that a proxy can decide
162
+ whether future versions of the GNU Lesser General Public License shall
163
+ apply, that proxy's public statement of acceptance of any version is
164
+ permanent authorization for you to choose that version for the
165
+ Library.
package/README.md ADDED
@@ -0,0 +1,33 @@
1
+ # `@xyo-network/xl1-browser-system`
2
+
3
+ Config-driven XL1 provider actor systems for browser pages, workers, service
4
+ workers, and extension background realms.
5
+
6
+ The package adapts XL1's provider catalog to browser-kit's neutral planner.
7
+ Configuration is parsed and resolved once, one XL1 `ProviderFactoryLocator` is
8
+ provisioned in the owner realm, and every selected actor receives that same
9
+ resolved provider system with its own actor configuration.
10
+
11
+ ```ts
12
+ import {
13
+ createXl1RestBrowserSystemConfig,
14
+ launchXl1BrowserSystem,
15
+ Xl1BrowserSystemActor,
16
+ } from '@xyo-network/xl1-browser-system'
17
+
18
+ const config = createXl1RestBrowserSystemConfig({
19
+ endpoint: 'https://sample.mainnet.xyo.space',
20
+ host: 'page',
21
+ })
22
+ const session = await launchXl1BrowserSystem({ config, host: 'page' })
23
+ const actor = session.actors[0] as Xl1BrowserSystemActor
24
+ const gateway = await actor.getGateway()
25
+ const blockNumber = await gateway.connection.viewer?.block.currentBlockNumber()
26
+
27
+ await session.stop()
28
+ ```
29
+
30
+ Browser-kit owns realm lifecycle and transport. This package owns only the XL1
31
+ provider catalog, locator provisioning, standard actor, and XL1 configuration
32
+ helpers. Wallet custody, extension authorization, storage, and sender policy
33
+ remain application concerns.
@@ -0,0 +1,21 @@
1
+ import type { BrowserActorSelection, BrowserSystemConfig } from '@ariestools/browser-kit';
2
+ import type { LocatorConfig, PrimeCachesMode } from '@xyo-network/xl1-sdk';
3
+ /** Authored XL1 locator fields plus browser actor selections. */
4
+ export interface Xl1BrowserSystemConfig extends LocatorConfig {
5
+ readonly actors: readonly BrowserActorSelection[];
6
+ }
7
+ /** Options for the standard read-only REST-backed XL1 browser system. */
8
+ export interface CreateXl1RestBrowserSystemConfigOptions {
9
+ readonly actors?: readonly BrowserActorSelection[];
10
+ readonly dataLakeEndpoint?: string;
11
+ readonly endpoint: string;
12
+ readonly host?: string;
13
+ readonly primeCaches?: PrimeCachesMode;
14
+ }
15
+ /** Parses XL1 locator fields and browser actor selections without importing code from config. */
16
+ export declare function parseXl1BrowserSystemConfig(input: unknown): Xl1BrowserSystemConfig;
17
+ /** Projects the XL1 config onto the neutral fields browser-kit compiles. */
18
+ export declare function toBrowserSystemConfig(config: Xl1BrowserSystemConfig): BrowserSystemConfig;
19
+ /** Creates explicit REST connections and provider bindings for a read-only XL1 gateway actor. */
20
+ export declare function createXl1RestBrowserSystemConfig(options: CreateXl1RestBrowserSystemConfigOptions): Xl1BrowserSystemConfig;
21
+ //# sourceMappingURL=Xl1BrowserConfig.d.ts.map
@@ -0,0 +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,EAEV,aAAa,EACb,eAAe,EAEhB,MAAM,sBAAsB,CAAA;AAuB7B,iEAAiE;AACjE,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,QAAQ,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAA;CAClD;AAED,yEAAyE;AACzE,MAAM,WAAW,uCAAuC;IACtD,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;CACvC;AAED,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,CAwCxB"}
@@ -0,0 +1,27 @@
1
+ import type { BrowserSystemProvisioner } from '@ariestools/browser-kit';
2
+ import type { CreatableProviderContext, ProviderDescriptor as Xl1ProviderDescriptor, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk';
3
+ import type { Xl1BrowserSystemConfig } from './Xl1BrowserConfig.ts';
4
+ /** Browser-kit plan metadata retaining the XL1 provider class used by the provisioner. */
5
+ export interface Xl1BrowserProviderDeclaration {
6
+ readonly connectionTypes: readonly string[];
7
+ readonly dependencies: readonly string[];
8
+ readonly id: string;
9
+ readonly monikers: readonly string[];
10
+ readonly xl1: Xl1ProviderDescriptor;
11
+ }
12
+ /** Non-serializable XL1 runtime homes supplied by the realm that owns the system. */
13
+ export type Xl1BrowserProviderRuntimeContext = Omit<CreatableProviderContext, 'config' | 'locator'>;
14
+ /** Options captured by the XL1 browser-system provisioner. */
15
+ export interface CreateXl1BrowserSystemProvisionerOptions {
16
+ readonly config: Xl1BrowserSystemConfig;
17
+ readonly context?: Xl1BrowserProviderRuntimeContext;
18
+ }
19
+ /** Adapts one XL1 provider candidate into neutral browser-kit plan metadata. */
20
+ export declare function xl1BrowserProviderDeclaration(descriptor: Xl1ProviderDescriptor): Xl1BrowserProviderDeclaration;
21
+ /** Returns the XL1 provider catalog available to browser-system configuration. */
22
+ export declare function xl1BrowserProviderCandidates(): Xl1ProviderDescriptor[];
23
+ /** Adapts an XL1 provider catalog for browser-kit planning. */
24
+ export declare function xl1BrowserProviderDeclarations(candidates?: readonly Xl1ProviderDescriptor[]): Xl1BrowserProviderDeclaration[];
25
+ /** Creates the owner-realm provisioner that instantiates one resolved XL1 locator. */
26
+ export declare function createXl1BrowserSystemProvisioner(options: CreateXl1BrowserSystemProvisionerOptions): BrowserSystemProvisioner<ProviderFactoryLocatorInstance>;
27
+ //# sourceMappingURL=Xl1BrowserProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Xl1BrowserProvider.d.ts","sourceRoot":"","sources":["../../src/Xl1BrowserProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAGvE,OAAO,KAAK,EAEV,wBAAwB,EAGxB,kBAAkB,IAAI,qBAAqB,EAC3C,8BAA8B,EAC/B,MAAM,sBAAsB,CAAA;AAU7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAEnE,0FAA0F;AAC1F,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3C,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAA;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,QAAQ,CAAC,GAAG,EAAE,qBAAqB,CAAA;CACpC;AAED,qFAAqF;AACrF,MAAM,MAAM,gCAAgC,GAAG,IAAI,CACjD,wBAAwB,EACxB,QAAQ,GAAG,SAAS,CACrB,CAAA;AAED,8DAA8D;AAC9D,MAAM,WAAW,wCAAwC;IACvD,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAA;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,gCAAgC,CAAA;CACpD;AAED,gFAAgF;AAChF,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,qBAAqB,GAChC,6BAA6B,CAQ/B;AAED,kFAAkF;AAClF,wBAAgB,4BAA4B,IAAI,qBAAqB,EAAE,CAMtE;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,CA8D1D"}
@@ -0,0 +1,19 @@
1
+ import type { ProviderActorParams } from '@ariestools/actor';
2
+ import { ProviderActor } from '@ariestools/actor';
3
+ import type { BrowserActor, ResolvedBrowserProviderPlan, ResolvedBrowserSystemConfig } from '@ariestools/browser-kit';
4
+ import { BrowserActorCatalog as BrowserActorCatalogInstance } from '@ariestools/browser-kit';
5
+ import type { ProviderFactoryLocatorInstance, XyoGateway } from '@xyo-network/xl1-sdk';
6
+ export declare const Xl1BrowserSystemActorType: "xl1-system";
7
+ export declare const Xl1BrowserSystemWithDataLakeActorType: "xl1-system-with-data-lake";
8
+ export interface Xl1BrowserSystemActorParams extends ProviderActorParams<ProviderFactoryLocatorInstance, ResolvedBrowserSystemConfig, unknown, ResolvedBrowserProviderPlan> {
9
+ }
10
+ /** Resident actor representing one configured XL1 gateway system. */
11
+ export declare class Xl1BrowserSystemActor extends ProviderActor<Xl1BrowserSystemActorParams> {
12
+ /** Resolves the gateway owned by this actor's immutable provider system. */
13
+ getGateway(): Promise<XyoGateway>;
14
+ }
15
+ export declare const Xl1BrowserSystemActorDependencies: readonly ["XyoGateway"];
16
+ export declare const Xl1BrowserSystemWithDataLakeActorDependencies: readonly ["XyoGateway", "DataLakeViewer"];
17
+ /** Creates the default actor catalog and optionally installs application actors. */
18
+ export declare function createXl1BrowserActorCatalog(): BrowserActorCatalogInstance<BrowserActor, ProviderFactoryLocatorInstance<import("@xyo-network/xl1-sdk").ProcessProviderContextType>>;
19
+ //# sourceMappingURL=Xl1BrowserSystemActor.d.ts.map
@@ -0,0 +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,EACX,MAAM,sBAAsB,CAAA;AAM7B,eAAO,MAAM,yBAAyB,EAAG,YAAqB,CAAA;AAC9D,eAAO,MAAM,qCAAqC,EAAG,2BAAoC,CAAA;AAEzF,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB,CACtE,8BAA8B,EAC9B,2BAA2B,EAC3B,OAAO,EACP,2BAA2B,CAC5B;CAAG;AAEJ,qEAAqE;AACrE,qBAAa,qBAAsB,SAAQ,aAAa,CAAC,2BAA2B,CAAC;IACnF,4EAA4E;IACtE,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;CAMxC;AAED,eAAO,MAAM,iCAAiC,yBAA+B,CAAA;AAC7E,eAAO,MAAM,6CAA6C,2CAGhD,CAAA;AAEV,oFAAoF;AACpF,wBAAgB,4BAA4B,yIAyC3C"}
@@ -0,0 +1,5 @@
1
+ export * from './launchXl1BrowserSystem.ts';
2
+ export * from './Xl1BrowserConfig.ts';
3
+ export * from './Xl1BrowserProvider.ts';
4
+ export * from './Xl1BrowserSystemActor.ts';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,4BAA4B,CAAA"}
@@ -0,0 +1,302 @@
1
+ // src/launchXl1BrowserSystem.ts
2
+ import { launchBrowserSystem } from "@ariestools/browser-kit";
3
+
4
+ // src/Xl1BrowserConfig.ts
5
+ import { parseBrowserSystemConfig } from "@ariestools/browser-kit";
6
+ import {
7
+ BlockViewerMoniker,
8
+ ChainContractViewerMoniker,
9
+ ChainStateViewerMoniker,
10
+ DataLakeViewerMoniker as DataLakeViewerMoniker2,
11
+ FinalizationViewerMoniker,
12
+ IndexViewerMoniker,
13
+ NetworkStakeStepRewardsByPositionViewerMoniker,
14
+ parseLocatorConfigFields,
15
+ restConnectionFromS3Bucket,
16
+ restGatewayConfigFromEndpoint,
17
+ SimpleXyoConnectionViewer,
18
+ SimpleXyoGateway,
19
+ XyoConnectionMoniker,
20
+ XyoGatewayMoniker as XyoGatewayMoniker2
21
+ } from "@xyo-network/xl1-sdk";
22
+
23
+ // src/Xl1BrowserSystemActor.ts
24
+ import { ProviderActor } from "@ariestools/actor";
25
+ import { BrowserActorCatalog as BrowserActorCatalogInstance } from "@ariestools/browser-kit";
26
+ import {
27
+ DataLakeViewerMoniker,
28
+ XyoGatewayMoniker
29
+ } from "@xyo-network/xl1-sdk";
30
+ var Xl1BrowserSystemActorType = "xl1-system";
31
+ var Xl1BrowserSystemWithDataLakeActorType = "xl1-system-with-data-lake";
32
+ var Xl1BrowserSystemActor = class extends ProviderActor {
33
+ /** Resolves the gateway owned by this actor's immutable provider system. */
34
+ async getGateway() {
35
+ if (this.status !== "started") {
36
+ throw new Error(`XL1 browser system actor is not running (status: ${this.status})`);
37
+ }
38
+ return await this.getProvider(XyoGatewayMoniker);
39
+ }
40
+ };
41
+ var Xl1BrowserSystemActorDependencies = [XyoGatewayMoniker];
42
+ var Xl1BrowserSystemWithDataLakeActorDependencies = [
43
+ XyoGatewayMoniker,
44
+ DataLakeViewerMoniker
45
+ ];
46
+ function createXl1BrowserActorCatalog() {
47
+ const catalog = new BrowserActorCatalogInstance();
48
+ const create = async (id, providerContext) => await Xl1BrowserSystemActor.create({
49
+ name: id,
50
+ providerContext
51
+ });
52
+ catalog.register({
53
+ create: async ({ id, providerContext }) => await create(
54
+ id,
55
+ providerContext
56
+ ),
57
+ dependencies: Xl1BrowserSystemActorDependencies,
58
+ type: Xl1BrowserSystemActorType
59
+ });
60
+ catalog.register({
61
+ create: async ({ id, providerContext }) => await create(
62
+ id,
63
+ providerContext
64
+ ),
65
+ dependencies: Xl1BrowserSystemWithDataLakeActorDependencies,
66
+ type: Xl1BrowserSystemWithDataLakeActorType
67
+ });
68
+ return catalog;
69
+ }
70
+
71
+ // src/Xl1BrowserConfig.ts
72
+ function parseXl1BrowserSystemConfig(input) {
73
+ const locatorConfig = parseLocatorConfigFields(input);
74
+ const browserConfig = parseBrowserSystemConfig({
75
+ actors: isRecord(input) ? input["actors"] : void 0,
76
+ connections: locatorConfig.connections,
77
+ providerBindings: toBrowserProviderBindings(locatorConfig.providerBindings)
78
+ });
79
+ return Object.freeze({
80
+ ...locatorConfig,
81
+ actors: Object.freeze([...browserConfig.actors ?? []])
82
+ });
83
+ }
84
+ function toBrowserSystemConfig(config) {
85
+ return {
86
+ actors: config.actors,
87
+ connections: config.connections,
88
+ providerBindings: toBrowserProviderBindings(config.providerBindings)
89
+ };
90
+ }
91
+ function createXl1RestBrowserSystemConfig(options) {
92
+ const buckets = restGatewayConfigFromEndpoint(options.endpoint);
93
+ const finalized = buckets.finalized;
94
+ if (finalized === void 0) throw new Error("XL1 REST gateway has no finalized bucket");
95
+ const connections = {
96
+ "rest-chain-state": restConnectionFromS3Bucket(buckets.chainState ?? finalized),
97
+ "rest-finalized": restConnectionFromS3Bucket(finalized),
98
+ "rest-index": restConnectionFromS3Bucket(buckets.index ?? finalized)
99
+ };
100
+ const providerBindings = {
101
+ [BlockViewerMoniker]: { connection: "rest-finalized" },
102
+ [ChainContractViewerMoniker]: { connection: "rest-chain-state" },
103
+ [ChainStateViewerMoniker]: { connection: "rest-chain-state" },
104
+ [FinalizationViewerMoniker]: { connection: "rest-finalized" },
105
+ [IndexViewerMoniker]: { connection: "rest-index" },
106
+ [XyoConnectionMoniker]: { provider: SimpleXyoConnectionViewer.name },
107
+ [XyoGatewayMoniker2]: { provider: SimpleXyoGateway.name }
108
+ };
109
+ if (options.dataLakeEndpoint !== void 0) {
110
+ connections["rest-data-lake"] = {
111
+ baseUrl: options.dataLakeEndpoint,
112
+ type: "rest"
113
+ };
114
+ providerBindings[DataLakeViewerMoniker2] = { connection: "rest-data-lake" };
115
+ }
116
+ if (options.primeCaches !== void 0) {
117
+ providerBindings[NetworkStakeStepRewardsByPositionViewerMoniker] = { primeCaches: options.primeCaches };
118
+ }
119
+ return parseXl1BrowserSystemConfig({
120
+ actors: options.actors ?? [{
121
+ host: options.host,
122
+ type: options.dataLakeEndpoint === void 0 ? Xl1BrowserSystemActorType : Xl1BrowserSystemWithDataLakeActorType
123
+ }],
124
+ connections,
125
+ providerBindings
126
+ });
127
+ }
128
+ function toBrowserProviderBindings(bindings) {
129
+ return Object.fromEntries(Object.entries(bindings).map(([moniker, binding]) => [
130
+ moniker,
131
+ binding === void 0 ? {} : {
132
+ connection: binding.connection,
133
+ options: binding.options,
134
+ provider: binding.provider
135
+ }
136
+ ]));
137
+ }
138
+ function isRecord(value) {
139
+ return typeof value === "object" && value !== null && !Array.isArray(value);
140
+ }
141
+
142
+ // src/Xl1BrowserProvider.ts
143
+ import { stopOrShutdown } from "@ariestools/actor";
144
+ import { createResolvedBrowserProviderPlan } from "@ariestools/browser-kit";
145
+ import { createResolvedProviderSystem } from "@ariestools/provider-model";
146
+ import {
147
+ allProviderCandidates,
148
+ compileLocatorConfig,
149
+ providerCandidateFromClass,
150
+ ProviderFactoryLocator,
151
+ SimpleXyoConnectionViewer as SimpleXyoConnectionViewer2,
152
+ SimpleXyoGateway as SimpleXyoGateway2
153
+ } from "@xyo-network/xl1-sdk";
154
+ function xl1BrowserProviderDeclaration(descriptor) {
155
+ return Object.freeze({
156
+ connectionTypes: Object.freeze([...descriptor.connectionTypes]),
157
+ dependencies: Object.freeze([...descriptor.dependencies ?? []]),
158
+ id: descriptor.id,
159
+ monikers: Object.freeze([...descriptor.satisfies]),
160
+ xl1: descriptor
161
+ });
162
+ }
163
+ function xl1BrowserProviderCandidates() {
164
+ return [
165
+ ...allProviderCandidates(),
166
+ providerCandidateFromClass(SimpleXyoConnectionViewer2),
167
+ providerCandidateFromClass(SimpleXyoGateway2)
168
+ ];
169
+ }
170
+ function xl1BrowserProviderDeclarations(candidates = xl1BrowserProviderCandidates()) {
171
+ return candidates.map(xl1BrowserProviderDeclaration);
172
+ }
173
+ function createXl1BrowserSystemProvisioner(options) {
174
+ return async (input) => {
175
+ const providerBindings = mergeResolvedProviderBindings(
176
+ options.config.providerBindings,
177
+ input.compiled.config.providerBindings
178
+ );
179
+ const locatorConfig = compileLocatorConfig({
180
+ ...options.config,
181
+ connections: input.compiled.config.connections,
182
+ providerBindings
183
+ });
184
+ const locator = new ProviderFactoryLocator({
185
+ caches: {},
186
+ singletons: {},
187
+ ...options.context,
188
+ config: locatorConfig
189
+ });
190
+ for (const selected of input.compiled.resolution.selected) {
191
+ const declaration = selected;
192
+ const descriptor = declaration.xl1;
193
+ locator.register(descriptor.creatableProvider.factory([
194
+ ...descriptor.dependencies ?? descriptor.creatableProvider.dependencies
195
+ ]));
196
+ }
197
+ locator.freeze();
198
+ try {
199
+ for (const moniker of input.compiled.declaration.dependencies) {
200
+ await locator.getInstance(moniker);
201
+ }
202
+ } catch (startError) {
203
+ const releaseError = await releaseXl1Providers(locator).catch((error) => error);
204
+ if (releaseError !== void 0) {
205
+ throw new AggregateError(
206
+ [startError, releaseError],
207
+ "XL1 browser provider provisioning and cleanup both failed",
208
+ { cause: startError }
209
+ );
210
+ }
211
+ throw startError;
212
+ }
213
+ const resolvedConfig = Object.freeze({
214
+ ...options.config,
215
+ actors: input.config.actors,
216
+ connections: input.compiled.config.connections,
217
+ providerBindings
218
+ });
219
+ const system = createResolvedProviderSystem({
220
+ config: resolvedConfig,
221
+ locator,
222
+ resolution: createResolvedBrowserProviderPlan(input.compiled.resolution)
223
+ });
224
+ let releasePromise;
225
+ return {
226
+ release: () => {
227
+ releasePromise ??= releaseXl1Providers(locator);
228
+ return releasePromise;
229
+ },
230
+ system
231
+ };
232
+ };
233
+ }
234
+ function mergeResolvedProviderBindings(authored, resolved) {
235
+ return Object.fromEntries(Object.entries(resolved).map(([moniker, binding]) => [
236
+ moniker,
237
+ {
238
+ ...authored[moniker],
239
+ ...binding
240
+ }
241
+ ]));
242
+ }
243
+ async function releaseXl1Providers(locator) {
244
+ const instances = await instantiatedProviders(locator);
245
+ for (const instance of instances) instance.requestCancel?.();
246
+ const errors = [];
247
+ for (const instance of instances.toReversed()) {
248
+ try {
249
+ await stopOrShutdown(instance);
250
+ } catch (error) {
251
+ errors.push(error);
252
+ }
253
+ }
254
+ if (errors.length > 0) {
255
+ throw new AggregateError(errors, `${errors.length} XL1 browser provider(s) failed to stop`);
256
+ }
257
+ }
258
+ async function instantiatedProviders(locator) {
259
+ const instances = await Promise.all(
260
+ Object.values(locator.context.singletons).map(async (value) => await value)
261
+ );
262
+ return [...new Set(instances)].filter(isCreatableProviderInstance);
263
+ }
264
+ function isCreatableProviderInstance(value) {
265
+ return typeof value === "object" && value !== null && "stop" in value && typeof value.stop === "function";
266
+ }
267
+
268
+ // src/launchXl1BrowserSystem.ts
269
+ async function launchXl1BrowserSystem(options) {
270
+ const config = parseXl1BrowserSystemConfig(options.config);
271
+ const actorCatalog = options.actorCatalog ?? createXl1BrowserActorCatalog();
272
+ const providerDescriptors = xl1BrowserProviderDeclarations(options.providerCandidates);
273
+ return await launchBrowserSystem({
274
+ actorCatalog,
275
+ config: toBrowserSystemConfig(config),
276
+ host: options.host,
277
+ identity: options.identity,
278
+ providerDescriptors,
279
+ provision: createXl1BrowserSystemProvisioner({
280
+ config,
281
+ context: options.context
282
+ }),
283
+ readyTimeoutMs: options.readyTimeoutMs
284
+ });
285
+ }
286
+ export {
287
+ Xl1BrowserSystemActor,
288
+ Xl1BrowserSystemActorDependencies,
289
+ Xl1BrowserSystemActorType,
290
+ Xl1BrowserSystemWithDataLakeActorDependencies,
291
+ Xl1BrowserSystemWithDataLakeActorType,
292
+ createXl1BrowserActorCatalog,
293
+ createXl1BrowserSystemProvisioner,
294
+ createXl1RestBrowserSystemConfig,
295
+ launchXl1BrowserSystem,
296
+ parseXl1BrowserSystemConfig,
297
+ toBrowserSystemConfig,
298
+ xl1BrowserProviderCandidates,
299
+ xl1BrowserProviderDeclaration,
300
+ xl1BrowserProviderDeclarations
301
+ };
302
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/launchXl1BrowserSystem.ts", "../../src/Xl1BrowserConfig.ts", "../../src/Xl1BrowserSystemActor.ts", "../../src/Xl1BrowserProvider.ts"],
4
+ "sourcesContent": ["import type {\n BrowserActor,\n BrowserActorCatalog,\n BrowserProviderDescriptor,\n BrowserSystemIdentity,\n BrowserSystemSession,\n} from '@ariestools/browser-kit'\nimport { launchBrowserSystem } from '@ariestools/browser-kit'\nimport type {\n ProviderDescriptor as Xl1ProviderDescriptor,\n ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-sdk'\n\nimport {\n parseXl1BrowserSystemConfig,\n toBrowserSystemConfig,\n} from './Xl1BrowserConfig.ts'\nimport {\n createXl1BrowserSystemProvisioner,\n xl1BrowserProviderDeclarations,\n type Xl1BrowserProviderRuntimeContext,\n} from './Xl1BrowserProvider.ts'\nimport { createXl1BrowserActorCatalog } from './Xl1BrowserSystemActor.ts'\n\n/** Inputs for launching one owner-resolved XL1 browser provider system. */\nexport interface LaunchXl1BrowserSystemOptions<TActor extends BrowserActor = BrowserActor> {\n readonly actorCatalog?: BrowserActorCatalog<TActor, ProviderFactoryLocatorInstance>\n readonly config: unknown\n readonly context?: Xl1BrowserProviderRuntimeContext\n readonly host?: string\n readonly identity?: BrowserSystemIdentity\n readonly providerCandidates?: readonly Xl1ProviderDescriptor[]\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 config = parseXl1BrowserSystemConfig(options.config)\n const actorCatalog = options.actorCatalog\n ?? createXl1BrowserActorCatalog() as BrowserActorCatalog<TActor, ProviderFactoryLocatorInstance>\n const providerDescriptors = xl1BrowserProviderDeclarations(options.providerCandidates)\n return await launchBrowserSystem({\n actorCatalog,\n config: toBrowserSystemConfig(config),\n host: options.host,\n identity: options.identity,\n providerDescriptors: providerDescriptors as unknown as BrowserProviderDescriptor[],\n provision: createXl1BrowserSystemProvisioner({\n config,\n context: options.context,\n }),\n readyTimeoutMs: options.readyTimeoutMs,\n })\n}\n", "import type {\n BrowserActorSelection,\n BrowserSystemConfig,\n} from '@ariestools/browser-kit'\nimport { parseBrowserSystemConfig } from '@ariestools/browser-kit'\nimport type {\n ConnectionsConfig,\n LocatorConfig,\n PrimeCachesMode,\n ProviderBindingsConfig,\n} from '@xyo-network/xl1-sdk'\nimport {\n BlockViewerMoniker,\n ChainContractViewerMoniker,\n ChainStateViewerMoniker,\n DataLakeViewerMoniker,\n FinalizationViewerMoniker,\n IndexViewerMoniker,\n NetworkStakeStepRewardsByPositionViewerMoniker,\n parseLocatorConfigFields,\n restConnectionFromS3Bucket,\n restGatewayConfigFromEndpoint,\n SimpleXyoConnectionViewer,\n SimpleXyoGateway,\n XyoConnectionMoniker,\n XyoGatewayMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport {\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 the standard read-only REST-backed XL1 browser system. */\nexport interface CreateXl1RestBrowserSystemConfigOptions {\n readonly actors?: readonly BrowserActorSelection[]\n readonly dataLakeEndpoint?: string\n readonly endpoint: string\n readonly host?: string\n readonly primeCaches?: PrimeCachesMode\n}\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 a read-only XL1 gateway actor. */\nexport function createXl1RestBrowserSystemConfig(\n options: CreateXl1RestBrowserSystemConfigOptions,\n): Xl1BrowserSystemConfig {\n const buckets = 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 [XyoConnectionMoniker]: { provider: SimpleXyoConnectionViewer.name },\n [XyoGatewayMoniker]: { provider: SimpleXyoGateway.name },\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.primeCaches !== undefined) {\n providerBindings[NetworkStakeStepRewardsByPositionViewerMoniker] = { primeCaches: options.primeCaches }\n }\n\n return parseXl1BrowserSystemConfig({\n actors: options.actors ?? [{\n host: options.host,\n type: options.dataLakeEndpoint === undefined\n ? Xl1BrowserSystemActorType\n : Xl1BrowserSystemWithDataLakeActorType,\n }],\n connections,\n providerBindings,\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 {\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} from '@xyo-network/xl1-sdk'\nimport {\n DataLakeViewerMoniker,\n XyoGatewayMoniker,\n} from '@xyo-network/xl1-sdk'\n\nexport const Xl1BrowserSystemActorType = 'xl1-system' as const\nexport const Xl1BrowserSystemWithDataLakeActorType = 'xl1-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> {\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<XyoGateway>(XyoGatewayMoniker)\n }\n}\n\nexport const Xl1BrowserSystemActorDependencies = [XyoGatewayMoniker] as const\nexport const Xl1BrowserSystemWithDataLakeActorDependencies = [\n XyoGatewayMoniker,\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(\n id,\n providerContext as ProviderActorContext<\n ProviderFactoryLocatorInstance,\n ResolvedBrowserSystemConfig,\n unknown,\n ResolvedBrowserProviderPlan\n >,\n ),\n dependencies: Xl1BrowserSystemActorDependencies,\n type: Xl1BrowserSystemActorType,\n })\n catalog.register({\n create: async ({ id, providerContext }) => await create(\n id,\n providerContext as ProviderActorContext<\n ProviderFactoryLocatorInstance,\n ResolvedBrowserSystemConfig,\n unknown,\n ResolvedBrowserProviderPlan\n >,\n ),\n dependencies: Xl1BrowserSystemWithDataLakeActorDependencies,\n type: Xl1BrowserSystemWithDataLakeActorType,\n })\n return catalog\n}\n", "import { stopOrShutdown } from '@ariestools/actor'\nimport 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 CreatableProviderInstance,\n ProviderBindingsConfig,\n ProviderDescriptor as Xl1ProviderDescriptor,\n ProviderFactoryLocatorInstance,\n} from '@xyo-network/xl1-sdk'\nimport {\n allProviderCandidates,\n compileLocatorConfig,\n providerCandidateFromClass,\n ProviderFactoryLocator,\n SimpleXyoConnectionViewer,\n SimpleXyoGateway,\n} from '@xyo-network/xl1-sdk'\n\nimport type { Xl1BrowserSystemConfig } from './Xl1BrowserConfig.ts'\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}\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 providerCandidateFromClass(SimpleXyoConnectionViewer),\n providerCandidateFromClass(SimpleXyoGateway),\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 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(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 releaseXl1Providers(locator).catch(error => 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 ??= releaseXl1Providers(locator)\n return releasePromise\n },\n system,\n }\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\nasync function releaseXl1Providers(locator: ProviderFactoryLocatorInstance): Promise<void> {\n const instances = await instantiatedProviders(locator)\n for (const instance of instances) instance.requestCancel?.()\n\n const errors: unknown[] = []\n for (const instance of instances.toReversed()) {\n try {\n await stopOrShutdown(instance)\n } catch (error) {\n errors.push(error)\n }\n }\n if (errors.length > 0) {\n throw new AggregateError(errors, `${errors.length} XL1 browser provider(s) failed to stop`)\n }\n}\n\nasync function instantiatedProviders(\n locator: ProviderFactoryLocatorInstance,\n): Promise<(CreatableProviderInstance & { requestCancel?(reason?: unknown): void })[]> {\n const instances = await Promise.all(\n Object.values(locator.context.singletons).map(async value => await value),\n )\n return [...new Set(instances)].filter(isCreatableProviderInstance)\n}\n\nfunction isCreatableProviderInstance(\n value: unknown,\n): value is CreatableProviderInstance & { requestCancel?(reason?: unknown): void } {\n return typeof value === 'object'\n && value !== null\n && 'stop' in value\n && typeof value.stop === 'function'\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["DataLakeViewerMoniker", "XyoGatewayMoniker", "XyoGatewayMoniker", "DataLakeViewerMoniker", "SimpleXyoConnectionViewer", "SimpleXyoGateway"]
7
+ }
@@ -0,0 +1,16 @@
1
+ import type { BrowserActor, BrowserActorCatalog, BrowserSystemIdentity, BrowserSystemSession } from '@ariestools/browser-kit';
2
+ import type { ProviderDescriptor as Xl1ProviderDescriptor, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk';
3
+ import { type Xl1BrowserProviderRuntimeContext } from './Xl1BrowserProvider.ts';
4
+ /** Inputs for launching one owner-resolved XL1 browser provider system. */
5
+ export interface LaunchXl1BrowserSystemOptions<TActor extends BrowserActor = BrowserActor> {
6
+ readonly actorCatalog?: BrowserActorCatalog<TActor, ProviderFactoryLocatorInstance>;
7
+ readonly config: unknown;
8
+ readonly context?: Xl1BrowserProviderRuntimeContext;
9
+ readonly host?: string;
10
+ readonly identity?: BrowserSystemIdentity;
11
+ readonly providerCandidates?: readonly Xl1ProviderDescriptor[];
12
+ readonly readyTimeoutMs?: number;
13
+ }
14
+ /** Parses, resolves, provisions, and starts one XL1 system from browser-safe config. */
15
+ export declare function launchXl1BrowserSystem<TActor extends BrowserActor = BrowserActor>(options: LaunchXl1BrowserSystemOptions<TActor>): Promise<BrowserSystemSession<TActor, ProviderFactoryLocatorInstance>>;
16
+ //# sourceMappingURL=launchXl1BrowserSystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launchXl1BrowserSystem.d.ts","sourceRoot":"","sources":["../../src/launchXl1BrowserSystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EAEnB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,KAAK,EACV,kBAAkB,IAAI,qBAAqB,EAC3C,8BAA8B,EAC/B,MAAM,sBAAsB,CAAA;AAM7B,OAAO,EAGL,KAAK,gCAAgC,EACtC,MAAM,yBAAyB,CAAA;AAGhC,2EAA2E;AAC3E,MAAM,WAAW,6BAA6B,CAAC,MAAM,SAAS,YAAY,GAAG,YAAY;IACvF,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAA;IACnF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,gCAAgC,CAAA;IACnD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,qBAAqB,CAAA;IACzC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAA;IAC9D,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CACjC;AAED,wFAAwF;AACxF,wBAAsB,sBAAsB,CAAC,MAAM,SAAS,YAAY,GAAG,YAAY,EACrF,OAAO,EAAE,6BAA6B,CAAC,MAAM,CAAC,GAC7C,OAAO,CAAC,oBAAoB,CAAC,MAAM,EAAE,8BAA8B,CAAC,CAAC,CAiBvE"}
package/package.json ADDED
@@ -0,0 +1,83 @@
1
+ {
2
+ "$schema": "http://json.schemastore.org/package.json",
3
+ "name": "@xyo-network/xl1-browser-system",
4
+ "version": "5.0.11",
5
+ "description": "Config-driven XL1 provider actor systems for browser runtimes",
6
+ "homepage": "https://xylabs.com",
7
+ "bugs": {
8
+ "url": "https://github.com/XYOracleNetwork/xl1-protocol/issues",
9
+ "email": "support@xylabs.com"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/XYOracleNetwork/xl1-protocol.git",
14
+ "directory": "packages/browser-system"
15
+ },
16
+ "license": "LGPL-3.0-only",
17
+ "author": {
18
+ "name": "XY Labs Development Team",
19
+ "email": "support@xylabs.com",
20
+ "url": "https://xylabs.com"
21
+ },
22
+ "sideEffects": false,
23
+ "type": "module",
24
+ "exports": {
25
+ ".": {
26
+ "types": "./dist/browser/index.d.ts",
27
+ "browser": {
28
+ "types": "./dist/browser/index.d.ts",
29
+ "default": "./dist/browser/index.mjs"
30
+ },
31
+ "default": "./dist/browser/index.mjs"
32
+ },
33
+ "./package.json": "./package.json"
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "!**/*.bench.*",
38
+ "!**/*.spec.*",
39
+ "!**/*.test.*",
40
+ "README.md"
41
+ ],
42
+ "dependencies": {
43
+ "@ariestools/provider-model": "~1.1.1",
44
+ "@xyo-network/xl1-sdk": "~5.0.11"
45
+ },
46
+ "devDependencies": {
47
+ "@ariestools/actor": "~1.1.1",
48
+ "@ariestools/actor-model": "~1.1.1",
49
+ "@ariestools/browser-kit": "~0.1.1",
50
+ "@ariestools/provider": "~1.1.1",
51
+ "@ariestools/sdk": "~8.1.6",
52
+ "@ariestools/toolchain": "~8.7.26",
53
+ "@ariestools/tsconfig": "~8.7.26",
54
+ "@ariestools/tsconfig-dom": "~8.7.26",
55
+ "@opentelemetry/api": "~1.9.1",
56
+ "@xyo-network/sdk": "~7.2.3",
57
+ "@xyo-network/sdk-protocol": "~7.2.3",
58
+ "ajv": "~8.20.0",
59
+ "async-mutex": "~0.5.0",
60
+ "eslint": "~10.8.0",
61
+ "ethers": "~6.17.0",
62
+ "msw": "~2.15.0",
63
+ "typescript": "~6.0.3",
64
+ "vite": "~8.2.0",
65
+ "vitest": "~4.1.10",
66
+ "zod": "~4.4.3"
67
+ },
68
+ "peerDependencies": {
69
+ "@ariestools/actor": "^1.1",
70
+ "@ariestools/browser-kit": "^0.1"
71
+ },
72
+ "engines": {
73
+ "node": ">=22.3"
74
+ },
75
+ "engineStrict": true,
76
+ "publishConfig": {
77
+ "access": "public"
78
+ },
79
+ "scripts": {
80
+ "test": "vitest run",
81
+ "test:ci": "vitest run"
82
+ }
83
+ }