dop-wallet-v6 1.2.9 → 1.2.11

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.
@@ -1,11 +1,32 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
1
3
  import { DopWallet, AbstractWallet, AddressData, Commitment } from 'dop-engine-v3';
2
4
  import { DopWalletInfo, Chain } from 'dop-sharedmodels-v3';
5
+ export declare const testCircomlibjs: () => Promise<boolean>;
6
+ export declare const createDopWalletSafe: (encryptionKey: string, mnemonic: string, creationBlockNumbers: Optional<MapType<number>>, dopWalletDerivationIndex?: number, timeout?: number) => Promise<DopWalletInfo>;
7
+ /**
8
+ * Create a new DOP wallet with automatic mnemonic generation or import existing mnemonic
9
+ *
10
+ * @param encryptionKey - 32-byte Buffer or Uint8Array for wallet encryption
11
+ * @param options - Wallet creation options
12
+ * @returns Promise<{walletInfo: DopWalletInfo, mnemonic: string}>
13
+ */
14
+ export declare const createOrImportDopWallet: (encryptionKey: string | Buffer | Uint8Array, options?: {
15
+ mnemonic?: string;
16
+ creationBlockNumbers?: Optional<MapType<number>>;
17
+ dopWalletDerivationIndex?: number;
18
+ timeout?: number;
19
+ mnemonicStrength?: 128 | 192 | 256;
20
+ }) => Promise<{
21
+ walletInfo: DopWalletInfo;
22
+ mnemonic: string;
23
+ }>;
3
24
  export declare const awaitWalletScan: (walletID: string, chain: Chain) => Promise<unknown>;
4
25
  export declare const awaitMultipleWalletScans: (walletID: string, chain: Chain, numScans: number) => Promise<void>;
5
26
  export declare const walletForID: (id: string) => AbstractWallet;
6
27
  export declare const fullWalletForID: (id: string) => DopWallet;
7
28
  export declare const viewOnlyWalletForID: (id: string) => DopWallet;
8
- export declare const createWalletFromTransaction: (leaf: Commitment, viewingPrivateKey: Uint8Array, chain: any, encryptionKey: string, mnemonic: string, index?: number) => Promise<any>;
29
+ export declare const createWalletFromTransaction: (leaf: Commitment, viewingPrivateKey: Uint8Array, chain: Chain, encryptionKey: string, mnemonic: string, index?: number) => Promise<any>;
9
30
  export declare const createDopWallet: (encryptionKey: string, mnemonic: string, creationBlockNumbers: Optional<MapType<number>>, dopWalletDerivationIndex?: number) => Promise<DopWalletInfo>;
10
31
  export declare const createViewOnlyDopWallet: (encryptionKey: string, shareableViewingKey: string, creationBlockNumbers: Optional<MapType<number>>) => Promise<DopWalletInfo>;
11
32
  export declare const loadWalletByID: (encryptionKey: string, dopWalletID: string, isViewOnlyWallet: boolean) => Promise<DopWalletInfo>;
@@ -1,12 +1,145 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getWalletShareableViewingKey = exports.getDopAddress = exports.validateEthAddress = exports.assertValidEthAddress = exports.validateDopAddress = exports.assertValidDopAddress = exports.signWithWalletViewingKey = exports.getDopWalletPrivateViewingKey = exports.getDopWalletAddressData = exports.getWalletMnemonic = exports.deleteWalletByID = exports.unloadWalletByID = exports.loadWalletByID = exports.createViewOnlyDopWallet = exports.createDopWallet = exports.createWalletFromTransaction = exports.viewOnlyWalletForID = exports.fullWalletForID = exports.walletForID = exports.awaitMultipleWalletScans = exports.awaitWalletScan = void 0;
26
+ exports.getWalletShareableViewingKey = exports.getDopAddress = exports.validateEthAddress = exports.assertValidEthAddress = exports.validateDopAddress = exports.assertValidDopAddress = exports.signWithWalletViewingKey = exports.getDopWalletPrivateViewingKey = exports.getDopWalletAddressData = exports.getWalletMnemonic = exports.deleteWalletByID = exports.unloadWalletByID = exports.loadWalletByID = exports.createViewOnlyDopWallet = exports.createDopWallet = exports.createWalletFromTransaction = exports.viewOnlyWalletForID = exports.fullWalletForID = exports.walletForID = exports.awaitMultipleWalletScans = exports.awaitWalletScan = exports.createOrImportDopWallet = exports.createDopWalletSafe = exports.testCircomlibjs = void 0;
4
27
  const dop_engine_v3_1 = require("dop-engine-v3");
5
28
  const dop_sharedmodels_v3_1 = require("dop-sharedmodels-v3");
6
29
  const balance_update_1 = require("./balance-update");
7
30
  const error_1 = require("../../../utils/error");
8
31
  const ethers_1 = require("ethers");
9
32
  const engine_1 = require("../core/engine");
