@fastnear/wallet-adapter 0.9.13 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/dist/cjs/actions.cjs +2 -2
- package/dist/cjs/errors.cjs +2 -2
- package/dist/cjs/index.cjs +2 -2
- package/dist/cjs/meteor.cjs +3 -3
- package/dist/cjs/meteor.cjs.map +1 -1
- package/dist/cjs/near-mobile.cjs +11 -3
- package/dist/cjs/near-mobile.cjs.map +1 -1
- package/dist/cjs/polling.cjs +2 -2
- package/dist/cjs/rpc.cjs +2 -2
- package/dist/cjs/storage.cjs +2 -2
- package/dist/cjs/types.cjs +2 -2
- package/dist/esm/actions.js +2 -2
- package/dist/esm/errors.js +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/meteor.js +3 -3
- package/dist/esm/meteor.js.map +1 -1
- package/dist/esm/near-mobile.js +12 -3
- package/dist/esm/near-mobile.js.map +1 -1
- package/dist/esm/polling.js +2 -2
- package/dist/esm/rpc.js +2 -2
- package/dist/esm/storage.js +2 -2
- package/dist/esm/types.js +2 -2
- package/dist/umd/browser.global.js +1370 -1063
- package/dist/umd/browser.global.js.map +1 -1
- package/package.json +7 -7
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# @fastnear/wallet-adapter
|
|
2
|
+
|
|
3
|
+
Low-level wallet adapter implementations for [Meteor Wallet](https://meteorwallet.app/) and [NEAR Mobile](https://nearmobile.app/). Used internally by [`@fastnear/wallet`](https://www.npmjs.com/package/@fastnear/wallet) and [`@fastnear/near-connect`](https://www.npmjs.com/package/@fastnear/near-connect).
|
|
4
|
+
|
|
5
|
+
Most apps should use `@fastnear/wallet` directly rather than this package.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @fastnear/wallet-adapter
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
```js
|
|
16
|
+
import { createMeteorAdapter, createNearMobileAdapter } from "@fastnear/wallet-adapter";
|
|
17
|
+
|
|
18
|
+
const meteor = createMeteorAdapter({ network: "mainnet" });
|
|
19
|
+
const nearMobile = createNearMobileAdapter({ network: "mainnet" });
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Part of the FastNear JS monorepo
|
|
23
|
+
|
|
24
|
+
See the [project-level README](https://github.com/fastnear/js-monorepo) for more info.
|
package/dist/cjs/actions.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.10.1) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.10.1 */
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
package/dist/cjs/errors.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.10.1) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.10.1 */
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.10.1) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.10.1 */
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
package/dist/cjs/meteor.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.10.1) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.10.1 */
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -24,7 +24,7 @@ __export(meteor_exports, {
|
|
|
24
24
|
createMeteorAdapter: () => createMeteorAdapter
|
|
25
25
|
});
|
|
26
26
|
module.exports = __toCommonJS(meteor_exports);
|
|
27
|
-
var import_borsh = require("borsh");
|
|
27
|
+
var import_borsh = require("@fastnear/borsh");
|
|
28
28
|
var import_utils = require("@fastnear/utils");
|
|
29
29
|
var import_actions = require("./actions.js");
|
|
30
30
|
var import_rpc = require("./rpc.js");
|
package/dist/cjs/meteor.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/meteor.ts"],"sourcesContent":["import { serialize as borshSerialize } from \"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"]}
|
|
1
|
+
{"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"]}
|
package/dist/cjs/near-mobile.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.10.1) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.10.1 */
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -24,8 +24,9 @@ __export(near_mobile_exports, {
|
|
|
24
24
|
createNearMobileAdapter: () => createNearMobileAdapter
|
|
25
25
|
});
|
|
26
26
|
module.exports = __toCommonJS(near_mobile_exports);
|
|
27
|
-
var import_borsh = require("borsh");
|
|
27
|
+
var import_borsh = require("@fastnear/borsh");
|
|
28
28
|
var import_ed25519 = require("@noble/curves/ed25519.js");
|
|
29
|
+
var import_secp256k1 = require("@noble/curves/secp256k1.js");
|
|
29
30
|
var import_utils = require("@fastnear/utils");
|
|
30
31
|
var import_rpc = require("./rpc.js");
|
|
31
32
|
var import_errors = require("./errors.js");
|
|
@@ -73,6 +74,13 @@ const verifyNep413Signature = /* @__PURE__ */ __name(({
|
|
|
73
74
|
const hash = (0, import_utils.sha256)(new Uint8Array(borshPayload));
|
|
74
75
|
const pk = (0, import_utils.keyFromString)(publicKey);
|
|
75
76
|
const sig = (0, import_utils.base64ToBytes)(signature);
|
|
77
|
+
if ((0, import_utils.curveFromKey)(publicKey) === "secp256k1") {
|
|
78
|
+
const compactSig = sig.slice(0, 64);
|
|
79
|
+
const fullPk = new Uint8Array(65);
|
|
80
|
+
fullPk[0] = 4;
|
|
81
|
+
fullPk.set(pk, 1);
|
|
82
|
+
return import_secp256k1.secp256k1.verify(compactSig, hash, fullPk, { prehash: false });
|
|
83
|
+
}
|
|
76
84
|
return import_ed25519.ed25519.verify(sig, hash, pk);
|
|
77
85
|
}, "verifyNep413Signature");
|
|
78
86
|
class SessionRepository {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/near-mobile.ts"],"sourcesContent":["import { serialize as borshSerialize, type Schema } from \"borsh\";\nimport { ed25519 } from \"@noble/curves/ed25519.js\";\nimport {\n base64ToBytes,\n keyFromString,\n privateKeyFromRandom,\n publicKeyFromPrivate,\n sha256,\n} from \"@fastnear/utils\";\nimport { createRpcFactory } from \"./rpc.js\";\nimport { TransportError, UserRejectedError } from \"./errors.js\";\nimport { createDefaultStorage, readJson, writeJson } from \"./storage.js\";\nimport { defaultPollingOptions, visibilityAwarePoll } from \"./polling.js\";\nimport type {\n AdapterStorage,\n ConnectorActionLike,\n NearMobileAdapterOptions,\n NearMobileMetadata,\n SignAndSendTransactionParams,\n SignAndSendTransactionsParams,\n SignInParams,\n SignMessageParams,\n WalletAccount,\n WalletNetwork,\n} from \"./types.js\";\n\nconst DEFAULT_SIGNER_BACKEND_URL = \"https://near-mobile-signer-backend_production.peersyst.tech\";\nconst DEFAULT_NEAR_MOBILE_WALLET_URL = \"near-mobile-wallet://sign\";\nconst SESSION_KEY = \"session\";\nconst NEP413_TAG = 2147484061;\n\ntype SignerRequestStatus = \"pending\" | \"approved\" | \"rejected\";\n\ninterface SessionState {\n mainnet: {\n activeAccount: string | null;\n accounts: Record<string, string>;\n };\n testnet: {\n activeAccount: string | null;\n accounts: Record<string, string>;\n };\n}\n\ninterface SignerRequestStatusDto {\n id: string;\n status: SignerRequestStatus;\n}\n\ninterface SignerRequestDto {\n id: string;\n status: SignerRequestStatus;\n network: WalletNetwork;\n signerAccountId?: string;\n requests?: any[];\n txHash?: string[];\n}\n\ninterface SignMessageResponseDto {\n accountId: string;\n publicKey: string;\n signature: string;\n}\n\ninterface SignMessageRequestDto {\n id: string;\n network: WalletNetwork;\n status: SignerRequestStatus;\n response?: SignMessageResponseDto;\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 normalizeError = (error: unknown, fallbackCode: string, fallbackMessage: string): Error => {\n if (error instanceof TransportError || error instanceof UserRejectedError) return error;\n if (error instanceof Error) return new TransportError(fallbackCode, error.message, { cause: error });\n return new TransportError(fallbackCode, fallbackMessage, { details: error });\n};\n\nconst signMessagePayloadSchema: Schema = {\n struct: {\n tag: \"u32\",\n message: \"string\",\n nonce: { array: { type: \"u8\", len: 32 } },\n recipient: \"string\",\n callbackUrl: { option: \"string\" },\n },\n};\n\nconst verifyNep413Signature = ({\n publicKey,\n signature,\n message,\n nonce,\n recipient,\n callbackUrl,\n}: {\n publicKey: string;\n signature: string;\n message: string;\n nonce: number[];\n recipient: string;\n callbackUrl?: string;\n}): boolean => {\n const borshPayload = borshSerialize(signMessagePayloadSchema, {\n tag: NEP413_TAG,\n message,\n nonce: Uint8Array.from(nonce),\n recipient,\n callbackUrl: callbackUrl ?? null,\n });\n\n const hash = sha256(new Uint8Array(borshPayload));\n const pk = keyFromString(publicKey);\n const sig = base64ToBytes(signature);\n\n return ed25519.verify(sig, hash, pk);\n};\n\nclass SessionRepository {\n private readonly storage: AdapterStorage;\n private readonly key: string;\n\n constructor(storage: AdapterStorage, key = SESSION_KEY) {\n this.storage = storage;\n this.key = key;\n }\n\n private defaultState(): SessionState {\n return {\n mainnet: { activeAccount: null, accounts: {} },\n testnet: { activeAccount: null, accounts: {} },\n };\n }\n\n async get(): Promise<SessionState> {\n return readJson<SessionState>(this.storage, this.key, this.defaultState());\n }\n\n async set(state: SessionState): Promise<void> {\n await writeJson(this.storage, this.key, state);\n }\n\n async getKey(network: WalletNetwork, accountId: string): Promise<string> {\n const state = await this.get();\n const key = state[network]?.accounts[accountId];\n if (key == null) {\n throw new TransportError(\"ACCOUNT_KEY_NOT_FOUND\", \"Account key not found in session storage\");\n }\n return key;\n }\n\n async setKey(network: WalletNetwork, accountId: string, privateKey: string): Promise<void> {\n const state = await this.get();\n state[network].accounts[accountId] = privateKey;\n await this.set(state);\n }\n\n async removeKey(network: WalletNetwork, accountId: string): Promise<void> {\n const state = await this.get();\n if (state[network].activeAccount === accountId) {\n state[network].activeAccount = null;\n }\n delete state[network].accounts[accountId];\n await this.set(state);\n }\n\n async getActiveAccount(network: WalletNetwork): Promise<string | null> {\n const state = await this.get();\n return state[network].activeAccount ?? null;\n }\n\n async setActiveAccount(network: WalletNetwork, accountId: string): Promise<void> {\n const state = await this.get();\n const exists = Object.prototype.hasOwnProperty.call(state[network].accounts, accountId);\n if (!exists) {\n throw new TransportError(\"INVALID_ACCOUNT_ID\", \"Cannot set active account that does not exist in session storage\");\n }\n state[network].activeAccount = accountId;\n await this.set(state);\n }\n\n async getAccounts(network: WalletNetwork): Promise<string[]> {\n const state = await this.get();\n return Object.keys(state[network].accounts);\n }\n}\n\nclass NearMobileApiClient {\n private readonly backendUrl: string;\n private readonly fetcher: typeof fetch;\n\n constructor(backendUrl: string, fetcher?: typeof fetch) {\n this.backendUrl = backendUrl.replace(/\\/$/, \"\");\n this.fetcher = fetcher ?? fetch;\n }\n\n private async request<T>(path: string, init: RequestInit = {}, timeoutMs = 30_000): Promise<T> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const response = await this.fetcher(`${this.backendUrl}${path}`, {\n ...init,\n headers: {\n \"Content-Type\": \"application/json\",\n ...(init.headers ?? {}),\n },\n signal: controller.signal,\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => \"Unknown API error\");\n throw new TransportError(\"API_HTTP_ERROR\", `Near Mobile backend request failed (${response.status}): ${text}`);\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n return (await response.json()) as T;\n } catch (error: any) {\n if (controller.signal.aborted) {\n throw new TransportError(\"API_TIMEOUT\", \"Near Mobile backend request timed out\", { cause: error });\n }\n if (error instanceof TransportError) throw error;\n throw new TransportError(\"API_NETWORK_ERROR\", \"Near Mobile backend request failed\", { cause: error });\n } finally {\n clearTimeout(timeout);\n }\n }\n\n async createRequest(network: WalletNetwork, transactions: any[], metadata?: NearMobileMetadata): Promise<SignerRequestDto> {\n return this.request<SignerRequestDto>(\"/api/signer-request\", {\n method: \"POST\",\n body: JSON.stringify({\n network,\n transactions,\n dAppMetadata: metadata,\n }),\n });\n }\n\n async getRequestStatus(id: string): Promise<SignerRequestStatusDto> {\n return this.request<SignerRequestStatusDto>(`/api/signer-request/${id}/status`, { method: \"GET\" });\n }\n\n async getRequest(id: string): Promise<SignerRequestDto> {\n return this.request<SignerRequestDto>(`/api/signer-request/${id}`, { method: \"GET\" });\n }\n\n async rejectRequest(id: string): Promise<void> {\n await this.request(`/api/signer-request/${id}/reject`, { method: \"POST\" });\n }\n\n async createSignMessageRequest(\n network: WalletNetwork,\n message: string,\n receiver: string,\n nonce: number[],\n callbackUrl?: string,\n metadata?: NearMobileMetadata,\n ): Promise<SignMessageRequestDto> {\n return this.request<SignMessageRequestDto>(\"/api/signer-request/message\", {\n method: \"POST\",\n body: JSON.stringify({\n network,\n message,\n receiver,\n nonce,\n callbackUrl,\n receiverMetadata: metadata,\n }),\n });\n }\n\n async getSignMessageRequest(id: string): Promise<SignMessageRequestDto> {\n return this.request<SignMessageRequestDto>(`/api/signer-request/message/${id}`, { method: \"GET\" });\n }\n\n async rejectSignMessageRequest(id: string): Promise<void> {\n await this.request(`/api/signer-request/message/${id}/reject`, { method: \"POST\" });\n }\n}\n\nconst normalizeTransactions = (\n signerId: string | undefined,\n transactions: Array<{ receiverId: string; actions: ConnectorActionLike[]; signerId?: string }>,\n): Array<{ signerId: string; receiverId: string; actions: ConnectorActionLike[] }> => {\n return transactions.map((tx) => {\n const useSigner = tx.signerId ?? signerId;\n if (useSigner == null) throw new TransportError(\"MISSING_SIGNER_ID\", \"Missing signer id for transaction\");\n return {\n signerId: useSigner,\n receiverId: tx.receiverId,\n actions: tx.actions,\n };\n });\n};\n\nexport const createNearMobileAdapter = (options: NearMobileAdapterOptions = {}) => {\n const storage = options.storage ?? createDefaultStorage();\n const session = new SessionRepository(storage);\n const backendUrl = options.signerBackendUrl ?? DEFAULT_SIGNER_BACKEND_URL;\n const nearMobileWalletUrl = options.nearMobileWalletUrl ?? DEFAULT_NEAR_MOBILE_WALLET_URL;\n const api = new NearMobileApiClient(backendUrl, options.fetcher);\n const rpcForNetwork = createRpcFactory(options.getNetworkProviders);\n const polling = { ...defaultPollingOptions, ...(options.polling ?? {}) };\n\n const emitError = (error?: Error) => options.onError?.(error);\n const emitRequested = (payload: {\n id: string;\n kind: \"request\" | \"message\";\n network: WalletNetwork;\n request: unknown;\n close: () => Promise<void>;\n }) => {\n options.onRequested?.({\n ...payload,\n requestUrl: `${nearMobileWalletUrl}/${payload.kind}/${payload.id}`,\n });\n };\n\n const awaitRequestStatus = async (id: string): Promise<SignerRequestStatusDto> => {\n return visibilityAwarePoll(\n () => api.getRequestStatus(id),\n ({ status }) => status === \"pending\",\n polling,\n );\n };\n\n const awaitMessageStatus = async (id: string): Promise<SignMessageRequestDto> => {\n return visibilityAwarePoll(\n () => api.getSignMessageRequest(id),\n ({ status, response }) => status === \"pending\" && response == null,\n polling,\n );\n };\n\n const handleRejectedStatus = (status: SignerRequestStatus, message: string): void => {\n if (status === \"approved\") {\n options.onApproved?.();\n return;\n }\n if (status === \"rejected\") {\n throw new UserRejectedError(\"USER_REJECTED\", message);\n }\n };\n\n const ensureFullAccessKey = async (network: WalletNetwork, accountId: string, publicKey: string): Promise<void> => {\n const rpc = rpcForNetwork(network);\n const accessKey = await rpc.query<any>({\n request_type: \"view_access_key\",\n finality: \"optimistic\",\n account_id: accountId,\n public_key: publicKey,\n });\n\n if (accessKey?.permission !== \"FullAccess\") {\n throw new TransportError(\"INVALID_ACCESS_KEY\", \"Signer key is not a full access key\");\n }\n };\n\n const getAccounts = async (network: WalletNetwork): Promise<WalletAccount[]> => {\n const net = ensureNetwork(network);\n const accountIds = await session.getAccounts(net);\n const accounts: WalletAccount[] = [];\n\n for (const accountId of accountIds) {\n const privateKey = await session.getKey(net, accountId);\n accounts.push({\n accountId,\n publicKey: publicKeyFromPrivate(privateKey),\n });\n }\n\n return accounts;\n };\n\n const signIn = async ({ network, contractId, methodNames = [], allowance }: SignInParams): Promise<WalletAccount[]> => {\n const net = ensureNetwork(network);\n const privateKey = privateKeyFromRandom();\n const publicKey = publicKeyFromPrivate(privateKey);\n\n const permission =\n contractId != null\n ? {\n receiverId: contractId,\n methodNames,\n ...(allowance ? { allowance } : {}),\n }\n : \"FullAccess\";\n\n const { id, network: responseNetwork, requests } = await api.createRequest(\n net,\n [\n {\n actions: [\n {\n type: \"AddKey\",\n params: {\n publicKey,\n accessKey: {\n permission,\n },\n },\n },\n ],\n },\n ],\n options.metadata,\n );\n\n emitRequested({\n id,\n kind: \"request\",\n network: responseNetwork,\n request: requests,\n close: async () => api.rejectRequest(id),\n });\n\n const { status } = await awaitRequestStatus(id);\n handleRejectedStatus(status, \"User rejected Near Mobile sign-in\");\n\n const request = await api.getRequest(id);\n if (request.signerAccountId == null) {\n throw new TransportError(\"REQUEST_NOT_SIGNED\", \"Signer request was approved but did not return signer account id\");\n }\n\n await session.setKey(net, request.signerAccountId, privateKey);\n await session.setActiveAccount(net, request.signerAccountId);\n\n options.onSuccess?.();\n return getAccounts(net);\n };\n\n const signOut = async ({ network }: { network: WalletNetwork }): Promise<void> => {\n const net = ensureNetwork(network);\n const activeAccount = await session.getActiveAccount(net);\n if (activeAccount == null) return;\n\n const privateKey = await session.getKey(net, activeAccount);\n const publicKey = publicKeyFromPrivate(privateKey);\n\n const { id, network: responseNetwork, requests } = await api.createRequest(\n net,\n [\n {\n signerId: activeAccount,\n receiverId: activeAccount,\n actions: [\n {\n type: \"DeleteKey\",\n params: { publicKey },\n },\n ],\n },\n ],\n options.metadata,\n );\n\n emitRequested({\n id,\n kind: \"request\",\n network: responseNetwork,\n request: requests,\n close: async () => api.rejectRequest(id),\n });\n\n const { status } = await awaitRequestStatus(id);\n handleRejectedStatus(status, \"User rejected Near Mobile sign-out\");\n\n await session.removeKey(net, activeAccount);\n options.onSuccess?.();\n };\n\n const signAndSendTransactions = async ({\n network,\n signerId,\n transactions,\n }: SignAndSendTransactionsParams): Promise<any[]> => {\n const net = ensureNetwork(network);\n const activeAccount = signerId ?? (await session.getActiveAccount(net)) ?? undefined;\n const normalizedTransactions = normalizeTransactions(activeAccount, transactions);\n\n const { id, network: responseNetwork, requests } = await api.createRequest(net, normalizedTransactions, options.metadata);\n emitRequested({\n id,\n kind: \"request\",\n network: responseNetwork,\n request: requests,\n close: async () => api.rejectRequest(id),\n });\n\n const { status } = await awaitRequestStatus(id);\n handleRejectedStatus(status, \"User rejected Near Mobile transaction signing\");\n\n const request = await api.getRequest(id);\n if (!request.txHash || request.txHash.length === 0) {\n throw new TransportError(\"REQUEST_NOT_SIGNED\", \"Near Mobile request did not include transaction hashes\");\n }\n\n const requestSigner = request.signerAccountId ?? normalizedTransactions[0].signerId;\n const rpc = rpcForNetwork(net);\n const outcomes: any[] = [];\n for (const hash of request.txHash) {\n outcomes.push(await rpc.txStatus(hash, requestSigner, \"EXECUTED_OPTIMISTIC\"));\n }\n\n options.onSuccess?.();\n return outcomes;\n };\n\n const signAndSendTransaction = async ({\n network,\n signerId,\n receiverId,\n actions,\n }: SignAndSendTransactionParams): Promise<any> => {\n const outcomes = await signAndSendTransactions({\n network,\n signerId,\n transactions: [{ receiverId, actions, signerId }],\n });\n return outcomes[0];\n };\n\n const signMessage = async ({\n network,\n message,\n nonce,\n recipient,\n callbackUrl,\n }: SignMessageParams): Promise<{ accountId: string; publicKey: string; signature: string }> => {\n const net = ensureNetwork(network);\n const { id, network: responseNetwork } = await api.createSignMessageRequest(\n net,\n message,\n recipient,\n Array.from(nonce),\n callbackUrl,\n options.metadata,\n );\n\n emitRequested({\n id,\n kind: \"message\",\n network: responseNetwork,\n request: { message, nonce, recipient, callbackUrl },\n close: async () => api.rejectSignMessageRequest(id),\n });\n\n const result = await awaitMessageStatus(id);\n handleRejectedStatus(result.status, \"User rejected Near Mobile message signing\");\n\n if (result.response == null) {\n throw new TransportError(\"NO_SIGNATURE\", \"Near Mobile message request was approved without a signature\");\n }\n\n const { accountId, publicKey, signature } = result.response;\n const isValidSignature = verifyNep413Signature({\n publicKey,\n signature,\n message,\n nonce,\n recipient,\n callbackUrl,\n });\n\n if (!isValidSignature) {\n throw new TransportError(\"INVALID_SIGNATURE\", \"Near Mobile returned an invalid message signature\");\n }\n\n await ensureFullAccessKey(net, accountId, publicKey);\n options.onSuccess?.();\n\n return { accountId, publicKey, signature };\n };\n\n return {\n async signIn(params: SignInParams): Promise<WalletAccount[]> {\n try {\n return await signIn(params);\n } catch (error) {\n const normalized = normalizeError(error, \"SIGN_IN_FAILED\", \"Near Mobile sign-in failed\");\n emitError(normalized);\n throw normalized;\n }\n },\n\n async signOut({ network }: { network: WalletNetwork }): Promise<void> {\n try {\n return await signOut({ network });\n } catch (error) {\n const normalized = normalizeError(error, \"SIGN_OUT_FAILED\", \"Near Mobile sign-out failed\");\n emitError(normalized);\n throw normalized;\n }\n },\n\n async getAccounts({ network }: { network: WalletNetwork }): Promise<WalletAccount[]> {\n try {\n return await getAccounts(network);\n } catch (error) {\n const normalized = normalizeError(error, \"GET_ACCOUNTS_FAILED\", \"Near Mobile getAccounts failed\");\n emitError(normalized);\n throw normalized;\n }\n },\n\n async signMessage(params: SignMessageParams): Promise<{ accountId: string; publicKey: string; signature: string }> {\n try {\n return await signMessage(params);\n } catch (error) {\n const normalized = normalizeError(error, \"SIGN_MESSAGE_FAILED\", \"Near Mobile signMessage failed\");\n emitError(normalized);\n throw normalized;\n }\n },\n\n async signAndSendTransaction(params: SignAndSendTransactionParams): Promise<any> {\n try {\n return await signAndSendTransaction(params);\n } catch (error) {\n const normalized = normalizeError(error, \"SIGN_TX_FAILED\", \"Near Mobile signAndSendTransaction failed\");\n emitError(normalized);\n throw normalized;\n }\n },\n\n async signAndSendTransactions(params: SignAndSendTransactionsParams): Promise<any[]> {\n try {\n return await signAndSendTransactions(params);\n } catch (error) {\n const normalized = normalizeError(error, \"SIGN_TXS_FAILED\", \"Near Mobile signAndSendTransactions failed\");\n emitError(normalized);\n throw normalized;\n }\n },\n };\n};\n"],"mappings":"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","names":["borshSerialize"]}
|
|
1
|
+
{"version":3,"sources":["../../src/near-mobile.ts"],"sourcesContent":["import { serialize as borshSerialize, type Schema } from \"@fastnear/borsh\";\nimport { ed25519 } from \"@noble/curves/ed25519.js\";\nimport { secp256k1 } from \"@noble/curves/secp256k1.js\";\nimport {\n base64ToBytes,\n curveFromKey,\n keyFromString,\n privateKeyFromRandom,\n publicKeyFromPrivate,\n sha256,\n} from \"@fastnear/utils\";\nimport { createRpcFactory } from \"./rpc.js\";\nimport { TransportError, UserRejectedError } from \"./errors.js\";\nimport { createDefaultStorage, readJson, writeJson } from \"./storage.js\";\nimport { defaultPollingOptions, visibilityAwarePoll } from \"./polling.js\";\nimport type {\n AdapterStorage,\n ConnectorActionLike,\n NearMobileAdapterOptions,\n NearMobileMetadata,\n SignAndSendTransactionParams,\n SignAndSendTransactionsParams,\n SignInParams,\n SignMessageParams,\n WalletAccount,\n WalletNetwork,\n} from \"./types.js\";\n\nconst DEFAULT_SIGNER_BACKEND_URL = \"https://near-mobile-signer-backend_production.peersyst.tech\";\nconst DEFAULT_NEAR_MOBILE_WALLET_URL = \"near-mobile-wallet://sign\";\nconst SESSION_KEY = \"session\";\nconst NEP413_TAG = 2147484061;\n\ntype SignerRequestStatus = \"pending\" | \"approved\" | \"rejected\";\n\ninterface SessionState {\n mainnet: {\n activeAccount: string | null;\n accounts: Record<string, string>;\n };\n testnet: {\n activeAccount: string | null;\n accounts: Record<string, string>;\n };\n}\n\ninterface SignerRequestStatusDto {\n id: string;\n status: SignerRequestStatus;\n}\n\ninterface SignerRequestDto {\n id: string;\n status: SignerRequestStatus;\n network: WalletNetwork;\n signerAccountId?: string;\n requests?: any[];\n txHash?: string[];\n}\n\ninterface SignMessageResponseDto {\n accountId: string;\n publicKey: string;\n signature: string;\n}\n\ninterface SignMessageRequestDto {\n id: string;\n network: WalletNetwork;\n status: SignerRequestStatus;\n response?: SignMessageResponseDto;\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 normalizeError = (error: unknown, fallbackCode: string, fallbackMessage: string): Error => {\n if (error instanceof TransportError || error instanceof UserRejectedError) return error;\n if (error instanceof Error) return new TransportError(fallbackCode, error.message, { cause: error });\n return new TransportError(fallbackCode, fallbackMessage, { details: error });\n};\n\nconst signMessagePayloadSchema: Schema = {\n struct: {\n tag: \"u32\",\n message: \"string\",\n nonce: { array: { type: \"u8\", len: 32 } },\n recipient: \"string\",\n callbackUrl: { option: \"string\" },\n },\n};\n\nconst verifyNep413Signature = ({\n publicKey,\n signature,\n message,\n nonce,\n recipient,\n callbackUrl,\n}: {\n publicKey: string;\n signature: string;\n message: string;\n nonce: number[];\n recipient: string;\n callbackUrl?: string;\n}): boolean => {\n const borshPayload = borshSerialize(signMessagePayloadSchema, {\n tag: NEP413_TAG,\n message,\n nonce: Uint8Array.from(nonce),\n recipient,\n callbackUrl: callbackUrl ?? null,\n });\n\n const hash = sha256(new Uint8Array(borshPayload));\n const pk = keyFromString(publicKey);\n const sig = base64ToBytes(signature);\n\n if (curveFromKey(publicKey) === \"secp256k1\") {\n // Strip recovery byte (last byte) — compact sig is first 64 bytes\n const compactSig = sig.slice(0, 64);\n // Prepend 0x04 uncompressed prefix — NEAR stores 64 bytes, noble expects 65\n const fullPk = new Uint8Array(65);\n fullPk[0] = 0x04;\n fullPk.set(pk, 1);\n return secp256k1.verify(compactSig, hash, fullPk, { prehash: false });\n }\n\n return ed25519.verify(sig, hash, pk);\n};\n\nclass SessionRepository {\n private readonly storage: AdapterStorage;\n private readonly key: string;\n\n constructor(storage: AdapterStorage, key = SESSION_KEY) {\n this.storage = storage;\n this.key = key;\n }\n\n private defaultState(): SessionState {\n return {\n mainnet: { activeAccount: null, accounts: {} },\n testnet: { activeAccount: null, accounts: {} },\n };\n }\n\n async get(): Promise<SessionState> {\n return readJson<SessionState>(this.storage, this.key, this.defaultState());\n }\n\n async set(state: SessionState): Promise<void> {\n await writeJson(this.storage, this.key, state);\n }\n\n async getKey(network: WalletNetwork, accountId: string): Promise<string> {\n const state = await this.get();\n const key = state[network]?.accounts[accountId];\n if (key == null) {\n throw new TransportError(\"ACCOUNT_KEY_NOT_FOUND\", \"Account key not found in session storage\");\n }\n return key;\n }\n\n async setKey(network: WalletNetwork, accountId: string, privateKey: string): Promise<void> {\n const state = await this.get();\n state[network].accounts[accountId] = privateKey;\n await this.set(state);\n }\n\n async removeKey(network: WalletNetwork, accountId: string): Promise<void> {\n const state = await this.get();\n if (state[network].activeAccount === accountId) {\n state[network].activeAccount = null;\n }\n delete state[network].accounts[accountId];\n await this.set(state);\n }\n\n async getActiveAccount(network: WalletNetwork): Promise<string | null> {\n const state = await this.get();\n return state[network].activeAccount ?? null;\n }\n\n async setActiveAccount(network: WalletNetwork, accountId: string): Promise<void> {\n const state = await this.get();\n const exists = Object.prototype.hasOwnProperty.call(state[network].accounts, accountId);\n if (!exists) {\n throw new TransportError(\"INVALID_ACCOUNT_ID\", \"Cannot set active account that does not exist in session storage\");\n }\n state[network].activeAccount = accountId;\n await this.set(state);\n }\n\n async getAccounts(network: WalletNetwork): Promise<string[]> {\n const state = await this.get();\n return Object.keys(state[network].accounts);\n }\n}\n\nclass NearMobileApiClient {\n private readonly backendUrl: string;\n private readonly fetcher: typeof fetch;\n\n constructor(backendUrl: string, fetcher?: typeof fetch) {\n this.backendUrl = backendUrl.replace(/\\/$/, \"\");\n this.fetcher = fetcher ?? fetch;\n }\n\n private async request<T>(path: string, init: RequestInit = {}, timeoutMs = 30_000): Promise<T> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const response = await this.fetcher(`${this.backendUrl}${path}`, {\n ...init,\n headers: {\n \"Content-Type\": \"application/json\",\n ...(init.headers ?? {}),\n },\n signal: controller.signal,\n });\n\n if (!response.ok) {\n const text = await response.text().catch(() => \"Unknown API error\");\n throw new TransportError(\"API_HTTP_ERROR\", `Near Mobile backend request failed (${response.status}): ${text}`);\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n return (await response.json()) as T;\n } catch (error: any) {\n if (controller.signal.aborted) {\n throw new TransportError(\"API_TIMEOUT\", \"Near Mobile backend request timed out\", { cause: error });\n }\n if (error instanceof TransportError) throw error;\n throw new TransportError(\"API_NETWORK_ERROR\", \"Near Mobile backend request failed\", { cause: error });\n } finally {\n clearTimeout(timeout);\n }\n }\n\n async createRequest(network: WalletNetwork, transactions: any[], metadata?: NearMobileMetadata): Promise<SignerRequestDto> {\n return this.request<SignerRequestDto>(\"/api/signer-request\", {\n method: \"POST\",\n body: JSON.stringify({\n network,\n transactions,\n dAppMetadata: metadata,\n }),\n });\n }\n\n async getRequestStatus(id: string): Promise<SignerRequestStatusDto> {\n return this.request<SignerRequestStatusDto>(`/api/signer-request/${id}/status`, { method: \"GET\" });\n }\n\n async getRequest(id: string): Promise<SignerRequestDto> {\n return this.request<SignerRequestDto>(`/api/signer-request/${id}`, { method: \"GET\" });\n }\n\n async rejectRequest(id: string): Promise<void> {\n await this.request(`/api/signer-request/${id}/reject`, { method: \"POST\" });\n }\n\n async createSignMessageRequest(\n network: WalletNetwork,\n message: string,\n receiver: string,\n nonce: number[],\n callbackUrl?: string,\n metadata?: NearMobileMetadata,\n ): Promise<SignMessageRequestDto> {\n return this.request<SignMessageRequestDto>(\"/api/signer-request/message\", {\n method: \"POST\",\n body: JSON.stringify({\n network,\n message,\n receiver,\n nonce,\n callbackUrl,\n receiverMetadata: metadata,\n }),\n });\n }\n\n async getSignMessageRequest(id: string): Promise<SignMessageRequestDto> {\n return this.request<SignMessageRequestDto>(`/api/signer-request/message/${id}`, { method: \"GET\" });\n }\n\n async rejectSignMessageRequest(id: string): Promise<void> {\n await this.request(`/api/signer-request/message/${id}/reject`, { method: \"POST\" });\n }\n}\n\nconst normalizeTransactions = (\n signerId: string | undefined,\n transactions: Array<{ receiverId: string; actions: ConnectorActionLike[]; signerId?: string }>,\n): Array<{ signerId: string; receiverId: string; actions: ConnectorActionLike[] }> => {\n return transactions.map((tx) => {\n const useSigner = tx.signerId ?? signerId;\n if (useSigner == null) throw new TransportError(\"MISSING_SIGNER_ID\", \"Missing signer id for transaction\");\n return {\n signerId: useSigner,\n receiverId: tx.receiverId,\n actions: tx.actions,\n };\n });\n};\n\nexport const createNearMobileAdapter = (options: NearMobileAdapterOptions = {}) => {\n const storage = options.storage ?? createDefaultStorage();\n const session = new SessionRepository(storage);\n const backendUrl = options.signerBackendUrl ?? DEFAULT_SIGNER_BACKEND_URL;\n const nearMobileWalletUrl = options.nearMobileWalletUrl ?? DEFAULT_NEAR_MOBILE_WALLET_URL;\n const api = new NearMobileApiClient(backendUrl, options.fetcher);\n const rpcForNetwork = createRpcFactory(options.getNetworkProviders);\n const polling = { ...defaultPollingOptions, ...(options.polling ?? {}) };\n\n const emitError = (error?: Error) => options.onError?.(error);\n const emitRequested = (payload: {\n id: string;\n kind: \"request\" | \"message\";\n network: WalletNetwork;\n request: unknown;\n close: () => Promise<void>;\n }) => {\n options.onRequested?.({\n ...payload,\n requestUrl: `${nearMobileWalletUrl}/${payload.kind}/${payload.id}`,\n });\n };\n\n const awaitRequestStatus = async (id: string): Promise<SignerRequestStatusDto> => {\n return visibilityAwarePoll(\n () => api.getRequestStatus(id),\n ({ status }) => status === \"pending\",\n polling,\n );\n };\n\n const awaitMessageStatus = async (id: string): Promise<SignMessageRequestDto> => {\n return visibilityAwarePoll(\n () => api.getSignMessageRequest(id),\n ({ status, response }) => status === \"pending\" && response == null,\n polling,\n );\n };\n\n const handleRejectedStatus = (status: SignerRequestStatus, message: string): void => {\n if (status === \"approved\") {\n options.onApproved?.();\n return;\n }\n if (status === \"rejected\") {\n throw new UserRejectedError(\"USER_REJECTED\", message);\n }\n };\n\n const ensureFullAccessKey = async (network: WalletNetwork, accountId: string, publicKey: string): Promise<void> => {\n const rpc = rpcForNetwork(network);\n const accessKey = await rpc.query<any>({\n request_type: \"view_access_key\",\n finality: \"optimistic\",\n account_id: accountId,\n public_key: publicKey,\n });\n\n if (accessKey?.permission !== \"FullAccess\") {\n throw new TransportError(\"INVALID_ACCESS_KEY\", \"Signer key is not a full access key\");\n }\n };\n\n const getAccounts = async (network: WalletNetwork): Promise<WalletAccount[]> => {\n const net = ensureNetwork(network);\n const accountIds = await session.getAccounts(net);\n const accounts: WalletAccount[] = [];\n\n for (const accountId of accountIds) {\n const privateKey = await session.getKey(net, accountId);\n accounts.push({\n accountId,\n publicKey: publicKeyFromPrivate(privateKey),\n });\n }\n\n return accounts;\n };\n\n const signIn = async ({ network, contractId, methodNames = [], allowance }: SignInParams): Promise<WalletAccount[]> => {\n const net = ensureNetwork(network);\n const privateKey = privateKeyFromRandom();\n const publicKey = publicKeyFromPrivate(privateKey);\n\n const permission =\n contractId != null\n ? {\n receiverId: contractId,\n methodNames,\n ...(allowance ? { allowance } : {}),\n }\n : \"FullAccess\";\n\n const { id, network: responseNetwork, requests } = await api.createRequest(\n net,\n [\n {\n actions: [\n {\n type: \"AddKey\",\n params: {\n publicKey,\n accessKey: {\n permission,\n },\n },\n },\n ],\n },\n ],\n options.metadata,\n );\n\n emitRequested({\n id,\n kind: \"request\",\n network: responseNetwork,\n request: requests,\n close: async () => api.rejectRequest(id),\n });\n\n const { status } = await awaitRequestStatus(id);\n handleRejectedStatus(status, \"User rejected Near Mobile sign-in\");\n\n const request = await api.getRequest(id);\n if (request.signerAccountId == null) {\n throw new TransportError(\"REQUEST_NOT_SIGNED\", \"Signer request was approved but did not return signer account id\");\n }\n\n await session.setKey(net, request.signerAccountId, privateKey);\n await session.setActiveAccount(net, request.signerAccountId);\n\n options.onSuccess?.();\n return getAccounts(net);\n };\n\n const signOut = async ({ network }: { network: WalletNetwork }): Promise<void> => {\n const net = ensureNetwork(network);\n const activeAccount = await session.getActiveAccount(net);\n if (activeAccount == null) return;\n\n const privateKey = await session.getKey(net, activeAccount);\n const publicKey = publicKeyFromPrivate(privateKey);\n\n const { id, network: responseNetwork, requests } = await api.createRequest(\n net,\n [\n {\n signerId: activeAccount,\n receiverId: activeAccount,\n actions: [\n {\n type: \"DeleteKey\",\n params: { publicKey },\n },\n ],\n },\n ],\n options.metadata,\n );\n\n emitRequested({\n id,\n kind: \"request\",\n network: responseNetwork,\n request: requests,\n close: async () => api.rejectRequest(id),\n });\n\n const { status } = await awaitRequestStatus(id);\n handleRejectedStatus(status, \"User rejected Near Mobile sign-out\");\n\n await session.removeKey(net, activeAccount);\n options.onSuccess?.();\n };\n\n const signAndSendTransactions = async ({\n network,\n signerId,\n transactions,\n }: SignAndSendTransactionsParams): Promise<any[]> => {\n const net = ensureNetwork(network);\n const activeAccount = signerId ?? (await session.getActiveAccount(net)) ?? undefined;\n const normalizedTransactions = normalizeTransactions(activeAccount, transactions);\n\n const { id, network: responseNetwork, requests } = await api.createRequest(net, normalizedTransactions, options.metadata);\n emitRequested({\n id,\n kind: \"request\",\n network: responseNetwork,\n request: requests,\n close: async () => api.rejectRequest(id),\n });\n\n const { status } = await awaitRequestStatus(id);\n handleRejectedStatus(status, \"User rejected Near Mobile transaction signing\");\n\n const request = await api.getRequest(id);\n if (!request.txHash || request.txHash.length === 0) {\n throw new TransportError(\"REQUEST_NOT_SIGNED\", \"Near Mobile request did not include transaction hashes\");\n }\n\n const requestSigner = request.signerAccountId ?? normalizedTransactions[0].signerId;\n const rpc = rpcForNetwork(net);\n const outcomes: any[] = [];\n for (const hash of request.txHash) {\n outcomes.push(await rpc.txStatus(hash, requestSigner, \"EXECUTED_OPTIMISTIC\"));\n }\n\n options.onSuccess?.();\n return outcomes;\n };\n\n const signAndSendTransaction = async ({\n network,\n signerId,\n receiverId,\n actions,\n }: SignAndSendTransactionParams): Promise<any> => {\n const outcomes = await signAndSendTransactions({\n network,\n signerId,\n transactions: [{ receiverId, actions, signerId }],\n });\n return outcomes[0];\n };\n\n const signMessage = async ({\n network,\n message,\n nonce,\n recipient,\n callbackUrl,\n }: SignMessageParams): Promise<{ accountId: string; publicKey: string; signature: string }> => {\n const net = ensureNetwork(network);\n const { id, network: responseNetwork } = await api.createSignMessageRequest(\n net,\n message,\n recipient,\n Array.from(nonce),\n callbackUrl,\n options.metadata,\n );\n\n emitRequested({\n id,\n kind: \"message\",\n network: responseNetwork,\n request: { message, nonce, recipient, callbackUrl },\n close: async () => api.rejectSignMessageRequest(id),\n });\n\n const result = await awaitMessageStatus(id);\n handleRejectedStatus(result.status, \"User rejected Near Mobile message signing\");\n\n if (result.response == null) {\n throw new TransportError(\"NO_SIGNATURE\", \"Near Mobile message request was approved without a signature\");\n }\n\n const { accountId, publicKey, signature } = result.response;\n const isValidSignature = verifyNep413Signature({\n publicKey,\n signature,\n message,\n nonce,\n recipient,\n callbackUrl,\n });\n\n if (!isValidSignature) {\n throw new TransportError(\"INVALID_SIGNATURE\", \"Near Mobile returned an invalid message signature\");\n }\n\n await ensureFullAccessKey(net, accountId, publicKey);\n options.onSuccess?.();\n\n return { accountId, publicKey, signature };\n };\n\n return {\n async signIn(params: SignInParams): Promise<WalletAccount[]> {\n try {\n return await signIn(params);\n } catch (error) {\n const normalized = normalizeError(error, \"SIGN_IN_FAILED\", \"Near Mobile sign-in failed\");\n emitError(normalized);\n throw normalized;\n }\n },\n\n async signOut({ network }: { network: WalletNetwork }): Promise<void> {\n try {\n return await signOut({ network });\n } catch (error) {\n const normalized = normalizeError(error, \"SIGN_OUT_FAILED\", \"Near Mobile sign-out failed\");\n emitError(normalized);\n throw normalized;\n }\n },\n\n async getAccounts({ network }: { network: WalletNetwork }): Promise<WalletAccount[]> {\n try {\n return await getAccounts(network);\n } catch (error) {\n const normalized = normalizeError(error, \"GET_ACCOUNTS_FAILED\", \"Near Mobile getAccounts failed\");\n emitError(normalized);\n throw normalized;\n }\n },\n\n async signMessage(params: SignMessageParams): Promise<{ accountId: string; publicKey: string; signature: string }> {\n try {\n return await signMessage(params);\n } catch (error) {\n const normalized = normalizeError(error, \"SIGN_MESSAGE_FAILED\", \"Near Mobile signMessage failed\");\n emitError(normalized);\n throw normalized;\n }\n },\n\n async signAndSendTransaction(params: SignAndSendTransactionParams): Promise<any> {\n try {\n return await signAndSendTransaction(params);\n } catch (error) {\n const normalized = normalizeError(error, \"SIGN_TX_FAILED\", \"Near Mobile signAndSendTransaction failed\");\n emitError(normalized);\n throw normalized;\n }\n },\n\n async signAndSendTransactions(params: SignAndSendTransactionsParams): Promise<any[]> {\n try {\n return await signAndSendTransactions(params);\n } catch (error) {\n const normalized = normalizeError(error, \"SIGN_TXS_FAILED\", \"Near Mobile signAndSendTransactions failed\");\n emitError(normalized);\n throw normalized;\n }\n },\n };\n};\n"],"mappings":"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","names":["borshSerialize"]}
|
package/dist/cjs/polling.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.10.1) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.10.1 */
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
package/dist/cjs/rpc.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.10.1) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.10.1 */
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
package/dist/cjs/storage.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.10.1) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.10.1 */
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
package/dist/cjs/types.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 0.10.1) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.10.1 */
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
package/dist/esm/actions.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - ESM (@fastnear/wallet-adapter version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - ESM (@fastnear/wallet-adapter version 0.10.1) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.10.1 */
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
5
5
|
import { bytesToBase64 } from "@fastnear/utils";
|
package/dist/esm/errors.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - ESM (@fastnear/wallet-adapter version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - ESM (@fastnear/wallet-adapter version 0.10.1) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.10.1 */
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
5
5
|
class TransportError extends Error {
|
package/dist/esm/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - ESM (@fastnear/wallet-adapter version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - ESM (@fastnear/wallet-adapter version 0.10.1) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.10.1 */
|
|
3
3
|
import { createMeteorAdapter } from "./meteor.js";
|
|
4
4
|
import { createNearMobileAdapter } from "./near-mobile.js";
|
|
5
5
|
import { TransportError, UserRejectedError, isTransportError, isUserRejectedError } from "./errors.js";
|
package/dist/esm/meteor.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - ESM (@fastnear/wallet-adapter version 0.
|
|
2
|
-
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.
|
|
1
|
+
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - ESM (@fastnear/wallet-adapter version 0.10.1) */
|
|
2
|
+
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/0.10.1 */
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
5
|
-
import { serialize as borshSerialize } from "borsh";
|
|
5
|
+
import { serialize as borshSerialize } from "@fastnear/borsh";
|
|
6
6
|
import { privateKeyFromRandom, publicKeyFromPrivate, bytesToBase64, mapTransaction, SCHEMA } from "@fastnear/utils";
|
|
7
7
|
import { connectorActionsToFastnearActions } from "./actions.js";
|
|
8
8
|
import { createRpcFactory } from "./rpc.js";
|