@lifi/perps-sdk-provider-lighter 0.2.0-alpha.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/LICENSE +201 -0
- package/README.md +176 -0
- package/dist/cjs/LighterProvider.d.ts +20 -0
- package/dist/cjs/LighterProvider.d.ts.map +1 -0
- package/dist/cjs/LighterProvider.js +592 -0
- package/dist/cjs/LighterProvider.js.map +1 -0
- package/dist/cjs/accountConfig.d.ts +3 -0
- package/dist/cjs/accountConfig.d.ts.map +1 -0
- package/dist/cjs/accountConfig.js +69 -0
- package/dist/cjs/accountConfig.js.map +1 -0
- package/dist/cjs/accountSummary.d.ts +3 -0
- package/dist/cjs/accountSummary.d.ts.map +1 -0
- package/dist/cjs/accountSummary.js +8 -0
- package/dist/cjs/accountSummary.js.map +1 -0
- package/dist/cjs/constants.d.ts +14 -0
- package/dist/cjs/constants.d.ts.map +1 -0
- package/dist/cjs/constants.js +18 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/index.d.ts +11 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +35 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/signers/LighterKeyStore.d.ts +18 -0
- package/dist/cjs/signers/LighterKeyStore.d.ts.map +1 -0
- package/dist/cjs/signers/LighterKeyStore.js +54 -0
- package/dist/cjs/signers/LighterKeyStore.js.map +1 -0
- package/dist/cjs/signers/LighterReadOnlyTokenManager.d.ts +56 -0
- package/dist/cjs/signers/LighterReadOnlyTokenManager.d.ts.map +1 -0
- package/dist/cjs/signers/LighterReadOnlyTokenManager.js +127 -0
- package/dist/cjs/signers/LighterReadOnlyTokenManager.js.map +1 -0
- package/dist/cjs/signers/LighterSigner.d.ts +41 -0
- package/dist/cjs/signers/LighterSigner.d.ts.map +1 -0
- package/dist/cjs/signers/LighterSigner.js +175 -0
- package/dist/cjs/signers/LighterSigner.js.map +1 -0
- package/dist/cjs/signers/createAuthToken.d.ts +12 -0
- package/dist/cjs/signers/createAuthToken.d.ts.map +1 -0
- package/dist/cjs/signers/createAuthToken.js +28 -0
- package/dist/cjs/signers/createAuthToken.js.map +1 -0
- package/dist/cjs/signers/index.d.ts +11 -0
- package/dist/cjs/signers/index.d.ts.map +1 -0
- package/dist/cjs/signers/index.js +19 -0
- package/dist/cjs/signers/index.js.map +1 -0
- package/dist/cjs/signers/signActions.d.ts +15 -0
- package/dist/cjs/signers/signActions.d.ts.map +1 -0
- package/dist/cjs/signers/signActions.js +142 -0
- package/dist/cjs/signers/signActions.js.map +1 -0
- package/dist/cjs/signers/wasmLoader.d.ts +42 -0
- package/dist/cjs/signers/wasmLoader.d.ts.map +1 -0
- package/dist/cjs/signers/wasmLoader.js +166 -0
- package/dist/cjs/signers/wasmLoader.js.map +1 -0
- package/dist/cjs/types/account.d.ts +97 -0
- package/dist/cjs/types/account.d.ts.map +1 -0
- package/dist/cjs/types/account.js +3 -0
- package/dist/cjs/types/account.js.map +1 -0
- package/dist/cjs/types/action.d.ts +72 -0
- package/dist/cjs/types/action.d.ts.map +1 -0
- package/dist/cjs/types/action.js +23 -0
- package/dist/cjs/types/action.js.map +1 -0
- package/dist/cjs/types/activity.d.ts +73 -0
- package/dist/cjs/types/activity.d.ts.map +1 -0
- package/dist/cjs/types/activity.js +3 -0
- package/dist/cjs/types/activity.js.map +1 -0
- package/dist/cjs/types/asset.d.ts +122 -0
- package/dist/cjs/types/asset.d.ts.map +1 -0
- package/dist/cjs/types/asset.js +3 -0
- package/dist/cjs/types/asset.js.map +1 -0
- package/dist/cjs/types/fill.d.ts +29 -0
- package/dist/cjs/types/fill.d.ts.map +1 -0
- package/dist/cjs/types/fill.js +3 -0
- package/dist/cjs/types/fill.js.map +1 -0
- package/dist/cjs/types/index.d.ts +9 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +25 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/order.d.ts +57 -0
- package/dist/cjs/types/order.d.ts.map +1 -0
- package/dist/cjs/types/order.js +3 -0
- package/dist/cjs/types/order.js.map +1 -0
- package/dist/cjs/types/submit.d.ts +39 -0
- package/dist/cjs/types/submit.d.ts.map +1 -0
- package/dist/cjs/types/submit.js +3 -0
- package/dist/cjs/types/submit.js.map +1 -0
- package/dist/cjs/types/ws.d.ts +84 -0
- package/dist/cjs/types/ws.d.ts.map +1 -0
- package/dist/cjs/types/ws.js +3 -0
- package/dist/cjs/types/ws.js.map +1 -0
- package/dist/cjs/utils/activityCursor.d.ts +12 -0
- package/dist/cjs/utils/activityCursor.d.ts.map +1 -0
- package/dist/cjs/utils/activityCursor.js +85 -0
- package/dist/cjs/utils/activityCursor.js.map +1 -0
- package/dist/cjs/utils/apiClient.d.ts +26 -0
- package/dist/cjs/utils/apiClient.d.ts.map +1 -0
- package/dist/cjs/utils/apiClient.js +94 -0
- package/dist/cjs/utils/apiClient.js.map +1 -0
- package/dist/cjs/utils/fetchDetailedAccount.d.ts +5 -0
- package/dist/cjs/utils/fetchDetailedAccount.d.ts.map +1 -0
- package/dist/cjs/utils/fetchDetailedAccount.js +22 -0
- package/dist/cjs/utils/fetchDetailedAccount.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +16 -0
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/utils/index.js +45 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/lighterAsset.d.ts +3 -0
- package/dist/cjs/utils/lighterAsset.d.ts.map +1 -0
- package/dist/cjs/utils/lighterAsset.js +12 -0
- package/dist/cjs/utils/lighterAsset.js.map +1 -0
- package/dist/cjs/utils/liquidation.d.ts +4 -0
- package/dist/cjs/utils/liquidation.d.ts.map +1 -0
- package/dist/cjs/utils/liquidation.js +16 -0
- package/dist/cjs/utils/liquidation.js.map +1 -0
- package/dist/cjs/utils/mapFill.d.ts +4 -0
- package/dist/cjs/utils/mapFill.d.ts.map +1 -0
- package/dist/cjs/utils/mapFill.js +61 -0
- package/dist/cjs/utils/mapFill.js.map +1 -0
- package/dist/cjs/utils/mapOpenPositions.d.ts +4 -0
- package/dist/cjs/utils/mapOpenPositions.d.ts.map +1 -0
- package/dist/cjs/utils/mapOpenPositions.js +9 -0
- package/dist/cjs/utils/mapOpenPositions.js.map +1 -0
- package/dist/cjs/utils/mapOrder.d.ts +15 -0
- package/dist/cjs/utils/mapOrder.d.ts.map +1 -0
- package/dist/cjs/utils/mapOrder.js +164 -0
- package/dist/cjs/utils/mapOrder.js.map +1 -0
- package/dist/cjs/utils/mapPosition.d.ts +4 -0
- package/dist/cjs/utils/mapPosition.d.ts.map +1 -0
- package/dist/cjs/utils/mapPosition.js +30 -0
- package/dist/cjs/utils/mapPosition.js.map +1 -0
- package/dist/cjs/utils/ohlcvInterval.d.ts +2 -0
- package/dist/cjs/utils/ohlcvInterval.d.ts.map +1 -0
- package/dist/cjs/utils/ohlcvInterval.js +26 -0
- package/dist/cjs/utils/ohlcvInterval.js.map +1 -0
- package/dist/cjs/utils/orderFormatting.d.ts +4 -0
- package/dist/cjs/utils/orderFormatting.d.ts.map +1 -0
- package/dist/cjs/utils/orderFormatting.js +23 -0
- package/dist/cjs/utils/orderFormatting.js.map +1 -0
- package/dist/cjs/utils/time.d.ts +3 -0
- package/dist/cjs/utils/time.d.ts.map +1 -0
- package/dist/cjs/utils/time.js +8 -0
- package/dist/cjs/utils/time.js.map +1 -0
- package/dist/cjs/utils/wireEncoding.d.ts +9 -0
- package/dist/cjs/utils/wireEncoding.d.ts.map +1 -0
- package/dist/cjs/utils/wireEncoding.js +87 -0
- package/dist/cjs/utils/wireEncoding.js.map +1 -0
- package/dist/cjs/websocket/LighterWsProvider.d.ts +45 -0
- package/dist/cjs/websocket/LighterWsProvider.d.ts.map +1 -0
- package/dist/cjs/websocket/LighterWsProvider.js +396 -0
- package/dist/cjs/websocket/LighterWsProvider.js.map +1 -0
- package/dist/esm/LighterProvider.d.ts +105 -0
- package/dist/esm/LighterProvider.d.ts.map +1 -0
- package/dist/esm/LighterProvider.js +684 -0
- package/dist/esm/LighterProvider.js.map +1 -0
- package/dist/esm/accountConfig.d.ts +14 -0
- package/dist/esm/accountConfig.d.ts.map +1 -0
- package/dist/esm/accountConfig.js +135 -0
- package/dist/esm/accountConfig.js.map +1 -0
- package/dist/esm/accountSummary.d.ts +12 -0
- package/dist/esm/accountSummary.d.ts.map +1 -0
- package/dist/esm/accountSummary.js +14 -0
- package/dist/esm/accountSummary.js.map +1 -0
- package/dist/esm/constants.d.ts +74 -0
- package/dist/esm/constants.d.ts.map +1 -0
- package/dist/esm/constants.js +73 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/index.d.ts +22 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +22 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/signers/LighterKeyStore.d.ts +24 -0
- package/dist/esm/signers/LighterKeyStore.d.ts.map +1 -0
- package/dist/esm/signers/LighterKeyStore.js +55 -0
- package/dist/esm/signers/LighterKeyStore.js.map +1 -0
- package/dist/esm/signers/LighterReadOnlyTokenManager.d.ts +157 -0
- package/dist/esm/signers/LighterReadOnlyTokenManager.d.ts.map +1 -0
- package/dist/esm/signers/LighterReadOnlyTokenManager.js +194 -0
- package/dist/esm/signers/LighterReadOnlyTokenManager.js.map +1 -0
- package/dist/esm/signers/LighterSigner.d.ts +94 -0
- package/dist/esm/signers/LighterSigner.d.ts.map +1 -0
- package/dist/esm/signers/LighterSigner.js +228 -0
- package/dist/esm/signers/LighterSigner.js.map +1 -0
- package/dist/esm/signers/createAuthToken.d.ts +36 -0
- package/dist/esm/signers/createAuthToken.d.ts.map +1 -0
- package/dist/esm/signers/createAuthToken.js +42 -0
- package/dist/esm/signers/createAuthToken.js.map +1 -0
- package/dist/esm/signers/index.d.ts +11 -0
- package/dist/esm/signers/index.d.ts.map +1 -0
- package/dist/esm/signers/index.js +7 -0
- package/dist/esm/signers/index.js.map +1 -0
- package/dist/esm/signers/signActions.d.ts +54 -0
- package/dist/esm/signers/signActions.d.ts.map +1 -0
- package/dist/esm/signers/signActions.js +193 -0
- package/dist/esm/signers/signActions.js.map +1 -0
- package/dist/esm/signers/wasmLoader.d.ts +79 -0
- package/dist/esm/signers/wasmLoader.d.ts.map +1 -0
- package/dist/esm/signers/wasmLoader.js +180 -0
- package/dist/esm/signers/wasmLoader.js.map +1 -0
- package/dist/esm/types/account.d.ts +113 -0
- package/dist/esm/types/account.d.ts.map +1 -0
- package/dist/esm/types/account.js +4 -0
- package/dist/esm/types/account.js.map +1 -0
- package/dist/esm/types/action.d.ts +146 -0
- package/dist/esm/types/action.d.ts.map +1 -0
- package/dist/esm/types/action.js +50 -0
- package/dist/esm/types/action.js.map +1 -0
- package/dist/esm/types/activity.d.ts +83 -0
- package/dist/esm/types/activity.d.ts.map +1 -0
- package/dist/esm/types/activity.js +4 -0
- package/dist/esm/types/activity.js.map +1 -0
- package/dist/esm/types/asset.d.ts +134 -0
- package/dist/esm/types/asset.d.ts.map +1 -0
- package/dist/esm/types/asset.js +3 -0
- package/dist/esm/types/asset.js.map +1 -0
- package/dist/esm/types/fill.d.ts +31 -0
- package/dist/esm/types/fill.d.ts.map +1 -0
- package/dist/esm/types/fill.js +3 -0
- package/dist/esm/types/fill.js.map +1 -0
- package/dist/esm/types/index.d.ts +9 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +12 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/order.d.ts +61 -0
- package/dist/esm/types/order.d.ts.map +1 -0
- package/dist/esm/types/order.js +3 -0
- package/dist/esm/types/order.js.map +1 -0
- package/dist/esm/types/submit.d.ts +76 -0
- package/dist/esm/types/submit.d.ts.map +1 -0
- package/dist/esm/types/submit.js +3 -0
- package/dist/esm/types/submit.js.map +1 -0
- package/dist/esm/types/ws.d.ts +124 -0
- package/dist/esm/types/ws.d.ts.map +1 -0
- package/dist/esm/types/ws.js +11 -0
- package/dist/esm/types/ws.js.map +1 -0
- package/dist/esm/utils/activityCursor.d.ts +51 -0
- package/dist/esm/utils/activityCursor.d.ts.map +1 -0
- package/dist/esm/utils/activityCursor.js +99 -0
- package/dist/esm/utils/activityCursor.js.map +1 -0
- package/dist/esm/utils/apiClient.d.ts +65 -0
- package/dist/esm/utils/apiClient.d.ts.map +1 -0
- package/dist/esm/utils/apiClient.js +131 -0
- package/dist/esm/utils/apiClient.js.map +1 -0
- package/dist/esm/utils/fetchDetailedAccount.d.ts +11 -0
- package/dist/esm/utils/fetchDetailedAccount.d.ts.map +1 -0
- package/dist/esm/utils/fetchDetailedAccount.js +24 -0
- package/dist/esm/utils/fetchDetailedAccount.js.map +1 -0
- package/dist/esm/utils/index.d.ts +16 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +17 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/lighterAsset.d.ts +4 -0
- package/dist/esm/utils/lighterAsset.d.ts.map +1 -0
- package/dist/esm/utils/lighterAsset.js +9 -0
- package/dist/esm/utils/lighterAsset.js.map +1 -0
- package/dist/esm/utils/liquidation.d.ts +22 -0
- package/dist/esm/utils/liquidation.d.ts.map +1 -0
- package/dist/esm/utils/liquidation.js +31 -0
- package/dist/esm/utils/liquidation.js.map +1 -0
- package/dist/esm/utils/mapFill.d.ts +10 -0
- package/dist/esm/utils/mapFill.d.ts.map +1 -0
- package/dist/esm/utils/mapFill.js +72 -0
- package/dist/esm/utils/mapFill.js.map +1 -0
- package/dist/esm/utils/mapOpenPositions.d.ts +11 -0
- package/dist/esm/utils/mapOpenPositions.d.ts.map +1 -0
- package/dist/esm/utils/mapOpenPositions.js +12 -0
- package/dist/esm/utils/mapOpenPositions.js.map +1 -0
- package/dist/esm/utils/mapOrder.d.ts +72 -0
- package/dist/esm/utils/mapOrder.d.ts.map +1 -0
- package/dist/esm/utils/mapOrder.js +219 -0
- package/dist/esm/utils/mapOrder.js.map +1 -0
- package/dist/esm/utils/mapPosition.d.ts +9 -0
- package/dist/esm/utils/mapPosition.d.ts.map +1 -0
- package/dist/esm/utils/mapPosition.js +34 -0
- package/dist/esm/utils/mapPosition.js.map +1 -0
- package/dist/esm/utils/ohlcvInterval.d.ts +3 -0
- package/dist/esm/utils/ohlcvInterval.d.ts.map +1 -0
- package/dist/esm/utils/ohlcvInterval.js +30 -0
- package/dist/esm/utils/ohlcvInterval.js.map +1 -0
- package/dist/esm/utils/orderFormatting.d.ts +29 -0
- package/dist/esm/utils/orderFormatting.d.ts.map +1 -0
- package/dist/esm/utils/orderFormatting.js +41 -0
- package/dist/esm/utils/orderFormatting.js.map +1 -0
- package/dist/esm/utils/time.d.ts +5 -0
- package/dist/esm/utils/time.d.ts.map +1 -0
- package/dist/esm/utils/time.js +5 -0
- package/dist/esm/utils/time.js.map +1 -0
- package/dist/esm/utils/wireEncoding.d.ts +72 -0
- package/dist/esm/utils/wireEncoding.d.ts.map +1 -0
- package/dist/esm/utils/wireEncoding.js +129 -0
- package/dist/esm/utils/wireEncoding.js.map +1 -0
- package/dist/esm/websocket/LighterWsProvider.d.ts +97 -0
- package/dist/esm/websocket/LighterWsProvider.d.ts.map +1 -0
- package/dist/esm/websocket/LighterWsProvider.js +489 -0
- package/dist/esm/websocket/LighterWsProvider.js.map +1 -0
- package/dist/types/LighterProvider.d.ts +105 -0
- package/dist/types/LighterProvider.d.ts.map +1 -0
- package/dist/types/accountConfig.d.ts +14 -0
- package/dist/types/accountConfig.d.ts.map +1 -0
- package/dist/types/accountSummary.d.ts +12 -0
- package/dist/types/accountSummary.d.ts.map +1 -0
- package/dist/types/constants.d.ts +74 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/signers/LighterKeyStore.d.ts +24 -0
- package/dist/types/signers/LighterKeyStore.d.ts.map +1 -0
- package/dist/types/signers/LighterReadOnlyTokenManager.d.ts +157 -0
- package/dist/types/signers/LighterReadOnlyTokenManager.d.ts.map +1 -0
- package/dist/types/signers/LighterSigner.d.ts +94 -0
- package/dist/types/signers/LighterSigner.d.ts.map +1 -0
- package/dist/types/signers/createAuthToken.d.ts +36 -0
- package/dist/types/signers/createAuthToken.d.ts.map +1 -0
- package/dist/types/signers/index.d.ts +11 -0
- package/dist/types/signers/index.d.ts.map +1 -0
- package/dist/types/signers/signActions.d.ts +54 -0
- package/dist/types/signers/signActions.d.ts.map +1 -0
- package/dist/types/signers/wasmLoader.d.ts +79 -0
- package/dist/types/signers/wasmLoader.d.ts.map +1 -0
- package/dist/types/types/account.d.ts +113 -0
- package/dist/types/types/account.d.ts.map +1 -0
- package/dist/types/types/action.d.ts +146 -0
- package/dist/types/types/action.d.ts.map +1 -0
- package/dist/types/types/activity.d.ts +83 -0
- package/dist/types/types/activity.d.ts.map +1 -0
- package/dist/types/types/asset.d.ts +134 -0
- package/dist/types/types/asset.d.ts.map +1 -0
- package/dist/types/types/fill.d.ts +31 -0
- package/dist/types/types/fill.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +9 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/order.d.ts +61 -0
- package/dist/types/types/order.d.ts.map +1 -0
- package/dist/types/types/submit.d.ts +76 -0
- package/dist/types/types/submit.d.ts.map +1 -0
- package/dist/types/types/ws.d.ts +124 -0
- package/dist/types/types/ws.d.ts.map +1 -0
- package/dist/types/utils/activityCursor.d.ts +51 -0
- package/dist/types/utils/activityCursor.d.ts.map +1 -0
- package/dist/types/utils/apiClient.d.ts +65 -0
- package/dist/types/utils/apiClient.d.ts.map +1 -0
- package/dist/types/utils/fetchDetailedAccount.d.ts +11 -0
- package/dist/types/utils/fetchDetailedAccount.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +16 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/lighterAsset.d.ts +4 -0
- package/dist/types/utils/lighterAsset.d.ts.map +1 -0
- package/dist/types/utils/liquidation.d.ts +22 -0
- package/dist/types/utils/liquidation.d.ts.map +1 -0
- package/dist/types/utils/mapFill.d.ts +10 -0
- package/dist/types/utils/mapFill.d.ts.map +1 -0
- package/dist/types/utils/mapOpenPositions.d.ts +11 -0
- package/dist/types/utils/mapOpenPositions.d.ts.map +1 -0
- package/dist/types/utils/mapOrder.d.ts +72 -0
- package/dist/types/utils/mapOrder.d.ts.map +1 -0
- package/dist/types/utils/mapPosition.d.ts +9 -0
- package/dist/types/utils/mapPosition.d.ts.map +1 -0
- package/dist/types/utils/ohlcvInterval.d.ts +3 -0
- package/dist/types/utils/ohlcvInterval.d.ts.map +1 -0
- package/dist/types/utils/orderFormatting.d.ts +29 -0
- package/dist/types/utils/orderFormatting.d.ts.map +1 -0
- package/dist/types/utils/time.d.ts +5 -0
- package/dist/types/utils/time.d.ts.map +1 -0
- package/dist/types/utils/wireEncoding.d.ts +72 -0
- package/dist/types/utils/wireEncoding.d.ts.map +1 -0
- package/dist/types/websocket/LighterWsProvider.d.ts +97 -0
- package/dist/types/websocket/LighterWsProvider.d.ts.map +1 -0
- package/dist/wasm/lighter-signer.wasm +0 -0
- package/dist/wasm/wasm_exec.js +575 -0
- package/package.json +67 -0
- package/src/LighterProvider.ts +1167 -0
- package/src/accountConfig.ts +162 -0
- package/src/accountSummary.ts +22 -0
- package/src/constants.ts +89 -0
- package/src/index.ts +37 -0
- package/src/signers/LighterKeyStore.ts +79 -0
- package/src/signers/LighterReadOnlyTokenManager.ts +340 -0
- package/src/signers/LighterSigner.ts +400 -0
- package/src/signers/createAuthToken.ts +69 -0
- package/src/signers/index.ts +36 -0
- package/src/signers/signActions.ts +311 -0
- package/src/signers/wasmLoader.ts +293 -0
- package/src/types/account.ts +123 -0
- package/src/types/action.ts +163 -0
- package/src/types/activity.ts +94 -0
- package/src/types/asset.ts +146 -0
- package/src/types/fill.ts +42 -0
- package/src/types/index.ts +12 -0
- package/src/types/order.ts +65 -0
- package/src/types/submit.ts +83 -0
- package/src/types/ws.ts +136 -0
- package/src/utils/activityCursor.ts +150 -0
- package/src/utils/apiClient.ts +185 -0
- package/src/utils/fetchDetailedAccount.ts +46 -0
- package/src/utils/index.ts +38 -0
- package/src/utils/lighterAsset.ts +10 -0
- package/src/utils/liquidation.ts +39 -0
- package/src/utils/mapFill.ts +108 -0
- package/src/utils/mapOpenPositions.ts +18 -0
- package/src/utils/mapOrder.ts +258 -0
- package/src/utils/mapPosition.ts +42 -0
- package/src/utils/ohlcvInterval.ts +34 -0
- package/src/utils/orderFormatting.ts +46 -0
- package/src/utils/time.ts +6 -0
- package/src/utils/wireEncoding.ts +179 -0
- package/src/websocket/LighterWsProvider.ts +725 -0
- package/wasm/lighter-signer.wasm +0 -0
- package/wasm/wasm_exec.js +575 -0
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
import { cachePromise, getMarketRegistry, ReconnectingWebSocket, resolveRetryPolicy, resolveSubscribeQuote, WsProviderBase, wsLog, } from '@lifi/perps-sdk';
|
|
2
|
+
import { LIGHTER_BASE_FEE_TIER, LIGHTER_PROVIDER_KEY } from '../constants.js';
|
|
3
|
+
import { LIGHTER_RETRY_DEFAULTS, LighterApiClient } from '../utils/apiClient.js';
|
|
4
|
+
import { classifyAndMapOrders, fetchDetailedAccount, mapFill, mapPosition, } from '../utils/index.js';
|
|
5
|
+
// Public channels: `prices` (market_stats/all + spot_market_stats/all),
|
|
6
|
+
// `orderbook` (order_book/N).
|
|
7
|
+
// Authenticated channels (require an `authProvider` option):
|
|
8
|
+
// - orderUpdates → account_all_orders/{account_index}
|
|
9
|
+
// - fills → account_all_trades/{account_index}
|
|
10
|
+
// - positions → account_all_positions/{account_index}
|
|
11
|
+
//
|
|
12
|
+
// Auth pattern (per Lighter WS spec): the subscribe payload carries the
|
|
13
|
+
// token directly — `{ type: "subscribe", channel: "...", auth: "<token>" }`.
|
|
14
|
+
// Tokens are created via the Lighter WASM signer (CreateAuthToken) by the
|
|
15
|
+
// caller; we re-request a fresh token on every subscribe send so reconnects
|
|
16
|
+
// after the original token expires automatically pick up a new one.
|
|
17
|
+
//
|
|
18
|
+
// account_index is resolved per-address via `/api/v1/account?by=l1_address`
|
|
19
|
+
// and cached for the lifetime of the provider — Lighter's account index is
|
|
20
|
+
// stable for a given L1 wallet.
|
|
21
|
+
//
|
|
22
|
+
// The market identity for each `market_id` is resolved from the shared
|
|
23
|
+
// MarketRegistry. The canonical `Market.id` for Lighter is `String(market_id)`
|
|
24
|
+
// ("0", "1", …); the full market identity (base/quote `Asset`) is carried
|
|
25
|
+
// verbatim onto mapped orders/fills/positions.
|
|
26
|
+
//
|
|
27
|
+
// Orderbook is stateful: the first message is a full snapshot, subsequent
|
|
28
|
+
// messages are deltas where size=0 deletes a level.
|
|
29
|
+
const DEFAULT_WS_URL = 'wss://mainnet.zklighter.elliot.ai/stream';
|
|
30
|
+
const DEFAULT_REST_URL = 'https://mainnet.zklighter.elliot.ai';
|
|
31
|
+
const LIGHTER_AUTH_CHANNEL = {
|
|
32
|
+
orderUpdates: 'account_all_orders',
|
|
33
|
+
fills: 'account_all_trades',
|
|
34
|
+
positions: 'account_all_positions',
|
|
35
|
+
};
|
|
36
|
+
/** Channels whose handlers resolve market identity from the registry. */
|
|
37
|
+
function channelNeedsMarkets(channel) {
|
|
38
|
+
return (channel === 'orderUpdates' || channel === 'fills' || channel === 'positions');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Lighter realtime WS provider (extends {@link WsProviderBase}): subscribes to
|
|
42
|
+
* Lighter's WS channels (orderbook, prices, orders, positions), attaching auth
|
|
43
|
+
* tokens to gated channels. Construct via {@link lighterWsProvider}.
|
|
44
|
+
*
|
|
45
|
+
* @public
|
|
46
|
+
*/
|
|
47
|
+
export class LighterWsProvider extends WsProviderBase {
|
|
48
|
+
api;
|
|
49
|
+
authProvider;
|
|
50
|
+
client;
|
|
51
|
+
orderbooks = new Map();
|
|
52
|
+
lastPricesByAssetId = {};
|
|
53
|
+
/**
|
|
54
|
+
* `address → market_id → Position`. `subscribed/...` frames reseed it and
|
|
55
|
+
* `update/...` frames upsert into it (zero size deletes), so every emission
|
|
56
|
+
* is a full open-position snapshot per the `PositionsEvent` contract.
|
|
57
|
+
*/
|
|
58
|
+
positionsByAddress = new Map();
|
|
59
|
+
registry;
|
|
60
|
+
accountIndexCache = new Map();
|
|
61
|
+
accountIndexPromises = new Map();
|
|
62
|
+
constructor(wsUrl = DEFAULT_WS_URL, providerKey = 'lighter', options = {}, client) {
|
|
63
|
+
super(new ReconnectingWebSocket(wsUrl, { pingPayload: '{"type":"ping"}' }), providerKey);
|
|
64
|
+
this.api = new LighterApiClient(options.restUrl ?? DEFAULT_REST_URL, {
|
|
65
|
+
policy: resolveRetryPolicy(LIGHTER_RETRY_DEFAULTS, client?.config.retry, LIGHTER_PROVIDER_KEY),
|
|
66
|
+
fetchImpl: client?.config.fetch,
|
|
67
|
+
});
|
|
68
|
+
this.authProvider = options.authProvider;
|
|
69
|
+
this.client = client;
|
|
70
|
+
this.registry = client && getMarketRegistry(client, providerKey);
|
|
71
|
+
}
|
|
72
|
+
async subscribeQuote(params, onQuote) {
|
|
73
|
+
const client = this.client;
|
|
74
|
+
if (client === undefined) {
|
|
75
|
+
throw new Error('LighterWsProvider: PerpsSDKClient not provided; cannot stream quotes. ' +
|
|
76
|
+
'Construct via `lighterWsProvider({...})` and register with PerpsWsClient.');
|
|
77
|
+
}
|
|
78
|
+
return resolveSubscribeQuote(client, this.providerKey, this, params, LIGHTER_BASE_FEE_TIER, onQuote);
|
|
79
|
+
}
|
|
80
|
+
async openChannel(sub) {
|
|
81
|
+
// Lighter has no live OHLC channel — there's nothing to subscribe to.
|
|
82
|
+
// Return a no-op unsubscribe so the caller's UX (chart still rendering
|
|
83
|
+
// from REST history + price-tick mid line) is unaffected, instead of
|
|
84
|
+
// throwing and surfacing a console error on every chart mount.
|
|
85
|
+
if (sub.channel === 'candle') {
|
|
86
|
+
return () => { };
|
|
87
|
+
}
|
|
88
|
+
// Only the auth channels (orders/fills/positions) resolve markets.
|
|
89
|
+
// `prices`/`orderbook` are keyed purely by `String(market_id)`, so gating
|
|
90
|
+
// them on the registry sync would let a failed `/markets` fetch kill live
|
|
91
|
+
// price ticks.
|
|
92
|
+
if (channelNeedsMarkets(sub.channel)) {
|
|
93
|
+
await this.registry?.sync();
|
|
94
|
+
}
|
|
95
|
+
const wireChannels = await this.resolveChannel(sub);
|
|
96
|
+
// Registry keyed by the wire channel (unique per sub), so replay-failure
|
|
97
|
+
// logs name the channel the venue knows. A logical sub may fan out to
|
|
98
|
+
// several wire channels (e.g. `prices`), each registered independently.
|
|
99
|
+
for (const { channel, needsAuth, address } of wireChannels) {
|
|
100
|
+
await this.registerSub(channel, { channel, needsAuth, address });
|
|
101
|
+
}
|
|
102
|
+
await this.rws.ready();
|
|
103
|
+
return () => {
|
|
104
|
+
for (const { channel } of wireChannels) {
|
|
105
|
+
this.unregisterSub(channel);
|
|
106
|
+
this.rws.send(JSON.stringify({ type: 'unsubscribe', channel }));
|
|
107
|
+
}
|
|
108
|
+
if (sub.channel === 'orderbook') {
|
|
109
|
+
const id = Number(sub.marketId);
|
|
110
|
+
if (Number.isFinite(id)) {
|
|
111
|
+
this.orderbooks.delete(id);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (sub.channel === 'positions') {
|
|
115
|
+
this.positionsByAddress.delete(sub.address.toLowerCase());
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
onClose() {
|
|
120
|
+
this.orderbooks.clear();
|
|
121
|
+
this.lastPricesByAssetId = {};
|
|
122
|
+
this.positionsByAddress.clear();
|
|
123
|
+
}
|
|
124
|
+
async sendSubscribe({ channel, needsAuth, address, }) {
|
|
125
|
+
const payload = {
|
|
126
|
+
type: 'subscribe',
|
|
127
|
+
channel,
|
|
128
|
+
};
|
|
129
|
+
if (needsAuth) {
|
|
130
|
+
if (!this.authProvider || !address) {
|
|
131
|
+
throw new Error(`Lighter WS channel '${channel}' requires authentication but no authProvider was supplied.`);
|
|
132
|
+
}
|
|
133
|
+
const token = await this.authProvider(address);
|
|
134
|
+
if (!token) {
|
|
135
|
+
throw new Error(`Lighter WS channel '${channel}' requires authentication but no token was available for ${address}.`);
|
|
136
|
+
}
|
|
137
|
+
payload.auth = token;
|
|
138
|
+
}
|
|
139
|
+
this.rws.send(JSON.stringify(payload));
|
|
140
|
+
}
|
|
141
|
+
toKey(sub) {
|
|
142
|
+
switch (sub.channel) {
|
|
143
|
+
case 'prices':
|
|
144
|
+
return 'prices';
|
|
145
|
+
case 'orderbook':
|
|
146
|
+
return `orderbook:${sub.marketId}`;
|
|
147
|
+
case 'orderUpdates':
|
|
148
|
+
return `orderUpdates:${sub.address.toLowerCase()}`;
|
|
149
|
+
case 'fills':
|
|
150
|
+
return `fills:${sub.address.toLowerCase()}`;
|
|
151
|
+
case 'positions':
|
|
152
|
+
return `positions:${sub.address.toLowerCase()}`;
|
|
153
|
+
// No live wire sub (openChannel returns a no-op), but a stable key is
|
|
154
|
+
// still needed so the base's fan-out registry can track/release it.
|
|
155
|
+
case 'candle':
|
|
156
|
+
return `candle:${sub.marketId}:${sub.interval}`;
|
|
157
|
+
case 'spotBalances':
|
|
158
|
+
throw new Error(`Lighter WS does not support channel: ${sub.channel}.`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
async resolveChannel(sub) {
|
|
162
|
+
if (sub.channel === 'prices') {
|
|
163
|
+
// Lighter splits stats across two wire channels: perp markets on
|
|
164
|
+
// `market_stats/all`, spot markets on `spot_market_stats/all`. Both feed
|
|
165
|
+
// the single aggregated `prices` emit.
|
|
166
|
+
return [
|
|
167
|
+
{ channel: 'market_stats/all', needsAuth: false },
|
|
168
|
+
{ channel: 'spot_market_stats/all', needsAuth: false },
|
|
169
|
+
];
|
|
170
|
+
}
|
|
171
|
+
if (sub.channel === 'orderbook') {
|
|
172
|
+
const id = Number(sub.marketId);
|
|
173
|
+
if (!Number.isFinite(id)) {
|
|
174
|
+
throw new Error(`Lighter WS: unknown market for marketId '${sub.marketId}'. ` +
|
|
175
|
+
'MarketId must be a numeric market_id string.');
|
|
176
|
+
}
|
|
177
|
+
return [{ channel: `order_book/${id}`, needsAuth: false }];
|
|
178
|
+
}
|
|
179
|
+
if (sub.channel === 'orderUpdates' ||
|
|
180
|
+
sub.channel === 'fills' ||
|
|
181
|
+
sub.channel === 'positions') {
|
|
182
|
+
const accountIndex = await this.resolveAccountIndex(sub.address);
|
|
183
|
+
const lighterChannel = LIGHTER_AUTH_CHANNEL[sub.channel];
|
|
184
|
+
// `account_all_trades` is publicly readable per the Lighter WS spec —
|
|
185
|
+
// an auth token only filters events to the user's own account, which
|
|
186
|
+
// we don't currently use to scope further. Skip the token here so a
|
|
187
|
+
// user without a registered API key still gets their fill stream.
|
|
188
|
+
const needsAuth = sub.channel !== 'fills';
|
|
189
|
+
return [
|
|
190
|
+
{
|
|
191
|
+
channel: `${lighterChannel}/${accountIndex}`,
|
|
192
|
+
needsAuth,
|
|
193
|
+
address: sub.address,
|
|
194
|
+
},
|
|
195
|
+
];
|
|
196
|
+
}
|
|
197
|
+
throw new Error(`Lighter WS does not support channel: ${sub.channel}.`);
|
|
198
|
+
}
|
|
199
|
+
async resolveAccountIndex(address) {
|
|
200
|
+
const addressKey = address.toLowerCase();
|
|
201
|
+
const cached = this.accountIndexCache.get(addressKey);
|
|
202
|
+
if (cached !== undefined) {
|
|
203
|
+
return cached;
|
|
204
|
+
}
|
|
205
|
+
const idx = await cachePromise(() => this.accountIndexPromises.get(addressKey), (p) => {
|
|
206
|
+
if (p === undefined) {
|
|
207
|
+
this.accountIndexPromises.delete(addressKey);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
this.accountIndexPromises.set(addressKey, p);
|
|
211
|
+
}
|
|
212
|
+
}, () => this.fetchAccountIndex(address));
|
|
213
|
+
this.accountIndexCache.set(addressKey, idx);
|
|
214
|
+
return idx;
|
|
215
|
+
}
|
|
216
|
+
async fetchAccountIndex(address) {
|
|
217
|
+
const account = await fetchDetailedAccount(this.api, address);
|
|
218
|
+
return account.index;
|
|
219
|
+
}
|
|
220
|
+
handleMessage(raw) {
|
|
221
|
+
let msg;
|
|
222
|
+
try {
|
|
223
|
+
msg = JSON.parse(raw);
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
wsLog.parseFailure(LIGHTER_PROVIDER_KEY, raw);
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
if (!isValidLighterFrame(msg)) {
|
|
230
|
+
wsLog.parseFailure(LIGHTER_PROVIDER_KEY, raw);
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
try {
|
|
234
|
+
this.dispatch(msg);
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
wsLog.handlerFailure(LIGHTER_PROVIDER_KEY, error);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
dispatch(msg) {
|
|
241
|
+
if (msg.type === 'ping') {
|
|
242
|
+
this.rws.send(JSON.stringify({ type: 'pong' }));
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
if (msg.type === 'subscribed/market_stats' ||
|
|
246
|
+
msg.type === 'update/market_stats') {
|
|
247
|
+
this.handleMarketStats(msg.market_stats);
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
if (msg.type === 'subscribed/spot_market_stats' ||
|
|
251
|
+
msg.type === 'update/spot_market_stats') {
|
|
252
|
+
this.handleMarketStats(msg.spot_market_stats);
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
if (msg.type === 'subscribed/order_book' ||
|
|
256
|
+
msg.type === 'update/order_book') {
|
|
257
|
+
this.handleOrderBook(msg, msg.type === 'subscribed/order_book');
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
if (msg.type === 'subscribed/account_all_orders' ||
|
|
261
|
+
msg.type === 'update/account_all_orders') {
|
|
262
|
+
this.handleAccountOrders(msg);
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
if (msg.type === 'subscribed/account_all_trades' ||
|
|
266
|
+
msg.type === 'update/account_all_trades') {
|
|
267
|
+
this.handleAccountTrades(msg);
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
if (msg.type === 'subscribed/account_all_positions' ||
|
|
271
|
+
msg.type === 'update/account_all_positions') {
|
|
272
|
+
this.handleAccountPositions(msg, msg.type === 'subscribed/account_all_positions');
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
handleAccountOrders(msg) {
|
|
277
|
+
const address = this.addressFromChannel(msg.channel, 'account_all_orders');
|
|
278
|
+
if (!address) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
const raw = collectAuthChannelItems(msg, 'orders');
|
|
282
|
+
// A registry miss warns once and schedules a cooldown-gated refetch (the
|
|
283
|
+
// id may have listed after the snapshot); the order is skipped.
|
|
284
|
+
const data = classifyAndMapOrders(raw, (marketIndex) => this.registry?.get(String(marketIndex)));
|
|
285
|
+
this.emit(`orderUpdates:${address}`, {
|
|
286
|
+
channel: 'orderUpdates',
|
|
287
|
+
data,
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
handleAccountTrades(msg) {
|
|
291
|
+
const address = this.addressFromChannel(msg.channel, 'account_all_trades');
|
|
292
|
+
if (!address) {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
const accountIndex = this.accountIndexCache.get(address);
|
|
296
|
+
if (accountIndex === undefined) {
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
const raw = collectAuthChannelItems(msg, 'trades');
|
|
300
|
+
const fills = raw.flatMap((t) => {
|
|
301
|
+
const market = this.registry?.get(String(t.market_id));
|
|
302
|
+
return market ? [mapFill(t, accountIndex, market)] : [];
|
|
303
|
+
});
|
|
304
|
+
this.emit(`fills:${address}`, { channel: 'fills', data: fills });
|
|
305
|
+
}
|
|
306
|
+
handleAccountPositions(msg, isSnapshot) {
|
|
307
|
+
const address = this.addressFromChannel(msg.channel, 'account_all_positions');
|
|
308
|
+
if (!address) {
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
const raw = collectAuthChannelItems(msg, 'positions');
|
|
312
|
+
let state = this.positionsByAddress.get(address);
|
|
313
|
+
if (!state || isSnapshot) {
|
|
314
|
+
state = new Map();
|
|
315
|
+
this.positionsByAddress.set(address, state);
|
|
316
|
+
}
|
|
317
|
+
for (const p of raw) {
|
|
318
|
+
if (Number.parseFloat(p.position) === 0) {
|
|
319
|
+
state.delete(p.market_id);
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
const market = this.registry?.get(String(p.market_id));
|
|
323
|
+
if (market) {
|
|
324
|
+
state.set(p.market_id, mapPosition(p, market));
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
this.emit(`positions:${address}`, {
|
|
329
|
+
channel: 'positions',
|
|
330
|
+
data: [...state.values()],
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Reverse-lookup the L1 address from an auth-channel message. The subscribe
|
|
335
|
+
* payload uses `/` (e.g. `account_all_orders/42`) but the server sends
|
|
336
|
+
* responses with `:` (e.g. `account_all_orders:42`) — both forms are
|
|
337
|
+
* accepted here so reconnect resubscriptions and live updates both route
|
|
338
|
+
* correctly.
|
|
339
|
+
*/
|
|
340
|
+
addressFromChannel(channel, prefix) {
|
|
341
|
+
if (!channel?.startsWith(prefix)) {
|
|
342
|
+
return null;
|
|
343
|
+
}
|
|
344
|
+
const sep = channel[prefix.length];
|
|
345
|
+
if (sep !== '/' && sep !== ':') {
|
|
346
|
+
return null;
|
|
347
|
+
}
|
|
348
|
+
const idx = Number(channel.slice(prefix.length + 1));
|
|
349
|
+
if (!Number.isFinite(idx)) {
|
|
350
|
+
return null;
|
|
351
|
+
}
|
|
352
|
+
for (const [addr, cachedIdx] of this.accountIndexCache) {
|
|
353
|
+
if (cachedIdx === idx) {
|
|
354
|
+
return addr;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return null;
|
|
358
|
+
}
|
|
359
|
+
handleMarketStats(stats) {
|
|
360
|
+
if (!stats) {
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
const updates = {};
|
|
364
|
+
for (const entry of Object.values(stats)) {
|
|
365
|
+
updates[String(entry.market_id)] = entry.last_trade_price;
|
|
366
|
+
}
|
|
367
|
+
if (Object.keys(updates).length === 0) {
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
this.lastPricesByAssetId = { ...this.lastPricesByAssetId, ...updates };
|
|
371
|
+
this.emit('prices', {
|
|
372
|
+
channel: 'prices',
|
|
373
|
+
data: this.lastPricesByAssetId,
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
handleOrderBook(msg, isSnapshot) {
|
|
377
|
+
const marketId = this.marketIdFromChannel(msg.channel);
|
|
378
|
+
if (marketId === null) {
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
const assetId = String(marketId);
|
|
382
|
+
let state = this.orderbooks.get(marketId);
|
|
383
|
+
if (!state || isSnapshot) {
|
|
384
|
+
state = { bids: new Map(), asks: new Map(), assetId };
|
|
385
|
+
this.orderbooks.set(marketId, state);
|
|
386
|
+
}
|
|
387
|
+
applyLevels(state.bids, msg.order_book.bids);
|
|
388
|
+
applyLevels(state.asks, msg.order_book.asks);
|
|
389
|
+
this.emit(`orderbook:${assetId}`, {
|
|
390
|
+
channel: 'orderbook',
|
|
391
|
+
data: {
|
|
392
|
+
provider: this.providerKey,
|
|
393
|
+
marketId: assetId,
|
|
394
|
+
bids: mapToLevels(state.bids, (a, b) => Number(b.price) - Number(a.price)),
|
|
395
|
+
asks: mapToLevels(state.asks, (a, b) => Number(a.price) - Number(b.price)),
|
|
396
|
+
timestamp: Date.now(),
|
|
397
|
+
},
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
marketIdFromChannel(channel) {
|
|
401
|
+
if (!channel?.startsWith('order_book')) {
|
|
402
|
+
return null;
|
|
403
|
+
}
|
|
404
|
+
const tail = channel.slice('order_book'.length);
|
|
405
|
+
if (tail.length < 2 || (tail[0] !== '/' && tail[0] !== ':')) {
|
|
406
|
+
return null;
|
|
407
|
+
}
|
|
408
|
+
const n = Number(tail.slice(1));
|
|
409
|
+
return Number.isFinite(n) ? n : null;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
const isObject = (v) => typeof v === 'object' && v !== null;
|
|
413
|
+
/**
|
|
414
|
+
* Minimal presence/type check of the discriminating `type` and the required
|
|
415
|
+
* fields the matching handler dereferences without its own guard (currently
|
|
416
|
+
* only `order_book`, whose handler reads `order_book.bids`/`.asks`). A frame
|
|
417
|
+
* that parses but fails this is a bad frame (log + skip), distinct from a
|
|
418
|
+
* handler that throws on otherwise-shaped data. Frames for other types pass
|
|
419
|
+
* through to `dispatch`, which ignores types it does not recognise.
|
|
420
|
+
*/
|
|
421
|
+
function isValidLighterFrame(msg) {
|
|
422
|
+
if (typeof msg.type !== 'string') {
|
|
423
|
+
return false;
|
|
424
|
+
}
|
|
425
|
+
if (msg.type === 'subscribed/order_book' ||
|
|
426
|
+
msg.type === 'update/order_book') {
|
|
427
|
+
const book = msg.order_book;
|
|
428
|
+
return (isObject(book) && Array.isArray(book.bids) && Array.isArray(book.asks));
|
|
429
|
+
}
|
|
430
|
+
return true;
|
|
431
|
+
}
|
|
432
|
+
function applyLevels(book, levels) {
|
|
433
|
+
for (const level of levels) {
|
|
434
|
+
if (level.size === '0' || Number(level.size) === 0) {
|
|
435
|
+
book.delete(level.price);
|
|
436
|
+
}
|
|
437
|
+
else {
|
|
438
|
+
book.set(level.price, level.size);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
function mapToLevels(book, compare) {
|
|
443
|
+
const levels = [...book].map(([price, size]) => ({ price, size }));
|
|
444
|
+
levels.sort(compare);
|
|
445
|
+
return levels;
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Extract items from an auth-channel payload field. The field may be:
|
|
449
|
+
* - a flat array (e.g. `trades: []` on the initial subscribed snapshot)
|
|
450
|
+
* - an object indexed by market index with array values
|
|
451
|
+
* (e.g. `orders: { "0": [Order] }` on update messages)
|
|
452
|
+
* - an object indexed by market index with single-object values
|
|
453
|
+
* (e.g. `positions: { "0": Position }` — one position per market)
|
|
454
|
+
*
|
|
455
|
+
* All three shapes are flattened to a single T[] for uniform downstream
|
|
456
|
+
* handling. Returns undefined when the field is absent, so the caller can
|
|
457
|
+
* fall back to a nested `data` wrapper (kept for compatibility with older
|
|
458
|
+
* Lighter WS versions).
|
|
459
|
+
*/
|
|
460
|
+
function extractItems(value) {
|
|
461
|
+
if (value === undefined || value === null) {
|
|
462
|
+
return undefined;
|
|
463
|
+
}
|
|
464
|
+
if (Array.isArray(value)) {
|
|
465
|
+
return value;
|
|
466
|
+
}
|
|
467
|
+
if (typeof value === 'object') {
|
|
468
|
+
return Object.values(value).flatMap((v) => Array.isArray(v) ? v : [v]);
|
|
469
|
+
}
|
|
470
|
+
return undefined;
|
|
471
|
+
}
|
|
472
|
+
function collectAuthChannelItems(msg, field) {
|
|
473
|
+
return (extractItems(msg[field]) ??
|
|
474
|
+
extractItems(msg.data?.[field]) ??
|
|
475
|
+
[]);
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* `WsProviderFactory` constructor for Lighter — pass to
|
|
479
|
+
* `new PerpsWsClient(client, { wsProviders: { lighter: lighterWsProvider({ authProvider }) } })`.
|
|
480
|
+
*
|
|
481
|
+
* Closes over the per-instance options (auth provider, restUrl override) so
|
|
482
|
+
* `PerpsWsClient` can call the returned factory with just
|
|
483
|
+
* `({ provider, wsUrl, markets })` at subscribe time. `markets` is
|
|
484
|
+
* unused — Lighter advertises a single venue, no sub-DEX filtering.
|
|
485
|
+
*
|
|
486
|
+
* @public
|
|
487
|
+
*/
|
|
488
|
+
export const lighterWsProvider = (options) => ({ provider, wsUrl, client }) => new LighterWsProvider(wsUrl, provider, options, client);
|
|
489
|
+
//# sourceMappingURL=LighterWsProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LighterWsProvider.js","sourceRoot":"","sources":["../../../src/websocket/LighterWsProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { type PerpsProviderPlugin } from '@lifi/perps-sdk';
|
|
2
|
+
import type { Address } from 'viem';
|
|
3
|
+
import type { LighterKeyStore } from './signers/LighterKeyStore.js';
|
|
4
|
+
import type { LighterReadOnlyTokenManagerOptions } from './signers/LighterReadOnlyTokenManager.js';
|
|
5
|
+
import type { LighterSigner } from './signers/LighterSigner.js';
|
|
6
|
+
/**
|
|
7
|
+
* Construction options for the Lighter {@link PerpsProviderPlugin}.
|
|
8
|
+
*
|
|
9
|
+
* `restUrl` defaults to Lighter mainnet; pass a testnet URL or a self-hosted
|
|
10
|
+
* mirror to override.
|
|
11
|
+
*
|
|
12
|
+
* Auth-token resolution order for the auth-gated reads:
|
|
13
|
+
* 1. Per-call `options.lighterAuthToken`
|
|
14
|
+
* 2. Constructor `authToken` (string or async factory)
|
|
15
|
+
* 3. Persisted long-lived read-only token (via `readOnlyTokenOptions`'s
|
|
16
|
+
* storage), keyed on the resolved Lighter `accountIndex`
|
|
17
|
+
* 4. Fresh 1h create via the WASM signer + the user's registered API key
|
|
18
|
+
* from `keyStore`
|
|
19
|
+
*
|
|
20
|
+
* When none of these yields a token the auth-gated reads degrade gracefully:
|
|
21
|
+
* - `getOrders`, `getActivity` return empty results (mirrors backend behaviour)
|
|
22
|
+
* - `getOrder` throws `Unauthorized`
|
|
23
|
+
* - `getAccount` returns zero fee tier rather than failing
|
|
24
|
+
*
|
|
25
|
+
* Write actions (`signActions` for the WASM_BLOB / EVM_TX arms) require
|
|
26
|
+
* `signer` and `keyStore` to be supplied.
|
|
27
|
+
*
|
|
28
|
+
* @public
|
|
29
|
+
*/
|
|
30
|
+
export interface LighterProviderOptions {
|
|
31
|
+
/** Lighter REST base URL. Defaults to mainnet. */
|
|
32
|
+
restUrl?: string;
|
|
33
|
+
/** Pre-created Lighter read-only bearer. */
|
|
34
|
+
authToken?: string | (() => string | Promise<string>);
|
|
35
|
+
/**
|
|
36
|
+
* WASM signer instance. Required for `signActions` (write actions) and
|
|
37
|
+
* for on-demand auth-token creating from the user's API key. The default
|
|
38
|
+
* configuration loads the WASM blob shipped with this package.
|
|
39
|
+
*/
|
|
40
|
+
signer?: LighterSigner;
|
|
41
|
+
/**
|
|
42
|
+
* Store for the user's per-address Lighter API keypair. Required for
|
|
43
|
+
* `signActions` (write actions) and for on-demand auth-token creating.
|
|
44
|
+
*/
|
|
45
|
+
keyStore?: LighterKeyStore;
|
|
46
|
+
/**
|
|
47
|
+
* Injection overrides (storage, fetcher, clock, host) for the read-only
|
|
48
|
+
* token manager, which is always active — Lighter reads create a long-lived
|
|
49
|
+
* read-only token on first use and reuse it thereafter. The host defaults to
|
|
50
|
+
* `restUrl`. This does not enable or disable the manager; it only overrides
|
|
51
|
+
* its dependencies (primarily for tests / non-browser storage).
|
|
52
|
+
*/
|
|
53
|
+
readOnlyTokenOptions?: LighterReadOnlyTokenManagerOptions;
|
|
54
|
+
/** Token lifetime for on-demand standard-token creates (Lighter caps at 8h). Default 1h. */
|
|
55
|
+
tokenLifetimeSeconds?: number;
|
|
56
|
+
/** Re-create when the cached standard token's remaining life is below this. Default 60s. */
|
|
57
|
+
tokenRenewBufferSeconds?: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Lighter provider plugin extended with a public `resolveAuthToken` so the
|
|
61
|
+
* WS layer can share the same token-resolution closure that the read methods
|
|
62
|
+
* use internally. The base {@link PerpsProviderPlugin} contract stays
|
|
63
|
+
* provider-agnostic — this extension is opt-in for callers that explicitly
|
|
64
|
+
* type against it.
|
|
65
|
+
*
|
|
66
|
+
* @public
|
|
67
|
+
*/
|
|
68
|
+
export interface LighterPerpsProvider extends PerpsProviderPlugin {
|
|
69
|
+
/**
|
|
70
|
+
* Resolve a Lighter auth token for `address`, following the resolution order
|
|
71
|
+
* documented on {@link LighterProviderOptions} (the per-call override does not
|
|
72
|
+
* apply here). Returns `undefined` when no source can produce a token —
|
|
73
|
+
* callers degrade gracefully.
|
|
74
|
+
*/
|
|
75
|
+
resolveAuthToken(address: Address): Promise<string | undefined>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Lighter provider plugin factory. Returns an object implementing
|
|
79
|
+
* {@link PerpsProviderPlugin}, mirroring the `EthereumProvider()` / `hyperliquidProvider()`
|
|
80
|
+
* shape used by the rest of the LI.FI SDK family.
|
|
81
|
+
*
|
|
82
|
+
* Read functions call Lighter's REST API directly with no LI.FI backend hop.
|
|
83
|
+
* Auth-gated reads resolve their token via the order documented on
|
|
84
|
+
* {@link LighterProviderOptions}.
|
|
85
|
+
*
|
|
86
|
+
* Write actions (`WASM_BLOB` and `EVM_TX` signing) are dispatched via
|
|
87
|
+
* `signActions` — `PerpsClient.execute` delegates those arms here.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* const client = createPerpsClient({
|
|
92
|
+
* integrator: 'my-app',
|
|
93
|
+
* providers: [lighterProvider()],
|
|
94
|
+
* })
|
|
95
|
+
* ```
|
|
96
|
+
* @public
|
|
97
|
+
*/
|
|
98
|
+
export declare const lighterProvider: (options?: LighterProviderOptions) => LighterPerpsProvider;
|
|
99
|
+
/**
|
|
100
|
+
* Alias matching `@lifi/sdk`'s capitalised factory naming (`EVM()`, `EthereumProvider()`).
|
|
101
|
+
*
|
|
102
|
+
* @public
|
|
103
|
+
*/
|
|
104
|
+
export declare const Lighter: (options?: LighterProviderOptions) => LighterPerpsProvider;
|
|
105
|
+
//# sourceMappingURL=LighterProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LighterProvider.d.ts","sourceRoot":"","sources":["../../src/LighterProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,mBAAmB,EAazB,MAAM,iBAAiB,CAAA;AAsBxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAcnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,0CAA0C,CAAA;AAElG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AA4E/D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,sBAAsB;IACrC,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IACrD;;;;OAIG;IACH,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAA;IAC1B;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,kCAAkC,CAAA;IACzD,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,4FAA4F;IAC5F,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC;AAQD;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D;;;;;OAKG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CAChE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAS,sBAA2B,KACnC,oBA25BF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,OAAO,aAn6BT,sBAAsB,KAC9B,oBAk6BmC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AccountConfigSetting, LighterAccountConfig, ProviderAction } from '@lifi/perps-types';
|
|
2
|
+
/**
|
|
3
|
+
* Project the union of Lighter setup + options descriptors against the typed
|
|
4
|
+
* `LighterAccountConfig`. Produces exactly one `AccountConfigSetting` per
|
|
5
|
+
* descriptor, in `setup`-then-`options` order (preserving the order in which
|
|
6
|
+
* the backend emits them).
|
|
7
|
+
*
|
|
8
|
+
* @param config Typed account state for the Lighter account.
|
|
9
|
+
* @param setup `Provider.setup` array as emitted by `/providers`.
|
|
10
|
+
* @param options `Provider.options` array as emitted by `/providers`.
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
export declare function projectLighterConfigSettings(config: LighterAccountConfig, setup: ProviderAction[], options: ProviderAction[]): AccountConfigSetting[];
|
|
14
|
+
//# sourceMappingURL=accountConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountConfig.d.ts","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACf,MAAM,mBAAmB,CAAA;AAyI1B;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,EAC5B,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,cAAc,EAAE,GACxB,oBAAoB,EAAE,CAIxB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AccountResponse, AccountSummary, Position } from '@lifi/perps-types';
|
|
2
|
+
/**
|
|
3
|
+
* Roll a Lighter {@link AccountResponse} up into an {@link AccountSummary}.
|
|
4
|
+
* Lighter has a single flat collateral model with no abstraction modes: the
|
|
5
|
+
* collateral rows hold `available_balance` (free margin), so available margin
|
|
6
|
+
* is the collateral as-is and the locked margin (carried by the positions'
|
|
7
|
+
* `marginUsed`) is added back for the gross portfolio value.
|
|
8
|
+
*
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
export declare function summarizeLighterAccount(account: AccountResponse, positions: Position[]): AccountSummary;
|
|
12
|
+
//# sourceMappingURL=accountSummary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountSummary.d.ts","sourceRoot":"","sources":["../../src/accountSummary.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,QAAQ,EACT,MAAM,mBAAmB,CAAA;AAE1B;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,QAAQ,EAAE,GACpB,cAAc,CAEhB"}
|