@solana-mobile/mobile-wallet-adapter-protocol-web3js 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.
package/README.md CHANGED
@@ -1,3 +1,3 @@
1
1
  # `@solana-mobile/mobile-wallet-adapter-protocol-web3js`
2
2
 
3
- This is a convenience wrapper that makes it easy to use common primitives from [@solana/web3.js](https://github.com/solana-labs/solana-web3.js) – such as `Transaction` and `Uint8Array` – with [@solana-mobile/mobile-wallet-adapter-protocol](https://github.com/solana-mobile/mobile-wallet-adapter/tree/main/js/packages/mobile-wallet-adapter-protocol).
3
+ This is a convenience wrapper that makes it easy to use common primitives from [@solana/web3.js](https://github.com/solana-labs/solana-web3.js) – such as `Transaction` and `Uint8Array` – with [@solana-mobile/mobile-wallet-adapter-protocol](https://github.com/solana-mobile/mobile-wallet-adapter/tree/main/js/packages/mobile-wallet-adapter-protocol).
@@ -1,118 +1,124 @@
1
- 'use strict';
2
-
3
- var web3_js = require('@solana/web3.js');
4
- var mobileWalletAdapterProtocol = require('@solana-mobile/mobile-wallet-adapter-protocol');
5
- var bs58 = require('bs58');
6
-
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region \0rolldown/runtime.js
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
+ key = keys[i];
12
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
13
+ get: ((k) => from[k]).bind(null, key),
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
20
+ value: mod,
21
+ enumerable: true
22
+ }) : target, mod));
23
+ //#endregion
24
+ let _solana_web3_js = require("@solana/web3.js");
25
+ let _solana_mobile_mobile_wallet_adapter_protocol = require("@solana-mobile/mobile-wallet-adapter-protocol");
26
+ let bs58 = require("bs58");
27
+ bs58 = __toESM(bs58);
28
+ //#region src/base64Utils.ts
7
29
  function fromUint8Array(byteArray) {
8
- return window.btoa(String.fromCharCode.call(null, ...byteArray));
30
+ return window.btoa(String.fromCharCode.call(null, ...byteArray));
9
31
  }
10
32
  function toUint8Array(base64EncodedByteArray) {
11
- return new Uint8Array(window
12
- .atob(base64EncodedByteArray)
13
- .split('')
14
- .map((c) => c.charCodeAt(0)));
33
+ return new Uint8Array(window.atob(base64EncodedByteArray).split("").map((c) => c.charCodeAt(0)));
15
34
  }
16
-
35
+ //#endregion
36
+ //#region src/transact.ts
17
37
  function getPayloadFromTransaction(transaction) {
18
- const serializedTransaction = 'version' in transaction
19
- ? transaction.serialize()
20
- : transaction.serialize({
21
- requireAllSignatures: false,
22
- verifySignatures: false,
23
- });
24
- const payload = fromUint8Array(serializedTransaction);
25
- return payload;
38
+ return fromUint8Array("version" in transaction ? transaction.serialize() : transaction.serialize({
39
+ requireAllSignatures: false,
40
+ verifySignatures: false
41
+ }));
26
42
  }
27
43
  function getTransactionFromWireMessage(byteArray) {
28
- const numSignatures = byteArray[0];
29
- const messageOffset = numSignatures * web3_js.SIGNATURE_LENGTH_IN_BYTES + 1;
30
- const version = web3_js.VersionedMessage.deserializeMessageVersion(byteArray.slice(messageOffset, byteArray.length));
31
- if (version === 'legacy') {
32
- return web3_js.Transaction.from(byteArray);
33
- }
34
- else {
35
- return web3_js.VersionedTransaction.deserialize(byteArray);
36
- }
44
+ const messageOffset = byteArray[0] * _solana_web3_js.SIGNATURE_LENGTH_IN_BYTES + 1;
45
+ if (_solana_web3_js.VersionedMessage.deserializeMessageVersion(byteArray.slice(messageOffset, byteArray.length)) === "legacy") return _solana_web3_js.Transaction.from(byteArray);
46
+ else return _solana_web3_js.VersionedTransaction.deserialize(byteArray);
37
47
  }
38
48
  async function transact(callback, config) {
39
- const augmentedCallback = (wallet) => {
40
- return callback(augmentWalletAPI(wallet));
41
- };
42
- return await mobileWalletAdapterProtocol.transact(augmentedCallback, config);
49
+ const augmentedCallback = (wallet) => {
50
+ return callback(augmentWalletAPI(wallet));
51
+ };
52
+ return await (0, _solana_mobile_mobile_wallet_adapter_protocol.transact)(augmentedCallback, config);
43
53
  }
44
54
  async function startRemoteScenario(config) {
45
- const { wallet, close, associationUrl } = await mobileWalletAdapterProtocol.startRemoteScenario(config);
46
- const augmentedPromise = wallet.then((wallet) => {
47
- return augmentWalletAPI(wallet);
48
- });
49
- return { wallet: augmentedPromise, close, associationUrl };
55
+ const { wallet, close, associationUrl } = await (0, _solana_mobile_mobile_wallet_adapter_protocol.startRemoteScenario)(config);
56
+ return {
57
+ wallet: wallet.then((wallet) => {
58
+ return augmentWalletAPI(wallet);
59
+ }),
60
+ close,
61
+ associationUrl
62
+ };
50
63
  }
