@lifi/perps-sdk 0.0.0-preview-c9a1971 → 0.0.0-preview-34f3bb2

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.
@@ -7,9 +7,6 @@ export declare abstract class ReferenceDataRegistry<T> {
7
7
  private current;
8
8
  private inflight;
9
9
  private warnedIds;
10
- private refetchedIds;
11
- private generation;
12
- private refreshInflight;
13
10
  private refreshAfter;
14
11
  protected constructor(client: PerpsSDKClient, provider: string, kind: string);
15
12
  protected abstract fetchItems(bypassHttpCache: boolean): Promise<T[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"referenceDataRegistry.d.ts","sourceRoot":"","sources":["../../../src/registry/referenceDataRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAwB1D,8BAAsB,qBAAqB,CAAC,CAAC;IAWzC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAZvB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,YAAY,CAAI;IAExB,SAAS,aACY,MAAM,EAAE,cAAc,EAChC,QAAQ,EAAE,MAAM,EACR,IAAI,EAAE,MAAM;IAI/B,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAGrE,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM;IAOzC,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IAU7B,SAAS,KAAK,KAAK,IAAI,SAAS,CAAC,EAAE,CAElC;IAMD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;YAahB,IAAI;IAalB,OAAO,CAAC,eAAe;CA2BxB"}
1
+ {"version":3,"file":"referenceDataRegistry.d.ts","sourceRoot":"","sources":["../../../src/registry/referenceDataRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAiB1D,8BAAsB,qBAAqB,CAAC,CAAC;IAQzC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IATvB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,YAAY,CAAI;IAExB,SAAS,aACY,MAAM,EAAE,cAAc,EAChC,QAAQ,EAAE,MAAM,EACR,IAAI,EAAE,MAAM;IAI/B,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAGrE,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM;IAOzC,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IAU7B,SAAS,KAAK,KAAK,IAAI,SAAS,CAAC,EAAE,CAElC;IAMD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;YAahB,IAAI;IAQlB,OAAO,CAAC,eAAe;CAcxB"}
@@ -10,9 +10,6 @@ class ReferenceDataRegistry {
10
10
  current = [];
11
11
  inflight;
12
12
  warnedIds = new Set();
13
- refetchedIds = new Set();
14
- generation = 0;
15
- refreshInflight = false;
16
13
  refreshAfter = 0;
17
14
  constructor(client, provider, kind) {
18
15
  this.client = client;
@@ -39,35 +36,23 @@ class ReferenceDataRegistry {
39
36
  this.warnedIds.add(id);
40
37
  console.warn(`[${this.provider}] unknown ${this.kind} id '${id}'`);
41
38
  }
42
- this.scheduleRefresh(id);
39
+ this.scheduleRefresh();
43
40
  return undefined;
44
41
  }
45
42
  async load(bypassHttpCache) {
46
- const generation = ++this.generation;
47
43
  const items = await this.fetchItems(bypassHttpCache);
48
- if (generation === this.generation) {
49
- this.index = new Map(items.map((item) => [this.keyOf(item), item]));
50
- this.current = items;
51
- this.warnedIds.clear();
52
- }
44
+ this.index = new Map(items.map((item) => [this.keyOf(item), item]));
45
+ this.current = items;
46
+ this.warnedIds.clear();
53
47
  return items;
54
48
  }
55
- scheduleRefresh(id) {
56
- if (this.refreshInflight) {
57
- this.refetchedIds.add(id);
58
- return;
59
- }
60
- if (this.refetchedIds.has(id) && Date.now() < this.refreshAfter) {
49
+ scheduleRefresh() {
50
+ const now = Date.now();
51
+ if (now < this.refreshAfter) {
61
52
  return;
62
53
  }
63
- this.refreshInflight = true;
64
- this.refetchedIds.add(id);
65
- this.load(true)
66
- .catch((error) => console.error(`[${this.provider}] ${this.kind} registry refresh failed`, error))
67
- .finally(() => {
68
- this.refreshInflight = false;
69
- this.refreshAfter = Date.now() + REFRESH_COOLDOWN_MS;
70
- });
54
+ this.refreshAfter = now + REFRESH_COOLDOWN_MS;
55
+ this.load(true).catch((error) => console.error(`[${this.provider}] ${this.kind} registry refresh failed`, error));
71
56
  }
72
57
  }
73
58
  exports.ReferenceDataRegistry = ReferenceDataRegistry;
@@ -1 +1 @@
1
- {"version":3,"file":"referenceDataRegistry.js","sourceRoot":"","sources":["../../../src/registry/referenceDataRegistry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"referenceDataRegistry.js","sourceRoot":"","sources":["../../../src/registry/referenceDataRegistry.ts"],"names":[],"mappings":";;;AAGA,MAAM,mBAAmB,GAAG,MAAM,CAAA;AAclC,MAAsB,qBAAqB;IAQpB;IACV;IACQ;IATX,KAAK,GAAG,IAAI,GAAG,EAAa,CAAA;IAC5B,OAAO,GAAiB,EAAE,CAAA;IAC1B,QAAQ,CAAmC;IAC3C,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;IAC7B,YAAY,GAAG,CAAC,CAAA;IAExB,YACqB,MAAsB,EAChC,QAAgB,EACR,IAAY;QAFV,WAAM,GAAN,MAAM,CAAgB;QAChC,aAAQ,GAAR,QAAQ,CAAQ;QACR,SAAI,GAAJ,IAAI,CAAQ;IAC5B,CAAC;IAaJ,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBAC5C,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;YAC3B,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAGD,IAAc,KAAK;QACjB,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAMD,GAAG,CAAC,EAAU;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACtB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,aAAa,IAAI,CAAC,IAAI,QAAQ,EAAE,GAAG,CAAC,CAAA;QACpE,CAAC;QACD,IAAI,CAAC,eAAe,EAAE,CAAA;QACtB,OAAO,SAAS,CAAA;IAClB,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,eAAwB;QACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;QACpD,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QACnE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACpB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;QACtB,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,eAAe;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5B,OAAM;QACR,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,GAAG,GAAG,mBAAmB,CAAA;QAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAC9B,OAAO,CAAC,KAAK,CACX,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,0BAA0B,EACzD,KAAK,CACN,CACF,CAAA;IACH,CAAC;CACF;AA7ED,sDA6EC"}
@@ -1,4 +1,4 @@
1
- import type { FeeTier, Market, MarketContext, OrderbookLevel, Quote, QuoteSide, TradeType } from '@lifi/perps-types';
1
+ import { type FeeTier, type Market, type MarketContext, type OrderbookLevel, type Quote, type QuoteSide, type TradeType } from '@lifi/perps-types';
2
2
  export declare function calculatePositionSize(marginUsd: number, leverage: number, price: number): number;
3
3
  export declare function calculateNotionalValue(size: number, price: number): number;
4
4
  export declare function calculateUnrealizedPnl(entryPrice: number, currentPrice: number, size: number): number;
@@ -1 +1 @@
1
- {"version":3,"file":"calculations.d.ts","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EACN,aAAa,EACb,cAAc,EACd,KAAK,EACL,SAAS,EACT,SAAS,EACV,MAAM,mBAAmB,CAAA;AAe1B,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,MAAM,CAER;AAUD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1E;AAWD,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,GACX,MAAM,CAER;AAUD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKhE;AAUD,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAUD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAErE;AAWD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,OAAO,GACb,MAAM,CAGR;AAWD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,gBAAgB,EAAE,MAAM,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;CACrB,GAAG,MAAM,CAMT;AAYD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,MAAM,CAMT;AAiBD,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,MAAM,CAOT;AAOD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAaD,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,MAAM,GACb,WAAW,GAAG,IAAI,CAUpB;AAWD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,GACd,MAAM,CAMR;AAWD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,GACd,MAAM,CAMR;AAWD,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,MAAM,CAMR;AAGD,UAAU,QAAQ;IAEhB,QAAQ,EAAE,MAAM,CAAA;IAEhB,cAAc,EAAE,MAAM,CAAA;IAEtB,IAAI,EAAE,MAAM,CAAA;IAEZ,qBAAqB,EAAE,OAAO,CAAA;CAC/B;AAYD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,cAAc,EAAE,EACxB,OAAO,EAAE,MAAM,GACd,QAAQ,CAqBV;AAGD,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,aAAa,CAAA;IACpB,IAAI,EAAE,cAAc,EAAE,CAAA;IACtB,IAAI,EAAE,cAAc,EAAE,CAAA;IAEtB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAWD,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,KAAK,CA+BxD"}
1
+ {"version":3,"file":"calculations.d.ts","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,8 @@ exports.percentFromPrice = percentFromPrice;
16
16
  exports.calculateRealizedPnlPercent = calculateRealizedPnlPercent;
17
17
  exports.walkOrderbook = walkOrderbook;
18
18
  exports.buildQuote = buildQuote;
19
+ const perps_types_1 = require("@lifi/perps-types");
20
+ const PerpsError_js_1 = require("../errors/PerpsError.js");
19
21
  function calculatePositionSize(marginUsd, leverage, price) {
20
22
  return (marginUsd * leverage) / price;
21
23
  }
@@ -104,7 +106,11 @@ function walkOrderbook(levels, sizeUsd) {
104
106
  break;
105
107
  }
106
108
  const price = Number.parseFloat(level.price);
107
- const levelNotional = Number.parseFloat(level.size) * price;
109
+ const size = Number.parseFloat(level.size);
110
+ if (!Number.isFinite(price) || !Number.isFinite(size)) {
111
+ throw new PerpsError_js_1.PerpsError(perps_types_1.PerpsErrorCode.ValidationError, `Malformed orderbook level: price='${level.price}', size='${level.size}'`);
112
+ }
113
+ const levelNotional = size * price;
108
114
  const take = Math.min(remaining, levelNotional);
109
115
  filledNotional += take;
110
116
  baseSize += take / price;
@@ -1 +1 @@
1
- {"version":3,"file":"calculations.js","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calculations.js","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  export declare const name = "@lifi/perps-sdk";
2
- export declare const version = "0.0.0-preview-c9a1971";
2
+ export declare const version = "0.0.0-preview-34f3bb2";
3
3
  //# sourceMappingURL=version.d.ts.map
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = exports.name = void 0;
4
4
  exports.name = '@lifi/perps-sdk';
5
- exports.version = '0.0.0-preview-c9a1971';
5
+ exports.version = '0.0.0-preview-34f3bb2';
6
6
  //# sourceMappingURL=version.js.map
@@ -6,15 +6,8 @@ import type { PerpsSDKClient } from '../types/provider.js';
6
6
  * NOT a cache: it holds no freshness policy of its own. Every {@link sync}
7
7
  * refetches through the HTTP layer, whose `cache-control` headers decide
8
8
  * whether the response comes from disk or the network. A lookup miss
9
- * schedules a background refetch that bypasses the HTTP cache — the id may
10
- * have listed after the cached snapshot.
11
- *
12
- * Refetch policy: an id not yet refetched-for triggers one immediate bypass
13
- * refetch so a just-listed id resolves promptly; repeated misses for an
14
- * already-refetched id are gated by {@link REFRESH_COOLDOWN_MS} (measured from
15
- * the previous refetch's completion), and only one bypass refetch runs at a
16
- * time. Concurrent loads install in generation order — a slower fetch that
17
- * started earlier can never overwrite the index a later fetch already installed.
9
+ * schedules a cooldown-gated background refetch that bypasses the HTTP
10
+ * cache — the id may have listed after the cached snapshot.
18
11
  *
19
12
  * @internal
20
13
  */
@@ -26,9 +19,6 @@ export declare abstract class ReferenceDataRegistry<T> {
26
19
  private current;
27
20
  private inflight;
28
21
  private warnedIds;
29
- private refetchedIds;
30
- private generation;
31
- private refreshInflight;
32
22
  private refreshAfter;
33
23
  protected constructor(client: PerpsSDKClient, provider: string, kind: string);
34
24
  /** Fetch the provider's full list, bypassing the HTTP cache when asked. */
@@ -44,8 +34,8 @@ export declare abstract class ReferenceDataRegistry<T> {
44
34
  /** The most recently synced list. Empty before the first {@link sync}. */
45
35
  protected get items(): readonly T[];
46
36
  /**
47
- * O(1) lookup by primary key. A miss warns once per id and schedules a
48
- * cache-bypassing background refetch per the class's refetch policy.
37
+ * O(1) lookup by primary key. A miss warns once per id and schedules the
38
+ * cooldown-gated, cache-bypassing background refetch.
49
39
  */
50
40
  get(id: string): T | undefined;
51
41
  private load;
@@ -1 +1 @@
1
- {"version":3,"file":"referenceDataRegistry.d.ts","sourceRoot":"","sources":["../../../src/registry/referenceDataRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAK1D;;;;;;;;;;;;;;;;;;GAkBG;AACH,8BAAsB,qBAAqB,CAAC,CAAC;IAWzC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAZvB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,YAAY,CAAI;IAExB,SAAS,aACY,MAAM,EAAE,cAAc,EAChC,QAAQ,EAAE,MAAM,EACR,IAAI,EAAE,MAAM;IAG/B,2EAA2E;IAC3E,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAErE,6DAA6D;IAC7D,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM;IAEzC;;;;OAIG;IACH,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IAS7B,0EAA0E;IAC1E,SAAS,KAAK,KAAK,IAAI,SAAS,CAAC,EAAE,CAElC;IAED;;;OAGG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;YAahB,IAAI;IAalB,OAAO,CAAC,eAAe;CA2BxB"}
1
+ {"version":3,"file":"referenceDataRegistry.d.ts","sourceRoot":"","sources":["../../../src/registry/referenceDataRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAK1D;;;;;;;;;;;GAWG;AACH,8BAAsB,qBAAqB,CAAC,CAAC;IAQzC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IATvB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,YAAY,CAAI;IAExB,SAAS,aACY,MAAM,EAAE,cAAc,EAChC,QAAQ,EAAE,MAAM,EACR,IAAI,EAAE,MAAM;IAG/B,2EAA2E;IAC3E,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAErE,6DAA6D;IAC7D,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM;IAEzC;;;;OAIG;IACH,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IAS7B,0EAA0E;IAC1E,SAAS,KAAK,KAAK,IAAI,SAAS,CAAC,EAAE,CAElC;IAED;;;OAGG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;YAahB,IAAI;IAQlB,OAAO,CAAC,eAAe;CAcxB"}
@@ -7,15 +7,8 @@ const REFRESH_COOLDOWN_MS = 60_000;
7
7
  * NOT a cache: it holds no freshness policy of its own. Every {@link sync}
8
8
  * refetches through the HTTP layer, whose `cache-control` headers decide
9
9
  * whether the response comes from disk or the network. A lookup miss
10
- * schedules a background refetch that bypasses the HTTP cache — the id may
11
- * have listed after the cached snapshot.
12
- *
13
- * Refetch policy: an id not yet refetched-for triggers one immediate bypass
14
- * refetch so a just-listed id resolves promptly; repeated misses for an
15
- * already-refetched id are gated by {@link REFRESH_COOLDOWN_MS} (measured from
16
- * the previous refetch's completion), and only one bypass refetch runs at a
17
- * time. Concurrent loads install in generation order — a slower fetch that
18
- * started earlier can never overwrite the index a later fetch already installed.
10
+ * schedules a cooldown-gated background refetch that bypasses the HTTP
11
+ * cache — the id may have listed after the cached snapshot.
19
12
  *
20
13
  * @internal
21
14
  */
@@ -27,9 +20,6 @@ export class ReferenceDataRegistry {
27
20
  current = [];
28
21
  inflight;
29
22
  warnedIds = new Set();
30
- refetchedIds = new Set();
31
- generation = 0;
32
- refreshInflight = false;
33
23
  refreshAfter = 0;
34
24
  constructor(client, provider, kind) {
35
25
  this.client = client;
@@ -54,8 +44,8 @@ export class ReferenceDataRegistry {
54
44
  return this.current;
55
45
  }
56
46
  /**
57
- * O(1) lookup by primary key. A miss warns once per id and schedules a
58
- * cache-bypassing background refetch per the class's refetch policy.
47
+ * O(1) lookup by primary key. A miss warns once per id and schedules the
48
+ * cooldown-gated, cache-bypassing background refetch.
59
49
  */
60
50
  get(id) {
61
51
  const item = this.index.get(id);
@@ -66,42 +56,24 @@ export class ReferenceDataRegistry {
66
56
  this.warnedIds.add(id);
67
57
  console.warn(`[${this.provider}] unknown ${this.kind} id '${id}'`);
68
58
  }
69
- this.scheduleRefresh(id);
59
+ this.scheduleRefresh();
70
60
  return undefined;
71
61
  }
72
62
  async load(bypassHttpCache) {
73
- const generation = ++this.generation;
74
63
  const items = await this.fetchItems(bypassHttpCache);
75
- // Install only if no later load has started since this fetch began, so a
76
- // slow stale response can never replace a fresher index.
77
- if (generation === this.generation) {
78
- this.index = new Map(items.map((item) => [this.keyOf(item), item]));
79
- this.current = items;
80
- this.warnedIds.clear();
81
- }
64
+ this.index = new Map(items.map((item) => [this.keyOf(item), item]));
65
+ this.current = items;
66
+ this.warnedIds.clear();
82
67
  return items;
83
68
  }
84
- scheduleRefresh(id) {
85
- // One bypass refetch reloads the whole list, covering every pending
86
- // unknown id, so never run two at once.
87
- if (this.refreshInflight) {
88
- this.refetchedIds.add(id);
89
- return;
90
- }
91
- // A not-yet-refetched id gets one immediate refetch even inside the
92
- // cooldown, so a just-listed id isn't withheld by an unrelated miss;
93
- // repeated misses for the same id stay cooldown-gated.
94
- if (this.refetchedIds.has(id) && Date.now() < this.refreshAfter) {
69
+ scheduleRefresh() {
70
+ const now = Date.now();
71
+ if (now < this.refreshAfter) {
95
72
  return;
96
73
  }
97
- this.refreshInflight = true;
98
- this.refetchedIds.add(id);
99
- this.load(true)
100
- .catch((error) => console.error(`[${this.provider}] ${this.kind} registry refresh failed`, error))
101
- .finally(() => {
102
- this.refreshInflight = false;
103
- this.refreshAfter = Date.now() + REFRESH_COOLDOWN_MS;
104
- });
74
+ // Set before any await so concurrent misses cannot trigger a refetch storm.
75
+ this.refreshAfter = now + REFRESH_COOLDOWN_MS;
76
+ this.load(true).catch((error) => console.error(`[${this.provider}] ${this.kind} registry refresh failed`, error));
105
77
  }
106
78
  }
107
79
  //# sourceMappingURL=referenceDataRegistry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"referenceDataRegistry.js","sourceRoot":"","sources":["../../../src/registry/referenceDataRegistry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"referenceDataRegistry.js","sourceRoot":"","sources":["../../../src/registry/referenceDataRegistry.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,MAAM,mBAAmB,GAAG,MAAM,CAAA;AAElC;;;;;;;;;;;GAWG;AACH,MAAM,OAAgB,qBAAqB;IAQpB;IACV;IACQ;IATX,KAAK,GAAG,IAAI,GAAG,EAAa,CAAA;IAC5B,OAAO,GAAiB,EAAE,CAAA;IAC1B,QAAQ,CAAmC;IAC3C,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;IAC7B,YAAY,GAAG,CAAC,CAAA;IAExB,YACqB,MAAsB,EAChC,QAAgB,EACR,IAAY;QAFV,WAAM,GAAN,MAAM,CAAgB;QAChC,aAAQ,GAAR,QAAQ,CAAQ;QACR,SAAI,GAAJ,IAAI,CAAQ;IAC5B,CAAC;IAQJ;;;;OAIG;IACH,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBAC5C,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;YAC3B,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,0EAA0E;IAC1E,IAAc,KAAK;QACjB,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,EAAU;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACtB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,aAAa,IAAI,CAAC,IAAI,QAAQ,EAAE,GAAG,CAAC,CAAA;QACpE,CAAC;QACD,IAAI,CAAC,eAAe,EAAE,CAAA;QACtB,OAAO,SAAS,CAAA;IAClB,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,eAAwB;QACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;QACpD,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QACnE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QACpB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;QACtB,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,eAAe;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5B,OAAM;QACR,CAAC;QACD,4EAA4E;QAC5E,IAAI,CAAC,YAAY,GAAG,GAAG,GAAG,mBAAmB,CAAA;QAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAC9B,OAAO,CAAC,KAAK,CACX,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,0BAA0B,EACzD,KAAK,CACN,CACF,CAAA;IACH,CAAC;CACF"}
@@ -5,7 +5,7 @@
5
5
  * of the perps SDK would need. All parameters are required — no default
6
6
  * values for critical financial parameters.
7
7
  */
8
- import type { FeeTier, Market, MarketContext, OrderbookLevel, Quote, QuoteSide, TradeType } from '@lifi/perps-types';
8
+ import { type FeeTier, type Market, type MarketContext, type OrderbookLevel, type Quote, type QuoteSide, type TradeType } from '@lifi/perps-types';
9
9
  /**
10
10
  * Calculate position size in asset units from margin.
11
11
  *
@@ -193,6 +193,8 @@ interface BookWalk {
193
193
  * notional, the walk stops at the last level and flags `insufficientLiquidity`,
194
194
  * returning the best obtainable fill.
195
195
  *
196
+ * @throws {PerpsError} `ValidationError` when a level's `price` or `size`
197
+ * does not parse to a finite number.
196
198
  * @public
197
199
  */
198
200
  export declare function walkOrderbook(levels: OrderbookLevel[], sizeUsd: number): BookWalk;
@@ -218,6 +220,8 @@ interface BuildQuoteInput {
218
220
  * versus mark, applies the base taker fee on the filled notional, and carries
219
221
  * the market's `funding` (`null` for spot, which has none).
220
222
  *
223
+ * @throws {PerpsError} `ValidationError` when a book level does not parse to
224
+ * a finite number — see {@link walkOrderbook}.
221
225
  * @public
222
226
  */
223
227
  export declare function buildQuote(input: BuildQuoteInput): Quote;
@@ -1 +1 @@
1
- {"version":3,"file":"calculations.d.ts","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calculations.d.ts","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,8 @@
5
5
  * of the perps SDK would need. All parameters are required — no default
6
6
  * values for critical financial parameters.
7
7
  */
8
+ import { PerpsErrorCode, } from '@lifi/perps-types';
9
+ import { PerpsError } from '../errors/PerpsError.js';
8
10
  /**
9
11
  * Calculate position size in asset units from margin.
10
12
  *
@@ -227,6 +229,8 @@ export function calculateRealizedPnlPercent(realizedPnl, size, price) {
227
229
  * notional, the walk stops at the last level and flags `insufficientLiquidity`,
228
230
  * returning the best obtainable fill.
229
231
  *
232
+ * @throws {PerpsError} `ValidationError` when a level's `price` or `size`
233
+ * does not parse to a finite number.
230
234
  * @public
231
235
  */
232
236
  export function walkOrderbook(levels, sizeUsd) {
@@ -238,7 +242,11 @@ export function walkOrderbook(levels, sizeUsd) {
238
242
  break;
239
243
  }
240
244
  const price = Number.parseFloat(level.price);
241
- const levelNotional = Number.parseFloat(level.size) * price;
245
+ const size = Number.parseFloat(level.size);
246
+ if (!Number.isFinite(price) || !Number.isFinite(size)) {
247
+ throw new PerpsError(PerpsErrorCode.ValidationError, `Malformed orderbook level: price='${level.price}', size='${level.size}'`);
248
+ }
249
+ const levelNotional = size * price;
242
250
  const take = Math.min(remaining, levelNotional);
243
251
  filledNotional += take;
244
252
  baseSize += take / price;
@@ -258,6 +266,8 @@ export function walkOrderbook(levels, sizeUsd) {
258
266
  * versus mark, applies the base taker fee on the filled notional, and carries
259
267
  * the market's `funding` (`null` for spot, which has none).
260
268
  *
269
+ * @throws {PerpsError} `ValidationError` when a book level does not parse to
270
+ * a finite number — see {@link walkOrderbook}.
261
271
  * @public
262
272
  */
263
273
  export function buildQuote(input) {
@@ -1 +1 @@
1
- {"version":3,"file":"calculations.js","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calculations.js","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  export declare const name = "@lifi/perps-sdk";
2
- export declare const version = "0.0.0-preview-c9a1971";
2
+ export declare const version = "0.0.0-preview-34f3bb2";
3
3
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  export const name = '@lifi/perps-sdk';
2
- export const version = '0.0.0-preview-c9a1971';
2
+ export const version = '0.0.0-preview-34f3bb2';
3
3
  //# sourceMappingURL=version.js.map
@@ -6,15 +6,8 @@ import type { PerpsSDKClient } from '../types/provider.js';
6
6
  * NOT a cache: it holds no freshness policy of its own. Every {@link sync}
7
7
  * refetches through the HTTP layer, whose `cache-control` headers decide
8
8
  * whether the response comes from disk or the network. A lookup miss
9
- * schedules a background refetch that bypasses the HTTP cache — the id may
10
- * have listed after the cached snapshot.
11
- *
12
- * Refetch policy: an id not yet refetched-for triggers one immediate bypass
13
- * refetch so a just-listed id resolves promptly; repeated misses for an
14
- * already-refetched id are gated by {@link REFRESH_COOLDOWN_MS} (measured from
15
- * the previous refetch's completion), and only one bypass refetch runs at a
16
- * time. Concurrent loads install in generation order — a slower fetch that
17
- * started earlier can never overwrite the index a later fetch already installed.
9
+ * schedules a cooldown-gated background refetch that bypasses the HTTP
10
+ * cache — the id may have listed after the cached snapshot.
18
11
  *
19
12
  * @internal
20
13
  */
@@ -26,9 +19,6 @@ export declare abstract class ReferenceDataRegistry<T> {
26
19
  private current;
27
20
  private inflight;
28
21
  private warnedIds;
29
- private refetchedIds;
30
- private generation;
31
- private refreshInflight;
32
22
  private refreshAfter;
33
23
  protected constructor(client: PerpsSDKClient, provider: string, kind: string);
34
24
  /** Fetch the provider's full list, bypassing the HTTP cache when asked. */
@@ -44,8 +34,8 @@ export declare abstract class ReferenceDataRegistry<T> {
44
34
  /** The most recently synced list. Empty before the first {@link sync}. */
45
35
  protected get items(): readonly T[];
46
36
  /**
47
- * O(1) lookup by primary key. A miss warns once per id and schedules a
48
- * cache-bypassing background refetch per the class's refetch policy.
37
+ * O(1) lookup by primary key. A miss warns once per id and schedules the
38
+ * cooldown-gated, cache-bypassing background refetch.
49
39
  */
50
40
  get(id: string): T | undefined;
51
41
  private load;
@@ -1 +1 @@
1
- {"version":3,"file":"referenceDataRegistry.d.ts","sourceRoot":"","sources":["../../../src/registry/referenceDataRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAK1D;;;;;;;;;;;;;;;;;;GAkBG;AACH,8BAAsB,qBAAqB,CAAC,CAAC;IAWzC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAZvB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,YAAY,CAAI;IAExB,SAAS,aACY,MAAM,EAAE,cAAc,EAChC,QAAQ,EAAE,MAAM,EACR,IAAI,EAAE,MAAM;IAG/B,2EAA2E;IAC3E,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAErE,6DAA6D;IAC7D,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM;IAEzC;;;;OAIG;IACH,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IAS7B,0EAA0E;IAC1E,SAAS,KAAK,KAAK,IAAI,SAAS,CAAC,EAAE,CAElC;IAED;;;OAGG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;YAahB,IAAI;IAalB,OAAO,CAAC,eAAe;CA2BxB"}
1
+ {"version":3,"file":"referenceDataRegistry.d.ts","sourceRoot":"","sources":["../../../src/registry/referenceDataRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAK1D;;;;;;;;;;;GAWG;AACH,8BAAsB,qBAAqB,CAAC,CAAC;IAQzC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IATvB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,YAAY,CAAI;IAExB,SAAS,aACY,MAAM,EAAE,cAAc,EAChC,QAAQ,EAAE,MAAM,EACR,IAAI,EAAE,MAAM;IAG/B,2EAA2E;IAC3E,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAErE,6DAA6D;IAC7D,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM;IAEzC;;;;OAIG;IACH,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IAS7B,0EAA0E;IAC1E,SAAS,KAAK,KAAK,IAAI,SAAS,CAAC,EAAE,CAElC;IAED;;;OAGG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;YAahB,IAAI;IAQlB,OAAO,CAAC,eAAe;CAcxB"}
@@ -5,7 +5,7 @@
5
5
  * of the perps SDK would need. All parameters are required — no default
6
6
  * values for critical financial parameters.
7
7
  */
8
- import type { FeeTier, Market, MarketContext, OrderbookLevel, Quote, QuoteSide, TradeType } from '@lifi/perps-types';
8
+ import { type FeeTier, type Market, type MarketContext, type OrderbookLevel, type Quote, type QuoteSide, type TradeType } from '@lifi/perps-types';
9
9
  /**
10
10
  * Calculate position size in asset units from margin.
11
11
  *
@@ -193,6 +193,8 @@ interface BookWalk {
193
193
  * notional, the walk stops at the last level and flags `insufficientLiquidity`,
194
194
  * returning the best obtainable fill.
195
195
  *
196
+ * @throws {PerpsError} `ValidationError` when a level's `price` or `size`
197
+ * does not parse to a finite number.
196
198
  * @public
197
199
  */
198
200
  export declare function walkOrderbook(levels: OrderbookLevel[], sizeUsd: number): BookWalk;
@@ -218,6 +220,8 @@ interface BuildQuoteInput {
218
220
  * versus mark, applies the base taker fee on the filled notional, and carries
219
221
  * the market's `funding` (`null` for spot, which has none).
220
222
  *
223
+ * @throws {PerpsError} `ValidationError` when a book level does not parse to
224
+ * a finite number — see {@link walkOrderbook}.
221
225
  * @public
222
226
  */
223
227
  export declare function buildQuote(input: BuildQuoteInput): Quote;
@@ -1 +1 @@
1
- {"version":3,"file":"calculations.d.ts","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calculations.d.ts","sourceRoot":"","sources":["../../../src/utils/calculations.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  export declare const name = "@lifi/perps-sdk";
2
- export declare const version = "0.0.0-preview-c9a1971";
2
+ export declare const version = "0.0.0-preview-34f3bb2";
3
3
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifi/perps-sdk",
3
- "version": "0.0.0-preview-c9a1971",
3
+ "version": "0.0.0-preview-34f3bb2",
4
4
  "description": "LI.FI Perps SDK for perpetuals trading",
5
5
  "homepage": "https://github.com/lifinance/perps-sdk",
6
6
  "bugs": {
@@ -10,15 +10,8 @@ const REFRESH_COOLDOWN_MS = 60_000
10
10
  * NOT a cache: it holds no freshness policy of its own. Every {@link sync}
11
11
  * refetches through the HTTP layer, whose `cache-control` headers decide
12
12
  * whether the response comes from disk or the network. A lookup miss
13
- * schedules a background refetch that bypasses the HTTP cache — the id may
14
- * have listed after the cached snapshot.
15
- *
16
- * Refetch policy: an id not yet refetched-for triggers one immediate bypass
17
- * refetch so a just-listed id resolves promptly; repeated misses for an
18
- * already-refetched id are gated by {@link REFRESH_COOLDOWN_MS} (measured from
19
- * the previous refetch's completion), and only one bypass refetch runs at a
20
- * time. Concurrent loads install in generation order — a slower fetch that
21
- * started earlier can never overwrite the index a later fetch already installed.
13
+ * schedules a cooldown-gated background refetch that bypasses the HTTP
14
+ * cache — the id may have listed after the cached snapshot.
22
15
  *
23
16
  * @internal
24
17
  */
@@ -27,9 +20,6 @@ export abstract class ReferenceDataRegistry<T> {
27
20
  private current: readonly T[] = []
28
21
  private inflight: Promise<readonly T[]> | undefined
29
22
  private warnedIds = new Set<string>()
30
- private refetchedIds = new Set<string>()
31
- private generation = 0
32
- private refreshInflight = false
33
23
  private refreshAfter = 0
34
24
 
35
25
  protected constructor(
@@ -64,8 +54,8 @@ export abstract class ReferenceDataRegistry<T> {
64
54
  }
65
55
 
66
56
  /**
67
- * O(1) lookup by primary key. A miss warns once per id and schedules a
68
- * cache-bypassing background refetch per the class's refetch policy.
57
+ * O(1) lookup by primary key. A miss warns once per id and schedules the
58
+ * cooldown-gated, cache-bypassing background refetch.
69
59
  */
70
60
  get(id: string): T | undefined {
71
61
  const item = this.index.get(id)
@@ -76,48 +66,30 @@ export abstract class ReferenceDataRegistry<T> {
76
66
  this.warnedIds.add(id)
77
67
  console.warn(`[${this.provider}] unknown ${this.kind} id '${id}'`)
78
68
  }
79
- this.scheduleRefresh(id)
69
+ this.scheduleRefresh()
80
70
  return undefined
81
71
  }
82
72
 
83
73
  private async load(bypassHttpCache: boolean): Promise<readonly T[]> {
84
- const generation = ++this.generation
85
74
  const items = await this.fetchItems(bypassHttpCache)
86
- // Install only if no later load has started since this fetch began, so a
87
- // slow stale response can never replace a fresher index.
88
- if (generation === this.generation) {
89
- this.index = new Map(items.map((item) => [this.keyOf(item), item]))
90
- this.current = items
91
- this.warnedIds.clear()
92
- }
75
+ this.index = new Map(items.map((item) => [this.keyOf(item), item]))
76
+ this.current = items
77
+ this.warnedIds.clear()
93
78
  return items
94
79
  }
95
80
 
96
- private scheduleRefresh(id: string): void {
97
- // One bypass refetch reloads the whole list, covering every pending
98
- // unknown id, so never run two at once.
99
- if (this.refreshInflight) {
100
- this.refetchedIds.add(id)
81
+ private scheduleRefresh(): void {
82
+ const now = Date.now()
83
+ if (now < this.refreshAfter) {
101
84
  return
102
85
  }
103
- // A not-yet-refetched id gets one immediate refetch even inside the
104
- // cooldown, so a just-listed id isn't withheld by an unrelated miss;
105
- // repeated misses for the same id stay cooldown-gated.
106
- if (this.refetchedIds.has(id) && Date.now() < this.refreshAfter) {
107
- return
108
- }
109
- this.refreshInflight = true
110
- this.refetchedIds.add(id)
111
- this.load(true)
112
- .catch((error) =>
113
- console.error(
114
- `[${this.provider}] ${this.kind} registry refresh failed`,
115
- error
116
- )
86
+ // Set before any await so concurrent misses cannot trigger a refetch storm.
87
+ this.refreshAfter = now + REFRESH_COOLDOWN_MS
88
+ this.load(true).catch((error) =>
89
+ console.error(
90
+ `[${this.provider}] ${this.kind} registry refresh failed`,
91
+ error
117
92
  )
118
- .finally(() => {
119
- this.refreshInflight = false
120
- this.refreshAfter = Date.now() + REFRESH_COOLDOWN_MS
121
- })
93
+ )
122
94
  }
123
95
  }
@@ -6,15 +6,17 @@
6
6
  * values for critical financial parameters.
7
7
  */
8
8
 
9
- import type {
10
- FeeTier,
11
- Market,
12
- MarketContext,
13
- OrderbookLevel,
14
- Quote,
15
- QuoteSide,
16
- TradeType,
9
+ import {
10
+ type FeeTier,
11
+ type Market,
12
+ type MarketContext,
13
+ type OrderbookLevel,
14
+ PerpsErrorCode,
15
+ type Quote,
16
+ type QuoteSide,
17
+ type TradeType,
17
18
  } from '@lifi/perps-types'
19
+ import { PerpsError } from '../errors/PerpsError.js'
18
20
 
19
21
  /**
20
22
  * Calculate position size in asset units from margin.
@@ -319,6 +321,8 @@ interface BookWalk {
319
321
  * notional, the walk stops at the last level and flags `insufficientLiquidity`,
320
322
  * returning the best obtainable fill.
321
323
  *
324
+ * @throws {PerpsError} `ValidationError` when a level's `price` or `size`
325
+ * does not parse to a finite number.
322
326
  * @public
323
327
  */
324
328
  export function walkOrderbook(
@@ -333,7 +337,14 @@ export function walkOrderbook(
333
337
  break
334
338
  }
335
339
  const price = Number.parseFloat(level.price)
336
- const levelNotional = Number.parseFloat(level.size) * price
340
+ const size = Number.parseFloat(level.size)
341
+ if (!Number.isFinite(price) || !Number.isFinite(size)) {
342
+ throw new PerpsError(
343
+ PerpsErrorCode.ValidationError,
344
+ `Malformed orderbook level: price='${level.price}', size='${level.size}'`
345
+ )
346
+ }
347
+ const levelNotional = size * price
337
348
  const take = Math.min(remaining, levelNotional)
338
349
  filledNotional += take
339
350
  baseSize += take / price
@@ -370,6 +381,8 @@ interface BuildQuoteInput {
370
381
  * versus mark, applies the base taker fee on the filled notional, and carries
371
382
  * the market's `funding` (`null` for spot, which has none).
372
383
  *
384
+ * @throws {PerpsError} `ValidationError` when a book level does not parse to
385
+ * a finite number — see {@link walkOrderbook}.
373
386
  * @public
374
387
  */
375
388
  export function buildQuote(input: BuildQuoteInput): Quote {
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export const name = '@lifi/perps-sdk'
2
- export const version = '0.0.0-preview-c9a1971'
2
+ export const version = '0.0.0-preview-34f3bb2'