@corpus-core/colibri-tor 1.1.22

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 (93) hide show
  1. package/README.md +90 -0
  2. package/dist/browser.d.ts +48 -0
  3. package/dist/browser.js +96 -0
  4. package/dist/index.d.ts +25 -0
  5. package/dist/index.js +24 -0
  6. package/dist/node.d.ts +34 -0
  7. package/dist/node.js +275 -0
  8. package/dist/types.d.ts +39 -0
  9. package/dist/types.js +23 -0
  10. package/node_modules/tor-js/README.md +166 -0
  11. package/node_modules/tor-js/dist/Log.d.ts +24 -0
  12. package/node_modules/tor-js/dist/Log.d.ts.map +1 -0
  13. package/node_modules/tor-js/dist/TorClient.d.ts +37 -0
  14. package/node_modules/tor-js/dist/TorClient.d.ts.map +1 -0
  15. package/node_modules/tor-js/dist/commonExports.d.ts +6 -0
  16. package/node_modules/tor-js/dist/commonExports.d.ts.map +1 -0
  17. package/node_modules/tor-js/dist/entryPoints/wasm-base64/index.d.ts +3 -0
  18. package/node_modules/tor-js/dist/entryPoints/wasm-base64/index.d.ts.map +1 -0
  19. package/node_modules/tor-js/dist/entryPoints/wasm-base64/index.js +2139 -0
  20. package/node_modules/tor-js/dist/entryPoints/wasm-base64/index.js.map +1 -0
  21. package/node_modules/tor-js/dist/entryPoints/wasm-base64/singleton.d.ts +4 -0
  22. package/node_modules/tor-js/dist/entryPoints/wasm-base64/singleton.d.ts.map +1 -0
  23. package/node_modules/tor-js/dist/entryPoints/wasm-base64/singleton.js +2187 -0
  24. package/node_modules/tor-js/dist/entryPoints/wasm-base64/singleton.js.map +1 -0
  25. package/node_modules/tor-js/dist/entryPoints/wasm-cdn/index.d.ts +3 -0
  26. package/node_modules/tor-js/dist/entryPoints/wasm-cdn/index.d.ts.map +1 -0
  27. package/node_modules/tor-js/dist/entryPoints/wasm-cdn/index.js +2242 -0
  28. package/node_modules/tor-js/dist/entryPoints/wasm-cdn/index.js.map +1 -0
  29. package/node_modules/tor-js/dist/entryPoints/wasm-cdn/singleton.d.ts +4 -0
  30. package/node_modules/tor-js/dist/entryPoints/wasm-cdn/singleton.d.ts.map +1 -0
  31. package/node_modules/tor-js/dist/entryPoints/wasm-cdn/singleton.js +2290 -0
  32. package/node_modules/tor-js/dist/entryPoints/wasm-cdn/singleton.js.map +1 -0
  33. package/node_modules/tor-js/dist/entryPoints/wasm-file/index.d.ts +3 -0
  34. package/node_modules/tor-js/dist/entryPoints/wasm-file/index.d.ts.map +1 -0
  35. package/node_modules/tor-js/dist/entryPoints/wasm-file/index.js +2139 -0
  36. package/node_modules/tor-js/dist/entryPoints/wasm-file/index.js.map +1 -0
  37. package/node_modules/tor-js/dist/entryPoints/wasm-file/singleton.d.ts +4 -0
  38. package/node_modules/tor-js/dist/entryPoints/wasm-file/singleton.d.ts.map +1 -0
  39. package/node_modules/tor-js/dist/entryPoints/wasm-file/singleton.js +2187 -0
  40. package/node_modules/tor-js/dist/entryPoints/wasm-file/singleton.js.map +1 -0
  41. package/node_modules/tor-js/dist/helpers.d.ts +7 -0
  42. package/node_modules/tor-js/dist/helpers.d.ts.map +1 -0
  43. package/node_modules/tor-js/dist/polyfills.d.ts +1 -0
  44. package/node_modules/tor-js/dist/polyfills.d.ts.map +1 -0
  45. package/node_modules/tor-js/dist/singleton.d.ts +24 -0
  46. package/node_modules/tor-js/dist/singleton.d.ts.map +1 -0
  47. package/node_modules/tor-js/dist/socketProvider.d.ts +76 -0
  48. package/node_modules/tor-js/dist/socketProvider.d.ts.map +1 -0
  49. package/node_modules/tor-js/dist/storage/filesystem.d.ts +18 -0
  50. package/node_modules/tor-js/dist/storage/filesystem.d.ts.map +1 -0
  51. package/node_modules/tor-js/dist/storage/index.d.ts +7 -0
  52. package/node_modules/tor-js/dist/storage/index.d.ts.map +1 -0
  53. package/node_modules/tor-js/dist/storage/indexeddb.d.ts +14 -0
  54. package/node_modules/tor-js/dist/storage/indexeddb.d.ts.map +1 -0
  55. package/node_modules/tor-js/dist/storage/locking.d.ts +15 -0
  56. package/node_modules/tor-js/dist/storage/locking.d.ts.map +1 -0
  57. package/node_modules/tor-js/dist/storage/memory.d.ts +13 -0
  58. package/node_modules/tor-js/dist/storage/memory.d.ts.map +1 -0
  59. package/node_modules/tor-js/dist/storage/node-deps.d.ts +8 -0
  60. package/node_modules/tor-js/dist/storage/node-deps.d.ts.map +1 -0
  61. package/node_modules/tor-js/dist/tor_js_bg.wasm +0 -0
  62. package/node_modules/tor-js/dist/types.d.ts +41 -0
  63. package/node_modules/tor-js/dist/types.d.ts.map +1 -0
  64. package/node_modules/tor-js/dist/wasm-B6es-efC.d.ts +302 -0
  65. package/node_modules/tor-js/dist/wasm-pkg/tor_js.d.ts +311 -0
  66. package/node_modules/tor-js/dist/wasm-pkg/tor_js.js +1159 -0
  67. package/node_modules/tor-js/dist/wasm.d.ts +31 -0
  68. package/node_modules/tor-js/dist/wasm.d.ts.map +1 -0
  69. package/node_modules/tor-js/package.json +61 -0
  70. package/node_modules/tor-js/src/Log.ts +100 -0
  71. package/node_modules/tor-js/src/TorClient.ts +134 -0
  72. package/node_modules/tor-js/src/commonExports.ts +7 -0
  73. package/node_modules/tor-js/src/entryPoints/wasm-base64/index.ts +17 -0
  74. package/node_modules/tor-js/src/entryPoints/wasm-base64/singleton.ts +7 -0
  75. package/node_modules/tor-js/src/entryPoints/wasm-cdn/index.ts +155 -0
  76. package/node_modules/tor-js/src/entryPoints/wasm-cdn/singleton.ts +7 -0
  77. package/node_modules/tor-js/src/entryPoints/wasm-file/index.ts +19 -0
  78. package/node_modules/tor-js/src/entryPoints/wasm-file/singleton.ts +7 -0
  79. package/node_modules/tor-js/src/globals.d.ts +2 -0
  80. package/node_modules/tor-js/src/helpers.ts +20 -0
  81. package/node_modules/tor-js/src/polyfills.ts +4 -0
  82. package/node_modules/tor-js/src/singleton.ts +54 -0
  83. package/node_modules/tor-js/src/socketProvider.ts +405 -0
  84. package/node_modules/tor-js/src/storage/filesystem.ts +171 -0
  85. package/node_modules/tor-js/src/storage/index.ts +21 -0
  86. package/node_modules/tor-js/src/storage/indexeddb.ts +99 -0
  87. package/node_modules/tor-js/src/storage/locking.ts +195 -0
  88. package/node_modules/tor-js/src/storage/memory.ts +42 -0
  89. package/node_modules/tor-js/src/storage/node-deps.ts +23 -0
  90. package/node_modules/tor-js/src/types.ts +48 -0
  91. package/node_modules/tor-js/src/wasm-base64-data.d.ts +3 -0
  92. package/node_modules/tor-js/src/wasm.ts +135 -0
  93. package/package.json +67 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/polyfills.ts","../../../../pkg/tor_js.js","../../../src/wasm.ts","../../../src/storage/index.ts","../../../src/storage/memory.ts","../../../src/storage/indexeddb.ts","../../../src/storage/node-deps.ts","../../../src/storage/filesystem.ts","../../../src/storage/locking.ts","../../../src/Log.ts","../../../src/socketProvider.ts","../../../src/TorClient.ts","../../../src/entryPoints/wasm-cdn/index.ts"],"sourcesContent":["// Polyfill Symbol.dispose for runtimes that don't support it yet\n// (e.g. Node < 20, older browsers). Must be imported before wasm-pkg\n// code runs, since wasm-bindgen uses `if (Symbol.dispose)` at load time.\n(Symbol as any).dispose ??= Symbol('Symbol.dispose');\n","/* @ts-self-types=\"./tor_js.d.ts\" */\n\nexport class IntoUnderlyingByteSource {\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n IntoUnderlyingByteSourceFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_intounderlyingbytesource_free(ptr, 0);\n }\n /**\n * @returns {number}\n */\n get autoAllocateChunkSize() {\n const ret = wasm.intounderlyingbytesource_autoAllocateChunkSize(this.__wbg_ptr);\n return ret >>> 0;\n }\n cancel() {\n const ptr = this.__destroy_into_raw();\n wasm.intounderlyingbytesource_cancel(ptr);\n }\n /**\n * @param {ReadableByteStreamController} controller\n * @returns {Promise<any>}\n */\n pull(controller) {\n const ret = wasm.intounderlyingbytesource_pull(this.__wbg_ptr, controller);\n return ret;\n }\n /**\n * @param {ReadableByteStreamController} controller\n */\n start(controller) {\n wasm.intounderlyingbytesource_start(this.__wbg_ptr, controller);\n }\n /**\n * @returns {ReadableStreamType}\n */\n get type() {\n const ret = wasm.intounderlyingbytesource_type(this.__wbg_ptr);\n return __wbindgen_enum_ReadableStreamType[ret];\n }\n}\nif (Symbol.dispose) IntoUnderlyingByteSource.prototype[Symbol.dispose] = IntoUnderlyingByteSource.prototype.free;\n\nexport class IntoUnderlyingSink {\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n IntoUnderlyingSinkFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_intounderlyingsink_free(ptr, 0);\n }\n /**\n * @param {any} reason\n * @returns {Promise<any>}\n */\n abort(reason) {\n const ptr = this.__destroy_into_raw();\n const ret = wasm.intounderlyingsink_abort(ptr, reason);\n return ret;\n }\n /**\n * @returns {Promise<any>}\n */\n close() {\n const ptr = this.__destroy_into_raw();\n const ret = wasm.intounderlyingsink_close(ptr);\n return ret;\n }\n /**\n * @param {any} chunk\n * @returns {Promise<any>}\n */\n write(chunk) {\n const ret = wasm.intounderlyingsink_write(this.__wbg_ptr, chunk);\n return ret;\n }\n}\nif (Symbol.dispose) IntoUnderlyingSink.prototype[Symbol.dispose] = IntoUnderlyingSink.prototype.free;\n\nexport class IntoUnderlyingSource {\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(IntoUnderlyingSource.prototype);\n obj.__wbg_ptr = ptr;\n IntoUnderlyingSourceFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n IntoUnderlyingSourceFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_intounderlyingsource_free(ptr, 0);\n }\n cancel() {\n const ptr = this.__destroy_into_raw();\n wasm.intounderlyingsource_cancel(ptr);\n }\n /**\n * @param {ReadableStreamDefaultController} controller\n * @returns {Promise<any>}\n */\n pull(controller) {\n const ret = wasm.intounderlyingsource_pull(this.__wbg_ptr, controller);\n return ret;\n }\n}\nif (Symbol.dispose) IntoUnderlyingSource.prototype[Symbol.dispose] = IntoUnderlyingSource.prototype.free;\n\n/**\n * Tor client for making HTTP requests through the Tor network\n */\nexport class TorClient {\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(TorClient.prototype);\n obj.__wbg_ptr = ptr;\n TorClientFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n TorClientFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_torclient_free(ptr, 0);\n }\n /**\n * Close the TorClient and release resources\n * @returns {Promise<any>}\n */\n close() {\n const ret = wasm.torclient_close(this.__wbg_ptr);\n return ret;\n }\n /**\n * Create a new TorClient with the given options.\n *\n * This is an async operation that returns a Promise.\n * The client will bootstrap and establish a connection to the Tor network.\n *\n * Usage from JS: `const client = await TorClient.create(options);`\n * @param {TorClientOptions} options\n * @returns {Promise<any>}\n */\n static create(options) {\n _assertClass(options, TorClientOptions);\n var ptr0 = options.__destroy_into_raw();\n const ret = wasm.torclient_create(ptr0);\n return ret;\n }\n /**\n * Make an HTTP fetch request through Tor\n *\n * Returns a Promise that resolves to a standard browser `Response` object\n * as soon as response headers are received. The body is a `ReadableStream`\n * that reads from the Tor circuit on demand.\n * @param {string} url\n * @param {any} init\n * @returns {Promise<any>}\n */\n fetch(url, init) {\n const ptr0 = passStringToWasm0(url, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.torclient_fetch(this.__wbg_ptr, ptr0, len0, init);\n return ret;\n }\n /**\n * Wait until the client is ready for traffic (connection usable + valid directory).\n * @returns {Promise<any>}\n */\n ready() {\n const ret = wasm.torclient_ready(this.__wbg_ptr);\n return ret;\n }\n}\nif (Symbol.dispose) TorClient.prototype[Symbol.dispose] = TorClient.prototype.free;\n\n/**\n * Options for creating a TorClient\n */\nexport class TorClientOptions {\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(TorClientOptions.prototype);\n obj.__wbg_ptr = ptr;\n TorClientOptionsFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n TorClientOptionsFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_torclientoptions_free(ptr, 0);\n }\n /**\n * Create options with a connect function.\n *\n * The connect function receives a target address string (e.g. \"198.51.100.1:9001\")\n * and must return a Promise resolving to a socket object with:\n * - `send(data: Uint8Array)` — send binary data\n * - `onmessage: ((data: Uint8Array) => void) | null` — receive callback\n * - `onclose: (() => void) | null` — close notification\n * - `close()` — close the socket\n *\n * The TS wrapper provides this automatically via the Gateway class.\n * @param {Function} connect\n */\n constructor(connect) {\n const ret = wasm.torclientoptions_new(connect);\n this.__wbg_ptr = ret >>> 0;\n TorClientOptionsFinalization.register(this, this.__wbg_ptr, this);\n return this;\n }\n /**\n * Set a callback that provides bootstrap.zip bytes for fast directory pre-population.\n *\n * The callback should be `() => Promise<Uint8Array>` returning the uncompressed\n * bootstrap.zip bytes (from a tor-js-gateway server).\n *\n * When set and storage has no cached consensus, the zip is parsed and the\n * directory cache is pre-populated before bootstrap begins.\n * @param {Function} callback\n * @returns {TorClientOptions}\n */\n withFastBootstrap(callback) {\n const ptr = this.__destroy_into_raw();\n const ret = wasm.torclientoptions_withFastBootstrap(ptr, callback);\n return TorClientOptions.__wrap(ret);\n }\n /**\n * Set a custom storage implementation for persistent state.\n *\n * When set, the Tor client will persist guard selection and other state\n * to this storage, allowing faster reconnection across page reloads.\n *\n * If not set, in-memory storage is used (state lost on page reload).\n *\n * # Arguments\n * * `storage` - A JavaScript object implementing the TorStorage interface\n * @param {TorStorage} storage\n * @returns {TorClientOptions}\n */\n withStorage(storage) {\n const ptr = this.__destroy_into_raw();\n const ret = wasm.torclientoptions_withStorage(ptr, storage);\n return TorClientOptions.__wrap(ret);\n }\n}\nif (Symbol.dispose) TorClientOptions.prototype[Symbol.dispose] = TorClientOptions.prototype.free;\n\n/**\n * Initialize the tor-js WASM module\n *\n * This must be called before creating any TorClient instances.\n * Sets up panic hooks and logging infrastructure.\n *\n * The optional `log_level` parameter sets the initial log level:\n * \"trace\", \"debug\", \"info\", \"warn\", or \"error\". Defaults to \"debug\".\n * The level can be changed later with `setLogLevel()`.\n * @param {string | null} [log_level]\n */\nexport function init(log_level) {\n var ptr0 = isLikeNone(log_level) ? 0 : passStringToWasm0(log_level, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.init(ptr0, len0);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n}\n\n/**\n * Set a callback function to receive log messages\n *\n * The callback receives three arguments: (level: string, target: string, message: string)\n * @param {Function} callback\n */\nexport function setLogCallback(callback) {\n wasm.setLogCallback(callback);\n}\n\n/**\n * Dynamically update the minimum log level.\n *\n * Called from JS when the broadest requested level across all clients changes.\n * @param {string} level\n */\nexport function setLogLevel(level) {\n const ptr0 = passStringToWasm0(level, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.setLogLevel(ptr0, len0);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n}\n\nfunction __wbg_get_imports() {\n const import0 = {\n __proto__: null,\n __wbg_Error_83742b46f01ce22d: function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return ret;\n },\n __wbg_String_8564e559799eccda: function(arg0, arg1) {\n const ret = String(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_boolean_get_c0f3f60bac5a78d1: function(arg0) {\n const v = arg0;\n const ret = typeof(v) === 'boolean' ? v : undefined;\n return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;\n },\n __wbg___wbindgen_debug_string_5398f5bb970e0daa: function(arg0, arg1) {\n const ret = debugString(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_in_41dbb8413020e076: function(arg0, arg1) {\n const ret = arg0 in arg1;\n return ret;\n },\n __wbg___wbindgen_is_function_3c846841762788c1: function(arg0) {\n const ret = typeof(arg0) === 'function';\n return ret;\n },\n __wbg___wbindgen_is_null_0b605fc6b167c56f: function(arg0) {\n const ret = arg0 === null;\n return ret;\n },\n __wbg___wbindgen_is_object_781bc9f159099513: function(arg0) {\n const val = arg0;\n const ret = typeof(val) === 'object' && val !== null;\n return ret;\n },\n __wbg___wbindgen_is_string_7ef6b97b02428fae: function(arg0) {\n const ret = typeof(arg0) === 'string';\n return ret;\n },\n __wbg___wbindgen_is_undefined_52709e72fb9f179c: function(arg0) {\n const ret = arg0 === undefined;\n return ret;\n },\n __wbg___wbindgen_jsval_loose_eq_5bcc3bed3c69e72b: function(arg0, arg1) {\n const ret = arg0 == arg1;\n return ret;\n },\n __wbg___wbindgen_number_get_34bb9d9dcfa21373: function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'number' ? obj : undefined;\n getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n },\n __wbg___wbindgen_string_get_395e606bd0ee4427: function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_throw_6ddd609b62940d55: function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n },\n __wbg__wbg_cb_unref_6b5b6b8576d35cb1: function(arg0) {\n arg0._wbg_cb_unref();\n },\n __wbg_aborted_4789bfb2963583fb: function(arg0) {\n const ret = arg0.aborted;\n return ret;\n },\n __wbg_all_91078ec14f01cdc8: function(arg0) {\n const ret = Promise.all(arg0);\n return ret;\n },\n __wbg_append_608dfb635ee8998f: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {\n arg0.append(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n }, arguments); },\n __wbg_buffer_60b8043cd926067d: function(arg0) {\n const ret = arg0.buffer;\n return ret;\n },\n __wbg_byobRequest_6342e5f2b232c0f9: function(arg0) {\n const ret = arg0.byobRequest;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_byteLength_607b856aa6c5a508: function(arg0) {\n const ret = arg0.byteLength;\n return ret;\n },\n __wbg_byteOffset_b26b63681c83856c: function(arg0) {\n const ret = arg0.byteOffset;\n return ret;\n },\n __wbg_call_2d781c1f4d5c0ef8: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.call(arg1, arg2);\n return ret;\n }, arguments); },\n __wbg_call_e133b57c9155d22c: function() { return handleError(function (arg0, arg1) {\n const ret = arg0.call(arg1);\n return ret;\n }, arguments); },\n __wbg_call_f858478a02f9600f: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {\n const ret = arg0.call(arg1, arg2, arg3, arg4);\n return ret;\n }, arguments); },\n __wbg_clearTimeout_113b1cde814ec762: function(arg0) {\n const ret = clearTimeout(arg0);\n return ret;\n },\n __wbg_close_690d36108c557337: function() { return handleError(function (arg0) {\n arg0.close();\n }, arguments); },\n __wbg_close_737b4b1fbc658540: function() { return handleError(function (arg0) {\n arg0.close();\n }, arguments); },\n __wbg_crypto_38df2bab126b63dc: function(arg0) {\n const ret = arg0.crypto;\n return ret;\n },\n __wbg_delete_bddb69df015ae01b: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.delete(getStringFromWasm0(arg1, arg2));\n return ret;\n }, arguments); },\n __wbg_digest_cb8de04aa7e6b6f1: function() { return handleError(function (arg0, arg1, arg2, arg3) {\n const ret = arg0.digest(getStringFromWasm0(arg1, arg2), arg3);\n return ret;\n }, arguments); },\n __wbg_done_08ce71ee07e3bd17: function(arg0) {\n const ret = arg0.done;\n return ret;\n },\n __wbg_enqueue_ec3552838b4b7fbf: function() { return handleError(function (arg0, arg1) {\n arg0.enqueue(arg1);\n }, arguments); },\n __wbg_entries_e8a20ff8c9757101: function(arg0) {\n const ret = Object.entries(arg0);\n return ret;\n },\n __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);\n }\n },\n __wbg_from_4bdf88943703fd48: function(arg0) {\n const ret = Array.from(arg0);\n return ret;\n },\n __wbg_getAll_576fde6e76c7d925: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.getAll(getStringFromWasm0(arg1, arg2));\n return ret;\n }, arguments); },\n __wbg_getRandomValues_3f44b700395062e5: function() { return handleError(function (arg0, arg1) {\n globalThis.crypto.getRandomValues(getArrayU8FromWasm0(arg0, arg1));\n }, arguments); },\n __wbg_getRandomValues_c44a50d8cfdaebeb: function() { return handleError(function (arg0, arg1) {\n arg0.getRandomValues(arg1);\n }, arguments); },\n __wbg_get_326e41e095fb2575: function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.get(arg0, arg1);\n return ret;\n }, arguments); },\n __wbg_get_3ef1eba1850ade27: function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.get(arg0, arg1);\n return ret;\n }, arguments); },\n __wbg_get_a8ee5c45dabc1b3b: function(arg0, arg1) {\n const ret = arg0[arg1 >>> 0];\n return ret;\n },\n __wbg_get_unchecked_329cfe50afab7352: function(arg0, arg1) {\n const ret = arg0[arg1 >>> 0];\n return ret;\n },\n __wbg_get_with_ref_key_6412cf3094599694: function(arg0, arg1) {\n const ret = arg0[arg1];\n return ret;\n },\n __wbg_instanceof_AbortSignal_0173156d14d8c44d: function(arg0) {\n let result;\n try {\n result = arg0 instanceof AbortSignal;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_ArrayBuffer_101e2bf31071a9f6: function(arg0) {\n let result;\n try {\n result = arg0 instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_Crypto_5c2a4c15287b0332: function(arg0) {\n let result;\n try {\n result = arg0 instanceof Crypto;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_Uint8Array_740438561a5b956d: function(arg0) {\n let result;\n try {\n result = arg0 instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_iterator_d8f549ec8fb061b1: function() {\n const ret = Symbol.iterator;\n return ret;\n },\n __wbg_length_b3416cf66a5452c8: function(arg0) {\n const ret = arg0.length;\n return ret;\n },\n __wbg_length_ea16607d7b61445b: function(arg0) {\n const ret = arg0.length;\n return ret;\n },\n __wbg_log_524eedafa26daa59: function(arg0) {\n console.log(arg0);\n },\n __wbg_msCrypto_bd5a034af96bcba6: function(arg0) {\n const ret = arg0.msCrypto;\n return ret;\n },\n __wbg_new_0837727332ac86ba: function() { return handleError(function () {\n const ret = new Headers();\n return ret;\n }, arguments); },\n __wbg_new_227d7c05414eb861: function() {\n const ret = new Error();\n return ret;\n },\n __wbg_new_5f486cdf45a04d78: function(arg0) {\n const ret = new Uint8Array(arg0);\n return ret;\n },\n __wbg_new_ab79df5bd7c26067: function() {\n const ret = new Object();\n return ret;\n },\n __wbg_new_d15cb560a6a0e5f0: function(arg0, arg1) {\n const ret = new Error(getStringFromWasm0(arg0, arg1));\n return ret;\n },\n __wbg_new_from_slice_22da9388ac046e50: function(arg0, arg1) {\n const ret = new Uint8Array(getArrayU8FromWasm0(arg0, arg1));\n return ret;\n },\n __wbg_new_typed_aaaeaf29cf802876: function(arg0, arg1) {\n try {\n var state0 = {a: arg0, b: arg1};\n var cb0 = (arg0, arg1) => {\n const a = state0.a;\n state0.a = 0;\n try {\n return wasm_bindgen__convert__closures_____invoke__hb864778e5a95f086(a, state0.b, arg0, arg1);\n } finally {\n state0.a = a;\n }\n };\n const ret = new Promise(cb0);\n return ret;\n } finally {\n state0.a = state0.b = 0;\n }\n },\n __wbg_new_with_byte_offset_and_length_b2ec5bf7b2f35743: function(arg0, arg1, arg2) {\n const ret = new Uint8Array(arg0, arg1 >>> 0, arg2 >>> 0);\n return ret;\n },\n __wbg_new_with_into_underlying_source_b45133df5ff75afa: function(arg0, arg1) {\n const ret = new ReadableStream(IntoUnderlyingSource.__wrap(arg0), arg1);\n return ret;\n },\n __wbg_new_with_length_3259a525196bd8cc: function(arg0) {\n const ret = new Array(arg0 >>> 0);\n return ret;\n },\n __wbg_new_with_length_825018a1616e9e55: function(arg0) {\n const ret = new Uint8Array(arg0 >>> 0);\n return ret;\n },\n __wbg_new_with_opt_readable_stream_and_init_15b79ab5fa39d080: function() { return handleError(function (arg0, arg1) {\n const ret = new Response(arg0, arg1);\n return ret;\n }, arguments); },\n __wbg_next_11b99ee6237339e3: function() { return handleError(function (arg0) {\n const ret = arg0.next();\n return ret;\n }, arguments); },\n __wbg_next_e01a967809d1aa68: function(arg0) {\n const ret = arg0.next;\n return ret;\n },\n __wbg_node_84ea875411254db1: function(arg0) {\n const ret = arg0.node;\n return ret;\n },\n __wbg_now_16f0c993d5dd6c27: function() {\n const ret = Date.now();\n return ret;\n },\n __wbg_now_e7c6795a7f81e10f: function(arg0) {\n const ret = arg0.now();\n return ret;\n },\n __wbg_performance_3fcf6e32a7e1ed0a: function(arg0) {\n const ret = arg0.performance;\n return ret;\n },\n __wbg_process_44c7a14e11e9f69e: function(arg0) {\n const ret = arg0.process;\n return ret;\n },\n __wbg_prototypesetcall_d62e5099504357e6: function(arg0, arg1, arg2) {\n Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), arg2);\n },\n __wbg_queueMicrotask_0c399741342fb10f: function(arg0) {\n const ret = arg0.queueMicrotask;\n return ret;\n },\n __wbg_queueMicrotask_a082d78ce798393e: function(arg0) {\n queueMicrotask(arg0);\n },\n __wbg_randomFillSync_6c25eac9869eb53c: function() { return handleError(function (arg0, arg1) {\n arg0.randomFillSync(arg1);\n }, arguments); },\n __wbg_require_b4edbdcf3e2a1ef0: function() { return handleError(function () {\n const ret = module.require;\n return ret;\n }, arguments); },\n __wbg_resolve_ae8d83246e5bcc12: function(arg0) {\n const ret = Promise.resolve(arg0);\n return ret;\n },\n __wbg_respond_e286ee502e7cf7e4: function() { return handleError(function (arg0, arg1) {\n arg0.respond(arg1 >>> 0);\n }, arguments); },\n __wbg_setTimeout_ef24d2fc3ad97385: function() { return handleError(function (arg0, arg1) {\n const ret = setTimeout(arg0, arg1);\n return ret;\n }, arguments); },\n __wbg_set_282384002438957f: function(arg0, arg1, arg2) {\n arg0[arg1 >>> 0] = arg2;\n },\n __wbg_set_7eaa4f96924fd6b3: function() { return handleError(function (arg0, arg1, arg2) {\n const ret = Reflect.set(arg0, arg1, arg2);\n return ret;\n }, arguments); },\n __wbg_set_8c0b3ffcf05d61c2: function(arg0, arg1, arg2) {\n arg0.set(getArrayU8FromWasm0(arg1, arg2));\n },\n __wbg_set_9b44de9403b9716a: function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {\n const ret = arg0.set(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n return ret;\n }, arguments); },\n __wbg_set_headers_bf56980ea1a65acb: function(arg0, arg1) {\n arg0.headers = arg1;\n },\n __wbg_set_high_water_mark_1ac059fa0566c2fc: function(arg0, arg1) {\n arg0.highWaterMark = arg1;\n },\n __wbg_set_status_b80d37d9d23276c4: function(arg0, arg1) {\n arg0.status = arg1;\n },\n __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) {\n const ret = arg1.stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg_static_accessor_GLOBAL_8adb955bd33fac2f: function() {\n const ret = typeof global === 'undefined' ? null : global;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_static_accessor_GLOBAL_THIS_ad356e0db91c7913: function() {\n const ret = typeof globalThis === 'undefined' ? null : globalThis;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_static_accessor_SELF_f207c857566db248: function() {\n const ret = typeof self === 'undefined' ? null : self;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_static_accessor_WINDOW_bb9f1ba69d61b386: function() {\n const ret = typeof window === 'undefined' ? null : window;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbg_subarray_a068d24e39478a8a: function(arg0, arg1, arg2) {\n const ret = arg0.subarray(arg1 >>> 0, arg2 >>> 0);\n return ret;\n },\n __wbg_subtle_c060fa3eb5c6248d: function(arg0) {\n const ret = arg0.subtle;\n return ret;\n },\n __wbg_then_098abe61755d12f6: function(arg0, arg1) {\n const ret = arg0.then(arg1);\n return ret;\n },\n __wbg_then_9e335f6dd892bc11: function(arg0, arg1, arg2) {\n const ret = arg0.then(arg1, arg2);\n return ret;\n },\n __wbg_torclient_new: function(arg0) {\n const ret = TorClient.__wrap(arg0);\n return ret;\n },\n __wbg_tryLock_5d7357252b3473bd: function() { return handleError(function (arg0) {\n const ret = arg0.tryLock();\n return ret;\n }, arguments); },\n __wbg_unlock_2d843e9896897e90: function() { return handleError(function (arg0) {\n const ret = arg0.unlock();\n return ret;\n }, arguments); },\n __wbg_value_21fc78aab0322612: function(arg0) {\n const ret = arg0.value;\n return ret;\n },\n __wbg_versions_276b2795b1c6a219: function(arg0) {\n const ret = arg0.versions;\n return ret;\n },\n __wbg_view_f68a712e7315f8b2: function(arg0) {\n const ret = arg0.view;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n },\n __wbindgen_cast_0000000000000001: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { dtor_idx: 4083, function: Function { arguments: [Externref], shim_idx: 4084, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen__closure__destroy__h9b79478a56146cd2, wasm_bindgen__convert__closures_____invoke__h5c591e637e5094b1);\n return ret;\n },\n __wbindgen_cast_0000000000000002: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { dtor_idx: 4450, function: Function { arguments: [], shim_idx: 4451, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen__closure__destroy__h4d8dd6cb42c8a695, wasm_bindgen__convert__closures_____invoke__h69c112f8841b438b);\n return ret;\n },\n __wbindgen_cast_0000000000000003: function(arg0, arg1) {\n // Cast intrinsic for `Closure(Closure { dtor_idx: 4457, function: Function { arguments: [Externref], shim_idx: 4458, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`.\n const ret = makeMutClosure(arg0, arg1, wasm.wasm_bindgen__closure__destroy__h1e3ac41672e7b2ad, wasm_bindgen__convert__closures_____invoke__hc2bcdd2c6020290d);\n return ret;\n },\n __wbindgen_cast_0000000000000004: function(arg0, arg1) {\n // Cast intrinsic for `Ref(Slice(U8)) -> NamedExternref(\"Uint8Array\")`.\n const ret = getArrayU8FromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_cast_0000000000000005: function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n },\n __wbindgen_init_externref_table: function() {\n const table = wasm.__wbindgen_externrefs;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n },\n };\n return {\n __proto__: null,\n \"./tor_js_bg.js\": import0,\n };\n}\n\nfunction wasm_bindgen__convert__closures_____invoke__h69c112f8841b438b(arg0, arg1) {\n wasm.wasm_bindgen__convert__closures_____invoke__h69c112f8841b438b(arg0, arg1);\n}\n\nfunction wasm_bindgen__convert__closures_____invoke__h5c591e637e5094b1(arg0, arg1, arg2) {\n wasm.wasm_bindgen__convert__closures_____invoke__h5c591e637e5094b1(arg0, arg1, arg2);\n}\n\nfunction wasm_bindgen__convert__closures_____invoke__hc2bcdd2c6020290d(arg0, arg1, arg2) {\n const ret = wasm.wasm_bindgen__convert__closures_____invoke__hc2bcdd2c6020290d(arg0, arg1, arg2);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n}\n\nfunction wasm_bindgen__convert__closures_____invoke__hb864778e5a95f086(arg0, arg1, arg2, arg3) {\n wasm.wasm_bindgen__convert__closures_____invoke__hb864778e5a95f086(arg0, arg1, arg2, arg3);\n}\n\n\nconst __wbindgen_enum_ReadableStreamType = [\"bytes\"];\nconst IntoUnderlyingByteSourceFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_intounderlyingbytesource_free(ptr >>> 0, 1));\nconst IntoUnderlyingSinkFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_intounderlyingsink_free(ptr >>> 0, 1));\nconst IntoUnderlyingSourceFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_intounderlyingsource_free(ptr >>> 0, 1));\nconst TorClientFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_torclient_free(ptr >>> 0, 1));\nconst TorClientOptionsFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_torclientoptions_free(ptr >>> 0, 1));\n\nfunction addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_externrefs.set(idx, obj);\n return idx;\n}\n\nfunction _assertClass(instance, klass) {\n if (!(instance instanceof klass)) {\n throw new Error(`expected instance of ${klass.name}`);\n }\n}\n\nconst CLOSURE_DTORS = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(state => state.dtor(state.a, state.b));\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return decodeText(ptr, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n const idx = addToExternrefTable0(e);\n wasm.__wbindgen_exn_store(idx);\n }\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction makeMutClosure(arg0, arg1, dtor, f) {\n const state = { a: arg0, b: arg1, cnt: 1, dtor };\n const real = (...args) => {\n\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n const a = state.a;\n state.a = 0;\n try {\n return f(a, state.b, ...args);\n } finally {\n state.a = a;\n real._wbg_cb_unref();\n }\n };\n real._wbg_cb_unref = () => {\n if (--state.cnt === 0) {\n state.dtor(state.a, state.b);\n state.a = 0;\n CLOSURE_DTORS.unregister(state);\n }\n };\n CLOSURE_DTORS.register(real, state, state);\n return real;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_externrefs.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasm;\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n wasmModule = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = module.ok && expectedResponseType(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else { throw e; }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n\n function expectedResponseType(type) {\n switch (type) {\n case 'basic': case 'cors': case 'default': return true;\n }\n return false;\n }\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (module !== undefined) {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (module_or_path !== undefined) {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (module_or_path === undefined) {\n module_or_path = new URL('tor_js_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n","import './polyfills.js';\nimport initWasm, {\n init as wasmInit,\n setLogCallback as wasmSetLogCallback,\n setLogLevel as wasmSetLogLevel,\n TorClient as WasmTorClient,\n TorClientOptions as WasmTorClientOptions,\n} from '#wasm';\n\nexport { WasmTorClient, WasmTorClientOptions };\n\n// ============================================================================\n// Log listener management\n// ============================================================================\n\ntype WasmLogCallback = (level: string, target: string, message: string) => void;\n\nconst LEVEL_ORDER = ['trace', 'debug', 'info', 'warn', 'error'] as const;\n\nfunction levelIndex(level: string): number {\n const idx = LEVEL_ORDER.indexOf(level as typeof LEVEL_ORDER[number]);\n return idx === -1 ? 1 : idx; // default to debug\n}\n\ninterface LogListener {\n callback: WasmLogCallback;\n levelIdx: number;\n}\n\nconst logListeners = new Map<WasmLogCallback, LogListener>();\n\n/** Recompute the broadest level across all listeners and update the WASM filter. */\nfunction syncWasmLogLevel(): void {\n let broadestIdx = LEVEL_ORDER.length - 1; // start at narrowest (error)\n for (const listener of logListeners.values()) {\n if (listener.levelIdx < broadestIdx) {\n broadestIdx = listener.levelIdx;\n }\n }\n wasmSetLogLevel(LEVEL_ORDER[broadestIdx]);\n}\n\n/**\n * Register a log callback at a given level. The WASM subscriber is\n * automatically widened to the broadest level across all listeners.\n * Each listener only receives events at or above its own level.\n * Returns an unregister function.\n */\nexport function addLogListener(cb: WasmLogCallback, level: string = 'debug'): () => void {\n logListeners.set(cb, { callback: cb, levelIdx: levelIndex(level) });\n syncWasmLogLevel();\n return () => {\n logListeners.delete(cb);\n if (logListeners.size > 0) {\n syncWasmLogLevel();\n }\n };\n}\n\n/**\n * Update the level for an existing listener and re-sync the WASM filter.\n */\nexport function setListenerLevel(cb: WasmLogCallback, level: string): void {\n const listener = logListeners.get(cb);\n if (listener) {\n listener.levelIdx = levelIndex(level);\n syncWasmLogLevel();\n }\n}\n\n// ============================================================================\n// WASM initialization\n// ============================================================================\n\ntype WasmSourceProvider = () => Promise<BufferSource | Uint8Array>;\n\nlet initPromise: Promise<void> | null = null;\nlet customWasmUrl: string | URL | undefined;\nlet wasmSourceProvider: WasmSourceProvider | undefined;\n\n/**\n * Override the WASM binary URL. Must be called before any TorClient is created.\n */\nexport function setWasmUrl(url: string | URL): void {\n if (initPromise) {\n throw new Error('setWasmUrl() must be called before any TorClient is created');\n }\n customWasmUrl = url;\n}\n\n/**\n * Set a custom WASM source provider. Called by entry points to configure\n * how the WASM binary is loaded (e.g. base64 decode, CDN fetch).\n * Must be called before any TorClient is created.\n */\nexport function setWasmSourceProvider(provider: WasmSourceProvider): void {\n if (initPromise) {\n throw new Error('setWasmSourceProvider() must be called before any TorClient is created');\n }\n wasmSourceProvider = provider;\n}\n\n/**\n * Ensures the WASM module is loaded and initialized. Idempotent.\n */\nexport async function ensureWasmInitialized(): Promise<void> {\n if (initPromise) return initPromise;\n initPromise = doInit();\n return initPromise;\n}\n\nasync function doInit(): Promise<void> {\n if (customWasmUrl) {\n await initWasm({ module_or_path: customWasmUrl });\n } else if (wasmSourceProvider) {\n await initWasm({ module_or_path: await wasmSourceProvider() });\n } else {\n throw new Error(\n 'No WASM source configured. Import from a specific entry point '\n + '(tor-js/wasm-base64, tor-js/wasm-cdn, or tor-js/wasm-file) '\n + 'or call setWasmUrl() before creating a TorClient.',\n );\n }\n wasmInit();\n\n // Install a single fan-out callback that dispatches to matching listeners\n wasmSetLogCallback((level: string, target: string, message: string) => {\n const lvl = levelIndex(level);\n for (const listener of logListeners.values()) {\n if (lvl >= listener.levelIdx) {\n listener.callback(level, target, message);\n }\n }\n });\n}","export { MemoryStorage } from './memory.js';\nexport { IndexedDBStorage } from './indexeddb.js';\nexport { FilesystemStorage } from './filesystem.js';\nexport { addLocking, type TorStorageSimple } from './locking.js';\n\nimport type { TorStorage } from '#wasm';\nimport { IndexedDBStorage } from './indexeddb.js';\nimport { FilesystemStorage } from './filesystem.js';\nimport { addLocking } from './locking.js';\n\nexport function createAutoStorage(name: string = 'tor-js'): TorStorage {\n if (typeof globalThis !== 'undefined' && typeof globalThis.indexedDB !== 'undefined') {\n return addLocking(new IndexedDBStorage(name), name);\n }\n if (typeof process !== 'undefined' && process.versions?.node) {\n return addLocking(FilesystemStorage.localShare(name), name);\n }\n throw new Error(\n 'No persistent storage available: need IndexedDB (browser) or filesystem (Node.js)',\n );\n}\n","import type { TorStorage } from '#wasm';\n\nexport class MemoryStorage implements TorStorage {\n private data = new Map<string, string>();\n private locked = false;\n\n async get(key: string): Promise<string | null> {\n return this.data.get(key) ?? null;\n }\n\n async set(key: string, value: string): Promise<void> {\n this.data.set(key, value);\n }\n\n async delete(key: string): Promise<void> {\n this.data.delete(key);\n }\n\n async keys(prefix: string): Promise<string[]> {\n return [...this.data.keys()].filter(k => k.startsWith(prefix)).sort();\n }\n\n async getAll(prefix: string): Promise<[string, string][]> {\n const result: [string, string][] = [];\n for (const [key, value] of this.data) {\n if (key.startsWith(prefix)) {\n result.push([key, value]);\n }\n }\n return result;\n }\n\n async tryLock(): Promise<boolean> {\n if (this.locked) return false;\n this.locked = true;\n return true;\n }\n\n async unlock(): Promise<void> {\n this.locked = false;\n }\n}\n","import type { TorStorageSimple } from './locking.js';\n\nexport class IndexedDBStorage implements TorStorageSimple {\n private dbName: string;\n private storeName = 'keyvalue';\n private dbPromise: Promise<IDBDatabase> | null = null;\n\n constructor(name: string = 'tor-js') {\n this.dbName = name;\n }\n\n private getDB(): Promise<IDBDatabase> {\n if (!this.dbPromise) {\n this.dbPromise = new Promise((resolve, reject) => {\n const request = indexedDB.open(this.dbName, 1);\n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve(request.result);\n request.onupgradeneeded = (event) => {\n const db = (event.target as IDBOpenDBRequest).result;\n if (!db.objectStoreNames.contains(this.storeName)) {\n db.createObjectStore(this.storeName);\n }\n };\n });\n }\n return this.dbPromise;\n }\n\n async get(key: string): Promise<string | null> {\n const db = await this.getDB();\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.storeName, 'readonly');\n const store = tx.objectStore(this.storeName);\n const request = store.get(key);\n request.onerror = () => reject(request.error);\n request.onsuccess = () => {\n resolve(request.result === undefined ? null : request.result);\n };\n });\n }\n\n async set(key: string, value: string): Promise<void> {\n const db = await this.getDB();\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.storeName, 'readwrite');\n const store = tx.objectStore(this.storeName);\n const request = store.put(value, key);\n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve();\n });\n }\n\n async delete(key: string): Promise<void> {\n const db = await this.getDB();\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.storeName, 'readwrite');\n const store = tx.objectStore(this.storeName);\n const request = store.delete(key);\n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve();\n });\n }\n\n async keys(prefix: string): Promise<string[]> {\n const db = await this.getDB();\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.storeName, 'readonly');\n const store = tx.objectStore(this.storeName);\n const request = store.getAllKeys();\n request.onerror = () => reject(request.error);\n request.onsuccess = () => {\n const allKeys = request.result as string[];\n resolve(allKeys.filter(k => k.startsWith(prefix)).sort());\n };\n });\n }\n\n async getAll(prefix: string): Promise<[string, string][]> {\n const db = await this.getDB();\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.storeName, 'readonly');\n const store = tx.objectStore(this.storeName);\n const keysReq = store.getAllKeys();\n const valsReq = store.getAll();\n tx.onerror = () => reject(tx.error);\n tx.oncomplete = () => {\n const keys = keysReq.result as string[];\n const vals = valsReq.result as string[];\n const result: [string, string][] = [];\n for (let i = 0; i < keys.length; i++) {\n if (keys[i].startsWith(prefix)) {\n result.push([keys[i], vals[i]]);\n }\n }\n resolve(result);\n };\n });\n }\n}\n","export type NodeDeps = {\n fs: typeof import('node:fs/promises');\n fsSync: typeof import('node:fs');\n os: typeof import('node:os');\n path: typeof import('node:path');\n};\n\nlet promise: Promise<NodeDeps> | undefined;\n\nexport function getNodeDeps(): Promise<NodeDeps> {\n if (!promise) {\n promise = (async () => {\n const [fs, fsSync, os, path] = await Promise.all([\n import('node:fs/promises').then(m => m.default ?? m),\n import('node:fs').then(m => m.default ?? m),\n import('node:os').then(m => m.default ?? m),\n import('node:path').then(m => m.default ?? m),\n ]);\n return { fs, fsSync, os, path };\n })();\n }\n return promise;\n}\n","import type { TorStorageSimple } from './locking.js';\nimport { getNodeDeps } from './node-deps.js';\n\nfunction isNodeError(err: unknown): err is NodeJS.ErrnoException {\n return err instanceof Error && 'code' in err;\n}\n\n/**\n * Encode a storage key into a filesystem-safe filename.\n * Alphanumeric characters pass through; everything else becomes _XX_ or _XXXX_.\n */\nfunction mangleKey(key: string): string {\n let result = '';\n for (let i = 0; i < key.length; i++) {\n const code = key.charCodeAt(i);\n if (\n (code >= 97 && code <= 122) || // a-z\n (code >= 65 && code <= 90) || // A-Z\n (code >= 48 && code <= 57) // 0-9\n ) {\n result += key[i];\n } else if (code <= 0xff) {\n result += '_' + code.toString(16).padStart(2, '0') + '_';\n } else {\n result += '_' + code.toString(16).padStart(4, '0') + '_';\n }\n }\n return result;\n}\n\n/**\n * Decode a mangled filename back to the original key.\n */\nfunction unmangleKey(filename: string): string {\n let result = '';\n let i = 0;\n while (i < filename.length) {\n if (filename[i] === '_') {\n // Try _XXXX_ (4-digit)\n if (i + 5 < filename.length && filename[i + 5] === '_') {\n const hex = filename.slice(i + 1, i + 5);\n if (/^[0-9a-f]{4}$/i.test(hex)) {\n result += String.fromCharCode(parseInt(hex, 16));\n i += 6;\n continue;\n }\n }\n // Try _XX_ (2-digit)\n if (i + 3 < filename.length && filename[i + 3] === '_') {\n const hex = filename.slice(i + 1, i + 3);\n if (/^[0-9a-f]{2}$/i.test(hex)) {\n result += String.fromCharCode(parseInt(hex, 16));\n i += 4;\n continue;\n }\n }\n result += '_';\n i++;\n } else {\n result += filename[i];\n i++;\n }\n }\n return result;\n}\n\nexport class FilesystemStorage implements TorStorageSimple {\n private dirPath: string | null;\n private name: string | null;\n private resolvedDirPath: string | null = null;\n private initialized = false;\n\n constructor(dirPath: string) {\n this.dirPath = dirPath;\n this.name = null;\n }\n\n static localShare(name: string): FilesystemStorage {\n const s = new FilesystemStorage('');\n s.dirPath = null;\n s.name = name;\n return s;\n }\n\n private async resolvedDir(): Promise<string> {\n if (!this.resolvedDirPath) {\n if (this.dirPath) {\n this.resolvedDirPath = this.dirPath;\n } else {\n const { os, path } = await getNodeDeps();\n this.resolvedDirPath = path.join(os.homedir(), '.local', 'share', this.name!);\n }\n }\n return this.resolvedDirPath!;\n }\n\n private async ensureDir(): Promise<void> {\n if (!this.initialized) {\n const { fs } = await getNodeDeps();\n await fs.mkdir(await this.resolvedDir(), { recursive: true });\n this.initialized = true;\n }\n }\n\n private async filePath(key: string): Promise<string> {\n const { path } = await getNodeDeps();\n return path.join(await this.resolvedDir(), mangleKey(key));\n }\n\n async get(key: string): Promise<string | null> {\n const { fs } = await getNodeDeps();\n await this.ensureDir();\n try {\n return await fs.readFile(await this.filePath(key), 'utf-8');\n } catch (err) {\n if (isNodeError(err) && err.code === 'ENOENT') return null;\n throw err;\n }\n }\n\n async set(key: string, value: string): Promise<void> {\n const { fs } = await getNodeDeps();\n await this.ensureDir();\n await fs.writeFile(await this.filePath(key), value, 'utf-8');\n }\n\n async delete(key: string): Promise<void> {\n const { fs } = await getNodeDeps();\n await this.ensureDir();\n try {\n await fs.unlink(await this.filePath(key));\n } catch (err) {\n if (isNodeError(err) && err.code === 'ENOENT') return;\n throw err;\n }\n }\n\n async keys(prefix: string): Promise<string[]> {\n const { fs } = await getNodeDeps();\n await this.ensureDir();\n try {\n const files = await fs.readdir(await this.resolvedDir());\n return files\n .map(unmangleKey)\n .filter(k => k.startsWith(prefix))\n .sort();\n } catch (err) {\n if (isNodeError(err) && err.code === 'ENOENT') return [];\n throw err;\n }\n }\n\n async getAll(prefix: string): Promise<[string, string][]> {\n const { fs } = await getNodeDeps();\n await this.ensureDir();\n try {\n const files = await fs.readdir(await this.resolvedDir());\n const keys = files.map(unmangleKey).filter(k => k.startsWith(prefix));\n const entries = await Promise.all(\n keys.map(async (key): Promise<[string, string] | null> => {\n const value = await this.get(key);\n return value !== null ? [key, value] : null;\n })\n );\n return entries.filter((e): e is [string, string] => e !== null);\n } catch (err) {\n if (isNodeError(err) && err.code === 'ENOENT') return [];\n throw err;\n }\n }\n}\n","import type { TorStorage } from '#wasm';\nimport { getNodeDeps } from './node-deps.js';\n\n/** Storage interface without locking — just the CRUD methods. */\nexport type TorStorageSimple = Omit<TorStorage, 'tryLock' | 'unlock'>;\n\nfunction isNodeError(err: unknown): err is NodeJS.ErrnoException {\n return err instanceof Error && 'code' in err;\n}\n\n/**\n * Wrap a simple storage with platform-detected locking.\n *\n * - Browser: Web Locks API (`navigator.locks`)\n * - Node.js: lock file at `~/.local/share/${name}/.lock`\n *\n * If the real lock can't be acquired (another tab/process holds it),\n * the wrapper degrades gracefully: reads fall through to the inner storage,\n * writes go to an in-memory overlay, and `tryLock()` still returns `true`.\n */\nexport function addLocking(inner: TorStorageSimple, name: string): TorStorage {\n let hasRealLock = false;\n let overlay: Map<string, string | null> | null = null;\n\n // Web Locks state\n let releaseLock: (() => void) | undefined;\n let lockRequestDone: Promise<unknown> | undefined;\n\n // Filesystem lock state\n let lockPath: string | null = null;\n let exitHandler: (() => void) | null = null;\n let heartbeatTimer: ReturnType<typeof setInterval> | null = null;\n\n const STALE_MS = 30_000;\n const HEARTBEAT_MS = 10_000;\n\n async function tryAcquireReal(): Promise<boolean> {\n // Browser\n if (typeof navigator !== 'undefined' && navigator.locks) {\n let resolveAcquired!: (v: boolean) => void;\n const acquired = new Promise<boolean>(r => { resolveAcquired = r; });\n\n lockRequestDone = navigator.locks.request(\n `tor-js:${name}`,\n { ifAvailable: true },\n (lock) => {\n if (lock) {\n resolveAcquired(true);\n return new Promise<void>(r => { releaseLock = r; });\n }\n resolveAcquired(false);\n },\n );\n\n return acquired;\n }\n\n // Node.js\n if (typeof process !== 'undefined' && process.versions?.node) {\n try {\n const { fs, fsSync, path, os } = await getNodeDeps();\n const dir = path.join(os.homedir(), '.local', 'share', name);\n await fs.mkdir(dir, { recursive: true });\n const lp = path.join(dir, '.lock');\n\n // Try exclusive create\n try {\n await fs.writeFile(lp, `${process.pid}`, { flag: 'wx' });\n } catch (err) {\n if (!isNodeError(err) || err.code !== 'EEXIST') throw err;\n // Check if the existing lock is stale (mtime older than STALE_MS)\n const stat = await fs.stat(lp);\n if (Date.now() - stat.mtimeMs < STALE_MS) return false;\n // Stale — take over\n await fs.writeFile(lp, `${process.pid}`);\n }\n\n lockPath = lp;\n\n // Heartbeat: touch the lock file periodically so others know we're alive\n heartbeatTimer = setInterval(async () => {\n try {\n const now = new Date();\n await fs.utimes(lp, now, now);\n } catch {}\n }, HEARTBEAT_MS);\n if (heartbeatTimer.unref) heartbeatTimer.unref();\n\n exitHandler = () => {\n try { fsSync.unlinkSync(lp); } catch {}\n };\n process.on('exit', exitHandler);\n\n return true;\n } catch (err) {\n return false;\n }\n }\n\n throw new Error(\"Failed to detect suitable locking mechanism\");\n }\n\n async function releaseReal(): Promise<void> {\n // Web Locks — resolve the held promise, then wait for the browser\n // to actually free the lock before returning.\n if (releaseLock) {\n releaseLock();\n releaseLock = undefined;\n await lockRequestDone;\n lockRequestDone = undefined;\n }\n\n // Filesystem\n if (heartbeatTimer) {\n clearInterval(heartbeatTimer);\n heartbeatTimer = null;\n }\n if (lockPath) {\n const { fs } = await getNodeDeps();\n try {\n await fs.unlink(lockPath);\n } catch (err) {\n if (!isNodeError(err) || err.code !== 'ENOENT') throw err;\n }\n lockPath = null;\n }\n if (exitHandler) {\n process.removeListener('exit', exitHandler);\n exitHandler = null;\n }\n }\n\n return {\n async get(key: string): Promise<string | null> {\n if (overlay?.has(key)) return overlay.get(key)!;\n return inner.get(key);\n },\n\n async set(key: string, value: string): Promise<void> {\n if (overlay) {\n overlay.set(key, value);\n return;\n }\n return inner.set(key, value);\n },\n\n async delete(key: string): Promise<void> {\n if (overlay) {\n overlay.set(key, null);\n return;\n }\n return inner.delete(key);\n },\n\n async keys(prefix: string): Promise<string[]> {\n const base = await inner.keys(prefix);\n if (!overlay) return base;\n const result = new Set(base);\n for (const [k, v] of overlay) {\n if (!k.startsWith(prefix)) continue;\n if (v !== null) result.add(k);\n else result.delete(k);\n }\n return [...result].sort();\n },\n\n async getAll(prefix: string): Promise<[string, string][]> {\n const base = await inner.getAll(prefix);\n if (!overlay) return base;\n const merged = new Map<string, string>(base);\n for (const [k, v] of overlay) {\n if (!k.startsWith(prefix)) continue;\n if (v !== null) merged.set(k, v);\n else merged.delete(k);\n }\n return [...merged.entries()];\n },\n\n async tryLock(): Promise<boolean> {\n if (hasRealLock) return false;\n\n const acquired = await tryAcquireReal();\n hasRealLock = acquired;\n overlay = acquired ? null : (overlay ?? new Map());\n\n return true;\n },\n\n async unlock(): Promise<void> {\n await releaseReal();\n hasRealLock = false;\n overlay = null;\n },\n };\n}","export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error';\n\ninterface LogConstructorParams {\n rawLog?: (level: LogLevel, ...args: unknown[]) => void;\n parentStartTime?: number;\n namePrefix?: string;\n}\n\nexport class Log {\n private rawLog: (level: LogLevel, ...args: unknown[]) => void;\n private parentStartTime: number;\n private namePrefix: string;\n\n constructor(params: LogConstructorParams = {}) {\n this.parentStartTime = params.parentStartTime ?? Date.now();\n this.namePrefix = params.namePrefix ?? '';\n this.rawLog = params.rawLog ?? this.defaultRawLog.bind(this);\n }\n\n child(name: string): Log {\n const newPrefix = this.namePrefix ? `${this.namePrefix}.${name}` : name;\n return new Log({\n rawLog: this.rawLog,\n parentStartTime: this.parentStartTime,\n namePrefix: newPrefix,\n });\n }\n\n trace(...args: unknown[]): void {\n this.log('trace', ...args);\n }\n\n debug(...args: unknown[]): void {\n this.log('debug', ...args);\n }\n\n info(...args: unknown[]): void {\n this.log('info', ...args);\n }\n\n warn(...args: unknown[]): void {\n this.log('warn', ...args);\n }\n\n error(...args: unknown[]): void {\n this.log('error', ...args);\n }\n\n /** @internal Create a callback for WASM setLogCallback */\n _makeWasmCallback(): (level: string, target: string, message: string) => void {\n const levels: ReadonlySet<string> = new Set(['trace', 'debug', 'info', 'warn', 'error']);\n return (level: string, target: string, message: string) => {\n if (!levels.has(level)) {\n this.log('error', `unexpected log level from WASM: ${JSON.stringify(level)}`);\n level = 'debug';\n }\n this.child(target).log(level as LogLevel, message);\n };\n }\n\n private log(level: LogLevel, ...args: unknown[]): void {\n const elapsed = Date.now() - this.parentStartTime;\n const timestamp = formatTimestamp(elapsed);\n if (this.namePrefix) {\n this.rawLog(level, `[${timestamp}]`, `[${this.namePrefix}]`, ...args);\n } else {\n this.rawLog(level, `[${timestamp}]`, ...args);\n }\n }\n\n private defaultRawLog(level: LogLevel, ...args: unknown[]): void {\n console[level](...args);\n }\n}\n\nfunction formatTimestamp(elapsedMs: number): string {\n const totalSeconds = Math.floor(elapsedMs / 1000);\n const milliseconds = elapsedMs % 1000;\n const ms = String(milliseconds).padStart(3, '0');\n\n const days = Math.floor(totalSeconds / 86400);\n const hours = Math.floor((totalSeconds % 86400) / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n\n if (days > 0) {\n return `${days}d ${p2(hours)}:${p2(minutes)}:${p2(seconds)}.${ms}`;\n }\n if (hours > 0) {\n return `${p2(hours)}:${p2(minutes)}:${p2(seconds)}.${ms}`;\n }\n if (minutes > 0) {\n return `${p2(minutes)}:${p2(seconds)}.${ms}`;\n }\n return `${p2(seconds)}.${ms}`;\n}\n\nfunction p2(n: number): string {\n return String(n).padStart(2, '0');\n}\n","/**\n * Socket provider for connecting to Tor relays via direct TCP, WebSocket,\n * or WebRTC.\n *\n * ArtiSocketProvider auto-detects available strategies based on environment:\n * - Node.js/Deno: tries direct TCP first, then WebSocket/WebRTC if a gateway URL is set\n * - Browsers: tries WebRTC first (if available), then WebSocket (requires gateway URL)\n *\n * Each `connect(target)` call returns an {@link ArtiSocket} — a uniform\n * bidirectional byte pipe regardless of transport.\n */\n\n// ---------------------------------------------------------------------------\n// Environment detection\n// ---------------------------------------------------------------------------\n\nconst HAS_DENO = typeof (globalThis as any).Deno !== 'undefined';\nconst HAS_NODE = typeof (globalThis as any).process?.versions?.node !== 'undefined';\nconst HAS_RTC = typeof (globalThis as any).RTCPeerConnection !== 'undefined';\nconst HAS_WS =\n typeof (globalThis as any).WebSocket !== 'undefined' || HAS_DENO || HAS_NODE;\n\nfunction defaultStrategies(hasUrl: boolean): string[] {\n const s: string[] = [];\n if (HAS_DENO || HAS_NODE) s.push('direct');\n if (hasUrl && HAS_RTC) s.push('webrtc');\n if (hasUrl && HAS_WS) s.push('websocket');\n return s;\n}\n\n// ---------------------------------------------------------------------------\n// ArtiSocket — uniform bidirectional byte pipe\n// ---------------------------------------------------------------------------\n\n/**\n * A bidirectional byte pipe to a Tor relay.\n *\n * Assign `onmessage` and `onclose` after creation.\n * Call `send(data)` with Uint8Array and `close()` when done.\n */\nexport class ArtiSocket {\n #send: (data: Uint8Array) => void;\n #close: () => void;\n #closed = false;\n #onclose: (() => void) | null = null;\n\n /** Set by transport on error, before onclose fires. */\n _error: string | null = null;\n\n /** Receive callback — transport fires this with each incoming chunk. */\n onmessage: ((data: Uint8Array) => void) | null = null;\n\n constructor(\n send: (data: Uint8Array) => void,\n close: () => void,\n ) {\n this.#send = send;\n this.#close = close;\n }\n\n /** Setter that fires immediately if close already happened. */\n set onclose(fn: (() => void) | null) {\n this.#onclose = fn;\n if (this.#closed && fn) queueMicrotask(() => fn());\n }\n get onclose(): (() => void) | null { return this.#onclose; }\n\n /** @internal — called by transport wrappers when the underlying connection closes. */\n _notifyClose(): void {\n if (this.#closed) return;\n this.#closed = true;\n this.#onclose?.();\n }\n\n send(data: Uint8Array): void {\n this.#send(data);\n }\n\n close(): void {\n this.#close();\n }\n\n // -- Transport factories --------------------------------------------------\n\n /** Wrap a browser WebSocket (already open). */\n static fromWebSocket(ws: WebSocket): ArtiSocket {\n const sock = new ArtiSocket(\n (data) => ws.send(data),\n () => ws.close(),\n );\n ws.onmessage = (ev) => sock.onmessage?.(new Uint8Array(ev.data));\n ws.onclose = () => sock._notifyClose();\n return sock;\n }\n\n /** Wrap a WebRTC data channel (already open). */\n static fromDataChannel(dc: RTCDataChannel): ArtiSocket {\n const sock = new ArtiSocket(\n (data) => dc.send(data),\n () => dc.close(),\n );\n dc.onmessage = (ev) => sock.onmessage?.(new Uint8Array(ev.data));\n dc.onclose = () => sock._notifyClose();\n return sock;\n }\n\n /** Wrap a Node.js net.Socket (already connected). */\n static fromNodeSocket(socket: any): ArtiSocket {\n const sock = new ArtiSocket(\n (data) => socket.write(data),\n () => socket.destroy(),\n );\n socket.on('data', (buf: Buffer) => sock.onmessage?.(new Uint8Array(buf)));\n socket.on('close', () => sock._notifyClose());\n socket.on('error', () => {});\n return sock;\n }\n\n /** Wrap a Deno TCP connection. */\n static fromDenoConn(conn: any): ArtiSocket {\n const sock = new ArtiSocket(\n (data) => {\n const writer = conn.writable.getWriter();\n writer.write(data).then(() => writer.releaseLock());\n },\n () => conn.close(),\n );\n (async () => {\n try {\n for await (const chunk of conn.readable) {\n sock.onmessage?.(new Uint8Array(chunk));\n }\n } catch {}\n sock._notifyClose();\n })();\n return sock;\n }\n}\n\n// ---------------------------------------------------------------------------\n// ArtiSocketProvider — multi-strategy connection manager\n// ---------------------------------------------------------------------------\n\n/**\n * Options for creating an ArtiSocketProvider.\n */\nexport interface ArtiSocketProviderOptions {\n /**\n * Gateway URL (e.g., `\"https://tor-js-gateway.example.com\"`).\n * Required in browsers for WebRTC/WebSocket relay connections.\n * Optional in Node.js/Deno (enables fast bootstrap when provided).\n */\n gateway?: string;\n\n /**\n * Ordered list of strategies to try: `\"direct\"`, `\"webrtc\"`, `\"websocket\"`.\n * Defaults based on environment and whether a gateway URL is provided.\n */\n strategies?: string[];\n}\n\ninterface TrackedEntry {\n dc: RTCDataChannel;\n sock: ArtiSocket | null;\n reject: ((err: Error) => void) | null;\n}\n\n/**\n * Opens sockets to Tor relays via configurable strategies (direct TCP,\n * WebRTC data channels, WebSocket) with automatic fallback.\n *\n * The gateway URL is optional — without it, only the `direct` strategy is\n * available (Node.js/Deno native TCP). With a gateway URL, WebRTC and\n * WebSocket strategies become available for browser environments.\n */\nexport class ArtiSocketProvider {\n #url: string | null;\n #strategies: string[];\n\n // WebRTC state (lazily created, reused across connect() calls)\n #rtcPc: RTCPeerConnection | null = null;\n #rtcAlive = false;\n #signalChannel: RTCDataChannel | null = null;\n // Tracked data channels: before open has reject, after open has sock.\n #tracked: TrackedEntry[] = [];\n\n constructor(options: ArtiSocketProviderOptions = {}) {\n this.#url = options.gateway ? options.gateway.replace(/\\/+$/, '') : null;\n this.#strategies = options.strategies ?? defaultStrategies(!!this.#url);\n }\n\n /**\n * Open a relay socket to the given target (e.g. \"198.51.100.1:9001\").\n * Tries each configured strategy in order until one succeeds.\n */\n async connect(target: string): Promise<ArtiSocket> {\n const errors: string[] = [];\n\n for (const strategy of this.#strategies) {\n try {\n switch (strategy) {\n case 'direct':\n return await this.#connectDirect(target);\n case 'webrtc':\n return await this.#connectWebRTC(target);\n case 'websocket':\n return await this.#connectWebSocket(target);\n default:\n throw new Error(`unknown strategy: ${strategy}`);\n }\n } catch (e: any) {\n errors.push(`${strategy}: ${e.message}`);\n }\n }\n\n throw new Error(`all strategies failed for ${target}: ${errors.join('; ')}`);\n }\n\n /** Close WebRTC peer connection and release resources. */\n close(): void {\n if (this.#rtcPc) {\n this.#rtcPc.close();\n this.#rtcPc = null;\n this.#rtcAlive = false;\n this.#signalChannel = null;\n }\n }\n\n // -- Direct TCP strategy (Node.js / Deno) ---------------------------------\n\n async #connectDirect(target: string): Promise<ArtiSocket> {\n const [host, portStr] = target.split(':');\n const port = parseInt(portStr, 10);\n\n if (HAS_DENO) {\n const conn = await (globalThis as any).Deno.connect({ hostname: host, port });\n return ArtiSocket.fromDenoConn(conn);\n }\n\n if (HAS_NODE) {\n const net = await import('node:net');\n const socket = net.createConnection({ host, port });\n await new Promise<void>((resolve, reject) => {\n socket.once('connect', resolve);\n socket.once('error', reject);\n });\n return ArtiSocket.fromNodeSocket(socket);\n }\n\n throw new Error('direct TCP not available in this environment');\n }\n\n // -- WebSocket strategy ---------------------------------------------------\n\n async #connectWebSocket(target: string): Promise<ArtiSocket> {\n if (!this.#url) throw new Error('websocket strategy requires a gateway URL');\n const wsUrl = `${this.#url.replace(/^http/, 'ws')}/socket/${target}`;\n const ws = new WebSocket(wsUrl);\n ws.binaryType = 'arraybuffer';\n\n await new Promise<void>((resolve, reject) => {\n ws.onopen = () => resolve();\n ws.onerror = () => reject(new Error('websocket connection failed'));\n });\n\n return ArtiSocket.fromWebSocket(ws);\n }\n\n // -- WebRTC strategy ------------------------------------------------------\n\n async #connectWebRTC(target: string): Promise<ArtiSocket> {\n if (!this.#url) throw new Error('webrtc strategy requires a gateway URL');\n if (typeof RTCPeerConnection === 'undefined') {\n throw new Error('RTCPeerConnection not available');\n }\n\n // Create or reuse peer connection\n if (!this.#rtcAlive) {\n if (this.#rtcPc) this.#rtcPc.close();\n await this.#setupRtcPeerConnection();\n }\n\n const dc = this.#rtcPc!.createDataChannel(target);\n dc.binaryType = 'arraybuffer';\n\n const entry = { dc, sock: null as ArtiSocket | null, reject: null as ((err: Error) => void) | null };\n this.#tracked.push(entry);\n\n // Race: channel opens vs server rejects via _signal\n await new Promise<void>((resolve, reject) => {\n entry.reject = reject;\n dc.onopen = () => resolve();\n dc.onerror = (e: any) => {\n this.#removeTracked(entry);\n reject(new Error(`data channel error: ${e.error?.message || e}`));\n };\n });\n\n // Channel is open — dc.id now available\n entry.reject = null;\n const sock = ArtiSocket.fromDataChannel(dc);\n entry.sock = sock;\n dc.onclose = () => {\n this.#removeTracked(entry);\n sock._notifyClose();\n };\n return sock;\n }\n\n async #setupRtcPeerConnection(): Promise<void> {\n const pc = new RTCPeerConnection();\n\n // Signal channel for control messages (hello, ping/pong, rejections)\n const signal = pc.createDataChannel('_signal');\n signal.onmessage = (ev) => this.#handleSignalMessage(ev.data);\n\n const offer = await pc.createOffer();\n await pc.setLocalDescription(offer);\n\n // Wait for ICE gathering to complete\n await new Promise<void>((resolve) => {\n if (pc.iceGatheringState === 'complete') return resolve();\n pc.addEventListener('icegatheringstatechange', () => {\n if (pc.iceGatheringState === 'complete') resolve();\n });\n });\n\n const res = await fetch(`${this.#url}/rtc/connect`, {\n method: 'POST',\n body: JSON.stringify(pc.localDescription),\n });\n\n if (!res.ok) {\n pc.close();\n throw new Error(`rtc signaling failed: ${res.status} ${await res.text()}`);\n }\n\n const answer = await res.json();\n await pc.setRemoteDescription(answer);\n\n // Wait for connection\n await new Promise<void>((resolve, reject) => {\n if (pc.connectionState === 'connected') return resolve();\n pc.addEventListener('connectionstatechange', () => {\n if (pc.connectionState === 'connected') resolve();\n if (pc.connectionState === 'failed') reject(new Error('WebRTC connection failed'));\n });\n });\n\n this.#rtcPc = pc;\n this.#rtcAlive = true;\n this.#signalChannel = signal;\n\n pc.addEventListener('connectionstatechange', () => {\n const s = pc.connectionState;\n if (s === 'disconnected' || s === 'closed' || s === 'failed') {\n this.#rtcAlive = false;\n this.#signalChannel = null;\n }\n });\n }\n\n #findTracked(sctpId: number | null, label: string) {\n return this.#tracked.find(e => e.dc.id != null && e.dc.id === sctpId)\n ?? this.#tracked.find(e => e.dc.label === label);\n }\n\n #removeTracked(entry: TrackedEntry): void {\n const i = this.#tracked.indexOf(entry);\n if (i !== -1) this.#tracked.splice(i, 1);\n }\n\n #handleSignalMessage(data: string): void {\n try {\n const msg = JSON.parse(data);\n switch (msg.type) {\n case 'rejected': {\n const entry = this.#findTracked(msg.sctp_id, msg.channel);\n if (entry) {\n this.#removeTracked(entry);\n if (entry.reject) {\n entry.reject(new Error(`rejected: ${msg.reason}`));\n } else if (entry.sock) {\n entry.sock._error = msg.reason;\n entry.sock.close();\n entry.sock._notifyClose();\n }\n }\n break;\n }\n case 'closed': {\n const entry = this.#findTracked(msg.sctp_id, msg.channel);\n if (entry) {\n this.#removeTracked(entry);\n if (entry.sock) {\n entry.sock.close();\n entry.sock._notifyClose();\n }\n }\n break;\n }\n }\n } catch { /* ignore malformed signal messages */ }\n }\n}\n","import {\n ensureWasmInitialized,\n WasmTorClient,\n WasmTorClientOptions,\n addLogListener,\n setListenerLevel,\n} from './wasm.js';\nimport type { TorClientOptions, FetchInit, LogLevel } from './types.js';\nimport { Log } from './Log.js';\nimport { createAutoStorage } from './storage/index.js';\nimport { ArtiSocketProvider } from './socketProvider.js';\n\nexport class TorClient {\n private log: Log;\n private clientPromise: Promise<WasmTorClient>;\n private removeLogListener: (() => void) | null = null;\n private wasmCallback: ((level: string, target: string, message: string) => void) | null = null;\n private closed = false;\n private readyPromise: Promise<void> | null = null;\n private socketProvider: ArtiSocketProvider | null = null;\n\n constructor(options: TorClientOptions = {}) {\n this.log = (options.log ?? new Log({ rawLog: () => {} }));\n this.clientPromise = this.bootstrap(options);\n }\n\n private async bootstrap(options: TorClientOptions): Promise<WasmTorClient> {\n await ensureWasmInitialized();\n\n // Register log listener with per-client level filtering.\n // The WASM subscriber auto-widens to the broadest level across all listeners.\n this.wasmCallback = this.log._makeWasmCallback();\n this.removeLogListener = addLogListener(this.wasmCallback, options.logLevel);\n\n // ArtiSocketProvider handles relay connections. In browsers it needs a gateway\n // URL for WebRTC/WebSocket proxying; in Node.js/Deno it connects via direct TCP.\n this.socketProvider = options.socketProvider ?? new ArtiSocketProvider({ gateway: options.gateway });\n const sp = this.socketProvider;\n\n let wasmOptions = new WasmTorClientOptions(\n (addr: string) => sp.connect(addr),\n );\n\n const storage = options.storage ?? createAutoStorage();\n wasmOptions = wasmOptions.withStorage(storage);\n\n // Auto-attempt fast bootstrap from gateway — only when a URL is available\n if (options.gateway) {\n const gatewayBase = options.gateway.replace(/\\/+$/, '');\n wasmOptions = wasmOptions.withFastBootstrap(async (): Promise<Uint8Array> => {\n this.log.info('Fast bootstrap: fetching bootstrap.zip.br...');\n const res = await fetch(`${gatewayBase}/bootstrap.zip.br`);\n if (!res.ok) {\n throw new Error(`Fast bootstrap fetch failed: ${res.status} ${res.statusText}`);\n }\n const bytes = new Uint8Array(await res.arrayBuffer());\n this.log.info(`Fast bootstrap: received ${bytes.byteLength} bytes`);\n return bytes;\n });\n }\n\n // Create client (WASM constructor returns a Promise)\n this.log.info('Bootstrapping...');\n const client = await WasmTorClient.create(wasmOptions);\n this.log.info('Bootstrap complete');\n return client;\n }\n\n /**\n * Make an HTTP fetch request through Tor.\n * Returns a standard browser Response object.\n */\n async fetch(url: string, init?: FetchInit): Promise<Response> {\n if (this.closed) throw new Error('TorClient is closed');\n const client = await this.clientPromise;\n await this.ready();\n this.log.info(`Fetching ${url}`);\n return client.fetch(url, init);\n }\n\n /**\n * Wait for the Tor client to be ready for traffic\n * (guard connected, usable consensus, and sufficient microdescs).\n *\n * Parallel callers share the same underlying promise — a single WS\n * connection failure rejects all waiters. The cached promise is cleared\n * on settle so the next call creates a fresh attempt.\n */\n async ready(): Promise<void> {\n if (this.closed) throw new Error('TorClient is closed');\n if (this.readyPromise) return this.readyPromise;\n\n const p = (async () => {\n const startTime = Date.now();\n this.log.info('Waiting for client');\n const client = await this.clientPromise;\n this.log.info('Waiting for client to be ready');\n await client.ready();\n this.log.info(`Client ready in ${Date.now() - startTime}ms`);\n })();\n\n this.readyPromise = p;\n p.finally(() => { this.readyPromise = null; });\n return p;\n }\n\n /**\n * Change the log level for this client's listener.\n * Also re-syncs the global WASM filter to the broadest level across all clients.\n */\n setLogLevel(level: LogLevel): void {\n if (this.wasmCallback) {\n setListenerLevel(this.wasmCallback, level);\n }\n }\n\n /**\n * Close the TorClient and release resources.\n */\n close(): void {\n if (this.closed) return;\n this.closed = true;\n this.removeLogListener?.();\n this.removeLogListener = null;\n this.wasmCallback = null;\n this.socketProvider?.close();\n this.socketProvider = null;\n this.clientPromise.then(client => client.close()).catch(() => {});\n }\n\n [Symbol.dispose](): void {\n this.close();\n }\n}\n","// Entry point: tor-js (default), tor-js/wasm-cdn\n// Downloads WASM from CDN with SHA256 hash verification.\n// Caches the downloaded WASM using createAutoStorage for faster subsequent loads.\n// The GitHub CDN source stores AES-256-GCM encrypted files keyed by the WASM hash,\n// with filenames derived from hash(hash) so the key isn't revealed by the URL.\n\nimport { setWasmSourceProvider } from '../../wasm.js';\nimport { createAutoStorage } from '../../storage/index.js';\n\nexport { TorClient } from '../../TorClient.js';\nexport * from '../../commonExports.js';\n\nconst CACHE_KEY = 'wasm';\n\nfunction hexToBytes(hex: string): Uint8Array {\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16);\n }\n return bytes;\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(bytes).toString('base64');\n }\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\nfunction base64ToBytes(base64: string): Uint8Array {\n if (typeof Buffer !== 'undefined') {\n return new Uint8Array(Buffer.from(base64, 'base64'));\n }\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\nasync function sha256hex(bytes: ArrayBuffer | Uint8Array): Promise<string> {\n if (typeof crypto !== 'undefined' && crypto.subtle) {\n const buf = bytes instanceof Uint8Array ? bytes.buffer as ArrayBuffer : bytes;\n const hashBuf = await crypto.subtle.digest('SHA-256', buf);\n return [...new Uint8Array(hashBuf)].map(b => b.toString(16).padStart(2, '0')).join('');\n }\n // Node.js fallback\n const { createHash } = await import('node:crypto');\n return createHash('sha256').update(new Uint8Array(bytes)).digest('hex');\n}\n\nasync function decryptAesGcm(encrypted: ArrayBuffer, keyBytes: Uint8Array): Promise<ArrayBuffer> {\n const iv = keyBytes.slice(0, 12);\n\n if (typeof crypto !== 'undefined' && crypto.subtle) {\n const key = await crypto.subtle.importKey('raw', keyBytes.buffer as ArrayBuffer, 'AES-GCM', false, ['decrypt']);\n return crypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, encrypted);\n }\n\n // Node.js fallback — crypto.subtle output is ciphertext || 16-byte auth tag\n const { createDecipheriv } = await import('node:crypto');\n const data = new Uint8Array(encrypted);\n const authTag = data.slice(-16);\n const ciphertext = data.slice(0, -16);\n const decipher = createDecipheriv('aes-256-gcm', keyBytes, iv);\n decipher.setAuthTag(authTag);\n const decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]);\n return decrypted.buffer.slice(decrypted.byteOffset, decrypted.byteOffset + decrypted.byteLength);\n}\n\nsetWasmSourceProvider(async () => {\n let cache: ReturnType<typeof createAutoStorage> | undefined;\n try {\n cache = createAutoStorage('tor-js-wasm');\n } catch {\n // No persistent storage available — proceed without caching\n }\n\n // Try loading from cache\n if (cache) {\n try {\n const cached = await cache.get(CACHE_KEY);\n if (cached) {\n const bytes = base64ToBytes(cached);\n const hash = await sha256hex(bytes);\n if (hash === __WASM_SHA256__) {\n return bytes;\n }\n // Hash mismatch — stale cache, delete it\n await cache.delete(CACHE_KEY);\n }\n } catch {\n // Cache read failed — proceed to download\n }\n }\n\n // Download from CDN\n const hashBytes = hexToBytes(__WASM_SHA256__);\n const hashHash = await sha256hex(hashBytes);\n const hashHashPrefix = hashHash.slice(0, 2);\n\n const githubBase = `https://raw.githubusercontent.com/voltrevo/arti/hash-artifacts/`;\n\n type Source = { urls: string[], encrypted: boolean };\n\n const sources: Source[] = [\n { urls: [`https://cdn.jsdelivr.net/npm/tor-js@${__PACKAGE_VERSION__}/dist/tor_js_bg.wasm`], encrypted: false },\n { urls: [`https://unpkg.com/tor-js@${__PACKAGE_VERSION__}/dist/tor_js_bg.wasm`], encrypted: false },\n { urls: [`${githubBase}${hashHashPrefix}/${hashHash}`, `${githubBase}tmp/${hashHash}`], encrypted: true },\n ];\n\n // Shuffle sources for load balancing\n for (let i = sources.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [sources[i], sources[j]] = [sources[j], sources[i]];\n }\n\n const errors: string[] = [];\n for (const source of sources) {\n for (const url of source.urls) {\n try {\n const resp = await fetch(url);\n if (!resp.ok) throw new Error(`HTTP ${resp.status}`);\n let bytes = await resp.arrayBuffer();\n\n if (source.encrypted) {\n bytes = await decryptAesGcm(bytes, hashBytes);\n }\n\n const hash = await sha256hex(bytes);\n if (hash !== __WASM_SHA256__) {\n throw new Error(`SHA256 mismatch: expected ${__WASM_SHA256__}, got ${hash}`);\n }\n\n const result = new Uint8Array(bytes);\n\n // Cache for next time (fire and forget)\n if (cache) {\n cache.set(CACHE_KEY, bytesToBase64(result)).catch(() => {});\n }\n\n return result;\n } catch (err) {\n errors.push(`${url}: ${err instanceof Error ? err.message : err}`);\n }\n }\n }\n\n throw new Error(`Failed to load WASM from any CDN:\\n ${errors.join('\\n ')}`);\n});\n"],"mappings":"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","names":["init","arg0","arg1","ptr","module","module","isNodeError","TorClient","init"]}
@@ -0,0 +1,4 @@
1
+ import './index.js';
2
+ export { tor } from '../../singleton.js';
3
+ export * from '../../commonExports.js';
4
+ //# sourceMappingURL=singleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"singleton.d.ts","sourceRoot":"","sources":["../../../src/entryPoints/wasm-cdn/singleton.ts"],"names":[],"mappings":"AAGA,OAAO,YAAY,CAAC;AAEpB,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,cAAc,wBAAwB,CAAC"}