@weblock-wallet/sdk 0.1.68 → 0.1.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -28,7 +28,8 @@ declare enum SDKErrorCode {
28
28
  WALLET_RETRIEVAL_FAILED = "WALLET_RETRIEVAL_FAILED",
29
29
  NOT_LOGGED_IN = "NOT_LOGGED_IN",
30
30
  NETWORK_SWITCH_FAILED = "NETWORK_SWITCH_FAILED",
31
- TRANSACTION_FAILED = "TRANSACTION_FAILED"
31
+ TRANSACTION_FAILED = "TRANSACTION_FAILED",
32
+ INVALID_PIN = "INVALID_PIN"
32
33
  }
33
34
  declare class SDKError extends Error {
34
35
  readonly code: SDKErrorCode;
package/dist/index.d.ts CHANGED
@@ -28,7 +28,8 @@ declare enum SDKErrorCode {
28
28
  WALLET_RETRIEVAL_FAILED = "WALLET_RETRIEVAL_FAILED",
29
29
  NOT_LOGGED_IN = "NOT_LOGGED_IN",
30
30
  NETWORK_SWITCH_FAILED = "NETWORK_SWITCH_FAILED",
31
- TRANSACTION_FAILED = "TRANSACTION_FAILED"
31
+ TRANSACTION_FAILED = "TRANSACTION_FAILED",
32
+ INVALID_PIN = "INVALID_PIN"
32
33
  }
33
34
  declare class SDKError extends Error {
34
35
  readonly code: SDKErrorCode;
package/dist/index.js CHANGED
@@ -104064,6 +104064,7 @@ var SDKErrorCode = /* @__PURE__ */ ((SDKErrorCode2) => {
104064
104064
  SDKErrorCode2["NOT_LOGGED_IN"] = "NOT_LOGGED_IN";
104065
104065
  SDKErrorCode2["NETWORK_SWITCH_FAILED"] = "NETWORK_SWITCH_FAILED";
104066
104066
  SDKErrorCode2["TRANSACTION_FAILED"] = "TRANSACTION_FAILED";
104067
+ SDKErrorCode2["INVALID_PIN"] = "INVALID_PIN";
104067
104068
  return SDKErrorCode2;
104068
104069
  })(SDKErrorCode || {});
104069
104070
  var SDKError = class extends Error {
@@ -104253,91 +104254,69 @@ var WalletService = class {
104253
104254
  );
104254
104255
  }
104255
104256
  }
104257
+ // client/src/core/services/wallet.ts
104258
+ // Full version of retrieveWallet() with the address-mismatch guard added.
104259
+ // Assumes existing imports/types in this file:
104260
+ // - SDKError, SDKErrorCode
104261
+ // - LocalForage
104262
+ // - STORAGE_KEYS
104263
+ // - Crypto (encryptShare/decryptShare)
104264
+ // - Secrets (combine)
104265
+ // - Wallet (ethers Wallet or equivalent)
104266
+ // - this.walletClient.getWallet()
104267
+ // - this.orgHost, this.walletAddress
104268
+ // - this.isSixDigitPin(password)
104256
104269
  async retrieveWallet(password) {
104257
104270
  try {
104258
- const accessToken = await LocalForage.get(
104259
- STORAGE_KEYS.accessToken(this.orgHost)
104260
- );
104261
- if (!accessToken) {
104262
- throw new SDKError("Access token not found", "AUTH_REQUIRED" /* AUTH_REQUIRED */);
104263
- }
104264
104271
  const firebaseId = await LocalForage.get(
104265
104272
  STORAGE_KEYS.firebaseId(this.orgHost)
104266
104273
  );
104267
104274
  if (!firebaseId) {
104268
104275
  throw new SDKError("Not logged in", "AUTH_REQUIRED" /* AUTH_REQUIRED */);
104269
104276
  }
104270
- if (!this.isSixDigitPin(password)) {
104277
+ if (!password || !this.isSixDigitPin(password)) {
104271
104278
  throw new SDKError(
104272
104279
  "PIN must be a 6-digit number",
104273
104280
  "INVALID_PARAMS" /* INVALID_PARAMS */
104274
104281
  );
104275
104282
  }
104276
- const decryptShareOrThrow = (encryptedShare) => {
104277
- try {
104278
- return Crypto.decryptShare(encryptedShare, password, firebaseId);
104279
- } catch (e7) {
104280
- if (this.isInvalidPasswordError(e7)) {
104281
- throw new SDKError(
104282
- "Incorrect PIN code",
104283
- "INVALID_PASSWORD" /* INVALID_PASSWORD */,
104284
- e7
104285
- );
104286
- }
104287
- throw e7;
104288
- }
104289
- };
104290
104283
  const walletInfo = await this.walletClient.getWallet();
104291
- let share2 = await LocalForage.get(
104292
- STORAGE_KEYS.share2(this.orgHost)
104284
+ const share1 = walletInfo.share1;
104285
+ const serverAddr = walletInfo.address?.toLowerCase?.() ?? "";
104286
+ if (!share1) {
104287
+ throw new SDKError(
104288
+ "Wallet is not initialized on the server",
104289
+ "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */
104290
+ );
104291
+ }
104292
+ const encryptedShare2 = await LocalForage.get(
104293
+ STORAGE_KEYS.encryptedShare2(this.orgHost)
104293
104294
  );
104294
- if (!share2) {
104295
- const encryptedShare2 = await LocalForage.get(
104296
- STORAGE_KEYS.encryptedShare2(this.orgHost)
104295
+ if (!encryptedShare2) {
104296
+ throw new SDKError(
104297
+ "Local recovery material is missing on this device",
104298
+ "RECOVERY_NOT_AVAILABLE" /* RECOVERY_NOT_AVAILABLE */
104297
104299
  );
104298
- if (encryptedShare2) {
104299
- share2 = decryptShareOrThrow(encryptedShare2);
104300
- await LocalForage.save(STORAGE_KEYS.share2(this.orgHost), share2);
104301
- } else {
104302
- const share3 = decryptShareOrThrow(
104303
- walletInfo.encryptedShare3
104304
- );
104305
- const privateKey2 = await Secrets.combine([
104306
- walletInfo.share1,
104307
- share3
104308
- ]);
104309
- const wallet2 = new Wallet(privateKey2);
104310
- const newShares = await Secrets.split(wallet2.privateKey, 3, 2);
104311
- const [newShare1, newShare2, newShare3] = newShares;
104312
- await this.walletClient.updateWalletKey({
104313
- share1: newShare1,
104314
- encryptedShare3: Crypto.encryptShare(
104315
- newShare3,
104316
- password,
104317
- firebaseId
104318
- )
104319
- });
104320
- await LocalForage.save(STORAGE_KEYS.share2(this.orgHost), newShare2);
104321
- await LocalForage.save(
104322
- STORAGE_KEYS.encryptedShare2(this.orgHost),
104323
- Crypto.encryptShare(newShare2, password, firebaseId)
104324
- );
104325
- await this.ensureDeviceEncryptedShare2(newShare2, firebaseId);
104326
- this.walletAddress = wallet2.address;
104327
- await LocalForage.save(
104328
- STORAGE_KEYS.walletAddress(this.orgHost),
104329
- wallet2.address
104330
- );
104331
- await LocalForage.delete(STORAGE_KEYS.share2(this.orgHost));
104332
- return wallet2.address;
104333
- }
104334
104300
  }
104335
- const privateKey = await Secrets.combine([
104336
- walletInfo.share1,
104337
- share2
104338
- ]);
104301
+ let share2;
104302
+ try {
104303
+ share2 = Crypto.decryptShare(encryptedShare2, password, firebaseId);
104304
+ } catch (e7) {
104305
+ throw new SDKError(
104306
+ "Invalid PIN or corrupted local recovery material",
104307
+ "INVALID_PIN" /* INVALID_PIN */,
104308
+ e7
104309
+ );
104310
+ }
104311
+ const privateKey = await Secrets.combine([share1, share2]);
104339
104312
  const wallet = new Wallet(privateKey);
104340
- await this.ensureDeviceEncryptedShare2(share2, firebaseId);
104313
+ const derivedAddr = wallet.address.toLowerCase();
104314
+ if (serverAddr && derivedAddr !== serverAddr) {
104315
+ throw new SDKError(
104316
+ `Recovered wallet address mismatch. server=${serverAddr} derived=${derivedAddr}`,
104317
+ "WALLET_RECOVERY_FAILED" /* WALLET_RECOVERY_FAILED */
104318
+ );
104319
+ }
104341
104320
  this.walletAddress = wallet.address;
104342
104321
  await LocalForage.save(
104343
104322
  STORAGE_KEYS.walletAddress(this.orgHost),
@@ -104346,8 +104325,6 @@ var WalletService = class {
104346
104325
  await LocalForage.delete(STORAGE_KEYS.share2(this.orgHost));
104347
104326
  return wallet.address;
104348
104327
  } catch (error) {
104349
- this.walletAddress = null;
104350
- await LocalForage.delete(STORAGE_KEYS.share2(this.orgHost));
104351
104328
  if (error instanceof SDKError) throw error;
104352
104329
  throw new SDKError(
104353
104330
  "Failed to retrieve wallet",
@@ -104407,6 +104384,17 @@ var WalletService = class {
104407
104384
  share2
104408
104385
  ]);
104409
104386
  const wallet = new Wallet(privateKey);
104387
+ const serverAddr = walletInfo.address?.toLowerCase?.() ?? "";
104388
+ const derivedAddr = wallet.address.toLowerCase();
104389
+ const cachedAddr = await LocalForage.get(
104390
+ STORAGE_KEYS.walletAddress(this.orgHost)
104391
+ ) ?? null;
104392
+ if (serverAddr && derivedAddr !== serverAddr) {
104393
+ throw new SDKError(
104394
+ `Device recovery material does not match server wallet. server=${serverAddr} derived=${derivedAddr} cached=${cachedAddr ?? "null"}`,
104395
+ "RECOVERY_NOT_AVAILABLE" /* RECOVERY_NOT_AVAILABLE */
104396
+ );
104397
+ }
104410
104398
  const newShares = await Secrets.split(wallet.privateKey, 3, 2);
104411
104399
  const [newShare1, newShare2, newShare3] = newShares;
104412
104400
  await this.walletClient.updateWalletKey({
@@ -106570,6 +106558,8 @@ var InternalCoreImpl = class {
106570
106558
  getAddress: () => this.walletService.getAddress(),
106571
106559
  create: (password) => this.walletService.create(password),
106572
106560
  retrieveWallet: (password) => this.walletService.retrieveWallet(password),
106561
+ // Fix: expose resetPin to InternalCore wallet facade
106562
+ resetPin: (newPassword) => this.walletService.resetPin(newPassword),
106573
106563
  getBalance: (address, chainId) => this.walletService.getBalance(address, chainId),
106574
106564
  getTokenBalance: (tokenAddress, walletAddress, chainId) => this.walletService.getTokenBalance(tokenAddress, walletAddress, chainId),
106575
106565
  sendTransaction: (params) => this.walletService.sendTransaction(params),
@@ -106592,24 +106582,13 @@ var InternalCoreImpl = class {
106592
106582
  this.asset = {
106593
106583
  transfer: (params) => this.assetService.transfer(params),
106594
106584
  addToken: (params) => this.assetService.addToken(params),
106595
- // New ERC20 methods
106596
106585
  getTokenBalance: (params) => this.assetService.getTokenBalance(params),
106597
- // ERC1155 / RBT helpers
106598
106586
  getERC1155Balance: (params) => this.assetService.getERC1155Balance(params),
106599
106587
  getRbtClaimable: (params) => this.assetService.getRbtClaimable(params),
106600
106588
  claimRbt: (params) => this.assetService.claimRbt(params),
106601
106589
  approveToken: (params) => this.assetService.approveToken(params),
106602
106590
  getAllowance: (params) => this.assetService.getAllowance(params),
106603
- // getTokenInfo: (params: TokenInfoParams) =>
106604
- // this.assetService.getTokenInfo(params),
106605
106591
  addNFTCollection: (params) => this.assetService.addNFTCollection(params),
106606
- // checkSecurityTokenCompliance: (params: {
106607
- // networkId: string
106608
- // tokenAddress: string
106609
- // from: string
106610
- // to: string
106611
- // amount: string
106612
- // }) => this.assetService.checkSecurityTokenCompliance(params),
106613
106592
  on: (event, listener) => this.assetService.on(event, listener),
106614
106593
  off: (event, listener) => this.assetService.off(event, listener),
106615
106594
  getTokenInfo: (params) => this.assetService.getTokenInfo(params),