@lifi/perps-sdk-provider-lighter 12.0.0 → 12.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -42,7 +42,15 @@ lighterProvider({ storage: myStorageAdapter })
42
42
 
43
43
  ## WASM signer loading
44
44
 
45
- The Go signer binary ships as a separate asset and the package resolves it itself: the ESM build points a static `new URL('../../wasm/lighter-signer.wasm', import.meta.url)` at it, which Vite and Next.js rewrite into an emitted asset URL, while Node reads the installed binary from disk. Go's `wasm_exec.js` is packaged as generated text and evaluated as-is. Applications need no `?url`/`?raw` imports, no `public/` copy step, and no bundler configuration.
45
+ The Go signer binary ships as a separate asset and the package resolves it itself. The ESM build points a static `new URL('../../wasm/lighter-signer.wasm', import.meta.url)` at it, which webpack, Turbopack and Vite production builds rewrite into an emitted asset URL, while Node reads the installed binary from disk. The loader checks the WASM preamble of whatever the URL serves; if a bundler relocated the module — Vite's dependency optimizer rewrites the package into `.vite/deps`, leaving the static URL pointing at the cache directory — it re-resolves through that bundler's own asset pipeline. Go's `wasm_exec.js` is packaged as generated text and evaluated as-is.
46
+
47
+ Applications need no `optimizeDeps.exclude`, no `?url`/`?raw` imports, no `public/` copy step, no caller-supplied URL and no bundler configuration. `loadLighterWasm()` is exported for hosts that want to warm the signer up (and its 12.9 MB download) before the user's first trade:
48
+
49
+ ```ts
50
+ import { loadLighterWasm } from '@lifi/perps-sdk-provider-lighter'
51
+
52
+ await loadLighterWasm()
53
+ ```
46
54
 
47
55
  ## Documentation
48
56
 
