@hashgraph/hedera-wallet-connect 1.3.7-canary.de9fb58.0 → 1.3.8-canary.09d9623.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.
- package/dist/{src/lib → lib}/dapp/DAppSigner.d.ts +18 -2
- package/dist/{src/lib → lib}/dapp/DAppSigner.js +109 -30
- package/dist/{src/lib → lib}/dapp/index.d.ts +4 -0
- package/dist/{src/lib → lib}/dapp/index.js +39 -40
- package/dist/{src/lib → lib}/shared/logger.d.ts +1 -0
- package/dist/{src/lib → lib}/shared/logger.js +3 -0
- package/dist/{src/lib → lib}/shared/utils.d.ts +8 -2
- package/dist/{src/lib → lib}/shared/utils.js +10 -2
- package/package.json +4 -3
- package/dist/test/_helpers.d.ts +0 -38
- package/dist/test/_helpers.js +0 -95
- package/dist/test/dapp/DAppConnector.test.d.ts +0 -1
- package/dist/test/dapp/DAppConnector.test.js +0 -232
- package/dist/test/dapp/DAppSigner.test.d.ts +0 -1
- package/dist/test/dapp/DAppSigner.test.js +0 -625
- package/dist/test/shared/logger.test.d.ts +0 -1
- package/dist/test/shared/logger.test.js +0 -129
- package/dist/test/utils.test.d.ts +0 -1
- package/dist/test/utils.test.js +0 -201
- package/dist/test/wallet/methods/wallet-executeTransaction.test.d.ts +0 -1
- package/dist/test/wallet/methods/wallet-executeTransaction.test.js +0 -43
- package/dist/test/wallet/methods/wallet-getNodeAddresses.test.d.ts +0 -1
- package/dist/test/wallet/methods/wallet-getNodeAddresses.test.js +0 -40
- package/dist/test/wallet/methods/wallet-signAndExecuteQuery.test.d.ts +0 -1
- package/dist/test/wallet/methods/wallet-signAndExecuteQuery.test.js +0 -41
- package/dist/test/wallet/methods/wallet-signAndExecuteTransaction.test.d.ts +0 -1
- package/dist/test/wallet/methods/wallet-signAndExecuteTransaction.test.js +0 -48
- package/dist/test/wallet/methods/wallet-signMessage.test.d.ts +0 -1
- package/dist/test/wallet/methods/wallet-signMessage.test.js +0 -60
- package/dist/test/wallet/methods/wallet-signTransaction.test.d.ts +0 -1
- package/dist/test/wallet/methods/wallet-signTransaction.test.js +0 -47
- package/dist/test/wallet/wallet-init.test.d.ts +0 -1
- package/dist/test/wallet/wallet-init.test.js +0 -53
- /package/dist/{src/index.d.ts → index.d.ts} +0 -0
- /package/dist/{src/index.js → index.js} +0 -0
- /package/dist/{src/lib → lib}/index.d.ts +0 -0
- /package/dist/{src/lib → lib}/index.js +0 -0
- /package/dist/{src/lib → lib}/shared/chainIds.d.ts +0 -0
- /package/dist/{src/lib → lib}/shared/chainIds.js +0 -0
- /package/dist/{src/lib → lib}/shared/errors.d.ts +0 -0
- /package/dist/{src/lib → lib}/shared/errors.js +0 -0
- /package/dist/{src/lib → lib}/shared/events.d.ts +0 -0
- /package/dist/{src/lib → lib}/shared/events.js +0 -0
- /package/dist/{src/lib → lib}/shared/extensionController.d.ts +0 -0
- /package/dist/{src/lib → lib}/shared/extensionController.js +0 -0
- /package/dist/{src/lib → lib}/shared/index.d.ts +0 -0
- /package/dist/{src/lib → lib}/shared/index.js +0 -0
- /package/dist/{src/lib → lib}/shared/methods.d.ts +0 -0
- /package/dist/{src/lib → lib}/shared/methods.js +0 -0
- /package/dist/{src/lib → lib}/shared/payloads.d.ts +0 -0
- /package/dist/{src/lib → lib}/shared/payloads.js +0 -0
- /package/dist/{src/lib → lib}/wallet/index.d.ts +0 -0
- /package/dist/{src/lib → lib}/wallet/index.js +0 -0
- /package/dist/{src/lib → lib}/wallet/provider.d.ts +0 -0
- /package/dist/{src/lib → lib}/wallet/provider.js +0 -0
- /package/dist/{src/lib → lib}/wallet/types.d.ts +0 -0
- /package/dist/{src/lib → lib}/wallet/types.js +0 -0
@@ -6,7 +6,13 @@ export declare class DAppSigner implements Signer {
|
|
6
6
|
readonly topic: string;
|
7
7
|
private readonly ledgerId;
|
8
8
|
readonly extensionId?: string | undefined;
|
9
|
-
|
9
|
+
private logger;
|
10
|
+
constructor(accountId: AccountId, signClient: ISignClient, topic: string, ledgerId?: LedgerId, extensionId?: string | undefined, logLevel?: 'error' | 'warn' | 'info' | 'debug');
|
11
|
+
/**
|
12
|
+
* Sets the logging level for the DAppSigner
|
13
|
+
* @param level - The logging level to set
|
14
|
+
*/
|
15
|
+
setLogLevel(level: 'error' | 'warn' | 'info' | 'debug'): void;
|
10
16
|
private _getHederaClient;
|
11
17
|
private get _signerAccountId();
|
12
18
|
private _getRandomNodes;
|
@@ -25,7 +31,9 @@ export declare class DAppSigner implements Signer {
|
|
25
31
|
getAccountInfo(): Promise<AccountInfo>;
|
26
32
|
getAccountRecords(): Promise<TransactionRecord[]>;
|
27
33
|
getMetadata(): CoreTypes.Metadata;
|
28
|
-
sign(data: Uint8Array[], signOptions?:
|
34
|
+
sign(data: Uint8Array[], signOptions?: {
|
35
|
+
encoding?: 'utf-8' | 'base64';
|
36
|
+
}): Promise<SignerSignature[]>;
|
29
37
|
checkTransaction<T extends Transaction>(transaction: T): Promise<T>;
|
30
38
|
populateTransaction<T extends Transaction>(transaction: T): Promise<T>;
|
31
39
|
/**
|
@@ -39,6 +47,14 @@ export declare class DAppSigner implements Signer {
|
|
39
47
|
signTransaction<T extends Transaction>(transaction: T): Promise<T>;
|
40
48
|
private _tryExecuteTransactionRequest;
|
41
49
|
private _parseQueryResponse;
|
50
|
+
/**
|
51
|
+
* Executes a free receipt query without signing a transaction.
|
52
|
+
* Enables the DApp to fetch the receipt of a transaction without making a new request
|
53
|
+
* to the wallet.
|
54
|
+
* @param request - The query to execute
|
55
|
+
* @returns The result of the query
|
56
|
+
*/
|
57
|
+
private executeReceiptQueryFromRequest;
|
42
58
|
private _tryExecuteQueryRequest;
|
43
59
|
call<RequestT, ResponseT, OutputT>(request: Executable<RequestT, ResponseT, OutputT>): Promise<OutputT>;
|
44
60
|
}
|
@@ -19,15 +19,26 @@
|
|
19
19
|
*/
|
20
20
|
import { AccountBalance, AccountId, AccountInfo, LedgerId, SignerSignature, Transaction, TransactionRecord, Client, PublicKey, TransactionId, TransactionResponse, Query, AccountRecordsQuery, AccountInfoQuery, AccountBalanceQuery, TransactionReceiptQuery, TransactionReceipt, TransactionRecordQuery, } from '@hashgraph/sdk';
|
21
21
|
import { proto } from '@hashgraph/proto';
|
22
|
-
import { HederaJsonRpcMethod,
|
22
|
+
import { HederaJsonRpcMethod, base64StringToSignatureMap, base64StringToUint8Array, ledgerIdToCAIPChainId, queryToBase64String, transactionBodyToBase64String, transactionToBase64String, transactionToTransactionBody, extensionOpen, Uint8ArrayToBase64String, Uint8ArrayToString, } from '../shared';
|
23
|
+
import { DefaultLogger } from '../shared/logger';
|
23
24
|
const clients = {};
|
24
25
|
export class DAppSigner {
|
25
|
-
constructor(accountId, signClient, topic, ledgerId = LedgerId.MAINNET, extensionId) {
|
26
|
+
constructor(accountId, signClient, topic, ledgerId = LedgerId.MAINNET, extensionId, logLevel = 'debug') {
|
26
27
|
this.accountId = accountId;
|
27
28
|
this.signClient = signClient;
|
28
29
|
this.topic = topic;
|
29
30
|
this.ledgerId = ledgerId;
|
30
31
|
this.extensionId = extensionId;
|
32
|
+
this.logger = new DefaultLogger(logLevel);
|
33
|
+
}
|
34
|
+
/**
|
35
|
+
* Sets the logging level for the DAppSigner
|
36
|
+
* @param level - The logging level to set
|
37
|
+
*/
|
38
|
+
setLogLevel(level) {
|
39
|
+
if (this.logger instanceof DefaultLogger) {
|
40
|
+
this.logger.setLogLevel(level);
|
41
|
+
}
|
31
42
|
}
|
32
43
|
_getHederaClient() {
|
33
44
|
const ledgerIdString = this.ledgerId.toString();
|
@@ -84,22 +95,34 @@ export class DAppSigner {
|
|
84
95
|
getMetadata() {
|
85
96
|
return this.signClient.metadata;
|
86
97
|
}
|
87
|
-
async sign(data, signOptions
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
98
|
+
async sign(data, signOptions = {
|
99
|
+
encoding: 'utf-8',
|
100
|
+
}) {
|
101
|
+
try {
|
102
|
+
const messageToSign = signOptions.encoding === 'base64'
|
103
|
+
? Uint8ArrayToBase64String(data[0])
|
104
|
+
: Uint8ArrayToString(data[0]);
|
105
|
+
const { signatureMap } = await this.request({
|
106
|
+
method: HederaJsonRpcMethod.SignMessage,
|
107
|
+
params: {
|
108
|
+
signerAccountId: this._signerAccountId,
|
109
|
+
message: messageToSign,
|
110
|
+
},
|
111
|
+
});
|
112
|
+
const sigmap = base64StringToSignatureMap(signatureMap);
|
113
|
+
const signerSignature = new SignerSignature({
|
114
|
+
accountId: this.getAccountId(),
|
115
|
+
publicKey: PublicKey.fromBytes(sigmap.sigPair[0].pubKeyPrefix),
|
116
|
+
signature: sigmap.sigPair[0].ed25519 ||
|
117
|
+
sigmap.sigPair[0].ECDSASecp256k1,
|
118
|
+
});
|
119
|
+
this.logger.debug('Data signed successfully');
|
120
|
+
return [signerSignature];
|
121
|
+
}
|
122
|
+
catch (error) {
|
123
|
+
this.logger.error('Error signing data:', error);
|
124
|
+
throw error;
|
125
|
+
}
|
103
126
|
}
|
104
127
|
async checkTransaction(transaction) {
|
105
128
|
throw new Error('Method not implemented.');
|
@@ -141,7 +164,10 @@ export class DAppSigner {
|
|
141
164
|
}
|
142
165
|
async _tryExecuteTransactionRequest(request) {
|
143
166
|
try {
|
144
|
-
const
|
167
|
+
const requestToBytes = request.toBytes();
|
168
|
+
this.logger.debug('Creating transaction from bytes', requestToBytes, request);
|
169
|
+
const transaction = Transaction.fromBytes(requestToBytes);
|
170
|
+
this.logger.debug('Executing transaction request', transaction);
|
145
171
|
const result = await this.request({
|
146
172
|
method: HederaJsonRpcMethod.SignAndExecuteTransaction,
|
147
173
|
params: {
|
@@ -149,9 +175,11 @@ export class DAppSigner {
|
|
149
175
|
transactionList: transactionToBase64String(transaction),
|
150
176
|
},
|
151
177
|
});
|
178
|
+
this.logger.debug('Transaction request completed successfully');
|
152
179
|
return { result: TransactionResponse.fromJSON(result) };
|
153
180
|
}
|
154
181
|
catch (error) {
|
182
|
+
this.logger.error('Error executing transaction request:', error);
|
155
183
|
return { error };
|
156
184
|
}
|
157
185
|
}
|
@@ -178,9 +206,44 @@ export class DAppSigner {
|
|
178
206
|
throw new Error('Unsupported query type');
|
179
207
|
}
|
180
208
|
}
|
209
|
+
/**
|
210
|
+
* Executes a free receipt query without signing a transaction.
|
211
|
+
* Enables the DApp to fetch the receipt of a transaction without making a new request
|
212
|
+
* to the wallet.
|
213
|
+
* @param request - The query to execute
|
214
|
+
* @returns The result of the query
|
215
|
+
*/
|
216
|
+
async executeReceiptQueryFromRequest(request) {
|
217
|
+
try {
|
218
|
+
const isMainnet = this.ledgerId === LedgerId.MAINNET;
|
219
|
+
const client = isMainnet ? Client.forMainnet() : Client.forTestnet();
|
220
|
+
const receipt = TransactionReceiptQuery.fromBytes(request.toBytes());
|
221
|
+
const result = await receipt.execute(client);
|
222
|
+
return { result };
|
223
|
+
}
|
224
|
+
catch (error) {
|
225
|
+
return { error };
|
226
|
+
}
|
227
|
+
}
|
181
228
|
async _tryExecuteQueryRequest(request) {
|
182
229
|
try {
|
183
|
-
const
|
230
|
+
const isReceiptQuery = request instanceof TransactionReceiptQuery;
|
231
|
+
if (isReceiptQuery) {
|
232
|
+
this.logger.debug('Attempting to execute free receipt query', request);
|
233
|
+
const result = await this.executeReceiptQueryFromRequest(request);
|
234
|
+
if (!(result === null || result === void 0 ? void 0 : result.error)) {
|
235
|
+
return { result: result.result };
|
236
|
+
}
|
237
|
+
this.logger.error('Error executing free receipt query. Sending to wallet.', result.error);
|
238
|
+
}
|
239
|
+
/**
|
240
|
+
* Note, should we be converting these to specific query types?
|
241
|
+
* Left alone to avoid changing the API for other requests.
|
242
|
+
*/
|
243
|
+
const query = isReceiptQuery
|
244
|
+
? TransactionReceiptQuery.fromBytes(request.toBytes())
|
245
|
+
: Query.fromBytes(request.toBytes());
|
246
|
+
this.logger.debug('Executing query request', query, queryToBase64String(query), isReceiptQuery);
|
184
247
|
const result = await this.request({
|
185
248
|
method: HederaJsonRpcMethod.SignAndExecuteQuery,
|
186
249
|
params: {
|
@@ -188,6 +251,7 @@ export class DAppSigner {
|
|
188
251
|
query: queryToBase64String(query),
|
189
252
|
},
|
190
253
|
});
|
254
|
+
this.logger.debug('Query request completed successfully', result);
|
191
255
|
return { result: this._parseQueryResponse(query, result.response) };
|
192
256
|
}
|
193
257
|
catch (error) {
|
@@ -195,27 +259,42 @@ export class DAppSigner {
|
|
195
259
|
}
|
196
260
|
}
|
197
261
|
async call(request) {
|
198
|
-
var _a, _b, _c, _d, _e, _f;
|
199
|
-
const
|
200
|
-
|
201
|
-
|
262
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
263
|
+
const isReceiptQuery = request instanceof TransactionReceiptQuery;
|
264
|
+
let txResult = undefined;
|
265
|
+
// a receipt query is a free query and we should not execute a transaction.
|
266
|
+
if (!isReceiptQuery) {
|
267
|
+
txResult = await this._tryExecuteTransactionRequest(request);
|
268
|
+
if (txResult.result) {
|
269
|
+
return txResult.result;
|
270
|
+
}
|
202
271
|
}
|
203
272
|
const queryResult = await this._tryExecuteQueryRequest(request);
|
204
273
|
if (queryResult.result) {
|
205
274
|
return queryResult.result;
|
206
275
|
}
|
207
276
|
// TODO: make this error more usable
|
277
|
+
if (isReceiptQuery) {
|
278
|
+
throw new Error('Error executing receipt query: \n' +
|
279
|
+
JSON.stringify({
|
280
|
+
queryError: {
|
281
|
+
name: (_a = queryResult.error) === null || _a === void 0 ? void 0 : _a.name,
|
282
|
+
message: (_b = queryResult.error) === null || _b === void 0 ? void 0 : _b.message,
|
283
|
+
stack: (_c = queryResult.error) === null || _c === void 0 ? void 0 : _c.stack,
|
284
|
+
},
|
285
|
+
}));
|
286
|
+
}
|
208
287
|
throw new Error('Error executing transaction or query: \n' +
|
209
288
|
JSON.stringify({
|
210
289
|
txError: {
|
211
|
-
name: (
|
212
|
-
message: (
|
213
|
-
stack: (
|
290
|
+
name: (_d = txResult === null || txResult === void 0 ? void 0 : txResult.error) === null || _d === void 0 ? void 0 : _d.name,
|
291
|
+
message: (_e = txResult === null || txResult === void 0 ? void 0 : txResult.error) === null || _e === void 0 ? void 0 : _e.message,
|
292
|
+
stack: (_f = txResult === null || txResult === void 0 ? void 0 : txResult.error) === null || _f === void 0 ? void 0 : _f.stack,
|
214
293
|
},
|
215
294
|
queryError: {
|
216
|
-
name: (
|
217
|
-
message: (
|
218
|
-
stack: (
|
295
|
+
name: (_g = queryResult.error) === null || _g === void 0 ? void 0 : _g.name,
|
296
|
+
message: (_h = queryResult.error) === null || _h === void 0 ? void 0 : _h.message,
|
297
|
+
stack: (_j = queryResult.error) === null || _j === void 0 ? void 0 : _j.stack,
|
219
298
|
},
|
220
299
|
}, null, 2));
|
221
300
|
}
|
@@ -211,5 +211,9 @@ export declare class DAppConnector {
|
|
211
211
|
* ```
|
212
212
|
*/
|
213
213
|
signTransaction(params: SignTransactionParams): Promise<SignTransactionResult>;
|
214
|
+
private handleSessionEvent;
|
215
|
+
private handleSessionUpdate;
|
216
|
+
private handleSessionDelete;
|
217
|
+
private handlePairingDelete;
|
214
218
|
}
|
215
219
|
export default DAppConnector;
|
@@ -110,45 +110,10 @@ export class DAppConnector {
|
|
110
110
|
this.signers = existingSessions.flatMap((session) => this.createSigners(session));
|
111
111
|
else
|
112
112
|
this.checkIframeConnect();
|
113
|
-
this.walletConnectClient.on('session_event', (
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
});
|
118
|
-
this.walletConnectClient.on('session_update', ({ topic, params }) => {
|
119
|
-
// Handle session update
|
120
|
-
const { namespaces } = params;
|
121
|
-
const _session = this.walletConnectClient.session.get(topic);
|
122
|
-
// Overwrite the `namespaces` of the existing session with the incoming one.
|
123
|
-
const updatedSession = Object.assign(Object.assign({}, _session), { namespaces });
|
124
|
-
// Integrate the updated session state into your dapp state.
|
125
|
-
this.logger.info('Session updated:', updatedSession);
|
126
|
-
this.signers = this.signers.filter((signer) => signer.topic !== topic);
|
127
|
-
this.signers.push(...this.createSigners(updatedSession));
|
128
|
-
});
|
129
|
-
this.walletConnectClient.on('session_delete', (pairing) => {
|
130
|
-
this.logger.info('Session deleted:', pairing);
|
131
|
-
this.signers = this.signers.filter((signer) => signer.topic !== pairing.topic);
|
132
|
-
// Session was deleted -> reset the dapp state, clean up from user session, etc.
|
133
|
-
try {
|
134
|
-
this.disconnect(pairing.topic);
|
135
|
-
}
|
136
|
-
catch (e) {
|
137
|
-
this.logger.error('Error disconnecting session:', e);
|
138
|
-
}
|
139
|
-
this.logger.info('Session deleted by wallet');
|
140
|
-
});
|
141
|
-
this.walletConnectClient.core.pairing.events.on('pairing_delete', (pairing) => {
|
142
|
-
this.logger.info('Pairing deleted:', pairing);
|
143
|
-
this.signers = this.signers.filter((signer) => signer.topic !== pairing.topic);
|
144
|
-
try {
|
145
|
-
this.disconnect(pairing.topic);
|
146
|
-
}
|
147
|
-
catch (e) {
|
148
|
-
this.logger.error('Error disconnecting pairing:', e);
|
149
|
-
}
|
150
|
-
this.logger.info('Pairing deleted by wallet');
|
151
|
-
});
|
113
|
+
this.walletConnectClient.on('session_event', this.handleSessionEvent.bind(this));
|
114
|
+
this.walletConnectClient.on('session_update', this.handleSessionUpdate.bind(this));
|
115
|
+
this.walletConnectClient.on('session_delete', this.handleSessionDelete.bind(this));
|
116
|
+
this.walletConnectClient.core.pairing.events.on('pairing_delete', this.handlePairingDelete.bind(this));
|
152
117
|
}
|
153
118
|
catch (e) {
|
154
119
|
this.logger.error('Error initializing DAppConnector:', e);
|
@@ -344,7 +309,7 @@ export class DAppConnector {
|
|
344
309
|
const allNamespaceAccounts = accountAndLedgerFromSession(session);
|
345
310
|
return allNamespaceAccounts.map(({ account, network }) => {
|
346
311
|
var _a;
|
347
|
-
return new DAppSigner(account, this.walletConnectClient, session.topic, network, (_a = session.sessionProperties) === null || _a === void 0 ? void 0 : _a.extensionId);
|
312
|
+
return new DAppSigner(account, this.walletConnectClient, session.topic, network, (_a = session.sessionProperties) === null || _a === void 0 ? void 0 : _a.extensionId, this.logger instanceof DefaultLogger ? this.logger.getLogLevel() : 'debug');
|
348
313
|
});
|
349
314
|
}
|
350
315
|
async onSessionConnected(session) {
|
@@ -542,5 +507,39 @@ export class DAppConnector {
|
|
542
507
|
params,
|
543
508
|
});
|
544
509
|
}
|
510
|
+
handleSessionEvent(args) {
|
511
|
+
this.logger.debug('Session event received:', args);
|
512
|
+
this.validateAndRefreshSigners();
|
513
|
+
}
|
514
|
+
handleSessionUpdate({ topic, params, }) {
|
515
|
+
const { namespaces } = params;
|
516
|
+
const _session = this.walletConnectClient.session.get(topic);
|
517
|
+
const updatedSession = Object.assign(Object.assign({}, _session), { namespaces });
|
518
|
+
this.logger.info('Session updated:', updatedSession);
|
519
|
+
this.signers = this.signers.filter((signer) => signer.topic !== topic);
|
520
|
+
this.signers.push(...this.createSigners(updatedSession));
|
521
|
+
}
|
522
|
+
handleSessionDelete(event) {
|
523
|
+
this.logger.info('Session deleted:', event);
|
524
|
+
this.signers = this.signers.filter((signer) => signer.topic !== event.topic);
|
525
|
+
try {
|
526
|
+
this.disconnect(event.topic);
|
527
|
+
}
|
528
|
+
catch (e) {
|
529
|
+
this.logger.error('Error disconnecting session:', e);
|
530
|
+
}
|
531
|
+
this.logger.info('Session deleted by wallet');
|
532
|
+
}
|
533
|
+
handlePairingDelete(event) {
|
534
|
+
this.logger.info('Pairing deleted:', event);
|
535
|
+
this.signers = this.signers.filter((signer) => signer.topic !== event.topic);
|
536
|
+
try {
|
537
|
+
this.disconnect(event.topic);
|
538
|
+
}
|
539
|
+
catch (e) {
|
540
|
+
this.logger.error('Error disconnecting pairing:', e);
|
541
|
+
}
|
542
|
+
this.logger.info('Pairing deleted by wallet');
|
543
|
+
}
|
545
544
|
}
|
546
545
|
export default DAppConnector;
|
@@ -8,6 +8,7 @@ export declare class DefaultLogger implements ILogger {
|
|
8
8
|
private logLevel;
|
9
9
|
constructor(logLevel?: 'error' | 'warn' | 'info' | 'debug');
|
10
10
|
setLogLevel(level: 'error' | 'warn' | 'info' | 'debug'): void;
|
11
|
+
getLogLevel(): 'error' | 'warn' | 'info' | 'debug';
|
11
12
|
error(message: string, ...args: any[]): void;
|
12
13
|
warn(message: string, ...args: any[]): void;
|
13
14
|
info(message: string, ...args: any[]): void;
|
@@ -6,6 +6,9 @@ export class DefaultLogger {
|
|
6
6
|
setLogLevel(level) {
|
7
7
|
this.logLevel = level;
|
8
8
|
}
|
9
|
+
getLogLevel() {
|
10
|
+
return this.logLevel;
|
11
|
+
}
|
9
12
|
error(message, ...args) {
|
10
13
|
if (['error', 'warn', 'info', 'debug'].includes(this.logLevel)) {
|
11
14
|
console.error(`[ERROR] ${message}`, ...args);
|
@@ -49,8 +49,8 @@ export declare function base64StringToTransaction<T extends Transaction>(transac
|
|
49
49
|
* @param transaction - a base64 encoded string of proto.TransactionBody.encode().finish()
|
50
50
|
* @returns `string`
|
51
51
|
* */
|
52
|
-
export declare function transactionToTransactionBody<T extends Transaction>(transaction: T, nodeAccountId: AccountId):
|
53
|
-
export declare function transactionBodyToBase64String(transactionBody:
|
52
|
+
export declare function transactionToTransactionBody<T extends Transaction>(transaction: T, nodeAccountId: AccountId): any;
|
53
|
+
export declare function transactionBodyToBase64String(transactionBody: proto.ITransactionBody): string;
|
54
54
|
/**
|
55
55
|
* @param transactionList - a proto.TransactionList object
|
56
56
|
* @returns `string`
|
@@ -85,6 +85,12 @@ export declare function base64StringToSignatureMap(base64string: string): proto.
|
|
85
85
|
* @returns Base64-encoded string representation of the input `Uint8Array`
|
86
86
|
*/
|
87
87
|
export declare function Uint8ArrayToBase64String(binary: Uint8Array): string;
|
88
|
+
/**
|
89
|
+
* Encodes the binary data represented by the `Uint8Array` to a UTF-8 string.
|
90
|
+
* @param binary - The `Uint8Array` containing binary data to be converted
|
91
|
+
* @returns UTF-8 string representation of the input `Uint8Array`
|
92
|
+
*/
|
93
|
+
export declare function Uint8ArrayToString(binary: Uint8Array): string;
|
88
94
|
/**
|
89
95
|
* Converts a Base64-encoded string to a `Uint8Array`.
|
90
96
|
* @param base64string - Base64-encoded string to be converted
|
@@ -86,10 +86,10 @@ export function base64StringToTransaction(transactionBytes) {
|
|
86
86
|
export function transactionToTransactionBody(transaction, nodeAccountId) {
|
87
87
|
// This is a private function, though provides the capabilities to construct a proto.TransactionBody
|
88
88
|
//@ts-ignore
|
89
|
-
return transaction.
|
89
|
+
return transaction._makeTransactionBody(nodeAccountId);
|
90
90
|
}
|
91
91
|
export function transactionBodyToBase64String(transactionBody) {
|
92
|
-
return Uint8ArrayToBase64String(transactionBody);
|
92
|
+
return Uint8ArrayToBase64String(proto.TransactionBody.encode(transactionBody).finish());
|
93
93
|
}
|
94
94
|
/**
|
95
95
|
* @param transactionList - a proto.TransactionList object
|
@@ -139,6 +139,14 @@ export function base64StringToSignatureMap(base64string) {
|
|
139
139
|
export function Uint8ArrayToBase64String(binary) {
|
140
140
|
return Buffer.from(binary).toString('base64');
|
141
141
|
}
|
142
|
+
/**
|
143
|
+
* Encodes the binary data represented by the `Uint8Array` to a UTF-8 string.
|
144
|
+
* @param binary - The `Uint8Array` containing binary data to be converted
|
145
|
+
* @returns UTF-8 string representation of the input `Uint8Array`
|
146
|
+
*/
|
147
|
+
export function Uint8ArrayToString(binary) {
|
148
|
+
return Buffer.from(binary).toString('utf-8');
|
149
|
+
}
|
142
150
|
/**
|
143
151
|
* Converts a Base64-encoded string to a `Uint8Array`.
|
144
152
|
* @param base64string - Base64-encoded string to be converted
|
package/package.json
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
{
|
2
2
|
"name": "@hashgraph/hedera-wallet-connect",
|
3
|
-
"version": "1.3.
|
3
|
+
"version": "1.3.8-canary.09d9623.0",
|
4
4
|
"description": "A library to facilitate integrating Hedera with WalletConnect",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
7
7
|
"url": "git+https://github.com/hashgraph/hedera-wallet-connect.git"
|
8
8
|
},
|
9
|
-
"main": "./dist/
|
10
|
-
"types": "./dist/
|
9
|
+
"main": "./dist/index.js",
|
10
|
+
"types": "./dist/index.d.ts",
|
11
11
|
"author": "Hgraph <support@hgraph.io>",
|
12
12
|
"keywords": [
|
13
13
|
"hedera",
|
@@ -55,6 +55,7 @@
|
|
55
55
|
"dev:ts-demo": "rimraf dist && npm run build && concurrently --raw \"npm run watch\" \"node scripts/demos/typescript/dev.mjs\"",
|
56
56
|
"dev:react-demo": "rimraf dist && npm run build && concurrently --raw \"npm run watch\" \"node scripts/demos/react/dev.mjs\"",
|
57
57
|
"test": "jest",
|
58
|
+
"test:watch": "jest --watch",
|
58
59
|
"test:connect": "jest --testMatch '**/DAppConnector.test.ts' --verbose",
|
59
60
|
"test:signer": "jest --testMatch '**/DAppSigner.test.ts' --verbose",
|
60
61
|
"prepublishOnly": "rm -Rf dist && npm run build",
|
package/dist/test/_helpers.d.ts
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
import { AccountId, Query, Transaction, TransactionId } from '@hashgraph/sdk';
|
2
|
-
export declare const projectId = "ce06497abf4102004138a10edd29c921";
|
3
|
-
export declare const walletMetadata: {
|
4
|
-
name: string;
|
5
|
-
url: string;
|
6
|
-
description: string;
|
7
|
-
icons: string[];
|
8
|
-
};
|
9
|
-
export declare const dAppMetadata: {
|
10
|
-
name: string;
|
11
|
-
url: string;
|
12
|
-
description: string;
|
13
|
-
icons: string[];
|
14
|
-
};
|
15
|
-
export declare const requestId = 1;
|
16
|
-
export declare const requestTopic = "test-topic";
|
17
|
-
export declare const defaultAccountNumber = 12345;
|
18
|
-
export declare const defaultNodeId = 3;
|
19
|
-
export declare const testUserAccountId: AccountId;
|
20
|
-
export declare const testNodeAccountId: AccountId;
|
21
|
-
/** Fixed to a specific timestamp */
|
22
|
-
export declare const testTransactionId: TransactionId;
|
23
|
-
type TransactionOptions = {
|
24
|
-
setNodeAccountIds?: boolean;
|
25
|
-
setTransactionId?: boolean;
|
26
|
-
freeze?: boolean;
|
27
|
-
operatorAccountId?: number;
|
28
|
-
};
|
29
|
-
export declare function prepareTestTransaction<T extends Transaction = Transaction>(transaction: T, options?: TransactionOptions): T;
|
30
|
-
type QueryOptions = {
|
31
|
-
setNodeAccountIds?: boolean;
|
32
|
-
};
|
33
|
-
export declare function prepareTestQuery<Q extends Query<OutputT>, OutputT>(query: Q, options?: QueryOptions): Q;
|
34
|
-
export declare const testPrivateKeyECDSA = "3030020100300706052b8104000a042204203ce31ffad30d6db47c315bbea08232aad2266d8800a12aa3d8a812486e782759";
|
35
|
-
export declare const testPrivateKeyED25519 = "302e020100300506032b657004220420133eefea772add1f995c96bccf42b08b76daf67665f0c4c5ae308fae9275c142";
|
36
|
-
export declare function useJsonFixture(filename: string): any;
|
37
|
-
export declare function writeJsonFixture(filename: string, data: any): void;
|
38
|
-
export {};
|
package/dist/test/_helpers.js
DELETED
@@ -1,95 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Hedera Wallet Connect
|
4
|
-
*
|
5
|
-
* Copyright (C) 2023 Hedera Hashgraph, LLC
|
6
|
-
*
|
7
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
-
* you may not use this file except in compliance with the License.
|
9
|
-
* You may obtain a copy of the License at
|
10
|
-
*
|
11
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
12
|
-
*
|
13
|
-
* Unless required by applicable law or agreed to in writing, software
|
14
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
-
* See the License for the specific language governing permissions and
|
17
|
-
* limitations under the License.
|
18
|
-
*
|
19
|
-
*/
|
20
|
-
import fs from 'fs';
|
21
|
-
import path from 'path';
|
22
|
-
import { AccountId, TransactionId } from '@hashgraph/sdk';
|
23
|
-
export const projectId = 'ce06497abf4102004138a10edd29c921';
|
24
|
-
export const walletMetadata = {
|
25
|
-
name: 'Wallet Test',
|
26
|
-
url: 'https://dapp.hedera.app',
|
27
|
-
description: 'Hedera Hashgraph Wallet Example.',
|
28
|
-
icons: [
|
29
|
-
'https://cdn-assets-cloud.frontify.com/s3/frontify-cloud-files-us/eyJwYXRoIjoiZnJvbnRpZnlcL2FjY291bnRzXC8xNFwvMTQzMTI3XC9wcm9qZWN0c1wvMTgwMjE1XC9hc3NldHNcL2M3XC8zNDU0ODY3XC85ZjM1NDliYmE5MGQ2NDA0OGU0NzlhZTNiMzkyYzY4Yy0xNTY2NTkxOTQ4LmpwZyJ9:frontify:v_zJvQTCjtNploUvnSpk8S5NJB4R5eei6f7ERL2KSeQ?width=800',
|
30
|
-
],
|
31
|
-
};
|
32
|
-
export const dAppMetadata = {
|
33
|
-
name: 'dApp Test',
|
34
|
-
url: 'https://dapp.hedera.app',
|
35
|
-
description: 'Hedera Hashgraph dApp Example.',
|
36
|
-
icons: [
|
37
|
-
'https://cdn-assets-cloud.frontify.com/s3/frontify-cloud-files-us/eyJwYXRoIjoiZnJvbnRpZnlcL2FjY291bnRzXC8xNFwvMTQzMTI3XC9wcm9qZWN0c1wvMTgwMjE1XC9hc3NldHNcL2M3XC8zNDU0ODY3XC85ZjM1NDliYmE5MGQ2NDA0OGU0NzlhZTNiMzkyYzY4Yy0xNTY2NTkxOTQ4LmpwZyJ9:frontify:v_zJvQTCjtNploUvnSpk8S5NJB4R5eei6f7ERL2KSeQ?width=800',
|
38
|
-
],
|
39
|
-
};
|
40
|
-
export const requestId = 1;
|
41
|
-
export const requestTopic = 'test-topic';
|
42
|
-
export const defaultAccountNumber = 12345;
|
43
|
-
export const defaultNodeId = 3;
|
44
|
-
export const testUserAccountId = new AccountId(defaultAccountNumber);
|
45
|
-
export const testNodeAccountId = new AccountId(defaultNodeId);
|
46
|
-
/** Fixed to a specific timestamp */
|
47
|
-
export const testTransactionId = TransactionId.fromString(`0.0.${defaultAccountNumber}@1691705630.325343432`);
|
48
|
-
export function prepareTestTransaction(transaction, options) {
|
49
|
-
const selectedOptions = Object.assign({
|
50
|
-
// defaults
|
51
|
-
freeze: false, setNodeAccountIds: true, setTransactionId: true, operatorAccountId: defaultAccountNumber }, options);
|
52
|
-
if (selectedOptions.setNodeAccountIds) {
|
53
|
-
transaction.setNodeAccountIds([testNodeAccountId]);
|
54
|
-
}
|
55
|
-
if (selectedOptions.setTransactionId) {
|
56
|
-
let transactionId = testTransactionId;
|
57
|
-
if (selectedOptions.operatorAccountId &&
|
58
|
-
selectedOptions.operatorAccountId !== defaultAccountNumber) {
|
59
|
-
transactionId = TransactionId.generate(new AccountId(selectedOptions.operatorAccountId));
|
60
|
-
}
|
61
|
-
transaction.setTransactionId(transactionId);
|
62
|
-
}
|
63
|
-
if (selectedOptions.freeze) {
|
64
|
-
transaction.freeze();
|
65
|
-
}
|
66
|
-
return transaction;
|
67
|
-
}
|
68
|
-
export function prepareTestQuery(query, options) {
|
69
|
-
const selectedOptions = Object.assign({
|
70
|
-
// defaults
|
71
|
-
setNodeAccountIds: true }, options);
|
72
|
-
if (selectedOptions.setNodeAccountIds) {
|
73
|
-
query.setNodeAccountIds([testNodeAccountId]);
|
74
|
-
}
|
75
|
-
return query;
|
76
|
-
}
|
77
|
-
// from PrivateKey.generateECDSA().toStringDer()
|
78
|
-
export const testPrivateKeyECDSA = '3030020100300706052b8104000a042204203ce31ffad30d6db47c315bbea08232aad2266d8800a12aa3d8a812486e782759';
|
79
|
-
// from PrivateKey.generateED25519().toStringDer()
|
80
|
-
export const testPrivateKeyED25519 = '302e020100300506032b657004220420133eefea772add1f995c96bccf42b08b76daf67665f0c4c5ae308fae9275c142';
|
81
|
-
/** JSON fixture helpers */
|
82
|
-
const FIXTURES_PATH = 'test/_fixtures';
|
83
|
-
const filenameWithJsonExtension = (filename) => {
|
84
|
-
const file = /\.json$/.test(filename) ? filename : filename + '.json';
|
85
|
-
return path.join(FIXTURES_PATH, file);
|
86
|
-
};
|
87
|
-
export function useJsonFixture(filename) {
|
88
|
-
const filepath = filenameWithJsonExtension(filename);
|
89
|
-
const data = fs.readFileSync(filepath).toString();
|
90
|
-
return JSON.parse(data);
|
91
|
-
}
|
92
|
-
export function writeJsonFixture(filename, data) {
|
93
|
-
const filepath = filenameWithJsonExtension(filename);
|
94
|
-
fs.writeFileSync(filepath, JSON.stringify(data, null, 2));
|
95
|
-
}
|
@@ -1 +0,0 @@
|
|
1
|
-
export {};
|