{"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","SIGNER_EVENTS","SignerConnection","IJsonRpcConnection","EventEmitter","getChainsFromNamespaces","getChainsFromRequiredNamespaces","getAccountsFromNamespaces","event","listener","resolve","reject","error","client","compatible","uri","approval","getSdkError","payload","context","result","formatJsonRpcResult","e","formatJsonRpcError","SignClient","session","args"],"mappings":"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"}