33
+ // CRITICAL: Test circomlibjs initialization for React Native compatibility
34
+ const testCircomlibjs = async () => {
35
+ try {
36
+ console.log('Testing circomlibjs initialization...');
37
+ // Dynamic import to ensure shims are loaded first
38
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, import/no-extraneous-dependencies
39
+ const { poseidon, eddsa } = await Promise.resolve().then(() => __importStar(require('circomlibjs')));
40
+ // Test basic poseidon hash operation
41
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
42
+ const testResult = poseidon([1n, 2n]);
43
+ console.log('Poseidon test result:', testResult.toString());
44
+ // Test eddsa operations
45
+ const testPrivateKey = new Uint8Array(32).fill(1);
46
+ const testMessage = 12345n;
47
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
48
+ const signature = eddsa.signPoseidon(testPrivateKey, testMessage);
49
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
50
+ const publicKey = eddsa.prv2pub(Buffer.from(testPrivateKey));
51
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
52
+ const isValid = eddsa.verifyPoseidon(testMessage, signature, publicKey);
53
+ console.log('EdDSA test result:', isValid);
54
+ // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
55
+ if (!isValid) {
56
+ throw new Error('EdDSA verification failed');
57
+ }
58
+ console.log('✅ circomlibjs initialization successful');
59
+ return true;
60
+ }
61
+ catch (error) {
62
+ console.error('❌ circomlibjs initialization failed:', error);
63
+ throw new Error(`CircomLibJS initialization failed: ${error.message}`);
64
+ }
65
+ };
66
+ exports.testCircomlibjs = testCircomlibjs;
67
+ // Enhanced wallet creation with circomlibjs testing
68
+ const createDopWalletSafe = async (encryptionKey, mnemonic, creationBlockNumbers, dopWalletDerivationIndex, timeout = 60000) => {
69
+ // First test circomlibjs
70
+ await (0, exports.testCircomlibjs)();
71
+ // Create wallet with timeout
72
+ return new Promise((resolve, reject) => {
73
+ const timeoutId = setTimeout(() => {
74
+ reject(new Error('Wallet creation timed out. This usually indicates circomlibjs hanging. Try restarting the app.'));
75
+ }, timeout);
76
+ const createWallet = async () => {
77
+ try {
78
+ console.log('Starting safe wallet creation...');
79
+ const result = await (0, exports.createDopWallet)(encryptionKey, mnemonic, creationBlockNumbers, dopWalletDerivationIndex);
80
+ clearTimeout(timeoutId);
81
+ console.log('✅ Wallet creation successful');
82
+ resolve(result);
83
+ }
84
+ catch (error) {
85
+ clearTimeout(timeoutId);
86
+ console.error('❌ Wallet creation failed:', error);
87
+ reject(error);
88
+ }
89
+ };
90
+ // Start wallet creation
91
+ createWallet().catch((error) => {
92
+ clearTimeout(timeoutId);
93
+ reject(error);
94
+ });
95
+ });
96
+ };
97
+ exports.createDopWalletSafe = createDopWalletSafe;
98
+ /**
99
+ * Create a new DOP wallet with automatic mnemonic generation or import existing mnemonic
100
+ *
101
+ * @param encryptionKey - 32-byte Buffer or Uint8Array for wallet encryption
102
+ * @param options - Wallet creation options
103
+ * @returns Promise<{walletInfo: DopWalletInfo, mnemonic: string}>
104
+ */
105
+ const createOrImportDopWallet = async (encryptionKey, options = {}) => {
106
+ const { mnemonic: inputMnemonic, creationBlockNumbers, dopWalletDerivationIndex = 0, timeout = 60000, mnemonicStrength = 128 } = options;
107
+ // Convert encryptionKey to string if needed
108
+ const encryptionKeyString = typeof encryptionKey === 'string'
109
+ ? encryptionKey
110
+ : Buffer.from(encryptionKey).toString('hex');
111
+ let finalMnemonic;
112
+ if (typeof inputMnemonic === 'string' && inputMnemonic.length > 0) {
113
+ // Validate provided mnemonic
114
+ if (!dop_engine_v3_1.Mnemonic.validate(inputMnemonic)) {
115
+ throw new Error('Invalid mnemonic phrase provided');
116
+ }
117
+ finalMnemonic = inputMnemonic;
118
+ console.log('✅ Importing wallet from provided mnemonic');
119
+ }
120
+ else {
121
+ // Generate new mnemonic
122
+ finalMnemonic = dop_engine_v3_1.Mnemonic.generate(mnemonicStrength);
123
+ let wordCount;
124
+ if (mnemonicStrength === 128) {
125
+ wordCount = '12';
126
+ }
127
+ else if (mnemonicStrength === 192) {
128
+ wordCount = '18';
129
+ }
130
+ else {
131
+ wordCount = '24';
132
+ }
133
+ console.log(`✅ Generated new ${wordCount}-word mnemonic`);
134
+ }
135
+ // Create wallet using the safe creation method
136
+ const walletInfo = await (0, exports.createDopWalletSafe)(encryptionKeyString, finalMnemonic, creationBlockNumbers, dopWalletDerivationIndex, timeout);
137
+ return {
138
+ walletInfo,
139
+ mnemonic: finalMnemonic
140
+ };
141
+ };
142
+ exports.createOrImportDopWallet = createOrImportDopWallet;
10
143
  const awaitWalletScan = (walletID, chain) => {
11
144
  const wallet = (0, exports.walletForID)(walletID);
12
145
  return new Promise((resolve, reject) => wallet.once(dop_engine_v3_1.EngineEvent.WalletDecryptBalancesComplete, ({ chain: returnedChain }) => returnedChain.type === chain.type && returnedChain.id === chain.id
@@ -1 +1 @@
1
- {"version":3,"file":"wallets.js","sourceRoot":"","sources":["../../../../src/services/dop/wallets/wallets.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DopWallet,\n EngineEvent,\n WalletScannedEventData,\n AbstractWallet,\n WalletData,\n AddressData,\n DopEngine,\n ByteUtils,\n ViewOnlyWallet,\n Commitment,\n} from 'dop-engine-v3';\nimport {\n DopWalletInfo,\n NetworkName,\n NETWORK_CONFIG,\n isDefined,\n Chain,\n} from 'dop-sharedmodels-v3';\nimport { onBalancesUpdate } from './balance-update';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { getAddress } from 'ethers';\nimport { getEngine } from '../core/engine';\n\nexport const awaitWalletScan = (walletID: string, chain: Chain) => {\n const wallet = walletForID(walletID);\n return new Promise((resolve, reject) =>\n wallet.once(\n EngineEvent.WalletDecryptBalancesComplete,\n ({ chain: returnedChain }: WalletScannedEventData) =>\n returnedChain.type === chain.type && returnedChain.id === chain.id\n ? resolve(returnedChain)\n : reject(),\n ),\n );\n};\n\nexport const awaitMultipleWalletScans = async (\n walletID: string,\n chain: Chain,\n numScans: number,\n) => {\n let i = 0;\n while (i < numScans) {\n // eslint-disable-next-line no-await-in-loop\n await awaitWalletScan(walletID, chain);\n i += 1;\n }\n return Promise.resolve();\n};\n\nexport const walletForID = (id: string): AbstractWallet => {\n const engine = getEngine();\n const wallet = engine.wallets[id];\n if (!isDefined(wallet)) {\n throw new Error('No DOP wallet for ID');\n }\n return wallet;\n};\n\nexport const fullWalletForID = (id: string): DopWallet => {\n const wallet = walletForID(id);\n if (!(wallet instanceof DopWallet)) {\n throw new Error('Can not load View-Only wallet.');\n }\n return wallet;\n};\n\nexport const viewOnlyWalletForID = (id: string): DopWallet => {\n const wallet = walletForID(id);\n if (!(wallet instanceof ViewOnlyWallet)) {\n throw new Error('Can only load View-Only wallet.');\n }\n return wallet as DopWallet;\n};\n\nconst subscribeToEvents = (wallet: AbstractWallet) => {\n wallet.on(\n EngineEvent.WalletDecryptBalancesComplete,\n ({ txidVersion, chain }: WalletScannedEventData) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n onBalancesUpdate(txidVersion, wallet, chain);\n },\n );\n};\n\nconst addressForWallet = (wallet: AbstractWallet): string => {\n return wallet.getAddress();\n};\n\nconst infoForWallet = (wallet: AbstractWallet): DopWalletInfo => {\n const dopAddress = addressForWallet(wallet);\n return {\n id: wallet.id,\n dopAddress,\n };\n};\n\nconst getExistingWallet = (\n dopWalletID: string,\n): Optional<AbstractWallet> => {\n try {\n const existingWallet = walletForID(dopWalletID);\n return existingWallet;\n } catch (_err) {\n return undefined;\n }\n};\n\nconst loadExistingWallet = async (\n encryptionKey: string,\n dopWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<DopWalletInfo> => {\n const existingWallet = getExistingWallet(dopWalletID);\n if (existingWallet) {\n return infoForWallet(existingWallet);\n }\n const engine = getEngine();\n let wallet: AbstractWallet;\n\n if (isViewOnlyWallet) {\n wallet = await engine.loadExistingViewOnlyWallet(\n encryptionKey,\n dopWalletID,\n );\n } else {\n wallet = await engine.loadExistingWallet(encryptionKey, dopWalletID);\n }\n\n subscribeToEvents(wallet);\n return infoForWallet(wallet);\n};\n// here\nexport const createWalletFromTransaction = async (\n leaf: Commitment,\n viewingPrivateKey: Uint8Array,\n chain: any,\n encryptionKey: string,\n mnemonic: string,\n index = 0,\n): Promise<any> => {\n\n const engine = getEngine();\n const res = engine.createUserWalletFromTransaction(leaf, viewingPrivateKey, chain, encryptionKey, mnemonic, index);\n return res;\n};\n\nconst createWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n dopWalletDerivationIndex?: number,\n): Promise<DopWalletInfo> => {\n const formattedCreationBlockNumbers =\n formatCreationBlockNumbers(creationBlockNumbers);\n\n const engine = getEngine();\n const wallet = await engine.createWalletFromMnemonic(\n encryptionKey,\n mnemonic,\n dopWalletDerivationIndex ?? 0,\n formattedCreationBlockNumbers,\n );\n subscribeToEvents(wallet);\n return infoForWallet(wallet);\n};\n\nconst createViewOnlyWallet = async (\n encryptionKey: string,\n shareableViewingKey: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n const formattedCreationBlockNumbers =\n formatCreationBlockNumbers(creationBlockNumbers);\n\n const engine = getEngine();\n const wallet = await engine.createViewOnlyWalletFromShareableViewingKey(\n encryptionKey,\n shareableViewingKey,\n formattedCreationBlockNumbers,\n );\n subscribeToEvents(wallet);\n return infoForWallet(wallet);\n};\n\nexport const createDopWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n dopWalletDerivationIndex?: number,\n): Promise<DopWalletInfo> => {\n try {\n return await createWallet(\n encryptionKey,\n mnemonic,\n creationBlockNumbers,\n dopWalletDerivationIndex,\n );\n } catch (err) {\n throw reportAndSanitizeError(createDopWallet.name, err);\n }\n};\n\nexport const createViewOnlyDopWallet = async (\n encryptionKey: string,\n shareableViewingKey: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n try {\n return await createViewOnlyWallet(\n encryptionKey,\n shareableViewingKey,\n creationBlockNumbers,\n );\n } catch (err) {\n throw reportAndSanitizeError(createViewOnlyDopWallet.name, err);\n }\n};\n\nexport const loadWalletByID = async (\n encryptionKey: string,\n dopWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<DopWalletInfo> => {\n try {\n return await loadExistingWallet(\n encryptionKey,\n dopWalletID,\n isViewOnlyWallet,\n );\n } catch (err) {\n const sanitizedError = reportAndSanitizeError(loadWalletByID.name, err);\n throw new Error(`Could not load DOP wallet`, { cause: sanitizedError });\n }\n};\n\nexport const unloadWalletByID = (dopWalletID: string): void => {\n try {\n const engine = getEngine();\n engine.unloadWallet(dopWalletID);\n } catch (err) {\n throw new Error('Could not unload DOP wallet.', { cause: err });\n }\n};\n\nexport const deleteWalletByID = async (\n dopWalletID: string,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.deleteWallet(dopWalletID);\n } catch (err) {\n throw new Error('Could not delete DOP wallet.', { cause: err });\n }\n};\n\nexport const getWalletMnemonic = async (\n encryptionKey: string,\n dopWalletID: string,\n) => {\n const { db } = getEngine();\n // Reload wallet to ensure that encryption key is valid.\n const walletData = (await DopWallet.getEncryptedData(\n db,\n encryptionKey,\n dopWalletID,\n )) as WalletData;\n\n if (!walletData.mnemonic) {\n throw new Error('No mnemonic for wallet.');\n }\n return walletData.mnemonic;\n};\n\nexport const getDopWalletAddressData = (address: string): AddressData => {\n assertValidDopAddress(address);\n return DopEngine.decodeAddress(address);\n};\n\nexport const getDopWalletPrivateViewingKey = (\n dopWalletID: string,\n): Uint8Array => {\n const wallet = walletForID(dopWalletID);\n return wallet.getViewingKeyPair().privateKey;\n};\n\nexport const signWithWalletViewingKey = async (\n dopWalletID: string,\n message: string,\n): Promise<string> => {\n const wallet = walletForID(dopWalletID);\n const signature = await wallet.signWithViewingKey(\n ByteUtils.hexStringToBytes(message),\n );\n return ByteUtils.hexlify(signature);\n};\n\nexport const assertValidDopAddress = (address: string): void => {\n if (!validateDopAddress(address)) {\n throw new Error('Invalid DOP address.');\n }\n};\n\nexport const validateDopAddress = (address: string): boolean => {\n try {\n return DopEngine.decodeAddress(address) != null;\n } catch (err) {\n return false;\n }\n};\n\nexport const assertValidEthAddress = (address: string) => {\n if (!validateEthAddress(address)) {\n throw new Error('Invalid wallet address.');\n }\n};\n\nexport const validateEthAddress = (address: string): boolean => {\n try {\n getAddress(address);\n return true;\n } catch (err) {\n return false;\n }\n};\n\nexport const getDopAddress = (\n dopWalletID: string,\n): Optional<string> => {\n try {\n const wallet = walletForID(dopWalletID);\n return wallet.getAddress();\n } catch (err) {\n reportAndSanitizeError(getDopAddress.name, err);\n return undefined;\n }\n};\n\nexport const getWalletShareableViewingKey = async (\n dopWalletID: string,\n): Promise<Optional<string>> => {\n try {\n const wallet = walletForID(dopWalletID);\n return wallet.generateShareableViewingKey();\n } catch (err) {\n reportAndSanitizeError(getWalletShareableViewingKey.name, err);\n return undefined;\n }\n};\n\nconst formatCreationBlockNumbers = (\n creationBlockNumbers: Optional<MapType<number>>,\n): Optional<number[][]> => {\n // Format creationBlockNumbers from client side { <NetworkName>: <BlockNumber> } map to dop-engine-v3's number[][] type\n if (!creationBlockNumbers) return;\n\n const formattedCreationBlockNumbers: number[][] = [];\n const networksNames = Object.keys(creationBlockNumbers) as NetworkName[];\n\n for (const networkName of networksNames) {\n const network = NETWORK_CONFIG[networkName];\n\n const blockNumber = creationBlockNumbers[networkName];\n if (!isDefined(blockNumber)) {\n continue;\n }\n\n formattedCreationBlockNumbers[network.chain.type] ??= [];\n formattedCreationBlockNumbers[network.chain.type][network.chain.id] =\n blockNumber;\n }\n\n return formattedCreationBlockNumbers;\n};\n"]}
1
+ {"version":3,"file":"wallets.js","sourceRoot":"","sources":["../../../../src/services/dop/wallets/wallets.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DopWallet,\n EngineEvent,\n WalletScannedEventData,\n AbstractWallet,\n WalletData,\n AddressData,\n DopEngine,\n ByteUtils,\n ViewOnlyWallet,\n Commitment,\n Mnemonic,\n} from 'dop-engine-v3';\nimport {\n DopWalletInfo,\n NetworkName,\n NETWORK_CONFIG,\n isDefined,\n Chain,\n} from 'dop-sharedmodels-v3';\nimport { onBalancesUpdate } from './balance-update';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { getAddress } from 'ethers';\nimport { getEngine } from '../core/engine';\n\n// CRITICAL: Test circomlibjs initialization for React Native compatibility\nexport const testCircomlibjs = async (): Promise<boolean> => {\n try {\n console.log('Testing circomlibjs initialization...');\n \n // Dynamic import to ensure shims are loaded first\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, import/no-extraneous-dependencies\n const { poseidon, eddsa } = await import('circomlibjs') ;\n \n // Test basic poseidon hash operation\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\n const testResult = poseidon([1n, 2n]);\n console.log('Poseidon test result:', testResult.toString());\n \n // Test eddsa operations\n const testPrivateKey = new Uint8Array(32).fill(1);\n const testMessage = 12345n;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n const signature = eddsa.signPoseidon(testPrivateKey, testMessage);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n const publicKey = eddsa.prv2pub(Buffer.from(testPrivateKey));\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n const isValid = eddsa.verifyPoseidon(testMessage, signature, publicKey);\n \n console.log('EdDSA test result:', isValid);\n \n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!isValid) {\n throw new Error('EdDSA verification failed');\n }\n \n console.log('✅ circomlibjs initialization successful');\n return true;\n } catch (error) {\n console.error('❌ circomlibjs initialization failed:', error);\n throw new Error(`CircomLibJS initialization failed: ${(error as Error).message}`);\n }\n};\n\n// Enhanced wallet creation with circomlibjs testing\nexport const createDopWalletSafe = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n dopWalletDerivationIndex?: number,\n timeout = 60000\n): Promise<DopWalletInfo> => {\n // First test circomlibjs\n await testCircomlibjs();\n \n // Create wallet with timeout\n return new Promise<DopWalletInfo>((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error('Wallet creation timed out. This usually indicates circomlibjs hanging. Try restarting the app.'));\n }, timeout);\n\n const createWallet = async (): Promise<void> => {\n try {\n console.log('Starting safe wallet creation...');\n const result = await createDopWallet(encryptionKey, mnemonic, creationBlockNumbers, dopWalletDerivationIndex);\n clearTimeout(timeoutId);\n console.log('✅ Wallet creation successful');\n resolve(result);\n } catch (error) {\n clearTimeout(timeoutId);\n console.error('❌ Wallet creation failed:', error);\n reject(error);\n }\n };\n \n // Start wallet creation\n createWallet().catch((error) => {\n clearTimeout(timeoutId);\n reject(error);\n });\n });\n};\n\n/**\n * Create a new DOP wallet with automatic mnemonic generation or import existing mnemonic\n * \n * @param encryptionKey - 32-byte Buffer or Uint8Array for wallet encryption\n * @param options - Wallet creation options\n * @returns Promise<{walletInfo: DopWalletInfo, mnemonic: string}>\n */\nexport const createOrImportDopWallet = async (\n encryptionKey: string | Buffer | Uint8Array,\n options: {\n mnemonic?: string; // If provided, import this mnemonic; if undefined, generate new\n creationBlockNumbers?: Optional<MapType<number>>;\n dopWalletDerivationIndex?: number;\n timeout?: number;\n mnemonicStrength?: 128 | 192 | 256; // For generation only (default: 128 = 12 words)\n } = {}\n): Promise<{walletInfo: DopWalletInfo, mnemonic: string}> => {\n const {\n mnemonic: inputMnemonic,\n creationBlockNumbers,\n dopWalletDerivationIndex = 0,\n timeout = 60000,\n mnemonicStrength = 128\n } = options;\n\n // Convert encryptionKey to string if needed\n const encryptionKeyString = typeof encryptionKey === 'string' \n ? encryptionKey \n : Buffer.from(encryptionKey).toString('hex');\n\n let finalMnemonic: string;\n\n if (typeof inputMnemonic === 'string' && inputMnemonic.length > 0) {\n // Validate provided mnemonic\n if (!Mnemonic.validate(inputMnemonic)) {\n throw new Error('Invalid mnemonic phrase provided');\n }\n finalMnemonic = inputMnemonic;\n console.log('✅ Importing wallet from provided mnemonic');\n } else {\n // Generate new mnemonic\n finalMnemonic = Mnemonic.generate(mnemonicStrength);\n let wordCount: string;\n if (mnemonicStrength === 128) {\n wordCount = '12';\n } else if (mnemonicStrength === 192) {\n wordCount = '18';\n } else {\n wordCount = '24';\n }\n console.log(`✅ Generated new ${wordCount}-word mnemonic`);\n }\n\n // Create wallet using the safe creation method\n const walletInfo = await createDopWalletSafe(\n encryptionKeyString,\n finalMnemonic,\n creationBlockNumbers,\n dopWalletDerivationIndex,\n timeout\n );\n\n return {\n walletInfo,\n mnemonic: finalMnemonic\n };\n};\n\nexport const awaitWalletScan = (walletID: string, chain: Chain) => {\n const wallet = walletForID(walletID);\n return new Promise((resolve, reject) =>\n wallet.once(\n EngineEvent.WalletDecryptBalancesComplete,\n ({ chain: returnedChain }: WalletScannedEventData) =>\n returnedChain.type === chain.type && returnedChain.id === chain.id\n ? resolve(returnedChain)\n : reject(),\n ),\n );\n};\n\nexport const awaitMultipleWalletScans = async (\n walletID: string,\n chain: Chain,\n numScans: number,\n) => {\n let i = 0;\n while (i < numScans) {\n // eslint-disable-next-line no-await-in-loop\n await awaitWalletScan(walletID, chain);\n i += 1;\n }\n return Promise.resolve();\n};\n\nexport const walletForID = (id: string): AbstractWallet => {\n const engine = getEngine();\n const wallet = engine.wallets[id];\n if (!isDefined(wallet)) {\n throw new Error('No DOP wallet for ID');\n }\n return wallet;\n};\n\nexport const fullWalletForID = (id: string): DopWallet => {\n const wallet = walletForID(id);\n if (!(wallet instanceof DopWallet)) {\n throw new Error('Can not load View-Only wallet.');\n }\n return wallet;\n};\n\nexport const viewOnlyWalletForID = (id: string): DopWallet => {\n const wallet = walletForID(id);\n if (!(wallet instanceof ViewOnlyWallet)) {\n throw new Error('Can only load View-Only wallet.');\n }\n return wallet as DopWallet;\n};\n\nconst subscribeToEvents = (wallet: AbstractWallet) => {\n wallet.on(\n EngineEvent.WalletDecryptBalancesComplete,\n ({ txidVersion, chain }: WalletScannedEventData) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n onBalancesUpdate(txidVersion, wallet, chain);\n },\n );\n};\n\nconst addressForWallet = (wallet: AbstractWallet): string => {\n return wallet.getAddress();\n};\n\nconst infoForWallet = (wallet: AbstractWallet): DopWalletInfo => {\n const dopAddress = addressForWallet(wallet);\n return {\n id: wallet.id,\n dopAddress,\n };\n};\n\nconst getExistingWallet = (\n dopWalletID: string,\n): Optional<AbstractWallet> => {\n try {\n const existingWallet = walletForID(dopWalletID);\n return existingWallet;\n } catch (_err) {\n return undefined;\n }\n};\n\nconst loadExistingWallet = async (\n encryptionKey: string,\n dopWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<DopWalletInfo> => {\n const existingWallet = getExistingWallet(dopWalletID);\n if (existingWallet) {\n return infoForWallet(existingWallet);\n }\n const engine = getEngine();\n let wallet: AbstractWallet;\n\n if (isViewOnlyWallet) {\n wallet = await engine.loadExistingViewOnlyWallet(\n encryptionKey,\n dopWalletID,\n );\n } else {\n wallet = await engine.loadExistingWallet(encryptionKey, dopWalletID);\n }\n\n subscribeToEvents(wallet);\n return infoForWallet(wallet);\n};\n// here\nexport const createWalletFromTransaction = async (\n leaf: Commitment,\n viewingPrivateKey: Uint8Array,\n chain: Chain,\n encryptionKey: string,\n mnemonic: string,\n index = 0,\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Promise<any> => {\n\n const engine = getEngine();\n const res = engine.createUserWalletFromTransaction(leaf, viewingPrivateKey, chain, encryptionKey, mnemonic, index);\n return res;\n};\n\nconst createWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n dopWalletDerivationIndex?: number,\n): Promise<DopWalletInfo> => {\n const formattedCreationBlockNumbers =\n formatCreationBlockNumbers(creationBlockNumbers);\n\n const engine = getEngine();\n const wallet = await engine.createWalletFromMnemonic(\n encryptionKey,\n mnemonic,\n dopWalletDerivationIndex ?? 0,\n formattedCreationBlockNumbers,\n );\n subscribeToEvents(wallet);\n return infoForWallet(wallet);\n};\n\nconst createViewOnlyWallet = async (\n encryptionKey: string,\n shareableViewingKey: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n const formattedCreationBlockNumbers =\n formatCreationBlockNumbers(creationBlockNumbers);\n\n const engine = getEngine();\n const wallet = await engine.createViewOnlyWalletFromShareableViewingKey(\n encryptionKey,\n shareableViewingKey,\n formattedCreationBlockNumbers,\n );\n subscribeToEvents(wallet);\n return infoForWallet(wallet);\n};\n\nexport const createDopWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n dopWalletDerivationIndex?: number,\n): Promise<DopWalletInfo> => {\n try {\n return await createWallet(\n encryptionKey,\n mnemonic,\n creationBlockNumbers,\n dopWalletDerivationIndex,\n );\n } catch (err) {\n throw reportAndSanitizeError(createDopWallet.name, err);\n }\n};\n\nexport const createViewOnlyDopWallet = async (\n encryptionKey: string,\n shareableViewingKey: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n try {\n return await createViewOnlyWallet(\n encryptionKey,\n shareableViewingKey,\n creationBlockNumbers,\n );\n } catch (err) {\n throw reportAndSanitizeError(createViewOnlyDopWallet.name, err);\n }\n};\n\nexport const loadWalletByID = async (\n encryptionKey: string,\n dopWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<DopWalletInfo> => {\n try {\n return await loadExistingWallet(\n encryptionKey,\n dopWalletID,\n isViewOnlyWallet,\n );\n } catch (err) {\n const sanitizedError = reportAndSanitizeError(loadWalletByID.name, err);\n throw new Error(`Could not load DOP wallet`, { cause: sanitizedError });\n }\n};\n\nexport const unloadWalletByID = (dopWalletID: string): void => {\n try {\n const engine = getEngine();\n engine.unloadWallet(dopWalletID);\n } catch (err) {\n throw new Error('Could not unload DOP wallet.', { cause: err });\n }\n};\n\nexport const deleteWalletByID = async (\n dopWalletID: string,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.deleteWallet(dopWalletID);\n } catch (err) {\n throw new Error('Could not delete DOP wallet.', { cause: err });\n }\n};\n\nexport const getWalletMnemonic = async (\n encryptionKey: string,\n dopWalletID: string,\n) => {\n const { db } = getEngine();\n // Reload wallet to ensure that encryption key is valid.\n const walletData = (await DopWallet.getEncryptedData(\n db,\n encryptionKey,\n dopWalletID,\n )) as WalletData;\n\n if (!walletData.mnemonic) {\n throw new Error('No mnemonic for wallet.');\n }\n return walletData.mnemonic;\n};\n\nexport const getDopWalletAddressData = (address: string): AddressData => {\n assertValidDopAddress(address);\n return DopEngine.decodeAddress(address);\n};\n\nexport const getDopWalletPrivateViewingKey = (\n dopWalletID: string,\n): Uint8Array => {\n const wallet = walletForID(dopWalletID);\n return wallet.getViewingKeyPair().privateKey;\n};\n\nexport const signWithWalletViewingKey = async (\n dopWalletID: string,\n message: string,\n): Promise<string> => {\n const wallet = walletForID(dopWalletID);\n const signature = await wallet.signWithViewingKey(\n ByteUtils.hexStringToBytes(message),\n );\n return ByteUtils.hexlify(signature);\n};\n\nexport const assertValidDopAddress = (address: string): void => {\n if (!validateDopAddress(address)) {\n throw new Error('Invalid DOP address.');\n }\n};\n\nexport const validateDopAddress = (address: string): boolean => {\n try {\n return DopEngine.decodeAddress(address) != null;\n } catch (err) {\n return false;\n }\n};\n\nexport const assertValidEthAddress = (address: string) => {\n if (!validateEthAddress(address)) {\n throw new Error('Invalid wallet address.');\n }\n};\n\nexport const validateEthAddress = (address: string): boolean => {\n try {\n getAddress(address);\n return true;\n } catch (err) {\n return false;\n }\n};\n\nexport const getDopAddress = (\n dopWalletID: string,\n): Optional<string> => {\n try {\n const wallet = walletForID(dopWalletID);\n return wallet.getAddress();\n } catch (err) {\n reportAndSanitizeError(getDopAddress.name, err);\n return undefined;\n }\n};\n\nexport const getWalletShareableViewingKey = async (\n dopWalletID: string,\n): Promise<Optional<string>> => {\n try {\n const wallet = walletForID(dopWalletID);\n return wallet.generateShareableViewingKey();\n } catch (err) {\n reportAndSanitizeError(getWalletShareableViewingKey.name, err);\n return undefined;\n }\n};\n\nconst formatCreationBlockNumbers = (\n creationBlockNumbers: Optional<MapType<number>>,\n): Optional<number[][]> => {\n // Format creationBlockNumbers from client side { <NetworkName>: <BlockNumber> } map to dop-engine-v3's number[][] type\n if (!creationBlockNumbers) return;\n\n const formattedCreationBlockNumbers: number[][] = [];\n const networksNames = Object.keys(creationBlockNumbers) as NetworkName[];\n\n for (const networkName of networksNames) {\n const network = NETWORK_CONFIG[networkName];\n\n const blockNumber = creationBlockNumbers[networkName];\n if (!isDefined(blockNumber)) {\n continue;\n }\n\n formattedCreationBlockNumbers[network.chain.type] ??= [];\n formattedCreationBlockNumbers[network.chain.type][network.chain.id] =\n blockNumber;\n }\n\n return formattedCreationBlockNumbers;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dop-wallet-v6",
3
- "version": "1.2.9",
3
+ "version": "1.2.11",
4
4
  "description": "DOP Wallet SDK, compatible with mobile, browser and nodejs environments.",
5
5
  "main": "dist/index.js",
6
6
  "license": "MIT",
@@ -28,7 +28,6 @@
28
28
  "postinstall": "node postinstall.js"
29
29
  },
30
30
  "dependencies": {
31
- "@graphql-mesh/cache-localforage": "^0.7.20",
32
31
  "@graphql-mesh/cross-helpers": "^0.3.4",
33
32
  "@graphql-mesh/graphql": "^0.34.16",
34
33
  "@graphql-mesh/http": "^0.3.28",
@@ -39,18 +38,21 @@
39
38
  "@graphql-mesh/types": "^0.91.14",
40
39
  "@graphql-mesh/utils": "^0.43.22",
41
40
  "@noble/ed25519": "^1.7.1",
42
- "dop-engine-v3": "1.4.9",
43
- "dop-sharedmodels-v3": "1.1.9",
41
+ "@react-native-async-storage/async-storage": "^1.24.0",
44
42
  "@whatwg-node/fetch": "^0.8.4",
45
43
  "assert": "2.0.0",
46
44
  "axios": "1.7.2",
47
45
  "brotli": "^1.3.3",
48
46
  "buffer": "^6.0.3",
47
+ "circomlibjs": "^0.1.7",
49
48
  "crypto-browserify": "3.12.0",
49
+ "dop-engine-v3": "1.4.9",
50
+ "dop-sharedmodels-v3": "1.1.9",
50
51
  "ethereum-cryptography": "^2.0.0",
51
52
  "ethers": "6.13.1",
52
53
  "events": "3.3.0",
53
54
  "graphql": "^16.6.0",
55
+ "memdown": "^6.1.1",
54
56
  "stream-browserify": "3.0.0"
55
57
  },
56
58
  "devDependencies": {
@@ -80,6 +82,14 @@
80
82
  "tsc-alias": "^1.8.2",
81
83
  "typescript": "^4.9.4"
82
84
  },
85
+ "peerDependencies": {
86
+ "@react-native-async-storage/async-storage": "^1.24.0"
87
+ },
88
+ "peerDependenciesMeta": {
89
+ "@react-native-async-storage/async-storage": {
90
+ "optional": false
91
+ }
92
+ },
83
93
  "react-native": {
84
94
  "crypto": false,
85
95
  "util": false
@@ -29,6 +29,44 @@ global.crypto.subtle.digest ??= (algorithm, data) => {
29
29
  return cryptoBrowserify.createHash(algo).update(data).digest();
30
30
  };
31
31
 
32
+ // CRITICAL FIX: Force circomlibjs to use synchronous mode in React Native
33
+ // This prevents hanging during wallet creation due to Web Worker incompatibility
34
+ if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {
35
+ // Disable Web Workers and WebAssembly for circomlibjs
36
+ global.Worker = undefined;
37
+ global.WebAssembly = undefined;
38
+
39
+ // Disable service workers that circomlibjs might try to use
40
+ global.navigator = global.navigator || {};
41
+ global.navigator.serviceWorker = undefined;
42
+
43
+ // Ensure process.browser is set to trigger browser fallbacks
44
+ global.process = global.process || {};
45
+ global.process.browser = true;
46
+
47
+ // Force synchronous execution by disabling async crypto operations
48
+ global.crypto = global.crypto || {};
49
+ global.crypto.subtle = global.crypto.subtle || {};
50
+
51
+ // Override setTimeout to prevent circomlibjs from using it for async operations
52
+ const originalSetTimeout = global.setTimeout;
53
+ const isCircomlibCall = (fn) => {
54
+ return fn && fn.toString && (
55
+ fn.toString().includes('poseidon') ||
56
+ fn.toString().includes('eddsa') ||
57
+ fn.toString().includes('circom')
58
+ );
59
+ };
60
+
61
+ global.setTimeout = function(fn, delay, ...args) {
62
+ // Force immediate execution for circomlibjs operations
63
+ if (delay === 0 && isCircomlibCall(fn)) {
64
+ return originalSetTimeout(() => fn.apply(this, args), 0);
65
+ }
66
+ return originalSetTimeout.apply(this, arguments);
67
+ };
68
+ }
69
+
32
70
  /**
33
71
  * Other package.json dependencies and why we need them:
34
72
  * - assert:
@@ -39,4 +77,11 @@ global.crypto.subtle.digest ??= (algorithm, data) => {
39
77
  * - stream-browserify:
40
78
  * - engine uses AES encryption, which we shim with browserify-aes, which
41
79
  * needs cipher-base, which needs stream
80
+ *
81
+ * AsyncStorage Compatibility Note:
82
+ * - This wallet SDK is compatible with React Native 0.60+ which moved AsyncStorage
83
+ * out of core into @react-native-async-storage/async-storage
84
+ * - GraphQL Mesh caching has been disabled to avoid legacy AsyncStorage conflicts
85
+ * - If you need persistent GraphQL caching in React Native, implement custom
86
+ * cache using @react-native-async-storage/async-storage
42
87
  */
File without changes
File without changes