scrapme-flow 0.0.0-stage → 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/LICENSE +21 -0
- package/README.md +126 -2
- package/dist/src/commands/commands.models.d.ts +41 -0
- package/dist/src/commands/commands.models.js +2 -0
- package/dist/src/commands/commands.models.js.map +1 -0
- package/dist/src/commands/save-document.command.d.ts +9 -0
- package/dist/src/commands/save-document.command.js +33 -0
- package/dist/src/commands/save-document.command.js.map +1 -0
- package/dist/src/commands/scrape-page.command.d.ts +20 -0
- package/dist/src/commands/scrape-page.command.js +93 -0
- package/dist/src/commands/scrape-page.command.js.map +1 -0
- package/dist/src/commands/send-mail.command.d.ts +11 -0
- package/dist/src/commands/send-mail.command.js +39 -0
- package/dist/src/commands/send-mail.command.js.map +1 -0
- package/dist/src/config/config-builder.d.ts +24 -0
- package/dist/src/config/config-builder.js +129 -0
- package/dist/src/config/config-builder.js.map +1 -0
- package/dist/src/config/config-loader.d.ts +10 -0
- package/dist/src/config/config-loader.js +79 -0
- package/dist/src/config/config-loader.js.map +1 -0
- package/dist/src/config/config.models.d.ts +144 -0
- package/dist/src/config/config.models.js +2 -0
- package/dist/src/config/config.models.js.map +1 -0
- package/dist/src/config/config.schema.d.ts +75 -0
- package/dist/src/config/config.schema.js +87 -0
- package/dist/src/config/config.schema.js.map +1 -0
- package/dist/src/config/dsn-check.d.ts +5 -0
- package/dist/src/config/dsn-check.js +12 -0
- package/dist/src/config/dsn-check.js.map +1 -0
- package/dist/src/di/container.d.ts +13 -0
- package/dist/src/di/container.js +67 -0
- package/dist/src/di/container.js.map +1 -0
- package/dist/src/di/types.d.ts +27 -0
- package/dist/src/di/types.js +28 -0
- package/dist/src/di/types.js.map +1 -0
- package/dist/src/flow/command-executor.d.ts +18 -0
- package/dist/src/flow/command-executor.js +87 -0
- package/dist/src/flow/command-executor.js.map +1 -0
- package/dist/src/flow/command-resolver.d.ts +11 -0
- package/dist/src/flow/command-resolver.js +35 -0
- package/dist/src/flow/command-resolver.js.map +1 -0
- package/dist/src/flow/flow-catalog.d.ts +12 -0
- package/dist/src/flow/flow-catalog.js +31 -0
- package/dist/src/flow/flow-catalog.js.map +1 -0
- package/dist/src/flow/flow-errors.d.ts +66 -0
- package/dist/src/flow/flow-errors.js +119 -0
- package/dist/src/flow/flow-errors.js.map +1 -0
- package/dist/src/flow/flow-job-processor.d.ts +33 -0
- package/dist/src/flow/flow-job-processor.js +208 -0
- package/dist/src/flow/flow-job-processor.js.map +1 -0
- package/dist/src/flow/flow-params.d.ts +9 -0
- package/dist/src/flow/flow-params.js +52 -0
- package/dist/src/flow/flow-params.js.map +1 -0
- package/dist/src/flow/flow-runner.d.ts +36 -0
- package/dist/src/flow/flow-runner.js +209 -0
- package/dist/src/flow/flow-runner.js.map +1 -0
- package/dist/src/flow/flow-scheduler.d.ts +24 -0
- package/dist/src/flow/flow-scheduler.js +96 -0
- package/dist/src/flow/flow-scheduler.js.map +1 -0
- package/dist/src/flow/flow-validator.d.ts +29 -0
- package/dist/src/flow/flow-validator.js +141 -0
- package/dist/src/flow/flow-validator.js.map +1 -0
- package/dist/src/flow/flow.d.ts +32 -0
- package/dist/src/flow/flow.js +50 -0
- package/dist/src/flow/flow.js.map +1 -0
- package/dist/src/flow/flow.models.d.ts +288 -0
- package/dist/src/flow/flow.models.js +38 -0
- package/dist/src/flow/flow.models.js.map +1 -0
- package/dist/src/flow/retry-policy.d.ts +9 -0
- package/dist/src/flow/retry-policy.js +15 -0
- package/dist/src/flow/retry-policy.js.map +1 -0
- package/dist/src/flow/state-path.d.ts +21 -0
- package/dist/src/flow/state-path.js +37 -0
- package/dist/src/flow/state-path.js.map +1 -0
- package/dist/src/flow/step-input-builder.d.ts +15 -0
- package/dist/src/flow/step-input-builder.js +63 -0
- package/dist/src/flow/step-input-builder.js.map +1 -0
- package/dist/src/flows/scrape.flow.d.ts +6 -0
- package/dist/src/flows/scrape.flow.js +31 -0
- package/dist/src/flows/scrape.flow.js.map +1 -0
- package/dist/src/index.d.ts +57 -0
- package/dist/src/index.js +50 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/logging/logger.d.ts +17 -0
- package/dist/src/logging/logger.js +55 -0
- package/dist/src/logging/logger.js.map +1 -0
- package/dist/src/logging/logger.models.d.ts +25 -0
- package/dist/src/logging/logger.models.js +7 -0
- package/dist/src/logging/logger.models.js.map +1 -0
- package/dist/src/mail/mail.models.d.ts +15 -0
- package/dist/src/mail/mail.models.js +2 -0
- package/dist/src/mail/mail.models.js.map +1 -0
- package/dist/src/mail/smtp-mailer.d.ts +13 -0
- package/dist/src/mail/smtp-mailer.js +70 -0
- package/dist/src/mail/smtp-mailer.js.map +1 -0
- package/dist/src/mail/unconfigured-mailer.d.ts +6 -0
- package/dist/src/mail/unconfigured-mailer.js +20 -0
- package/dist/src/mail/unconfigured-mailer.js.map +1 -0
- package/dist/src/models.d.ts +11 -0
- package/dist/src/models.js +10 -0
- package/dist/src/models.js.map +1 -0
- package/dist/src/monitor/monitor-api.d.ts +18 -0
- package/dist/src/monitor/monitor-api.js +62 -0
- package/dist/src/monitor/monitor-api.js.map +1 -0
- package/dist/src/monitor/monitor-server.d.ts +33 -0
- package/dist/src/monitor/monitor-server.js +142 -0
- package/dist/src/monitor/monitor-server.js.map +1 -0
- package/dist/src/monitor/monitor.models.d.ts +27 -0
- package/dist/src/monitor/monitor.models.js +2 -0
- package/dist/src/monitor/monitor.models.js.map +1 -0
- package/dist/src/queue/pg-boss-flow-queue.d.ts +22 -0
- package/dist/src/queue/pg-boss-flow-queue.js +102 -0
- package/dist/src/queue/pg-boss-flow-queue.js.map +1 -0
- package/dist/src/queue/queue.models.d.ts +38 -0
- package/dist/src/queue/queue.models.js +2 -0
- package/dist/src/queue/queue.models.js.map +1 -0
- package/dist/src/reporting/lighty-error-reporter.d.ts +24 -0
- package/dist/src/reporting/lighty-error-reporter.js +96 -0
- package/dist/src/reporting/lighty-error-reporter.js.map +1 -0
- package/dist/src/reporting/log-error-reporter.d.ts +12 -0
- package/dist/src/reporting/log-error-reporter.js +35 -0
- package/dist/src/reporting/log-error-reporter.js.map +1 -0
- package/dist/src/reporting/reporting.models.d.ts +27 -0
- package/dist/src/reporting/reporting.models.js +2 -0
- package/dist/src/reporting/reporting.models.js.map +1 -0
- package/dist/src/scrapme.d.ts +61 -0
- package/dist/src/scrapme.js +133 -0
- package/dist/src/scrapme.js.map +1 -0
- package/dist/src/scrapme.models.d.ts +18 -0
- package/dist/src/scrapme.models.js +2 -0
- package/dist/src/scrapme.models.js.map +1 -0
- package/dist/src/storage/couch-connection.d.ts +19 -0
- package/dist/src/storage/couch-connection.js +67 -0
- package/dist/src/storage/couch-connection.js.map +1 -0
- package/dist/src/storage/couch-database.d.ts +44 -0
- package/dist/src/storage/couch-database.js +118 -0
- package/dist/src/storage/couch-database.js.map +1 -0
- package/dist/src/storage/couch-document-store.d.ts +14 -0
- package/dist/src/storage/couch-document-store.js +36 -0
- package/dist/src/storage/couch-document-store.js.map +1 -0
- package/dist/src/storage/couch-error.d.ts +12 -0
- package/dist/src/storage/couch-error.js +19 -0
- package/dist/src/storage/couch-error.js.map +1 -0
- package/dist/src/storage/couch-flow-run-store.d.ts +24 -0
- package/dist/src/storage/couch-flow-run-store.js +66 -0
- package/dist/src/storage/couch-flow-run-store.js.map +1 -0
- package/dist/src/storage/couch-run-store.d.ts +15 -0
- package/dist/src/storage/couch-run-store.js +52 -0
- package/dist/src/storage/couch-run-store.js.map +1 -0
- package/dist/src/storage/run-doc-ids.d.ts +9 -0
- package/dist/src/storage/run-doc-ids.js +15 -0
- package/dist/src/storage/run-doc-ids.js.map +1 -0
- package/dist/src/storage/storage.models.d.ts +95 -0
- package/dist/src/storage/storage.models.js +5 -0
- package/dist/src/storage/storage.models.js.map +1 -0
- package/dist/src/storage/unconfigured-document-store.d.ts +8 -0
- package/dist/src/storage/unconfigured-document-store.js +26 -0
- package/dist/src/storage/unconfigured-document-store.js.map +1 -0
- package/dist/src/util/preview.d.ts +10 -0
- package/dist/src/util/preview.js +44 -0
- package/dist/src/util/preview.js.map +1 -0
- package/dist/src/util/text.d.ts +8 -0
- package/dist/src/util/text.js +16 -0
- package/dist/src/util/text.js.map +1 -0
- package/dist/src/util/timing.d.ts +10 -0
- package/dist/src/util/timing.js +59 -0
- package/dist/src/util/timing.js.map +1 -0
- package/dist/src/util/url.d.ts +5 -0
- package/dist/src/util/url.js +11 -0
- package/dist/src/util/url.js.map +1 -0
- package/package.json +75 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-job-processor.js","sourceRoot":"","sources":["../../../src/flow/flow-job-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type FlowDefinition } from './flow.models.js';
|
|
2
|
+
/**
|
|
3
|
+
* Checks a run input against the flow's `<param>`s and fills in defaults: required params must be there,
|
|
4
|
+
* typed params must have that JS type (json = anything). Extra keys are kept (the state is the input).
|
|
5
|
+
*/
|
|
6
|
+
export declare class FlowParams {
|
|
7
|
+
apply(flow: FlowDefinition, input: Readonly<Record<string, unknown>>): Record<string, unknown>;
|
|
8
|
+
private static fits;
|
|
9
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var FlowParams_1;
|
|
8
|
+
import { injectable } from 'inversify';
|
|
9
|
+
import { FlowInputError } from './flow-errors.js';
|
|
10
|
+
import { VALUE_TYPE } from './flow.models.js';
|
|
11
|
+
/**
|
|
12
|
+
* Checks a run input against the flow's `<param>`s and fills in defaults: required params must be there,
|
|
13
|
+
* typed params must have that JS type (json = anything). Extra keys are kept (the state is the input).
|
|
14
|
+
*/
|
|
15
|
+
let FlowParams = FlowParams_1 = class FlowParams {
|
|
16
|
+
apply(flow, input) {
|
|
17
|
+
const state = { ...input };
|
|
18
|
+
const problems = [];
|
|
19
|
+
for (const param of flow.params) {
|
|
20
|
+
const given = state[param.name];
|
|
21
|
+
if (given === undefined) {
|
|
22
|
+
if (param.required)
|
|
23
|
+
problems.push(`missing required param "${param.name}"`);
|
|
24
|
+
else if (param.default !== undefined)
|
|
25
|
+
state[param.name] = structuredClone(param.default);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
if (!FlowParams_1.fits(param, given))
|
|
29
|
+
problems.push(`param "${param.name}" must be a ${param.type}, got ${given === null ? 'null' : typeof given}`);
|
|
30
|
+
}
|
|
31
|
+
if (problems.length > 0)
|
|
32
|
+
throw new FlowInputError(flow.name, problems);
|
|
33
|
+
return state;
|
|
34
|
+
}
|
|
35
|
+
static fits(param, value) {
|
|
36
|
+
switch (param.type) {
|
|
37
|
+
case VALUE_TYPE.STRING:
|
|
38
|
+
return typeof value === 'string';
|
|
39
|
+
case VALUE_TYPE.NUMBER:
|
|
40
|
+
return typeof value === 'number' && Number.isFinite(value);
|
|
41
|
+
case VALUE_TYPE.BOOLEAN:
|
|
42
|
+
return typeof value === 'boolean';
|
|
43
|
+
case VALUE_TYPE.JSON:
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
FlowParams = FlowParams_1 = __decorate([
|
|
49
|
+
injectable()
|
|
50
|
+
], FlowParams);
|
|
51
|
+
export { FlowParams };
|
|
52
|
+
//# sourceMappingURL=flow-params.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-params.js","sourceRoot":"","sources":["../../../src/flow/flow-params.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAuC,MAAM,kBAAkB,CAAC;AAEnF;;;GAGG;AAEI,IAAM,UAAU,kBAAhB,MAAM,UAAU;IACd,KAAK,CAAC,IAAoB,EAAE,KAAwC;QACzE,MAAM,KAAK,GAA4B,EAAE,GAAG,KAAK,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,KAAK,CAAC,QAAQ;oBAAE,QAAQ,CAAC,IAAI,CAAC,2BAA2B,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;qBACvE,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;oBAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACzF,SAAS;YACX,CAAC;YACD,IAAI,CAAC,YAAU,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,eAAe,KAAK,CAAC,IAAI,SAAS,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;QACpJ,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvE,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,MAAM,CAAC,IAAI,CAAC,KAAgB,EAAE,KAAc;QAClD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,UAAU,CAAC,MAAM;gBACpB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;YACnC,KAAK,UAAU,CAAC,MAAM;gBACpB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC7D,KAAK,UAAU,CAAC,OAAO;gBACrB,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC;YACpC,KAAK,UAAU,CAAC,IAAI;gBAClB,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;CACF,CAAA;AA7BY,UAAU;IADtB,UAAU,EAAE;GACA,UAAU,CA6BtB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ScrapmeConfig } from '../config/config.models.js';
|
|
2
|
+
import type { Logger } from '../logging/logger.js';
|
|
3
|
+
import type { ErrorReporter } from '../reporting/reporting.models.js';
|
|
4
|
+
import { type FlowRunStore } from '../storage/storage.models.js';
|
|
5
|
+
import type { CommandExecutor } from './command-executor.js';
|
|
6
|
+
import type { CommandResolver } from './command-resolver.js';
|
|
7
|
+
import type { FlowParams } from './flow-params.js';
|
|
8
|
+
import { type FlowDefinition, type FlowRunResult, type RunOptions } from './flow.models.js';
|
|
9
|
+
import type { StepInputBuilder } from './step-input-builder.js';
|
|
10
|
+
/**
|
|
11
|
+
* Executes a flow: steps in order, each through CommandExecutor (timeout + retries), its input built by
|
|
12
|
+
* StepInputBuilder from the state. Every failed attempt is stored (FlowRunStore) and logged into the error
|
|
13
|
+
* report's breadcrumbs; a step that finally fails is reported once (ErrorReporter → LightyErrors) and ends the run.
|
|
14
|
+
* The run itself is stored when it starts and ends.
|
|
15
|
+
*
|
|
16
|
+
* Before anything runs: input not matching the flow's params → FlowInputError (thrown, nothing stored). After that `run` never throws for a failing step — check
|
|
17
|
+
* `result.status`, or use `runOrThrow`.
|
|
18
|
+
*/
|
|
19
|
+
export declare class FlowRunner {
|
|
20
|
+
private readonly config;
|
|
21
|
+
private readonly resolver;
|
|
22
|
+
private readonly executor;
|
|
23
|
+
private readonly inputs;
|
|
24
|
+
private readonly params;
|
|
25
|
+
private readonly store;
|
|
26
|
+
private readonly reporter;
|
|
27
|
+
private readonly logger;
|
|
28
|
+
constructor(config: ScrapmeConfig, logger: Logger, resolver: CommandResolver, executor: CommandExecutor, inputs: StepInputBuilder, params: FlowParams, store: FlowRunStore, reporter: ErrorReporter);
|
|
29
|
+
run<S extends object = Record<string, unknown>>(flow: FlowDefinition, input: Readonly<Record<string, unknown>>, options?: RunOptions): Promise<FlowRunResult<S>>;
|
|
30
|
+
/** Like run, but throws FlowFailedError (cause = the step's error) and returns the final state. */
|
|
31
|
+
runOrThrow<S extends object = Record<string, unknown>>(flow: FlowDefinition, input: Readonly<Record<string, unknown>>, options?: RunOptions): Promise<S>;
|
|
32
|
+
private reportFailure;
|
|
33
|
+
private attemptFailed;
|
|
34
|
+
private setupFailure;
|
|
35
|
+
private short;
|
|
36
|
+
}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
10
|
+
import { randomUUID } from 'node:crypto';
|
|
11
|
+
import { inject, injectable } from 'inversify';
|
|
12
|
+
import { TYPES } from '../di/types.js';
|
|
13
|
+
import { LINE_LEVEL } from '../logging/logger.models.js';
|
|
14
|
+
import { RunDocIds } from '../storage/run-doc-ids.js';
|
|
15
|
+
import { DOC_TYPE } from '../storage/storage.models.js';
|
|
16
|
+
import { Preview } from '../util/preview.js';
|
|
17
|
+
import { FlowCancelledError, FlowFailedError, FlowErrors } from './flow-errors.js';
|
|
18
|
+
import { ATTEMPT_OUTCOME, RUN_STATUS, STEP_STATUS, } from './flow.models.js';
|
|
19
|
+
/**
|
|
20
|
+
* Executes a flow: steps in order, each through CommandExecutor (timeout + retries), its input built by
|
|
21
|
+
* StepInputBuilder from the state. Every failed attempt is stored (FlowRunStore) and logged into the error
|
|
22
|
+
* report's breadcrumbs; a step that finally fails is reported once (ErrorReporter → LightyErrors) and ends the run.
|
|
23
|
+
* The run itself is stored when it starts and ends.
|
|
24
|
+
*
|
|
25
|
+
* Before anything runs: input not matching the flow's params → FlowInputError (thrown, nothing stored). After that `run` never throws for a failing step — check
|
|
26
|
+
* `result.status`, or use `runOrThrow`.
|
|
27
|
+
*/
|
|
28
|
+
let FlowRunner = class FlowRunner {
|
|
29
|
+
config;
|
|
30
|
+
resolver;
|
|
31
|
+
executor;
|
|
32
|
+
inputs;
|
|
33
|
+
params;
|
|
34
|
+
store;
|
|
35
|
+
reporter;
|
|
36
|
+
logger;
|
|
37
|
+
constructor(config, logger, resolver, executor, inputs, params, store, reporter) {
|
|
38
|
+
this.config = config;
|
|
39
|
+
this.resolver = resolver;
|
|
40
|
+
this.executor = executor;
|
|
41
|
+
this.inputs = inputs;
|
|
42
|
+
this.params = params;
|
|
43
|
+
this.store = store;
|
|
44
|
+
this.reporter = reporter;
|
|
45
|
+
this.logger = logger.child({ component: 'flow' });
|
|
46
|
+
}
|
|
47
|
+
async run(flow, input, options = {}) {
|
|
48
|
+
let state = this.params.apply(flow, input);
|
|
49
|
+
const runId = options.runId ?? randomUUID();
|
|
50
|
+
const log = this.logger.child({ flow: flow.name, runId });
|
|
51
|
+
const started = new Date();
|
|
52
|
+
const doc = {
|
|
53
|
+
_id: RunDocIds.run(runId),
|
|
54
|
+
type: DOC_TYPE.FLOW_RUN,
|
|
55
|
+
runId,
|
|
56
|
+
flow: flow.name,
|
|
57
|
+
status: RUN_STATUS.RUNNING,
|
|
58
|
+
tags: { ...flow.tags },
|
|
59
|
+
input: this.short(state),
|
|
60
|
+
steps: flow.steps.map((s) => ({ key: s.key, command: s.commandName, status: STEP_STATUS.SKIPPED, attempts: [], durationMs: 0 })),
|
|
61
|
+
startedAt: started.toISOString(),
|
|
62
|
+
};
|
|
63
|
+
await this.store.runStarted(doc);
|
|
64
|
+
const keys = flow.steps.map((s) => s.key);
|
|
65
|
+
log.info('flow started', { steps: keys });
|
|
66
|
+
this.reporter.log(`flow ${flow.name} started`, { runId, steps: keys });
|
|
67
|
+
let failure = null;
|
|
68
|
+
for (const [index, step] of flow.steps.entries()) {
|
|
69
|
+
const stepLog = log.child({ step: step.key, command: step.commandName });
|
|
70
|
+
let command;
|
|
71
|
+
let stepInput;
|
|
72
|
+
try {
|
|
73
|
+
if (options.signal?.aborted)
|
|
74
|
+
throw new FlowCancelledError(options.signal.reason);
|
|
75
|
+
command = this.resolver.resolve(step.command);
|
|
76
|
+
stepInput = this.inputs.build(step.input, state, step.key);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
// a missing value or an unresolvable command: the same state gives the same error, nothing to retry
|
|
80
|
+
const report = this.setupFailure(error);
|
|
81
|
+
doc.steps[index] = { ...doc.steps[index], status: STEP_STATUS.FAILED, attempts: [report], error: report.error };
|
|
82
|
+
stepLog.error('step failed before it started', { error });
|
|
83
|
+
await this.attemptFailed(doc, step, 1, 1, error, report, true, undefined);
|
|
84
|
+
failure = { step, error, attempts: [report], input: undefined };
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
stepLog.info('step started');
|
|
88
|
+
this.reporter.log(`step ${step.key} (${step.commandName}) started`, { runId });
|
|
89
|
+
const maxAttempts = this.executor.policy(step, command).maxAttempts;
|
|
90
|
+
const execution = await this.executor.execute(step, command, stepInput, { runId, flow: flow.name, step: step.key, logger: stepLog, state: Object.freeze({ ...state }) }, options.signal, async (report, error, final) => {
|
|
91
|
+
const message = final ? 'step failed' : `attempt failed, retrying in ${report.retryInMs} ms`;
|
|
92
|
+
stepLog[final ? LINE_LEVEL.ERROR : LINE_LEVEL.WARN](message, { attempt: report.attempt, maxAttempts, error });
|
|
93
|
+
await this.attemptFailed(doc, step, report.attempt, maxAttempts, error, report, final, stepInput);
|
|
94
|
+
});
|
|
95
|
+
const stepReport = {
|
|
96
|
+
key: step.key,
|
|
97
|
+
command: step.commandName,
|
|
98
|
+
status: execution.ok ? STEP_STATUS.SUCCEEDED : STEP_STATUS.FAILED,
|
|
99
|
+
attempts: execution.attempts,
|
|
100
|
+
durationMs: execution.durationMs,
|
|
101
|
+
};
|
|
102
|
+
if (execution.ok) {
|
|
103
|
+
state = { ...state, [step.key]: execution.value };
|
|
104
|
+
stepReport.output = this.short(execution.value);
|
|
105
|
+
doc.steps[index] = stepReport;
|
|
106
|
+
stepLog.info('step succeeded', { attempts: execution.attempts.length, ms: execution.durationMs });
|
|
107
|
+
this.reporter.log(`step ${step.key} succeeded`, { runId, attempts: execution.attempts.length, ms: execution.durationMs });
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
stepReport.error = FlowErrors.serialize(execution.error);
|
|
111
|
+
doc.steps[index] = stepReport;
|
|
112
|
+
failure = { step, error: execution.error, attempts: execution.attempts, input: stepInput };
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
const finished = new Date();
|
|
116
|
+
const result = {
|
|
117
|
+
runId,
|
|
118
|
+
flow: flow.name,
|
|
119
|
+
status: failure ? RUN_STATUS.FAILED : RUN_STATUS.SUCCEEDED,
|
|
120
|
+
state: state,
|
|
121
|
+
steps: doc.steps,
|
|
122
|
+
startedAt: doc.startedAt,
|
|
123
|
+
finishedAt: finished.toISOString(),
|
|
124
|
+
durationMs: finished.getTime() - started.getTime(),
|
|
125
|
+
};
|
|
126
|
+
if (failure) {
|
|
127
|
+
await this.reportFailure(flow, runId, failure, result, doc, log);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
log.info('flow succeeded', { ms: result.durationMs });
|
|
131
|
+
}
|
|
132
|
+
doc.status = result.status;
|
|
133
|
+
doc.finishedAt = result.finishedAt;
|
|
134
|
+
doc.durationMs = result.durationMs;
|
|
135
|
+
await this.store.runFinished(doc);
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
/** Like run, but throws FlowFailedError (cause = the step's error) and returns the final state. */
|
|
139
|
+
async runOrThrow(flow, input, options = {}) {
|
|
140
|
+
const result = await this.run(flow, input, options);
|
|
141
|
+
if (result.status === RUN_STATUS.FAILED) {
|
|
142
|
+
const failed = result.steps.find((s) => s.status === STEP_STATUS.FAILED);
|
|
143
|
+
throw new FlowFailedError(flow.name, failed?.key ?? '?', result.runId, result.cause);
|
|
144
|
+
}
|
|
145
|
+
return result.state;
|
|
146
|
+
}
|
|
147
|
+
async reportFailure(flow, runId, failure, result, doc, log) {
|
|
148
|
+
const error = FlowErrors.serialize(failure.error);
|
|
149
|
+
result.error = error;
|
|
150
|
+
result.cause = failure.error;
|
|
151
|
+
const last = failure.attempts.at(-1);
|
|
152
|
+
const eventId = this.reporter.report(failure.error, {
|
|
153
|
+
flow: flow.name,
|
|
154
|
+
step: failure.step.key,
|
|
155
|
+
command: failure.step.commandName,
|
|
156
|
+
runId,
|
|
157
|
+
attempt: last?.attempt ?? 1,
|
|
158
|
+
maxAttempts: failure.attempts.length,
|
|
159
|
+
input: this.short(failure.input),
|
|
160
|
+
tags: { ...flow.tags },
|
|
161
|
+
extra: { attempts: failure.attempts.map((a) => ({ attempt: a.attempt, outcome: a.outcome, ms: a.durationMs, error: a.error?.message })) },
|
|
162
|
+
});
|
|
163
|
+
if (eventId)
|
|
164
|
+
result.reportEventId = eventId;
|
|
165
|
+
doc.error = { ...error, step: failure.step.key };
|
|
166
|
+
if (eventId)
|
|
167
|
+
doc.reportEventId = eventId;
|
|
168
|
+
log.error('flow failed', { step: failure.step.key, ms: result.durationMs, eventId: eventId || undefined });
|
|
169
|
+
await this.reporter.flush();
|
|
170
|
+
}
|
|
171
|
+
async attemptFailed(run, step, attempt, maxAttempts, error, report, final, input) {
|
|
172
|
+
const level = final ? LINE_LEVEL.ERROR : LINE_LEVEL.WARN;
|
|
173
|
+
this.reporter.log(`step ${step.key} attempt ${attempt}/${maxAttempts} failed${final ? '' : ', retrying'}`, { error: report.error?.message }, level);
|
|
174
|
+
const doc = {
|
|
175
|
+
_id: RunDocIds.error(run.runId, step.key, attempt),
|
|
176
|
+
type: DOC_TYPE.FLOW_ERROR,
|
|
177
|
+
runId: run.runId,
|
|
178
|
+
flow: run.flow,
|
|
179
|
+
step: step.key,
|
|
180
|
+
command: step.commandName,
|
|
181
|
+
attempt,
|
|
182
|
+
maxAttempts,
|
|
183
|
+
final,
|
|
184
|
+
error: report.error ?? FlowErrors.serialize(error),
|
|
185
|
+
input: this.short(input),
|
|
186
|
+
at: new Date().toISOString(),
|
|
187
|
+
};
|
|
188
|
+
await this.store.attemptFailed(doc);
|
|
189
|
+
}
|
|
190
|
+
setupFailure(error) {
|
|
191
|
+
return { attempt: 1, startedAt: new Date().toISOString(), durationMs: 0, outcome: ATTEMPT_OUTCOME.FAILED, error: FlowErrors.serialize(error) };
|
|
192
|
+
}
|
|
193
|
+
short(value) {
|
|
194
|
+
return Preview.of(value, this.config.flow.maxStoredChars);
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
FlowRunner = __decorate([
|
|
198
|
+
injectable(),
|
|
199
|
+
__param(0, inject(TYPES.Config)),
|
|
200
|
+
__param(1, inject(TYPES.Logger)),
|
|
201
|
+
__param(2, inject(TYPES.CommandResolver)),
|
|
202
|
+
__param(3, inject(TYPES.CommandExecutor)),
|
|
203
|
+
__param(4, inject(TYPES.StepInputBuilder)),
|
|
204
|
+
__param(5, inject(TYPES.FlowParams)),
|
|
205
|
+
__param(6, inject(TYPES.FlowRunStore)),
|
|
206
|
+
__param(7, inject(TYPES.ErrorReporter))
|
|
207
|
+
], FlowRunner);
|
|
208
|
+
export { FlowRunner };
|
|
209
|
+
//# sourceMappingURL=flow-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-runner.js","sourceRoot":"","sources":["../../../src/flow/flow-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { QueueConfig } from '../config/config.models.js';
|
|
2
|
+
import type { Logger } from '../logging/logger.js';
|
|
3
|
+
import type { FlowQueue } from '../queue/queue.models.js';
|
|
4
|
+
import { type RunStore } from '../storage/storage.models.js';
|
|
5
|
+
import type { FlowParams } from './flow-params.js';
|
|
6
|
+
import { type ScheduleOptions } from './flow.models.js';
|
|
7
|
+
import type { Flow } from './flow.js';
|
|
8
|
+
/**
|
|
9
|
+
* scrapme.flow(): checks the input, writes the run document (status queued, every step pending) and puts one job
|
|
10
|
+
* on the flow's queue. Returns at once — a worker runs the flow later. Run ids are UUIDv7: they sort by creation
|
|
11
|
+
* time, and so do the run documents.
|
|
12
|
+
*/
|
|
13
|
+
export declare class FlowScheduler {
|
|
14
|
+
private readonly params;
|
|
15
|
+
private readonly store;
|
|
16
|
+
private readonly queue;
|
|
17
|
+
private readonly defaults;
|
|
18
|
+
private readonly logger;
|
|
19
|
+
constructor(params: FlowParams, store: RunStore, queue: FlowQueue, defaults: QueueConfig, logger: Logger);
|
|
20
|
+
/** The pg-boss queue of a flow. */
|
|
21
|
+
queueName(flow: Flow): string;
|
|
22
|
+
/** Throws FlowInputError (input vs params), TypeError (bad or taken runId). */
|
|
23
|
+
schedule(flow: Flow, input: Readonly<Record<string, unknown>>, options?: ScheduleOptions): Promise<string>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
8
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
9
|
+
};
|
|
10
|
+
import { inject, injectable } from 'inversify';
|
|
11
|
+
import { v7 as uuidv7, validate as isUuid } from 'uuid';
|
|
12
|
+
import { TYPES } from '../di/types.js';
|
|
13
|
+
import { RunDocIds } from '../storage/run-doc-ids.js';
|
|
14
|
+
import { DOC_TYPE } from '../storage/storage.models.js';
|
|
15
|
+
import { FlowErrors } from './flow-errors.js';
|
|
16
|
+
import { RUN_STATUS, STEP_STATUS } from './flow.models.js';
|
|
17
|
+
/**
|
|
18
|
+
* scrapme.flow(): checks the input, writes the run document (status queued, every step pending) and puts one job
|
|
19
|
+
* on the flow's queue. Returns at once — a worker runs the flow later. Run ids are UUIDv7: they sort by creation
|
|
20
|
+
* time, and so do the run documents.
|
|
21
|
+
*/
|
|
22
|
+
let FlowScheduler = class FlowScheduler {
|
|
23
|
+
params;
|
|
24
|
+
store;
|
|
25
|
+
queue;
|
|
26
|
+
defaults;
|
|
27
|
+
logger;
|
|
28
|
+
constructor(params, store, queue, defaults, logger) {
|
|
29
|
+
this.params = params;
|
|
30
|
+
this.store = store;
|
|
31
|
+
this.queue = queue;
|
|
32
|
+
this.defaults = defaults;
|
|
33
|
+
this.logger = logger.child({ component: 'scheduler' });
|
|
34
|
+
}
|
|
35
|
+
/** The pg-boss queue of a flow. */
|
|
36
|
+
queueName(flow) {
|
|
37
|
+
return this.defaults.prefix + flow.name;
|
|
38
|
+
}
|
|
39
|
+
/** Throws FlowInputError (input vs params), TypeError (bad or taken runId). */
|
|
40
|
+
async schedule(flow, input, options = {}) {
|
|
41
|
+
const state = this.params.apply(flow, input);
|
|
42
|
+
if (options.runId !== undefined && !isUuid(options.runId))
|
|
43
|
+
throw new TypeError(`runId must be a UUID (pg-boss job ids are), got "${options.runId}"`);
|
|
44
|
+
const runId = options.runId ?? uuidv7();
|
|
45
|
+
const q = { retries: flow.queue.retries ?? this.defaults.retries, retryDelaySeconds: flow.queue.retryDelaySeconds ?? this.defaults.retryDelaySeconds, retryBackoff: flow.queue.retryBackoff ?? this.defaults.retryBackoff, timeoutSeconds: flow.queue.timeoutSeconds ?? this.defaults.timeoutSeconds };
|
|
46
|
+
const now = new Date().toISOString();
|
|
47
|
+
const doc = {
|
|
48
|
+
_id: RunDocIds.run(runId),
|
|
49
|
+
type: DOC_TYPE.FLOW_RUN,
|
|
50
|
+
runId,
|
|
51
|
+
flow: flow.name,
|
|
52
|
+
status: RUN_STATUS.QUEUED,
|
|
53
|
+
tags: { ...flow.tags },
|
|
54
|
+
input: state,
|
|
55
|
+
steps: flow.steps.map((s) => ({ key: s.key, command: s.commandName, status: STEP_STATUS.PENDING, attempts: [] })),
|
|
56
|
+
currentStep: null,
|
|
57
|
+
flowAttempts: [],
|
|
58
|
+
maxFlowAttempts: q.retries + 1,
|
|
59
|
+
createdAt: now,
|
|
60
|
+
updatedAt: now,
|
|
61
|
+
};
|
|
62
|
+
if (await this.store.get(runId))
|
|
63
|
+
throw new TypeError(`run ${runId} exists already`);
|
|
64
|
+
await this.store.create(doc);
|
|
65
|
+
try {
|
|
66
|
+
await this.queue.schedule(this.queueName(flow), { runId }, {
|
|
67
|
+
id: runId,
|
|
68
|
+
retryLimit: q.retries,
|
|
69
|
+
retryDelaySeconds: q.retryDelaySeconds,
|
|
70
|
+
retryBackoff: q.retryBackoff,
|
|
71
|
+
expireInSeconds: q.timeoutSeconds,
|
|
72
|
+
...(options.startAfter ? { startAfter: options.startAfter } : {}),
|
|
73
|
+
...(options.priority !== undefined ? { priority: options.priority } : {}),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
await this.store.update(runId, (d) => {
|
|
78
|
+
d.status = RUN_STATUS.FAILED;
|
|
79
|
+
d.error = { ...FlowErrors.serialize(error), step: '' };
|
|
80
|
+
});
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
this.logger.info('flow scheduled', { flow: flow.name, runId, attempts: q.retries + 1, timeoutSeconds: q.timeoutSeconds });
|
|
84
|
+
return runId;
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
FlowScheduler = __decorate([
|
|
88
|
+
injectable(),
|
|
89
|
+
__param(0, inject(TYPES.FlowParams)),
|
|
90
|
+
__param(1, inject(TYPES.RunStore)),
|
|
91
|
+
__param(2, inject(TYPES.FlowQueue)),
|
|
92
|
+
__param(3, inject(TYPES.QueueConfig)),
|
|
93
|
+
__param(4, inject(TYPES.Logger))
|
|
94
|
+
], FlowScheduler);
|
|
95
|
+
export { FlowScheduler };
|
|
96
|
+
//# sourceMappingURL=flow-scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-scheduler.js","sourceRoot":"","sources":["../../../src/flow/flow-scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type CommandRef, type FlowConfig, type FlowDefinition } from './flow.models.js';
|
|
2
|
+
/**
|
|
3
|
+
* Checks a flow config (a `*.flow.ts` file) and turns it into a FlowDefinition, or throws FlowDefinitionError saying
|
|
4
|
+
* where (`flow "hello": steps[0] "printed".input["text"]: …`). Shape with zod; then what zod can't see: unique keys
|
|
5
|
+
* (a step's key defaults to its command's name), `from` paths that start with a param or an EARLIER step, commands
|
|
6
|
+
* that have an `execute` method. Field functions are plain JS and are not looked into.
|
|
7
|
+
*/
|
|
8
|
+
export declare class FlowValidator {
|
|
9
|
+
/**
|
|
10
|
+
* Step keys and param names become state properties and the first part of paths, so they must be plain
|
|
11
|
+
* identifiers. A regex is the clearest way to say that (it's a rule about characters, not about structure).
|
|
12
|
+
*/
|
|
13
|
+
private static readonly IDENTIFIER;
|
|
14
|
+
private static readonly IDENTIFIER_RULE;
|
|
15
|
+
private static readonly identifier;
|
|
16
|
+
private static readonly int;
|
|
17
|
+
private static readonly field;
|
|
18
|
+
private static readonly schema;
|
|
19
|
+
validate(config: FlowConfig): FlowDefinition;
|
|
20
|
+
/** A class whose prototype has execute(), or an object with execute(). */
|
|
21
|
+
static isCommand(value: unknown): value is CommandRef;
|
|
22
|
+
/** Class name, the name of a FunctionCommand, or the object's class name. */
|
|
23
|
+
static commandName(command: CommandRef): string;
|
|
24
|
+
private param;
|
|
25
|
+
private step;
|
|
26
|
+
private field;
|
|
27
|
+
/** A path must start with a param or an earlier step's key. */
|
|
28
|
+
private reference;
|
|
29
|
+
}
|