@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.
Files changed (150) hide show
  1. package/.claude/skills/waterx-sdk-integration/SKILL.md +225 -0
  2. package/README.md +216 -45
  3. package/SKILLS.md +34 -0
  4. package/dist/cjs/src/account/config.d.ts +3 -5
  5. package/dist/cjs/src/account/funding/wormhole.d.ts +1 -2
  6. package/dist/cjs/src/account/funding/wormhole.js +1 -2
  7. package/dist/cjs/src/generated/waterx_rule/waterx_rule.d.ts +140 -7
  8. package/dist/cjs/src/generated/waterx_rule/waterx_rule.js +163 -8
  9. package/dist/cjs/src/oracle/aggregate.d.ts +49 -62
  10. package/dist/cjs/src/oracle/aggregate.js +208 -164
  11. package/dist/cjs/src/oracle/config.d.ts +38 -51
  12. package/dist/cjs/src/oracle/config.js +1 -1
  13. package/dist/cjs/src/oracle/host.d.ts +14 -19
  14. package/dist/cjs/src/oracle/host.js +3 -3
  15. package/dist/cjs/src/oracle/index.d.ts +25 -16
  16. package/dist/cjs/src/oracle/index.js +87 -69
  17. package/dist/cjs/src/oracle/price-update-rule.d.ts +104 -66
  18. package/dist/cjs/src/oracle/price-update-rule.js +24 -16
  19. package/dist/cjs/src/oracle/pyth-pro-history.d.ts +36 -0
  20. package/dist/cjs/src/oracle/pyth-pro-history.js +41 -0
  21. package/dist/cjs/src/oracle/read-plane.d.ts +35 -53
  22. package/dist/cjs/src/oracle/read-plane.js +26 -48
  23. package/dist/cjs/src/oracle/read-prices.d.ts +105 -0
  24. package/dist/cjs/src/oracle/read-prices.js +162 -0
  25. package/dist/cjs/src/oracle/rule-registry.d.ts +12 -12
  26. package/dist/cjs/src/oracle/rule-registry.js +12 -14
  27. package/dist/cjs/src/oracle/rules/pyth-lazer-rule.d.ts +24 -3
  28. package/dist/cjs/src/oracle/rules/pyth-lazer-rule.js +40 -20
  29. package/dist/cjs/src/oracle/rules/waterx-rule.d.ts +271 -57
  30. package/dist/cjs/src/oracle/rules/waterx-rule.js +743 -144
  31. package/dist/cjs/src/oracle/schedule.d.ts +109 -0
  32. package/dist/cjs/src/oracle/schedule.js +991 -0
  33. package/dist/cjs/src/oracle/source-list.d.ts +31 -27
  34. package/dist/cjs/src/oracle/source-list.js +43 -45
  35. package/dist/cjs/src/oracle/symbol-catalog.d.ts +54 -0
  36. package/dist/cjs/src/oracle/symbol-catalog.js +69 -0
  37. package/dist/cjs/src/oracle/update-fetch.d.ts +11 -15
  38. package/dist/cjs/src/oracle/update-fetch.js +12 -19
  39. package/dist/cjs/src/oracle/validate.d.ts +105 -0
  40. package/dist/cjs/src/oracle/validate.js +185 -0
  41. package/dist/cjs/src/oracle/weight-coverage.d.ts +79 -0
  42. package/dist/cjs/src/oracle/weight-coverage.js +173 -0
  43. package/dist/cjs/src/perp/client.d.ts +40 -55
  44. package/dist/cjs/src/perp/client.js +44 -17
  45. package/dist/cjs/src/perp/config-view.d.ts +5 -14
  46. package/dist/cjs/src/perp/config-view.js +5 -16
  47. package/dist/cjs/src/perp/config.d.ts +3 -3
  48. package/dist/cjs/src/perp/config.js +11 -13
  49. package/dist/cjs/src/perp/index.d.ts +4 -6
  50. package/dist/cjs/src/perp/index.js +43 -18
  51. package/dist/cjs/src/perp/tx-builders/common.d.ts +86 -48
  52. package/dist/cjs/src/perp/tx-builders/common.js +115 -47
  53. package/dist/cjs/src/perp/tx-builders/wlp.d.ts +3 -14
  54. package/dist/cjs/src/perp/tx-builders/wlp.js +6 -35
  55. package/dist/cjs/src/perp/tx-builders.d.ts +6 -5
  56. package/dist/cjs/src/perp/tx-builders.js +16 -10
  57. package/dist/cjs/src/unified-client.d.ts +9 -35
  58. package/dist/cjs/src/unified-client.js +3 -4
  59. package/dist/cjs/src/utils/config.d.ts +0 -8
  60. package/dist/cjs/src/utils/config.js +5 -13
  61. package/dist/src/account/config.d.ts +3 -5
  62. package/dist/src/account/funding/wormhole.d.ts +1 -2
  63. package/dist/src/account/funding/wormhole.js +1 -2
  64. package/dist/src/generated/waterx_rule/waterx_rule.d.ts +140 -7
  65. package/dist/src/generated/waterx_rule/waterx_rule.js +151 -7
  66. package/dist/src/oracle/aggregate.d.ts +49 -62
  67. package/dist/src/oracle/aggregate.js +209 -164
  68. package/dist/src/oracle/config.d.ts +38 -51
  69. package/dist/src/oracle/config.js +1 -1
  70. package/dist/src/oracle/host.d.ts +14 -19
  71. package/dist/src/oracle/host.js +3 -3
  72. package/dist/src/oracle/index.d.ts +25 -16
  73. package/dist/src/oracle/index.js +61 -54
  74. package/dist/src/oracle/price-update-rule.d.ts +104 -66
  75. package/dist/src/oracle/price-update-rule.js +23 -16
  76. package/dist/src/oracle/pyth-pro-history.d.ts +36 -0
  77. package/dist/src/oracle/pyth-pro-history.js +38 -0
  78. package/dist/src/oracle/read-plane.d.ts +35 -53
  79. package/dist/src/oracle/read-plane.js +25 -47
  80. package/dist/src/oracle/read-prices.d.ts +105 -0
  81. package/dist/src/oracle/read-prices.js +156 -0
  82. package/dist/src/oracle/rule-registry.d.ts +12 -12
  83. package/dist/src/oracle/rule-registry.js +12 -14
  84. package/dist/src/oracle/rules/pyth-lazer-rule.d.ts +24 -3
  85. package/dist/src/oracle/rules/pyth-lazer-rule.js +39 -20
  86. package/dist/src/oracle/rules/waterx-rule.d.ts +271 -57
  87. package/dist/src/oracle/rules/waterx-rule.js +735 -144
  88. package/dist/src/oracle/schedule.d.ts +109 -0
  89. package/dist/src/oracle/schedule.js +985 -0
  90. package/dist/src/oracle/source-list.d.ts +31 -27
  91. package/dist/src/oracle/source-list.js +42 -43
  92. package/dist/src/oracle/symbol-catalog.d.ts +54 -0
  93. package/dist/src/oracle/symbol-catalog.js +65 -0
  94. package/dist/src/oracle/update-fetch.d.ts +11 -15
  95. package/dist/src/oracle/update-fetch.js +12 -18
  96. package/dist/src/oracle/validate.d.ts +105 -0
  97. package/dist/src/oracle/validate.js +177 -0
  98. package/dist/src/oracle/weight-coverage.d.ts +79 -0
  99. package/dist/src/oracle/weight-coverage.js +166 -0
  100. package/dist/src/perp/client.d.ts +40 -55
  101. package/dist/src/perp/client.js +45 -18
  102. package/dist/src/perp/config-view.d.ts +5 -14
  103. package/dist/src/perp/config-view.js +5 -16
  104. package/dist/src/perp/config.d.ts +3 -3
  105. package/dist/src/perp/config.js +11 -13
  106. package/dist/src/perp/index.d.ts +4 -6
  107. package/dist/src/perp/index.js +17 -5
  108. package/dist/src/perp/tx-builders/common.d.ts +86 -48
  109. package/dist/src/perp/tx-builders/common.js +114 -48
  110. package/dist/src/perp/tx-builders/wlp.d.ts +3 -14
  111. package/dist/src/perp/tx-builders/wlp.js +6 -35
  112. package/dist/src/perp/tx-builders.d.ts +6 -5
  113. package/dist/src/perp/tx-builders.js +15 -6
  114. package/dist/src/unified-client.d.ts +9 -35
  115. package/dist/src/unified-client.js +3 -4
  116. package/dist/src/utils/config.d.ts +0 -8
  117. package/dist/src/utils/config.js +5 -12
  118. package/package.json +8 -2
  119. package/dist/cjs/src/generated/pyth_sponsor_rule/deps/sui/balance.d.ts +0 -12
  120. package/dist/cjs/src/generated/pyth_sponsor_rule/deps/sui/balance.js +0 -17
  121. package/dist/cjs/src/generated/pyth_sponsor_rule/pyth_sponsor_rule.d.ts +0 -68
  122. package/dist/cjs/src/generated/pyth_sponsor_rule/pyth_sponsor_rule.js +0 -113
  123. package/dist/cjs/src/generated/waterx_pyth_rule/deps/sui/vec_map.d.ts +0 -36
  124. package/dist/cjs/src/generated/waterx_pyth_rule/deps/sui/vec_map.js +0 -31
  125. package/dist/cjs/src/generated/waterx_pyth_rule/pyth_rule.d.ts +0 -192
  126. package/dist/cjs/src/generated/waterx_pyth_rule/pyth_rule.js +0 -214
  127. package/dist/cjs/src/oracle/pyth.d.ts +0 -227
  128. package/dist/cjs/src/oracle/pyth.js +0 -652
  129. package/dist/cjs/src/oracle/rules/pyth-core-rule.d.ts +0 -15
  130. package/dist/cjs/src/oracle/rules/pyth-core-rule.js +0 -100
  131. package/dist/cjs/src/oracle/rules/pyth-rule.d.ts +0 -11
  132. package/dist/cjs/src/oracle/rules/pyth-rule.js +0 -29
  133. package/dist/cjs/src/oracle/rules/sponsor.d.ts +0 -32
  134. package/dist/cjs/src/oracle/rules/sponsor.js +0 -56
  135. package/dist/src/generated/pyth_sponsor_rule/deps/sui/balance.d.ts +0 -12
  136. package/dist/src/generated/pyth_sponsor_rule/deps/sui/balance.js +0 -14
  137. package/dist/src/generated/pyth_sponsor_rule/pyth_sponsor_rule.d.ts +0 -68
  138. package/dist/src/generated/pyth_sponsor_rule/pyth_sponsor_rule.js +0 -73
  139. package/dist/src/generated/waterx_pyth_rule/deps/sui/vec_map.d.ts +0 -36
  140. package/dist/src/generated/waterx_pyth_rule/deps/sui/vec_map.js +0 -27
  141. package/dist/src/generated/waterx_pyth_rule/pyth_rule.d.ts +0 -192
  142. package/dist/src/generated/waterx_pyth_rule/pyth_rule.js +0 -170
  143. package/dist/src/oracle/pyth.d.ts +0 -227
  144. package/dist/src/oracle/pyth.js +0 -638
  145. package/dist/src/oracle/rules/pyth-core-rule.d.ts +0 -15
  146. package/dist/src/oracle/rules/pyth-core-rule.js +0 -97
  147. package/dist/src/oracle/rules/pyth-rule.d.ts +0 -11
  148. package/dist/src/oracle/rules/pyth-rule.js +0 -26
  149. package/dist/src/oracle/rules/sponsor.d.ts +0 -32
  150. 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;