{
  "version": 3,
  "sources": ["../../src/modules/bridge-http/HttpBridge.ts", "../../src/modules/bridge-http/HttpBridgeConfig.ts", "../../src/modules/bridge-http/HttpBridgeModuleResolver.ts", "../../src/modules/bridge-http/ModuleProxy/ModuleProxy.ts"],
  "sourcesContent": ["import type { Promisable } from '@ariestools/sdk'\nimport {\n  assertEx,\n  exists,\n  FetchClientError,\n  FetchJsonClient,\n  forget,\n  toSafeJsonString,\n} from '@ariestools/sdk'\nimport type {\n  ApiEnvelope, ModuleManifestPayload, NodeManifestPayload, Payload, QueryBoundWitness, Schema, XyoAddress,\n} from '@xyo-network/sdk-protocol'\nimport { isPayloadOfSchemaType, NodeManifestPayloadSchema } from '@xyo-network/sdk-protocol'\nimport { Mutex, Semaphore } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport { AbstractBridge } from '#bridge-abstract'\nimport type {\n  BridgeExposeOptions,\n  BridgeModule,\n  BridgeParams,\n  BridgeUnexposeOptions,\n  QuerySendFinishedEventArgs,\n  QuerySendStartedEventArgs,\n} from '#bridge-model'\nimport type {\n  AnyConfigSchema,\n  ModuleInstance,\n  ModuleQueryResult,\n  ModuleResolverInstance,\n  ModuleStateQuery,\n} from '#module-model'\nimport {\n  creatableModule,\n  ModuleStateQuerySchema,\n} from '#module-model'\nimport { asAttachableNodeInstance } from '#node-model'\n\nimport type { HttpBridgeConfig } from './HttpBridgeConfig.ts'\nimport { HttpBridgeConfigSchema } from './HttpBridgeConfig.ts'\nimport { HttpBridgeModuleResolver } from './HttpBridgeModuleResolver.ts'\nimport type { BridgeQuerySender } from './ModuleProxy/index.ts'\n\nexport interface HttpBridgeParams extends BridgeParams<AnyConfigSchema<HttpBridgeConfig>> {\n  fetchClient?: FetchJsonClient\n}\n\n@creatableModule()\nexport class HttpBridge<TParams extends HttpBridgeParams> extends AbstractBridge<TParams> implements BridgeModule<TParams>, BridgeQuerySender {\n  static override readonly configSchemas: Schema[] = [...super.configSchemas, HttpBridgeConfigSchema]\n  static override readonly defaultConfigSchema: Schema = HttpBridgeConfigSchema\n  static readonly defaultFailureRetryTime: number = 1000 * 60\n  static readonly defaultMaxConnections = 4\n  static readonly defaultMaxPayloadSizeWarning: number = 256 * 256\n  static readonly fetchClient: FetchJsonClient = new FetchJsonClient()\n  static readonly maxFailureCacheSize = 1000\n\n  private _discoverRootsMutex = new Mutex()\n  private _failureTimeCache = new LRUCache<XyoAddress, number>({ max: HttpBridge.maxFailureCacheSize })\n  private _fetchClient?: FetchJsonClient\n  private _querySemaphore?: Semaphore\n  private _resolver?: HttpBridgeModuleResolver\n\n  get clientUrl(): string {\n    return assertEx(this.config.client?.url, () => 'No Url Set')\n  }\n\n  get failureRetryTime(): number {\n    return this.config.failureRetryTime ?? HttpBridge.defaultFailureRetryTime\n  }\n\n  get fetchClient(): FetchJsonClient {\n    this._fetchClient = this._fetchClient ?? this.params.fetchClient ?? HttpBridge.fetchClient\n    return this._fetchClient\n  }\n\n  get maxConnections(): number {\n    return this.config.maxConnections ?? HttpBridge.defaultMaxConnections\n  }\n\n  get maxPayloadSizeWarning(): number {\n    return this.config.maxPayloadSizeWarning ?? HttpBridge.defaultMaxPayloadSizeWarning\n  }\n\n  get querySemaphore(): Semaphore {\n    this._querySemaphore = this._querySemaphore ?? new Semaphore(this.maxConnections)\n    return this._querySemaphore\n  }\n\n  override get resolver(): HttpBridgeModuleResolver {\n    this._resolver\n      = this._resolver\n        ?? new HttpBridgeModuleResolver({\n          additionalSigners: this.additionalSigners,\n          archiving: { ...this.archiving, resolveArchivists: this.resolveArchivingArchivists.bind(this) },\n          bridge: this,\n          onQuerySendFinished: (args: Omit<QuerySendFinishedEventArgs, 'mod'>) => {\n            forget(this.emit('querySendFinished', { mod: this, ...args }))\n          },\n          onQuerySendStarted: (args: Omit<QuerySendStartedEventArgs, 'mod'>) => {\n            forget(this.emit('querySendStarted', { mod: this, ...args }))\n          },\n          querySender: this,\n          root: this,\n          rootUrl: this.clientUrl,\n          wrapperAccount: this.account,\n        })\n    return this._resolver\n  }\n\n  override exposeHandler(_id: string, _options?: BridgeExposeOptions): Promisable<ModuleInstance[]> {\n    throw new Error('Unsupported')\n  }\n\n  override exposedHandler(): Promisable<XyoAddress[]> {\n    throw new Error('Unsupported')\n  }\n\n  async getRoots(force?: boolean): Promise<ModuleInstance[]> {\n    return await this._discoverRootsMutex.runExclusive(async () => {\n      if (this._roots === undefined || force) {\n        const state = await this.getRootState()\n        this.logger?.debug(`HttpBridge:discoverRoots.state [${state?.length}]`)\n        const nodeManifest = state?.find(isPayloadOfSchemaType<NodeManifestPayload>(NodeManifestPayloadSchema))\n        if (nodeManifest) {\n          const mods = (await this.resolveRootNode(nodeManifest)).filter(exists)\n          this.logger?.debug(`HttpBridge:discoverRoots [${mods.length}]`)\n          this._roots = mods\n        } else {\n          this._roots = []\n        }\n      }\n      return this._roots\n    })\n  }\n\n  moduleUrl(address: XyoAddress): URL {\n    return new URL(address, this.clientUrl)\n  }\n\n  async sendBridgeQuery<TOut extends Payload = Payload, TQuery extends QueryBoundWitness = QueryBoundWitness, TIn extends Payload = Payload>(\n    targetAddress: XyoAddress,\n    query: TQuery,\n    payloads?: TIn[],\n  ): Promise<ModuleQueryResult<TOut>> {\n    const lastFailureTime = this._failureTimeCache.get(targetAddress)\n    if (lastFailureTime !== undefined) {\n      const now = Date.now()\n      const timeSincePreviousFailure = now - lastFailureTime\n      if (timeSincePreviousFailure > this.failureRetryTime) {\n        throw new Error(`target module failed recently [${targetAddress}] [${timeSincePreviousFailure}ms ago]`)\n      }\n      this._failureTimeCache.delete(targetAddress)\n    }\n    try {\n      await this.querySemaphore.acquire()\n      const payloadSize = JSON.stringify([query, payloads]).length\n      if (payloadSize > this.maxPayloadSizeWarning) {\n        this.logger?.warn(\n          `Large targetQuery being sent: ${payloadSize} bytes [${this.address}][${targetAddress}] [${query.schema}] [${payloads?.length ?? 0}]`,\n        )\n      }\n      const moduleUrl = this.moduleUrl(targetAddress).href\n      const result = await this.fetchClient.post<ApiEnvelope<ModuleQueryResult<TOut>>>(moduleUrl, [query, payloads])\n      if (result.status === 404) {\n        throw new Error(`target module not found [${moduleUrl}] [${result.status}]`)\n      }\n      if (result.status >= 400) {\n        this.logger?.error(`targetQuery failed [${moduleUrl}]`)\n        throw new Error(`targetQuery failed [${moduleUrl}] [${result.status}]`)\n      }\n      return assertEx(result.data?.data, () => `targetQuery returned no data [${moduleUrl}]`)\n    } catch (ex) {\n      const error = ex instanceof FetchClientError ? ex : (ex as Error)\n      this.logger?.error(`Error: ${toSafeJsonString(error)}`)\n      throw error\n    } finally {\n      this.querySemaphore.release()\n    }\n  }\n\n  override unexposeHandler(_id: string, _options?: BridgeUnexposeOptions): Promisable<ModuleInstance[]> {\n    throw new Error('Unsupported')\n  }\n\n  private async getRootState() {\n    const queryPayload: ModuleStateQuery = { schema: ModuleStateQuerySchema }\n    const boundQuery = await this.bindQuery(queryPayload)\n    try {\n      const response = await this.fetchClient.post<ApiEnvelope<ModuleQueryResult>>(this.clientUrl.toString(), boundQuery)\n      if (response.status === 404) {\n        return []\n      }\n      const [, payloads, errors] = response.data?.data ?? [undefined, [], []]\n      if (errors.length > 0) {\n        throw new Error(`getRootState failed: ${JSON.stringify(errors, null, 2)}`)\n      }\n      return payloads\n    } catch (ex) {\n      const error = ex as Error\n      this.logger?.warn(`Unable to connect to remote node: ${error.message} [${this.clientUrl}]`)\n    }\n  }\n\n  private async resolveRootNode(nodeManifest: ModuleManifestPayload): Promise<ModuleInstance[]> {\n    const rootModule = assertEx(\n      (\n        await this.resolver.resolveHandler(\n          assertEx(nodeManifest.status?.address, () => 'Root has no address'),\n          undefined,\n          { manifest: nodeManifest },\n        )\n      ).at(0),\n      () => `Root not found [${nodeManifest.status?.address}]`,\n    )\n    assertEx(rootModule.constructor.name !== 'HttpModuleProxy', () => 'rootModule is not a Wrapper')\n    const rootNode = asAttachableNodeInstance(rootModule, 'Root modules is not a node')\n    if (rootNode) {\n      this.logger?.debug(`rootNode: ${rootNode.id}`)\n      this.downResolver.addResolver(rootNode as unknown as ModuleResolverInstance)\n      return [rootNode]\n    }\n    return []\n  }\n}\n", "import type { EmptyObject } from '@ariestools/sdk'\nimport {\n  zodAsFactory, zodIsFactory, zodToFactory,\n} from '@ariestools/sdk'\nimport type { Schema } from '@xyo-network/sdk-protocol'\nimport { asSchema } from '@xyo-network/sdk-protocol'\nimport * as z from 'zod/mini'\n\nimport type { BridgeClientConfig, BridgeConfig } from '#bridge-model'\nimport { BridgeConfigZod } from '#bridge-model'\n\nexport const HttpBridgeConfigSchema: 'network.xyo.bridge.http.config' & {\n  readonly __schema: true\n} = asSchema('network.xyo.bridge.http.config', true)\nexport type HttpBridgeConfigSchema = typeof HttpBridgeConfigSchema\n\nexport const HttpBridgeConfigZod: z.ZodMiniObject<\n  Omit<(typeof BridgeConfigZod)['shape'], 'schema' | 'client' | 'host'> & {\n    client: z.ZodMiniOptional<z.ZodMiniCustom<BridgeClientConfig & { url: string }, BridgeClientConfig & { url: string }>>\n    failureRetryTime: z.ZodMiniOptional<z.ZodMiniNumber<number>>\n    failureTimeCacheMax: z.ZodMiniOptional<z.ZodMiniNumber<number>>\n    host: z.ZodMiniOptional<z.ZodMiniCustom<{ port: number }, { port: number }>>\n    maxConnections: z.ZodMiniOptional<z.ZodMiniNumber<number>>\n    maxPayloadSizeWarning: z.ZodMiniOptional<z.ZodMiniNumber<number>>\n    schema: z.ZodMiniLiteral<HttpBridgeConfigSchema>\n  },\n  z.core.$strip\n> = z.extend(BridgeConfigZod, {\n  client: z.optional(z.custom<BridgeClientConfig & { url: string }>()),\n  failureRetryTime: z.optional(z.number()),\n  failureTimeCacheMax: z.optional(z.number()),\n  host: z.optional(z.custom<{ port: number }>()),\n  maxConnections: z.optional(z.number()),\n  maxPayloadSizeWarning: z.optional(z.number()),\n  schema: z.literal(HttpBridgeConfigSchema),\n})\n\nexport type HttpBridgeConfigBase = z.infer<typeof HttpBridgeConfigZod>\n\nexport const isHttpBridgeConfig: ReturnType<typeof zodIsFactory<HttpBridgeConfigBase>> = zodIsFactory(HttpBridgeConfigZod)\nexport const asHttpBridgeConfig: ReturnType<typeof zodAsFactory<HttpBridgeConfigBase>> = zodAsFactory(HttpBridgeConfigZod, 'asHttpBridgeConfig')\nexport const toHttpBridgeConfig: ReturnType<typeof zodToFactory<HttpBridgeConfigBase>> = zodToFactory(HttpBridgeConfigZod, 'toHttpBridgeConfig')\n\nexport type HttpBridgeConfig<TConfig extends EmptyObject = EmptyObject, TSchema extends string | void = void> = BridgeConfig<\n  {\n    client?: BridgeConfig['client'] & {\n      url: string\n    }\n    failureRetryTime?: number\n    failureTimeCacheMax?: number\n    host?: {\n      port: number\n    }\n    maxConnections?: number\n    maxPayloadSizeWarning?: number\n    schema: HttpBridgeConfigSchema\n  } & TConfig,\n  TSchema extends Schema ? TSchema : HttpBridgeConfigSchema\n>\n", "import type { CreatableName } from '@ariestools/sdk'\nimport {\n  assertEx, isAddress, isDefined,\n} from '@ariestools/sdk'\nimport type {\n  ConfigPayload, Payload, XyoAddress,\n  XyoQuantAddress,\n} from '@xyo-network/sdk-protocol'\nimport { Account, ConfigSchema } from '@xyo-network/sdk-protocol'\nimport { Mutex } from 'async-mutex'\nimport { LRUCache } from 'lru-cache'\n\nimport type { BridgeModuleResolverParams } from '#bridge-abstract'\nimport { AbstractBridgeModuleResolver, wrapModuleWithType } from '#bridge-abstract'\nimport type {\n  AnyConfigSchema,\n  ModuleConfig,\n  ModuleEventData,\n  ModuleFilterOptions,\n  ModuleIdentifier,\n  ModuleInstance,\n  QueryableModuleParams,\n} from '#module-model'\nimport {\n  asModuleInstance,\n  isModuleInstance,\n  ModuleConfigSchema,\n} from '#module-model'\nimport { ResolveHelper } from '#module-resolver'\n\nimport type { BridgeQuerySender, HttpModuleProxyParams } from './ModuleProxy/index.ts'\nimport { HttpModuleProxy } from './ModuleProxy/index.ts'\n\nconst NotFoundModule = { notFound: true }\n\nexport interface HttpBridgeModuleResolverParams extends BridgeModuleResolverParams {\n  querySender: BridgeQuerySender\n  rootUrl: string\n}\n\nexport class HttpBridgeModuleResolver<\n  T extends HttpBridgeModuleResolverParams = HttpBridgeModuleResolverParams,\n> extends AbstractBridgeModuleResolver<T> {\n  protected _resolvedCache: LRUCache<(Lowercase<string> & {\n    readonly __hex: true\n  } & {\n    readonly __address: true\n  }) | XyoQuantAddress, {\n    notFound: boolean\n  } | ModuleInstance<QueryableModuleParams<AnyConfigSchema<ModuleConfig>>, ModuleEventData<object>>, unknown> = new LRUCache<XyoAddress, ModuleInstance | typeof NotFoundModule>({ max: 1000 })\n\n  protected _resolvedCacheMutex: Mutex = new Mutex()\n\n  get querySender(): BridgeQuerySender {\n    return this.params.querySender\n  }\n\n  moduleUrl(address: XyoAddress): URL {\n    return new URL(address, this.params.rootUrl)\n  }\n\n  override async resolveHandler<T extends ModuleInstance = ModuleInstance>(\n    id: ModuleIdentifier,\n    options?: ModuleFilterOptions<T>,\n    params?: Partial<HttpModuleProxyParams>,\n  ): Promise<T[]> {\n    const parentResult = await super.resolveHandler(id, options)\n    if (parentResult.length > 0) {\n      return parentResult\n    }\n    const idParts = id.split(':')\n    const untransformedFirstPart = assertEx(idParts.shift(), () => 'Missing module identifier')\n    const firstPart = await ResolveHelper.transformModuleIdentifier(untransformedFirstPart)\n    assertEx(isAddress(firstPart), () => `Invalid module address: ${firstPart}`)\n    const remainderParts = idParts.join(':')\n    const instance: T | undefined = await this._resolvedCacheMutex.runExclusive(async () => {\n      const cachedMod = this._resolvedCache.get(firstPart as XyoAddress)\n      if (cachedMod) {\n        if (isModuleInstance(cachedMod)) {\n          const result = idParts.length <= 0 ? cachedMod : cachedMod.resolve(remainderParts, { ...options, maxDepth: (options?.maxDepth ?? 5) - 1 })\n          return result as T\n        } else {\n          // return cached 404\n          return\n        }\n      }\n      const account = await Account.random()\n      const finalParams: HttpModuleProxyParams = {\n        name: 'HttpBridgeModuleResolver' as CreatableName,\n        account,\n        archiving: this.params.archiving,\n        config: { schema: ModuleConfigSchema },\n        host: this,\n        moduleAddress: firstPart as XyoAddress,\n        onQuerySendFinished: this.params.onQuerySendFinished,\n        onQuerySendStarted: this.params.onQuerySendStarted,\n        querySender: this.params.querySender,\n        ...params,\n      }\n\n      this.logger?.debug(`creating HttpProxy [${firstPart}] ${id}`)\n\n      let proxy: HttpModuleProxy | undefined\n\n      let state: Payload[] | undefined\n\n      try {\n        proxy = await HttpModuleProxy.create(finalParams)\n        state = await proxy.state()\n      } catch (ex) {\n        const error = ex as Error\n        this.logger?.error(error.message)\n      }\n\n      if (isDefined(proxy)) {\n        if (!state) {\n        // cache the fact that it was not found\n          this._resolvedCache.set(firstPart as XyoAddress, NotFoundModule)\n          return\n        }\n\n        const configSchema = (state.find(payload => payload.schema === ConfigSchema) as ConfigPayload | undefined)?.config\n        const config = assertEx(\n          state.find(payload => payload.schema === configSchema),\n          () => 'Unable to locate config',\n        ) as ModuleConfig\n        proxy.setConfig(config)\n\n        this.logger?.log(`created HttpProxy [${firstPart}] ${proxy.id}`)\n\n        await proxy.start?.()\n        const wrapped = wrapModuleWithType(proxy, account) as unknown as T\n        assertEx(asModuleInstance<T>(wrapped, {}), () => `Failed to asModuleInstance [${id}]`)\n        this._resolvedCache.set(wrapped.address, wrapped)\n        return wrapped\n      }\n    })\n    const result = remainderParts.length > 0 ? await instance?.resolve(remainderParts, options) : instance\n    return result ? [result] : []\n  }\n}\n", "import {\n  exists, forget,\n  isAddress, isString,\n} from '@ariestools/sdk'\nimport type {\n  Payload, QueryBoundWitness, XyoAddress,\n} from '@xyo-network/sdk-protocol'\n\nimport type { ModuleProxyParams } from '#bridge-abstract'\nimport { AbstractModuleProxy } from '#bridge-abstract'\nimport type {\n  AttachableModuleInstance,\n  ModuleFilterOptions,\n  ModuleIdentifier,\n  ModuleInstance,\n  ModuleQueryResult,\n} from '#module-model'\nimport { creatableModule } from '#module-model'\nimport type { ResolveHelperConfig } from '#module-resolver'\nimport { ResolveHelper } from '#module-resolver'\n\nexport interface BridgeQuerySender {\n  sendBridgeQuery: <TOut extends Payload = Payload, TQuery extends QueryBoundWitness = QueryBoundWitness, TIn extends Payload = Payload>(\n    targetAddress: XyoAddress,\n    query: TQuery,\n    payloads?: TIn[],\n  ) => Promise<ModuleQueryResult<TOut>>\n}\n\nexport type HttpModuleProxyParams = ModuleProxyParams & {\n  querySender: BridgeQuerySender\n}\n\n@creatableModule()\nexport class HttpModuleProxy<\n  TWrappedModule extends ModuleInstance = ModuleInstance,\n  TParams extends Omit<HttpModuleProxyParams, 'config'> & { config: TWrappedModule['config'] } = Omit<HttpModuleProxyParams, 'config'> & {\n    config: TWrappedModule['config']\n  },\n>\n  extends AbstractModuleProxy<TWrappedModule, TParams>\n  implements AttachableModuleInstance<TParams, TWrappedModule['eventData']> {\n  async proxyQueryHandler<T extends QueryBoundWitness = QueryBoundWitness>(query: T, payloads: Payload[] = []): Promise<ModuleQueryResult> {\n    if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n      forget(this.storeToArchivists([query, ...(payloads ?? [])]))\n    }\n    const result = await this.params.querySender.sendBridgeQuery(this.params.moduleAddress, query, payloads)\n    if (this.archiving && this.isAllowedArchivingQuery(query.schema)) {\n      forget(this.storeToArchivists(result.flat()))\n    }\n    return result\n  }\n\n  override async publicChildren(): Promise<ModuleInstance[]> {\n    return (\n      await Promise.all(\n        Object.values(await this.childAddressMap())\n          .filter(exists)\n          .map(address => this.resolve(address)),\n      )\n    ).filter(exists)\n  }\n\n  /** @deprecated do not pass undefined.  If trying to get all, pass '*' */\n  override async resolve(): Promise<ModuleInstance[]>\n  override async resolve<T extends ModuleInstance = ModuleInstance>(all: '*', options?: ModuleFilterOptions<T>): Promise<T[]>\n  override async resolve<T extends ModuleInstance = ModuleInstance>(id: ModuleIdentifier, options?: ModuleFilterOptions<T>): Promise<T | undefined>\n  override async resolve<T extends ModuleInstance = ModuleInstance>(\n    id: ModuleIdentifier = '*',\n    options: ModuleFilterOptions<T> = {},\n  ): Promise<T | T[] | undefined> {\n    const config: ResolveHelperConfig = {\n      address: this.address,\n      dead: this.dead,\n      downResolver: this.downResolver,\n      logger: this.logger,\n      mod: this,\n      transformers: this.moduleIdentifierTransformers,\n      upResolver: this.upResolver,\n    }\n    if (id === '*') {\n      return [...(await this.publicChildren()), await this.params.host.resolve(this.address)] as T[]\n    }\n    switch (typeof id) {\n      case 'string': {\n        const parts = id.split(':')\n        const first = parts.shift()\n        if (isString(first)) {\n          const remainingPath = parts.length > 0 ? parts.join(':') : undefined\n          const address\n            = isAddress(first)\n              ? first\n              : this.id === first\n                ? this.address\n                : this.childAddressByName(first)\n          if (!isAddress(address)) return undefined\n          const firstInstance = (await this.params.host.resolve(address))\n          return (isString(remainingPath) ? await firstInstance?.resolve(remainingPath) : firstInstance) as T | undefined\n        }\n        return undefined\n      }\n      default: {\n        return (await ResolveHelper.resolve(config, id, options)).filter(mod => mod.address !== this.address)\n      }\n    }\n  }\n}\n"],
  "mappings": "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",
  "names": ["assertEx", "exists", "forget", "Mutex", "LRUCache", "creatableModule", "isAddress", "ResolveHelper", "ResolveHelper", "isAddress", "result", "Mutex", "LRUCache", "assertEx", "forget", "exists", "creatableModule"]
}