51
64
  function augmentWalletAPI(wallet) {
52
- return new Proxy({}, {
53
- get(target, p) {
54
- if (target[p] == null) {
55
- switch (p) {
56
- case 'signAndSendTransactions':
57
- target[p] = async function ({ minContextSlot, commitment, skipPreflight, maxRetries, waitForCommitmentToSendNextTransaction, transactions, ...rest }) {
58
- const payloads = transactions.map(getPayloadFromTransaction);
59
- const options = {
60
- min_context_slot: minContextSlot,
61
- commitment: commitment,
62
- skip_preflight: skipPreflight,
63
- max_retries: maxRetries,
64
- wait_for_commitment_to_send_next_transaction: waitForCommitmentToSendNextTransaction
65
- };
66
- const { signatures: base64EncodedSignatures } = await wallet.signAndSendTransactions({
67
- ...rest,
68
- ...(Object.values(options).some(element => element != null)
69
- ? { options: options }
70
- : null),
71
- payloads,
72
- });
73
- const signatures = base64EncodedSignatures.map(toUint8Array).map(bs58.encode);
74
- return signatures;
75
- };
76
- break;
77
- case 'signMessages':
78
- target[p] = async function ({ payloads, ...rest }) {
79
- const base64EncodedPayloads = payloads.map(fromUint8Array);
80
- const { signed_payloads: base64EncodedSignedMessages } = await wallet.signMessages({
81
- ...rest,
82
- payloads: base64EncodedPayloads,
83
- });
84
- const signedMessages = base64EncodedSignedMessages.map(toUint8Array);
85
- return signedMessages;
86
- };
87
- break;
88
- case 'signTransactions':
89
- target[p] = async function ({ transactions, ...rest }) {
90
- const payloads = transactions.map(getPayloadFromTransaction);
91
- const { signed_payloads: base64EncodedCompiledTransactions } = await wallet.signTransactions({
92
- ...rest,
93
- payloads,
94
- });
95
- const compiledTransactions = base64EncodedCompiledTransactions.map(toUint8Array);
96
- const signedTransactions = compiledTransactions.map(getTransactionFromWireMessage);
97
- return signedTransactions;
98
- };
99
- break;
100
- default: {
101
- target[p] = wallet[p];
102
- break;
103
- }
104
- }
105
- }
106
- return target[p];
107
- },
108
- defineProperty() {
109
- return false;
110
- },
111
- deleteProperty() {
112
- return false;
113
- },
114
- });
65
+ return new Proxy({}, {
66
+ get(target, p) {
67
+ if (target[p] == null) switch (p) {
68
+ case "signAndSendTransactions":
69
+ target[p] = async function({ minContextSlot, commitment, skipPreflight, maxRetries, waitForCommitmentToSendNextTransaction, transactions, ...rest }) {
70
+ const payloads = transactions.map(getPayloadFromTransaction);
71
+ const options = {
72
+ min_context_slot: minContextSlot,
73
+ commitment,
74
+ skip_preflight: skipPreflight,
75
+ max_retries: maxRetries,
76
+ wait_for_commitment_to_send_next_transaction: waitForCommitmentToSendNextTransaction
77
+ };
78
+ const { signatures: base64EncodedSignatures } = await wallet.signAndSendTransactions({
79
+ ...rest,
80
+ ...Object.values(options).some((element) => element != null) ? { options } : null,
81
+ payloads
82
+ });
83
+ return base64EncodedSignatures.map(toUint8Array).map(bs58.default.encode);
84
+ };
85
+ break;
86
+ case "signMessages":
87
+ target[p] = async function({ payloads, ...rest }) {
88
+ const base64EncodedPayloads = payloads.map(fromUint8Array);
89
+ const { signed_payloads: base64EncodedSignedMessages } = await wallet.signMessages({
90
+ ...rest,
91
+ payloads: base64EncodedPayloads
92
+ });
93
+ return base64EncodedSignedMessages.map(toUint8Array);
94
+ };
95
+ break;
96
+ case "signTransactions":
97
+ target[p] = async function({ transactions, ...rest }) {
98
+ const payloads = transactions.map(getPayloadFromTransaction);
99
+ const { signed_payloads: base64EncodedCompiledTransactions } = await wallet.signTransactions({
100
+ ...rest,
101
+ payloads
102
+ });
103
+ return base64EncodedCompiledTransactions.map(toUint8Array).map(getTransactionFromWireMessage);
104
+ };
105
+ break;
106
+ default:
107
+ target[p] = wallet[p];
108
+ break;
109
+ }
110
+ return target[p];
111
+ },
112
+ defineProperty() {
113
+ return false;
114
+ },
115
+ deleteProperty() {
116
+ return false;
117
+ }
118
+ });
115
119
  }
116
-
120
+ //#endregion
117
121
  exports.startRemoteScenario = startRemoteScenario;
118
122
  exports.transact = transact;
