ua-outages 0.1.0 → 0.2.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/README.md CHANGED
@@ -40,7 +40,7 @@ nextOutage(schedule.days) // { from: '2026-11-05T19:30:00+02:00', to: '2026-11-0
40
40
  | `donetsk` | Донецька | ДТЕК Донецькі електромережі | schedule page + /ua/ajax (same provider as Odesa) | ⚠️ code ready | ⚠️ code ready | the site answers automated clients with a bot check, so requests come back `blocked`; untested against live data | [dtek-dem.com.ua](https://www.dtek-dem.com.ua/ua/shutdowns) | [dtek-dem.com.ua](https://www.dtek-dem.com.ua/ua/shutdowns) |
41
41
  | `lviv` | Львівська | Львівобленерго | api.loe.lviv.ua, power-api.loe.lviv.ua | ✅ | ✅ | | [poweron.loe.lviv.ua](https://poweron.loe.lviv.ua/) | [poweron.loe.lviv.ua](https://poweron.loe.lviv.ua/) |
42
42
  | `ternopil` | Тернопільська | Тернопільобленерго | api-poweron.toe.com.ua | ✅ | ✅ | schedule read per group via a reference address | [poweron.toe.com.ua](https://poweron.toe.com.ua/) | [poweron.toe.com.ua](https://poweron.toe.com.ua/) |
43
- | `zakarpattia` | Закарпатська | Закарпаттяобленерго | api-outage-zakarpat-energy.inneti.net | ✅ / image | ✅ | no outages while no picture is published; a published picture is reported as `unsupported` | [zakarpat.energy](https://zakarpat.energy/customers/break-in-electricity-supply/schedule/) | [outage.zakarpat.energy](https://outage.zakarpat.energy/schedule_queues) |
43
+ | `zakarpattia` | Закарпатська | Закарпаттяобленерго | api-outage-zakarpat-energy.inneti.net | ✅ / image | ✅ | groups `unknown` while no picture is published; a published picture is reported as `unsupported` | [zakarpat.energy](https://zakarpat.energy/customers/break-in-electricity-supply/schedule/) | [outage.zakarpat.energy](https://outage.zakarpat.energy/schedule_queues) |
44
44
  | `ivano-frankivsk` | Івано-Франківська | Прикарпаттяобленерго | be-svitlo.oe.if.ua | ✅ | ✅ | full address only, no autocomplete | [svitlo.oe.if.ua](https://svitlo.oe.if.ua/) | [svitlo.oe.if.ua](https://svitlo.oe.if.ua/) |
45
45
  | `chernivtsi` | Чернівецька | Чернівціобленерго | schedule page + district directories | ✅ | ✅ | groups numbered 1–12 | [oblenergo.cv.ua](https://oblenergo.cv.ua/shutdowns/) | [oblenergo.cv.ua](https://oblenergo.cv.ua/shutdowns-search/) |
46
46
  | `rivne` | Рівненська | Рівнеобленерго | schedule page | ✅ | — | addresses only in PDF | [roe.vsei.ua](https://www.roe.vsei.ua/disconnections) | — |
@@ -56,7 +56,7 @@ nextOutage(schedule.days) // { from: '2026-11-05T19:30:00+02:00', to: '2026-11-0
56
56
  | `zaporizhzhia` | Запорізька | Запоріжжяобленерго | news page | ✅ | — | no web lookup | [zoe.com.ua](https://www.zoe.com.ua/outage/) | [Telegram bot](https://t.me/esozoebot) |
57
57
  | `mykolaiv` | Миколаївська | Миколаївобленерго | off.energy.mk.ua API | ✅ | ✅ | | [off.energy.mk.ua](https://off.energy.mk.ua/) | [off.energy.mk.ua](https://off.energy.mk.ua/) |
58
58
 
59
- **АТ «Укрзалізниця»** is a distribution operator too: homes near stations and along the lines are wired to the railway's grid and get its own schedule, which differs from the oblenergo's. It has one region per oblast page on [uz.gov.ua](https://www.uz.gov.ua/about/activity/electropostachannia/electro_consumers/temporary_shutdown/grafikiobmezhen/): `uz-kyiv`, `uz-kyiv-region`, `uz-dnipro`, … (`uz-<region id>`), and two branches each in Vinnytsia (`uz-vinnytsia`, `uz-vinnytsia-odesa`) and Sumy (`uz-sumy`, `uz-sumy-south`). Today's schedule only, read from the HTML table; a page with no table means no outages. The page also lists each group's addresses (no lookup yet).
59
+ **АТ «Укрзалізниця»** is a distribution operator too: homes near stations and along the lines are wired to the railway's grid and get its own schedule, which differs from the oblenergo's. It has one region per oblast page on [uz.gov.ua](https://www.uz.gov.ua/about/activity/electropostachannia/electro_consumers/temporary_shutdown/grafikiobmezhen/): `uz-kyiv`, `uz-kyiv-region`, `uz-dnipro`, … (`uz-<region id>`), and two branches each in Vinnytsia (`uz-vinnytsia`, `uz-vinnytsia-odesa`) and Sumy (`uz-sumy`, `uz-sumy-south`). Today's schedule only, read from the HTML table; a page with no table publishes nothing, so every group comes back `unknown` for today. The page also lists each group's addresses (no lookup yet).
60
60
 
61
61
  **Not covered**
62
62
 
@@ -68,7 +68,7 @@ nextOutage(schedule.days) // { from: '2026-11-05T19:30:00+02:00', to: '2026-11-0
68
68
  Луганська область and Crimea are not covered. "today" means the operator publishes only the current day. "⚠️ code ready" means the provider is implemented but the operator currently blocks automated requests. "image" means the schedule is read from the table picture the operator publishes.
69
69
  <!-- regions:end -->
70
70
 
71
- "Address" means the SDK can turn an address into a group. Zakarpattia publishes its schedule only as a picture: while none is published `getSchedules` returns no groups (no outages announced); once one is, it throws `unsupported` with the picture's address. Its address lookup works either way.
71
+ "Address" means the SDK can turn an address into a group. Zakarpattia publishes its schedule only as a picture: while none is published `getSchedules` lists its groups as `unknown` (not "no outages"); once one is, it throws `unsupported` with the picture's address. Its address lookup works either way.
72
72
 
73
73
  ### Why some regions are missing
74
74
 
@@ -95,14 +95,14 @@ The same option works for proxies, caching, logging and tests. When an operator
95
95
 
96
96
  ### `new OutageClient(options?)`
97
97
 
98
- | option | default | |
99
- | ------------ | ------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
100
- | `cacheTtlMs` | `300000` | Reuse a region's schedule for this long. `0` turns caching off. Concurrent requests for one region share a single fetch. |
101
- | `timeoutMs` | `15000` | Per request. |
102
- | `retries` | `1` | Extra attempts after a network error or a 5xx. |
103
- | `fetch` | `globalThis.fetch` | Bring your own (proxy, logging, tests). |
104
- | `userAgent` | `ua-outages (+repo url)` | |
105
- | `providers` | built-in | Replace or extend the regions. |
98
+ | option | default | |
99
+ | ------------ | ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
100
+ | `cacheTtlMs` | `300000` | Reuse a region's schedule for this long. `0` turns caching off. Concurrent requests for one region share a single fetch (except calls with a `signal`, see Cancelling). |
101
+ | `timeoutMs` | `15000` | Per request. |
102
+ | `retries` | `1` | Extra attempts after a network error or a 5xx. A bot-check page is never retried, whatever its status. |
103
+ | `fetch` | `globalThis.fetch` | Bring your own (proxy, logging, tests). |
104
+ | `userAgent` | `ua-outages (+repo url)` | |
105
+ | `providers` | built-in | Replace or extend the regions. |
106
106
 
107
107
  ### Schedules
108
108
 
@@ -119,6 +119,44 @@ A `DaySchedule` is `{ date: 'YYYY-MM-DD', status, intervals }`:
119
119
 
120
120
  `updatedAt` is when the operator last changed the schedule, when the source says so.
121
121
 
122
+ #### "No outages" vs "nothing published"
123
+
124
+ The SDK never turns silence into "no outages": a group with no cells, a group named without times ("1.1: графік уточнюється") or a source that publishes nothing comes back `unknown`. Read a result like this:
125
+
126
+ | you get | it means |
127
+ | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
128
+ | a day with `status: 'no-outages'` | The operator said there are no outages for that group that day (a cancellation notice, or a published schedule with nothing in that group). |
129
+ | a day with `status: 'scheduled'`, no `intervals` | A schedule is in force for that day and has no outage for that group. |
130
+ | a day with `status: 'emergency'` | Emergency outages: the hourly schedule doesn't apply, power may go off at any time. Published, but not "no outages". |
131
+ | a day with `status: 'unknown'` | Nothing is published for that group and day. Not "no outages". |
132
+ | every day of every group `unknown` | The operator publishes nothing right now. Regions with a fixed set of groups keep listing them (e.g. Sumy marks every group "no data"). |
133
+ | `groups: []`, `schedules: {}` | The operator publishes nothing right now, and its groups come only with a schedule (e.g. YASNO, DTEK). The same as all `unknown`. |
134
+ | a missing date | Not published. Most operators publish today and, from the evening, tomorrow. |
135
+
136
+ So "no outages" is only ever `no-outages` days or `scheduled` days without intervals. `emergency` means outages without a schedule; anything else (`unknown`, a missing date, no groups) should read as "the schedule isn't published", with a link to the operator's website. `stateAt()` returns `'unknown'` for `unknown` and `emergency` days.
137
+
138
+ **Upgrading from 0.1.1:** `groups: []` used to be documented as "no outages" for some regions (Zakarpattia, the railway pages). It never means that now, and Sumy, Lviv, Zakarpattia, Ivano-Frankivsk, Ternopil, Mykolaiv, Zaporizhzhia and the railway pages list their groups as `unknown` instead when nothing is published. If your code shows "no outages" for an empty `groups` list, change it to something like:
139
+
140
+ ```ts
141
+ const day = schedule.schedules[group]?.find((d) => d.date === kyivDate())
142
+ if (!day || day.status === 'unknown') show('Графік не опубліковано')
143
+ else if (day.status === 'emergency') show('Аварійні відключення, без графіка')
144
+ else if (day.intervals.length === 0)
145
+ show('Відключень немає') // 'no-outages', or 'scheduled' without outages
146
+ else showIntervals(day.intervals)
147
+ ```
148
+
149
+ #### Cancelling
150
+
151
+ ```ts
152
+ // stop as soon as your own deadline passes
153
+ const s = await outages.getSchedules('sumy', { fresh: true, signal: AbortSignal.timeout(20_000) })
154
+ ```
155
+
156
+ `getSchedules`, `getSchedule` and `healthCheck` take a `signal`. When it aborts, the call rejects right away with the signal's reason (an `AbortError` by default, not an `OutageError`). The work that call started is stopped: its request in flight is cancelled, and nothing more is sent to the operator for it, no further groups, pages or retries. With a `Promise.race` cap of your own, pass a signal too, otherwise the losing call keeps running in the background.
157
+
158
+ Work shared with other callers keeps going for them: a call with a signal that is answered from the cache, or that waits for a session another call is opening, just stops waiting. Shared work is cancelled only when every caller waiting for it has given up. To keep one caller's cancellation from reaching others, a call with a signal doesn't share its own fetch through the cache while it runs (its result is cached when it arrives). Address search doesn't take a signal yet.
159
+
122
160
  ### Schedules published as pictures
123
161
 
124
162
  Volyn publishes the schedule only as a table image, and Khmelnytskyi does when it doesn't post it as text on its schedule page (the text wins for its date). The SDK reads those itself: it decodes the PNG, finds the grid and classifies each cell by colour, with no dependencies. When an operator posts a text announcement as an image under the same date, it is skipped. A colour the SDK doesn't know is reported as a `parse` error instead of being guessed.
@@ -177,7 +215,7 @@ const report = await outages.healthCheck({ address: true })
177
215
  // { ok, checkedAt, regions: [{ region, status: 'ok' | 'stale' | 'empty' | 'error', latencyMs, groups, updatedAt, message, address }] }
178
216
  ```
179
217
 
180
- - `empty`: the source works but publishes nothing right now. Usually it means there are no outages.
218
+ - `empty`: the source works but publishes nothing right now (no groups, or every day `unknown`). Often there are no outages then, but the SDK can't tell.
181
219
  - `stale`: the schedule hasn't changed for `staleAfterHours` (default 72).
182
220
  - `error`: a network failure, a bot check (`blocked`), or a format change (`parse`).
183
221
 
@@ -10,9 +10,18 @@ export interface SchedulePost {
10
10
  /** When the post was published or last edited, ISO */
11
11
  publishedAt: string;
12
12
  }
13
+ export interface PostsOptions {
14
+ /**
15
+ * What a group missing from a day's post means. 'unknown' (default): the post didn't say.
16
+ * 'none': the operator lists only the groups that have outages, so it has none that day.
17
+ */
18
+ omitted?: 'unknown' | 'none';
19
+ /** Groups the region always has; with `omitted: 'none'` they all get a day, listed or not */
20
+ groups?: readonly string[];
21
+ }
13
22
  /**
14
23
  * Newest post per date wins. Posts without group lines (announcements, emergency notices)
15
24
  * are ignored. Only yesterday and later is kept.
16
25
  */
17
- export declare function postsToSchedule(region: RegionId, posts: readonly SchedulePost[], now: Date): RegionSchedule;
26
+ export declare function postsToSchedule(region: RegionId, posts: readonly SchedulePost[], now: Date, opts?: PostsOptions): RegionSchedule;
18
27
  //# sourceMappingURL=posts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"posts.d.ts","sourceRoot":"","sources":["../../src/providers/posts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAe,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAGxE;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,YAAY,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,cAAc,CAuC3G"}
1
+ {"version":3,"file":"posts.d.ts","sourceRoot":"","sources":["../../src/providers/posts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAe,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAGxE;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IAC5B,6FAA6F;IAC7F,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC3B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,GAAG,EAAE,IAAI,EACT,IAAI,GAAE,YAAiB,GACtB,cAAc,CAyChB"}
@@ -5,7 +5,7 @@ import { findUaDate, parseGroupLines } from './ua-text.js';
5
5
  * Newest post per date wins. Posts without group lines (announcements, emergency notices)
6
6
  * are ignored. Only yesterday and later is kept.
7
7
  */
8
- export function postsToSchedule(region, posts, now) {
8
+ export function postsToSchedule(region, posts, now, opts = {}) {
9
9
  const byDate = new Map();
10
10
  const from = addDays(kyivDate(now), -1);
11
11
  for (const p of posts) {
@@ -26,7 +26,7 @@ export function postsToSchedule(region, posts, now) {
26
26
  byDate.set(date, { at, groups });
27
27
  }
28
28
  const dates = [...byDate.keys()].sort();
29
- const groupSet = new Set();
29
+ const groupSet = new Set(dates.length ? (opts.groups ?? []) : []);
30
30
  for (const d of byDate.values())
31
31
  for (const g of Object.keys(d.groups))
32
32
  groupSet.add(g);
@@ -35,8 +35,11 @@ export function postsToSchedule(region, posts, now) {
35
35
  for (const g of groups)
36
36
  schedules[g] = dates.map((d) => {
37
37
  const slots = byDate.get(d).groups[g];
38
- // a group missing from that day's post: we don't know, rather than "no outages"
39
- return slots ? makeDay(d, slots) : { date: d, status: 'unknown', intervals: [] };
38
+ if (slots)
39
+ return makeDay(d, slots);
40
+ // a group missing from that day's post: no outages if the operator lists only the
41
+ // groups that have them, otherwise we just don't know
42
+ return opts.omitted === 'none' ? makeDay(d, []) : { date: d, status: 'unknown', intervals: [] };
40
43
  });
41
44
  const newest = Math.max(0, ...[...byDate.values()].map((d) => d.at).filter(Number.isFinite));
42
45
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"posts.js","sourceRoot":"","sources":["../../src/providers/posts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"posts.js","sourceRoot":"","sources":["../../src/providers/posts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"uz.d.ts","sourceRoot":"","sources":["../../src/providers/uz.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAe,QAAQ,EAAc,cAAc,EAAE,MAAM,aAAa,CAAA;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAqB7C,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,QAAQ,CAAA;IACZ,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,CAgBpD;AASD,gEAAgE;AAChE,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,IAAI,EACT,MAAM,EAAE,QAAQ,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,cAAc,CAiChB;AAyFD,iEAAiE;AACjE,eAAO,MAAM,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EA2BlE,CAAA"}
1
+ {"version":3,"file":"uz.d.ts","sourceRoot":"","sources":["../../src/providers/uz.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAe,QAAQ,EAAc,cAAc,EAAE,MAAM,aAAa,CAAA;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAqB7C,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,QAAQ,CAAA;IACZ,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,CAgBpD;AASD,gEAAgE;AAChE,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,IAAI,EACT,MAAM,EAAE,QAAQ,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,cAAc,CAiChB;AA8GD,iEAAiE;AACjE,eAAO,MAAM,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,EA2BlE,CAAA"}
@@ -108,6 +108,27 @@ function span(cell) {
108
108
  b = 1440;
109
109
  return a < 1440 && b <= 1440 ? [a, b] : null;
110
110
  }
111
+ /**
112
+ * The span columns run back to back, so a cell with a typo ("11500 14.30" for "11.00 14.30")
113
+ * is read from its neighbours: it starts where the previous span ends, and its one legible time
114
+ * must be where the next span starts (or the end of the day, for the last column).
115
+ */
116
+ function mendSpans(cells) {
117
+ const spans = cells.map(span);
118
+ spans.forEach((s, i) => {
119
+ if (s || i === 0)
120
+ return;
121
+ const prev = spans[i - 1];
122
+ const times = [...cells[i].matchAll(/(\d{1,2})\s*[-.:]\s*(\d{2})/g)].map((m) => Number(m[1]) * 60 + Number(m[2]));
123
+ if (!prev || times.length !== 1)
124
+ return;
125
+ const end = times[0] === 0 ? 1440 : times[0];
126
+ const next = spans[i + 1] ?? (i === cells.length - 1 ? [1440, 1440] : null);
127
+ if (next && end > prev[1] && end === next[0])
128
+ spans[i] = [prev[1], end];
129
+ });
130
+ return spans;
131
+ }
111
132
  /** "1(1,2) 2(1) 3" → ["1.1", "1.2", "2.1", "3.1", "3.2"] */
112
133
  function groupsIn(cell) {
113
134
  const out = [];
@@ -129,7 +150,7 @@ function parseTable(rows) {
129
150
  // time spans as columns
130
151
  const spansAt = rows.findIndex((r) => /годин/i.test(r[0] ?? ''));
131
152
  if (spansAt !== -1) {
132
- const spans = rows[spansAt].slice(1).map(span);
153
+ const spans = mendSpans(rows[spansAt].slice(1));
133
154
  const groupsRow = rows.slice(spansAt + 1).find((r) => /черг/i.test(r[0] ?? ''));
134
155
  if (!groupsRow || spans.some((s) => !s))
135
156
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"uz.js","sourceRoot":"","sources":["../../src/providers/uz.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uz.js","sourceRoot":"","sources":["../../src/providers/uz.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"zaporizhzhia.d.ts","sourceRoot":"","sources":["../../src/providers/zaporizhzhia.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAe7C,wBAAgB,oBAAoB,IAAI,QAAQ,CAQ/C;AAED,0BAA0B;AAC1B,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI;;;;;;EAa/C"}
1
+ {"version":3,"file":"zaporizhzhia.d.ts","sourceRoot":"","sources":["../../src/providers/zaporizhzhia.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAgB7C,wBAAgB,oBAAoB,IAAI,QAAQ,CAQ/C;AAED,0BAA0B;AAC1B,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI;;;;;;EAa/C"}
@@ -1,9 +1,11 @@
1
1
  import { OutageError } from '../errors.js';
2
+ import { STANDARD_GROUPS } from '../image/table.js';
2
3
  import { postsToSchedule } from './posts.js';
3
4
  /**
4
5
  * Zaporizhzhiaoblenergo posts schedules on a WordPress archive page, newest first; corrections
5
6
  * are new posts ("ОНОВЛЕНО ГПВ НА 5 ЛИСТОПАДА … (оновлено 21:25)"). The posts carry no machine
6
- * timestamps, so page order decides which version is current. No address lookup is available.
7
+ * timestamps, so page order decides which version is current. A post lists only the groups that
8
+ * have outages that day; the rest have none. No address lookup is available.
7
9
  */
8
10
  const INFO = {
9
11
  id: 'zaporizhzhia',
@@ -32,7 +34,7 @@ export function parseZoe(html, now) {
32
34
  // first on the page = newest
33
35
  publishedAt: new Date(now.getTime() - i * 1000).toISOString(),
34
36
  }));
35
- const s = postsToSchedule(INFO.id, posts, now);
37
+ const s = postsToSchedule(INFO.id, posts, now, { omitted: 'none', groups: STANDARD_GROUPS });
36
38
  // the page gives no edit times; don't pretend the fetch time is one
37
39
  return { ...s, updatedAt: null };
38
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"zaporizhzhia.js","sourceRoot":"","sources":["../../src/providers/zaporizhzhia.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,OAAO,EAAE,eAAe,EAAqB,MAAM,YAAY,CAAA;AAG/D;;;;GAIG;AACH,MAAM,IAAI,GAAe;IACvB,EAAE,EAAE,cAAc;IAClB,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,oBAAoB;IAC9B,OAAO,EAAE,gCAAgC;IACzC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;CACvD,CAAA;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,IAAI,EAAE,IAAI;QACV,KAAK,CAAC,YAAY,CAAC,GAAG;YACpB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;YACnE,OAAO,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;QAClC,CAAC;KACF,CAAA;AACH,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,GAAS;IAC9C,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,wCAAwC,CAAC,CAAC,CAAA;IAC7E,IAAI,CAAC,QAAQ,CAAC,MAAM;QAClB,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,oCAAoC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IAC3F,MAAM,KAAK,GAAmB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,KAAK,EAAE,MAAM,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;QACnB,6BAA6B;QAC7B,WAAW,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;KAC9D,CAAC,CAAC,CAAA;IACH,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;IAC9C,oEAAoE;IACpE,OAAO,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;AAClC,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,OAAO,CAAC;SACL,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,yBAAyB,EAAE,GAAG,CAAC;SACvC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;AAC3B,CAAC"}
1
+ {"version":3,"file":"zaporizhzhia.js","sourceRoot":"","sources":["../../src/providers/zaporizhzhia.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,eAAe,EAAqB,MAAM,YAAY,CAAA;AAG/D;;;;;GAKG;AACH,MAAM,IAAI,GAAe;IACvB,EAAE,EAAE,cAAc;IAClB,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,oBAAoB;IAC9B,OAAO,EAAE,gCAAgC;IACzC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;CACvD,CAAA;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,IAAI,EAAE,IAAI;QACV,KAAK,CAAC,YAAY,CAAC,GAAG;YACpB,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;YACnE,OAAO,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;QAClC,CAAC;KACF,CAAA;AACH,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,GAAS;IAC9C,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,wCAAwC,CAAC,CAAC,CAAA;IAC7E,IAAI,CAAC,QAAQ,CAAC,MAAM;QAClB,MAAM,IAAI,WAAW,CAAC,OAAO,EAAE,oCAAoC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IAC3F,MAAM,KAAK,GAAmB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,KAAK,EAAE,MAAM,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;QACnB,6BAA6B;QAC7B,WAAW,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;KAC9D,CAAC,CAAC,CAAA;IACH,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAA;IAC5F,oEAAoE;IACpE,OAAO,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;AAClC,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACvB,OAAO,CAAC;SACL,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,yBAAyB,EAAE,GAAG,CAAC;SACvC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;AAC3B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ua-outages",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "TypeScript SDK for Ukrainian power outage schedules: find your outage group by address and get schedules straight from the grid operators.",
5
5
  "keywords": [
6
6
  "ukraine",