@@ -5,6 +5,8 @@ export { DEFAULT_API_KEY_INDEX, DEFAULT_LIGHTER_EXPLORER_TX_BASE_URL, DEFAULT_LI
5
5
  export { lighterDepositFlow } from './depositFlow.js';
6
6
  export type { LighterPerpsProvider, LighterProviderOptions, } from './LighterProvider.js';
7
7
  export { Lighter, lighterProvider, lighterRhProvider, } from './LighterProvider.js';
8
+ export type { LighterWasmExports } from './signers/wasmLoader.js';
9
+ export { loadLighterWasm } from './signers/wasmLoader.js';
8
10
  export * from './types/index.js';
9
11
  export * from './utils/index.js';
10
12
  export type { LighterAuthTokenResolver } from './websocket/LighterWsProvider.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,YAAY,EACV,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,qBAAqB,EACrB,oCAAoC,EACpC,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,+BAA+B,EAC/B,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,OAAO,EACP,eAAe,EACf,iBAAiB,GAClB,MAAM,sBAAsB,CAAA;AAE7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,YAAY,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAChF,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,iBAAiB,GAClB,MAAM,kCAAkC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,YAAY,EACV,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,qBAAqB,EACrB,oCAAoC,EACpC,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,+BAA+B,EAC/B,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,OAAO,EACP,eAAe,EACf,iBAAiB,GAClB,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,YAAY,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAChF,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,iBAAiB,GAClB,MAAM,kCAAkC,CAAA"}
package/dist/cjs/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.lighterWsProvider = exports.LighterWsProvider = exports.lighterRhProvider = exports.lighterProvider = exports.Lighter = exports.lighterDepositFlow = exports.LIGHTER_SPOT_CATEGORY_ID = exports.LIGHTER_RH_WS_URL = exports.LIGHTER_RH_SIGNER_CHAIN_ID = exports.LIGHTER_RH_REST_URL = exports.LIGHTER_RH_PROVIDER_KEY = exports.LIGHTER_RH_DEPLOYMENT = exports.LIGHTER_PROVIDER_KEY = exports.LIGHTER_MAINNET_SIGNER_CHAIN_ID = exports.LIGHTER_MAINNET_DEPLOYMENT = exports.LIGHTER_COLLATERAL_ASSETS = exports.DEFAULT_LIGHTER_WS_URL = exports.DEFAULT_LIGHTER_REST_URL = exports.DEFAULT_LIGHTER_EXPLORER_TX_BASE_URL = exports.DEFAULT_API_KEY_INDEX = exports.getAccountSummary = exports.projectLighterConfigSettings = void 0;
17
+ exports.lighterWsProvider = exports.LighterWsProvider = exports.loadLighterWasm = exports.lighterRhProvider = exports.lighterProvider = exports.Lighter = exports.lighterDepositFlow = exports.LIGHTER_SPOT_CATEGORY_ID = exports.LIGHTER_RH_WS_URL = exports.LIGHTER_RH_SIGNER_CHAIN_ID = exports.LIGHTER_RH_REST_URL = exports.LIGHTER_RH_PROVIDER_KEY = exports.LIGHTER_RH_DEPLOYMENT = exports.LIGHTER_PROVIDER_KEY = exports.LIGHTER_MAINNET_SIGNER_CHAIN_ID = exports.LIGHTER_MAINNET_DEPLOYMENT = exports.LIGHTER_COLLATERAL_ASSETS = exports.DEFAULT_LIGHTER_WS_URL = exports.DEFAULT_LIGHTER_REST_URL = exports.DEFAULT_LIGHTER_EXPLORER_TX_BASE_URL = exports.DEFAULT_API_KEY_INDEX = exports.getAccountSummary = exports.projectLighterConfigSettings = void 0;
18
18
  var accountConfig_js_1 = require("./accountConfig.js");
19
19
  Object.defineProperty(exports, "projectLighterConfigSettings", { enumerable: true, get: function () { return accountConfig_js_1.projectLighterConfigSettings; } });
20
20
  var accountSummary_js_1 = require("./accountSummary.js");
@@ -40,6 +40,8 @@ var LighterProvider_js_1 = require("./LighterProvider.js");
40
40
  Object.defineProperty(exports, "Lighter", { enumerable: true, get: function () { return LighterProvider_js_1.Lighter; } });
41
41
  Object.defineProperty(exports, "lighterProvider", { enumerable: true, get: function () { return LighterProvider_js_1.lighterProvider; } });
42
42
  Object.defineProperty(exports, "lighterRhProvider", { enumerable: true, get: function () { return LighterProvider_js_1.lighterRhProvider; } });
43
+ var wasmLoader_js_1 = require("./signers/wasmLoader.js");
44
+ Object.defineProperty(exports, "loadLighterWasm", { enumerable: true, get: function () { return wasmLoader_js_1.loadLighterWasm; } });
43
45
  __exportStar(require("./types/index.js"), exports);
44
46
  __exportStar(require("./utils/index.js"), exports);
45
47
  var LighterWsProvider_js_1 = require("./websocket/LighterWsProvider.js");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAeA,uDAAiE;AAAxD,gIAAA,4BAA4B,OAAA;AACrC,yDAAuD;AAA9C,sHAAA,iBAAiB,OAAA;AAK1B,+CAeuB;AAdrB,qHAAA,qBAAqB,OAAA;AACrB,oIAAA,oCAAoC,OAAA;AACpC,wHAAA,wBAAwB,OAAA;AACxB,sHAAA,sBAAsB,OAAA;AACtB,yHAAA,yBAAyB,OAAA;AACzB,0HAAA,0BAA0B,OAAA;AAC1B,+HAAA,+BAA+B,OAAA;AAC/B,oHAAA,oBAAoB,OAAA;AACpB,qHAAA,qBAAqB,OAAA;AACrB,uHAAA,uBAAuB,OAAA;AACvB,mHAAA,mBAAmB,OAAA;AACnB,0HAAA,0BAA0B,OAAA;AAC1B,iHAAA,iBAAiB,OAAA;AACjB,wHAAA,wBAAwB,OAAA;AAE1B,mDAAqD;AAA5C,oHAAA,kBAAkB,OAAA;AAK3B,2DAI6B;AAH3B,6GAAA,OAAO,OAAA;AACP,qHAAA,eAAe,OAAA;AACf,uHAAA,iBAAiB,OAAA;AAGnB,mDAAgC;AAChC,mDAAgC;AAEhC,yEAIyC;AAHvC,yHAAA,iBAAiB,OAAA;AAEjB,yHAAA,iBAAiB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAeA,uDAAiE;AAAxD,gIAAA,4BAA4B,OAAA;AACrC,yDAAuD;AAA9C,sHAAA,iBAAiB,OAAA;AAK1B,+CAeuB;AAdrB,qHAAA,qBAAqB,OAAA;AACrB,oIAAA,oCAAoC,OAAA;AACpC,wHAAA,wBAAwB,OAAA;AACxB,sHAAA,sBAAsB,OAAA;AACtB,yHAAA,yBAAyB,OAAA;AACzB,0HAAA,0BAA0B,OAAA;AAC1B,+HAAA,+BAA+B,OAAA;AAC/B,oHAAA,oBAAoB,OAAA;AACpB,qHAAA,qBAAqB,OAAA;AACrB,uHAAA,uBAAuB,OAAA;AACvB,mHAAA,mBAAmB,OAAA;AACnB,0HAAA,0BAA0B,OAAA;AAC1B,iHAAA,iBAAiB,OAAA;AACjB,wHAAA,wBAAwB,OAAA;AAE1B,mDAAqD;AAA5C,oHAAA,kBAAkB,OAAA;AAK3B,2DAI6B;AAH3B,6GAAA,OAAO,OAAA;AACP,qHAAA,eAAe,OAAA;AACf,uHAAA,iBAAiB,OAAA;AAGnB,yDAAyD;AAAhD,gHAAA,eAAe,OAAA;AAExB,mDAAgC;AAChC,mDAAgC;AAEhC,yEAIyC;AAHvC,yHAAA,iBAAiB,OAAA;AAEjB,yHAAA,iBAAiB,OAAA"}
@@ -9,3 +9,7 @@ exports.lighterWasmBinaryUrl = new URL(
9
9
  '../../wasm/lighter-signer.wasm',
10
10
  pathToFileURL(__filename)
11
11
  )
12
+
13
+ // Nothing relocates the installed binary under Node, so there is no emitted
14
+ // asset to recover; the loader reads the file URL above directly.
15
+ exports.resolveEmittedBinaryUrl = async () => undefined
@@ -1 +1 @@
1
- {"version":3,"file":"wasmLoader.d.ts","sourceRoot":"","sources":["../../../src/signers/wasmLoader.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM;QACpB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;IACD,YAAY,EAAE,CACZ,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACvB,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAO9E,eAAe,EAAE,CACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAS3C,gBAAgB,EAAE,CAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB,UAAU,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAiB5C,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAEnD,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAKnD,mBAAmB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAOvD,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAEhD,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAKhD,kBAAkB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAOtD,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAKnD,gBAAgB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IASpD,qBAAqB,EAAE,CACrB,GAAG,IAAI,EAAE,OAAO,EAAE,KACf,UAAU,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAM5C,uBAAuB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAM3D,4BAA4B,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;CACjE;AAGD,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAgED,wBAAsB,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAKnE;AAwDD,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
1
+ {"version":3,"file":"wasmLoader.d.ts","sourceRoot":"","sources":["../../../src/signers/wasmLoader.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM;QACpB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;IACD,YAAY,EAAE,CACZ,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACvB,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAO9E,eAAe,EAAE,CACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAS3C,gBAAgB,EAAE,CAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB,UAAU,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAiB5C,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAEnD,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAKnD,mBAAmB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAOvD,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAEhD,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAKhD,kBAAkB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAOtD,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAKnD,gBAAgB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IASpD,qBAAqB,EAAE,CACrB,GAAG,IAAI,EAAE,OAAO,EAAE,KACf,UAAU,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAM5C,uBAAuB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAM3D,4BAA4B,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;CACjE;AAGD,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAkID,wBAAsB,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAYnE;AAwDD,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
@@ -60,20 +60,65 @@ async function readNodeFile(url) {
60
60
  const { readFile } = await Promise.resolve().then(() => __importStar(require('node:fs/promises')));
61
61
  return readFile(url);
62
62
  }
63
+ const WASM_MAGIC = [0x00, 0x61, 0x73, 0x6d];
64
+ const isWasmModule = (bytes) => {
65
+ const preamble = new Uint8Array(bytes, 0, Math.min(4, bytes.byteLength));
66
+ return WASM_MAGIC.every((byte, index) => preamble[index] === byte);
67
+ };
68
+ async function fetchWasmBinary(url) {
69
+ const response = await fetch(url);
70
+ if (!response.ok) {
71
+ throw new Error(`Failed to fetch ${url.href}: ${response.status} ${response.statusText}`);
72
+ }
73
+ const bytes = await response.arrayBuffer();
74
+ const preamble = Array.from(new Uint8Array(bytes, 0, Math.min(4, bytes.byteLength)), (byte) => byte.toString(16).padStart(2, '0')).join(' ');
75
+ return {
76
+ bytes,
77
+ served: `served ${response.headers.get('content-type') ?? 'no content type'} starting with ${preamble || '(empty response)'}`,
78
+ };
79
+ }
63
80
  async function readWasmBinary(url) {
64
81
  if (url.protocol === 'file:') {
65
82
  const bytes = await readNodeFile(url);
66
- return bytes.slice().buffer;
83
+ const buffer = bytes.slice().buffer;
84
+ if (!isWasmModule(buffer)) {
85
+ throw new Error(`${url.href} is not a WebAssembly module.`);
86
+ }
87
+ return buffer;
67
88
  }
68
- const response = await fetch(url);
69
- if (!response.ok) {
70
- throw new Error(`Failed to fetch ${url.href}: ${response.status} ${response.statusText}`);
89
+ const fetched = await fetchWasmBinary(url);
90
+ if (isWasmModule(fetched.bytes)) {
91
+ return fetched.bytes;
92
+ }
93
+ let recovery;
94
+ try {
95
+ const emitted = await (0, wasmBinaryUrl_js_1.resolveEmittedBinaryUrl)();
96
+ if (emitted === undefined) {
97
+ recovery = 'unavailable (no bundler asset pipeline)';
98
+ }
99
+ else {
100
+ const recovered = await fetchWasmBinary(emitted);
101
+ if (isWasmModule(recovered.bytes)) {
102
+ return recovered.bytes;
103
+ }
104
+ recovery = `${emitted.href} ${recovered.served}`;
105
+ }
106
+ }
107
+ catch (error) {
108
+ recovery = `unavailable (${error instanceof Error ? error.message : String(error)})`;
71
109
  }
72
- return response.arrayBuffer();
110
+ throw new Error('The Lighter signer binary shipped with this package was not reachable: ' +
111
+ `${url.href} ${fetched.served}; bundler-emitted asset ${recovery}.`);
73
112
  }
74
113
  async function loadLighterWasm() {
75
114
  if (!cachedExports) {
76
- cachedExports = loadWasmUncached();
115
+ const attempt = loadWasmUncached();
116
+ cachedExports = attempt;
117
+ void attempt.catch(() => {
118
+ if (cachedExports === attempt) {
119
+ cachedExports = undefined;
120
+ }
121
+ });
77
122
  }
78
123
  return cachedExports;
79
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wasmLoader.js","sourceRoot":"","sources":["../../../src/signers/wasmLoader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wasmLoader.js","sourceRoot":"","sources":["../../../src/signers/wasmLoader.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,8 @@ export { DEFAULT_API_KEY_INDEX, DEFAULT_LIGHTER_EXPLORER_TX_BASE_URL, DEFAULT_LI
16
16
  export { lighterDepositFlow } from './depositFlow.js';
17
17
  export type { LighterPerpsProvider, LighterProviderOptions, } from './LighterProvider.js';
18
18
  export { Lighter, lighterProvider, lighterRhProvider, } from './LighterProvider.js';
19
+ export type { LighterWasmExports } from './signers/wasmLoader.js';
20
+ export { loadLighterWasm } from './signers/wasmLoader.js';
19
21
  export * from './types/index.js';
20
22
  export * from './utils/index.js';
21
23
  export type { LighterAuthTokenResolver } from './websocket/LighterWsProvider.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,YAAY,EACV,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,qBAAqB,EACrB,oCAAoC,EACpC,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,+BAA+B,EAC/B,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,OAAO,EACP,eAAe,EACf,iBAAiB,GAClB,MAAM,sBAAsB,CAAA;AAE7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,YAAY,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAChF,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,iBAAiB,GAClB,MAAM,kCAAkC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,YAAY,EACV,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,qBAAqB,EACrB,oCAAoC,EACpC,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,+BAA+B,EAC/B,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,OAAO,EACP,eAAe,EACf,iBAAiB,GAClB,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,YAAY,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAChF,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,iBAAiB,GAClB,MAAM,kCAAkC,CAAA"}
package/dist/esm/index.js CHANGED
@@ -16,6 +16,7 @@ export { getAccountSummary } from './accountSummary.js';
16
16
  export { DEFAULT_API_KEY_INDEX, DEFAULT_LIGHTER_EXPLORER_TX_BASE_URL, DEFAULT_LIGHTER_REST_URL, DEFAULT_LIGHTER_WS_URL, LIGHTER_COLLATERAL_ASSETS, LIGHTER_MAINNET_DEPLOYMENT, LIGHTER_MAINNET_SIGNER_CHAIN_ID, LIGHTER_PROVIDER_KEY, LIGHTER_RH_DEPLOYMENT, LIGHTER_RH_PROVIDER_KEY, LIGHTER_RH_REST_URL, LIGHTER_RH_SIGNER_CHAIN_ID, LIGHTER_RH_WS_URL, LIGHTER_SPOT_CATEGORY_ID, } from './constants.js';
17
17
  export { lighterDepositFlow } from './depositFlow.js';
18
18
  export { Lighter, lighterProvider, lighterRhProvider, } from './LighterProvider.js';
19
+ export { loadLighterWasm } from './signers/wasmLoader.js';
19
20
  export * from './types/index.js';
20
21
  export * from './utils/index.js';
21
22
  export { LighterWsProvider, lighterWsProvider, } from './websocket/LighterWsProvider.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+EAA+E;AAE/E;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAKvD,OAAO,EACL,qBAAqB,EACrB,oCAAoC,EACpC,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,+BAA+B,EAC/B,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAKrD,OAAO,EACL,OAAO,EACP,eAAe,EACf,iBAAiB,GAClB,MAAM,sBAAsB,CAAA;AAE7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAEhC,OAAO,EACL,iBAAiB,EAEjB,iBAAiB,GAClB,MAAM,kCAAkC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+EAA+E;AAE/E;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAKvD,OAAO,EACL,qBAAqB,EACrB,oCAAoC,EACpC,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,+BAA+B,EAC/B,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAKrD,OAAO,EACL,OAAO,EACP,eAAe,EACf,iBAAiB,GAClB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAEhC,OAAO,EACL,iBAAiB,EAEjB,iBAAiB,GAClB,MAAM,kCAAkC,CAAA"}
@@ -8,3 +8,16 @@ export const lighterWasmBinaryUrl = new URL(
8
8
  '../../wasm/lighter-signer.wasm',
9
9
  import.meta.url
10
10
  )
11
+
12
+ // Vite's dependency optimizer relocates this module into `.vite/deps`, where the
13
+ // URL above resolves against the cache directory instead of the installed
14
+ // package. The `?url` twin recovers the URL Vite emitted for the binary, and is
15
+ // reached through an import webpack and Turbopack are told to skip: they rewrite
16
+ // the URL above correctly and cannot compile Vite's query. The loader calls this
17
+ // only after the static URL has served something that is not a WASM module.
18
+ export const resolveEmittedBinaryUrl = async () => {
19
+ const { lighterWasmBinaryUrl: emitted } = await import(
20
+ /* webpackIgnore: true */ /* turbopackIgnore: true */ './wasmBinaryUrl.vite.js'
21
+ )
22
+ return emitted
23
+ }
@@ -0,0 +1,11 @@
1
+ // Recovery resolver for bundlers that relocate the module before evaluating it:
2
+ // Vite's dependency optimizer rewrites this package into `.vite/deps`, where the
3
+ // `new URL(..., import.meta.url)` form in `wasmBinaryUrl.js` points at the cache
4
+ // directory instead of the installed package. A `?url` import is resolved by the
5
+ // bundler at graph time, from this file's real location, so relocation cannot
6
+ // move the asset out from under it. Only Vite understands the query, which is
7
+ // why the loader reaches this module through an import the other bundlers skip.
8
+
9
+ import wasmAssetUrl from '../../wasm/lighter-signer.wasm?url'
10
+
11
+ export const lighterWasmBinaryUrl = new URL(wasmAssetUrl, import.meta.url)
@@ -120,11 +120,14 @@ export interface SignResult {
120
120
  error?: string;
121
121
  }
122
122
  /**
123
- * Load the Lighter WASM signer from the binary shipped with this package.
124
- * Memoized per-process: subsequent calls return the cached exports. The Go
125
- * runtime keeps a long-running goroutine to service JS calls — we start it
126
- * once and never stop it.
127
- * @internal
123
+ * Load the Lighter WASM signer from the binary shipped with this package —
124
+ * resolved by the package itself, so callers need no bundler configuration and
125
+ * pass no URL. Memoized per-process: subsequent calls return the cached
126
+ * exports, while a failed load is not cached — the next call retries. The Go
127
+ * runtime keeps a long-running goroutine to service JS calls — we start it once
128
+ * and never stop it.
129
+ *
130
+ * @public
128
131
  */
129
132
  export declare function loadLighterWasm(): Promise<LighterWasmExports>;
130
133
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"wasmLoader.d.ts","sourceRoot":"","sources":["../../../src/signers/wasmLoader.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM;QACpB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;IACD,YAAY,EAAE,CACZ,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACvB,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9E;;;;;OAKG;IACH,eAAe,EAAE,CACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3C;;;;;;;OAOG;IACH,gBAAgB,EAAE,CAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB,UAAU,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C;;;;;;;;;;;;;;;OAeG;IACH,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACnD,2EAA2E;IAC3E,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACnD;;;OAGG;IACH,mBAAmB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACvD;;;;;OAKG;IACH,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAChD,iFAAiF;IACjF,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAChD;;;OAGG;IACH,kBAAkB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACtD;;;;;OAKG;IACH,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACnD;;;OAGG;IACH,gBAAgB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACpD;;;;;;;OAOG;IACH,qBAAqB,EAAE,CACrB,GAAG,IAAI,EAAE,OAAO,EAAE,KACf,UAAU,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C;;;;OAIG;IACH,uBAAuB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAC3D;;;;OAIG;IACH,4BAA4B,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;CACjE;AAED,gBAAgB;AAChB,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAyDD;;;;;;GAMG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAKnE;AAmDD;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
1
+ {"version":3,"file":"wasmLoader.d.ts","sourceRoot":"","sources":["../../../src/signers/wasmLoader.ts"],"names":[],"mappings":"AASA;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM;QACpB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;IACD,YAAY,EAAE,CACZ,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACvB,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9E;;;;;OAKG;IACH,eAAe,EAAE,CACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3C;;;;;;;OAOG;IACH,gBAAgB,EAAE,CAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB,UAAU,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C;;;;;;;;;;;;;;;OAeG;IACH,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACnD,2EAA2E;IAC3E,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACnD;;;OAGG;IACH,mBAAmB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACvD;;;;;OAKG;IACH,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAChD,iFAAiF;IACjF,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAChD;;;OAGG;IACH,kBAAkB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACtD;;;;;OAKG;IACH,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACnD;;;OAGG;IACH,gBAAgB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACpD;;;;;;;OAOG;IACH,qBAAqB,EAAE,CACrB,GAAG,IAAI,EAAE,OAAO,EAAE,KACf,UAAU,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C;;;;OAIG;IACH,uBAAuB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAC3D;;;;OAIG;IACH,4BAA4B,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;CACjE;AAED,gBAAgB;AAChB,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAwHD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAYnE;AAmDD;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
@@ -1,7 +1,7 @@
1
1
  // The Go runtime installs functions (SignCreateOrder, SignCancelOrder, etc.)
2
2
  // onto `globalThis` when `go.run(instance)` starts the main goroutine.
3
3
  import { WASM_EXEC_JS } from './generated/wasmExecRuntime.js';
4
- import { lighterWasmBinaryUrl } from './wasmBinaryUrl.js';
4
+ import { lighterWasmBinaryUrl, resolveEmittedBinaryUrl, } from './wasmBinaryUrl.js';
5
5
  const WASM_FUNCTION_NAMES = [
6
6
  'GenerateAPIKey',
7
7
  'CreateClient',
@@ -32,29 +32,85 @@ async function readNodeFile(url) {
32
32
  /* webpackIgnore: true */ /* @vite-ignore */ 'node:fs/promises');
33
33
  return readFile(url);
34
34
  }
35
+ // A dev server or static host that misses the asset answers with its SPA
36
+ // index.html instead of 404, so a wrong URL would otherwise reach the
37
+ // instantiator as `<!doctype` and fail with an opaque "magic word" error.
38
+ const WASM_MAGIC = [0x00, 0x61, 0x73, 0x6d];
39
+ const isWasmModule = (bytes) => {
40
+ const preamble = new Uint8Array(bytes, 0, Math.min(4, bytes.byteLength));
41
+ return WASM_MAGIC.every((byte, index) => preamble[index] === byte);
42
+ };
43
+ async function fetchWasmBinary(url) {
44
+ const response = await fetch(url);
45
+ if (!response.ok) {
46
+ throw new Error(`Failed to fetch ${url.href}: ${response.status} ${response.statusText}`);
47
+ }
48
+ const bytes = await response.arrayBuffer();
49
+ const preamble = Array.from(new Uint8Array(bytes, 0, Math.min(4, bytes.byteLength)), (byte) => byte.toString(16).padStart(2, '0')).join(' ');
50
+ return {
51
+ bytes,
52
+ served: `served ${response.headers.get('content-type') ?? 'no content type'} starting with ${preamble || '(empty response)'}`,
53
+ };
54
+ }
35
55
  async function readWasmBinary(url) {
36
56
  if (url.protocol === 'file:') {
37
57
  const bytes = await readNodeFile(url);
38
58
  // Copy the view into a fresh ArrayBuffer — `Buffer.buffer` is a shared
39
59
  // ArrayBuffer in Node and the wasm instantiator expects a plain one.
40
- return bytes.slice().buffer;
60
+ const buffer = bytes.slice().buffer;
61
+ if (!isWasmModule(buffer)) {
62
+ throw new Error(`${url.href} is not a WebAssembly module.`);
63
+ }
64
+ return buffer;
41
65
  }
42
- const response = await fetch(url);
43
- if (!response.ok) {
44
- throw new Error(`Failed to fetch ${url.href}: ${response.status} ${response.statusText}`);
66
+ const fetched = await fetchWasmBinary(url);
67
+ if (isWasmModule(fetched.bytes)) {
68
+ return fetched.bytes;
45
69
  }
46
- return response.arrayBuffer();
70
+ // The static URL missed, so this consumer's bundler relocated the module away
71
+ // from the binary: fall back to the URL it emitted for the packaged asset.
72
+ // That import lives in the hand-authored resolver so the per-bundler ignore
73
+ // comments guarding Vite's `?url` twin survive into the published build.
74
+ let recovery;
75
+ try {
76
+ const emitted = await resolveEmittedBinaryUrl();
77
+ if (emitted === undefined) {
78
+ recovery = 'unavailable (no bundler asset pipeline)';
79
+ }
80
+ else {
81
+ const recovered = await fetchWasmBinary(emitted);
82
+ if (isWasmModule(recovered.bytes)) {
83
+ return recovered.bytes;
84
+ }
85
+ recovery = `${emitted.href} ${recovered.served}`;
86
+ }
87
+ }
88
+ catch (error) {
89
+ recovery = `unavailable (${error instanceof Error ? error.message : String(error)})`;
90
+ }
91
+ throw new Error('The Lighter signer binary shipped with this package was not reachable: ' +
92
+ `${url.href} ${fetched.served}; bundler-emitted asset ${recovery}.`);
47
93
  }
48
94
  /**
49
- * Load the Lighter WASM signer from the binary shipped with this package.
50
- * Memoized per-process: subsequent calls return the cached exports. The Go
51
- * runtime keeps a long-running goroutine to service JS calls — we start it
52
- * once and never stop it.
53
- * @internal
95
+ * Load the Lighter WASM signer from the binary shipped with this package —
96
+ * resolved by the package itself, so callers need no bundler configuration and
97
+ * pass no URL. Memoized per-process: subsequent calls return the cached
98
+ * exports, while a failed load is not cached — the next call retries. The Go
99
+ * runtime keeps a long-running goroutine to service JS calls — we start it once
100
+ * and never stop it.
101
+ *
102
+ * @public
54
103
  */
55
104
  export async function loadLighterWasm() {
56
105
  if (!cachedExports) {
57
- cachedExports = loadWasmUncached();
106
+ const attempt = loadWasmUncached();
107
+ cachedExports = attempt;
108
+ void attempt.catch(() => {
109
+ // A reset may already have installed a replacement attempt.
110
+ if (cachedExports === attempt) {
111
+ cachedExports = undefined;
112
+ }
113
+ });
58
114
  }
59
115
  return cachedExports;
60
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wasmLoader.js","sourceRoot":"","sources":["../../../src/signers/wasmLoader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wasmLoader.js","sourceRoot":"","sources":["../../../src/signers/wasmLoader.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,8 @@ export { DEFAULT_API_KEY_INDEX, DEFAULT_LIGHTER_EXPLORER_TX_BASE_URL, DEFAULT_LI
16
16
  export { lighterDepositFlow } from './depositFlow.js';
17
17
  export type { LighterPerpsProvider, LighterProviderOptions, } from './LighterProvider.js';
18
18
  export { Lighter, lighterProvider, lighterRhProvider, } from './LighterProvider.js';
19
+ export type { LighterWasmExports } from './signers/wasmLoader.js';
20
+ export { loadLighterWasm } from './signers/wasmLoader.js';
19
21
  export * from './types/index.js';
20
22
  export * from './utils/index.js';
21
23
  export type { LighterAuthTokenResolver } from './websocket/LighterWsProvider.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,YAAY,EACV,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,qBAAqB,EACrB,oCAAoC,EACpC,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,+BAA+B,EAC/B,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,OAAO,EACP,eAAe,EACf,iBAAiB,GAClB,MAAM,sBAAsB,CAAA;AAE7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,YAAY,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAChF,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,iBAAiB,GAClB,MAAM,kCAAkC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,YAAY,EACV,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,qBAAqB,EACrB,oCAAoC,EACpC,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,+BAA+B,EAC/B,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,YAAY,EACV,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,OAAO,EACP,eAAe,EACf,iBAAiB,GAClB,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA;AAChC,YAAY,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAA;AAChF,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,iBAAiB,GAClB,MAAM,kCAAkC,CAAA"}
@@ -120,11 +120,14 @@ export interface SignResult {
120
120
  error?: string;
121
121
  }
122
122
  /**
123
- * Load the Lighter WASM signer from the binary shipped with this package.
124
- * Memoized per-process: subsequent calls return the cached exports. The Go
125
- * runtime keeps a long-running goroutine to service JS calls — we start it
126
- * once and never stop it.
127
- * @internal
123
+ * Load the Lighter WASM signer from the binary shipped with this package —
124
+ * resolved by the package itself, so callers need no bundler configuration and
125
+ * pass no URL. Memoized per-process: subsequent calls return the cached
126
+ * exports, while a failed load is not cached — the next call retries. The Go
127
+ * runtime keeps a long-running goroutine to service JS calls — we start it once
128
+ * and never stop it.
129
+ *
130
+ * @public
128
131
  */
129
132
  export declare function loadLighterWasm(): Promise<LighterWasmExports>;
130
133
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"wasmLoader.d.ts","sourceRoot":"","sources":["../../../src/signers/wasmLoader.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM;QACpB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;IACD,YAAY,EAAE,CACZ,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACvB,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9E;;;;;OAKG;IACH,eAAe,EAAE,CACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3C;;;;;;;OAOG;IACH,gBAAgB,EAAE,CAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB,UAAU,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C;;;;;;;;;;;;;;;OAeG;IACH,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACnD,2EAA2E;IAC3E,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACnD;;;OAGG;IACH,mBAAmB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACvD;;;;;OAKG;IACH,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAChD,iFAAiF;IACjF,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAChD;;;OAGG;IACH,kBAAkB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACtD;;;;;OAKG;IACH,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACnD;;;OAGG;IACH,gBAAgB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACpD;;;;;;;OAOG;IACH,qBAAqB,EAAE,CACrB,GAAG,IAAI,EAAE,OAAO,EAAE,KACf,UAAU,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C;;;;OAIG;IACH,uBAAuB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAC3D;;;;OAIG;IACH,4BAA4B,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;CACjE;AAED,gBAAgB;AAChB,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAyDD;;;;;;GAMG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAKnE;AAmDD;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
1
+ {"version":3,"file":"wasmLoader.d.ts","sourceRoot":"","sources":["../../../src/signers/wasmLoader.ts"],"names":[],"mappings":"AASA;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM;QACpB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;IACD,YAAY,EAAE,CACZ,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACvB,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9E;;;;;OAKG;IACH,eAAe,EAAE,CACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3C;;;;;;;OAOG;IACH,gBAAgB,EAAE,CAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,KACjB,UAAU,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C;;;;;;;;;;;;;;;OAeG;IACH,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACnD,2EAA2E;IAC3E,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACnD;;;OAGG;IACH,mBAAmB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACvD;;;;;OAKG;IACH,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAChD,iFAAiF;IACjF,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAChD;;;OAGG;IACH,kBAAkB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACtD;;;;;OAKG;IACH,eAAe,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACnD;;;OAGG;IACH,gBAAgB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IACpD;;;;;;;OAOG;IACH,qBAAqB,EAAE,CACrB,GAAG,IAAI,EAAE,OAAO,EAAE,KACf,UAAU,GAAG;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C;;;;OAIG;IACH,uBAAuB,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;IAC3D;;;;OAIG;IACH,4BAA4B,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,UAAU,CAAA;CACjE;AAED,gBAAgB;AAChB,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAwHD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAYnE;AAmDD;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifi/perps-sdk-provider-lighter",
3
- "version": "12.0.0",
3
+ "version": "12.1.0",
4
4
  "description": "Lighter provider plugin for @lifi/perps-sdk",
5
5
  "homepage": "https://github.com/lifinance/perps-sdk",
6
6
  "bugs": {
package/src/index.ts CHANGED
@@ -45,6 +45,8 @@ export {
45
45
  lighterProvider,
46
46
  lighterRhProvider,
47
47
  } from './LighterProvider.js'
48
+ export type { LighterWasmExports } from './signers/wasmLoader.js'
49
+ export { loadLighterWasm } from './signers/wasmLoader.js'
48
50
 
49
51
  export * from './types/index.js'
50
52
  export * from './utils/index.js'
@@ -5,3 +5,12 @@
5
5
  * @internal
6
6
  */
7
7
  export declare const lighterWasmBinaryUrl: URL
8
+
9
+ /**
10
+ * URL a bundler emitted for the packaged binary, for the case where it relocated
11
+ * this module and {@link lighterWasmBinaryUrl} therefore points somewhere the
12
+ * binary is not. `undefined` when the module system has no asset pipeline to ask.
13
+ *
14
+ * @internal
15
+ */
16
+ export declare function resolveEmittedBinaryUrl(): Promise<URL | undefined>
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Emitted-asset URL of the Go signer binary as resolved by Vite's `?url`
3
+ * pipeline, for the case where its dependency optimizer has relocated this
4
+ * package away from the binary.
5
+ *
6
+ * @internal
7
+ */
8
+ export declare const lighterWasmBinaryUrl: URL
@@ -2,7 +2,10 @@
2
2
  // onto `globalThis` when `go.run(instance)` starts the main goroutine.
3
3
 
4
4
  import { WASM_EXEC_JS } from './generated/wasmExecRuntime.js'
5
- import { lighterWasmBinaryUrl } from './wasmBinaryUrl.js'
5
+ import {
6
+ lighterWasmBinaryUrl,
7
+ resolveEmittedBinaryUrl,
8
+ } from './wasmBinaryUrl.js'
6
9
 
7
10
  /**
8
11
  * Function table installed by the Lighter Go WASM runtime. Methods mirror the
@@ -173,32 +176,105 @@ async function readNodeFile(url: URL): Promise<Uint8Array> {
173
176
  return readFile(url)
174
177
  }
175
178
 
179
+ // A dev server or static host that misses the asset answers with its SPA
180
+ // index.html instead of 404, so a wrong URL would otherwise reach the
181
+ // instantiator as `<!doctype` and fail with an opaque "magic word" error.
182
+ const WASM_MAGIC = [0x00, 0x61, 0x73, 0x6d]
183
+
184
+ const isWasmModule = (bytes: ArrayBuffer): boolean => {
185
+ const preamble = new Uint8Array(bytes, 0, Math.min(4, bytes.byteLength))
186
+ return WASM_MAGIC.every((byte, index) => preamble[index] === byte)
187
+ }
188
+
189
+ interface FetchedAsset {
190
+ bytes: ArrayBuffer
191
+ /** Content type and leading bytes, for the not-a-module diagnostic. */
192
+ served: string
193
+ }
194
+
195
+ async function fetchWasmBinary(url: URL): Promise<FetchedAsset> {
196
+ const response = await fetch(url)
197
+ if (!response.ok) {
198
+ throw new Error(
199
+ `Failed to fetch ${url.href}: ${response.status} ${response.statusText}`
200
+ )
201
+ }
202
+ const bytes = await response.arrayBuffer()
203
+ const preamble = Array.from(
204
+ new Uint8Array(bytes, 0, Math.min(4, bytes.byteLength)),
205
+ (byte) => byte.toString(16).padStart(2, '0')
206
+ ).join(' ')
207
+ return {
208
+ bytes,
209
+ served: `served ${
210
+ response.headers.get('content-type') ?? 'no content type'
211
+ } starting with ${preamble || '(empty response)'}`,
212
+ }
213
+ }
214
+
176
215
  async function readWasmBinary(url: URL): Promise<ArrayBuffer> {
177
216
  if (url.protocol === 'file:') {
178
217
  const bytes = await readNodeFile(url)
179
218
  // Copy the view into a fresh ArrayBuffer — `Buffer.buffer` is a shared
180
219
  // ArrayBuffer in Node and the wasm instantiator expects a plain one.
181
- return bytes.slice().buffer as ArrayBuffer
220
+ const buffer = bytes.slice().buffer as ArrayBuffer
221
+ if (!isWasmModule(buffer)) {
222
+ throw new Error(`${url.href} is not a WebAssembly module.`)
223
+ }
224
+ return buffer
182
225
  }
183
- const response = await fetch(url)
184
- if (!response.ok) {
185
- throw new Error(
186
- `Failed to fetch ${url.href}: ${response.status} ${response.statusText}`
187
- )
226
+
227
+ const fetched = await fetchWasmBinary(url)
228
+ if (isWasmModule(fetched.bytes)) {
229
+ return fetched.bytes
230
+ }
231
+
232
+ // The static URL missed, so this consumer's bundler relocated the module away
233
+ // from the binary: fall back to the URL it emitted for the packaged asset.
234
+ // That import lives in the hand-authored resolver so the per-bundler ignore
235
+ // comments guarding Vite's `?url` twin survive into the published build.
236
+ let recovery: string
237
+ try {
238
+ const emitted = await resolveEmittedBinaryUrl()
239
+ if (emitted === undefined) {
240
+ recovery = 'unavailable (no bundler asset pipeline)'
241
+ } else {
242
+ const recovered = await fetchWasmBinary(emitted)
243
+ if (isWasmModule(recovered.bytes)) {
244
+ return recovered.bytes
245
+ }
246
+ recovery = `${emitted.href} ${recovered.served}`
247
+ }
248
+ } catch (error) {
249
+ recovery = `unavailable (${error instanceof Error ? error.message : String(error)})`
188
250
  }
189
- return response.arrayBuffer()
251
+
252
+ throw new Error(
253
+ 'The Lighter signer binary shipped with this package was not reachable: ' +
254
+ `${url.href} ${fetched.served}; bundler-emitted asset ${recovery}.`
255
+ )
190
256
  }
191
257
 
192
258
  /**
193
- * Load the Lighter WASM signer from the binary shipped with this package.
194
- * Memoized per-process: subsequent calls return the cached exports. The Go
195
- * runtime keeps a long-running goroutine to service JS calls — we start it
196
- * once and never stop it.
197
- * @internal
259
+ * Load the Lighter WASM signer from the binary shipped with this package —
260
+ * resolved by the package itself, so callers need no bundler configuration and
261
+ * pass no URL. Memoized per-process: subsequent calls return the cached
262
+ * exports, while a failed load is not cached — the next call retries. The Go
263
+ * runtime keeps a long-running goroutine to service JS calls — we start it once
264
+ * and never stop it.
265
+ *
266
+ * @public
198
267
  */
199
268
  export async function loadLighterWasm(): Promise<LighterWasmExports> {
200
269
  if (!cachedExports) {
201
- cachedExports = loadWasmUncached()
270
+ const attempt = loadWasmUncached()
271
+ cachedExports = attempt
272
+ void attempt.catch(() => {
273
+ // A reset may already have installed a replacement attempt.
274
+ if (cachedExports === attempt) {
275
+ cachedExports = undefined
276
+ }
277
+ })
202
278
  }
203
279
  return cachedExports
204
280
  }