@solana-mobile/mobile-wallet-adapter-protocol 2.2.6 → 2.2.7

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.
@@ -1,323 +1,270 @@
1
- 'use strict';
2
-
3
- var reactNative = require('react-native');
4
- var jsBase64 = require('js-base64');
5
- var walletStandardUtil = require('@solana/wallet-standard-util');
6
- var codecsStrings = require('@solana/codecs-strings');
7
-
8
- // Typescript `enums` thwart tree-shaking. See https://bargsten.org/jsts/enums/
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ let react_native = require("react-native");
3
+ let js_base64 = require("js-base64");
4
+ let _solana_wallet_standard_util = require("@solana/wallet-standard-util");
5
+ let _solana_codecs_strings = require("@solana/codecs-strings");
6
+ //#region src/errors.ts
9
7
  const SolanaMobileWalletAdapterErrorCode = {
10
- ERROR_ASSOCIATION_PORT_OUT_OF_RANGE: 'ERROR_ASSOCIATION_PORT_OUT_OF_RANGE',
11
- ERROR_REFLECTOR_ID_OUT_OF_RANGE: 'ERROR_REFLECTOR_ID_OUT_OF_RANGE',
12
- ERROR_FORBIDDEN_WALLET_BASE_URL: 'ERROR_FORBIDDEN_WALLET_BASE_URL',
13
- ERROR_SECURE_CONTEXT_REQUIRED: 'ERROR_SECURE_CONTEXT_REQUIRED',
14
- ERROR_SESSION_CLOSED: 'ERROR_SESSION_CLOSED',
15
- ERROR_SESSION_TIMEOUT: 'ERROR_SESSION_TIMEOUT',
16
- ERROR_WALLET_NOT_FOUND: 'ERROR_WALLET_NOT_FOUND',
17
- ERROR_INVALID_PROTOCOL_VERSION: 'ERROR_INVALID_PROTOCOL_VERSION',
18
- ERROR_BROWSER_NOT_SUPPORTED: 'ERROR_BROWSER_NOT_SUPPORTED',
19
- ERROR_LOOPBACK_ACCESS_BLOCKED: 'ERROR_LOOPBACK_ACCESS_BLOCKED',
20
- ERROR_ASSOCIATION_CANCELLED: 'ERROR_ASSOCIATION_CANCELLED',
8
+ ERROR_ASSOCIATION_PORT_OUT_OF_RANGE: "ERROR_ASSOCIATION_PORT_OUT_OF_RANGE",
9
+ ERROR_REFLECTOR_ID_OUT_OF_RANGE: "ERROR_REFLECTOR_ID_OUT_OF_RANGE",
10
+ ERROR_FORBIDDEN_WALLET_BASE_URL: "ERROR_FORBIDDEN_WALLET_BASE_URL",
11
+ ERROR_SECURE_CONTEXT_REQUIRED: "ERROR_SECURE_CONTEXT_REQUIRED",
12
+ ERROR_SESSION_CLOSED: "ERROR_SESSION_CLOSED",
13
+ ERROR_SESSION_TIMEOUT: "ERROR_SESSION_TIMEOUT",
14
+ ERROR_WALLET_NOT_FOUND: "ERROR_WALLET_NOT_FOUND",
15
+ ERROR_INVALID_PROTOCOL_VERSION: "ERROR_INVALID_PROTOCOL_VERSION",
16
+ ERROR_BROWSER_NOT_SUPPORTED: "ERROR_BROWSER_NOT_SUPPORTED",
17
+ ERROR_LOOPBACK_ACCESS_BLOCKED: "ERROR_LOOPBACK_ACCESS_BLOCKED",
18
+ ERROR_ASSOCIATION_CANCELLED: "ERROR_ASSOCIATION_CANCELLED"
19
+ };
20
+ var SolanaMobileWalletAdapterError = class extends Error {
21
+ data;
22
+ code;
23
+ constructor(...args) {
24
+ const [code, message, data] = args;
25
+ super(message);
26
+ this.code = code;
27
+ this.data = data;
28
+ this.name = "SolanaMobileWalletAdapterError";
29
+ }
21
30
  };
