{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import SignClient from \"@walletconnect/sign-client\";\nimport { IJsonRpcConnection } from \"@walletconnect/jsonrpc-types\";\nimport { formatJsonRpcError, formatJsonRpcResult } from \"@walletconnect/jsonrpc-utils\";\nimport { SignClientTypes, ISignClient, SessionTypes, ProposalTypes } from \"@walletconnect/types\";\nimport {\n  getSdkError,\n  getAccountsFromNamespaces,\n  getChainsFromNamespaces,\n  getChainsFromRequiredNamespaces,\n} from \"@walletconnect/utils\";\nimport { EventEmitter } from \"events\";\n\nfunction isClient(opts?: SignerConnectionClientOpts): opts is SignClient {\n  return typeof opts !== \"undefined\" && typeof (opts as SignClient).context !== \"undefined\";\n}\n\nexport const SIGNER_EVENTS = {\n  init: \"signer_init\",\n  uri: \"signer_uri\",\n  created: \"signer_created\",\n  updated: \"signer_updated\",\n  deleted: \"signer_deleted\",\n  event: \"signer_event\",\n};\n\nexport type SignerConnectionClientOpts = ISignClient | SignClientTypes.Options;\nexport interface SignerConnectionOpts {\n  requiredNamespaces?: ProposalTypes.RequiredNamespaces;\n  client?: SignerConnectionClientOpts;\n}\n\nexport class SignerConnection extends IJsonRpcConnection {\n  public events: any = new EventEmitter();\n  public requiredNamespaces: ProposalTypes.RequiredNamespaces;\n\n  private pending = false;\n  private session: SessionTypes.Struct | undefined;\n  private opts: SignerConnectionClientOpts | undefined;\n  private client?: SignClient;\n  private initializing = false;\n\n  constructor(opts?: SignerConnectionOpts) {\n    super();\n    this.requiredNamespaces = opts?.requiredNamespaces || {};\n    this.opts = opts?.client;\n  }\n\n  get connected(): boolean {\n    return typeof this.session !== \"undefined\";\n  }\n\n  get connecting(): boolean {\n    return this.pending;\n  }\n\n  get chains() {\n    if (this.session) {\n      return getChainsFromNamespaces(this.session.namespaces);\n    }\n    return getChainsFromRequiredNamespaces(this.requiredNamespaces);\n  }\n\n  get accounts() {\n    if (this.session) {\n      return getAccountsFromNamespaces(this.session.namespaces);\n    }\n    return [];\n  }\n\n  public on(event: string, listener: any) {\n    this.events.on(event, listener);\n  }\n\n  public once(event: string, listener: any) {\n    this.events.once(event, listener);\n  }\n\n  public off(event: string, listener: any) {\n    this.events.off(event, listener);\n  }\n\n  public removeListener(event: string, listener: any) {\n    this.events.removeListener(event, listener);\n  }\n\n  public async open(): Promise<void> {\n    if (this.pending) {\n      return new Promise((resolve, reject) => {\n        this.events.once(\"open\", () => {\n          this.events.once(\"open_error\", (error: any) => {\n            reject(error);\n          });\n          if (typeof this.client === \"undefined\") {\n            return reject(new Error(\"Sign Client not initialized\"));\n          }\n          resolve();\n        });\n      });\n    }\n\n    try {\n      this.pending = true;\n      const client = await this.register();\n      const compatible = client.find({\n        requiredNamespaces: this.requiredNamespaces,\n      });\n      if (compatible.length) return this.onOpen(compatible[0]);\n      const { uri, approval } = await client.connect({\n        requiredNamespaces: this.requiredNamespaces,\n      });\n      this.events.emit(SIGNER_EVENTS.uri, { uri });\n      this.session = await approval();\n      this.events.emit(SIGNER_EVENTS.created, this.session);\n      this.onOpen();\n    } catch (e) {\n      this.events.emit(\"open_error\", e);\n      throw e;\n    }\n  }\n\n  public async close() {\n    if (typeof this.session === \"undefined\") {\n      return;\n    }\n    const client = await this.register();\n    await client.disconnect({\n      topic: this.session.topic,\n      reason: getSdkError(\"USER_DISCONNECTED\"),\n    });\n    this.onClose();\n  }\n\n  public async send(payload: any, context?: any) {\n    if (typeof this.client === \"undefined\") {\n      this.client = await this.register();\n      if (!this.connected) await this.open();\n    }\n    if (typeof this.session === \"undefined\") {\n      throw new Error(\"Signer connection is missing session\");\n    }\n    this.client\n      .request({ topic: this.session.topic, request: payload, chainId: context?.chainId })\n      .then((result: any) => this.events.emit(\"payload\", formatJsonRpcResult(payload.id, result)))\n      .catch((e: any) => this.events.emit(\"payload\", formatJsonRpcError(payload.id, e.message)));\n  }\n\n  // ---------- Private ----------------------------------------------- //\n\n  private async register(\n    opts: SignerConnectionClientOpts | undefined = this.opts,\n  ): Promise<SignClient> {\n    if (typeof this.client !== \"undefined\") {\n      return this.client;\n    }\n\n    if (this.initializing) {\n      return new Promise((resolve, reject) => {\n        this.events.once(\"register_error\", (error: any) => {\n          reject(error);\n        });\n        this.events.once(SIGNER_EVENTS.init, () => {\n          if (typeof this.client === \"undefined\") {\n            return reject(new Error(\"Sign Client not initialized\"));\n          }\n          resolve(this.client);\n        });\n      });\n    }\n    if (isClient(opts)) {\n      this.client = opts;\n      this.registerEventListeners();\n      return this.client;\n    }\n    try {\n      this.initializing = true;\n      this.client = await SignClient.init(opts);\n      this.initializing = false;\n      this.registerEventListeners();\n      this.events.emit(SIGNER_EVENTS.init);\n      return this.client;\n    } catch (e) {\n      this.events.emit(\"register_error\", e);\n      throw e;\n    }\n  }\n\n  private onOpen(session?: SessionTypes.Struct) {\n    this.pending = false;\n    if (session) {\n      this.session = session;\n    }\n    this.events.emit(\"open\");\n  }\n\n  private onClose() {\n    this.pending = false;\n    if (this.client) {\n      this.client = undefined;\n    }\n    this.events.emit(\"close\");\n  }\n\n  private registerEventListeners() {\n    if (typeof this.client === \"undefined\") return;\n    this.client.on(\"session_event\", (args: SignClientTypes.EventArguments[\"session_event\"]) => {\n      if (this.session && this.session?.topic !== args.topic) return;\n      this.events.emit(SIGNER_EVENTS.event, args.params);\n    });\n    this.client.on(\"session_update\", (args: SignClientTypes.EventArguments[\"session_update\"]) => {\n      if (typeof this.client === \"undefined\") return;\n      if (this.session && this.session?.topic !== args.topic) return;\n      this.session = this.client.session.get(args.topic);\n      this.events.emit(SIGNER_EVENTS.updated, this.session);\n    });\n    this.client.on(\"session_delete\", (args: SignClientTypes.EventArguments[\"session_delete\"]) => {\n      if (!this.session) return;\n      if (this.session && this.session?.topic !== args.topic) return;\n      this.onClose();\n      this.events.emit(SIGNER_EVENTS.deleted, this.session);\n      this.session = undefined;\n    });\n  }\n}\n\nexport default SignerConnection;\n"],"names":["isClient","opts","IJsonRpcConnection","__publicField","EventEmitter","getChainsFromNamespaces","getChainsFromRequiredNamespaces","getAccountsFromNamespaces","event","listener","resolve","reject","error","client","compatible","uri","approval","getSdkError","payload","context","result","formatJsonRpcResult","e","formatJsonRpcError","SignClient","session","args","_a"],"mappings":"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"}