@dynamic-labs-sdk/aptos 0.0.0 → 0.2.4

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.
Files changed (87) hide show
  1. package/README.md +21 -0
  2. package/dist/AptosNetworkProvider.types.d.ts +8 -0
  3. package/dist/AptosNetworkProvider.types.d.ts.map +1 -0
  4. package/dist/AptosWalletAccount.types.d.ts +8 -0
  5. package/dist/AptosWalletAccount.types.d.ts.map +1 -0
  6. package/dist/AptosWalletProvider.types.d.ts +24 -0
  7. package/dist/AptosWalletProvider.types.d.ts.map +1 -0
  8. package/dist/addAptosExtension/addAptosExtension.d.ts +10 -0
  9. package/dist/addAptosExtension/addAptosExtension.d.ts.map +1 -0
  10. package/dist/addAptosExtension/index.d.ts +2 -0
  11. package/dist/addAptosExtension/index.d.ts.map +1 -0
  12. package/dist/addAptosWalletStandardExtension-C5kSd0qw.esm.js +253 -0
  13. package/dist/addAptosWalletStandardExtension-C5kSd0qw.esm.js.map +1 -0
  14. package/dist/addAptosWalletStandardExtension-Zvr1YUyy.cjs.js +270 -0
  15. package/dist/addAptosWalletStandardExtension-Zvr1YUyy.cjs.js.map +1 -0
  16. package/dist/errors/NotAptosProviderError/NotAptosProviderError.d.ts +8 -0
  17. package/dist/errors/NotAptosProviderError/NotAptosProviderError.d.ts.map +1 -0
  18. package/dist/errors/NotAptosProviderError/index.d.ts +2 -0
  19. package/dist/errors/NotAptosProviderError/index.d.ts.map +1 -0
  20. package/dist/exports/index.d.ts +12 -0
  21. package/dist/exports/index.d.ts.map +1 -0
  22. package/dist/exports/walletStandard.d.ts +2 -0
  23. package/dist/exports/walletStandard.d.ts.map +1 -0
  24. package/dist/getAptosClient/getAptosClient.d.ts +17 -0
  25. package/dist/getAptosClient/getAptosClient.d.ts.map +1 -0
  26. package/dist/getAptosClient/index.d.ts +2 -0
  27. package/dist/getAptosClient/index.d.ts.map +1 -0
  28. package/dist/index.cjs.js +120 -0
  29. package/dist/index.cjs.js.map +1 -0
  30. package/dist/index.esm.js +113 -0
  31. package/dist/index.esm.js.map +1 -0
  32. package/dist/isAptosNetworkProvider/index.d.ts +2 -0
  33. package/dist/isAptosNetworkProvider/index.d.ts.map +1 -0
  34. package/dist/isAptosNetworkProvider/isAptosNetworkProvider.d.ts +4 -0
  35. package/dist/isAptosNetworkProvider/isAptosNetworkProvider.d.ts.map +1 -0
  36. package/dist/isAptosWalletAccount/index.d.ts +2 -0
  37. package/dist/isAptosWalletAccount/index.d.ts.map +1 -0
  38. package/dist/isAptosWalletAccount/isAptosWalletAccount.d.ts +4 -0
  39. package/dist/isAptosWalletAccount/isAptosWalletAccount.d.ts.map +1 -0
  40. package/dist/isAptosWalletProvider/index.d.ts +2 -0
  41. package/dist/isAptosWalletProvider/index.d.ts.map +1 -0
  42. package/dist/isAptosWalletProvider/isAptosWalletProvider.d.ts +4 -0
  43. package/dist/isAptosWalletProvider/isAptosWalletProvider.d.ts.map +1 -0
  44. package/dist/registerAptosNetworkProviderBuilder/index.d.ts +2 -0
  45. package/dist/registerAptosNetworkProviderBuilder/index.d.ts.map +1 -0
  46. package/dist/registerAptosNetworkProviderBuilder/registerAptosNetworkProviderBuilder.d.ts +3 -0
  47. package/dist/registerAptosNetworkProviderBuilder/registerAptosNetworkProviderBuilder.d.ts.map +1 -0
  48. package/dist/signAndSubmitTransaction/index.d.ts +2 -0
  49. package/dist/signAndSubmitTransaction/index.d.ts.map +1 -0
  50. package/dist/signAndSubmitTransaction/signAndSubmitTransaction.d.ts +20 -0
  51. package/dist/signAndSubmitTransaction/signAndSubmitTransaction.d.ts.map +1 -0
  52. package/dist/signTransaction/index.d.ts +2 -0
  53. package/dist/signTransaction/index.d.ts.map +1 -0
  54. package/dist/signTransaction/signTransaction.d.ts +22 -0
  55. package/dist/signTransaction/signTransaction.d.ts.map +1 -0
  56. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  57. package/dist/utils/constants.d.ts +2 -0
  58. package/dist/utils/constants.d.ts.map +1 -0
  59. package/dist/utils/createAptosNetworkProvider/createAptosNetworkProvider.d.ts +4 -0
  60. package/dist/utils/createAptosNetworkProvider/createAptosNetworkProvider.d.ts.map +1 -0
  61. package/dist/utils/createAptosNetworkProvider/index.d.ts +2 -0
  62. package/dist/utils/createAptosNetworkProvider/index.d.ts.map +1 -0
  63. package/dist/utils/fetchAptosBalance/fetchAptosBalance.d.ts +8 -0
  64. package/dist/utils/fetchAptosBalance/fetchAptosBalance.d.ts.map +1 -0
  65. package/dist/utils/fetchAptosBalance/index.d.ts +2 -0
  66. package/dist/utils/fetchAptosBalance/index.d.ts.map +1 -0
  67. package/dist/walletStandard/addAptosWalletStandardExtension/addAptosWalletStandardExtension.d.ts +13 -0
  68. package/dist/walletStandard/addAptosWalletStandardExtension/addAptosWalletStandardExtension.d.ts.map +1 -0
  69. package/dist/walletStandard/addAptosWalletStandardExtension/index.d.ts +2 -0
  70. package/dist/walletStandard/addAptosWalletStandardExtension/index.d.ts.map +1 -0
  71. package/dist/walletStandard/utils/createWalletProviderFromAptosStandardWallet/createWalletProviderFromAptosStandardWallet.d.ts +10 -0
  72. package/dist/walletStandard/utils/createWalletProviderFromAptosStandardWallet/createWalletProviderFromAptosStandardWallet.d.ts.map +1 -0
  73. package/dist/walletStandard/utils/createWalletProviderFromAptosStandardWallet/index.d.ts +2 -0
  74. package/dist/walletStandard/utils/createWalletProviderFromAptosStandardWallet/index.d.ts.map +1 -0
  75. package/dist/walletStandard/utils/hasAllRequiredFeatures/hasAllRequiredFeatures.d.ts +3 -0
  76. package/dist/walletStandard/utils/hasAllRequiredFeatures/hasAllRequiredFeatures.d.ts.map +1 -0
  77. package/dist/walletStandard/utils/hasAllRequiredFeatures/index.d.ts +2 -0
  78. package/dist/walletStandard/utils/hasAllRequiredFeatures/index.d.ts.map +1 -0
  79. package/dist/walletStandard/utils/registerAptosStandardWallet/index.d.ts +2 -0
  80. package/dist/walletStandard/utils/registerAptosStandardWallet/index.d.ts.map +1 -0
  81. package/dist/walletStandard/utils/registerAptosStandardWallet/registerAptosStandardWallet.d.ts +4 -0
  82. package/dist/walletStandard/utils/registerAptosStandardWallet/registerAptosStandardWallet.d.ts.map +1 -0
  83. package/dist/walletStandard.cjs.js +9 -0
  84. package/dist/walletStandard.cjs.js.map +1 -0
  85. package/dist/walletStandard.esm.js +9 -0
  86. package/dist/walletStandard.esm.js.map +1 -0
  87. package/package.json +43 -1