22
- class SolanaMobileWalletAdapterError extends Error {
23
- data;
24
- code;
25
- constructor(...args) {
26
- const [code, message, data] = args;
27
- super(message);
28
- this.code = code;
29
- this.data = data;
30
- this.name = 'SolanaMobileWalletAdapterError';
31
- }
32
- }
33
- // Typescript `enums` thwart tree-shaking. See https://bargsten.org/jsts/enums/
34
31
  const SolanaMobileWalletAdapterProtocolErrorCode = {
35
- // Keep these in sync with `mobilewalletadapter/common/ProtocolContract.java`.
36
- ERROR_AUTHORIZATION_FAILED: -1,
37
- ERROR_INVALID_PAYLOADS: -2,
38
- ERROR_NOT_SIGNED: -3,
39
- ERROR_NOT_SUBMITTED: -4,
40
- ERROR_TOO_MANY_PAYLOADS: -5,
41
- ERROR_ATTEST_ORIGIN_ANDROID: -100,
32
+ ERROR_AUTHORIZATION_FAILED: -1,
33
+ ERROR_INVALID_PAYLOADS: -2,
34
+ ERROR_NOT_SIGNED: -3,
35
+ ERROR_NOT_SUBMITTED: -4,
36
+ ERROR_TOO_MANY_PAYLOADS: -5,
37
+ ERROR_ATTEST_ORIGIN_ANDROID: -100
42
38
  };
43
- class SolanaMobileWalletAdapterProtocolError extends Error {
44
- data;
45
- code;
46
- jsonRpcMessageId;
47
- constructor(...args) {
48
- const [jsonRpcMessageId, code, message, data] = args;
49
- super(message);
50
- this.code = code;
51
- this.data = data;
52
- this.jsonRpcMessageId = jsonRpcMessageId;
53
- this.name = 'SolanaMobileWalletAdapterProtocolError';
54
- }
55
- }
56
-
57
- var NativeSolanaMobileWalletAdapter = reactNative.TurboModuleRegistry.getEnforcing('SolanaMobileWalletAdapter');
58
-
39
+ var SolanaMobileWalletAdapterProtocolError = class extends Error {
40
+ data;
41
+ code;
42
+ jsonRpcMessageId;
43
+ constructor(...args) {
44
+ const [jsonRpcMessageId, code, message, data] = args;
45
+ super(message);
46
+ this.code = code;
47
+ this.data = data;
48
+ this.jsonRpcMessageId = jsonRpcMessageId;
49
+ this.name = "SolanaMobileWalletAdapterProtocolError";
50
+ }
51
+ };
52
+ //#endregion
53
+ //#region src/codegenSpec/NativeSolanaMobileWalletAdapter.ts
54
+ var NativeSolanaMobileWalletAdapter_default = react_native.TurboModuleRegistry.getEnforcing("SolanaMobileWalletAdapter");
55
+ //#endregion
56
+ //#region src/createSIWSMessage.ts
59
57
  function createSIWSMessage(payload) {
60
- return walletStandardUtil.createSignInMessageText(payload);
58
+ return (0, _solana_wallet_standard_util.createSignInMessageText)(payload);
61
59
  }
