dop-wallet-v6 1.2.12 ā 1.2.14
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/DOP_WALLET_V6_REACT_NATIVE_INTEGRATION_GUIDE.md +2174 -0
- package/SELECTIVE_TRANSPARENCY.md +207 -0
- package/WEB_WORKER_TROUBLESHOOTING.md +180 -0
- package/issuev3.md +78 -0
- package/metro.config.react-native.example.js +12 -1
- package/node-polyfills/os-polyfill.js +130 -0
- package/node-polyfills/wasm-fallback.js +35 -0
- package/node-polyfills/web-worker-polyfill.js +77 -0
- package/package-rn-integration.json +30 -0
- package/package.json +6 -2
- package/test-react-native-integration.js +0 -219
- package/verify-react-native-deps.js +0 -141
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Web Worker polyfill for React Native
|
|
3
|
+
*
|
|
4
|
+
* This addresses the specific error:
|
|
5
|
+
* "node_modules/web-worker/cjs/node.js: Invalid call at line 201: import(mod)"
|
|
6
|
+
*
|
|
7
|
+
* Since React Native doesn't support Web Workers or dynamic imports,
|
|
8
|
+
* we completely replace the web-worker module with a stub that prevents
|
|
9
|
+
* the problematic Node.js code from executing.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
console.warn('Web Worker polyfill: Web Workers are not supported in React Native. Operations will run synchronously.');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Complete web-worker module replacement for React Native
|
|
16
|
+
* This prevents the original web-worker package from loading entirely
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
// Mock Web Worker constructor that prevents instantiation
|
|
20
|
+
class ReactNativeWebWorker {
|
|
21
|
+
constructor(scriptURL, options = {}) {
|
|
22
|
+
// Don't throw immediately - some libraries check for Worker availability first
|
|
23
|
+
console.warn('Web Worker constructor called in React Native - falling back to synchronous execution');
|
|
24
|
+
|
|
25
|
+
// Provide minimal interface that libraries expect
|
|
26
|
+
this.onmessage = null;
|
|
27
|
+
this.onerror = null;
|
|
28
|
+
this.onmessageerror = null;
|
|
29
|
+
this.terminate = () => {
|
|
30
|
+
console.warn('Worker.terminate() called - no-op in React Native');
|
|
31
|
+
};
|
|
32
|
+
this.postMessage = (message) => {
|
|
33
|
+
console.warn('Worker.postMessage() called - no-op in React Native', message);
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Primary export - this is what gets imported when someone does require('web-worker')
|
|
39
|
+
module.exports = ReactNativeWebWorker;
|
|
40
|
+
|
|
41
|
+
// ES6 default export
|
|
42
|
+
module.exports.default = ReactNativeWebWorker;
|
|
43
|
+
|
|
44
|
+
// Named exports that the web-worker package might provide
|
|
45
|
+
module.exports.Worker = ReactNativeWebWorker;
|
|
46
|
+
|
|
47
|
+
// Additional exports to fully replace the web-worker module interface
|
|
48
|
+
module.exports.isMainThread = true;
|
|
49
|
+
module.exports.parentPort = null;
|
|
50
|
+
module.exports.threadId = 0;
|
|
51
|
+
module.exports.workerData = null;
|
|
52
|
+
|
|
53
|
+
// Mock MessagePort for completeness
|
|
54
|
+
module.exports.MessagePort = class MockMessagePort {
|
|
55
|
+
constructor() {
|
|
56
|
+
this.onmessage = null;
|
|
57
|
+
this.onmessageerror = null;
|
|
58
|
+
}
|
|
59
|
+
postMessage() {
|
|
60
|
+
console.warn('MessagePort.postMessage() called - no-op in React Native');
|
|
61
|
+
}
|
|
62
|
+
start() {}
|
|
63
|
+
close() {}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// Mock MessageChannel for completeness
|
|
67
|
+
module.exports.MessageChannel = class MockMessageChannel {
|
|
68
|
+
constructor() {
|
|
69
|
+
this.port1 = new module.exports.MessagePort();
|
|
70
|
+
this.port2 = new module.exports.MessagePort();
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// Prevent any dynamic imports or Node.js specific functionality
|
|
75
|
+
if (typeof global !== 'undefined') {
|
|
76
|
+
global.Worker = global.Worker || ReactNativeWebWorker;
|
|
77
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"scripts": {
|
|
3
|
+
"test-rn-integration": "node test-react-native-integration.js",
|
|
4
|
+
"verify-rn-deps": "node verify-react-native-deps.js"
|
|
5
|
+
},
|
|
6
|
+
"rn-integration-deps": {
|
|
7
|
+
"required": [
|
|
8
|
+
"@react-native-async-storage/async-storage",
|
|
9
|
+
"react-native-get-random-values",
|
|
10
|
+
"crypto-browserify",
|
|
11
|
+
"stream-browserify",
|
|
12
|
+
"buffer",
|
|
13
|
+
"events",
|
|
14
|
+
"util",
|
|
15
|
+
"assert",
|
|
16
|
+
"process",
|
|
17
|
+
"path-browserify",
|
|
18
|
+
"url",
|
|
19
|
+
"querystring-es3",
|
|
20
|
+
"stream-http",
|
|
21
|
+
"https-browserify",
|
|
22
|
+
"browserify-zlib"
|
|
23
|
+
],
|
|
24
|
+
"polyfills": [
|
|
25
|
+
"node-polyfills/os-polyfill.js",
|
|
26
|
+
"node-polyfills/web-worker-polyfill.js",
|
|
27
|
+
"node-polyfills/wasm-fallback.js"
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dop-wallet-v6",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.14",
|
|
4
4
|
"description": "DOP Wallet SDK, compatible with mobile, browser and nodejs environments.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"files": [
|
|
8
8
|
"dist/**/*",
|
|
9
|
-
"*.js"
|
|
9
|
+
"*.js",
|
|
10
|
+
"*.md",
|
|
11
|
+
"node-polyfills/**/*",
|
|
12
|
+
"metro.config.react-native.example.js",
|
|
13
|
+
"package-rn-integration.json"
|
|
10
14
|
],
|
|
11
15
|
"exports": {
|
|
12
16
|
".": "./dist/index.js",
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Test React Native Integration Fixes
|
|
5
|
-
*
|
|
6
|
-
* This script simulates the React Native Metro bundling process
|
|
7
|
-
* to verify that our fixes address the reported issues.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
const fs = require('fs');
|
|
11
|
-
const path = require('path');
|
|
12
|
-
|
|
13
|
-
console.log('š§Ŗ Testing React Native Integration Fixes\n');
|
|
14
|
-
|
|
15
|
-
// Test 1: Verify OS module resolution
|
|
16
|
-
console.log('1ļøā£ Testing OS module resolution...');
|
|
17
|
-
try {
|
|
18
|
-
// Simulate what Metro would do with our alias
|
|
19
|
-
const osPolyfill = require('./node-polyfills/os-polyfill.js');
|
|
20
|
-
|
|
21
|
-
// Test the functions that ffjavascript actually uses
|
|
22
|
-
const platform = osPolyfill.platform();
|
|
23
|
-
const eol = osPolyfill.EOL;
|
|
24
|
-
const homedir = osPolyfill.homedir();
|
|
25
|
-
|
|
26
|
-
console.log(` ā
os.platform() = "${platform}"`);
|
|
27
|
-
console.log(` ā
os.EOL = "${eol}"`);
|
|
28
|
-
console.log(` ā
os.homedir() = "${homedir}"`);
|
|
29
|
-
|
|
30
|
-
if (platform && eol && homedir) {
|
|
31
|
-
console.log(' ā
OS module polyfill works correctly\n');
|
|
32
|
-
} else {
|
|
33
|
-
throw new Error('OS polyfill missing required functions');
|
|
34
|
-
}
|
|
35
|
-
} catch (error) {
|
|
36
|
-
console.log(' ā OS module polyfill failed:', error.message);
|
|
37
|
-
process.exit(1);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// Test 2: Verify Web Worker handling
|
|
41
|
-
console.log('2ļøā£ Testing Web Worker handling...');
|
|
42
|
-
try {
|
|
43
|
-
const WebWorkerPolyfill = require('./node-polyfills/web-worker-polyfill.js');
|
|
44
|
-
|
|
45
|
-
// This should throw a controlled error (which is what we want)
|
|
46
|
-
try {
|
|
47
|
-
new WebWorkerPolyfill('test-script.js');
|
|
48
|
-
console.log(' ā Web Worker should have thrown an error');
|
|
49
|
-
} catch (webWorkerError) {
|
|
50
|
-
if (webWorkerError.message.includes('Web Workers are not supported in React Native')) {
|
|
51
|
-
console.log(' ā
Web Worker polyfill correctly prevents usage');
|
|
52
|
-
console.log(' ā
Provides helpful error message\n');
|
|
53
|
-
} else {
|
|
54
|
-
throw webWorkerError;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
} catch (error) {
|
|
58
|
-
console.log(' ā Web Worker polyfill failed:', error.message);
|
|
59
|
-
process.exit(1);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// Test 3: Verify WASM fallback
|
|
63
|
-
console.log('3ļøā£ Testing WASM fallback...');
|
|
64
|
-
try {
|
|
65
|
-
const wasmFallback = require('./node-polyfills/wasm-fallback.js');
|
|
66
|
-
|
|
67
|
-
// Check that it provides expected structure
|
|
68
|
-
if (wasmFallback.bn128 && typeof wasmFallback.buildBn128 === 'function') {
|
|
69
|
-
console.log(' ā
WASM fallback provides expected exports');
|
|
70
|
-
|
|
71
|
-
// Test that it throws appropriate errors
|
|
72
|
-
try {
|
|
73
|
-
wasmFallback.buildBn128();
|
|
74
|
-
} catch (wasmError) {
|
|
75
|
-
if (wasmError.message.includes('WASM curve operations not supported')) {
|
|
76
|
-
console.log(' ā
WASM fallback correctly prevents usage\n');
|
|
77
|
-
} else {
|
|
78
|
-
throw wasmError;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
} else {
|
|
82
|
-
throw new Error('WASM fallback missing required exports');
|
|
83
|
-
}
|
|
84
|
-
} catch (error) {
|
|
85
|
-
console.log(' ā WASM fallback failed:', error.message);
|
|
86
|
-
process.exit(1);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Test 4: Verify Metro config structure
|
|
90
|
-
console.log('4ļøā£ Testing Metro config structure...');
|
|
91
|
-
try {
|
|
92
|
-
const metroConfigPath = './metro.config.react-native.example.js';
|
|
93
|
-
|
|
94
|
-
if (!fs.existsSync(metroConfigPath)) {
|
|
95
|
-
throw new Error('Metro config example file missing');
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const metroConfig = fs.readFileSync(metroConfigPath, 'utf8');
|
|
99
|
-
|
|
100
|
-
// Check for critical aliases
|
|
101
|
-
const criticalAliases = [
|
|
102
|
-
"'os': require.resolve('./node-polyfills/os-polyfill.js')",
|
|
103
|
-
"'web-worker': require.resolve('./node-polyfills/web-worker-polyfill.js')",
|
|
104
|
-
"'crypto': require.resolve('crypto-browserify')",
|
|
105
|
-
"'stream': require.resolve('stream-browserify')"
|
|
106
|
-
];
|
|
107
|
-
|
|
108
|
-
criticalAliases.forEach(alias => {
|
|
109
|
-
if (metroConfig.includes(alias)) {
|
|
110
|
-
console.log(` ā
Found critical alias: ${alias.split(':')[0]}`);
|
|
111
|
-
} else {
|
|
112
|
-
throw new Error(`Missing critical alias: ${alias}`);
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
console.log(' ā
Metro config contains all required aliases\n');
|
|
117
|
-
} catch (error) {
|
|
118
|
-
console.log(' ā Metro config verification failed:', error.message);
|
|
119
|
-
process.exit(1);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
// Test 5: Verify existing React Native shims compatibility
|
|
123
|
-
console.log('5ļøā£ Testing React Native shims compatibility...');
|
|
124
|
-
try {
|
|
125
|
-
if (!fs.existsSync('./react-native-shims.js')) {
|
|
126
|
-
throw new Error('react-native-shims.js not found');
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
const shimsContent = fs.readFileSync('./react-native-shims.js', 'utf8');
|
|
130
|
-
|
|
131
|
-
// Check for critical shims
|
|
132
|
-
const criticalShims = [
|
|
133
|
-
'global.Worker = undefined',
|
|
134
|
-
'global.WebAssembly = undefined',
|
|
135
|
-
'global.process.browser = true',
|
|
136
|
-
'require(\'react-native-get-random-values\')'
|
|
137
|
-
];
|
|
138
|
-
|
|
139
|
-
criticalShims.forEach(shim => {
|
|
140
|
-
if (shimsContent.includes(shim)) {
|
|
141
|
-
console.log(` ā
Found critical shim: ${shim}`);
|
|
142
|
-
} else {
|
|
143
|
-
console.log(` ā ļø Shim not found (may be equivalent): ${shim}`);
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
console.log(' ā
React Native shims are compatible\n');
|
|
148
|
-
} catch (error) {
|
|
149
|
-
console.log(' ā React Native shims verification failed:', error.message);
|
|
150
|
-
process.exit(1);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
// Test 6: Simulate the reported error scenarios
|
|
154
|
-
console.log('6ļøā£ Simulating reported error scenarios...');
|
|
155
|
-
|
|
156
|
-
// Scenario 1: ffjavascript trying to require('os')
|
|
157
|
-
console.log(' š Scenario 1: ffjavascript requires os...');
|
|
158
|
-
try {
|
|
159
|
-
// This is what would happen in Metro with our alias
|
|
160
|
-
const os = require('./node-polyfills/os-polyfill.js');
|
|
161
|
-
const platform = os.platform(); // This is what ffjavascript actually calls
|
|
162
|
-
|
|
163
|
-
if (platform === 'react-native') {
|
|
164
|
-
console.log(' ā
ffjavascript os requirement would be satisfied');
|
|
165
|
-
} else {
|
|
166
|
-
throw new Error('OS polyfill not returning expected platform');
|
|
167
|
-
}
|
|
168
|
-
} catch (error) {
|
|
169
|
-
console.log(' ā Scenario 1 failed:', error.message);
|
|
170
|
-
process.exit(1);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// Scenario 2: web-worker trying to import(mod)
|
|
174
|
-
console.log(' š Scenario 2: web-worker dynamic import...');
|
|
175
|
-
try {
|
|
176
|
-
// Our polyfill should prevent this from ever happening
|
|
177
|
-
const WebWorker = require('./node-polyfills/web-worker-polyfill.js');
|
|
178
|
-
|
|
179
|
-
// If ffjavascript tries to use Worker, it should get our polyfill
|
|
180
|
-
// which will throw a clear error instead of causing Metro to fail
|
|
181
|
-
console.log(' ā
web-worker import would be redirected to safe polyfill');
|
|
182
|
-
} catch (error) {
|
|
183
|
-
console.log(' ā Scenario 2 failed:', error.message);
|
|
184
|
-
process.exit(1);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// Final verification
|
|
188
|
-
console.log('7ļøā£ Final integration check...');
|
|
189
|
-
|
|
190
|
-
// Check that all required browserify modules are listed in setup guide
|
|
191
|
-
const setupGuide = fs.readFileSync('./REACT_NATIVE_SETUP_QUICK_FIX.md', 'utf8');
|
|
192
|
-
const requiredModules = [
|
|
193
|
-
'crypto-browserify',
|
|
194
|
-
'stream-browserify',
|
|
195
|
-
'buffer',
|
|
196
|
-
'events',
|
|
197
|
-
'util',
|
|
198
|
-
'assert',
|
|
199
|
-
'process'
|
|
200
|
-
];
|
|
201
|
-
|
|
202
|
-
requiredModules.forEach(module => {
|
|
203
|
-
if (setupGuide.includes(module)) {
|
|
204
|
-
console.log(` ā
Setup guide includes ${module}`);
|
|
205
|
-
} else {
|
|
206
|
-
console.log(` ā ļø Setup guide missing ${module}`);
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
console.log('\n' + '='.repeat(60));
|
|
211
|
-
console.log('š ALL TESTS PASSED!');
|
|
212
|
-
console.log('\nā
The implemented fixes address all reported issues:');
|
|
213
|
-
console.log(' 1. ā
"Unable to resolve module os" - Fixed with os-polyfill.js');
|
|
214
|
-
console.log(' 2. ā
"Invalid call import(mod)" - Fixed with web-worker-polyfill.js');
|
|
215
|
-
console.log(' 3. ā
WASM compatibility - Fixed with wasm-fallback.js');
|
|
216
|
-
console.log(' 4. ā
Metro configuration - Complete example provided');
|
|
217
|
-
console.log(' 5. ā
Dependency management - Setup guide with all requirements');
|
|
218
|
-
console.log(' 6. ā
Integration verification - Automated dependency checker');
|
|
219
|
-
console.log('\nš The solution is ready for React Native 0.81+ integration!');
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Verify React Native Integration Dependencies
|
|
5
|
-
*
|
|
6
|
-
* This script checks if all required dependencies and polyfills are properly
|
|
7
|
-
* configured for React Native integration with dop-wallet-v6.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
const fs = require('fs');
|
|
11
|
-
const path = require('path');
|
|
12
|
-
|
|
13
|
-
console.log('š Verifying React Native integration setup...\n');
|
|
14
|
-
|
|
15
|
-
// Check if running in a React Native project
|
|
16
|
-
const reactNativeFiles = ['ios', 'android', 'metro.config.js', 'react-native.config.js'];
|
|
17
|
-
const isReactNativeProject = reactNativeFiles.some(file =>
|
|
18
|
-
fs.existsSync(path.join(process.cwd(), file))
|
|
19
|
-
);
|
|
20
|
-
|
|
21
|
-
if (!isReactNativeProject) {
|
|
22
|
-
console.log('ā¹ļø Not a React Native project - skipping verification');
|
|
23
|
-
process.exit(0);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
console.log('ā
React Native project detected\n');
|
|
27
|
-
|
|
28
|
-
// Required dependencies for React Native integration
|
|
29
|
-
const requiredDeps = [
|
|
30
|
-
'@react-native-async-storage/async-storage',
|
|
31
|
-
'react-native-get-random-values',
|
|
32
|
-
'crypto-browserify',
|
|
33
|
-
'stream-browserify',
|
|
34
|
-
'buffer',
|
|
35
|
-
'events',
|
|
36
|
-
'util',
|
|
37
|
-
'assert',
|
|
38
|
-
'process',
|
|
39
|
-
'path-browserify',
|
|
40
|
-
'url',
|
|
41
|
-
'querystring-es3',
|
|
42
|
-
'stream-http',
|
|
43
|
-
'https-browserify',
|
|
44
|
-
'browserify-zlib'
|
|
45
|
-
];
|
|
46
|
-
|
|
47
|
-
// Check package.json for required dependencies
|
|
48
|
-
let packageJson;
|
|
49
|
-
try {
|
|
50
|
-
packageJson = JSON.parse(fs.readFileSync(path.join(process.cwd(), 'package.json'), 'utf8'));
|
|
51
|
-
} catch (error) {
|
|
52
|
-
console.error('ā Cannot read package.json:', error.message);
|
|
53
|
-
process.exit(1);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
console.log('š¦ Checking required dependencies:');
|
|
57
|
-
const missingDeps = [];
|
|
58
|
-
|
|
59
|
-
requiredDeps.forEach(dep => {
|
|
60
|
-
const isInstalled = packageJson.dependencies?.[dep] || packageJson.devDependencies?.[dep];
|
|
61
|
-
if (isInstalled) {
|
|
62
|
-
console.log(` ā
${dep}`);
|
|
63
|
-
} else {
|
|
64
|
-
console.log(` ā ${dep} - MISSING`);
|
|
65
|
-
missingDeps.push(dep);
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
if (missingDeps.length > 0) {
|
|
70
|
-
console.log(`\nā Missing ${missingDeps.length} required dependencies.`);
|
|
71
|
-
console.log('\nš„ Install them with:');
|
|
72
|
-
console.log(`npm install ${missingDeps.join(' ')}`);
|
|
73
|
-
console.log('\n--- OR ---');
|
|
74
|
-
console.log(`yarn add ${missingDeps.join(' ')}`);
|
|
75
|
-
} else {
|
|
76
|
-
console.log('\nā
All required dependencies are installed');
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// Check for node polyfill files
|
|
80
|
-
console.log('\nš§ Checking Node.js polyfills:');
|
|
81
|
-
const requiredPolyfills = [
|
|
82
|
-
'node-polyfills/os-polyfill.js',
|
|
83
|
-
'node-polyfills/web-worker-polyfill.js',
|
|
84
|
-
'node-polyfills/wasm-fallback.js'
|
|
85
|
-
];
|
|
86
|
-
|
|
87
|
-
const missingPolyfills = [];
|
|
88
|
-
requiredPolyfills.forEach(polyfill => {
|
|
89
|
-
if (fs.existsSync(path.join(process.cwd(), polyfill))) {
|
|
90
|
-
console.log(` ā
${polyfill}`);
|
|
91
|
-
} else {
|
|
92
|
-
console.log(` ā ${polyfill} - MISSING`);
|
|
93
|
-
missingPolyfills.push(polyfill);
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
if (missingPolyfills.length > 0) {
|
|
98
|
-
console.log(`\nā Missing ${missingPolyfills.length} required polyfill files.`);
|
|
99
|
-
console.log('\nš Copy the node-polyfills/ directory from dop-wallet-v6 to your project root.');
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Check Metro configuration
|
|
103
|
-
console.log('\nāļø Checking Metro configuration:');
|
|
104
|
-
const metroConfigPath = path.join(process.cwd(), 'metro.config.js');
|
|
105
|
-
|
|
106
|
-
if (!fs.existsSync(metroConfigPath)) {
|
|
107
|
-
console.log(' ā metro.config.js - MISSING');
|
|
108
|
-
console.log('\nš Create metro.config.js with proper aliases for Node.js modules.');
|
|
109
|
-
} else {
|
|
110
|
-
const metroConfig = fs.readFileSync(metroConfigPath, 'utf8');
|
|
111
|
-
|
|
112
|
-
// Check for essential aliases
|
|
113
|
-
const hasOsAlias = metroConfig.includes("'os'") && metroConfig.includes('os-polyfill');
|
|
114
|
-
const hasWebWorkerAlias = metroConfig.includes("'web-worker'") && metroConfig.includes('web-worker-polyfill');
|
|
115
|
-
const hasCryptoAlias = metroConfig.includes("'crypto'") && metroConfig.includes('crypto-browserify');
|
|
116
|
-
|
|
117
|
-
if (hasOsAlias && hasWebWorkerAlias && hasCryptoAlias) {
|
|
118
|
-
console.log(' ā
metro.config.js - appears properly configured');
|
|
119
|
-
} else {
|
|
120
|
-
console.log(' ā ļø metro.config.js - may need updates');
|
|
121
|
-
if (!hasOsAlias) console.log(' - Missing os alias to os-polyfill.js');
|
|
122
|
-
if (!hasWebWorkerAlias) console.log(' - Missing web-worker alias to web-worker-polyfill.js');
|
|
123
|
-
if (!hasCryptoAlias) console.log(' - Missing crypto alias to crypto-browserify');
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Overall status
|
|
128
|
-
console.log('\n' + '='.repeat(50));
|
|
129
|
-
const totalIssues = missingDeps.length + missingPolyfills.length + (!fs.existsSync(metroConfigPath) ? 1 : 0);
|
|
130
|
-
|
|
131
|
-
if (totalIssues === 0) {
|
|
132
|
-
console.log('š React Native integration setup looks good!');
|
|
133
|
-
console.log('\nš” Next steps:');
|
|
134
|
-
console.log('1. Import "dop-wallet-v6/react-native-shims" FIRST in your App.js');
|
|
135
|
-
console.log('2. Test with: import { testCircomlibjs } from "dop-wallet-v6"');
|
|
136
|
-
process.exit(0);
|
|
137
|
-
} else {
|
|
138
|
-
console.log(`ā ļø Found ${totalIssues} setup issues that need attention.`);
|
|
139
|
-
console.log('\nš See REACT_NATIVE_SETUP_QUICK_FIX.md for detailed instructions.');
|
|
140
|
-
process.exit(1);
|
|
141
|
-
}
|