package/README.md ADDED
@@ -0,0 +1,21 @@
1
+ # @dynamic-labs-sdk/aptos
2
+
3
+ This package contains the APTOS integration for the Dynamic SDK. It enables support for APTOS external wallets using the [@aptos-labs/wallet-standard](https://github.com/aptos-labs/wallet-standard) interface.
4
+
5
+ ## Installation
6
+
7
+ ```sh
8
+ pnpm add @dynamic-labs-sdk/aptos
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```ts
14
+ import { addAptosExtension } from '@dynamic-labs-sdk/aptos';
15
+ import { createDynamicClient } from '@dynamic-labs-sdk/client';
16
+
17
+ const dynamicClient = createDynamicClient({
18
+ environmentId: '123',
19
+ });
20
+ addAptosExtension(dynamicClient);
21
+ ```
@@ -0,0 +1,8 @@
1
+ import type { BaseNetworkProvider } from '@dynamic-labs-sdk/client/core';
2
+ export type AptosNetworkProvider = BaseNetworkProvider<'APTOS'>;
3
+ declare global {
4
+ interface NetworkProviderMap {
5
+ APTOS: AptosNetworkProvider;
6
+ }
7
+ }
8
+ //# sourceMappingURL=AptosNetworkProvider.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AptosNetworkProvider.types.d.ts","sourceRoot":"","sources":["../src/AptosNetworkProvider.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAEhE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,kBAAkB;QAC1B,KAAK,EAAE,oBAAoB,CAAC;KAC7B;CACF"}
@@ -0,0 +1,8 @@
1
+ import type { BaseWalletAccount } from '@dynamic-labs-sdk/client/core';
2
+ export type AptosWalletAccount = BaseWalletAccount<'APTOS'>;
3
+ declare global {
4
+ interface WalletAccountMap {
5
+ APTOS: AptosWalletAccount;
6
+ }
7
+ }
8
+ //# sourceMappingURL=AptosWalletAccount.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AptosWalletAccount.types.d.ts","sourceRoot":"","sources":["../src/AptosWalletAccount.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAE5D,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,gBAAgB;QACxB,KAAK,EAAE,kBAAkB,CAAC;KAC3B;CACF"}
@@ -0,0 +1,24 @@
1
+ import type { Aptos as AptosClient, AccountAuthenticator as AptosSignTransactionOutput, AnyRawTransaction as AptosTransaction, InputGenerateTransactionPayloadData as AptosTransactionPayload } from '@aptos-labs/ts-sdk';
2
+ import type { WalletProvider } from '@dynamic-labs-sdk/client/core';
3
+ import type { AptosWalletAccount } from './AptosWalletAccount.types';
4
+ export type { Aptos as AptosClient, AccountAuthenticator as AptosSignTransactionOutput, AnyRawTransaction as AptosTransaction, InputGenerateTransactionPayloadData as AptosTransactionPayload, } from '@aptos-labs/ts-sdk';
5
+ export type AptosWalletProvider = WalletProvider & {
6
+ chain: 'APTOS';
7
+ getAptosClient: (args: {
8
+ walletAccount: AptosWalletAccount;
9
+ }) => Promise<AptosClient>;
10
+ signAndSubmitTransaction: (args: {
11
+ transaction: AptosTransactionPayload;
12
+ walletAccount: AptosWalletAccount;
13
+ }) => Promise<{
14
+ hash: string;
15
+ }>;
16
+ signTransaction: (args: {
17
+ asFeePayer?: boolean;
18
+ transaction: AptosTransaction;
19
+ walletAccount: AptosWalletAccount;
20
+ }) => Promise<{
21
+ signature: AptosSignTransactionOutput;
22
+ }>;
23
+ };
24
+ //# sourceMappingURL=AptosWalletProvider.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AptosWalletProvider.types.d.ts","sourceRoot":"","sources":["../src/AptosWalletProvider.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,IAAI,WAAW,EACpB,oBAAoB,IAAI,0BAA0B,EAClD,iBAAiB,IAAI,gBAAgB,EACrC,mCAAmC,IAAI,uBAAuB,EAC/D,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,YAAY,EACV,KAAK,IAAI,WAAW,EACpB,oBAAoB,IAAI,0BAA0B,EAClD,iBAAiB,IAAI,gBAAgB,EACrC,mCAAmC,IAAI,uBAAuB,GAC/D,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG;IACjD,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,CAAC,IAAI,EAAE;QACrB,aAAa,EAAE,kBAAkB,CAAC;KACnC,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC3B,wBAAwB,EAAE,CAAC,IAAI,EAAE;QAC/B,WAAW,EAAE,uBAAuB,CAAC;QACrC,aAAa,EAAE,kBAAkB,CAAC;KACnC,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChC,eAAe,EAAE,CAAC,IAAI,EAAE;QACtB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,WAAW,EAAE,gBAAgB,CAAC;QAC9B,aAAa,EAAE,kBAAkB,CAAC;KACnC,KAAK,OAAO,CAAC;QAAE,SAAS,EAAE,0BAA0B,CAAA;KAAE,CAAC,CAAC;CAC1D,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Adds the Aptos extension to the Dynamic client.
3
+ *
4
+ * This is a convenience function that adds support for all of Aptos wallets that support the Aptos Wallet Standard,
5
+ * like Petra, Backpack, OKX, Nightly, and more.
6
+ *
7
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
8
+ */
9
+ export declare const addAptosExtension: (client?: import("@dynamic-labs-sdk/client").DynamicClient) => void;
10
+ //# sourceMappingURL=addAptosExtension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addAptosExtension.d.ts","sourceRoot":"","sources":["../../src/addAptosExtension/addAptosExtension.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,iEAAkC,IAE/D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { addAptosExtension } from './addAptosExtension';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/addAptosExtension/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,253 @@
1
+ import { WalletProviderPriority, assertDefined, createBaseNetworkProvider, createWalletProviderEventEmitter, formatWalletProviderGroupKey, formatWalletProviderKey, getActiveNetworkIdFromLastKnownRegistry, getDefaultClient, getNetworkProviderBuilderRegistry, getWalletProviderRegistry, hasExtension, registerExtension } from "@dynamic-labs-sdk/client/core";
2
+ import { UserResponseStatus, getAptosWallets } from "@aptos-labs/wallet-standard";
3
+ import { Aptos, AptosConfig } from "@aptos-labs/ts-sdk";
4
+ import { UserRejectedError, assertWalletAccountSigningAvailability, getActiveNetworkData } from "@dynamic-labs-sdk/client";
5
+ import { WalletProviderEnum } from "@dynamic-labs/sdk-api-core";
6
+
7
+ //#region package.json
8
+ var name = "@dynamic-labs-sdk/aptos";
9
+ var version = "0.2.4";
10
+
11
+ //#endregion
12
+ //#region src/utils/constants.ts
13
+ const OCTAS_PER_APT = 1e8;
14
+
15
+ //#endregion
16
+ //#region src/utils/fetchAptosBalance/fetchAptosBalance.ts
17
+ const fetchAptosBalance = async ({ address, networkData }) => {
18
+ const balance = await new Aptos(new AptosConfig({
19
+ fullnode: networkData.rpcUrls.http[0],
20
+ network: networkData.cluster
21
+ })).getBalance({
22
+ accountAddress: address,
23
+ asset: "0x1::aptos_coin::AptosCoin"
24
+ });
25
+ return (Number(balance) / OCTAS_PER_APT).toString();
26
+ };
27
+
28
+ //#endregion
29
+ //#region src/utils/createAptosNetworkProvider/createAptosNetworkProvider.ts
30
+ const createAptosNetworkProvider = (networkData) => ({
31
+ ...createBaseNetworkProvider("APTOS", networkData),
32
+ cluster: networkData.cluster,
33
+ getBalance: async ({ address }) => ({ balance: await fetchAptosBalance({
34
+ address,
35
+ networkData
36
+ }) })
37
+ });
38
+
39
+ //#endregion
40
+ //#region src/registerAptosNetworkProviderBuilder/registerAptosNetworkProviderBuilder.ts
41
+ const registerAptosNetworkProviderBuilder = (client) => {
42
+ const networkProviderBuilderRegistry = getNetworkProviderBuilderRegistry(client);
43
+ if (networkProviderBuilderRegistry.get().get("APTOS")) return;
44
+ networkProviderBuilderRegistry.register({
45
+ builder: createAptosNetworkProvider,
46
+ chain: "APTOS"
47
+ });
48
+ };
49
+
50
+ //#endregion
51
+ //#region src/walletStandard/utils/createWalletProviderFromAptosStandardWallet/createWalletProviderFromAptosStandardWallet.ts
52
+ const createWalletProviderFromAptosStandardWallet = ({ dynamicClient, walletStandardWallet }) => {
53
+ const features = walletStandardWallet.features;
54
+ const walletProviderType = WalletProviderEnum.BrowserExtension;
55
+ const key = formatWalletProviderKey({
56
+ chain: "APTOS",
57
+ displayName: walletStandardWallet.name,
58
+ walletProviderType
59
+ });
60
+ const getAutoConnectedAccount = () => {
61
+ const accounts = walletStandardWallet.accounts;
62
+ if (!accounts?.length || !accounts[0].publicKey || !accounts[0].address) return;
63
+ return accounts.map((account) => ({
64
+ address: account.address.toString(),
65
+ publicKey: account.publicKey?.toString()
66
+ }));
67
+ };
68
+ const connect = async () => {
69
+ const autoConnectedAccounts = getAutoConnectedAccount();
70
+ if (autoConnectedAccounts) return { addresses: autoConnectedAccounts };
71
+ const connectMethod = features["aptos:connect"]?.connect;
72
+ assertDefined(connectMethod, "connect method not found in wallet features");
73
+ const result = await connectMethod();
74
+ if (result.status !== UserResponseStatus.APPROVED) throw new UserRejectedError({ action: "connect" });
75
+ return { addresses: [{
76
+ address: result.args.address.toString(),
77
+ publicKey: result.args.publicKey?.toString()
78
+ }] };
79
+ };
80
+ const disconnect = async () => {
81
+ const disconnectMethod = features["aptos:disconnect"]?.disconnect;
82
+ assertDefined(disconnectMethod, "disconnect method not found in wallet features");
83
+ return disconnectMethod();
84
+ };
85
+ const getActiveNetworkId = async () => {
86
+ const aptosNetwork = await features["aptos:network"]?.network();
87
+ if (!aptosNetwork?.chainId) return getActiveNetworkIdFromLastKnownRegistry({
88
+ client: dynamicClient,
89
+ walletProviderKey: key
90
+ });
91
+ return { networkId: aptosNetwork.chainId.toString() };
92
+ };
93
+ const getAptosClient = async ({ walletAccount }) => {
94
+ const activeNetworkData = await getActiveNetworkData({ walletAccount }, dynamicClient);
95
+ assertDefined(activeNetworkData.networkData, "No active network data found");
96
+ const { rpcUrls, cluster } = activeNetworkData.networkData;
97
+ const url = rpcUrls.http[0];
98
+ assertDefined(url, "No RPC URL found for active network");
99
+ return new Aptos(new AptosConfig({
100
+ fullnode: url,
101
+ network: cluster
102
+ }));
103
+ };
104
+ const getConnectedAccount = async () => {
105
+ const getAccountMethod = features["aptos:account"]?.account;
106
+ if (!getAccountMethod) return;
107
+ return getAccountMethod();
108
+ };
109
+ const getConnectedAddresses = async () => {
110
+ const account = await getConnectedAccount();
111
+ if (account) return { addresses: [account.address.toString()] };
112
+ return { addresses: [] };
113
+ };
114
+ const signTransaction = async ({ asFeePayer, transaction, walletAccount }) => {
115
+ await assertWalletAccountSigningAvailability({ walletAccount }, dynamicClient);
116
+ const signTransactionMethod = features["aptos:signTransaction"]?.signTransaction;
117
+ assertDefined(signTransactionMethod, "signTransaction method not found in wallet features");
118
+ const result = await signTransactionMethod(transaction, asFeePayer);
119
+ if (result.status !== UserResponseStatus.APPROVED) throw new UserRejectedError({ action: "signTransaction" });
120
+ return { signature: result.args };
121
+ };
122
+ const signAndSubmitTransaction = async ({ transaction, walletAccount }) => {
123
+ await assertWalletAccountSigningAvailability({ walletAccount }, dynamicClient);
124
+ const signAndSubmitMethod = features["aptos:signAndSubmitTransaction"]?.signAndSubmitTransaction;
125
+ assertDefined(signAndSubmitMethod, "signAndSubmitTransaction method not found in wallet features");
126
+ const result = await signAndSubmitMethod({ payload: transaction });
127
+ if (result.status !== UserResponseStatus.APPROVED) throw new UserRejectedError({ action: "signAndSubmitTransaction" });
128
+ return { hash: result.args.hash };
129
+ };
130
+ const signMessage = async ({ message, walletAccount }) => {
131
+ assertDefined(walletAccount, "Wallet account not found");
132
+ await assertWalletAccountSigningAvailability({ walletAccount }, dynamicClient);
133
+ const signMessageMethod = features["aptos:signMessage"]?.signMessage;
134
+ assertDefined(signMessageMethod, "signMessage method not found in wallet features");
135
+ const result = await signMessageMethod({
136
+ message,
137
+ nonce: Date.now().toString()
138
+ });
139
+ if (result.status !== UserResponseStatus.APPROVED) throw new UserRejectedError({ action: "signMessage" });
140
+ let publicKey = walletStandardWallet.accounts[0]?.publicKey?.toString();
141
+ if (!publicKey) publicKey = (await getConnectedAccount())?.publicKey?.toString();
142
+ const signatureObj = {
143
+ fullMessage: result.args.fullMessage,
144
+ publicKey,
145
+ signature: result.args.signature.toString()
146
+ };
147
+ return { signature: JSON.stringify(signatureObj) };
148
+ };
149
+ const { cleanupEventEmitter, getEventEmitter } = createWalletProviderEventEmitter({
150
+ removeEventListeners: ({ setupReturnValue }) => {
151
+ assertDefined(setupReturnValue, "Setup return value not defined");
152
+ setupReturnValue();
153
+ },
154
+ setupEventListeners: ({ handleAccountsChanged, handleNetworkChanged }) => {
155
+ const onAccountChange = features["aptos:onAccountChange"]?.onAccountChange;
156
+ if (onAccountChange) onAccountChange((account) => {
157
+ handleAccountsChanged({ addresses: account ? [account.address.toString()] : [] });
158
+ });
159
+ const onNetworkChange = features["aptos:onNetworkChange"]?.onNetworkChange;
160
+ if (onNetworkChange) onNetworkChange((network) => {
161
+ handleNetworkChanged({ networkId: network.chainId.toString() });
162
+ });
163
+ return () => {};
164
+ },
165
+ supportedEvents: ["accountsChanged", "networkChanged"]
166
+ });
167
+ const terminate = async () => {
168
+ cleanupEventEmitter();
169
+ };
170
+ return {
171
+ chain: "APTOS",
172
+ connect,
173
+ disconnect,
174
+ get events() {
175
+ return getEventEmitter();
176
+ },
177
+ getActiveNetworkId,
178
+ getAptosClient,
179
+ getConnectedAddresses,
180
+ groupKey: formatWalletProviderGroupKey(walletStandardWallet.name),
181
+ key,
182
+ metadata: {
183
+ displayName: walletStandardWallet.name,
184
+ icon: walletStandardWallet.icon
185
+ },
186
+ signAndSubmitTransaction,
187
+ signMessage,
188
+ signTransaction,
189
+ terminate,
190
+ walletProviderType
191
+ };
192
+ };
193
+
194
+ //#endregion
195
+ //#region src/walletStandard/utils/hasAllRequiredFeatures/hasAllRequiredFeatures.ts
196
+ const REQUIRED_FEATURES = [
197
+ "aptos:account",
198
+ "aptos:connect",
199
+ "aptos:disconnect",
200
+ "aptos:network",
201
+ "aptos:onAccountChange",
202
+ "aptos:onNetworkChange",
203
+ "aptos:signMessage",
204
+ "aptos:signTransaction"
205
+ ];
206
+ const hasAllRequiredFeatures = (wallet) => {
207
+ return Boolean(REQUIRED_FEATURES.every((feature) => feature in wallet.features));
208
+ };
209
+
210
+ //#endregion
211
+ //#region src/walletStandard/utils/registerAptosStandardWallet/registerAptosStandardWallet.ts
212
+ const registerAptosStandardWallet = (wallet, client) => {
213
+ const walletProviderRegistry = getWalletProviderRegistry(client);
214
+ if (hasAllRequiredFeatures(wallet)) {
215
+ const walletProvider = createWalletProviderFromAptosStandardWallet({
216
+ dynamicClient: client,
217
+ walletStandardWallet: wallet
218
+ });
219
+ walletProviderRegistry.register({
220
+ priority: WalletProviderPriority.WALLET_SELF_ANNOUNCEMENT_STANDARD,
221
+ walletProvider
222
+ });
223
+ }
224
+ };
225
+
226
+ //#endregion
227
+ //#region src/walletStandard/addAptosWalletStandardExtension/addAptosWalletStandardExtension.ts
228
+ const APTOS_WALLET_STANDARD_EXTENSION_KEY = "aptosWalletStandard";
229
+ /**
230
+ * Adds the Aptos Wallet Standard extension to the Dynamic client.
231
+ *
232
+ * This extension enables integration with wallets that implement the Aptos Wallet Standard (AIP-62),
233
+ * automatically detecting and registering compatible wallets for use with the Dynamic SDK.
234
+ *
235
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
236
+ *
237
+ * @returns A function that can be used to remove Aptos Wallet Standard register event listener that was added.
238
+ */
239
+ const addAptosWalletStandardExtension = (client = getDefaultClient()) => {
240
+ if (hasExtension({ extensionKey: APTOS_WALLET_STANDARD_EXTENSION_KEY }, client)) return () => {};
241
+ registerExtension({ extensionKey: APTOS_WALLET_STANDARD_EXTENSION_KEY }, client);
242
+ registerAptosNetworkProviderBuilder(client);
243
+ const { aptosWallets, on } = getAptosWallets();
244
+ const removeListener = on("register", (wallet) => {
245
+ registerAptosStandardWallet(wallet, client);
246
+ });
247
+ for (const wallet of aptosWallets) registerAptosStandardWallet(wallet, client);
248
+ return removeListener;
249
+ };
250
+
251
+ //#endregion
252
+ export { name as n, version as r, addAptosWalletStandardExtension as t };
253
+ //# sourceMappingURL=addAptosWalletStandardExtension-C5kSd0qw.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addAptosWalletStandardExtension-C5kSd0qw.esm.js","names":["features: AptosFeatures","connect: AptosWalletProvider['connect']","disconnect: AptosWalletProvider['disconnect']","getActiveNetworkId: AptosWalletProvider['getActiveNetworkId']","getAptosClient: AptosWalletProvider['getAptosClient']","getConnectedAddresses: AptosWalletProvider['getConnectedAddresses']","signTransaction: AptosWalletProvider['signTransaction']","signAndSubmitTransaction: AptosWalletProvider['signAndSubmitTransaction']","signMessage: AptosWalletProvider['signMessage']","publicKey: string | undefined","terminate: AptosWalletProvider['terminate']","REQUIRED_FEATURES: (keyof MinimallyRequiredFeatures)[]"],"sources":["../package.json","../src/utils/constants.ts","../src/utils/fetchAptosBalance/fetchAptosBalance.ts","../src/utils/createAptosNetworkProvider/createAptosNetworkProvider.ts","../src/registerAptosNetworkProviderBuilder/registerAptosNetworkProviderBuilder.ts","../src/walletStandard/utils/createWalletProviderFromAptosStandardWallet/createWalletProviderFromAptosStandardWallet.ts","../src/walletStandard/utils/hasAllRequiredFeatures/hasAllRequiredFeatures.ts","../src/walletStandard/utils/registerAptosStandardWallet/registerAptosStandardWallet.ts","../src/walletStandard/addAptosWalletStandardExtension/addAptosWalletStandardExtension.ts"],"sourcesContent":["","// 1 APT = 10^8 octas (similar to 1 BTC = 10^8 satoshis)\nexport const OCTAS_PER_APT = 1e8;\n","import type { Network } from '@aptos-labs/ts-sdk';\nimport { Aptos, AptosConfig } from '@aptos-labs/ts-sdk';\nimport type { NetworkData } from '@dynamic-labs-sdk/client';\n\nimport { OCTAS_PER_APT } from '../constants';\n\ntype FetchAptosBalanceParams = {\n address: string;\n networkData: NetworkData;\n};\n\nexport const fetchAptosBalance = async ({\n address,\n networkData,\n}: FetchAptosBalanceParams): Promise<string | null> => {\n const config = new AptosConfig({\n fullnode: networkData.rpcUrls.http[0],\n network: networkData.cluster as Network,\n });\n\n const aptosClient = new Aptos(config);\n\n const balance = await aptosClient.getBalance({\n accountAddress: address,\n // APT coin type\n asset: '0x1::aptos_coin::AptosCoin',\n });\n\n return (Number(balance) / OCTAS_PER_APT).toString();\n};\n","import type { NetworkData } from '@dynamic-labs-sdk/client';\nimport { createBaseNetworkProvider } from '@dynamic-labs-sdk/client/core';\n\nimport type { AptosNetworkProvider } from '../../AptosNetworkProvider.types';\nimport { fetchAptosBalance } from '../fetchAptosBalance';\n\nexport const createAptosNetworkProvider = (\n networkData: NetworkData\n): AptosNetworkProvider => ({\n ...createBaseNetworkProvider('APTOS', networkData),\n cluster: networkData.cluster,\n getBalance: async ({ address }) => ({\n balance: await fetchAptosBalance({\n address,\n networkData,\n }),\n }),\n});\n","import type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport { getNetworkProviderBuilderRegistry } from '@dynamic-labs-sdk/client/core';\n\nimport { createAptosNetworkProvider } from '../utils/createAptosNetworkProvider';\n\nexport const registerAptosNetworkProviderBuilder = (\n client: DynamicClient\n): void => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n // If the Aptos network provider builder is already registered, return.\n if (networkProviderBuilderRegistry.get().get('APTOS')) {\n return;\n }\n\n networkProviderBuilderRegistry.register({\n builder: createAptosNetworkProvider,\n chain: 'APTOS',\n });\n};\n","import type { Network } from '@aptos-labs/ts-sdk';\nimport { Aptos, AptosConfig } from '@aptos-labs/ts-sdk';\nimport type {\n AccountInfo,\n AptosFeatures,\n AptosWallet,\n} from '@aptos-labs/wallet-standard';\nimport { UserResponseStatus } from '@aptos-labs/wallet-standard';\nimport {\n type DynamicClient,\n UserRejectedError,\n assertWalletAccountSigningAvailability,\n getActiveNetworkData,\n} from '@dynamic-labs-sdk/client';\nimport {\n assertDefined,\n createWalletProviderEventEmitter,\n formatWalletProviderGroupKey,\n formatWalletProviderKey,\n getActiveNetworkIdFromLastKnownRegistry,\n} from '@dynamic-labs-sdk/client/core';\nimport { WalletProviderEnum } from '@dynamic-labs/sdk-api-core';\n\nimport type { AptosWalletProvider } from '../../../AptosWalletProvider.types';\n\ntype CreateWalletProviderFromAptosStandardWalletParams = {\n dynamicClient: DynamicClient;\n walletStandardWallet: AptosWallet;\n};\n\nexport const createWalletProviderFromAptosStandardWallet = ({\n dynamicClient,\n walletStandardWallet,\n}: CreateWalletProviderFromAptosStandardWalletParams): AptosWalletProvider => {\n const features: AptosFeatures = walletStandardWallet.features;\n\n const walletProviderType = WalletProviderEnum.BrowserExtension;\n\n const key = formatWalletProviderKey({\n chain: 'APTOS',\n displayName: walletStandardWallet.name,\n walletProviderType,\n });\n\n const getAutoConnectedAccount = ():\n | { address: string; publicKey: string }[]\n | undefined => {\n const accounts = walletStandardWallet.accounts;\n if (!accounts?.length || !accounts[0].publicKey || !accounts[0].address) {\n return;\n }\n\n return accounts.map((account) => ({\n address: account.address.toString(),\n publicKey: account.publicKey?.toString(),\n }));\n };\n\n const connect: AptosWalletProvider['connect'] = async () => {\n const autoConnectedAccounts = getAutoConnectedAccount();\n\n if (autoConnectedAccounts) {\n return {\n addresses: autoConnectedAccounts,\n };\n }\n\n const connectMethod = features['aptos:connect']?.connect;\n\n assertDefined(connectMethod, 'connect method not found in wallet features');\n\n const result = await connectMethod();\n\n if (result.status !== UserResponseStatus.APPROVED) {\n throw new UserRejectedError({ action: 'connect' });\n }\n\n return {\n addresses: [\n {\n address: result.args.address.toString(),\n publicKey: result.args.publicKey?.toString(),\n },\n ],\n };\n };\n\n const disconnect: AptosWalletProvider['disconnect'] = async () => {\n const disconnectMethod = features['aptos:disconnect']?.disconnect;\n\n // this should never happen as we check for all required features in hasAllRequiredFeatures\n // but we'll assert it just in case\n assertDefined(\n disconnectMethod,\n 'disconnect method not found in wallet features'\n );\n\n return disconnectMethod();\n };\n\n const getActiveNetworkId: AptosWalletProvider['getActiveNetworkId'] =\n async () => {\n const aptosNetwork = await features['aptos:network']?.network();\n\n if (!aptosNetwork?.chainId) {\n return getActiveNetworkIdFromLastKnownRegistry({\n client: dynamicClient,\n walletProviderKey: key,\n });\n }\n\n return { networkId: aptosNetwork.chainId.toString() };\n };\n\n const getAptosClient: AptosWalletProvider['getAptosClient'] = async ({\n walletAccount,\n }) => {\n const activeNetworkData = await getActiveNetworkData(\n { walletAccount },\n dynamicClient\n );\n\n assertDefined(\n activeNetworkData.networkData,\n 'No active network data found'\n );\n\n const { rpcUrls, cluster } = activeNetworkData.networkData;\n\n const url = rpcUrls.http[0];\n\n assertDefined(url, 'No RPC URL found for active network');\n\n const network = cluster as Network;\n const config = new AptosConfig({ fullnode: url, network });\n\n return new Aptos(config);\n };\n\n const getConnectedAccount = async (): Promise<AccountInfo | undefined> => {\n const getAccountMethod = features['aptos:account']?.account;\n\n if (!getAccountMethod) {\n return undefined;\n }\n\n return getAccountMethod();\n };\n\n const getConnectedAddresses: AptosWalletProvider['getConnectedAddresses'] =\n async () => {\n const account = await getConnectedAccount();\n\n if (account) {\n return {\n addresses: [account.address.toString()],\n };\n }\n\n return {\n addresses: [],\n };\n };\n\n const signTransaction: AptosWalletProvider['signTransaction'] = async ({\n asFeePayer,\n transaction,\n walletAccount,\n }) => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const signTransactionMethod =\n features['aptos:signTransaction']?.signTransaction;\n\n assertDefined(\n signTransactionMethod,\n 'signTransaction method not found in wallet features'\n );\n\n const result = await signTransactionMethod(transaction, asFeePayer);\n\n if (result.status !== UserResponseStatus.APPROVED) {\n throw new UserRejectedError({ action: 'signTransaction' });\n }\n\n return {\n signature: result.args,\n };\n };\n\n const signAndSubmitTransaction: AptosWalletProvider['signAndSubmitTransaction'] =\n async ({ transaction, walletAccount }) => {\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const signAndSubmitMethod =\n features['aptos:signAndSubmitTransaction']?.signAndSubmitTransaction;\n\n assertDefined(\n signAndSubmitMethod,\n 'signAndSubmitTransaction method not found in wallet features'\n );\n\n const result = await signAndSubmitMethod({\n payload: transaction,\n });\n\n if (result.status !== UserResponseStatus.APPROVED) {\n throw new UserRejectedError({ action: 'signAndSubmitTransaction' });\n }\n\n return {\n hash: result.args.hash,\n };\n };\n\n const signMessage: AptosWalletProvider['signMessage'] = async ({\n message,\n walletAccount,\n }) => {\n assertDefined(walletAccount, 'Wallet account not found');\n\n await assertWalletAccountSigningAvailability(\n { walletAccount },\n dynamicClient\n );\n\n const signMessageMethod = features['aptos:signMessage']?.signMessage;\n\n assertDefined(\n signMessageMethod,\n 'signMessage method not found in wallet features'\n );\n\n const nonce = Date.now().toString();\n const result = await signMessageMethod({\n message,\n nonce,\n });\n\n if (result.status !== UserResponseStatus.APPROVED) {\n throw new UserRejectedError({ action: 'signMessage' });\n }\n\n let publicKey: string | undefined =\n walletStandardWallet.accounts[0]?.publicKey?.toString();\n\n if (!publicKey) {\n const account = await getConnectedAccount();\n publicKey = account?.publicKey?.toString();\n }\n\n const signatureObj = {\n fullMessage: result.args.fullMessage,\n publicKey,\n signature: result.args.signature.toString(),\n };\n\n return { signature: JSON.stringify(signatureObj) };\n };\n\n const { cleanupEventEmitter, getEventEmitter } =\n createWalletProviderEventEmitter<VoidFunction>({\n removeEventListeners: ({ setupReturnValue }) => {\n assertDefined(setupReturnValue, 'Setup return value not defined');\n\n setupReturnValue();\n },\n\n setupEventListeners: ({\n handleAccountsChanged,\n handleNetworkChanged,\n }): VoidFunction => {\n const onAccountChange =\n features['aptos:onAccountChange']?.onAccountChange;\n\n if (onAccountChange) {\n void onAccountChange((account) => {\n handleAccountsChanged({\n addresses: account ? [account.address.toString()] : [],\n });\n });\n }\n\n const onNetworkChange =\n features['aptos:onNetworkChange']?.onNetworkChange;\n\n if (onNetworkChange) {\n void onNetworkChange((network) => {\n handleNetworkChanged({ networkId: network.chainId.toString() });\n });\n }\n\n return () => {};\n },\n\n supportedEvents: ['accountsChanged', 'networkChanged'],\n });\n\n const terminate: AptosWalletProvider['terminate'] = async () => {\n cleanupEventEmitter();\n };\n\n const walletProvider: AptosWalletProvider = {\n chain: 'APTOS',\n connect,\n disconnect,\n get events() {\n return getEventEmitter();\n },\n getActiveNetworkId,\n getAptosClient,\n getConnectedAddresses,\n groupKey: formatWalletProviderGroupKey(walletStandardWallet.name),\n key,\n metadata: {\n displayName: walletStandardWallet.name,\n icon: walletStandardWallet.icon,\n },\n signAndSubmitTransaction,\n signMessage,\n signTransaction,\n terminate,\n walletProviderType,\n };\n\n return walletProvider;\n};\n","import type {\n AptosWallet,\n MinimallyRequiredFeatures,\n} from '@aptos-labs/wallet-standard';\n\nconst REQUIRED_FEATURES: (keyof MinimallyRequiredFeatures)[] = [\n 'aptos:account',\n 'aptos:connect',\n 'aptos:disconnect',\n 'aptos:network',\n 'aptos:onAccountChange',\n 'aptos:onNetworkChange',\n 'aptos:signMessage',\n 'aptos:signTransaction',\n];\n\nexport const hasAllRequiredFeatures = (wallet: AptosWallet): boolean => {\n return Boolean(\n REQUIRED_FEATURES.every((feature) => feature in wallet.features)\n );\n};\n","import type { AptosWallet } from '@aptos-labs/wallet-standard';\nimport type { DynamicClient } from '@dynamic-labs-sdk/client';\nimport {\n WalletProviderPriority,\n getWalletProviderRegistry,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { createWalletProviderFromAptosStandardWallet } from '../createWalletProviderFromAptosStandardWallet';\nimport { hasAllRequiredFeatures } from '../hasAllRequiredFeatures';\n\nexport const registerAptosStandardWallet = (\n wallet: AptosWallet,\n client: DynamicClient\n) => {\n const walletProviderRegistry = getWalletProviderRegistry(client);\n\n if (hasAllRequiredFeatures(wallet)) {\n const walletProvider = createWalletProviderFromAptosStandardWallet({\n dynamicClient: client,\n walletStandardWallet: wallet,\n });\n\n walletProviderRegistry.register({\n priority: WalletProviderPriority.WALLET_SELF_ANNOUNCEMENT_STANDARD,\n walletProvider,\n });\n }\n};\n","import type { AptosWallet } from '@aptos-labs/wallet-standard';\nimport { getAptosWallets } from '@aptos-labs/wallet-standard';\nimport {\n getDefaultClient,\n hasExtension,\n registerExtension,\n} from '@dynamic-labs-sdk/client/core';\n\nimport { registerAptosNetworkProviderBuilder } from '../../registerAptosNetworkProviderBuilder';\nimport { registerAptosStandardWallet } from '../utils/registerAptosStandardWallet';\n\nexport const APTOS_WALLET_STANDARD_EXTENSION_KEY = 'aptosWalletStandard';\n\n/**\n * Adds the Aptos Wallet Standard extension to the Dynamic client.\n *\n * This extension enables integration with wallets that implement the Aptos Wallet Standard (AIP-62),\n * automatically detecting and registering compatible wallets for use with the Dynamic SDK.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n *\n * @returns A function that can be used to remove Aptos Wallet Standard register event listener that was added.\n */\nexport const addAptosWalletStandardExtension = (\n client = getDefaultClient()\n): VoidFunction => {\n if (\n hasExtension({ extensionKey: APTOS_WALLET_STANDARD_EXTENSION_KEY }, client)\n ) {\n return () => {\n // noop\n };\n }\n\n registerExtension(\n { extensionKey: APTOS_WALLET_STANDARD_EXTENSION_KEY },\n client\n );\n\n registerAptosNetworkProviderBuilder(client);\n\n const { aptosWallets, on } = getAptosWallets();\n\n // Listen for new wallet registrations/announcements\n const removeListener = on('register', (wallet) => {\n registerAptosStandardWallet(wallet as AptosWallet, client);\n });\n\n // Register all wallets that are already registered/announced in the browser\n for (const wallet of aptosWallets) {\n registerAptosStandardWallet(wallet, client);\n }\n\n return removeListener;\n};\n"],"mappings":"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"}