@firmachain/firma-js 0.3.7 → 0.4.0-beta1

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 (128) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.js +1 -0
  3. package/dist/sdk/FirmaAuthzService.js +20 -15
  4. package/dist/sdk/FirmaBankService.d.ts +1 -1
  5. package/dist/sdk/FirmaBankService.js +5 -4
  6. package/dist/sdk/FirmaConfig.js +4 -4
  7. package/dist/sdk/FirmaContractService.js +10 -8
  8. package/dist/sdk/FirmaDistributionService.js +37 -22
  9. package/dist/sdk/FirmaFeeGrantService.d.ts +0 -1
  10. package/dist/sdk/FirmaFeeGrantService.js +12 -14
  11. package/dist/sdk/FirmaGovService.d.ts +14 -0
  12. package/dist/sdk/FirmaGovService.js +74 -47
  13. package/dist/sdk/FirmaIbcService.js +4 -3
  14. package/dist/sdk/FirmaNftService.d.ts +3 -3
  15. package/dist/sdk/FirmaNftService.js +13 -10
  16. package/dist/sdk/FirmaStakingService.js +12 -9
  17. package/dist/sdk/FirmaTokenService.js +17 -14
  18. package/dist/sdk/FirmaUtil.js +1 -1
  19. package/dist/sdk/FirmaWalletService.d.ts +1 -1
  20. package/dist/sdk/FirmaWalletService.js +11 -23
  21. package/dist/sdk/firmachain/authz/AuthzTxClient.js +2 -0
  22. package/dist/sdk/firmachain/bank/BankTxClient.js +1 -1
  23. package/dist/sdk/firmachain/common/CommonTxClient.js +3 -1
  24. package/dist/sdk/firmachain/common/FirmaLedger.d.ts +49 -0
  25. package/dist/sdk/firmachain/common/FirmaLedger.js +301 -0
  26. package/dist/sdk/firmachain/common/ITxClient.d.ts +1 -1
  27. package/dist/sdk/firmachain/common/ITxClient.js +6 -4
  28. package/dist/sdk/firmachain/common/LedgerWallet.d.ts +5 -13
  29. package/dist/sdk/firmachain/common/LedgerWallet.js +1266 -124
  30. package/dist/sdk/firmachain/common/SigningProtobufStargateClient.js +3 -4
  31. package/dist/sdk/firmachain/common/SigningStargateClient.d.ts +2 -3
  32. package/dist/sdk/firmachain/common/SigningStargateClient.js +7 -10
  33. package/dist/sdk/firmachain/common/index.d.ts +1 -0
  34. package/dist/sdk/firmachain/common/index.js +1 -0
  35. package/dist/sdk/firmachain/common/signing.d.ts +4 -10
  36. package/dist/sdk/firmachain/common/signing.js +13 -60
  37. package/dist/sdk/firmachain/contract/ContractTxClient.js +1 -1
  38. package/dist/sdk/firmachain/contract/ContractTxTypes.js +54 -8
  39. package/dist/sdk/firmachain/distribution/DistributionTxClient.js +1 -1
  40. package/dist/sdk/firmachain/feegrant/FeeGrantTxClient.js +3 -1
  41. package/dist/sdk/firmachain/feegrant/FeeGrantTxTypes.d.ts +1 -2
  42. package/dist/sdk/firmachain/google/protobuf/any.js +0 -12
  43. package/dist/sdk/firmachain/gov/GovTxClient.js +3 -0
  44. package/dist/sdk/firmachain/nft/NftTxClient.js +1 -1
  45. package/dist/sdk/firmachain/token/TokenTxClient.js +1 -1
  46. package/package.json +16 -8
  47. package/dist/test/00.wallet.test.d.ts +0 -1
  48. package/dist/test/00.wallet.test.js +0 -96
  49. package/dist/test/01.contract_tx.test.d.ts +0 -1
  50. package/dist/test/01.contract_tx.test.js +0 -157
  51. package/dist/test/02.contract_query.test.d.ts +0 -1
  52. package/dist/test/02.contract_query.test.js +0 -245
  53. package/dist/test/03.contract_scenario.test.d.ts +0 -1
  54. package/dist/test/03.contract_scenario.test.js +0 -406
  55. package/dist/test/04.bank_tx.test.d.ts +0 -1
  56. package/dist/test/04.bank_tx.test.js +0 -126
  57. package/dist/test/05.bank_query.test.d.ts +0 -1
  58. package/dist/test/05.bank_query.test.js +0 -162
  59. package/dist/test/06.feegrant_tx.test.d.ts +0 -1
  60. package/dist/test/06.feegrant_tx.test.js +0 -185
  61. package/dist/test/07.feegrant_query.test.d.ts +0 -1
  62. package/dist/test/07.feegrant_query.test.js +0 -129
  63. package/dist/test/08.gas_estimate.test.d.ts +0 -1
  64. package/dist/test/08.gas_estimate.test.js +0 -728
  65. package/dist/test/09.ipfs.test.d.ts +0 -1
  66. package/dist/test/09.ipfs.test.js +0 -72
  67. package/dist/test/10.nft_tx.test.d.ts +0 -1
  68. package/dist/test/10.nft_tx.test.js +0 -209
  69. package/dist/test/11.nft_query.test.d.ts +0 -1
  70. package/dist/test/11.nft_query.test.js +0 -165
  71. package/dist/test/12.staking_tx.test.d.ts +0 -1
  72. package/dist/test/12.staking_tx.test.js +0 -211
  73. package/dist/test/13.staking_query.test.d.ts +0 -1
  74. package/dist/test/13.staking_query.test.js +0 -275
  75. package/dist/test/14.distribution_tx.test.d.ts +0 -1
  76. package/dist/test/14.distribution_tx.test.js +0 -170
  77. package/dist/test/15.distribution_query.test.d.ts +0 -1
  78. package/dist/test/15.distribution_query.test.js +0 -243
  79. package/dist/test/16.gov_tx.test.d.ts +0 -1
  80. package/dist/test/16.gov_tx.test.js +0 -396
  81. package/dist/test/17.gov_query.test.d.ts +0 -1
  82. package/dist/test/17.gov_query.test.js +0 -181
  83. package/dist/test/18.util.test.d.ts +0 -1
  84. package/dist/test/18.util.test.js +0 -354
  85. package/dist/test/19.chain.test.d.ts +0 -1
  86. package/dist/test/19.chain.test.js +0 -127
  87. package/dist/test/20.slashing_query.test.d.ts +0 -1
  88. package/dist/test/20.slashing_query.test.js +0 -111
  89. package/dist/test/21.token_tx.test.d.ts +0 -1
  90. package/dist/test/21.token_tx.test.js +0 -149
  91. package/dist/test/22.token_query.test.d.ts +0 -1
  92. package/dist/test/22.token_query.test.js +0 -103
  93. package/dist/test/23.authz_tx.test.d.ts +0 -1
  94. package/dist/test/23.authz_tx.test.js +0 -380
  95. package/dist/test/24.authz_query.test.d.ts +0 -1
  96. package/dist/test/24.authz_query.test.js +0 -202
  97. package/dist/test/25.cosmwasm_tx.test.d.ts +0 -1
  98. package/dist/test/25.cosmwasm_tx.test.js +0 -229
  99. package/dist/test/26.cosmwasm_query.test.d.ts +0 -1
  100. package/dist/test/26.cosmwasm_query.test.js +0 -275
  101. package/dist/test/27.arbitrary_sign.test.d.ts +0 -1
  102. package/dist/test/27.arbitrary_sign.test.js +0 -162
  103. package/dist/test/28.ibc_tx.test.d.ts +0 -1
  104. package/dist/test/28.ibc_tx.test.js +0 -98
  105. package/dist/test/29.mint_query.test.d.ts +0 -1
  106. package/dist/test/29.mint_query.test.js +0 -59
  107. package/dist/test/30.cw20_tx.test.d.ts +0 -1
  108. package/dist/test/30.cw20_tx.test.js +0 -450
  109. package/dist/test/31.cw20_query.test.d.ts +0 -1
  110. package/dist/test/31.cw20_query.test.js +0 -333
  111. package/dist/test/32.cw721_tx.test.d.ts +0 -1
  112. package/dist/test/32.cw721_tx.test.js +0 -431
  113. package/dist/test/33.cw721_query.test.d.ts +0 -1
  114. package/dist/test/33.cw721_query.test.js +0 -371
  115. package/dist/test/34.cw_bridge_tx.test.d.ts +0 -1
  116. package/dist/test/34.cw_bridge_tx.test.js +0 -476
  117. package/dist/test/35.cw_bridge_tx_low.test.d.ts +0 -1
  118. package/dist/test/35.cw_bridge_tx_low.test.js +0 -398
  119. package/dist/test/36.cw_bridge_query.test.d.ts +0 -1
  120. package/dist/test/36.cw_bridge_query.test.js +0 -318
  121. package/dist/test/37.cw_marketplace_tx.test.d.ts +0 -1
  122. package/dist/test/37.cw_marketplace_tx.test.js +0 -794
  123. package/dist/test/38.cw_marketplace_query.test.d.ts +0 -1
  124. package/dist/test/38.cw_marketplace_query.test.js +0 -128
  125. package/dist/test/config_test.d.ts +0 -11
  126. package/dist/test/config_test.js +0 -14
  127. package/dist/test/config_test.sample.d.ts +0 -11
  128. package/dist/test/config_test.sample.js +0 -14
