@hashgraph/hedera-wallet-connect 1.3.7-canary.de9fb58.0 → 1.3.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. package/dist/{src/lib → lib}/dapp/DAppSigner.d.ts +18 -2
  2. package/dist/{src/lib → lib}/dapp/DAppSigner.js +109 -30
  3. package/dist/{src/lib → lib}/dapp/index.d.ts +4 -0
  4. package/dist/{src/lib → lib}/dapp/index.js +39 -40
  5. package/dist/{src/lib → lib}/shared/logger.d.ts +1 -0
  6. package/dist/{src/lib → lib}/shared/logger.js +3 -0
  7. package/dist/{src/lib → lib}/shared/utils.d.ts +8 -2
  8. package/dist/{src/lib → lib}/shared/utils.js +10 -2
  9. package/package.json +4 -3
  10. package/dist/test/_helpers.d.ts +0 -38
  11. package/dist/test/_helpers.js +0 -95
  12. package/dist/test/dapp/DAppConnector.test.d.ts +0 -1
  13. package/dist/test/dapp/DAppConnector.test.js +0 -232
  14. package/dist/test/dapp/DAppSigner.test.d.ts +0 -1
  15. package/dist/test/dapp/DAppSigner.test.js +0 -625
  16. package/dist/test/shared/logger.test.d.ts +0 -1
  17. package/dist/test/shared/logger.test.js +0 -129
  18. package/dist/test/utils.test.d.ts +0 -1
  19. package/dist/test/utils.test.js +0 -201
  20. package/dist/test/wallet/methods/wallet-executeTransaction.test.d.ts +0 -1
  21. package/dist/test/wallet/methods/wallet-executeTransaction.test.js +0 -43
  22. package/dist/test/wallet/methods/wallet-getNodeAddresses.test.d.ts +0 -1
  23. package/dist/test/wallet/methods/wallet-getNodeAddresses.test.js +0 -40
  24. package/dist/test/wallet/methods/wallet-signAndExecuteQuery.test.d.ts +0 -1
  25. package/dist/test/wallet/methods/wallet-signAndExecuteQuery.test.js +0 -41
  26. package/dist/test/wallet/methods/wallet-signAndExecuteTransaction.test.d.ts +0 -1
  27. package/dist/test/wallet/methods/wallet-signAndExecuteTransaction.test.js +0 -48
  28. package/dist/test/wallet/methods/wallet-signMessage.test.d.ts +0 -1
  29. package/dist/test/wallet/methods/wallet-signMessage.test.js +0 -60
  30. package/dist/test/wallet/methods/wallet-signTransaction.test.d.ts +0 -1
  31. package/dist/test/wallet/methods/wallet-signTransaction.test.js +0 -47
  32. package/dist/test/wallet/wallet-init.test.d.ts +0 -1
  33. package/dist/test/wallet/wallet-init.test.js +0 -53
  34. /package/dist/{src/index.d.ts → index.d.ts} +0 -0
  35. /package/dist/{src/index.js → index.js} +0 -0
  36. /package/dist/{src/lib → lib}/index.d.ts +0 -0
  37. /package/dist/{src/lib → lib}/index.js +0 -0
  38. /package/dist/{src/lib → lib}/shared/chainIds.d.ts +0 -0
  39. /package/dist/{src/lib → lib}/shared/chainIds.js +0 -0
  40. /package/dist/{src/lib → lib}/shared/errors.d.ts +0 -0
  41. /package/dist/{src/lib → lib}/shared/errors.js +0 -0
  42. /package/dist/{src/lib → lib}/shared/events.d.ts +0 -0
  43. /package/dist/{src/lib → lib}/shared/events.js +0 -0
  44. /package/dist/{src/lib → lib}/shared/extensionController.d.ts +0 -0
  45. /package/dist/{src/lib → lib}/shared/extensionController.js +0 -0
  46. /package/dist/{src/lib → lib}/shared/index.d.ts +0 -0
  47. /package/dist/{src/lib → lib}/shared/index.js +0 -0
  48. /package/dist/{src/lib → lib}/shared/methods.d.ts +0 -0
  49. /package/dist/{src/lib → lib}/shared/methods.js +0 -0
  50. /package/dist/{src/lib → lib}/shared/payloads.d.ts +0 -0
  51. /package/dist/{src/lib → lib}/shared/payloads.js +0 -0
  52. /package/dist/{src/lib → lib}/wallet/index.d.ts +0 -0
  53. /package/dist/{src/lib → lib}/wallet/index.js +0 -0
  54. /package/dist/{src/lib → lib}/wallet/provider.d.ts +0 -0
  55. /package/dist/{src/lib → lib}/wallet/provider.js +0 -0
  56. /package/dist/{src/lib → lib}/wallet/types.d.ts +0 -0
  57. /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
- constructor(accountId: AccountId, signClient: ISignClient, topic: string, ledgerId?: LedgerId, extensionId?: string | undefined);
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?: Record<string, any>): Promise<SignerSignature[]>;
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, Uint8ArrayToBase64String, base64StringToSignatureMap, base64StringToUint8Array, ledgerIdToCAIPChainId, queryToBase64String, transactionBodyToBase64String, transactionToBase64String, transactionToTransactionBody, extensionOpen, } from '../shared';
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
- const { signatureMap } = await this.request({
89
- method: HederaJsonRpcMethod.SignMessage,
90
- params: {
91
- signerAccountId: this._signerAccountId,
92
- message: Uint8ArrayToBase64String(data[0]),
93
- },
94
- });
95
- const sigmap = base64StringToSignatureMap(signatureMap);
96
- const signerSignature = new SignerSignature({
97
- accountId: this.getAccountId(),
98
- publicKey: PublicKey.fromBytes(sigmap.sigPair[0].pubKeyPrefix),
99
- signature: sigmap.sigPair[0].ed25519 ||
100
- sigmap.sigPair[0].ECDSASecp256k1,
101
- });
102
- return [signerSignature];
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 transaction = Transaction.fromBytes(request.toBytes());
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 query = Query.fromBytes(request.toBytes());
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 txResult = await this._tryExecuteTransactionRequest(request);
200
- if (txResult.result) {
201
- return txResult.result;
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: (_a = txResult.error) === null || _a === void 0 ? void 0 : _a.name,
212
- message: (_b = txResult.error) === null || _b === void 0 ? void 0 : _b.message,
213
- stack: (_c = txResult.error) === null || _c === void 0 ? void 0 : _c.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: (_d = queryResult.error) === null || _d === void 0 ? void 0 : _d.name,
217
- message: (_e = queryResult.error) === null || _e === void 0 ? void 0 : _e.message,
218
- stack: (_f = queryResult.error) === null || _f === void 0 ? void 0 : _f.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', (event) => {
114
- // Handle session events, such as "chainChanged", "accountsChanged", etc.
115
- this.logger.debug('Session event received:', event);
116
- this.validateAndRefreshSigners();
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): Uint8Array | null | undefined;
53
- export declare function transactionBodyToBase64String(transactionBody: Uint8Array): string;
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._signedTransactions.current.bodyBytes;
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.7-canary.de9fb58.0",
3
+ "version": "1.3.7",
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/src/index.js",
10
- "types": "./dist/src/index.d.ts",
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",
@@ -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 {};
@@ -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 {};