@mostlyrightmd/markets 1.4.0 → 1.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.
- package/dist/index.cjs +66 -86
- package/dist/index.cjs.map +1 -1
- package/dist/index.global.js +66 -86
- package/dist/index.global.js.map +1 -1
- package/dist/index.mjs +66 -86
- package/dist/index.mjs.map +1 -1
- package/dist/polymarket/index.cjs +78 -118
- package/dist/polymarket/index.cjs.map +1 -1
- package/dist/polymarket/index.d.cts +5 -1
- package/dist/polymarket/index.d.ts +5 -1
- package/dist/polymarket/index.mjs +78 -118
- package/dist/polymarket/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -136,92 +136,92 @@ var POLYMARKET_CITY_STATIONS = {
|
|
|
136
136
|
amsterdam: {
|
|
137
137
|
default: "EHAM"
|
|
138
138
|
},
|
|
139
|
+
ankara: {
|
|
140
|
+
default: "LTAC"
|
|
141
|
+
},
|
|
139
142
|
atlanta: {
|
|
140
143
|
default: "KATL"
|
|
141
144
|
},
|
|
142
|
-
auckland: {
|
|
143
|
-
default: "NZAA"
|
|
144
|
-
},
|
|
145
145
|
austin: {
|
|
146
146
|
default: "KAUS"
|
|
147
147
|
},
|
|
148
|
-
bangkok: {
|
|
149
|
-
default: "VTBS"
|
|
150
|
-
},
|
|
151
|
-
barcelona: {
|
|
152
|
-
default: "LEBL"
|
|
153
|
-
},
|
|
154
148
|
beijing: {
|
|
155
149
|
default: "ZBAA"
|
|
156
150
|
},
|
|
157
|
-
|
|
158
|
-
default: "
|
|
151
|
+
buenos_aires: {
|
|
152
|
+
default: "SAEZ"
|
|
159
153
|
},
|
|
160
|
-
|
|
161
|
-
default: "
|
|
154
|
+
busan: {
|
|
155
|
+
default: "RKPK"
|
|
162
156
|
},
|
|
163
|
-
|
|
164
|
-
default: "
|
|
157
|
+
cape_town: {
|
|
158
|
+
default: "FACT"
|
|
165
159
|
},
|
|
166
|
-
|
|
167
|
-
default: "
|
|
160
|
+
chengdu: {
|
|
161
|
+
default: "ZUUU"
|
|
168
162
|
},
|
|
169
163
|
chicago: {
|
|
170
164
|
default: "KORD",
|
|
171
165
|
high: "KORD",
|
|
172
166
|
low: "KORD"
|
|
173
167
|
},
|
|
174
|
-
|
|
175
|
-
default: "
|
|
168
|
+
chongqing: {
|
|
169
|
+
default: "ZUCK"
|
|
176
170
|
},
|
|
177
171
|
dallas: {
|
|
178
|
-
default: "
|
|
179
|
-
},
|
|
180
|
-
delhi: {
|
|
181
|
-
default: "VIDP"
|
|
172
|
+
default: "KDAL"
|
|
182
173
|
},
|
|
183
174
|
denver: {
|
|
184
|
-
default: "
|
|
175
|
+
default: "KBKF"
|
|
185
176
|
},
|
|
186
|
-
|
|
187
|
-
default: "
|
|
188
|
-
},
|
|
189
|
-
doha: {
|
|
190
|
-
default: "OTHH"
|
|
191
|
-
},
|
|
192
|
-
dubai: {
|
|
193
|
-
default: "OMDB"
|
|
194
|
-
},
|
|
195
|
-
frankfurt: {
|
|
196
|
-
default: "EDDF"
|
|
177
|
+
guangzhou: {
|
|
178
|
+
default: "ZGGG"
|
|
197
179
|
},
|
|
198
180
|
helsinki: {
|
|
199
181
|
default: "EFHK"
|
|
200
182
|
},
|
|
201
183
|
hong_kong: {
|
|
202
|
-
default: "
|
|
203
|
-
high: "
|
|
204
|
-
low: "
|
|
184
|
+
default: "HKO",
|
|
185
|
+
high: "HKO",
|
|
186
|
+
low: "HKO"
|
|
205
187
|
},
|
|
206
188
|
houston: {
|
|
207
|
-
default: "
|
|
189
|
+
default: "KHOU"
|
|
208
190
|
},
|
|
209
|
-
|
|
210
|
-
default: "
|
|
191
|
+
istanbul: {
|
|
192
|
+
default: "LTFM"
|
|
193
|
+
},
|
|
194
|
+
jeddah: {
|
|
195
|
+
default: "OEJN"
|
|
196
|
+
},
|
|
197
|
+
jinan: {
|
|
198
|
+
default: "ZSJN"
|
|
199
|
+
},
|
|
200
|
+
karachi: {
|
|
201
|
+
default: "OPKC"
|
|
202
|
+
},
|
|
203
|
+
kuala_lumpur: {
|
|
204
|
+
default: "WMKK"
|
|
211
205
|
},
|
|
212
|
-
|
|
213
|
-
default: "
|
|
206
|
+
london: {
|
|
207
|
+
default: "EGLC"
|
|
214
208
|
},
|
|
215
209
|
los_angeles: {
|
|
216
210
|
default: "KLAX",
|
|
217
211
|
high: "KLAX",
|
|
218
212
|
low: "KLAX"
|
|
219
213
|
},
|
|
214
|
+
lucknow: {
|
|
215
|
+
default: "VILK"
|
|
216
|
+
},
|
|
220
217
|
madrid: {
|
|
221
218
|
default: "LEMD"
|
|
222
219
|
},
|
|
223
|
-
|
|
224
|
-
default: "
|
|
220
|
+
manila: {
|
|
221
|
+
default: "RPLL"
|
|
222
|
+
},
|
|
223
|
+
mexico_city: {
|
|
224
|
+
default: "MMMX"
|
|
225
225
|
},
|
|
226
226
|
miami: {
|
|
227
227
|
default: "KMIA"
|
|
@@ -229,14 +229,8 @@ var POLYMARKET_CITY_STATIONS = {
|
|
|
229
229
|
milan: {
|
|
230
230
|
default: "LIMC"
|
|
231
231
|
},
|
|
232
|
-
minneapolis: {
|
|
233
|
-
default: "KMSP"
|
|
234
|
-
},
|
|
235
232
|
moscow: {
|
|
236
|
-
default: "
|
|
237
|
-
},
|
|
238
|
-
mumbai: {
|
|
239
|
-
default: "VABB"
|
|
233
|
+
default: "UUWW"
|
|
240
234
|
},
|
|
241
235
|
munich: {
|
|
242
236
|
default: "EDDM"
|
|
@@ -246,25 +240,14 @@ var POLYMARKET_CITY_STATIONS = {
|
|
|
246
240
|
high: "KLGA",
|
|
247
241
|
low: "KLGA"
|
|
248
242
|
},
|
|
249
|
-
|
|
250
|
-
default: "
|
|
251
|
-
high: "LFPG",
|
|
252
|
-
low: "LFPB"
|
|
253
|
-
},
|
|
254
|
-
paris_orly: {
|
|
255
|
-
default: "LFPO"
|
|
256
|
-
},
|
|
257
|
-
philadelphia: {
|
|
258
|
-
default: "KPHL"
|
|
259
|
-
},
|
|
260
|
-
phoenix: {
|
|
261
|
-
default: "KPHX"
|
|
243
|
+
panama_city: {
|
|
244
|
+
default: "MPMG"
|
|
262
245
|
},
|
|
263
|
-
|
|
264
|
-
default: "
|
|
246
|
+
paris: {
|
|
247
|
+
default: "LFPB"
|
|
265
248
|
},
|
|
266
|
-
|
|
267
|
-
default: "
|
|
249
|
+
qingdao: {
|
|
250
|
+
default: "ZSQD"
|
|
268
251
|
},
|
|
269
252
|
san_francisco: {
|
|
270
253
|
default: "KSFO"
|
|
@@ -281,40 +264,37 @@ var POLYMARKET_CITY_STATIONS = {
|
|
|
281
264
|
shanghai: {
|
|
282
265
|
default: "ZSPD"
|
|
283
266
|
},
|
|
267
|
+
shenzhen: {
|
|
268
|
+
default: "ZGSZ"
|
|
269
|
+
},
|
|
284
270
|
singapore: {
|
|
285
271
|
default: "WSSS"
|
|
286
272
|
},
|
|
287
|
-
stockholm: {
|
|
288
|
-
default: "ESSA"
|
|
289
|
-
},
|
|
290
|
-
sydney: {
|
|
291
|
-
default: "YSSY"
|
|
292
|
-
},
|
|
293
273
|
taipei: {
|
|
294
|
-
default: "
|
|
274
|
+
default: "RCSS"
|
|
275
|
+
},
|
|
276
|
+
tel_aviv: {
|
|
277
|
+
default: "LLBG"
|
|
295
278
|
},
|
|
296
279
|
tokyo: {
|
|
297
280
|
default: "RJTT",
|
|
298
281
|
high: "RJTT",
|
|
299
282
|
low: "RJTT"
|
|
300
283
|
},
|
|
301
|
-
|
|
302
|
-
default: "
|
|
303
|
-
},
|
|
304
|
-
vienna: {
|
|
305
|
-
default: "LOWW"
|
|
284
|
+
toronto: {
|
|
285
|
+
default: "CYYZ"
|
|
306
286
|
},
|
|
307
287
|
warsaw: {
|
|
308
288
|
default: "EPWA"
|
|
309
289
|
},
|
|
310
|
-
washington_dc: {
|
|
311
|
-
default: "KDCA"
|
|
312
|
-
},
|
|
313
290
|
wellington: {
|
|
314
291
|
default: "NZWN"
|
|
315
292
|
},
|
|
316
|
-
|
|
317
|
-
default: "
|
|
293
|
+
wuhan: {
|
|
294
|
+
default: "ZHHH"
|
|
295
|
+
},
|
|
296
|
+
zhengzhou: {
|
|
297
|
+
default: "ZHCC"
|
|
318
298
|
}
|
|
319
299
|
};
|
|
320
300
|
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/data/generated/kalshi-stations.ts","../src/data/generated/polymarket-city-stations.ts","../src/resolvers/kalshi-nhigh.ts","../src/resolvers/kalshi-nlow.ts","../src/kalshi-settlement.ts"],"sourcesContent":["// @mostlyrightmd/markets — placeholder scaffold for TS-W0 Wave 1.\n// Real implementation (Kalshi NHIGH/NLOW resolvers, Polymarket discover/settle) lands in TS-W1+.\n\n/**\n * Placeholder version string from the TS-W0 Wave 1 scaffold. The\n * authoritative package version lives in `package.json#version`\n * (currently `0.1.0-rc.7`); this constant has not been bumped.\n */\nexport const version = \"0.0.0\";\n\n/**\n * Smoke-test export from the TS-W0 Wave 1 scaffold. Returns the literal\n * string `\"hello @mostlyrightmd/markets\"`. Retained so the published\n * package has at least one importable runtime export until the scaffold\n * is removed in a later phase.\n */\nexport function helloMarkets(): string {\n return \"hello @mostlyrightmd/markets\";\n}\n\n// Re-export generated data (NOT auto-generated; hand-maintained barrel).\n// The targets ARE auto-generated by @mostlyrightmd/codegen — see packages-ts/codegen.\nexport * from \"./data/generated/index.js\";\n\n// Kalshi NHIGH/NLOW resolvers (TS-W1 Wave 2).\nexport * from \"./resolvers/index.js\";\n\n// Kalshi settlement helper (TS-W5 Wave 5) — higher-level dispatch by\n// prefix (KHIGH* vs KLOW*).\nexport { kalshiSettlementFor } from \"./kalshi-settlement.js\";\nexport type { KalshiSettlement } from \"./kalshi-settlement.js\";\n\n// NOTE: Polymarket discover/settle (TS-W5 Waves 1-4) live at the\n// `./polymarket` subpath, NOT the root barrel — keeps the IIFE bundle\n// lean (Polymarket is server-side by design; CORS-blocked from\n// browsers per .planning/research/TS-CORS-MATRIX.md). Import with:\n//\n// import { polymarketDiscover, polymarketSettle } from \"@mostlyrightmd/markets/polymarket\";\n","// AUTO-GENERATED by @mostlyrightmd/codegen from schemas/kalshi-settlement-stations.json.\n// DO NOT EDIT — regenerate with: pnpm codegen\n// Last manifest SHA recorded in schemas/EXPORT_MANIFEST.json\n\nexport interface KalshiStation {\n station: string;\n citation: string;\n}\n\nexport const KALSHI_SETTLEMENT_STATIONS: Readonly<Record<string, KalshiStation>> = {\n ATL: {\n citation: \"https://kalshi.com/markets/khighatl (Atlanta Hartsfield-Jackson)\",\n station: \"KATL\",\n },\n AUS: {\n citation: \"https://kalshi.com/markets/khighaus (Austin-Bergstrom; the only Austin station Kalshi cites)\",\n station: \"KAUS\",\n },\n BNA: {\n citation: \"https://kalshi.com/markets/khighbna (Nashville International)\",\n station: \"KBNA\",\n },\n BOS: {\n citation: \"https://kalshi.com/markets/khighbos (Boston Logan)\",\n station: \"KBOS\",\n },\n CHI: {\n citation: \"https://kalshi.com/markets/khighchi (Midway, NOT ORD)\",\n station: \"KMDW\",\n },\n CVG: {\n citation: \"https://kalshi.com/markets/khighcvg (Cincinnati/Northern Kentucky International)\",\n station: \"KCVG\",\n },\n DAL: {\n citation: \"https://kalshi.com/markets/khighdal (DFW, NOT Love Field)\",\n station: \"KDFW\",\n },\n DCA: {\n citation: \"https://kalshi.com/markets/khighdca (Reagan National, NOT Dulles or BWI)\",\n station: \"KDCA\",\n },\n DEN: {\n citation: \"https://kalshi.com/markets/khighden (Denver International)\",\n station: \"KDEN\",\n },\n DTW: {\n citation: \"https://kalshi.com/markets/khighdtw (Detroit Metropolitan)\",\n station: \"KDTW\",\n },\n HOU: {\n citation: \"https://kalshi.com/markets/khighhou (Intercontinental, NOT Hobby; Kalshi cites IAH)\",\n station: \"KIAH\",\n },\n LAX: {\n citation: \"https://kalshi.com/markets/khighlax (LAX international)\",\n station: \"KLAX\",\n },\n MIA: {\n citation: \"https://kalshi.com/markets/khighmia (Miami International)\",\n station: \"KMIA\",\n },\n MSP: {\n citation: \"https://kalshi.com/markets/khighmsp (Minneapolis-St. Paul International)\",\n station: \"KMSP\",\n },\n NYC: {\n citation: \"https://kalshi.com/markets/khighny (Central Park, NOT LGA/JFK)\",\n station: \"KNYC\",\n },\n PHL: {\n citation: \"https://kalshi.com/markets/khighphl (Philadelphia International)\",\n station: \"KPHL\",\n },\n PHX: {\n citation: \"https://kalshi.com/markets/khighphx (Sky Harbor International)\",\n station: \"KPHX\",\n },\n SEA: {\n citation: \"https://kalshi.com/markets/khighsea (SeaTac, NOT BFI)\",\n station: \"KSEA\",\n },\n SFO: {\n citation: \"https://kalshi.com/markets/khighsfo (San Francisco International, NOT OAK)\",\n station: \"KSFO\",\n },\n SLC: {\n citation: \"https://kalshi.com/markets/khighslc (Salt Lake City International)\",\n station: \"KSLC\",\n },\n TLV: {\n citation: \"https://kalshi.com/markets/kxhightlv (Harry Reid/McCarran; settles vs NWS CLILAS)\",\n station: \"KLAS\",\n },\n} as const;\n\nexport const KNOWN_WRONG_STATIONS: ReadonlySet<string> = new Set<string>([\n \"KBWI\",\n \"KDAL\",\n \"KEWR\",\n \"KHOU\",\n \"KIAD\",\n \"KJFK\",\n \"KLGA\",\n \"KOAK\",\n \"KORD\",\n]);\n","// AUTO-GENERATED by @mostlyrightmd/codegen from schemas/polymarket-city-stations.json.\n// DO NOT EDIT — regenerate with: pnpm codegen\n// Last manifest SHA recorded in schemas/EXPORT_MANIFEST.json\n\nexport interface PolymarketCityStation {\n default: string;\n high?: string;\n low?: string;\n [measure: string]: string | undefined;\n}\n\nexport const POLYMARKET_CITY_STATIONS: Readonly<Record<string, PolymarketCityStation>> = {\n amsterdam: {\n default: \"EHAM\",\n },\n atlanta: {\n default: \"KATL\",\n },\n auckland: {\n default: \"NZAA\",\n },\n austin: {\n default: \"KAUS\",\n },\n bangkok: {\n default: \"VTBS\",\n },\n barcelona: {\n default: \"LEBL\",\n },\n beijing: {\n default: \"ZBAA\",\n },\n berlin: {\n default: \"EDDB\",\n },\n boston: {\n default: \"KBOS\",\n },\n brisbane: {\n default: \"YBBN\",\n },\n buenos_aires: {\n default: \"SAEZ\",\n },\n chicago: {\n default: \"KORD\",\n high: \"KORD\",\n low: \"KORD\",\n },\n copenhagen: {\n default: \"EKCH\",\n },\n dallas: {\n default: \"KDFW\",\n },\n delhi: {\n default: \"VIDP\",\n },\n denver: {\n default: \"KDEN\",\n },\n detroit: {\n default: \"KDTW\",\n },\n doha: {\n default: \"OTHH\",\n },\n dubai: {\n default: \"OMDB\",\n },\n frankfurt: {\n default: \"EDDF\",\n },\n helsinki: {\n default: \"EFHK\",\n },\n hong_kong: {\n default: \"VHHH\",\n high: \"VHHH\",\n low: \"VHHH\",\n },\n houston: {\n default: \"KIAH\",\n },\n london: {\n default: \"EGLL\",\n },\n london_gatwick: {\n default: \"EGKK\",\n },\n los_angeles: {\n default: \"KLAX\",\n high: \"KLAX\",\n low: \"KLAX\",\n },\n madrid: {\n default: \"LEMD\",\n },\n melbourne: {\n default: \"YMML\",\n },\n miami: {\n default: \"KMIA\",\n },\n milan: {\n default: \"LIMC\",\n },\n minneapolis: {\n default: \"KMSP\",\n },\n moscow: {\n default: \"UUEE\",\n },\n mumbai: {\n default: \"VABB\",\n },\n munich: {\n default: \"EDDM\",\n },\n nyc: {\n default: \"KLGA\",\n high: \"KLGA\",\n low: \"KLGA\",\n },\n paris: {\n default: \"LFPG\",\n high: \"LFPG\",\n low: \"LFPB\",\n },\n paris_orly: {\n default: \"LFPO\",\n },\n philadelphia: {\n default: \"KPHL\",\n },\n phoenix: {\n default: \"KPHX\",\n },\n riyadh: {\n default: \"OERK\",\n },\n rome: {\n default: \"LIRF\",\n },\n san_francisco: {\n default: \"KSFO\",\n },\n sao_paulo: {\n default: \"SBGR\",\n },\n seattle: {\n default: \"KSEA\",\n },\n seoul: {\n default: \"RKSI\",\n },\n shanghai: {\n default: \"ZSPD\",\n },\n singapore: {\n default: \"WSSS\",\n },\n stockholm: {\n default: \"ESSA\",\n },\n sydney: {\n default: \"YSSY\",\n },\n taipei: {\n default: \"RCTP\",\n },\n tokyo: {\n default: \"RJTT\",\n high: \"RJTT\",\n low: \"RJTT\",\n },\n tokyo_narita: {\n default: \"RJAA\",\n },\n vienna: {\n default: \"LOWW\",\n },\n warsaw: {\n default: \"EPWA\",\n },\n washington_dc: {\n default: \"KDCA\",\n },\n wellington: {\n default: \"NZWN\",\n },\n zurich: {\n default: \"LSZH\",\n },\n} as const;\n","// Kalshi NHIGH (daily HIGH temperature) contract resolver.\n//\n// NHIGH markets resolve against the NWS CLI `max_temp_f` value for a\n// specific station on a specific date. `kalshiNhighResolve` is the\n// deterministic mapping from a Kalshi market identifier to the\n// (settlement_source, settlement_station) tuple downstream code uses\n// to pull the right settlement row from the CLI catalog.\n//\n// Ported byte-faithful from packages/markets/src/mostlyright/markets/catalog/kalshi_nhigh.py.\n\nimport { KALSHI_SETTLEMENT_STATIONS } from \"../data/generated/kalshi-stations.js\";\n\nexport interface NHighResolution {\n readonly settlementSource: \"cli.archive\";\n readonly settlementStation: string; // 4-letter ICAO\n readonly cityTicker: string;\n readonly contractDate: string; // YYYY-MM-DD\n}\n\n/**\n * Custom error type for contract-id parsing / validation failures.\n *\n * Mirrors the Python `ValueError`/`TypeError` distinction: in TS we use a\n * named subclass so callers can `instanceof`-check rather than parse\n * error messages.\n */\nexport class ContractIdError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ContractIdError\";\n }\n}\n\n/**\n * Coerce a Date or YYYY-MM-DD string into an ISO date-only string.\n *\n * Rejects Date instances whose UTC hours/minutes/seconds/ms are non-zero —\n * those would silently corrupt downstream settlement-date matching\n * (date-equality is strict).\n *\n * Mirrors the Python `isinstance(settlement_date, datetime)` guard in\n * `kalshi_nhigh.resolve`.\n */\nfunction coerceContractDate(value: Date | string): string {\n if (typeof value === \"string\") {\n // YYYY-MM-DD strict format check.\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) {\n throw new ContractIdError(\n `settlementDate string must be YYYY-MM-DD; got ${JSON.stringify(value)}`,\n );\n }\n // Validate it parses to a real calendar date.\n const parsed = new Date(`${value}T00:00:00Z`);\n if (Number.isNaN(parsed.getTime())) {\n throw new ContractIdError(\n `settlementDate string is not a valid calendar date; got ${JSON.stringify(value)}`,\n );\n }\n // Round-trip check — guards against e.g. \"2025-02-30\" silently\n // rolling forward.\n const iso = parsed.toISOString().slice(0, 10);\n if (iso !== value) {\n throw new ContractIdError(\n `settlementDate string is not a valid calendar date; got ${JSON.stringify(value)}`,\n );\n }\n return value;\n }\n if (value instanceof Date) {\n if (Number.isNaN(value.getTime())) {\n throw new ContractIdError(\"settlementDate is an invalid Date instance\");\n }\n // Reject any Date with a non-zero UTC time component — mirrors\n // Python's `isinstance(settlement_date, datetime)` guard. A Date\n // carries a time component which would break downstream\n // date-equality matching.\n if (\n value.getUTCHours() !== 0 ||\n value.getUTCMinutes() !== 0 ||\n value.getUTCSeconds() !== 0 ||\n value.getUTCMilliseconds() !== 0\n ) {\n throw new ContractIdError(\n `settlementDate must be a UTC date-only Date (H/M/S/ms = 0); got ${value.toISOString()}. Use new Date('YYYY-MM-DDT00:00:00Z') or pass a 'YYYY-MM-DD' string.`,\n );\n }\n return value.toISOString().slice(0, 10);\n }\n throw new ContractIdError(\"settlementDate must be a Date instance or YYYY-MM-DD string\");\n}\n\n/**\n * Resolve a Kalshi NHIGH contract to its settlement source + station.\n *\n * The contract id format is `KHIGH<CITY>` (case-insensitive), where\n * `<CITY>` is a city ticker present in\n * {@link KALSHI_SETTLEMENT_STATIONS}.\n *\n * @param contractId Kalshi market identifier. Case-insensitive.\n * @param settlementDate Calendar date the market settles for. Either a\n * UTC date-only `Date` (H/M/S/ms == 0) or a `YYYY-MM-DD` string.\n * @returns A frozen {@link NHighResolution}.\n * @throws {ContractIdError} The contract id doesn't follow\n * `KHIGH<CITY>`, the city is unknown, or the settlement date is\n * invalid.\n */\nexport function kalshiNhighResolve(\n contractId: string,\n settlementDate: Date | string,\n): NHighResolution {\n if (typeof contractId !== \"string\") {\n throw new ContractIdError(`contractId must be a string; got ${typeof contractId}`);\n }\n\n const contractDate = coerceContractDate(settlementDate);\n\n const cid = contractId.toUpperCase();\n if (!cid.startsWith(\"KHIGH\") || cid.length <= 5) {\n throw new ContractIdError(\n `NHIGH contractId must follow 'KHIGH<CITY>' format; got ${JSON.stringify(contractId)}`,\n );\n }\n const cityTicker = cid.slice(5);\n const station = KALSHI_SETTLEMENT_STATIONS[cityTicker];\n if (station === undefined) {\n const known = Object.keys(KALSHI_SETTLEMENT_STATIONS).sort();\n throw new ContractIdError(\n `unknown city ${JSON.stringify(cityTicker)} (known: ${known.join(\", \")})`,\n );\n }\n\n return Object.freeze({\n settlementSource: \"cli.archive\" as const,\n settlementStation: station.station,\n cityTicker,\n contractDate,\n });\n}\n","// Kalshi NLOW (daily LOW temperature) contract resolver.\n//\n// Mirror of kalshi-nhigh — same station whitelist + same source\n// (cli.archive); only the metric differs. NLOW markets resolve against\n// the NWS CLI `min_temp_f` value for a specific station on a specific\n// date.\n//\n// Ported byte-faithful from packages/markets/src/mostlyright/markets/catalog/kalshi_nlow.py.\n\nimport { KALSHI_SETTLEMENT_STATIONS } from \"../data/generated/kalshi-stations.js\";\nimport { ContractIdError } from \"./kalshi-nhigh.js\";\n\nexport interface NLowResolution {\n readonly settlementSource: \"cli.archive\";\n readonly settlementStation: string; // 4-letter ICAO\n readonly cityTicker: string;\n readonly contractDate: string; // YYYY-MM-DD\n}\n\n/**\n * Coerce a Date or YYYY-MM-DD string into an ISO date-only string.\n *\n * Rejects Date instances whose UTC hours/minutes/seconds/ms are non-zero —\n * those would silently corrupt downstream settlement-date matching.\n *\n * Mirrors the Python `isinstance(settlement_date, datetime)` guard.\n *\n * Note: duplicated here (rather than imported) so kalshi-nlow stays a\n * standalone file matching the Python module split. The two functions\n * are byte-identical by design.\n */\nfunction coerceContractDate(value: Date | string): string {\n if (typeof value === \"string\") {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) {\n throw new ContractIdError(\n `settlementDate string must be YYYY-MM-DD; got ${JSON.stringify(value)}`,\n );\n }\n const parsed = new Date(`${value}T00:00:00Z`);\n if (Number.isNaN(parsed.getTime())) {\n throw new ContractIdError(\n `settlementDate string is not a valid calendar date; got ${JSON.stringify(value)}`,\n );\n }\n const iso = parsed.toISOString().slice(0, 10);\n if (iso !== value) {\n throw new ContractIdError(\n `settlementDate string is not a valid calendar date; got ${JSON.stringify(value)}`,\n );\n }\n return value;\n }\n if (value instanceof Date) {\n if (Number.isNaN(value.getTime())) {\n throw new ContractIdError(\"settlementDate is an invalid Date instance\");\n }\n if (\n value.getUTCHours() !== 0 ||\n value.getUTCMinutes() !== 0 ||\n value.getUTCSeconds() !== 0 ||\n value.getUTCMilliseconds() !== 0\n ) {\n throw new ContractIdError(\n `settlementDate must be a UTC date-only Date (H/M/S/ms = 0); got ${value.toISOString()}. Use new Date('YYYY-MM-DDT00:00:00Z') or pass a 'YYYY-MM-DD' string.`,\n );\n }\n return value.toISOString().slice(0, 10);\n }\n throw new ContractIdError(\"settlementDate must be a Date instance or YYYY-MM-DD string\");\n}\n\n/**\n * Resolve a Kalshi NLOW contract to its settlement source + station.\n *\n * The contract id format is `KLOW<CITY>` (case-insensitive), where\n * `<CITY>` is a city ticker present in\n * {@link KALSHI_SETTLEMENT_STATIONS}.\n *\n * @param contractId Kalshi market identifier. Case-insensitive.\n * @param settlementDate Calendar date the market settles for. Either a\n * UTC date-only `Date` (H/M/S/ms == 0) or a `YYYY-MM-DD` string.\n * @returns A frozen {@link NLowResolution}.\n * @throws {ContractIdError} The contract id doesn't follow\n * `KLOW<CITY>`, the city is unknown, or the settlement date is\n * invalid.\n */\nexport function kalshiNlowResolve(\n contractId: string,\n settlementDate: Date | string,\n): NLowResolution {\n if (typeof contractId !== \"string\") {\n throw new ContractIdError(`contractId must be a string; got ${typeof contractId}`);\n }\n\n const contractDate = coerceContractDate(settlementDate);\n\n const cid = contractId.toUpperCase();\n if (!cid.startsWith(\"KLOW\") || cid.length <= 4) {\n throw new ContractIdError(\n `NLOW contractId must follow 'KLOW<CITY>' format; got ${JSON.stringify(contractId)}`,\n );\n }\n const cityTicker = cid.slice(4);\n const station = KALSHI_SETTLEMENT_STATIONS[cityTicker];\n if (station === undefined) {\n const known = Object.keys(KALSHI_SETTLEMENT_STATIONS).sort();\n throw new ContractIdError(\n `unknown city ${JSON.stringify(cityTicker)} (known: ${known.join(\", \")})`,\n );\n }\n\n return Object.freeze({\n settlementSource: \"cli.archive\" as const,\n settlementStation: station.station,\n cityTicker,\n contractDate,\n });\n}\n","// TS-W5 Wave 5 — kalshiSettlementFor higher-level helper.\n//\n// Dispatch by Kalshi contract-id prefix (KHIGH* vs KLOW*) to the right\n// resolver. Returns the same shape both NHIGH and NLOW resolvers use so\n// downstream consumers don't need to know about the city-suffix split.\n\nimport { type NHighResolution, kalshiNhighResolve } from \"./resolvers/kalshi-nhigh.js\";\nimport { ContractIdError } from \"./resolvers/kalshi-nhigh.js\";\nimport { type NLowResolution, kalshiNlowResolve } from \"./resolvers/kalshi-nlow.js\";\n\nexport type KalshiSettlement = NHighResolution | NLowResolution;\n\n/**\n * Resolve a Kalshi NHIGH or NLOW contract id to its settlement metadata.\n *\n * `KHIGH*` prefixes dispatch to the NHIGH resolver; `KLOW*` prefixes\n * dispatch to NLOW. Anything else raises `ContractIdError`.\n *\n * @example\n * kalshiSettlementFor(\"KHIGHNYC\", \"2025-01-06\")\n * // → { settlementSource: \"cli.archive\", settlementStation: \"KNYC\",\n * // cityTicker: \"NYC\", contractDate: \"2025-01-06\" }\n */\nexport function kalshiSettlementFor(contractId: string, date: string): KalshiSettlement {\n if (typeof contractId !== \"string\" || contractId.length === 0) {\n throw new ContractIdError(\"contractId must be a non-empty string\");\n }\n const upper = contractId.toUpperCase();\n if (upper.startsWith(\"KHIGH\")) return kalshiNhighResolve(upper, date);\n if (upper.startsWith(\"KLOW\")) return kalshiNlowResolve(upper, date);\n throw new ContractIdError(\n `contractId ${JSON.stringify(contractId)} does not start with KHIGH or KLOW`,\n );\n}\n"],"mappings":"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","names":["coerceContractDate"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/data/generated/kalshi-stations.ts","../src/data/generated/polymarket-city-stations.ts","../src/resolvers/kalshi-nhigh.ts","../src/resolvers/kalshi-nlow.ts","../src/kalshi-settlement.ts"],"sourcesContent":["// @mostlyrightmd/markets — placeholder scaffold for TS-W0 Wave 1.\n// Real implementation (Kalshi NHIGH/NLOW resolvers, Polymarket discover/settle) lands in TS-W1+.\n\n/**\n * Placeholder version string from the TS-W0 Wave 1 scaffold. The\n * authoritative package version lives in `package.json#version`\n * (currently `0.1.0-rc.7`); this constant has not been bumped.\n */\nexport const version = \"0.0.0\";\n\n/**\n * Smoke-test export from the TS-W0 Wave 1 scaffold. Returns the literal\n * string `\"hello @mostlyrightmd/markets\"`. Retained so the published\n * package has at least one importable runtime export until the scaffold\n * is removed in a later phase.\n */\nexport function helloMarkets(): string {\n return \"hello @mostlyrightmd/markets\";\n}\n\n// Re-export generated data (NOT auto-generated; hand-maintained barrel).\n// The targets ARE auto-generated by @mostlyrightmd/codegen — see packages-ts/codegen.\nexport * from \"./data/generated/index.js\";\n\n// Kalshi NHIGH/NLOW resolvers (TS-W1 Wave 2).\nexport * from \"./resolvers/index.js\";\n\n// Kalshi settlement helper (TS-W5 Wave 5) — higher-level dispatch by\n// prefix (KHIGH* vs KLOW*).\nexport { kalshiSettlementFor } from \"./kalshi-settlement.js\";\nexport type { KalshiSettlement } from \"./kalshi-settlement.js\";\n\n// NOTE: Polymarket discover/settle (TS-W5 Waves 1-4) live at the\n// `./polymarket` subpath, NOT the root barrel — keeps the IIFE bundle\n// lean (Polymarket is server-side by design; CORS-blocked from\n// browsers per .planning/research/TS-CORS-MATRIX.md). Import with:\n//\n// import { polymarketDiscover, polymarketSettle } from \"@mostlyrightmd/markets/polymarket\";\n","// AUTO-GENERATED by @mostlyrightmd/codegen from schemas/kalshi-settlement-stations.json.\n// DO NOT EDIT — regenerate with: pnpm codegen\n// Last manifest SHA recorded in schemas/EXPORT_MANIFEST.json\n\nexport interface KalshiStation {\n station: string;\n citation: string;\n}\n\nexport const KALSHI_SETTLEMENT_STATIONS: Readonly<Record<string, KalshiStation>> = {\n ATL: {\n citation: \"https://kalshi.com/markets/khighatl (Atlanta Hartsfield-Jackson)\",\n station: \"KATL\",\n },\n AUS: {\n citation: \"https://kalshi.com/markets/khighaus (Austin-Bergstrom; the only Austin station Kalshi cites)\",\n station: \"KAUS\",\n },\n BNA: {\n citation: \"https://kalshi.com/markets/khighbna (Nashville International)\",\n station: \"KBNA\",\n },\n BOS: {\n citation: \"https://kalshi.com/markets/khighbos (Boston Logan)\",\n station: \"KBOS\",\n },\n CHI: {\n citation: \"https://kalshi.com/markets/khighchi (Midway, NOT ORD)\",\n station: \"KMDW\",\n },\n CVG: {\n citation: \"https://kalshi.com/markets/khighcvg (Cincinnati/Northern Kentucky International)\",\n station: \"KCVG\",\n },\n DAL: {\n citation: \"https://kalshi.com/markets/khighdal (DFW, NOT Love Field)\",\n station: \"KDFW\",\n },\n DCA: {\n citation: \"https://kalshi.com/markets/khighdca (Reagan National, NOT Dulles or BWI)\",\n station: \"KDCA\",\n },\n DEN: {\n citation: \"https://kalshi.com/markets/khighden (Denver International)\",\n station: \"KDEN\",\n },\n DTW: {\n citation: \"https://kalshi.com/markets/khighdtw (Detroit Metropolitan)\",\n station: \"KDTW\",\n },\n HOU: {\n citation: \"https://kalshi.com/markets/khighhou (Intercontinental, NOT Hobby; Kalshi cites IAH)\",\n station: \"KIAH\",\n },\n LAX: {\n citation: \"https://kalshi.com/markets/khighlax (LAX international)\",\n station: \"KLAX\",\n },\n MIA: {\n citation: \"https://kalshi.com/markets/khighmia (Miami International)\",\n station: \"KMIA\",\n },\n MSP: {\n citation: \"https://kalshi.com/markets/khighmsp (Minneapolis-St. Paul International)\",\n station: \"KMSP\",\n },\n NYC: {\n citation: \"https://kalshi.com/markets/khighny (Central Park, NOT LGA/JFK)\",\n station: \"KNYC\",\n },\n PHL: {\n citation: \"https://kalshi.com/markets/khighphl (Philadelphia International)\",\n station: \"KPHL\",\n },\n PHX: {\n citation: \"https://kalshi.com/markets/khighphx (Sky Harbor International)\",\n station: \"KPHX\",\n },\n SEA: {\n citation: \"https://kalshi.com/markets/khighsea (SeaTac, NOT BFI)\",\n station: \"KSEA\",\n },\n SFO: {\n citation: \"https://kalshi.com/markets/khighsfo (San Francisco International, NOT OAK)\",\n station: \"KSFO\",\n },\n SLC: {\n citation: \"https://kalshi.com/markets/khighslc (Salt Lake City International)\",\n station: \"KSLC\",\n },\n TLV: {\n citation: \"https://kalshi.com/markets/kxhightlv (Harry Reid/McCarran; settles vs NWS CLILAS)\",\n station: \"KLAS\",\n },\n} as const;\n\nexport const KNOWN_WRONG_STATIONS: ReadonlySet<string> = new Set<string>([\n \"KBWI\",\n \"KDAL\",\n \"KEWR\",\n \"KHOU\",\n \"KIAD\",\n \"KJFK\",\n \"KLGA\",\n \"KOAK\",\n \"KORD\",\n]);\n","// AUTO-GENERATED by @mostlyrightmd/codegen from schemas/polymarket-city-stations.json.\n// DO NOT EDIT — regenerate with: pnpm codegen\n// Last manifest SHA recorded in schemas/EXPORT_MANIFEST.json\n\nexport interface PolymarketCityStation {\n default: string;\n high?: string;\n low?: string;\n [measure: string]: string | undefined;\n}\n\nexport const POLYMARKET_CITY_STATIONS: Readonly<Record<string, PolymarketCityStation>> = {\n amsterdam: {\n default: \"EHAM\",\n },\n ankara: {\n default: \"LTAC\",\n },\n atlanta: {\n default: \"KATL\",\n },\n austin: {\n default: \"KAUS\",\n },\n beijing: {\n default: \"ZBAA\",\n },\n buenos_aires: {\n default: \"SAEZ\",\n },\n busan: {\n default: \"RKPK\",\n },\n cape_town: {\n default: \"FACT\",\n },\n chengdu: {\n default: \"ZUUU\",\n },\n chicago: {\n default: \"KORD\",\n high: \"KORD\",\n low: \"KORD\",\n },\n chongqing: {\n default: \"ZUCK\",\n },\n dallas: {\n default: \"KDAL\",\n },\n denver: {\n default: \"KBKF\",\n },\n guangzhou: {\n default: \"ZGGG\",\n },\n helsinki: {\n default: \"EFHK\",\n },\n hong_kong: {\n default: \"HKO\",\n high: \"HKO\",\n low: \"HKO\",\n },\n houston: {\n default: \"KHOU\",\n },\n istanbul: {\n default: \"LTFM\",\n },\n jeddah: {\n default: \"OEJN\",\n },\n jinan: {\n default: \"ZSJN\",\n },\n karachi: {\n default: \"OPKC\",\n },\n kuala_lumpur: {\n default: \"WMKK\",\n },\n london: {\n default: \"EGLC\",\n },\n los_angeles: {\n default: \"KLAX\",\n high: \"KLAX\",\n low: \"KLAX\",\n },\n lucknow: {\n default: \"VILK\",\n },\n madrid: {\n default: \"LEMD\",\n },\n manila: {\n default: \"RPLL\",\n },\n mexico_city: {\n default: \"MMMX\",\n },\n miami: {\n default: \"KMIA\",\n },\n milan: {\n default: \"LIMC\",\n },\n moscow: {\n default: \"UUWW\",\n },\n munich: {\n default: \"EDDM\",\n },\n nyc: {\n default: \"KLGA\",\n high: \"KLGA\",\n low: \"KLGA\",\n },\n panama_city: {\n default: \"MPMG\",\n },\n paris: {\n default: \"LFPB\",\n },\n qingdao: {\n default: \"ZSQD\",\n },\n san_francisco: {\n default: \"KSFO\",\n },\n sao_paulo: {\n default: \"SBGR\",\n },\n seattle: {\n default: \"KSEA\",\n },\n seoul: {\n default: \"RKSI\",\n },\n shanghai: {\n default: \"ZSPD\",\n },\n shenzhen: {\n default: \"ZGSZ\",\n },\n singapore: {\n default: \"WSSS\",\n },\n taipei: {\n default: \"RCSS\",\n },\n tel_aviv: {\n default: \"LLBG\",\n },\n tokyo: {\n default: \"RJTT\",\n high: \"RJTT\",\n low: \"RJTT\",\n },\n toronto: {\n default: \"CYYZ\",\n },\n warsaw: {\n default: \"EPWA\",\n },\n wellington: {\n default: \"NZWN\",\n },\n wuhan: {\n default: \"ZHHH\",\n },\n zhengzhou: {\n default: \"ZHCC\",\n },\n} as const;\n","// Kalshi NHIGH (daily HIGH temperature) contract resolver.\n//\n// NHIGH markets resolve against the NWS CLI `max_temp_f` value for a\n// specific station on a specific date. `kalshiNhighResolve` is the\n// deterministic mapping from a Kalshi market identifier to the\n// (settlement_source, settlement_station) tuple downstream code uses\n// to pull the right settlement row from the CLI catalog.\n//\n// Ported byte-faithful from packages/markets/src/mostlyright/markets/catalog/kalshi_nhigh.py.\n\nimport { KALSHI_SETTLEMENT_STATIONS } from \"../data/generated/kalshi-stations.js\";\n\nexport interface NHighResolution {\n readonly settlementSource: \"cli.archive\";\n readonly settlementStation: string; // 4-letter ICAO\n readonly cityTicker: string;\n readonly contractDate: string; // YYYY-MM-DD\n}\n\n/**\n * Custom error type for contract-id parsing / validation failures.\n *\n * Mirrors the Python `ValueError`/`TypeError` distinction: in TS we use a\n * named subclass so callers can `instanceof`-check rather than parse\n * error messages.\n */\nexport class ContractIdError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ContractIdError\";\n }\n}\n\n/**\n * Coerce a Date or YYYY-MM-DD string into an ISO date-only string.\n *\n * Rejects Date instances whose UTC hours/minutes/seconds/ms are non-zero —\n * those would silently corrupt downstream settlement-date matching\n * (date-equality is strict).\n *\n * Mirrors the Python `isinstance(settlement_date, datetime)` guard in\n * `kalshi_nhigh.resolve`.\n */\nfunction coerceContractDate(value: Date | string): string {\n if (typeof value === \"string\") {\n // YYYY-MM-DD strict format check.\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) {\n throw new ContractIdError(\n `settlementDate string must be YYYY-MM-DD; got ${JSON.stringify(value)}`,\n );\n }\n // Validate it parses to a real calendar date.\n const parsed = new Date(`${value}T00:00:00Z`);\n if (Number.isNaN(parsed.getTime())) {\n throw new ContractIdError(\n `settlementDate string is not a valid calendar date; got ${JSON.stringify(value)}`,\n );\n }\n // Round-trip check — guards against e.g. \"2025-02-30\" silently\n // rolling forward.\n const iso = parsed.toISOString().slice(0, 10);\n if (iso !== value) {\n throw new ContractIdError(\n `settlementDate string is not a valid calendar date; got ${JSON.stringify(value)}`,\n );\n }\n return value;\n }\n if (value instanceof Date) {\n if (Number.isNaN(value.getTime())) {\n throw new ContractIdError(\"settlementDate is an invalid Date instance\");\n }\n // Reject any Date with a non-zero UTC time component — mirrors\n // Python's `isinstance(settlement_date, datetime)` guard. A Date\n // carries a time component which would break downstream\n // date-equality matching.\n if (\n value.getUTCHours() !== 0 ||\n value.getUTCMinutes() !== 0 ||\n value.getUTCSeconds() !== 0 ||\n value.getUTCMilliseconds() !== 0\n ) {\n throw new ContractIdError(\n `settlementDate must be a UTC date-only Date (H/M/S/ms = 0); got ${value.toISOString()}. Use new Date('YYYY-MM-DDT00:00:00Z') or pass a 'YYYY-MM-DD' string.`,\n );\n }\n return value.toISOString().slice(0, 10);\n }\n throw new ContractIdError(\"settlementDate must be a Date instance or YYYY-MM-DD string\");\n}\n\n/**\n * Resolve a Kalshi NHIGH contract to its settlement source + station.\n *\n * The contract id format is `KHIGH<CITY>` (case-insensitive), where\n * `<CITY>` is a city ticker present in\n * {@link KALSHI_SETTLEMENT_STATIONS}.\n *\n * @param contractId Kalshi market identifier. Case-insensitive.\n * @param settlementDate Calendar date the market settles for. Either a\n * UTC date-only `Date` (H/M/S/ms == 0) or a `YYYY-MM-DD` string.\n * @returns A frozen {@link NHighResolution}.\n * @throws {ContractIdError} The contract id doesn't follow\n * `KHIGH<CITY>`, the city is unknown, or the settlement date is\n * invalid.\n */\nexport function kalshiNhighResolve(\n contractId: string,\n settlementDate: Date | string,\n): NHighResolution {\n if (typeof contractId !== \"string\") {\n throw new ContractIdError(`contractId must be a string; got ${typeof contractId}`);\n }\n\n const contractDate = coerceContractDate(settlementDate);\n\n const cid = contractId.toUpperCase();\n if (!cid.startsWith(\"KHIGH\") || cid.length <= 5) {\n throw new ContractIdError(\n `NHIGH contractId must follow 'KHIGH<CITY>' format; got ${JSON.stringify(contractId)}`,\n );\n }\n const cityTicker = cid.slice(5);\n const station = KALSHI_SETTLEMENT_STATIONS[cityTicker];\n if (station === undefined) {\n const known = Object.keys(KALSHI_SETTLEMENT_STATIONS).sort();\n throw new ContractIdError(\n `unknown city ${JSON.stringify(cityTicker)} (known: ${known.join(\", \")})`,\n );\n }\n\n return Object.freeze({\n settlementSource: \"cli.archive\" as const,\n settlementStation: station.station,\n cityTicker,\n contractDate,\n });\n}\n","// Kalshi NLOW (daily LOW temperature) contract resolver.\n//\n// Mirror of kalshi-nhigh — same station whitelist + same source\n// (cli.archive); only the metric differs. NLOW markets resolve against\n// the NWS CLI `min_temp_f` value for a specific station on a specific\n// date.\n//\n// Ported byte-faithful from packages/markets/src/mostlyright/markets/catalog/kalshi_nlow.py.\n\nimport { KALSHI_SETTLEMENT_STATIONS } from \"../data/generated/kalshi-stations.js\";\nimport { ContractIdError } from \"./kalshi-nhigh.js\";\n\nexport interface NLowResolution {\n readonly settlementSource: \"cli.archive\";\n readonly settlementStation: string; // 4-letter ICAO\n readonly cityTicker: string;\n readonly contractDate: string; // YYYY-MM-DD\n}\n\n/**\n * Coerce a Date or YYYY-MM-DD string into an ISO date-only string.\n *\n * Rejects Date instances whose UTC hours/minutes/seconds/ms are non-zero —\n * those would silently corrupt downstream settlement-date matching.\n *\n * Mirrors the Python `isinstance(settlement_date, datetime)` guard.\n *\n * Note: duplicated here (rather than imported) so kalshi-nlow stays a\n * standalone file matching the Python module split. The two functions\n * are byte-identical by design.\n */\nfunction coerceContractDate(value: Date | string): string {\n if (typeof value === \"string\") {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) {\n throw new ContractIdError(\n `settlementDate string must be YYYY-MM-DD; got ${JSON.stringify(value)}`,\n );\n }\n const parsed = new Date(`${value}T00:00:00Z`);\n if (Number.isNaN(parsed.getTime())) {\n throw new ContractIdError(\n `settlementDate string is not a valid calendar date; got ${JSON.stringify(value)}`,\n );\n }\n const iso = parsed.toISOString().slice(0, 10);\n if (iso !== value) {\n throw new ContractIdError(\n `settlementDate string is not a valid calendar date; got ${JSON.stringify(value)}`,\n );\n }\n return value;\n }\n if (value instanceof Date) {\n if (Number.isNaN(value.getTime())) {\n throw new ContractIdError(\"settlementDate is an invalid Date instance\");\n }\n if (\n value.getUTCHours() !== 0 ||\n value.getUTCMinutes() !== 0 ||\n value.getUTCSeconds() !== 0 ||\n value.getUTCMilliseconds() !== 0\n ) {\n throw new ContractIdError(\n `settlementDate must be a UTC date-only Date (H/M/S/ms = 0); got ${value.toISOString()}. Use new Date('YYYY-MM-DDT00:00:00Z') or pass a 'YYYY-MM-DD' string.`,\n );\n }\n return value.toISOString().slice(0, 10);\n }\n throw new ContractIdError(\"settlementDate must be a Date instance or YYYY-MM-DD string\");\n}\n\n/**\n * Resolve a Kalshi NLOW contract to its settlement source + station.\n *\n * The contract id format is `KLOW<CITY>` (case-insensitive), where\n * `<CITY>` is a city ticker present in\n * {@link KALSHI_SETTLEMENT_STATIONS}.\n *\n * @param contractId Kalshi market identifier. Case-insensitive.\n * @param settlementDate Calendar date the market settles for. Either a\n * UTC date-only `Date` (H/M/S/ms == 0) or a `YYYY-MM-DD` string.\n * @returns A frozen {@link NLowResolution}.\n * @throws {ContractIdError} The contract id doesn't follow\n * `KLOW<CITY>`, the city is unknown, or the settlement date is\n * invalid.\n */\nexport function kalshiNlowResolve(\n contractId: string,\n settlementDate: Date | string,\n): NLowResolution {\n if (typeof contractId !== \"string\") {\n throw new ContractIdError(`contractId must be a string; got ${typeof contractId}`);\n }\n\n const contractDate = coerceContractDate(settlementDate);\n\n const cid = contractId.toUpperCase();\n if (!cid.startsWith(\"KLOW\") || cid.length <= 4) {\n throw new ContractIdError(\n `NLOW contractId must follow 'KLOW<CITY>' format; got ${JSON.stringify(contractId)}`,\n );\n }\n const cityTicker = cid.slice(4);\n const station = KALSHI_SETTLEMENT_STATIONS[cityTicker];\n if (station === undefined) {\n const known = Object.keys(KALSHI_SETTLEMENT_STATIONS).sort();\n throw new ContractIdError(\n `unknown city ${JSON.stringify(cityTicker)} (known: ${known.join(\", \")})`,\n );\n }\n\n return Object.freeze({\n settlementSource: \"cli.archive\" as const,\n settlementStation: station.station,\n cityTicker,\n contractDate,\n });\n}\n","// TS-W5 Wave 5 — kalshiSettlementFor higher-level helper.\n//\n// Dispatch by Kalshi contract-id prefix (KHIGH* vs KLOW*) to the right\n// resolver. Returns the same shape both NHIGH and NLOW resolvers use so\n// downstream consumers don't need to know about the city-suffix split.\n\nimport { type NHighResolution, kalshiNhighResolve } from \"./resolvers/kalshi-nhigh.js\";\nimport { ContractIdError } from \"./resolvers/kalshi-nhigh.js\";\nimport { type NLowResolution, kalshiNlowResolve } from \"./resolvers/kalshi-nlow.js\";\n\nexport type KalshiSettlement = NHighResolution | NLowResolution;\n\n/**\n * Resolve a Kalshi NHIGH or NLOW contract id to its settlement metadata.\n *\n * `KHIGH*` prefixes dispatch to the NHIGH resolver; `KLOW*` prefixes\n * dispatch to NLOW. Anything else raises `ContractIdError`.\n *\n * @example\n * kalshiSettlementFor(\"KHIGHNYC\", \"2025-01-06\")\n * // → { settlementSource: \"cli.archive\", settlementStation: \"KNYC\",\n * // cityTicker: \"NYC\", contractDate: \"2025-01-06\" }\n */\nexport function kalshiSettlementFor(contractId: string, date: string): KalshiSettlement {\n if (typeof contractId !== \"string\" || contractId.length === 0) {\n throw new ContractIdError(\"contractId must be a non-empty string\");\n }\n const upper = contractId.toUpperCase();\n if (upper.startsWith(\"KHIGH\")) return kalshiNhighResolve(upper, date);\n if (upper.startsWith(\"KLOW\")) return kalshiNlowResolve(upper, date);\n throw new ContractIdError(\n `contractId ${JSON.stringify(contractId)} does not start with KHIGH or KLOW`,\n );\n}\n"],"mappings":"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","names":["coerceContractDate"]}
|
package/dist/index.global.js
CHANGED
|
@@ -136,92 +136,92 @@ var mostlyrightMarkets = (() => {
|
|
|
136
136
|
amsterdam: {
|
|
137
137
|
default: "EHAM"
|
|
138
138
|
},
|
|
139
|
+
ankara: {
|
|
140
|
+
default: "LTAC"
|
|
141
|
+
},
|
|
139
142
|
atlanta: {
|
|
140
143
|
default: "KATL"
|
|
141
144
|
},
|
|
142
|
-
auckland: {
|
|
143
|
-
default: "NZAA"
|
|
144
|
-
},
|
|
145
145
|
austin: {
|
|
146
146
|
default: "KAUS"
|
|
147
147
|
},
|
|
148
|
-
bangkok: {
|
|
149
|
-
default: "VTBS"
|
|
150
|
-
},
|
|
151
|
-
barcelona: {
|
|
152
|
-
default: "LEBL"
|
|
153
|
-
},
|
|
154
148
|
beijing: {
|
|
155
149
|
default: "ZBAA"
|
|
156
150
|
},
|
|
157
|
-
|
|
158
|
-
default: "
|
|
151
|
+
buenos_aires: {
|
|
152
|
+
default: "SAEZ"
|
|
159
153
|
},
|
|
160
|
-
|
|
161
|
-
default: "
|
|
154
|
+
busan: {
|
|
155
|
+
default: "RKPK"
|
|
162
156
|
},
|
|
163
|
-
|
|
164
|
-
default: "
|
|
157
|
+
cape_town: {
|
|
158
|
+
default: "FACT"
|
|
165
159
|
},
|
|
166
|
-
|
|
167
|
-
default: "
|
|
160
|
+
chengdu: {
|
|
161
|
+
default: "ZUUU"
|
|
168
162
|
},
|
|
169
163
|
chicago: {
|
|
170
164
|
default: "KORD",
|
|
171
165
|
high: "KORD",
|
|
172
166
|
low: "KORD"
|
|
173
167
|
},
|
|
174
|
-
|
|
175
|
-
default: "
|
|
168
|
+
chongqing: {
|
|
169
|
+
default: "ZUCK"
|
|
176
170
|
},
|
|
177
171
|
dallas: {
|
|
178
|
-
default: "
|
|
179
|
-
},
|
|
180
|
-
delhi: {
|
|
181
|
-
default: "VIDP"
|
|
172
|
+
default: "KDAL"
|
|
182
173
|
},
|
|
183
174
|
denver: {
|
|
184
|
-
default: "
|
|
175
|
+
default: "KBKF"
|
|
185
176
|
},
|
|
186
|
-
|
|
187
|
-
default: "
|
|
188
|
-
},
|
|
189
|
-
doha: {
|
|
190
|
-
default: "OTHH"
|
|
191
|
-
},
|
|
192
|
-
dubai: {
|
|
193
|
-
default: "OMDB"
|
|
194
|
-
},
|
|
195
|
-
frankfurt: {
|
|
196
|
-
default: "EDDF"
|
|
177
|
+
guangzhou: {
|
|
178
|
+
default: "ZGGG"
|
|
197
179
|
},
|
|
198
180
|
helsinki: {
|
|
199
181
|
default: "EFHK"
|
|
200
182
|
},
|
|
201
183
|
hong_kong: {
|
|
202
|
-
default: "
|
|
203
|
-
high: "
|
|
204
|
-
low: "
|
|
184
|
+
default: "HKO",
|
|
185
|
+
high: "HKO",
|
|
186
|
+
low: "HKO"
|
|
205
187
|
},
|
|
206
188
|
houston: {
|
|
207
|
-
default: "
|
|
189
|
+
default: "KHOU"
|
|
208
190
|
},
|
|
209
|
-
|
|
210
|
-
default: "
|
|
191
|
+
istanbul: {
|
|
192
|
+
default: "LTFM"
|
|
193
|
+
},
|
|
194
|
+
jeddah: {
|
|
195
|
+
default: "OEJN"
|
|
196
|
+
},
|
|
197
|
+
jinan: {
|
|
198
|
+
default: "ZSJN"
|
|
199
|
+
},
|
|
200
|
+
karachi: {
|
|
201
|
+
default: "OPKC"
|
|
202
|
+
},
|
|
203
|
+
kuala_lumpur: {
|
|
204
|
+
default: "WMKK"
|
|
211
205
|
},
|
|
212
|
-
|
|
213
|
-
default: "
|
|
206
|
+
london: {
|
|
207
|
+
default: "EGLC"
|
|
214
208
|
},
|
|
215
209
|
los_angeles: {
|
|
216
210
|
default: "KLAX",
|
|
217
211
|
high: "KLAX",
|
|
218
212
|
low: "KLAX"
|
|
219
213
|
},
|
|
214
|
+
lucknow: {
|
|
215
|
+
default: "VILK"
|
|
216
|
+
},
|
|
220
217
|
madrid: {
|
|
221
218
|
default: "LEMD"
|
|
222
219
|
},
|
|
223
|
-
|
|
224
|
-
default: "
|
|
220
|
+
manila: {
|
|
221
|
+
default: "RPLL"
|
|
222
|
+
},
|
|
223
|
+
mexico_city: {
|
|
224
|
+
default: "MMMX"
|
|
225
225
|
},
|
|
226
226
|
miami: {
|
|
227
227
|
default: "KMIA"
|
|
@@ -229,14 +229,8 @@ var mostlyrightMarkets = (() => {
|
|
|
229
229
|
milan: {
|
|
230
230
|
default: "LIMC"
|
|
231
231
|
},
|
|
232
|
-
minneapolis: {
|
|
233
|
-
default: "KMSP"
|
|
234
|
-
},
|
|
235
232
|
moscow: {
|
|
236
|
-
default: "
|
|
237
|
-
},
|
|
238
|
-
mumbai: {
|
|
239
|
-
default: "VABB"
|
|
233
|
+
default: "UUWW"
|
|
240
234
|
},
|
|
241
235
|
munich: {
|
|
242
236
|
default: "EDDM"
|
|
@@ -246,25 +240,14 @@ var mostlyrightMarkets = (() => {
|
|
|
246
240
|
high: "KLGA",
|
|
247
241
|
low: "KLGA"
|
|
248
242
|
},
|
|
249
|
-
|
|
250
|
-
default: "
|
|
251
|
-
high: "LFPG",
|
|
252
|
-
low: "LFPB"
|
|
253
|
-
},
|
|
254
|
-
paris_orly: {
|
|
255
|
-
default: "LFPO"
|
|
256
|
-
},
|
|
257
|
-
philadelphia: {
|
|
258
|
-
default: "KPHL"
|
|
259
|
-
},
|
|
260
|
-
phoenix: {
|
|
261
|
-
default: "KPHX"
|
|
243
|
+
panama_city: {
|
|
244
|
+
default: "MPMG"
|
|
262
245
|
},
|
|
263
|
-
|
|
264
|
-
default: "
|
|
246
|
+
paris: {
|
|
247
|
+
default: "LFPB"
|
|
265
248
|
},
|
|
266
|
-
|
|
267
|
-
default: "
|
|
249
|
+
qingdao: {
|
|
250
|
+
default: "ZSQD"
|
|
268
251
|
},
|
|
269
252
|
san_francisco: {
|
|
270
253
|
default: "KSFO"
|
|
@@ -281,40 +264,37 @@ var mostlyrightMarkets = (() => {
|
|
|
281
264
|
shanghai: {
|
|
282
265
|
default: "ZSPD"
|
|
283
266
|
},
|
|
267
|
+
shenzhen: {
|
|
268
|
+
default: "ZGSZ"
|
|
269
|
+
},
|
|
284
270
|
singapore: {
|
|
285
271
|
default: "WSSS"
|
|
286
272
|
},
|
|
287
|
-
stockholm: {
|
|
288
|
-
default: "ESSA"
|
|
289
|
-
},
|
|
290
|
-
sydney: {
|
|
291
|
-
default: "YSSY"
|
|
292
|
-
},
|
|
293
273
|
taipei: {
|
|
294
|
-
default: "
|
|
274
|
+
default: "RCSS"
|
|
275
|
+
},
|
|
276
|
+
tel_aviv: {
|
|
277
|
+
default: "LLBG"
|
|
295
278
|
},
|
|
296
279
|
tokyo: {
|
|
297
280
|
default: "RJTT",
|
|
298
281
|
high: "RJTT",
|
|
299
282
|
low: "RJTT"
|
|
300
283
|
},
|
|
301
|
-
|
|
302
|
-
default: "
|
|
303
|
-
},
|
|
304
|
-
vienna: {
|
|
305
|
-
default: "LOWW"
|
|
284
|
+
toronto: {
|
|
285
|
+
default: "CYYZ"
|
|
306
286
|
},
|
|
307
287
|
warsaw: {
|
|
308
288
|
default: "EPWA"
|
|
309
289
|
},
|
|
310
|
-
washington_dc: {
|
|
311
|
-
default: "KDCA"
|
|
312
|
-
},
|
|
313
290
|
wellington: {
|
|
314
291
|
default: "NZWN"
|
|
315
292
|
},
|
|
316
|
-
|
|
317
|
-
default: "
|
|
293
|
+
wuhan: {
|
|
294
|
+
default: "ZHHH"
|
|
295
|
+
},
|
|
296
|
+
zhengzhou: {
|
|
297
|
+
default: "ZHCC"
|
|
318
298
|
}
|
|
319
299
|
};
|
|
320
300
|
|