123
+
124
+ //# sourceMappingURL=index.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.browser.js","names":["SIGNATURE_LENGTH_IN_BYTES","VersionedMessage","Transaction","VersionedTransaction"],"sources":["../../src/base64Utils.ts","../../src/transact.ts"],"sourcesContent":["export function fromUint8Array(byteArray: Uint8Array): string {\n return window.btoa(String.fromCharCode.call(null, ...byteArray));\n}\n\nexport function toUint8Array(base64EncodedByteArray: string): Uint8Array {\n return new Uint8Array(\n window\n .atob(base64EncodedByteArray)\n .split('')\n .map((c) => c.charCodeAt(0)),\n );\n}\n","import {\n SIGNATURE_LENGTH_IN_BYTES,\n Transaction as LegacyTransaction,\n Transaction,\n TransactionSignature,\n VersionedMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AuthorizeAPI,\n Base64EncodedAddress,\n Base64EncodedTransaction,\n CloneAuthorizationAPI,\n DeauthorizeAPI,\n GetCapabilitiesAPI,\n MobileWallet,\n ReauthorizeAPI,\n TerminateSessionAPI,\n transact as baseTransact,\n startRemoteScenario as baseStartRemoteScenario,\n WalletAssociationConfig,\n RemoteWalletAssociationConfig,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport bs58 from 'bs58';\n\nimport { fromUint8Array, toUint8Array } from './base64Utils.js';\n\ninterface Web3SignAndSendTransactionsAPI {\n signAndSendTransactions<T extends LegacyTransaction | VersionedTransaction>(params: {\n minContextSlot?: number;\n commitment?: string;\n skipPreflight?: boolean;\n maxRetries?: number;\n waitForCommitmentToSendNextTransaction?: boolean;\n transactions: T[];\n }): Promise<TransactionSignature[]>;\n}\n\ninterface Web3SignTransactionsAPI {\n signTransactions<T extends LegacyTransaction | VersionedTransaction>(params: { transactions: T[] }): Promise<T[]>;\n}\n\ninterface Web3SignMessagesAPI {\n signMessages(params: { addresses: Base64EncodedAddress[]; payloads: Uint8Array[] }): Promise<Uint8Array[]>;\n}\n\nexport interface Web3MobileWallet\n extends\n AuthorizeAPI,\n CloneAuthorizationAPI,\n DeauthorizeAPI,\n GetCapabilitiesAPI,\n ReauthorizeAPI,\n Web3SignAndSendTransactionsAPI,\n Web3SignTransactionsAPI,\n Web3SignMessagesAPI {}\n\nexport interface Web3RemoteMobileWallet extends Web3MobileWallet, TerminateSessionAPI {}\n\nexport type Web3Scenario = Readonly<{\n wallet: Promise<Web3MobileWallet>;\n close: () => void;\n}>;\n\nexport type Web3RemoteScenario = Web3Scenario &\n Readonly<{\n associationUrl: URL;\n }>;\n\nfunction getPayloadFromTransaction(transaction: LegacyTransaction | VersionedTransaction): Base64EncodedTransaction {\n const serializedTransaction =\n 'version' in transaction\n ? transaction.serialize()\n : transaction.serialize({\n requireAllSignatures: false,\n verifySignatures: false,\n });\n const payload = fromUint8Array(serializedTransaction);\n return payload;\n}\n\nfunction getTransactionFromWireMessage(byteArray: Uint8Array): Transaction | VersionedTransaction {\n const numSignatures = byteArray[0];\n const messageOffset = numSignatures * SIGNATURE_LENGTH_IN_BYTES + 1;\n const version = VersionedMessage.deserializeMessageVersion(byteArray.slice(messageOffset, byteArray.length));\n if (version === 'legacy') {\n return Transaction.from(byteArray);\n } else {\n return VersionedTransaction.deserialize(byteArray);\n }\n}\n\nexport async function transact<TReturn>(\n callback: (wallet: Web3MobileWallet) => TReturn,\n config?: WalletAssociationConfig,\n): Promise<TReturn> {\n const augmentedCallback: (wallet: MobileWallet) => TReturn = (wallet) => {\n return callback(augmentWalletAPI(wallet));\n };\n return await baseTransact(augmentedCallback, config);\n}\n\nexport async function startRemoteScenario(config: RemoteWalletAssociationConfig): Promise<Web3RemoteScenario> {\n const { wallet, close, associationUrl } = await baseStartRemoteScenario(config);\n const augmentedPromise = wallet.then((wallet) => {\n return augmentWalletAPI(wallet);\n });\n return { wallet: augmentedPromise, close, associationUrl };\n}\n\nfunction augmentWalletAPI(wallet: MobileWallet): Web3MobileWallet {\n return new Proxy<Web3MobileWallet>({} as Web3MobileWallet, {\n get<TMethodName extends keyof Web3MobileWallet>(target: Web3MobileWallet, p: TMethodName) {\n if (target[p] == null) {\n switch (p) {\n case 'signAndSendTransactions':\n target[p] = async function ({\n minContextSlot,\n commitment,\n skipPreflight,\n maxRetries,\n waitForCommitmentToSendNextTransaction,\n transactions,\n ...rest\n }: Parameters<Web3MobileWallet['signAndSendTransactions']>[0]) {\n const payloads = transactions.map(getPayloadFromTransaction);\n const options = {\n min_context_slot: minContextSlot,\n commitment: commitment,\n skip_preflight: skipPreflight,\n max_retries: maxRetries,\n wait_for_commitment_to_send_next_transaction: waitForCommitmentToSendNextTransaction,\n };\n const { signatures: base64EncodedSignatures } = await wallet.signAndSendTransactions({\n ...rest,\n ...(Object.values(options).some((element) => element != null)\n ? { options: options }\n : null),\n payloads,\n });\n const signatures = base64EncodedSignatures.map(toUint8Array).map(bs58.encode);\n return signatures as TransactionSignature[];\n } as Web3MobileWallet[TMethodName];\n break;\n case 'signMessages':\n target[p] = async function ({\n payloads,\n ...rest\n }: Parameters<Web3MobileWallet['signMessages']>[0]) {\n const base64EncodedPayloads = payloads.map(fromUint8Array);\n const { signed_payloads: base64EncodedSignedMessages } = await wallet.signMessages({\n ...rest,\n payloads: base64EncodedPayloads,\n });\n const signedMessages = base64EncodedSignedMessages.map(toUint8Array);\n return signedMessages;\n } as Web3MobileWallet[TMethodName];\n break;\n case 'signTransactions':\n target[p] = async function ({\n transactions,\n ...rest\n }: Parameters<Web3MobileWallet['signTransactions']>[0]) {\n const payloads = transactions.map(getPayloadFromTransaction);\n const { signed_payloads: base64EncodedCompiledTransactions } =\n await wallet.signTransactions({\n ...rest,\n payloads,\n });\n const compiledTransactions = base64EncodedCompiledTransactions.map(toUint8Array);\n const signedTransactions = compiledTransactions.map(getTransactionFromWireMessage);\n return signedTransactions;\n } as Web3MobileWallet[TMethodName];\n break;\n default: {\n target[p] = wallet[p] as unknown as Web3MobileWallet[TMethodName];\n break;\n }\n }\n }\n return target[p];\n },\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAgB,eAAe,WAA+B;AAC1D,QAAO,OAAO,KAAK,OAAO,aAAa,KAAK,MAAM,GAAG,UAAU,CAAC;;AAGpE,SAAgB,aAAa,wBAA4C;AACrE,QAAO,IAAI,WACP,OACK,KAAK,uBAAuB,CAC5B,MAAM,GAAG,CACT,KAAK,MAAM,EAAE,WAAW,EAAE,CAAC,CACnC;;;;AC2DL,SAAS,0BAA0B,aAAiF;AAShH,QADgB,eANZ,aAAa,cACP,YAAY,WAAW,GACvB,YAAY,UAAU;EAClB,sBAAsB;EACtB,kBAAkB;EACrB,CAAC,CACyC;;AAIzD,SAAS,8BAA8B,WAA2D;CAE9F,MAAM,gBADgB,UAAU,KACMA,gBAAAA,4BAA4B;AAElE,KADgBC,gBAAAA,iBAAiB,0BAA0B,UAAU,MAAM,eAAe,UAAU,OAAO,CAAC,KAC5F,SACZ,QAAOC,gBAAAA,YAAY,KAAK,UAAU;KAElC,QAAOC,gBAAAA,qBAAqB,YAAY,UAAU;;AAI1D,eAAsB,SAClB,UACA,QACgB;CAChB,MAAM,qBAAwD,WAAW;AACrE,SAAO,SAAS,iBAAiB,OAAO,CAAC;;AAE7C,QAAO,OAAA,GAAA,8CAAA,UAAmB,mBAAmB,OAAO;;AAGxD,eAAsB,oBAAoB,QAAoE;CAC1G,MAAM,EAAE,QAAQ,OAAO,mBAAmB,OAAA,GAAA,8CAAA,qBAA8B,OAAO;AAI/E,QAAO;EAAE,QAHgB,OAAO,MAAM,WAAW;AAC7C,UAAO,iBAAiB,OAAO;IACjC;EACiC;EAAO;EAAgB;;AAG9D,SAAS,iBAAiB,QAAwC;AAC9D,QAAO,IAAI,MAAwB,EAAE,EAAsB;EACvD,IAAgD,QAA0B,GAAgB;AACtF,OAAI,OAAO,MAAM,KACb,SAAQ,GAAR;IACI,KAAK;AACD,YAAO,KAAK,eAAgB,EACxB,gBACA,YACA,eACA,YACA,wCACA,cACA,GAAG,QACwD;MAC3D,MAAM,WAAW,aAAa,IAAI,0BAA0B;MAC5D,MAAM,UAAU;OACZ,kBAAkB;OACN;OACZ,gBAAgB;OAChB,aAAa;OACb,8CAA8C;OACjD;MACD,MAAM,EAAE,YAAY,4BAA4B,MAAM,OAAO,wBAAwB;OACjF,GAAG;OACH,GAAI,OAAO,OAAO,QAAQ,CAAC,MAAM,YAAY,WAAW,KAAK,GACvD,EAAW,SAAS,GACpB;OACN;OACH,CAAC;AAEF,aADmB,wBAAwB,IAAI,aAAa,CAAC,IAAI,KAAA,QAAK,OAAO;;AAGjF;IACJ,KAAK;AACD,YAAO,KAAK,eAAgB,EACxB,UACA,GAAG,QAC6C;MAChD,MAAM,wBAAwB,SAAS,IAAI,eAAe;MAC1D,MAAM,EAAE,iBAAiB,gCAAgC,MAAM,OAAO,aAAa;OAC/E,GAAG;OACH,UAAU;OACb,CAAC;AAEF,aADuB,4BAA4B,IAAI,aAAa;;AAGxE;IACJ,KAAK;AACD,YAAO,KAAK,eAAgB,EACxB,cACA,GAAG,QACiD;MACpD,MAAM,WAAW,aAAa,IAAI,0BAA0B;MAC5D,MAAM,EAAE,iBAAiB,sCACrB,MAAM,OAAO,iBAAiB;OAC1B,GAAG;OACH;OACH,CAAC;AAGN,aAF6B,kCAAkC,IAAI,aAAa,CAChC,IAAI,8BAA8B;;AAGtF;IACJ;AACI,YAAO,KAAK,OAAO;AACnB;;AAIZ,UAAO,OAAO;;EAElB,iBAAiB;AACb,UAAO;;EAEX,iBAAiB;AACb,UAAO;;EAEd,CAAC"}
package/lib/cjs/index.js CHANGED
@@ -1,118 +1,124 @@
1
- 'use strict';
2
-
3
- var web3_js = require('@solana/web3.js');
4
- var mobileWalletAdapterProtocol = require('@solana-mobile/mobile-wallet-adapter-protocol');
5
- var bs58 = require('bs58');
6
-
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region \0rolldown/runtime.js
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
+ key = keys[i];
12
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
13
+ get: ((k) => from[k]).bind(null, key),
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
20
+ value: mod,
21
+ enumerable: true
22
+ }) : target, mod));
23
+ //#endregion
24
+ let _solana_web3_js = require("@solana/web3.js");
25
+ let _solana_mobile_mobile_wallet_adapter_protocol = require("@solana-mobile/mobile-wallet-adapter-protocol");
26
+ let bs58 = require("bs58");
27
+ bs58 = __toESM(bs58);
28
+ //#region src/base64Utils.ts
7
29
  function fromUint8Array(byteArray) {
8
- return window.btoa(String.fromCharCode.call(null, ...byteArray));
30
+ return window.btoa(String.fromCharCode.call(null, ...byteArray));
9
31
  }
