@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.cjs +59 -80
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +59 -80
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
-
|
|
104292
|
-
|
|
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 (!
|
|
104295
|
-
|
|
104296
|
-
|
|
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
|
-
|
|
104336
|
-
|
|
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
|
-
|
|
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),
|