@newyorkcompute/kalshi-core 0.4.0 → 0.5.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.
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EACb,SAAS,EACT,YAAY,EACZ,SAAS,EACT,SAAS,EACV,MAAM,mBAAmB,CAAC;AAE3B;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,kDAAkD,CAAC;AAEjF;;GAEG;AACH,eAAO,MAAM,cAAc,4CAA4C,CAAC;AAExE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAc9C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,CAMnE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAG/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAGrE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAG/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAG/D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EACb,SAAS,EACT,YAAY,EACZ,SAAS,EACT,SAAS,EACV,MAAM,mBAAmB,CAAC;AAE3B;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,kDAAkD,CAAC;AAEjF;;GAEG;AACH,eAAO,MAAM,cAAc,4CAA4C,CAAC;AAExE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAmB9C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,CAMnE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAG/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAGrE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAG/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAG/D"}
package/dist/config.js CHANGED
@@ -31,7 +31,7 @@ export const DEMO_BASE_PATH = "https://demo-api.kalshi.co/trade-api/v2";
31
31
  */
32
32
  export function getKalshiConfig() {
33
33
  const apiKey = process.env.KALSHI_API_KEY;
34
- const privateKey = process.env.KALSHI_PRIVATE_KEY;
34
+ let privateKey = process.env.KALSHI_PRIVATE_KEY;
35
35
  const basePath = process.env.KALSHI_BASE_PATH || DEFAULT_BASE_PATH;
36
36
  if (!apiKey) {
37
37
  throw new Error("KALSHI_API_KEY environment variable is required");
@@ -39,6 +39,10 @@ export function getKalshiConfig() {
39
39
  if (!privateKey) {
40
40
  throw new Error("KALSHI_PRIVATE_KEY environment variable is required");
41
41
  }
42
+ // Handle escaped newlines from .env files
43
+ if (privateKey.includes("\\n")) {
44
+ privateKey = privateKey.replace(/\\n/g, "\n");
45
+ }
42
46
  return { apiKey, privateKey, basePath };
43
47
  }
44
48
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EACb,SAAS,EACT,YAAY,EACZ,SAAS,EACT,SAAS,GACV,MAAM,mBAAmB,CAAC;AAe3B;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,+CAA+C,CAAC;AAEjF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,yCAAyC,CAAC;AAExE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,iBAAiB,CAAC;IAEnE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,OAAO,IAAI,aAAa,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,aAAa,EAAE,MAAM,CAAC,UAAU;QAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,aAAa,EACb,SAAS,EACT,YAAY,EACZ,SAAS,EACT,SAAS,GACV,MAAM,mBAAmB,CAAC;AAe3B;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,+CAA+C,CAAC;AAEjF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,yCAAyC,CAAC;AAExE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC1C,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,iBAAiB,CAAC;IAEnE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,0CAA0C;IAC1C,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,OAAO,IAAI,aAAa,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,aAAa,EAAE,MAAM,CAAC,UAAU;QAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IAClD,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1C,OAAO,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -11,5 +11,5 @@ export * from "./types.js";
11
11
  export { withTimeout, TimeoutError } from "./with-timeout.js";
12
12
  export { validateOrder, type OrderValidationInput, type OrderValidationResult, } from "./validate-order.js";
13
13
  export { KalshiWsClient, generateWsAuthHeaders, generateSignedWsUrl, type KalshiWsConfig, type KalshiWsEventHandlers, type SubscriptionChannel, type ConnectionState, type ActiveSubscriptions, type OrderbookDeltaMessage, type TickerMessage, type TradeMessage, type FillMessage, type WsMessage, WS_ENDPOINTS, } from "./websocket/index.js";
14
- export { OrderManager, InventoryTracker, RiskManager, DEFAULT_RISK_LIMITS, type Side, type Action, type OrderStatus, type ManagedOrder, type Quote, type Position, type RiskLimits, type RiskCheckResult, type Fill, type PnLSummary, type CreateOrderInput, type PlaceOrderResult, } from "./mm/index.js";
14
+ export { OrderManager, InventoryTracker, RiskManager, LocalOrderbook, OrderbookManager, DEFAULT_RISK_LIMITS, type Side, type Action, type OrderStatus, type ManagedOrder, type Quote, type Position, type RiskLimits, type RiskCheckResult, type Fill, type PnLSummary, type CreateOrderInput, type PlaceOrderResult, type PriceLevel, type OrderbookSnapshot, type OrderbookDelta, type BBO, } from "./mm/index.js";
15
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,KAAK,YAAY,EACjB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,SAAS,GACV,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAG3B,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG9D,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,YAAY,GACb,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,KAAK,IAAI,EACT,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,KAAK,YAAY,EACjB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,SAAS,GACV,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAG3B,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG9D,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,YAAY,GACb,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,IAAI,EACT,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,GAAG,GACT,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -20,5 +20,5 @@ export { validateOrder, } from "./validate-order.js";
20
20
  // WebSocket (real-time data)
21
21
  export { KalshiWsClient, generateWsAuthHeaders, generateSignedWsUrl, WS_ENDPOINTS, } from "./websocket/index.js";
22
22
  // Market Making primitives
23
- export { OrderManager, InventoryTracker, RiskManager, DEFAULT_RISK_LIMITS, } from "./mm/index.js";
23
+ export { OrderManager, InventoryTracker, RiskManager, LocalOrderbook, OrderbookManager, DEFAULT_RISK_LIMITS, } from "./mm/index.js";
24
24
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,OAAO,EAEL,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,uBAAuB;AACvB,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,kBAAkB;AAClB,OAAO,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,gBAAgB;AAChB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAIjB,MAAM,mBAAmB,CAAC;AAE3B,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE9D,aAAa;AACb,OAAO,EACL,aAAa,GAGd,MAAM,qBAAqB,CAAC;AAE7B,6BAA6B;AAC7B,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EAWnB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAE9B,2BAA2B;AAC3B,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,mBAAmB,GAapB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gBAAgB;AAChB,OAAO,EAEL,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,uBAAuB;AACvB,OAAO,EACL,WAAW,EACX,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,kBAAkB;AAClB,OAAO,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,gBAAgB;AAChB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAIjB,MAAM,mBAAmB,CAAC;AAE3B,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE9D,aAAa;AACb,OAAO,EACL,aAAa,GAGd,MAAM,qBAAqB,CAAC;AAE7B,6BAA6B;AAC7B,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EAWnB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAE9B,2BAA2B;AAC3B,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,mBAAmB,GAiBpB,MAAM,eAAe,CAAC"}
@@ -7,4 +7,5 @@ export type { Side, Action, OrderStatus, ManagedOrder, Quote, Position, RiskLimi
7
7
  export { OrderManager, type CreateOrderInput, type PlaceOrderResult, } from "./order-manager.js";
8
8
  export { InventoryTracker } from "./inventory.js";
9
9
  export { RiskManager, DEFAULT_RISK_LIMITS } from "./risk.js";
10
+ export { LocalOrderbook, OrderbookManager, type PriceLevel, type OrderbookSnapshot, type OrderbookDelta, type BBO, } from "./orderbook.js";
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mm/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,IAAI,EACJ,MAAM,EACN,WAAW,EACX,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,UAAU,EACV,eAAe,EACf,IAAI,EACJ,UAAU,GACX,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mm/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,IAAI,EACJ,MAAM,EACN,WAAW,EACX,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,UAAU,EACV,eAAe,EACf,IAAI,EACJ,UAAU,GACX,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAG7D,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,GAAG,GACT,MAAM,gBAAgB,CAAC"}
package/dist/mm/index.js CHANGED
@@ -9,4 +9,6 @@ export { OrderManager, } from "./order-manager.js";
9
9
  export { InventoryTracker } from "./inventory.js";
10
10
  // Risk Manager
11
11
  export { RiskManager, DEFAULT_RISK_LIMITS } from "./risk.js";
12
+ // Local Orderbook
13
+ export { LocalOrderbook, OrderbookManager, } from "./orderbook.js";
12
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mm/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,gBAAgB;AAChB,OAAO,EACL,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAE5B,oBAAoB;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mm/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,gBAAgB;AAChB,OAAO,EACL,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAE5B,oBAAoB;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAE7D,kBAAkB;AAClB,OAAO,EACL,cAAc,EACd,gBAAgB,GAKjB,MAAM,gBAAgB,CAAC"}
@@ -60,15 +60,27 @@ export declare class OrderManager {
60
60
  */
61
61
  updateStatus(clientOrderId: string, status: OrderStatus, filledCount?: number, avgFillPrice?: number): void;
62
62
  /**
63
- * Update quotes for a market (cancel old, place new)
63
+ * Update quotes for a market (ATOMIC: place new BEFORE canceling old)
64
64
  *
65
- * This is the main method for market making - it atomically updates
66
- * the bid/ask quotes for a given market.
65
+ * This is the main method for market making - it updates quotes with
66
+ * minimal exposure gap:
67
+ * 1. Place new orders first (briefly have double exposure)
68
+ * 2. Cancel old orders only after new ones confirmed
69
+ *
70
+ * This prevents the "naked" period where we have no quotes in market.
67
71
  */
68
72
  updateQuote(quote: Quote): Promise<{
69
73
  cancelled: number;
70
74
  placed: PlaceOrderResult[];
71
75
  }>;
76
+ /**
77
+ * Update quotes (legacy mode: cancel first, then place)
78
+ * Use this if you're hitting rate limits from double orders
79
+ */
80
+ updateQuoteLegacy(quote: Quote): Promise<{
81
+ cancelled: number;
82
+ placed: PlaceOrderResult[];
83
+ }>;
72
84
  /**
73
85
  * Clean up old completed orders (keep memory bounded)
74
86
  */
@@ -1 +1 @@
1
- {"version":3,"file":"order-manager.d.ts","sourceRoot":"","sources":["../../src/mm/order-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EACV,YAAY,EACZ,IAAI,EACJ,MAAM,EACN,WAAW,EACX,KAAK,EACN,MAAM,YAAY,CAAC;AAEpB,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,gCAAgC;AAChC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AASD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,SAAS,CAAY;gBAEjB,SAAS,EAAE,SAAS;IAIhC;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA6C/D;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAKxE;;OAEG;IACG,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBrD;;OAEG;IACG,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBjD;;OAEG;IACH,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAa1C;;OAEG;IACH,MAAM,IAAI,YAAY,EAAE;IAIxB;;OAEG;IACH,GAAG,CAAC,aAAa,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIpD;;OAEG;IACH,YAAY,CACV,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,WAAW,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI;IAaP;;;;;OAKG;IACG,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;QACvC,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,gBAAgB,EAAE,CAAC;KAC5B,CAAC;IAkCF;;OAEG;IACH,OAAO,CAAC,MAAM,GAAE,MAA4B,GAAG,MAAM;IAgBrD;;OAEG;IACH,OAAO,CAAC,eAAe;CAexB"}
1
+ {"version":3,"file":"order-manager.d.ts","sourceRoot":"","sources":["../../src/mm/order-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EACV,YAAY,EACZ,IAAI,EACJ,MAAM,EACN,WAAW,EACX,KAAK,EACN,MAAM,YAAY,CAAC;AAEpB,qCAAqC;AACrC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,gCAAgC;AAChC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AASD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,SAAS,CAAY;gBAEjB,SAAS,EAAE,SAAS;IAIhC;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA6C/D;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAKxE;;OAEG;IACG,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBrD;;OAEG;IACG,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBjD;;OAEG;IACH,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAa1C;;OAEG;IACH,MAAM,IAAI,YAAY,EAAE;IAIxB;;OAEG;IACH,GAAG,CAAC,aAAa,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIpD;;OAEG;IACH,YAAY,CACV,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,WAAW,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI;IAaP;;;;;;;;;OASG;IACG,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;QACvC,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,gBAAgB,EAAE,CAAC;KAC5B,CAAC;IAiDF;;;OAGG;IACG,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;QAC7C,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,gBAAgB,EAAE,CAAC;KAC5B,CAAC;IAgCF;;OAEG;IACH,OAAO,CAAC,MAAM,GAAE,MAA4B,GAAG,MAAM;IAgBrD;;OAEG;IACH,OAAO,CAAC,eAAe;CAexB"}
@@ -144,17 +144,64 @@ export class OrderManager {
144
144
  }
145
145
  }
146
146
  /**
147
- * Update quotes for a market (cancel old, place new)
147
+ * Update quotes for a market (ATOMIC: place new BEFORE canceling old)
148
148
  *
149
- * This is the main method for market making - it atomically updates
150
- * the bid/ask quotes for a given market.
149
+ * This is the main method for market making - it updates quotes with
150
+ * minimal exposure gap:
151
+ * 1. Place new orders first (briefly have double exposure)
152
+ * 2. Cancel old orders only after new ones confirmed
153
+ *
154
+ * This prevents the "naked" period where we have no quotes in market.
151
155
  */
152
156
  async updateQuote(quote) {
157
+ // Get existing orders for this ticker BEFORE placing new ones
158
+ const existingOrders = this.getActive(quote.ticker);
159
+ // Build new orders
160
+ const newOrders = [];
161
+ // Bid (buy YES at bid price)
162
+ if (quote.bidSize > 0 && quote.bidPrice >= 1 && quote.bidPrice <= 99) {
163
+ newOrders.push({
164
+ ticker: quote.ticker,
165
+ side: quote.side,
166
+ action: "buy",
167
+ price: quote.bidPrice,
168
+ count: quote.bidSize,
169
+ });
170
+ }
171
+ // Ask (sell YES at ask price, or buy NO)
172
+ if (quote.askSize > 0 && quote.askPrice >= 1 && quote.askPrice <= 99) {
173
+ newOrders.push({
174
+ ticker: quote.ticker,
175
+ side: quote.side,
176
+ action: "sell",
177
+ price: quote.askPrice,
178
+ count: quote.askSize,
179
+ });
180
+ }
181
+ // 1. Place new orders FIRST (we briefly have double exposure)
182
+ const placed = await this.placeBulk(newOrders);
183
+ // 2. Cancel old orders AFTER new ones are placed
184
+ // Even if new orders fail, we still cancel old stale quotes
185
+ let cancelled = 0;
186
+ if (existingOrders.length > 0) {
187
+ const cancelResults = await Promise.allSettled(existingOrders.map((order) => this.cancel(order.clientOrderId)));
188
+ for (const result of cancelResults) {
189
+ if (result.status === "fulfilled" && result.value) {
190
+ cancelled++;
191
+ }
192
+ }
193
+ }
194
+ return { cancelled, placed };
195
+ }
196
+ /**
197
+ * Update quotes (legacy mode: cancel first, then place)
198
+ * Use this if you're hitting rate limits from double orders
199
+ */
200
+ async updateQuoteLegacy(quote) {
153
201
  // 1. Cancel existing orders for this ticker
154
202
  const cancelled = await this.cancelAll(quote.ticker);
155
203
  // 2. Place new bid and ask orders
156
204
  const orders = [];
157
- // Bid (buy YES at bid price)
158
205
  if (quote.bidSize > 0 && quote.bidPrice >= 1 && quote.bidPrice <= 99) {
159
206
  orders.push({
160
207
  ticker: quote.ticker,
@@ -164,7 +211,6 @@ export class OrderManager {
164
211
  count: quote.bidSize,
165
212
  });
166
213
  }
167
- // Ask (sell YES at ask price, or buy NO)
168
214
  if (quote.askSize > 0 && quote.askPrice >= 1 && quote.askPrice <= 99) {
169
215
  orders.push({
170
216
  ticker: quote.ticker,
@@ -1 +1 @@
1
- {"version":3,"file":"order-manager.js","sourceRoot":"","sources":["../../src/mm/order-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"order-manager.js","sourceRoot":"","sources":["../../src/mm/order-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Local Orderbook
3
+ *
4
+ * Maintains a local copy of the orderbook from WebSocket snapshots and deltas.
5
+ * This allows for fast quote updates without waiting for ticker messages.
6
+ */
7
+ /** Single price level in the orderbook */
8
+ export interface PriceLevel {
9
+ price: number;
10
+ quantity: number;
11
+ }
12
+ /** Orderbook snapshot from WebSocket */
13
+ export interface OrderbookSnapshot {
14
+ market_ticker: string;
15
+ market_id: string;
16
+ /** YES side bids: [price, quantity][] */
17
+ yes: [number, number][];
18
+ /** NO side bids: [price, quantity][] */
19
+ no: [number, number][];
20
+ }
21
+ /** Orderbook delta from WebSocket */
22
+ export interface OrderbookDelta {
23
+ market_ticker: string;
24
+ /** Price that changed */
25
+ price: number;
26
+ /** New quantity (0 = level removed) */
27
+ delta: number;
28
+ /** Which side: 'yes' or 'no' */
29
+ side: "yes" | "no";
30
+ }
31
+ /** Best bid/ask with size */
32
+ export interface BBO {
33
+ bidPrice: number;
34
+ bidSize: number;
35
+ askPrice: number;
36
+ askSize: number;
37
+ midPrice: number;
38
+ spread: number;
39
+ }
40
+ /**
41
+ * LocalOrderbook maintains orderbook state from WebSocket messages.
42
+ *
43
+ * Key insight for Kalshi:
44
+ * - YES bids are stored in `yes` array
45
+ * - NO bids are stored in `no` array
46
+ * - YES ask = 100 - NO bid price
47
+ *
48
+ * Example: If there's a NO bid at 90¢, that's equivalent to a YES ask at 10¢
49
+ */
50
+ export declare class LocalOrderbook {
51
+ private ticker;
52
+ /** YES bids: price → quantity */
53
+ private yesBids;
54
+ /** NO bids: price → quantity (YES asks = 100 - NO bid) */
55
+ private noBids;
56
+ /** Last update timestamp */
57
+ private lastUpdate;
58
+ /** Sequence number for ordering */
59
+ private sequence;
60
+ constructor(ticker: string);
61
+ /**
62
+ * Apply a full orderbook snapshot
63
+ */
64
+ applySnapshot(snapshot: OrderbookSnapshot): void;
65
+ /**
66
+ * Apply an incremental delta update
67
+ */
68
+ applyDelta(delta: OrderbookDelta): void;
69
+ /**
70
+ * Get best bid (highest YES bid)
71
+ */
72
+ getBestBid(): PriceLevel | null;
73
+ /**
74
+ * Get best ask (100 - highest NO bid)
75
+ */
76
+ getBestAsk(): PriceLevel | null;
77
+ /**
78
+ * Get best bid and offer (BBO)
79
+ */
80
+ getBBO(): BBO | null;
81
+ /**
82
+ * Get microprice (size-weighted mid)
83
+ * Better estimate of "fair value" than simple mid
84
+ *
85
+ * microprice = (bid * askSize + ask * bidSize) / (bidSize + askSize)
86
+ *
87
+ * If ask size is smaller, price is closer to ask (more selling pressure)
88
+ * If bid size is smaller, price is closer to bid (more buying pressure)
89
+ */
90
+ getMicroprice(): number | null;
91
+ /**
92
+ * Get depth at N levels
93
+ */
94
+ getDepth(levels?: number): {
95
+ bids: PriceLevel[];
96
+ asks: PriceLevel[];
97
+ };
98
+ /**
99
+ * Get total bid depth (sum of all bid quantities)
100
+ */
101
+ getTotalBidDepth(): number;
102
+ /**
103
+ * Get total ask depth (sum of all ask quantities)
104
+ */
105
+ getTotalAskDepth(): number;
106
+ /**
107
+ * Get imbalance ratio: (bidDepth - askDepth) / (bidDepth + askDepth)
108
+ * Positive = more bids (bullish), Negative = more asks (bearish)
109
+ */
110
+ getImbalance(): number;
111
+ /**
112
+ * Check if orderbook is stale (no updates for X ms)
113
+ */
114
+ isStale(maxAgeMs?: number): boolean;
115
+ /**
116
+ * Get time since last update
117
+ */
118
+ getAge(): number;
119
+ /**
120
+ * Get sequence number (for ordering/debugging)
121
+ */
122
+ getSequence(): number;
123
+ /**
124
+ * Get ticker
125
+ */
126
+ getTicker(): string;
127
+ /**
128
+ * Clear the orderbook
129
+ */
130
+ clear(): void;
131
+ }
132
+ /**
133
+ * OrderbookManager manages multiple LocalOrderbook instances
134
+ */
135
+ export declare class OrderbookManager {
136
+ private orderbooks;
137
+ /**
138
+ * Get or create orderbook for a ticker
139
+ */
140
+ getOrderbook(ticker: string): LocalOrderbook;
141
+ /**
142
+ * Apply snapshot to appropriate orderbook
143
+ */
144
+ applySnapshot(snapshot: OrderbookSnapshot): void;
145
+ /**
146
+ * Apply delta to appropriate orderbook
147
+ */
148
+ applyDelta(delta: OrderbookDelta): void;
149
+ /**
150
+ * Get BBO for a ticker
151
+ */
152
+ getBBO(ticker: string): BBO | null;
153
+ /**
154
+ * Get all managed tickers
155
+ */
156
+ getTickers(): string[];
157
+ /**
158
+ * Clear all orderbooks
159
+ */
160
+ clear(): void;
161
+ }
162
+ //# sourceMappingURL=orderbook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderbook.d.ts","sourceRoot":"","sources":["../../src/mm/orderbook.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,0CAA0C;AAC1C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACxB,wCAAwC;IACxC,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;CACxB;AAED,qCAAqC;AACrC,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;CACpB;AAED,6BAA6B;AAC7B,MAAM,WAAW,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,iCAAiC;IACjC,OAAO,CAAC,OAAO,CAAkC;IACjD,0DAA0D;IAC1D,OAAO,CAAC,MAAM,CAAkC;IAChD,4BAA4B;IAC5B,OAAO,CAAC,UAAU,CAAa;IAC/B,mCAAmC;IACnC,OAAO,CAAC,QAAQ,CAAa;gBAEjB,MAAM,EAAE,MAAM;IAI1B;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAsBhD;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAevC;;OAEG;IACH,UAAU,IAAI,UAAU,GAAG,IAAI;IAgB/B;;OAEG;IACH,UAAU,IAAI,UAAU,GAAG,IAAI;IAmB/B;;OAEG;IACH,MAAM,IAAI,GAAG,GAAG,IAAI;IAgBpB;;;;;;;;OAQG;IACH,aAAa,IAAI,MAAM,GAAG,IAAI;IAY9B;;OAEG;IACH,QAAQ,CAAC,MAAM,GAAE,MAAU,GAAG;QAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAAC,IAAI,EAAE,UAAU,EAAE,CAAA;KAAE;IAkBxE;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAQ1B;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAQ1B;;;OAGG;IACH,YAAY,IAAI,MAAM;IAStB;;OAEG;IACH,OAAO,CAAC,QAAQ,GAAE,MAAa,GAAG,OAAO;IAIzC;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAA0C;IAE5D;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAS5C;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAKhD;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAKvC;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAIlC;;OAEG;IACH,UAAU,IAAI,MAAM,EAAE;IAItB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,271 @@
1
+ /**
2
+ * Local Orderbook
3
+ *
4
+ * Maintains a local copy of the orderbook from WebSocket snapshots and deltas.
5
+ * This allows for fast quote updates without waiting for ticker messages.
6
+ */
7
+ /**
8
+ * LocalOrderbook maintains orderbook state from WebSocket messages.
9
+ *
10
+ * Key insight for Kalshi:
11
+ * - YES bids are stored in `yes` array
12
+ * - NO bids are stored in `no` array
13
+ * - YES ask = 100 - NO bid price
14
+ *
15
+ * Example: If there's a NO bid at 90¢, that's equivalent to a YES ask at 10¢
16
+ */
17
+ export class LocalOrderbook {
18
+ ticker;
19
+ /** YES bids: price → quantity */
20
+ yesBids = new Map();
21
+ /** NO bids: price → quantity (YES asks = 100 - NO bid) */
22
+ noBids = new Map();
23
+ /** Last update timestamp */
24
+ lastUpdate = 0;
25
+ /** Sequence number for ordering */
26
+ sequence = 0;
27
+ constructor(ticker) {
28
+ this.ticker = ticker;
29
+ }
30
+ /**
31
+ * Apply a full orderbook snapshot
32
+ */
33
+ applySnapshot(snapshot) {
34
+ this.yesBids.clear();
35
+ this.noBids.clear();
36
+ // Load YES bids
37
+ for (const [price, qty] of snapshot.yes) {
38
+ if (qty > 0) {
39
+ this.yesBids.set(price, qty);
40
+ }
41
+ }
42
+ // Load NO bids
43
+ for (const [price, qty] of snapshot.no) {
44
+ if (qty > 0) {
45
+ this.noBids.set(price, qty);
46
+ }
47
+ }
48
+ this.lastUpdate = Date.now();
49
+ this.sequence++;
50
+ }
51
+ /**
52
+ * Apply an incremental delta update
53
+ */
54
+ applyDelta(delta) {
55
+ const map = delta.side === "yes" ? this.yesBids : this.noBids;
56
+ if (delta.delta <= 0) {
57
+ // Remove level
58
+ map.delete(delta.price);
59
+ }
60
+ else {
61
+ // Update level
62
+ map.set(delta.price, delta.delta);
63
+ }
64
+ this.lastUpdate = Date.now();
65
+ this.sequence++;
66
+ }
67
+ /**
68
+ * Get best bid (highest YES bid)
69
+ */
70
+ getBestBid() {
71
+ if (this.yesBids.size === 0)
72
+ return null;
73
+ let bestPrice = 0;
74
+ let bestQty = 0;
75
+ for (const [price, qty] of this.yesBids) {
76
+ if (price > bestPrice && qty > 0) {
77
+ bestPrice = price;
78
+ bestQty = qty;
79
+ }
80
+ }
81
+ return bestPrice > 0 ? { price: bestPrice, quantity: bestQty } : null;
82
+ }
83
+ /**
84
+ * Get best ask (100 - highest NO bid)
85
+ */
86
+ getBestAsk() {
87
+ if (this.noBids.size === 0)
88
+ return null;
89
+ let bestNoPrice = 0;
90
+ let bestQty = 0;
91
+ for (const [price, qty] of this.noBids) {
92
+ if (price > bestNoPrice && qty > 0) {
93
+ bestNoPrice = price;
94
+ bestQty = qty;
95
+ }
96
+ }
97
+ if (bestNoPrice === 0)
98
+ return null;
99
+ // Convert NO bid to YES ask
100
+ return { price: 100 - bestNoPrice, quantity: bestQty };
101
+ }
102
+ /**
103
+ * Get best bid and offer (BBO)
104
+ */
105
+ getBBO() {
106
+ const bid = this.getBestBid();
107
+ const ask = this.getBestAsk();
108
+ if (!bid || !ask)
109
+ return null;
110
+ return {
111
+ bidPrice: bid.price,
112
+ bidSize: bid.quantity,
113
+ askPrice: ask.price,
114
+ askSize: ask.quantity,
115
+ midPrice: (bid.price + ask.price) / 2,
116
+ spread: ask.price - bid.price,
117
+ };
118
+ }
119
+ /**
120
+ * Get microprice (size-weighted mid)
121
+ * Better estimate of "fair value" than simple mid
122
+ *
123
+ * microprice = (bid * askSize + ask * bidSize) / (bidSize + askSize)
124
+ *
125
+ * If ask size is smaller, price is closer to ask (more selling pressure)
126
+ * If bid size is smaller, price is closer to bid (more buying pressure)
127
+ */
128
+ getMicroprice() {
129
+ const bid = this.getBestBid();
130
+ const ask = this.getBestAsk();
131
+ if (!bid || !ask)
132
+ return null;
133
+ const totalSize = bid.quantity + ask.quantity;
134
+ if (totalSize === 0)
135
+ return (bid.price + ask.price) / 2;
136
+ return (bid.price * ask.quantity + ask.price * bid.quantity) / totalSize;
137
+ }
138
+ /**
139
+ * Get depth at N levels
140
+ */
141
+ getDepth(levels = 5) {
142
+ // Sort bids descending (highest first)
143
+ const sortedBids = Array.from(this.yesBids.entries())
144
+ .filter(([, qty]) => qty > 0)
145
+ .sort(([a], [b]) => b - a)
146
+ .slice(0, levels)
147
+ .map(([price, quantity]) => ({ price, quantity }));
148
+ // Convert NO bids to YES asks, sort ascending (lowest first)
149
+ const sortedAsks = Array.from(this.noBids.entries())
150
+ .filter(([, qty]) => qty > 0)
151
+ .map(([noPrice, quantity]) => ({ price: 100 - noPrice, quantity }))
152
+ .sort((a, b) => a.price - b.price)
153
+ .slice(0, levels);
154
+ return { bids: sortedBids, asks: sortedAsks };
155
+ }
156
+ /**
157
+ * Get total bid depth (sum of all bid quantities)
158
+ */
159
+ getTotalBidDepth() {
160
+ let total = 0;
161
+ for (const qty of this.yesBids.values()) {
162
+ total += qty;
163
+ }
164
+ return total;
165
+ }
166
+ /**
167
+ * Get total ask depth (sum of all ask quantities)
168
+ */
169
+ getTotalAskDepth() {
170
+ let total = 0;
171
+ for (const qty of this.noBids.values()) {
172
+ total += qty;
173
+ }
174
+ return total;
175
+ }
176
+ /**
177
+ * Get imbalance ratio: (bidDepth - askDepth) / (bidDepth + askDepth)
178
+ * Positive = more bids (bullish), Negative = more asks (bearish)
179
+ */
180
+ getImbalance() {
181
+ const bidDepth = this.getTotalBidDepth();
182
+ const askDepth = this.getTotalAskDepth();
183
+ const total = bidDepth + askDepth;
184
+ if (total === 0)
185
+ return 0;
186
+ return (bidDepth - askDepth) / total;
187
+ }
188
+ /**
189
+ * Check if orderbook is stale (no updates for X ms)
190
+ */
191
+ isStale(maxAgeMs = 5000) {
192
+ return Date.now() - this.lastUpdate > maxAgeMs;
193
+ }
194
+ /**
195
+ * Get time since last update
196
+ */
197
+ getAge() {
198
+ return Date.now() - this.lastUpdate;
199
+ }
200
+ /**
201
+ * Get sequence number (for ordering/debugging)
202
+ */
203
+ getSequence() {
204
+ return this.sequence;
205
+ }
206
+ /**
207
+ * Get ticker
208
+ */
209
+ getTicker() {
210
+ return this.ticker;
211
+ }
212
+ /**
213
+ * Clear the orderbook
214
+ */
215
+ clear() {
216
+ this.yesBids.clear();
217
+ this.noBids.clear();
218
+ this.lastUpdate = 0;
219
+ this.sequence = 0;
220
+ }
221
+ }
222
+ /**
223
+ * OrderbookManager manages multiple LocalOrderbook instances
224
+ */
225
+ export class OrderbookManager {
226
+ orderbooks = new Map();
227
+ /**
228
+ * Get or create orderbook for a ticker
229
+ */
230
+ getOrderbook(ticker) {
231
+ let ob = this.orderbooks.get(ticker);
232
+ if (!ob) {
233
+ ob = new LocalOrderbook(ticker);
234
+ this.orderbooks.set(ticker, ob);
235
+ }
236
+ return ob;
237
+ }
238
+ /**
239
+ * Apply snapshot to appropriate orderbook
240
+ */
241
+ applySnapshot(snapshot) {
242
+ const ob = this.getOrderbook(snapshot.market_ticker);
243
+ ob.applySnapshot(snapshot);
244
+ }
245
+ /**
246
+ * Apply delta to appropriate orderbook
247
+ */
248
+ applyDelta(delta) {
249
+ const ob = this.getOrderbook(delta.market_ticker);
250
+ ob.applyDelta(delta);
251
+ }
252
+ /**
253
+ * Get BBO for a ticker
254
+ */
255
+ getBBO(ticker) {
256
+ return this.orderbooks.get(ticker)?.getBBO() ?? null;
257
+ }
258
+ /**
259
+ * Get all managed tickers
260
+ */
261
+ getTickers() {
262
+ return Array.from(this.orderbooks.keys());
263
+ }
264
+ /**
265
+ * Clear all orderbooks
266
+ */
267
+ clear() {
268
+ this.orderbooks.clear();
269
+ }
270
+ }
271
+ //# sourceMappingURL=orderbook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderbook.js","sourceRoot":"","sources":["../../src/mm/orderbook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=orderbook.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderbook.test.d.ts","sourceRoot":"","sources":["../../src/mm/orderbook.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,264 @@
1
+ import { describe, it, expect, beforeEach } from "vitest";
2
+ import { LocalOrderbook, OrderbookManager } from "./orderbook.js";
3
+ describe("LocalOrderbook", () => {
4
+ let orderbook;
5
+ beforeEach(() => {
6
+ orderbook = new LocalOrderbook("TEST-MARKET");
7
+ });
8
+ describe("applySnapshot", () => {
9
+ it("should initialize from snapshot", () => {
10
+ const snapshot = {
11
+ market_ticker: "TEST-MARKET",
12
+ market_id: "123",
13
+ yes: [[50, 10], [49, 20], [48, 30]], // YES bids
14
+ no: [[60, 15], [59, 25]], // NO bids (YES asks = 100 - price)
15
+ };
16
+ orderbook.applySnapshot(snapshot);
17
+ const bbo = orderbook.getBBO();
18
+ expect(bbo).not.toBeNull();
19
+ expect(bbo?.bidPrice).toBe(50); // Best YES bid
20
+ expect(bbo?.askPrice).toBe(40); // 100 - 60 (best NO bid)
21
+ expect(bbo?.spread).toBe(-10); // 40 - 50 = -10 (crossed market)
22
+ });
23
+ it("should handle empty snapshot", () => {
24
+ const snapshot = {
25
+ market_ticker: "TEST-MARKET",
26
+ market_id: "123",
27
+ yes: [],
28
+ no: [],
29
+ };
30
+ orderbook.applySnapshot(snapshot);
31
+ expect(orderbook.getBBO()).toBeNull();
32
+ expect(orderbook.getBestBid()).toBeNull();
33
+ expect(orderbook.getBestAsk()).toBeNull();
34
+ });
35
+ it("should filter zero quantity levels", () => {
36
+ const snapshot = {
37
+ market_ticker: "TEST-MARKET",
38
+ market_id: "123",
39
+ yes: [[50, 10], [49, 0], [48, 5]], // 49 has zero qty
40
+ no: [[90, 15]],
41
+ };
42
+ orderbook.applySnapshot(snapshot);
43
+ const depth = orderbook.getDepth(5);
44
+ expect(depth.bids).toHaveLength(2); // 50 and 48, not 49
45
+ });
46
+ });
47
+ describe("applyDelta", () => {
48
+ beforeEach(() => {
49
+ const snapshot = {
50
+ market_ticker: "TEST-MARKET",
51
+ market_id: "123",
52
+ yes: [[50, 10]],
53
+ no: [[90, 15]],
54
+ };
55
+ orderbook.applySnapshot(snapshot);
56
+ });
57
+ it("should update existing level", () => {
58
+ const delta = {
59
+ market_ticker: "TEST-MARKET",
60
+ price: 50,
61
+ delta: 25, // Update to 25
62
+ side: "yes",
63
+ };
64
+ orderbook.applyDelta(delta);
65
+ const bid = orderbook.getBestBid();
66
+ expect(bid?.quantity).toBe(25);
67
+ });
68
+ it("should add new level", () => {
69
+ const delta = {
70
+ market_ticker: "TEST-MARKET",
71
+ price: 51,
72
+ delta: 5,
73
+ side: "yes",
74
+ };
75
+ orderbook.applyDelta(delta);
76
+ const bid = orderbook.getBestBid();
77
+ expect(bid?.price).toBe(51); // New best bid
78
+ expect(bid?.quantity).toBe(5);
79
+ });
80
+ it("should remove level when delta is zero", () => {
81
+ const delta = {
82
+ market_ticker: "TEST-MARKET",
83
+ price: 50,
84
+ delta: 0, // Remove
85
+ side: "yes",
86
+ };
87
+ orderbook.applyDelta(delta);
88
+ expect(orderbook.getBestBid()).toBeNull();
89
+ });
90
+ it("should track sequence number", () => {
91
+ const initialSeq = orderbook.getSequence();
92
+ orderbook.applyDelta({
93
+ market_ticker: "TEST-MARKET",
94
+ price: 51,
95
+ delta: 5,
96
+ side: "yes",
97
+ });
98
+ expect(orderbook.getSequence()).toBe(initialSeq + 1);
99
+ });
100
+ });
101
+ describe("getMicroprice", () => {
102
+ it("should calculate size-weighted mid", () => {
103
+ const snapshot = {
104
+ market_ticker: "TEST-MARKET",
105
+ market_id: "123",
106
+ yes: [[50, 10]], // Bid at 50 with size 10
107
+ no: [[40, 20]], // NO bid at 40 = YES ask at 60, size 20
108
+ };
109
+ orderbook.applySnapshot(snapshot);
110
+ const microprice = orderbook.getMicroprice();
111
+ // microprice = (bid * askSize + ask * bidSize) / (bidSize + askSize)
112
+ // = (50 * 20 + 60 * 10) / (10 + 20) = (1000 + 600) / 30 = 53.33
113
+ expect(microprice).toBeCloseTo(53.33, 1);
114
+ });
115
+ it("should return null for empty orderbook", () => {
116
+ expect(orderbook.getMicroprice()).toBeNull();
117
+ });
118
+ });
119
+ describe("getImbalance", () => {
120
+ it("should calculate bid/ask imbalance", () => {
121
+ const snapshot = {
122
+ market_ticker: "TEST-MARKET",
123
+ market_id: "123",
124
+ yes: [[50, 30]], // More bid depth
125
+ no: [[90, 10]],
126
+ };
127
+ orderbook.applySnapshot(snapshot);
128
+ const imbalance = orderbook.getImbalance();
129
+ // (bidDepth - askDepth) / (bidDepth + askDepth) = (30 - 10) / 40 = 0.5
130
+ expect(imbalance).toBe(0.5);
131
+ });
132
+ it("should return 0 for empty orderbook", () => {
133
+ expect(orderbook.getImbalance()).toBe(0);
134
+ });
135
+ });
136
+ describe("getDepth", () => {
137
+ it("should return sorted levels", () => {
138
+ const snapshot = {
139
+ market_ticker: "TEST-MARKET",
140
+ market_id: "123",
141
+ yes: [[48, 30], [50, 10], [49, 20]], // Unsorted
142
+ no: [[90, 15], [88, 25]], // NO bids
143
+ };
144
+ orderbook.applySnapshot(snapshot);
145
+ const depth = orderbook.getDepth(3);
146
+ // Bids should be sorted descending (highest first)
147
+ expect(depth.bids[0].price).toBe(50);
148
+ expect(depth.bids[1].price).toBe(49);
149
+ expect(depth.bids[2].price).toBe(48);
150
+ // Asks should be sorted ascending (lowest first)
151
+ expect(depth.asks[0].price).toBe(10); // 100 - 90
152
+ expect(depth.asks[1].price).toBe(12); // 100 - 88
153
+ });
154
+ it("should limit to requested levels", () => {
155
+ const snapshot = {
156
+ market_ticker: "TEST-MARKET",
157
+ market_id: "123",
158
+ yes: [[50, 10], [49, 20], [48, 30], [47, 40], [46, 50]],
159
+ no: [],
160
+ };
161
+ orderbook.applySnapshot(snapshot);
162
+ const depth = orderbook.getDepth(2);
163
+ expect(depth.bids).toHaveLength(2);
164
+ });
165
+ });
166
+ describe("staleness", () => {
167
+ it("should track last update time", () => {
168
+ const snapshot = {
169
+ market_ticker: "TEST-MARKET",
170
+ market_id: "123",
171
+ yes: [[50, 10]],
172
+ no: [],
173
+ };
174
+ orderbook.applySnapshot(snapshot);
175
+ expect(orderbook.getAge()).toBeLessThan(100); // Should be very recent
176
+ expect(orderbook.isStale(5000)).toBe(false);
177
+ });
178
+ });
179
+ });
180
+ describe("OrderbookManager", () => {
181
+ let manager;
182
+ beforeEach(() => {
183
+ manager = new OrderbookManager();
184
+ });
185
+ it("should create orderbook on demand", () => {
186
+ const ob1 = manager.getOrderbook("MARKET-1");
187
+ const ob2 = manager.getOrderbook("MARKET-1");
188
+ expect(ob1).toBe(ob2); // Same instance
189
+ });
190
+ it("should apply snapshot to correct orderbook", () => {
191
+ const snapshot = {
192
+ market_ticker: "MARKET-1",
193
+ market_id: "123",
194
+ yes: [[50, 10]],
195
+ no: [[90, 15]],
196
+ };
197
+ manager.applySnapshot(snapshot);
198
+ const bbo = manager.getBBO("MARKET-1");
199
+ expect(bbo).not.toBeNull();
200
+ expect(bbo?.bidPrice).toBe(50);
201
+ });
202
+ it("should apply delta to correct orderbook", () => {
203
+ // First apply snapshot
204
+ manager.applySnapshot({
205
+ market_ticker: "MARKET-1",
206
+ market_id: "123",
207
+ yes: [[50, 10]],
208
+ no: [[90, 15]],
209
+ });
210
+ // Then apply delta
211
+ manager.applyDelta({
212
+ market_ticker: "MARKET-1",
213
+ price: 51,
214
+ delta: 5,
215
+ side: "yes",
216
+ });
217
+ const bbo = manager.getBBO("MARKET-1");
218
+ expect(bbo?.bidPrice).toBe(51);
219
+ });
220
+ it("should track multiple markets", () => {
221
+ manager.applySnapshot({
222
+ market_ticker: "MARKET-1",
223
+ market_id: "1",
224
+ yes: [[50, 10]],
225
+ no: [],
226
+ });
227
+ manager.applySnapshot({
228
+ market_ticker: "MARKET-2",
229
+ market_id: "2",
230
+ yes: [[60, 10]],
231
+ no: [],
232
+ });
233
+ expect(manager.getTickers()).toContain("MARKET-1");
234
+ expect(manager.getTickers()).toContain("MARKET-2");
235
+ expect(manager.getTickers()).toHaveLength(2);
236
+ });
237
+ it("should clear all orderbooks", () => {
238
+ manager.applySnapshot({
239
+ market_ticker: "MARKET-1",
240
+ market_id: "1",
241
+ yes: [[50, 10]],
242
+ no: [],
243
+ });
244
+ manager.clear();
245
+ expect(manager.getTickers()).toHaveLength(0);
246
+ expect(manager.getBBO("MARKET-1")).toBeNull();
247
+ });
248
+ });
249
+ describe("LocalOrderbook - clear", () => {
250
+ it("should clear all data", () => {
251
+ const orderbook = new LocalOrderbook("TEST");
252
+ orderbook.applySnapshot({
253
+ market_ticker: "TEST",
254
+ market_id: "123",
255
+ yes: [[50, 10]],
256
+ no: [[90, 15]],
257
+ });
258
+ expect(orderbook.getBBO()).not.toBeNull();
259
+ orderbook.clear();
260
+ expect(orderbook.getBBO()).toBeNull();
261
+ expect(orderbook.getSequence()).toBe(0);
262
+ });
263
+ });
264
+ //# sourceMappingURL=orderbook.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderbook.test.js","sourceRoot":"","sources":["../../src/mm/orderbook.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@newyorkcompute/kalshi-core",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Shared utilities for Kalshi prediction market tools — SDK configuration, formatting, and types",
5
5
  "author": "NewYorkCompute",
6
6
  "license": "MIT",