{"version":3,"sources":["../../src/meteor.ts"],"sourcesContent":["import { serialize as borshSerialize } from \"@fastnear/borsh\";\nimport { privateKeyFromRandom, publicKeyFromPrivate, bytesToBase64, mapTransaction, SCHEMA } from \"@fastnear/utils\";\nimport type { PlainTransaction } from \"@fastnear/utils\";\nimport { connectorActionsToFastnearActions } from \"./actions.js\";\nimport { createRpcFactory } from \"./rpc.js\";\nimport { TransportError, UserRejectedError } from \"./errors.js\";\nimport { createDefaultStorage, readJson, writeJson } from \"./storage.js\";\nimport type {\n  AdapterStorage,\n  ConnectorActionLike,\n  MeteorAdapterOptions,\n  MeteorExtensionBridge,\n  PopupWindowLike,\n  SignAndSendTransactionParams,\n  SignAndSendTransactionsParams,\n  SignInParams,\n  SignMessageParams,\n  WalletAccount,\n  WalletNetwork,\n} from \"./types.js\";\n\nconst METEOR_DEFAULT_WALLET_BASE = \"https://wallet.meteorwallet.app\";\nconst METEOR_CONNECTION_PING_MS = 450;\nconst METEOR_POPUP_WIDTH = 390;\nconst METEOR_POPUP_HEIGHT = 650;\nconst LEGACY_AUTH_KEY_SUFFIX = \"_meteor_wallet_auth_key\";\n\ntype MeteorConnectionStatus =\n  | \"initializing\"\n  | \"connected\"\n  | \"attempting_reconnect\"\n  | \"disconnected\"\n  | \"closed_success\"\n  | \"closed_fail\"\n  | \"closed_window\";\n\ntype MeteorActionType = \"login\" | \"logout\" | \"sign\" | \"verify_owner\" | \"sign_message\";\n\ninterface MeteorAuthState {\n  accountId?: string;\n  allKeys: string[];\n  signedInContract?: {\n    contract_id?: string;\n    public_key: string;\n  };\n}\n\ninterface MeteorConnection {\n  uid: string;\n  network: WalletNetwork;\n  actionType: MeteorActionType;\n  status: MeteorConnectionStatus;\n  inputs?: Record<string, any>;\n  popup?: PopupWindowLike;\n  extension?: MeteorExtensionBridge;\n  walletOrigin: string;\n  cleanupFns: Array<() => void>;\n  interval?: ReturnType<typeof setInterval>;\n  resolve: (payload: any) => void;\n  reject: (error: Error) => void;\n}\n\ninterface MeteorActionResponse {\n  uid?: string;\n  status?: MeteorConnectionStatus;\n  payload?: any;\n  endTags?: string[];\n  message?: string;\n}\n\nconst randomUid = (): string => {\n  if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n    return crypto.randomUUID();\n  }\n  return `meteor-${Date.now()}-${Math.floor(Math.random() * 100000)}`;\n};\n\nconst popupFeatures = (): string => {\n  if (typeof window === \"undefined\" || window.top == null) {\n    return `popup=1,width=${METEOR_POPUP_WIDTH},height=${METEOR_POPUP_HEIGHT}`;\n  }\n\n  const y = window.top.outerHeight / 2 + window.top.screenY - METEOR_POPUP_HEIGHT / 2;\n  const x = window.top.outerWidth / 2 + window.top.screenX - METEOR_POPUP_WIDTH / 2;\n  return `popup=1,width=${METEOR_POPUP_WIDTH},height=${METEOR_POPUP_HEIGHT},top=${y},left=${x}`;\n};\n\nconst isUserRejectedTag = (tag?: string): boolean => {\n  return tag === \"USER_CANCELLED\" || tag === \"WINDOW_CLOSED\" || tag === \"INCOMPLETE_ACTION\";\n};\n\nconst mapMeteorError = (message: string, endTags?: string[]): Error => {\n  const tags = endTags ?? [];\n  const lastTag = tags[tags.length - 1];\n\n  if (isUserRejectedTag(lastTag)) {\n    return new UserRejectedError(lastTag ?? \"USER_REJECTED\", message, { details: { endTags: tags } });\n  }\n\n  if (lastTag === \"POPUP_WINDOW_OPEN_FAILED\" || lastTag === \"POPUP_WINDOW_REFUSED\") {\n    return new TransportError(lastTag, message, { details: { endTags: tags } });\n  }\n\n  return new TransportError(lastTag ?? \"METEOR_ACTION_FAILED\", message, {\n    details: { endTags: tags },\n  });\n};\n\nconst ensureNetwork = (network: string): WalletNetwork => {\n  if (network !== \"mainnet\" && network !== \"testnet\") {\n    throw new TransportError(\"INVALID_NETWORK\", `Unsupported network: ${network}`);\n  }\n  return network;\n};\n\nconst toMeteorTxPayload = (tx: PlainTransaction): string => {\n  const encoded = borshSerialize(SCHEMA.Transaction, mapTransaction(tx));\n  return bytesToBase64(new Uint8Array(encoded));\n};\n\nconst normalizeActionError = (error: unknown): Error => {\n  if (error instanceof TransportError || error instanceof UserRejectedError) return error;\n  if (error instanceof Error) return new TransportError(\"METEOR_ACTION_FAILED\", error.message, { cause: error });\n  return new TransportError(\"METEOR_ACTION_FAILED\", \"Meteor action failed\", { details: error });\n};\n\nexport const createMeteorAdapter = (options: MeteorAdapterOptions = {}) => {\n  const storage: AdapterStorage = options.storage ?? createDefaultStorage();\n  const walletBaseUrl = options.walletBaseUrl ?? METEOR_DEFAULT_WALLET_BASE;\n  const appKeyPrefix = options.appKeyPrefix ?? \"near_app\";\n  const openWindow =\n    options.openWindow ??\n    ((url: string, name?: string, features?: string) => {\n      if (typeof window === \"undefined\") return null;\n      return window.open(url, name ?? \"MeteorWallet\", features ?? popupFeatures()) as any;\n    });\n\n  const rpcForNetwork = createRpcFactory(options.getNetworkProviders);\n  const walletOrigin = new URL(walletBaseUrl).origin;\n  const authStorageKey = (network: WalletNetwork) => `${appKeyPrefix}${LEGACY_AUTH_KEY_SUFFIX}:${network}`;\n  const legacyAuthKey = `${appKeyPrefix}${LEGACY_AUTH_KEY_SUFFIX}`;\n\n  let extensionListenerAttached = false;\n  let activeConnection: MeteorConnection | null = null;\n\n  const loadAuth = async (network: WalletNetwork): Promise<MeteorAuthState> => {\n    const keyed = await readJson<MeteorAuthState>(storage, authStorageKey(network), { allKeys: [] });\n    if (keyed.accountId || (keyed.allKeys?.length ?? 0) > 0) return keyed;\n    return readJson<MeteorAuthState>(storage, legacyAuthKey, { allKeys: [] });\n  };\n\n  const saveAuth = async (network: WalletNetwork, state: MeteorAuthState): Promise<void> => {\n    await writeJson(storage, authStorageKey(network), state);\n    await writeJson(storage, legacyAuthKey, state);\n  };\n\n  const clearAuth = async (network: WalletNetwork): Promise<void> => {\n    await storage.remove(authStorageKey(network));\n  };\n\n  const cleanupConnection = () => {\n    if (activeConnection == null) return;\n    if (activeConnection.interval != null) clearInterval(activeConnection.interval);\n    activeConnection.cleanupFns.forEach((fn) => fn());\n    activeConnection.cleanupFns = [];\n    activeConnection.popup?.close?.();\n    activeConnection = null;\n  };\n\n  const sendConnectionMessage = (connection: MeteorConnection): void => {\n    const payload: Record<string, any> = {\n      uid: connection.uid,\n      actionType: connection.actionType,\n      status: connection.status,\n      network: connection.network,\n      endTags: [],\n    };\n    if (connection.status === \"initializing\") payload.inputs = connection.inputs;\n\n    if (connection.extension != null) {\n      connection.extension.sendMessageData(payload);\n      return;\n    }\n\n    if (connection.popup?.postMessage == null) return;\n    try {\n      connection.popup.postMessage(payload, connection.walletOrigin);\n    } catch {\n      connection.popup.postMessage(payload);\n    }\n  };\n\n  const closeWithError = (error: Error): void => {\n    if (activeConnection == null) return;\n    const reject = activeConnection.reject;\n    cleanupConnection();\n    reject(error);\n  };\n\n  const closeWithSuccess = (payload: any): void => {\n    if (activeConnection == null) return;\n    const resolve = activeConnection.resolve;\n    cleanupConnection();\n    resolve(payload);\n  };\n\n  const handleMeteorResponse = (raw: any) => {\n    const data = raw as MeteorActionResponse;\n    if (activeConnection == null) return;\n    if (data.uid !== activeConnection.uid) return;\n    if (data.status == null) return;\n\n    if (data.status === \"attempting_reconnect\") {\n      activeConnection.status = \"initializing\";\n      sendConnectionMessage(activeConnection);\n      return;\n    }\n\n    if (data.status === \"connected\" && activeConnection.status === \"initializing\") {\n      activeConnection.status = \"connected\";\n      return;\n    }\n\n    if (data.status === \"closed_success\") {\n      closeWithSuccess(data.payload);\n      return;\n    }\n\n    if (data.status === \"closed_fail\") {\n      closeWithError(mapMeteorError(data.message ?? \"Meteor action failed\", data.endTags));\n      return;\n    }\n\n    if (data.status === \"closed_window\") {\n      closeWithError(\n        new UserRejectedError(\n          \"WINDOW_CLOSED\",\n          data.message ?? \"User closed the wallet window\",\n          { details: { endTags: data.endTags ?? [\"WINDOW_CLOSED\"] } },\n        ),\n      );\n      return;\n    }\n\n    if (data.status === \"disconnected\") {\n      closeWithError(new TransportError(\"DISCONNECTED\", \"Meteor wallet transport disconnected\"));\n    }\n  };\n\n  const attachExtensionListenerIfNeeded = (extension?: MeteorExtensionBridge) => {\n    if (extension == null || extensionListenerAttached) return;\n    extension.addMessageDataListener((message) => handleMeteorResponse(message));\n    extensionListenerAttached = true;\n  };\n\n  const connectAndWaitForResponse = async <T>(\n    network: WalletNetwork,\n    actionType: MeteorActionType,\n    inputs?: Record<string, any>,\n  ): Promise<T> => {\n    if (activeConnection != null) {\n      activeConnection.reject(\n        new TransportError(\"NEW_ACTION_STARTED\", \"A new action was started before the previous action completed\"),\n      );\n      cleanupConnection();\n    }\n\n    const uid = randomUid();\n    const extension = options.getExtensionBridge?.();\n    attachExtensionListenerIfNeeded(extension);\n\n    let popup: PopupWindowLike | undefined;\n    const cleanupFns: Array<() => void> = [];\n\n    if (extension == null) {\n      const url = new URL(`${walletBaseUrl}/connect/${network}/${actionType}`);\n      url.searchParams.set(\"source\", \"wpm\");\n      url.searchParams.set(\"connectionUid\", uid);\n\n      popup = openWindow(url.toString(), \"MeteorWallet\", popupFeatures()) ?? undefined;\n      if (popup == null) {\n        throw new TransportError(\"POPUP_WINDOW_OPEN_FAILED\", \"Couldn't open popup window to complete wallet action\");\n      }\n\n      if (popup.windowIdPromise != null) {\n        const popupId = await popup.windowIdPromise;\n        if (popupId == null) {\n          throw new TransportError(\"POPUP_WINDOW_OPEN_FAILED\", \"Couldn't open popup window to complete wallet action\");\n        }\n      }\n\n      if (typeof window !== \"undefined\") {\n        const listener = (event: MessageEvent) => handleMeteorResponse(event.data);\n        window.addEventListener(\"message\", listener);\n        cleanupFns.push(() => window.removeEventListener(\"message\", listener));\n      }\n    }\n\n    return new Promise<T>((resolve, reject) => {\n      const connection: MeteorConnection = {\n        uid,\n        network,\n        actionType,\n        status: \"initializing\",\n        inputs,\n        popup,\n        extension,\n        walletOrigin,\n        cleanupFns,\n        resolve,\n        reject,\n      };\n\n      activeConnection = connection;\n      sendConnectionMessage(connection);\n      connection.interval = setInterval(() => {\n        if (activeConnection == null) return;\n        if (activeConnection.popup != null && activeConnection.popup.closed) {\n          closeWithError(\n            new UserRejectedError(\n              \"WINDOW_CLOSED\",\n              \"User closed the wallet window before completing the action\",\n              { details: { endTags: [\"INCOMPLETE_ACTION\", \"WINDOW_CLOSED\"] } },\n            ),\n          );\n          return;\n        }\n        sendConnectionMessage(activeConnection);\n      }, METEOR_CONNECTION_PING_MS);\n    });\n  };\n\n  const findSignerPublicKey = async (network: WalletNetwork, accountId: string, preferredKeys: string[]): Promise<string> => {\n    const rpc = rpcForNetwork(network);\n    for (const key of preferredKeys) {\n      try {\n        await rpc.query({\n          request_type: \"view_access_key\",\n          finality: \"optimistic\",\n          account_id: accountId,\n          public_key: key,\n        });\n        return key;\n      } catch {\n        // Ignore and continue probing candidate keys.\n      }\n    }\n\n    const accessKeyList = await rpc.query<{ keys: Array<{ public_key: string }> }>({\n      request_type: \"view_access_key_list\",\n      finality: \"optimistic\",\n      account_id: accountId,\n    });\n\n    if (!accessKeyList.keys?.length) {\n      throw new TransportError(\"NO_ACCESS_KEYS\", `No access keys found for account ${accountId}`);\n    }\n\n    return accessKeyList.keys[0].public_key;\n  };\n\n  const prepareMeteorTransactions = async (\n    network: WalletNetwork,\n    signerId: string,\n    preferredKeys: string[],\n    transactions: Array<{ receiverId: string; actions: ConnectorActionLike[] }>,\n  ): Promise<PlainTransaction[]> => {\n    const rpc = rpcForNetwork(network);\n    const block = await rpc.block({ finality: \"final\" });\n    const publicKey = await findSignerPublicKey(network, signerId, preferredKeys);\n    const accessKey = await rpc.query<{ nonce: number }>({\n      request_type: \"view_access_key\",\n      finality: \"optimistic\",\n      account_id: signerId,\n      public_key: publicKey,\n    });\n\n    return transactions.map((tx, index) => ({\n      signerId,\n      publicKey,\n      nonce: BigInt(accessKey.nonce) + BigInt(index + 1),\n      receiverId: tx.receiverId,\n      blockHash: block.header.hash,\n      actions: connectorActionsToFastnearActions(tx.actions),\n    }));\n  };\n\n  const getAccountsForNetwork = async (network: WalletNetwork): Promise<WalletAccount[]> => {\n    const auth = await loadAuth(network);\n    if (!auth.accountId) return [];\n    const publicKey = auth.signedInContract?.public_key ?? auth.allKeys?.[0] ?? \"\";\n    return [{ accountId: auth.accountId, publicKey }];\n  };\n\n  const signIn = async ({ network, contractId, methodNames }: SignInParams): Promise<WalletAccount[]> => {\n    const net = ensureNetwork(network);\n    const generatedKey = privateKeyFromRandom();\n    const generatedPublicKey = publicKeyFromPrivate(generatedKey);\n\n    const inputs: Record<string, any> = {\n      type: methodNames && methodNames.length > 0 ? \"SELECTED_METHODS\" : \"ALL_METHODS\",\n      contract_id: contractId,\n      methods: methodNames ?? [],\n      public_key: generatedPublicKey,\n    };\n\n    const response = await connectAndWaitForResponse<{ accountId?: string; account_id?: string; allKeys?: string[] }>(\n      net,\n      \"login\",\n      inputs,\n    ).catch((error) => {\n      throw normalizeActionError(error);\n    });\n\n    const accountId = response.accountId ?? response.account_id;\n    if (accountId == null) {\n      throw new TransportError(\"INVALID_LOGIN_RESPONSE\", \"Meteor login response did not contain an account id\", { details: response });\n    }\n\n    await saveAuth(net, {\n      accountId,\n      allKeys: response.allKeys ?? [],\n      signedInContract: contractId ? { contract_id: contractId, public_key: generatedPublicKey } : undefined,\n    });\n\n    return getAccountsForNetwork(net);\n  };\n\n  const signOut = async ({ network }: { network: WalletNetwork }): Promise<void> => {\n    const net = ensureNetwork(network);\n    const auth = await loadAuth(net);\n    if (!auth.accountId) return;\n\n    if (auth.signedInContract != null) {\n      await connectAndWaitForResponse(net, \"logout\", {\n        accountId: auth.accountId,\n        contractInfo: auth.signedInContract,\n      }).catch((error) => {\n        throw normalizeActionError(error);\n      });\n    }\n\n    await clearAuth(net);\n    await saveAuth(net, { allKeys: [] });\n  };\n\n  const verifyOwner = async ({ network, message, accountId }: { network: WalletNetwork; message: string; accountId?: string }) => {\n    const net = ensureNetwork(network);\n    const auth = await loadAuth(net);\n    const useAccountId = accountId ?? auth.accountId;\n    return connectAndWaitForResponse(net, \"verify_owner\", {\n      accountId: useAccountId,\n      message,\n    }).catch((error) => {\n      throw normalizeActionError(error);\n    });\n  };\n\n  const signMessage = async ({\n    network,\n    message,\n    nonce,\n    recipient,\n    callbackUrl,\n    state,\n    accountId,\n  }: SignMessageParams): Promise<{ accountId: string; publicKey: string; signature: string; state?: string }> => {\n    const net = ensureNetwork(network);\n    const auth = await loadAuth(net);\n    const useAccountId = accountId ?? auth.accountId;\n\n    const response = await connectAndWaitForResponse<{ accountId: string; publicKey: string; signature: string }>(\n      net,\n      \"sign_message\",\n      {\n        message,\n        nonce,\n        recipient,\n        callbackUrl: callbackUrl ?? options.getLocation?.(),\n        state,\n        accountId: useAccountId,\n      },\n    ).catch((error) => {\n      throw normalizeActionError(error);\n    });\n\n    return {\n      ...response,\n      state,\n    };\n  };\n\n  const signAndSendTransactions = async ({\n    network,\n    signerId,\n    transactions,\n  }: SignAndSendTransactionsParams): Promise<any[]> => {\n    const net = ensureNetwork(network);\n    const auth = await loadAuth(net);\n    const useSigner = signerId ?? auth.accountId;\n    if (useSigner == null) throw new TransportError(\"NOT_SIGNED_IN\", \"Wallet is not signed in\");\n\n    const prepared = await prepareMeteorTransactions(net, useSigner, auth.allKeys ?? [], transactions);\n    const serialized = prepared.map(toMeteorTxPayload).join(\",\");\n\n    const response = await connectAndWaitForResponse<any>(net, \"sign\", {\n      transactions: serialized,\n    }).catch((error) => {\n      throw normalizeActionError(error);\n    });\n\n    if (Array.isArray(response?.executionOutcomes)) {\n      return response.executionOutcomes;\n    }\n\n    if (Array.isArray(response)) return response;\n    return [response];\n  };\n\n  const signAndSendTransaction = async ({\n    network,\n    signerId,\n    receiverId,\n    actions,\n  }: SignAndSendTransactionParams): Promise<any> => {\n    const result = await signAndSendTransactions({\n      network,\n      signerId,\n      transactions: [{ receiverId, actions }],\n    });\n    return result[0];\n  };\n\n  return {\n    signIn,\n    signOut,\n    getAccounts: ({ network }: { network: WalletNetwork }) => getAccountsForNetwork(ensureNetwork(network)),\n    verifyOwner,\n    signMessage,\n    signAndSendTransaction,\n    signAndSendTransactions,\n  };\n};\n"],"mappings":"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","names":["borshSerialize"]}