@newyorkcompute/kalshi-core 0.1.1 → 0.3.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 (59) hide show
  1. package/dist/cache.d.ts +71 -0
  2. package/dist/cache.d.ts.map +1 -0
  3. package/dist/cache.js +96 -0
  4. package/dist/cache.js.map +1 -0
  5. package/dist/cache.test.d.ts +5 -0
  6. package/dist/cache.test.d.ts.map +1 -0
  7. package/dist/cache.test.js +108 -0
  8. package/dist/cache.test.js.map +1 -0
  9. package/dist/config.d.ts +61 -6
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +56 -5
  12. package/dist/config.js.map +1 -1
  13. package/dist/config.test.d.ts +2 -0
  14. package/dist/config.test.d.ts.map +1 -0
  15. package/dist/config.test.js +94 -0
  16. package/dist/config.test.js.map +1 -0
  17. package/dist/format.d.ts +110 -2
  18. package/dist/format.d.ts.map +1 -1
  19. package/dist/format.js +151 -2
  20. package/dist/format.js.map +1 -1
  21. package/dist/format.test.js +107 -2
  22. package/dist/format.test.js.map +1 -1
  23. package/dist/index.d.ts +4 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +7 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/rate-limiter.d.ts +80 -0
  28. package/dist/rate-limiter.d.ts.map +1 -0
  29. package/dist/rate-limiter.js +180 -0
  30. package/dist/rate-limiter.js.map +1 -0
  31. package/dist/rate-limiter.test.d.ts +5 -0
  32. package/dist/rate-limiter.test.d.ts.map +1 -0
  33. package/dist/rate-limiter.test.js +175 -0
  34. package/dist/rate-limiter.test.js.map +1 -0
  35. package/dist/websocket/auth.d.ts +28 -0
  36. package/dist/websocket/auth.d.ts.map +1 -0
  37. package/dist/websocket/auth.js +55 -0
  38. package/dist/websocket/auth.js.map +1 -0
  39. package/dist/websocket/auth.test.d.ts +2 -0
  40. package/dist/websocket/auth.test.d.ts.map +1 -0
  41. package/dist/websocket/auth.test.js +56 -0
  42. package/dist/websocket/auth.test.js.map +1 -0
  43. package/dist/websocket/client.d.ts +95 -0
  44. package/dist/websocket/client.d.ts.map +1 -0
  45. package/dist/websocket/client.js +352 -0
  46. package/dist/websocket/client.js.map +1 -0
  47. package/dist/websocket/index.d.ts +9 -0
  48. package/dist/websocket/index.d.ts.map +1 -0
  49. package/dist/websocket/index.js +9 -0
  50. package/dist/websocket/index.js.map +1 -0
  51. package/dist/websocket/types.d.ts +160 -0
  52. package/dist/websocket/types.d.ts.map +1 -0
  53. package/dist/websocket/types.js +12 -0
  54. package/dist/websocket/types.js.map +1 -0
  55. package/dist/websocket/types.test.d.ts +2 -0
  56. package/dist/websocket/types.test.d.ts.map +1 -0
  57. package/dist/websocket/types.test.js +17 -0
  58. package/dist/websocket/types.test.js.map +1 -0
  59. package/package.json +8 -4
