@waterx/sdk 4.3.2 → 5.0.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/.claude/skills/waterx-sdk-integration/SKILL.md +225 -0
- package/README.md +216 -45
- package/SKILLS.md +34 -0
- package/dist/cjs/src/account/config.d.ts +3 -5
- package/dist/cjs/src/account/funding/wormhole.d.ts +1 -2
- package/dist/cjs/src/account/funding/wormhole.js +1 -2
- package/dist/cjs/src/generated/waterx_rule/waterx_rule.d.ts +140 -7
- package/dist/cjs/src/generated/waterx_rule/waterx_rule.js +163 -8
- package/dist/cjs/src/oracle/aggregate.d.ts +49 -62
- package/dist/cjs/src/oracle/aggregate.js +208 -164
- package/dist/cjs/src/oracle/config.d.ts +38 -51
- package/dist/cjs/src/oracle/config.js +1 -1
- package/dist/cjs/src/oracle/host.d.ts +14 -19
- package/dist/cjs/src/oracle/host.js +3 -3
- package/dist/cjs/src/oracle/index.d.ts +25 -16
- package/dist/cjs/src/oracle/index.js +87 -69
- package/dist/cjs/src/oracle/price-update-rule.d.ts +104 -66
- package/dist/cjs/src/oracle/price-update-rule.js +24 -16
- package/dist/cjs/src/oracle/pyth-pro-history.d.ts +36 -0
- package/dist/cjs/src/oracle/pyth-pro-history.js +41 -0
- package/dist/cjs/src/oracle/read-plane.d.ts +35 -53
- package/dist/cjs/src/oracle/read-plane.js +26 -48
- package/dist/cjs/src/oracle/read-prices.d.ts +105 -0
- package/dist/cjs/src/oracle/read-prices.js +162 -0
- package/dist/cjs/src/oracle/rule-registry.d.ts +12 -12
- package/dist/cjs/src/oracle/rule-registry.js +12 -14
- package/dist/cjs/src/oracle/rules/pyth-lazer-rule.d.ts +24 -3
- package/dist/cjs/src/oracle/rules/pyth-lazer-rule.js +40 -20
- package/dist/cjs/src/oracle/rules/waterx-rule.d.ts +271 -57
- package/dist/cjs/src/oracle/rules/waterx-rule.js +743 -144
- package/dist/cjs/src/oracle/schedule.d.ts +109 -0
- package/dist/cjs/src/oracle/schedule.js +991 -0
- package/dist/cjs/src/oracle/source-list.d.ts +31 -27
- package/dist/cjs/src/oracle/source-list.js +43 -45
- package/dist/cjs/src/oracle/symbol-catalog.d.ts +54 -0
- package/dist/cjs/src/oracle/symbol-catalog.js +69 -0
- package/dist/cjs/src/oracle/update-fetch.d.ts +11 -15
- package/dist/cjs/src/oracle/update-fetch.js +12 -19
- package/dist/cjs/src/oracle/validate.d.ts +105 -0
- package/dist/cjs/src/oracle/validate.js +185 -0
- package/dist/cjs/src/oracle/weight-coverage.d.ts +79 -0
- package/dist/cjs/src/oracle/weight-coverage.js +173 -0
- package/dist/cjs/src/perp/client.d.ts +40 -55
- package/dist/cjs/src/perp/client.js +44 -17
- package/dist/cjs/src/perp/config-view.d.ts +5 -14
- package/dist/cjs/src/perp/config-view.js +5 -16
- package/dist/cjs/src/perp/config.d.ts +3 -3
- package/dist/cjs/src/perp/config.js +11 -13
- package/dist/cjs/src/perp/index.d.ts +4 -6
- package/dist/cjs/src/perp/index.js +43 -18
- package/dist/cjs/src/perp/tx-builders/common.d.ts +86 -48
- package/dist/cjs/src/perp/tx-builders/common.js +115 -47
- package/dist/cjs/src/perp/tx-builders/wlp.d.ts +3 -14
- package/dist/cjs/src/perp/tx-builders/wlp.js +6 -35
- package/dist/cjs/src/perp/tx-builders.d.ts +6 -5
- package/dist/cjs/src/perp/tx-builders.js +16 -10
- package/dist/cjs/src/unified-client.d.ts +9 -35
- package/dist/cjs/src/unified-client.js +3 -4
- package/dist/cjs/src/utils/config.d.ts +0 -8
- package/dist/cjs/src/utils/config.js +5 -13
- package/dist/src/account/config.d.ts +3 -5
- package/dist/src/account/funding/wormhole.d.ts +1 -2
- package/dist/src/account/funding/wormhole.js +1 -2
- package/dist/src/generated/waterx_rule/waterx_rule.d.ts +140 -7
- package/dist/src/generated/waterx_rule/waterx_rule.js +151 -7
- package/dist/src/oracle/aggregate.d.ts +49 -62
- package/dist/src/oracle/aggregate.js +209 -164
- package/dist/src/oracle/config.d.ts +38 -51
- package/dist/src/oracle/config.js +1 -1
- package/dist/src/oracle/host.d.ts +14 -19
- package/dist/src/oracle/host.js +3 -3
- package/dist/src/oracle/index.d.ts +25 -16
- package/dist/src/oracle/index.js +61 -54
- package/dist/src/oracle/price-update-rule.d.ts +104 -66
- package/dist/src/oracle/price-update-rule.js +23 -16
- package/dist/src/oracle/pyth-pro-history.d.ts +36 -0
- package/dist/src/oracle/pyth-pro-history.js +38 -0
- package/dist/src/oracle/read-plane.d.ts +35 -53
- package/dist/src/oracle/read-plane.js +25 -47
- package/dist/src/oracle/read-prices.d.ts +105 -0
- package/dist/src/oracle/read-prices.js +156 -0
- package/dist/src/oracle/rule-registry.d.ts +12 -12
- package/dist/src/oracle/rule-registry.js +12 -14
- package/dist/src/oracle/rules/pyth-lazer-rule.d.ts +24 -3
- package/dist/src/oracle/rules/pyth-lazer-rule.js +39 -20
- package/dist/src/oracle/rules/waterx-rule.d.ts +271 -57
- package/dist/src/oracle/rules/waterx-rule.js +735 -144
- package/dist/src/oracle/schedule.d.ts +109 -0
- package/dist/src/oracle/schedule.js +985 -0
- package/dist/src/oracle/source-list.d.ts +31 -27
- package/dist/src/oracle/source-list.js +42 -43
- package/dist/src/oracle/symbol-catalog.d.ts +54 -0
- package/dist/src/oracle/symbol-catalog.js +65 -0
- package/dist/src/oracle/update-fetch.d.ts +11 -15
- package/dist/src/oracle/update-fetch.js +12 -18
- package/dist/src/oracle/validate.d.ts +105 -0
- package/dist/src/oracle/validate.js +177 -0
- package/dist/src/oracle/weight-coverage.d.ts +79 -0
- package/dist/src/oracle/weight-coverage.js +166 -0
- package/dist/src/perp/client.d.ts +40 -55
- package/dist/src/perp/client.js +45 -18
- package/dist/src/perp/config-view.d.ts +5 -14
- package/dist/src/perp/config-view.js +5 -16
- package/dist/src/perp/config.d.ts +3 -3
- package/dist/src/perp/config.js +11 -13
- package/dist/src/perp/index.d.ts +4 -6
- package/dist/src/perp/index.js +17 -5
- package/dist/src/perp/tx-builders/common.d.ts +86 -48
- package/dist/src/perp/tx-builders/common.js +114 -48
- package/dist/src/perp/tx-builders/wlp.d.ts +3 -14
- package/dist/src/perp/tx-builders/wlp.js +6 -35
- package/dist/src/perp/tx-builders.d.ts +6 -5
- package/dist/src/perp/tx-builders.js +15 -6
- package/dist/src/unified-client.d.ts +9 -35
- package/dist/src/unified-client.js +3 -4
- package/dist/src/utils/config.d.ts +0 -8
- package/dist/src/utils/config.js +5 -12
- package/package.json +8 -2
- package/dist/cjs/src/generated/pyth_sponsor_rule/deps/sui/balance.d.ts +0 -12
- package/dist/cjs/src/generated/pyth_sponsor_rule/deps/sui/balance.js +0 -17
- package/dist/cjs/src/generated/pyth_sponsor_rule/pyth_sponsor_rule.d.ts +0 -68
- package/dist/cjs/src/generated/pyth_sponsor_rule/pyth_sponsor_rule.js +0 -113
- package/dist/cjs/src/generated/waterx_pyth_rule/deps/sui/vec_map.d.ts +0 -36
- package/dist/cjs/src/generated/waterx_pyth_rule/deps/sui/vec_map.js +0 -31
- package/dist/cjs/src/generated/waterx_pyth_rule/pyth_rule.d.ts +0 -192
- package/dist/cjs/src/generated/waterx_pyth_rule/pyth_rule.js +0 -214
- package/dist/cjs/src/oracle/pyth.d.ts +0 -227
- package/dist/cjs/src/oracle/pyth.js +0 -652
- package/dist/cjs/src/oracle/rules/pyth-core-rule.d.ts +0 -15
- package/dist/cjs/src/oracle/rules/pyth-core-rule.js +0 -100
- package/dist/cjs/src/oracle/rules/pyth-rule.d.ts +0 -11
- package/dist/cjs/src/oracle/rules/pyth-rule.js +0 -29
- package/dist/cjs/src/oracle/rules/sponsor.d.ts +0 -32
- package/dist/cjs/src/oracle/rules/sponsor.js +0 -56
- package/dist/src/generated/pyth_sponsor_rule/deps/sui/balance.d.ts +0 -12
- package/dist/src/generated/pyth_sponsor_rule/deps/sui/balance.js +0 -14
- package/dist/src/generated/pyth_sponsor_rule/pyth_sponsor_rule.d.ts +0 -68
- package/dist/src/generated/pyth_sponsor_rule/pyth_sponsor_rule.js +0 -73
- package/dist/src/generated/waterx_pyth_rule/deps/sui/vec_map.d.ts +0 -36
- package/dist/src/generated/waterx_pyth_rule/deps/sui/vec_map.js +0 -27
- package/dist/src/generated/waterx_pyth_rule/pyth_rule.d.ts +0 -192
- package/dist/src/generated/waterx_pyth_rule/pyth_rule.js +0 -170
- package/dist/src/oracle/pyth.d.ts +0 -227
- package/dist/src/oracle/pyth.js +0 -638
- package/dist/src/oracle/rules/pyth-core-rule.d.ts +0 -15
- package/dist/src/oracle/rules/pyth-core-rule.js +0 -97
- package/dist/src/oracle/rules/pyth-rule.d.ts +0 -11
- package/dist/src/oracle/rules/pyth-rule.js +0 -26
- package/dist/src/oracle/rules/sponsor.d.ts +0 -32
- package/dist/src/oracle/rules/sponsor.js +0 -52
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `schedule.ts` — Pyth `attributes.schedule` grammar parser + the pure
|
|
3
|
+
* market-status walker (WL-2345): the ONE implementation both consumers fold
|
|
4
|
+
* onto (the FE fallback `/api/markets` route and the BE
|
|
5
|
+
* `PythScheduleService` / markets service carried drifting twins).
|
|
6
|
+
*
|
|
7
|
+
* Parser grammar (https://docs.pyth.network/price-feeds/market-hours):
|
|
8
|
+
*
|
|
9
|
+
* {IANA_timezone};{Mon},{Tue},{Wed},{Thu},{Fri},{Sat},{Sun};{holidays_csv}
|
|
10
|
+
*
|
|
11
|
+
* Each weekday slot is `Open`/`O`/`open`, `Closed`/`C`/`closed`, one
|
|
12
|
+
* `HHMM-HHMM` range, `&`-joined ranges (the new multi-session encoding), or
|
|
13
|
+
* comma-joined ranges (the old encoding — disambiguated from the weekday
|
|
14
|
+
* separator by lookahead). Holidays are `MMDD` (old) or `MMDD/C` (new; a
|
|
15
|
+
* `MMDD/HHMM-HHMM` modified-hours entry is NOT a closure and is skipped, as
|
|
16
|
+
* are non-MMDD sentinels like Pyth's `"0"`). This is the reconciled SUPERSET
|
|
17
|
+
* of the two prior ports — accepting either era's tokens is what lets one
|
|
18
|
+
* parser serve the `v1/symbols` catalog and any cached Hermes-era strings.
|
|
19
|
+
*
|
|
20
|
+
* Pyth weekday order is Mon=0..Sun=6; `TradingHours.days` uses ISO-ish
|
|
21
|
+
* Sun=0..Sat=6 (converted in `groupIntoSessions`).
|
|
22
|
+
*
|
|
23
|
+
* The schedule catalog itself comes from `fetchPythSymbolCatalog`
|
|
24
|
+
* (`symbol-catalog.ts`); pairing a record's `schedule` with this parser and
|
|
25
|
+
* `getMarketStatus` is the whole market-hours pipeline.
|
|
26
|
+
*/
|
|
27
|
+
export interface TradingSession {
|
|
28
|
+
/** HH:MM (24h) open time in the market's timezone */
|
|
29
|
+
open: string;
|
|
30
|
+
/** HH:MM (24h) close time — may be next day (e.g. "17:00" Sunday open to "17:00" Friday) */
|
|
31
|
+
close: string;
|
|
32
|
+
/** ISO day-of-week: 0=Sunday … 6=Saturday */
|
|
33
|
+
days: number[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Year-agnostic `(month, day)` pair, matching Pyth's `MMDD` holiday encoding.
|
|
37
|
+
* The same `{month, day}` matches in *every* year, so moving holidays
|
|
38
|
+
* (Good Friday, MLK Day, Thanksgiving, etc.) need to be republished by Pyth
|
|
39
|
+
* each year and picked up by the consumer's next catalog refresh.
|
|
40
|
+
*/
|
|
41
|
+
export interface HolidayDate {
|
|
42
|
+
/** 1..12, in the schedule's timezone */
|
|
43
|
+
month: number;
|
|
44
|
+
/** 1..31, in the schedule's timezone */
|
|
45
|
+
day: number;
|
|
46
|
+
/**
|
|
47
|
+
* MODIFIED hours for this date, in place of the weekly schedule — an early
|
|
48
|
+
* close (`1224/0930-1300`) or a split session (`1224/0000-1430&1800-2400`).
|
|
49
|
+
* Absent means a FULL closure, the `MMDD/C` form.
|
|
50
|
+
*
|
|
51
|
+
* These were previously discarded, which meant the venue fell back to its
|
|
52
|
+
* NORMAL weekly hours on an early-close day and reported itself open after it
|
|
53
|
+
* had shut. They are not an edge case: the live Pyth catalog carries
|
|
54
|
+
* thousands (`0930-1300` alone appears ~2.5k times).
|
|
55
|
+
*/
|
|
56
|
+
sessions?: {
|
|
57
|
+
open: string;
|
|
58
|
+
close: string;
|
|
59
|
+
}[];
|
|
60
|
+
}
|
|
61
|
+
export interface TradingHours {
|
|
62
|
+
/** IANA timezone identifier, e.g. "America/New_York" */
|
|
63
|
+
timezone: string;
|
|
64
|
+
sessions: TradingSession[];
|
|
65
|
+
/**
|
|
66
|
+
* Days when the venue is fully closed regardless of the weekly schedule.
|
|
67
|
+
* Optional — many feeds (crypto, FX) have none. Encoded as `(month, day)`
|
|
68
|
+
* in `timezone`'s local calendar, matching Pyth's `attributes.schedule`
|
|
69
|
+
* holiday list.
|
|
70
|
+
*/
|
|
71
|
+
holidays?: HolidayDate[];
|
|
72
|
+
}
|
|
73
|
+
export interface ParsedPythSchedule {
|
|
74
|
+
tradingHours: TradingHours;
|
|
75
|
+
/** True iff every weekday is fully open and there are no holidays — callers treat as `tradingHours = null` (24/7, no schedule needed). */
|
|
76
|
+
alwaysOpen: boolean;
|
|
77
|
+
}
|
|
78
|
+
export declare class PythScheduleParseError extends Error {
|
|
79
|
+
constructor(message: string);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Parse a Pyth schedule string. Throws {@link PythScheduleParseError} on
|
|
83
|
+
* malformed input — callers guard with try/catch so one bad feed does not break
|
|
84
|
+
* a whole market list.
|
|
85
|
+
*
|
|
86
|
+
* DEGRADE CLOSED, not open. The obvious fallback — treat an unparseable
|
|
87
|
+
* schedule as "no schedule (24/7)" — is the wrong direction: the shapes that
|
|
88
|
+
* actually fail here are venues WITH sessions (a lunch-break equity schedule in
|
|
89
|
+
* the legacy comma encoding, an ambiguous weekday fold), and calling those 24/7
|
|
90
|
+
* reports a closed venue as tradable. That is the failure class this module
|
|
91
|
+
* exists to prevent. Prefer marking the market unavailable, or reusing the last
|
|
92
|
+
* schedule that parsed; use 24/7 only where a wrong "open" is harmless.
|
|
93
|
+
*/
|
|
94
|
+
export declare function parsePythSchedule(input: string): ParsedPythSchedule;
|
|
95
|
+
export interface MarketStatusResult {
|
|
96
|
+
status: "open" | "closed" | "paused";
|
|
97
|
+
/** Milliseconds until next status change; null for 24/7 or paused. */
|
|
98
|
+
nextStatusChangeIn: number | null;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Pure function — calculates market open/closed status from trading hours + now.
|
|
102
|
+
*
|
|
103
|
+
* @param tradingHours null means 24/7 (crypto)
|
|
104
|
+
* @param paused forces `paused`, short-circuiting the schedule. Checked
|
|
105
|
+
* BEFORE the 24/7 branch, so an on-chain-paused crypto
|
|
106
|
+
* market (tradingHours === null) still reports paused.
|
|
107
|
+
* @param now injectable for testing; defaults to new Date()
|
|
108
|
+
*/
|
|
109
|
+
export declare function getMarketStatus(tradingHours: TradingHours | null, paused: boolean, now?: Date): MarketStatusResult;
|