10
32
  function toUint8Array(base64EncodedByteArray) {
11
- return new Uint8Array(window
12
- .atob(base64EncodedByteArray)
13
- .split('')
14
- .map((c) => c.charCodeAt(0)));
33
+ return new Uint8Array(window.atob(base64EncodedByteArray).split("").map((c) => c.charCodeAt(0)));
15
34
  }
16
-
35
+ //#endregion
36
+ //#region src/transact.ts
17
37
  function getPayloadFromTransaction(transaction) {
18
- const serializedTransaction = 'version' in transaction
19
- ? transaction.serialize()
20
- : transaction.serialize({
21
- requireAllSignatures: false,
22
- verifySignatures: false,
23
- });
24
- const payload = fromUint8Array(serializedTransaction);
25
- return payload;
38
+ return fromUint8Array("version" in transaction ? transaction.serialize() : transaction.serialize({
39
+ requireAllSignatures: false,
40
+ verifySignatures: false
41
+ }));
26
42
  }
27
43
  function getTransactionFromWireMessage(byteArray) {
28
- const numSignatures = byteArray[0];
29
- const messageOffset = numSignatures * web3_js.SIGNATURE_LENGTH_IN_BYTES + 1;
30
- const version = web3_js.VersionedMessage.deserializeMessageVersion(byteArray.slice(messageOffset, byteArray.length));
31
- if (version === 'legacy') {
32
- return web3_js.Transaction.from(byteArray);
33
- }
34
- else {
35
- return web3_js.VersionedTransaction.deserialize(byteArray);
36
- }
44
+ const messageOffset = byteArray[0] * _solana_web3_js.SIGNATURE_LENGTH_IN_BYTES + 1;
45
+ if (_solana_web3_js.VersionedMessage.deserializeMessageVersion(byteArray.slice(messageOffset, byteArray.length)) === "legacy") return _solana_web3_js.Transaction.from(byteArray);
46
+ else return _solana_web3_js.VersionedTransaction.deserialize(byteArray);
37
47
  }