@@ -0,0 +1,71 @@
1
+ /**
2
+ * TTL Cache
3
+ *
4
+ * Lightweight in-memory cache with time-to-live expiration.
5
+ * Useful for caching API responses to reduce rate limiting.
6
+ */
7
+ /**
8
+ * Get cached data if not expired
9
+ *
10
+ * @param key - Cache key
11
+ * @param ttl - Time-to-live in milliseconds (default: 60s)
12
+ * @returns Cached data or null if expired/missing
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * const data = getCached<Market[]>('markets', 30000);
17
+ * if (!data) {
18
+ * // Fetch fresh data
19
+ * }
20
+ * ```
21
+ */
22
+ export declare function getCached<T>(key: string, ttl?: number): T | null;
23
+ /**
24
+ * Set cached data with current timestamp
25
+ *
26
+ * @param key - Cache key
27
+ * @param data - Data to cache
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * setCache('markets', marketData);
32
+ * ```
33
+ */
34
+ export declare function setCache<T>(key: string, data: T): void;
35
+ /**
36
+ * Clear specific cache entry
37
+ *
38
+ * @param key - Cache key to clear
39
+ */
40
+ export declare function clearCache(key: string): void;
41
+ /**
42
+ * Clear all cache entries
43
+ */
44
+ export declare function clearAllCache(): void;
45
+ /**
46
+ * Get cache statistics (for debugging)
47
+ *
48
+ * @returns Object with cache size and keys
49
+ */
50
+ export declare function getCacheStats(): {
51
+ size: number;
52
+ keys: string[];
53
+ };
54
+ /**
55
+ * Common TTL constants for Kalshi data
56
+ */
57
+ export declare const CACHE_TTL: {
58
+ /** 5 minutes - Trade history doesn't change rapidly */
59
+ readonly PRICE_HISTORY: number;
60
+ /** 10 minutes - Market titles/close times rarely change */
61
+ readonly MARKET_METADATA: number;
62
+ /** 1 minute - Events list */
63
+ readonly EVENTS: number;
64
+ /** No cache - Orderbook needs real-time data */
65
+ readonly ORDERBOOK: 0;
66
+ /** No cache - Balance needs real-time data */
67
+ readonly BALANCE: 0;
68
+ /** No cache - Positions need real-time data */
69
+ readonly POSITIONS: 0;
70
+ };
71
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAoB,GAAG,CAAC,GAAG,IAAI,CAY7E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAKtD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAKhE;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB,uDAAuD;;IAEvD,2DAA2D;;IAE3D,6BAA6B;;IAE7B,gDAAgD;;IAEhD,8CAA8C;;IAE9C,+CAA+C;;CAEvC,CAAC"}
package/dist/cache.js ADDED
@@ -0,0 +1,96 @@
1
+ /**
2
+ * TTL Cache
3
+ *
4
+ * Lightweight in-memory cache with time-to-live expiration.
5
+ * Useful for caching API responses to reduce rate limiting.
6
+ */
7
+ // Cache storage
8
+ const cache = new Map();
9
+ // Default TTL: 1 minute
10
+ const DEFAULT_TTL = 60 * 1000;
11
+ /**
12
+ * Get cached data if not expired
13
+ *
14
+ * @param key - Cache key
15
+ * @param ttl - Time-to-live in milliseconds (default: 60s)
16
+ * @returns Cached data or null if expired/missing
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * const data = getCached<Market[]>('markets', 30000);
21
+ * if (!data) {
22
+ * // Fetch fresh data
23
+ * }
24
+ * ```
25
+ */
26
+ export function getCached(key, ttl = DEFAULT_TTL) {
27
+ const entry = cache.get(key);
28
+ if (!entry)
29
+ return null;
30
+ const isExpired = Date.now() - entry.timestamp > ttl;
31
+ if (isExpired) {
32
+ cache.delete(key);
33
+ return null;
34
+ }
35
+ return entry.data;
36
+ }
37
+ /**
38
+ * Set cached data with current timestamp
39
+ *
40
+ * @param key - Cache key
41
+ * @param data - Data to cache
42
+ *
43
+ * @example
44
+ * ```ts
45
+ * setCache('markets', marketData);
46
+ * ```
47
+ */
48
+ export function setCache(key, data) {
49
+ cache.set(key, {
50
+ data,
51
+ timestamp: Date.now(),
52
+ });
53
+ }
54
+ /**
55
+ * Clear specific cache entry
56
+ *
57
+ * @param key - Cache key to clear
58
+ */
59
+ export function clearCache(key) {
60
+ cache.delete(key);
61
+ }
62
+ /**
63
+ * Clear all cache entries
64
+ */
65
+ export function clearAllCache() {
66
+ cache.clear();
67
+ }
68
+ /**
69
+ * Get cache statistics (for debugging)
70
+ *
71
+ * @returns Object with cache size and keys
72
+ */
73
+ export function getCacheStats() {
74
+ return {
75
+ size: cache.size,
76
+ keys: Array.from(cache.keys()),
77
+ };
78
+ }
79
+ /**
80
+ * Common TTL constants for Kalshi data
81
+ */
82
+ export const CACHE_TTL = {
83
+ /** 5 minutes - Trade history doesn't change rapidly */
84
+ PRICE_HISTORY: 5 * 60 * 1000,
85
+ /** 10 minutes - Market titles/close times rarely change */
86
+ MARKET_METADATA: 10 * 60 * 1000,
87
+ /** 1 minute - Events list */
88
+ EVENTS: 60 * 1000,
89
+ /** No cache - Orderbook needs real-time data */
90
+ ORDERBOOK: 0,
91
+ /** No cache - Balance needs real-time data */
92
+ BALANCE: 0,
93
+ /** No cache - Positions need real-time data */
94
+ POSITIONS: 0,
95
+ };
96
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,gBAAgB;AAChB,MAAM,KAAK,GAAG,IAAI,GAAG,EAA+B,CAAC;AAErD,wBAAwB;AACxB,MAAM,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9B;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,SAAS,CAAI,GAAW,EAAE,MAAc,WAAW;IACjE,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAE7B,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC;IACrD,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC,IAAS,CAAC;AACzB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,QAAQ,CAAI,GAAW,EAAE,IAAO;IAC9C,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;QACb,IAAI;QACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,uDAAuD;IACvD,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI;IAC5B,2DAA2D;IAC3D,eAAe,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;IAC/B,6BAA6B;IAC7B,MAAM,EAAE,EAAE,GAAG,IAAI;IACjB,gDAAgD;IAChD,SAAS,EAAE,CAAC;IACZ,8CAA8C;IAC9C,OAAO,EAAE,CAAC;IACV,+CAA+C;IAC/C,SAAS,EAAE,CAAC;CACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Cache Tests
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=cache.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.test.d.ts","sourceRoot":"","sources":["../src/cache.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Cache Tests
3
+ */
4
+ import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest';
5
+ import { getCached, setCache, clearCache, clearAllCache, getCacheStats, CACHE_TTL, } from './cache.js';
6
+ describe('cache', () => {
7
+ beforeEach(() => {
8
+ clearAllCache();
9
+ vi.useFakeTimers();
10
+ });
11
+ afterEach(() => {
12
+ vi.useRealTimers();
13
+ });
14
+ describe('setCache and getCached', () => {
15
+ it('should store and retrieve data', () => {
16
+ const data = { ticker: 'KXBTC', price: 50 };
17
+ setCache('market-1', data);
18
+ const result = getCached('market-1');
19
+ expect(result).toEqual(data);
20
+ });
21
+ it('should return null for non-existent key', () => {
22
+ const result = getCached('non-existent');
23
+ expect(result).toBeNull();
24
+ });
25
+ it('should return null after TTL expires', () => {
26
+ const data = { value: 42 };
27
+ setCache('test-key', data);
28
+ // Advance time past default TTL (60s)
29
+ vi.advanceTimersByTime(61 * 1000);
30
+ const result = getCached('test-key');
31
+ expect(result).toBeNull();
32
+ });
33
+ it('should return data before TTL expires', () => {
34
+ const data = { value: 42 };
35
+ setCache('test-key', data);
36
+ // Advance time but stay within TTL
37
+ vi.advanceTimersByTime(30 * 1000);
38
+ const result = getCached('test-key');
39
+ expect(result).toEqual(data);
40
+ });
41
+ it('should respect custom TTL', () => {
42
+ const data = { value: 'test' };
43
+ const customTTL = 5000; // 5 seconds
44
+ setCache('custom-ttl', data);
45
+ // Still valid at 4 seconds
46
+ vi.advanceTimersByTime(4000);
47
+ expect(getCached('custom-ttl', customTTL)).toEqual(data);
48
+ // Expired at 6 seconds
49
+ vi.advanceTimersByTime(2000);
50
+ expect(getCached('custom-ttl', customTTL)).toBeNull();
51
+ });
52
+ it('should overwrite existing cache entry', () => {
53
+ setCache('key', { v: 1 });
54
+ setCache('key', { v: 2 });
55
+ const result = getCached('key');
56
+ expect(result).toEqual({ v: 2 });
57
+ });
58
+ });
59
+ describe('clearCache', () => {
60
+ it('should clear specific cache entry', () => {
61
+ setCache('key1', 'value1');
62
+ setCache('key2', 'value2');
63
+ clearCache('key1');
64
+ expect(getCached('key1')).toBeNull();
65
+ expect(getCached('key2')).toBe('value2');
66
+ });
67
+ it('should handle clearing non-existent key', () => {
68
+ expect(() => clearCache('non-existent')).not.toThrow();
69
+ });
70
+ });
71
+ describe('clearAllCache', () => {
72
+ it('should clear all cache entries', () => {
73
+ setCache('key1', 'value1');
74
+ setCache('key2', 'value2');
75
+ setCache('key3', 'value3');
76
+ clearAllCache();
77
+ expect(getCached('key1')).toBeNull();
78
+ expect(getCached('key2')).toBeNull();
79
+ expect(getCached('key3')).toBeNull();
80
+ });
81
+ });
82
+ describe('getCacheStats', () => {
83
+ it('should return cache statistics', () => {
84
+ setCache('key1', 'value1');
85
+ setCache('key2', 'value2');
86
+ const stats = getCacheStats();
87
+ expect(stats.size).toBe(2);
88
+ expect(stats.keys).toContain('key1');
89
+ expect(stats.keys).toContain('key2');
90
+ });
91
+ it('should return empty stats for empty cache', () => {
92
+ const stats = getCacheStats();
93
+ expect(stats.size).toBe(0);
94
+ expect(stats.keys).toEqual([]);
95
+ });
96
+ });
97
+ describe('CACHE_TTL constants', () => {
98
+ it('should have expected TTL values', () => {
99
+ expect(CACHE_TTL.PRICE_HISTORY).toBe(5 * 60 * 1000);
100
+ expect(CACHE_TTL.MARKET_METADATA).toBe(10 * 60 * 1000);
101
+ expect(CACHE_TTL.EVENTS).toBe(60 * 1000);
102
+ expect(CACHE_TTL.ORDERBOOK).toBe(0);
103
+ expect(CACHE_TTL.BALANCE).toBe(0);
104
+ expect(CACHE_TTL.POSITIONS).toBe(0);
105
+ });
106
+ });
107
+ });
108
+ //# sourceMappingURL=cache.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.test.js","sourceRoot":"","sources":["../src/cache.test.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -5,7 +5,11 @@
5
5
  */
