@opendatalabs/vana-sdk 0.1.0-alpha.f54fafd → 0.1.0-alpha.f9cc6ed

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.
Files changed (57) hide show
  1. package/README.md +13 -4
  2. package/package.json +31 -15
  3. package/dist/browser-DY8XDblx.d.ts +0 -241
  4. package/dist/browser.d.ts +0 -1
  5. package/dist/browser.js +0 -309
  6. package/dist/browser.js.map +0 -1
  7. package/dist/chains.browser.cjs +0 -96
  8. package/dist/chains.browser.cjs.map +0 -1
  9. package/dist/chains.browser.d.cts +0 -53
  10. package/dist/chains.browser.d.ts +0 -53
  11. package/dist/chains.browser.js +0 -65
  12. package/dist/chains.browser.js.map +0 -1
  13. package/dist/chains.cjs +0 -96
  14. package/dist/chains.cjs.map +0 -1
  15. package/dist/chains.d.cts +0 -2
  16. package/dist/chains.d.ts +0 -2
  17. package/dist/chains.js +0 -65
  18. package/dist/chains.js.map +0 -1
  19. package/dist/chains.node.cjs +0 -96
  20. package/dist/chains.node.cjs.map +0 -1
  21. package/dist/chains.node.d.cts +0 -2
  22. package/dist/chains.node.d.ts +0 -2
  23. package/dist/chains.node.js +0 -65
  24. package/dist/chains.node.js.map +0 -1
  25. package/dist/index.browser.d.ts +0 -37694
  26. package/dist/index.browser.js +0 -47404
  27. package/dist/index.browser.js.map +0 -1
  28. package/dist/index.d.cts +0 -2
  29. package/dist/index.node.cjs +0 -47928
  30. package/dist/index.node.cjs.map +0 -1
  31. package/dist/index.node.d.cts +0 -37857
  32. package/dist/index.node.d.ts +0 -37857
  33. package/dist/index.node.js +0 -47785
  34. package/dist/index.node.js.map +0 -1
  35. package/dist/node-D9-F9uEP.d.cts +0 -238
  36. package/dist/node-D9-F9uEP.d.ts +0 -238
  37. package/dist/node.cjs +0 -348
  38. package/dist/node.cjs.map +0 -1
  39. package/dist/node.d.cts +0 -1
  40. package/dist/node.d.ts +0 -1
  41. package/dist/node.js +0 -311
  42. package/dist/node.js.map +0 -1
  43. package/dist/platform.browser.d.ts +0 -60
  44. package/dist/platform.browser.js +0 -388
  45. package/dist/platform.browser.js.map +0 -1
  46. package/dist/platform.cjs +0 -744
  47. package/dist/platform.cjs.map +0 -1
  48. package/dist/platform.d.cts +0 -2
  49. package/dist/platform.d.ts +0 -2
  50. package/dist/platform.js +0 -707
  51. package/dist/platform.js.map +0 -1
  52. package/dist/platform.node.cjs +0 -744
  53. package/dist/platform.node.cjs.map +0 -1
  54. package/dist/platform.node.d.cts +0 -105
  55. package/dist/platform.node.d.ts +0 -105
  56. package/dist/platform.node.js +0 -707
  57. package/dist/platform.node.js.map +0 -1