38
48
  async function transact(callback, config) {
39
- const augmentedCallback = (wallet) => {
40
- return callback(augmentWalletAPI(wallet));
41
- };
42
- return await mobileWalletAdapterProtocol.transact(augmentedCallback, config);
49
+ const augmentedCallback = (wallet) => {
50
+ return callback(augmentWalletAPI(wallet));
51
+ };
52
+ return await (0, _solana_mobile_mobile_wallet_adapter_protocol.transact)(augmentedCallback, config);
43
53
  }
44
54
  async function startRemoteScenario(config) {
45
- const { wallet, close, associationUrl } = await mobileWalletAdapterProtocol.startRemoteScenario(config);
46
- const augmentedPromise = wallet.then((wallet) => {
47
- return augmentWalletAPI(wallet);
48
- });
49
- return { wallet: augmentedPromise, close, associationUrl };
55
+ const { wallet, close, associationUrl } = await (0, _solana_mobile_mobile_wallet_adapter_protocol.startRemoteScenario)(config);
56
+ return {
57
+ wallet: wallet.then((wallet) => {
58
+ return augmentWalletAPI(wallet);
59
+ }),
60
+ close,
61
+ associationUrl
62
+ };
50
63
  }
51
64
  function augmentWalletAPI(wallet) {
52
- return new Proxy({}, {
53
- get(target, p) {
54
- if (target[p] == null) {
55
- switch (p) {
56
- case 'signAndSendTransactions':
57
- target[p] = async function ({ minContextSlot, commitment, skipPreflight, maxRetries, waitForCommitmentToSendNextTransaction, transactions, ...rest }) {
58
- const payloads = transactions.map(getPayloadFromTransaction);
59
- const options = {
60
- min_context_slot: minContextSlot,
61
- commitment: commitment,
62
- skip_preflight: skipPreflight,
63
- max_retries: maxRetries,
64
- wait_for_commitment_to_send_next_transaction: waitForCommitmentToSendNextTransaction
65
- };
66
- const { signatures: base64EncodedSignatures } = await wallet.signAndSendTransactions({
67
- ...rest,
68
- ...(Object.values(options).some(element => element != null)
69
- ? { options: options }
70
- : null),
71
- payloads,
72
- });
73
- const signatures = base64EncodedSignatures.map(toUint8Array).map(bs58.encode);
74
- return signatures;
75
- };
76
- break;
77
- case 'signMessages':
78
- target[p] = async function ({ payloads, ...rest }) {
79
- const base64EncodedPayloads = payloads.map(fromUint8Array);
80
- const { signed_payloads: base64EncodedSignedMessages } = await wallet.signMessages({
81
- ...rest,
82
- payloads: base64EncodedPayloads,
83
- });
84
- const signedMessages = base64EncodedSignedMessages.map(toUint8Array);
85
- return signedMessages;
86
- };
87
- break;
88
- case 'signTransactions':
89
- target[p] = async function ({ transactions, ...rest }) {
90
- const payloads = transactions.map(getPayloadFromTransaction);
91
- const { signed_payloads: base64EncodedCompiledTransactions } = await wallet.signTransactions({
92
- ...rest,
93
- payloads,
94
- });
95
- const compiledTransactions = base64EncodedCompiledTransactions.map(toUint8Array);
96
- const signedTransactions = compiledTransactions.map(getTransactionFromWireMessage);
97
- return signedTransactions;
98
- };
99
- break;
100
- default: {
101
- target[p] = wallet[p];
102
- break;
103
- }
104
- }
105
- }
106
- return target[p];
107
- },
108
- defineProperty() {
109
- return false;
110
- },
111
- deleteProperty() {
112
- return false;
113
- },
114
- });
65
+ return new Proxy({}, {
66
+ get(target, p) {
67
+ if (target[p] == null) switch (p) {
68
+ case "signAndSendTransactions":
69
+ target[p] = async function({ minContextSlot, commitment, skipPreflight, maxRetries, waitForCommitmentToSendNextTransaction, transactions, ...rest }) {
70
+ const payloads = transactions.map(getPayloadFromTransaction);
71
+ const options = {
72
+ min_context_slot: minContextSlot,
73
+ commitment,
74
+ skip_preflight: skipPreflight,
75
+ max_retries: maxRetries,
76
+ wait_for_commitment_to_send_next_transaction: waitForCommitmentToSendNextTransaction
77
+ };
78
+ const { signatures: base64EncodedSignatures } = await wallet.signAndSendTransactions({
79
+ ...rest,
80
+ ...Object.values(options).some((element) => element != null) ? { options } : null,
81
+ payloads
82
+ });
83
+ return base64EncodedSignatures.map(toUint8Array).map(bs58.default.encode);
84
+ };
85
+ break;
86
+ case "signMessages":
87
+ target[p] = async function({ payloads, ...rest }) {
88
+ const base64EncodedPayloads = payloads.map(fromUint8Array);
89
+ const { signed_payloads: base64EncodedSignedMessages } = await wallet.signMessages({
90
+ ...rest,
91
+ payloads: base64EncodedPayloads
92
+ });
93
+ return base64EncodedSignedMessages.map(toUint8Array);
94
+ };
95
+ break;
96
+ case "signTransactions":
97
+ target[p] = async function({ transactions, ...rest }) {
98
+ const payloads = transactions.map(getPayloadFromTransaction);
99
+ const { signed_payloads: base64EncodedCompiledTransactions } = await wallet.signTransactions({
100
+ ...rest,
101
+ payloads
102
+ });
103
+ return base64EncodedCompiledTransactions.map(toUint8Array).map(getTransactionFromWireMessage);
104
+ };
105
+ break;
106
+ default:
107
+ target[p] = wallet[p];
108
+ break;
109
+ }
110
+ return target[p];
111
+ },
112
+ defineProperty() {
113
+ return false;
114
+ },
115
+ deleteProperty() {
116
+ return false;
117
+ }
118
+ });
115
119
  }
