scrapme-flow 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
@@ -1,10 +1,12 @@
1
1
  # scrapme-flow
2
2
 
3
- Scraping flows for Node apps. A flow is a **`*.flow.ts` file** exporting `new Flow({...})`: a list of steps, each
4
- running a small command class (scrape a page, parse it, save it, mail it…). Every command has its own **retries and
3
+ Scraping flows for Node apps. This repository has two separate things: the **`scrapme-flow` npm library** (root,
4
+ `src/`) and the **monitor** app ([`monitor/`](monitor/README.md)) that shows the runs — deployable on CapRover.
5
+
6
+ A flow is a **`*.flow.ts` file** exporting `new Flow({...})`: a list of steps, each running a small command class (scrape a page, parse it, save it, mail it…). Every command has its own **retries and
5
7
  timeout**. `scrapme.flow(flow, input)` puts a run on a **pg-boss queue** (Postgres) and returns at once; a worker runs
6
8
  it, and a failed run is run again by pg-boss. The progress of every run is kept in **CouchDB** and shown by a
7
- **Svelte monitor**.
9
+ separate **monitor** app.
8
10
 
9
11
  ```ts
10
12
  import { Container } from 'inversify';
@@ -78,23 +80,23 @@ LightyErrors (`lighty.dsn`).
78
80
 
79
81
  ## Monitor
80
82
 
81
- `monitor: { port: 3100 }` serves the dashboard (Svelte, built into the package) and its JSON API: runs with status
82
- counts and a flow filter, each run's steps (which one is running, which failed and why), every flow attempt and every
83
- command attempt with error and duration. API: `GET /api/overview`, `/api/runs?flow=&status=&limit=`,
84
- `/api/runs/:runId`. It only reads CouchDB, so it can run in its own process. Bound to `127.0.0.1` unless `host` says
85
- otherwise — it has no login.
83
+ The library has no UI. The runs are documents in CouchDB (`couch.runsDb`, `run:<id>`), and the **scrapme monitor**
84
+ — a separate app in [`monitor/`](monitor/README.md) — shows them: runs with status counts and a flow filter, each
85
+ run's steps (which one is running, which failed and why), every flow attempt and command attempt. Run it locally
86
+ (`./scripts/monitor.sh`) or deploy it to CapRover. Apps that only read runs can use `scrapme-flow/models` (the
87
+ document types and status constants, no Node code).
86
88
 
87
89
  ## API
88
90
 
89
91
  | | |
90
92
  |---|---|
91
- | `Scrapme.create(options)` | `container?`, `postgres`, `couch`, `queue?`, `monitor?`, `scrapAnything?`, `mail?`, `lighty?`, `defaults?`, `logLevel?` |
92
- | `start({ worker? })` | connect pg-boss, start the monitor. `worker: false` = this process only queues runs |
93
+ | `Scrapme.create(options)` | `container?`, `postgres`, `couch`, `queue?`, `scrapAnything?`, `mail?`, `lighty?`, `defaults?`, `logLevel?` |
94
+ | `start({ worker? })` | connect pg-boss. `worker: false` = this process only queues runs |
93
95
  | `flow(flow, input, { runId?, startAfter?, priority? })` | queue a run → run id (UUID); starts the flow's worker here on first use |
94
96
  | `work(flow)` | run this flow's queued runs in this process without queueing one (a worker-only process) |
95
97
  | `getRun(id)`, `listRuns(limit)` | run documents: status, steps with outputs, attempts, errors |
96
98
  | `waitFor(id, { timeoutMs? })` | until succeeded / failed (`RunWaitTimeoutError`) |
97
- | `monitorUrl`, `stop()` | |
99
+ | `stop()` | stop the workers and the queue connection |
98
100
 
99
101
  ## This repository
100
102
 
@@ -106,15 +108,16 @@ nvm use && npm install
106
108
  ./scripts/monitor.sh # terminal 1, leave it open: the monitor on http://localhost:3100
107
109
  ./scripts/example.sh hello Ada # terminal 2: the hello flow, then look at it in the monitor
108
110
  ./scripts/example.sh biznesradar DOM-DEVELOPMENT # scrape → cheerio → CouchDB → e-mail (needs scrap-anything)
109
- npm run dashboard:dev # the dashboard with hot reload (proxies /api to a running monitor)
110
111
  ```
111
112
 
112
113
  The examples read `.env` (see `.env.example`) in `examples/example-services.ts` and pass the values to
113
- `Scrapme.create`. Examples have no tests.
114
+ `Scrapme.create`. Examples have no tests. [`example-external/`](example-external/README.md) is the hello example as a
115
+ standalone app that installs `scrapme-flow` from npm.
114
116
 
115
117
  ```bash
116
118
  npm test # every src/**/*.test.ts — no docker / internet / .env (fake queue, CouchDB, SMTP, Lighty)
117
- npm run build # dist/ (tsc) + dashboard/dist (vite)
119
+ npm run build # dist/ (tsc)
120
+ cd monitor && npm test # the monitor's tests
118
121
  ```
119
122
 
120
123
  Code layout and rules: `AGENTS.md`. Decisions: `docs/adr/`.
@@ -54,7 +54,6 @@ export class ConfigBuilder {
54
54
  shutdownTimeoutMs: ConfigBuilder.ms(0).default(30_000),
55
55
  })
56
56
  .default({ prefix: ConfigBuilder.QUEUE_PREFIX, retries: 3, retryDelaySeconds: 30, retryBackoff: true, timeoutSeconds: 3_600, concurrency: 1, pollingIntervalSeconds: 2, retentionDays: 7, shutdownTimeoutMs: 30_000 }),
57
- monitor: z.strictObject({ port: ConfigBuilder.ms(0).max(65_535), host: z.string().default('127.0.0.1') }).optional(),
58
57
  scrapAnything: z
