@tronweb3/tronwallet-adapter-tokenpocket 1.0.0

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.
@@ -0,0 +1,286 @@
1
+ import { Adapter, AdapterState, isInBrowser, WalletReadyState, WalletSignMessageError, WalletNotFoundError, WalletDisconnectedError, WalletSignTransactionError, isInMobileBrowser, WalletGetNetworkError, } from '@tronweb3/tronwallet-abstract-adapter';
2
+ import { getNetworkInfoByTronWeb } from '@tronweb3/tronwallet-adapter-tronlink';
3
+ import { openTokenPocket, supportTokenPocket } from './utils.js';
4
+ export const TokenPocketAdapterName = 'TokenPocket';
5
+ export class TokenPocketAdapter extends Adapter {
6
+ constructor(config = {}) {
7
+ super();
8
+ this.name = TokenPocketAdapterName;
9
+ this.url = 'https://tokenpocket.pro/';
10
+ this.icon = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIwIiBoZWlnaHQ9IjEyMCIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGc+CjxwYXRoIGQ9Ik0xMDQxLjUyIDBILTI3VjEwMjRIMTA0MS41MlYwWiIgZmlsbD0iIzI5ODBGRSIvPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfNDA4XzIyNSkiPgo8cGF0aCBkPSJNNDA2Ljc5NiA0MzguNjQzSDQwNi45MjdDNDA2Ljc5NiA0MzcuODU3IDQwNi43OTYgNDM2Ljk0IDQwNi43OTYgNDM2LjE1NFY0MzguNjQzWiIgZmlsbD0iIzI5QUVGRiIvPgo8cGF0aCBkPSJNNjY3LjYwMiA0NjMuNTMzSDUyMy4yNDlWNzI0LjA3NkM1MjMuMjQ5IDczNi4zODkgNTMzLjIwNCA3NDYuMzQ1IDU0NS41MTcgNzQ2LjM0NUg2NDUuMzMzQzY1Ny42NDcgNzQ2LjM0NSA2NjcuNjAyIDczNi4zODkgNjY3LjYwMiA3MjQuMDc2VjQ2My41MzNaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNDUzLjU2MyAyNzdINDQ4LjcxNkgxOTAuMjY5QzE3Ny45NTUgMjc3IDE2OCAyODYuOTU1IDE2OCAyOTkuMjY5VjM4OS42NTNDMTY4IDQwMS45NjcgMTc3Ljk1NSA0MTEuOTIyIDE5MC4yNjkgNDExLjkyMkgyNTAuOTE4SDI3NS4wMjFWNDM4LjY0NFY3MjQuNzMxQzI3NS4wMjEgNzM3LjA0NSAyODQuOTc2IDc0NyAyOTcuMjg5IDc0N0gzOTIuMTI4QzQwNC40NDEgNzQ3IDQxNC4zOTYgNzM3LjA0NSA0MTQuMzk2IDcyNC43MzFWNDM4LjY0NFY0MzYuMTU2VjQxMS45MjJINDM4LjQ5OUg0NDguMzIzSDQ1My4xN0M0OTAuMzcyIDQxMS45MjIgNTIwLjYzMSAzODEuNjYzIDUyMC42MzEgMzQ0LjQ2MUM1MjEuMDI0IDMwNy4yNTkgNDkwLjc2NSAyNzcgNDUzLjU2MyAyNzdaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNjY3LjczNSA0NjMuNTMzVjY0NS4zNUM2NzIuNzEzIDY0Ni41MjkgNjc3LjgyMSA2NDcuNDQ2IDY4My4wNjEgNjQ4LjIzMkM2OTAuMzk3IDY0OS4yOCA2OTcuOTk0IDY0OS45MzUgNzA1LjU5MiA2NTAuMDY2QzcwNS45ODUgNjUwLjA2NiA3MDYuMzc4IDY1MC4wNjYgNzA2LjkwMiA2NTAuMDY2VjUwNS40NUM2ODUuMDI2IDUwNC4wMDkgNjY3LjczNSA0ODUuODAxIDY2Ny43MzUgNDYzLjUzM1oiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl80MDhfMjI1KSIvPgo8cGF0aCBkPSJNNzA5Ljc4MSAyNzdDNjA2LjgyMiAyNzcgNTIzLjI0OSAzNjAuNTczIDUyMy4yNDkgNDYzLjUzM0M1MjMuMjQ5IDU1Mi4wODQgNTg0Ljk0NiA2MjYuMjI1IDY2Ny43MzMgNjQ1LjM1VjQ2My41MzNDNjY3LjczMyA0NDAuMzQ3IDY4Ni41OTYgNDIxLjQ4NCA3MDkuNzgxIDQyMS40ODRDNzMyLjk2NyA0MjEuNDg0IDc1MS44MyA0NDAuMzQ3IDc1MS44MyA0NjMuNTMzQzc1MS44MyA0ODMuMDUxIDczOC42IDQ5OS40MjUgNzIwLjUyMyA1MDQuMTRDNzE3LjExNyA1MDUuMDU3IDcxMy40NDkgNTA1LjU4MSA3MDkuNzgxIDUwNS41ODFWNjUwLjA2NkM3MTMuNDQ5IDY1MC4wNjYgNzE2Ljk4NiA2NDkuOTM1IDcyMC41MjMgNjQ5LjgwNEM4MTguNTA1IDY0NC4xNzEgODk2LjMxNCA1NjIuOTU2IDg5Ni4zMTQgNDYzLjUzM0M4OTYuNDQ1IDM2MC41NzMgODEyLjg3MiAyNzcgNzA5Ljc4MSAyNzdaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNzA5Ljc4IDY1MC4wNjZWNTA1LjU4MUM3MDguNzMzIDUwNS41ODEgNzA3LjgxNiA1MDUuNTgxIDcwNi43NjggNTA1LjQ1VjY1MC4wNjZDNzA3LjgxNiA2NTAuMDY2IDcwOC44NjQgNjUwLjA2NiA3MDkuNzggNjUwLjA2NloiIGZpbGw9IndoaXRlIi8+CjwvZz4KPC9nPgo8ZGVmcz4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDBfbGluZWFyXzQwOF8yMjUiIHgxPSI3MDkuODQ0IiB5MT0iNTU2LjgyNyIgeDI9IjY2Ny43NTMiIHkyPSI1NTYuODI3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IndoaXRlIi8+CjxzdG9wIG9mZnNldD0iMC45NjY3IiBzdG9wLWNvbG9yPSJ3aGl0ZSIgc3RvcC1vcGFjaXR5PSIwLjMyMzMiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSJ3aGl0ZSIgc3RvcC1vcGFjaXR5PSIwLjMiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF80MDhfMjI1Ij4KPHJlY3Qgd2lkdGg9IjcyOC40NDgiIGhlaWdodD0iNDcwIiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY4IDI3NykiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K';
11
+ this._readyState = isInBrowser() ? WalletReadyState.Loading : WalletReadyState.NotFound;
12
+ this._state = AdapterState.Loading;
13
+ this.checkReadyInterval = null;
14
+ this._checkPromise = null;
15
+ this._updateWallet = () => {
16
+ let state = this.state;
17
+ let address = this.address;
18
+ if (supportTokenPocket()) {
19
+ // fake tronLink
20
+ this._wallet = {
21
+ ready: window.tronWeb?.ready,
22
+ tronWeb: window.tronWeb,
23
+ request: () => Promise.resolve(true),
24
+ };
25
+ address = this._wallet.tronWeb.defaultAddress?.base58 || null;
26
+ state = window.tronWeb?.ready ? AdapterState.Connected : AdapterState.Disconnect;
27
+ if (!window.tronWeb?.ready) {
28
+ this.checkForWalletReady();
29
+ }
30
+ }
31
+ else {
32
+ // no tronlink support
33
+ this._wallet = null;
34
+ address = null;
35
+ state = AdapterState.NotFound;
36
+ }
37
+ this.setAddress(address);
38
+ this.setState(state);
39
+ };
40
+ const { checkTimeout = 2 * 1000, openUrlWhenWalletNotFound = true, openAppWithDeeplink = true } = config;
41
+ if (typeof checkTimeout !== 'number') {
42
+ throw new Error('[TokenPocketAdapter] config.checkTimeout should be a number');
43
+ }
44
+ this.config = {
45
+ checkTimeout,
46
+ openAppWithDeeplink,
47
+ openUrlWhenWalletNotFound,
48
+ };
49
+ this._connecting = false;
50
+ this._wallet = null;
51
+ this._address = null;
52
+ if (!isInMobileBrowser()) {
53
+ // Currently TokenPocket extension does not support Tron.
54
+ this._readyState = WalletReadyState.NotFound;
55
+ this._state = AdapterState.NotFound;
56
+ return;
57
+ }
58
+ if (supportTokenPocket()) {
59
+ this._readyState = WalletReadyState.Found;
60
+ this._updateWallet();
61
+ }
62
+ else {
63
+ this._checkWallet().then(() => {
64
+ if (this.connected) {
65
+ this.emit('connect', this.address || '');
66
+ }
67
+ });
68
+ }
69
+ }
70
+ get address() {
71
+ return this._address;
72
+ }
73
+ get state() {
74
+ return this._state;
75
+ }
76
+ get readyState() {
77
+ return this._readyState;
78
+ }
79
+ get connecting() {
80
+ return this._connecting;
81
+ }
82
+ /**
83
+ * Get network information.
84
+ * @returns {Network} Current network information.
85
+ */
86
+ async network() {
87
+ try {
88
+ await this._checkWallet();
89
+ if (this.state !== AdapterState.Connected)
90
+ throw new WalletDisconnectedError();
91
+ const wallet = this._wallet;
92
+ if (!wallet || !wallet.tronWeb)
93
+ throw new WalletDisconnectedError();
94
+ try {
95
+ return await getNetworkInfoByTronWeb(wallet.tronWeb);
96
+ }
97
+ catch (e) {
98
+ throw new WalletGetNetworkError(e?.message, e);
99
+ }
100
+ }
101
+ catch (e) {
102
+ this.emit('error', e);
103
+ throw e;
104
+ }
105
+ }
106
+ async connect() {
107
+ try {
108
+ this.checkIfOpenApp();
109
+ if (this.connected || this.connecting)
110
+ return;
111
+ await this._checkWallet();
112
+ if (this.readyState === WalletReadyState.NotFound) {
113
+ if (this.config.openUrlWhenWalletNotFound !== false && isInBrowser()) {
114
+ window.open(this.url, '_blank');
115
+ }
116
+ throw new WalletNotFoundError();
117
+ }
118
+ if (!this._wallet)
119
+ return;
120
+ this._connecting = true;
121
+ const wallet = this._wallet;
122
+ const address = wallet.tronWeb.defaultAddress?.base58 || '';
123
+ this.setAddress(address);
124
+ this.setState(AdapterState.Connected);
125
+ this.emit('connect', this.address || '');
126
+ }
127
+ catch (error) {
128
+ this.emit('error', error);
129
+ throw error;
130
+ }
131
+ finally {
132
+ this._connecting = false;
133
+ }
134
+ }
135
+ async disconnect() {
136
+ if (this.state !== AdapterState.Connected) {
137
+ return;
138
+ }
139
+ this.setAddress(null);
140
+ this.setState(AdapterState.Disconnect);
141
+ this.emit('disconnect');
142
+ }
143
+ async signTransaction(transaction, privateKey) {
144
+ try {
145
+ const wallet = await this.checkAndGetWallet();
146
+ try {
147
+ return await wallet.tronWeb.trx.sign(transaction, privateKey);
148
+ }
149
+ catch (error) {
150
+ if (error instanceof Error) {
151
+ throw new WalletSignTransactionError(error.message, error);
152
+ }
153
+ else {
154
+ throw new WalletSignTransactionError(error, new Error(error));
155
+ }
156
+ }
157
+ }
158
+ catch (error) {
159
+ this.emit('error', error);
160
+ throw error;
161
+ }
162
+ }
163
+ async multiSign(...args) {
164
+ try {
165
+ const wallet = await this.checkAndGetWallet();
166
+ try {
167
+ return await wallet.tronWeb.trx.multiSign(...args);
168
+ }
169
+ catch (error) {
170
+ if (error instanceof Error) {
171
+ throw new WalletSignTransactionError(error.message, error);
172
+ }
173
+ else {
174
+ throw new WalletSignTransactionError(error, new Error(error));
175
+ }
176
+ }
177
+ }
178
+ catch (error) {
179
+ this.emit('error', error);
180
+ throw error;
181
+ }
182
+ }
183
+ async signMessage(message, privateKey) {
184
+ try {
185
+ const wallet = await this.checkAndGetWallet();
186
+ try {
187
+ return await wallet.tronWeb.trx.signMessageV2(message, privateKey);
188
+ }
189
+ catch (error) {
190
+ if (error instanceof Error) {
191
+ throw new WalletSignMessageError(error.message, error);
192
+ }
193
+ else {
194
+ throw new WalletSignMessageError(error, new Error(error));
195
+ }
196
+ }
197
+ }
198
+ catch (error) {
199
+ this.emit('error', error);
200
+ throw error;
201
+ }
202
+ }
203
+ async checkAndGetWallet() {
204
+ this.checkIfOpenApp();
205
+ await this._checkWallet();
206
+ if (!this.connected)
207
+ throw new WalletDisconnectedError();
208
+ const wallet = this._wallet;
209
+ if (!wallet || !wallet.tronWeb)
210
+ throw new WalletDisconnectedError();
211
+ return wallet;
212
+ }
213
+ checkIfOpenApp() {
214
+ if (this.config.openAppWithDeeplink === false) {
215
+ return;
216
+ }
217
+ if (openTokenPocket()) {
218
+ throw new WalletNotFoundError();
219
+ }
220
+ }
221
+ checkForWalletReady() {
222
+ if (this.checkReadyInterval) {
223
+ return;
224
+ }
225
+ let times = 0;
226
+ const maxTimes = Math.floor(this.config.checkTimeout / 200);
227
+ const check = () => {
228
+ if (window?.tronWeb?.ready) {
229
+ this.checkReadyInterval && clearInterval(this.checkReadyInterval);
230
+ this.checkReadyInterval = null;
231
+ this._updateWallet();
232
+ this.emit('connect', this.address || '');
233
+ }
234
+ else if (times > maxTimes) {
235
+ this.checkReadyInterval && clearInterval(this.checkReadyInterval);
236
+ this.checkReadyInterval = null;
237
+ }
238
+ else {
239
+ times++;
240
+ }
241
+ };
242
+ this.checkReadyInterval = setInterval(check, 200);
243
+ }
244
+ /**
245
+ * check if wallet exists by interval, the promise only resolve when wallet detected or timeout
246
+ * @returns if wallet exists
247
+ */
248
+ _checkWallet() {
249
+ if (this.readyState === WalletReadyState.Found) {
250
+ return Promise.resolve(true);
251
+ }
252
+ if (this._checkPromise) {
253
+ return this._checkPromise;
254
+ }
255
+ const interval = 100;
256
+ const maxTimes = Math.floor(this.config.checkTimeout / interval);
257
+ let times = 0, timer;
258
+ this._checkPromise = new Promise((resolve) => {
259
+ const check = () => {
260
+ times++;
261
+ const isSupport = supportTokenPocket();
262
+ if (isSupport || times > maxTimes) {
263
+ timer && clearInterval(timer);
264
+ this._readyState = isSupport ? WalletReadyState.Found : WalletReadyState.NotFound;
265
+ this._updateWallet();
266
+ this.emit('readyStateChanged', this.readyState);
267
+ resolve(isSupport);
268
+ }
269
+ };
270
+ timer = setInterval(check, interval);
271
+ check();
272
+ });
273
+ return this._checkPromise;
274
+ }
275
+ setAddress(address) {
276
+ this._address = address;
277
+ }
278
+ setState(state) {
279
+ const preState = this.state;
280
+ if (state !== preState) {
281
+ this._state = state;
282
+ this.emit('stateChanged', state);
283
+ }
284
+ }
285
+ }
286
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './adapter.js';
2
+ export * from './utils.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { isInBrowser, isInMobileBrowser } from '@tronweb3/tronwallet-abstract-adapter';
2
+ export function supportTokenPocket() {
3
+ return !!window.tronWeb && typeof window.tokenpocket !== 'undefined';
4
+ }
5
+ /**
6
+ * Detect if in TokenPocketApp
7
+ * There will be a `tokenpocket` object on window
8
+ */
9
+ export function isInTokenPocket() {
10
+ return isInBrowser() && typeof window.tokenpocket !== 'undefined';
11
+ }
12
+ export function openTokenPocket() {
13
+ if (!supportTokenPocket() && isInMobileBrowser() && !isInTokenPocket()) {
14
+ const { origin, pathname, search, hash } = window.location;
15
+ const url = origin + pathname + search + hash;
16
+ const params = {
17
+ action: 'open',
18
+ actionId: Date.now() + '',
19
+ callbackUrl: 'http://someurl.com',
20
+ blockchain: 'Tron',
21
+ chain: 'Tron',
22
+ url,
23
+ protocol: 'TokenPocket',
24
+ version: '1.0',
25
+ };
26
+ window.location.href = `tpdapp://open?params=${encodeURIComponent(JSON.stringify(params))}`;
27
+ return true;
28
+ }
29
+ return false;
30
+ }
31
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAEvF,MAAM,UAAU,kBAAkB;IAC9B,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,OAAQ,MAAc,CAAC,WAAW,KAAK,WAAW,CAAC;AAClF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC3B,OAAO,WAAW,EAAE,IAAI,OAAQ,MAAc,CAAC,WAAW,KAAK,WAAW,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,eAAe;IAC3B,IAAI,CAAC,kBAAkB,EAAE,IAAI,iBAAiB,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE;QACpE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3D,MAAM,GAAG,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;QAC9C,MAAM,MAAM,GAAG;YACX,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;YACzB,WAAW,EAAE,oBAAoB;YACjC,UAAU,EAAE,MAAM;YAClB,KAAK,EAAE,MAAM;YACb,GAAG;YACH,QAAQ,EAAE,aAAa;YACvB,OAAO,EAAE,KAAK;SACjB,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC5F,OAAO,IAAI,CAAC;KACf;IACD,OAAO,KAAK,CAAC;AACjB,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { Adapter, AdapterState, WalletReadyState } from '@tronweb3/tronwallet-abstract-adapter';
2
+ import type { Transaction, SignedTransaction, AdapterName, BaseAdapterConfig, Network } from '@tronweb3/tronwallet-abstract-adapter';
3
+ export interface TokenPocketAdapterConfig extends BaseAdapterConfig {
4
+ /**
5
+ * Timeout in millisecond for checking if is in TokenPocket App.
6
+ * Default is 2 * 1000ms
7
+ */
8
+ checkTimeout?: number;
9
+ /**
10
+ * Set if open TokenPocket app using DeepLink.
11
+ * Default is true.
12
+ */
13
+ openAppWithDeeplink?: boolean;
14
+ }
15
+ export declare const TokenPocketAdapterName: AdapterName<"TokenPocket">;
16
+ export declare class TokenPocketAdapter extends Adapter {
17
+ name: AdapterName<"TokenPocket">;
18
+ url: string;
19
+ icon: string;
20
+ config: Required<TokenPocketAdapterConfig>;
21
+ private _readyState;
22
+ private _state;
23
+ private _connecting;
24
+ private _wallet;
25
+ private _address;
26
+ constructor(config?: TokenPocketAdapterConfig);
27
+ get address(): string | null;
28
+ get state(): AdapterState;
29
+ get readyState(): WalletReadyState;
30
+ get connecting(): boolean;
31
+ /**
32
+ * Get network information.
33
+ * @returns {Network} Current network information.
34
+ */
35
+ network(): Promise<Network>;
36
+ connect(): Promise<void>;
37
+ disconnect(): Promise<void>;
38
+ signTransaction(transaction: Transaction, privateKey?: string): Promise<SignedTransaction>;
39
+ multiSign(...args: any[]): Promise<SignedTransaction>;
40
+ signMessage(message: string, privateKey?: string): Promise<string>;
41
+ private checkAndGetWallet;
42
+ private checkIfOpenApp;
43
+ private checkReadyInterval;
44
+ private checkForWalletReady;
45
+ private _checkPromise;
46
+ /**
47
+ * check if wallet exists by interval, the promise only resolve when wallet detected or timeout
48
+ * @returns if wallet exists
49
+ */
50
+ private _checkWallet;
51
+ private _updateWallet;
52
+ private setAddress;
53
+ private setState;
54
+ }
55
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,OAAO,EACP,YAAY,EAEZ,gBAAgB,EAOnB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EACR,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,OAAO,EACV,MAAM,uCAAuC,CAAC;AAK/C,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IAC/D;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,eAAO,MAAM,sBAAsB,4BAA8C,CAAC;AAElF,qBAAa,kBAAmB,SAAQ,OAAO;IAC3C,IAAI,6BAA0B;IAC9B,GAAG,SAA8B;IACjC,IAAI,SAC66F;IAEj7F,MAAM,EAAE,QAAQ,CAAC,wBAAwB,CAAC,CAAC;IAC3C,OAAO,CAAC,WAAW,CAA0F;IAC7G,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAgB;gBAEpB,MAAM,GAAE,wBAA6B;IAiCjD,IAAI,OAAO,kBAEV;IAED,IAAI,KAAK,iBAER;IACD,IAAI,UAAU,qBAEb;IAED,IAAI,UAAU,YAEb;IAED;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAiB3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkB1F,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkBrD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAkB1D,iBAAiB;IAS/B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,kBAAkB,CAA+C;IACzE,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,aAAa,CAAiC;IACtD;;;OAGG;IACH,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,aAAa,CAuBnB;IAEF,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,QAAQ;CAOnB"}
@@ -0,0 +1,3 @@
1
+ export * from './adapter.js';
2
+ export * from './utils.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare function supportTokenPocket(): boolean;
2
+ /**
3
+ * Detect if in TokenPocketApp
4
+ * There will be a `tokenpocket` object on window
5
+ */
6
+ export declare function isInTokenPocket(): boolean;
7
+ export declare function openTokenPocket(): boolean;
8
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,YAEjC;AAED;;;GAGG;AACH,wBAAgB,eAAe,YAE9B;AAED,wBAAgB,eAAe,YAkB9B"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@tronweb3/tronwallet-adapter-tokenpocket",
3
+ "version": "1.0.0",
4
+ "description": "Wallet adapter for TokenPocket Wallet app.",
5
+ "keywords": [
6
+ "TRON",
7
+ "TronWeb",
8
+ "TokenPocket"
9
+ ],
10
+ "author": "tronprotocol",
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "https://github.com/tronprotocol/tronwallet-adapter"
14
+ },
15
+ "license": "MIT",
16
+ "type": "module",
17
+ "sideEffects": false,
18
+ "engines": {
19
+ "node": ">=16",
20
+ "pnpm": ">=7"
21
+ },
22
+ "main": "./lib/cjs/index.js",
23
+ "module": "./lib/esm/index.js",
24
+ "types": "./lib/types/index.d.ts",
25
+ "exports": {
26
+ "require": "./lib/cjs/index.js",
27
+ "import": "./lib/esm/index.js",
28
+ "types": "./lib/types/index.d.ts"
29
+ },
30
+ "files": [
31
+ "lib",
32
+ "src",
33
+ "LICENSE"
34
+ ],
35
+ "publishConfig": {
36
+ "access": "public"
37
+ },
38
+ "dependencies": {
39
+ "@tronweb3/tronwallet-abstract-adapter": "^1.1.5",
40
+ "@tronweb3/tronwallet-adapter-tronlink": "^1.1.5"
41
+ },
42
+ "devDependencies": {
43
+ "@testing-library/dom": "^8.20.0",
44
+ "jest-environment-jsdom": "^29.3.1",
45
+ "shx": "^0.3.4"
46
+ },
47
+ "scripts": {
48
+ "clean": "shx mkdir -p lib && shx rm -rf lib",
49
+ "package": "shx echo '{ \"type\": \"commonjs\" }' > lib/cjs/package.json",
50
+ "test": "jest"
51
+ }
52
+ }