zerowallet-adapter 1.0.6 → 1.0.8
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/dist/index.d.mts +4 -3
- package/dist/index.d.ts +4 -3
- package/dist/index.js +41 -20
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +43 -22
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -55,7 +55,7 @@ interface ZeroWalletAdapterConfig {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
declare const ZeroWalletName: WalletName<"Zero Wallet">;
|
|
58
|
-
declare const ZeroWalletIcon = "data:image/svg+xml;base64,
|
|
58
|
+
declare const ZeroWalletIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PHBhdGggZD0iTTE2LjUgNy41QzE2Ljc1IDcuNSA5IDIwIDkuNSAyMEw3LjUgMTYuNUM3LjI1IDE2LjUgMTUgNCAxNC41IDRMMTYuNSA3LjVaIiBmaWxsPSJibGFjayIvPjwvc3ZnPg==";
|
|
59
59
|
interface ZeroWalletAdapterEvents {
|
|
60
60
|
connect(publicKey: PublicKey): void;
|
|
61
61
|
disconnect(): void;
|
|
@@ -99,8 +99,9 @@ declare function buildSignAllUrl(serializedTxsBase64: string[], callbackUrl: str
|
|
|
99
99
|
*/
|
|
100
100
|
declare function buildSignMessageUrl(messageBase64: string, callbackUrl: string, id: string, scheme?: string): string;
|
|
101
101
|
/**
|
|
102
|
-
*
|
|
103
|
-
*
|
|
102
|
+
* Opens a deep link URL. Uses window.location.href which triggers
|
|
103
|
+
* onShouldStartLoadWithRequest in React Native WebView — allowing the
|
|
104
|
+
* host app to intercept the custom scheme and handle it natively.
|
|
104
105
|
*/
|
|
105
106
|
declare function openDeepLink(url: string): void;
|
|
106
107
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -55,7 +55,7 @@ interface ZeroWalletAdapterConfig {
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
declare const ZeroWalletName: WalletName<"Zero Wallet">;
|
|
58
|
-
declare const ZeroWalletIcon = "data:image/svg+xml;base64,
|
|
58
|
+
declare const ZeroWalletIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PHBhdGggZD0iTTE2LjUgNy41QzE2Ljc1IDcuNSA5IDIwIDkuNSAyMEw3LjUgMTYuNUM3LjI1IDE2LjUgMTUgNCAxNC41IDRMMTYuNSA3LjVaIiBmaWxsPSJibGFjayIvPjwvc3ZnPg==";
|
|
59
59
|
interface ZeroWalletAdapterEvents {
|
|
60
60
|
connect(publicKey: PublicKey): void;
|
|
61
61
|
disconnect(): void;
|
|
@@ -99,8 +99,9 @@ declare function buildSignAllUrl(serializedTxsBase64: string[], callbackUrl: str
|
|
|
99
99
|
*/
|
|
100
100
|
declare function buildSignMessageUrl(messageBase64: string, callbackUrl: string, id: string, scheme?: string): string;
|
|
101
101
|
/**
|
|
102
|
-
*
|
|
103
|
-
*
|
|
102
|
+
* Opens a deep link URL. Uses window.location.href which triggers
|
|
103
|
+
* onShouldStartLoadWithRequest in React Native WebView — allowing the
|
|
104
|
+
* host app to intercept the custom scheme and handle it natively.
|
|
104
105
|
*/
|
|
105
106
|
declare function openDeepLink(url: string): void;
|
|
106
107
|
/**
|
package/dist/index.js
CHANGED
|
@@ -121,12 +121,7 @@ function buildSignMessageUrl(messageBase64, callbackUrl, id, scheme = ZERO_WALLE
|
|
|
121
121
|
}
|
|
122
122
|
function openDeepLink(url) {
|
|
123
123
|
if (typeof window !== "undefined") {
|
|
124
|
-
|
|
125
|
-
a.href = url;
|
|
126
|
-
a.style.display = "none";
|
|
127
|
-
document.body.appendChild(a);
|
|
128
|
-
a.click();
|
|
129
|
-
setTimeout(() => document.body.removeChild(a), 1e3);
|
|
124
|
+
window.location.href = url;
|
|
130
125
|
}
|
|
131
126
|
}
|
|
132
127
|
function isMobile() {
|
|
@@ -185,7 +180,7 @@ function parseCallbackParams(params) {
|
|
|
185
180
|
|
|
186
181
|
// src/adapter.ts
|
|
187
182
|
var ZeroWalletName = "Zero Wallet";
|
|
188
|
-
var ZeroWalletIcon = "data:image/svg+xml;base64,
|
|
183
|
+
var ZeroWalletIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PHBhdGggZD0iTTE2LjUgNy41QzE2Ljc1IDcuNSA5IDIwIDkuNSAyMEw3LjUgMTYuNUM3LjI1IDE2LjUgMTUgNCAxNC41IDRMMTYuNSA3LjVaIiBmaWxsPSJibGFjayIvPjwvc3ZnPg==";
|
|
189
184
|
var ZeroWalletAdapter = class extends walletAdapterBase.BaseMessageSignerWalletAdapter {
|
|
190
185
|
constructor(config = {}) {
|
|
191
186
|
super();
|
|
@@ -196,8 +191,7 @@ var ZeroWalletAdapter = class extends walletAdapterBase.BaseMessageSignerWalletA
|
|
|
196
191
|
this._config = {
|
|
197
192
|
network: config.network || "mainnet-beta",
|
|
198
193
|
timeoutMs: config.timeoutMs || 12e4,
|
|
199
|
-
callbackUrl: config.callbackUrl || (typeof window !== "undefined" ? window.location.href : "")
|
|
200
|
-
deepLinkPrefix: config.deepLinkPrefix
|
|
194
|
+
callbackUrl: config.callbackUrl || (typeof window !== "undefined" ? window.location.href : "")
|
|
201
195
|
};
|
|
202
196
|
this._connecting = false;
|
|
203
197
|
this._wallet = null;
|
|
@@ -212,6 +206,18 @@ var ZeroWalletAdapter = class extends walletAdapterBase.BaseMessageSignerWalletA
|
|
|
212
206
|
this._readyState = walletAdapterBase.WalletReadyState.Loadable;
|
|
213
207
|
}
|
|
214
208
|
}
|
|
209
|
+
if (typeof window !== "undefined") {
|
|
210
|
+
try {
|
|
211
|
+
const storedKey = localStorage.getItem("zerowallet_pubkey");
|
|
212
|
+
if (storedKey) {
|
|
213
|
+
this._publicKey = new web3_js.PublicKey(storedKey);
|
|
214
|
+
setTimeout(() => {
|
|
215
|
+
if (this._publicKey) this.emit("connect", this._publicKey);
|
|
216
|
+
}, 0);
|
|
217
|
+
}
|
|
218
|
+
} catch (e) {
|
|
219
|
+
}
|
|
220
|
+
}
|
|
215
221
|
}
|
|
216
222
|
get publicKey() {
|
|
217
223
|
return this._publicKey;
|
|
@@ -230,18 +236,33 @@ var ZeroWalletAdapter = class extends walletAdapterBase.BaseMessageSignerWalletA
|
|
|
230
236
|
}
|
|
231
237
|
this._connecting = true;
|
|
232
238
|
const id = generateCallbackId();
|
|
233
|
-
|
|
234
|
-
localStorage.setItem(
|
|
235
|
-
"zerowallet_pending_" + id,
|
|
236
|
-
JSON.stringify({ type: "connect", timestamp: Date.now() })
|
|
237
|
-
);
|
|
238
|
-
}
|
|
239
|
-
const deepLinkUrl = buildConnectUrl(this._config.callbackUrl, id, this._config.deepLinkPrefix);
|
|
239
|
+
const deepLinkUrl = buildConnectUrl(this._config.callbackUrl, id);
|
|
240
240
|
openDeepLink(deepLinkUrl);
|
|
241
|
+
try {
|
|
242
|
+
const params = await waitForCallback(id, this._config.timeoutMs);
|
|
243
|
+
const parsed = parseCallbackParams(params);
|
|
244
|
+
if (parsed.status === "rejected") {
|
|
245
|
+
throw new ZeroWalletUserRejectionError(parsed.error || "User rejected the connection request.");
|
|
246
|
+
}
|
|
247
|
+
if (!parsed.publicKey) {
|
|
248
|
+
throw new ZeroWalletConnectionError("No public key returned from wallet.");
|
|
249
|
+
}
|
|
250
|
+
this._publicKey = new web3_js.PublicKey(parsed.publicKey);
|
|
251
|
+
if (typeof window !== "undefined") {
|
|
252
|
+
localStorage.setItem("zerowallet_pubkey", this._publicKey.toBase58());
|
|
253
|
+
}
|
|
254
|
+
this.emit("connect", this._publicKey);
|
|
255
|
+
} catch (e) {
|
|
256
|
+
if (e instanceof ZeroWalletTimeoutError) {
|
|
257
|
+
throw new walletAdapterBase.WalletTimeoutError(e?.message, e);
|
|
258
|
+
}
|
|
259
|
+
throw e;
|
|
260
|
+
}
|
|
241
261
|
} catch (error) {
|
|
242
|
-
this._connecting = false;
|
|
243
262
|
this.emit("error", error);
|
|
244
263
|
throw error;
|
|
264
|
+
} finally {
|
|
265
|
+
this._connecting = false;
|
|
245
266
|
}
|
|
246
267
|
}
|
|
247
268
|
async disconnect() {
|
|
@@ -256,7 +277,7 @@ var ZeroWalletAdapter = class extends walletAdapterBase.BaseMessageSignerWalletA
|
|
|
256
277
|
if (!this.connected) throw new walletAdapterBase.WalletDisconnectedError();
|
|
257
278
|
const id = generateCallbackId();
|
|
258
279
|
const serialized = serializeTransaction(transaction);
|
|
259
|
-
const url = buildSignTransactionUrl(serialized, this._config.callbackUrl, id, this._config.network
|
|
280
|
+
const url = buildSignTransactionUrl(serialized, this._config.callbackUrl, id, this._config.network);
|
|
260
281
|
openDeepLink(url);
|
|
261
282
|
const params = await waitForCallback(id, this._config.timeoutMs);
|
|
262
283
|
const parsed = parseCallbackParams(params);
|
|
@@ -280,7 +301,7 @@ var ZeroWalletAdapter = class extends walletAdapterBase.BaseMessageSignerWalletA
|
|
|
280
301
|
if (!this.connected) throw new walletAdapterBase.WalletDisconnectedError();
|
|
281
302
|
const id = generateCallbackId();
|
|
282
303
|
const serializedTxs = transactions.map((t) => serializeTransaction(t));
|
|
283
|
-
const url = buildSignAllUrl(serializedTxs, this._config.callbackUrl, id, this._config.network
|
|
304
|
+
const url = buildSignAllUrl(serializedTxs, this._config.callbackUrl, id, this._config.network);
|
|
284
305
|
openDeepLink(url);
|
|
285
306
|
const params = await waitForCallback(id, this._config.timeoutMs);
|
|
286
307
|
const parsed = parseCallbackParams(params);
|
|
@@ -304,7 +325,7 @@ var ZeroWalletAdapter = class extends walletAdapterBase.BaseMessageSignerWalletA
|
|
|
304
325
|
if (!this.connected || !this.publicKey) throw new walletAdapterBase.WalletDisconnectedError();
|
|
305
326
|
const id = generateCallbackId();
|
|
306
327
|
const serializedMessage = serializeMessage(message);
|
|
307
|
-
const url = buildSignMessageUrl(serializedMessage, this._config.callbackUrl, id
|
|
328
|
+
const url = buildSignMessageUrl(serializedMessage, this._config.callbackUrl, id);
|
|
308
329
|
openDeepLink(url);
|
|
309
330
|
const params = await waitForCallback(id, this._config.timeoutMs);
|
|
310
331
|
const parsed = parseCallbackParams(params);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/utils.ts","../src/deeplink.ts","../src/adapter.ts","../src/standard.ts"],"names":["WalletError","VersionedTransaction","Transaction","BaseMessageSignerWalletAdapter","WalletReadyState","WalletDisconnectedError","WalletTimeoutError","WalletSignTransactionError","WalletSignMessageError"],"mappings":"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","file":"index.js","sourcesContent":["import { WalletError } from '@solana/wallet-adapter-base';\n\nexport class ZeroWalletNotInstalledError extends WalletError {\n name = 'ZeroWalletNotInstalledError';\n}\n\nexport class ZeroWalletConnectionError extends WalletError {\n name = 'ZeroWalletConnectionError';\n}\n\nexport class ZeroWalletUserRejectionError extends WalletError {\n name = 'ZeroWalletUserRejectionError';\n}\n\nexport class ZeroWalletSignTransactionError extends WalletError {\n name = 'ZeroWalletSignTransactionError';\n}\n\nexport class ZeroWalletSignMessageError extends WalletError {\n name = 'ZeroWalletSignMessageError';\n}\n\nexport class ZeroWalletTimeoutError extends WalletError {\n name = 'ZeroWalletTimeoutError';\n}\n","import { Transaction, VersionedTransaction } from '@solana/web3.js';\nimport bs58 from 'bs58';\n\n/**\n * Serializes a transaction (legacy or versioned) to a base64 encoded string.\n */\nexport function serializeTransaction(tx: Transaction | VersionedTransaction): string {\n if ('version' in tx) {\n // Versioned transaction\n return encodeBase64(tx.serialize());\n } else {\n // Legacy transaction.\n // Needs recentBlockhash and feePayer before serialize, but typically dApp provides this\n // Use requireAllSignatures: false if the wallet still needs to add signatures\n return encodeBase64(tx.serialize({ requireAllSignatures: false }));\n }\n}\n\n/**\n * Deserializes a base64 encoded transaction back into a Transaction or VersionedTransaction.\n */\nexport function deserializeTransaction(serializedTxBase64: string): Transaction | VersionedTransaction {\n const buffer = decodeBase64(serializedTxBase64);\n try {\n // Attempt versioned transaction parsing\n return VersionedTransaction.deserialize(buffer);\n } catch (e) {\n // Fallback to legacy\n return Transaction.from(buffer);\n }\n}\n\n/**\n * Serializes a raw message Uint8Array to base64.\n */\nexport function serializeMessage(message: Uint8Array): string {\n return encodeBase64(message);\n}\n\n/**\n * Deserializes a base64 signature back to Uint8Array.\n */\nexport function deserializeSignature(signatureBase64: string): Uint8Array {\n return decodeBase64(signatureBase64);\n}\n\n/**\n * Converts a Uint8Array to a base64 string.\n */\nexport function encodeBase64(data: Uint8Array): string {\n if (typeof btoa !== 'undefined') {\n const binString = Array.from(data, (byte) => String.fromCharCode(byte)).join('');\n return btoa(binString);\n }\n return Buffer.from(data).toString('base64');\n}\n\n/**\n * Converts a base64 string to a Uint8Array.\n */\nexport function decodeBase64(data: string): Uint8Array {\n if (typeof atob !== 'undefined') {\n const binString = atob(data);\n return new Uint8Array(binString.split('').map((char) => char.charCodeAt(0)));\n }\n return new Uint8Array(Buffer.from(data, 'base64'));\n}\n\n/**\n * Generates a unique 16 character hex string for tracking deep link requests.\n */\nexport function generateCallbackId(): string {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n}\n\n/**\n * Detects if the current environment is a mobile device via User-Agent.\n */\nexport function isMobileDevice(): boolean {\n if (typeof navigator === 'undefined' || !navigator.userAgent) return false;\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n}\n\nexport function isIOS(): boolean {\n if (typeof navigator === 'undefined' || !navigator.userAgent) return false;\n return /iPhone|iPad|iPod/i.test(navigator.userAgent);\n}\n\nexport function isAndroid(): boolean {\n if (typeof navigator === 'undefined' || !navigator.userAgent) return false;\n return /Android/i.test(navigator.userAgent);\n}\n","import { ZeroWalletTimeoutError } from './errors';\nimport { ConnectCallbackParams, SignCallbackParams } from './types';\nimport { generateCallbackId, isMobileDevice } from './utils';\n\nconst ZERO_WALLET_SCHEME = 'zerowallet://';\n\n/**\n * Builds the URL to connect to the Zero Wallet mobile app deep link.\n */\nexport function buildConnectUrl(callbackUrl: string, id: string, scheme: string = ZERO_WALLET_SCHEME): string {\n return `${scheme}connect?callback=${encodeURIComponent(callbackUrl)}&id=${id}`;\n}\n\n/**\n * Builds the deep link URL to request signing a single transaction.\n */\nexport function buildSignTransactionUrl(serializedTxBase64: string, callbackUrl: string, id: string, network: string = 'mainnet-beta', scheme: string = ZERO_WALLET_SCHEME): string {\n return `${scheme}sign?tx=${encodeURIComponent(serializedTxBase64)}&callback=${encodeURIComponent(callbackUrl)}&id=${id}&network=${network}`;\n}\n\n/**\n * Builds the deep link URL to request signing multiple transactions.\n */\nexport function buildSignAllUrl(serializedTxsBase64: string[], callbackUrl: string, id: string, network: string = 'mainnet-beta', scheme: string = ZERO_WALLET_SCHEME): string {\n const serializedPayload = JSON.stringify(serializedTxsBase64); // JSON array of base64 strings\n return `${scheme}signAll?txs=${encodeURIComponent(serializedPayload)}&callback=${encodeURIComponent(callbackUrl)}&id=${id}&network=${network}`;\n}\n\n/**\n * Builds the deep link URL to request signing a raw message.\n */\nexport function buildSignMessageUrl(messageBase64: string, callbackUrl: string, id: string, scheme: string = ZERO_WALLET_SCHEME): string {\n return `${scheme}signMessage?msg=${encodeURIComponent(messageBase64)}&callback=${encodeURIComponent(callbackUrl)}&id=${id}`;\n}\n\n/**\n * Attempts to open the deep link by creating an invisible anchor element and clicking it.\n * This lets the OS intercept the scheme WITHOUT navigating the current page away.\n */\nexport function openDeepLink(url: string): void {\n if (typeof window !== 'undefined') {\n const a = document.createElement('a');\n a.href = url;\n a.style.display = 'none';\n document.body.appendChild(a);\n a.click();\n // Clean up after a short delay\n setTimeout(() => document.body.removeChild(a), 1000);\n }\n}\n\n/**\n * Detects if the current user agent is mobile.\n */\nexport function isMobile(): boolean {\n return isMobileDevice();\n}\n\n/**\n * Checks for the presence of the Zero Wallet browser extension (or injected provider wrapper if present).\n * Currently always returns false conceptually via deep links, but standardizes the check.\n */\nexport function isZeroWalletInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n return !!(window as any).zerowallet?.isZeroWallet;\n}\n\n/**\n * Waits for a callback matching the provided request ID.\n * Since redirect callbacks typically reload the page, if you are a SPA you must register this listener\n * or catch it on boot in the adapter itself.\n * \n * For in-app browser or local state preservation, we listen to the hashchange/search params.\n */\nexport function waitForCallback(\n expectedId: string,\n timeoutMs: number = 120000\n): Promise<URLSearchParams> {\n return new Promise((resolve, reject) => {\n let timeoutId: NodeJS.Timeout;\n\n // Note: For deep links, true \"waiting\" like this only works if the dApp is in a container\n // that handles the URL return without reloading, or uses a specific communication bridge.\n // For external browsers, the return callback will act as a page navigation to the dApp's callback URL.\n const checkUrl = () => {\n if (typeof window === 'undefined') return;\n const params = new URLSearchParams(window.location.search);\n if (params.get('id') === expectedId) {\n clearTimeout(timeoutId);\n clearInterval(intervalId);\n resolve(params);\n }\n };\n\n const intervalId = setInterval(checkUrl, 1000); // Check every second\n checkUrl(); // check initially\n\n timeoutId = setTimeout(() => {\n clearInterval(intervalId);\n reject(new ZeroWalletTimeoutError('Deep link response timed out.'));\n }, timeoutMs);\n });\n}\n\n/**\n * Parses callback URL SearchParams into typed parameters.\n */\nexport function parseCallbackParams(params: URLSearchParams): ConnectCallbackParams | SignCallbackParams {\n const id = params.get('id') || '';\n const status = (params.get('status') as 'approved' | 'rejected') || 'rejected';\n const error = params.get('error') || undefined;\n\n // Connect Params\n const publicKey = params.get('publicKey') || undefined;\n\n // Sign Params\n const signedTx = params.get('signedTx') || undefined;\n let signedTxs: string[] | undefined;\n try {\n const rawTxs = params.get('signedTxs');\n if (rawTxs) {\n signedTxs = JSON.parse(decodeURIComponent(rawTxs));\n }\n } catch (e) {\n console.error('Failed to parse signedTxs array', e);\n }\n const signature = params.get('signature') || undefined;\n\n return {\n id,\n status,\n error,\n publicKey,\n signedTx,\n signedTxs,\n signature\n };\n}\n","import {\n BaseMessageSignerWalletAdapter,\n EventEmitter,\n WalletName,\n WalletReadyState,\n WalletSignTransactionError,\n WalletSignMessageError,\n WalletConnectionError,\n WalletDisconnectedError,\n WalletTimeoutError\n} from '@solana/wallet-adapter-base';\nimport { PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js';\nimport {\n ZeroWalletAdapterConfig,\n ConnectCallbackParams,\n SignCallbackParams\n} from './types';\nimport {\n ZeroWalletNotInstalledError,\n ZeroWalletConnectionError,\n ZeroWalletUserRejectionError,\n ZeroWalletSignTransactionError,\n ZeroWalletSignMessageError,\n ZeroWalletTimeoutError\n} from './errors';\nimport {\n buildConnectUrl,\n buildSignMessageUrl,\n buildSignTransactionUrl,\n buildSignAllUrl,\n isMobile,\n isZeroWalletInstalled,\n openDeepLink,\n waitForCallback,\n parseCallbackParams\n} from './deeplink';\nimport {\n generateCallbackId,\n serializeTransaction,\n deserializeTransaction,\n serializeMessage,\n deserializeSignature\n} from './utils';\nimport bs58 from 'bs58';\n\nexport const ZeroWalletName = 'Zero Wallet' as WalletName<'Zero Wallet'>;\n\n// Simple clean SVG icon base64 encoded\nexport const ZeroWalletIcon = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiByeD0iNCIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEyIDcuNUwxMiAxNi41TDE2LjUgMTJMNy41IDEyTDEyIDcuNVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=';\n\nexport interface ZeroWalletAdapterEvents {\n connect(publicKey: PublicKey): void;\n disconnect(): void;\n error(error: any): void;\n}\n\nexport class ZeroWalletAdapter extends BaseMessageSignerWalletAdapter {\n name = ZeroWalletName;\n url = 'https://zerowallet.app';\n icon = ZeroWalletIcon;\n supportedTransactionVersions = new Set(['legacy', 0] as const);\n\n private _connecting: boolean;\n private _wallet: any | null; // For standard injected wallet if applicable\n private _publicKey: PublicKey | null;\n private _readyState: WalletReadyState;\n private _config: ZeroWalletAdapterConfig;\n\n constructor(config: ZeroWalletAdapterConfig = {}) {\n super();\n this._config = {\n network: config.network || 'mainnet-beta',\n timeoutMs: config.timeoutMs || 120000,\n callbackUrl: config.callbackUrl || (typeof window !== 'undefined' ? window.location.href : ''),\n deepLinkPrefix: config.deepLinkPrefix\n };\n this._connecting = false;\n this._wallet = null;\n this._publicKey = null;\n this._readyState = WalletReadyState.Unsupported;\n\n // Determine ready state\n if (typeof window !== 'undefined') {\n if (isMobile()) {\n // On mobile we consider it installed/loadable via deep links\n this._readyState = isZeroWalletInstalled() ? WalletReadyState.Installed : WalletReadyState.Loadable;\n } else if (isZeroWalletInstalled()) {\n this._readyState = WalletReadyState.Installed;\n } else {\n this._readyState = WalletReadyState.Loadable; // Fallback to QR / WalletConnect eventually\n }\n }\n }\n\n get publicKey(): PublicKey | null {\n return this._publicKey;\n }\n\n get connecting(): boolean {\n return this._connecting;\n }\n\n get readyState(): WalletReadyState {\n return this._readyState;\n }\n\n async connect(): Promise<void> {\n try {\n if (this.connected || this.connecting) return;\n\n if (this._readyState !== WalletReadyState.Installed && this._readyState !== WalletReadyState.Loadable) {\n throw new ZeroWalletNotInstalledError();\n }\n\n this._connecting = true;\n\n const id = generateCallbackId();\n\n // ── Save pending session BEFORE navigating away ──────────────────\n // The deep link will cause the browser to leave this page.\n // When zeroo calls Linking.openURL(callbackUrl?id=xxx&publicKey=yyy),\n // the browser reloads the dApp. The adapter constructor will detect\n // the URL params and auto-complete the connection.\n if (typeof window !== 'undefined') {\n localStorage.setItem(\n 'zerowallet_pending_' + id,\n JSON.stringify({ type: 'connect', timestamp: Date.now() })\n );\n }\n\n const deepLinkUrl = buildConnectUrl(this._config.callbackUrl!, id, this._config.deepLinkPrefix);\n\n // Navigate away — connection resolves on next page load\n openDeepLink(deepLinkUrl);\n\n // Keep connecting state; connection completes on page reload\n // (the finally block below will reset it if an error is thrown)\n } catch (error: any) {\n this._connecting = false;\n this.emit('error', error);\n throw error;\n }\n }\n\n async disconnect(): Promise<void> {\n this._publicKey = null;\n if (typeof window !== 'undefined') {\n localStorage.removeItem('zerowallet_pubkey');\n }\n this.emit('disconnect');\n }\n\n async signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T> {\n try {\n if (!this.connected) throw new WalletDisconnectedError();\n\n const id = generateCallbackId();\n const serialized = serializeTransaction(transaction);\n const url = buildSignTransactionUrl(serialized, this._config.callbackUrl!, id, this._config.network, this._config.deepLinkPrefix);\n\n openDeepLink(url);\n\n const params = await waitForCallback(id, this._config.timeoutMs);\n const parsed = parseCallbackParams(params) as SignCallbackParams;\n\n if (parsed.status === 'rejected') {\n throw new ZeroWalletUserRejectionError(parsed.error || 'User rejected signature.');\n }\n\n if (!parsed.signedTx) {\n throw new ZeroWalletSignTransactionError('No signed transaction returned.');\n }\n\n return deserializeTransaction(parsed.signedTx) as T;\n } catch (error: any) {\n this.emit('error', error);\n if (error instanceof ZeroWalletTimeoutError) {\n throw new WalletTimeoutError(error?.message, error);\n }\n throw new WalletSignTransactionError(error?.message, error);\n }\n }\n\n async signAllTransactions<T extends Transaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n try {\n if (!this.connected) throw new WalletDisconnectedError();\n\n const id = generateCallbackId();\n const serializedTxs = transactions.map((t: T) => serializeTransaction(t));\n const url = buildSignAllUrl(serializedTxs, this._config.callbackUrl!, id, this._config.network, this._config.deepLinkPrefix);\n\n openDeepLink(url);\n\n const params = await waitForCallback(id, this._config.timeoutMs);\n const parsed = parseCallbackParams(params) as SignCallbackParams;\n\n if (parsed.status === 'rejected') {\n throw new ZeroWalletUserRejectionError(parsed.error || 'User rejected signature.');\n }\n\n if (!parsed.signedTxs || parsed.signedTxs.length !== transactions.length) {\n throw new ZeroWalletSignTransactionError('Invalid number of signed transactions returned.');\n }\n\n return parsed.signedTxs.map(t => deserializeTransaction(t) as T);\n } catch (error: any) {\n this.emit('error', error);\n if (error instanceof ZeroWalletTimeoutError) {\n throw new WalletTimeoutError(error?.message, error);\n }\n throw new WalletSignTransactionError(error?.message, error);\n }\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n try {\n if (!this.connected || !this.publicKey) throw new WalletDisconnectedError();\n\n const id = generateCallbackId();\n const serializedMessage = serializeMessage(message);\n const url = buildSignMessageUrl(serializedMessage, this._config.callbackUrl!, id, this._config.deepLinkPrefix);\n\n openDeepLink(url);\n\n const params = await waitForCallback(id, this._config.timeoutMs);\n const parsed = parseCallbackParams(params) as SignCallbackParams;\n\n if (parsed.status === 'rejected') {\n throw new ZeroWalletUserRejectionError(parsed.error || 'User rejected signature.');\n }\n\n if (!parsed.signature) {\n throw new ZeroWalletSignMessageError('No signature returned.');\n }\n\n return deserializeSignature(parsed.signature);\n } catch (error: any) {\n this.emit('error', error);\n if (error instanceof ZeroWalletTimeoutError) {\n throw new WalletTimeoutError(error?.message, error);\n }\n throw new WalletSignMessageError(error?.message, error);\n }\n }\n}\n","import { SolanaSignAndSendTransactionFeature, SolanaSignAndSendTransactionMethod, SolanaSignMessageFeature, SolanaSignMessageMethod, SolanaSignTransactionFeature, SolanaSignTransactionMethod } from '@solana/wallet-standard-features';\nimport { Wallet, WalletAccount, WalletIcon } from '@wallet-standard/core';\nimport { ZeroWalletAdapter, ZeroWalletIcon, ZeroWalletName } from './adapter';\nimport { PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { StandardConnectFeature, StandardConnectMethod, StandardDisconnectFeature, StandardDisconnectMethod, StandardEventsFeature, StandardEventsListeners, StandardEventsNames, StandardEventsOnMethod } from '@wallet-standard/features';\n\nexport interface ZeroWalletWindowStandard extends Window {\n zerowallet?: {\n isZeroWallet?: boolean;\n };\n}\n\nexport type ZeroWalletFeature = StandardConnectFeature &\n StandardDisconnectFeature &\n StandardEventsFeature &\n SolanaSignTransactionFeature &\n SolanaSignAndSendTransactionFeature &\n SolanaSignMessageFeature;\n\nexport class ZeroWalletStandardWallet implements Wallet {\n readonly #adapter: ZeroWalletAdapter;\n readonly #listeners: { [E in StandardEventsNames]?: StandardEventsListeners[E][] } = {};\n readonly #version = '1.0.0' as const;\n\n get version() {\n return this.#version;\n }\n\n get name() {\n return ZeroWalletName;\n }\n\n get icon(): WalletIcon {\n return ZeroWalletIcon as WalletIcon;\n }\n\n get chains() {\n return ['solana:mainnet', 'solana:devnet', 'solana:testnet'] as const;\n }\n\n get features(): ZeroWalletFeature {\n return {\n 'standard:connect': {\n version: '1.0.0',\n connect: this.#connect,\n },\n 'standard:disconnect': {\n version: '1.0.0',\n disconnect: this.#disconnect,\n },\n 'standard:events': {\n version: '1.0.0',\n on: this.#on,\n },\n 'solana:signTransaction': {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signTransaction: this.#signTransaction,\n },\n 'solana:signAndSendTransaction': {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signAndSendTransaction: this.#signAndSendTransaction,\n },\n 'solana:signMessage': {\n version: '1.0.0',\n signMessage: this.#signMessage,\n },\n };\n }\n\n get accounts() {\n return this.#adapter.publicKey ? [new ZeroWalletStandardAccount(this.#adapter.publicKey)] : [];\n }\n\n constructor(adapter: ZeroWalletAdapter) {\n this.#adapter = adapter;\n this.#adapter.on('connect', this.#emit.bind(this, 'change', { accounts: this.accounts }));\n this.#adapter.on('disconnect', this.#emit.bind(this, 'change', { accounts: this.accounts }));\n }\n\n #connect: StandardConnectMethod = async ({ silent } = {}) => {\n if (!this.#adapter.connected) {\n await this.#adapter.connect();\n }\n return { accounts: this.accounts };\n };\n\n #disconnect: StandardDisconnectMethod = async () => {\n await this.#adapter.disconnect();\n };\n\n #on: StandardEventsOnMethod = (event, listener) => {\n this.#listeners[event]?.push(listener) || (this.#listeners[event] = [listener]);\n return (): void => this.#off(event, listener);\n };\n\n #emit<E extends StandardEventsNames>(event: E, ...args: Parameters<StandardEventsListeners[E]>): void {\n // eslint-disable-next-line prefer-spread\n this.#listeners[event]?.forEach((listener) => listener.apply(null, args));\n }\n\n #off<E extends StandardEventsNames>(event: E, listener: StandardEventsListeners[E]): void {\n this.#listeners[event] = this.#listeners[event]?.filter((existingListener) => listener !== existingListener);\n }\n\n #signTransaction: SolanaSignTransactionMethod = async (...inputs) => {\n if (!this.#adapter.connected) throw new Error('Not connected');\n const signedTxs = [];\n for (const input of inputs) {\n const tx = Transaction.from(input.transaction); // Using legacy for simplicity in standard adapter interface as fallback\n const signed = await this.#adapter.signTransaction(tx);\n signedTxs.push({ signedTransaction: signed.serialize() });\n }\n return signedTxs;\n };\n\n #signAndSendTransaction: SolanaSignAndSendTransactionMethod = async (...inputs) => {\n if (!this.#adapter.connected) throw new Error('Not connected');\n throw new Error('signAndSendTransaction not fully implemented in standard adapter wrapper for Zero Wallet deep link yet.');\n };\n\n #signMessage: SolanaSignMessageMethod = async (...inputs) => {\n if (!this.#adapter.connected) throw new Error('Not connected');\n const signatures = [];\n for (const input of inputs) {\n const signature = await this.#adapter.signMessage(input.message);\n signatures.push({ signedMessage: input.message, signature });\n }\n return signatures;\n };\n}\n\nexport class ZeroWalletStandardAccount implements WalletAccount {\n readonly #publicKey: PublicKey;\n\n get address() {\n return this.#publicKey.toBase58();\n }\n\n get publicKey() {\n return this.#publicKey.toBytes();\n }\n\n get chains() {\n return ['solana:mainnet', 'solana:devnet', 'solana:testnet'] as const;\n }\n\n get features() {\n return ['solana:signTransaction', 'solana:signAndSendTransaction', 'solana:signMessage'] as const;\n }\n\n constructor(publicKey: PublicKey) {\n this.#publicKey = publicKey;\n }\n}\n\n/**\n * Registers the ZeroWallet in the Wallet Standard modal ecosystem.\n */\nexport function registerWalletStandard(adapter: ZeroWalletAdapter): void {\n if (typeof window === 'undefined') return;\n\n try {\n const wallet = new ZeroWalletStandardWallet(adapter);\n const { registerWallet } = require('@wallet-standard/wallet') as typeof import('@wallet-standard/wallet');\n registerWallet(wallet);\n } catch (error) {\n console.error('ZeroWallet: Failed to register wallet standard', error);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/utils.ts","../src/deeplink.ts","../src/adapter.ts","../src/standard.ts"],"names":["WalletError","VersionedTransaction","Transaction","BaseMessageSignerWalletAdapter","WalletReadyState","PublicKey","WalletTimeoutError","WalletDisconnectedError","WalletSignTransactionError","WalletSignMessageError"],"mappings":"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","file":"index.js","sourcesContent":["import { WalletError } from '@solana/wallet-adapter-base';\n\nexport class ZeroWalletNotInstalledError extends WalletError {\n name = 'ZeroWalletNotInstalledError';\n}\n\nexport class ZeroWalletConnectionError extends WalletError {\n name = 'ZeroWalletConnectionError';\n}\n\nexport class ZeroWalletUserRejectionError extends WalletError {\n name = 'ZeroWalletUserRejectionError';\n}\n\nexport class ZeroWalletSignTransactionError extends WalletError {\n name = 'ZeroWalletSignTransactionError';\n}\n\nexport class ZeroWalletSignMessageError extends WalletError {\n name = 'ZeroWalletSignMessageError';\n}\n\nexport class ZeroWalletTimeoutError extends WalletError {\n name = 'ZeroWalletTimeoutError';\n}\n","import { Transaction, VersionedTransaction } from '@solana/web3.js';\nimport bs58 from 'bs58';\n\n/**\n * Serializes a transaction (legacy or versioned) to a base64 encoded string.\n */\nexport function serializeTransaction(tx: Transaction | VersionedTransaction): string {\n if ('version' in tx) {\n // Versioned transaction\n return encodeBase64(tx.serialize());\n } else {\n // Legacy transaction.\n // Needs recentBlockhash and feePayer before serialize, but typically dApp provides this\n // Use requireAllSignatures: false if the wallet still needs to add signatures\n return encodeBase64(tx.serialize({ requireAllSignatures: false }));\n }\n}\n\n/**\n * Deserializes a base64 encoded transaction back into a Transaction or VersionedTransaction.\n */\nexport function deserializeTransaction(serializedTxBase64: string): Transaction | VersionedTransaction {\n const buffer = decodeBase64(serializedTxBase64);\n try {\n // Attempt versioned transaction parsing\n return VersionedTransaction.deserialize(buffer);\n } catch (e) {\n // Fallback to legacy\n return Transaction.from(buffer);\n }\n}\n\n/**\n * Serializes a raw message Uint8Array to base64.\n */\nexport function serializeMessage(message: Uint8Array): string {\n return encodeBase64(message);\n}\n\n/**\n * Deserializes a base64 signature back to Uint8Array.\n */\nexport function deserializeSignature(signatureBase64: string): Uint8Array {\n return decodeBase64(signatureBase64);\n}\n\n/**\n * Converts a Uint8Array to a base64 string.\n */\nexport function encodeBase64(data: Uint8Array): string {\n if (typeof btoa !== 'undefined') {\n const binString = Array.from(data, (byte) => String.fromCharCode(byte)).join('');\n return btoa(binString);\n }\n return Buffer.from(data).toString('base64');\n}\n\n/**\n * Converts a base64 string to a Uint8Array.\n */\nexport function decodeBase64(data: string): Uint8Array {\n if (typeof atob !== 'undefined') {\n const binString = atob(data);\n return new Uint8Array(binString.split('').map((char) => char.charCodeAt(0)));\n }\n return new Uint8Array(Buffer.from(data, 'base64'));\n}\n\n/**\n * Generates a unique 16 character hex string for tracking deep link requests.\n */\nexport function generateCallbackId(): string {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n}\n\n/**\n * Detects if the current environment is a mobile device via User-Agent.\n */\nexport function isMobileDevice(): boolean {\n if (typeof navigator === 'undefined' || !navigator.userAgent) return false;\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n}\n\nexport function isIOS(): boolean {\n if (typeof navigator === 'undefined' || !navigator.userAgent) return false;\n return /iPhone|iPad|iPod/i.test(navigator.userAgent);\n}\n\nexport function isAndroid(): boolean {\n if (typeof navigator === 'undefined' || !navigator.userAgent) return false;\n return /Android/i.test(navigator.userAgent);\n}\n","import { ZeroWalletTimeoutError } from './errors';\nimport { ConnectCallbackParams, SignCallbackParams } from './types';\nimport { generateCallbackId, isMobileDevice } from './utils';\n\nconst ZERO_WALLET_SCHEME = 'zerowallet://';\n\n/**\n * Builds the URL to connect to the Zero Wallet mobile app deep link.\n */\nexport function buildConnectUrl(callbackUrl: string, id: string, scheme: string = ZERO_WALLET_SCHEME): string {\n return `${scheme}connect?callback=${encodeURIComponent(callbackUrl)}&id=${id}`;\n}\n\n/**\n * Builds the deep link URL to request signing a single transaction.\n */\nexport function buildSignTransactionUrl(serializedTxBase64: string, callbackUrl: string, id: string, network: string = 'mainnet-beta', scheme: string = ZERO_WALLET_SCHEME): string {\n return `${scheme}sign?tx=${encodeURIComponent(serializedTxBase64)}&callback=${encodeURIComponent(callbackUrl)}&id=${id}&network=${network}`;\n}\n\n/**\n * Builds the deep link URL to request signing multiple transactions.\n */\nexport function buildSignAllUrl(serializedTxsBase64: string[], callbackUrl: string, id: string, network: string = 'mainnet-beta', scheme: string = ZERO_WALLET_SCHEME): string {\n const serializedPayload = JSON.stringify(serializedTxsBase64); // JSON array of base64 strings\n return `${scheme}signAll?txs=${encodeURIComponent(serializedPayload)}&callback=${encodeURIComponent(callbackUrl)}&id=${id}&network=${network}`;\n}\n\n/**\n * Builds the deep link URL to request signing a raw message.\n */\nexport function buildSignMessageUrl(messageBase64: string, callbackUrl: string, id: string, scheme: string = ZERO_WALLET_SCHEME): string {\n return `${scheme}signMessage?msg=${encodeURIComponent(messageBase64)}&callback=${encodeURIComponent(callbackUrl)}&id=${id}`;\n}\n\n/**\n * Opens a deep link URL. Uses window.location.href which triggers\n * onShouldStartLoadWithRequest in React Native WebView — allowing the\n * host app to intercept the custom scheme and handle it natively.\n */\nexport function openDeepLink(url: string): void {\n if (typeof window !== 'undefined') {\n window.location.href = url;\n }\n}\n\n/**\n * Detects if the current user agent is mobile.\n */\nexport function isMobile(): boolean {\n return isMobileDevice();\n}\n\n/**\n * Checks for the presence of the Zero Wallet browser extension (or injected provider wrapper if present).\n * Currently always returns false conceptually via deep links, but standardizes the check.\n */\nexport function isZeroWalletInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n return !!(window as any).zerowallet?.isZeroWallet;\n}\n\n/**\n * Waits for a callback matching the provided request ID.\n * Since redirect callbacks typically reload the page, if you are a SPA you must register this listener\n * or catch it on boot in the adapter itself.\n * \n * For in-app browser or local state preservation, we listen to the hashchange/search params.\n */\nexport function waitForCallback(\n expectedId: string,\n timeoutMs: number = 120000\n): Promise<URLSearchParams> {\n return new Promise((resolve, reject) => {\n let timeoutId: NodeJS.Timeout;\n\n // Note: For deep links, true \"waiting\" like this only works if the dApp is in a container\n // that handles the URL return without reloading, or uses a specific communication bridge.\n // For external browsers, the return callback will act as a page navigation to the dApp's callback URL.\n const checkUrl = () => {\n if (typeof window === 'undefined') return;\n const params = new URLSearchParams(window.location.search);\n if (params.get('id') === expectedId) {\n clearTimeout(timeoutId);\n clearInterval(intervalId);\n resolve(params);\n }\n };\n\n const intervalId = setInterval(checkUrl, 1000); // Check every second\n checkUrl(); // check initially\n\n timeoutId = setTimeout(() => {\n clearInterval(intervalId);\n reject(new ZeroWalletTimeoutError('Deep link response timed out.'));\n }, timeoutMs);\n });\n}\n\n/**\n * Parses callback URL SearchParams into typed parameters.\n */\nexport function parseCallbackParams(params: URLSearchParams): ConnectCallbackParams | SignCallbackParams {\n const id = params.get('id') || '';\n const status = (params.get('status') as 'approved' | 'rejected') || 'rejected';\n const error = params.get('error') || undefined;\n\n // Connect Params\n const publicKey = params.get('publicKey') || undefined;\n\n // Sign Params\n const signedTx = params.get('signedTx') || undefined;\n let signedTxs: string[] | undefined;\n try {\n const rawTxs = params.get('signedTxs');\n if (rawTxs) {\n signedTxs = JSON.parse(decodeURIComponent(rawTxs));\n }\n } catch (e) {\n console.error('Failed to parse signedTxs array', e);\n }\n const signature = params.get('signature') || undefined;\n\n return {\n id,\n status,\n error,\n publicKey,\n signedTx,\n signedTxs,\n signature\n };\n}\n","import {\n BaseMessageSignerWalletAdapter,\n EventEmitter,\n WalletName,\n WalletReadyState,\n WalletSignTransactionError,\n WalletSignMessageError,\n WalletConnectionError,\n WalletDisconnectedError,\n WalletTimeoutError\n} from '@solana/wallet-adapter-base';\nimport { PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js';\nimport {\n ZeroWalletAdapterConfig,\n ConnectCallbackParams,\n SignCallbackParams\n} from './types';\nimport {\n ZeroWalletNotInstalledError,\n ZeroWalletConnectionError,\n ZeroWalletUserRejectionError,\n ZeroWalletSignTransactionError,\n ZeroWalletSignMessageError,\n ZeroWalletTimeoutError\n} from './errors';\nimport {\n buildConnectUrl,\n buildSignMessageUrl,\n buildSignTransactionUrl,\n buildSignAllUrl,\n isMobile,\n isZeroWalletInstalled,\n openDeepLink,\n waitForCallback,\n parseCallbackParams\n} from './deeplink';\nimport {\n generateCallbackId,\n serializeTransaction,\n deserializeTransaction,\n serializeMessage,\n deserializeSignature\n} from './utils';\nimport bs58 from 'bs58';\n\nexport const ZeroWalletName = 'Zero Wallet' as WalletName<'Zero Wallet'>;\n\n// Simple clean SVG icon base64 encoded\nexport const ZeroWalletIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PHBhdGggZD0iTTE2LjUgNy41QzE2Ljc1IDcuNSA5IDIwIDkuNSAyMEw3LjUgMTYuNUM3LjI1IDE2LjUgMTUgNCAxNC41IDRMMTYuNSA3LjVaIiBmaWxsPSJibGFjayIvPjwvc3ZnPg==';\n\nexport interface ZeroWalletAdapterEvents {\n connect(publicKey: PublicKey): void;\n disconnect(): void;\n error(error: any): void;\n}\n\nexport class ZeroWalletAdapter extends BaseMessageSignerWalletAdapter {\n name = ZeroWalletName;\n url = 'https://zerowallet.app';\n icon = ZeroWalletIcon;\n supportedTransactionVersions = new Set(['legacy', 0] as const);\n\n private _connecting: boolean;\n private _wallet: any | null; // For standard injected wallet if applicable\n private _publicKey: PublicKey | null;\n private _readyState: WalletReadyState;\n private _config: ZeroWalletAdapterConfig;\n\n constructor(config: ZeroWalletAdapterConfig = {}) {\n super();\n this._config = {\n network: config.network || 'mainnet-beta',\n timeoutMs: config.timeoutMs || 120000,\n callbackUrl: config.callbackUrl || (typeof window !== 'undefined' ? window.location.href : '')\n };\n this._connecting = false;\n this._wallet = null;\n this._publicKey = null;\n this._readyState = WalletReadyState.Unsupported;\n\n // Determine ready state\n if (typeof window !== 'undefined') {\n if (isMobile()) {\n // On mobile we consider it installed/loadable via deep links\n this._readyState = isZeroWalletInstalled() ? WalletReadyState.Installed : WalletReadyState.Loadable;\n } else if (isZeroWalletInstalled()) {\n this._readyState = WalletReadyState.Installed;\n } else {\n this._readyState = WalletReadyState.Loadable; // Fallback to QR / WalletConnect eventually\n }\n }\n\n // Try to recover session from local storage\n if (typeof window !== 'undefined') {\n try {\n const storedKey = localStorage.getItem('zerowallet_pubkey');\n if (storedKey) {\n this._publicKey = new PublicKey(storedKey);\n // Emit connect on next tick so listeners have time to attach\n setTimeout(() => {\n if (this._publicKey) this.emit('connect', this._publicKey);\n }, 0);\n }\n } catch (e) {\n // Ignore storage errors\n }\n }\n }\n\n get publicKey(): PublicKey | null {\n return this._publicKey;\n }\n\n get connecting(): boolean {\n return this._connecting;\n }\n\n get readyState(): WalletReadyState {\n return this._readyState;\n }\n\n async connect(): Promise<void> {\n try {\n if (this.connected || this.connecting) return;\n\n if (this._readyState !== WalletReadyState.Installed && this._readyState !== WalletReadyState.Loadable) {\n throw new ZeroWalletNotInstalledError();\n }\n\n this._connecting = true;\n\n const id = generateCallbackId();\n const deepLinkUrl = buildConnectUrl(this._config.callbackUrl!, id);\n\n openDeepLink(deepLinkUrl);\n\n try {\n // Wait for the app to redirect back with the params\n const params = await waitForCallback(id, this._config.timeoutMs);\n const parsed = parseCallbackParams(params) as ConnectCallbackParams;\n\n if (parsed.status === 'rejected') {\n throw new ZeroWalletUserRejectionError(parsed.error || 'User rejected the connection request.');\n }\n\n if (!parsed.publicKey) {\n throw new ZeroWalletConnectionError('No public key returned from wallet.');\n }\n\n this._publicKey = new PublicKey(parsed.publicKey);\n\n // Save session\n if (typeof window !== 'undefined') {\n localStorage.setItem('zerowallet_pubkey', this._publicKey.toBase58());\n }\n\n this.emit('connect', this._publicKey);\n } catch (e: any) {\n if (e instanceof ZeroWalletTimeoutError) {\n throw new WalletTimeoutError(e?.message, e);\n }\n throw e; // rethrow mapping error\n }\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n } finally {\n this._connecting = false;\n }\n }\n\n async disconnect(): Promise<void> {\n this._publicKey = null;\n if (typeof window !== 'undefined') {\n localStorage.removeItem('zerowallet_pubkey');\n }\n this.emit('disconnect');\n }\n\n async signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T> {\n try {\n if (!this.connected) throw new WalletDisconnectedError();\n\n const id = generateCallbackId();\n const serialized = serializeTransaction(transaction);\n const url = buildSignTransactionUrl(serialized, this._config.callbackUrl!, id, this._config.network);\n\n openDeepLink(url);\n\n const params = await waitForCallback(id, this._config.timeoutMs);\n const parsed = parseCallbackParams(params) as SignCallbackParams;\n\n if (parsed.status === 'rejected') {\n throw new ZeroWalletUserRejectionError(parsed.error || 'User rejected signature.');\n }\n\n if (!parsed.signedTx) {\n throw new ZeroWalletSignTransactionError('No signed transaction returned.');\n }\n\n return deserializeTransaction(parsed.signedTx) as T;\n } catch (error: any) {\n this.emit('error', error);\n if (error instanceof ZeroWalletTimeoutError) {\n throw new WalletTimeoutError(error?.message, error);\n }\n throw new WalletSignTransactionError(error?.message, error);\n }\n }\n\n async signAllTransactions<T extends Transaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n try {\n if (!this.connected) throw new WalletDisconnectedError();\n\n const id = generateCallbackId();\n const serializedTxs = transactions.map((t: T) => serializeTransaction(t));\n const url = buildSignAllUrl(serializedTxs, this._config.callbackUrl!, id, this._config.network);\n\n openDeepLink(url);\n\n const params = await waitForCallback(id, this._config.timeoutMs);\n const parsed = parseCallbackParams(params) as SignCallbackParams;\n\n if (parsed.status === 'rejected') {\n throw new ZeroWalletUserRejectionError(parsed.error || 'User rejected signature.');\n }\n\n if (!parsed.signedTxs || parsed.signedTxs.length !== transactions.length) {\n throw new ZeroWalletSignTransactionError('Invalid number of signed transactions returned.');\n }\n\n return parsed.signedTxs.map(t => deserializeTransaction(t) as T);\n } catch (error: any) {\n this.emit('error', error);\n if (error instanceof ZeroWalletTimeoutError) {\n throw new WalletTimeoutError(error?.message, error);\n }\n throw new WalletSignTransactionError(error?.message, error);\n }\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n try {\n if (!this.connected || !this.publicKey) throw new WalletDisconnectedError();\n\n const id = generateCallbackId();\n const serializedMessage = serializeMessage(message);\n const url = buildSignMessageUrl(serializedMessage, this._config.callbackUrl!, id);\n\n openDeepLink(url);\n\n const params = await waitForCallback(id, this._config.timeoutMs);\n const parsed = parseCallbackParams(params) as SignCallbackParams;\n\n if (parsed.status === 'rejected') {\n throw new ZeroWalletUserRejectionError(parsed.error || 'User rejected signature.');\n }\n\n if (!parsed.signature) {\n throw new ZeroWalletSignMessageError('No signature returned.');\n }\n\n return deserializeSignature(parsed.signature);\n } catch (error: any) {\n this.emit('error', error);\n if (error instanceof ZeroWalletTimeoutError) {\n throw new WalletTimeoutError(error?.message, error);\n }\n throw new WalletSignMessageError(error?.message, error);\n }\n }\n}\n","import { SolanaSignAndSendTransactionFeature, SolanaSignAndSendTransactionMethod, SolanaSignMessageFeature, SolanaSignMessageMethod, SolanaSignTransactionFeature, SolanaSignTransactionMethod } from '@solana/wallet-standard-features';\nimport { Wallet, WalletAccount, WalletIcon } from '@wallet-standard/core';\nimport { ZeroWalletAdapter, ZeroWalletIcon, ZeroWalletName } from './adapter';\nimport { PublicKey, Transaction } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { StandardConnectFeature, StandardConnectMethod, StandardDisconnectFeature, StandardDisconnectMethod, StandardEventsFeature, StandardEventsListeners, StandardEventsNames, StandardEventsOnMethod } from '@wallet-standard/features';\n\nexport interface ZeroWalletWindowStandard extends Window {\n zerowallet?: {\n isZeroWallet?: boolean;\n };\n}\n\nexport type ZeroWalletFeature = StandardConnectFeature &\n StandardDisconnectFeature &\n StandardEventsFeature &\n SolanaSignTransactionFeature &\n SolanaSignAndSendTransactionFeature &\n SolanaSignMessageFeature;\n\nexport class ZeroWalletStandardWallet implements Wallet {\n readonly #adapter: ZeroWalletAdapter;\n readonly #listeners: { [E in StandardEventsNames]?: StandardEventsListeners[E][] } = {};\n readonly #version = '1.0.0' as const;\n\n get version() {\n return this.#version;\n }\n\n get name() {\n return ZeroWalletName;\n }\n\n get icon(): WalletIcon {\n return ZeroWalletIcon as WalletIcon;\n }\n\n get chains() {\n return ['solana:mainnet', 'solana:devnet', 'solana:testnet'] as const;\n }\n\n get features(): ZeroWalletFeature {\n return {\n 'standard:connect': {\n version: '1.0.0',\n connect: this.#connect,\n },\n 'standard:disconnect': {\n version: '1.0.0',\n disconnect: this.#disconnect,\n },\n 'standard:events': {\n version: '1.0.0',\n on: this.#on,\n },\n 'solana:signTransaction': {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signTransaction: this.#signTransaction,\n },\n 'solana:signAndSendTransaction': {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signAndSendTransaction: this.#signAndSendTransaction,\n },\n 'solana:signMessage': {\n version: '1.0.0',\n signMessage: this.#signMessage,\n },\n };\n }\n\n get accounts() {\n return this.#adapter.publicKey ? [new ZeroWalletStandardAccount(this.#adapter.publicKey)] : [];\n }\n\n constructor(adapter: ZeroWalletAdapter) {\n this.#adapter = adapter;\n this.#adapter.on('connect', this.#emit.bind(this, 'change', { accounts: this.accounts }));\n this.#adapter.on('disconnect', this.#emit.bind(this, 'change', { accounts: this.accounts }));\n }\n\n #connect: StandardConnectMethod = async ({ silent } = {}) => {\n if (!this.#adapter.connected) {\n await this.#adapter.connect();\n }\n return { accounts: this.accounts };\n };\n\n #disconnect: StandardDisconnectMethod = async () => {\n await this.#adapter.disconnect();\n };\n\n #on: StandardEventsOnMethod = (event, listener) => {\n this.#listeners[event]?.push(listener) || (this.#listeners[event] = [listener]);\n return (): void => this.#off(event, listener);\n };\n\n #emit<E extends StandardEventsNames>(event: E, ...args: Parameters<StandardEventsListeners[E]>): void {\n // eslint-disable-next-line prefer-spread\n this.#listeners[event]?.forEach((listener) => listener.apply(null, args));\n }\n\n #off<E extends StandardEventsNames>(event: E, listener: StandardEventsListeners[E]): void {\n this.#listeners[event] = this.#listeners[event]?.filter((existingListener) => listener !== existingListener);\n }\n\n #signTransaction: SolanaSignTransactionMethod = async (...inputs) => {\n if (!this.#adapter.connected) throw new Error('Not connected');\n const signedTxs = [];\n for (const input of inputs) {\n const tx = Transaction.from(input.transaction); // Using legacy for simplicity in standard adapter interface as fallback\n const signed = await this.#adapter.signTransaction(tx);\n signedTxs.push({ signedTransaction: signed.serialize() });\n }\n return signedTxs;\n };\n\n #signAndSendTransaction: SolanaSignAndSendTransactionMethod = async (...inputs) => {\n if (!this.#adapter.connected) throw new Error('Not connected');\n throw new Error('signAndSendTransaction not fully implemented in standard adapter wrapper for Zero Wallet deep link yet.');\n };\n\n #signMessage: SolanaSignMessageMethod = async (...inputs) => {\n if (!this.#adapter.connected) throw new Error('Not connected');\n const signatures = [];\n for (const input of inputs) {\n const signature = await this.#adapter.signMessage(input.message);\n signatures.push({ signedMessage: input.message, signature });\n }\n return signatures;\n };\n}\n\nexport class ZeroWalletStandardAccount implements WalletAccount {\n readonly #publicKey: PublicKey;\n\n get address() {\n return this.#publicKey.toBase58();\n }\n\n get publicKey() {\n return this.#publicKey.toBytes();\n }\n\n get chains() {\n return ['solana:mainnet', 'solana:devnet', 'solana:testnet'] as const;\n }\n\n get features() {\n return ['solana:signTransaction', 'solana:signAndSendTransaction', 'solana:signMessage'] as const;\n }\n\n constructor(publicKey: PublicKey) {\n this.#publicKey = publicKey;\n }\n}\n\n/**\n * Registers the ZeroWallet in the Wallet Standard modal ecosystem.\n */\nexport function registerWalletStandard(adapter: ZeroWalletAdapter): void {\n if (typeof window === 'undefined') return;\n\n try {\n const wallet = new ZeroWalletStandardWallet(adapter);\n const { registerWallet } = require('@wallet-standard/wallet') as typeof import('@wallet-standard/wallet');\n registerWallet(wallet);\n } catch (error) {\n console.error('ZeroWallet: Failed to register wallet standard', error);\n }\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { WalletError, BaseMessageSignerWalletAdapter, WalletReadyState,
|
|
2
|
-
import { VersionedTransaction, Transaction } from '@solana/web3.js';
|
|
1
|
+
import { WalletError, BaseMessageSignerWalletAdapter, WalletReadyState, WalletTimeoutError, WalletDisconnectedError, WalletSignTransactionError, WalletSignMessageError } from '@solana/wallet-adapter-base';
|
|
2
|
+
import { VersionedTransaction, Transaction, PublicKey } from '@solana/web3.js';
|
|
3
3
|
|
|
4
4
|
var __typeError = (msg) => {
|
|
5
5
|
throw TypeError(msg);
|
|
@@ -119,12 +119,7 @@ function buildSignMessageUrl(messageBase64, callbackUrl, id, scheme = ZERO_WALLE
|
|
|
119
119
|
}
|
|
120
120
|
function openDeepLink(url) {
|
|
121
121
|
if (typeof window !== "undefined") {
|
|
122
|
-
|
|
123
|
-
a.href = url;
|
|
124
|
-
a.style.display = "none";
|
|
125
|
-
document.body.appendChild(a);
|
|
126
|
-
a.click();
|
|
127
|
-
setTimeout(() => document.body.removeChild(a), 1e3);
|
|
122
|
+
window.location.href = url;
|
|
128
123
|
}
|
|
129
124
|
}
|
|
130
125
|
function isMobile() {
|
|
@@ -183,7 +178,7 @@ function parseCallbackParams(params) {
|
|
|
183
178
|
|
|
184
179
|
// src/adapter.ts
|
|
185
180
|
var ZeroWalletName = "Zero Wallet";
|
|
186
|
-
var ZeroWalletIcon = "data:image/svg+xml;base64,
|
|
181
|
+
var ZeroWalletIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PHBhdGggZD0iTTE2LjUgNy41QzE2Ljc1IDcuNSA5IDIwIDkuNSAyMEw3LjUgMTYuNUM3LjI1IDE2LjUgMTUgNCAxNC41IDRMMTYuNSA3LjVaIiBmaWxsPSJibGFjayIvPjwvc3ZnPg==";
|
|
187
182
|
var ZeroWalletAdapter = class extends BaseMessageSignerWalletAdapter {
|
|
188
183
|
constructor(config = {}) {
|
|
189
184
|
super();
|
|
@@ -194,8 +189,7 @@ var ZeroWalletAdapter = class extends BaseMessageSignerWalletAdapter {
|
|
|
194
189
|
this._config = {
|
|
195
190
|
network: config.network || "mainnet-beta",
|
|
196
191
|
timeoutMs: config.timeoutMs || 12e4,
|
|
197
|
-
callbackUrl: config.callbackUrl || (typeof window !== "undefined" ? window.location.href : "")
|
|
198
|
-
deepLinkPrefix: config.deepLinkPrefix
|
|
192
|
+
callbackUrl: config.callbackUrl || (typeof window !== "undefined" ? window.location.href : "")
|
|
199
193
|
};
|
|
200
194
|
this._connecting = false;
|
|
201
195
|
this._wallet = null;
|
|
@@ -210,6 +204,18 @@ var ZeroWalletAdapter = class extends BaseMessageSignerWalletAdapter {
|
|
|
210
204
|
this._readyState = WalletReadyState.Loadable;
|
|
211
205
|
}
|
|
212
206
|
}
|
|
207
|
+
if (typeof window !== "undefined") {
|
|
208
|
+
try {
|
|
209
|
+
const storedKey = localStorage.getItem("zerowallet_pubkey");
|
|
210
|
+
if (storedKey) {
|
|
211
|
+
this._publicKey = new PublicKey(storedKey);
|
|
212
|
+
setTimeout(() => {
|
|
213
|
+
if (this._publicKey) this.emit("connect", this._publicKey);
|
|
214
|
+
}, 0);
|
|
215
|
+
}
|
|
216
|
+
} catch (e) {
|
|
217
|
+
}
|
|
218
|
+
}
|
|
213
219
|
}
|
|
214
220
|
get publicKey() {
|
|
215
221
|
return this._publicKey;
|
|
@@ -228,18 +234,33 @@ var ZeroWalletAdapter = class extends BaseMessageSignerWalletAdapter {
|
|
|
228
234
|
}
|
|
229
235
|
this._connecting = true;
|
|
230
236
|
const id = generateCallbackId();
|
|
231
|
-
|
|
232
|
-
localStorage.setItem(
|
|
233
|
-
"zerowallet_pending_" + id,
|
|
234
|
-
JSON.stringify({ type: "connect", timestamp: Date.now() })
|
|
235
|
-
);
|
|
236
|
-
}
|
|
237
|
-
const deepLinkUrl = buildConnectUrl(this._config.callbackUrl, id, this._config.deepLinkPrefix);
|
|
237
|
+
const deepLinkUrl = buildConnectUrl(this._config.callbackUrl, id);
|
|
238
238
|
openDeepLink(deepLinkUrl);
|
|
239
|
+
try {
|
|
240
|
+
const params = await waitForCallback(id, this._config.timeoutMs);
|
|
241
|
+
const parsed = parseCallbackParams(params);
|
|
242
|
+
if (parsed.status === "rejected") {
|
|
243
|
+
throw new ZeroWalletUserRejectionError(parsed.error || "User rejected the connection request.");
|
|
244
|
+
}
|
|
245
|
+
if (!parsed.publicKey) {
|
|
246
|
+
throw new ZeroWalletConnectionError("No public key returned from wallet.");
|
|
247
|
+
}
|
|
248
|
+
this._publicKey = new PublicKey(parsed.publicKey);
|
|
249
|
+
if (typeof window !== "undefined") {
|
|
250
|
+
localStorage.setItem("zerowallet_pubkey", this._publicKey.toBase58());
|
|
251
|
+
}
|
|
252
|
+
this.emit("connect", this._publicKey);
|
|
253
|
+
} catch (e) {
|
|
254
|
+
if (e instanceof ZeroWalletTimeoutError) {
|
|
255
|
+
throw new WalletTimeoutError(e?.message, e);
|
|
256
|
+
}
|
|
257
|
+
throw e;
|
|
258
|
+
}
|
|
239
259
|
} catch (error) {
|
|
240
|
-
this._connecting = false;
|
|
241
260
|
this.emit("error", error);
|
|
242
261
|
throw error;
|
|
262
|
+
} finally {
|
|
263
|
+
this._connecting = false;
|
|
243
264
|
}
|
|
244
265
|
}
|
|
245
266
|
async disconnect() {
|
|
@@ -254,7 +275,7 @@ var ZeroWalletAdapter = class extends BaseMessageSignerWalletAdapter {
|
|
|
254
275
|
if (!this.connected) throw new WalletDisconnectedError();
|
|
255
276
|
const id = generateCallbackId();
|
|
256
277
|
const serialized = serializeTransaction(transaction);
|
|
257
|
-
const url = buildSignTransactionUrl(serialized, this._config.callbackUrl, id, this._config.network
|
|
278
|
+
const url = buildSignTransactionUrl(serialized, this._config.callbackUrl, id, this._config.network);
|
|
258
279
|
openDeepLink(url);
|
|
259
280
|
const params = await waitForCallback(id, this._config.timeoutMs);
|
|
260
281
|
const parsed = parseCallbackParams(params);
|
|
@@ -278,7 +299,7 @@ var ZeroWalletAdapter = class extends BaseMessageSignerWalletAdapter {
|
|
|
278
299
|
if (!this.connected) throw new WalletDisconnectedError();
|
|
279
300
|
const id = generateCallbackId();
|
|
280
301
|
const serializedTxs = transactions.map((t) => serializeTransaction(t));
|
|
281
|
-
const url = buildSignAllUrl(serializedTxs, this._config.callbackUrl, id, this._config.network
|
|
302
|
+
const url = buildSignAllUrl(serializedTxs, this._config.callbackUrl, id, this._config.network);
|
|
282
303
|
openDeepLink(url);
|
|
283
304
|
const params = await waitForCallback(id, this._config.timeoutMs);
|
|
284
305
|
const parsed = parseCallbackParams(params);
|
|
@@ -302,7 +323,7 @@ var ZeroWalletAdapter = class extends BaseMessageSignerWalletAdapter {
|
|
|
302
323
|
if (!this.connected || !this.publicKey) throw new WalletDisconnectedError();
|
|
303
324
|
const id = generateCallbackId();
|
|
304
325
|
const serializedMessage = serializeMessage(message);
|
|
305
|
-
const url = buildSignMessageUrl(serializedMessage, this._config.callbackUrl, id
|
|
326
|
+
const url = buildSignMessageUrl(serializedMessage, this._config.callbackUrl, id);
|
|
306
327
|
openDeepLink(url);
|
|
307
328
|
const params = await waitForCallback(id, this._config.timeoutMs);
|
|
308
329
|
const parsed = parseCallbackParams(params);
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/utils.ts","../src/deeplink.ts","../src/adapter.ts","../src/standard.ts"],"names":["Transaction"],"mappings":"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","file":"index.mjs","sourcesContent":["import { WalletError } from '@solana/wallet-adapter-base';\n\nexport class ZeroWalletNotInstalledError extends WalletError {\n name = 'ZeroWalletNotInstalledError';\n}\n\nexport class ZeroWalletConnectionError extends WalletError {\n name = 'ZeroWalletConnectionError';\n}\n\nexport class ZeroWalletUserRejectionError extends WalletError {\n name = 'ZeroWalletUserRejectionError';\n}\n\nexport class ZeroWalletSignTransactionError extends WalletError {\n name = 'ZeroWalletSignTransactionError';\n}\n\nexport class ZeroWalletSignMessageError extends WalletError {\n name = 'ZeroWalletSignMessageError';\n}\n\nexport class ZeroWalletTimeoutError extends WalletError {\n name = 'ZeroWalletTimeoutError';\n}\n","import { Transaction, VersionedTransaction } from '@solana/web3.js';\nimport bs58 from 'bs58';\n\n/**\n * Serializes a transaction (legacy or versioned) to a base64 encoded string.\n */\nexport function serializeTransaction(tx: Transaction | VersionedTransaction): string {\n if ('version' in tx) {\n // Versioned transaction\n return encodeBase64(tx.serialize());\n } else {\n // Legacy transaction.\n // Needs recentBlockhash and feePayer before serialize, but typically dApp provides this\n // Use requireAllSignatures: false if the wallet still needs to add signatures\n return encodeBase64(tx.serialize({ requireAllSignatures: false }));\n }\n}\n\n/**\n * Deserializes a base64 encoded transaction back into a Transaction or VersionedTransaction.\n */\nexport function deserializeTransaction(serializedTxBase64: string): Transaction | VersionedTransaction {\n const buffer = decodeBase64(serializedTxBase64);\n try {\n // Attempt versioned transaction parsing\n return VersionedTransaction.deserialize(buffer);\n } catch (e) {\n // Fallback to legacy\n return Transaction.from(buffer);\n }\n}\n\n/**\n * Serializes a raw message Uint8Array to base64.\n */\nexport function serializeMessage(message: Uint8Array): string {\n return encodeBase64(message);\n}\n\n/**\n * Deserializes a base64 signature back to Uint8Array.\n */\nexport function deserializeSignature(signatureBase64: string): Uint8Array {\n return decodeBase64(signatureBase64);\n}\n\n/**\n * Converts a Uint8Array to a base64 string.\n */\nexport function encodeBase64(data: Uint8Array): string {\n if (typeof btoa !== 'undefined') {\n const binString = Array.from(data, (byte) => String.fromCharCode(byte)).join('');\n return btoa(binString);\n }\n return Buffer.from(data).toString('base64');\n}\n\n/**\n * Converts a base64 string to a Uint8Array.\n */\nexport function decodeBase64(data: string): Uint8Array {\n if (typeof atob !== 'undefined') {\n const binString = atob(data);\n return new Uint8Array(binString.split('').map((char) => char.charCodeAt(0)));\n }\n return new Uint8Array(Buffer.from(data, 'base64'));\n}\n\n/**\n * Generates a unique 16 character hex string for tracking deep link requests.\n */\nexport function generateCallbackId(): string {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n}\n\n/**\n * Detects if the current environment is a mobile device via User-Agent.\n */\nexport function isMobileDevice(): boolean {\n if (typeof navigator === 'undefined' || !navigator.userAgent) return false;\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n}\n\nexport function isIOS(): boolean {\n if (typeof navigator === 'undefined' || !navigator.userAgent) return false;\n return /iPhone|iPad|iPod/i.test(navigator.userAgent);\n}\n\nexport function isAndroid(): boolean {\n if (typeof navigator === 'undefined' || !navigator.userAgent) return false;\n return /Android/i.test(navigator.userAgent);\n}\n","import { ZeroWalletTimeoutError } from './errors';\nimport { ConnectCallbackParams, SignCallbackParams } from './types';\nimport { generateCallbackId, isMobileDevice } from './utils';\n\nconst ZERO_WALLET_SCHEME = 'zerowallet://';\n\n/**\n * Builds the URL to connect to the Zero Wallet mobile app deep link.\n */\nexport function buildConnectUrl(callbackUrl: string, id: string, scheme: string = ZERO_WALLET_SCHEME): string {\n return `${scheme}connect?callback=${encodeURIComponent(callbackUrl)}&id=${id}`;\n}\n\n/**\n * Builds the deep link URL to request signing a single transaction.\n */\nexport function buildSignTransactionUrl(serializedTxBase64: string, callbackUrl: string, id: string, network: string = 'mainnet-beta', scheme: string = ZERO_WALLET_SCHEME): string {\n return `${scheme}sign?tx=${encodeURIComponent(serializedTxBase64)}&callback=${encodeURIComponent(callbackUrl)}&id=${id}&network=${network}`;\n}\n\n/**\n * Builds the deep link URL to request signing multiple transactions.\n */\nexport function buildSignAllUrl(serializedTxsBase64: string[], callbackUrl: string, id: string, network: string = 'mainnet-beta', scheme: string = ZERO_WALLET_SCHEME): string {\n const serializedPayload = JSON.stringify(serializedTxsBase64); // JSON array of base64 strings\n return `${scheme}signAll?txs=${encodeURIComponent(serializedPayload)}&callback=${encodeURIComponent(callbackUrl)}&id=${id}&network=${network}`;\n}\n\n/**\n * Builds the deep link URL to request signing a raw message.\n */\nexport function buildSignMessageUrl(messageBase64: string, callbackUrl: string, id: string, scheme: string = ZERO_WALLET_SCHEME): string {\n return `${scheme}signMessage?msg=${encodeURIComponent(messageBase64)}&callback=${encodeURIComponent(callbackUrl)}&id=${id}`;\n}\n\n/**\n * Attempts to open the deep link by creating an invisible anchor element and clicking it.\n * This lets the OS intercept the scheme WITHOUT navigating the current page away.\n */\nexport function openDeepLink(url: string): void {\n if (typeof window !== 'undefined') {\n const a = document.createElement('a');\n a.href = url;\n a.style.display = 'none';\n document.body.appendChild(a);\n a.click();\n // Clean up after a short delay\n setTimeout(() => document.body.removeChild(a), 1000);\n }\n}\n\n/**\n * Detects if the current user agent is mobile.\n */\nexport function isMobile(): boolean {\n return isMobileDevice();\n}\n\n/**\n * Checks for the presence of the Zero Wallet browser extension (or injected provider wrapper if present).\n * Currently always returns false conceptually via deep links, but standardizes the check.\n */\nexport function isZeroWalletInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n return !!(window as any).zerowallet?.isZeroWallet;\n}\n\n/**\n * Waits for a callback matching the provided request ID.\n * Since redirect callbacks typically reload the page, if you are a SPA you must register this listener\n * or catch it on boot in the adapter itself.\n * \n * For in-app browser or local state preservation, we listen to the hashchange/search params.\n */\nexport function waitForCallback(\n expectedId: string,\n timeoutMs: number = 120000\n): Promise<URLSearchParams> {\n return new Promise((resolve, reject) => {\n let timeoutId: NodeJS.Timeout;\n\n // Note: For deep links, true \"waiting\" like this only works if the dApp is in a container\n // that handles the URL return without reloading, or uses a specific communication bridge.\n // For external browsers, the return callback will act as a page navigation to the dApp's callback URL.\n const checkUrl = () => {\n if (typeof window === 'undefined') return;\n const params = new URLSearchParams(window.location.search);\n if (params.get('id') === expectedId) {\n clearTimeout(timeoutId);\n clearInterval(intervalId);\n resolve(params);\n }\n };\n\n const intervalId = setInterval(checkUrl, 1000); // Check every second\n checkUrl(); // check initially\n\n timeoutId = setTimeout(() => {\n clearInterval(intervalId);\n reject(new ZeroWalletTimeoutError('Deep link response timed out.'));\n }, timeoutMs);\n });\n}\n\n/**\n * Parses callback URL SearchParams into typed parameters.\n */\nexport function parseCallbackParams(params: URLSearchParams): ConnectCallbackParams | SignCallbackParams {\n const id = params.get('id') || '';\n const status = (params.get('status') as 'approved' | 'rejected') || 'rejected';\n const error = params.get('error') || undefined;\n\n // Connect Params\n const publicKey = params.get('publicKey') || undefined;\n\n // Sign Params\n const signedTx = params.get('signedTx') || undefined;\n let signedTxs: string[] | undefined;\n try {\n const rawTxs = params.get('signedTxs');\n if (rawTxs) {\n signedTxs = JSON.parse(decodeURIComponent(rawTxs));\n }\n } catch (e) {\n console.error('Failed to parse signedTxs array', e);\n }\n const signature = params.get('signature') || undefined;\n\n return {\n id,\n status,\n error,\n publicKey,\n signedTx,\n signedTxs,\n signature\n };\n}\n","import {\n BaseMessageSignerWalletAdapter,\n EventEmitter,\n WalletName,\n WalletReadyState,\n WalletSignTransactionError,\n WalletSignMessageError,\n WalletConnectionError,\n WalletDisconnectedError,\n WalletTimeoutError\n} from '@solana/wallet-adapter-base';\nimport { PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js';\nimport {\n ZeroWalletAdapterConfig,\n ConnectCallbackParams,\n SignCallbackParams\n} from './types';\nimport {\n ZeroWalletNotInstalledError,\n ZeroWalletConnectionError,\n ZeroWalletUserRejectionError,\n ZeroWalletSignTransactionError,\n ZeroWalletSignMessageError,\n ZeroWalletTimeoutError\n} from './errors';\nimport {\n buildConnectUrl,\n buildSignMessageUrl,\n buildSignTransactionUrl,\n buildSignAllUrl,\n isMobile,\n isZeroWalletInstalled,\n openDeepLink,\n waitForCallback,\n parseCallbackParams\n} from './deeplink';\nimport {\n generateCallbackId,\n serializeTransaction,\n deserializeTransaction,\n serializeMessage,\n deserializeSignature\n} from './utils';\nimport bs58 from 'bs58';\n\nexport const ZeroWalletName = 'Zero Wallet' as WalletName<'Zero Wallet'>;\n\n// Simple clean SVG icon base64 encoded\nexport const ZeroWalletIcon = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiByeD0iNCIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTEyIDcuNUwxMiAxNi41TDE2LjUgMTJMNy41IDEyTDEyIDcuNVoiIGZpbGw9IndoaXRlIi8+Cjwvc3ZnPgo=';\n\nexport interface ZeroWalletAdapterEvents {\n connect(publicKey: PublicKey): void;\n disconnect(): void;\n error(error: any): void;\n}\n\nexport class ZeroWalletAdapter extends BaseMessageSignerWalletAdapter {\n name = ZeroWalletName;\n url = 'https://zerowallet.app';\n icon = ZeroWalletIcon;\n supportedTransactionVersions = new Set(['legacy', 0] as const);\n\n private _connecting: boolean;\n private _wallet: any | null; // For standard injected wallet if applicable\n private _publicKey: PublicKey | null;\n private _readyState: WalletReadyState;\n private _config: ZeroWalletAdapterConfig;\n\n constructor(config: ZeroWalletAdapterConfig = {}) {\n super();\n this._config = {\n network: config.network || 'mainnet-beta',\n timeoutMs: config.timeoutMs || 120000,\n callbackUrl: config.callbackUrl || (typeof window !== 'undefined' ? window.location.href : ''),\n deepLinkPrefix: config.deepLinkPrefix\n };\n this._connecting = false;\n this._wallet = null;\n this._publicKey = null;\n this._readyState = WalletReadyState.Unsupported;\n\n // Determine ready state\n if (typeof window !== 'undefined') {\n if (isMobile()) {\n // On mobile we consider it installed/loadable via deep links\n this._readyState = isZeroWalletInstalled() ? WalletReadyState.Installed : WalletReadyState.Loadable;\n } else if (isZeroWalletInstalled()) {\n this._readyState = WalletReadyState.Installed;\n } else {\n this._readyState = WalletReadyState.Loadable; // Fallback to QR / WalletConnect eventually\n }\n }\n }\n\n get publicKey(): PublicKey | null {\n return this._publicKey;\n }\n\n get connecting(): boolean {\n return this._connecting;\n }\n\n get readyState(): WalletReadyState {\n return this._readyState;\n }\n\n async connect(): Promise<void> {\n try {\n if (this.connected || this.connecting) return;\n\n if (this._readyState !== WalletReadyState.Installed && this._readyState !== WalletReadyState.Loadable) {\n throw new ZeroWalletNotInstalledError();\n }\n\n this._connecting = true;\n\n const id = generateCallbackId();\n\n // ── Save pending session BEFORE navigating away ──────────────────\n // The deep link will cause the browser to leave this page.\n // When zeroo calls Linking.openURL(callbackUrl?id=xxx&publicKey=yyy),\n // the browser reloads the dApp. The adapter constructor will detect\n // the URL params and auto-complete the connection.\n if (typeof window !== 'undefined') {\n localStorage.setItem(\n 'zerowallet_pending_' + id,\n JSON.stringify({ type: 'connect', timestamp: Date.now() })\n );\n }\n\n const deepLinkUrl = buildConnectUrl(this._config.callbackUrl!, id, this._config.deepLinkPrefix);\n\n // Navigate away — connection resolves on next page load\n openDeepLink(deepLinkUrl);\n\n // Keep connecting state; connection completes on page reload\n // (the finally block below will reset it if an error is thrown)\n } catch (error: any) {\n this._connecting = false;\n this.emit('error', error);\n throw error;\n }\n }\n\n async disconnect(): Promise<void> {\n this._publicKey = null;\n if (typeof window !== 'undefined') {\n localStorage.removeItem('zerowallet_pubkey');\n }\n this.emit('disconnect');\n }\n\n async signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T> {\n try {\n if (!this.connected) throw new WalletDisconnectedError();\n\n const id = generateCallbackId();\n const serialized = serializeTransaction(transaction);\n const url = buildSignTransactionUrl(serialized, this._config.callbackUrl!, id, this._config.network, this._config.deepLinkPrefix);\n\n openDeepLink(url);\n\n const params = await waitForCallback(id, this._config.timeoutMs);\n const parsed = parseCallbackParams(params) as SignCallbackParams;\n\n if (parsed.status === 'rejected') {\n throw new ZeroWalletUserRejectionError(parsed.error || 'User rejected signature.');\n }\n\n if (!parsed.signedTx) {\n throw new ZeroWalletSignTransactionError('No signed transaction returned.');\n }\n\n return deserializeTransaction(parsed.signedTx) as T;\n } catch (error: any) {\n this.emit('error', error);\n if (error instanceof ZeroWalletTimeoutError) {\n throw new WalletTimeoutError(error?.message, error);\n }\n throw new WalletSignTransactionError(error?.message, error);\n }\n }\n\n async signAllTransactions<T extends Transaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n try {\n if (!this.connected) throw new WalletDisconnectedError();\n\n const id = generateCallbackId();\n const serializedTxs = transactions.map((t: T) => serializeTransaction(t));\n const url = buildSignAllUrl(serializedTxs, this._config.callbackUrl!, id, this._config.network, this._config.deepLinkPrefix);\n\n openDeepLink(url);\n\n const params = await waitForCallback(id, this._config.timeoutMs);\n const parsed = parseCallbackParams(params) as SignCallbackParams;\n\n if (parsed.status === 'rejected') {\n throw new ZeroWalletUserRejectionError(parsed.error || 'User rejected signature.');\n }\n\n if (!parsed.signedTxs || parsed.signedTxs.length !== transactions.length) {\n throw new ZeroWalletSignTransactionError('Invalid number of signed transactions returned.');\n }\n\n return parsed.signedTxs.map(t => deserializeTransaction(t) as T);\n } catch (error: any) {\n this.emit('error', error);\n if (error instanceof ZeroWalletTimeoutError) {\n throw new WalletTimeoutError(error?.message, error);\n }\n throw new WalletSignTransactionError(error?.message, error);\n }\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n try {\n if (!this.connected || !this.publicKey) throw new WalletDisconnectedError();\n\n const id = generateCallbackId();\n const serializedMessage = serializeMessage(message);\n const url = buildSignMessageUrl(serializedMessage, this._config.callbackUrl!, id, this._config.deepLinkPrefix);\n\n openDeepLink(url);\n\n const params = await waitForCallback(id, this._config.timeoutMs);\n const parsed = parseCallbackParams(params) as SignCallbackParams;\n\n if (parsed.status === 'rejected') {\n throw new ZeroWalletUserRejectionError(parsed.error || 'User rejected signature.');\n }\n\n if (!parsed.signature) {\n throw new ZeroWalletSignMessageError('No signature returned.');\n }\n\n return deserializeSignature(parsed.signature);\n } catch (error: any) {\n this.emit('error', error);\n if (error instanceof ZeroWalletTimeoutError) {\n throw new WalletTimeoutError(error?.message, error);\n }\n throw new WalletSignMessageError(error?.message, error);\n }\n }\n}\n","import { SolanaSignAndSendTransactionFeature, SolanaSignAndSendTransactionMethod, SolanaSignMessageFeature, SolanaSignMessageMethod, SolanaSignTransactionFeature, SolanaSignTransactionMethod } from '@solana/wallet-standard-features';\nimport { Wallet, WalletAccount, WalletIcon } from '@wallet-standard/core';\nimport { ZeroWalletAdapter, ZeroWalletIcon, ZeroWalletName } from './adapter';\nimport { PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { StandardConnectFeature, StandardConnectMethod, StandardDisconnectFeature, StandardDisconnectMethod, StandardEventsFeature, StandardEventsListeners, StandardEventsNames, StandardEventsOnMethod } from '@wallet-standard/features';\n\nexport interface ZeroWalletWindowStandard extends Window {\n zerowallet?: {\n isZeroWallet?: boolean;\n };\n}\n\nexport type ZeroWalletFeature = StandardConnectFeature &\n StandardDisconnectFeature &\n StandardEventsFeature &\n SolanaSignTransactionFeature &\n SolanaSignAndSendTransactionFeature &\n SolanaSignMessageFeature;\n\nexport class ZeroWalletStandardWallet implements Wallet {\n readonly #adapter: ZeroWalletAdapter;\n readonly #listeners: { [E in StandardEventsNames]?: StandardEventsListeners[E][] } = {};\n readonly #version = '1.0.0' as const;\n\n get version() {\n return this.#version;\n }\n\n get name() {\n return ZeroWalletName;\n }\n\n get icon(): WalletIcon {\n return ZeroWalletIcon as WalletIcon;\n }\n\n get chains() {\n return ['solana:mainnet', 'solana:devnet', 'solana:testnet'] as const;\n }\n\n get features(): ZeroWalletFeature {\n return {\n 'standard:connect': {\n version: '1.0.0',\n connect: this.#connect,\n },\n 'standard:disconnect': {\n version: '1.0.0',\n disconnect: this.#disconnect,\n },\n 'standard:events': {\n version: '1.0.0',\n on: this.#on,\n },\n 'solana:signTransaction': {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signTransaction: this.#signTransaction,\n },\n 'solana:signAndSendTransaction': {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signAndSendTransaction: this.#signAndSendTransaction,\n },\n 'solana:signMessage': {\n version: '1.0.0',\n signMessage: this.#signMessage,\n },\n };\n }\n\n get accounts() {\n return this.#adapter.publicKey ? [new ZeroWalletStandardAccount(this.#adapter.publicKey)] : [];\n }\n\n constructor(adapter: ZeroWalletAdapter) {\n this.#adapter = adapter;\n this.#adapter.on('connect', this.#emit.bind(this, 'change', { accounts: this.accounts }));\n this.#adapter.on('disconnect', this.#emit.bind(this, 'change', { accounts: this.accounts }));\n }\n\n #connect: StandardConnectMethod = async ({ silent } = {}) => {\n if (!this.#adapter.connected) {\n await this.#adapter.connect();\n }\n return { accounts: this.accounts };\n };\n\n #disconnect: StandardDisconnectMethod = async () => {\n await this.#adapter.disconnect();\n };\n\n #on: StandardEventsOnMethod = (event, listener) => {\n this.#listeners[event]?.push(listener) || (this.#listeners[event] = [listener]);\n return (): void => this.#off(event, listener);\n };\n\n #emit<E extends StandardEventsNames>(event: E, ...args: Parameters<StandardEventsListeners[E]>): void {\n // eslint-disable-next-line prefer-spread\n this.#listeners[event]?.forEach((listener) => listener.apply(null, args));\n }\n\n #off<E extends StandardEventsNames>(event: E, listener: StandardEventsListeners[E]): void {\n this.#listeners[event] = this.#listeners[event]?.filter((existingListener) => listener !== existingListener);\n }\n\n #signTransaction: SolanaSignTransactionMethod = async (...inputs) => {\n if (!this.#adapter.connected) throw new Error('Not connected');\n const signedTxs = [];\n for (const input of inputs) {\n const tx = Transaction.from(input.transaction); // Using legacy for simplicity in standard adapter interface as fallback\n const signed = await this.#adapter.signTransaction(tx);\n signedTxs.push({ signedTransaction: signed.serialize() });\n }\n return signedTxs;\n };\n\n #signAndSendTransaction: SolanaSignAndSendTransactionMethod = async (...inputs) => {\n if (!this.#adapter.connected) throw new Error('Not connected');\n throw new Error('signAndSendTransaction not fully implemented in standard adapter wrapper for Zero Wallet deep link yet.');\n };\n\n #signMessage: SolanaSignMessageMethod = async (...inputs) => {\n if (!this.#adapter.connected) throw new Error('Not connected');\n const signatures = [];\n for (const input of inputs) {\n const signature = await this.#adapter.signMessage(input.message);\n signatures.push({ signedMessage: input.message, signature });\n }\n return signatures;\n };\n}\n\nexport class ZeroWalletStandardAccount implements WalletAccount {\n readonly #publicKey: PublicKey;\n\n get address() {\n return this.#publicKey.toBase58();\n }\n\n get publicKey() {\n return this.#publicKey.toBytes();\n }\n\n get chains() {\n return ['solana:mainnet', 'solana:devnet', 'solana:testnet'] as const;\n }\n\n get features() {\n return ['solana:signTransaction', 'solana:signAndSendTransaction', 'solana:signMessage'] as const;\n }\n\n constructor(publicKey: PublicKey) {\n this.#publicKey = publicKey;\n }\n}\n\n/**\n * Registers the ZeroWallet in the Wallet Standard modal ecosystem.\n */\nexport function registerWalletStandard(adapter: ZeroWalletAdapter): void {\n if (typeof window === 'undefined') return;\n\n try {\n const wallet = new ZeroWalletStandardWallet(adapter);\n const { registerWallet } = require('@wallet-standard/wallet') as typeof import('@wallet-standard/wallet');\n registerWallet(wallet);\n } catch (error) {\n console.error('ZeroWallet: Failed to register wallet standard', error);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/utils.ts","../src/deeplink.ts","../src/adapter.ts","../src/standard.ts"],"names":["Transaction"],"mappings":"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","file":"index.mjs","sourcesContent":["import { WalletError } from '@solana/wallet-adapter-base';\n\nexport class ZeroWalletNotInstalledError extends WalletError {\n name = 'ZeroWalletNotInstalledError';\n}\n\nexport class ZeroWalletConnectionError extends WalletError {\n name = 'ZeroWalletConnectionError';\n}\n\nexport class ZeroWalletUserRejectionError extends WalletError {\n name = 'ZeroWalletUserRejectionError';\n}\n\nexport class ZeroWalletSignTransactionError extends WalletError {\n name = 'ZeroWalletSignTransactionError';\n}\n\nexport class ZeroWalletSignMessageError extends WalletError {\n name = 'ZeroWalletSignMessageError';\n}\n\nexport class ZeroWalletTimeoutError extends WalletError {\n name = 'ZeroWalletTimeoutError';\n}\n","import { Transaction, VersionedTransaction } from '@solana/web3.js';\nimport bs58 from 'bs58';\n\n/**\n * Serializes a transaction (legacy or versioned) to a base64 encoded string.\n */\nexport function serializeTransaction(tx: Transaction | VersionedTransaction): string {\n if ('version' in tx) {\n // Versioned transaction\n return encodeBase64(tx.serialize());\n } else {\n // Legacy transaction.\n // Needs recentBlockhash and feePayer before serialize, but typically dApp provides this\n // Use requireAllSignatures: false if the wallet still needs to add signatures\n return encodeBase64(tx.serialize({ requireAllSignatures: false }));\n }\n}\n\n/**\n * Deserializes a base64 encoded transaction back into a Transaction or VersionedTransaction.\n */\nexport function deserializeTransaction(serializedTxBase64: string): Transaction | VersionedTransaction {\n const buffer = decodeBase64(serializedTxBase64);\n try {\n // Attempt versioned transaction parsing\n return VersionedTransaction.deserialize(buffer);\n } catch (e) {\n // Fallback to legacy\n return Transaction.from(buffer);\n }\n}\n\n/**\n * Serializes a raw message Uint8Array to base64.\n */\nexport function serializeMessage(message: Uint8Array): string {\n return encodeBase64(message);\n}\n\n/**\n * Deserializes a base64 signature back to Uint8Array.\n */\nexport function deserializeSignature(signatureBase64: string): Uint8Array {\n return decodeBase64(signatureBase64);\n}\n\n/**\n * Converts a Uint8Array to a base64 string.\n */\nexport function encodeBase64(data: Uint8Array): string {\n if (typeof btoa !== 'undefined') {\n const binString = Array.from(data, (byte) => String.fromCharCode(byte)).join('');\n return btoa(binString);\n }\n return Buffer.from(data).toString('base64');\n}\n\n/**\n * Converts a base64 string to a Uint8Array.\n */\nexport function decodeBase64(data: string): Uint8Array {\n if (typeof atob !== 'undefined') {\n const binString = atob(data);\n return new Uint8Array(binString.split('').map((char) => char.charCodeAt(0)));\n }\n return new Uint8Array(Buffer.from(data, 'base64'));\n}\n\n/**\n * Generates a unique 16 character hex string for tracking deep link requests.\n */\nexport function generateCallbackId(): string {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n}\n\n/**\n * Detects if the current environment is a mobile device via User-Agent.\n */\nexport function isMobileDevice(): boolean {\n if (typeof navigator === 'undefined' || !navigator.userAgent) return false;\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n}\n\nexport function isIOS(): boolean {\n if (typeof navigator === 'undefined' || !navigator.userAgent) return false;\n return /iPhone|iPad|iPod/i.test(navigator.userAgent);\n}\n\nexport function isAndroid(): boolean {\n if (typeof navigator === 'undefined' || !navigator.userAgent) return false;\n return /Android/i.test(navigator.userAgent);\n}\n","import { ZeroWalletTimeoutError } from './errors';\nimport { ConnectCallbackParams, SignCallbackParams } from './types';\nimport { generateCallbackId, isMobileDevice } from './utils';\n\nconst ZERO_WALLET_SCHEME = 'zerowallet://';\n\n/**\n * Builds the URL to connect to the Zero Wallet mobile app deep link.\n */\nexport function buildConnectUrl(callbackUrl: string, id: string, scheme: string = ZERO_WALLET_SCHEME): string {\n return `${scheme}connect?callback=${encodeURIComponent(callbackUrl)}&id=${id}`;\n}\n\n/**\n * Builds the deep link URL to request signing a single transaction.\n */\nexport function buildSignTransactionUrl(serializedTxBase64: string, callbackUrl: string, id: string, network: string = 'mainnet-beta', scheme: string = ZERO_WALLET_SCHEME): string {\n return `${scheme}sign?tx=${encodeURIComponent(serializedTxBase64)}&callback=${encodeURIComponent(callbackUrl)}&id=${id}&network=${network}`;\n}\n\n/**\n * Builds the deep link URL to request signing multiple transactions.\n */\nexport function buildSignAllUrl(serializedTxsBase64: string[], callbackUrl: string, id: string, network: string = 'mainnet-beta', scheme: string = ZERO_WALLET_SCHEME): string {\n const serializedPayload = JSON.stringify(serializedTxsBase64); // JSON array of base64 strings\n return `${scheme}signAll?txs=${encodeURIComponent(serializedPayload)}&callback=${encodeURIComponent(callbackUrl)}&id=${id}&network=${network}`;\n}\n\n/**\n * Builds the deep link URL to request signing a raw message.\n */\nexport function buildSignMessageUrl(messageBase64: string, callbackUrl: string, id: string, scheme: string = ZERO_WALLET_SCHEME): string {\n return `${scheme}signMessage?msg=${encodeURIComponent(messageBase64)}&callback=${encodeURIComponent(callbackUrl)}&id=${id}`;\n}\n\n/**\n * Opens a deep link URL. Uses window.location.href which triggers\n * onShouldStartLoadWithRequest in React Native WebView — allowing the\n * host app to intercept the custom scheme and handle it natively.\n */\nexport function openDeepLink(url: string): void {\n if (typeof window !== 'undefined') {\n window.location.href = url;\n }\n}\n\n/**\n * Detects if the current user agent is mobile.\n */\nexport function isMobile(): boolean {\n return isMobileDevice();\n}\n\n/**\n * Checks for the presence of the Zero Wallet browser extension (or injected provider wrapper if present).\n * Currently always returns false conceptually via deep links, but standardizes the check.\n */\nexport function isZeroWalletInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n return !!(window as any).zerowallet?.isZeroWallet;\n}\n\n/**\n * Waits for a callback matching the provided request ID.\n * Since redirect callbacks typically reload the page, if you are a SPA you must register this listener\n * or catch it on boot in the adapter itself.\n * \n * For in-app browser or local state preservation, we listen to the hashchange/search params.\n */\nexport function waitForCallback(\n expectedId: string,\n timeoutMs: number = 120000\n): Promise<URLSearchParams> {\n return new Promise((resolve, reject) => {\n let timeoutId: NodeJS.Timeout;\n\n // Note: For deep links, true \"waiting\" like this only works if the dApp is in a container\n // that handles the URL return without reloading, or uses a specific communication bridge.\n // For external browsers, the return callback will act as a page navigation to the dApp's callback URL.\n const checkUrl = () => {\n if (typeof window === 'undefined') return;\n const params = new URLSearchParams(window.location.search);\n if (params.get('id') === expectedId) {\n clearTimeout(timeoutId);\n clearInterval(intervalId);\n resolve(params);\n }\n };\n\n const intervalId = setInterval(checkUrl, 1000); // Check every second\n checkUrl(); // check initially\n\n timeoutId = setTimeout(() => {\n clearInterval(intervalId);\n reject(new ZeroWalletTimeoutError('Deep link response timed out.'));\n }, timeoutMs);\n });\n}\n\n/**\n * Parses callback URL SearchParams into typed parameters.\n */\nexport function parseCallbackParams(params: URLSearchParams): ConnectCallbackParams | SignCallbackParams {\n const id = params.get('id') || '';\n const status = (params.get('status') as 'approved' | 'rejected') || 'rejected';\n const error = params.get('error') || undefined;\n\n // Connect Params\n const publicKey = params.get('publicKey') || undefined;\n\n // Sign Params\n const signedTx = params.get('signedTx') || undefined;\n let signedTxs: string[] | undefined;\n try {\n const rawTxs = params.get('signedTxs');\n if (rawTxs) {\n signedTxs = JSON.parse(decodeURIComponent(rawTxs));\n }\n } catch (e) {\n console.error('Failed to parse signedTxs array', e);\n }\n const signature = params.get('signature') || undefined;\n\n return {\n id,\n status,\n error,\n publicKey,\n signedTx,\n signedTxs,\n signature\n };\n}\n","import {\n BaseMessageSignerWalletAdapter,\n EventEmitter,\n WalletName,\n WalletReadyState,\n WalletSignTransactionError,\n WalletSignMessageError,\n WalletConnectionError,\n WalletDisconnectedError,\n WalletTimeoutError\n} from '@solana/wallet-adapter-base';\nimport { PublicKey, Transaction, VersionedTransaction } from '@solana/web3.js';\nimport {\n ZeroWalletAdapterConfig,\n ConnectCallbackParams,\n SignCallbackParams\n} from './types';\nimport {\n ZeroWalletNotInstalledError,\n ZeroWalletConnectionError,\n ZeroWalletUserRejectionError,\n ZeroWalletSignTransactionError,\n ZeroWalletSignMessageError,\n ZeroWalletTimeoutError\n} from './errors';\nimport {\n buildConnectUrl,\n buildSignMessageUrl,\n buildSignTransactionUrl,\n buildSignAllUrl,\n isMobile,\n isZeroWalletInstalled,\n openDeepLink,\n waitForCallback,\n parseCallbackParams\n} from './deeplink';\nimport {\n generateCallbackId,\n serializeTransaction,\n deserializeTransaction,\n serializeMessage,\n deserializeSignature\n} from './utils';\nimport bs58 from 'bs58';\n\nexport const ZeroWalletName = 'Zero Wallet' as WalletName<'Zero Wallet'>;\n\n// Simple clean SVG icon base64 encoded\nexport const ZeroWalletIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PHBhdGggZD0iTTE2LjUgNy41QzE2Ljc1IDcuNSA5IDIwIDkuNSAyMEw3LjUgMTYuNUM3LjI1IDE2LjUgMTUgNCAxNC41IDRMMTYuNSA3LjVaIiBmaWxsPSJibGFjayIvPjwvc3ZnPg==';\n\nexport interface ZeroWalletAdapterEvents {\n connect(publicKey: PublicKey): void;\n disconnect(): void;\n error(error: any): void;\n}\n\nexport class ZeroWalletAdapter extends BaseMessageSignerWalletAdapter {\n name = ZeroWalletName;\n url = 'https://zerowallet.app';\n icon = ZeroWalletIcon;\n supportedTransactionVersions = new Set(['legacy', 0] as const);\n\n private _connecting: boolean;\n private _wallet: any | null; // For standard injected wallet if applicable\n private _publicKey: PublicKey | null;\n private _readyState: WalletReadyState;\n private _config: ZeroWalletAdapterConfig;\n\n constructor(config: ZeroWalletAdapterConfig = {}) {\n super();\n this._config = {\n network: config.network || 'mainnet-beta',\n timeoutMs: config.timeoutMs || 120000,\n callbackUrl: config.callbackUrl || (typeof window !== 'undefined' ? window.location.href : '')\n };\n this._connecting = false;\n this._wallet = null;\n this._publicKey = null;\n this._readyState = WalletReadyState.Unsupported;\n\n // Determine ready state\n if (typeof window !== 'undefined') {\n if (isMobile()) {\n // On mobile we consider it installed/loadable via deep links\n this._readyState = isZeroWalletInstalled() ? WalletReadyState.Installed : WalletReadyState.Loadable;\n } else if (isZeroWalletInstalled()) {\n this._readyState = WalletReadyState.Installed;\n } else {\n this._readyState = WalletReadyState.Loadable; // Fallback to QR / WalletConnect eventually\n }\n }\n\n // Try to recover session from local storage\n if (typeof window !== 'undefined') {\n try {\n const storedKey = localStorage.getItem('zerowallet_pubkey');\n if (storedKey) {\n this._publicKey = new PublicKey(storedKey);\n // Emit connect on next tick so listeners have time to attach\n setTimeout(() => {\n if (this._publicKey) this.emit('connect', this._publicKey);\n }, 0);\n }\n } catch (e) {\n // Ignore storage errors\n }\n }\n }\n\n get publicKey(): PublicKey | null {\n return this._publicKey;\n }\n\n get connecting(): boolean {\n return this._connecting;\n }\n\n get readyState(): WalletReadyState {\n return this._readyState;\n }\n\n async connect(): Promise<void> {\n try {\n if (this.connected || this.connecting) return;\n\n if (this._readyState !== WalletReadyState.Installed && this._readyState !== WalletReadyState.Loadable) {\n throw new ZeroWalletNotInstalledError();\n }\n\n this._connecting = true;\n\n const id = generateCallbackId();\n const deepLinkUrl = buildConnectUrl(this._config.callbackUrl!, id);\n\n openDeepLink(deepLinkUrl);\n\n try {\n // Wait for the app to redirect back with the params\n const params = await waitForCallback(id, this._config.timeoutMs);\n const parsed = parseCallbackParams(params) as ConnectCallbackParams;\n\n if (parsed.status === 'rejected') {\n throw new ZeroWalletUserRejectionError(parsed.error || 'User rejected the connection request.');\n }\n\n if (!parsed.publicKey) {\n throw new ZeroWalletConnectionError('No public key returned from wallet.');\n }\n\n this._publicKey = new PublicKey(parsed.publicKey);\n\n // Save session\n if (typeof window !== 'undefined') {\n localStorage.setItem('zerowallet_pubkey', this._publicKey.toBase58());\n }\n\n this.emit('connect', this._publicKey);\n } catch (e: any) {\n if (e instanceof ZeroWalletTimeoutError) {\n throw new WalletTimeoutError(e?.message, e);\n }\n throw e; // rethrow mapping error\n }\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n } finally {\n this._connecting = false;\n }\n }\n\n async disconnect(): Promise<void> {\n this._publicKey = null;\n if (typeof window !== 'undefined') {\n localStorage.removeItem('zerowallet_pubkey');\n }\n this.emit('disconnect');\n }\n\n async signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T> {\n try {\n if (!this.connected) throw new WalletDisconnectedError();\n\n const id = generateCallbackId();\n const serialized = serializeTransaction(transaction);\n const url = buildSignTransactionUrl(serialized, this._config.callbackUrl!, id, this._config.network);\n\n openDeepLink(url);\n\n const params = await waitForCallback(id, this._config.timeoutMs);\n const parsed = parseCallbackParams(params) as SignCallbackParams;\n\n if (parsed.status === 'rejected') {\n throw new ZeroWalletUserRejectionError(parsed.error || 'User rejected signature.');\n }\n\n if (!parsed.signedTx) {\n throw new ZeroWalletSignTransactionError('No signed transaction returned.');\n }\n\n return deserializeTransaction(parsed.signedTx) as T;\n } catch (error: any) {\n this.emit('error', error);\n if (error instanceof ZeroWalletTimeoutError) {\n throw new WalletTimeoutError(error?.message, error);\n }\n throw new WalletSignTransactionError(error?.message, error);\n }\n }\n\n async signAllTransactions<T extends Transaction | VersionedTransaction>(transactions: T[]): Promise<T[]> {\n try {\n if (!this.connected) throw new WalletDisconnectedError();\n\n const id = generateCallbackId();\n const serializedTxs = transactions.map((t: T) => serializeTransaction(t));\n const url = buildSignAllUrl(serializedTxs, this._config.callbackUrl!, id, this._config.network);\n\n openDeepLink(url);\n\n const params = await waitForCallback(id, this._config.timeoutMs);\n const parsed = parseCallbackParams(params) as SignCallbackParams;\n\n if (parsed.status === 'rejected') {\n throw new ZeroWalletUserRejectionError(parsed.error || 'User rejected signature.');\n }\n\n if (!parsed.signedTxs || parsed.signedTxs.length !== transactions.length) {\n throw new ZeroWalletSignTransactionError('Invalid number of signed transactions returned.');\n }\n\n return parsed.signedTxs.map(t => deserializeTransaction(t) as T);\n } catch (error: any) {\n this.emit('error', error);\n if (error instanceof ZeroWalletTimeoutError) {\n throw new WalletTimeoutError(error?.message, error);\n }\n throw new WalletSignTransactionError(error?.message, error);\n }\n }\n\n async signMessage(message: Uint8Array): Promise<Uint8Array> {\n try {\n if (!this.connected || !this.publicKey) throw new WalletDisconnectedError();\n\n const id = generateCallbackId();\n const serializedMessage = serializeMessage(message);\n const url = buildSignMessageUrl(serializedMessage, this._config.callbackUrl!, id);\n\n openDeepLink(url);\n\n const params = await waitForCallback(id, this._config.timeoutMs);\n const parsed = parseCallbackParams(params) as SignCallbackParams;\n\n if (parsed.status === 'rejected') {\n throw new ZeroWalletUserRejectionError(parsed.error || 'User rejected signature.');\n }\n\n if (!parsed.signature) {\n throw new ZeroWalletSignMessageError('No signature returned.');\n }\n\n return deserializeSignature(parsed.signature);\n } catch (error: any) {\n this.emit('error', error);\n if (error instanceof ZeroWalletTimeoutError) {\n throw new WalletTimeoutError(error?.message, error);\n }\n throw new WalletSignMessageError(error?.message, error);\n }\n }\n}\n","import { SolanaSignAndSendTransactionFeature, SolanaSignAndSendTransactionMethod, SolanaSignMessageFeature, SolanaSignMessageMethod, SolanaSignTransactionFeature, SolanaSignTransactionMethod } from '@solana/wallet-standard-features';\nimport { Wallet, WalletAccount, WalletIcon } from '@wallet-standard/core';\nimport { ZeroWalletAdapter, ZeroWalletIcon, ZeroWalletName } from './adapter';\nimport { PublicKey, Transaction } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { StandardConnectFeature, StandardConnectMethod, StandardDisconnectFeature, StandardDisconnectMethod, StandardEventsFeature, StandardEventsListeners, StandardEventsNames, StandardEventsOnMethod } from '@wallet-standard/features';\n\nexport interface ZeroWalletWindowStandard extends Window {\n zerowallet?: {\n isZeroWallet?: boolean;\n };\n}\n\nexport type ZeroWalletFeature = StandardConnectFeature &\n StandardDisconnectFeature &\n StandardEventsFeature &\n SolanaSignTransactionFeature &\n SolanaSignAndSendTransactionFeature &\n SolanaSignMessageFeature;\n\nexport class ZeroWalletStandardWallet implements Wallet {\n readonly #adapter: ZeroWalletAdapter;\n readonly #listeners: { [E in StandardEventsNames]?: StandardEventsListeners[E][] } = {};\n readonly #version = '1.0.0' as const;\n\n get version() {\n return this.#version;\n }\n\n get name() {\n return ZeroWalletName;\n }\n\n get icon(): WalletIcon {\n return ZeroWalletIcon as WalletIcon;\n }\n\n get chains() {\n return ['solana:mainnet', 'solana:devnet', 'solana:testnet'] as const;\n }\n\n get features(): ZeroWalletFeature {\n return {\n 'standard:connect': {\n version: '1.0.0',\n connect: this.#connect,\n },\n 'standard:disconnect': {\n version: '1.0.0',\n disconnect: this.#disconnect,\n },\n 'standard:events': {\n version: '1.0.0',\n on: this.#on,\n },\n 'solana:signTransaction': {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signTransaction: this.#signTransaction,\n },\n 'solana:signAndSendTransaction': {\n version: '1.0.0',\n supportedTransactionVersions: ['legacy', 0],\n signAndSendTransaction: this.#signAndSendTransaction,\n },\n 'solana:signMessage': {\n version: '1.0.0',\n signMessage: this.#signMessage,\n },\n };\n }\n\n get accounts() {\n return this.#adapter.publicKey ? [new ZeroWalletStandardAccount(this.#adapter.publicKey)] : [];\n }\n\n constructor(adapter: ZeroWalletAdapter) {\n this.#adapter = adapter;\n this.#adapter.on('connect', this.#emit.bind(this, 'change', { accounts: this.accounts }));\n this.#adapter.on('disconnect', this.#emit.bind(this, 'change', { accounts: this.accounts }));\n }\n\n #connect: StandardConnectMethod = async ({ silent } = {}) => {\n if (!this.#adapter.connected) {\n await this.#adapter.connect();\n }\n return { accounts: this.accounts };\n };\n\n #disconnect: StandardDisconnectMethod = async () => {\n await this.#adapter.disconnect();\n };\n\n #on: StandardEventsOnMethod = (event, listener) => {\n this.#listeners[event]?.push(listener) || (this.#listeners[event] = [listener]);\n return (): void => this.#off(event, listener);\n };\n\n #emit<E extends StandardEventsNames>(event: E, ...args: Parameters<StandardEventsListeners[E]>): void {\n // eslint-disable-next-line prefer-spread\n this.#listeners[event]?.forEach((listener) => listener.apply(null, args));\n }\n\n #off<E extends StandardEventsNames>(event: E, listener: StandardEventsListeners[E]): void {\n this.#listeners[event] = this.#listeners[event]?.filter((existingListener) => listener !== existingListener);\n }\n\n #signTransaction: SolanaSignTransactionMethod = async (...inputs) => {\n if (!this.#adapter.connected) throw new Error('Not connected');\n const signedTxs = [];\n for (const input of inputs) {\n const tx = Transaction.from(input.transaction); // Using legacy for simplicity in standard adapter interface as fallback\n const signed = await this.#adapter.signTransaction(tx);\n signedTxs.push({ signedTransaction: signed.serialize() });\n }\n return signedTxs;\n };\n\n #signAndSendTransaction: SolanaSignAndSendTransactionMethod = async (...inputs) => {\n if (!this.#adapter.connected) throw new Error('Not connected');\n throw new Error('signAndSendTransaction not fully implemented in standard adapter wrapper for Zero Wallet deep link yet.');\n };\n\n #signMessage: SolanaSignMessageMethod = async (...inputs) => {\n if (!this.#adapter.connected) throw new Error('Not connected');\n const signatures = [];\n for (const input of inputs) {\n const signature = await this.#adapter.signMessage(input.message);\n signatures.push({ signedMessage: input.message, signature });\n }\n return signatures;\n };\n}\n\nexport class ZeroWalletStandardAccount implements WalletAccount {\n readonly #publicKey: PublicKey;\n\n get address() {\n return this.#publicKey.toBase58();\n }\n\n get publicKey() {\n return this.#publicKey.toBytes();\n }\n\n get chains() {\n return ['solana:mainnet', 'solana:devnet', 'solana:testnet'] as const;\n }\n\n get features() {\n return ['solana:signTransaction', 'solana:signAndSendTransaction', 'solana:signMessage'] as const;\n }\n\n constructor(publicKey: PublicKey) {\n this.#publicKey = publicKey;\n }\n}\n\n/**\n * Registers the ZeroWallet in the Wallet Standard modal ecosystem.\n */\nexport function registerWalletStandard(adapter: ZeroWalletAdapter): void {\n if (typeof window === 'undefined') return;\n\n try {\n const wallet = new ZeroWalletStandardWallet(adapter);\n const { registerWallet } = require('@wallet-standard/wallet') as typeof import('@wallet-standard/wallet');\n registerWallet(wallet);\n } catch (error) {\n console.error('ZeroWallet: Failed to register wallet standard', error);\n }\n}\n"]}
|