59
58
  .strictObject({
60
59
  url: z.url(),
@@ -112,7 +111,6 @@ export class ConfigBuilder {
112
111
  flow: o.defaults,
113
112
  postgres: o.postgres,
114
113
  queue: o.queue,
115
- monitor: o.monitor ?? null,
116
114
  scrapAnything: o.scrapAnything ?? null,
117
115
  couch: o.couch,
118
116
  mail: o.mail ?? null,
@@ -1 +1 @@
1
- {"version":3,"file":"config-builder.js","sourceRoot":"","sources":["../../../src/config/config-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-builder.js","sourceRoot":"","sources":["../../../src/config/config-builder.ts"],"names":[],"mappings":"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"}
@@ -30,13 +30,6 @@ export interface QueueOptions {
30
30
  /** stop() waits this long for running flows. Default 30 000. */
31
31
  shutdownTimeoutMs?: number;
32
32
  }
33
- /** The monitoring dashboard (Svelte UI + JSON API on /api). */
34
- export interface MonitorOptions {
35
- /** e.g. 3100; 0 = any free port. */
36
- port: number;
37
- /** Default "127.0.0.1" (only this machine); "0.0.0.0" to open it to the network. */
38
- host?: string;
39
- }
40
33
  /** scrap-anything — needed by ScrapePageCommand. */
41
34
  export interface ScrapAnythingOptions {
42
35
  /** e.g. http://localhost:3000 */
@@ -121,7 +114,6 @@ export interface ServiceOptions {
121
114
  postgres: PostgresOptions;
122
115
  couch: CouchOptions;
123
116
  queue?: QueueOptions;
124
- monitor?: MonitorOptions;
125
117
  scrapAnything?: ScrapAnythingOptions;
126
118
  mail?: MailOptions;
127
119
  lighty?: LightyOptions;
@@ -139,14 +131,12 @@ export type LightyConfig = Required<LightyOptions>;
139
131
  export type StepDefaultsConfig = Required<StepDefaults>;
140
132
  export type PostgresConfig = Required<PostgresOptions>;
141
133
  export type QueueConfig = Required<QueueOptions>;
142
- export type MonitorConfig = Required<MonitorOptions>;
143
134
  /** Validated, frozen configuration (ConfigBuilder). A missing optional service is null. */
144
135
  export interface ScrapmeConfig {
145
136
  logLevel: LogLevel;
146
137
  flow: StepDefaultsConfig;
147
138
  postgres: PostgresConfig;
148
139
  queue: QueueConfig;
149
- monitor: MonitorConfig | null;
150
140
  scrapAnything: ScrapAnythingConfig | null;
151
141
  couch: CouchConfig;
152
142
  mail: MailConfig | null;
@@ -9,8 +9,6 @@ import { StepInputBuilder } from '../flow/step-input-builder.js';
9
9
  import { Logger } from '../logging/logger.js';
10
10
  import { SmtpMailer } from '../mail/smtp-mailer.js';
11
11
  import { UnconfiguredMailer } from '../mail/unconfigured-mailer.js';
12
- import { MonitorApi } from '../monitor/monitor-api.js';
13
- import { MonitorServer } from '../monitor/monitor-server.js';
14
12
  import { PgBossFlowQueue } from '../queue/pg-boss-flow-queue.js';
15
13
  import { LightyErrorReporter } from '../reporting/lighty-error-reporter.js';
16
14
  import { LogErrorReporter } from '../reporting/log-error-reporter.js';
@@ -63,11 +61,6 @@ export class ContainerBuilder {
63
61
  if (sa) {
64
62
  c.bind(TYPES.ScrapAnythingClient).toConstantValue(new ScrapAnythingClient({ baseUrl: sa.url, apiSecret: sa.apiSecret, requestTimeoutMs: sa.requestTimeoutMs, pollIntervalMs: sa.pollIntervalMs, waitTimeoutMs: sa.waitTimeoutMs }));
65
63
  }
66
- c.bind(TYPES.MonitorApi).to(MonitorApi);
67
- if (config.monitor) {
68
- c.bind(TYPES.MonitorConfig).toConstantValue(config.monitor);
69
- c.bind(TYPES.MonitorServer).to(MonitorServer);
70
- }
71
64
  return c;
72
65
  }
73
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../src/di/container.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"container.js","sourceRoot":"","sources":["../../../src/di/container.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,6 @@ export declare const TYPES: {
9
9
  readonly CouchConfig: symbol;
10
10
  readonly MailConfig: symbol;
11
11
  readonly LightyConfig: symbol;
12
- readonly MonitorConfig: symbol;
13
12
  readonly Logger: symbol;
14
13
  readonly Container: symbol;
15
14
  readonly FlowScheduler: symbol;
@@ -25,6 +24,4 @@ export declare const TYPES: {
25
24
  readonly CouchConnection: symbol;
26
25
  readonly Mailer: symbol;
27
26
  readonly ScrapAnythingClient: symbol;
28
- readonly MonitorApi: symbol;
29
- readonly MonitorServer: symbol;
30
27
  };
@@ -9,7 +9,6 @@ export const TYPES = {
9
9
  CouchConfig: Symbol.for('scrapme.CouchConfig'),
10
10
  MailConfig: Symbol.for('scrapme.MailConfig'),
11
11
  LightyConfig: Symbol.for('scrapme.LightyConfig'),
12
- MonitorConfig: Symbol.for('scrapme.MonitorConfig'),
13
12
  Logger: Symbol.for('scrapme.Logger'),
14
13
  Container: Symbol.for('scrapme.Container'),
15
14
  FlowScheduler: Symbol.for('scrapme.FlowScheduler'),
@@ -25,7 +24,5 @@ export const TYPES = {
25
24
  CouchConnection: Symbol.for('scrapme.CouchConnection'),
26
25
  Mailer: Symbol.for('scrapme.Mailer'),
27
26
  ScrapAnythingClient: Symbol.for('scrapme.ScrapAnythingClient'),
28
- MonitorApi: Symbol.for('scrapme.MonitorApi'),
29
- MonitorServer: Symbol.for('scrapme.MonitorServer'),
30
27
  };
31
28
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/di/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAC9C,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC5C,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAChD,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAClD,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC1C,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAClD,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACxC,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACtD,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACtD,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACxD,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC5C,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAClD,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAClD,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACtD,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACpC,mBAAmB,EAAE,MAAM,CAAC,GAAG,CAAC,6BAA6B,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC5C,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC;CAC1C,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/di/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAC9C,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAC9C,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC5C,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAChD,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC1C,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAClD,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACxC,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACtD,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACtD,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC;IACxD,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC5C,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAClD,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAClD,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC;IACtD,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACpC,mBAAmB,EAAE,MAAM,CAAC,GAAG,CAAC,6BAA6B,CAAC;CACtD,CAAC"}
@@ -6,7 +6,7 @@
6
6
  * A flow is a list of steps; each step runs one command (an @injectable class; its dependencies come from your
7
7
  * app's container). scrapme.flow(flow, input) queues a run; a worker runs it, every command with its own retries
8
8
  * and timeout. A failed run is run again by pg-boss; final failures go to LightyErrors. Progress is kept in CouchDB
9
- * and shown by the monitor.
9
+ * and shown by the scrapme monitor (a separate app, see monitor/ in the repository).
10
10
  */
11
11
  import 'reflect-metadata';
12
12
  export { Scrapme, RunWaitTimeoutError } from './scrapme.js';
@@ -31,12 +31,9 @@ export type { SaveDocumentInput, ScrapedPage, ScrapePageInput, SendMailInput } f
31
31
  export { ContainerBuilder } from './di/container.js';
32
32
  export { TYPES } from './di/types.js';
33
33
  export { ConfigBuilder, ConfigError } from './config/config-builder.js';
34
- export type { CouchOptions, LightyOptions, MailOptions, MonitorOptions, PostgresOptions, QueueOptions, ScrapAnythingOptions, ScrapmeConfig, ServiceOptions, StepDefaults, } from './config/config.models.js';
34
+ export type { CouchOptions, LightyOptions, MailOptions, PostgresOptions, QueueOptions, ScrapAnythingOptions, ScrapmeConfig, ServiceOptions, StepDefaults, } from './config/config.models.js';
35
35
  export { PgBossFlowQueue } from './queue/pg-boss-flow-queue.js';
36
36
  export type { FlowJob, FlowJobData, FlowJobOptions, FlowQueue } from './queue/queue.models.js';
37
- export { MonitorApi } from './monitor/monitor-api.js';
38
- export { MonitorServer } from './monitor/monitor-server.js';
39
- export type { Overview, RunSummary } from './monitor/monitor.models.js';
40
37
  export { Logger } from './logging/logger.js';
41
38
  export { LINE_LEVEL, LOG_LEVEL } from './logging/logger.models.js';
42
39
  export type { LineLevel, LogLevel, LogSink } from './logging/logger.models.js';
package/dist/src/index.js CHANGED
@@ -6,7 +6,7 @@
6
6
  * A flow is a list of steps; each step runs one command (an @injectable class; its dependencies come from your
7
7
  * app's container). scrapme.flow(flow, input) queues a run; a worker runs it, every command with its own retries
8
8
  * and timeout. A failed run is run again by pg-boss; final failures go to LightyErrors. Progress is kept in CouchDB
9
- * and shown by the monitor.
9
+ * and shown by the scrapme monitor (a separate app, see monitor/ in the repository).
10
10
  */
11
11
  import 'reflect-metadata';
12
12
  export { Scrapme, RunWaitTimeoutError } from './scrapme.js';
@@ -29,8 +29,6 @@ export { ContainerBuilder } from './di/container.js';
29
29
  export { TYPES } from './di/types.js';
30
30
  export { ConfigBuilder, ConfigError } from './config/config-builder.js';
31
31
  export { PgBossFlowQueue } from './queue/pg-boss-flow-queue.js';
32
- export { MonitorApi } from './monitor/monitor-api.js';
33
- export { MonitorServer } from './monitor/monitor-server.js';
34
32
  export { Logger } from './logging/logger.js';
35
33
  export { LINE_LEVEL, LOG_LEVEL } from './logging/logger.models.js';
36
34
  export { LightyErrorReporter } from './reporting/lighty-error-reporter.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AA+B7H,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAaxE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAInE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEtE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAErF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,mEAAmE;AACnE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAkB,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AA+B7H,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAYxE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAInE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEtE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AAErF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,mEAAmE;AACnE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAkB,MAAM,WAAW,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `scrapme-flow/models`: the shapes and constants of what scrapme stores, without the library itself (no Node-only
3
+ * imports) — for apps that only read runs, e.g. the scrapme monitor and its browser dashboard.
4
+ *
5
+ * import { RUN_STATUS, RunDocIds, type FlowRunDoc } from 'scrapme-flow/models';
6
+ */
7
+ export { ATTEMPT_OUTCOME, ERROR_CODE, FINAL_RUN_STATUSES, RUN_STATUS, STEP_STATUS, VALUE_TYPE } from './flow/flow.models.js';
8
+ export type { AttemptOutcome, AttemptReport, ErrorCode, FlowAttemptReport, RunStatus, SerializedError, StepReport, StepStatus } from './flow/flow.models.js';
9
+ export { DOC_TYPE } from './storage/storage.models.js';
10
+ export type { FlowRunDoc } from './storage/storage.models.js';
11
+ export { RunDocIds } from './storage/run-doc-ids.js';
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `scrapme-flow/models`: the shapes and constants of what scrapme stores, without the library itself (no Node-only
3
+ * imports) — for apps that only read runs, e.g. the scrapme monitor and its browser dashboard.
4
+ *
5
+ * import { RUN_STATUS, RunDocIds, type FlowRunDoc } from 'scrapme-flow/models';
6
+ */
7
+ export { ATTEMPT_OUTCOME, ERROR_CODE, FINAL_RUN_STATUSES, RUN_STATUS, STEP_STATUS, VALUE_TYPE } from './flow/flow.models.js';
8
+ export { DOC_TYPE } from './storage/storage.models.js';
9
+ export { RunDocIds } from './storage/run-doc-ids.js';
10
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE7H,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC"}
@@ -12,14 +12,15 @@ export declare class RunWaitTimeoutError extends Error {
12
12
  constructor(runId: string, lastStatus: string | null);
13
13
  }
14
14
  /**
15
- * Runs flows on pg-boss queues: every run is a job, retried by pg-boss; its progress is in CouchDB and on the monitor.
15
+ * Runs flows on pg-boss queues: every run is a job, retried by pg-boss; its progress is in CouchDB (the separate
16
+ * scrapme monitor app shows it).
16
17
  *
17
18
  * const scrapme = Scrapme.create({
18
19
  * container: appContainer,
19
20
  * postgres: { connectionString: 'postgres://…' }, couch: { url, user, password },
20
- * scrapAnything: { url, apiSecret }, monitor: { port: 3100 },
21
+ * scrapAnything: { url, apiSecret },
21
22
  * });
22
- * await scrapme.start(); // connects pg-boss (and starts the monitor)
23
+ * await scrapme.start(); // connects pg-boss
23
24
  * const runId = await scrapme.flow(titlesFlow, { url: 'https://…' }); // queues a run, starts this flow's worker
24
25
  * const run = await scrapme.waitFor(runId); // optional: wait for the end
25
26
  * await scrapme.stop();
@@ -37,7 +38,7 @@ export declare class Scrapme {
37
38
  private constructor();
38
39
  /** Checks the options (ConfigError); connects nothing yet. */
39
40
  static create(options: ScrapmeOptions): Scrapme;
40
- /** Connect pg-boss (it creates its tables on the first start) and start the monitor. */
41
+ /** Connect pg-boss (it creates its tables on the first start). */
41
42
  start(options?: StartOptions): Promise<void>;
42
43
  /**
43
44
  * Queue a run of this flow with this input; returns its run id at once. The flow runs in a worker of any process
@@ -53,9 +54,7 @@ export declare class Scrapme {
53
54
  listRuns(limit?: number): Promise<FlowRunDoc[]>;
54
55
  /** Wait until the run succeeded or failed for good (polls CouchDB). Throws RunWaitTimeoutError. */
55
56
  waitFor(runId: string, options?: WaitOptions): Promise<FlowRunDoc>;
56
- /** The monitor's address (when `monitor` was given and start() ran). */
57
- get monitorUrl(): string | null;
58
- /** Stop the workers (running flows get the shutdown timeout), the queue connection and the monitor. */
57
+ /** Stop the workers (running flows get the shutdown timeout) and the queue connection. */
59
58
  stop(): Promise<void>;
60
59
  private requireStarted;
61
60
  private store;
@@ -17,14 +17,15 @@ export class RunWaitTimeoutError extends Error {
17
17
  }
18
18
  }
19
19
  /**
20
- * Runs flows on pg-boss queues: every run is a job, retried by pg-boss; its progress is in CouchDB and on the monitor.
20
+ * Runs flows on pg-boss queues: every run is a job, retried by pg-boss; its progress is in CouchDB (the separate
21
+ * scrapme monitor app shows it).
21
22
  *
22
23
  * const scrapme = Scrapme.create({
23
24
  * container: appContainer,
24
25
  * postgres: { connectionString: 'postgres://…' }, couch: { url, user, password },
25
- * scrapAnything: { url, apiSecret }, monitor: { port: 3100 },
26
+ * scrapAnything: { url, apiSecret },
26
27
  * });
27
- * await scrapme.start(); // connects pg-boss (and starts the monitor)
28
+ * await scrapme.start(); // connects pg-boss
28
29
  * const runId = await scrapme.flow(titlesFlow, { url: 'https://…' }); // queues a run, starts this flow's worker
29
30
  * const run = await scrapme.waitFor(runId); // optional: wait for the end
30
31
  * await scrapme.stop();
@@ -50,14 +51,12 @@ export class Scrapme {
50
51
  const config = ConfigBuilder.build(services);
51
52
  return new Scrapme(ContainerBuilder.build(config, container), config);
52
53
  }
53
- /** Connect pg-boss (it creates its tables on the first start) and start the monitor. */
54
+ /** Connect pg-boss (it creates its tables on the first start). */
54
55
  async start(options = {}) {
55
56
  if (this.started)
56
57
  return;
57
58
  this.worker = options.worker ?? true;
58
59
  await this.container.get(TYPES.FlowQueue).start();
59
- if (this.config.monitor)
60
- await this.container.get(TYPES.MonitorServer).start();
61
60
  this.started = true;
62
61
  }
63
62
  /**
@@ -114,18 +113,12 @@ export class Scrapme {
114
113
  await Timing.sleep(Math.min(options.pollIntervalMs ?? Scrapme.DEFAULT_POLL_MS, left));
115
114
  }
116
115
  }
117
- /** The monitor's address (when `monitor` was given and start() ran). */
118
- get monitorUrl() {
119
- return this.config.monitor && this.started ? this.container.get(TYPES.MonitorServer).url : null;
120
- }
121
- /** Stop the workers (running flows get the shutdown timeout), the queue connection and the monitor. */
116
+ /** Stop the workers (running flows get the shutdown timeout) and the queue connection. */
122
117
  async stop() {
123
118
  if (!this.started)
124
119
  return;
125
120
  this.started = false;
126
121
  this.workers.clear();
127
- if (this.config.monitor)
128
- await this.container.get(TYPES.MonitorServer).stop();
129
122
  await this.container.get(TYPES.FlowQueue).stop();
130
123
  await this.container.get(TYPES.ErrorReporter).close();
131
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scrapme.js","sourceRoot":"","sources":["../../src/scrapme.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scrapme.js","sourceRoot":"","sources":["../../src/scrapme.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import type { Container } from 'inversify';
2
2
  import type { ServiceOptions } from './config/config.models.js';
3
3
  /**
4
4
  * What Scrapme.create needs: the app's container and the services scrapme connects to (postgres and couch required;
5
- * scrapAnything, mail, lighty, monitor when used — see ServiceOptions). scrapme reads no environment variables:
5
+ * scrapAnything, mail, lighty when used — see ServiceOptions). scrapme reads no environment variables:
6
6
  * the app passes everything. Flows are not registered here — pass them to scrapme.flow().
7
7
  */
8
8
  export interface ScrapmeOptions extends ServiceOptions {
@@ -1,5 +1,5 @@
1
1
  import type { CouchConfig } from '../config/config.models.js';
2
- import { type CouchDatabases, type FlowRunDoc, type RunStore } from './storage.models.js';
2
+ import type { CouchDatabases, FlowRunDoc, RunStore } from './storage.models.js';
3
3
  /** RunStore in couch.runsDb: one `run:<id>` document per run. Errors are thrown. */
4
4
  export declare class CouchRunStore implements RunStore {
5
5
  private readonly config;
@@ -11,7 +11,5 @@ export declare class CouchRunStore implements RunStore {
11
11
  update(runId: string, change: (doc: FlowRunDoc) => void): Promise<FlowRunDoc>;
12
12
  /** Newest first; documents in another format (written by an older scrapme) are skipped. */
13
13
  list(limit: number): Promise<FlowRunDoc[]>;
14
- /** A run document this version can read (older scrapme versions wrote run:<id> documents of another shape). */
15
- static isRunDoc(doc: Partial<FlowRunDoc>): doc is FlowRunDoc;
16
14
  private db;
17
15
  }
@@ -7,13 +7,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __param = (this && this.__param) || function (paramIndex, decorator) {
8
8
  return function (target, key) { decorator(target, key, paramIndex); }
9
9
  };
10
- var CouchRunStore_1;
11
10
  import { inject, injectable } from 'inversify';
12
11
  import { TYPES } from '../di/types.js';
13
12
  import { RunDocIds } from './run-doc-ids.js';
14
- import { DOC_TYPE } from './storage.models.js';
15
13
  /** RunStore in couch.runsDb: one `run:<id>` document per run. Errors are thrown. */
16
- let CouchRunStore = CouchRunStore_1 = class CouchRunStore {
14
+ let CouchRunStore = class CouchRunStore {
17
15
  config;
18
16
  couch;
19
17
  constructor(config, couch) {
@@ -26,7 +24,7 @@ let CouchRunStore = CouchRunStore_1 = class CouchRunStore {
26
24
  /** null also for a document in another format (written by an older scrapme). */
27
25
  async get(runId) {
28
26
  const doc = await this.db().get(RunDocIds.run(runId));
29
- return doc && CouchRunStore_1.isRunDoc(doc) ? doc : null;
27
+ return RunDocIds.isRunDoc(doc) ? doc : null;
30
28
  }
31
29
  async update(runId, change) {
32
30
  const updated = await this.db().update(RunDocIds.run(runId), (doc) => {
@@ -39,17 +37,13 @@ let CouchRunStore = CouchRunStore_1 = class CouchRunStore {
39
37
  }
40
38
  /** Newest first; documents in another format (written by an older scrapme) are skipped. */
41
39
  async list(limit) {
42
- return (await this.db().byPrefix(RunDocIds.RUN_PREFIX, limit, true)).filter((d) => CouchRunStore_1.isRunDoc(d));
43
- }
44
- /** A run document this version can read (older scrapme versions wrote run:<id> documents of another shape). */
45
- static isRunDoc(doc) {
46
- return doc.type === DOC_TYPE.FLOW_RUN && typeof doc.runId === 'string' && Array.isArray(doc.steps) && Array.isArray(doc.flowAttempts) && doc.steps.every((s) => Array.isArray(s?.attempts));
40
+ return (await this.db().byPrefix(RunDocIds.RUN_PREFIX, limit, true)).filter((d) => RunDocIds.isRunDoc(d));
47
41
  }
48
42
  db() {
49
43
  return this.couch.database(this.config.runsDb);
50
44
  }
51
45
  };
52
- CouchRunStore = CouchRunStore_1 = __decorate([
46
+ CouchRunStore = __decorate([
53
47
  injectable(),
54
48
  __param(0, inject(TYPES.CouchConfig)),
55
49
  __param(1, inject(TYPES.CouchConnection))
@@ -1 +1 @@
1
- {"version":3,"file":"couch-run-store.js","sourceRoot":"","sources":["../../../src/storage/couch-run-store.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAA8E,MAAM,qBAAqB,CAAC;AAE3H,oFAAoF;AAE7E,IAAM,aAAa,qBAAnB,MAAM,aAAa;IAEsB;IACI;IAFlD,YAC8C,MAAmB,EACf,KAAqB;QADzB,WAAM,GAAN,MAAM,CAAa;QACf,UAAK,GAAL,KAAK,CAAgB;IACpE,CAAC;IAEG,KAAK,CAAC,MAAM,CAAC,GAAe;QACjC,MAAM,IAAI,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,gFAAgF;IACzE,KAAK,CAAC,GAAG,CAAC,KAAa;QAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,CAAa,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,OAAO,GAAG,IAAI,eAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,MAAiC;QAClE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,EAAE,CAAC,MAAM,CAAa,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;YAC/E,MAAM,CAAC,GAAG,CAAC,CAAC;YACZ,GAAG,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,iBAAiB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACjF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,2FAA2F;IACpF,KAAK,CAAC,IAAI,CAAC,KAAa;QAC7B,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAa,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5H,CAAC;IAED,+GAA+G;IACxG,MAAM,CAAC,QAAQ,CAAC,GAAwB;QAC7C,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9L,CAAC;IAEO,EAAE;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;CACF,CAAA;AAtCY,aAAa;IADzB,UAAU,EAAE;IAGR,WAAA,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IACzB,WAAA,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;GAHrB,aAAa,CAsCzB"}
1
+ {"version":3,"file":"couch-run-store.js","sourceRoot":"","sources":["../../../src/storage/couch-run-store.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,oFAAoF;AAE7E,IAAM,aAAa,GAAnB,MAAM,aAAa;IAEsB;IACI;IAFlD,YAC8C,MAAmB,EACf,KAAqB;QADzB,WAAM,GAAN,MAAM,CAAa;QACf,UAAK,GAAL,KAAK,CAAgB;IACpE,CAAC;IAEG,KAAK,CAAC,MAAM,CAAC,GAAe;QACjC,MAAM,IAAI,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,gFAAgF;IACzE,KAAK,CAAC,GAAG,CAAC,KAAa;QAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,CAAa,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,OAAO,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,MAAiC;QAClE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,EAAE,CAAC,MAAM,CAAa,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;YAC/E,MAAM,CAAC,GAAG,CAAC,CAAC;YACZ,GAAG,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,iBAAiB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACjF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,2FAA2F;IACpF,KAAK,CAAC,IAAI,CAAC,KAAa;QAC7B,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAa,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACxH,CAAC;IAGO,EAAE;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;CACF,CAAA;AAlCY,aAAa;IADzB,UAAU,EAAE;IAGR,WAAA,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IACzB,WAAA,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;GAHrB,aAAa,CAkCzB"}
@@ -1,6 +1,9 @@
1
- /** Ids of the documents in couch.runsDb. Run ids are UUIDv7 and sort by creation time, so do the run docs. */
1
+ import { type FlowRunDoc } from './storage.models.js';
2
+ /** Ids of the run documents in couch.runsDb. Run ids are UUIDv7 and sort by creation time, so do the run docs. */
2
3
  export declare class RunDocIds {
3
4
  static readonly RUN_PREFIX = "run:";
4
5
  /** `run:<runId>` */
5
6
  static run(runId: string): string;
7
+ /** A run document this version can read (older scrapme versions wrote run:<id> documents of another shape). */
8
+ static isRunDoc(doc: unknown): doc is FlowRunDoc;
6
9
  }
@@ -1,9 +1,15 @@
1
- /** Ids of the documents in couch.runsDb. Run ids are UUIDv7 and sort by creation time, so do the run docs. */
1
+ import { DOC_TYPE } from './storage.models.js';
2
+ /** Ids of the run documents in couch.runsDb. Run ids are UUIDv7 and sort by creation time, so do the run docs. */
2
3
  export class RunDocIds {
3
4
  static RUN_PREFIX = 'run:';
4
5
  /** `run:<runId>` */
5
6
  static run(runId) {
6
7
  return RunDocIds.RUN_PREFIX + runId;
7
8
  }
9
+ /** A run document this version can read (older scrapme versions wrote run:<id> documents of another shape). */
10
+ static isRunDoc(doc) {
11
+ const d = doc;
12
+ return !!d && d.type === DOC_TYPE.FLOW_RUN && typeof d.runId === 'string' && Array.isArray(d.steps) && Array.isArray(d.flowAttempts) && d.steps.every((s) => Array.isArray(s?.attempts));
13
+ }
8
14
  }
9
15
  //# sourceMappingURL=run-doc-ids.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-doc-ids.js","sourceRoot":"","sources":["../../../src/storage/run-doc-ids.ts"],"names":[],"mappings":"AAAA,8GAA8G;AAC9G,MAAM,OAAO,SAAS;IACb,MAAM,CAAU,UAAU,GAAG,MAAM,CAAC;IAE3C,oBAAoB;IACb,MAAM,CAAC,GAAG,CAAC,KAAa;QAC7B,OAAO,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC;IACtC,CAAC"}
1
+ {"version":3,"file":"run-doc-ids.js","sourceRoot":"","sources":["../../../src/storage/run-doc-ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAmB,MAAM,qBAAqB,CAAC;AAEhE,kHAAkH;AAClH,MAAM,OAAO,SAAS;IACb,MAAM,CAAU,UAAU,GAAG,MAAM,CAAC;IAE3C,oBAAoB;IACb,MAAM,CAAC,GAAG,CAAC,KAAa;QAC7B,OAAO,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC;IACtC,CAAC;IAED,+GAA+G;IACxG,MAAM,CAAC,QAAQ,CAAC,GAAY;QACjC,MAAM,CAAC,GAAG,GAAiC,CAAC;QAC5C,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC3L,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "scrapme-flow",
3
- "version": "0.1.0",
4
- "description": "Scraping flows of injectable commands (retries + timeout each), defined in TypeScript, run on pg-boss queues (Postgres), progress in CouchDB, with a Svelte monitoring dashboard. Scrapes through scrap-anything.",
3
+ "version": "0.2.0",
4
+ "description": "Scraping flows of injectable commands (retries + timeout each), defined in TypeScript, run on pg-boss queues (Postgres), progress in CouchDB. Scrapes through scrap-anything. The monitor is a separate app.",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
7
7
  "types": "./dist/src/index.d.ts",
@@ -10,27 +10,29 @@
10
10
  "types": "./dist/src/index.d.ts",
11
11
  "import": "./dist/src/index.js"
12
12
  },
13
+ "./models": {
14
+ "types": "./dist/src/models.d.ts",
15
+ "import": "./dist/src/models.js"
16
+ },
13
17
  "./package.json": "./package.json"
14
18
  },
15
19
  "engines": {
16
20
  "node": ">=26"
17
21
  },
18
22
  "scripts": {
19
- "build": "tsc -p tsconfig.build.json && npm run build:dashboard",
20
- "build:dashboard": "vite build --config dashboard/vite.config.ts",
21
- "dashboard:dev": "vite --config dashboard/vite.config.ts",
23
+ "build": "tsc -p tsconfig.build.json",
22
24
  "typecheck": "tsc -p tsconfig.json --noEmit",
23
25
  "test": "node --import tsx --test \"src/**/*.test.ts\"",
24
26
  "test:file": "node --import tsx --test",
25
27
  "prepublishOnly": "npm run typecheck && npm test && npm run build",
26
- "monitor": "bash scripts/monitor.sh",
27
- "up": "bash scripts/up.sh",
28
- "down": "bash scripts/up.sh down",
29
28
  "example:hello": "bash scripts/example.sh hello",
30
29
  "example:biznesradar": "bash scripts/example.sh biznesradar",
31
30
  "deps:up": "bash scripts/deps.sh",
32
31
  "deps:down": "bash scripts/deps.sh down",
33
- "selftest": "bash selftest.sh"
32
+ "selftest": "bash selftest.sh",
33
+ "monitor": "bash scripts/monitor.sh",
34
+ "up": "bash scripts/up.sh",
35
+ "down": "bash scripts/up.sh down"
34
36
  },
35
37
  "dependencies": {
36
38
  "cheerio": "^1.1.0",
@@ -43,15 +45,12 @@
43
45
  "zod": "^4.1.0"
44
46
  },
45
47
  "devDependencies": {
46
- "@sveltejs/vite-plugin-svelte": "^6.1.0",
47
48
  "@types/node": "^26.2.0",
48
49
  "@types/nodemailer": "^6.4.17 || ^7.0.0",
49
50
  "inversify": "^7.0.0",
50
51
  "reflect-metadata": "^0.2.2",
51
- "svelte": "^5.38.0",
52
52
  "tsx": "^4.20.0",
53
- "typescript": "^6.0.3",
54
- "vite": "^7.1.0"
53
+ "typescript": "^6.0.3"
55
54
  },
56
55
  "peerDependencies": {
57
56
  "inversify": "^7.0.0",
@@ -72,7 +71,6 @@
72
71
  "dist/src",
73
72
  "!dist/src/**/*.test.*",
74
73
  "!dist/src/testing",
75
- "dashboard/dist",
76
74
  "README.md",
77
75
  "LICENSE"
78
76
  ]
@@ -1 +0,0 @@
1
- .badge.svelte-1hfd60x{display:inline-block;padding:1px 8px;border-radius:999px;font-size:12px;font-weight:600;text-transform:lowercase;white-space:nowrap}.ok.svelte-1hfd60x{background:var(--ok-bg);color:var(--ok)}.fail.svelte-1hfd60x{background:var(--fail-bg);color:var(--fail)}.run.svelte-1hfd60x{background:var(--run-bg);color:var(--run)}.wait.svelte-1hfd60x{background:var(--wait-bg);color:var(--wait)}.idle.svelte-1hfd60x{background:var(--idle-bg);color:var(--idle)}.pulse.svelte-1hfd60x{animation:svelte-1hfd60x-pulse 1.4s ease-in-out infinite}@keyframes svelte-1hfd60x-pulse{50%{opacity:.55}}.head.svelte-hcc72y{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap}h2.svelte-hcc72y{margin:0 0 4px;display:flex;gap:10px;align-items:center}h3.svelte-hcc72y{margin:22px 0 8px;font-size:14px}dl.svelte-hcc72y{display:flex;gap:18px;margin:0}dt.svelte-hcc72y{color:var(--muted);font-size:12px}dd.svelte-hcc72y{margin:0;font-weight:600}.muted.svelte-hcc72y{color:var(--muted);font-weight:400}.fail.svelte-hcc72y{color:var(--fail)}.error-box.svelte-hcc72y{background:var(--fail-bg);color:var(--fail);padding:10px 12px;border-radius:8px;margin:14px 0 0}.pipeline.svelte-hcc72y{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px 0}.pipeline.svelte-hcc72y li:where(.svelte-hcc72y){display:flex;align-items:center}.pipeline.svelte-hcc72y li:where(.svelte-hcc72y)+li:where(.svelte-hcc72y):before{content:"→";color:var(--muted);padding:0 8px}.step.svelte-hcc72y{display:grid;grid-template-columns:auto 1fr;gap:2px 8px;min-width:170px;padding:10px 12px;background:var(--panel);border:1px solid var(--line);border-top:4px solid var(--idle);border-radius:8px;text-align:left;cursor:pointer}.step.open.svelte-hcc72y{box-shadow:0 0 0 2px var(--accent)}.step.ok.svelte-hcc72y{border-top-color:var(--ok)}.step.fail.svelte-hcc72y{border-top-color:var(--fail)}.step.run.svelte-hcc72y{border-top-color:var(--run)}.step.wait.svelte-hcc72y{border-top-color:var(--wait)}.n.svelte-hcc72y{grid-row:span 2;color:var(--muted);font-weight:700}.name.svelte-hcc72y{font-weight:600}.cmd.svelte-hcc72y{color:var(--muted);font-size:12px;font-family:var(--mono)}.meta.svelte-hcc72y{grid-column:1 / -1;display:flex;gap:8px;align-items:center;color:var(--muted);font-size:12px;margin-top:4px}table.svelte-hcc72y{width:100%;border-collapse:collapse;background:var(--panel);border:1px solid var(--line);border-radius:8px}th.svelte-hcc72y,td.svelte-hcc72y{padding:6px 10px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}th.svelte-hcc72y{color:var(--muted);font-weight:500;font-size:12px}.err.svelte-hcc72y{color:var(--fail);max-width:520px;overflow-wrap:anywhere}details.svelte-hcc72y{margin-top:14px}pre.svelte-hcc72y{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:10px;overflow:auto;max-height:320px}.dots.svelte-wkwx94{display:inline-flex;gap:4px;align-items:center}.dot.svelte-wkwx94{width:10px;height:10px;border-radius:50%;background:var(--idle-bg);border:1px solid var(--line)}.ok.svelte-wkwx94{background:var(--ok);border-color:var(--ok)}.fail.svelte-wkwx94{background:var(--fail);border-color:var(--fail)}.run.svelte-wkwx94{background:var(--run);border-color:var(--run);animation:svelte-wkwx94-pulse 1.2s infinite}.wait.svelte-wkwx94{background:var(--wait);border-color:var(--wait)}@keyframes svelte-wkwx94-pulse{50%{transform:scale(.7)}}.runs.svelte-l5tdp5{list-style:none;margin:0;padding:0}li.svelte-l5tdp5+li:where(.svelte-l5tdp5){border-top:1px solid var(--line)}button.svelte-l5tdp5{display:grid;gap:4px;width:100%;padding:10px 14px;text-align:left;background:none;border:0;border-left:3px solid transparent;cursor:pointer}button.svelte-l5tdp5:hover{background:var(--bg)}button.selected.svelte-l5tdp5{background:var(--bg);border-left-color:var(--accent)}.top.svelte-l5tdp5,.mid.svelte-l5tdp5,.bottom.svelte-l5tdp5{display:flex;gap:10px;align-items:center}.top.svelte-l5tdp5{justify-content:space-between}.bottom.svelte-l5tdp5{color:var(--muted);font-size:12px}.mid.svelte-l5tdp5 code:where(.svelte-l5tdp5){color:var(--muted)}.error.svelte-l5tdp5{color:var(--fail);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty.svelte-l5tdp5{padding:24px 14px;color:var(--muted)}header.svelte-d3ct2b{display:flex;flex-wrap:wrap;gap:12px 24px;align-items:center;padding:12px 20px;background:var(--panel);border-bottom:1px solid var(--line)}h1.svelte-d3ct2b{margin:0;font-size:18px}h1.svelte-d3ct2b span:where(.svelte-d3ct2b){color:var(--muted);font-weight:400}.counts.svelte-d3ct2b{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.count.svelte-d3ct2b{border:1px solid var(--line);background:var(--bg);border-radius:999px;padding:2px 10px;cursor:pointer}.count.active.svelte-d3ct2b{outline:2px solid var(--accent)}.count.ok.svelte-d3ct2b strong:where(.svelte-d3ct2b){color:var(--ok)}.count.fail.svelte-d3ct2b strong:where(.svelte-d3ct2b){color:var(--fail)}.count.run.svelte-d3ct2b strong:where(.svelte-d3ct2b){color:var(--run)}.count.wait.svelte-d3ct2b strong:where(.svelte-d3ct2b){color:var(--wait)}a.svelte-d3ct2b{color:var(--accent);font-size:12px}main.svelte-d3ct2b{display:grid;grid-template-columns:minmax(280px,380px) 1fr;min-height:calc(100vh - 58px)}aside.svelte-d3ct2b{background:var(--panel);border-right:1px solid var(--line);overflow-y:auto}.filters.svelte-d3ct2b{padding:10px 14px;border-bottom:1px solid var(--line)}select.svelte-d3ct2b{width:100%;padding:4px 6px;border:1px solid var(--line);border-radius:6px;background:var(--bg)}.detail.svelte-d3ct2b{padding:18px 24px;overflow-x:auto}.muted.svelte-d3ct2b{color:var(--muted)}.error.svelte-d3ct2b{margin:0;padding:8px 20px;background:var(--fail-bg);color:var(--fail)}@media(max-width:800px){main.svelte-d3ct2b{grid-template-columns:1fr}aside.svelte-d3ct2b{border-right:0;border-bottom:1px solid var(--line);max-height:40vh}}:root{--bg: #f6f7f9;--panel: #ffffff;--text: #1c2330;--muted: #687385;--line: #e3e7ed;--accent: #3b82f6;--ok: #16a34a;--ok-bg: #dcfce7;--fail: #dc2626;--fail-bg: #fee2e2;--run: #2563eb;--run-bg: #dbeafe;--wait: #d97706;--wait-bg: #fef3c7;--idle: #9aa4b2;--idle-bg: #eef1f5;--mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;color-scheme:light dark}@media(prefers-color-scheme:dark){:root{--bg: #0f1318;--panel: #171c23;--text: #e6eaf0;--muted: #8b96a6;--line: #262d37;--ok-bg: #12351f;--fail-bg: #3b1515;--run-bg: #132a4d;--wait-bg: #3a2a0c;--idle-bg: #222934}}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}button,select,input{font:inherit;color:inherit}code,pre{font-family:var(--mono);font-size:12.5px}
@@ -1,2 +0,0 @@
1
- (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))n(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const l of i.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&n(l)}).observe(document,{childList:!0,subtree:!0});function r(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function n(s){if(s.ep)return;s.ep=!0;const i=r(s);fetch(s.href,i)}})();const Dr=!1;var Ft=Array.isArray,Rn=Array.prototype.indexOf,gt=Array.prototype.includes,Ht=Array.from,Lr=Object.defineProperty,vt=Object.getOwnPropertyDescriptor,In=Object.getOwnPropertyDescriptors,Cn=Object.prototype,Dn=Array.prototype,Ur=Object.getPrototypeOf,wr=Object.isExtensible;const Ln=()=>{};function Un(e){for(var t=0;t<e.length;t++)e[t]()}function Pr(){var e,t,r=new Promise((n,s)=>{e=n,t=s});return{promise:r,resolve:e,reject:t}}const J=2,Je=4,jt=8,Fr=1<<24,de=16,pe=32,Le=64,Jt=128,lr=256,_e=512,B=1024,F=2048,fe=4096,ee=8192,W=16384,rt=32768,Rt=1<<25,Ze=65536,It=1<<17,Pn=1<<18,nt=1<<19,Fn=1<<20,Ee=1<<25,Ct=1<<21,We=1<<22,De=1<<23,ht=Symbol("$state"),Hr=Symbol("component"),Hn=Symbol(""),jr=Symbol("attributes"),Zt=Symbol("class"),jn=Symbol("style"),$t=Symbol("text"),Mt=Symbol("form reset"),yt=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},qn=1,Bn=2,qr=4,Yn=8,Gn=16,zn=1,Vn=2,Br={},q=Symbol("uninitialized"),Kn="http://www.w3.org/1999/xhtml";function Qn(){console.warn("https://svelte.dev/e/derived_inert")}function Wn(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Xn(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function Yr(e){return e===this.v}function Jn(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function Gr(e){return!Jn(e,this.v)}function zr(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function Zn(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function $n(e,t,r){throw new Error("https://svelte.dev/e/each_key_duplicate")}function es(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function ts(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function rs(e){throw new Error("https://svelte.dev/e/effect_orphan")}function ns(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function ss(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function is(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function ls(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function as(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}let os=!1,X=null;function $e(e){X=e}function st(e,t=!1,r){X={p:X,i:!1,c:null,e:null,s:e,x:null,r:A,l:null}}function it(e){var t=X,r=t.e;if(r!==null){t.e=null;for(var n of r)cn(n)}return t.i=!0,X=t.p,Vr(e)}function Vr(e={}){return Lr(e,Hr,{value:!0}),e}function Kr(){return!0}let Qe=[];function us(){var e=Qe;Qe=[],Un(e)}function Ce(e){if(Qe.length===0){var t=Qe;queueMicrotask(()=>{t===Qe&&us()})}Qe.push(e)}const fs=-7169;function P(e,t){e.f=e.f&fs|t}function ar(e){(e.f&_e)!==0||e.deps===null?P(e,B):P(e,fe)}function Qr(e,t,r){(e.f&F)!==0?t.add(e):(e.f&fe)!==0&&r.add(e),P(e,B)}let yr=!1;function cs(){yr||(yr=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t[Mt]?.()})},{capture:!0}))}function bt(e){var t=S,r=A;ce(null),Te(null);try{return e()}finally{ce(t),Te(r)}}function ds(e,t,r,n=r){e.addEventListener(t,()=>bt(r));const s=e[Mt];s?e[Mt]=()=>{s(),n(!0)}:e[Mt]=()=>n(!0),cs()}function vs(e,t,r,n){const s=or;var i=e.filter(d=>!d.settled),l=t.map(s);if(r.length===0&&i.length===0){n(l);return}var a=A,o=hs(),u=i.length===1?i[0].promise:i.length>1?Promise.all(i.map(d=>d.promise)):null;function f(d){if((a.f&W)===0){o();try{n([...l,...d])}catch(p){ye(p,a)}Dt()}}var c=Wr();if(r.length===0){u.then(()=>f([])).finally(c);return}function h(){Promise.all(r.map(d=>_s(d))).then(f).catch(d=>ye(d,a)).finally(c)}u?u.then(()=>{if((a.f&W)!==0){c();return}o(),h(),Dt()}):h()}function hs(){var e=A,t=S,r=X,n=E;return function(i=!0){Te(e),ce(t),$e(r),i&&(e.f&W)===0&&(n?.activate(),n?.apply())}}function Dt(e=!0){Te(null),ce(null),$e(null),e&&E?.deactivate()}function Wr(){var e=A,t=e.b,r=E,n=!!t?.is_rendered();return t?.update_pending_count(1,r),r.increment(n,e),()=>{t?.update_pending_count(-1,r),r.decrement(n,e)}}function or(e){var t=J|F;return A!==null&&(A.f|=nt),{ctx:X,deps:null,effects:null,equals:Yr,f:t,fn:e,reactions:null,rv:0,v:q,wv:0,parent:A,ac:null}}const ft=Symbol("obsolete");function _s(e,t,r){let n=A;n===null&&Zn();var s=void 0,i=ze(q),l=!S,a=new Set;return Is(()=>{var o=A,u=Pr();s=u.promise;try{Promise.resolve(e()).then(u.resolve,d=>{d!==yt&&u.reject(d)}).finally(Dt)}catch(d){u.reject(d),Dt()}var f=E;if(l){if((o.f&rt)!==0)var c=Wr();if(n.b?.is_rendered())f.async_deriveds.get(o)?.reject(ft);else for(const d of a.values())d.reject(ft);a.add(u),f.async_deriveds.set(o,u)}const h=(d,p=void 0)=>{c?.(),a.delete(u),p!==ft&&(f.activate(),p?(i.f|=De,et(i,p)):((i.f&De)!==0&&(i.f^=De),et(i,d)),f.deactivate())};u.promise.then(h,d=>h(null,d||"unknown"))}),fn(()=>{for(const o of a)o.reject(ft)}),new Promise(o=>{function u(f){function c(){f===s?o(i):u(s)}f.then(c,c)}u(s)})}function Xr(e){const t=or(e);return pn(t),t}function ps(e){const t=or(e);return t.equals=Gr,t}function gs(e){var t=e.effects;if(t!==null){e.effects=null;for(var r=0;r<t.length;r+=1)ne(t[r])}}function ur(e){var t,r=A,n=e.parent;if(!Pe&&n!==null&&e.v!==q&&(n.f&(W|ee))!==0)return Qn(),e.v;Te(n);try{gs(e),t=yn(e)}finally{Te(r)}return t}function Jr(e){var t=ur(e);if(!e.equals(t)&&(e.wv=mn(),(!E?.is_fork||e.deps===null)&&(E!==null?(E.capture(e,t,!0),er?.capture(e,t,!0)):e.v=t,e.deps===null))){P(e,B);return}Pe||(ve!==null?(dr()||E?.is_fork)&&ve.set(e,t):ar(e))}function ms(e){if(e.effects!==null)for(const t of e.effects)(t.teardown||t.ac)&&(t.teardown?.(),t.ac!==null&&bt(()=>{t.ac.abort(yt),t.ac=null}),t.fn!==null&&(t.teardown=Ln),wt(t,0),hr(t))}function Zr(e){if(e.effects!==null)for(const t of e.effects)t.teardown&&t.fn!==null&&tt(t)}let Kt=null,Ve=null,E=null,er=null,ve=null,tr=null,Qt=!1,_t=null,Ot=null;var br=0;let ws=1;class Ue{id=ws++;#t=!1;linked=!0;#l=null;#e=null;async_deriveds=new Map;current=new Map;previous=new Map;#o=new Set;#n=new Set;#i=0;#r=new Map;#a=null;#s=[];#p=[];#u=new Set;#f=new Set;#d=new Map;#g=new Set;is_fork=!1;#c=!1;constructor(){Ve===null?Kt=Ve=this:(Ve.#e=this,this.#l=Ve),Ve=this}#b(){if(this.is_fork)return!0;for(const n of this.#r.keys()){for(var t=n,r=!1;t.parent!==null;){if(this.#d.has(t)){r=!0;break}t=t.parent}if(!r)return!0}return!1}skip_effect(t){this.#d.has(t)||this.#d.set(t,{d:[],m:[]}),this.#g.delete(t)}unskip_effect(t,r=n=>this.schedule(n)){var n=this.#d.get(t);if(n){this.#d.delete(t);for(var s of n.d)P(s,F),r(s);for(s of n.m)P(s,fe),r(s)}this.#g.add(t)}#E(){var t=[];for(const i of this.#s)if(!((i.f&W)!==0||(i.f&(F|fe))===0)){for(var r=i,n=!1;r.parent!==null;){r=r.parent;var s=r.f;if((s&(Le|pe))!==0){if((s&B)===0){n=!0;break}r.f^=B}}n||t.push(r)}return this.#s=[],t}#m(){this.#t=!0;for(const a of this.#u)this.#f.delete(a),P(a,F),this.schedule(a);for(const a of this.#f)P(a,fe),this.schedule(a);this.apply();for(var t=_t=[],r=[],n=Ot=[];this.#s.length>0;){br++>1e3&&(this.#_(),ys());for(const a of this.#E())try{this.#w(a,t,r)}catch(o){throw tn(a),this.#b()||this.discard(),o}}if(E=null,n.length>0){var s=Ue.ensure();for(const a of n)s.schedule(a)}if(_t=null,Ot=null,this.#b()){this.#h(r),this.#h(t);for(const[a,o]of this.#d)en(a,o);n.length>0&&E.#m();return}const i=this.#v();if(i){this.#h(r),this.#h(t),i.#S(this);return}this.#u.clear(),this.#f.clear();for(const a of this.#o)a(this);this.#o.clear(),er=this,Er(r),Er(t),er=null,this.#a?.resolve();var l=E;if(this.#i===0&&(this.#s.length===0||l!==null)&&this.#_(),this.#s.length>0)if(l!==null){for(const a of this.#s)l.#s.push(a);this.#s=[]}else l=this;l!==null&&(Se.clear(),l.#m())}#w(t,r,n){t.f^=B;for(var s=t.first;s!==null;){var i=s.f,l=(i&(pe|Le))!==0,a=l&&(i&B)!==0,o=a||(i&ee)!==0||this.#d.has(s);if(!o&&s.fn!==null){l?s.f^=B:(i&Je)!==0?r.push(s):St(s)&&((i&de)!==0&&this.#f.add(s),tt(s));var u=s.first;if(u!==null){s=u;continue}}for(;s!==null;){var f=s.next;if(f!==null){s=f;break}s=s.parent}}}#v(){for(var t=this.#l;t!==null;){if(!t.is_fork){for(const[r,[,n]]of this.current)if(t.current.has(r)&&!n)return t}t=t.#l}return null}#S(t){for(const[n,s]of t.current)!this.previous.has(n)&&t.previous.has(n)&&this.previous.set(n,t.previous.get(n)),this.current.set(n,s);for(const[n,s]of t.async_deriveds){const i=this.async_deriveds.get(n);i&&s.promise.then(i.resolve).catch(i.reject)}t.async_deriveds.clear(),this.transfer_effects(t.#u,t.#f);const r=n=>{var s=n.reactions;if(s!==null&&!((n.f&J)!==0&&(n.f&(F|fe))===0))for(const a of s){var i=a.f;if((i&J)!==0)r(a);else{var l=a;i&(We|de)&&!this.async_deriveds.has(l)&&(this.#f.delete(l),P(l,F),this.schedule(l))}}};for(const n of this.current.keys())r(n);this.oncommit(()=>t.discard()),t.#_(),E=this,this.#m()}#h(t){for(var r=0;r<t.length;r+=1)Qr(t[r],this.#u,this.#f)}capture(t,r,n=!1){t.v!==q&&!this.previous.has(t)&&this.previous.set(t,t.v),(t.f&De)===0&&(this.current.set(t,[r,n]),ve?.set(t,r)),this.is_fork||(t.v=r)}activate(){E=this}deactivate(){E=null,ve=null}flush(){try{Qt=!0,E=this,this.#m()}finally{br=0,tr=null,_t=null,Ot=null,Qt=!1,E=null,ve=null,Se.clear()}}discard(){for(const t of this.#n)t(this);this.#n.clear();for(const t of this.async_deriveds.values())t.reject(ft);this.#_(),this.#a?.resolve()}register_created_effect(t){this.#p.push(t)}#y(){for(let c=Kt;c!==null;c=c.#e){var t=c.id<this.id,r=[];for(const[h,[d,p]]of this.current){if(c.current.has(h)){var n=c.current.get(h)[0];if(t&&d!==n)c.current.set(h,[d,p]);else continue}r.push(h)}if(t)for(const[h,d]of this.async_deriveds){const p=c.async_deriveds.get(h);p&&d.promise.then(p.resolve).catch(p.reject)}var s=[...c.current.keys()].filter(h=>!c.current.get(h)[1]);if(!(!c.#t||s.length===0)){var i=s.filter(h=>!this.current.has(h));if(i.length===0)t&&c.discard();else if(r.length>0){if(t)for(const h of this.#g)c.unskip_effect(h,d=>{(d.f&(de|We))!==0?c.schedule(d):c.#h([d])});c.activate();var l=new Set,a=new Map;for(var o of r)$r(o,i,l,a);a=new Map;var u=[...c.current].filter(([h,d])=>{const p=this.current.get(h);return p?p[0]!==d[0]||p[1]!==d[1]:!0}).map(([h])=>h);if(u.length>0)for(const h of this.#p)(h.f&(W|ee|It))===0&&fr(h,u,a)&&((h.f&(We|de))!==0?(P(h,F),c.schedule(h)):c.#u.add(h));if(c.#s.length>0&&!c.#c){c.apply();for(var f of c.#E())c.#w(f,[],[])}c.deactivate()}}}}increment(t,r){if(this.#i+=1,t){let n=this.#r.get(r)??0;this.#r.set(r,n+1)}}decrement(t,r){if(this.#i-=1,t){let n=this.#r.get(r)??0;n===1?this.#r.delete(r):this.#r.set(r,n-1)}this.#c||(this.#c=!0,Ce(()=>{this.#c=!1,this.linked&&this.flush()}))}transfer_effects(t,r){for(const n of t)this.#u.add(n);for(const n of r)this.#f.add(n);t.clear(),r.clear()}oncommit(t){this.#o.add(t)}ondiscard(t){this.#n.add(t)}settled(){return(this.#a??=Pr()).promise}static ensure(){if(E===null){const t=E=new Ue;Qt||Ce(()=>{t.#t||t.flush()})}return E}apply(){{ve=null;return}}schedule(t){if(tr=t,t.b?.is_pending&&(t.f&(Je|jt|Fr))!==0&&(t.f&rt)===0){t.b.defer_effect(t);return}this.#s.push(t)}#_(){if(this.linked){var t=this.#l,r=this.#e;t===null?Kt=r:t.#e=r,r===null?Ve=t:r.#l=t,this.linked=!1}}}function ys(){try{ns()}catch(e){ye(e,tr)}}let Ne=null;function Er(e){var t=e.length;if(t!==0){for(var r=0;r<t;){var n=e[r++];if((n.f&(W|ee))===0&&St(n)&&(Ne=new Set,tt(n),n.deps===null&&n.first===null&&n.nodes===null&&n.teardown===null&&n.ac===null&&vn(n),Ne?.size>0)){Se.clear();for(const s of Ne){if((s.f&(W|ee))!==0)continue;const i=[s];let l=s.parent;for(;l!==null;)Ne.has(l)&&(Ne.delete(l),i.push(l)),l=l.parent;for(let a=i.length-1;a>=0;a--){const o=i[a];(o.f&(W|ee))===0&&tt(o)}}Ne.clear()}}Ne=null}}function $r(e,t,r,n){if(!r.has(e)&&(r.add(e),e.reactions!==null))for(const s of e.reactions){const i=s.f;(i&J)!==0?$r(s,t,r,n):(i&(We|de))!==0&&(i&F)===0&&fr(s,t,n)&&(P(s,F),cr(s))}}function fr(e,t,r){const n=r.get(e);if(n!==void 0)return n;if(e.deps!==null)for(const s of e.deps){if(gt.call(t,s))return!0;if((s.f&J)!==0&&fr(s,t,r))return r.set(s,!0),!0}return r.set(e,!1),!1}function cr(e){E.schedule(e)}function en(e,t){if(!((e.f&pe)!==0&&(e.f&B)!==0)){(e.f&F)!==0?t.d.push(e):(e.f&fe)!==0&&t.m.push(e),P(e,B);for(var r=e.first;r!==null;)en(r,t),r=r.next}}function tn(e){P(e,B);for(var t=e.first;t!==null;)tn(t),t=t.next}let Lt=new Set;const Se=new Map;let rn=!1;function ze(e,t){var r={f:0,v:e,reactions:null,equals:Yr,rv:0,wv:0};return r}function Q(e,t){const r=ze(e);return pn(r),r}function bs(e,t=!1,r=!0){const n=ze(e);return t||(n.equals=Gr),n}function G(e,t,r=!1){S!==null&&(!he||(S.f&It)!==0)&&Kr()&&(S.f&(J|de|We|It))!==0&&(xe===null||!xe.has(e))&&ls();let n=r?He(t):t;return et(e,n,Ot)}var Fe=null,rr=0;function et(e,t,r=null){if(!e.equals(t)){Pe?Se.set(e,t):Se.has(e)||Se.set(e,e.v);var n=Ue.ensure();if(n.capture(e,t),(e.f&J)!==0){const s=e;(e.f&F)!==0&&ur(s),ve===null&&ar(s)}e.wv=mn(),Fe=null,rr=0,nn(e,F,r),Fe=null,A!==null&&(A.f&B)!==0&&(A.f&(pe|Le))===0&&(oe===null?Us([e]):oe.push(e)),!n.is_fork&&Lt.size>0&&!rn&&Es()}return t}function Es(){rn=!1;for(const e of Lt){(e.f&B)!==0&&P(e,fe);let t;try{t=St(e)}catch{t=!0}t&&tt(e)}Lt.clear()}function pt(e){G(e,e.v+1)}function nn(e,t,r){var n=e.reactions;if(n!==null){var s=n.length;if(rr+=s,rr>1e5&&Fe===null&&(Fe=new Set),Fe!==null){if(Fe.has(e))return;Fe.add(e)}for(var i=0;i<s;i++){var l=n[i],a=l.f,o=(a&F)===0;if(o&&P(l,t),(a&It)!==0)Lt.add(l);else if((a&J)!==0){var u=l;ve?.delete(u),nn(u,fe,r)}else if(o){var f=l;(a&de)!==0&&Ne!==null&&Ne.add(f),r!==null?r.push(f):cr(f)}}}}function He(e){if(typeof e!="object"||e===null||ht in e||Hr in e)return e;const t=Ur(e);if(t!==Cn&&t!==Dn)return e;var r=new Map,n=Ft(e),s=Q(0),i=Ye,l=a=>{if(Ye===i)return a();var o=S,u=Ye;ce(null),kr(i);var f=a();return ce(o),kr(u),f};return n&&r.set("length",Q(e.length)),new Proxy(e,{defineProperty(a,o,u){(!("value"in u)||u.configurable===!1||u.enumerable===!1||u.writable===!1)&&ss();var f=r.get(o);return f===void 0?l(()=>{var c=Q(u.value);return r.set(o,c),c}):G(f,u.value,!0),!0},deleteProperty(a,o){var u=r.get(o);if(u===void 0){if(o in a){const f=l(()=>Q(q));r.set(o,f),pt(s)}}else G(u,q),pt(s);return!0},get(a,o,u){if(o===ht)return e;var f=r.get(o),c=o in a;if(f===void 0&&(!c||vt(a,o)?.writable)&&(f=l(()=>{var d=He(c?a[o]:q),p=Q(d);return p}),r.set(o,f)),f!==void 0){var h=v(f);return h===q?void 0:h}return Reflect.get(a,o,u)},getOwnPropertyDescriptor(a,o){this.has?.(a,o);var u=Reflect.getOwnPropertyDescriptor(a,o),f=r.get(o);if(f!==void 0){var c=v(f);if(c===q)return;if(u&&"value"in u)u.value=c;else return{enumerable:!0,configurable:!0,value:c,writable:!0}}return u},has(a,o){if(o===ht)return!0;var u=r.get(o),f=u!==void 0&&u.v!==q||Reflect.has(a,o);if(u!==void 0||A!==null&&(!f||vt(a,o)?.writable)){u===void 0&&(u=l(()=>{var h=f?He(a[o]):q,d=Q(h);return d}),r.set(o,u));var c=v(u);if(c===q)return!1}return f},set(a,o,u,f){var c=r.get(o),h=o in a;if(n&&o==="length")for(var d=u;d<c.v;d+=1){var p=r.get(d+"");p!==void 0?G(p,q):d in a&&(p=l(()=>Q(q)),r.set(d+"",p))}if(c===void 0)(!h||vt(a,o)?.writable)&&(c=l(()=>Q(void 0)),G(c,He(u)),r.set(o,c));else{h=c.v!==q;var k=l(()=>He(u));G(c,k)}var _=Reflect.getOwnPropertyDescriptor(a,o);if(_?.set&&_.set.call(f,u),!h){if(n&&typeof o=="string"){var w=r.get("length"),O=Number(o);Number.isInteger(O)&&O>=w.v&&G(w,O+1)}pt(s)}return!0},ownKeys(a){v(s);var o=Reflect.ownKeys(a).filter(c=>{var h=r.get(c);return h===void 0||h.v!==q});for(var[u,f]of r)f.v!==q&&!(u in a)&&o.push(u);return o},setPrototypeOf(){is()}})}function Sr(e){try{if(e!==null&&typeof e=="object"&&ht in e)return e[ht]}catch{}return e}function sn(e,t){return Object.is(Sr(e),Sr(t))}var xr,ln,an,on;function Ss(){if(xr===void 0){xr=window,ln=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,r=Text.prototype;an=vt(t,"firstChild").get,on=vt(t,"nextSibling").get,wr(e)&&(e[Zt]=void 0,e[jr]=null,e[jn]=void 0,e.__e=void 0),wr(r)&&(r[$t]=void 0)}}function qe(e=""){return document.createTextNode(e)}function mt(e){return an.call(e)}function Et(e){return on.call(e)}function x(e,t){return mt(e)}function nr(e,t=!1){{var r=mt(e);return r instanceof Comment&&r.data===""?Et(r):r}}function T(e,t=!1){return mt(e)}function m(e,t=1,r=!1){let n=e;for(;t--;)n=Et(n);return n}function xs(e){e.textContent=""}function un(){return!1}function Ts(e,t,r){return r?document.createElement(e,{is:r}):document.createElement(e)}function ks(e){var t=A;if(t===null)return S.f|=De,e;if((t.f&rt)===0&&(t.f&Je)===0)throw e;ye(e,t)}function ye(e,t){if(e===Br)throw e;if(!(t!==null&&(t.f&W)!==0)){for(;t!==null;){if((t.f&Jt)!==0&&(t.f&(W|Rt))===0){if((t.f&rt)===0)throw e;try{t.b.error(e);return}catch(r){e=r}}t=t.parent}throw e}}function As(e){A===null&&(S===null&&rs(),ts()),Pe&&es()}function Ns(e,t){var r=t.last;r===null?t.last=t.first=e:(r.next=e,e.prev=r,t.last=e)}function Me(e,t){var r=A;r!==null&&(r.f&ee)!==0&&(e|=ee);var n={ctx:X,deps:null,nodes:null,f:e|F|_e,first:null,fn:t,last:null,next:null,parent:r,b:r&&r.b,prev:null,teardown:null,wv:0,ac:null};E?.register_created_effect(n);var s=n;if((e&Je)!==0)_t!==null?_t.push(n):Ue.ensure().schedule(n);else if(t!==null){try{tt(n)}catch(l){throw ne(n),l}s.deps===null&&s.teardown===null&&s.nodes===null&&s.first===s.last&&(s.f&nt)===0&&(s=s.first,(e&de)!==0&&(e&Ze)!==0&&s!==null&&(s.f|=Ze))}if(s!==null&&(s.parent=r,r!==null&&Ns(s,r),S!==null&&(S.f&J)!==0&&(e&Le)===0)){var i=S;(i.effects??=[]).push(s)}return n}function dr(){return S!==null&&!he}function fn(e){const t=Me(jt,null);return P(t,B),t.teardown=e,t}function Ms(e){As();var t=A.f,r=!S&&(t&pe)!==0&&X!==null&&!X.i;if(r){var n=X;(n.e??=[]).push(e)}else return cn(e)}function cn(e){return Me(Je|Fn,e)}function Os(e){Ue.ensure();const t=Me(Le|nt,e);return(r={})=>new Promise(n=>{r.outro?Be(t,()=>{ne(t),n(void 0)}):(ne(t),n(void 0))})}function Rs(e){return Me(Je,e)}function Is(e){return Me(We|nt,e)}function Cs(e,t=0){return Me(jt|t,e)}function K(e,t=[],r=[],n=[]){vs(n,t,r,s=>{Me(jt,()=>{e(...s.map(v))})})}function vr(e,t=0){var r=Me(de|t,e);return r}function ue(e){return Me(pe|nt,e)}function dn(e){var t=e.teardown;if(t!==null){const r=Pe,n=S;Tr(!0),ce(null);try{t.call(null)}catch(s){ye(s,e.parent)}finally{Tr(r),ce(n)}}}function hr(e,t=!1){var r=e.first;for(e.first=e.last=null;r!==null;){const s=r.ac;s!==null&&bt(()=>{s.abort(yt)});var n=r.next;(r.f&Le)!==0?r.parent=null:ne(r,t),r=n}}function Ds(e){for(var t=e.first;t!==null;){var r=t.next;(t.f&pe)===0&&ne(t),t=r}}function ne(e,t=!0){var r=!1;(t||(e.f&Pn)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(Ls(e.nodes.start,e.nodes.end),r=!0),e.f|=Rt,hr(e,t&&!r),wt(e,0);var n=e.nodes&&e.nodes.t;if(n!==null)for(const i of n)i.stop();dn(e),e.f^=Rt,e.f|=W;var s=e.parent;s!==null&&s.first!==null&&vn(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function Ls(e,t){for(;e!==null;){var r=e===t?null:Et(e);e.remove(),e=r}}function vn(e){var t=e.parent,r=e.prev,n=e.next;r!==null&&(r.next=n),n!==null&&(n.prev=r),t!==null&&(t.first===e&&(t.first=n),t.last===e&&(t.last=r))}function Be(e,t,r=!0){var n=[];e.f|=lr,hn(e,n,!0);var s=()=>{r&&ne(e),t&&t()},i=n.length;if(i>0){var l=()=>--i||s();for(var a of n)a.out(l)}else s()}function hn(e,t,r){if((e.f&ee)===0){e.f^=ee;var n=e.nodes&&e.nodes.t;if(n!==null)for(const a of n)(a.is_global||r)&&t.push(a);for(var s=e.first;s!==null;){var i=s.next;if((s.f&Le)===0){var l=(s.f&Ze)!==0||(s.f&pe)!==0&&(e.f&de)!==0;hn(s,t,l?r:!1)}s=i}}}function Ut(e){e.f&=~lr,_n(e,!0)}function _n(e,t){if((e.f&lr)===0&&(e.f&ee)!==0){e.f^=ee,(e.f&B)===0&&(P(e,F),Ue.ensure().schedule(e));for(var r=e.first;r!==null;){var n=r.next,s=(r.f&Ze)!==0||(r.f&pe)!==0;_n(r,s?t:!1),r=n}var i=e.nodes&&e.nodes.t;if(i!==null)for(const l of i)(l.is_global||t)&&l.in()}}function _r(e,t){if(e.nodes)for(var r=e.nodes.start,n=e.nodes.end;r!==null;){var s=r===n?null:Et(r);t.append(r),r=s}}let Pe=!1;function Tr(e){Pe=e}let S=null,he=!1;function ce(e){S=e}let A=null;function Te(e){A=e}let xe=null;function pn(e){S!==null&&((S.f&Ct)!==0||(S.f&J)!==0)&&(xe??=new Set).add(e)}let re=null,ae=0,oe=null;function Us(e){oe=e}let gn=1,je=0,Ye=je;function kr(e){Ye=e}function mn(){return++gn}function St(e){var t=e.f;if((t&F)!==0)return!0;if((t&fe)!==0){for(var r=e.deps,n=r.length,s=0;s<n;s++){var i=r[s];if(St(i)&&Jr(i),i.wv>e.wv)return!0}(t&_e)!==0&&ve===null&&P(e,B)}return!1}function wn(e,t,r=!0){var n=e.reactions;if(n!==null&&!(xe!==null&&xe.has(e)))for(var s=0;s<n.length;s++){var i=n[s];(i.f&J)!==0?wn(i,t,!1):t===i&&(r?P(i,F):(i.f&B)!==0&&P(i,fe),cr(i))}}function yn(e){var t=re,r=ae,n=oe,s=S,i=xe,l=X,a=he,o=Ye,u=e.f;re=null,ae=0,oe=null,S=(u&(pe|Le))===0?e:null,xe=null,$e(e.ctx),he=!1,Ye=++je,e.ac!==null&&(bt(()=>{e.ac.abort(yt)}),e.ac=null);try{e.f|=Ct;var f=e.fn,c=f();e.f|=rt;var h=Ar(e);if(Kr()&&oe!==null&&!he&&h!==null&&(e.f&(J|fe|F))===0)for(var d=0;d<oe.length;d++)wn(oe[d],e);if(s!==null&&s!==e){if(je++,s.deps!==null)for(let p=0;p<r;p+=1)s.deps[p].rv=je;if(t!==null)for(const p of t)p.rv=je;oe!==null&&(n===null?n=oe:n.push(...oe))}return(e.f&De)!==0&&(e.f^=De),c}catch(p){return Ar(e),ks(p)}finally{e.f^=Ct,re=t,ae=r,oe=n,S=s,xe=i,$e(l),he=a,Ye=o}}function Ar(e){var t=e.deps,r=E?.is_fork;if(re!==null){var n;if(r||wt(e,ae),t!==null&&ae>0)for(t.length=ae+re.length,n=0;n<re.length;n++)t[ae+n]=re[n];else e.deps=t=re;if(dr()&&(e.f&_e)!==0)for(n=ae;n<t.length;n++)(t[n].reactions??=[]).push(e)}else!r&&t!==null&&ae<t.length&&(wt(e,ae),t.length=ae);return t}function Ps(e,t){let r=t.reactions;if(r!==null){var n=Rn.call(r,e);if(n!==-1){var s=r.length-1;s===0?r=t.reactions=null:(r[n]=r[s],r.pop())}}if(r===null&&(t.f&J)!==0&&(re===null||!gt.call(re,t))){var i=t;(i.f&_e)!==0&&(i.f^=_e),i.v!==q&&ar(i),i.ac!==null&&bt(()=>{i.ac.abort(yt),i.ac=null,P(i,F)}),ms(i),wt(i,0)}}function wt(e,t){var r=e.deps;if(r!==null)for(var n=t;n<r.length;n++)Ps(e,r[n])}function tt(e){var t=e.f;if((t&W)===0){P(e,B);var r=A;A=e;try{(t&(de|Fr))!==0?Ds(e):hr(e),dn(e);var n=yn(e);e.teardown=typeof n=="function"?n:null,e.wv=gn;var s;Dr&&os&&(e.f&F)!==0&&e.deps}finally{A=r}}}function v(e){var t=e.f,r=(t&J)!==0;if(S!==null&&!he){var n=A!==null&&(A.f&W)!==0;if(!n&&(xe===null||!xe.has(e))){var s=S.deps;if((S.f&Ct)!==0)e.rv<je&&(e.rv=je,re===null&&s!==null&&s[ae]===e?ae++:re===null?re=[e]:re.push(e));else{S.deps??=[],gt.call(S.deps,e)||S.deps.push(e);var i=e.reactions;i===null?e.reactions=[S]:gt.call(i,S)||i.push(S)}}}if(Pe&&Se.has(e))return Se.get(e);if(r){var l=e;if(Pe){var a=l.v;return((l.f&B)===0&&l.reactions!==null||En(l))&&(a=ur(l)),Se.set(l,a),a}var o=(l.f&_e)===0&&!he&&S!==null&&(S.f&_e)!==0,u=(l.f&rt)===0;St(l)&&(o&&(l.f|=_e),Jr(l)),o&&!u&&(Zr(l),bn(l))}if(ve?.has(e))return ve.get(e);if((e.f&De)!==0)throw e.v;return e.v}function bn(e){if(e.f|=_e,e.deps!==null)for(const r of e.deps){var t=r.reactions;t===null?r.reactions=[e]:gt.call(t,e)||t.push(e),(r.f&J)!==0&&(r.f&_e)===0&&(Zr(r),bn(r))}}function En(e){if(e.v===q)return!0;if(e.deps===null)return!1;for(const t of e.deps)if(Se.has(t)||(t.f&J)!==0&&En(t))return!0;return!1}function pr(e){var t=he;try{return he=!0,e()}finally{he=t}}const Fs=["touchstart","touchmove"];function Hs(e){return Fs.includes(e)}const ct=Symbol("events"),Sn=new Set,sr=new Set;function Pt(e,t,r){(t[ct]??={})[e]=r}function gr(e){for(var t=0;t<e.length;t++)Sn.add(e[t]);for(var r of sr)r(e)}let Wt=null,Xt=!1;function Nr(e){var t=this,r=t.ownerDocument,n=e.type,s=e.composedPath?.()||[],i=s[0]||e.target;Wt=e,Xt||(Xt=!0,setTimeout(()=>{Xt=!1,Wt=null}));var l=0,a=Wt===e&&e[ct];if(a){var o=s.indexOf(a);if(o!==-1&&(t===document||t===window)){e[ct]=t;return}var u=s.indexOf(t);if(u===-1)return;o<=u&&(l=o)}if(i=s[l]||e.target,i!==t){Lr(e,"currentTarget",{configurable:!0,get(){return i||r}});var f=S,c=A;ce(null),Te(null);try{for(var h,d=[];i!==null&&i!==t;){try{var p=i[ct]?.[n];p!=null&&(!i.disabled||e.target===i)&&p.call(i,e)}catch(k){h?d.push(k):h=k}if(e.cancelBubble)break;l++,i=l<s.length?s[l]:null}if(h){for(let k of d)queueMicrotask(()=>{throw k});throw h}}finally{e[ct]=t,delete e.currentTarget,ce(f),Te(c)}}}const js=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function qs(e){return js?.createHTML(e)??e}function Bs(e){var t=Ts("template");return t.innerHTML=qs(e.replaceAll("<!>","<!---->")),t.content}function Mr(e,t){var r=A;r.nodes===null&&(r.nodes={start:e,end:t,a:null,t:null})}function I(e,t){var r=(t&zn)!==0,n=(t&Vn)!==0,s,i=!e.startsWith("<!>");return()=>{s===void 0&&(s=Bs(i?e:"<!>"+e),r||(s=mt(s)));var l=n||ln?document.importNode(s,!0):s.cloneNode(!0);if(r){var a=mt(l),o=l.lastChild;Mr(a,o)}else Mr(l,l);return l}}function R(e,t){e!==null&&e.before(t)}function Ys(e){let t=0,r=ze(0),n;return()=>{dr()&&(v(r),Cs(()=>(t===0&&(n=pr(()=>e(()=>pt(r)))),t+=1,()=>{Ce(()=>{t-=1,t===0&&(n?.(),n=void 0,pt(r))})})))}}var Gs=Ze|nt;function zs(e,t,r,n){new Vs(e,t,r,n)}class Vs{parent;is_pending=!1;transform_error;#t;#l=null;#e;#o;#n;#i=null;#r=null;#a=null;#s=null;#p=0;#u=0;#f=!1;#d=new Set;#g=new Set;#c=null;#b=Ys(()=>(this.#c=ze(this.#p),()=>{this.#c=null}));constructor(t,r,n,s){this.#t=t,this.#e=r,this.#o=i=>{var l=A;l.b=this,l.f|=Jt,n(i)},this.parent=A.b,this.transform_error=s??this.parent?.transform_error??(i=>i),this.#n=vr(()=>{this.#h()},Gs)}#E(){try{this.#i=ue(()=>this.#o(this.#t))}catch(t){this.error(t)}}#m(t){const r=this.#e.failed,{reset:n,invoke_onerror:s}=this.#w(t);Ce(s),r&&(this.#a=ue(()=>{r(this.#t,()=>t,()=>n)}))}#w(t){var r=!1,n=!1;const s=()=>{if(!this.#v()){if(r){Xn();return}r=!0,n&&as(),this.#a!==null&&Be(this.#a,()=>{this.#a=null}),this.#_(()=>{this.#h()})}};return{reset:s,invoke_onerror:()=>{if(!this.#v())try{n=!0,this.#e.onerror?.(t,s),n=!1}catch(l){ye(l,this.#n&&this.#n.parent)}}}}#v(){return(this.#n.f&(W|Rt))!==0}#S(){const t=this.#e.pending;t&&(this.is_pending=!0,this.#r=ue(()=>t(this.#t)),Ce(()=>{if(!this.#v()){var r=this.#s=document.createDocumentFragment(),n=qe(),s=!1;if(r.append(n),this.#i=this.#_(()=>{try{return ue(()=>this.#o(n))}catch(i){try{this.error(i),s=!0}catch(l){ye(l,this.#n.parent)}return null}}),this.#i===null){this.#s=null,s&&this.#y(E);return}this.#u===0&&(this.#t.before(r),this.#s=null,Be(this.#r,()=>{this.#r=null}),this.#y(E))}}))}#h(){try{if(this.is_pending=this.has_pending_snippet(),this.#u=0,this.#p=0,this.#i=ue(()=>{this.#o(this.#t)}),this.#u>0){var t=this.#s=document.createDocumentFragment();_r(this.#i,t);const r=this.#e.pending;this.#r=ue(()=>r(this.#t))}else this.#y(E)}catch(r){this.error(r)}}#y(t){this.is_pending=!1,t.transfer_effects(this.#d,this.#g)}defer_effect(t){Qr(t,this.#d,this.#g)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#e.pending}#_(t){var r=A,n=S,s=X;Te(this.#n),ce(this.#n),$e(this.#n.ctx);try{return Ue.ensure(),t()}finally{Te(r),ce(n),$e(s)}}#x(t,r){if(!this.has_pending_snippet()){this.parent&&this.parent.#x(t,r);return}this.#u+=t,this.#u===0&&(this.#y(r),this.#r&&Be(this.#r,()=>{this.#r=null}),this.#s&&(this.#t.before(this.#s),this.#s=null))}update_pending_count(t,r){this.#x(t,r),this.#p+=t,!(!this.#c||this.#f)&&(this.#f=!0,Ce(()=>{this.#f=!1,this.#c&&et(this.#c,this.#p)}))}get_effect_pending(){return this.#b(),v(this.#c)}error(t){if(t===Br||!this.#e.onerror&&!this.#e.failed)throw t;E?.is_fork?(this.#i&&E.skip_effect(this.#i),this.#r&&E.skip_effect(this.#r),this.#a&&E.skip_effect(this.#a),E.oncommit(()=>{this.#v()||this.#T(t)})):this.#T(t)}#T(t){this.#i&&(ne(this.#i),this.#i=null),this.#r&&(ne(this.#r),this.#r=null),this.#a&&(ne(this.#a),this.#a=null);let r=this.#e.failed;const n=s=>{if(this.#v())return;const{reset:i,invoke_onerror:l}=this.#w(s);l(),r&&!this.#v()&&(this.#a=this.#_(()=>{try{return ue(()=>{var a=A;a.b=this,a.f|=Jt,r(this.#t,()=>s,()=>i)})}catch(a){return ye(a,this.#n.parent),null}}))};Ce(()=>{if(!this.#v()){var s;try{s=this.transform_error(t)}catch(i){ye(i,this.#n&&this.#n.parent);return}s!==null&&typeof s=="object"&&typeof s.then=="function"?s.then(n,i=>ye(i,this.#n&&this.#n.parent)):n(s)}})}}function b(e,t){var r=t==null?"":typeof t=="object"?`${t}`:t;r!==(e[$t]??=e.nodeValue)&&(e[$t]=r,e.nodeValue=`${r}`)}function Ks(e,t){return Qs(e,t)}const Nt=new Map;function Qs(e,{target:t,anchor:r,props:n={},events:s,context:i,intro:l=!0,transformError:a}){Ss();var o=void 0,u=Os(()=>{var f=r??t.appendChild(qe());zs(f,{pending:()=>{}},d=>{st({});var p=X;i&&(p.c=i),s&&(n.$$events=s),o=e(d,n)||Vr(),it()},a);var c=new Set,h=d=>{for(var p=0;p<d.length;p++){var k=d[p];if(!c.has(k)){c.add(k);var _=Hs(k);for(const C of[t,document]){var w=Nt.get(C);w===void 0&&(w=new Map,Nt.set(C,w));var O=w.get(k);O===void 0?(C.addEventListener(k,Nr,{passive:_}),w.set(k,1)):w.set(k,O+1)}}}};return h(Ht(Sn)),sr.add(h),()=>{for(var d of c)for(const _ of[t,document]){var p=Nt.get(_),k=p.get(d);--k==0?(_.removeEventListener(d,Nr),p.delete(d),p.size===0&&Nt.delete(_)):p.set(d,k)}sr.delete(h),f!==r&&f.parentNode?.removeChild(f)}});return Ws.set(o,u),o}let Ws=new WeakMap;class Xs{anchor;#t=new Map;#l=new Map;#e=new Map;#o=new Set;#n=!0;constructor(t,r=!0){this.anchor=t,this.#n=r}#i=t=>{if(this.#t.has(t)){var r=this.#t.get(t),n=this.#l.get(r);if(n)Ut(n),this.#o.delete(r);else{var s=this.#e.get(r);s&&(Ut(s.effect),this.#l.set(r,s.effect),this.#e.delete(r),s.fragment.lastChild.remove(),this.anchor.before(s.fragment),n=s.effect)}for(const[i,l]of this.#t){if(this.#t.delete(i),i===t)break;const a=this.#e.get(l);a&&(ne(a.effect),this.#e.delete(l))}for(const[i,l]of this.#l){if(i===r||this.#o.has(i))continue;const a=()=>{if(Array.from(this.#t.values()).includes(i)){var u=document.createDocumentFragment();_r(l,u),u.append(qe()),this.#e.set(i,{effect:l,fragment:u})}else ne(l);this.#o.delete(i),this.#l.delete(i)};this.#n||!n?(this.#o.add(i),Be(l,a,!1)):a()}}};#r=t=>{this.#t.delete(t);const r=Array.from(this.#t.values());for(const[n,s]of this.#e)r.includes(n)||(ne(s.effect),this.#e.delete(n))};ensure(t,r){var n=E,s=un();if(r&&!this.#l.has(t)&&!this.#e.has(t))if(s){var i=document.createDocumentFragment(),l=qe();i.append(l),this.#e.set(t,{effect:ue(()=>r(l)),fragment:i})}else this.#l.set(t,ue(()=>r(this.anchor)));if(this.#t.set(n,t),s){for(const[a,o]of this.#l)a===t?n.unskip_effect(o):n.skip_effect(o);for(const[a,o]of this.#e)a===t?n.unskip_effect(o.effect):n.skip_effect(o.effect);n.oncommit(this.#i),n.ondiscard(this.#r)}else this.#i(n)}}function be(e,t,r=!1){var n=new Xs(e),s=r?Ze:0;function i(l,a){n.ensure(l,a)}vr(()=>{var l=!1;t((a,o=0)=>{l=!0,i(o,a)}),l||i(-1,null)},s)}function Js(e,t){return t}function Zs(e,t,r){for(var n=[],s=t.length,i,l=t.length,a=0;a<s;a++){let c=t[a];Be(c,()=>{if(i){if(i.pending.delete(c),i.done.add(c),i.pending.size===0){var h=e.outrogroups;ir(e,Ht(i.done)),h.delete(i),h.size===0&&(e.outrogroups=null)}}else l-=1},!1)}if(l===0){var o=n.length===0&&r!==null&&e.pending.size===0;if(o){var u=r,f=u.parentNode;xs(f),f.append(u),e.items.clear()}ir(e,t,!o)}else i={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(i)}function ir(e,t,r=!0){var n;if(e.pending.size>0){n=new Set;for(const l of e.pending.values())for(const a of l)n.add(e.items.get(a).e)}for(var s=0;s<t.length;s++){var i=t[s];if(n?.has(i)){i.f|=Ee;const l=document.createDocumentFragment();_r(i,l)}else ne(t[s],r)}}var Or;function Ge(e,t,r,n,s,i=null){var l=e,a=new Map,o=(t&qr)!==0;if(o){var u=e;l=u.appendChild(qe())}var f=null,c=ps(()=>{var O=r();return Ft(O)?O:O==null?[]:Ht(O)}),h=new Map,d=!0;function p(O){if((w.effect.f&W)===0){w.pending.delete(O);var C=v(c);w.fallback=f,$s(w,C,l,t,n),f!==null&&(C.length===0?(f.f&Ee)===0?Ut(f):(f.f^=Ee,dt(f,null,l)):Be(f,()=>{f=null}))}}function k(O){w.pending.delete(O)}var _=vr(()=>{for(var O=v(c),C=O.length,j=new Set,Z=E,te=un(),H=0;H<C;H+=1){var z=O[H],D=n(z,H),N=d?null:a.get(D);N?(N.v&&et(N.v,z),N.i&&et(N.i,H),te&&Z.unskip_effect(N.e)):(N=ei(a,d?l:Or??=qe(),z,D,H,s,t,r),d||(N.e.f|=Ee),a.set(D,N)),j.add(D)}if(C===0&&i&&!f&&(d?f=ue(()=>i(l)):(f=ue(()=>i(Or??=qe())),f.f|=Ee)),C>j.size&&$n(),!d)if(h.set(Z,j),te){for(const[ge,at]of a)j.has(ge)||Z.skip_effect(at.e);Z.oncommit(p),Z.ondiscard(k)}else p(Z);v(c)}),w={effect:_,items:a,pending:h,outrogroups:null,fallback:f};d=!1}function ut(e){for(;e!==null&&(e.f&pe)===0;)e=e.next;return e}function $s(e,t,r,n,s){var i=(n&Yn)!==0,l=t.length,a=e.items,o=ut(e.effect.first),u,f=null,c,h=[],d=[],p,k,_,w;if(i)for(w=0;w<l;w+=1)p=t[w],k=s(p,w),_=a.get(k).e,(_.f&Ee)===0&&(_.nodes?.a?.measure(),(c??=new Set).add(_));for(w=0;w<l;w+=1){if(p=t[w],k=s(p,w),_=a.get(k).e,e.outrogroups!==null)for(const N of e.outrogroups)N.pending.delete(_),N.done.delete(_);if((_.f&ee)!==0&&(Ut(_),i&&(_.nodes?.a?.unfix(),(c??=new Set).delete(_))),(_.f&Ee)!==0)if(_.f^=Ee,_===o)dt(_,null,r);else{var O=f?f.next:o;_===e.effect.last&&(e.effect.last=_.prev),_.prev&&(_.prev.next=_.next),_.next&&(_.next.prev=_.prev),Ie(e,f,_),Ie(e,_,O),dt(_,O,r),f=_,h=[],d=[],o=ut(f.next);continue}if(_!==o){if(u!==void 0&&u.has(_)){if(h.length<d.length){var C=d[0],j;f=C.prev;var Z=h[0],te=h[h.length-1];for(j=0;j<h.length;j+=1)dt(h[j],C,r);for(j=0;j<d.length;j+=1)u.delete(d[j]);Ie(e,Z.prev,te.next),Ie(e,f,Z),Ie(e,te,C),o=C,f=te,w-=1,h=[],d=[]}else u.delete(_),dt(_,o,r),Ie(e,_.prev,_.next),Ie(e,_,f===null?e.effect.first:f.next),Ie(e,f,_),f=_;continue}for(h=[],d=[];o!==null&&o!==_;)(u??=new Set).add(o),d.push(o),o=ut(o.next);if(o===null)continue}(_.f&Ee)===0&&h.push(_),f=_,o=ut(_.next)}if(e.outrogroups!==null){for(const N of e.outrogroups)N.pending.size===0&&(ir(e,Ht(N.done)),e.outrogroups?.delete(N));e.outrogroups.size===0&&(e.outrogroups=null)}if(o!==null||u!==void 0){var H=[];if(u!==void 0)for(_ of u)(_.f&ee)===0&&H.push(_);for(;o!==null;)(o.f&ee)===0&&o!==e.fallback&&H.push(o),o=ut(o.next);var z=H.length;if(z>0){var D=(n&qr)!==0&&l===0?r:null;if(i){for(w=0;w<z;w+=1)H[w].nodes?.a?.measure();for(w=0;w<z;w+=1)H[w].nodes?.a?.fix()}Zs(e,H,D)}}i&&Ce(()=>{if(c!==void 0)for(_ of c)_.nodes?.a?.apply()})}function ei(e,t,r,n,s,i,l,a){var o=(l&qn)!==0?(l&Gn)===0?bs(r,!1,!1):ze(r):null,u=(l&Bn)!==0?ze(s):null;return{v:o,i:u,e:ue(()=>(i(t,o??r,u??s,a),()=>{e.delete(n)}))}}function dt(e,t,r){if(e.nodes)for(var n=e.nodes.start,s=e.nodes.end,i=t&&(t.f&Ee)===0?t.nodes.start:r;n!==null;){var l=Et(n);if(i.before(n),n===s)return;n=l}}function Ie(e,t,r){t===null?e.effect.first=r:t.next=r,r===null?e.effect.last=t:r.prev=t}const Rr=[...`
2
- \r\f \v\uFEFF`];function ti(e,t,r){var n=e==null?"":""+e;if(t&&(n=n?n+" "+t:t),r){for(var s of Object.keys(r))if(r[s])n=n?n+" "+s:s;else if(n.length)for(var i=s.length,l=0;(l=n.indexOf(s,l))>=0;){var a=l+i;(l===0||Rr.includes(n[l-1]))&&(a===n.length||Rr.includes(n[a]))?n=(l===0?"":n.substring(0,l))+n.substring(a+1):l=a}}return n===""?null:n}function xt(e,t,r,n,s,i){var l=e[Zt];if(l!==r||l===void 0){var a=ti(r,n,i);a==null?e.removeAttribute("class"):e.className=a,e[Zt]=r}else if(i&&s!==i)for(var o in i){var u=!!i[o];(s==null||u!==!!s[o])&&e.classList.toggle(o,u)}return i}function ri(e,t){t?e.hasAttribute("selected")||e.setAttribute("selected",""):e.removeAttribute("selected")}function ni(e,t){var r=e.__defaultValue,n=e.multiple,s=n?r??[]:null;if(!(n&&!Ft(s))){e.selectedIndex;for(var i of e.options){var l=Xe(i);ri(i,n?s.includes(l):sn(l,r))}}}function xn(e,t,r=!1){if(e.multiple){if(t==null)return;if(!Ft(t))return Wn();for(var n of e.options)n.selected=t.includes(Xe(n));return}for(n of e.options){var s=Xe(n);if(sn(s,t)){n.selected=!0;return}}(!r||t!==void 0)&&(e.selectedIndex=-1)}function si(e){var t=new MutationObserver(r=>{r.every(li)||("__defaultValue"in e&&ni(e),"__value"in e&&xn(e,e.__value))});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),fn(()=>{t.disconnect()})}function ii(e,t,r=t){var n=new WeakSet,s=!0;ds(e,"change",i=>{var l=i?"[selected]":":checked",a;if(e.multiple)a=[].map.call(e.querySelectorAll(l),Xe);else{var o=e.querySelector(l)??e.querySelector("option:not([disabled])");a=o&&Xe(o)}r(a),e.__value=a,E!==null&&n.add(E)}),Rs(()=>{var i=t();if(e===document.activeElement){var l=E;if(n.has(l))return}if(xn(e,i,s),s&&i===void 0){var a=e.querySelector(":checked");a!==null&&(i=Xe(a),r(i))}e.__value=i,s=!1})}function Xe(e){return"__value"in e?e.__value:e.value}function li(e){if(e.target.closest("selectedcontent")!==null)return!0;if(e.type==="childList"){var t=[...e.addedNodes,...e.removedNodes];return t.length>0&&t.every(r=>r.nodeName==="SELECTEDCONTENT")}return!1}const ai=Symbol("is custom element"),oi=Symbol("is html");function Tn(e,t,r,n){var s=ui(e);s[t]!==(s[t]=r)&&(t==="loading"&&(e[Hn]=r),r==null?e.removeAttribute(t):typeof r!="string"&&fi(e).has(t)?e[t]=r:e.setAttribute(t,r))}function ui(e){return e[jr]??={[ai]:e.nodeName.includes("-"),[oi]:e.namespaceURI===Kn}}var Ir=new Map;function fi(e){var t=e.getAttribute("is")||e.nodeName,r=Ir.get(t);if(r)return r;Ir.set(t,r=new Set);for(var n,s=e,i=Element.prototype;i!==s;){n=In(s);for(var l in n)n[l].set&&l!=="innerHTML"&&l!=="textContent"&&l!=="innerText"&&r.add(l);s=Ur(s)}return r}function ci(e){X===null&&zr(),Ms(()=>{const t=pr(e);if(typeof t=="function")return t})}function Cr(e){X===null&&zr(),ci(()=>()=>pr(e))}const di="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(di);class mr{static BASE="/api";overview(){return this.get("/overview")}runs(t={}){const r=new URLSearchParams;return t.flow&&r.set("flow",t.flow),t.status&&r.set("status",t.status),r.set("limit",String(t.limit??100)),this.get("/runs?"+r.toString())}run(t){return this.get("/runs/"+encodeURIComponent(t))}async get(t){const r=await fetch(mr.BASE+t,{headers:{accept:"application/json"}});if(!r.ok)throw new Error(r.status+" "+await r.text());return await r.json()}}const we={QUEUED:"queued",RUNNING:"running",RETRYING:"retrying",SUCCEEDED:"succeeded",FAILED:"failed"},vi={PENDING:"pending"},hi={TIMEOUT:"timeout"};class M{static SECOND=1e3;static MINUTE=6e4;static HOUR=36e5;static DAY=864e5;static duration(t){return t==null?"—":t<M.SECOND?t+" ms":t<M.MINUTE?(t/M.SECOND).toFixed(1)+" s":t<M.HOUR?Math.floor(t/M.MINUTE)+" min "+Math.round(t%M.MINUTE/M.SECOND)+" s":Math.floor(t/M.HOUR)+" h "+Math.round(t%M.HOUR/M.MINUTE)+" min"}static ago(t,r=Date.now()){if(!t)return"—";const n=r-Date.parse(t);return n<M.MINUTE?Math.max(0,Math.round(n/M.SECOND))+" s ago":n<M.HOUR?Math.round(n/M.MINUTE)+" min ago":n<M.DAY?Math.round(n/M.HOUR)+" h ago":new Date(t).toLocaleString()}static time(t){return t?new Date(t).toLocaleTimeString():"—"}static json(t){return JSON.stringify(t,null,2)??""}}class lt{static TONES={[we.SUCCEEDED]:"ok",[we.FAILED]:"fail",[we.RUNNING]:"run",[we.RETRYING]:"wait",[we.QUEUED]:"idle",[vi.PENDING]:"idle",[hi.TIMEOUT]:"wait"};static tone(t){return lt.TONES[t]??"idle"}static isActive(t){return t===we.RUNNING||t===we.RETRYING||t===we.QUEUED}}var _i=I("<span> </span>");function Ke(e,t){st(t,!0);const r=Xr(()=>lt.tone(t.status));var n=_i();let s;var i=T(n,!0);K(()=>{s=xt(n,1,`badge ${v(r)??""}`,"svelte-1hfd60x",s,{pulse:v(r)==="run"}),b(i,t.status)}),R(e,n),it()}var pi=I('<p class="error-box svelte-hcc72y"><strong> </strong> at <code> </code> </p>'),gi=I("<span> </span>"),mi=I('<li class="svelte-hcc72y"><button><span class="n svelte-hcc72y"> </span> <span class="name svelte-hcc72y"> </span> <span class="cmd svelte-hcc72y"> </span> <span class="meta svelte-hcc72y"><!> <span> </span> <!></span></button></li>'),wi=I('<tr><td class="svelte-hcc72y"> </td><td class="svelte-hcc72y"> </td><td class="svelte-hcc72y"><!></td><td class="err svelte-hcc72y"> </td></tr>'),yi=I('<tr><td colspan="4" class="muted svelte-hcc72y">waiting in the queue</td></tr>'),bi=I('<tr><td class="svelte-hcc72y"> </td><td class="svelte-hcc72y"> </td><td class="svelte-hcc72y"> </td><td class="svelte-hcc72y"> </td><td class="svelte-hcc72y"><!></td><td class="err svelte-hcc72y"> </td></tr>'),Ei=I('<tr><td colspan="6" class="muted svelte-hcc72y">not started</td></tr>'),Si=I('<details class="svelte-hcc72y"><summary>output (shortened)</summary> <pre class="svelte-hcc72y"> </pre></details>'),xi=I('<h3 class="svelte-hcc72y">Step <code> </code> — attempts</h3> <table class="svelte-hcc72y"><thead><tr><th class="svelte-hcc72y">flow</th><th class="svelte-hcc72y">#</th><th class="svelte-hcc72y">started</th><th class="svelte-hcc72y">took</th><th class="svelte-hcc72y">outcome</th><th class="svelte-hcc72y">error</th></tr></thead><tbody></tbody></table> <!>',1),Ti=I('<section class="head svelte-hcc72y"><div><h2 class="svelte-hcc72y"> <!></h2> <code class="muted svelte-hcc72y"> </code></div> <dl class="svelte-hcc72y"><div><dt class="svelte-hcc72y">created</dt><dd class="svelte-hcc72y"> </dd></div> <div><dt class="svelte-hcc72y">duration</dt><dd class="svelte-hcc72y"> </dd></div> <div><dt class="svelte-hcc72y">flow attempt</dt><dd class="svelte-hcc72y"> </dd></div></dl></section> <!> <h3 class="svelte-hcc72y">Steps</h3> <ol class="pipeline svelte-hcc72y"></ol> <h3 class="svelte-hcc72y">Flow attempts <span class="muted svelte-hcc72y">(pg-boss job; a retry runs the whole flow again)</span></h3> <table class="svelte-hcc72y"><thead><tr><th class="svelte-hcc72y">#</th><th class="svelte-hcc72y">started</th><th class="svelte-hcc72y">outcome</th><th class="svelte-hcc72y">error</th></tr></thead><tbody></tbody></table> <!> <details class="svelte-hcc72y"><summary>input</summary> <pre class="svelte-hcc72y"> </pre></details>',1);function ki(e,t){st(t,!0);let r=Q(null);const n=Xr(()=>t.run.steps.find(g=>g.key===(v(r)??t.run.currentStep??t.run.steps[0]?.key)));var s=Ti(),i=nr(s),l=x(i),a=x(l),o=x(a),u=m(o);Ke(u,{get status(){return t.run.status}});var f=m(a,2),c=T(f,!0),h=m(l,2),d=x(h),p=m(x(d)),k=T(p,!0),_=m(d,2),w=m(x(_)),O=T(w,!0),C=m(_,2),j=m(x(C)),Z=T(j),te=m(i,2);{var H=g=>{var y=pi(),U=x(y),se=T(U),Y=m(U,2),V=T(Y,!0),ie=m(Y);K(()=>{b(se,`${t.run.error.name??""}${t.run.error.code?" "+t.run.error.code:""}`),b(V,t.run.error.step),b(ie,`: ${t.run.error.message??""}`)}),R(g,y)};be(te,g=>{t.run.error&&g(H)})}var z=m(te,4);Ge(z,23,()=>t.run.steps,g=>g.key,(g,y,U)=>{var se=mi(),Y=x(se);let V;var ie=x(Y),ke=T(ie,!0),Ae=m(ie,2),le=T(Ae,!0),L=m(Ae,2),me=T(L,!0),Oe=m(L,2),$=x(Oe);Ke($,{get status(){return v(y).status}});var ot=m($,2),Gt=T(ot),Tt=m(ot,2);{var zt=Re=>{var kt=gi(),At=T(kt,!0);K(Vt=>b(At,Vt),[()=>M.duration(v(y).durationMs)]),R(Re,kt)};be(Tt,Re=>{v(y).durationMs!==void 0&&Re(zt)})}K(Re=>{V=xt(Y,1,`step ${Re??""}`,"svelte-hcc72y",V,{open:v(n)?.key===v(y).key}),b(ke,v(U)+1),b(le,v(y).key),b(me,v(y).command),b(Gt,`${v(y).attempts.length??""} ${v(y).attempts.length===1?"attempt":"attempts"}`)},[()=>lt.tone(v(y).status)]),Pt("click",Y,()=>G(r,v(y).key,!0)),R(g,se)});var D=m(z,4),N=m(x(D));Ge(N,21,()=>t.run.flowAttempts,g=>g.attempt,(g,y)=>{var U=wi(),se=x(U),Y=T(se,!0),V=m(se),ie=T(V,!0),ke=m(V),Ae=x(ke);{var le=$=>{Ke($,{get status(){return v(y).outcome}})},L=$=>{Ke($,{get status(){return we.RUNNING}})};be(Ae,$=>{v(y).outcome?$(le):$(L,-1)})}var me=m(ke),Oe=T(me,!0);K($=>{b(Y,v(y).attempt),b(ie,$),b(Oe,v(y).error?.message??"")},[()=>M.time(v(y).startedAt)]),R(g,U)},g=>{var y=yi();R(g,y)});var ge=m(D,2);{var at=g=>{var y=xi(),U=nr(y),se=m(x(U)),Y=T(se,!0),V=m(U,2),ie=m(x(V));Ge(ie,21,()=>v(n).attempts,Js,(le,L)=>{var me=bi(),Oe=x(me),$=T(Oe,!0),ot=m(Oe),Gt=T(ot,!0),Tt=m(ot),zt=T(Tt,!0),Re=m(Tt),kt=T(Re,!0),At=m(Re),Vt=x(At);Ke(Vt,{get status(){return v(L).outcome}});var kn=m(At),An=T(kn);K((Nn,Mn,On)=>{b($,v(L).flowAttempt),b(Gt,v(L).attempt),b(zt,Nn),b(kt,Mn),b(An,`${v(L).error?(v(L).error.code?v(L).error.code+": ":"")+v(L).error.message:""}${On??""}`)},[()=>M.time(v(L).startedAt),()=>M.duration(v(L).durationMs),()=>v(L).retryInMs?" (retry in "+M.duration(v(L).retryInMs)+")":""]),R(le,me)},le=>{var L=Ei();R(le,L)});var ke=m(V,2);{var Ae=le=>{var L=Si(),me=m(x(L),2),Oe=T(me,!0);K($=>b(Oe,$),[()=>M.json(v(n).output)]),R(le,L)};be(ke,le=>{v(n).output!==void 0&&le(Ae)})}K(()=>b(Y,v(n).key)),R(g,y)};be(ge,g=>{v(n)&&g(at)})}var qt=m(ge,2),Bt=m(x(qt),2),Yt=T(Bt,!0);K((g,y,U)=>{b(o,`${t.run.flow??""} `),b(c,t.run.runId),b(k,g),b(O,y),b(Z,`${t.run.flowAttempts.length??""}/${t.run.maxFlowAttempts??""}`),b(Yt,U)},[()=>M.ago(t.run.createdAt),()=>M.duration(t.run.durationMs),()=>M.json(t.run.input)]),R(e,s),it()}gr(["click"]);var Ai=I("<span></span>"),Ni=I('<span class="dots svelte-wkwx94"></span>');function Mi(e,t){st(t,!0);var r=Ni();Ge(r,21,()=>t.steps,n=>n.key,(n,s)=>{var i=Ai();K(l=>{xt(i,1,`dot ${l??""}`,"svelte-wkwx94"),Tn(i,"title",`${v(s).key??""}: ${v(s).status??""} (${v(s).attempts??""} attempts)`)},[()=>lt.tone(v(s).status)]),R(n,i)}),R(e,r),it()}var Oi=I('<code class="svelte-l5tdp5"> </code>'),Ri=I('<span class="error svelte-l5tdp5"> </span>'),Ii=I('<li class="svelte-l5tdp5"><button><span class="top svelte-l5tdp5"><strong> </strong> <!></span> <span class="mid svelte-l5tdp5"><!> <!></span> <span class="bottom svelte-l5tdp5"><span> </span> <span> </span> <span> </span></span> <!></button></li>'),Ci=I('<li class="empty svelte-l5tdp5">No runs yet — schedule one with <code>scrapme.flow(…)</code>.</li>'),Di=I('<ul class="runs svelte-l5tdp5"></ul>');function Li(e,t){st(t,!0);var r=Di();Ge(r,21,()=>t.runs,n=>n.runId,(n,s)=>{var i=Ii(),l=x(i);let a;var o=x(l),u=x(o),f=T(u,!0),c=m(u,2);Ke(c,{get status(){return v(s).status}});var h=m(o,2),d=x(h);Mi(d,{get steps(){return v(s).steps}});var p=m(d,2);{var k=D=>{var N=Oi(),ge=T(N,!0);K(()=>b(ge,v(s).currentStep)),R(D,N)};be(p,D=>{v(s).currentStep&&D(k)})}var _=m(h,2),w=x(_),O=T(w,!0),C=m(w,2),j=T(C),Z=m(C,2),te=T(Z,!0),H=m(_,2);{var z=D=>{var N=Ri(),ge=T(N,!0);K(()=>b(ge,v(s).error)),R(D,N)};be(H,D=>{v(s).error&&D(z)})}K((D,N)=>{a=xt(l,1,"svelte-l5tdp5",null,a,{selected:v(s).runId===t.selected}),b(f,v(s).flow),b(O,D),b(j,`attempt ${v(s).flowAttempt??""}/${v(s).maxFlowAttempts??""}`),b(te,N)},[()=>M.ago(v(s).createdAt),()=>M.duration(v(s).durationMs)]),Pt("click",l,()=>t.onselect(v(s).runId)),R(n,i)},n=>{var s=Ci();R(n,s)}),R(e,r),it()}gr(["click"]);var Ui=I('<button><strong class="svelte-d3ct2b"> </strong> </button>'),Pi=I('<nav class="counts svelte-d3ct2b"><!> <a target="_blank" rel="noreferrer" class="svelte-d3ct2b">CouchDB</a></nav>'),Fi=I('<p class="error svelte-d3ct2b"> </p>'),Hi=I("<option> </option>"),ji=I('<p class="muted svelte-d3ct2b">Select a run.</p>'),qi=I('<header class="svelte-d3ct2b"><h1 class="svelte-d3ct2b">scrapme <span class="svelte-d3ct2b">monitor</span></h1> <!></header> <!> <main class="svelte-d3ct2b"><aside class="svelte-d3ct2b"><div class="filters svelte-d3ct2b"><select class="svelte-d3ct2b"><option>all flows</option><!></select></div> <!></aside> <section class="detail svelte-d3ct2b"><!></section></main>',1);function Bi(e,t){st(t,!0);const r=2e3,n=new mr;let s=Q(null),i=Q(He([])),l=Q(null),a=Q(He(location.hash.slice(1)||null)),o=Q(""),u=Q(""),f=Q(null);async function c(){try{const[g,y]=await Promise.all([n.overview(),n.runs({flow:v(o),status:v(u)})]);G(s,g,!0),G(i,y,!0),G(a,v(a)??v(i)[0]?.runId??null,!0),G(l,v(a)?await n.run(v(a)):null,!0),G(f,null)}catch(g){G(f,g.message,!0)}}function h(g){G(a,g,!0),location.hash=g,c()}function d(){const g=location.hash.slice(1)||null;g!==v(a)&&(G(a,g,!0),c())}window.addEventListener("hashchange",d),Cr(()=>window.removeEventListener("hashchange",d)),c();const p=setInterval(()=>{c()},r);Cr(()=>clearInterval(p));var k=qi(),_=nr(k),w=m(x(_),2);{var O=g=>{var y=Pi(),U=x(y);Ge(U,16,()=>Object.values(we),Y=>Y,(Y,V)=>{var ie=Ui();let ke;var Ae=x(ie),le=T(Ae,!0),L=m(Ae);K(me=>{ke=xt(ie,1,`count ${me??""}`,"svelte-d3ct2b",ke,{active:v(u)===V}),b(le,v(s).counts[V]),b(L,` ${V??""}`)},[()=>lt.tone(V)]),Pt("click",ie,()=>{G(u,v(u)===V?"":V,!0),c()}),R(Y,ie)});var se=m(U,2);K(()=>Tn(se,"href",`${v(s).couchUrl??""}/_utils/#database/${v(s).runsDb??""}/_all_docs`)),R(g,y)};be(w,g=>{v(s)&&g(O)})}var C=m(_,2);{var j=g=>{var y=Fi(),U=T(y);K(()=>b(U,`Monitor API not reachable: ${v(f)??""}`)),R(g,y)};be(C,g=>{v(f)&&g(j)})}var Z=m(C,2),te=x(Z),H=x(te),z=x(H),D=x(z);D.value=D.__value="";var N=m(D);Ge(N,16,()=>v(s)?.flows??[],g=>g,(g,y)=>{var U=Hi(),se=T(U,!0),Y={};K(()=>{b(se,y),Y!==(Y=y)&&(U.value=(U.__value=Y)??"")}),R(g,U)}),si(z);var ge=m(H,2);Li(ge,{get runs(){return v(i)},get selected(){return v(a)},onselect:h});var at=m(te,2),qt=x(at);{var Bt=g=>{ki(g,{get run(){return v(l)}})},Yt=g=>{var y=ji();R(g,y)};be(qt,g=>{v(l)?g(Bt):g(Yt,-1)})}Pt("change",z,()=>{c()}),ii(z,()=>v(o),g=>G(o,g)),R(e,k),it()}gr(["click","change"]);Ks(Bi,{target:document.getElementById("app")});
@@ -1,14 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1" />
6
- <title>scrapme monitor</title>
7
- <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><circle cx='8' cy='8' r='6' fill='%233b82f6'/></svg>" />
8
- <script type="module" crossorigin src="/assets/index-F0JnDwTs.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-D-otDb0Z.css">
10
- </head>
11
- <body>
12
- <div id="app"></div>
13
- </body>
14
- </html>