{"version":3,"file":"nostr-connect.min.mjs","sources":["../src/constants.ts","../src/connect.ts","../src/rpc.ts","../src/nostr.ts"],"sourcesContent":["import {\n  Kind,\n} from 'nostr-tools';\n\nexport const Kinds ={\n    NOSTR_CONNECT: 24133 as Kind\n}\n\nexport const ConnectMethods = {\n  CONNECT: 'connect',\n  DELEGATE: 'delegate',\n  DESCRIBE: 'describe',\n  DISCONNECT: 'disconnect',\n  GET_PUBLIC_KEY: 'get_public_key',\n  SIGN_EVENT: 'sign_event',\n  SIGN_PSBT: 'sign_psbt',\n  NIP04_ENCRYPT: 'nip04_encrypt',\n  NIP04_DECRYPT: 'nip04_decrypt',\n}\n","import EventEmitter from 'events';\nimport {\n  Event,\n  Kind,\n  getPublicKey,\n  nip04,\n  nip26\n} from 'nostr-tools';\nimport { SignPSBTResponse } from '@smontero/nostr-ual-common'\n\nimport { ConnectMethods } from './constants';\n\nimport { isValidRequest, NostrRPC } from './rpc';\nimport { RequestOpts } from './interfaces';\n\nexport interface Metadata {\n  name: string;\n  url?: string;\n  description?: string;\n  icons?: string[];\n}\n\nexport enum TimeRanges {\n  FIVE_MINS = '5mins',\n  ONE_HR = '1hour',\n  ONE_DAY = '1day',\n  ONE_WEEK = '1week',\n  ONE_MONTH = '1month',\n  ONE_YEAR = '1year',\n}\nexport const TimeRangeToUnix: Record<TimeRanges, number> = {\n  [TimeRanges.FIVE_MINS]: Math.round(Date.now() / 1000) + 60 * 5,\n  [TimeRanges.ONE_HR]: Math.round(Date.now() / 1000) + 60 * 60,\n  [TimeRanges.ONE_DAY]: Math.round(Date.now() / 1000) + 60 * 60 * 24,\n  [TimeRanges.ONE_WEEK]: Math.round(Date.now() / 1000) + 60 * 60 * 24 * 7,\n  [TimeRanges.ONE_MONTH]: Math.round(Date.now() / 1000) + 60 * 60 * 24 * 30,\n  [TimeRanges.ONE_YEAR]: Math.round(Date.now() / 1000) + 60 * 60 * 24 * 365,\n};\n\nexport class ConnectURI {\n  target: string;\n  metadata: Metadata;\n  relay: string;\n\n  static fromURI(uri: string): ConnectURI {\n    const url = new URL(uri);\n    const target = url.hostname || url.pathname.substring(2);\n    if (!target) throw new Error('Invalid connect URI: missing target');\n    const relay = url.searchParams.get('relay');\n    if (!relay) {\n      throw new Error('Invalid connect URI: missing relay');\n    }\n    const metadata = url.searchParams.get('metadata');\n    if (!metadata) {\n      throw new Error('Invalid connect URI: missing metadata');\n    }\n\n    /* eslint-disable @typescript-eslint/no-unused-vars */\n    try {\n      const md = JSON.parse(metadata);\n      return new ConnectURI({ target, metadata: md, relay });\n    } catch (ignore) {\n      throw new Error('Invalid connect URI: metadata is not valid JSON');\n    }\n  }\n\n  constructor({\n    target,\n    metadata,\n    relay,\n  }: {\n    target: string;\n    metadata: Metadata;\n    relay: string;\n  }) {\n    this.target = target;\n    this.metadata = metadata;\n    this.relay = relay;\n  }\n\n  toString() {\n    return `nostrconnect://${this.target}?metadata=${encodeURIComponent(\n      JSON.stringify(this.metadata)\n    )}&relay=${encodeURIComponent(this.relay)}`;\n  }\n\n  async approve(secretKey: string): Promise<void> {\n    const rpc = new NostrRPC({\n      relay: this.relay,\n      secretKey,\n    });\n    await rpc.call(\n      {\n        target: this.target,\n        request: {\n          method: ConnectMethods.CONNECT,\n          params: [getPublicKey(secretKey)],\n        },\n      },\n      { skipResponse: true }\n    );\n  }\n\n  async reject(secretKey: string): Promise<void> {\n    const rpc = new NostrRPC({\n      relay: this.relay,\n      secretKey,\n    });\n    await rpc.call(\n      {\n        target: this.target,\n        request: {\n          method: ConnectMethods.DISCONNECT,\n          params: [],\n        },\n      },\n      { skipResponse: true }\n    );\n  }\n}\n\nexport class Connect {\n  rpc: NostrRPC;\n  target?: string;\n  events = new EventEmitter();\n\n  constructor({\n    target,\n    relay,\n    secretKey,\n  }: {\n    secretKey: string;\n    target?: string;\n    relay: string;\n  }) {\n    this.rpc = new NostrRPC({ relay, secretKey });\n    if (target) {\n      this.target = target;\n    }\n  }\n\n  async init() {\n    await this.rpc.initRelayConnection();\n    const sub = await this.rpc.listen();\n    sub.on('event', async (event: Event) => {\n      let payload;\n      /* eslint-disable @typescript-eslint/no-unused-vars */\n      try {\n        const plaintext = await nip04.decrypt(\n          this.rpc.self.secret,\n          event.pubkey,\n          event.content\n        );\n        if (!plaintext) throw new Error('failed to decrypt event');\n        payload = JSON.parse(plaintext);\n      } catch (ignore) {\n        return;\n      }\n\n      // ignore all the events that are not NostrRPCRequest events\n      if (!isValidRequest(payload)) return;\n\n      switch (payload.method) {\n        case ConnectMethods.CONNECT: {\n          if (!payload.params || payload.params.length !== 1)\n            throw new Error('connect: missing pubkey');\n          const [pubkey] = payload.params;\n          this.target = pubkey;\n          this.events.emit('connect', pubkey);\n          break;\n        }\n        case ConnectMethods.DISCONNECT: {\n          if (this.target) {\n            await this.disconnectRelays();\n            this.target = undefined;\n            this.events.emit('disconnect');\n          }\n          break;\n        }\n        default:\n      }\n    });\n  }\n\n  on(evt: 'connect' | 'disconnect', cb: (...args: any[]) => void) {\n    this.events.on(evt, cb);\n  }\n  off(evt: 'connect' | 'disconnect', cb: (...args: any[]) => void) {\n    this.events.off(evt, cb);\n  }\n\n  isConnected(): boolean {\n    return !!this.target\n  }\n\n  assertIsConnected() {\n    this.getTarget()\n  }\n\n  getTarget(): string {\n    if (!this.target) throw new Error('Not connected');\n    return this.target\n  }\n\n  async disconnect(): Promise<void> {\n    this.assertIsConnected()\n    // notify the UI that we are disconnecting\n    this.events.emit('disconnect');\n\n    try {\n      await this.request(\n        ConnectMethods.DISCONNECT,\n        [],\n        { skipResponse: true }\n      );\n      await this.disconnectRelays();\n    } catch (error) {\n      throw new Error('Failed to disconnect');\n    }\n    this.target = undefined;\n  }\n\n  async getPublicKey(): Promise<string> {\n    return this.request(\n      ConnectMethods.GET_PUBLIC_KEY,\n      [],\n    );\n  }\n\n  async signEvent(event: {\n    kind: Kind;\n    tags: string[][];\n    pubkey: string;\n    content: string;\n    created_at: number;\n  }): Promise<Event> {\n    return this.request(\n      ConnectMethods.SIGN_EVENT,\n      [event],\n    );\n  }\n\n  async signPSBT(network: string, psbt: string, descriptor?: string): Promise<SignPSBTResponse> {\n    const params = [network, psbt]\n    if (descriptor) {\n      params.push(descriptor)\n    }\n    return this.request(\n      ConnectMethods.SIGN_PSBT,\n      params\n    );\n  }\n\n\n  async describe(): Promise<string[]> {\n    return this.request(\n      ConnectMethods.DESCRIBE,\n      [],\n    );\n  }\n\n  async delegate(\n    delegatee: string = this.rpc.self.pubkey,\n    conditions: {\n      kind?: number;\n      until?: number | TimeRanges;\n      since?: number | TimeRanges;\n    }\n  ): Promise<nip26.Delegation> {\n    if (conditions.until && typeof conditions.until !== 'number') {\n      if (!Object.keys(TimeRangeToUnix).includes(conditions.until))\n        throw new Error(\n          'conditions.until must be either a number or a valid TimeRange'\n        );\n      conditions.until = TimeRangeToUnix[conditions.until];\n    }\n    if (conditions.since && typeof conditions.since !== 'number') {\n      if (!Object.keys(TimeRangeToUnix).includes(conditions.since))\n        throw new Error(\n          'conditions.since must be either a number or a valid TimeRange'\n        );\n      conditions.since = TimeRangeToUnix[conditions.since];\n    }\n\n    return this.request(\n      ConnectMethods.DELEGATE,\n      [delegatee, conditions],\n    );\n  }\n\n  async getRelays(): Promise<{\n    [url: string]: { read: boolean; write: boolean };\n  }> {\n    throw new Error('Not implemented');\n  }\n\n  nip04 = {\n    encrypt: async (pubkey: string, plaintext: string): Promise<string> => {\n      return this.request(\n        ConnectMethods.NIP04_ENCRYPT,\n        [pubkey, plaintext],\n      );\n    },\n    decrypt: async (pubkey: string, ciphertext: string): Promise<string> => {\n      return this.request(\n        ConnectMethods.NIP04_DECRYPT,\n        [pubkey, ciphertext],\n      );\n    },\n  };\n\n  private async disconnectRelays(): Promise<void> {\n    await this.rpc.disconnectRelays();\n  }\n\n  private async request(method: string, params: any[], opts?: RequestOpts): Promise<any> {\n    const target = this.getTarget()\n    return this.rpc.call({\n      target,\n      request: {\n        method,\n        params,\n      }\n    },\n      opts);\n  }\n}\n","import EventEmitter from 'events';\n\nimport {\n  Event,\n  getEventHash,\n  validateEvent,\n  verifySignature,\n  getSignature,\n  nip04,\n  Filter,\n  getPublicKey,\n  Relay,\n  relayInit,\n  Sub,\n} from 'nostr-tools';\n\nimport { Kinds } from './constants'\nimport { NostrRPCRequest, NostrRPCResponse, RequestOpts } from './interfaces';\n\nexport class NostrRPC {\n  relay: string;\n  self: { pubkey: string; secret: string };\n  event: Event | undefined;\n  // this is for implementing the response handlers for each method\n  [key: string]: any;\n  // events\n  events = new EventEmitter();\n\n  relayCallConnection: Relay | undefined;\n  relayListenConnection: Relay | undefined;\n\n  constructor(opts: { relay: string; secretKey: string }) {\n    this.relay = opts.relay\n    this.self = {\n      pubkey: getPublicKey(opts.secretKey),\n      secret: opts.secretKey,\n    };\n    this.relayCallConnection = undefined;\n    this.relayListenConnection = undefined;\n  }\n\n  async initRelayConnection() {\n    this.relayCallConnection = await connectToRelay(this.relay);\n    this.relayListenConnection = await connectToRelay(this.relay);\n  }\n\n  async call(\n    {\n      target,\n      request: { id = randomID(), method, params = [] },\n    }: {\n      target: string;\n      request: {\n        id?: string;\n        method: string;\n        params?: any[];\n      };\n    },\n    opts?: RequestOpts\n  ): Promise<any> {\n    // connect to relay\n    const relay: Relay = this.relayCallConnection || await connectToRelay(this.relay);\n    if (relay.status !== 1) await relay.connect();\n    if (!this.relayCallConnection) this.relayCallConnection = relay;\n\n    // prepare request to be sent\n    const request = prepareRequest(id, method, params);\n    const event = await prepareEvent(this.self.secret, target, request);\n    return new Promise<void>(async (resolve, reject) => {\n      const sub = relay.sub([\n        {\n          kinds: [Kinds.NOSTR_CONNECT],\n          authors: [target],\n          '#p': [this.self.pubkey],\n          limit: 1,\n          since: now(),\n        } as Filter,\n      ]);\n\n      await broadcastToRelay(relay, event, true);\n\n      // skip waiting for response from remote\n      if (opts && opts.skipResponse === true) {\n        sub.unsub();\n        resolve();\n      }\n\n      sub.on('event', async (event: Event) => {\n        let payload;\n        /* eslint-disable @typescript-eslint/no-unused-vars */\n        try {\n          const plaintext = await nip04.decrypt(\n            this.self.secret,\n            event.pubkey,\n            event.content\n          );\n          if (!plaintext) throw new Error('failed to decrypt event');\n          payload = JSON.parse(plaintext);\n        } catch (ignore) {\n          return;\n        }\n\n        // ignore all the events that are not NostrRPCResponse events\n        if (!isValidResponse(payload)) return;\n\n        // ignore all the events that are not for this request\n        if (payload.id !== id) return;\n\n        // if the response is an error, reject the promise\n        if (payload.error) {\n          sub.unsub();\n          reject(payload.error);\n        }\n\n        // if the response is a result, resolve the promise\n        if (payload.result) {\n          sub.unsub();\n          resolve(payload.result);\n        }\n      });\n    });\n  }\n\n  async listen(): Promise<Sub> {\n    const relay = this.relayListenConnection || await connectToRelay(this.relay);\n    if (relay.status !== 1) await relay.connect();\n    if (!this.relayListenConnection) this.relayListenConnection = relay;\n    const sub = relay.sub([\n      {\n        kinds: [Kinds.NOSTR_CONNECT],\n        '#p': [this.self.pubkey],\n        since: now(),\n      } as Filter,\n    ]);\n\n    sub.on('event', async (event: Event) => {\n      let payload: NostrRPCRequest;\n      /* eslint-disable @typescript-eslint/no-unused-vars */\n      try {\n        const plaintext = await nip04.decrypt(\n          this.self.secret,\n          event.pubkey,\n          event.content\n        );\n        if (!plaintext) throw new Error('failed to decrypt event');\n        payload = JSON.parse(plaintext);\n      } catch (ignore) {\n        return;\n      }\n\n      // ignore all the events that are not NostrRPCRequest events\n      if (!isValidRequest(payload)) return;\n\n      // handle request\n      if (typeof this[payload.method] !== 'function') Promise.resolve();\n      const response = await this.handleRequest(payload, event);\n\n      const body = prepareResponse(\n        response.id,\n        response.result,\n        response.error\n      );\n\n      const responseEvent = await prepareEvent(\n        this.self.secret,\n        event.pubkey,\n        body\n      );\n\n      // send response via relay\n      relay.publish(responseEvent);\n    });\n\n    return sub;\n  }\n\n  private async handleRequest(\n    request: NostrRPCRequest,\n    event: Event\n  ): Promise<NostrRPCResponse> {\n    const { id, method, params } = request;\n    let result = null;\n    let error = null;\n    try {\n      this.event = event;\n      result = await this[method](...params);\n      this.event = undefined;\n    } catch (e) {\n      if (e instanceof Error) {\n        error = e.message;\n      } else {\n        error = 'unknown error';\n      }\n    }\n    return {\n      id,\n      result,\n      error,\n    };\n  }\n\n  async disconnectRelays(): Promise<void> {\n    if (this.relayCallConnection) {\n      this.relayCallConnection.close();\n      this.relayCallConnection = undefined;\n    }\n    if (this.relayListenConnection) {\n      this.relayListenConnection.close();\n      this.relayListenConnection = undefined;\n    }\n  }\n\n}\n\nexport function now(): number {\n  return Math.floor(Date.now() / 1000);\n}\nexport function randomID(): string {\n  return Math.random()\n    .toString()\n    .slice(2);\n}\nexport function prepareRequest(\n  id: string,\n  method: string,\n  params: any[]\n): string {\n  return JSON.stringify({\n    id,\n    method,\n    params,\n  });\n}\nexport function prepareResponse(id: string, result: any, error: any): string {\n  return JSON.stringify({\n    id,\n    result,\n    error,\n  });\n}\nexport async function prepareEvent(\n  secretKey: string,\n  pubkey: string,\n  content: string\n): Promise<Event> {\n  const cipherText = await nip04.encrypt(secretKey, pubkey, content);\n\n  const event: Event = {\n    kind: Kinds.NOSTR_CONNECT,\n    created_at: now(),\n    pubkey: getPublicKey(secretKey),\n    tags: [['p', pubkey]],\n    content: cipherText,\n    id: '',\n    sig: '',\n  };\n\n  const id = getEventHash(event);\n  const sig = getSignature(event, secretKey);\n\n  const signedEvent = { ...event, id, sig };\n  const ok = validateEvent(signedEvent);\n  const veryOk = verifySignature(signedEvent);\n  if (!ok || !veryOk) {\n    throw new Error('Event is not valid');\n  }\n\n  return signedEvent;\n}\n\nexport function isValidRequest(payload: any): boolean {\n  if (!payload) return false;\n\n  const keys = Object.keys(payload);\n  if (\n    !keys.includes('id') ||\n    !keys.includes('method') ||\n    !keys.includes('params')\n  )\n    return false;\n\n  return true;\n}\n\nexport function isValidResponse(payload: any): boolean {\n  if (!payload) return false;\n\n  const keys = Object.keys(payload);\n  if (\n    !keys.includes('id') ||\n    !keys.includes('result') ||\n    !keys.includes('error')\n  )\n    return false;\n\n  return true;\n}\n\nexport async function connectToRelay(realayURL: string): Promise<Relay> {\n  const relay = relayInit(realayURL);\n  await relay.connect();\n  await new Promise<void>((resolve, reject) => {\n    relay.on('connect', () => {\n      resolve();\n    });\n    relay.on('error', () => {\n      reject(new Error(`not possible to connect to ${relay.url}`));\n    });\n  });\n  return relay;\n}\nexport async function broadcastToRelay(\n  relay: Relay,\n  event: Event,\n  skipSeen: boolean = false\n) {\n  // send request via relay\n  return await new Promise<void>((resolve, reject) => {\n    relay.on('error', () => {\n      reject(new Error(`failed to connect to ${relay.url}`));\n    });\n    const pub = relay.publish(event);\n    if (skipSeen) resolve();\n    pub.on('failed', (reason: any) => {\n      reject(reason);\n    });\n    pub.on('ok', () => {\n      resolve();\n    });\n  });\n}\n","import { NostrRPC } from './rpc';\n\nexport class NostrSigner extends NostrRPC {\n  async disconnect(): Promise<null> {\n    this.events.emit('disconnect');\n    return null;\n  }\n  isConnected(): boolean {\n    throw new Error('Method not implemented yet.');\n  }\n}\n"],"names":["TimeRanges","Kinds","NOSTR_CONNECT","ConnectMethods","CONNECT","DELEGATE","DESCRIBE","DISCONNECT","GET_PUBLIC_KEY","SIGN_EVENT","SIGN_PSBT","NIP04_ENCRYPT","NIP04_DECRYPT","NostrRPC","opts","this","relay","self","event","events","EventEmitter","relayCallConnection","relayListenConnection","pubkey","getPublicKey","secretKey","secret","undefined","_proto","prototype","initRelayConnection","_initRelayConnection","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","connectToRelay","sent","stop","apply","arguments","call","_call","_callee4","_ref","target","_ref$request","_ref$request$id","id","method","_ref$request$params","params","request","_this","_context4","randomID","t0","status","connect","prepareRequest","prepareEvent","abrupt","Promise","_ref2","_callee3","resolve","reject","sub","_context3","kinds","authors","limit","since","now","broadcastToRelay","skipResponse","unsub","on","_ref3","_callee2","payload","plaintext","_context2","nip04","decrypt","content","Error","JSON","parse","isValidResponse","error","result","_x5","_x3","_x4","_x","_x2","listen","_listen","_callee6","_this2","_context6","_ref4","_callee5","response","body","_context5","isValidRequest","handleRequest","prepareResponse","publish","_x6","_handleRequest","_callee7","_context7","message","_x7","_x8","disconnectRelays","_disconnectRelays","_callee8","_context8","close","Math","floor","Date","random","toString","slice","stringify","_x9","_x10","_x11","_prepareEvent","_callee9","cipherText","sig","signedEvent","ok","veryOk","_context9","encrypt","kind","created_at","tags","getEventHash","getSignature","_extends","validateEvent","verifySignature","keys","Object","includes","_x12","_connectToRelay","_callee10","realayURL","_context10","relayInit","url","_x13","_x14","_x15","_broadcastToRelay","_callee11","skipSeen","_context11","pub","reason","TimeRangeToUnix","_TimeRangeToUnix","FIVE_MINS","round","ONE_HR","ONE_DAY","ONE_WEEK","ONE_MONTH","ONE_YEAR","ConnectURI","metadata","fromURI","uri","URL","hostname","pathname","substring","searchParams","get","ignore","encodeURIComponent","approve","_approve","rpc","_reject","Connect","_decrypt","_encrypt","ciphertext","_proto2","init","_init","t1","length","emit","evt","cb","off","isConnected","assertIsConnected","getTarget","disconnect","_disconnect","_getPublicKey","signEvent","_signEvent","signPSBT","_signPSBT","network","psbt","descriptor","push","describe","_describe","delegate","_delegate","_callee12","delegatee","conditions","_context12","until","getRelays","_getRelays","_callee13","_context13","_callee14","_context14","_request","_callee15","_context15","_x16","NostrSigner","_NostrRPC"],"mappings":"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"}