116
-
120
+ //#endregion
117
121
  exports.startRemoteScenario = startRemoteScenario;
118
122
  exports.transact = transact;
123
+
124
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["SIGNATURE_LENGTH_IN_BYTES","VersionedMessage","Transaction","VersionedTransaction"],"sources":["../../src/base64Utils.ts","../../src/transact.ts"],"sourcesContent":["export function fromUint8Array(byteArray: Uint8Array): string {\n return window.btoa(String.fromCharCode.call(null, ...byteArray));\n}\n\nexport function toUint8Array(base64EncodedByteArray: string): Uint8Array {\n return new Uint8Array(\n window\n .atob(base64EncodedByteArray)\n .split('')\n .map((c) => c.charCodeAt(0)),\n );\n}\n","import {\n SIGNATURE_LENGTH_IN_BYTES,\n Transaction as LegacyTransaction,\n Transaction,\n TransactionSignature,\n VersionedMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport {\n AuthorizeAPI,\n Base64EncodedAddress,\n Base64EncodedTransaction,\n CloneAuthorizationAPI,\n DeauthorizeAPI,\n GetCapabilitiesAPI,\n MobileWallet,\n ReauthorizeAPI,\n TerminateSessionAPI,\n transact as baseTransact,\n startRemoteScenario as baseStartRemoteScenario,\n WalletAssociationConfig,\n RemoteWalletAssociationConfig,\n} from '@solana-mobile/mobile-wallet-adapter-protocol';\nimport bs58 from 'bs58';\n\nimport { fromUint8Array, toUint8Array } from './base64Utils.js';\n\ninterface Web3SignAndSendTransactionsAPI {\n signAndSendTransactions<T extends LegacyTransaction | VersionedTransaction>(params: {\n minContextSlot?: number;\n commitment?: string;\n skipPreflight?: boolean;\n maxRetries?: number;\n waitForCommitmentToSendNextTransaction?: boolean;\n transactions: T[];\n }): Promise<TransactionSignature[]>;\n}\n\ninterface Web3SignTransactionsAPI {\n signTransactions<T extends LegacyTransaction | VersionedTransaction>(params: { transactions: T[] }): Promise<T[]>;\n}\n\ninterface Web3SignMessagesAPI {\n signMessages(params: { addresses: Base64EncodedAddress[]; payloads: Uint8Array[] }): Promise<Uint8Array[]>;\n}\n\nexport interface Web3MobileWallet\n extends\n AuthorizeAPI,\n CloneAuthorizationAPI,\n DeauthorizeAPI,\n GetCapabilitiesAPI,\n ReauthorizeAPI,\n Web3SignAndSendTransactionsAPI,\n Web3SignTransactionsAPI,\n Web3SignMessagesAPI {}\n\nexport interface Web3RemoteMobileWallet extends Web3MobileWallet, TerminateSessionAPI {}\n\nexport type Web3Scenario = Readonly<{\n wallet: Promise<Web3MobileWallet>;\n close: () => void;\n}>;\n\nexport type Web3RemoteScenario = Web3Scenario &\n Readonly<{\n associationUrl: URL;\n }>;\n\nfunction getPayloadFromTransaction(transaction: LegacyTransaction | VersionedTransaction): Base64EncodedTransaction {\n const serializedTransaction =\n 'version' in transaction\n ? transaction.serialize()\n : transaction.serialize({\n requireAllSignatures: false,\n verifySignatures: false,\n });\n const payload = fromUint8Array(serializedTransaction);\n return payload;\n}\n\nfunction getTransactionFromWireMessage(byteArray: Uint8Array): Transaction | VersionedTransaction {\n const numSignatures = byteArray[0];\n const messageOffset = numSignatures * SIGNATURE_LENGTH_IN_BYTES + 1;\n const version = VersionedMessage.deserializeMessageVersion(byteArray.slice(messageOffset, byteArray.length));\n if (version === 'legacy') {\n return Transaction.from(byteArray);\n } else {\n return VersionedTransaction.deserialize(byteArray);\n }\n}\n\nexport async function transact<TReturn>(\n callback: (wallet: Web3MobileWallet) => TReturn,\n config?: WalletAssociationConfig,\n): Promise<TReturn> {\n const augmentedCallback: (wallet: MobileWallet) => TReturn = (wallet) => {\n return callback(augmentWalletAPI(wallet));\n };\n return await baseTransact(augmentedCallback, config);\n}\n\nexport async function startRemoteScenario(config: RemoteWalletAssociationConfig): Promise<Web3RemoteScenario> {\n const { wallet, close, associationUrl } = await baseStartRemoteScenario(config);\n const augmentedPromise = wallet.then((wallet) => {\n return augmentWalletAPI(wallet);\n });\n return { wallet: augmentedPromise, close, associationUrl };\n}\n\nfunction augmentWalletAPI(wallet: MobileWallet): Web3MobileWallet {\n return new Proxy<Web3MobileWallet>({} as Web3MobileWallet, {\n get<TMethodName extends keyof Web3MobileWallet>(target: Web3MobileWallet, p: TMethodName) {\n if (target[p] == null) {\n switch (p) {\n case 'signAndSendTransactions':\n target[p] = async function ({\n minContextSlot,\n commitment,\n skipPreflight,\n maxRetries,\n waitForCommitmentToSendNextTransaction,\n transactions,\n ...rest\n }: Parameters<Web3MobileWallet['signAndSendTransactions']>[0]) {\n const payloads = transactions.map(getPayloadFromTransaction);\n const options = {\n min_context_slot: minContextSlot,\n commitment: commitment,\n skip_preflight: skipPreflight,\n max_retries: maxRetries,\n wait_for_commitment_to_send_next_transaction: waitForCommitmentToSendNextTransaction,\n };\n const { signatures: base64EncodedSignatures } = await wallet.signAndSendTransactions({\n ...rest,\n ...(Object.values(options).some((element) => element != null)\n ? { options: options }\n : null),\n payloads,\n });\n const signatures = base64EncodedSignatures.map(toUint8Array).map(bs58.encode);\n return signatures as TransactionSignature[];\n } as Web3MobileWallet[TMethodName];\n break;\n case 'signMessages':\n target[p] = async function ({\n payloads,\n ...rest\n }: Parameters<Web3MobileWallet['signMessages']>[0]) {\n const base64EncodedPayloads = payloads.map(fromUint8Array);\n const { signed_payloads: base64EncodedSignedMessages } = await wallet.signMessages({\n ...rest,\n payloads: base64EncodedPayloads,\n });\n const signedMessages = base64EncodedSignedMessages.map(toUint8Array);\n return signedMessages;\n } as Web3MobileWallet[TMethodName];\n break;\n case 'signTransactions':\n target[p] = async function ({\n transactions,\n ...rest\n }: Parameters<Web3MobileWallet['signTransactions']>[0]) {\n const payloads = transactions.map(getPayloadFromTransaction);\n const { signed_payloads: base64EncodedCompiledTransactions } =\n await wallet.signTransactions({\n ...rest,\n payloads,\n });\n const compiledTransactions = base64EncodedCompiledTransactions.map(toUint8Array);\n const signedTransactions = compiledTransactions.map(getTransactionFromWireMessage);\n return signedTransactions;\n } as Web3MobileWallet[TMethodName];\n break;\n default: {\n target[p] = wallet[p] as unknown as Web3MobileWallet[TMethodName];\n break;\n }\n }\n }\n return target[p];\n },\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAgB,eAAe,WAA+B;AAC1D,QAAO,OAAO,KAAK,OAAO,aAAa,KAAK,MAAM,GAAG,UAAU,CAAC;;AAGpE,SAAgB,aAAa,wBAA4C;AACrE,QAAO,IAAI,WACP,OACK,KAAK,uBAAuB,CAC5B,MAAM,GAAG,CACT,KAAK,MAAM,EAAE,WAAW,EAAE,CAAC,CACnC;;;;AC2DL,SAAS,0BAA0B,aAAiF;AAShH,QADgB,eANZ,aAAa,cACP,YAAY,WAAW,GACvB,YAAY,UAAU;EAClB,sBAAsB;EACtB,kBAAkB;EACrB,CAAC,CACyC;;AAIzD,SAAS,8BAA8B,WAA2D;CAE9F,MAAM,gBADgB,UAAU,KACMA,gBAAAA,4BAA4B;AAElE,KADgBC,gBAAAA,iBAAiB,0BAA0B,UAAU,MAAM,eAAe,UAAU,OAAO,CAAC,KAC5F,SACZ,QAAOC,gBAAAA,YAAY,KAAK,UAAU;KAElC,QAAOC,gBAAAA,qBAAqB,YAAY,UAAU;;AAI1D,eAAsB,SAClB,UACA,QACgB;CAChB,MAAM,qBAAwD,WAAW;AACrE,SAAO,SAAS,iBAAiB,OAAO,CAAC;;AAE7C,QAAO,OAAA,GAAA,8CAAA,UAAmB,mBAAmB,OAAO;;AAGxD,eAAsB,oBAAoB,QAAoE;CAC1G,MAAM,EAAE,QAAQ,OAAO,mBAAmB,OAAA,GAAA,8CAAA,qBAA8B,OAAO;AAI/E,QAAO;EAAE,QAHgB,OAAO,MAAM,WAAW;AAC7C,UAAO,iBAAiB,OAAO;IACjC;EACiC;EAAO;EAAgB;;AAG9D,SAAS,iBAAiB,QAAwC;AAC9D,QAAO,IAAI,MAAwB,EAAE,EAAsB;EACvD,IAAgD,QAA0B,GAAgB;AACtF,OAAI,OAAO,MAAM,KACb,SAAQ,GAAR;IACI,KAAK;AACD,YAAO,KAAK,eAAgB,EACxB,gBACA,YACA,eACA,YACA,wCACA,cACA,GAAG,QACwD;MAC3D,MAAM,WAAW,aAAa,IAAI,0BAA0B;MAC5D,MAAM,UAAU;OACZ,kBAAkB;OACN;OACZ,gBAAgB;OAChB,aAAa;OACb,8CAA8C;OACjD;MACD,MAAM,EAAE,YAAY,4BAA4B,MAAM,OAAO,wBAAwB;OACjF,GAAG;OACH,GAAI,OAAO,OAAO,QAAQ,CAAC,MAAM,YAAY,WAAW,KAAK,GACvD,EAAW,SAAS,GACpB;OACN;OACH,CAAC;AAEF,aADmB,wBAAwB,IAAI,aAAa,CAAC,IAAI,KAAA,QAAK,OAAO;;AAGjF;IACJ,KAAK;AACD,YAAO,KAAK,eAAgB,EACxB,UACA,GAAG,QAC6C;MAChD,MAAM,wBAAwB,SAAS,IAAI,eAAe;MAC1D,MAAM,EAAE,iBAAiB,gCAAgC,MAAM,OAAO,aAAa;OAC/E,GAAG;OACH,UAAU;OACb,CAAC;AAEF,aADuB,4BAA4B,IAAI,aAAa;;AAGxE;IACJ,KAAK;AACD,YAAO,KAAK,eAAgB,EACxB,cACA,GAAG,QACiD;MACpD,MAAM,WAAW,aAAa,IAAI,0BAA0B;MAC5D,MAAM,EAAE,iBAAiB,sCACrB,MAAM,OAAO,iBAAiB;OAC1B,GAAG;OACH;OACH,CAAC;AAGN,aAF6B,kCAAkC,IAAI,aAAa,CAChC,IAAI,8BAA8B;;AAGtF;IACJ;AACI,YAAO,KAAK,OAAO;AACnB;;AAIZ,UAAO,OAAO;;EAElB,iBAAiB;AACb,UAAO;;EAEX,iBAAiB;AACb,UAAO;;EAEd,CAAC"}