package/dist/browser.js DELETED
@@ -1,309 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
-
5
- // src/platform/shared/crypto-utils.ts
6
- function processWalletPublicKey(publicKey) {
7
- const publicKeyHex = publicKey.startsWith("0x") ? publicKey.slice(2) : publicKey;
8
- const publicKeyBytes = Buffer.from(publicKeyHex, "hex");
9
- return publicKeyBytes.length === 64 ? Buffer.concat([Buffer.from([4]), publicKeyBytes]) : publicKeyBytes;
10
- }
11
- function processWalletPrivateKey(privateKey) {
12
- const privateKeyHex = privateKey.startsWith("0x") ? privateKey.slice(2) : privateKey;
13
- return Buffer.from(privateKeyHex, "hex");
14
- }
15
- function parseEncryptedDataBuffer(encryptedBuffer) {
16
- return {
17
- iv: encryptedBuffer.slice(0, 16),
18
- ephemPublicKey: encryptedBuffer.slice(16, 81),
19
- // 65 bytes for uncompressed public key
20
- ciphertext: encryptedBuffer.slice(81, -32),
21
- mac: encryptedBuffer.slice(-32)
22
- };
23
- }
24
-
25
- // src/platform/shared/pgp-utils.ts
26
- var STANDARD_PGP_CONFIG = {
27
- preferredCompressionAlgorithm: 2,
28
- // zlib (openpgp.enums.compression.zlib)
29
- preferredSymmetricAlgorithm: 7
30
- // aes256 (openpgp.enums.symmetric.aes256)
31
- };
32
- function processPGPKeyOptions(options) {
33
- return {
34
- name: options?.name || "Vana User",
35
- email: options?.email || "user@vana.org",
36
- passphrase: options?.passphrase
37
- };
38
- }
39
- function getPGPKeyGenParams(options) {
40
- const { name, email, passphrase } = processPGPKeyOptions(options);
41
- return {
42
- type: "rsa",
43
- rsaBits: 2048,
44
- userIDs: [{ name, email }],
45
- passphrase,
46
- config: STANDARD_PGP_CONFIG
47
- };
48
- }
49
-
50
- // src/platform/shared/error-utils.ts
51
- function wrapCryptoError(operation, error) {
52
- const message = error instanceof Error ? error.message : "Unknown error";
53
- return new Error(`${operation} failed: ${message}`);
54
- }
55
-
56
- // src/utils/lazy-import.ts
57
- function lazyImport(importFn) {
58
- let cached = null;
59
- return () => {
60
- if (!cached) {
61
- cached = importFn().catch((err) => {
62
- cached = null;
63
- throw new Error("Failed to load module", { cause: err });
64
- });
65
- }
66
- return cached;
67
- };
68
- }
69
-
70
- // src/platform/browser.ts
71
- var getOpenPGP = lazyImport(() => import("openpgp"));
72
- var BrowserCryptoAdapter = class {
73
- async encryptWithPublicKey(data, publicKeyHex) {
74
- try {
75
- const eccrypto = await import("eccrypto-js");
76
- const publicKeyBuffer = Buffer.from(publicKeyHex, "hex");
77
- const encrypted = await eccrypto.encrypt(
78
- publicKeyBuffer,
79
- Buffer.from(data, "utf8")
80
- );
81
- const result = Buffer.concat([
82
- encrypted.iv,
83
- encrypted.ephemPublicKey,
84
- encrypted.ciphertext,
85
- encrypted.mac
86
- ]);
87
- return result.toString("hex");
88
- } catch (error) {
89
- throw new Error(`Encryption failed: ${error}`);
90
- }
91
- }
92
- async decryptWithPrivateKey(encryptedData, privateKeyHex) {
93
- try {
94
- const eccrypto = await import("eccrypto-js");
95
- const privateKeyBuffer = processWalletPrivateKey(privateKeyHex);
96
- const encryptedBuffer = Buffer.from(encryptedData, "hex");
97
- const { iv, ephemPublicKey, ciphertext, mac } = parseEncryptedDataBuffer(encryptedBuffer);
98
- const encryptedObj = { iv, ephemPublicKey, ciphertext, mac };
99
- const decryptedBuffer = await eccrypto.decrypt(
100
- privateKeyBuffer,
101
- encryptedObj
102
- );
103
- return decryptedBuffer.toString("utf8");
104
- } catch (error) {
105
- throw new Error(`Decryption failed: ${error}`);
106
- }
107
- }
108
- async generateKeyPair() {
109
- try {
110
- const eccrypto = await import("eccrypto-js");
111
- const privateKeyBytes = new Uint8Array(32);
112
- crypto.getRandomValues(privateKeyBytes);
113
- const privateKey = Buffer.from(privateKeyBytes);
114
- const publicKey = eccrypto.getPublicCompressed(privateKey);
115
- return {
116
- privateKey: privateKey.toString("hex"),
117
- publicKey: publicKey.toString("hex")
118
- };
119
- } catch (error) {
120
- throw wrapCryptoError("key generation", error);
121
- }
122
- }
123
- async encryptWithWalletPublicKey(data, publicKey) {
124
- try {
125
- const eccrypto = await import("eccrypto-js");
126
- const uncompressedKey = processWalletPublicKey(publicKey);
127
- const encryptedBuffer = await eccrypto.encrypt(
128
- uncompressedKey,
129
- Buffer.from(data)
130
- );
131
- const result = Buffer.concat([
132
- encryptedBuffer.iv,
133
- encryptedBuffer.ephemPublicKey,
134
- encryptedBuffer.ciphertext,
135
- encryptedBuffer.mac
136
- ]);
137
- return result.toString("hex");
138
- } catch (error) {
139
- throw wrapCryptoError("encrypt with wallet public key", error);
140
- }
141
- }
142
- async decryptWithWalletPrivateKey(encryptedData, privateKey) {
143
- try {
144
- const eccrypto = await import("eccrypto-js");
145
- const privateKeyBuffer = processWalletPrivateKey(privateKey);
146
- const encryptedBuffer = Buffer.from(encryptedData, "hex");
147
- const { iv, ephemPublicKey, ciphertext, mac } = parseEncryptedDataBuffer(encryptedBuffer);
148
- const encryptedObj = { iv, ephemPublicKey, ciphertext, mac };
149
- const decryptedBuffer = await eccrypto.decrypt(
150
- privateKeyBuffer,
151
- encryptedObj
152
- );
153
- return decryptedBuffer.toString("utf8");
154
- } catch (error) {
155
- throw wrapCryptoError("decrypt with wallet private key", error);
156
- }
157
- }
158
- async encryptWithPassword(data, password) {
159
- try {
160
- const openpgp = await getOpenPGP();
161
- const message = await openpgp.createMessage({
162
- binary: data
163
- });
164
- const encrypted = await openpgp.encrypt({
165
- message,
166
- passwords: [password],
167
- format: "binary"
168
- });
169
- const response = new Response(encrypted);
170
- const arrayBuffer = await response.arrayBuffer();
171
- return new Uint8Array(arrayBuffer);
172
- } catch (error) {
173
- throw new Error(`Failed to encrypt with password: ${error}`);
174
- }
175
- }
176
- async decryptWithPassword(encryptedData, password) {
177
- try {
178
- const openpgp = await getOpenPGP();
179
- const message = await openpgp.readMessage({
180
- binaryMessage: encryptedData
181
- });
182
- const { data: decrypted } = await openpgp.decrypt({
183
- message,
184
- passwords: [password],
185
- format: "binary"
186
- });
187
- return new Uint8Array(decrypted);
188
- } catch (error) {
189
- throw new Error(`Failed to decrypt with password: ${error}`);
190
- }
191
- }
192
- };
193
- var BrowserPGPAdapter = class {
194
- async encrypt(data, publicKeyArmored) {
195
- try {
196
- const openpgp = await getOpenPGP();
197
- const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored });
198
- const encrypted = await openpgp.encrypt({
199
- message: await openpgp.createMessage({ text: data }),
200
- encryptionKeys: publicKey,
201
- config: {
202
- preferredCompressionAlgorithm: openpgp.enums.compression.zlib
203
- }
204
- });
205
- return encrypted;
206
- } catch (error) {
207
- throw new Error(`PGP encryption failed: ${error}`);
208
- }
209
- }
210
- async decrypt(encryptedData, privateKeyArmored) {
211
- try {
212
- const openpgp = await getOpenPGP();
213
- const privateKey = await openpgp.readPrivateKey({
214
- armoredKey: privateKeyArmored
215
- });
216
- const message = await openpgp.readMessage({
217
- armoredMessage: encryptedData
218
- });
219
- const { data: decrypted } = await openpgp.decrypt({
220
- message,
221
- decryptionKeys: privateKey
222
- });
223
- return decrypted;
224
- } catch (error) {
225
- throw new Error(`PGP decryption failed: ${error}`);
226
- }
227
- }
228
- async generateKeyPair(options) {
229
- try {
230
- const openpgp = await getOpenPGP();
231
- const keyGenParams = getPGPKeyGenParams(options);
232
- const { privateKey, publicKey } = await openpgp.generateKey(keyGenParams);
233
- return { publicKey, privateKey };
234
- } catch (error) {
235
- throw wrapCryptoError("PGP key generation", error);
236
- }
237
- }
238
- };
239
- var BrowserHttpAdapter = class {
240
- async fetch(url, options) {
241
- if (typeof fetch === "undefined") {
242
- throw new Error("Fetch API not available in this browser environment");
243
- }
244
- return fetch(url, options);
245
- }
246
- };
247
- var BrowserCacheAdapter = class {
248
- constructor() {
249
- __publicField(this, "prefix", "vana_cache_");
250
- }
251
- get(key) {
252
- try {
253
- if (typeof sessionStorage === "undefined") {
254
- return null;
255
- }
256
- return sessionStorage.getItem(this.prefix + key);
257
- } catch {
258
- return null;
259
- }
260
- }
261
- set(key, value) {
262
- try {
263
- if (typeof sessionStorage !== "undefined") {
264
- sessionStorage.setItem(this.prefix + key, value);
265
- }
266
- } catch {
267
- }
268
- }
269
- delete(key) {
270
- try {
271
- if (typeof sessionStorage !== "undefined") {
272
- sessionStorage.removeItem(this.prefix + key);
273
- }
274
- } catch {
275
- }
276
- }
277
- clear() {
278
- try {
279
- if (typeof sessionStorage === "undefined") {
280
- return;
281
- }
282
- const keys = Object.keys(sessionStorage);
283
- for (const key of keys) {
284
- if (key.startsWith(this.prefix)) {
285
- sessionStorage.removeItem(key);
286
- }
287
- }
288
- } catch {
289
- }
290
- }
291
- };
292
- var BrowserPlatformAdapter = class {
293
- constructor() {
294
- __publicField(this, "crypto");
295
- __publicField(this, "pgp");
296
- __publicField(this, "http");
297
- __publicField(this, "cache");
298
- __publicField(this, "platform", "browser");
299
- this.crypto = new BrowserCryptoAdapter();
300
- this.pgp = new BrowserPGPAdapter();
301
- this.http = new BrowserHttpAdapter();
302
- this.cache = new BrowserCacheAdapter();
303
- }
304
- };
305
- var browserPlatformAdapter = new BrowserPlatformAdapter();
306
- export {
307
- BrowserPlatformAdapter
308
- };
309
- //# sourceMappingURL=browser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/platform/shared/crypto-utils.ts","../src/platform/shared/pgp-utils.ts","../src/platform/shared/error-utils.ts","../src/utils/lazy-import.ts","../src/platform/browser.ts"],"sourcesContent":["/**\n * Shared crypto utilities for platform adapters\n *\n * IMPORTANT: This module contains NO IMPORTS to avoid affecting bundle loading.\n * All functions are pure utilities that can be safely shared across platforms.\n */\n\n/**\n * Process wallet public key for encryption operations\n * Removes 0x prefix and ensures uncompressed format (65 bytes with 0x04 prefix)\n *\n * @param publicKey The public key (with or without 0x prefix)\n * @returns Buffer containing uncompressed public key\n */\nexport function processWalletPublicKey(publicKey: string): Buffer {\n const publicKeyHex = publicKey.startsWith(\"0x\")\n ? publicKey.slice(2)\n : publicKey;\n const publicKeyBytes = Buffer.from(publicKeyHex, \"hex\");\n\n // Ensure public key is in uncompressed format (65 bytes with 0x04 prefix)\n // If it's 64 bytes, add the 0x04 prefix; if already 65 bytes, use as-is\n return publicKeyBytes.length === 64\n ? Buffer.concat([Buffer.from([4]), publicKeyBytes])\n : publicKeyBytes;\n}\n\n/**\n * Process wallet private key for decryption operations\n * Removes 0x prefix and converts to Buffer\n *\n * @param privateKey The private key (with or without 0x prefix)\n * @returns Buffer containing private key\n */\nexport function processWalletPrivateKey(privateKey: string): Buffer {\n const privateKeyHex = privateKey.startsWith(\"0x\")\n ? privateKey.slice(2)\n : privateKey;\n return Buffer.from(privateKeyHex, \"hex\");\n}\n\n/**\n * Parse encrypted data buffer into components\n * Extracts IV, ephemeral public key, ciphertext, and MAC from a concatenated buffer\n *\n * @param encryptedBuffer The buffer containing encrypted data\n * @returns Object with parsed components\n */\nexport function parseEncryptedDataBuffer(encryptedBuffer: Buffer) {\n return {\n iv: encryptedBuffer.slice(0, 16),\n ephemPublicKey: encryptedBuffer.slice(16, 81), // 65 bytes for uncompressed public key\n ciphertext: encryptedBuffer.slice(81, -32),\n mac: encryptedBuffer.slice(-32),\n };\n}\n\n/**\n * Convert hex string to Uint8Array\n *\n * @param hex The hex string to convert\n * @returns Uint8Array representation\n */\nexport function hexToUint8Array(hex: string): Uint8Array {\n const result = new Uint8Array(hex.length / 2);\n for (let i = 0; i < hex.length; i += 2) {\n result[i / 2] = parseInt(hex.substr(i, 2), 16);\n }\n return result;\n}\n\n/**\n * Convert Uint8Array to hex string\n *\n * @param array The Uint8Array to convert\n * @returns Hex string representation\n */\nexport function uint8ArrayToHex(array: Uint8Array): string {\n return Array.from(array, (byte) => byte.toString(16).padStart(2, \"0\")).join(\n \"\",\n );\n}\n\n/**\n * Cross-platform base64 encoding\n * Works in both Node.js and browser environments\n *\n * @param str The string to encode\n * @returns Base64 encoded string\n */\nexport function toBase64(str: string): string {\n if (typeof Buffer !== \"undefined\") {\n // Node.js environment\n return Buffer.from(str, \"utf8\").toString(\"base64\");\n } else if (typeof btoa !== \"undefined\") {\n // Browser environment\n return btoa(str);\n } else {\n // Fallback manual implementation\n const chars =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n let result = \"\";\n let i = 0;\n while (i < str.length) {\n const a = str.charCodeAt(i++);\n const b = i < str.length ? str.charCodeAt(i++) : 0;\n const c = i < str.length ? str.charCodeAt(i++) : 0;\n\n const bitmap = (a << 16) | (b << 8) | c;\n\n result += chars.charAt((bitmap >> 18) & 63);\n result += chars.charAt((bitmap >> 12) & 63);\n result += i - 2 < str.length ? chars.charAt((bitmap >> 6) & 63) : \"=\";\n result += i - 1 < str.length ? chars.charAt(bitmap & 63) : \"=\";\n }\n return result;\n }\n}\n\n/**\n * Cross-platform base64 decoding\n * Works in both Node.js and browser environments\n *\n * @param str The base64 string to decode\n * @returns Decoded string\n */\nexport function fromBase64(str: string): string {\n if (typeof Buffer !== \"undefined\") {\n // Node.js environment\n return Buffer.from(str, \"base64\").toString(\"utf8\");\n } else if (typeof atob !== \"undefined\") {\n // Browser environment\n return atob(str);\n } else {\n // Fallback manual implementation\n const chars =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n let result = \"\";\n let i = 0;\n\n // Remove any characters not in the base64 character set\n str = str.replace(/[^A-Za-z0-9+/]/g, \"\");\n\n while (i < str.length) {\n const encoded1 = chars.indexOf(str.charAt(i++));\n const encoded2 = chars.indexOf(str.charAt(i++));\n const encoded3 = chars.indexOf(str.charAt(i++));\n const encoded4 = chars.indexOf(str.charAt(i++));\n\n const bitmap =\n (encoded1 << 18) | (encoded2 << 12) | (encoded3 << 6) | encoded4;\n\n result += String.fromCharCode((bitmap >> 16) & 255);\n if (encoded3 !== 64) result += String.fromCharCode((bitmap >> 8) & 255);\n if (encoded4 !== 64) result += String.fromCharCode(bitmap & 255);\n }\n return result;\n }\n}\n","/**\n * Shared PGP utilities for platform adapters\n *\n * IMPORTANT: This module contains NO IMPORTS to avoid affecting bundle loading.\n * All functions are pure utilities that can be safely shared across platforms.\n */\n\n/**\n * Standard OpenPGP configuration for consistent behavior across platforms\n * Uses enum values instead of importing openpgp to avoid loading issues\n */\nexport const STANDARD_PGP_CONFIG = {\n preferredCompressionAlgorithm: 2, // zlib (openpgp.enums.compression.zlib)\n preferredSymmetricAlgorithm: 7, // aes256 (openpgp.enums.symmetric.aes256)\n} as const;\n\n/**\n * Process PGP key generation options with sensible defaults\n *\n * @param options - Optional key generation parameters\n * @param options.name - The name for the PGP key (defaults to \"Vana User\")\n * @param options.email - The email for the PGP key (defaults to \"user@vana.org\")\n * @param options.passphrase - Optional passphrase to protect the private key\n * @returns Processed options with defaults applied\n */\nexport function processPGPKeyOptions(options?: {\n name?: string;\n email?: string;\n passphrase?: string;\n}) {\n return {\n name: options?.name || \"Vana User\",\n email: options?.email || \"user@vana.org\",\n passphrase: options?.passphrase,\n };\n}\n\n/**\n * Get standard PGP key generation parameters\n * Combines default values with standard configuration\n *\n * @param options - Optional key generation parameters\n * @param options.name - The name for the PGP key (defaults to \"Vana User\")\n * @param options.email - The email for the PGP key (defaults to \"user@vana.org\")\n * @param options.passphrase - Optional passphrase to protect the private key\n * @returns Complete key generation parameters object\n */\nexport function getPGPKeyGenParams(options?: {\n name?: string;\n email?: string;\n passphrase?: string;\n}) {\n const { name, email, passphrase } = processPGPKeyOptions(options);\n\n return {\n type: \"rsa\" as const,\n rsaBits: 2048,\n userIDs: [{ name, email }],\n passphrase,\n config: STANDARD_PGP_CONFIG,\n };\n}\n","/**\n * Shared error utilities for platform adapters\n *\n * IMPORTANT: This module contains NO IMPORTS to avoid affecting bundle loading.\n * All functions are pure utilities that can be safely shared across platforms.\n */\n\n/**\n * Wrap platform-specific errors with consistent messaging\n * Provides consistent error formatting across all crypto operations\n *\n * @param operation The operation that failed (e.g., \"encryption\", \"decryption\")\n * @param error The original error that occurred\n * @returns Wrapped error with consistent format\n */\nexport function wrapCryptoError(operation: string, error: unknown): Error {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n return new Error(`${operation} failed: ${message}`);\n}\n\n/**\n * Validate encrypted data structure has required fields\n * Ensures encrypted data objects contain the expected properties\n *\n * @param data The data structure to validate\n * @throws Error if data structure is invalid\n */\nexport function validateEncryptedDataStructure(data: unknown): void {\n if (!data || typeof data !== \"object\") {\n throw new Error(\"Invalid encrypted data format\");\n }\n\n const obj = data as Record<string, unknown>;\n if (!obj.encrypted || !obj.iv || !obj.ephemeralPublicKey) {\n throw new Error(\"Invalid encrypted data format\");\n }\n}\n","/**\n * Utility for lazy-loading modules to avoid Turbopack TDZ issues\n *\n * WARNING: This is a workaround for Turbopack's strict module initialization.\n * Dependencies that access globals during init must be dynamically imported.\n */\n\n/**\n * Creates a lazy import function that caches the promise (not the module)\n * to avoid race conditions on concurrent first calls\n *\n * @param importFn - Function that returns a dynamic import promise\n * @returns Function that returns the cached import promise\n *\n * @example\n * const getOpenPGP = lazyImport(() => import('openpgp'));\n * const openpgp = await getOpenPGP();\n */\nexport function lazyImport<T>(importFn: () => Promise<T>): () => Promise<T> {\n let cached: Promise<T> | null = null;\n\n return () => {\n if (!cached) {\n cached = importFn().catch((err) => {\n // Clear cache on error so next attempt can retry\n cached = null;\n throw new Error(\"Failed to load module\", { cause: err });\n });\n }\n return cached;\n };\n}\n","/**\n * Browser implementation of the Vana Platform Adapter\n *\n * This implementation uses browser-compatible libraries and configurations\n * to provide crypto, PGP, and HTTP functionality without Node.js dependencies.\n *\n * WARNING: Dependencies that access globals during init\n * MUST be dynamically imported to support Turbopack.\n * See: https://github.com/vercel/next.js/issues/82632\n */\n\nimport type {\n VanaPlatformAdapter,\n VanaCryptoAdapter,\n VanaPGPAdapter,\n VanaHttpAdapter,\n VanaCacheAdapter,\n} from \"./interface\";\nimport {\n processWalletPublicKey,\n processWalletPrivateKey,\n parseEncryptedDataBuffer,\n} from \"./shared/crypto-utils\";\nimport { getPGPKeyGenParams } from \"./shared/pgp-utils\";\nimport { wrapCryptoError } from \"./shared/error-utils\";\nimport { lazyImport } from \"../utils/lazy-import\";\n\n// Lazy-loaded dependencies to avoid Turbopack TDZ issues\nconst getOpenPGP = lazyImport(() => import(\"openpgp\"));\n\n/**\n * Browser implementation of crypto operations using eccrypto-js\n */\nclass BrowserCryptoAdapter implements VanaCryptoAdapter {\n async encryptWithPublicKey(\n data: string,\n publicKeyHex: string,\n ): Promise<string> {\n try {\n // Import eccrypto-js for secp256k1 encryption\n const eccrypto = await import(\"eccrypto-js\");\n\n // Convert hex public key to Buffer\n const publicKeyBuffer = Buffer.from(publicKeyHex, \"hex\");\n\n // Encrypt data using secp256k1 ECDH\n const encrypted = await eccrypto.encrypt(\n publicKeyBuffer,\n Buffer.from(data, \"utf8\"),\n );\n\n // Concatenate all components and return as hex string for API consistency\n const result = Buffer.concat([\n encrypted.iv,\n encrypted.ephemPublicKey,\n encrypted.ciphertext,\n encrypted.mac,\n ]);\n\n return result.toString(\"hex\");\n } catch (error) {\n throw new Error(`Encryption failed: ${error}`);\n }\n }\n\n async decryptWithPrivateKey(\n encryptedData: string,\n privateKeyHex: string,\n ): Promise<string> {\n try {\n // Import eccrypto-js for secp256k1 decryption\n const eccrypto = await import(\"eccrypto-js\");\n\n // Use shared utilities to process keys and parse data\n const privateKeyBuffer = processWalletPrivateKey(privateKeyHex);\n const encryptedBuffer = Buffer.from(encryptedData, \"hex\");\n const { iv, ephemPublicKey, ciphertext, mac } =\n parseEncryptedDataBuffer(encryptedBuffer);\n\n // Reconstruct the encrypted data structure for eccrypto\n const encryptedObj = { iv, ephemPublicKey, ciphertext, mac };\n\n // Decrypt using secp256k1 ECDH\n const decryptedBuffer = await eccrypto.decrypt(\n privateKeyBuffer,\n encryptedObj,\n );\n\n return decryptedBuffer.toString(\"utf8\");\n } catch (error) {\n throw new Error(`Decryption failed: ${error}`);\n }\n }\n\n async generateKeyPair(): Promise<{ publicKey: string; privateKey: string }> {\n try {\n // Import eccrypto-js for secp256k1 key generation (browser-compatible)\n const eccrypto = await import(\"eccrypto-js\");\n\n // Generate a random 32-byte private key for secp256k1\n const privateKeyBytes = new Uint8Array(32);\n crypto.getRandomValues(privateKeyBytes);\n const privateKey = Buffer.from(privateKeyBytes);\n\n // Generate the corresponding compressed public key\n const publicKey = eccrypto.getPublicCompressed(privateKey);\n\n return {\n privateKey: privateKey.toString(\"hex\"),\n publicKey: publicKey.toString(\"hex\"),\n };\n } catch (error) {\n throw wrapCryptoError(\"key generation\", error);\n }\n }\n\n async encryptWithWalletPublicKey(\n data: string,\n publicKey: string,\n ): Promise<string> {\n try {\n // Import eccrypto for ECDH encryption\n const eccrypto = await import(\"eccrypto-js\");\n\n // Use shared utility to process public key\n const uncompressedKey = processWalletPublicKey(publicKey);\n\n // Encrypt using ECDH with randomly generated parameters\n const encryptedBuffer = await eccrypto.encrypt(\n uncompressedKey,\n Buffer.from(data),\n );\n\n // Concatenate all components and return as hex\n const result = Buffer.concat([\n encryptedBuffer.iv,\n encryptedBuffer.ephemPublicKey,\n encryptedBuffer.ciphertext,\n encryptedBuffer.mac,\n ]);\n\n return result.toString(\"hex\");\n } catch (error) {\n throw wrapCryptoError(\"encrypt with wallet public key\", error);\n }\n }\n\n async decryptWithWalletPrivateKey(\n encryptedData: string,\n privateKey: string,\n ): Promise<string> {\n try {\n // Import eccrypto for ECDH decryption\n const eccrypto = await import(\"eccrypto-js\");\n\n // Use shared utilities to process keys and parse data\n const privateKeyBuffer = processWalletPrivateKey(privateKey);\n const encryptedBuffer = Buffer.from(encryptedData, \"hex\");\n const { iv, ephemPublicKey, ciphertext, mac } =\n parseEncryptedDataBuffer(encryptedBuffer);\n\n // Reconstruct the encrypted data structure for eccrypto\n const encryptedObj = { iv, ephemPublicKey, ciphertext, mac };\n\n // Decrypt using ECDH\n const decryptedBuffer = await eccrypto.decrypt(\n privateKeyBuffer,\n encryptedObj,\n );\n\n return decryptedBuffer.toString(\"utf8\");\n } catch (error) {\n throw wrapCryptoError(\"decrypt with wallet private key\", error);\n }\n }\n\n async encryptWithPassword(\n data: Uint8Array,\n password: string,\n ): Promise<Uint8Array> {\n try {\n // Import openpgp for password-based encryption\n const openpgp = await getOpenPGP();\n\n const message = await openpgp.createMessage({\n binary: data,\n });\n\n // Use password-based encryption with wallet signature as password\n // Note: For deterministic encryption, we would need to control the salt\n // This implementation is secure but not deterministic due to OpenPGP's design\n const encrypted = await openpgp.encrypt({\n message,\n passwords: [password],\n format: \"binary\",\n });\n\n // Convert WebStream<Uint8Array> to Uint8Array\n const response = new Response(encrypted as ReadableStream<Uint8Array>);\n const arrayBuffer = await response.arrayBuffer();\n return new Uint8Array(arrayBuffer);\n } catch (error) {\n throw new Error(`Failed to encrypt with password: ${error}`);\n }\n }\n\n async decryptWithPassword(\n encryptedData: Uint8Array,\n password: string,\n ): Promise<Uint8Array> {\n try {\n // Import openpgp for password-based decryption\n const openpgp = await getOpenPGP();\n\n const message = await openpgp.readMessage({\n binaryMessage: encryptedData,\n });\n\n // Use password-based decryption with wallet signature as password\n const { data: decrypted } = await openpgp.decrypt({\n message,\n passwords: [password],\n format: \"binary\",\n });\n\n // Convert decrypted data back to Uint8Array\n return new Uint8Array(decrypted as ArrayBuffer);\n } catch (error) {\n throw new Error(`Failed to decrypt with password: ${error}`);\n }\n }\n}\n\n/**\n * Browser implementation of PGP operations using openpgp with browser-specific configuration\n */\nclass BrowserPGPAdapter implements VanaPGPAdapter {\n async encrypt(data: string, publicKeyArmored: string): Promise<string> {\n try {\n const openpgp = await getOpenPGP();\n const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored });\n\n const encrypted = await openpgp.encrypt({\n message: await openpgp.createMessage({ text: data }),\n encryptionKeys: publicKey,\n config: {\n preferredCompressionAlgorithm: openpgp.enums.compression.zlib,\n },\n });\n\n return encrypted as string;\n } catch (error) {\n throw new Error(`PGP encryption failed: ${error}`);\n }\n }\n\n async decrypt(\n encryptedData: string,\n privateKeyArmored: string,\n ): Promise<string> {\n try {\n const openpgp = await getOpenPGP();\n const privateKey = await openpgp.readPrivateKey({\n armoredKey: privateKeyArmored,\n });\n const message = await openpgp.readMessage({\n armoredMessage: encryptedData,\n });\n\n const { data: decrypted } = await openpgp.decrypt({\n message,\n decryptionKeys: privateKey,\n });\n\n return decrypted as string;\n } catch (error) {\n throw new Error(`PGP decryption failed: ${error}`);\n }\n }\n\n async generateKeyPair(options?: {\n name?: string;\n email?: string;\n passphrase?: string;\n }): Promise<{ publicKey: string; privateKey: string }> {\n try {\n const openpgp = await getOpenPGP();\n // Use shared utility to get standardized parameters\n const keyGenParams = getPGPKeyGenParams(options);\n\n const { privateKey, publicKey } = await openpgp.generateKey(keyGenParams);\n\n return { publicKey, privateKey };\n } catch (error) {\n throw wrapCryptoError(\"PGP key generation\", error);\n }\n }\n}\n\n/**\n * Browser implementation of HTTP operations using fetch API\n */\nclass BrowserHttpAdapter implements VanaHttpAdapter {\n async fetch(url: string, options?: RequestInit): Promise<Response> {\n if (typeof fetch === \"undefined\") {\n throw new Error(\"Fetch API not available in this browser environment\");\n }\n\n return fetch(url, options);\n }\n}\n\n/**\n * Browser implementation of cache operations using sessionStorage\n */\nclass BrowserCacheAdapter implements VanaCacheAdapter {\n private readonly prefix = \"vana_cache_\";\n\n get(key: string): string | null {\n try {\n if (typeof sessionStorage === \"undefined\") {\n return null;\n }\n return sessionStorage.getItem(this.prefix + key);\n } catch {\n return null;\n }\n }\n\n set(key: string, value: string): void {\n try {\n if (typeof sessionStorage !== \"undefined\") {\n sessionStorage.setItem(this.prefix + key, value);\n }\n } catch {\n // Silently ignore storage errors (quota exceeded, etc.)\n }\n }\n\n delete(key: string): void {\n try {\n if (typeof sessionStorage !== \"undefined\") {\n sessionStorage.removeItem(this.prefix + key);\n }\n } catch {\n // Silently ignore storage errors\n }\n }\n\n clear(): void {\n try {\n if (typeof sessionStorage === \"undefined\") {\n return;\n }\n\n const keys = Object.keys(sessionStorage);\n for (const key of keys) {\n if (key.startsWith(this.prefix)) {\n sessionStorage.removeItem(key);\n }\n }\n } catch {\n // Silently ignore storage errors\n }\n }\n}\n\n/**\n * Complete browser platform adapter implementation\n */\nexport class BrowserPlatformAdapter implements VanaPlatformAdapter {\n crypto: VanaCryptoAdapter;\n pgp: VanaPGPAdapter;\n http: VanaHttpAdapter;\n cache: VanaCacheAdapter;\n platform: \"browser\" = \"browser\" as const;\n\n constructor() {\n this.crypto = new BrowserCryptoAdapter();\n this.pgp = new BrowserPGPAdapter();\n this.http = new BrowserHttpAdapter();\n this.cache = new BrowserCacheAdapter();\n }\n}\n\n/**\n * Default instance export for backwards compatibility\n */\nexport const browserPlatformAdapter: VanaPlatformAdapter =\n new BrowserPlatformAdapter();\n"],"mappings":"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","names":[]}
@@ -1,96 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/chains.browser.ts
21
- var chains_browser_exports = {};
22
- __export(chains_browser_exports, {
23
- getAllChains: () => getAllChains,
24
- getChainConfig: () => getChainConfig,
25
- moksha: () => moksha,
26
- mokshaTestnet: () => mokshaTestnet,
27
- vanaMainnet: () => vanaMainnet
28
- });
29
- module.exports = __toCommonJS(chains_browser_exports);
30
-
31
- // src/chains/definitions.ts
32
- var vanaMainnet = {
33
- id: 1480,
34
- name: "Vana",
35
- nativeCurrency: {
36
- name: "VANA",
37
- symbol: "VANA",
38
- decimals: 18
39
- },
40
- rpcUrls: {
41
- default: {
42
- http: ["https://rpc.vana.org"]
43
- }
44
- },
45
- blockExplorers: {
46
- default: {
47
- name: "Vanascan",
48
- url: "https://vanascan.io"
49
- }
50
- },
51
- subgraphUrl: "https://api.goldsky.com/api/public/project_cm168cz887zva010j39il7a6p/subgraphs/vana/prod/gn"
52
- };
53
- var moksha = {
54
- id: 14800,
55
- name: "Moksha Testnet",
56
- nativeCurrency: {
57
- name: "VANA",
58
- symbol: "VANA",
59
- decimals: 18
60
- },
61
- rpcUrls: {
62
- default: {
63
- http: ["https://rpc.moksha.vana.org"]
64
- }
65
- },
66
- blockExplorers: {
67
- default: {
68
- name: "Vanascan - Moksha",
69
- url: "https://moksha.vanascan.io"
70
- }
71
- },
72
- subgraphUrl: "https://api.goldsky.com/api/public/project_cm168cz887zva010j39il7a6p/subgraphs/moksha/prod/gn"
73
- };
74
- function getChainConfig(chainId) {
75
- switch (chainId) {
76
- case 1480:
77
- return vanaMainnet;
78
- case 14800:
79
- return moksha;
80
- default:
81
- return void 0;
82
- }
83
- }
84
- var mokshaTestnet = moksha;
85
- function getAllChains() {
86
- return [vanaMainnet, moksha];
87
- }
88
- // Annotate the CommonJS export names for ESM import in node:
89
- 0 && (module.exports = {
90
- getAllChains,
91
- getChainConfig,
92
- moksha,
93
- mokshaTestnet,
94
- vanaMainnet
95
- });
96
- //# sourceMappingURL=chains.browser.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/chains.browser.ts","../src/chains/definitions.ts"],"sourcesContent":["/**\n * Browser-specific chains entry point\n *\n * This is identical to the base chains export since chain configurations\n * are environment-agnostic.\n */\n\nexport type { VanaChainConfig } from \"./chains/definitions\";\nexport {\n vanaMainnet,\n moksha,\n mokshaTestnet,\n getChainConfig,\n getAllChains,\n} from \"./chains/definitions\";\n","/**\n * Chain configuration definitions for Vana networks\n *\n * These provide default configurations for known Vana chains.\n * Applications can use these as-is or override specific values.\n */\n\nimport type { Chain } from \"viem\";\n\nexport interface VanaChainConfig extends Chain {\n /** URL for the subgraph API endpoint used to query on-chain data */\n subgraphUrl: string;\n}\n\n/**\n * Vana Mainnet configuration\n */\nexport const vanaMainnet: VanaChainConfig = {\n id: 1480,\n name: \"Vana\",\n nativeCurrency: {\n name: \"VANA\",\n symbol: \"VANA\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.vana.org\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Vanascan\",\n url: \"https://vanascan.io\",\n },\n },\n subgraphUrl:\n \"https://api.goldsky.com/api/public/project_cm168cz887zva010j39il7a6p/subgraphs/vana/prod/gn\",\n} as const;\n\n/**\n * Moksha Testnet configuration\n */\nexport const moksha: VanaChainConfig = {\n id: 14800,\n name: \"Moksha Testnet\",\n nativeCurrency: {\n name: \"VANA\",\n symbol: \"VANA\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.moksha.vana.org\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Vanascan - Moksha\",\n url: \"https://moksha.vanascan.io\",\n },\n },\n subgraphUrl:\n \"https://api.goldsky.com/api/public/project_cm168cz887zva010j39il7a6p/subgraphs/moksha/prod/gn\",\n} as const;\n\n/**\n * Retrieves the chain configuration for a given chain ID.\n *\n * @param chainId - The numeric chain ID to look up\n * @returns The chain configuration if found, undefined otherwise\n * @example\n * ```typescript\n * const config = getChainConfig(1480);\n * if (config) {\n * console.log('Chain name:', config.name);\n * console.log('Subgraph URL:', config.subgraphUrl);\n * }\n * ```\n */\nexport function getChainConfig(chainId: number): VanaChainConfig | undefined {\n switch (chainId) {\n case 1480:\n return vanaMainnet;\n case 14800:\n return moksha;\n default:\n return undefined;\n }\n}\n\n// Backwards compatibility alias\nexport const mokshaTestnet = moksha;\n\n/**\n * Retrieves all available Vana chain configurations.\n *\n * @returns Array of all supported Vana chain configurations\n * @example\n * ```typescript\n * const chains = getAllChains();\n * console.log('Supported chains:');\n * chains.forEach(chain => {\n * console.log(`- ${chain.name} (ID: ${chain.id})`);\n * });\n * ```\n */\nexport function getAllChains(): VanaChainConfig[] {\n return [vanaMainnet, moksha];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACiBO,IAAM,cAA+B;AAAA,EAC1C,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,MACP,MAAM,CAAC,sBAAsB;AAAA,IAC/B;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,MAAM;AAAA,MACN,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,aACE;AACJ;AAKO,IAAM,SAA0B;AAAA,EACrC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,MACP,MAAM,CAAC,6BAA6B;AAAA,IACtC;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,MAAM;AAAA,MACN,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,aACE;AACJ;AAgBO,SAAS,eAAe,SAA8C;AAC3E,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAGO,IAAM,gBAAgB;AAetB,SAAS,eAAkC;AAChD,SAAO,CAAC,aAAa,MAAM;AAC7B;","names":[]}
@@ -1,53 +0,0 @@
1
- import { Chain } from 'viem';
2
-
3
- /**
4
- * Chain configuration definitions for Vana networks
5
- *
6
- * These provide default configurations for known Vana chains.
7
- * Applications can use these as-is or override specific values.
8
- */
9
-
10
- interface VanaChainConfig extends Chain {
11
- /** URL for the subgraph API endpoint used to query on-chain data */
12
- subgraphUrl: string;
13
- }
14
- /**
15
- * Vana Mainnet configuration
16
- */
17
- declare const vanaMainnet: VanaChainConfig;
18
- /**
19
- * Moksha Testnet configuration
20
- */
21
- declare const moksha: VanaChainConfig;
22
- /**
23
- * Retrieves the chain configuration for a given chain ID.
24
- *
25
- * @param chainId - The numeric chain ID to look up
26
- * @returns The chain configuration if found, undefined otherwise
27
- * @example
28
- * ```typescript
29
- * const config = getChainConfig(1480);
30
- * if (config) {
31
- * console.log('Chain name:', config.name);
32
- * console.log('Subgraph URL:', config.subgraphUrl);
33
- * }
34
- * ```
35
- */
36
- declare function getChainConfig(chainId: number): VanaChainConfig | undefined;
37
- declare const mokshaTestnet: VanaChainConfig;
38
- /**
39
- * Retrieves all available Vana chain configurations.
40
- *
41
- * @returns Array of all supported Vana chain configurations
42
- * @example
43
- * ```typescript
44
- * const chains = getAllChains();
45
- * console.log('Supported chains:');
46
- * chains.forEach(chain => {
47
- * console.log(`- ${chain.name} (ID: ${chain.id})`);
48
- * });
49
- * ```
50
- */
51
- declare function getAllChains(): VanaChainConfig[];
52
-
53
- export { type VanaChainConfig, getAllChains, getChainConfig, moksha, mokshaTestnet, vanaMainnet };
@@ -1,53 +0,0 @@
1
- import { Chain } from 'viem';
2
-
3
- /**
4
- * Chain configuration definitions for Vana networks
5
- *
6
- * These provide default configurations for known Vana chains.
7
- * Applications can use these as-is or override specific values.
8
- */
9
-
10
- interface VanaChainConfig extends Chain {
11
- /** URL for the subgraph API endpoint used to query on-chain data */
12
- subgraphUrl: string;
13
- }
14
- /**
15
- * Vana Mainnet configuration
16
- */
17
- declare const vanaMainnet: VanaChainConfig;
18
- /**
19
- * Moksha Testnet configuration
20
- */
21
- declare const moksha: VanaChainConfig;
22
- /**
23
- * Retrieves the chain configuration for a given chain ID.
24
- *
25
- * @param chainId - The numeric chain ID to look up
26
- * @returns The chain configuration if found, undefined otherwise
27
- * @example
28
- * ```typescript
29
- * const config = getChainConfig(1480);
30
- * if (config) {
31
- * console.log('Chain name:', config.name);
32
- * console.log('Subgraph URL:', config.subgraphUrl);
33
- * }
34
- * ```
35
- */
36
- declare function getChainConfig(chainId: number): VanaChainConfig | undefined;
37
- declare const mokshaTestnet: VanaChainConfig;
38
- /**
39
- * Retrieves all available Vana chain configurations.
40
- *
41
- * @returns Array of all supported Vana chain configurations
42
- * @example
43
- * ```typescript
44
- * const chains = getAllChains();
45
- * console.log('Supported chains:');
46
- * chains.forEach(chain => {
47
- * console.log(`- ${chain.name} (ID: ${chain.id})`);
48
- * });
49
- * ```
50
- */
51
- declare function getAllChains(): VanaChainConfig[];
52
-
53
- export { type VanaChainConfig, getAllChains, getChainConfig, moksha, mokshaTestnet, vanaMainnet };
@@ -1,65 +0,0 @@
1
- // src/chains/definitions.ts
2
- var vanaMainnet = {
3
- id: 1480,
4
- name: "Vana",
5
- nativeCurrency: {
6
- name: "VANA",
7
- symbol: "VANA",
8
- decimals: 18
9
- },
10
- rpcUrls: {
11
- default: {
12
- http: ["https://rpc.vana.org"]
13
- }
14
- },
15
- blockExplorers: {
16
- default: {
17
- name: "Vanascan",
18
- url: "https://vanascan.io"
19
- }
20
- },
21
- subgraphUrl: "https://api.goldsky.com/api/public/project_cm168cz887zva010j39il7a6p/subgraphs/vana/prod/gn"
22
- };
23
- var moksha = {
24
- id: 14800,
25
- name: "Moksha Testnet",
26
- nativeCurrency: {
27
- name: "VANA",
28
- symbol: "VANA",
29
- decimals: 18
30
- },
31
- rpcUrls: {
32
- default: {
33
- http: ["https://rpc.moksha.vana.org"]
34
- }
35
- },
36
- blockExplorers: {
37
- default: {
38
- name: "Vanascan - Moksha",
39
- url: "https://moksha.vanascan.io"
40
- }
41
- },
42
- subgraphUrl: "https://api.goldsky.com/api/public/project_cm168cz887zva010j39il7a6p/subgraphs/moksha/prod/gn"
43
- };
44
- function getChainConfig(chainId) {
45
- switch (chainId) {
46
- case 1480:
47
- return vanaMainnet;
48
- case 14800:
49
- return moksha;
50
- default:
51
- return void 0;
52
- }
53
- }
54
- var mokshaTestnet = moksha;
55
- function getAllChains() {
56
- return [vanaMainnet, moksha];
57
- }
58
- export {
59
- getAllChains,
60
- getChainConfig,
61
- moksha,
62
- mokshaTestnet,
63
- vanaMainnet
64
- };
65
- //# sourceMappingURL=chains.browser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/chains/definitions.ts"],"sourcesContent":["/**\n * Chain configuration definitions for Vana networks\n *\n * These provide default configurations for known Vana chains.\n * Applications can use these as-is or override specific values.\n */\n\nimport type { Chain } from \"viem\";\n\nexport interface VanaChainConfig extends Chain {\n /** URL for the subgraph API endpoint used to query on-chain data */\n subgraphUrl: string;\n}\n\n/**\n * Vana Mainnet configuration\n */\nexport const vanaMainnet: VanaChainConfig = {\n id: 1480,\n name: \"Vana\",\n nativeCurrency: {\n name: \"VANA\",\n symbol: \"VANA\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.vana.org\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Vanascan\",\n url: \"https://vanascan.io\",\n },\n },\n subgraphUrl:\n \"https://api.goldsky.com/api/public/project_cm168cz887zva010j39il7a6p/subgraphs/vana/prod/gn\",\n} as const;\n\n/**\n * Moksha Testnet configuration\n */\nexport const moksha: VanaChainConfig = {\n id: 14800,\n name: \"Moksha Testnet\",\n nativeCurrency: {\n name: \"VANA\",\n symbol: \"VANA\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.moksha.vana.org\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Vanascan - Moksha\",\n url: \"https://moksha.vanascan.io\",\n },\n },\n subgraphUrl:\n \"https://api.goldsky.com/api/public/project_cm168cz887zva010j39il7a6p/subgraphs/moksha/prod/gn\",\n} as const;\n\n/**\n * Retrieves the chain configuration for a given chain ID.\n *\n * @param chainId - The numeric chain ID to look up\n * @returns The chain configuration if found, undefined otherwise\n * @example\n * ```typescript\n * const config = getChainConfig(1480);\n * if (config) {\n * console.log('Chain name:', config.name);\n * console.log('Subgraph URL:', config.subgraphUrl);\n * }\n * ```\n */\nexport function getChainConfig(chainId: number): VanaChainConfig | undefined {\n switch (chainId) {\n case 1480:\n return vanaMainnet;\n case 14800:\n return moksha;\n default:\n return undefined;\n }\n}\n\n// Backwards compatibility alias\nexport const mokshaTestnet = moksha;\n\n/**\n * Retrieves all available Vana chain configurations.\n *\n * @returns Array of all supported Vana chain configurations\n * @example\n * ```typescript\n * const chains = getAllChains();\n * console.log('Supported chains:');\n * chains.forEach(chain => {\n * console.log(`- ${chain.name} (ID: ${chain.id})`);\n * });\n * ```\n */\nexport function getAllChains(): VanaChainConfig[] {\n return [vanaMainnet, moksha];\n}\n"],"mappings":";AAiBO,IAAM,cAA+B;AAAA,EAC1C,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,MACP,MAAM,CAAC,sBAAsB;AAAA,IAC/B;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,MAAM;AAAA,MACN,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,aACE;AACJ;AAKO,IAAM,SAA0B;AAAA,EACrC,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,MACP,MAAM,CAAC,6BAA6B;AAAA,IACtC;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,SAAS;AAAA,MACP,MAAM;AAAA,MACN,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,aACE;AACJ;AAgBO,SAAS,eAAe,SAA8C;AAC3E,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAGO,IAAM,gBAAgB;AAetB,SAAS,eAAkC;AAChD,SAAO,CAAC,aAAa,MAAM;AAC7B;","names":[]}