@joyid/common
Version:
Shared code for JoyID SDK
1 lines • 40.7 kB
Source Map (JSON)
{"version":3,"sources":["../src/utils/errors.ts","../src/utils/qss.ts","../src/utils/search-params.ts","../src/utils/func.ts","../src/utils/buffer.ts","../src/utils/browser.ts","../src/types/dapp.ts","../src/types/nostr.ts","../src/sdk/config.ts","../src/sdk/errors.ts","../src/sdk/url.ts","../src/sdk/popup.ts","../src/sdk/block-dialog.ts","../src/sdk/auth.ts","../src/sdk/sign-messge.ts"],"names":["DappErrorName","SigningAlg","DappRequestType","DappCommunicationType","EventKind"],"mappings":"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","sourcesContent":["export enum DappErrorName {\n DecodeError = 'Decode Error',\n InvalidParams = 'Invalid Params',\n UserRejected = 'User Rejected',\n NotAllowed = 'Not Allowed',\n}\n\nexport class DappError extends Error {\n rawError?: unknown\n\n constructor(\n message: string,\n name: string = DappErrorName.InvalidParams,\n rawError: unknown = undefined\n ) {\n super(message)\n this.name = message === DappErrorName.UserRejected ? message : name\n this.rawError = rawError\n }\n}\n","/* eslint-disable unicorn/prefer-spread */\n// @ts-nocheck\n\n// qss has been slightly modified and inlined here for our use cases (and compression's sake). We've included it as a hard dependency for MIT license attribution.\n\nexport function encode(obj, pfx?: string) {\n let k\n let i\n let tmp\n let str = ''\n\n for (k in obj) {\n if ((tmp = obj[k]) !== void 0) {\n if (Array.isArray(tmp)) {\n for (i = 0; i < tmp.length; i++) {\n str && (str += '&')\n str += `${encodeURIComponent(k)}=${encodeURIComponent(tmp[i])}`\n }\n } else {\n str && (str += '&')\n str += `${encodeURIComponent(k)}=${encodeURIComponent(tmp)}`\n }\n }\n }\n\n return (pfx || '') + str\n}\n\nfunction toValue(mix) {\n if (!mix) return ''\n const str = decodeURIComponent(mix)\n if (str === 'false') return false\n if (str === 'true') return true\n return +str * 0 === 0 && `${+str}` === str ? +str : str\n}\n\nexport function decode(str) {\n let tmp\n let k\n const out = {}\n const arr = str.split('&')\n\n while ((tmp = arr.shift())) {\n tmp = tmp.split('=')\n k = tmp.shift()\n // eslint-disable-next-line unicorn/prefer-ternary, unicorn/no-negated-condition\n if (out[k] !== void 0) {\n out[k] = [].concat(out[k], toValue(tmp.shift()))\n } else {\n out[k] = toValue(tmp.shift())\n }\n }\n\n return out\n}\n","/* eslint-disable unicorn/no-typeof-undefined */\n/* eslint-disable unicorn/no-array-for-each */\n/* eslint-disable unicorn/prefer-string-slice */\n\nimport { DappError, DappErrorName } from './errors'\nimport { decode, encode } from './qss'\n\nexport function parseSearchWith(parser: (str: string) => any) {\n return (searchStr: string): any => {\n if (searchStr.substring(0, 1) === '?') {\n searchStr = searchStr.substring(1)\n }\n\n const query: Record<string, unknown> = decode(searchStr)\n\n // Try to parse any query params that might be json\n for (const key in query) {\n const value = query[key]\n if (typeof value === 'string') {\n try {\n query[key] = parser(value)\n } catch (err) {\n //\n // throw new Error(`invalid params: ${key}: ${value}`)\n }\n }\n }\n\n if (Object.keys(query).length === 0) {\n throw new DappError('Invalid request', DappErrorName.InvalidParams)\n }\n\n return query\n }\n}\n\nexport function stringifySearchWith(\n stringify: (search: any) => string,\n parser?: (str: string) => any\n) {\n function stringifyValue(val: any) {\n if (typeof val === 'object' && val !== null) {\n try {\n return stringify(val)\n } catch (err) {\n // silent\n }\n } else if (typeof val === 'string' && typeof parser === 'function') {\n try {\n // Check if it's a valid parseable string.\n // If it is, then stringify it again.\n parser(val)\n return stringify(val)\n } catch (err) {\n // silent\n }\n }\n return val\n }\n\n return (search: Record<string, any>) => {\n search = { ...search }\n\n if (search) {\n Object.keys(search).forEach((key) => {\n const val = search[key]\n if (typeof val === 'undefined' || val === undefined) {\n delete search[key]\n } else {\n search[key] = stringifyValue(val)\n }\n })\n }\n\n const searchStr = encode(search as Record<string, string>).toString()\n\n return searchStr ? `?${searchStr}` : ''\n }\n}\n\nexport const decodeSearch = parseSearchWith(JSON.parse)\nexport const encodeSearch = stringifySearchWith(JSON.stringify, JSON.parse)\n","export const safeExec = <T>(fn: () => T): T | null => {\n try {\n return fn()\n } catch (error) {\n //\n return null\n }\n}\n","/* eslint-disable unicorn/no-for-loop */\n/* eslint-disable unicorn/prefer-code-point */\n/* eslint-disable unicorn/text-encoding-identifier-case */\n/**\n * Convert from a Base64URL-encoded string to an Array Buffer. Best used when converting a\n * credential ID from a JSON string to an ArrayBuffer, like in allowCredentials or\n * excludeCredentials\n *\n * Helper method to compliment `bufferToBase64URLString`\n */\nexport function base64URLStringToBuffer(base64URLString: string): ArrayBuffer {\n // Convert from Base64URL to Base64\n const base64 = base64URLString.replace(/-/g, '+').replace(/_/g, '/')\n /**\n * Pad with '=' until it's a multiple of four\n * (4 - (85 % 4 = 1) = 3) % 4 = 3 padding\n * (4 - (86 % 4 = 2) = 2) % 4 = 2 padding\n * (4 - (87 % 4 = 3) = 1) % 4 = 1 padding\n * (4 - (88 % 4 = 0) = 4) % 4 = 0 padding\n */\n const padLength = (4 - (base64.length % 4)) % 4\n const padded = base64.padEnd(base64.length + padLength, '=')\n\n // Convert to a binary string\n const binary = atob(padded)\n\n // Convert binary string to buffer\n const buffer = new ArrayBuffer(binary.length)\n const bytes = new Uint8Array(buffer)\n\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i)\n }\n\n return buffer\n}\n\n/**\n * Convert the given array buffer into a Base64URL-encoded string. Ideal for converting various\n * credential response ArrayBuffers to string for sending back to the server as JSON.\n *\n * Helper method to compliment `base64URLStringToBuffer`\n */\nexport function bufferToBase64URLString(buffer: ArrayBuffer): string {\n const bytes = new Uint8Array(buffer)\n let str = ''\n\n for (let i = 0; i < bytes.length; i++) {\n const charCode = bytes[i]\n if (charCode != null) {\n str += String.fromCharCode(charCode)\n }\n }\n\n const base64String = btoa(str)\n\n return base64String.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '')\n}\n\nexport function hexToArrayBuffer(input: string): ArrayBuffer {\n const view = new Uint8Array(input.length / 2)\n for (let i = 0; i < input.length; i += 2) {\n // eslint-disable-next-line unicorn/prefer-string-slice\n view[i / 2] = Number.parseInt(input.substring(i, i + 2), 16)\n }\n\n return view.buffer\n}\n\nexport function bufferToHex(buffer: ArrayBuffer): string {\n return [...new Uint8Array(buffer)]\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\nexport function appendBuffer(\n buffer1: ArrayBuffer,\n buffer2: ArrayBuffer\n): ArrayBuffer {\n const tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength)\n tmp.set(new Uint8Array(buffer1), 0)\n tmp.set(new Uint8Array(buffer2), buffer1.byteLength)\n return tmp.buffer\n}\n\nexport function bufferToUTF8String(value: ArrayBuffer): string {\n return new TextDecoder('utf-8').decode(value)\n}\n\nexport function utf8StringToBuffer(value: string): ArrayBuffer {\n return new TextEncoder().encode(value)\n}\n\nexport function hexToUTF8String(value: string): string {\n return bufferToUTF8String(hexToArrayBuffer(value))\n}\n\nexport function remove0x(hex: string): string {\n return hex.startsWith('0x') ? hex.slice(2) : hex\n}\n\nexport function append0x(hex: string): string {\n return hex.startsWith('0x') ? hex : `0x${hex}`\n}\n\nexport function hexToString(hex: string): string {\n let str = ''\n for (let i = 0; i < hex.length; i += 2)\n // eslint-disable-next-line unicorn/prefer-string-slice\n str += String.fromCharCode(Number.parseInt(hex.substr(i, 2), 16))\n return str\n}\n\nexport function base64urlToHex(s: string) {\n return bufferToHex(base64URLStringToBuffer(s))\n}\n","export function isStandaloneBrowser(): boolean {\n return (\n window.matchMedia('(display-mode: standalone)').matches ||\n (window.navigator as any).standalone\n )\n}\n","import type { RequireExactlyOne } from 'type-fest'\nimport type { CKBTransaction } from './ckb'\n\nexport enum SigningAlg {\n RS256 = -257,\n ES256 = -7,\n}\n\nexport interface JoyIDConfig {\n joyidAppURL?: string\n joyidServerURL?: string\n}\n\nexport interface DappConfig extends JoyIDConfig {\n // name of your app\n name?: string\n // logo of your app\n logo?: string\n // custom state that will be returned to your app after authentication\n state?: unknown\n}\n\nexport type SessionKeyType = 'main_session_key' | 'sub_session_key'\nexport type WebauthnKeyType = 'main_key' | 'sub_key'\nexport type CredentialKeyType = SessionKeyType | WebauthnKeyType\n\nexport type Base64URLString = string\n\nexport type RequestNetwork =\n | 'nervos'\n | 'nostr'\n | 'ethereum'\n | 'btc-p2tr'\n | 'btc-p2wpkh'\n | 'btc-auto'\n\nexport interface BaseRequest {\n redirectURL: string\n joyidAppURL?: string\n}\n\ntype Hex = `0x${string}`\n\nexport interface AuthRequest extends BaseRequest {\n requestNetwork?: RequestNetwork\n name?: string\n logo?: string\n challenge?: string\n state?: unknown\n}\n\nexport interface MiniAppBaseRequest {\n name: string\n logo: string\n miniAppToken: string\n callbackUrl: string\n joyidAppURL?: string\n}\n\nexport interface MiniAppAuthRequest extends MiniAppBaseRequest {\n requestNetwork?: RequestNetwork\n challenge?: string\n}\n\nexport enum DappRequestType {\n Auth = 'Auth',\n SignMessage = 'SignMessage',\n SignEvm = 'SignEvm',\n SignPsbt = 'SignPsbt',\n BatchSignPsbt = 'BatchSignPsbt',\n SignCkbTx = 'SignCkbTx',\n SignCotaNFT = 'SignCotaNFT',\n SignCkbRawTx = 'SignCkbRawTx',\n SignNostrEvent = 'SignNostrEvent',\n EncryptNostrMessage = 'EncryptNostrMessage',\n EvmWeb2Login = 'EvmWeb2Login',\n DecryptNostrMessage = 'DecryptNostrMessage',\n AuthMiniApp = 'AuthMiniApp',\n SignMiniAppMessage = 'SignMiniAppMessage',\n SignMiniAppEvm = 'SignMiniAppEvm',\n}\n\nexport enum DappCommunicationType {\n Popup = 'popup',\n Redirect = 'redirect',\n}\n\nexport interface SignMessageResponseData {\n signature: string\n /**\n * The message that was signed by the authenticator,\n * Note that the message is not the original raw message,\n * but is combined with client data and authenticator data\n * according to [WebAuthn Spec](https://www.w3.org/TR/webauthn-2/#sctn-op-get-assertion).\n */\n message: string\n /**\n * The public key used to sign the message\n */\n pubkey: string\n /**\n * The message that was requested to be signed\n */\n challenge: string\n\n attestation?: string\n\n keyType: CredentialKeyType\n\n alg: SigningAlg\n\n state?: any\n\n requestNetwork?: RequestNetwork\n}\n\nexport interface AuthResponseData extends Partial<SignMessageResponseData> {\n address: string\n ethAddress: string\n nostrPubkey: string\n pubkey: string\n challenge?: string\n message?: string\n keyType: CredentialKeyType\n alg: SigningAlg\n btcAddressType?: 'p2tr' | 'p2wpkh'\n taproot: {\n address: string\n pubkey: string\n }\n nativeSegwit: {\n address: string\n pubkey: string\n }\n}\n\nexport interface DappResponse<T> {\n error: string\n data: T\n state?: any\n}\n\nexport type AuthResponse = {\n type: DappRequestType.Auth\n} & RequireExactlyOne<DappResponse<AuthResponseData>, 'data' | 'error'>\n\nexport type SignMessageResponse = {\n type: DappRequestType.SignMessage\n} & RequireExactlyOne<DappResponse<SignMessageResponseData>, 'data' | 'error'>\nexport interface BaseSignMessageRequest extends AuthRequest {\n challenge: string\n isData?: boolean\n address?: string\n requestNetwork?: RequestNetwork\n}\n\nexport interface MiniAppSignMessageRequest extends MiniAppBaseRequest {\n requestNetwork?: RequestNetwork\n challenge?: string\n isData?: boolean\n address: string\n}\n\nexport interface SignEvmTxResponseData {\n tx: Hex\n state?: any\n}\n\nexport type SignEvmResponse = {\n type: DappRequestType.SignEvm\n} & RequireExactlyOne<DappResponse<SignEvmTxResponseData>, 'data' | 'error'>\n\nexport type SignMessageRequest = RequireExactlyOne<\n BaseSignMessageRequest,\n 'address'\n>\n\nexport type BtcSignMessageType = 'bip322-simple' | 'ecdsa'\n\nexport interface BtcSignMessageRequest extends SignMessageRequest {\n signMessageType: BtcSignMessageType\n}\n\nexport interface SignCkbTxResponseData {\n tx: CKBTransaction\n state?: any\n}\n\nexport type SignCkbTxResponse = {\n type: DappRequestType.SignCkbTx\n} & RequireExactlyOne<DappResponse<SignCkbTxResponseData>, 'data' | 'error'>\n\nexport type SignCotaNFTResponseData = SignCkbTxResponseData\n\nexport type SignCotaNFTResponse = {\n type: DappRequestType.SignCotaNFT\n} & RequireExactlyOne<DappResponse<SignCotaNFTResponseData>, 'data' | 'error'>\n\nexport type SignCkbRawTxResponseData = SignCkbTxResponseData\n\nexport type SignCkbRawTxResponse = {\n type: DappRequestType.SignCkbRawTx\n} & RequireExactlyOne<DappResponse<SignCkbRawTxResponseData>, 'data' | 'error'>\n\nexport const SESSION_KEY_VER = '00'\n","import {\n type DappRequestType,\n type DappResponse,\n type JoyIDConfig,\n} from './dapp'\nimport { type RequireExactlyOne } from 'type-fest'\n\n/** @deprecated Use numbers instead. */\n\nexport enum EventKind {\n Metadata = 0,\n Text = 1,\n RecommendRelay = 2,\n Contacts = 3,\n EncryptedDirectMessage = 4,\n EventDeletion = 5,\n Repost = 6,\n Reaction = 7,\n BadgeAward = 8,\n ChannelCreation = 40,\n ChannelMetadata = 41,\n ChannelMessage = 42,\n ChannelHideMessage = 43,\n ChannelMuteUser = 44,\n Blank = 255,\n Report = 1984,\n ZapRequest = 9734,\n Zap = 9735,\n RelayList = 10_002,\n ClientAuth = 22_242,\n HttpAuth = 27_235,\n ProfileBadge = 30_008,\n BadgeDefinition = 30_009,\n Article = 30_023,\n}\n\nexport interface EventTemplate<K extends number = number> {\n kind: K\n tags: string[][]\n content: string\n created_at: number\n}\n\nexport type UnsignedEvent<K extends number = number> = EventTemplate<K> & {\n pubkey: string\n}\n\nexport type Event<K extends number = number> = UnsignedEvent<K> & {\n id: string\n sig: string\n}\n\nexport interface GetPublicKeyRequest extends JoyIDConfig {\n redirectURL: string\n name?: string\n logo?: string\n}\n\nexport interface SignNostrEventRequest extends GetPublicKeyRequest {\n event: UnsignedEvent<number>\n}\n\nexport interface SignNostrEventData {\n event: Event<number>\n}\n\nexport type SignNostrEventResponse = {\n type: DappRequestType.SignNostrEvent\n} & RequireExactlyOne<DappResponse<SignNostrEventData>, 'data' | 'error'>\n","import { type DappConfig } from '../types/dapp'\n\nexport const internalConfig: DappConfig = {\n joyidAppURL: 'https://testnet.joyid.dev',\n}\n\nexport const initConfig = (config?: DappConfig): DappConfig => {\n Object.assign(internalConfig, config)\n\n return internalConfig\n}\n\nexport const getConfig = (): DappConfig => internalConfig\n","export class GenericError extends Error {\n constructor(\n public error: string,\n public error_description: string\n ) {\n super(error_description)\n Object.setPrototypeOf(this, GenericError.prototype)\n }\n}\n\nexport class TimeoutError extends GenericError {\n constructor() {\n super('timeout', 'Timeout')\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(this, TimeoutError.prototype)\n }\n}\n\n/**\n * Error thrown when the login popup times out (if the user does not complete auth)\n */\nexport class PopupTimeoutError extends TimeoutError {\n constructor(public popup: Window) {\n super()\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(this, PopupTimeoutError.prototype)\n }\n}\n\nexport class PopupCancelledError extends GenericError {\n constructor(public popup?: Window) {\n super('cancelled', 'Popup closed')\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(this, PopupCancelledError.prototype)\n }\n}\n\nexport class PopupNotSupportedError extends GenericError {\n constructor(public popup: Window) {\n super(\n 'NotSupported',\n 'Popup window is blocked by browser. see: https://docs.joy.id/guide/best-practice#popup-window-blocked'\n )\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(this, PopupCancelledError.prototype)\n }\n}\n\nexport class RedirectErrorWithState extends Error {\n constructor(\n public message: string,\n public state?: any\n ) {\n super(message)\n this.state = state\n }\n}\n","import type { BaseRequest, DappResponse } from '../types/dapp'\nimport { encodeSearch, decodeSearch } from '../utils'\nimport { getConfig } from './config'\nimport { RedirectErrorWithState } from './errors'\n\nconst JOYID_REDIRECT = 'joyid-redirect'\n\nexport const getRedirectResponse = <T extends { state?: any }>(\n uri?: string\n): DappResponse<T>['data'] => {\n const url = new URL(uri ?? window.location.href)\n const data = url.searchParams.get('_data_')\n if (data == null) {\n throw new Error('No data found')\n }\n const res = decodeSearch(data) as DappResponse<T>\n if (res.error != null) {\n throw new RedirectErrorWithState(res.error, res.state)\n }\n return res.data\n}\n\nexport const buildJoyIDURL = <T extends BaseRequest>(\n request: T,\n type: 'popup' | 'redirect',\n path: string\n): string => {\n const joyidURL = request.joyidAppURL ?? getConfig().joyidAppURL\n const url = new URL(`${joyidURL}`)\n url.pathname = path\n let redirectTo = request.redirectURL\n if (type === 'redirect') {\n const redirectURL = new URL(redirectTo)\n redirectURL.searchParams.set(JOYID_REDIRECT, 'true')\n redirectTo = redirectURL.href\n }\n url.searchParams.set('type', type)\n const data = encodeSearch({\n ...request,\n redirectURL: redirectTo,\n })\n url.searchParams.set('_data_', data)\n return url.href\n}\n\nexport const isRedirectFromJoyID = (uri?: string): boolean => {\n try {\n const url = new URL(uri ?? window.location.href)\n return url.searchParams.has(JOYID_REDIRECT)\n } catch (error) {\n return false\n }\n}\n","/* eslint-disable prefer-const */\nimport type {\n AuthResponseData,\n DappConfig,\n DappRequestType,\n SignCkbTxResponseData,\n SignCotaNFTResponseData,\n SignEvmTxResponseData,\n SignMessageResponseData,\n} from '../types/dapp'\nimport type { EvmWeb2LoginResponse } from '../types/evm'\nimport type { SignNostrEventData } from '../types/nostr'\nimport { getConfig } from './config'\nimport {\n PopupCancelledError,\n PopupNotSupportedError,\n PopupTimeoutError,\n} from './errors'\nimport { isStandaloneBrowser } from '../utils/browser'\n\nexport interface PopupConfigOptions<\n T extends DappRequestType = DappRequestType.Auth,\n> {\n /**\n * The number of seconds to wait for a popup response before\n * throwing a timeout error. Defaults to 300s\n */\n timeoutInSeconds?: number\n\n /**\n * Accepts an already-created popup window to use. If not specified, the SDK\n * will create its own. This may be useful for platforms like iOS that have\n * security restrictions around when popups can be invoked (e.g. from a user click event)\n */\n popup?: any\n\n type: T\n}\n\nconst DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS = 3000\n\nexport const openPopup = (url: string = ''): Window | null => {\n const width = 400\n const height = 600\n const left = window.screenX + (window.innerWidth - width) / 2\n const top = window.screenY + (window.innerHeight - height) / 2\n\n return window.open(\n url,\n 'joyid:authorize:popup',\n `left=${left},top=${top},width=${width},height=${height},resizable,scrollbars=yes,status=1`\n )\n}\n\nexport interface PopupRerurnType {\n [DappRequestType.Auth]: AuthResponseData\n [DappRequestType.SignMessage]: SignMessageResponseData\n [DappRequestType.SignEvm]: SignEvmTxResponseData\n [DappRequestType.SignPsbt]: SignEvmTxResponseData\n [DappRequestType.BatchSignPsbt]: {\n psbts: string[]\n }\n [DappRequestType.SignCkbTx]: SignCkbTxResponseData\n [DappRequestType.SignCotaNFT]: SignCotaNFTResponseData\n [DappRequestType.SignCkbRawTx]: SignCkbTxResponseData\n [DappRequestType.SignNostrEvent]: SignNostrEventData\n [DappRequestType.EncryptNostrMessage]: any\n [DappRequestType.DecryptNostrMessage]: any\n [DappRequestType.AuthMiniApp]: any\n [DappRequestType.SignMiniAppEvm]: any\n [DappRequestType.SignMiniAppMessage]: any\n [DappRequestType.EvmWeb2Login]: EvmWeb2LoginResponse\n}\n\nexport const runPopup = async <T extends DappRequestType>(\n config: PopupConfigOptions<T> & Partial<DappConfig>\n): Promise<PopupRerurnType[T]> =>\n new Promise<PopupRerurnType[T]>((resolve, reject) => {\n if (isStandaloneBrowser()) {\n reject(new PopupNotSupportedError(config.popup))\n }\n let popupEventListener: (e: MessageEvent) => void\n let timeoutId: undefined | ReturnType<typeof setTimeout>\n // Check each second if the popup is closed triggering a PopupCancelledError\n const popupTimer = setInterval(() => {\n if (config.popup?.closed) {\n clearInterval(popupTimer)\n clearTimeout(timeoutId)\n window.removeEventListener('message', popupEventListener, false)\n reject(new PopupCancelledError(config.popup))\n }\n }, 1000)\n\n timeoutId = setTimeout(\n () => {\n clearInterval(popupTimer)\n reject(new PopupTimeoutError(config.popup))\n window.removeEventListener('message', popupEventListener, false)\n },\n (config.timeoutInSeconds ?? DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS) * 1000\n )\n\n popupEventListener = (e: MessageEvent) => {\n const joyidAppURL = config.joyidAppURL ?? getConfig().joyidAppURL\n if (joyidAppURL == null) {\n throw new Error('joyidAppURL is not set in the config')\n }\n const appURL = new URL(joyidAppURL)\n if (e.origin !== appURL.origin) {\n return\n }\n if (!e.data || e.data?.type !== config.type) {\n return\n }\n\n clearTimeout(timeoutId)\n clearInterval(popupTimer)\n window.removeEventListener('message', popupEventListener, false)\n config.popup.close()\n if (e.data.error) {\n reject(new Error(e.data.error))\n }\n resolve(e.data.data)\n }\n\n window.addEventListener('message', popupEventListener)\n })\n","/* eslint-disable unicorn/prefer-dom-node-remove */\n/* eslint-disable unicorn/prefer-query-selector */\n/* eslint-disable unicorn/prefer-dom-node-append */\nconst styleId = 'joyid-block-dialog-style'\n\nconst approveId = 'joyid-block-dialog-approve'\n\nconst rejectId = 'joyid-block-dialog-reject'\n\nconst styleSheet = `\n.joyid-block-dialog {\n position: fixed;\n top: 32px;\n left: 50%;\n width: 340px;\n margin-left: -170px;\n background: white;\n color: #333;\n display: flex;\n flex-flow: row nowrap;\n justify-content: space-between;\n align-items: center;\n height: 110px;\n z-index: 100002;\n box-sizing: border-box;\n border: 1px solid #ffffff;\n border-radius: 8px;\n padding: 16px 20px;\n}\n.joyid-block-dialog-bg {\n width: 100%;\n height: 100%;\n background-color: rgba(0,0,0,0.5);\n position: fixed;\n top: 0;\n left: 0;\n display: none;\n z-index: 100001;\n display: block;\n}\n.joyid-block-dialog-title {\n font-weight: bold;\n font-size: 14px;\n margin-bottom: 8px;\n}\n.joyid-block-dialog-tip {\n font-size: 12px;\n color: #777;\n}\n.joyid-block-dialog-btn {\n width: 90px;\n height: 35px;\n font-size: 12px;\n text-align: center;\n border-radius: 6px;\n cursor: pointer;\n}\n.joyid-block-dialog-action {\n text-align: right;\n}\n#${approveId} {\n border: 1px solid #333;\n color: #333;\n background: #D2FF00;\n margin-bottom: 8px;\n}\n\n#${rejectId} {\n background: transparent;\n}\n`\n\nconst dialogInnerHtml = `\n<div class=\"joyid-block-dialog\">\n <div class=\"joyid-block-dialog-content\">\n <div class=\"joyid-block-dialog-title\">\n Request Pop-up\n </div>\n <div class=\"joyid-block-dialog-tip\">\n Click Approve to complete creating or using wallet\n </div>\n </div>\n <div class=\"joyid-block-dialog-action\">\n <button class=\"joyid-block-dialog-btn\" id=\"${approveId}\">Approve</button>\n <button class=\"joyid-block-dialog-btn\" id=\"${rejectId}\">Reject</button>\n </div>\n</div>\n`\n\nexport const appendStyle = (): void => {\n const _style = document.getElementById(styleId)\n if (_style != null) {\n return\n }\n const style = document.createElement('style')\n style.appendChild(document.createTextNode(styleSheet))\n const head = document.head ?? document.getElementsByTagName('head')[0]\n head.appendChild(style)\n}\n\nexport const createBlockDialog = async <T>(\n cb: (...args: any[]) => Promise<T>\n): Promise<T> => {\n appendStyle()\n const dialog = document.createElement('div')\n dialog.innerHTML = dialogInnerHtml\n document.body.appendChild(dialog)\n const dialogBg = document.createElement('div')\n dialogBg.className = 'joyid-block-dialog-bg'\n document.body.appendChild(dialogBg)\n const approveBtn = document.getElementById(approveId)\n const rejectBtn = document.getElementById(rejectId)\n const closeDialog = (): void => {\n document.body.removeChild(dialog)\n document.body.removeChild(dialogBg)\n }\n return new Promise<T>((resolve, reject) => {\n approveBtn?.addEventListener('click', async () => {\n try {\n const data = await cb()\n closeDialog()\n resolve(data)\n } catch (error) {\n closeDialog()\n reject(error)\n }\n })\n rejectBtn?.addEventListener('click', () => {\n closeDialog()\n reject(new Error('User Rejected'))\n })\n })\n}\n","import { DappCommunicationType, DappRequestType } from '../types/dapp'\nimport type { AuthRequest, AuthResponseData } from '../types/dapp'\nimport { buildJoyIDURL, getRedirectResponse } from './url'\nimport { type PopupConfigOptions, openPopup, runPopup } from './popup'\nimport { createBlockDialog } from './block-dialog'\n\nexport const buildJoyIDAuthURL = (\n request: AuthRequest,\n type: 'popup' | 'redirect'\n): string => buildJoyIDURL(request, type, '/auth')\n\nexport const authWithRedirect = (request: AuthRequest): void => {\n window.location.assign(buildJoyIDAuthURL(request, 'redirect'))\n}\n\nexport const authWithPopup = async (\n request: AuthRequest,\n config?: Pick<PopupConfigOptions, 'timeoutInSeconds' | 'popup'>\n): Promise<AuthResponseData> => {\n config = config ?? {}\n\n if (config.popup == null) {\n config.popup = openPopup('')\n\n if (config.popup == null) {\n return createBlockDialog(async () => authWithPopup(request, config))\n }\n }\n\n config.popup.location.href = buildJoyIDAuthURL(\n request,\n DappCommunicationType.Popup\n )\n\n return runPopup({\n ...request,\n ...config,\n type: DappRequestType.Auth,\n })\n}\n\nexport const authCallback = (uri?: string): AuthResponseData =>\n getRedirectResponse<AuthResponseData>(uri)\n","import {\n DappRequestType,\n type SignMessageRequest,\n type SignMessageResponseData,\n} from '../types/dapp'\nimport { buildJoyIDURL, getRedirectResponse } from './url'\nimport { type PopupConfigOptions, openPopup, runPopup } from './popup'\nimport { createBlockDialog } from './block-dialog'\n\nexport const buildJoyIDSignMessageURL = (\n request: SignMessageRequest & Record<string, unknown>,\n type: 'redirect' | 'popup'\n): string => buildJoyIDURL(request, type, '/sign-message')\n\nexport const signMessageWithRedirect = (request: SignMessageRequest): void => {\n window.location.assign(buildJoyIDSignMessageURL(request, 'redirect'))\n}\n\nexport const signMessageWithPopup = async <T extends DappRequestType>(\n request: SignMessageRequest & Record<string, unknown>,\n config?: Pick<PopupConfigOptions<T>, 'timeoutInSeconds' | 'popup'>\n): Promise<SignMessageResponseData> => {\n config = config ?? {}\n\n if (config.popup == null) {\n config.popup = openPopup('')\n\n if (config.popup == null) {\n return createBlockDialog(async () =>\n signMessageWithPopup(request, config)\n )\n }\n }\n\n config.popup.location.href = buildJoyIDSignMessageURL(request, 'popup')\n\n return runPopup({\n ...request,\n ...config,\n type: DappRequestType.SignMessage,\n })\n}\n\nexport const signMessageCallback = (uri?: string): SignMessageResponseData =>\n getRedirectResponse<SignMessageResponseData>(uri)\n"]}