solvoid 1.0.0 → 1.1.1
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 +105 -0
- package/dist/client.d.ts +73 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +281 -0
- package/dist/client.js.map +1 -0
- package/dist/crypto/poseidon.d.ts +124 -0
- package/dist/crypto/poseidon.d.ts.map +1 -0
- package/dist/crypto/poseidon.js +293 -0
- package/dist/crypto/poseidon.js.map +1 -0
- package/dist/events/bus.d.ts +44 -0
- package/dist/events/bus.d.ts.map +1 -0
- package/dist/events/bus.js +83 -0
- package/dist/events/bus.js.map +1 -0
- package/dist/{sdk/index.d.ts → index.d.ts} +2 -3
- package/dist/index.d.ts.map +1 -0
- package/dist/{sdk/index.js → index.js} +21 -11
- package/dist/index.js.map +1 -0
- package/dist/integrity.d.ts +371 -0
- package/dist/integrity.d.ts.map +1 -0
- package/dist/integrity.js +260 -0
- package/dist/integrity.js.map +1 -0
- package/dist/network/shadow-rpc.d.ts +36 -0
- package/dist/network/shadow-rpc.d.ts.map +1 -0
- package/dist/network/shadow-rpc.js +163 -0
- package/dist/network/shadow-rpc.js.map +1 -0
- package/dist/{sdk/passport → passport}/manager.d.ts +9 -18
- package/dist/passport/manager.d.ts.map +1 -0
- package/dist/passport/manager.js +148 -0
- package/dist/passport/manager.js.map +1 -0
- package/dist/pipeline.d.ts +25 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +127 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/privacy/relayer.d.ts.map +1 -0
- package/dist/privacy/relayer.js.map +1 -0
- package/dist/privacy/shield.d.ts +27 -0
- package/dist/privacy/shield.d.ts.map +1 -0
- package/dist/privacy/shield.js +289 -0
- package/dist/privacy/shield.js.map +1 -0
- package/dist/{sdk/privacy-engine.d.ts → privacy-engine.d.ts} +2 -1
- package/dist/privacy-engine.d.ts.map +1 -0
- package/dist/{sdk/privacy-engine.js → privacy-engine.js} +24 -15
- package/dist/privacy-engine.js.map +1 -0
- package/dist/registry/idl-fetcher.d.ts +10 -0
- package/dist/registry/idl-fetcher.d.ts.map +1 -0
- package/dist/{sdk/registry → registry}/idl-fetcher.js +19 -16
- package/dist/registry/idl-fetcher.js.map +1 -0
- package/dist/registry/programs.d.ts.map +1 -0
- package/dist/registry/programs.js.map +1 -0
- package/dist/rescue/analyzer.d.ts +20 -0
- package/dist/rescue/analyzer.d.ts.map +1 -0
- package/dist/rescue/analyzer.js +137 -0
- package/dist/rescue/analyzer.js.map +1 -0
- package/dist/rescue/builder.d.ts +23 -0
- package/dist/rescue/builder.d.ts.map +1 -0
- package/dist/rescue/builder.js +164 -0
- package/dist/rescue/builder.js.map +1 -0
- package/dist/security/key-rotation.d.ts +153 -0
- package/dist/security/key-rotation.d.ts.map +1 -0
- package/dist/security/key-rotation.js +354 -0
- package/dist/security/key-rotation.js.map +1 -0
- package/dist/{sdk/semantics → semantics}/analyzer.d.ts.map +1 -1
- package/dist/{sdk/semantics → semantics}/analyzer.js.map +1 -1
- package/dist/semantics/decoder.d.ts.map +1 -0
- package/dist/semantics/decoder.js.map +1 -0
- package/dist/{sdk/semantics → semantics}/graph.d.ts.map +1 -1
- package/dist/{sdk/semantics → semantics}/graph.js.map +1 -1
- package/dist/semantics/idl-registry.d.ts +8 -0
- package/dist/semantics/idl-registry.d.ts.map +1 -0
- package/dist/{sdk/semantics → semantics}/idl-registry.js +23 -7
- package/dist/semantics/idl-registry.js.map +1 -0
- package/dist/semantics/types.d.ts +10 -0
- package/dist/semantics/types.d.ts.map +1 -0
- package/dist/{sdk → semantics}/types.js.map +1 -1
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/address.d.ts +10 -0
- package/dist/utils/address.d.ts.map +1 -0
- package/dist/utils/address.js +45 -0
- package/dist/utils/address.js.map +1 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +39 -76
- package/LICENSE +0 -21
- package/README.md +0 -123
- package/SECURITY.md +0 -174
- package/bin/solvoid-scan +0 -2
- package/dist/cli/privacy-scan.d.ts +0 -11
- package/dist/cli/privacy-scan.d.ts.map +0 -1
- package/dist/cli/privacy-scan.js +0 -112
- package/dist/cli/privacy-scan.js.map +0 -1
- package/dist/cli/solvoid-scan.d.ts +0 -13
- package/dist/cli/solvoid-scan.d.ts.map +0 -1
- package/dist/cli/solvoid-scan.js +0 -174
- package/dist/cli/solvoid-scan.js.map +0 -1
- package/dist/cli/test-forensics.d.ts +0 -2
- package/dist/cli/test-forensics.d.ts.map +0 -1
- package/dist/cli/test-forensics.js +0 -90
- package/dist/cli/test-forensics.js.map +0 -1
- package/dist/cli/test-scenarios.d.ts +0 -2
- package/dist/cli/test-scenarios.d.ts.map +0 -1
- package/dist/cli/test-scenarios.js +0 -96
- package/dist/cli/test-scenarios.js.map +0 -1
- package/dist/examples/enterprise-demo.js +0 -65
- package/dist/sdk/client.d.ts +0 -77
- package/dist/sdk/client.d.ts.map +0 -1
- package/dist/sdk/client.js +0 -180
- package/dist/sdk/client.js.map +0 -1
- package/dist/sdk/compliance/identity.d.ts +0 -34
- package/dist/sdk/compliance/identity.d.ts.map +0 -1
- package/dist/sdk/compliance/identity.js +0 -55
- package/dist/sdk/compliance/identity.js.map +0 -1
- package/dist/sdk/compliance/threat-model.d.ts +0 -14
- package/dist/sdk/compliance/threat-model.d.ts.map +0 -1
- package/dist/sdk/compliance/threat-model.js +0 -101
- package/dist/sdk/compliance/threat-model.js.map +0 -1
- package/dist/sdk/forensics/mev.js +0 -50
- package/dist/sdk/forensics/order-flow.d.ts +0 -20
- package/dist/sdk/forensics/order-flow.d.ts.map +0 -1
- package/dist/sdk/forensics/order-flow.js +0 -104
- package/dist/sdk/forensics/order-flow.js.map +0 -1
- package/dist/sdk/forensics/simulation.d.ts +0 -14
- package/dist/sdk/forensics/simulation.d.ts.map +0 -1
- package/dist/sdk/forensics/simulation.js +0 -45
- package/dist/sdk/forensics/simulation.js.map +0 -1
- package/dist/sdk/index.d.ts.map +0 -1
- package/dist/sdk/index.js.map +0 -1
- package/dist/sdk/network/shadow-rpc.d.ts +0 -18
- package/dist/sdk/network/shadow-rpc.d.ts.map +0 -1
- package/dist/sdk/network/shadow-rpc.js +0 -32
- package/dist/sdk/network/shadow-rpc.js.map +0 -1
- package/dist/sdk/obfuscator.d.ts +0 -36
- package/dist/sdk/obfuscator.d.ts.map +0 -1
- package/dist/sdk/obfuscator.js +0 -77
- package/dist/sdk/obfuscator.js.map +0 -1
- package/dist/sdk/passport/manager.d.ts.map +0 -1
- package/dist/sdk/passport/manager.js +0 -107
- package/dist/sdk/passport/manager.js.map +0 -1
- package/dist/sdk/pipeline.d.ts +0 -34
- package/dist/sdk/pipeline.d.ts.map +0 -1
- package/dist/sdk/pipeline.js +0 -81
- package/dist/sdk/pipeline.js.map +0 -1
- package/dist/sdk/privacy/confidential-transfer.d.ts +0 -81
- package/dist/sdk/privacy/confidential-transfer.d.ts.map +0 -1
- package/dist/sdk/privacy/confidential-transfer.js +0 -158
- package/dist/sdk/privacy/confidential-transfer.js.map +0 -1
- package/dist/sdk/privacy/history.d.ts +0 -11
- package/dist/sdk/privacy/history.d.ts.map +0 -1
- package/dist/sdk/privacy/history.js +0 -110
- package/dist/sdk/privacy/history.js.map +0 -1
- package/dist/sdk/privacy/light-protocol.d.ts +0 -42
- package/dist/sdk/privacy/light-protocol.d.ts.map +0 -1
- package/dist/sdk/privacy/light-protocol.js +0 -83
- package/dist/sdk/privacy/light-protocol.js.map +0 -1
- package/dist/sdk/privacy/relayer.d.ts.map +0 -1
- package/dist/sdk/privacy/relayer.js.map +0 -1
- package/dist/sdk/privacy/safe-obfuscator.d.ts +0 -38
- package/dist/sdk/privacy/safe-obfuscator.d.ts.map +0 -1
- package/dist/sdk/privacy/safe-obfuscator.js +0 -101
- package/dist/sdk/privacy/safe-obfuscator.js.map +0 -1
- package/dist/sdk/privacy/shield.d.ts +0 -34
- package/dist/sdk/privacy/shield.d.ts.map +0 -1
- package/dist/sdk/privacy/shield.js +0 -174
- package/dist/sdk/privacy/shield.js.map +0 -1
- package/dist/sdk/privacy/zk.js +0 -43
- package/dist/sdk/privacy-engine.d.ts.map +0 -1
- package/dist/sdk/privacy-engine.js.map +0 -1
- package/dist/sdk/registry/idl-fetcher.d.ts +0 -17
- package/dist/sdk/registry/idl-fetcher.d.ts.map +0 -1
- package/dist/sdk/registry/idl-fetcher.js.map +0 -1
- package/dist/sdk/registry/programs.d.ts.map +0 -1
- package/dist/sdk/registry/programs.js.map +0 -1
- package/dist/sdk/rescue/analyzer.d.ts +0 -22
- package/dist/sdk/rescue/analyzer.d.ts.map +0 -1
- package/dist/sdk/rescue/analyzer.js +0 -46
- package/dist/sdk/rescue/analyzer.js.map +0 -1
- package/dist/sdk/rescue/builder.d.ts +0 -16
- package/dist/sdk/rescue/builder.d.ts.map +0 -1
- package/dist/sdk/rescue/builder.js +0 -33
- package/dist/sdk/rescue/builder.js.map +0 -1
- package/dist/sdk/semantics/decoder.d.ts.map +0 -1
- package/dist/sdk/semantics/decoder.js.map +0 -1
- package/dist/sdk/semantics/idl-registry.d.ts +0 -7
- package/dist/sdk/semantics/idl-registry.d.ts.map +0 -1
- package/dist/sdk/semantics/idl-registry.js.map +0 -1
- package/dist/sdk/semantics/types.d.ts +0 -44
- package/dist/sdk/semantics/types.d.ts.map +0 -1
- package/dist/sdk/semantics/types.js.map +0 -1
- package/dist/sdk/simulator.d.ts +0 -15
- package/dist/sdk/simulator.d.ts.map +0 -1
- package/dist/sdk/simulator.js +0 -133
- package/dist/sdk/simulator.js.map +0 -1
- package/dist/sdk/types.d.ts +0 -53
- package/dist/sdk/types.d.ts.map +0 -1
- package/dist/sdk/utils/config.d.ts.map +0 -1
- package/dist/sdk/utils/config.js.map +0 -1
- package/dist/sdk/utils/logger.d.ts.map +0 -1
- package/dist/sdk/utils/logger.js.map +0 -1
- package/dist/tests/unit/idl-registry.test.d.ts +0 -2
- package/dist/tests/unit/idl-registry.test.d.ts.map +0 -1
- package/dist/tests/unit/idl-registry.test.js +0 -35
- package/dist/tests/unit/idl-registry.test.js.map +0 -1
- package/dist/tools/exploit_demonstration.js +0 -99
- package/dist/tools/gen-tx.js +0 -29
- package/dist/tools/get-recent-tx.js +0 -18
- /package/dist/{sdk/privacy → privacy}/relayer.d.ts +0 -0
- /package/dist/{sdk/privacy → privacy}/relayer.js +0 -0
- /package/dist/{sdk/registry → registry}/programs.d.ts +0 -0
- /package/dist/{sdk/registry → registry}/programs.js +0 -0
- /package/dist/{sdk/semantics → semantics}/analyzer.d.ts +0 -0
- /package/dist/{sdk/semantics → semantics}/analyzer.js +0 -0
- /package/dist/{sdk/semantics → semantics}/decoder.d.ts +0 -0
- /package/dist/{sdk/semantics → semantics}/decoder.js +0 -0
- /package/dist/{sdk/semantics → semantics}/graph.d.ts +0 -0
- /package/dist/{sdk/semantics → semantics}/graph.js +0 -0
- /package/dist/{sdk/semantics → semantics}/types.js +0 -0
- /package/dist/{sdk/types.js → types.js} +0 -0
- /package/dist/{sdk/utils → utils}/config.d.ts +0 -0
- /package/dist/{sdk/utils → utils}/config.js +0 -0
- /package/dist/{sdk/utils → utils}/logger.d.ts +0 -0
- /package/dist/{sdk/utils → utils}/logger.js +0 -0
|
@@ -0,0 +1,293 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.PoseidonUtils = exports.SecureSalts = exports.PoseidonHasher = void 0;
|
|
37
|
+
const circomlibjs_1 = require("circomlibjs");
|
|
38
|
+
const buffer_1 = require("buffer");
|
|
39
|
+
/**
|
|
40
|
+
* Poseidon hash wrapper with type safety and BN254 compatibility
|
|
41
|
+
* Matches Rust implementation parameters for cryptographic consistency
|
|
42
|
+
*/
|
|
43
|
+
class PoseidonHasher {
|
|
44
|
+
/**
|
|
45
|
+
* Initialize Poseidon with BN254 field parameters
|
|
46
|
+
* Width: 3 (2 inputs + 1 output for binary Merkle tree)
|
|
47
|
+
* Security: 128-bit (standard for zk-SNARK applications)
|
|
48
|
+
*/
|
|
49
|
+
static async initialize() {
|
|
50
|
+
if (this.initialized)
|
|
51
|
+
return;
|
|
52
|
+
try {
|
|
53
|
+
// Build Poseidon instance with parameters matching Rust implementation
|
|
54
|
+
this.poseidon = await (0, circomlibjs_1.buildPoseidon)();
|
|
55
|
+
// Configure for BN254 field with width=3 (2 inputs + 1 output)
|
|
56
|
+
// This matches the Rust Poseidon<Bn254, 3> setup
|
|
57
|
+
await this.poseidon.ready();
|
|
58
|
+
this.initialized = true;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
throw new Error(`Failed to initialize Poseidon: ${error}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Ensure Poseidon is initialized before use
|
|
66
|
+
*/
|
|
67
|
+
static async ensureInitialized() {
|
|
68
|
+
if (!this.initialized) {
|
|
69
|
+
await this.initialize();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Convert Buffer to BigInt for Poseidon input
|
|
74
|
+
* FIXED: Handles little-endian conversion consistently with Rust ark-ff
|
|
75
|
+
*/
|
|
76
|
+
static bufferToBigInt(buffer) {
|
|
77
|
+
// Reverse buffer for little-endian conversion
|
|
78
|
+
const leBuffer = buffer_1.Buffer.from(buffer).reverse();
|
|
79
|
+
return BigInt('0x' + leBuffer.toString('hex'));
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Convert BigInt output to Buffer (32 bytes, little-endian)
|
|
83
|
+
* FIXED: Ensures compatibility with Rust field element format (little-endian)
|
|
84
|
+
*/
|
|
85
|
+
static bigIntToBuffer(value) {
|
|
86
|
+
// Convert to hex string and pad to 64 characters (32 bytes)
|
|
87
|
+
const hex = value.toString(16).padStart(64, '0');
|
|
88
|
+
// Convert hex to Buffer and reverse for little-endian
|
|
89
|
+
const buffer = buffer_1.Buffer.from(hex, 'hex').reverse();
|
|
90
|
+
// Ensure exactly 32 bytes
|
|
91
|
+
if (buffer.length !== 32) {
|
|
92
|
+
throw new Error(`Poseidon output must be 32 bytes, got ${buffer.length}`);
|
|
93
|
+
}
|
|
94
|
+
return buffer;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Hash with salt for commitment derivation
|
|
98
|
+
* Matches Rust: hash_commitment_with_salt
|
|
99
|
+
*/
|
|
100
|
+
static async hashWithSalt(left, right, saltValue) {
|
|
101
|
+
await this.ensureInitialized();
|
|
102
|
+
if (left.length !== 32 || right.length !== 32 || saltValue.length !== 32) {
|
|
103
|
+
throw new Error('All inputs must be exactly 32 bytes');
|
|
104
|
+
}
|
|
105
|
+
const l = this.bufferToBigInt(left);
|
|
106
|
+
const r = this.bufferToBigInt(right);
|
|
107
|
+
const s = this.bufferToBigInt(saltValue);
|
|
108
|
+
// Matches Rust: sponge.absorb(&l); sponge.absorb(&r); sponge.absorb(&s);
|
|
109
|
+
const resultBigInt = this.poseidon([l, r, s]);
|
|
110
|
+
return this.bigIntToBuffer(resultBigInt);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Hash two 32-byte inputs using Poseidon(2)
|
|
114
|
+
* MATCHES MerkleTreeChecker circuit: Poseidon(2)
|
|
115
|
+
*/
|
|
116
|
+
static async hashTwoInputs(left, right) {
|
|
117
|
+
await this.ensureInitialized();
|
|
118
|
+
if (left.length !== 32 || right.length !== 32) {
|
|
119
|
+
throw new Error('All inputs must be exactly 32 bytes');
|
|
120
|
+
}
|
|
121
|
+
const l = this.bufferToBigInt(left);
|
|
122
|
+
const r = this.bufferToBigInt(right);
|
|
123
|
+
// Strict Poseidon(2) for Merkle Tree consistency
|
|
124
|
+
const resultBigInt = this.poseidon([l, r]);
|
|
125
|
+
return this.bigIntToBuffer(resultBigInt);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Hash single input with zero for nullifier hash
|
|
129
|
+
* MATCHES circuit: Poseidon(nullifier, 1)
|
|
130
|
+
*/
|
|
131
|
+
static async hashWithZero(input) {
|
|
132
|
+
await this.ensureInitialized();
|
|
133
|
+
const n = this.bufferToBigInt(input);
|
|
134
|
+
const resultBigInt = this.poseidon([n, BigInt(1)]);
|
|
135
|
+
return this.bigIntToBuffer(resultBigInt);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Compute commitment from secret, nullifier, and amount
|
|
139
|
+
* FIXED: Includes amount to prevent value inflation
|
|
140
|
+
* Matches circuit: Poseidon(secret, nullifier, amount)
|
|
141
|
+
*/
|
|
142
|
+
static async computeCommitment(secret, nullifier, amount) {
|
|
143
|
+
await this.ensureInitialized();
|
|
144
|
+
const s = this.bufferToBigInt(secret);
|
|
145
|
+
const n = this.bufferToBigInt(nullifier);
|
|
146
|
+
const a = amount;
|
|
147
|
+
const resultBigInt = this.poseidon([s, n, a]);
|
|
148
|
+
return this.bigIntToBuffer(resultBigInt);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Compute nullifier hash from nullifier
|
|
152
|
+
* FIXED: Uses constant domain salt matching the circuit
|
|
153
|
+
* Matches circuit: Poseidon(nullifier, 1)
|
|
154
|
+
*/
|
|
155
|
+
static async computeNullifierHash(nullifier) {
|
|
156
|
+
await this.ensureInitialized();
|
|
157
|
+
const n = this.bufferToBigInt(nullifier);
|
|
158
|
+
const salt = BigInt(1);
|
|
159
|
+
const resultBigInt = this.poseidon([n, salt]);
|
|
160
|
+
return this.bigIntToBuffer(resultBigInt);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Compute Merkle root from leaf and proof path
|
|
164
|
+
* @param leaf - 32-byte leaf value
|
|
165
|
+
* @param proof - Array of 32-byte proof elements
|
|
166
|
+
* @param indices - Array of indices (0 for left, 1 for right)
|
|
167
|
+
* @returns 32-byte Merkle root
|
|
168
|
+
*/
|
|
169
|
+
static async computeMerkleRoot(leaf, proof, indices) {
|
|
170
|
+
if (proof.length !== indices.length) {
|
|
171
|
+
throw new Error('Proof and indices arrays must have same length');
|
|
172
|
+
}
|
|
173
|
+
let current = leaf;
|
|
174
|
+
for (let i = 0; i < proof.length; i++) {
|
|
175
|
+
const sibling = proof[i];
|
|
176
|
+
const index = indices[i];
|
|
177
|
+
if (index === 0) {
|
|
178
|
+
// Current is left sibling
|
|
179
|
+
current = await this.hashTwoInputs(current, sibling);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
// Current is right sibling
|
|
183
|
+
current = await this.hashTwoInputs(sibling, current);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return current;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Verify hash output is within BN254 field constraints
|
|
190
|
+
* Ensures compatibility with zk-SNARK circuit requirements
|
|
191
|
+
*/
|
|
192
|
+
static verifyFieldCompatibility(hash) {
|
|
193
|
+
if (hash.length !== 32)
|
|
194
|
+
return false;
|
|
195
|
+
try {
|
|
196
|
+
// Convert to BigInt and check it's within BN254 field
|
|
197
|
+
const value = this.bufferToBigInt(hash);
|
|
198
|
+
// BN254 prime field modulus (p)
|
|
199
|
+
const BN254_PRIME = BigInt('21888242871839275222246405745257275088548364400416034343698204186575808495617');
|
|
200
|
+
return value < BN254_PRIME;
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Get Poseidon instance for advanced usage
|
|
208
|
+
* @returns The underlying circomlibjs Poseidon instance
|
|
209
|
+
*/
|
|
210
|
+
static async getPoseidonInstance() {
|
|
211
|
+
await this.ensureInitialized();
|
|
212
|
+
return this.poseidon;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Reset the Poseidon instance (useful for testing)
|
|
216
|
+
*/
|
|
217
|
+
static reset() {
|
|
218
|
+
this.poseidon = null;
|
|
219
|
+
this.initialized = false;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
exports.PoseidonHasher = PoseidonHasher;
|
|
223
|
+
PoseidonHasher.poseidon = null;
|
|
224
|
+
PoseidonHasher.initialized = false;
|
|
225
|
+
/**
|
|
226
|
+
* FIXED: Secure salt generation for cryptographic domain separation
|
|
227
|
+
* Matches Rust implementation in poseidon.rs
|
|
228
|
+
*/
|
|
229
|
+
class SecureSalts {
|
|
230
|
+
static generateSecureSalts(transactionContext) {
|
|
231
|
+
const commitmentSalt = crypto.createHash('sha256')
|
|
232
|
+
.update(transactionContext)
|
|
233
|
+
.update(buffer_1.Buffer.from("commitment_domain"))
|
|
234
|
+
.digest();
|
|
235
|
+
const nullifierSalt = crypto.createHash('sha256')
|
|
236
|
+
.update(transactionContext)
|
|
237
|
+
.update(buffer_1.Buffer.from("nullifier_domain"))
|
|
238
|
+
.digest();
|
|
239
|
+
const pathSalt = crypto.createHash('sha256')
|
|
240
|
+
.update(transactionContext)
|
|
241
|
+
.update(buffer_1.Buffer.from("path_domain"))
|
|
242
|
+
.digest();
|
|
243
|
+
return {
|
|
244
|
+
commitmentSalt,
|
|
245
|
+
nullifierSalt,
|
|
246
|
+
pathSalt
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
static fromTransactionComponents(root, nullifier, recipient, amount) {
|
|
250
|
+
const amountBuf = buffer_1.Buffer.alloc(8);
|
|
251
|
+
amountBuf.writeBigUInt64LE(amount);
|
|
252
|
+
const context = buffer_1.Buffer.concat([root, nullifier, recipient, amountBuf]);
|
|
253
|
+
return this.generateSecureSalts(context);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
exports.SecureSalts = SecureSalts;
|
|
257
|
+
/**
|
|
258
|
+
* Utility functions for working with Poseidon hashes
|
|
259
|
+
*/
|
|
260
|
+
class PoseidonUtils {
|
|
261
|
+
/**
|
|
262
|
+
* Convert hex string to Buffer (32 bytes)
|
|
263
|
+
*/
|
|
264
|
+
static hexToBuffer(hex) {
|
|
265
|
+
if (!/^[0-9a-fA-F]{64}$/.test(hex)) {
|
|
266
|
+
throw new Error('Hex must be exactly 64 characters (32 bytes)');
|
|
267
|
+
}
|
|
268
|
+
return buffer_1.Buffer.from(hex, 'hex');
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Convert Buffer to hex string
|
|
272
|
+
*/
|
|
273
|
+
static bufferToHex(buffer) {
|
|
274
|
+
return buffer.toString('hex');
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Validate Buffer is 32 bytes
|
|
278
|
+
*/
|
|
279
|
+
static validate32Bytes(buffer) {
|
|
280
|
+
if (buffer.length !== 32) {
|
|
281
|
+
throw new Error(`Buffer must be exactly 32 bytes, got ${buffer.length}`);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Create zero Buffer (32 bytes of zeros)
|
|
286
|
+
*/
|
|
287
|
+
static zeroBuffer() {
|
|
288
|
+
return buffer_1.Buffer.alloc(32, 0);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
exports.PoseidonUtils = PoseidonUtils;
|
|
292
|
+
const crypto = __importStar(require("crypto"));
|
|
293
|
+
//# sourceMappingURL=poseidon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poseidon.js","sourceRoot":"","sources":["../../crypto/poseidon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SolVoid Event Bus
|
|
3
|
+
* Central event system for real-time forensic telemetry across the SDK.
|
|
4
|
+
*/
|
|
5
|
+
type EventType = 'SCAN_START' | 'SCAN_COMPLETE' | 'LEAK_DETECTED' | 'TRANSACTION_PARSED' | 'PROOF_GENERATED' | 'RELAY_BROADCAST' | 'COMMITMENT_CREATED' | 'WITHDRAWAL_COMPLETE' | 'ERROR' | 'INFO' | 'WARNING';
|
|
6
|
+
export interface ForensicEvent {
|
|
7
|
+
type: EventType;
|
|
8
|
+
timestamp: Date;
|
|
9
|
+
message: string;
|
|
10
|
+
data?: Record<string, unknown>;
|
|
11
|
+
hex?: string;
|
|
12
|
+
}
|
|
13
|
+
type EventCallback = (event: ForensicEvent) => void;
|
|
14
|
+
declare class EventBusClass {
|
|
15
|
+
private listeners;
|
|
16
|
+
private globalListeners;
|
|
17
|
+
/**
|
|
18
|
+
* Subscribe to a specific event type
|
|
19
|
+
*/
|
|
20
|
+
on(type: EventType, callback: EventCallback): () => void;
|
|
21
|
+
/**
|
|
22
|
+
* Subscribe to ALL events (for terminal/logging)
|
|
23
|
+
*/
|
|
24
|
+
onAll(callback: EventCallback): () => void;
|
|
25
|
+
/**
|
|
26
|
+
* Emit an event to all subscribers
|
|
27
|
+
*/
|
|
28
|
+
emit(type: EventType, message: string, data?: Record<string, unknown>, hex?: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Helper methods for common event types
|
|
31
|
+
*/
|
|
32
|
+
info(message: string, data?: Record<string, unknown>): void;
|
|
33
|
+
warn(message: string, data?: Record<string, unknown>): void;
|
|
34
|
+
error(message: string, data?: Record<string, unknown>): void;
|
|
35
|
+
scanStart(address: string): void;
|
|
36
|
+
scanComplete(address: string, leakCount: number, score: number): void;
|
|
37
|
+
leakDetected(type: string, severity: string, description: string, txSignature?: string): void;
|
|
38
|
+
transactionParsed(signature: string, programId: string): void;
|
|
39
|
+
proofGenerated(proofType: string): void;
|
|
40
|
+
relayBroadcast(nodeCount: number, txid: string): void;
|
|
41
|
+
}
|
|
42
|
+
export declare const EventBus: EventBusClass;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=bus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bus.d.ts","sourceRoot":"","sources":["../../events/bus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,KAAK,SAAS,GACR,YAAY,GACZ,eAAe,GACf,eAAe,GACf,oBAAoB,GACpB,iBAAiB,GACjB,iBAAiB,GACjB,oBAAoB,GACpB,qBAAqB,GACrB,OAAO,GACP,MAAM,GACN,SAAS,CAAC;AAEhB,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,aAAa,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAEpD,cAAM,aAAa;IACf,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,eAAe,CAAiC;IAExD;;OAEG;IACH,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,GAAG,MAAM,IAAI;IAWxD;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,IAAI;IAO1C;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAgB1F;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIpD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIpD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIrD,SAAS,CAAC,OAAO,EAAE,MAAM;IAIzB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAI9D,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IAItF,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAItD,cAAc,CAAC,SAAS,EAAE,MAAM;IAIhC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAGjD;AAGD,eAAO,MAAM,QAAQ,eAAsB,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SolVoid Event Bus
|
|
4
|
+
* Central event system for real-time forensic telemetry across the SDK.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.EventBus = void 0;
|
|
8
|
+
class EventBusClass {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.listeners = new Map();
|
|
11
|
+
this.globalListeners = new Set();
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Subscribe to a specific event type
|
|
15
|
+
*/
|
|
16
|
+
on(type, callback) {
|
|
17
|
+
if (!this.listeners.has(type)) {
|
|
18
|
+
this.listeners.set(type, new Set());
|
|
19
|
+
}
|
|
20
|
+
this.listeners.get(type).add(callback);
|
|
21
|
+
return () => {
|
|
22
|
+
this.listeners.get(type)?.delete(callback);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Subscribe to ALL events (for terminal/logging)
|
|
27
|
+
*/
|
|
28
|
+
onAll(callback) {
|
|
29
|
+
this.globalListeners.add(callback);
|
|
30
|
+
return () => {
|
|
31
|
+
this.globalListeners.delete(callback);
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Emit an event to all subscribers
|
|
36
|
+
*/
|
|
37
|
+
emit(type, message, data, hex) {
|
|
38
|
+
const event = {
|
|
39
|
+
type,
|
|
40
|
+
timestamp: new Date(),
|
|
41
|
+
message,
|
|
42
|
+
data,
|
|
43
|
+
hex
|
|
44
|
+
};
|
|
45
|
+
// Notify type-specific listeners
|
|
46
|
+
this.listeners.get(type)?.forEach(cb => cb(event));
|
|
47
|
+
// Notify global listeners
|
|
48
|
+
this.globalListeners.forEach(cb => cb(event));
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Helper methods for common event types
|
|
52
|
+
*/
|
|
53
|
+
info(message, data) {
|
|
54
|
+
this.emit('INFO', message, data);
|
|
55
|
+
}
|
|
56
|
+
warn(message, data) {
|
|
57
|
+
this.emit('WARNING', message, data);
|
|
58
|
+
}
|
|
59
|
+
error(message, data) {
|
|
60
|
+
this.emit('ERROR', message, data);
|
|
61
|
+
}
|
|
62
|
+
scanStart(address) {
|
|
63
|
+
this.emit('SCAN_START', `Initiating forensic scan for ${address.slice(0, 8)}...`, { address });
|
|
64
|
+
}
|
|
65
|
+
scanComplete(address, leakCount, score) {
|
|
66
|
+
this.emit('SCAN_COMPLETE', `Scan complete. ${leakCount} leaks detected. Privacy score: ${score}`, { address, leakCount, score });
|
|
67
|
+
}
|
|
68
|
+
leakDetected(type, severity, description, txSignature) {
|
|
69
|
+
this.emit('LEAK_DETECTED', `${severity} ${type} leak: ${description}`, { type, severity }, txSignature);
|
|
70
|
+
}
|
|
71
|
+
transactionParsed(signature, programId) {
|
|
72
|
+
this.emit('TRANSACTION_PARSED', `Parsed transaction from ${programId.slice(0, 8)}...`, { signature, programId }, signature);
|
|
73
|
+
}
|
|
74
|
+
proofGenerated(proofType) {
|
|
75
|
+
this.emit('PROOF_GENERATED', `ZK-${proofType} proof generated successfully`, { proofType });
|
|
76
|
+
}
|
|
77
|
+
relayBroadcast(nodeCount, txid) {
|
|
78
|
+
this.emit('RELAY_BROADCAST', `Transaction broadcast via ${nodeCount} shadow nodes`, { nodeCount, txid }, txid);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Singleton export
|
|
82
|
+
exports.EventBus = new EventBusClass();
|
|
83
|
+
//# sourceMappingURL=bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bus.js","sourceRoot":"","sources":["../../events/bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
export * from './types';
|
|
2
|
+
export { DataOrigin, DataTrust, Unit, RelayRequestSchema, RelayResponseSchema, OnionLayerSchema, enforce, DataMetadata, RelayResponse, RelayRequest, OnionLayer } from './integrity';
|
|
2
3
|
export { PrivacyEngine } from './privacy-engine';
|
|
3
4
|
export { PrivacyPipeline } from './pipeline';
|
|
4
5
|
export { PrivacyShield } from './privacy/shield';
|
|
5
|
-
export { PrivacyRelayer } from './privacy/relayer';
|
|
6
6
|
export { SolVoidClient, SolVoidConfig } from './client';
|
|
7
|
-
export { OnChainIdlFetcher } from './registry/idl-fetcher';
|
|
8
7
|
export { KNOWN_PROGRAMS, identifyProgram, isSwapProgram } from './registry/programs';
|
|
9
|
-
export {
|
|
8
|
+
export { EventBus, ForensicEvent } from './events/bus';
|
|
10
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,OAAO,EACL,UAAU,EACV,SAAS,EACT,IAAI,EACJ,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,OAAO,EACP,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,UAAU,EACX,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGrF,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -14,30 +14,40 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.
|
|
17
|
+
exports.EventBus = exports.isSwapProgram = exports.identifyProgram = exports.KNOWN_PROGRAMS = exports.SolVoidClient = exports.PrivacyShield = exports.PrivacyPipeline = exports.PrivacyEngine = exports.enforce = exports.OnionLayerSchema = exports.RelayResponseSchema = exports.RelayRequestSchema = exports.Unit = exports.DataTrust = exports.DataOrigin = void 0;
|
|
18
18
|
// Export all public types
|
|
19
19
|
__exportStar(require("./types"), exports);
|
|
20
|
+
// Export integrity module (server-side) - specific exports to avoid conflicts
|
|
21
|
+
var integrity_1 = require("./integrity");
|
|
22
|
+
Object.defineProperty(exports, "DataOrigin", { enumerable: true, get: function () { return integrity_1.DataOrigin; } });
|
|
23
|
+
Object.defineProperty(exports, "DataTrust", { enumerable: true, get: function () { return integrity_1.DataTrust; } });
|
|
24
|
+
Object.defineProperty(exports, "Unit", { enumerable: true, get: function () { return integrity_1.Unit; } });
|
|
25
|
+
Object.defineProperty(exports, "RelayRequestSchema", { enumerable: true, get: function () { return integrity_1.RelayRequestSchema; } });
|
|
26
|
+
Object.defineProperty(exports, "RelayResponseSchema", { enumerable: true, get: function () { return integrity_1.RelayResponseSchema; } });
|
|
27
|
+
Object.defineProperty(exports, "OnionLayerSchema", { enumerable: true, get: function () { return integrity_1.OnionLayerSchema; } });
|
|
28
|
+
Object.defineProperty(exports, "enforce", { enumerable: true, get: function () { return integrity_1.enforce; } });
|
|
20
29
|
// Export privacy engine (core scanning & remediation detection)
|
|
21
30
|
var privacy_engine_1 = require("./privacy-engine");
|
|
22
31
|
Object.defineProperty(exports, "PrivacyEngine", { enumerable: true, get: function () { return privacy_engine_1.PrivacyEngine; } });
|
|
23
32
|
var pipeline_1 = require("./pipeline");
|
|
24
33
|
Object.defineProperty(exports, "PrivacyPipeline", { enumerable: true, get: function () { return pipeline_1.PrivacyPipeline; } });
|
|
25
|
-
// Export Privacy Core (
|
|
34
|
+
// Export Privacy Core (browser-safe)
|
|
26
35
|
var shield_1 = require("./privacy/shield");
|
|
27
36
|
Object.defineProperty(exports, "PrivacyShield", { enumerable: true, get: function () { return shield_1.PrivacyShield; } });
|
|
28
|
-
|
|
29
|
-
Object.defineProperty(exports, "PrivacyRelayer", { enumerable: true, get: function () { return relayer_1.PrivacyRelayer; } });
|
|
30
|
-
// Export client (main entry point)
|
|
37
|
+
// Export client (main entry point - browser safe)
|
|
31
38
|
var client_1 = require("./client");
|
|
32
39
|
Object.defineProperty(exports, "SolVoidClient", { enumerable: true, get: function () { return client_1.SolVoidClient; } });
|
|
33
|
-
// Export registry utilities
|
|
34
|
-
var idl_fetcher_1 = require("./registry/idl-fetcher");
|
|
35
|
-
Object.defineProperty(exports, "OnChainIdlFetcher", { enumerable: true, get: function () { return idl_fetcher_1.OnChainIdlFetcher; } });
|
|
40
|
+
// Export registry utilities
|
|
36
41
|
var programs_1 = require("./registry/programs");
|
|
37
42
|
Object.defineProperty(exports, "KNOWN_PROGRAMS", { enumerable: true, get: function () { return programs_1.KNOWN_PROGRAMS; } });
|
|
38
43
|
Object.defineProperty(exports, "identifyProgram", { enumerable: true, get: function () { return programs_1.identifyProgram; } });
|
|
39
44
|
Object.defineProperty(exports, "isSwapProgram", { enumerable: true, get: function () { return programs_1.isSwapProgram; } });
|
|
40
|
-
// Export
|
|
41
|
-
var
|
|
42
|
-
Object.defineProperty(exports, "
|
|
45
|
+
// Export event system (browser-safe)
|
|
46
|
+
var bus_1 = require("./events/bus");
|
|
47
|
+
Object.defineProperty(exports, "EventBus", { enumerable: true, get: function () { return bus_1.EventBus; } });
|
|
48
|
+
// Note: The following are server-side only and should be imported directly:
|
|
49
|
+
// - PrivacyRelayer from './privacy/relayer'
|
|
50
|
+
// - ShadowRPC from './network/shadow-rpc'
|
|
51
|
+
// - ConfigLoader from './utils/config'
|
|
52
|
+
// - OnChainIdlFetcher from './registry/idl-fetcher'
|
|
43
53
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0BAA0B;AAC1B,0CAAwB;AAExB,8EAA8E;AAC9E,yCAYqB;AAXnB,uGAAA,UAAU,OAAA;AACV,sGAAA,SAAS,OAAA;AACT,iGAAA,IAAI,OAAA;AACJ,+GAAA,kBAAkB,OAAA;AAClB,gHAAA,mBAAmB,OAAA;AACnB,6GAAA,gBAAgB,OAAA;AAChB,oGAAA,OAAO,OAAA;AAOT,gEAAgE;AAChE,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,uCAA6C;AAApC,2GAAA,eAAe,OAAA;AAExB,qCAAqC;AACrC,2CAAiD;AAAxC,uGAAA,aAAa,OAAA;AAEtB,kDAAkD;AAClD,mCAAwD;AAA/C,uGAAA,aAAa,OAAA;AAEtB,4BAA4B;AAC5B,gDAAqF;AAA5E,0GAAA,cAAc,OAAA;AAAE,2GAAA,eAAe,OAAA;AAAE,yGAAA,aAAa,OAAA;AAEvD,qCAAqC;AACrC,oCAAuD;AAA9C,+FAAA,QAAQ,OAAA;AAEjB,4EAA4E;AAC5E,4CAA4C;AAC5C,0CAA0C;AAC1C,uCAAuC;AACvC,oDAAoD"}
|