{
  "version": 3,
  "sources": ["../../src/modules/node-wrapper/NodeWrapper.ts"],
  "sourcesContent": ["import type { TypeCheck } from '@ariestools/sdk'\nimport type {\n  AccountInstance, NodeManifestPayload, XyoAddress,\n} from '@xyo-network/sdk-protocol'\nimport { isPayloadOfSchemaType, NodeManifestPayloadSchema } from '@xyo-network/sdk-protocol'\nimport { Mutex } from 'async-mutex'\n\nimport type {\n  AddressPayload,\n  AnyConfigSchema,\n  InstanceTypeCheck,\n  ModuleIdentifier,\n  ModuleManifestQuery,\n  ModuleQueryResult,\n} from '#module-model'\nimport {\n  AddressSchema,\n  ModuleManifestQuerySchema,\n} from '#module-model'\nimport { constructableModuleWrapper, ModuleWrapper } from '#module-wrapper'\nimport type {\n  ChildCertification,\n  ChildCertificationFields,\n  NodeAttachedQuery,\n  NodeAttachQuery,\n  NodeCertifyQuery,\n  NodeConfig,\n  NodeDetachQuery,\n  NodeInstance,\n  NodeModule,\n  NodeModuleEventData,\n  NodeParams,\n  NodeRegisteredQuery,\n} from '#node-model'\nimport {\n  ChildCertificationSchema,\n  isNodeInstance,\n  isNodeModule,\n  NodeAttachedQuerySchema,\n  NodeAttachQuerySchema,\n  NodeCertifyQuerySchema,\n  NodeDetachQuerySchema,\n  NodeRegisteredQuerySchema,\n} from '#node-model'\n\nconstructableModuleWrapper()\nexport class NodeWrapper<TWrappedModule extends NodeModule = NodeModule>\n  extends ModuleWrapper<TWrappedModule>\n  implements NodeInstance<TWrappedModule['params']> {\n  static override readonly instanceIdentityCheck: InstanceTypeCheck<NodeInstance> = isNodeInstance\n  static override readonly moduleIdentityCheck: TypeCheck<NodeModule<NodeParams<AnyConfigSchema<NodeConfig>>, NodeModuleEventData>> = isNodeModule\n  static override readonly requiredQueries: string[] = [NodeAttachQuerySchema, ...ModuleWrapper.requiredQueries]\n\n  protected _attached?: XyoAddress[]\n  protected _attachedMutex: Mutex = new Mutex()\n\n  async attach(id: ModuleIdentifier, external?: boolean): Promise<XyoAddress | undefined> {\n    const queryPayload: NodeAttachQuery = {\n      external, id, schema: NodeAttachQuerySchema,\n    }\n    const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<AddressPayload>(AddressSchema))\n    return payloads.pop()?.address\n  }\n\n  async attachQuery(id: ModuleIdentifier, external?: boolean, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n    const queryPayload: NodeAttachQuery = {\n      external, id, schema: NodeAttachQuerySchema,\n    }\n    return await this.sendQueryRaw(queryPayload, [], account)\n  }\n\n  async attached(): Promise<XyoAddress[]> {\n    return await this._attachedMutex.runExclusive(async () => {\n      if (this._attached === undefined) {\n        const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n        const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<AddressPayload>(AddressSchema))\n        this._attached = payloads.map(p => p.address)\n      }\n      return this._attached\n    })\n  }\n\n  async attachedQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n    const queryPayload: NodeAttachedQuery = { schema: NodeAttachedQuerySchema }\n    return await this.sendQueryRaw(queryPayload, [], account)\n  }\n\n  async certify(id: ModuleIdentifier): Promise<ChildCertificationFields | undefined> {\n    const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n    const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<ChildCertification>(ChildCertificationSchema))\n    return payloads.pop()\n  }\n\n  async certifyQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<ChildCertification>> {\n    const queryPayload: NodeCertifyQuery = { id, schema: NodeCertifyQuerySchema }\n    return await this.sendQueryRaw(queryPayload, [], account)\n  }\n\n  async detach(id: ModuleIdentifier): Promise<XyoAddress | undefined> {\n    const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n    const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<AddressPayload>(AddressSchema))\n    return payloads.pop()?.address\n  }\n\n  async detachQuery(id: ModuleIdentifier, account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n    const queryPayload: NodeDetachQuery = { id, schema: NodeDetachQuerySchema }\n    return await this.sendQueryRaw(queryPayload, [], account)\n  }\n\n  override async manifest(maxDepth?: number): Promise<NodeManifestPayload> {\n    const queryPayload: ModuleManifestQuery = { schema: ModuleManifestQuerySchema, ...(maxDepth ? { maxDepth } : {}) }\n    const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<NodeManifestPayload>(NodeManifestPayloadSchema))\n    return payloads.pop()!\n  }\n\n  async registered(): Promise<XyoAddress[]> {\n    const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n    const payloads = (await this.sendQuery(queryPayload)).filter(isPayloadOfSchemaType<AddressPayload>(AddressSchema))\n    return payloads.map(p => p.address)\n  }\n\n  async registeredQuery(account?: AccountInstance): Promise<ModuleQueryResult<AddressPayload>> {\n    const queryPayload: NodeRegisteredQuery = { schema: NodeRegisteredQuerySchema }\n    return await this.sendQueryRaw(queryPayload, [], account)\n  }\n}\n"],
  "mappings": "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",
  "names": []
}
