@lifi/perps-sdk-provider-lighter 11.1.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 +9 -1
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/signers/wasmBinaryUrl.js +4 -0
- package/dist/cjs/signers/wasmLoader.d.ts.map +1 -1
- package/dist/cjs/signers/wasmLoader.js +51 -6
- package/dist/cjs/signers/wasmLoader.js.map +1 -1
- package/dist/cjs/utils/ohlcvInterval.d.ts +2 -1
- package/dist/cjs/utils/ohlcvInterval.d.ts.map +1 -1
- package/dist/cjs/utils/ohlcvInterval.js.map +1 -1
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/signers/wasmBinaryUrl.js +13 -0
- package/dist/esm/signers/wasmBinaryUrl.vite.js +11 -0
- package/dist/esm/signers/wasmLoader.d.ts +8 -5
- package/dist/esm/signers/wasmLoader.d.ts.map +1 -1
- package/dist/esm/signers/wasmLoader.js +68 -12
- package/dist/esm/signers/wasmLoader.js.map +1 -1
- package/dist/esm/utils/ohlcvInterval.d.ts +2 -1
- package/dist/esm/utils/ohlcvInterval.d.ts.map +1 -1
- package/dist/esm/utils/ohlcvInterval.js.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/signers/wasmLoader.d.ts +8 -5
- package/dist/types/signers/wasmLoader.d.ts.map +1 -1
- package/dist/types/utils/ohlcvInterval.d.ts +2 -1
- package/dist/types/utils/ohlcvInterval.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +2 -0
- package/src/signers/wasmBinaryUrl.d.ts +9 -0
- package/src/signers/wasmBinaryUrl.vite.d.ts +8 -0
- package/src/signers/wasmLoader.ts +90 -14
- package/src/utils/ohlcvInterval.ts +3 -2
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
|
|
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
|
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -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';
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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");
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -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":"
|
|
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
|
-
|
|
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
|
|
69
|
-
if (
|
|
70
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"wasmLoader.js","sourceRoot":"","sources":["../../../src/signers/wasmLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ohlcvInterval.d.ts","sourceRoot":"","sources":["../../../src/utils/ohlcvInterval.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ohlcvInterval.d.ts","sourceRoot":"","sources":["../../../src/utils/ohlcvInterval.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AA4BtD,eAAO,MAAM,WAAW,GAAI,UAAU,aAAa,KAAG,MAUrD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ohlcvInterval.js","sourceRoot":"","sources":["../../../src/utils/ohlcvInterval.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;
|
|
1
|
+
{"version":3,"file":"ohlcvInterval.js","sourceRoot":"","sources":["../../../src/utils/ohlcvInterval.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAE5C,mDAAkD;AASlD,MAAM,2BAA2B,GAA2C;IAC1E,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;CACX,CAAA;AAQM,MAAM,WAAW,GAAG,CAAC,QAAuB,EAAU,EAAE;IAC7D,MAAM,UAAU,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAA;IACxD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,sBAAU,CAClB,4BAAc,CAAC,eAAe,EAC9B,4CAA4C,QAAQ,KAAK;YACvD,cAAc,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACvE,CAAA;IACH,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AAVY,QAAA,WAAW,eAUvB"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -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';
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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';
|
package/dist/esm/index.js.map
CHANGED
|
@@ -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
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
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":"
|
|
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
|
-
|
|
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
|
|
43
|
-
if (
|
|
44
|
-
|
|
66
|
+
const fetched = await fetchWasmBinary(url);
|
|
67
|
+
if (isWasmModule(fetched.bytes)) {
|
|
68
|
+
return fetched.bytes;
|
|
45
69
|
}
|
|
46
|
-
|
|
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
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
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
|
-
|
|
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":"AAAA,6EAA6E;AAC7E,uEAAuE;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,
|
|
1
|
+
{"version":3,"file":"wasmLoader.js","sourceRoot":"","sources":["../../../src/signers/wasmLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import type { OhlcvInterval } from '@lifi/perps-types';
|
|
1
2
|
/**
|
|
2
3
|
* Validate and map an SDK OHLCV interval to Lighter's resolution string.
|
|
3
4
|
* Unsupported intervals raise a validation error instead of being rounded.
|
|
4
5
|
*
|
|
5
6
|
* @public
|
|
6
7
|
*/
|
|
7
|
-
export declare const mapInterval: (interval:
|
|
8
|
+
export declare const mapInterval: (interval: OhlcvInterval) => string;
|
|
8
9
|
//# sourceMappingURL=ohlcvInterval.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ohlcvInterval.d.ts","sourceRoot":"","sources":["../../../src/utils/ohlcvInterval.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ohlcvInterval.d.ts","sourceRoot":"","sources":["../../../src/utils/ohlcvInterval.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAsBtD;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,UAAU,aAAa,KAAG,MAUrD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ohlcvInterval.js","sourceRoot":"","sources":["../../../src/utils/ohlcvInterval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"ohlcvInterval.js","sourceRoot":"","sources":["../../../src/utils/ohlcvInterval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD;;;;;;GAMG;AACH,MAAM,2BAA2B,GAA2C;IAC1E,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;CACX,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,QAAuB,EAAU,EAAE;IAC7D,MAAM,UAAU,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAA;IACxD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,eAAe,EAC9B,4CAA4C,QAAQ,KAAK;YACvD,cAAc,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACvE,CAAA;IACH,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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;
|
|
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
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
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":"
|
|
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,8 +1,9 @@
|
|
|
1
|
+
import type { OhlcvInterval } from '@lifi/perps-types';
|
|
1
2
|
/**
|
|
2
3
|
* Validate and map an SDK OHLCV interval to Lighter's resolution string.
|
|
3
4
|
* Unsupported intervals raise a validation error instead of being rounded.
|
|
4
5
|
*
|
|
5
6
|
* @public
|
|
6
7
|
*/
|
|
7
|
-
export declare const mapInterval: (interval:
|
|
8
|
+
export declare const mapInterval: (interval: OhlcvInterval) => string;
|
|
8
9
|
//# sourceMappingURL=ohlcvInterval.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ohlcvInterval.d.ts","sourceRoot":"","sources":["../../../src/utils/ohlcvInterval.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ohlcvInterval.d.ts","sourceRoot":"","sources":["../../../src/utils/ohlcvInterval.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAsBtD;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,UAAU,aAAa,KAAG,MAUrD,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lifi/perps-sdk-provider-lighter",
|
|
3
|
-
"version": "
|
|
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": {
|
|
@@ -44,10 +44,10 @@
|
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"big.js": "^7.0.1",
|
|
46
46
|
"viem": "^2.48.8",
|
|
47
|
-
"@lifi/perps-types": "^
|
|
47
|
+
"@lifi/perps-types": "^6.0.0"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"@lifi/perps-sdk": "^6.5.
|
|
50
|
+
"@lifi/perps-sdk": "^6.5.1"
|
|
51
51
|
},
|
|
52
52
|
"publishConfig": {
|
|
53
53
|
"access": "public"
|
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>
|
|
@@ -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 {
|
|
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
|
-
|
|
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
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
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
|
-
|
|
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
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PerpsError } from '@lifi/perps-sdk'
|
|
2
|
+
import type { OhlcvInterval } from '@lifi/perps-types'
|
|
2
3
|
import { PerpsErrorCode } from '@lifi/perps-types'
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -8,7 +9,7 @@ import { PerpsErrorCode } from '@lifi/perps-types'
|
|
|
8
9
|
* direct match (3m, 2h, 8h, 3d, 1M) raise a validation error rather than
|
|
9
10
|
* silently rounding — the caller picks a supported timeframe.
|
|
10
11
|
*/
|
|
11
|
-
const LIGHTER_SUPPORTED_INTERVALS: Record<
|
|
12
|
+
const LIGHTER_SUPPORTED_INTERVALS: Partial<Record<OhlcvInterval, string>> = {
|
|
12
13
|
'1m': '1m',
|
|
13
14
|
'5m': '5m',
|
|
14
15
|
'15m': '15m',
|
|
@@ -26,7 +27,7 @@ const LIGHTER_SUPPORTED_INTERVALS: Record<string, string> = {
|
|
|
26
27
|
*
|
|
27
28
|
* @public
|
|
28
29
|
*/
|
|
29
|
-
export const mapInterval = (interval:
|
|
30
|
+
export const mapInterval = (interval: OhlcvInterval): string => {
|
|
30
31
|
const resolution = LIGHTER_SUPPORTED_INTERVALS[interval]
|
|
31
32
|
if (!resolution) {
|
|
32
33
|
throw new PerpsError(
|