@xyo-network/xl1-browser-system 5.0.12 → 5.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -39,6 +39,18 @@ export function xl1ConfigFor(host: string) {
39
39
  The resulting object contains actor selections, named connections, and provider
40
40
  bindings. It contains no module paths or executable code.
41
41
 
42
+ For local gateways that publish buckets under one path-based origin rather than
43
+ the standard `blocks.*`, `state.*`, and `indexes.*` subdomains, set
44
+ `layout: 'path'`:
45
+
46
+ ```ts
47
+ const localConfig = createXl1RestBrowserSystemConfig({
48
+ endpoint: 'https://chain.aries.test:8791',
49
+ host: 'page',
50
+ layout: 'path',
51
+ })
52
+ ```
53
+
42
54
  When adding a custom provider candidate, pass a stable explicit identifier to
43
55
  `providerCandidateFromClass`. Constructor names can be changed by production
44
56
  minifiers and must not become configuration identifiers:
@@ -10,8 +10,11 @@ export interface CreateXl1RestBrowserSystemConfigOptions {
10
10
  readonly dataLakeEndpoint?: string;
11
11
  readonly endpoint: string;
12
12
  readonly host?: string;
13
+ readonly layout?: Xl1RestEndpointLayout;
13
14
  readonly primeCaches?: PrimeCachesMode;
14
15
  }
16
+ /** How the REST gateway's finalized, chain-state, and index URLs are derived from its endpoint. */
17
+ export type Xl1RestEndpointLayout = 'path' | 'subdomain';
15
18
  /** Parses XL1 locator fields and browser actor selections without importing code from config. */
16
19
  export declare function parseXl1BrowserSystemConfig(input: unknown): Xl1BrowserSystemConfig;
17
20
  /** Projects the XL1 config onto the neutral fields browser-kit compiles. */
@@ -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,EAEV,aAAa,EACb,eAAe,EAEhB,MAAM,sBAAsB,CAAA;AAyB7B,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"}
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,EAGhB,MAAM,sBAAsB,CAAA;AAyB7B,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,MAAM,CAAC,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAA;CACvC;AAED,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,CA0CxB"}
@@ -215,7 +215,7 @@ function toBrowserSystemConfig(config) {
215
215
  };
216
216
  }
217
217
  function createXl1RestBrowserSystemConfig(options) {
218
- const buckets = restGatewayConfigFromEndpoint(options.endpoint);
218
+ const buckets = options.layout === "path" ? restGatewayConfigFromPathEndpoint(options.endpoint) : restGatewayConfigFromEndpoint(options.endpoint);
219
219
  const finalized = buckets.finalized;
220
220
  if (finalized === void 0) throw new Error("XL1 REST gateway has no finalized bucket");
221
221
  const connections = {
@@ -251,6 +251,14 @@ function createXl1RestBrowserSystemConfig(options) {
251
251
  providerBindings
252
252
  });
253
253
  }
254
+ function restGatewayConfigFromPathEndpoint(endpoint) {
255
+ const baseUrl = endpoint.endsWith("/") ? endpoint.slice(0, -1) : endpoint;
256
+ return {
257
+ chainState: { readUrl: `${baseUrl}/state` },
258
+ finalized: { readUrl: `${baseUrl}/blocks` },
259
+ index: { readUrl: `${baseUrl}/indexes` }
260
+ };
261
+ }
254
262
  function toBrowserProviderBindings(bindings) {
255
263
  return Object.fromEntries(Object.entries(bindings).map(([moniker, binding]) => [
256
264
  moniker,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/launchXl1BrowserSystem.ts", "../../src/Xl1BrowserConfig.ts", "../../src/Xl1BrowserProvider.ts", "../../src/Xl1BrowserSystemActor.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 XyoConnectionMoniker,\n XyoGatewayMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport {\n SimpleXyoConnectionViewerProviderId,\n SimpleXyoGatewayProviderId,\n} from './Xl1BrowserProvider.ts'\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: 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.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 { 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/** 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\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, SimpleXyoConnectionViewerProviderId),\n providerCandidateFromClass(SimpleXyoGateway, SimpleXyoGatewayProviderId),\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", "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"],
5
- "mappings": "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",
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 RestGatewayConfig,\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 XyoConnectionMoniker,\n XyoGatewayMoniker,\n} from '@xyo-network/xl1-sdk'\n\nimport {\n SimpleXyoConnectionViewerProviderId,\n SimpleXyoGatewayProviderId,\n} from './Xl1BrowserProvider.ts'\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 layout?: Xl1RestEndpointLayout\n readonly primeCaches?: PrimeCachesMode\n}\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 a read-only XL1 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 [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.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 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 { 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/** 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\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, SimpleXyoConnectionViewerProviderId),\n providerCandidateFromClass(SimpleXyoGateway, SimpleXyoGatewayProviderId),\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", "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"],
5
+ "mappings": "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",
6
6
  "names": ["DataLakeViewerMoniker", "XyoGatewayMoniker", "XyoGatewayMoniker", "DataLakeViewerMoniker"]
7
7
  }
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.0.12",
4
+ "version": "5.0.13",
5
5
  "description": "Config-driven XL1 provider actor systems for browser runtimes",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -41,7 +41,7 @@
41
41
  ],
42
42
  "dependencies": {
43
43
  "@ariestools/provider-model": "~1.1.1",
44
- "@xyo-network/xl1-sdk": "~5.0.12"
44
+ "@xyo-network/xl1-sdk": "~5.0.13"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@ariestools/actor": "~1.1.1",