6
6
  import { Configuration, MarketApi, PortfolioApi, OrdersApi, EventsApi } from "kalshi-typescript";
7
7
  /**
8
- * Kalshi API configuration
8
+ * Kalshi API configuration credentials
9
+ *
10
+ * @property apiKey - Kalshi API key ID
11
+ * @property privateKey - RSA private key in PEM format
12
+ * @property basePath - API base URL (production or demo)
9
13
  */
10
14
  export interface KalshiConfig {
11
15
  apiKey: string;
@@ -23,27 +27,78 @@ export declare const DEMO_BASE_PATH = "https://demo-api.kalshi.co/trade-api/v2";
23
27
  /**
24
28
  * Get Kalshi configuration from environment variables
25
29
  *
26
- * @throws Error if required environment variables are missing
30
+ * Reads from:
31
+ * - `KALSHI_API_KEY` - Required API key ID
32
+ * - `KALSHI_PRIVATE_KEY` - Required RSA private key (PEM format)
33
+ * - `KALSHI_BASE_PATH` - Optional base URL (defaults to production)
34
+ *
35
+ * @returns Kalshi configuration object
36
+ * @throws Error if KALSHI_API_KEY or KALSHI_PRIVATE_KEY is missing
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * const config = getKalshiConfig();
41
+ * const marketApi = createMarketApi(config);
42
+ * ```
27
43
  */
28
44
  export declare function getKalshiConfig(): KalshiConfig;
29
45
  /**
30
46
  * Create a configured Kalshi SDK Configuration instance
47
+ *
48
+ * @param config - Kalshi API credentials
49
+ * @returns SDK Configuration instance for API clients
31
50
  */
32
51
  export declare function createSdkConfig(config: KalshiConfig): Configuration;
33
52
  /**
34
- * Create a MarketApi instance with the given configuration
53
+ * Create a MarketApi instance for market data operations
54
+ *
55
+ * @param config - Kalshi API credentials
56
+ * @returns Configured MarketApi client
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * const api = createMarketApi(config);
61
+ * const markets = await api.getMarkets();
62
+ * ```
35
63
  */
36
64
  export declare function createMarketApi(config: KalshiConfig): MarketApi;
37
65
  /**
38
- * Create a PortfolioApi instance with the given configuration
66
+ * Create a PortfolioApi instance for portfolio operations
67
+ *
68
+ * @param config - Kalshi API credentials
69
+ * @returns Configured PortfolioApi client
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * const api = createPortfolioApi(config);
74
+ * const balance = await api.getBalance();
75
+ * ```
39
76
  */
40
77
  export declare function createPortfolioApi(config: KalshiConfig): PortfolioApi;
41
78
  /**
42
- * Create an OrdersApi instance with the given configuration
79
+ * Create an OrdersApi instance for order management
80
+ *
81
+ * @param config - Kalshi API credentials
82
+ * @returns Configured OrdersApi client
83
+ *
84
+ * @example
85
+ * ```ts
86
+ * const api = createOrdersApi(config);
87
+ * const orders = await api.getOrders();
88
+ * ```
43
89
  */
44
90
  export declare function createOrdersApi(config: KalshiConfig): OrdersApi;
45
91
  /**
46
- * Create an EventsApi instance with the given configuration
92
+ * Create an EventsApi instance for event data operations
93
+ *
94
+ * @param config - Kalshi API credentials
95
+ * @returns Configured EventsApi client
96
+ *
97
+ * @example
98
+ * ```ts
99
+ * const api = createEventsApi(config);
100
+ * const events = await api.getEvents();
101
+ * ```
47
102
  */
48
103
  export declare function createEventsApi(config: KalshiConfig): EventsApi;
49
104
  //# sourceMappingURL=config.d.ts.map
@@ -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;;GAEG;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;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAc9C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,CAMnE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAG/D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAGrE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAG/D;AAED;;GAEG;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,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"}
package/dist/config.js CHANGED
@@ -15,7 +15,19 @@ export const DEMO_BASE_PATH = "https://demo-api.kalshi.co/trade-api/v2";
15
15
  /**
16
16
  * Get Kalshi configuration from environment variables
17
17
  *
18
- * @throws Error if required environment variables are missing
18
+ * Reads from:
19
+ * - `KALSHI_API_KEY` - Required API key ID
20
+ * - `KALSHI_PRIVATE_KEY` - Required RSA private key (PEM format)
21
+ * - `KALSHI_BASE_PATH` - Optional base URL (defaults to production)
22
+ *
23
+ * @returns Kalshi configuration object
24
+ * @throws Error if KALSHI_API_KEY or KALSHI_PRIVATE_KEY is missing
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * const config = getKalshiConfig();
29
+ * const marketApi = createMarketApi(config);
30
+ * ```
19
31
  */
20
32
  export function getKalshiConfig() {
21
33
  const apiKey = process.env.KALSHI_API_KEY;
@@ -31,6 +43,9 @@ export function getKalshiConfig() {
31
43
  }
32
44
  /**
33
45
  * Create a configured Kalshi SDK Configuration instance
46
+ *
47
+ * @param config - Kalshi API credentials
48
+ * @returns SDK Configuration instance for API clients
34
49
  */
35
50
  export function createSdkConfig(config) {
36
51
  return new Configuration({
@@ -40,28 +55,64 @@ export function createSdkConfig(config) {
40
55
  });
41
56
  }
42
57
  /**
43
- * Create a MarketApi instance with the given configuration
58
+ * Create a MarketApi instance for market data operations
59
+ *
60
+ * @param config - Kalshi API credentials
61
+ * @returns Configured MarketApi client
62
+ *
63
+ * @example
64
+ * ```ts
65
+ * const api = createMarketApi(config);
66
+ * const markets = await api.getMarkets();
67
+ * ```
44
68
  */
45
69
  export function createMarketApi(config) {
46
70
  const sdkConfig = createSdkConfig(config);
47
71
  return new MarketApi(sdkConfig);
48
72
  }
49
73
  /**
50
- * Create a PortfolioApi instance with the given configuration
74
+ * Create a PortfolioApi instance for portfolio operations
75
+ *
76
+ * @param config - Kalshi API credentials
77
+ * @returns Configured PortfolioApi client
78
+ *
79
+ * @example
80
+ * ```ts
81
+ * const api = createPortfolioApi(config);
82
+ * const balance = await api.getBalance();
83
+ * ```
51
84
  */
52
85
  export function createPortfolioApi(config) {
53
86
  const sdkConfig = createSdkConfig(config);
54
87
  return new PortfolioApi(sdkConfig);
55
88
  }
56
89
  /**
57
- * Create an OrdersApi instance with the given configuration
90
+ * Create an OrdersApi instance for order management
91
+ *
92
+ * @param config - Kalshi API credentials
93
+ * @returns Configured OrdersApi client
94
+ *
95
+ * @example
96
+ * ```ts
97
+ * const api = createOrdersApi(config);
98
+ * const orders = await api.getOrders();
99
+ * ```
58
100
  */
59
101
  export function createOrdersApi(config) {
60
102
  const sdkConfig = createSdkConfig(config);
61
103
  return new OrdersApi(sdkConfig);
62
104
  }
63
105
  /**
64
- * Create an EventsApi instance with the given configuration
106
+ * Create an EventsApi instance for event data operations
107
+ *
108
+ * @param config - Kalshi API credentials
109
+ * @returns Configured EventsApi client
110
+ *
111
+ * @example
112
+ * ```ts
113
+ * const api = createEventsApi(config);
114
+ * const events = await api.getEvents();
115
+ * ```
65
116
  */
66
117
  export function createEventsApi(config) {
67
118
  const sdkConfig = createSdkConfig(config);
@@ -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;AAW3B;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,+CAA+C,CAAC;AAEjF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,yCAAyC,CAAC;AAExE;;;;GAIG;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;;GAEG;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;;GAEG;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;;GAEG;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;;GAEG;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;;GAEG;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,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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,94 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ import { getKalshiConfig, createSdkConfig, createMarketApi, createPortfolioApi, createOrdersApi, createEventsApi, DEFAULT_BASE_PATH, DEMO_BASE_PATH, } from "./config.js";
3
+ // Mock kalshi-typescript
4
+ vi.mock("kalshi-typescript", () => ({
5
+ Configuration: vi.fn().mockImplementation((config) => ({
6
+ apiKey: config.apiKey,
7
+ privateKeyPem: config.privateKeyPem,
8
+ basePath: config.basePath,
9
+ })),
10
+ MarketApi: vi.fn().mockImplementation(() => ({ name: "MarketApi" })),
11
+ PortfolioApi: vi.fn().mockImplementation(() => ({ name: "PortfolioApi" })),
12
+ OrdersApi: vi.fn().mockImplementation(() => ({ name: "OrdersApi" })),
13
+ EventsApi: vi.fn().mockImplementation(() => ({ name: "EventsApi" })),
14
+ }));
15
+ describe("constants", () => {
16
+ it("exports DEFAULT_BASE_PATH", () => {
17
+ expect(DEFAULT_BASE_PATH).toBe("https://api.elections.kalshi.com/trade-api/v2");
18
+ });
19
+ it("exports DEMO_BASE_PATH", () => {
20
+ expect(DEMO_BASE_PATH).toBe("https://demo-api.kalshi.co/trade-api/v2");
21
+ });
22
+ });
23
+ describe("getKalshiConfig", () => {
24
+ const originalEnv = process.env;
25
+ beforeEach(() => {
26
+ vi.resetModules();
27
+ process.env = { ...originalEnv };
28
+ });
29
+ afterEach(() => {
30
+ process.env = originalEnv;
31
+ });
32
+ it("returns config from environment variables", () => {
33
+ process.env.KALSHI_API_KEY = "test-api-key";
34
+ process.env.KALSHI_PRIVATE_KEY = "test-private-key";
35
+ const config = getKalshiConfig();
36
+ expect(config.apiKey).toBe("test-api-key");
37
+ expect(config.privateKey).toBe("test-private-key");
38
+ expect(config.basePath).toBe(DEFAULT_BASE_PATH);
39
+ });
40
+ it("uses custom base path from environment", () => {
41
+ process.env.KALSHI_API_KEY = "test-api-key";
42
+ process.env.KALSHI_PRIVATE_KEY = "test-private-key";
43
+ process.env.KALSHI_BASE_PATH = DEMO_BASE_PATH;
44
+ const config = getKalshiConfig();
45
+ expect(config.basePath).toBe(DEMO_BASE_PATH);
46
+ });
47
+ it("throws error if KALSHI_API_KEY is missing", () => {
48
+ delete process.env.KALSHI_API_KEY;
49
+ process.env.KALSHI_PRIVATE_KEY = "test-private-key";
50
+ expect(() => getKalshiConfig()).toThrow("KALSHI_API_KEY environment variable is required");
51
+ });
52
+ it("throws error if KALSHI_PRIVATE_KEY is missing", () => {
53
+ process.env.KALSHI_API_KEY = "test-api-key";
54
+ delete process.env.KALSHI_PRIVATE_KEY;
55
+ expect(() => getKalshiConfig()).toThrow("KALSHI_PRIVATE_KEY environment variable is required");
56
+ });
57
+ });
58
+ describe("createSdkConfig", () => {
59
+ it("creates Configuration with correct parameters", () => {
60
+ const config = {
61
+ apiKey: "test-api-key",
62
+ privateKey: "test-private-key",
63
+ basePath: DEFAULT_BASE_PATH,
64
+ };
65
+ const sdkConfig = createSdkConfig(config);
66
+ expect(sdkConfig.apiKey).toBe("test-api-key");
67
+ expect(sdkConfig.privateKeyPem).toBe("test-private-key");
68
+ expect(sdkConfig.basePath).toBe(DEFAULT_BASE_PATH);
69
+ });
70
+ });
71
+ describe("API factory functions", () => {
72
+ const testConfig = {
73
+ apiKey: "test-api-key",
74
+ privateKey: "test-private-key",
75
+ basePath: DEFAULT_BASE_PATH,
76
+ };
77
+ it("createMarketApi returns MarketApi instance", () => {
78
+ const api = createMarketApi(testConfig);
79
+ expect(api).toEqual({ name: "MarketApi" });
80
+ });
81
+ it("createPortfolioApi returns PortfolioApi instance", () => {
82
+ const api = createPortfolioApi(testConfig);
83
+ expect(api).toEqual({ name: "PortfolioApi" });
84
+ });
85
+ it("createOrdersApi returns OrdersApi instance", () => {
86
+ const api = createOrdersApi(testConfig);
87
+ expect(api).toEqual({ name: "OrdersApi" });
88
+ });
89
+ it("createEventsApi returns EventsApi instance", () => {
90
+ const api = createEventsApi(testConfig);
91
+ expect(api).toEqual({ name: "EventsApi" });
92
+ });
93
+ });
94
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":"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"}