@wallet-ui/react-native-kit 3.3.0 → 4.0.0-canary-20260304112557
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.browser.cjs +28 -9
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.mjs +25 -6
- package/dist/index.browser.mjs.map +1 -1
- package/dist/index.native.mjs +25 -6
- package/dist/index.native.mjs.map +1 -1
- package/dist/index.node.cjs +28 -9
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +25 -6
- package/dist/index.node.mjs.map +1 -1
- package/dist/types/convert-sign-in-result.d.ts +11 -0
- package/dist/types/convert-sign-in-result.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/use-authorization.d.ts +2 -6
- package/dist/types/use-authorization.d.ts.map +1 -1
- package/dist/types/use-mobile-wallet.d.ts +2 -1
- package/dist/types/use-mobile-wallet.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/index.browser.cjs
CHANGED
|
@@ -5,9 +5,9 @@ var AsyncStorage = require('@react-native-async-storage/async-storage');
|
|
|
5
5
|
var kit = require('@solana/kit');
|
|
6
6
|
var nanostores = require('nanostores');
|
|
7
7
|
var mobileWalletAdapterProtocol = require('@solana-mobile/mobile-wallet-adapter-protocol');
|
|
8
|
+
var core = require('@wallet-ui/core');
|
|
8
9
|
var react = require('@nanostores/react');
|
|
9
10
|
var mobileWalletAdapterProtocolKit = require('@solana-mobile/mobile-wallet-adapter-protocol-kit');
|
|
10
|
-
var core = require('@wallet-ui/core');
|
|
11
11
|
var jsBase64 = require('js-base64');
|
|
12
12
|
|
|
13
13
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -120,6 +120,16 @@ function MobileWalletProvider({
|
|
|
120
120
|
children
|
|
121
121
|
);
|
|
122
122
|
}
|
|
123
|
+
function convertSignInResult({
|
|
124
|
+
account,
|
|
125
|
+
signInResult
|
|
126
|
+
}) {
|
|
127
|
+
return {
|
|
128
|
+
account,
|
|
129
|
+
signature: core.stringToUint8Array(signInResult.signature),
|
|
130
|
+
signedMessage: core.stringToUint8Array(signInResult.signed_message)
|
|
131
|
+
};
|
|
132
|
+
}
|
|
123
133
|
|
|
124
134
|
// src/ellipsify.ts
|
|
125
135
|
function ellipsify(str = "", len = 4, delimiter = "..") {
|
|
@@ -214,21 +224,29 @@ function useAuthorization({ chain, identity, store }) {
|
|
|
214
224
|
const authorizeSessionWithSignIn = React.useCallback(
|
|
215
225
|
async (wallet, signInPayload) => {
|
|
216
226
|
try {
|
|
217
|
-
const
|
|
227
|
+
const result = await wallet.authorize({
|
|
218
228
|
auth_token: authToken,
|
|
219
229
|
chain,
|
|
220
230
|
identity,
|
|
221
231
|
sign_in_payload: signInPayload
|
|
222
232
|
});
|
|
223
|
-
|
|
233
|
+
const { selectedAccount: account } = await handleAuthorizationResult(result);
|
|
234
|
+
if (!result.sign_in_result) {
|
|
235
|
+
throw new Error("Sign in result not retrieved.");
|
|
236
|
+
}
|
|
237
|
+
return convertSignInResult({ account, signInResult: result.sign_in_result });
|
|
224
238
|
} catch (error) {
|
|
225
239
|
if (error instanceof mobileWalletAdapterProtocol.SolanaMobileWalletAdapterProtocolError && error.code === mobileWalletAdapterProtocol.SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED) {
|
|
226
|
-
const
|
|
240
|
+
const result = await wallet.authorize({
|
|
227
241
|
chain,
|
|
228
242
|
identity,
|
|
229
243
|
sign_in_payload: signInPayload
|
|
230
244
|
});
|
|
231
|
-
|
|
245
|
+
if (!result.sign_in_result) {
|
|
246
|
+
throw new Error("Sign in result not retrieved.", { cause: error });
|
|
247
|
+
}
|
|
248
|
+
const { selectedAccount: account } = await handleAuthorizationResult(result);
|
|
249
|
+
return convertSignInResult({ account, signInResult: result.sign_in_result });
|
|
232
250
|
}
|
|
233
251
|
throw error;
|
|
234
252
|
}
|
|
@@ -403,20 +421,21 @@ Object.defineProperty(exports, "toUint8Array", {
|
|
|
403
421
|
});
|
|
404
422
|
exports.MobileWalletProvider = MobileWalletProvider;
|
|
405
423
|
exports.MobileWalletProviderContext = MobileWalletProviderContext;
|
|
424
|
+
exports.convertSignInResult = convertSignInResult;
|
|
406
425
|
exports.createAuthorizationStore = createAuthorizationStore;
|
|
407
426
|
exports.createDefaultClient = createDefaultClient;
|
|
408
427
|
exports.useAuthorization = useAuthorization;
|
|
409
428
|
exports.useMobileWallet = useMobileWallet;
|
|
410
|
-
Object.keys(
|
|
429
|
+
Object.keys(core).forEach(function (k) {
|
|
411
430
|
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
412
431
|
enumerable: true,
|
|
413
|
-
get: function () { return
|
|
432
|
+
get: function () { return core[k]; }
|
|
414
433
|
});
|
|
415
434
|
});
|
|
416
|
-
Object.keys(
|
|
435
|
+
Object.keys(mobileWalletAdapterProtocolKit).forEach(function (k) {
|
|
417
436
|
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
418
437
|
enumerable: true,
|
|
419
|
-
get: function () { return
|
|
438
|
+
get: function () { return mobileWalletAdapterProtocolKit[k]; }
|
|
420
439
|
});
|
|
421
440
|
});
|
|
422
441
|
//# sourceMappingURL=index.browser.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/create-default-client.tsx","../src/mobile-wallet-provider.tsx","../src/ellipsify.ts","../src/get-address-from-base64.ts","../src/get-account-from-authorized-account.ts","../src/get-authorization-from-authorization-result.ts","../src/use-authorization-store.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["address","AsyncStorage","atom","computed","createSolanaRpc","createSolanaRpcSubscriptions","createContext","useMemo","useRef","useEffect","React","getBase64Encoder","getAddressCodec","useStore","useCallback","SolanaMobileWalletAdapterProtocolError","SolanaMobileWalletAdapterProtocolErrorCode","getBase58Decoder","useContext","transact","pipe","createTransactionMessage","appendTransactionMessageInstructions","setTransactionMessageFeePayerSigner","setTransactionMessageLifetimeUsingBlockhash","signAndSendTransactionMessageWithSigners"],"mappings":"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","file":"index.browser.cjs","sourcesContent":["import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { address } from '@solana/kit';\n\nimport { Cache } from './cache';\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'address' && typeof value === 'string') {\n return address(value);\n } else {\n return value;\n }\n}\n\nexport class AsyncStorageCache<T> implements Cache<T> {\n constructor(private readonly storageKey: string) {}\n\n async clear(): Promise<void> {\n await AsyncStorage.removeItem(this.storageKey);\n }\n\n async get(): Promise<T | undefined> {\n const cacheFetchResult = await AsyncStorage.getItem(this.storageKey);\n if (!cacheFetchResult) {\n return undefined;\n }\n try {\n return JSON.parse(cacheFetchResult, cacheReviver) as T;\n } catch (error) {\n console.warn(`Failed to parse cached data for key ${this.storageKey}:`, error);\n return undefined;\n }\n }\n\n async set(value: T): Promise<void> {\n await AsyncStorage.setItem(this.storageKey, JSON.stringify(value));\n }\n}\n\nexport function createAsyncStorageCache<T>(storageKey = 'authorization-cache') {\n return new AsyncStorageCache<T>(storageKey);\n}\n","import { atom, computed } from 'nanostores';\n\nimport { Cache } from './cache';\nimport { WalletAuthorization } from './use-authorization';\n\nexport type AuthorizationStoreContext = {\n cache: Cache<WalletAuthorization | undefined>;\n};\n\nexport function createAuthorizationStore(context: AuthorizationStoreContext) {\n const { cache } = context;\n\n const $authorization = atom<WalletAuthorization | null>(null);\n\n const $accounts = computed($authorization, auth => auth?.accounts ?? null);\n const $authToken = computed($authorization, auth => auth?.authToken);\n const $selectedAccount = computed($authorization, auth => auth?.selectedAccount);\n\n async function fetch(): Promise<WalletAuthorization | null> {\n const result = await cache.get();\n const auth = result ?? null;\n $authorization.set(auth);\n return auth;\n }\n\n async function persist(auth: WalletAuthorization | null): Promise<void> {\n if (auth) {\n await cache.set(auth);\n } else {\n await cache.clear();\n }\n $authorization.set(auth);\n }\n\n return {\n $accounts,\n $authToken,\n $selectedAccount,\n fetch,\n persist,\n };\n}\n\nexport type AuthorizationStore = ReturnType<typeof createAuthorizationStore>;\n","import { createSolanaRpc, createSolanaRpcSubscriptions } from '@solana/kit';\n\nimport { Client } from './client';\n\nexport function createDefaultClient(cluster: { url: string; urlWs?: string }): Client {\n const rpc = createSolanaRpc(cluster.url);\n const rpcSubscriptionsUrl = cluster.urlWs ?? cluster.url.replace(/^http/, 'ws');\n const rpcSubscriptions = createSolanaRpcSubscriptions(rpcSubscriptionsUrl);\n return { rpc, rpcSubscriptions };\n}\n","import { AppIdentity } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { SolanaCluster } from '@wallet-ui/core';\nimport React, { createContext, type ReactNode, useEffect, useMemo, useRef } from 'react';\n\nimport { createAsyncStorageCache } from './async-storage-cache';\nimport { AuthorizationStore, createAuthorizationStore } from './authorization-store';\nimport { Client } from './client';\nimport { createDefaultClient } from './create-default-client';\nimport { WalletAuthorization, WalletAuthorizationCache, WalletAuthorizationProps } from './use-authorization';\n\nexport interface MobileWalletProviderProps {\n cache?: WalletAuthorizationCache;\n children: ReactNode;\n cluster: Pick<SolanaCluster, 'id' | 'url' | 'urlWs'>;\n createClient?: (cluster: { url: string; urlWs?: string }) => Client;\n identity: AppIdentity;\n}\nexport interface MobileWalletProviderState extends WalletAuthorizationProps {\n client: Client;\n store: AuthorizationStore;\n}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\n cache: userCache,\n children,\n cluster,\n createClient = createDefaultClient,\n identity,\n}: MobileWalletProviderProps) {\n const cache = useMemo(() => userCache ?? createAsyncStorageCache<WalletAuthorization>(), [userCache]);\n const client = useMemo(() => createClient(cluster), [createClient, cluster]);\n\n const storeRef = useRef<AuthorizationStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = createAuthorizationStore({ cache });\n }\n const store = storeRef.current;\n\n useEffect(() => {\n store.fetch().catch(console.error);\n }, [store]);\n\n return (\n <MobileWalletProviderContext.Provider\n value={useMemo(\n () => ({\n cache,\n chain: cluster.id,\n client,\n identity,\n store,\n }),\n [cache, cluster.id, client, identity, store],\n )}\n >\n {children}\n </MobileWalletProviderContext.Provider>\n );\n}\n","export function ellipsify(str = '', len = 4, delimiter = '..') {\n const limit = len * 2 + delimiter.length;\n\n return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;\n}\n","import { Address, getAddressCodec, getBase64Encoder } from '@solana/kit';\nimport { Base64EncodedAddress } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nexport function getAddressFromBase64(encoded: Base64EncodedAddress): Address {\n const decoded = getBase64Encoder().encode(encoded);\n\n return getAddressCodec().decode(decoded);\n}\n","import { Account as AuthorizedAccount } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { ellipsify } from './ellipsify';\nimport { getAddressFromBase64 } from './get-address-from-base64';\nimport { Account } from './use-authorization';\n\nexport function getAccountFromAuthorizedAccount(account: AuthorizedAccount): Account {\n const address = getAddressFromBase64(account.address);\n\n return {\n address,\n addressBase64: account.address,\n icon: account.icon,\n label: account.label ?? ellipsify(address.toString(), 8),\n };\n}\n","import { AuthorizationResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getAccountFromAuthorizedAccount } from './get-account-from-authorized-account';\nimport { Account, WalletAuthorization } from './use-authorization';\n\nexport function getAuthorizationFromAuthorizationResult(\n authorizationResult: AuthorizationResult,\n previouslySelectedAccount?: Account,\n): WalletAuthorization {\n let selectedAccount: Account;\n if (\n // We have yet to select an account.\n previouslySelectedAccount == null ||\n // The previously selected account is no longer in the set of authorized addresses.\n !authorizationResult.accounts.some(({ address }) => address === previouslySelectedAccount.addressBase64)\n ) {\n const firstAccount = authorizationResult.accounts[0];\n selectedAccount = getAccountFromAuthorizedAccount(firstAccount);\n } else {\n selectedAccount = previouslySelectedAccount;\n }\n return {\n accounts: authorizationResult.accounts.map(getAccountFromAuthorizedAccount),\n authToken: authorizationResult.auth_token,\n selectedAccount,\n };\n}\n","import { useStore } from '@nanostores/react';\nimport { useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\n\nexport function useAuthorizationStore({ store }: { store: AuthorizationStore }) {\n const accounts = useStore(store.$accounts);\n const authToken = useStore(store.$authToken);\n const selectedAccount = useStore(store.$selectedAccount);\n\n return useMemo(\n () => ({\n accounts,\n authToken,\n persist: store.persist,\n selectedAccount,\n }),\n [accounts, authToken, store.persist, selectedAccount],\n );\n}\n","import { Address } from '@solana/kit';\nimport {\n AppIdentity,\n AuthorizationResult,\n AuthorizeAPI,\n AuthToken,\n Base64EncodedAddress,\n Chain,\n DeauthorizeAPI,\n SignInPayload,\n SolanaMobileWalletAdapterProtocolError,\n SolanaMobileWalletAdapterProtocolErrorCode,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\nimport { Cache } from './cache';\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useAuthorizationStore } from './use-authorization-store';\n\nexport type Account = Readonly<{\n address: Address;\n addressBase64: Base64EncodedAddress;\n icon?: WalletIcon;\n label?: string;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\nexport type WalletAuthorizationCache = Cache<WalletAuthorization | undefined>;\nexport type WalletAuthorizationProps = Readonly<{\n cache?: WalletAuthorizationCache;\n chain: Chain;\n identity: AppIdentity;\n store: AuthorizationStore;\n}>;\nexport function useAuthorization({ chain, identity, store }: WalletAuthorizationProps) {\n const { accounts, authToken, persist, selectedAccount } = useAuthorizationStore({\n store,\n });\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(authorizationResult, selectedAccount);\n await persist(nextAuthorization);\n return nextAuthorization;\n },\n [selectedAccount, persist],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: authToken });\n await persist(null);\n },\n [authToken, persist],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await persist(null);\n }, [persist]);\n\n return useMemo(\n () => ({\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n }),\n [\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n ],\n );\n}\n","import {\n Address,\n appendTransactionMessageInstructions,\n createTransactionMessage,\n getBase58Decoder,\n Instruction,\n pipe,\n setTransactionMessageFeePayerSigner,\n setTransactionMessageLifetimeUsingBlockhash,\n signAndSendTransactionMessageWithSigners,\n Transaction,\n TransactionSendingSigner,\n} from '@solana/kit';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-kit';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { TransactionSignatures } from './types';\nimport { Account, useAuthorization } from './use-authorization';\n\nconst decoder = getBase58Decoder();\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const {\n authorizeSessionWithSignIn,\n authorizeSession,\n deauthorizeSessions,\n selectedAccount,\n accounts,\n deauthorizeSession,\n } = useAuthorization(ctx);\n\n const connect = useCallback(\n async (): Promise<Account> => await transact(async wallet => await authorizeSession(wallet)),\n [authorizeSession],\n );\n\n const connectAnd = useCallback(\n async (cb: (wallet: AuthorizeAPI) => Promise<Account | void>): Promise<Account | void> => {\n return await transact(async wallet => await cb(wallet));\n },\n [],\n );\n\n const signIn = useCallback(\n async (signInPayload: SignInPayload): Promise<Account> =>\n await transact(async wallet => await authorizeSessionWithSignIn(wallet, signInPayload)),\n [authorizeSessionWithSignIn],\n );\n\n const disconnect = useCallback(async (): Promise<void> => await deauthorizeSessions(), [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async <T extends Transaction | Transaction[]>(\n transaction: T,\n minContextSlot: bigint,\n ): Promise<TransactionSignatures<T>> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const isTransactionsArray = Array.isArray(transaction);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot: Number(minContextSlot),\n transactions: isTransactionsArray ? transaction : [transaction],\n });\n\n return isTransactionsArray\n ? (signatures as TransactionSignatures<T>)\n : (signatures[0] as TransactionSignatures<T>);\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async <K extends Uint8Array | Uint8Array[]>(message: K): Promise<K> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const payloads: Uint8Array[] = Array.isArray(message) ? message : [message];\n const signed = await wallet.signMessages({\n addresses: payloads.map(() => authResult.addressBase64),\n payloads,\n });\n return (Array.isArray(message) ? signed : signed[0]) as K;\n }),\n [authorizeSession],\n );\n\n const signTransaction = useCallback(\n async <T extends Transaction | Transaction[]>(transaction: T): Promise<T> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signedTxs = await wallet.signTransactions({\n transactions: Array.isArray(transaction) ? transaction : [transaction],\n });\n return Array.isArray(transaction) ? signedTxs : signedTxs[0];\n }),\n\n [authorizeSession],\n );\n\n const getTransactionSigner = useCallback(\n (address: Address, minContextSlot: bigint): TransactionSendingSigner => {\n return {\n address,\n signAndSendTransactions: async (transactions: Transaction[]) => {\n return await signAndSendTransaction(transactions, minContextSlot);\n },\n };\n },\n [signAndSendTransaction],\n );\n\n const sendTransaction = useCallback(\n async (instructions: Instruction[]) => {\n if (!selectedAccount) {\n throw new Error('No account selected');\n }\n const {\n context: { slot: minContextSlot },\n value: latestBlockhash,\n } = await ctx.client.rpc.getLatestBlockhash().send();\n\n const signer = getTransactionSigner(selectedAccount.address, minContextSlot);\n\n const transactionMessage = pipe(\n createTransactionMessage({ version: 0 }),\n tx => appendTransactionMessageInstructions(instructions, tx),\n tx => setTransactionMessageFeePayerSigner(signer, tx),\n tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n );\n\n const signatureBytes = await signAndSendTransactionMessageWithSigners(transactionMessage);\n return decoder.decode(signatureBytes);\n },\n [ctx.client.rpc, getTransactionSigner, selectedAccount],\n );\n\n return useMemo(\n () => ({\n ...ctx,\n account: selectedAccount,\n accounts,\n connect,\n connectAnd,\n deauthorizeSession,\n disconnect,\n getTransactionSigner,\n sendTransaction,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n }),\n [\n accounts,\n connect,\n connectAnd,\n ctx,\n deauthorizeSession,\n disconnect,\n getTransactionSigner,\n selectedAccount,\n sendTransaction,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n ],\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/create-default-client.tsx","../src/mobile-wallet-provider.tsx","../src/convert-sign-in-result.ts","../src/ellipsify.ts","../src/get-address-from-base64.ts","../src/get-account-from-authorized-account.ts","../src/get-authorization-from-authorization-result.ts","../src/use-authorization-store.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["address","AsyncStorage","atom","computed","createSolanaRpc","createSolanaRpcSubscriptions","createContext","useMemo","useRef","useEffect","React","stringToUint8Array","getBase64Encoder","getAddressCodec","useStore","useCallback","SolanaMobileWalletAdapterProtocolError","SolanaMobileWalletAdapterProtocolErrorCode","getBase58Decoder","useContext","transact","pipe","createTransactionMessage","appendTransactionMessageInstructions","setTransactionMessageFeePayerSigner","setTransactionMessageLifetimeUsingBlockhash","signAndSendTransactionMessageWithSigners"],"mappings":";;;;;;;;;;;;;;;;;;AAKA,SAAS,YAAA,CAAa,KAAa,KAAA,EAAgB;AAC/C,EAAA,IAAI,GAAA,KAAQ,SAAA,IAAa,OAAO,KAAA,KAAU,QAAA,EAAU;AAChD,IAAA,OAAOA,YAAQ,KAAK,CAAA;AAAA,EACxB,CAAA,MAAO;AACH,IAAA,OAAO,KAAA;AAAA,EACX;AACJ;AAEO,IAAM,oBAAN,MAA+C;AAAA,EAClD,YAA6B,UAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAAA,EAAqB;AAAA,EAElD,MAAM,KAAA,GAAuB;AACzB,IAAA,MAAMC,6BAAA,CAAa,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA;AAAA,EACjD;AAAA,EAEA,MAAM,GAAA,GAA8B;AAChC,IAAA,MAAM,gBAAA,GAAmB,MAAMA,6BAAA,CAAa,OAAA,CAAQ,KAAK,UAAU,CAAA;AACnE,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACnB,MAAA,OAAO,MAAA;AAAA,IACX;AACA,IAAA,IAAI;AACA,MAAA,OAAO,IAAA,CAAK,KAAA,CAAM,gBAAA,EAAkB,YAAY,CAAA;AAAA,IACpD,SAAS,KAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,oCAAA,EAAuC,IAAA,CAAK,UAAU,KAAK,KAAK,CAAA;AAC7E,MAAA,OAAO,MAAA;AAAA,IACX;AAAA,EACJ;AAAA,EAEA,MAAM,IAAI,KAAA,EAAyB;AAC/B,IAAA,MAAMA,8BAAa,OAAA,CAAQ,IAAA,CAAK,YAAY,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAAA,EACrE;AACJ,CAAA;AAEO,SAAS,uBAAA,CAA2B,aAAa,qBAAA,EAAuB;AAC3E,EAAA,OAAO,IAAI,kBAAqB,UAAU,CAAA;AAC9C;AC/BO,SAAS,yBAAyB,OAAA,EAAoC;AACzE,EAAA,MAAM,EAAE,OAAM,GAAI,OAAA;AAElB,EAAA,MAAM,cAAA,GAAiBC,gBAAiC,IAAI,CAAA;AAE5D,EAAA,MAAM,YAAYC,mBAAA,CAAS,cAAA,EAAgB,CAAA,IAAA,KAAQ,IAAA,EAAM,YAAY,IAAI,CAAA;AACzE,EAAA,MAAM,UAAA,GAAaA,mBAAA,CAAS,cAAA,EAAgB,CAAA,IAAA,KAAQ,MAAM,SAAS,CAAA;AACnE,EAAA,MAAM,gBAAA,GAAmBA,mBAAA,CAAS,cAAA,EAAgB,CAAA,IAAA,KAAQ,MAAM,eAAe,CAAA;AAE/E,EAAA,eAAe,KAAA,GAA6C;AACxD,IAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,GAAA,EAAI;AAC/B,IAAA,MAAM,OAAO,MAAA,IAAU,IAAA;AACvB,IAAA,cAAA,CAAe,IAAI,IAAI,CAAA;AACvB,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,eAAe,QAAQ,IAAA,EAAiD;AACpE,IAAA,IAAI,IAAA,EAAM;AACN,MAAA,MAAM,KAAA,CAAM,IAAI,IAAI,CAAA;AAAA,IACxB,CAAA,MAAO;AACH,MAAA,MAAM,MAAM,KAAA,EAAM;AAAA,IACtB;AACA,IAAA,cAAA,CAAe,IAAI,IAAI,CAAA;AAAA,EAC3B;AAEA,EAAA,OAAO;AAAA,IACH,SAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACJ;AACJ;ACrCO,SAAS,oBAAoB,OAAA,EAAkD;AAClF,EAAA,MAAM,GAAA,GAAMC,mBAAA,CAAgB,OAAA,CAAQ,GAAG,CAAA;AACvC,EAAA,MAAM,sBAAsB,OAAA,CAAQ,KAAA,IAAS,QAAQ,GAAA,CAAI,OAAA,CAAQ,SAAS,IAAI,CAAA;AAC9E,EAAA,MAAM,gBAAA,GAAmBC,iCAA6B,mBAAmB,CAAA;AACzE,EAAA,OAAO,EAAE,KAAK,gBAAA,EAAiB;AACnC;;;ACaO,IAAM,2BAAA,GAA8BC,mBAAA,CAAyC,EAA+B;AAC5G,SAAS,oBAAA,CAAqB;AAAA,EACjC,KAAA,EAAO,SAAA;AAAA,EACP,QAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA,GAAe,mBAAA;AAAA,EACf;AACJ,CAAA,EAA8B;AAC1B,EAAA,MAAM,KAAA,GAAQC,cAAQ,MAAM,SAAA,IAAa,yBAA6C,EAAG,CAAC,SAAS,CAAC,CAAA;AACpG,EAAA,MAAM,MAAA,GAASA,cAAQ,MAAM,YAAA,CAAa,OAAO,CAAA,EAAG,CAAC,YAAA,EAAc,OAAO,CAAC,CAAA;AAE3E,EAAA,MAAM,QAAA,GAAWC,aAAkC,IAAI,CAAA;AACvD,EAAA,IAAI,CAAC,SAAS,OAAA,EAAS;AACnB,IAAA,QAAA,CAAS,OAAA,GAAU,wBAAA,CAAyB,EAAE,KAAA,EAAO,CAAA;AAAA,EACzD;AACA,EAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AAEvB,EAAAC,eAAA,CAAU,MAAM;AACZ,IAAA,KAAA,CAAM,KAAA,EAAM,CAAE,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,EACrC,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,uBACIC,sBAAA,CAAA,aAAA;AAAA,IAAC,2BAAA,CAA4B,QAAA;AAAA,IAA5B;AAAA,MACG,KAAA,EAAOH,aAAA;AAAA,QACH,OAAO;AAAA,UACH,KAAA;AAAA,UACA,OAAO,OAAA,CAAQ,EAAA;AAAA,UACf,MAAA;AAAA,UACA,QAAA;AAAA,UACA;AAAA,SACJ,CAAA;AAAA,QACA,CAAC,KAAA,EAAO,OAAA,CAAQ,EAAA,EAAI,MAAA,EAAQ,UAAU,KAAK;AAAA;AAC/C,KAAA;AAAA,IAEC;AAAA,GACL;AAER;AChDO,SAAS,mBAAA,CAAoB;AAAA,EAChC,OAAA;AAAA,EACA;AACJ,CAAA,EAGiB;AACb,EAAA,OAAO;AAAA,IACH,OAAA;AAAA,IACA,SAAA,EAAWI,uBAAA,CAAmB,YAAA,CAAa,SAAS,CAAA;AAAA,IACpD,aAAA,EAAeA,uBAAA,CAAmB,YAAA,CAAa,cAAc;AAAA,GACjE;AACJ;;;ACvBO,SAAS,UAAU,GAAA,GAAM,EAAA,EAAI,GAAA,GAAM,CAAA,EAAG,YAAY,IAAA,EAAM;AAC3D,EAAA,MAAM,KAAA,GAAQ,GAAA,GAAM,CAAA,GAAI,SAAA,CAAU,MAAA;AAElC,EAAA,OAAO,GAAA,CAAI,MAAA,GAAS,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,GAAI,SAAA,GAAY,GAAA,CAAI,KAAA,CAAM,CAAC,GAAG,CAAA,GAAI,GAAA;AAClF;ACDO,SAAS,qBAAqB,OAAA,EAAwC;AACzE,EAAA,MAAM,OAAA,GAAUC,oBAAA,EAAiB,CAAE,MAAA,CAAO,OAAO,CAAA;AAEjD,EAAA,OAAOC,mBAAA,EAAgB,CAAE,MAAA,CAAO,OAAO,CAAA;AAC3C;;;ACDO,SAAS,gCAAgC,OAAA,EAAqC;AACjF,EAAA,MAAMb,QAAAA,GAAU,oBAAA,CAAqB,OAAA,CAAQ,OAAO,CAAA;AAEpD,EAAA,OAAO;AAAA,IACH,OAAA,EAAAA,QAAAA;AAAA,IACA,eAAe,OAAA,CAAQ,OAAA;AAAA,IACvB,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,OAAO,OAAA,CAAQ,KAAA,IAAS,UAAUA,QAAAA,CAAQ,QAAA,IAAY,CAAC;AAAA,GAC3D;AACJ;;;ACVO,SAAS,uCAAA,CACZ,qBACA,yBAAA,EACmB;AACnB,EAAA,IAAI,eAAA;AACJ,EAAA;AAAA;AAAA,IAEI,yBAAA,IAA6B,IAAA;AAAA,IAE7B,CAAC,mBAAA,CAAoB,QAAA,CAAS,IAAA,CAAK,CAAC,EAAE,OAAA,EAAAA,QAAAA,EAAQ,KAAMA,QAAAA,KAAY,yBAAA,CAA0B,aAAa;AAAA,IACzG;AACE,IAAA,MAAM,YAAA,GAAe,mBAAA,CAAoB,QAAA,CAAS,CAAC,CAAA;AACnD,IAAA,eAAA,GAAkB,gCAAgC,YAAY,CAAA;AAAA,EAClE,CAAA,MAAO;AACH,IAAA,eAAA,GAAkB,yBAAA;AAAA,EACtB;AACA,EAAA,OAAO;AAAA,IACH,QAAA,EAAU,mBAAA,CAAoB,QAAA,CAAS,GAAA,CAAI,+BAA+B,CAAA;AAAA,IAC1E,WAAW,mBAAA,CAAoB,UAAA;AAAA,IAC/B;AAAA,GACJ;AACJ;ACrBO,SAAS,qBAAA,CAAsB,EAAE,KAAA,EAAM,EAAkC;AAC5E,EAAA,MAAM,QAAA,GAAWc,cAAA,CAAS,KAAA,CAAM,SAAS,CAAA;AACzC,EAAA,MAAM,SAAA,GAAYA,cAAA,CAAS,KAAA,CAAM,UAAU,CAAA;AAC3C,EAAA,MAAM,eAAA,GAAkBA,cAAA,CAAS,KAAA,CAAM,gBAAgB,CAAA;AAEvD,EAAA,OAAOP,aAAAA;AAAA,IACH,OAAO;AAAA,MACH,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAS,KAAA,CAAM,OAAA;AAAA,MACf;AAAA,KACJ,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,SAAA,EAAW,KAAA,CAAM,SAAS,eAAe;AAAA,GACxD;AACJ;;;ACsBO,SAAS,gBAAA,CAAiB,EAAE,KAAA,EAAO,QAAA,EAAU,OAAM,EAA6B;AACnF,EAAA,MAAM,EAAE,QAAA,EAAU,SAAA,EAAW,OAAA,EAAS,eAAA,KAAoB,qBAAA,CAAsB;AAAA,IAC5E;AAAA,GACH,CAAA;AAED,EAAA,MAAM,yBAAA,GAA4BQ,iBAAA;AAAA,IAC9B,OAAO,mBAAA,KAA2E;AAC9E,MAAA,MAAM,iBAAA,GAAoB,uCAAA,CAAwC,mBAAA,EAAqB,eAAe,CAAA;AACtG,MAAA,MAAM,QAAQ,iBAAiB,CAAA;AAC/B,MAAA,OAAO,iBAAA;AAAA,IACX,CAAA;AAAA,IACA,CAAC,iBAAiB,OAAO;AAAA,GAC7B;AAEA,EAAA,MAAM,gBAAA,GAAmBA,iBAAA;AAAA,IACrB,OAAO,MAAA,KAAyB;AAC5B,MAAA,IAAI;AACA,QAAA,MAAM,mBAAA,GAAsB,MAAM,MAAA,CAAO,SAAA,CAAU;AAAA,UAC/C,UAAA,EAAY,SAAA;AAAA,UACZ,KAAA;AAAA,UACA;AAAA,SACH,CAAA;AACD,QAAA,OAAA,CAAQ,MAAM,yBAAA,CAA0B,mBAAmB,CAAA,EAAG,eAAA;AAAA,MAClE,SAAS,KAAA,EAAO;AACZ,QAAA,IACI,KAAA,YAAiBC,kEAAA,IACjB,KAAA,CAAM,IAAA,KAASC,uEAA2C,0BAAA,EAC5D;AACE,UAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,SAAA,CAAU;AAAA,YACvC,KAAA;AAAA,YACA;AAAA,WACH,CAAA;AACD,UAAA,OAAA,CAAQ,MAAM,yBAAA,CAA0B,WAAW,CAAA,EAAG,eAAA;AAAA,QAC1D;AACA,QAAA,MAAM,KAAA;AAAA,MACV;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,KAAA,EAAO,QAAA,EAAU,yBAAyB;AAAA,GAC1D;AAEA,EAAA,MAAM,0BAAA,GAA6BF,iBAAA;AAAA,IAC/B,OAAO,QAAsB,aAAA,KAAwD;AACjF,MAAA,IAAI;AACA,QAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,SAAA,CAAU;AAAA,UAClC,UAAA,EAAY,SAAA;AAAA,UACZ,KAAA;AAAA,UACA,QAAA;AAAA,UACA,eAAA,EAAiB;AAAA,SACpB,CAAA;AACD,QAAA,MAAM,EAAE,eAAA,EAAiB,OAAA,EAAQ,GAAI,MAAM,0BAA0B,MAAM,CAAA;AAE3E,QAAA,IAAI,CAAC,OAAO,cAAA,EAAgB;AACxB,UAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,QACnD;AACA,QAAA,OAAO,oBAAoB,EAAE,OAAA,EAAS,YAAA,EAAc,MAAA,CAAO,gBAAgB,CAAA;AAAA,MAC/E,SAAS,KAAA,EAAO;AACZ,QAAA,IACI,KAAA,YAAiBC,kEAAA,IACjB,KAAA,CAAM,IAAA,KAASC,uEAA2C,0BAAA,EAC5D;AACE,UAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,SAAA,CAAU;AAAA,YAClC,KAAA;AAAA,YACA,QAAA;AAAA,YACA,eAAA,EAAiB;AAAA,WACpB,CAAA;AACD,UAAA,IAAI,CAAC,OAAO,cAAA,EAAgB;AACxB,YAAA,MAAM,IAAI,KAAA,CAAM,+BAAA,EAAiC,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,UACrE;AACA,UAAA,MAAM,EAAE,eAAA,EAAiB,OAAA,EAAQ,GAAI,MAAM,0BAA0B,MAAM,CAAA;AAC3E,UAAA,OAAO,oBAAoB,EAAE,OAAA,EAAS,YAAA,EAAc,MAAA,CAAO,gBAAgB,CAAA;AAAA,QAC/E;AACA,QAAA,MAAM,KAAA;AAAA,MACV;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,KAAA,EAAO,QAAA,EAAU,yBAAyB;AAAA,GAC1D;AAEA,EAAA,MAAM,kBAAA,GAAqBF,iBAAA;AAAA,IACvB,OAAO,MAAA,KAA2B;AAC9B,MAAA,IAAI,aAAa,IAAA,EAAM;AACnB,QAAA;AAAA,MACJ;AACA,MAAA,MAAM,MAAA,CAAO,WAAA,CAAY,EAAE,UAAA,EAAY,WAAW,CAAA;AAClD,MAAA,MAAM,QAAQ,IAAI,CAAA;AAAA,IACtB,CAAA;AAAA,IACA,CAAC,WAAW,OAAO;AAAA,GACvB;AAEA,EAAA,MAAM,mBAAA,GAAsBA,kBAAY,YAAY;AAChD,IAAA,MAAM,QAAQ,IAAI,CAAA;AAAA,EACtB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAOR,aAAAA;AAAA,IACH,OAAO;AAAA,MACH,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,0BAAA;AAAA,MACA,kBAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA,KACJ,CAAA;AAAA,IACA;AAAA,MACI,QAAA;AAAA,MACA,gBAAA;AAAA,MACA,0BAAA;AAAA,MACA,kBAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA;AACJ,GACJ;AACJ;ACjIA,IAAM,UAAUW,oBAAA,EAAiB;AAC1B,SAAS,eAAA,GAAkB;AAC9B,EAAA,MAAM,GAAA,GAAMC,iBAAW,2BAA2B,CAAA;AAClD,EAAA,MAAM;AAAA,IACF,0BAAA;AAAA,IACA,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACJ,GAAI,iBAAiB,GAAG,CAAA;AAExB,EAAA,MAAM,OAAA,GAAUJ,iBAAAA;AAAA,IACZ,YAA8B,MAAMK,uCAAA,CAAS,OAAM,WAAU,MAAM,gBAAA,CAAiB,MAAM,CAAC,CAAA;AAAA,IAC3F,CAAC,gBAAgB;AAAA,GACrB;AAEA,EAAA,MAAM,UAAA,GAAaL,iBAAAA;AAAA,IACf,OAAO,EAAA,KAAmF;AACtF,MAAA,OAAO,MAAMK,uCAAA,CAAS,OAAM,WAAU,MAAM,EAAA,CAAG,MAAM,CAAC,CAAA;AAAA,IAC1D,CAAA;AAAA,IACA;AAAC,GACL;AAEA,EAAA,MAAM,MAAA,GAASL,iBAAAA;AAAA,IACX,OAAO,aAAA,KACH,MAAMK,uCAAA,CAAS,OAAM,WAAU,MAAM,0BAAA,CAA2B,MAAA,EAAQ,aAAa,CAAC,CAAA;AAAA,IAC1F,CAAC,0BAA0B;AAAA,GAC/B;AAEA,EAAA,MAAM,UAAA,GAAaL,kBAAY,YAA2B,MAAM,qBAAoB,EAAG,CAAC,mBAAmB,CAAC,CAAA;AAE5G,EAAA,MAAM,sBAAA,GAAyBA,iBAAAA;AAAA,IAC3B,OACI,WAAA,EACA,cAAA,KAEA,MAAMK,uCAAA,CAAS,OAAM,MAAA,KAAU;AAC3B,MAAA,MAAM,iBAAiB,MAAM,CAAA;AAC7B,MAAA,MAAM,mBAAA,GAAsB,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA;AACrD,MAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,uBAAA,CAAwB;AAAA,QACpD,cAAA,EAAgB,OAAO,cAAc,CAAA;AAAA,QACrC,YAAA,EAAc,mBAAA,GAAsB,WAAA,GAAc,CAAC,WAAW;AAAA,OACjE,CAAA;AAED,MAAA,OAAO,mBAAA,GACA,UAAA,GACA,UAAA,CAAW,CAAC,CAAA;AAAA,IACvB,CAAC,CAAA;AAAA,IACL,CAAC,gBAAgB;AAAA,GACrB;AAEA,EAAA,MAAM,WAAA,GAAcL,iBAAAA;AAAA,IAChB,OAA4C,OAAA,KACxC,MAAMK,uCAAA,CAAS,OAAM,MAAA,KAAU;AAC3B,MAAA,MAAM,UAAA,GAAa,MAAM,gBAAA,CAAiB,MAAM,CAAA;AAChD,MAAA,MAAM,WAAyB,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,OAAA,GAAU,CAAC,OAAO,CAAA;AAC1E,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,QACrC,SAAA,EAAW,QAAA,CAAS,GAAA,CAAI,MAAM,WAAW,aAAa,CAAA;AAAA,QACtD;AAAA,OACH,CAAA;AACD,MAAA,OAAQ,MAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,MAAA,GAAS,OAAO,CAAC,CAAA;AAAA,IACtD,CAAC,CAAA;AAAA,IACL,CAAC,gBAAgB;AAAA,GACrB;AAEA,EAAA,MAAM,eAAA,GAAkBL,iBAAAA;AAAA,IACpB,OAA8C,WAAA,KAC1C,MAAMK,uCAAA,CAAS,OAAM,MAAA,KAAU;AAC3B,MAAA,MAAM,iBAAiB,MAAM,CAAA;AAC7B,MAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,gBAAA,CAAiB;AAAA,QAC5C,cAAc,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,GAAI,WAAA,GAAc,CAAC,WAAW;AAAA,OACxE,CAAA;AACD,MAAA,OAAO,MAAM,OAAA,CAAQ,WAAW,CAAA,GAAI,SAAA,GAAY,UAAU,CAAC,CAAA;AAAA,IAC/D,CAAC,CAAA;AAAA,IAEL,CAAC,gBAAgB;AAAA,GACrB;AAEA,EAAA,MAAM,oBAAA,GAAuBL,iBAAAA;AAAA,IACzB,CAACf,UAAkB,cAAA,KAAqD;AACpE,MAAA,OAAO;AAAA,QACH,OAAA,EAAAA,QAAAA;AAAA,QACA,uBAAA,EAAyB,OAAO,YAAA,KAAgC;AAC5D,UAAA,OAAO,MAAM,sBAAA,CAAuB,YAAA,EAAc,cAAc,CAAA;AAAA,QACpE;AAAA,OACJ;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,sBAAsB;AAAA,GAC3B;AAEA,EAAA,MAAM,eAAA,GAAkBe,iBAAAA;AAAA,IACpB,OAAO,YAAA,KAAgC;AACnC,MAAA,IAAI,CAAC,eAAA,EAAiB;AAClB,QAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,MACzC;AACA,MAAA,MAAM;AAAA,QACF,OAAA,EAAS,EAAE,IAAA,EAAM,cAAA,EAAe;AAAA,QAChC,KAAA,EAAO;AAAA,UACP,MAAM,GAAA,CAAI,OAAO,GAAA,CAAI,kBAAA,GAAqB,IAAA,EAAK;AAEnD,MAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,eAAA,CAAgB,OAAA,EAAS,cAAc,CAAA;AAE3E,MAAA,MAAM,kBAAA,GAAqBM,QAAA;AAAA,QACvBC,4BAAA,CAAyB,EAAE,OAAA,EAAS,CAAA,EAAG,CAAA;AAAA,QACvC,CAAA,EAAA,KAAMC,wCAAA,CAAqC,YAAA,EAAc,EAAE,CAAA;AAAA,QAC3D,CAAA,EAAA,KAAMC,uCAAA,CAAoC,MAAA,EAAQ,EAAE,CAAA;AAAA,QACpD,CAAA,EAAA,KAAMC,+CAAA,CAA4C,eAAA,EAAiB,EAAE;AAAA,OACzE;AAEA,MAAA,MAAM,cAAA,GAAiB,MAAMC,4CAAA,CAAyC,kBAAkB,CAAA;AACxF,MAAA,OAAO,OAAA,CAAQ,OAAO,cAAc,CAAA;AAAA,IACxC,CAAA;AAAA,IACA,CAAC,GAAA,CAAI,MAAA,CAAO,GAAA,EAAK,sBAAsB,eAAe;AAAA,GAC1D;AAEA,EAAA,OAAOnB,aAAAA;AAAA,IACH,OAAO;AAAA,MACH,GAAG,GAAA;AAAA,MACH,OAAA,EAAS,eAAA;AAAA,MACT,QAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,kBAAA;AAAA,MACA,UAAA;AAAA,MACA,oBAAA;AAAA,MACA,eAAA;AAAA,MACA,sBAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACJ,CAAA;AAAA,IACA;AAAA,MACI,QAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,GAAA;AAAA,MACA,kBAAA;AAAA,MACA,UAAA;AAAA,MACA,oBAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAA;AAAA,MACA,sBAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA;AACJ,GACJ;AACJ","file":"index.browser.cjs","sourcesContent":["import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { address } from '@solana/kit';\n\nimport { Cache } from './cache';\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'address' && typeof value === 'string') {\n return address(value);\n } else {\n return value;\n }\n}\n\nexport class AsyncStorageCache<T> implements Cache<T> {\n constructor(private readonly storageKey: string) {}\n\n async clear(): Promise<void> {\n await AsyncStorage.removeItem(this.storageKey);\n }\n\n async get(): Promise<T | undefined> {\n const cacheFetchResult = await AsyncStorage.getItem(this.storageKey);\n if (!cacheFetchResult) {\n return undefined;\n }\n try {\n return JSON.parse(cacheFetchResult, cacheReviver) as T;\n } catch (error) {\n console.warn(`Failed to parse cached data for key ${this.storageKey}:`, error);\n return undefined;\n }\n }\n\n async set(value: T): Promise<void> {\n await AsyncStorage.setItem(this.storageKey, JSON.stringify(value));\n }\n}\n\nexport function createAsyncStorageCache<T>(storageKey = 'authorization-cache') {\n return new AsyncStorageCache<T>(storageKey);\n}\n","import { atom, computed } from 'nanostores';\n\nimport { Cache } from './cache';\nimport { WalletAuthorization } from './use-authorization';\n\nexport type AuthorizationStoreContext = {\n cache: Cache<WalletAuthorization | undefined>;\n};\n\nexport function createAuthorizationStore(context: AuthorizationStoreContext) {\n const { cache } = context;\n\n const $authorization = atom<WalletAuthorization | null>(null);\n\n const $accounts = computed($authorization, auth => auth?.accounts ?? null);\n const $authToken = computed($authorization, auth => auth?.authToken);\n const $selectedAccount = computed($authorization, auth => auth?.selectedAccount);\n\n async function fetch(): Promise<WalletAuthorization | null> {\n const result = await cache.get();\n const auth = result ?? null;\n $authorization.set(auth);\n return auth;\n }\n\n async function persist(auth: WalletAuthorization | null): Promise<void> {\n if (auth) {\n await cache.set(auth);\n } else {\n await cache.clear();\n }\n $authorization.set(auth);\n }\n\n return {\n $accounts,\n $authToken,\n $selectedAccount,\n fetch,\n persist,\n };\n}\n\nexport type AuthorizationStore = ReturnType<typeof createAuthorizationStore>;\n","import { createSolanaRpc, createSolanaRpcSubscriptions } from '@solana/kit';\n\nimport { Client } from './client';\n\nexport function createDefaultClient(cluster: { url: string; urlWs?: string }): Client {\n const rpc = createSolanaRpc(cluster.url);\n const rpcSubscriptionsUrl = cluster.urlWs ?? cluster.url.replace(/^http/, 'ws');\n const rpcSubscriptions = createSolanaRpcSubscriptions(rpcSubscriptionsUrl);\n return { rpc, rpcSubscriptions };\n}\n","import { AppIdentity } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { SolanaCluster } from '@wallet-ui/core';\nimport React, { createContext, type ReactNode, useEffect, useMemo, useRef } from 'react';\n\nimport { createAsyncStorageCache } from './async-storage-cache';\nimport { AuthorizationStore, createAuthorizationStore } from './authorization-store';\nimport { Client } from './client';\nimport { createDefaultClient } from './create-default-client';\nimport { WalletAuthorization, WalletAuthorizationCache, WalletAuthorizationProps } from './use-authorization';\n\nexport interface MobileWalletProviderProps {\n cache?: WalletAuthorizationCache;\n children: ReactNode;\n cluster: Pick<SolanaCluster, 'id' | 'url' | 'urlWs'>;\n createClient?: (cluster: { url: string; urlWs?: string }) => Client;\n identity: AppIdentity;\n}\nexport interface MobileWalletProviderState extends WalletAuthorizationProps {\n client: Client;\n store: AuthorizationStore;\n}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\n cache: userCache,\n children,\n cluster,\n createClient = createDefaultClient,\n identity,\n}: MobileWalletProviderProps) {\n const cache = useMemo(() => userCache ?? createAsyncStorageCache<WalletAuthorization>(), [userCache]);\n const client = useMemo(() => createClient(cluster), [createClient, cluster]);\n\n const storeRef = useRef<AuthorizationStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = createAuthorizationStore({ cache });\n }\n const store = storeRef.current;\n\n useEffect(() => {\n store.fetch().catch(console.error);\n }, [store]);\n\n return (\n <MobileWalletProviderContext.Provider\n value={useMemo(\n () => ({\n cache,\n chain: cluster.id,\n client,\n identity,\n store,\n }),\n [cache, cluster.id, client, identity, store],\n )}\n >\n {children}\n </MobileWalletProviderContext.Provider>\n );\n}\n","import { SolanaSignInOutput } from '@solana/wallet-standard-features';\nimport { SignInResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { stringToUint8Array } from '@wallet-ui/core';\n\nimport { Account } from './use-authorization';\n\nexport type SignInOutput = Omit<SolanaSignInOutput, 'account' | 'signatureType'> &\n Readonly<{\n account: Account;\n }>;\n\nexport function convertSignInResult({\n account,\n signInResult,\n}: {\n account: Account;\n signInResult: SignInResult;\n}): SignInOutput {\n return {\n account,\n signature: stringToUint8Array(signInResult.signature),\n signedMessage: stringToUint8Array(signInResult.signed_message),\n };\n}\n","export function ellipsify(str = '', len = 4, delimiter = '..') {\n const limit = len * 2 + delimiter.length;\n\n return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;\n}\n","import { Address, getAddressCodec, getBase64Encoder } from '@solana/kit';\nimport { Base64EncodedAddress } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nexport function getAddressFromBase64(encoded: Base64EncodedAddress): Address {\n const decoded = getBase64Encoder().encode(encoded);\n\n return getAddressCodec().decode(decoded);\n}\n","import { Account as AuthorizedAccount } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { ellipsify } from './ellipsify';\nimport { getAddressFromBase64 } from './get-address-from-base64';\nimport { Account } from './use-authorization';\n\nexport function getAccountFromAuthorizedAccount(account: AuthorizedAccount): Account {\n const address = getAddressFromBase64(account.address);\n\n return {\n address,\n addressBase64: account.address,\n icon: account.icon,\n label: account.label ?? ellipsify(address.toString(), 8),\n };\n}\n","import { AuthorizationResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getAccountFromAuthorizedAccount } from './get-account-from-authorized-account';\nimport { Account, WalletAuthorization } from './use-authorization';\n\nexport function getAuthorizationFromAuthorizationResult(\n authorizationResult: AuthorizationResult,\n previouslySelectedAccount?: Account,\n): WalletAuthorization {\n let selectedAccount: Account;\n if (\n // We have yet to select an account.\n previouslySelectedAccount == null ||\n // The previously selected account is no longer in the set of authorized addresses.\n !authorizationResult.accounts.some(({ address }) => address === previouslySelectedAccount.addressBase64)\n ) {\n const firstAccount = authorizationResult.accounts[0];\n selectedAccount = getAccountFromAuthorizedAccount(firstAccount);\n } else {\n selectedAccount = previouslySelectedAccount;\n }\n return {\n accounts: authorizationResult.accounts.map(getAccountFromAuthorizedAccount),\n authToken: authorizationResult.auth_token,\n selectedAccount,\n };\n}\n","import { useStore } from '@nanostores/react';\nimport { useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\n\nexport function useAuthorizationStore({ store }: { store: AuthorizationStore }) {\n const accounts = useStore(store.$accounts);\n const authToken = useStore(store.$authToken);\n const selectedAccount = useStore(store.$selectedAccount);\n\n return useMemo(\n () => ({\n accounts,\n authToken,\n persist: store.persist,\n selectedAccount,\n }),\n [accounts, authToken, store.persist, selectedAccount],\n );\n}\n","import { Address } from '@solana/kit';\nimport {\n AppIdentity,\n AuthorizationResult,\n AuthorizeAPI,\n AuthToken,\n Base64EncodedAddress,\n Chain,\n DeauthorizeAPI,\n SignInPayload,\n SolanaMobileWalletAdapterProtocolError,\n SolanaMobileWalletAdapterProtocolErrorCode,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\nimport { Cache } from './cache';\nimport { convertSignInResult, SignInOutput } from './convert-sign-in-result';\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useAuthorizationStore } from './use-authorization-store';\n\nexport type Account = Readonly<{\n address: Address;\n addressBase64: Base64EncodedAddress;\n icon?: WalletIcon;\n label?: string;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\nexport type WalletAuthorizationCache = Cache<WalletAuthorization | undefined>;\nexport type WalletAuthorizationProps = Readonly<{\n cache?: WalletAuthorizationCache;\n chain: Chain;\n identity: AppIdentity;\n store: AuthorizationStore;\n}>;\nexport function useAuthorization({ chain, identity, store }: WalletAuthorizationProps) {\n const { accounts, authToken, persist, selectedAccount } = useAuthorizationStore({\n store,\n });\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(authorizationResult, selectedAccount);\n await persist(nextAuthorization);\n return nextAuthorization;\n },\n [selectedAccount, persist],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload): Promise<SignInOutput> => {\n try {\n const result = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n const { selectedAccount: account } = await handleAuthorizationResult(result);\n\n if (!result.sign_in_result) {\n throw new Error('Sign in result not retrieved.');\n }\n return convertSignInResult({ account, signInResult: result.sign_in_result });\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const result = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n if (!result.sign_in_result) {\n throw new Error('Sign in result not retrieved.', { cause: error });\n }\n const { selectedAccount: account } = await handleAuthorizationResult(result);\n return convertSignInResult({ account, signInResult: result.sign_in_result });\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: authToken });\n await persist(null);\n },\n [authToken, persist],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await persist(null);\n }, [persist]);\n\n return useMemo(\n () => ({\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n }),\n [\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n ],\n );\n}\n","import {\n Address,\n appendTransactionMessageInstructions,\n createTransactionMessage,\n getBase58Decoder,\n Instruction,\n pipe,\n setTransactionMessageFeePayerSigner,\n setTransactionMessageLifetimeUsingBlockhash,\n signAndSendTransactionMessageWithSigners,\n Transaction,\n TransactionSendingSigner,\n} from '@solana/kit';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-kit';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { SignInOutput } from './convert-sign-in-result';\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { TransactionSignatures } from './types';\nimport { Account, useAuthorization } from './use-authorization';\n\nconst decoder = getBase58Decoder();\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const {\n authorizeSessionWithSignIn,\n authorizeSession,\n deauthorizeSessions,\n selectedAccount,\n accounts,\n deauthorizeSession,\n } = useAuthorization(ctx);\n\n const connect = useCallback(\n async (): Promise<Account> => await transact(async wallet => await authorizeSession(wallet)),\n [authorizeSession],\n );\n\n const connectAnd = useCallback(\n async (cb: (wallet: AuthorizeAPI) => Promise<Account | void>): Promise<Account | void> => {\n return await transact(async wallet => await cb(wallet));\n },\n [],\n );\n\n const signIn = useCallback(\n async (signInPayload: SignInPayload): Promise<SignInOutput> =>\n await transact(async wallet => await authorizeSessionWithSignIn(wallet, signInPayload)),\n [authorizeSessionWithSignIn],\n );\n\n const disconnect = useCallback(async (): Promise<void> => await deauthorizeSessions(), [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async <T extends Transaction | Transaction[]>(\n transaction: T,\n minContextSlot: bigint,\n ): Promise<TransactionSignatures<T>> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const isTransactionsArray = Array.isArray(transaction);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot: Number(minContextSlot),\n transactions: isTransactionsArray ? transaction : [transaction],\n });\n\n return isTransactionsArray\n ? (signatures as TransactionSignatures<T>)\n : (signatures[0] as TransactionSignatures<T>);\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async <K extends Uint8Array | Uint8Array[]>(message: K): Promise<K> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const payloads: Uint8Array[] = Array.isArray(message) ? message : [message];\n const signed = await wallet.signMessages({\n addresses: payloads.map(() => authResult.addressBase64),\n payloads,\n });\n return (Array.isArray(message) ? signed : signed[0]) as K;\n }),\n [authorizeSession],\n );\n\n const signTransaction = useCallback(\n async <T extends Transaction | Transaction[]>(transaction: T): Promise<T> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signedTxs = await wallet.signTransactions({\n transactions: Array.isArray(transaction) ? transaction : [transaction],\n });\n return Array.isArray(transaction) ? signedTxs : signedTxs[0];\n }),\n\n [authorizeSession],\n );\n\n const getTransactionSigner = useCallback(\n (address: Address, minContextSlot: bigint): TransactionSendingSigner => {\n return {\n address,\n signAndSendTransactions: async (transactions: Transaction[]) => {\n return await signAndSendTransaction(transactions, minContextSlot);\n },\n };\n },\n [signAndSendTransaction],\n );\n\n const sendTransaction = useCallback(\n async (instructions: Instruction[]) => {\n if (!selectedAccount) {\n throw new Error('No account selected');\n }\n const {\n context: { slot: minContextSlot },\n value: latestBlockhash,\n } = await ctx.client.rpc.getLatestBlockhash().send();\n\n const signer = getTransactionSigner(selectedAccount.address, minContextSlot);\n\n const transactionMessage = pipe(\n createTransactionMessage({ version: 0 }),\n tx => appendTransactionMessageInstructions(instructions, tx),\n tx => setTransactionMessageFeePayerSigner(signer, tx),\n tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n );\n\n const signatureBytes = await signAndSendTransactionMessageWithSigners(transactionMessage);\n return decoder.decode(signatureBytes);\n },\n [ctx.client.rpc, getTransactionSigner, selectedAccount],\n );\n\n return useMemo(\n () => ({\n ...ctx,\n account: selectedAccount,\n accounts,\n connect,\n connectAnd,\n deauthorizeSession,\n disconnect,\n getTransactionSigner,\n sendTransaction,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n }),\n [\n accounts,\n connect,\n connectAnd,\n ctx,\n deauthorizeSession,\n disconnect,\n getTransactionSigner,\n selectedAccount,\n sendTransaction,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n ],\n );\n}\n"]}
|
package/dist/index.browser.mjs
CHANGED
|
@@ -3,10 +3,11 @@ import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
|
3
3
|
import { getBase58Decoder, createSolanaRpc, createSolanaRpcSubscriptions, pipe, createTransactionMessage, appendTransactionMessageInstructions, setTransactionMessageFeePayerSigner, setTransactionMessageLifetimeUsingBlockhash, signAndSendTransactionMessageWithSigners, address, getBase64Encoder, getAddressCodec } from '@solana/kit';
|
|
4
4
|
import { atom, computed } from 'nanostores';
|
|
5
5
|
import { SolanaMobileWalletAdapterProtocolError, SolanaMobileWalletAdapterProtocolErrorCode } from '@solana-mobile/mobile-wallet-adapter-protocol';
|
|
6
|
+
import { stringToUint8Array } from '@wallet-ui/core';
|
|
7
|
+
export * from '@wallet-ui/core';
|
|
6
8
|
import { useStore } from '@nanostores/react';
|
|
7
9
|
import { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-kit';
|
|
8
10
|
export * from '@solana-mobile/mobile-wallet-adapter-protocol-kit';
|
|
9
|
-
export * from '@wallet-ui/core';
|
|
10
11
|
export { fromUint8Array, toUint8Array } from 'js-base64';
|
|
11
12
|
|
|
12
13
|
// src/mobile-wallet-provider.tsx
|
|
@@ -114,6 +115,16 @@ function MobileWalletProvider({
|
|
|
114
115
|
children
|
|
115
116
|
);
|
|
116
117
|
}
|
|
118
|
+
function convertSignInResult({
|
|
119
|
+
account,
|
|
120
|
+
signInResult
|
|
121
|
+
}) {
|
|
122
|
+
return {
|
|
123
|
+
account,
|
|
124
|
+
signature: stringToUint8Array(signInResult.signature),
|
|
125
|
+
signedMessage: stringToUint8Array(signInResult.signed_message)
|
|
126
|
+
};
|
|
127
|
+
}
|
|
117
128
|
|
|
118
129
|
// src/ellipsify.ts
|
|
119
130
|
function ellipsify(str = "", len = 4, delimiter = "..") {
|
|
@@ -208,21 +219,29 @@ function useAuthorization({ chain, identity, store }) {
|
|
|
208
219
|
const authorizeSessionWithSignIn = useCallback(
|
|
209
220
|
async (wallet, signInPayload) => {
|
|
210
221
|
try {
|
|
211
|
-
const
|
|
222
|
+
const result = await wallet.authorize({
|
|
212
223
|
auth_token: authToken,
|
|
213
224
|
chain,
|
|
214
225
|
identity,
|
|
215
226
|
sign_in_payload: signInPayload
|
|
216
227
|
});
|
|
217
|
-
|
|
228
|
+
const { selectedAccount: account } = await handleAuthorizationResult(result);
|
|
229
|
+
if (!result.sign_in_result) {
|
|
230
|
+
throw new Error("Sign in result not retrieved.");
|
|
231
|
+
}
|
|
232
|
+
return convertSignInResult({ account, signInResult: result.sign_in_result });
|
|
218
233
|
} catch (error) {
|
|
219
234
|
if (error instanceof SolanaMobileWalletAdapterProtocolError && error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED) {
|
|
220
|
-
const
|
|
235
|
+
const result = await wallet.authorize({
|
|
221
236
|
chain,
|
|
222
237
|
identity,
|
|
223
238
|
sign_in_payload: signInPayload
|
|
224
239
|
});
|
|
225
|
-
|
|
240
|
+
if (!result.sign_in_result) {
|
|
241
|
+
throw new Error("Sign in result not retrieved.", { cause: error });
|
|
242
|
+
}
|
|
243
|
+
const { selectedAccount: account } = await handleAuthorizationResult(result);
|
|
244
|
+
return convertSignInResult({ account, signInResult: result.sign_in_result });
|
|
226
245
|
}
|
|
227
246
|
throw error;
|
|
228
247
|
}
|
|
@@ -387,6 +406,6 @@ function useMobileWallet() {
|
|
|
387
406
|
);
|
|
388
407
|
}
|
|
389
408
|
|
|
390
|
-
export { MobileWalletProvider, MobileWalletProviderContext, createAuthorizationStore, createDefaultClient, useAuthorization, useMobileWallet };
|
|
409
|
+
export { MobileWalletProvider, MobileWalletProviderContext, convertSignInResult, createAuthorizationStore, createDefaultClient, useAuthorization, useMobileWallet };
|
|
391
410
|
//# sourceMappingURL=index.browser.mjs.map
|
|
392
411
|
//# sourceMappingURL=index.browser.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/create-default-client.tsx","../src/mobile-wallet-provider.tsx","../src/ellipsify.ts","../src/get-address-from-base64.ts","../src/get-account-from-authorized-account.ts","../src/get-authorization-from-authorization-result.ts","../src/use-authorization-store.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["address","useMemo","useCallback"],"mappings":"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","file":"index.browser.mjs","sourcesContent":["import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { address } from '@solana/kit';\n\nimport { Cache } from './cache';\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'address' && typeof value === 'string') {\n return address(value);\n } else {\n return value;\n }\n}\n\nexport class AsyncStorageCache<T> implements Cache<T> {\n constructor(private readonly storageKey: string) {}\n\n async clear(): Promise<void> {\n await AsyncStorage.removeItem(this.storageKey);\n }\n\n async get(): Promise<T | undefined> {\n const cacheFetchResult = await AsyncStorage.getItem(this.storageKey);\n if (!cacheFetchResult) {\n return undefined;\n }\n try {\n return JSON.parse(cacheFetchResult, cacheReviver) as T;\n } catch (error) {\n console.warn(`Failed to parse cached data for key ${this.storageKey}:`, error);\n return undefined;\n }\n }\n\n async set(value: T): Promise<void> {\n await AsyncStorage.setItem(this.storageKey, JSON.stringify(value));\n }\n}\n\nexport function createAsyncStorageCache<T>(storageKey = 'authorization-cache') {\n return new AsyncStorageCache<T>(storageKey);\n}\n","import { atom, computed } from 'nanostores';\n\nimport { Cache } from './cache';\nimport { WalletAuthorization } from './use-authorization';\n\nexport type AuthorizationStoreContext = {\n cache: Cache<WalletAuthorization | undefined>;\n};\n\nexport function createAuthorizationStore(context: AuthorizationStoreContext) {\n const { cache } = context;\n\n const $authorization = atom<WalletAuthorization | null>(null);\n\n const $accounts = computed($authorization, auth => auth?.accounts ?? null);\n const $authToken = computed($authorization, auth => auth?.authToken);\n const $selectedAccount = computed($authorization, auth => auth?.selectedAccount);\n\n async function fetch(): Promise<WalletAuthorization | null> {\n const result = await cache.get();\n const auth = result ?? null;\n $authorization.set(auth);\n return auth;\n }\n\n async function persist(auth: WalletAuthorization | null): Promise<void> {\n if (auth) {\n await cache.set(auth);\n } else {\n await cache.clear();\n }\n $authorization.set(auth);\n }\n\n return {\n $accounts,\n $authToken,\n $selectedAccount,\n fetch,\n persist,\n };\n}\n\nexport type AuthorizationStore = ReturnType<typeof createAuthorizationStore>;\n","import { createSolanaRpc, createSolanaRpcSubscriptions } from '@solana/kit';\n\nimport { Client } from './client';\n\nexport function createDefaultClient(cluster: { url: string; urlWs?: string }): Client {\n const rpc = createSolanaRpc(cluster.url);\n const rpcSubscriptionsUrl = cluster.urlWs ?? cluster.url.replace(/^http/, 'ws');\n const rpcSubscriptions = createSolanaRpcSubscriptions(rpcSubscriptionsUrl);\n return { rpc, rpcSubscriptions };\n}\n","import { AppIdentity } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { SolanaCluster } from '@wallet-ui/core';\nimport React, { createContext, type ReactNode, useEffect, useMemo, useRef } from 'react';\n\nimport { createAsyncStorageCache } from './async-storage-cache';\nimport { AuthorizationStore, createAuthorizationStore } from './authorization-store';\nimport { Client } from './client';\nimport { createDefaultClient } from './create-default-client';\nimport { WalletAuthorization, WalletAuthorizationCache, WalletAuthorizationProps } from './use-authorization';\n\nexport interface MobileWalletProviderProps {\n cache?: WalletAuthorizationCache;\n children: ReactNode;\n cluster: Pick<SolanaCluster, 'id' | 'url' | 'urlWs'>;\n createClient?: (cluster: { url: string; urlWs?: string }) => Client;\n identity: AppIdentity;\n}\nexport interface MobileWalletProviderState extends WalletAuthorizationProps {\n client: Client;\n store: AuthorizationStore;\n}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\n cache: userCache,\n children,\n cluster,\n createClient = createDefaultClient,\n identity,\n}: MobileWalletProviderProps) {\n const cache = useMemo(() => userCache ?? createAsyncStorageCache<WalletAuthorization>(), [userCache]);\n const client = useMemo(() => createClient(cluster), [createClient, cluster]);\n\n const storeRef = useRef<AuthorizationStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = createAuthorizationStore({ cache });\n }\n const store = storeRef.current;\n\n useEffect(() => {\n store.fetch().catch(console.error);\n }, [store]);\n\n return (\n <MobileWalletProviderContext.Provider\n value={useMemo(\n () => ({\n cache,\n chain: cluster.id,\n client,\n identity,\n store,\n }),\n [cache, cluster.id, client, identity, store],\n )}\n >\n {children}\n </MobileWalletProviderContext.Provider>\n );\n}\n","export function ellipsify(str = '', len = 4, delimiter = '..') {\n const limit = len * 2 + delimiter.length;\n\n return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;\n}\n","import { Address, getAddressCodec, getBase64Encoder } from '@solana/kit';\nimport { Base64EncodedAddress } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nexport function getAddressFromBase64(encoded: Base64EncodedAddress): Address {\n const decoded = getBase64Encoder().encode(encoded);\n\n return getAddressCodec().decode(decoded);\n}\n","import { Account as AuthorizedAccount } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { ellipsify } from './ellipsify';\nimport { getAddressFromBase64 } from './get-address-from-base64';\nimport { Account } from './use-authorization';\n\nexport function getAccountFromAuthorizedAccount(account: AuthorizedAccount): Account {\n const address = getAddressFromBase64(account.address);\n\n return {\n address,\n addressBase64: account.address,\n icon: account.icon,\n label: account.label ?? ellipsify(address.toString(), 8),\n };\n}\n","import { AuthorizationResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getAccountFromAuthorizedAccount } from './get-account-from-authorized-account';\nimport { Account, WalletAuthorization } from './use-authorization';\n\nexport function getAuthorizationFromAuthorizationResult(\n authorizationResult: AuthorizationResult,\n previouslySelectedAccount?: Account,\n): WalletAuthorization {\n let selectedAccount: Account;\n if (\n // We have yet to select an account.\n previouslySelectedAccount == null ||\n // The previously selected account is no longer in the set of authorized addresses.\n !authorizationResult.accounts.some(({ address }) => address === previouslySelectedAccount.addressBase64)\n ) {\n const firstAccount = authorizationResult.accounts[0];\n selectedAccount = getAccountFromAuthorizedAccount(firstAccount);\n } else {\n selectedAccount = previouslySelectedAccount;\n }\n return {\n accounts: authorizationResult.accounts.map(getAccountFromAuthorizedAccount),\n authToken: authorizationResult.auth_token,\n selectedAccount,\n };\n}\n","import { useStore } from '@nanostores/react';\nimport { useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\n\nexport function useAuthorizationStore({ store }: { store: AuthorizationStore }) {\n const accounts = useStore(store.$accounts);\n const authToken = useStore(store.$authToken);\n const selectedAccount = useStore(store.$selectedAccount);\n\n return useMemo(\n () => ({\n accounts,\n authToken,\n persist: store.persist,\n selectedAccount,\n }),\n [accounts, authToken, store.persist, selectedAccount],\n );\n}\n","import { Address } from '@solana/kit';\nimport {\n AppIdentity,\n AuthorizationResult,\n AuthorizeAPI,\n AuthToken,\n Base64EncodedAddress,\n Chain,\n DeauthorizeAPI,\n SignInPayload,\n SolanaMobileWalletAdapterProtocolError,\n SolanaMobileWalletAdapterProtocolErrorCode,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\nimport { Cache } from './cache';\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useAuthorizationStore } from './use-authorization-store';\n\nexport type Account = Readonly<{\n address: Address;\n addressBase64: Base64EncodedAddress;\n icon?: WalletIcon;\n label?: string;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\nexport type WalletAuthorizationCache = Cache<WalletAuthorization | undefined>;\nexport type WalletAuthorizationProps = Readonly<{\n cache?: WalletAuthorizationCache;\n chain: Chain;\n identity: AppIdentity;\n store: AuthorizationStore;\n}>;\nexport function useAuthorization({ chain, identity, store }: WalletAuthorizationProps) {\n const { accounts, authToken, persist, selectedAccount } = useAuthorizationStore({\n store,\n });\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(authorizationResult, selectedAccount);\n await persist(nextAuthorization);\n return nextAuthorization;\n },\n [selectedAccount, persist],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: authToken });\n await persist(null);\n },\n [authToken, persist],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await persist(null);\n }, [persist]);\n\n return useMemo(\n () => ({\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n }),\n [\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n ],\n );\n}\n","import {\n Address,\n appendTransactionMessageInstructions,\n createTransactionMessage,\n getBase58Decoder,\n Instruction,\n pipe,\n setTransactionMessageFeePayerSigner,\n setTransactionMessageLifetimeUsingBlockhash,\n signAndSendTransactionMessageWithSigners,\n Transaction,\n TransactionSendingSigner,\n} from '@solana/kit';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-kit';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { TransactionSignatures } from './types';\nimport { Account, useAuthorization } from './use-authorization';\n\nconst decoder = getBase58Decoder();\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const {\n authorizeSessionWithSignIn,\n authorizeSession,\n deauthorizeSessions,\n selectedAccount,\n accounts,\n deauthorizeSession,\n } = useAuthorization(ctx);\n\n const connect = useCallback(\n async (): Promise<Account> => await transact(async wallet => await authorizeSession(wallet)),\n [authorizeSession],\n );\n\n const connectAnd = useCallback(\n async (cb: (wallet: AuthorizeAPI) => Promise<Account | void>): Promise<Account | void> => {\n return await transact(async wallet => await cb(wallet));\n },\n [],\n );\n\n const signIn = useCallback(\n async (signInPayload: SignInPayload): Promise<Account> =>\n await transact(async wallet => await authorizeSessionWithSignIn(wallet, signInPayload)),\n [authorizeSessionWithSignIn],\n );\n\n const disconnect = useCallback(async (): Promise<void> => await deauthorizeSessions(), [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async <T extends Transaction | Transaction[]>(\n transaction: T,\n minContextSlot: bigint,\n ): Promise<TransactionSignatures<T>> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const isTransactionsArray = Array.isArray(transaction);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot: Number(minContextSlot),\n transactions: isTransactionsArray ? transaction : [transaction],\n });\n\n return isTransactionsArray\n ? (signatures as TransactionSignatures<T>)\n : (signatures[0] as TransactionSignatures<T>);\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async <K extends Uint8Array | Uint8Array[]>(message: K): Promise<K> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const payloads: Uint8Array[] = Array.isArray(message) ? message : [message];\n const signed = await wallet.signMessages({\n addresses: payloads.map(() => authResult.addressBase64),\n payloads,\n });\n return (Array.isArray(message) ? signed : signed[0]) as K;\n }),\n [authorizeSession],\n );\n\n const signTransaction = useCallback(\n async <T extends Transaction | Transaction[]>(transaction: T): Promise<T> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signedTxs = await wallet.signTransactions({\n transactions: Array.isArray(transaction) ? transaction : [transaction],\n });\n return Array.isArray(transaction) ? signedTxs : signedTxs[0];\n }),\n\n [authorizeSession],\n );\n\n const getTransactionSigner = useCallback(\n (address: Address, minContextSlot: bigint): TransactionSendingSigner => {\n return {\n address,\n signAndSendTransactions: async (transactions: Transaction[]) => {\n return await signAndSendTransaction(transactions, minContextSlot);\n },\n };\n },\n [signAndSendTransaction],\n );\n\n const sendTransaction = useCallback(\n async (instructions: Instruction[]) => {\n if (!selectedAccount) {\n throw new Error('No account selected');\n }\n const {\n context: { slot: minContextSlot },\n value: latestBlockhash,\n } = await ctx.client.rpc.getLatestBlockhash().send();\n\n const signer = getTransactionSigner(selectedAccount.address, minContextSlot);\n\n const transactionMessage = pipe(\n createTransactionMessage({ version: 0 }),\n tx => appendTransactionMessageInstructions(instructions, tx),\n tx => setTransactionMessageFeePayerSigner(signer, tx),\n tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n );\n\n const signatureBytes = await signAndSendTransactionMessageWithSigners(transactionMessage);\n return decoder.decode(signatureBytes);\n },\n [ctx.client.rpc, getTransactionSigner, selectedAccount],\n );\n\n return useMemo(\n () => ({\n ...ctx,\n account: selectedAccount,\n accounts,\n connect,\n connectAnd,\n deauthorizeSession,\n disconnect,\n getTransactionSigner,\n sendTransaction,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n }),\n [\n accounts,\n connect,\n connectAnd,\n ctx,\n deauthorizeSession,\n disconnect,\n getTransactionSigner,\n selectedAccount,\n sendTransaction,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n ],\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/async-storage-cache.ts","../src/authorization-store.ts","../src/create-default-client.tsx","../src/mobile-wallet-provider.tsx","../src/convert-sign-in-result.ts","../src/ellipsify.ts","../src/get-address-from-base64.ts","../src/get-account-from-authorized-account.ts","../src/get-authorization-from-authorization-result.ts","../src/use-authorization-store.ts","../src/use-authorization.ts","../src/use-mobile-wallet.ts"],"names":["address","useMemo","useCallback"],"mappings":"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","file":"index.browser.mjs","sourcesContent":["import AsyncStorage from '@react-native-async-storage/async-storage';\nimport { address } from '@solana/kit';\n\nimport { Cache } from './cache';\n\nfunction cacheReviver(key: string, value: unknown) {\n if (key === 'address' && typeof value === 'string') {\n return address(value);\n } else {\n return value;\n }\n}\n\nexport class AsyncStorageCache<T> implements Cache<T> {\n constructor(private readonly storageKey: string) {}\n\n async clear(): Promise<void> {\n await AsyncStorage.removeItem(this.storageKey);\n }\n\n async get(): Promise<T | undefined> {\n const cacheFetchResult = await AsyncStorage.getItem(this.storageKey);\n if (!cacheFetchResult) {\n return undefined;\n }\n try {\n return JSON.parse(cacheFetchResult, cacheReviver) as T;\n } catch (error) {\n console.warn(`Failed to parse cached data for key ${this.storageKey}:`, error);\n return undefined;\n }\n }\n\n async set(value: T): Promise<void> {\n await AsyncStorage.setItem(this.storageKey, JSON.stringify(value));\n }\n}\n\nexport function createAsyncStorageCache<T>(storageKey = 'authorization-cache') {\n return new AsyncStorageCache<T>(storageKey);\n}\n","import { atom, computed } from 'nanostores';\n\nimport { Cache } from './cache';\nimport { WalletAuthorization } from './use-authorization';\n\nexport type AuthorizationStoreContext = {\n cache: Cache<WalletAuthorization | undefined>;\n};\n\nexport function createAuthorizationStore(context: AuthorizationStoreContext) {\n const { cache } = context;\n\n const $authorization = atom<WalletAuthorization | null>(null);\n\n const $accounts = computed($authorization, auth => auth?.accounts ?? null);\n const $authToken = computed($authorization, auth => auth?.authToken);\n const $selectedAccount = computed($authorization, auth => auth?.selectedAccount);\n\n async function fetch(): Promise<WalletAuthorization | null> {\n const result = await cache.get();\n const auth = result ?? null;\n $authorization.set(auth);\n return auth;\n }\n\n async function persist(auth: WalletAuthorization | null): Promise<void> {\n if (auth) {\n await cache.set(auth);\n } else {\n await cache.clear();\n }\n $authorization.set(auth);\n }\n\n return {\n $accounts,\n $authToken,\n $selectedAccount,\n fetch,\n persist,\n };\n}\n\nexport type AuthorizationStore = ReturnType<typeof createAuthorizationStore>;\n","import { createSolanaRpc, createSolanaRpcSubscriptions } from '@solana/kit';\n\nimport { Client } from './client';\n\nexport function createDefaultClient(cluster: { url: string; urlWs?: string }): Client {\n const rpc = createSolanaRpc(cluster.url);\n const rpcSubscriptionsUrl = cluster.urlWs ?? cluster.url.replace(/^http/, 'ws');\n const rpcSubscriptions = createSolanaRpcSubscriptions(rpcSubscriptionsUrl);\n return { rpc, rpcSubscriptions };\n}\n","import { AppIdentity } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { SolanaCluster } from '@wallet-ui/core';\nimport React, { createContext, type ReactNode, useEffect, useMemo, useRef } from 'react';\n\nimport { createAsyncStorageCache } from './async-storage-cache';\nimport { AuthorizationStore, createAuthorizationStore } from './authorization-store';\nimport { Client } from './client';\nimport { createDefaultClient } from './create-default-client';\nimport { WalletAuthorization, WalletAuthorizationCache, WalletAuthorizationProps } from './use-authorization';\n\nexport interface MobileWalletProviderProps {\n cache?: WalletAuthorizationCache;\n children: ReactNode;\n cluster: Pick<SolanaCluster, 'id' | 'url' | 'urlWs'>;\n createClient?: (cluster: { url: string; urlWs?: string }) => Client;\n identity: AppIdentity;\n}\nexport interface MobileWalletProviderState extends WalletAuthorizationProps {\n client: Client;\n store: AuthorizationStore;\n}\n\nexport const MobileWalletProviderContext = createContext<MobileWalletProviderState>({} as MobileWalletProviderState);\nexport function MobileWalletProvider({\n cache: userCache,\n children,\n cluster,\n createClient = createDefaultClient,\n identity,\n}: MobileWalletProviderProps) {\n const cache = useMemo(() => userCache ?? createAsyncStorageCache<WalletAuthorization>(), [userCache]);\n const client = useMemo(() => createClient(cluster), [createClient, cluster]);\n\n const storeRef = useRef<AuthorizationStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = createAuthorizationStore({ cache });\n }\n const store = storeRef.current;\n\n useEffect(() => {\n store.fetch().catch(console.error);\n }, [store]);\n\n return (\n <MobileWalletProviderContext.Provider\n value={useMemo(\n () => ({\n cache,\n chain: cluster.id,\n client,\n identity,\n store,\n }),\n [cache, cluster.id, client, identity, store],\n )}\n >\n {children}\n </MobileWalletProviderContext.Provider>\n );\n}\n","import { SolanaSignInOutput } from '@solana/wallet-standard-features';\nimport { SignInResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { stringToUint8Array } from '@wallet-ui/core';\n\nimport { Account } from './use-authorization';\n\nexport type SignInOutput = Omit<SolanaSignInOutput, 'account' | 'signatureType'> &\n Readonly<{\n account: Account;\n }>;\n\nexport function convertSignInResult({\n account,\n signInResult,\n}: {\n account: Account;\n signInResult: SignInResult;\n}): SignInOutput {\n return {\n account,\n signature: stringToUint8Array(signInResult.signature),\n signedMessage: stringToUint8Array(signInResult.signed_message),\n };\n}\n","export function ellipsify(str = '', len = 4, delimiter = '..') {\n const limit = len * 2 + delimiter.length;\n\n return str.length > limit ? str.slice(0, len) + delimiter + str.slice(-len) : str;\n}\n","import { Address, getAddressCodec, getBase64Encoder } from '@solana/kit';\nimport { Base64EncodedAddress } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nexport function getAddressFromBase64(encoded: Base64EncodedAddress): Address {\n const decoded = getBase64Encoder().encode(encoded);\n\n return getAddressCodec().decode(decoded);\n}\n","import { Account as AuthorizedAccount } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { ellipsify } from './ellipsify';\nimport { getAddressFromBase64 } from './get-address-from-base64';\nimport { Account } from './use-authorization';\n\nexport function getAccountFromAuthorizedAccount(account: AuthorizedAccount): Account {\n const address = getAddressFromBase64(account.address);\n\n return {\n address,\n addressBase64: account.address,\n icon: account.icon,\n label: account.label ?? ellipsify(address.toString(), 8),\n };\n}\n","import { AuthorizationResult } from '@solana-mobile/mobile-wallet-adapter-protocol';\n\nimport { getAccountFromAuthorizedAccount } from './get-account-from-authorized-account';\nimport { Account, WalletAuthorization } from './use-authorization';\n\nexport function getAuthorizationFromAuthorizationResult(\n authorizationResult: AuthorizationResult,\n previouslySelectedAccount?: Account,\n): WalletAuthorization {\n let selectedAccount: Account;\n if (\n // We have yet to select an account.\n previouslySelectedAccount == null ||\n // The previously selected account is no longer in the set of authorized addresses.\n !authorizationResult.accounts.some(({ address }) => address === previouslySelectedAccount.addressBase64)\n ) {\n const firstAccount = authorizationResult.accounts[0];\n selectedAccount = getAccountFromAuthorizedAccount(firstAccount);\n } else {\n selectedAccount = previouslySelectedAccount;\n }\n return {\n accounts: authorizationResult.accounts.map(getAccountFromAuthorizedAccount),\n authToken: authorizationResult.auth_token,\n selectedAccount,\n };\n}\n","import { useStore } from '@nanostores/react';\nimport { useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\n\nexport function useAuthorizationStore({ store }: { store: AuthorizationStore }) {\n const accounts = useStore(store.$accounts);\n const authToken = useStore(store.$authToken);\n const selectedAccount = useStore(store.$selectedAccount);\n\n return useMemo(\n () => ({\n accounts,\n authToken,\n persist: store.persist,\n selectedAccount,\n }),\n [accounts, authToken, store.persist, selectedAccount],\n );\n}\n","import { Address } from '@solana/kit';\nimport {\n AppIdentity,\n AuthorizationResult,\n AuthorizeAPI,\n AuthToken,\n Base64EncodedAddress,\n Chain,\n DeauthorizeAPI,\n SignInPayload,\n SolanaMobileWalletAdapterProtocolError,\n SolanaMobileWalletAdapterProtocolErrorCode,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { WalletIcon } from '@wallet-standard/core';\nimport { useCallback, useMemo } from 'react';\n\nimport { AuthorizationStore } from './authorization-store';\nimport { Cache } from './cache';\nimport { convertSignInResult, SignInOutput } from './convert-sign-in-result';\nimport { getAuthorizationFromAuthorizationResult } from './get-authorization-from-authorization-result';\nimport { useAuthorizationStore } from './use-authorization-store';\n\nexport type Account = Readonly<{\n address: Address;\n addressBase64: Base64EncodedAddress;\n icon?: WalletIcon;\n label?: string;\n}>;\n\nexport type WalletAuthorization = Readonly<{\n accounts: Account[];\n authToken: AuthToken;\n selectedAccount: Account;\n}>;\nexport type WalletAuthorizationCache = Cache<WalletAuthorization | undefined>;\nexport type WalletAuthorizationProps = Readonly<{\n cache?: WalletAuthorizationCache;\n chain: Chain;\n identity: AppIdentity;\n store: AuthorizationStore;\n}>;\nexport function useAuthorization({ chain, identity, store }: WalletAuthorizationProps) {\n const { accounts, authToken, persist, selectedAccount } = useAuthorizationStore({\n store,\n });\n\n const handleAuthorizationResult = useCallback(\n async (authorizationResult: AuthorizationResult): Promise<WalletAuthorization> => {\n const nextAuthorization = getAuthorizationFromAuthorizationResult(authorizationResult, selectedAccount);\n await persist(nextAuthorization);\n return nextAuthorization;\n },\n [selectedAccount, persist],\n );\n\n const authorizeSession = useCallback(\n async (wallet: AuthorizeAPI) => {\n try {\n const authorizationResult = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n });\n return (await handleAuthorizationResult(authorizationResult)).selectedAccount;\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const retryResult = await wallet.authorize({\n chain,\n identity,\n });\n return (await handleAuthorizationResult(retryResult)).selectedAccount;\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const authorizeSessionWithSignIn = useCallback(\n async (wallet: AuthorizeAPI, signInPayload: SignInPayload): Promise<SignInOutput> => {\n try {\n const result = await wallet.authorize({\n auth_token: authToken,\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n const { selectedAccount: account } = await handleAuthorizationResult(result);\n\n if (!result.sign_in_result) {\n throw new Error('Sign in result not retrieved.');\n }\n return convertSignInResult({ account, signInResult: result.sign_in_result });\n } catch (error) {\n if (\n error instanceof SolanaMobileWalletAdapterProtocolError &&\n error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED\n ) {\n const result = await wallet.authorize({\n chain,\n identity,\n sign_in_payload: signInPayload,\n });\n if (!result.sign_in_result) {\n throw new Error('Sign in result not retrieved.', { cause: error });\n }\n const { selectedAccount: account } = await handleAuthorizationResult(result);\n return convertSignInResult({ account, signInResult: result.sign_in_result });\n }\n throw error;\n }\n },\n [authToken, chain, identity, handleAuthorizationResult],\n );\n\n const deauthorizeSession = useCallback(\n async (wallet: DeauthorizeAPI) => {\n if (authToken == null) {\n return;\n }\n await wallet.deauthorize({ auth_token: authToken });\n await persist(null);\n },\n [authToken, persist],\n );\n\n const deauthorizeSessions = useCallback(async () => {\n await persist(null);\n }, [persist]);\n\n return useMemo(\n () => ({\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n }),\n [\n accounts,\n authorizeSession,\n authorizeSessionWithSignIn,\n deauthorizeSession,\n deauthorizeSessions,\n selectedAccount,\n ],\n );\n}\n","import {\n Address,\n appendTransactionMessageInstructions,\n createTransactionMessage,\n getBase58Decoder,\n Instruction,\n pipe,\n setTransactionMessageFeePayerSigner,\n setTransactionMessageLifetimeUsingBlockhash,\n signAndSendTransactionMessageWithSigners,\n Transaction,\n TransactionSendingSigner,\n} from '@solana/kit';\nimport { AuthorizeAPI, SignInPayload } from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-kit';\nimport { useCallback, useContext, useMemo } from 'react';\n\nimport { SignInOutput } from './convert-sign-in-result';\nimport { MobileWalletProviderContext } from './mobile-wallet-provider';\nimport { TransactionSignatures } from './types';\nimport { Account, useAuthorization } from './use-authorization';\n\nconst decoder = getBase58Decoder();\nexport function useMobileWallet() {\n const ctx = useContext(MobileWalletProviderContext);\n const {\n authorizeSessionWithSignIn,\n authorizeSession,\n deauthorizeSessions,\n selectedAccount,\n accounts,\n deauthorizeSession,\n } = useAuthorization(ctx);\n\n const connect = useCallback(\n async (): Promise<Account> => await transact(async wallet => await authorizeSession(wallet)),\n [authorizeSession],\n );\n\n const connectAnd = useCallback(\n async (cb: (wallet: AuthorizeAPI) => Promise<Account | void>): Promise<Account | void> => {\n return await transact(async wallet => await cb(wallet));\n },\n [],\n );\n\n const signIn = useCallback(\n async (signInPayload: SignInPayload): Promise<SignInOutput> =>\n await transact(async wallet => await authorizeSessionWithSignIn(wallet, signInPayload)),\n [authorizeSessionWithSignIn],\n );\n\n const disconnect = useCallback(async (): Promise<void> => await deauthorizeSessions(), [deauthorizeSessions]);\n\n const signAndSendTransaction = useCallback(\n async <T extends Transaction | Transaction[]>(\n transaction: T,\n minContextSlot: bigint,\n ): Promise<TransactionSignatures<T>> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const isTransactionsArray = Array.isArray(transaction);\n const signatures = await wallet.signAndSendTransactions({\n minContextSlot: Number(minContextSlot),\n transactions: isTransactionsArray ? transaction : [transaction],\n });\n\n return isTransactionsArray\n ? (signatures as TransactionSignatures<T>)\n : (signatures[0] as TransactionSignatures<T>);\n }),\n [authorizeSession],\n );\n\n const signMessage = useCallback(\n async <K extends Uint8Array | Uint8Array[]>(message: K): Promise<K> =>\n await transact(async wallet => {\n const authResult = await authorizeSession(wallet);\n const payloads: Uint8Array[] = Array.isArray(message) ? message : [message];\n const signed = await wallet.signMessages({\n addresses: payloads.map(() => authResult.addressBase64),\n payloads,\n });\n return (Array.isArray(message) ? signed : signed[0]) as K;\n }),\n [authorizeSession],\n );\n\n const signTransaction = useCallback(\n async <T extends Transaction | Transaction[]>(transaction: T): Promise<T> =>\n await transact(async wallet => {\n await authorizeSession(wallet);\n const signedTxs = await wallet.signTransactions({\n transactions: Array.isArray(transaction) ? transaction : [transaction],\n });\n return Array.isArray(transaction) ? signedTxs : signedTxs[0];\n }),\n\n [authorizeSession],\n );\n\n const getTransactionSigner = useCallback(\n (address: Address, minContextSlot: bigint): TransactionSendingSigner => {\n return {\n address,\n signAndSendTransactions: async (transactions: Transaction[]) => {\n return await signAndSendTransaction(transactions, minContextSlot);\n },\n };\n },\n [signAndSendTransaction],\n );\n\n const sendTransaction = useCallback(\n async (instructions: Instruction[]) => {\n if (!selectedAccount) {\n throw new Error('No account selected');\n }\n const {\n context: { slot: minContextSlot },\n value: latestBlockhash,\n } = await ctx.client.rpc.getLatestBlockhash().send();\n\n const signer = getTransactionSigner(selectedAccount.address, minContextSlot);\n\n const transactionMessage = pipe(\n createTransactionMessage({ version: 0 }),\n tx => appendTransactionMessageInstructions(instructions, tx),\n tx => setTransactionMessageFeePayerSigner(signer, tx),\n tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),\n );\n\n const signatureBytes = await signAndSendTransactionMessageWithSigners(transactionMessage);\n return decoder.decode(signatureBytes);\n },\n [ctx.client.rpc, getTransactionSigner, selectedAccount],\n );\n\n return useMemo(\n () => ({\n ...ctx,\n account: selectedAccount,\n accounts,\n connect,\n connectAnd,\n deauthorizeSession,\n disconnect,\n getTransactionSigner,\n sendTransaction,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n }),\n [\n accounts,\n connect,\n connectAnd,\n ctx,\n deauthorizeSession,\n disconnect,\n getTransactionSigner,\n selectedAccount,\n sendTransaction,\n signAndSendTransaction,\n signIn,\n signMessage,\n signTransaction,\n ],\n );\n}\n"]}
|
package/dist/index.native.mjs
CHANGED
|
@@ -3,10 +3,11 @@ import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
|
3
3
|
import { getBase58Decoder, createSolanaRpc, createSolanaRpcSubscriptions, pipe, createTransactionMessage, appendTransactionMessageInstructions, setTransactionMessageFeePayerSigner, setTransactionMessageLifetimeUsingBlockhash, signAndSendTransactionMessageWithSigners, address, getBase64Encoder, getAddressCodec } from '@solana/kit';
|
|
4
4
|
import { atom, computed } from 'nanostores';
|
|
5
5
|
import { SolanaMobileWalletAdapterProtocolError, SolanaMobileWalletAdapterProtocolErrorCode } from '@solana-mobile/mobile-wallet-adapter-protocol';
|
|
6
|
+
import { stringToUint8Array } from '@wallet-ui/core';
|
|
7
|
+
export * from '@wallet-ui/core';
|
|
6
8
|
import { useStore } from '@nanostores/react';
|
|
7
9
|
import { transact } from '@solana-mobile/mobile-wallet-adapter-protocol-kit';
|
|
8
10
|
export * from '@solana-mobile/mobile-wallet-adapter-protocol-kit';
|
|
9
|
-
export * from '@wallet-ui/core';
|
|
10
11
|
export { fromUint8Array, toUint8Array } from 'js-base64';
|
|
11
12
|
|
|
12
13
|
// src/mobile-wallet-provider.tsx
|
|
@@ -114,6 +115,16 @@ function MobileWalletProvider({
|
|
|
114
115
|
children
|
|
115
116
|
);
|
|
116
117
|
}
|
|
118
|
+
function convertSignInResult({
|
|
119
|
+
account,
|
|
120
|
+
signInResult
|
|
121
|
+
}) {
|
|
122
|
+
return {
|
|
123
|
+
account,
|
|
124
|
+
signature: stringToUint8Array(signInResult.signature),
|
|
125
|
+
signedMessage: stringToUint8Array(signInResult.signed_message)
|
|
126
|
+
};
|
|
127
|
+
}
|
|
117
128
|
|
|
118
129
|
// src/ellipsify.ts
|
|
119
130
|
function ellipsify(str = "", len = 4, delimiter = "..") {
|
|
@@ -208,21 +219,29 @@ function useAuthorization({ chain, identity, store }) {
|
|
|
208
219
|
const authorizeSessionWithSignIn = useCallback(
|
|
209
220
|
async (wallet, signInPayload) => {
|
|
210
221
|
try {
|
|
211
|
-
const
|
|
222
|
+
const result = await wallet.authorize({
|
|
212
223
|
auth_token: authToken,
|
|
213
224
|
chain,
|
|
214
225
|
identity,
|
|
215
226
|
sign_in_payload: signInPayload
|
|
216
227
|
});
|
|
217
|
-
|
|
228
|
+
const { selectedAccount: account } = await handleAuthorizationResult(result);
|
|
229
|
+
if (!result.sign_in_result) {
|
|
230
|
+
throw new Error("Sign in result not retrieved.");
|
|
231
|
+
}
|
|
232
|
+
return convertSignInResult({ account, signInResult: result.sign_in_result });
|
|
218
233
|
} catch (error) {
|
|
219
234
|
if (error instanceof SolanaMobileWalletAdapterProtocolError && error.code === SolanaMobileWalletAdapterProtocolErrorCode.ERROR_AUTHORIZATION_FAILED) {
|
|
220
|
-
const
|
|
235
|
+
const result = await wallet.authorize({
|
|
221
236
|
chain,
|
|
222
237
|
identity,
|
|
223
238
|
sign_in_payload: signInPayload
|
|
224
239
|
});
|
|
225
|
-
|
|
240
|
+
if (!result.sign_in_result) {
|
|
241
|
+
throw new Error("Sign in result not retrieved.", { cause: error });
|
|
242
|
+
}
|
|
243
|
+
const { selectedAccount: account } = await handleAuthorizationResult(result);
|
|
244
|
+
return convertSignInResult({ account, signInResult: result.sign_in_result });
|
|
226
245
|
}
|
|
227
246
|
throw error;
|
|
228
247
|
}
|
|
@@ -387,6 +406,6 @@ function useMobileWallet() {
|
|
|
387
406
|
);
|
|
388
407
|
}
|
|
389
408
|
|
|
390
|
-
export { MobileWalletProvider, MobileWalletProviderContext, createAuthorizationStore, createDefaultClient, useAuthorization, useMobileWallet };
|
|
409
|
+
export { MobileWalletProvider, MobileWalletProviderContext, convertSignInResult, createAuthorizationStore, createDefaultClient, useAuthorization, useMobileWallet };
|
|
391
410
|
//# sourceMappingURL=index.native.mjs.map
|
|
392
411
|
//# sourceMappingURL=index.native.mjs.map
|