@stellar/typescript-wallet-sdk 5.0.0 → 5.1.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/CHANGELOG.MD CHANGED
@@ -1,3 +1,13 @@
1
+ # Release notes - Typescript Wallet SDK - 5.1.0
2
+
3
+ ### Added
4
+ * `DuplicateRecoverySignerError`, `RecoverySignerEqualsDeviceKeyError`, `DuplicateAccountSignerError` and `SignerKeyEqualsMasterKeyError`, exported via `Exceptions` (#255)
5
+
6
+ ### Changed
7
+ * `Recovery.createRecoverableWallet` checks the signer keys returned by the recovery servers before building the transaction. It throws `DuplicateRecoverySignerError` when two or more servers return the same key, `RecoverySignerEqualsDeviceKeyError` when a server returns the device key, and `SignerKeyEqualsMasterKeyError` when a server returns the account's own key (#255)
8
+ * `Recovery.registerRecoveryServerSigners` throws before contacting Horizon when an address appears more than once in `accountSigners` (`DuplicateAccountSignerError`) or is the account itself (`SignerKeyEqualsMasterKeyError`). `SetOptions` overwrites a repeated signer instead of adding its weight, so such a set would install fewer signers than the thresholds written alongside it were sized for (#255)
9
+ * The browser bundle is built with `pbkdf2` 3.1.7, `sha.js` 2.4.12 and `cipher-base` 1.0.7, which it inlines through its `crypto` polyfill (#258)
10
+
1
11
  # Release notes - Typescript Wallet SDK - 5.0.0
2
12
 
3
13
  ### BREAKING CHANGES
package/lib/bundle.js CHANGED
@@ -2245,8 +2245,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
2245
2245
  return (mod && mod.__esModule) ? mod : { "default": mod };
2246
2246
  };
2247
2247
  Object.defineProperty(exports, "__esModule", ({ value: true }));
2248
- exports.Sep7InvalidUriError = exports.AuthHeaderClientDomainRequiredError = exports.AuthHeaderSigningKeypairRequiredError = exports.DomainSigningModifiedError = exports.DefaultSignerDomainAccountError = exports.SigningKeypairMissingSecretError = exports.InvalidJsonError = exports.UnknownAnchorTransactionError = exports.AllowHttpOnNonTestnetError = exports.ChallengeTxnClientAccountMismatchError = exports.ChallengeTxnInvalidSignatureError = exports.ChallengeTxnIncorrectSequenceError = exports.NetworkPassphraseMismatchError = exports.ChallengeValidationFailedError = exports.MissingSigningKeyError = exports.Sep38PriceOnlyOneAmountError = exports.NoAccountAndNoSponsorError = exports.DeviceKeyEqualsMasterKeyError = exports.NoAccountSignersError = exports.UnableToDeduceKeyError = exports.NoDeviceKeyForAccountError = exports.LostSignerKeyNotFound = exports.NotAllSignaturesFetchedError = exports.RecoveryIdentityNotFoundError = exports.RecoveryServerNotFoundError = exports.KYCServerNotFoundError = exports.CustomerNotFoundError = exports.Sep9InfoRequiredError = exports.WithdrawalTxMemoError = exports.PathPayBoundRequiredError = exports.PathPayOnlyOneAmountError = exports.WithdrawalTxMissingMemoError = exports.WithdrawalTxMissingDestinationError = exports.WithdrawalTxNotPendingUserTransferStartError = exports.OperationsLimitExceededError = exports.SignerRequiredError = exports.TransactionSubmitWithFeeIncreaseFailedError = exports.ExpiredTokenError = exports.InvalidTokenError = exports.MissingTokenError = exports.InsufficientStartingBalanceError = exports.TransactionSubmitFailedError = exports.AccountDoesNotExistError = exports.InvalidTransactionsResponseError = exports.InvalidTransactionResponseError = exports.MissingTransactionIdError = exports.ClientDomainWithMemoError = exports.InvalidMemoError = exports.AssetNotSupportedError = exports.ServerRequestFailedError = void 0;
2249
- exports.Sep7UriTypeNotSupportedError = exports.Sep7LongMsgError = void 0;
2248
+ exports.DefaultSignerDomainAccountError = exports.SigningKeypairMissingSecretError = exports.InvalidJsonError = exports.UnknownAnchorTransactionError = exports.AllowHttpOnNonTestnetError = exports.ChallengeTxnClientAccountMismatchError = exports.ChallengeTxnInvalidSignatureError = exports.ChallengeTxnIncorrectSequenceError = exports.NetworkPassphraseMismatchError = exports.ChallengeValidationFailedError = exports.MissingSigningKeyError = exports.Sep38PriceOnlyOneAmountError = exports.NoAccountAndNoSponsorError = exports.SignerKeyEqualsMasterKeyError = exports.DuplicateAccountSignerError = exports.RecoverySignerEqualsDeviceKeyError = exports.DuplicateRecoverySignerError = exports.DeviceKeyEqualsMasterKeyError = exports.NoAccountSignersError = exports.UnableToDeduceKeyError = exports.NoDeviceKeyForAccountError = exports.LostSignerKeyNotFound = exports.NotAllSignaturesFetchedError = exports.RecoveryIdentityNotFoundError = exports.RecoveryServerNotFoundError = exports.KYCServerNotFoundError = exports.CustomerNotFoundError = exports.Sep9InfoRequiredError = exports.WithdrawalTxMemoError = exports.PathPayBoundRequiredError = exports.PathPayOnlyOneAmountError = exports.WithdrawalTxMissingMemoError = exports.WithdrawalTxMissingDestinationError = exports.WithdrawalTxNotPendingUserTransferStartError = exports.OperationsLimitExceededError = exports.SignerRequiredError = exports.TransactionSubmitWithFeeIncreaseFailedError = exports.ExpiredTokenError = exports.InvalidTokenError = exports.MissingTokenError = exports.InsufficientStartingBalanceError = exports.TransactionSubmitFailedError = exports.AccountDoesNotExistError = exports.InvalidTransactionsResponseError = exports.InvalidTransactionResponseError = exports.MissingTransactionIdError = exports.ClientDomainWithMemoError = exports.InvalidMemoError = exports.AssetNotSupportedError = exports.ServerRequestFailedError = void 0;
2249
+ exports.Sep7UriTypeNotSupportedError = exports.Sep7LongMsgError = exports.Sep7InvalidUriError = exports.AuthHeaderClientDomainRequiredError = exports.AuthHeaderSigningKeypairRequiredError = exports.DomainSigningModifiedError = void 0;
2250
2250
  var axios_1 = __importDefault(__webpack_require__(/*! axios */ "../../node_modules/axios/dist/node/axios.cjs"));
2251
2251
  var Utils_1 = __webpack_require__(/*! ../Utils */ "./src/walletSdk/Utils/index.ts");
2252
2252
  var ServerRequestFailedError = /** @class */ (function (_super) {
@@ -2592,6 +2592,59 @@ var DeviceKeyEqualsMasterKeyError = /** @class */ (function (_super) {
2592
2592
  return DeviceKeyEqualsMasterKeyError;
2593
2593
  }(Error));
2594
2594
  exports.DeviceKeyEqualsMasterKeyError = DeviceKeyEqualsMasterKeyError;
2595
+ var DuplicateRecoverySignerError = /** @class */ (function (_super) {
2596
+ __extends(DuplicateRecoverySignerError, _super);
2597
+ function DuplicateRecoverySignerError(serverKeys, signerKey) {
2598
+ var _this = _super.call(this, "Recovery servers [".concat(serverKeys.join(", "), "] all returned the signer key ").concat(signerKey, ". SEP-30 requires each ") +
2599
+ "server to generate a unique signing key, so this is either one " +
2600
+ "endpoint configured under several keys in the recovery server map, " +
2601
+ "or a server returning a key it does not control. Registering this " +
2602
+ "set would install one signer where several were intended, so the " +
2603
+ "recovery servers would together carry less weight than the " +
2604
+ "thresholds written alongside them were sized for, and may no longer " +
2605
+ "reach the account's high threshold once the device is lost") || this;
2606
+ Object.setPrototypeOf(_this, DuplicateRecoverySignerError.prototype);
2607
+ return _this;
2608
+ }
2609
+ return DuplicateRecoverySignerError;
2610
+ }(Error));
2611
+ exports.DuplicateRecoverySignerError = DuplicateRecoverySignerError;
2612
+ var RecoverySignerEqualsDeviceKeyError = /** @class */ (function (_super) {
2613
+ __extends(RecoverySignerEqualsDeviceKeyError, _super);
2614
+ function RecoverySignerEqualsDeviceKeyError(serverKey, signerKey) {
2615
+ var _this = _super.call(this, "Recovery server '".concat(serverKey, "' returned the device key ").concat(signerKey, " ") +
2616
+ "as its signer. The recovery signer must differ from the device key, " +
2617
+ "otherwise the device and the server collapse into a single signer") || this;
2618
+ Object.setPrototypeOf(_this, RecoverySignerEqualsDeviceKeyError.prototype);
2619
+ return _this;
2620
+ }
2621
+ return RecoverySignerEqualsDeviceKeyError;
2622
+ }(Error));
2623
+ exports.RecoverySignerEqualsDeviceKeyError = RecoverySignerEqualsDeviceKeyError;
2624
+ var DuplicateAccountSignerError = /** @class */ (function (_super) {
2625
+ __extends(DuplicateAccountSignerError, _super);
2626
+ function DuplicateAccountSignerError(address) {
2627
+ var _this = _super.call(this, "Account signer ".concat(address, " is listed more than once. Stellar stores ") +
2628
+ "signers keyed by public key and SetOptions overwrites rather than " +
2629
+ "accumulates, so repeated entries would install one signer carrying " +
2630
+ "one weight, not several") || this;
2631
+ Object.setPrototypeOf(_this, DuplicateAccountSignerError.prototype);
2632
+ return _this;
2633
+ }
2634
+ return DuplicateAccountSignerError;
2635
+ }(Error));
2636
+ exports.DuplicateAccountSignerError = DuplicateAccountSignerError;
2637
+ var SignerKeyEqualsMasterKeyError = /** @class */ (function (_super) {
2638
+ __extends(SignerKeyEqualsMasterKeyError, _super);
2639
+ function SignerKeyEqualsMasterKeyError(address) {
2640
+ var _this = _super.call(this, "Account signer ".concat(address, " is the account's own master key, which ") +
2641
+ "cannot be added as a signer of itself") || this;
2642
+ Object.setPrototypeOf(_this, SignerKeyEqualsMasterKeyError.prototype);
2643
+ return _this;
2644
+ }
2645
+ return SignerKeyEqualsMasterKeyError;
2646
+ }(Error));
2647
+ exports.SignerKeyEqualsMasterKeyError = SignerKeyEqualsMasterKeyError;
2595
2648
  var NoAccountAndNoSponsorError = /** @class */ (function (_super) {
2596
2649
  __extends(NoAccountAndNoSponsorError, _super);
2597
2650
  function NoAccountAndNoSponsorError() {
@@ -4171,6 +4224,15 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
4171
4224
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
4172
4225
  }
4173
4226
  };
4227
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
4228
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4229
+ if (ar || !(i in from)) {
4230
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
4231
+ ar[i] = from[i];
4232
+ }
4233
+ }
4234
+ return to.concat(ar || Array.prototype.slice.call(from));
4235
+ };
4174
4236
  Object.defineProperty(exports, "__esModule", ({ value: true }));
4175
4237
  exports.Recovery = void 0;
4176
4238
  var AccountRecover_1 = __webpack_require__(/*! ./AccountRecover */ "./src/walletSdk/Recovery/AccountRecover.ts");
@@ -4178,6 +4240,37 @@ var Auth_1 = __webpack_require__(/*! ../Auth */ "./src/walletSdk/Auth/index.ts")
4178
4240
  var Exceptions_1 = __webpack_require__(/*! ../Exceptions */ "./src/walletSdk/Exceptions/index.ts");
4179
4241
  var Horizon_1 = __webpack_require__(/*! ../Horizon */ "./src/walletSdk/Horizon/index.ts");
4180
4242
  var Utils_1 = __webpack_require__(/*! ../Utils */ "./src/walletSdk/Utils/index.ts");
4243
+ /**
4244
+ * Assert that a signer set can be installed as written.
4245
+ *
4246
+ * Stellar stores account signers as a set keyed by public key, and `SetOptions`
4247
+ * is an upsert rather than an append — it overwrites a repeated key instead of
4248
+ * summing the weights. A set containing the same address twice therefore
4249
+ * installs one signer, while the thresholds chosen for the intended set are
4250
+ * written alongside it regardless. Because the same transaction also zeroes the
4251
+ * master key, repairing that mismatch takes a further `SetOptions`, itself
4252
+ * authorized at the account's high threshold — so it is possible only while the
4253
+ * remaining signers can still reach `high`, and impossible once they cannot.
4254
+ * @param {string} accountAddress - Address of the account whose master key is being locked.
4255
+ * @param {AccountSigner[]} accountSigners - The signer set about to be installed.
4256
+ * @throws {DuplicateAccountSignerError} If any address appears more than once.
4257
+ * @throws {SignerKeyEqualsMasterKeyError} If any address is the account itself.
4258
+ * @returns {void}
4259
+ */
4260
+ var validateAccountSigners = function (accountAddress, accountSigners) {
4261
+ var seen = {};
4262
+ accountSigners.forEach(function (_a) {
4263
+ var address = _a.address;
4264
+ var publicKey = address.publicKey;
4265
+ if (publicKey === accountAddress) {
4266
+ throw new Exceptions_1.SignerKeyEqualsMasterKeyError(publicKey);
4267
+ }
4268
+ if (seen[publicKey]) {
4269
+ throw new Exceptions_1.DuplicateAccountSignerError(publicKey);
4270
+ }
4271
+ seen[publicKey] = true;
4272
+ });
4273
+ };
4181
4274
  /**
4182
4275
  * Used for Account Recovery using Sep-30.
4183
4276
  * @see {@link https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0030.md}
@@ -4222,13 +4315,26 @@ var Recovery = /** @class */ (function (_super) {
4222
4315
  * **Warning**: This transaction will lock master key of the account. Make sure you have access to
4223
4316
  * specified [RecoverableWalletConfig.deviceAddress]
4224
4317
  *
4318
+ * The returned transaction is unsigned — sign it and submit it yourself. It sets signers and
4319
+ * thresholds, so it needs signatures meeting the account's current **high** threshold rather
4320
+ * than the master key specifically, and the sponsor must sign too when
4321
+ * [RecoverableWalletConfig.sponsorAddress] is set. See [RecoverableWallet] for the cases.
4322
+ *
4323
+ * The signer set returned by the recovery servers is validated before the transaction is built,
4324
+ * because undoing the master key lock afterwards takes a further `SetOptions` meeting the
4325
+ * account's high threshold, which the collapsed signer set may no longer be able to reach.
4326
+ *
4225
4327
  * This transaction can be sponsored.
4226
4328
  * @param {RecoverableWalletConfig} config - The configuration for recoverable wallet.
4329
+ * @throws {DeviceKeyEqualsMasterKeyError} If the device address is the account address.
4330
+ * @throws {DuplicateRecoverySignerError} If two or more recovery servers return the same signer key.
4331
+ * @throws {RecoverySignerEqualsDeviceKeyError} If a recovery server returns the device key.
4332
+ * @throws {SignerKeyEqualsMasterKeyError} If a recovery server returns the account's own key.
4227
4333
  * @returns {Promise<RecoverableWallet>} The wallet.
4228
4334
  */
4229
4335
  Recovery.prototype.createRecoverableWallet = function (config) {
4230
4336
  return __awaiter(this, void 0, void 0, function () {
4231
- var recoverySigners, accountSigners, transaction;
4337
+ var enrolled, recoverySigners, accountSigners, transaction;
4232
4338
  return __generator(this, function (_a) {
4233
4339
  switch (_a.label) {
4234
4340
  case 0:
@@ -4237,7 +4343,12 @@ var Recovery = /** @class */ (function (_super) {
4237
4343
  }
4238
4344
  return [4 /*yield*/, this.enrollWithRecoveryServer(config.accountAddress, config.accountIdentity)];
4239
4345
  case 1:
4240
- recoverySigners = _a.sent();
4346
+ enrolled = _a.sent();
4347
+ this.validateEnrolledSigners(enrolled, config.deviceAddress.publicKey);
4348
+ recoverySigners = enrolled.map(function (_a) {
4349
+ var signerKey = _a.signerKey;
4350
+ return signerKey;
4351
+ });
4241
4352
  accountSigners = recoverySigners.map(function (rs) { return ({
4242
4353
  address: Horizon_1.PublicKeypair.fromPublicKey(rs),
4243
4354
  weight: config.signerWeight.recoveryServer,
@@ -4311,6 +4422,9 @@ var Recovery = /** @class */ (function (_super) {
4311
4422
  * @param {AccountThreshold} accountThreshold - Low, medium, and high thresholds to set on the account.
4312
4423
  * @param {AccountKeypair} [sponsorAddress] - Stellar address of the account sponsoring this transaction.
4313
4424
  * @param {(builder: CommonBuilder) => CommonBuilder} [builderExtra] - Stellar address of the account sponsoring this transaction.
4425
+ * @throws {DuplicateAccountSignerError} If the same address appears more than once in [accountSigners].
4426
+ * @throws {SignerKeyEqualsMasterKeyError} If [accountSigners] contains [account] itself.
4427
+ * @throws {NoAccountAndNoSponsorError} If the account does not exist and no sponsor is given.
4314
4428
  * @returns {Promise<Transaction>} The built transaction.
4315
4429
  */
4316
4430
  Recovery.prototype.registerRecoveryServerSigners = function (account, accountSigners, accountThreshold, sponsorAddress, builderExtra) {
@@ -4321,6 +4435,7 @@ var Recovery = /** @class */ (function (_super) {
4321
4435
  return __generator(this, function (_b) {
4322
4436
  switch (_b.label) {
4323
4437
  case 0:
4438
+ validateAccountSigners(account.publicKey, accountSigners);
4324
4439
  accountInfo = undefined;
4325
4440
  _b.label = 1;
4326
4441
  case 1:
@@ -4376,7 +4491,9 @@ var Recovery = /** @class */ (function (_super) {
4376
4491
  * [SEP-30](https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0030.md).
4377
4492
  * @param {AccountKeypair} account - Account being registerd.
4378
4493
  * @param {RecoveryIdentityMap} identityMap - map of identities to recovery keys.
4379
- * @returns {Promise<string[]>} List of recovery signer public keys.
4494
+ * @returns {Promise<EnrolledRecoverySigner[]>} Each recovery signer public key paired with the
4495
+ * server that returned it. The pairing is kept so that cross-server validation can name the
4496
+ * server responsible when two of them return the same key.
4380
4497
  */
4381
4498
  Recovery.prototype.enrollWithRecoveryServer = function (account, identityMap) {
4382
4499
  return __awaiter(this, void 0, void 0, function () {
@@ -4420,13 +4537,49 @@ var Recovery = /** @class */ (function (_super) {
4420
4537
  case 4:
4421
4538
  e_3 = _a.sent();
4422
4539
  throw new Exceptions_1.ServerRequestFailedError(e_3);
4423
- case 5: return [2 /*return*/, this.getLatestRecoverySigner(recoveryAccount.signers)];
4540
+ case 5: return [2 /*return*/, {
4541
+ serverKey: key,
4542
+ signerKey: this.getLatestRecoverySigner(recoveryAccount.signers),
4543
+ }];
4424
4544
  }
4425
4545
  });
4426
4546
  }); }))];
4427
4547
  });
4428
4548
  });
4429
4549
  };
4550
+ /**
4551
+ * Assert that the recovery servers collectively returned a usable signer set.
4552
+ *
4553
+ * SEP-30 has each server generate its own unique signing key for the account,
4554
+ * so the same key coming back from two servers is a protocol violation, not a
4555
+ * judgement call. Left unchecked it halves the recovery signer set while the
4556
+ * thresholds sized for the full set are written anyway, which is only
4557
+ * discovered when the device is lost and recovery is attempted.
4558
+ * @private
4559
+ * @param {EnrolledRecoverySigner[]} enrolled - Signer keys paired with the servers that returned them.
4560
+ * @param {string} deviceAddress - Address being added as the device signer.
4561
+ * @throws {DuplicateRecoverySignerError} If two or more servers returned the same key.
4562
+ * @throws {RecoverySignerEqualsDeviceKeyError} If a server returned the device key.
4563
+ * @returns {void}
4564
+ */
4565
+ Recovery.prototype.validateEnrolledSigners = function (enrolled, deviceAddress) {
4566
+ var serverKeysBySigner = {};
4567
+ enrolled.forEach(function (_a) {
4568
+ var serverKey = _a.serverKey, signerKey = _a.signerKey;
4569
+ serverKeysBySigner[signerKey] = __spreadArray(__spreadArray([], (serverKeysBySigner[signerKey] || []), true), [
4570
+ serverKey,
4571
+ ], false);
4572
+ });
4573
+ Object.keys(serverKeysBySigner).forEach(function (signerKey) {
4574
+ var serverKeys = serverKeysBySigner[signerKey];
4575
+ if (serverKeys.length > 1) {
4576
+ throw new Exceptions_1.DuplicateRecoverySignerError(serverKeys, signerKey);
4577
+ }
4578
+ if (signerKey === deviceAddress) {
4579
+ throw new Exceptions_1.RecoverySignerEqualsDeviceKeyError(serverKeys[0], signerKey);
4580
+ }
4581
+ });
4582
+ };
4430
4583
  Recovery.prototype.getLatestRecoverySigner = function (signers) {
4431
4584
  if (signers.length === 0) {
4432
4585
  throw new Exceptions_1.NoAccountSignersError();
@@ -90717,7 +90870,7 @@ function includes(array, value) {
90717
90870
  /***/ ((module) => {
90718
90871
 
90719
90872
  "use strict";
90720
- module.exports = JSON.parse('{"name":"@stellar/typescript-wallet-sdk","version":"5.0.0","engines":{"node":">=22.12.0"},"browser":"./lib/bundle_browser.js","main":"./lib/bundle.js","types":"./lib/index.d.ts","license":"Apache-2.0","private":false,"devDependencies":{"@babel/preset-env":"^7.20.2","@babel/preset-typescript":"^7.23.3","@stellar/prettier-config":"^1.0.1","@stellar/tsconfig":"^1.0.2","@types/jest":"^29.4.0","@types/lodash":"^4.14.194","@types/node":"^22.10.2","@types/sinon":"^10.0.15","@typescript-eslint/eslint-plugin":"^6.7.5","@typescript-eslint/parser":"^6.7.5","babel-jest":"^29.4.1","crypto-browserify":"^3.12.0","dotenv":"^16.3.1","eslint":"^8.51.0","eslint-config-prettier":"^9.0.0","eslint-plugin-jsdoc":"^46.8.2","express":"^4.19.2","husky":"^8.0.0","jest":"^29.4.1","lint-staged":"^14.0.1","npm-run-all":"^4.1.5","playwright":"^1.43.1","prettier":"^2.0.5","pretty-quick":"^2.0.1","process":"^0.11.10","sinon":"^15.1.0","smol-toml":"^1.7.1","stream-browserify":"^3.0.0","ts-jest":"^29.0.5","ts-loader":"^9.4.2","ts-node":"^10.9.1","tslib":"^2.5.0","typescript":"^5.7.3","webpack":"^5.83.1","webpack-cli":"^5.1.1"},"dependencies":{"@stablelib/base64":"^2.0.0","@stablelib/utf8":"^2.0.0","@stellar/stellar-sdk":"17.0.1","axios":"^1.4.0","https-browserify":"^1.0.0","jws":"^4.0.0","lodash":"^4.17.21","query-string":"^7.1.3","stream-http":"^3.2.0","tweetnacl":"^1.0.3","uint8array-extras":"^1.5.0","url":"^0.11.0","util":"^0.12.5","utility-types":"^3.10.0","vm-browserify":"^1.1.2"},"scripts":{"test":"jest --watchAll","test:ci":"jest --ci","test:e2e:ci":"jest --config jest.e2e.config.js --ci","test:recovery:ci":"jest --config jest.integration.config.js recovery.test.ts --ci","test:anchorplatform:ci":"yarn jest --config jest.integration.config.js anchorplatform.test.ts --ci","build:web":"webpack --config webpack.config.js","build:node":"webpack --env NODE=true --config webpack.config.js","build":"run-p build:web build:node","example:sep10Server":"ts-node examples/sep10/sep10Server.ts","example:sep10Wallet":"ts-node examples/sep10/sep10Wallet.ts","example:sep24":"ts-node examples/sep24/sep24.ts","example:sep12":"ts-node examples/sep12/sep12.ts"}}');
90873
+ module.exports = JSON.parse('{"name":"@stellar/typescript-wallet-sdk","version":"5.1.0","engines":{"node":">=22.12.0"},"browser":"./lib/bundle_browser.js","main":"./lib/bundle.js","types":"./lib/index.d.ts","license":"Apache-2.0","private":false,"devDependencies":{"@babel/preset-env":"^7.20.2","@babel/preset-typescript":"^7.23.3","@stellar/prettier-config":"^1.0.1","@stellar/tsconfig":"^1.0.2","@types/jest":"^29.4.0","@types/lodash":"^4.14.194","@types/node":"^22.10.2","@types/sinon":"^10.0.15","@typescript-eslint/eslint-plugin":"^6.7.5","@typescript-eslint/parser":"^6.7.5","babel-jest":"^29.4.1","crypto-browserify":"^3.12.0","dotenv":"^16.3.1","eslint":"^8.51.0","eslint-config-prettier":"^9.0.0","eslint-plugin-jsdoc":"^46.8.2","express":"^4.19.2","husky":"^8.0.0","jest":"^29.4.1","lint-staged":"^14.0.1","npm-run-all":"^4.1.5","playwright":"^1.43.1","prettier":"^2.0.5","pretty-quick":"^2.0.1","process":"^0.11.10","sinon":"^15.1.0","smol-toml":"^1.7.1","stream-browserify":"^3.0.0","ts-jest":"^29.0.5","ts-loader":"^9.4.2","ts-node":"^10.9.1","tslib":"^2.5.0","typescript":"^5.7.3","webpack":"^5.83.1","webpack-cli":"^5.1.1"},"dependencies":{"@stablelib/base64":"^2.0.0","@stablelib/utf8":"^2.0.0","@stellar/stellar-sdk":"17.0.1","axios":"^1.4.0","https-browserify":"^1.0.0","jws":"^4.0.0","lodash":"^4.17.21","query-string":"^7.1.3","stream-http":"^3.2.0","tweetnacl":"^1.0.3","uint8array-extras":"^1.5.0","url":"^0.11.0","util":"^0.12.5","utility-types":"^3.10.0","vm-browserify":"^1.1.2"},"scripts":{"test":"jest --watchAll","test:ci":"jest --ci","test:e2e:ci":"jest --config jest.e2e.config.js --ci","test:recovery:ci":"jest --config jest.integration.config.js recovery.test.ts --ci","test:anchorplatform:ci":"yarn jest --config jest.integration.config.js anchorplatform.test.ts --ci","build:web":"webpack --config webpack.config.js","build:node":"webpack --env NODE=true --config webpack.config.js","build":"run-p build:web build:node","example:sep10Server":"ts-node examples/sep10/sep10Server.ts","example:sep10Wallet":"ts-node examples/sep10/sep10Wallet.ts","example:sep24":"ts-node examples/sep24/sep24.ts","example:sep12":"ts-node examples/sep12/sep12.ts"}}');
90721
90874
 
90722
90875
  /***/ }),
90723
90876