@lifi/perps-sdk-provider-lighter 34.0.0 → 35.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.
Files changed (82) hide show
  1. package/dist/cjs/LighterProvider.d.ts +0 -1
  2. package/dist/cjs/LighterProvider.d.ts.map +1 -1
  3. package/dist/cjs/LighterProvider.js +50 -44
  4. package/dist/cjs/LighterProvider.js.map +1 -1
  5. package/dist/cjs/accountSummary.d.ts.map +1 -1
  6. package/dist/cjs/accountSummary.js +3 -6
  7. package/dist/cjs/accountSummary.js.map +1 -1
  8. package/dist/cjs/constants.d.ts +1 -0
  9. package/dist/cjs/constants.d.ts.map +1 -1
  10. package/dist/cjs/constants.js +2 -1
  11. package/dist/cjs/constants.js.map +1 -1
  12. package/dist/cjs/index.d.ts +1 -1
  13. package/dist/cjs/index.d.ts.map +1 -1
  14. package/dist/cjs/index.js +2 -1
  15. package/dist/cjs/index.js.map +1 -1
  16. package/dist/cjs/signers/createAuthToken.d.ts.map +1 -1
  17. package/dist/cjs/signers/createAuthToken.js.map +1 -1
  18. package/dist/cjs/utils/mapPosition.d.ts.map +1 -1
  19. package/dist/cjs/utils/mapPosition.js +4 -1
  20. package/dist/cjs/utils/mapPosition.js.map +1 -1
  21. package/dist/cjs/utils/settlementPool.d.ts +6 -0
  22. package/dist/cjs/utils/settlementPool.d.ts.map +1 -0
  23. package/dist/cjs/utils/settlementPool.js +21 -0
  24. package/dist/cjs/utils/settlementPool.js.map +1 -0
  25. package/dist/cjs/utils/transferMargin.d.ts.map +1 -1
  26. package/dist/cjs/utils/transferMargin.js +1 -6
  27. package/dist/cjs/utils/transferMargin.js.map +1 -1
  28. package/dist/esm/LighterProvider.d.ts +7 -11
  29. package/dist/esm/LighterProvider.d.ts.map +1 -1
  30. package/dist/esm/LighterProvider.js +60 -51
  31. package/dist/esm/LighterProvider.js.map +1 -1
  32. package/dist/esm/accountSummary.d.ts +2 -1
  33. package/dist/esm/accountSummary.d.ts.map +1 -1
  34. package/dist/esm/accountSummary.js +5 -7
  35. package/dist/esm/accountSummary.js.map +1 -1
  36. package/dist/esm/constants.d.ts +8 -0
  37. package/dist/esm/constants.d.ts.map +1 -1
  38. package/dist/esm/constants.js +8 -0
  39. package/dist/esm/constants.js.map +1 -1
  40. package/dist/esm/index.d.ts +1 -1
  41. package/dist/esm/index.d.ts.map +1 -1
  42. package/dist/esm/index.js +1 -1
  43. package/dist/esm/index.js.map +1 -1
  44. package/dist/esm/signers/createAuthToken.d.ts +1 -2
  45. package/dist/esm/signers/createAuthToken.d.ts.map +1 -1
  46. package/dist/esm/signers/createAuthToken.js +1 -2
  47. package/dist/esm/signers/createAuthToken.js.map +1 -1
  48. package/dist/esm/utils/mapPosition.d.ts +4 -3
  49. package/dist/esm/utils/mapPosition.d.ts.map +1 -1
  50. package/dist/esm/utils/mapPosition.js +9 -5
  51. package/dist/esm/utils/mapPosition.js.map +1 -1
  52. package/dist/esm/utils/settlementPool.d.ts +14 -0
  53. package/dist/esm/utils/settlementPool.d.ts.map +1 -0
  54. package/dist/esm/utils/settlementPool.js +23 -0
  55. package/dist/esm/utils/settlementPool.js.map +1 -0
  56. package/dist/esm/utils/transferMargin.d.ts.map +1 -1
  57. package/dist/esm/utils/transferMargin.js +2 -7
  58. package/dist/esm/utils/transferMargin.js.map +1 -1
  59. package/dist/types/LighterProvider.d.ts +7 -11
  60. package/dist/types/LighterProvider.d.ts.map +1 -1
  61. package/dist/types/accountSummary.d.ts +2 -1
  62. package/dist/types/accountSummary.d.ts.map +1 -1
  63. package/dist/types/constants.d.ts +8 -0
  64. package/dist/types/constants.d.ts.map +1 -1
  65. package/dist/types/index.d.ts +1 -1
  66. package/dist/types/index.d.ts.map +1 -1
  67. package/dist/types/signers/createAuthToken.d.ts +1 -2
  68. package/dist/types/signers/createAuthToken.d.ts.map +1 -1
  69. package/dist/types/utils/mapPosition.d.ts +4 -3
  70. package/dist/types/utils/mapPosition.d.ts.map +1 -1
  71. package/dist/types/utils/settlementPool.d.ts +14 -0
  72. package/dist/types/utils/settlementPool.d.ts.map +1 -0
  73. package/dist/types/utils/transferMargin.d.ts.map +1 -1
  74. package/package.json +3 -3
  75. package/src/LighterProvider.ts +98 -90
  76. package/src/accountSummary.ts +10 -10
  77. package/src/constants.ts +9 -0
  78. package/src/index.ts +1 -0
  79. package/src/signers/createAuthToken.ts +1 -2
  80. package/src/utils/mapPosition.ts +12 -5
  81. package/src/utils/settlementPool.ts +36 -0
  82. package/src/utils/transferMargin.ts +4 -10
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.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.LIGHTER_CLIENT_ORDER_INDEX_ID_PREFIX = exports.DEFAULT_LIGHTER_WS_URL = exports.DEFAULT_LIGHTER_REST_URL = exports.DEFAULT_LIGHTER_EXPLORER_TX_BASE_URL = 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_LEVERAGE_PRECISION = exports.LIGHTER_COLLATERAL_ASSETS = exports.LIGHTER_CLIENT_ORDER_INDEX_ID_PREFIX = exports.DEFAULT_LIGHTER_WS_URL = exports.DEFAULT_LIGHTER_REST_URL = exports.DEFAULT_LIGHTER_EXPLORER_TX_BASE_URL = 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");
@@ -25,6 +25,7 @@ Object.defineProperty(exports, "DEFAULT_LIGHTER_REST_URL", { enumerable: true, g
25
25
  Object.defineProperty(exports, "DEFAULT_LIGHTER_WS_URL", { enumerable: true, get: function () { return constants_js_1.DEFAULT_LIGHTER_WS_URL; } });
26
26
  Object.defineProperty(exports, "LIGHTER_CLIENT_ORDER_INDEX_ID_PREFIX", { enumerable: true, get: function () { return constants_js_1.LIGHTER_CLIENT_ORDER_INDEX_ID_PREFIX; } });
27
27
  Object.defineProperty(exports, "LIGHTER_COLLATERAL_ASSETS", { enumerable: true, get: function () { return constants_js_1.LIGHTER_COLLATERAL_ASSETS; } });
28
+ Object.defineProperty(exports, "LIGHTER_LEVERAGE_PRECISION", { enumerable: true, get: function () { return constants_js_1.LIGHTER_LEVERAGE_PRECISION; } });
28
29
  Object.defineProperty(exports, "LIGHTER_MAINNET_DEPLOYMENT", { enumerable: true, get: function () { return constants_js_1.LIGHTER_MAINNET_DEPLOYMENT; } });
29
30
  Object.defineProperty(exports, "LIGHTER_MAINNET_SIGNER_CHAIN_ID", { enumerable: true, get: function () { return constants_js_1.LIGHTER_MAINNET_SIGNER_CHAIN_ID; } });
30
31
  Object.defineProperty(exports, "LIGHTER_PROVIDER_KEY", { enumerable: true, get: function () { return constants_js_1.LIGHTER_PROVIDER_KEY; } });
@@ -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,oIAAA,oCAAoC,OAAA;AACpC,wHAAA,wBAAwB,OAAA;AACxB,sHAAA,sBAAsB,OAAA;AACtB,oIAAA,oCAAoC,OAAA;AACpC,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"}
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,+CAgBuB;AAfrB,oIAAA,oCAAoC,OAAA;AACpC,wHAAA,wBAAwB,OAAA;AACxB,sHAAA,sBAAsB,OAAA;AACtB,oIAAA,oCAAoC,OAAA;AACpC,yHAAA,yBAAyB,OAAA;AACzB,0HAAA,0BAA0B,OAAA;AAC1B,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"createAuthToken.d.ts","sourceRoot":"","sources":["../../../src/signers/createAuthToken.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAYvD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,aAAa,CAAA;IACrB,MAAM,EAAE,IAAI,CACV,aAAa,EACb,kBAAkB,GAAG,aAAa,GAAG,cAAc,CACpD,CAAA;IAKD,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAYD,wBAAsB,eAAe,CACnC,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAUjB;AAUD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,oBAAoB,GAAG,SAAS,GAAG,IAAI,EAC9C,gBAAgB,GAAE,MAAkC,EACpD,GAAG,GAAE,MAAM,MAAyB,GACnC,OAAO,CAST"}
1
+ {"version":3,"file":"createAuthToken.d.ts","sourceRoot":"","sources":["../../../src/signers/createAuthToken.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAYvD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,aAAa,CAAA;IACrB,MAAM,EAAE,IAAI,CACV,aAAa,EACb,kBAAkB,GAAG,aAAa,GAAG,cAAc,CACpD,CAAA;IAKD,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAWD,wBAAsB,eAAe,CACnC,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAUjB;AAUD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,oBAAoB,GAAG,SAAS,GAAG,IAAI,EAC9C,gBAAgB,GAAE,MAAkC,EACpD,GAAG,GAAE,MAAM,MAAyB,GACnC,OAAO,CAST"}
@@ -1 +1 @@
1
- {"version":3,"file":"createAuthToken.js","sourceRoot":"","sources":["../../../src/signers/createAuthToken.ts"],"names":[],"mappings":";;AAuCA,0CAYC;AAUD,kEAaC;AAtED,MAAM,wBAAwB,GAAG,EAAE,GAAG,EAAE,CAAA;AACxC,MAAM,yBAAyB,GAAG,EAAE,GAAG,MAAM,CAAA;AAkCtC,KAAK,UAAU,eAAe,CACnC,MAA6B;IAE7B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,IAAI,wBAAwB,CAAA;IACnE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAA;IACpD,OAAO,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE;QACtC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC,CAAA;AACJ,CAAC;AAUD,SAAgB,2BAA2B,CACzC,KAA8C,EAC9C,mBAA2B,yBAAyB,EACpD,MAAoB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;IAEpC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IACzD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,SAAS,IAAI,gBAAgB,CAAA;AACtC,CAAC"}
1
+ {"version":3,"file":"createAuthToken.js","sourceRoot":"","sources":["../../../src/signers/createAuthToken.ts"],"names":[],"mappings":";;AAsCA,0CAYC;AAUD,kEAaC;AArED,MAAM,wBAAwB,GAAG,EAAE,GAAG,EAAE,CAAA;AACxC,MAAM,yBAAyB,GAAG,EAAE,GAAG,MAAM,CAAA;AAiCtC,KAAK,UAAU,eAAe,CACnC,MAA6B;IAE7B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,IAAI,wBAAwB,CAAA;IACnE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAA;IACpD,OAAO,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE;QACtC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC,CAAA;AACJ,CAAC;AAUD,SAAgB,2BAA2B,CACzC,KAA8C,EAC9C,mBAA2B,yBAAyB,EACpD,MAAoB,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;IAEpC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IACzD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,SAAS,IAAI,gBAAgB,CAAA;AACtC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mapPosition.d.ts","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAIrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAW1D,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,SAWtD,CAAA;AAQD,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,SAQ5D,CAAA;AAOD,eAAO,MAAM,WAAW,GACtB,KAAK,iBAAiB,EACtB,QAAQ,kBAAkB,KACzB,QAiCF,CAAA"}
1
+ {"version":3,"file":"mapPosition.d.ts","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAOrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAY1D,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,SActD,CAAA;AAQD,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,SAQ5D,CAAA;AAOD,eAAO,MAAM,WAAW,GACtB,KAAK,iBAAiB,EACtB,QAAQ,kBAAkB,KACzB,QAiCF,CAAA"}
@@ -20,7 +20,10 @@ const leverageFromImf = (imf) => {
20
20
  if (parsed.lte(0)) {
21
21
  return undefined;
22
22
  }
23
- return new big_js_1.default(100).div(parsed).toNumber();
23
+ return new big_js_1.default(100)
24
+ .div(parsed)
25
+ .round(constants_js_1.LIGHTER_LEVERAGE_PRECISION, big_js_1.default.roundHalfUp)
26
+ .toNumber();
24
27
  };
25
28
  exports.leverageFromImf = leverageFromImf;
26
29
  const leverageFromScaledImf = (imf) => {
@@ -1 +1 @@
1
- {"version":3,"file":"mapPosition.js","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mapPosition.js","sourceRoot":"","sources":["../../../src/utils/mapPosition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type Big from 'big.js';
2
+ import type { LtAccountAsset } from '../types/account.js';
3
+ export declare const pooledSettlementUnits: (asset: LtAccountAsset) => Big;
4
+ export declare const pooledSettlementSpendable: (asset: LtAccountAsset, availableBalance: Big) => Big;
5
+ export declare const collateralSpotBalance: (assets: readonly LtAccountAsset[], settlementAssetIndex: number) => string;
6
+ //# sourceMappingURL=settlementPool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settlementPool.d.ts","sourceRoot":"","sources":["../../../src/utils/settlementPool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,QAAQ,CAAA;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAIzD,eAAO,MAAM,qBAAqB,GAAI,OAAO,cAAc,KAAG,GAG3D,CAAA;AAQH,eAAO,MAAM,yBAAyB,GACpC,OAAO,cAAc,EACrB,kBAAkB,GAAG,KACpB,GAKF,CAAA;AAGD,eAAO,MAAM,qBAAqB,GAChC,QAAQ,SAAS,cAAc,EAAE,EACjC,sBAAsB,MAAM,KAC3B,MAKF,CAAA"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.collateralSpotBalance = exports.pooledSettlementSpendable = exports.pooledSettlementUnits = void 0;
4
+ const decimal_js_1 = require("./decimal.js");
5
+ const pooledSettlementUnits = (asset) => (0, decimal_js_1.toRequiredBig)(asset.balance, 'balance').plus((0, decimal_js_1.toRequiredBig)(asset.margin_balance, 'margin_balance'));
6
+ exports.pooledSettlementUnits = pooledSettlementUnits;
7
+ const pooledSettlementSpendable = (asset, availableBalance) => {
8
+ const marginBalance = (0, decimal_js_1.toRequiredBig)(asset.margin_balance, 'margin_balance');
9
+ return (0, decimal_js_1.toRequiredBig)(asset.balance, 'balance')
10
+ .minus((0, decimal_js_1.toRequiredBig)(asset.locked_balance, 'locked_balance'))
11
+ .plus(marginBalance.lt(availableBalance) ? marginBalance : availableBalance);
12
+ };
13
+ exports.pooledSettlementSpendable = pooledSettlementSpendable;
14
+ const collateralSpotBalance = (assets, settlementAssetIndex) => {
15
+ const asset = assets.find((a) => a.asset_id === settlementAssetIndex);
16
+ return asset === undefined
17
+ ? '0'
18
+ : (0, decimal_js_1.toRequiredBig)(asset.balance, 'balance').toFixed();
19
+ };
20
+ exports.collateralSpotBalance = collateralSpotBalance;
21
+ //# sourceMappingURL=settlementPool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settlementPool.js","sourceRoot":"","sources":["../../../src/utils/settlementPool.ts"],"names":[],"mappings":";;;AAEA,6CAA4C;AAGrC,MAAM,qBAAqB,GAAG,CAAC,KAAqB,EAAO,EAAE,CAClE,IAAA,0BAAa,EAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,CAC1C,IAAA,0BAAa,EAAC,KAAK,CAAC,cAAc,EAAE,gBAAgB,CAAC,CACtD,CAAA;AAHU,QAAA,qBAAqB,yBAG/B;AAQI,MAAM,yBAAyB,GAAG,CACvC,KAAqB,EACrB,gBAAqB,EAChB,EAAE;IACP,MAAM,aAAa,GAAG,IAAA,0BAAa,EAAC,KAAK,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAA;IAC3E,OAAO,IAAA,0BAAa,EAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC;SAC3C,KAAK,CAAC,IAAA,0BAAa,EAAC,KAAK,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;SAC5D,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAA;AAChF,CAAC,CAAA;AARY,QAAA,yBAAyB,6BAQrC;AAGM,MAAM,qBAAqB,GAAG,CACnC,MAAiC,EACjC,oBAA4B,EACpB,EAAE;IACV,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,oBAAoB,CAAC,CAAA;IACrE,OAAO,KAAK,KAAK,SAAS;QACxB,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,IAAA,0BAAa,EAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;AACvD,CAAC,CAAA;AARY,QAAA,qBAAqB,yBAQjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"transferMargin.d.ts","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAA;AAyC1B,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,GACjB,aAAa,GAAG,SAAS,CAmB3B"}
1
+ {"version":3,"file":"transferMargin.d.ts","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAA;AAkC1B,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,GACjB,aAAa,GAAG,SAAS,CAmB3B"}
@@ -9,12 +9,7 @@ const perps_types_1 = require("@lifi/perps-types");
9
9
  const big_js_1 = __importDefault(require("big.js"));
10
10
  const AMOUNT_DECIMALS = 6;
11
11
  function positionAmount(value, field) {
12
- try {
13
- return new big_js_1.default(value);
14
- }
15
- catch {
16
- throw new perps_sdk_1.PerpsError(perps_types_1.PerpsErrorCode.ValidationError, `Invalid decimal string on Position.${field}: '${value}'`);
17
- }
12
+ return new big_js_1.default((0, perps_sdk_1.validateDecimalString)(value, `Position.${field}`));
18
13
  }
19
14
  function positivePositionAmount(value, field) {
20
15
  const amount = positionAmount(value, field);
@@ -1 +1 @@
1
- {"version":3,"file":"transferMargin.js","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":";;;;;AAkDA,0DAqBC;AAvED,+CAIwB;AACxB,mDAI0B;AAC1B,oDAAwB;AAExB,MAAM,eAAe,GAAG,CAAC,CAAA;AAEzB,SAAS,cAAc,CAAC,KAAa,EAAE,KAAa;IAClD,IAAI,CAAC;QACH,OAAO,IAAI,gBAAG,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,sBAAU,CAClB,4BAAc,CAAC,eAAe,EAC9B,sCAAsC,KAAK,MAAM,KAAK,GAAG,CAC1D,CAAA;IACH,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa,EAAE,KAAa;IAC1D,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC3C,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,sBAAU,CAClB,4BAAc,CAAC,eAAe,EAC9B,YAAY,KAAK,6BAA6B,CAC/C,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAgBD,SAAgB,uBAAuB,CACrC,QAAkB;IAElB,IAAI,CAAC,IAAA,4CAAgC,EAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,CAAC,IAAA,yCAA6B,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,MAAM,SAAS,GAAG,sBAAsB,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;SACxE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;SAC7D,KAAK,CACJ,sBAAsB,CACpB,QAAQ,CAAC,wBAAwB,EACjC,0BAA0B,CAC3B,CACF,CAAA;IACH,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,SAAS,CAAC,KAAK,CAAC,eAAe,EAAE,gBAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;AAClE,CAAC"}
1
+ {"version":3,"file":"transferMargin.js","sourceRoot":"","sources":["../../../src/utils/transferMargin.ts"],"names":[],"mappings":";;;;;AA4CA,0DAqBC;AAjED,+CAKwB;AACxB,mDAI0B;AAC1B,oDAAwB;AAExB,MAAM,eAAe,GAAG,CAAC,CAAA;AAEzB,SAAS,cAAc,CAAC,KAAoB,EAAE,KAAa;IACzD,OAAO,IAAI,gBAAG,CAAC,IAAA,iCAAqB,EAAC,KAAK,EAAE,YAAY,KAAK,EAAE,CAAC,CAAC,CAAA;AACnE,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAoB,EAAE,KAAa;IACjE,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC3C,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,sBAAU,CAClB,4BAAc,CAAC,eAAe,EAC9B,YAAY,KAAK,6BAA6B,CAC/C,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAgBD,SAAgB,uBAAuB,CACrC,QAAkB;IAElB,IAAI,CAAC,IAAA,4CAAgC,EAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,CAAC,IAAA,yCAA6B,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,MAAM,SAAS,GAAG,sBAAsB,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;SACxE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;SAC7D,KAAK,CACJ,sBAAsB,CACpB,QAAQ,CAAC,wBAAwB,EACjC,0BAA0B,CAC3B,CACF,CAAA;IACH,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,SAAS,CAAC,KAAK,CAAC,eAAe,EAAE,gBAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;AAClE,CAAC"}
@@ -9,11 +9,9 @@ import { type LighterDeployment } from './constants.js';
9
9
  * manager are created per plugin instance.
10
10
  *
11
11
  * Auth-token resolution order for the auth-gated reads:
12
- * 1. Per-call `options.lighterAuthToken`
13
- * 2. Constructor `authToken` (string or async factory)
14
- * 3. Persisted long-lived read-only token, keyed on the resolved Lighter
12
+ * 1. Persisted long-lived read-only token, keyed on the resolved Lighter
15
13
  * `accountIndex`
16
- * 4. Fresh 1h create via this instance's WASM signer + the user's registered
14
+ * 2. Fresh 1h create via this instance's WASM signer + the user's registered
17
15
  * API key
18
16
  *
19
17
  * Status reads report the account's state and do not throw for a missing
@@ -27,9 +25,9 @@ import { type LighterDeployment } from './constants.js';
27
25
  * - `SetupRequired` when none of these sources yields a token. The SDK
28
26
  * sends no venue request. `getOrders`, `getOrder`, `getFills`,
29
27
  * `getPortfolioHistory` and `getActivity` need a token.
30
- * - `Unauthorized` when Lighter rejects the token that was sent. An
31
- * SDK-owned read-only token that Lighter reports as revoked is replaced
32
- * and the read retried once first.
28
+ * - `Unauthorized` when Lighter rejects the token that was sent. A
29
+ * read-only token that Lighter reports as revoked is replaced and the
30
+ * read retried once first.
33
31
  * - `AccountNotFound` when the wallet has no Lighter account. This also
34
32
  * applies to `getPositions`, `getWithdrawableBalances` and
35
33
  * `getAvailableToTrade`, which need no token. `getAvailableToTrade`
@@ -52,8 +50,6 @@ export interface LighterProviderOptions {
52
50
  * instance's signer and read-only token manager follow this URL.
53
51
  */
54
52
  restUrl?: string;
55
- /** Pre-created Lighter read-only bearer, bypassing SDK token resolution. */
56
- authToken?: string | (() => string | Promise<string>);
57
53
  /** Token lifetime for on-demand standard-token creates (Lighter caps at 8h). Default 1h. */
58
54
  tokenLifetimeSeconds?: number;
59
55
  /** Re-create when the cached standard token's remaining life is below this. Default 60s. */
@@ -71,8 +67,8 @@ export interface LighterProviderOptions {
71
67
  export interface LighterPerpsProvider extends PerpsProviderPlugin {
72
68
  /**
73
69
  * Resolve a Lighter auth token for `address`, following the resolution order
74
- * documented on {@link LighterProviderOptions} (the per-call override does not
75
- * apply here). Returns `undefined` when no source can produce a token.
70
+ * documented on {@link LighterProviderOptions}. Returns `undefined` when no
71
+ * source can produce a token.
76
72
  */
77
73
  resolveAuthToken(address: Address): Promise<string | undefined>;
78
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LighterProvider.d.ts","sourceRoot":"","sources":["../../src/LighterProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAeL,KAAK,mBAAmB,EAqBxB,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAA;AAmCxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAQnC,OAAO,EAUL,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAA;AA2KvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;IACrD,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,4FAA4F;IAC5F,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC;AAcD;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CAChE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GAChC,YAAY,iBAAiB,EAC7B,UAAS,sBAA2B,KACnC,oBAkgDF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAS,sBAA2B,KACnC,oBACyD,CAAA;AAE5D;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAS,sBAA2B,KACnC,oBAA6E,CAAA;AAEhF;;;;GAIG;AACH,eAAO,MAAM,OAAO,aA7BT,sBAAsB,KAC9B,oBA4BmC,CAAA"}
1
+ {"version":3,"file":"LighterProvider.d.ts","sourceRoot":"","sources":["../../src/LighterProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAeL,KAAK,mBAAmB,EAqBxB,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAA;AAmCxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAQnC,OAAO,EAUL,KAAK,iBAAiB,EACvB,MAAM,gBAAgB,CAAA;AAiLvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,4FAA4F;IAC5F,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC;AAcD;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D;;;;OAIG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CAChE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GAChC,YAAY,iBAAiB,EAC7B,UAAS,sBAA2B,KACnC,oBAwgDF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAS,sBAA2B,KACnC,oBACyD,CAAA;AAE5D;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAS,sBAA2B,KACnC,oBAA6E,CAAA;AAEhF;;;;GAIG;AACH,eAAO,MAAM,OAAO,aA7BT,sBAAsB,KAC9B,oBA4BmC,CAAA"}
@@ -11,12 +11,13 @@ import { LighterKeyStore, } from './signers/LighterKeyStore.js';
11
11
  import { LighterReadOnlyTokenManager } from './signers/LighterReadOnlyTokenManager.js';
12
12
  import { LighterSigner } from './signers/LighterSigner.js';
13
13
  import { createLighterApiKeyFreshness, lighterSignActions, } from './signers/signActions.js';
14
- import { LT_ACCOUNT_TRADING_MODE_SIMPLE, LT_MARGIN_MODE_CROSS, LT_MARGIN_MODE_ISOLATED, } from './types/index.js';
14
+ import { LT_ACCOUNT_TRADING_MODE_SIMPLE, LT_ACCOUNT_TRADING_MODE_UNIFIED, LT_MARGIN_MODE_CROSS, LT_MARGIN_MODE_ISOLATED, } from './types/index.js';
15
15
  import { decodeActivityCursor, encodeActivityCursor, } from './utils/activityCursor.js';
16
16
  import { LIGHTER_RETRY_DEFAULTS, LighterApiClient, LighterAuthRejectedError, LighterTokenRevokedError, } from './utils/apiClient.js';
17
17
  import { isAssetMarginEnabled } from './utils/assetCollateral.js';
18
18
  import { estimateLiquidationPrice, fetchDetailedAccount, leverageFromImf, lighterAsset, lighterWithdrawableBalances, mapFill, mapOpenPositions, mapOrder, mapPortfolioHistory, positionRemovableMargin, snapOrderPrice, snapOrderSize, toBigOrNull, toIsoFromMs, toIsoFromSeconds, toRequiredBig, } from './utils/index.js';
19
19
  import { fetchRegisteredApiKey, normalizeLighterPublicKey, } from './utils/registeredApiKey.js';
20
+ import { collateralSpotBalance, pooledSettlementSpendable, pooledSettlementUnits, } from './utils/settlementPool.js';
20
21
  import { spotPriceByAssetId, spotValuation } from './utils/spotPrice.js';
21
22
  import { isPlaceholderTxHash } from './utils/txHash.js';
22
23
  import { wireList } from './utils/wireList.js';
@@ -105,11 +106,6 @@ export const createLighterProvider = (deployment, options = {}) => {
105
106
  const explorerTxBaseUrl = deployment.explorerTxBaseUrl;
106
107
  const bridgeChainId = deployment.bridgeChainId;
107
108
  const collateral = deployment.collateral;
108
- const authTokenSource = typeof options.authToken === 'function'
109
- ? options.authToken
110
- : options.authToken !== undefined
111
- ? () => options.authToken
112
- : undefined;
113
109
  const storage = options.storage ?? localStorageAdapter;
114
110
  const signer = new LighterSigner({
115
111
  apiUrl: restUrl,
@@ -168,28 +164,17 @@ export const createLighterProvider = (deployment, options = {}) => {
168
164
  };
169
165
  /**
170
166
  * Resolve the bearer token for auth-gated reads. Priority:
171
- * 1. Per-call override (`options.lighterAuthToken`).
172
- * 2. Constructor-supplied token source.
173
- * 3. A stored read-only token — preferred for reads: it is read-only, so
167
+ * 1. A stored read-only token — preferred for reads: it is read-only, so
174
168
  * forwarding it (incl. to the backend) cannot authorise writes.
175
- * 4. A read-only token created on first use (via signer + registered API
169
+ * 2. A read-only token created on first use (via signer + registered API
176
170
  * key) and persisted for reuse.
177
- * 5. A standard auth token (read+write, 8h max) as a last resort — used
171
+ * 3. A standard auth token (read+write, 8h max) as a last resort — used
178
172
  * as the credential that authorises read-only token creation, and as
179
173
  * the fallback while creation is failing, bounded by the
180
174
  * creation-retry backoff.
181
175
  * Returns `undefined` when no source can produce a token.
182
176
  */
183
- const resolveAuthToken = async (opts, address, knownApiKey) => {
184
- if (opts?.lighterAuthToken !== undefined) {
185
- return opts.lighterAuthToken;
186
- }
187
- if (authTokenSource !== undefined) {
188
- return authTokenSource();
189
- }
190
- if (address === undefined) {
191
- return undefined;
192
- }
177
+ const resolveAuthToken = async (address, knownApiKey) => {
193
178
  const apiKey = knownApiKey ?? (await keyStore.get(address));
194
179
  if (apiKey === null) {
195
180
  return undefined;
@@ -255,12 +240,11 @@ export const createLighterProvider = (deployment, options = {}) => {
255
240
  return attempt;
256
241
  };
257
242
  /** {@link resolveAuthToken}, throwing `SetupRequired` when no source yields a token. */
258
- const requireAuthToken = async (read, opts, address, knownApiKey) => {
259
- const token = await resolveAuthToken(opts, address, knownApiKey);
243
+ const requireAuthToken = async (read, address, knownApiKey) => {
244
+ const token = await resolveAuthToken(address, knownApiKey);
260
245
  if (token === undefined) {
261
- throw new PerpsError(PerpsErrorCode.SetupRequired, `Lighter ${read} requires an auth token. Pass \`authToken\` to ` +
262
- 'lighterProvider, register an API key + signer for on-demand creation, or ' +
263
- 'forward `options.lighterAuthToken` on the call.');
246
+ throw new PerpsError(PerpsErrorCode.SetupRequired, `Lighter ${read} requires an auth token. Register an API key + signer ` +
247
+ 'for on-demand creation.');
264
248
  }
265
249
  return token;
266
250
  };
@@ -307,13 +291,12 @@ export const createLighterProvider = (deployment, options = {}) => {
307
291
  }
308
292
  }
309
293
  };
310
- const retryOnRevoked = async (opts, address, token, run) => {
294
+ const retryOnRevoked = async (address, token, run) => {
311
295
  try {
312
296
  return await run(token);
313
297
  }
314
298
  catch (err) {
315
- const sdkOwnsToken = opts?.lighterAuthToken === undefined && authTokenSource === undefined;
316
- if (!(err instanceof LighterTokenRevokedError) || !sdkOwnsToken) {
299
+ if (!(err instanceof LighterTokenRevokedError)) {
317
300
  throw err;
318
301
  }
319
302
  const fresh = await replaceRevokedReadOnlyToken(address, token);
@@ -439,6 +422,16 @@ export const createLighterProvider = (deployment, options = {}) => {
439
422
  const setup = await setupPromise;
440
423
  return setup.find((descriptor) => descriptor.type === action);
441
424
  };
425
+ /**
426
+ * Refuse a SEND_ASSET for a unified account. Its settlement asset is one pool
427
+ * across both routes, so a perps↔spot transfer has nothing to move.
428
+ */
429
+ const assertSendAssetMode = async (address) => {
430
+ const account = await fetchDetailedAccount(apiClient(), address);
431
+ if (account.account_trading_mode === LT_ACCOUNT_TRADING_MODE_UNIFIED) {
432
+ throw new PerpsError(PerpsErrorCode.PooledCategoryTransfer, 'Lighter unified accounts pool the settlement asset across perps and spot; a transfer between them has nothing to move');
433
+ }
434
+ };
442
435
  /**
443
436
  * Refuse an order signature for a tier no ACCOUNT_TYPE option binds. An
444
437
  * unreadable descriptor or tier fails open: the venue itself
@@ -464,10 +457,10 @@ export const createLighterProvider = (deployment, options = {}) => {
464
457
  }
465
458
  let userTierName;
466
459
  try {
467
- const token = await resolveAuthToken(undefined, address, localKey);
460
+ const token = await resolveAuthToken(address, localKey);
468
461
  const limits = token === undefined
469
462
  ? undefined
470
- : await retryOnRevoked(undefined, address, token, (resolvedToken) => fetchAccountLimits(apiClient(), localKey.accountIndex, resolvedToken));
463
+ : await retryOnRevoked(address, token, (resolvedToken) => fetchAccountLimits(apiClient(), localKey.accountIndex, resolvedToken));
471
464
  userTierName = limits?.user_tier_name;
472
465
  }
473
466
  catch (err) {
@@ -490,7 +483,7 @@ export const createLighterProvider = (deployment, options = {}) => {
490
483
  boundClient = client;
491
484
  },
492
485
  resolveAuthToken(address) {
493
- return resolveAuthToken(undefined, address);
486
+ return resolveAuthToken(address);
494
487
  },
495
488
  async getAccount(params, opts) {
496
489
  const client = apiClient(opts);
@@ -509,7 +502,7 @@ export const createLighterProvider = (deployment, options = {}) => {
509
502
  normalizeLighterPublicKey(registeredKey.public_key);
510
503
  // Status read: a missing or stale credential reports `apiKeyRegistered: false`, not a throw.
511
504
  const token = apiKeyRegistered
512
- ? await resolveAuthToken(opts, params.address, localKey)
505
+ ? await resolveAuthToken(params.address, localKey)
513
506
  : undefined;
514
507
  const registry = getMarketRegistry(requireClient(), providerKey);
515
508
  const assetRegistry = getAssetRegistry(requireClient(), providerKey);
@@ -520,7 +513,7 @@ export const createLighterProvider = (deployment, options = {}) => {
520
513
  getMarketsContext(requireClient(), { provider: providerKey }, opts),
521
514
  token === undefined
522
515
  ? Promise.resolve(undefined)
523
- : retryOnRevoked(opts, params.address, token, (resolvedToken) => fetchAccountLimits(client, account.index, resolvedToken)),
516
+ : retryOnRevoked(params.address, token, (resolvedToken) => fetchAccountLimits(client, account.index, resolvedToken)),
524
517
  apiKeyRegistered
525
518
  ? readOnlyTokenManager.get(params.address, localKey.accountIndex)
526
519
  : Promise.resolve(undefined),
@@ -534,9 +527,15 @@ export const createLighterProvider = (deployment, options = {}) => {
534
527
  const availableBalance = toRequiredBig(account.available_balance, 'available_balance');
535
528
  // Each asset has a spot route (`balance`) and a perps route
536
529
  // (`margin_balance`). The instance's settlement asset is valued 1:1; an
537
- // asset no spot market prices keeps a zero USD value.
538
- const heldAssets = account.assets.filter((asset) => toRequiredBig(asset.balance, 'balance').gt(0));
539
- const marginAssets = account.assets.filter((asset) => toRequiredBig(asset.margin_balance, 'margin_balance').gt(0));
530
+ // asset no spot market prices keeps a zero USD value. A unified account
531
+ // pools both settlement routes into one spot row.
532
+ const isPooled = (asset) => account.account_trading_mode === LT_ACCOUNT_TRADING_MODE_UNIFIED &&
533
+ asset.asset_id === collateral.assetIndex;
534
+ const heldAssets = account.assets.filter((asset) => (isPooled(asset)
535
+ ? pooledSettlementUnits(asset)
536
+ : toRequiredBig(asset.balance, 'balance')).gt(0));
537
+ const marginAssets = account.assets.filter((asset) => !isPooled(asset) &&
538
+ toRequiredBig(asset.margin_balance, 'margin_balance').gt(0));
540
539
  const spotPrices = spotPriceByAssetId(registry.markets, LIGHTER_SPOT_CATEGORY_ID, prices, new Set([...heldAssets, ...marginAssets]
541
540
  .filter((a) => a.asset_id !== collateral.assetIndex)
542
541
  .map((a) => String(a.asset_id))));
@@ -569,6 +568,13 @@ export const createLighterProvider = (deployment, options = {}) => {
569
568
  };
570
569
  });
571
570
  const balances = heldAssets.map((a) => {
571
+ if (isPooled(a)) {
572
+ const units = pooledSettlementUnits(a).toFixed();
573
+ return {
574
+ ...toBalance(a, LIGHTER_SPOT_CATEGORY_ID, registryAsset(a), units),
575
+ transferable: calculateTransferable(pooledSettlementSpendable(a, availableBalance).toFixed(), units),
576
+ };
577
+ }
572
578
  const balance = toRequiredBig(a.balance, 'balance');
573
579
  return {
574
580
  ...toBalance(a, LIGHTER_SPOT_CATEGORY_ID, registryAsset(a), isDecimalString(a.balance) ? a.balance : balance.toFixed()),
@@ -595,6 +601,7 @@ export const createLighterProvider = (deployment, options = {}) => {
595
601
  crossAssetValue: account.cross_asset_value,
596
602
  crossInitialMarginRequirement: account.cross_initial_margin_requirement,
597
603
  totalAssetValue: account.total_asset_value,
604
+ collateralSpotBalance: collateralSpotBalance(account.assets, collateral.assetIndex),
598
605
  userTierName: limitsResult?.user_tier_name,
599
606
  accountTradingMode: account.account_trading_mode ?? LT_ACCOUNT_TRADING_MODE_SIMPLE,
600
607
  assetCollateral,
@@ -701,7 +708,7 @@ export const createLighterProvider = (deployment, options = {}) => {
701
708
  if (statuses.size === 0) {
702
709
  return empty;
703
710
  }
704
- const token = await requireAuthToken('orders read', opts, params.address);
711
+ const token = await requireAuthToken('orders read', params.address);
705
712
  const client = apiClient(opts);
706
713
  const registry = getMarketRegistry(requireClient(), providerKey);
707
714
  const [account] = await Promise.all([
@@ -721,7 +728,7 @@ export const createLighterProvider = (deployment, options = {}) => {
721
728
  terminal = true;
722
729
  }
723
730
  }
724
- const [activeResponse, inactiveResponse] = await retryOnRevoked(opts, params.address, token, (t) => Promise.all([
731
+ const [activeResponse, inactiveResponse] = await retryOnRevoked(params.address, token, (t) => Promise.all([
725
732
  active && params.cursor === undefined
726
733
  ? fetchActiveOrders(client, t, account.index, marketId)
727
734
  : undefined,
@@ -775,7 +782,7 @@ export const createLighterProvider = (deployment, options = {}) => {
775
782
  * `order_index`.
776
783
  */
777
784
  async getOrder(params, opts) {
778
- const token = await requireAuthToken('order lookup', opts, params.address);
785
+ const token = await requireAuthToken('order lookup', params.address);
779
786
  const client = apiClient(opts);
780
787
  const registry = getMarketRegistry(requireClient(), providerKey);
781
788
  const [account] = await Promise.all([
@@ -801,7 +808,7 @@ export const createLighterProvider = (deployment, options = {}) => {
801
808
  throw new PerpsError(PerpsErrorCode.SDKError, `Lighter order id "${params.id}" names a client order index, but ` +
802
809
  `"${clientOrderIndex}" is not a decimal integer.`);
803
810
  }
804
- const orders = await retryOnRevoked(opts, params.address, token, (t) => fetchOrdersByClientOrderIndex(client, t, account.index, clientOrderIndex));
811
+ const orders = await retryOnRevoked(params.address, token, (t) => fetchOrdersByClientOrderIndex(client, t, account.index, clientOrderIndex));
805
812
  // `accountOrders` reaches active and inactive rows alike, so a reused
806
813
  // client order index can match more than one row. Prefer the live one.
807
814
  const matches = orders
@@ -814,12 +821,12 @@ export const createLighterProvider = (deployment, options = {}) => {
814
821
  return hit;
815
822
  }
816
823
  const byOrderIndex = (o) => String(o.order_index) === params.id;
817
- const active = await retryOnRevoked(opts, params.address, token, (t) => fetchActiveOrders(client, t, account.index, LIGHTER_ALL_MARKETS_WILDCARD));
824
+ const active = await retryOnRevoked(params.address, token, (t) => fetchActiveOrders(client, t, account.index, LIGHTER_ALL_MARKETS_WILDCARD));
818
825
  const activeHit = active.orders.find(byOrderIndex);
819
826
  if (activeHit !== undefined) {
820
827
  return detail(activeHit);
821
828
  }
822
- const inactive = await retryOnRevoked(opts, params.address, token, (t) => client.getAuthed('/api/v1/accountInactiveOrders', t, {
829
+ const inactive = await retryOnRevoked(params.address, token, (t) => client.getAuthed('/api/v1/accountInactiveOrders', t, {
823
830
  account_index: account.index,
824
831
  market_id: LIGHTER_ALL_MARKETS_WILDCARD,
825
832
  limit: INACTIVE_ORDERS_LOOKUP_LIMIT,
@@ -831,7 +838,7 @@ export const createLighterProvider = (deployment, options = {}) => {
831
838
  return detail(inactiveHit);
832
839
  },
833
840
  async getFills(params, opts) {
834
- const token = await requireAuthToken('fills read', opts, params.address);
841
+ const token = await requireAuthToken('fills read', params.address);
835
842
  const client = apiClient(opts);
836
843
  const registry = getMarketRegistry(requireClient(), providerKey);
837
844
  const [account] = await Promise.all([
@@ -847,7 +854,7 @@ export const createLighterProvider = (deployment, options = {}) => {
847
854
  if (params.cursor !== undefined) {
848
855
  queryParams.cursor = params.cursor;
849
856
  }
850
- const response = await retryOnRevoked(opts, params.address, token, (tok) => client.getAuthed('/api/v1/trades', tok, queryParams));
857
+ const response = await retryOnRevoked(params.address, token, (tok) => client.getAuthed('/api/v1/trades', tok, queryParams));
851
858
  // `get`, not `require`: a market id the backend list no longer carries
852
859
  // drops only its own row instead of rejecting the whole page. The
853
860
  // registry warns once per unresolved id. A delisted market still
@@ -870,9 +877,8 @@ export const createLighterProvider = (deployment, options = {}) => {
870
877
  };
871
878
  },
872
879
  async getPortfolioHistory(params, opts) {
873
- const sdkOwnsToken = opts?.lighterAuthToken === undefined && authTokenSource === undefined;
874
- const apiKey = sdkOwnsToken ? await keyStore.get(params.address) : null;
875
- const token = await requireAuthToken('portfolio history read', opts, params.address, apiKey ?? undefined);
880
+ const apiKey = await keyStore.get(params.address);
881
+ const token = await requireAuthToken('portfolio history read', params.address, apiKey ?? undefined);
876
882
  const client = apiClient(opts);
877
883
  const account = await plugin.getAccount({ address: params.address }, opts);
878
884
  const window = PNL_WINDOWS[params.range];
@@ -894,7 +900,7 @@ export const createLighterProvider = (deployment, options = {}) => {
894
900
  // fallback sits outside `retryOnRevoked`, so a revocation the standard
895
901
  // token reports never replaces the read-only one. The key is re-read at
896
902
  // retry time because `REGISTER_API_KEY` can rotate it.
897
- const response = await retryOnRevoked(opts, params.address, token, read).catch(async (err) => {
903
+ const response = await retryOnRevoked(params.address, token, read).catch(async (err) => {
898
904
  if (!(err instanceof LighterAuthRejectedError) || apiKey === null) {
899
905
  throw err;
900
906
  }
@@ -907,7 +913,7 @@ export const createLighterProvider = (deployment, options = {}) => {
907
913
  return mapPortfolioHistory(params.range, wireList(response.pnl), new Big(getAccountSummary(account, account.positions).portfolioValue));
908
914
  },
909
915
  async getActivity(params, opts) {
910
- const token = await requireAuthToken('activity read', opts, params.address);
916
+ const token = await requireAuthToken('activity read', params.address);
911
917
  const inputCursor = decodeActivityCursor(params.cursor);
912
918
  const client = apiClient(opts);
913
919
  const account = await fetchDetailedAccount(client, params.address);
@@ -916,7 +922,7 @@ export const createLighterProvider = (deployment, options = {}) => {
916
922
  // Markets identify funding and liquidation rows; assets identify ledger
917
923
  // rows. A request for one surface must not pull the other's registry.
918
924
  const [history] = await Promise.all([
919
- retryOnRevoked(opts, params.address, token, (t) => fetchAllHistory(client, t, account.index, params.address, params.type, inputCursor)),
925
+ retryOnRevoked(params.address, token, (t) => fetchAllHistory(client, t, account.index, params.address, params.type, inputCursor)),
920
926
  wantsAnyType(params.type, MARKET_BEARING_TYPES)
921
927
  ? marketRegistry.sync()
922
928
  : Promise.resolve(),
@@ -1104,6 +1110,9 @@ export const createLighterProvider = (deployment, options = {}) => {
1104
1110
  if (steps.some((step) => ORDER_PLACEMENT_ACTIONS.has(step.action))) {
1105
1111
  await assertOrderTier(address);
1106
1112
  }
1113
+ if (steps.some((step) => step.action === ActionType.SEND_ASSET)) {
1114
+ await assertSendAssetMode(address);
1115
+ }
1107
1116
  return lighterSignActions({
1108
1117
  signer,
1109
1118
  keyStore,