@@ -52,7 +52,7 @@ var TokenService = /** @class */ (function () {
52
52
  case 0:
53
53
  _a.trys.push([0, 3, , 4]);
54
54
  newTotalSupply = FirmaUtil_1.FirmaUtil.getUTokenFromToken(totalSupply, decimal);
55
- return [4 /*yield*/, this.getSignedTxCreateToken(wallet, tokenName, tokenSymbol, tokenURI, newTotalSupply, decimal, isMintable, isBurnable, txMisc)];
55
+ return [4 /*yield*/, this.getSignedTxCreateToken(wallet, tokenName, tokenSymbol, tokenURI, newTotalSupply, decimal, isMintable, isBurnable, txMisc, true)];
56
56
  case 1:
57
57
  txRaw = _a.sent();
58
58
  return [4 /*yield*/, FirmaUtil_1.FirmaUtil.estimateGas(txRaw)];
@@ -69,13 +69,12 @@ var TokenService = /** @class */ (function () {
69
69
  TokenService.prototype.getGasEstimationMint = function (wallet, tokenID, amount, decimal, toAddress, txMisc) {
70
70
  if (txMisc === void 0) { txMisc = FirmaUtil_1.DefaultTxMisc; }
71
71
  return __awaiter(this, void 0, void 0, function () {
72
- var newAmount, txRaw, error_2;
72
+ var txRaw, error_2;
73
73
  return __generator(this, function (_a) {
74
74
  switch (_a.label) {
75
75
  case 0:
76
76
  _a.trys.push([0, 3, , 4]);
77
- newAmount = FirmaUtil_1.FirmaUtil.getUTokenFromToken(amount, decimal);
78
- return [4 /*yield*/, this.getSignedTxMint(wallet, tokenID, amount, toAddress, txMisc)];
77
+ return [4 /*yield*/, this.getSignedTxMint(wallet, tokenID, amount, toAddress, txMisc, true)];
79
78
  case 1:
80
79
  txRaw = _a.sent();
81
80
  return [4 /*yield*/, FirmaUtil_1.FirmaUtil.estimateGas(txRaw)];
@@ -98,7 +97,7 @@ var TokenService = /** @class */ (function () {
98
97
  case 0:
99
98
  _a.trys.push([0, 3, , 4]);
100
99
  newAmount = FirmaUtil_1.FirmaUtil.getUTokenFromToken(amount, decimal);
101
- return [4 /*yield*/, this.getSignedTxBurn(wallet, tokenID, newAmount, txMisc)];
100
+ return [4 /*yield*/, this.getSignedTxBurn(wallet, tokenID, newAmount, txMisc, true)];
102
101
  case 1:
103
102
  txRaw = _a.sent();
104
103
  return [4 /*yield*/, FirmaUtil_1.FirmaUtil.estimateGas(txRaw)];
@@ -120,7 +119,7 @@ var TokenService = /** @class */ (function () {
120
119
  switch (_a.label) {
121
120
  case 0:
122
121
  _a.trys.push([0, 3, , 4]);
123
- return [4 /*yield*/, this.getSignedTxUpdateTokenURI(wallet, tokenID, tokenURI, txMisc)];
122
+ return [4 /*yield*/, this.getSignedTxUpdateTokenURI(wallet, tokenID, tokenURI, txMisc, true)];
124
123
  case 1:
125
124
  txRaw = _a.sent();
126
125
  return [4 /*yield*/, FirmaUtil_1.FirmaUtil.estimateGas(txRaw)];
@@ -134,8 +133,9 @@ var TokenService = /** @class */ (function () {
134
133
  });
135
134
  });
136
135
  };
137
- TokenService.prototype.getSignedTxUpdateTokenURI = function (wallet, tokenID, tokenURI, txMisc) {
136
+ TokenService.prototype.getSignedTxUpdateTokenURI = function (wallet, tokenID, tokenURI, txMisc, simulate) {
138
137
  if (txMisc === void 0) { txMisc = FirmaUtil_1.DefaultTxMisc; }
138
+ if (simulate === void 0) { simulate = false; }
139
139
  return __awaiter(this, void 0, void 0, function () {
140
140
  var address, message, txClient, error_5;
141
141
  return __generator(this, function (_a) {
@@ -151,7 +151,7 @@ var TokenService = /** @class */ (function () {
151
151
  tokenURI: tokenURI
152
152
  });
153
153
  txClient = new token_1.TokenTxClient(wallet, this.config.rpcAddress);
154
- return [4 /*yield*/, txClient.sign([message], (0, FirmaUtil_1.getSignAndBroadcastOption)(this.config.denom, txMisc))];
154
+ return [4 /*yield*/, txClient.sign([message], (0, FirmaUtil_1.getSignAndBroadcastOption)(this.config.denom, txMisc), simulate)];
155
155
  case 2: return [2 /*return*/, _a.sent()];
156
156
  case 3:
157
157
  error_5 = _a.sent();
@@ -162,8 +162,9 @@ var TokenService = /** @class */ (function () {
162
162
  });
163
163
  });
164
164
  };
165
- TokenService.prototype.getSignedTxBurn = function (wallet, tokenID, amount, txMisc) {
165
+ TokenService.prototype.getSignedTxBurn = function (wallet, tokenID, amount, txMisc, simulate) {
166
166
  if (txMisc === void 0) { txMisc = FirmaUtil_1.DefaultTxMisc; }
167
+ if (simulate === void 0) { simulate = false; }
167
168
  return __awaiter(this, void 0, void 0, function () {
168
169
  var address, message, txClient, error_6;
169
170
  return __generator(this, function (_a) {
@@ -179,7 +180,7 @@ var TokenService = /** @class */ (function () {
179
180
  amount: amount
180
181
  });
181
182
  txClient = new token_1.TokenTxClient(wallet, this.config.rpcAddress);
182
- return [4 /*yield*/, txClient.sign([message], (0, FirmaUtil_1.getSignAndBroadcastOption)(this.config.denom, txMisc))];
183
+ return [4 /*yield*/, txClient.sign([message], (0, FirmaUtil_1.getSignAndBroadcastOption)(this.config.denom, txMisc), simulate)];
183
184
  case 2: return [2 /*return*/, _a.sent()];
184
185
  case 3:
185
186
  error_6 = _a.sent();
@@ -190,8 +191,9 @@ var TokenService = /** @class */ (function () {
190
191
  });
191
192
  });
192
193
  };
193
- TokenService.prototype.getSignedTxMint = function (wallet, tokenID, amount, toAddress, txMisc) {
194
+ TokenService.prototype.getSignedTxMint = function (wallet, tokenID, amount, toAddress, txMisc, simulate) {
194
195
  if (txMisc === void 0) { txMisc = FirmaUtil_1.DefaultTxMisc; }
196
+ if (simulate === void 0) { simulate = false; }
195
197
  return __awaiter(this, void 0, void 0, function () {
196
198
  var address, message, txClient, error_7;
197
199
  return __generator(this, function (_a) {
@@ -208,7 +210,7 @@ var TokenService = /** @class */ (function () {
208
210
  toAddress: toAddress
209
211
  });
210
212
  txClient = new token_1.TokenTxClient(wallet, this.config.rpcAddress);
211
- return [4 /*yield*/, txClient.sign([message], (0, FirmaUtil_1.getSignAndBroadcastOption)(this.config.denom, txMisc))];
213
+ return [4 /*yield*/, txClient.sign([message], (0, FirmaUtil_1.getSignAndBroadcastOption)(this.config.denom, txMisc), simulate)];
212
214
  case 2: return [2 /*return*/, _a.sent()];
213
215
  case 3:
214
216
  error_7 = _a.sent();
@@ -219,8 +221,9 @@ var TokenService = /** @class */ (function () {
219
221
  });
220
222
  });
221
223
  };
222
- TokenService.prototype.getSignedTxCreateToken = function (wallet, tokenName, tokenSymbol, tokenURI, totalSupply, decimal, isMintable, isBurnable, txMisc) {
224
+ TokenService.prototype.getSignedTxCreateToken = function (wallet, tokenName, tokenSymbol, tokenURI, totalSupply, decimal, isMintable, isBurnable, txMisc, simulate) {
223
225
  if (txMisc === void 0) { txMisc = FirmaUtil_1.DefaultTxMisc; }
226
+ if (simulate === void 0) { simulate = false; }
224
227
  return __awaiter(this, void 0, void 0, function () {
225
228
  var address, message, txClient, error_8;
226
229
  return __generator(this, function (_a) {
@@ -241,7 +244,7 @@ var TokenService = /** @class */ (function () {
241
244
  burnable: isBurnable
242
245
  });
243
246
  txClient = new token_1.TokenTxClient(wallet, this.config.rpcAddress);
244
- return [4 /*yield*/, txClient.sign([message], (0, FirmaUtil_1.getSignAndBroadcastOption)(this.config.denom, txMisc))];
247
+ return [4 /*yield*/, txClient.sign([message], (0, FirmaUtil_1.getSignAndBroadcastOption)(this.config.denom, txMisc), simulate)];
245
248
  case 2: return [2 /*return*/, _a.sent()];
246
249
  case 3:
247
250
  error_8 = _a.sent();
@@ -343,7 +343,7 @@ var FirmaUtil = /** @class */ (function () {
343
343
  return [4 /*yield*/, wallet.getAddress()];
344
344
  case 2:
345
345
  address = _a.sent();
346
- dataBytes = Buffer.from(data, 'utf8');
346
+ dataBytes = new TextEncoder().encode(data);
347
347
  return [4 /*yield*/, client.experimentalAdr36Sign(address, dataBytes)];
348
348
  case 3: return [2 /*return*/, _a.sent()];
349
349
  case 4:
@@ -32,5 +32,5 @@ export declare class FirmaWalletService {
32
32
  generateMnemonic(): Promise<string>;
33
33
  isLedger(): boolean;
34
34
  initFromLedger(ledger: LedgerWalletInterface): Promise<FirmaWalletService>;
35
- signLedger(messages: EncodeObject[], option: SignAndBroadcastOptions, registry: Registry): Promise<TxRaw>;
35
+ signLedger(messages: EncodeObject[], option: SignAndBroadcastOptions, registry: Registry, simulate?: boolean): Promise<TxRaw>;
36
36
  }
@@ -177,7 +177,7 @@ var FirmaWalletService = /** @class */ (function () {
177
177
  switch (_b.label) {
178
178
  case 0:
179
179
  _b.trys.push([0, 2, , 3]);
180
- tempPrivateKey = Buffer.from(privateKey.replace("0x", ""), "hex");
180
+ tempPrivateKey = new Uint8Array(Buffer.from(privateKey.replace("0x", ""), "hex"));
181
181
  _a = this;
182
182
  return [4 /*yield*/, proto_signing_1.DirectSecp256k1Wallet.fromKey(tempPrivateKey, this.getPrefix())];
183
183
  case 1:
@@ -319,9 +319,10 @@ var FirmaWalletService = /** @class */ (function () {
319
319
  });
320
320
  });
321
321
  };
322
- FirmaWalletService.prototype.signLedger = function (messages, option, registry) {
322
+ FirmaWalletService.prototype.signLedger = function (messages, option, registry, simulate) {
323
+ if (simulate === void 0) { simulate = false; }
323
324
  return __awaiter(this, void 0, void 0, function () {
324
- var address, addressAndPubkey, displayError_1, error_10, errorMessage, accountInfo, chainId, signerData;
325
+ var address, addressAndPubkey, error_10, errorMessage, accountInfo, chainId, signerData;
325
326
  return __generator(this, function (_a) {
326
327
  switch (_a.label) {
327
328
  case 0:
@@ -330,42 +331,29 @@ var FirmaWalletService = /** @class */ (function () {
330
331
  }
331
332
  _a.label = 1;
332
333
  case 1:
333
- _a.trys.push([1, 7, , 8]);
334
+ _a.trys.push([1, 3, , 4]);
334
335
  return [4 /*yield*/, this.ledger.getAddressAndPublicKey()];
335
336
  case 2:
336
337
  addressAndPubkey = _a.sent();
337
338
  address = addressAndPubkey.address;
338
- if (!this.ledger.showAddressOnDevice) return [3 /*break*/, 6];
339
- _a.label = 3;
339
+ return [3 /*break*/, 4];
340
340
  case 3:
341
- _a.trys.push([3, 5, , 6]);
342
- return [4 /*yield*/, this.ledger.showAddressOnDevice()];
343
- case 4:
344
- _a.sent();
345
- return [3 /*break*/, 6];
346
- case 5:
347
- displayError_1 = _a.sent();
348
- return [3 /*break*/, 6];
349
- case 6: return [3 /*break*/, 8];
350
- case 7:
351
341
  error_10 = _a.sent();
352
342
  errorMessage = error_10 instanceof Error ? error_10.message : String(error_10);
353
343
  throw new Error("Failed to connect to Ledger: ".concat(errorMessage, ". Please make sure your Ledger is connected and the FirmaChain app is open."));
354
- case 8: return [4 /*yield*/, FirmaUtil_1.FirmaUtil.getAccountInfo(address)];
355
- case 9:
344
+ case 4: return [4 /*yield*/, FirmaUtil_1.FirmaUtil.getAccountInfo(address)];
345
+ case 5:
356
346
  accountInfo = _a.sent();
357
347
  return [4 /*yield*/, FirmaUtil_1.FirmaUtil.getChainId()];
358
- case 10:
348
+ case 6:
359
349
  chainId = _a.sent();
360
350
  signerData = {
361
351
  account_number: parseInt(accountInfo.account_number, 10),
362
352
  sequence: parseInt(accountInfo.sequence, 10),
363
353
  chain_id: chainId,
364
354
  };
365
- return [4 /*yield*/, (0, LedgerWallet_1.signWithSignerProtobuf)(this.ledger, messages, signerData, option, registry)];
366
- case 11:
367
- // Use protobuf signing with FirmaChain Ledger app
368
- return [2 /*return*/, _a.sent()];
355
+ return [4 /*yield*/, (0, LedgerWallet_1.signWithSignerAuto)(this.ledger, messages, signerData, option, registry, this.config.restApiAddress, simulate)];
356
+ case 7: return [2 /*return*/, _a.sent()];
369
357
  }
370
358
  });
371
359
  });
@@ -19,6 +19,8 @@ exports.AuthzTxClient = void 0;
19
19
  var proto_signing_1 = require("@cosmjs/proto-signing");
20
20
  var AuthzTxTypes_1 = require("./AuthzTxTypes");
21
21
  var ITxClient_1 = require("../common/ITxClient");
22
+ // AuthzTxTypes are protobufjs-generated without a `decode` method, so they
23
+ // cannot satisfy GeneratedType directly.
22
24
  var types = [
23
25
  ["/cosmos.authz.v1beta1.MsgExec", AuthzTxTypes_1.MsgExec],
24
26
  ["/cosmos.authz.v1beta1.MsgGrant", AuthzTxTypes_1.MsgGrant],
@@ -21,7 +21,7 @@ var tx_1 = require("cosmjs-types/cosmos/bank/v1beta1/tx");
21
21
  var ITxClient_1 = require("../common/ITxClient");
22
22
  var types = [
23
23
  ["/cosmos.bank.v1beta1.MsgSend", tx_1.MsgSend],
24
- ["/cosmos.bank.v1beta1.MsgMultiSend", tx_1.MsgMultiSend]
24
+ ["/cosmos.bank.v1beta1.MsgMultiSend", tx_1.MsgMultiSend],
25
25
  ];
26
26
  var registry = new proto_signing_1.Registry(types);
27
27
  var BankTxClient = /** @class */ (function (_super) {
@@ -31,6 +31,8 @@ var FeeGrantTxTypes_1 = require("../feegrant/FeeGrantTxTypes");
31
31
  var NftTxTypes_1 = require("../nft/NftTxTypes");
32
32
  var TokenTxTypes_1 = require("../token/TokenTxTypes");
33
33
  var ITxClient_1 = require("./ITxClient");
34
+ // Some entries use protobufjs-generated types (no `decode`) or types from
35
+ // @kintsugi-tech/cosmjs-types (different BinaryWriter), so a cast is required.
34
36
  var types = [
35
37
  ["/cosmos.authz.v1beta1.MsgExec", AuthzTxTypes_1.MsgExec],
36
38
  ["/cosmos.authz.v1beta1.MsgGrant", AuthzTxTypes_1.MsgGrant],
@@ -73,7 +75,7 @@ var types = [
73
75
  ["/firmachain.token.MsgCreateToken", TokenTxTypes_1.MsgCreateToken],
74
76
  ["/firmachain.token.MsgUpdateTokenURI", TokenTxTypes_1.MsgUpdateTokenURI],
75
77
  ["/firmachain.token.MsgMint", NftTxTypes_1.MsgMint],
76
- ["/firmachain.token.MsgBurn", NftTxTypes_1.MsgBurn]
78
+ ["/firmachain.token.MsgBurn", NftTxTypes_1.MsgBurn],
77
79
  ];
78
80
  var registry = new proto_signing_1.Registry(types);
79
81
  var CommonTxClient = /** @class */ (function (_super) {
@@ -0,0 +1,49 @@
1
+ import { LedgerWalletInterface } from './LedgerWallet';
2
+ export type { LedgerWalletInterface };
3
+ export interface LedgerTransportClass {
4
+ create(): Promise<any>;
5
+ }
6
+ export declare class FirmaCosmosLedgerWallet implements LedgerWalletInterface {
7
+ private transportHID;
8
+ private cosmosApp;
9
+ private isOpen;
10
+ constructor(transportHID: LedgerTransportClass);
11
+ private connect;
12
+ private close;
13
+ getAddress(): Promise<string>;
14
+ getAddressAndPublicKey(): Promise<{
15
+ address: string;
16
+ publicKey: Uint8Array;
17
+ }>;
18
+ getPublicKey(): Promise<Uint8Array>;
19
+ showAddressOnDevice(): Promise<void>;
20
+ sign(message: string | Uint8Array, txtype?: number): Promise<Uint8Array>;
21
+ }
22
+ type GetAddressAndPublicKeyCallback = () => Promise<{
23
+ address: string;
24
+ publicKey: Uint8Array;
25
+ }>;
26
+ type GetAddressCallback = () => Promise<string>;
27
+ type SignCallback = (message: string | Uint8Array, txtype?: number) => Promise<Uint8Array>;
28
+ type GetPublicKeyCallback = () => Promise<Uint8Array>;
29
+ type ShowAddressOnDeviceCallback = () => void;
30
+ export declare class FirmaBridgeLedgerWallet implements LedgerWalletInterface {
31
+ private getAddressAndPublicKeyCallback;
32
+ private getAddressCallback;
33
+ private signCallback;
34
+ private getPublicKeyCallback;
35
+ private showAddressOnDeviceCallback;
36
+ registerGetAddressAndPublicKeyCallback(cb: GetAddressAndPublicKeyCallback): void;
37
+ registerGetAddressCallback(cb: GetAddressCallback): void;
38
+ registerGetSignCallback(cb: SignCallback): void;
39
+ registerGetPublicKeyCallback(cb: GetPublicKeyCallback): void;
40
+ registerShowAddressOnDevice(cb: ShowAddressOnDeviceCallback): void;
41
+ showAddressOnDevice(): Promise<void>;
42
+ getPublicKey(): Promise<Uint8Array>;
43
+ getAddressAndPublicKey(): Promise<{
44
+ address: string;
45
+ publicKey: Uint8Array;
46
+ }>;
47
+ getAddress(): Promise<string>;
48
+ sign(message: string | Uint8Array, txtype?: number): Promise<Uint8Array>;
49
+ }
@@ -0,0 +1,301 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ var _a;
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.FirmaBridgeLedgerWallet = exports.FirmaCosmosLedgerWallet = void 0;
44
+ var ledger_cosmos_js_1 = __importDefault(require("@zondax/ledger-cosmos-js"));
45
+ var crypto_1 = require("@cosmjs/crypto");
46
+ var FIRMA_PATH = "m/44'/7777777'/0'/0/0";
47
+ var FIRMA_HRP = 'firma';
48
+ // Verbose Ledger transport tracing. Enable with env DEBUG_LEDGER=1 (node) or
49
+ // `globalThis.DEBUG_LEDGER = true` (browser).
50
+ var DEBUG_LEDGER = (typeof process !== 'undefined' && ((_a = process.env) === null || _a === void 0 ? void 0 : _a.DEBUG_LEDGER) === '1') ||
51
+ (typeof globalThis !== 'undefined' && globalThis.DEBUG_LEDGER === true);
52
+ // Sanitized error formatter — extracts only the fields Zondax/Ledger libraries
53
+ // surface in their documented error shape (.message, .returnCode). Prevents
54
+ // accidental leakage of attached context (transport state, buffered bytes) when
55
+ // the upstream library decorates errors with extra properties.
56
+ function formatLedgerError(error) {
57
+ var e = error;
58
+ var msg = typeof (e === null || e === void 0 ? void 0 : e.message) === 'string' ? e.message : String(error);
59
+ var rc = typeof (e === null || e === void 0 ? void 0 : e.returnCode) === 'number' ? ' | returnCode: 0x' + e.returnCode.toString(16) : '';
60
+ return msg + rc;
61
+ }
62
+ // ─── Web (WebHID) wallet ──────────────────────────────────────────────────────
63
+ var FirmaCosmosLedgerWallet = /** @class */ (function () {
64
+ function FirmaCosmosLedgerWallet(transportHID) {
65
+ this.isOpen = false;
66
+ this.transportHID = transportHID;
67
+ }
68
+ FirmaCosmosLedgerWallet.prototype.connect = function () {
69
+ var _a, _b;
70
+ return __awaiter(this, void 0, void 0, function () {
71
+ var transport;
72
+ return __generator(this, function (_c) {
73
+ switch (_c.label) {
74
+ case 0:
75
+ if (this.isOpen)
76
+ return [2 /*return*/];
77
+ return [4 /*yield*/, this.transportHID.create()];
78
+ case 1:
79
+ transport = _c.sent();
80
+ if (DEBUG_LEDGER) {
81
+ console.log('[Ledger] transport.deviceModel id:', (_a = transport.deviceModel) === null || _a === void 0 ? void 0 : _a.id);
82
+ console.log('[Ledger] transport.deviceModel productName:', (_b = transport.deviceModel) === null || _b === void 0 ? void 0 : _b.productName);
83
+ }
84
+ this.cosmosApp = new ledger_cosmos_js_1.default(transport);
85
+ this.isOpen = true;
86
+ if (DEBUG_LEDGER)
87
+ console.log('[Ledger] connect success');
88
+ return [2 /*return*/];
89
+ }
90
+ });
91
+ });
92
+ };
93
+ FirmaCosmosLedgerWallet.prototype.close = function () {
94
+ var _a, _b;
95
+ return __awaiter(this, void 0, void 0, function () {
96
+ var app;
97
+ return __generator(this, function (_c) {
98
+ try {
99
+ app = this.cosmosApp;
100
+ (_b = (_a = app === null || app === void 0 ? void 0 : app.transport) === null || _a === void 0 ? void 0 : _a.close) === null || _b === void 0 ? void 0 : _b.call(_a);
101
+ }
102
+ catch (_) { }
103
+ this.isOpen = false;
104
+ return [2 /*return*/];
105
+ });
106
+ });
107
+ };
108
+ FirmaCosmosLedgerWallet.prototype.getAddress = function () {
109
+ return __awaiter(this, void 0, void 0, function () {
110
+ var response, error_1;
111
+ return __generator(this, function (_a) {
112
+ switch (_a.label) {
113
+ case 0:
114
+ _a.trys.push([0, 4, , 6]);
115
+ if (DEBUG_LEDGER)
116
+ console.log('[FirmaLedger] getAddress');
117
+ return [4 /*yield*/, this.connect()];
118
+ case 1:
119
+ _a.sent();
120
+ return [4 /*yield*/, this.cosmosApp.getAddressAndPubKey(FIRMA_PATH, FIRMA_HRP)];
121
+ case 2:
122
+ response = _a.sent();
123
+ return [4 /*yield*/, this.close()];
124
+ case 3:
125
+ _a.sent();
126
+ return [2 /*return*/, response.bech32_address];
127
+ case 4:
128
+ error_1 = _a.sent();
129
+ console.error('[FirmaLedger] getAddress error:', formatLedgerError(error_1));
130
+ return [4 /*yield*/, this.close()];
131
+ case 5:
132
+ _a.sent();
133
+ return [2 /*return*/, ''];
134
+ case 6: return [2 /*return*/];
135
+ }
136
+ });
137
+ });
138
+ };
139
+ FirmaCosmosLedgerWallet.prototype.getAddressAndPublicKey = function () {
140
+ return __awaiter(this, void 0, void 0, function () {
141
+ var response, error_2;
142
+ return __generator(this, function (_a) {
143
+ switch (_a.label) {
144
+ case 0:
145
+ _a.trys.push([0, 4, , 6]);
146
+ return [4 /*yield*/, this.connect()];
147
+ case 1:
148
+ _a.sent();
149
+ return [4 /*yield*/, this.cosmosApp.getAddressAndPubKey(FIRMA_PATH, FIRMA_HRP)];
150
+ case 2:
151
+ response = _a.sent();
152
+ return [4 /*yield*/, this.close()];
153
+ case 3:
154
+ _a.sent();
155
+ return [2 /*return*/, { address: response.bech32_address, publicKey: new Uint8Array(response.compressed_pk) }];
156
+ case 4:
157
+ error_2 = _a.sent();
158
+ console.error('[FirmaLedger] getAddressAndPublicKey error:', formatLedgerError(error_2));
159
+ return [4 /*yield*/, this.close()];
160
+ case 5:
161
+ _a.sent();
162
+ return [2 /*return*/, { address: '', publicKey: new Uint8Array() }];
163
+ case 6: return [2 /*return*/];
164
+ }
165
+ });
166
+ });
167
+ };
168
+ FirmaCosmosLedgerWallet.prototype.getPublicKey = function () {
169
+ return __awaiter(this, void 0, void 0, function () {
170
+ var response, error_3;
171
+ return __generator(this, function (_a) {
172
+ switch (_a.label) {
173
+ case 0:
174
+ _a.trys.push([0, 4, , 6]);
175
+ if (DEBUG_LEDGER)
176
+ console.log('[FirmaLedger] getPublicKey path:', FIRMA_PATH, 'hrp:', FIRMA_HRP);
177
+ return [4 /*yield*/, this.connect()];
178
+ case 1:
179
+ _a.sent();
180
+ return [4 /*yield*/, this.cosmosApp.getAddressAndPubKey(FIRMA_PATH, FIRMA_HRP)];
181
+ case 2:
182
+ response = _a.sent();
183
+ return [4 /*yield*/, this.close()];
184
+ case 3:
185
+ _a.sent();
186
+ return [2 /*return*/, new Uint8Array(response.compressed_pk)];
187
+ case 4:
188
+ error_3 = _a.sent();
189
+ console.error('[FirmaLedger] getPublicKey error:', formatLedgerError(error_3));
190
+ return [4 /*yield*/, this.close()];
191
+ case 5:
192
+ _a.sent();
193
+ throw error_3;
194
+ case 6: return [2 /*return*/];
195
+ }
196
+ });
197
+ });
198
+ };
199
+ FirmaCosmosLedgerWallet.prototype.showAddressOnDevice = function () {
200
+ return __awaiter(this, void 0, void 0, function () {
201
+ var error_4;
202
+ return __generator(this, function (_a) {
203
+ switch (_a.label) {
204
+ case 0:
205
+ _a.trys.push([0, 4, , 6]);
206
+ return [4 /*yield*/, this.connect()];
207
+ case 1:
208
+ _a.sent();
209
+ return [4 /*yield*/, this.cosmosApp.showAddressAndPubKey(FIRMA_PATH, FIRMA_HRP)];
210
+ case 2:
211
+ _a.sent();
212
+ return [4 /*yield*/, this.close()];
213
+ case 3:
214
+ _a.sent();
215
+ return [3 /*break*/, 6];
216
+ case 4:
217
+ error_4 = _a.sent();
218
+ console.error('[FirmaLedger] showAddressOnDevice error:', formatLedgerError(error_4));
219
+ return [4 /*yield*/, this.close()];
220
+ case 5:
221
+ _a.sent();
222
+ return [3 /*break*/, 6];
223
+ case 6: return [2 /*return*/];
224
+ }
225
+ });
226
+ });
227
+ };
228
+ FirmaCosmosLedgerWallet.prototype.sign = function (message, txtype) {
229
+ if (txtype === void 0) { txtype = 0x00; }
230
+ return __awaiter(this, void 0, void 0, function () {
231
+ var buffer, response, secp256k1, error_5;
232
+ return __generator(this, function (_a) {
233
+ switch (_a.label) {
234
+ case 0:
235
+ _a.trys.push([0, 4, , 6]);
236
+ buffer = typeof message === 'string' ? Buffer.from(message) : Buffer.from(message);
237
+ if (DEBUG_LEDGER)
238
+ console.log('[FirmaLedger] sign txtype:', txtype, 'buffer length:', buffer.length);
239
+ return [4 /*yield*/, this.connect()];
240
+ case 1:
241
+ _a.sent();
242
+ return [4 /*yield*/, this.cosmosApp.sign(FIRMA_PATH, buffer, FIRMA_HRP, txtype)];
243
+ case 2:
244
+ response = _a.sent();
245
+ return [4 /*yield*/, this.close()];
246
+ case 3:
247
+ _a.sent();
248
+ secp256k1 = crypto_1.Secp256k1Signature.fromDer(new Uint8Array(response.signature)).toFixedLength();
249
+ return [2 /*return*/, new Uint8Array(secp256k1)];
250
+ case 4:
251
+ error_5 = _a.sent();
252
+ console.error('[FirmaLedger] sign error:', formatLedgerError(error_5));
253
+ return [4 /*yield*/, this.close()];
254
+ case 5:
255
+ _a.sent();
256
+ throw error_5;
257
+ case 6: return [2 /*return*/];
258
+ }
259
+ });
260
+ });
261
+ };
262
+ return FirmaCosmosLedgerWallet;
263
+ }());
264
+ exports.FirmaCosmosLedgerWallet = FirmaCosmosLedgerWallet;
265
+ var FirmaBridgeLedgerWallet = /** @class */ (function () {
266
+ function FirmaBridgeLedgerWallet() {
267
+ }
268
+ FirmaBridgeLedgerWallet.prototype.registerGetAddressAndPublicKeyCallback = function (cb) { this.getAddressAndPublicKeyCallback = cb; };
269
+ FirmaBridgeLedgerWallet.prototype.registerGetAddressCallback = function (cb) { this.getAddressCallback = cb; };
270
+ FirmaBridgeLedgerWallet.prototype.registerGetSignCallback = function (cb) { this.signCallback = cb; };
271
+ FirmaBridgeLedgerWallet.prototype.registerGetPublicKeyCallback = function (cb) { this.getPublicKeyCallback = cb; };
272
+ FirmaBridgeLedgerWallet.prototype.registerShowAddressOnDevice = function (cb) { this.showAddressOnDeviceCallback = cb; };
273
+ FirmaBridgeLedgerWallet.prototype.showAddressOnDevice = function () {
274
+ return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
275
+ this.showAddressOnDeviceCallback();
276
+ return [2 /*return*/];
277
+ }); });
278
+ };
279
+ FirmaBridgeLedgerWallet.prototype.getPublicKey = function () {
280
+ return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
281
+ return [2 /*return*/, this.getPublicKeyCallback()];
282
+ }); });
283
+ };
284
+ FirmaBridgeLedgerWallet.prototype.getAddressAndPublicKey = function () {
285
+ return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
286
+ return [2 /*return*/, this.getAddressAndPublicKeyCallback()];
287
+ }); });
288
+ };
289
+ FirmaBridgeLedgerWallet.prototype.getAddress = function () {
290
+ return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
291
+ return [2 /*return*/, this.getAddressCallback()];
292
+ }); });
293
+ };
294
+ FirmaBridgeLedgerWallet.prototype.sign = function (message, txtype) {
295
+ return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) {
296
+ return [2 /*return*/, this.signCallback(message, txtype)];
297
+ }); });
298
+ };
299
+ return FirmaBridgeLedgerWallet;
300
+ }());
301
+ exports.FirmaBridgeLedgerWallet = FirmaBridgeLedgerWallet;
@@ -11,7 +11,7 @@ export declare class ITxClient {
11
11
  private rawWallet;
12
12
  constructor(wallet: FirmaWalletService, serverUrl: string, registry: Registry);
13
13
  getRegistry(): Registry;
14
- sign(msgs: EncodeObject[], { fee, memo }: SignAndBroadcastOptions): Promise<TxRaw>;
14
+ sign(msgs: EncodeObject[], { fee, memo }: SignAndBroadcastOptions, simulate?: boolean): Promise<TxRaw>;
15
15
  broadcast(txRaw: TxRaw): Promise<DeliverTxResponse>;
16
16
  broadcastTxBytes(txBytes: Uint8Array): Promise<DeliverTxResponse>;
17
17
  signAndBroadcast(msgs: EncodeObject[], { fee, memo }: SignAndBroadcastOptions): Promise<DeliverTxResponse>;
@@ -39,6 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.ITxClient = void 0;
40
40
  var tx_1 = require("cosmjs-types/cosmos/tx/v1beta1/tx");
41
41
  var SigningStargateClient_1 = require("./SigningStargateClient");
42
+ var StargateClient_1 = require("./StargateClient");
42
43
  var ITxClient = /** @class */ (function () {
43
44
  function ITxClient(wallet, serverUrl, registry) {
44
45
  this.wallet = wallet;
@@ -47,15 +48,16 @@ var ITxClient = /** @class */ (function () {
47
48
  this.rawWallet = wallet.getRawWallet();
48
49
  }
49
50
  ITxClient.prototype.getRegistry = function () { return this.registry; };
50
- ITxClient.prototype.sign = function (msgs, _a) {
51
+ ITxClient.prototype.sign = function (msgs, _a, simulate) {
51
52
  var fee = _a.fee, memo = _a.memo;
53
+ if (simulate === void 0) { simulate = false; }
52
54
  return __awaiter(this, void 0, void 0, function () {
53
55
  var client, address;
54
56
  return __generator(this, function (_b) {
55
57
  switch (_b.label) {
56
58
  case 0:
57
59
  if (!this.wallet.isLedger()) return [3 /*break*/, 1];
58
- return [2 /*return*/, this.wallet.signLedger(msgs, { fee: fee, memo: memo }, this.registry)];
60
+ return [2 /*return*/, this.wallet.signLedger(msgs, { fee: fee, memo: memo }, this.registry, simulate)];
59
61
  case 1: return [4 /*yield*/, SigningStargateClient_1.SigningStargateClient.connectWithSigner(this.serverUrl, this.rawWallet, { registry: this.registry })];
60
62
  case 2:
61
63
  client = _b.sent();
@@ -73,7 +75,7 @@ var ITxClient = /** @class */ (function () {
73
75
  var client, txBytes;
74
76
  return __generator(this, function (_a) {
75
77
  switch (_a.label) {
76
- case 0: return [4 /*yield*/, SigningStargateClient_1.SigningStargateClient.connectWithSigner(this.serverUrl, this.rawWallet, { registry: this.registry })];
78
+ case 0: return [4 /*yield*/, StargateClient_1.StargateClient.connect(this.serverUrl)];
77
79
  case 1:
78
80
  client = _a.sent();
79
81
  txBytes = tx_1.TxRaw.encode(txRaw).finish();
@@ -88,7 +90,7 @@ var ITxClient = /** @class */ (function () {
88
90
  var client;
89
91
  return __generator(this, function (_a) {
90
92
  switch (_a.label) {
91
- case 0: return [4 /*yield*/, SigningStargateClient_1.SigningStargateClient.connectWithSigner(this.serverUrl, this.rawWallet, { registry: this.registry })];
93
+ case 0: return [4 /*yield*/, StargateClient_1.StargateClient.connect(this.serverUrl)];
92
94
  case 1:
93
95
  client = _a.sent();
94
96
  return [4 /*yield*/, client.broadcastTx(txBytes)];