62
60
  function createSIWSMessageBase64Url(payload) {
63
- return jsBase64.encode(createSIWSMessage(payload))
64
- .replace(/\+/g, '-')
65
- .replace(/\//g, '_')
66
- .replace(/=+$/, ''); // convert to base64url encoding;
61
+ return (0, js_base64.encode)(createSIWSMessage(payload)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
67
62
  }
68
-
69
- // optional features
70
- const SolanaSignTransactions = 'solana:signTransactions';
71
- const SolanaCloneAuthorization = 'solana:cloneAuthorization';
72
- const SolanaSignInWithSolana = 'solana:signInWithSolana';
73
-
63
+ //#endregion
64
+ //#region src/types.ts
65
+ const SolanaSignTransactions = "solana:signTransactions";
66
+ const SolanaCloneAuthorization = "solana:cloneAuthorization";
67
+ const SolanaSignInWithSolana = "solana:signInWithSolana";
68
+ //#endregion
69
+ //#region src/base58Utils.ts
74
70
  function fromUint8Array(byteArray) {
75
- return codecsStrings.getBase58Decoder().decode(byteArray);
71
+ return (0, _solana_codecs_strings.getBase58Decoder)().decode(byteArray);
76
72
  }
77
73
  function base64ToBase58(base64EncodedString) {
78
- return fromUint8Array(jsBase64.toUint8Array(base64EncodedString));
74
+ return fromUint8Array((0, js_base64.toUint8Array)(base64EncodedString));
79
75
  }
80
-
76
+ //#endregion
77
+ //#region src/createMobileWalletProxy.ts
81
78
  /**
82
- * Creates a {@link MobileWallet} proxy that handles backwards compatibility and API to RPC conversion.
83
- *
84
- * @param protocolVersion the protocol version in use for this session/request
85
- * @param protocolRequestHandler callback function that handles sending the RPC request to the wallet endpoint.
86
- * @returns a {@link MobileWallet} proxy
87
- */
79
+ * Creates a {@link MobileWallet} proxy that handles backwards compatibility and API to RPC conversion.
80
+ *
81
+ * @param protocolVersion the protocol version in use for this session/request
82
+ * @param protocolRequestHandler callback function that handles sending the RPC request to the wallet endpoint.
83
+ * @returns a {@link MobileWallet} proxy
84
+ */
88
85
  function createMobileWalletProxy(protocolVersion, protocolRequestHandler) {
89
- return new Proxy({}, {
90
- get(target, p) {
91
- // Wrapping a Proxy in a promise results in the Proxy being asked for a 'then' property so must
92
- // return null if 'then' is called on this proxy to let the 'resolve()' call know this is not a promise.
93
- // see: https://stackoverflow.com/a/53890904
94
- //@ts-ignore
95
- if (p === 'then') {
96
- return null;
97
- }
98
- if (target[p] == null) {
99
- target[p] = async function (inputParams) {
100
- const { method, params } = handleMobileWalletRequest(p, inputParams, protocolVersion);
101
- const result = await protocolRequestHandler(method, params);
102
- // if the request tried to sign in but the wallet did not return a sign in result, fallback on message signing
103
- if (method === 'authorize' && params.sign_in_payload && !result.sign_in_result) {
104
- result['sign_in_result'] = await signInFallback(params.sign_in_payload, result, protocolRequestHandler);
105
- }
106
- return handleMobileWalletResponse(p, result, protocolVersion);
107
- };
108
- }
109
- return target[p];
110
- },
111
- defineProperty() {
112
- return false;
113
- },
114
- deleteProperty() {
115
- return false;
116
- },
117
- });
86
+ return new Proxy({}, {
87
+ get(target, p) {
88
+ if (p === "then") return null;
89
+ if (target[p] == null) target[p] = async function(inputParams) {
90
+ const { method, params } = handleMobileWalletRequest(p, inputParams, protocolVersion);
91
+ const result = await protocolRequestHandler(method, params);
92
+ if (method === "authorize" && params.sign_in_payload && !result.sign_in_result) result["sign_in_result"] = await signInFallback(params.sign_in_payload, result, protocolRequestHandler);
93
+ return handleMobileWalletResponse(p, result, protocolVersion);
94
+ };
95
+ return target[p];
96
+ },
97
+ defineProperty() {
98
+ return false;
99
+ },
100
+ deleteProperty() {
101
+ return false;
102
+ }
103
+ });
118
104
  }
119
105
  /**
120
- * Handles all {@link MobileWallet} API requests and determines the correct MWA RPC method and params to call.
121
- * This handles backwards compatibility, based on the provided @protocolVersion.
122
- *
123
- * @param methodName the name of {@link MobileWallet} method that was called
124
- * @param methodParams the parameters that were passed to the method
125
- * @param protocolVersion the protocol version in use for this session/request
126
- * @returns the RPC request method and params that should be sent to the wallet endpoint
127
- */
106
+ * Handles all {@link MobileWallet} API requests and determines the correct MWA RPC method and params to call.
107
+ * This handles backwards compatibility, based on the provided @protocolVersion.
108
+ *
109
+ * @param methodName the name of {@link MobileWallet} method that was called
110
+ * @param methodParams the parameters that were passed to the method
111
+ * @param protocolVersion the protocol version in use for this session/request
112
+ * @returns the RPC request method and params that should be sent to the wallet endpoint
113
+ */
128
114
  function handleMobileWalletRequest(methodName, methodParams, protocolVersion) {
129
- let params = methodParams;
130
- let method = methodName
131
- .toString()
132
- .replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`)
133
- .toLowerCase();
134
- switch (methodName) {
135
- case 'authorize': {
136
- let { chain } = params;
137
- if (protocolVersion === 'legacy') {
138
- switch (chain) {
139
- case 'solana:testnet': {
140
- chain = 'testnet';
141
- break;
142
- }
143
- case 'solana:devnet': {
144
- chain = 'devnet';
145
- break;
146
- }
147
- case 'solana:mainnet': {
148
- chain = 'mainnet-beta';
149
- break;
150
- }
151
- default: {
152
- chain = params.cluster;
153
- }
154
- }
155
- params.cluster = chain;
156
- }
157
- else {
158
- switch (chain) {
159
- case 'testnet':
160
- case 'devnet': {
161
- chain = `solana:${chain}`;
162
- break;
163
- }
164
- case 'mainnet-beta': {
165
- chain = 'solana:mainnet';
166
- break;
167
- }
168
- }
169
- params.chain = chain;
170
- }
171
- }
172
- case 'reauthorize': {
173
- const { auth_token, identity } = params;
174
- if (auth_token) {
175
- switch (protocolVersion) {
176
- case 'legacy': {
177
- method = 'reauthorize';
178
- params = { auth_token: auth_token, identity: identity };
179
- break;
180
- }
181
- default: {
182
- method = 'authorize';
183
- break;
184
- }
185
- }
186
- }
187
- break;
188
- }
189
- }
190
- return { method, params };
115
+ let params = methodParams;
116
+ let method = methodName.toString().replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`).toLowerCase();
117
+ switch (methodName) {
118
+ case "authorize": {
119
+ let { chain } = params;
120
+ if (protocolVersion === "legacy") {
121
+ switch (chain) {
122
+ case "solana:testnet":
123
+ chain = "testnet";
124
+ break;
125
+ case "solana:devnet":
126
+ chain = "devnet";
127
+ break;
128
+ case "solana:mainnet":
129
+ chain = "mainnet-beta";
130
+ break;
131
+ default: chain = params.cluster;
132
+ }
133
+ params.cluster = chain;
134
+ } else {
135
+ switch (chain) {
136
+ case "testnet":
137
+ case "devnet":
138
+ chain = `solana:${chain}`;
139
+ break;
140
+ case "mainnet-beta":
141
+ chain = "solana:mainnet";
142
+ break;
143
+ }
144
+ params.chain = chain;
145
+ }
146
+ }
147
+ case "reauthorize": {
148
+ const { auth_token, identity } = params;
149
+ if (auth_token) switch (protocolVersion) {
150
+ case "legacy":
151
+ method = "reauthorize";
152
+ params = {
153
+ auth_token,
154
+ identity
155
+ };
156
+ break;
157
+ default:
158
+ method = "authorize";
159
+ break;
160
+ }
161
+ break;
162
+ }
163
+ }
164
+ return {
165
+ method,
166
+ params
167
+ };
191
168
  }
192
169
  /**
193
- * Handles all {@link MobileWallet} API responses and modifies the response for backwards compatibility, if needed
194
- *
195
- * @param method the {@link MobileWallet} method that was called
196
- * @param response the original response that was returned by the method call
197
- * @param protocolVersion the protocol version in use for this session/request
198
- * @returns the possibly modified response
199
- */
170
+ * Handles all {@link MobileWallet} API responses and modifies the response for backwards compatibility, if needed
171
+ *
172
+ * @param method the {@link MobileWallet} method that was called
173
+ * @param response the original response that was returned by the method call
174
+ * @param protocolVersion the protocol version in use for this session/request
175
+ * @returns the possibly modified response
176
+ */
200
177
  function handleMobileWalletResponse(method, response, protocolVersion) {
201
- switch (method) {
202
- case 'getCapabilities': {
203
- const capabilities = response;
204
- switch (protocolVersion) {
205
- case 'legacy': {
206
- const features = [SolanaSignTransactions];
207
- if (capabilities.supports_clone_authorization === true) {
208
- features.push(SolanaCloneAuthorization);
209
- }
210
- return {
211
- ...capabilities,
212
- features: features,
213
- };
214
- }
215
- case 'v1': {
216
- return {
217
- ...capabilities,
218
- supports_sign_and_send_transactions: true,
219
- supports_clone_authorization: capabilities.features.includes(SolanaCloneAuthorization)
220
- };
221
- }
222
- }
223
- }
224
- }
225
- return response;
178
+ switch (method) {
179
+ case "getCapabilities": {
180
+ const capabilities = response;
181
+ switch (protocolVersion) {
182
+ case "legacy": {
183
+ const features = [SolanaSignTransactions];
184
+ if (capabilities.supports_clone_authorization === true) features.push(SolanaCloneAuthorization);
185
+ return {
186
+ ...capabilities,
187
+ features
188
+ };
189
+ }
190
+ case "v1": return {
191
+ ...capabilities,
192
+ supports_sign_and_send_transactions: true,
193
+ supports_clone_authorization: capabilities.features.includes(SolanaCloneAuthorization)
194
+ };
195
+ }
196
+ }
197
+ }
198
+ return response;
226
199
  }
227
200
  async function signInFallback(signInPayload, authorizationResult, protocolRequestHandler) {
228
- const domain = signInPayload.domain ?? window.location.host;
229
- const address = authorizationResult.accounts[0].address;
230
- const siwsMessage = createSIWSMessageBase64Url({ ...signInPayload, domain, address: base64ToBase58(address) });
231
- const signMessageResult = await protocolRequestHandler('sign_messages', {
232
- addresses: [address],
233
- payloads: [siwsMessage]
234
- });
235
- const signedPayload = jsBase64.toUint8Array(signMessageResult.signed_payloads[0]);
236
- const signedMessage = jsBase64.fromUint8Array(signedPayload.slice(0, signedPayload.length - 64));
237
- const signature = jsBase64.fromUint8Array(signedPayload.slice(signedPayload.length - 64));
238
- const signInResult = {
239
- address: address,
240
- // Workaround: some wallets have been observed to only reply with the message signature.
241
- // This is non-compliant with the spec, but in the interest of maximizing compatibility,
242
- // detect this case and reuse the original message.
243
- signed_message: signedMessage.length == 0 ? siwsMessage : signedMessage,
244
- signature
245
- };
246
- return signInResult;
201
+ const domain = signInPayload.domain ?? window.location.host;
202
+ const address = authorizationResult.accounts[0].address;
203
+ const siwsMessage = createSIWSMessageBase64Url({
204
+ ...signInPayload,
205
+ domain,
206
+ address: base64ToBase58(address)
207
+ });
208
+ const signedPayload = (0, js_base64.toUint8Array)((await protocolRequestHandler("sign_messages", {
209
+ addresses: [address],
210
+ payloads: [siwsMessage]
211
+ })).signed_payloads[0]);
212
+ const signedMessage = (0, js_base64.fromUint8Array)(signedPayload.slice(0, signedPayload.length - 64));
213
+ const signature = (0, js_base64.fromUint8Array)(signedPayload.slice(signedPayload.length - 64));
214
+ return {
215
+ address,
216
+ signed_message: signedMessage.length == 0 ? siwsMessage : signedMessage,
217
+ signature
218
+ };
247
219
  }
248
-
249
- reactNative.AppRegistry.registerHeadlessTask('SolanaMobileWalletAdapterSessionBackgroundTask', () => {
250
- return async () => {
251
- // This is a no-op task that is used to keep the app alive while the session is active.
252
- // The actual session management is handled in the native module.
253
- // This is necessary for the React Native Android implementation to work correctly.
254
- // The task is started before startActivityResult and stopped when the activity result callback is triggered
255
- };
220
+ //#endregion
221
+ //#region src/__forks__/react-native/transact.ts
222
+ react_native.AppRegistry.registerHeadlessTask("SolanaMobileWalletAdapterSessionBackgroundTask", () => {
223
+ return async () => {};
256
224
  });
257
- const LINKING_ERROR = `The package 'solana-mobile-wallet-adapter-protocol' doesn't seem to be linked. Make sure: \n\n` +
258
- '- You rebuilt the app after installing the package\n' +
259
- '- If you are using Lerna workspaces\n' +
260
- ' - You have added `@solana-mobile/mobile-wallet-adapter-protocol` as an explicit dependency, and\n' +
261
- ' - You have added `@solana-mobile/mobile-wallet-adapter-protocol` to the `nohoist` section of your package.json\n' +
262
- '- You are not using Expo managed workflow\n';
263
- const SolanaMobileWalletAdapter = reactNative.Platform.OS === 'android' && NativeSolanaMobileWalletAdapter
264
- ? NativeSolanaMobileWalletAdapter
265
- : new Proxy({}, {
266
- get() {
267
- throw new Error(reactNative.Platform.OS !== 'android'
268
- ? 'The package `solana-mobile-wallet-adapter-protocol` is only compatible with React Native Android'
269
- : LINKING_ERROR);
270
- },
271
- });
225
+ const LINKING_ERROR = "The package 'solana-mobile-wallet-adapter-protocol' doesn't seem to be linked. Make sure: \n\n- You rebuilt the app after installing the package\n- If you are using Lerna workspaces\n - You have added `@solana-mobile/mobile-wallet-adapter-protocol` as an explicit dependency, and\n - You have added `@solana-mobile/mobile-wallet-adapter-protocol` to the `nohoist` section of your package.json\n- You are not using Expo managed workflow\n";
226
+ const SolanaMobileWalletAdapter = react_native.Platform.OS === "android" && NativeSolanaMobileWalletAdapter_default ? NativeSolanaMobileWalletAdapter_default : new Proxy({}, { get() {
227
+ throw new Error(react_native.Platform.OS !== "android" ? "The package `solana-mobile-wallet-adapter-protocol` is only compatible with React Native Android" : LINKING_ERROR);
228
+ } });
272
229
  function getErrorMessage(e) {
273
- switch (e.code) {
274
- case 'ERROR_WALLET_NOT_FOUND':
275
- return 'Found no installed wallet that supports the mobile wallet protocol.';
276
- default:
277
- return e.message;
278
- }
230
+ switch (e.code) {
231
+ case "ERROR_WALLET_NOT_FOUND": return "Found no installed wallet that supports the mobile wallet protocol.";
232
+ default: return e.message;
233
+ }
279
234
  }
280
235
  function handleError(e) {
281
- if (e instanceof Error) {
282
- const reactNativeError = e;
283
- switch (reactNativeError.code) {
284
- case undefined:
285
- throw e;
286
- case 'JSON_RPC_ERROR': {
287
- const details = reactNativeError.userInfo;
288
- throw new SolanaMobileWalletAdapterProtocolError(0 /* jsonRpcMessageId */, details.jsonRpcErrorCode, e.message);
289
- }
290
- default:
291
- throw new SolanaMobileWalletAdapterError(reactNativeError.code, getErrorMessage(reactNativeError), reactNativeError.userInfo);
292
- }
293
- }
294
- throw e;
236
+ if (e instanceof Error) {
237
+ const reactNativeError = e;
238
+ switch (reactNativeError.code) {
239
+ case void 0: throw e;
240
+ case "JSON_RPC_ERROR": {
241
+ const details = reactNativeError.userInfo;
242
+ throw new SolanaMobileWalletAdapterProtocolError(0, details.jsonRpcErrorCode, e.message);
243
+ }
244
+ default: throw new SolanaMobileWalletAdapterError(reactNativeError.code, getErrorMessage(reactNativeError), reactNativeError.userInfo);
245
+ }
246
+ }
247
+ throw e;
295
248
  }
296
249
  async function transact(callback, config) {
297
- let didSuccessfullyConnect = false;
298
- try {
299
- const sessionProperties = await SolanaMobileWalletAdapter.startSession(config);
300
- didSuccessfullyConnect = true;
301
- const wallet = createMobileWalletProxy(sessionProperties.protocol_version, async (method, params) => {
302
- try {
303
- return SolanaMobileWalletAdapter.invoke(method, params);
304
- }
305
- catch (e) {
306
- return handleError(e);
307
- }
308
- });
309
- return await callback(wallet);
310
- }
311
- catch (e) {
312
- return handleError(e);
313
- }
314
- finally {
315
- if (didSuccessfullyConnect) {
316
- await SolanaMobileWalletAdapter.endSession();
317
- }
318
- }
250
+ let didSuccessfullyConnect = false;
251
+ try {
252
+ const sessionProperties = await SolanaMobileWalletAdapter.startSession(config);
253
+ didSuccessfullyConnect = true;
254
+ return await callback(createMobileWalletProxy(sessionProperties.protocol_version, async (method, params) => {
255
+ try {
256
+ return SolanaMobileWalletAdapter.invoke(method, params);
257
+ } catch (e) {
258
+ return handleError(e);
259
+ }
260
+ }));
261
+ } catch (e) {
262
+ return handleError(e);
263
+ } finally {
264
+ if (didSuccessfullyConnect) await SolanaMobileWalletAdapter.endSession();
265
+ }
319
266
  }
320
-
267
+ //#endregion
321
268
  exports.SolanaCloneAuthorization = SolanaCloneAuthorization;
322
269
  exports.SolanaMobileWalletAdapterError = SolanaMobileWalletAdapterError;
323
270
  exports.SolanaMobileWalletAdapterErrorCode = SolanaMobileWalletAdapterErrorCode;
@@ -326,3 +273,5 @@ exports.SolanaMobileWalletAdapterProtocolErrorCode = SolanaMobileWalletAdapterPr
326
273
  exports.SolanaSignInWithSolana = SolanaSignInWithSolana;
327
274
  exports.SolanaSignTransactions = SolanaSignTransactions;
328
275
  exports.transact = transact;
276
+
277
+ //# sourceMappingURL=index.native.js.map