pipework 0.211.1 → 0.242.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/CHANGELOG.md +140 -0
- package/REFERENCE.md +95 -2
- package/dist/async/jobs/claims.d.ts +1 -1
- package/dist/async/jobs/claims.d.ts.map +1 -1
- package/dist/async/jobs/claims.js +2 -1
- package/dist/async/jobs/claims.js.map +1 -1
- package/dist/async/jobs/queue.d.ts +11 -2
- package/dist/async/jobs/queue.d.ts.map +1 -1
- package/dist/async/jobs/queue.js +93 -25
- package/dist/async/jobs/queue.js.map +1 -1
- package/dist/async/jobs/table.d.ts +4 -0
- package/dist/async/jobs/table.d.ts.map +1 -1
- package/dist/async/jobs/table.js +12 -1
- package/dist/async/jobs/table.js.map +1 -1
- package/dist/cli/commands/openapi.d.ts +8 -0
- package/dist/cli/commands/openapi.d.ts.map +1 -0
- package/dist/cli/commands/openapi.js +49 -0
- package/dist/cli/commands/openapi.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +8 -0
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/serve.js +22 -3
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/dev-bootstrap.js +6 -1
- package/dist/cli/dev-bootstrap.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +15 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/surface-kinds.d.ts +5 -0
- package/dist/cli/surface-kinds.d.ts.map +1 -0
- package/dist/cli/surface-kinds.js +15 -0
- package/dist/cli/surface-kinds.js.map +1 -0
- package/dist/core/config/load.d.ts +1 -0
- package/dist/core/config/load.d.ts.map +1 -1
- package/dist/core/config/load.js +1 -0
- package/dist/core/config/load.js.map +1 -1
- package/dist/core/config/namespace.d.ts +6 -0
- package/dist/core/config/namespace.d.ts.map +1 -1
- package/dist/core/config/schema.d.ts +15 -0
- package/dist/core/config/schema.d.ts.map +1 -1
- package/dist/core/config/schema.js +11 -2
- package/dist/core/config/schema.js.map +1 -1
- package/dist/core/lifecycle/health.js +2 -2
- package/dist/core/lifecycle/health.js.map +1 -1
- package/dist/core/lifecycle/types.d.ts +2 -0
- package/dist/core/lifecycle/types.d.ts.map +1 -1
- package/dist/core/pipework.d.ts +14 -1
- package/dist/core/pipework.d.ts.map +1 -1
- package/dist/core/pipework.js +18 -2
- package/dist/core/pipework.js.map +1 -1
- package/dist/core/surface/http.d.ts +3 -0
- package/dist/core/surface/http.d.ts.map +1 -1
- package/dist/core/surface/http.js +27 -8
- package/dist/core/surface/http.js.map +1 -1
- package/dist/core/surface/start.d.ts.map +1 -1
- package/dist/core/surface/start.js +19 -3
- package/dist/core/surface/start.js.map +1 -1
- package/dist/core/surface/types.d.ts +9 -1
- package/dist/core/surface/types.d.ts.map +1 -1
- package/dist/data/db/filter.d.ts +3 -0
- package/dist/data/db/filter.d.ts.map +1 -1
- package/dist/data/db/filter.js +3 -0
- package/dist/data/db/filter.js.map +1 -1
- package/dist/data/db/in-list.d.ts +15 -0
- package/dist/data/db/in-list.d.ts.map +1 -0
- package/dist/data/db/in-list.js +51 -0
- package/dist/data/db/in-list.js.map +1 -0
- package/dist/data/db/namespace.d.ts +2 -0
- package/dist/data/db/namespace.d.ts.map +1 -1
- package/dist/data/db/pool.d.ts +1 -1
- package/dist/data/db/pool.d.ts.map +1 -1
- package/dist/data/db/pool.js +4 -2
- package/dist/data/db/pool.js.map +1 -1
- package/dist/data/db/reservation.d.ts +40 -0
- package/dist/data/db/reservation.d.ts.map +1 -0
- package/dist/data/db/reservation.js +108 -0
- package/dist/data/db/reservation.js.map +1 -0
- package/dist/data/domain/build-table.js +32 -1
- package/dist/data/domain/build-table.js.map +1 -1
- package/dist/data/domain/index.d.ts +2 -1
- package/dist/data/domain/index.d.ts.map +1 -1
- package/dist/data/domain/types.d.ts +9 -1
- package/dist/data/domain/types.d.ts.map +1 -1
- package/dist/data/domain/types.js.map +1 -1
- package/dist/data/migrate/apply.d.ts.map +1 -1
- package/dist/data/migrate/apply.js +3 -11
- package/dist/data/migrate/apply.js.map +1 -1
- package/dist/data/migrate/check.d.ts.map +1 -1
- package/dist/data/migrate/check.js +3 -6
- package/dist/data/migrate/check.js.map +1 -1
- package/dist/data/migrate/diff.d.ts +16 -0
- package/dist/data/migrate/diff.d.ts.map +1 -1
- package/dist/data/migrate/diff.js +44 -4
- package/dist/data/migrate/diff.js.map +1 -1
- package/dist/data/migrate/generate.d.ts +1 -1
- package/dist/data/migrate/generate.d.ts.map +1 -1
- package/dist/data/migrate/generate.js +19 -51
- package/dist/data/migrate/generate.js.map +1 -1
- package/dist/data/migrate/history.d.ts +36 -0
- package/dist/data/migrate/history.d.ts.map +1 -0
- package/dist/data/migrate/history.js +185 -0
- package/dist/data/migrate/history.js.map +1 -0
- package/dist/data/migrate/internal-definitions.d.ts.map +1 -1
- package/dist/data/migrate/internal-definitions.js +22 -1
- package/dist/data/migrate/internal-definitions.js.map +1 -1
- package/dist/data/migrate/provision-framework.d.ts +2 -0
- package/dist/data/migrate/provision-framework.d.ts.map +1 -1
- package/dist/data/migrate/provision-framework.js +11 -3
- package/dist/data/migrate/provision-framework.js.map +1 -1
- package/dist/data/migrate/snapshot.d.ts +4 -0
- package/dist/data/migrate/snapshot.d.ts.map +1 -1
- package/dist/data/migrate/snapshot.js +2 -0
- package/dist/data/migrate/snapshot.js.map +1 -1
- package/dist/data/migrate/sql-emit.js +66 -12
- package/dist/data/migrate/sql-emit.js.map +1 -1
- package/dist/data/query/pg-core/foreign-keys.d.ts +5 -0
- package/dist/data/query/pg-core/foreign-keys.d.ts.map +1 -1
- package/dist/data/query/pg-core/foreign-keys.js +9 -0
- package/dist/data/query/pg-core/foreign-keys.js.map +1 -1
- package/dist/data/query/pg-core/indexes.d.ts +5 -0
- package/dist/data/query/pg-core/indexes.d.ts.map +1 -1
- package/dist/data/query/pg-core/indexes.js +7 -0
- package/dist/data/query/pg-core/indexes.js.map +1 -1
- package/dist/data/schema/json-schema.js +29 -1
- package/dist/data/schema/json-schema.js.map +1 -1
- package/dist/data/schema/types.d.ts +2 -2
- package/dist/data/schema/types.d.ts.map +1 -1
- package/dist/index.d.ts +18 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/infra/alerts/handle.d.ts +33 -5
- package/dist/infra/alerts/handle.d.ts.map +1 -1
- package/dist/infra/alerts/handle.js +56 -12
- package/dist/infra/alerts/handle.js.map +1 -1
- package/dist/infra/alerts/http.d.ts +2 -2
- package/dist/infra/alerts/http.d.ts.map +1 -1
- package/dist/infra/alerts/http.js +21 -3
- package/dist/infra/alerts/http.js.map +1 -1
- package/dist/infra/alerts/index.d.ts +1 -1
- package/dist/infra/alerts/index.d.ts.map +1 -1
- package/dist/infra/alerts/schema.d.ts +5 -0
- package/dist/infra/alerts/schema.d.ts.map +1 -1
- package/dist/infra/alerts/schema.js +1 -0
- package/dist/infra/alerts/schema.js.map +1 -1
- package/dist/infra/crawl/audit.d.ts +6 -0
- package/dist/infra/crawl/audit.d.ts.map +1 -0
- package/dist/infra/crawl/audit.js +38 -0
- package/dist/infra/crawl/audit.js.map +1 -0
- package/dist/infra/crawl/errors.d.ts +14 -0
- package/dist/infra/crawl/errors.d.ts.map +1 -0
- package/dist/infra/crawl/errors.js +22 -0
- package/dist/infra/crawl/errors.js.map +1 -0
- package/dist/infra/crawl/handle.d.ts +149 -0
- package/dist/infra/crawl/handle.d.ts.map +1 -0
- package/dist/infra/crawl/handle.js +550 -0
- package/dist/infra/crawl/handle.js.map +1 -0
- package/dist/infra/crawl/index.d.ts +7 -0
- package/dist/infra/crawl/index.d.ts.map +1 -0
- package/dist/infra/crawl/index.js +5 -0
- package/dist/infra/crawl/index.js.map +1 -0
- package/dist/infra/crawl/links.d.ts +9 -0
- package/dist/infra/crawl/links.d.ts.map +1 -0
- package/dist/infra/crawl/links.js +194 -0
- package/dist/infra/crawl/links.js.map +1 -0
- package/dist/infra/crawl/namespace.d.ts +36 -0
- package/dist/infra/crawl/namespace.d.ts.map +1 -0
- package/dist/infra/crawl/namespace.js +36 -0
- package/dist/infra/crawl/namespace.js.map +1 -0
- package/dist/infra/crawl/robots.d.ts +16 -0
- package/dist/infra/crawl/robots.d.ts.map +1 -0
- package/dist/infra/crawl/robots.js +98 -0
- package/dist/infra/crawl/robots.js.map +1 -0
- package/dist/infra/crawl/schema.d.ts +222 -0
- package/dist/infra/crawl/schema.d.ts.map +1 -0
- package/dist/infra/crawl/schema.js +84 -0
- package/dist/infra/crawl/schema.js.map +1 -0
- package/dist/infra/credit-line/handle.d.ts +250 -0
- package/dist/infra/credit-line/handle.d.ts.map +1 -0
- package/dist/infra/credit-line/handle.js +618 -0
- package/dist/infra/credit-line/handle.js.map +1 -0
- package/dist/infra/credit-line/index.d.ts +3 -0
- package/dist/infra/credit-line/index.d.ts.map +1 -0
- package/dist/infra/credit-line/index.js +2 -0
- package/dist/infra/credit-line/index.js.map +1 -0
- package/dist/infra/credit-line/namespace.d.ts +7 -0
- package/dist/infra/credit-line/namespace.d.ts.map +1 -0
- package/dist/infra/credit-line/namespace.js +7 -0
- package/dist/infra/credit-line/namespace.js.map +1 -0
- package/dist/infra/credit-line/schema.d.ts +194 -0
- package/dist/infra/credit-line/schema.d.ts.map +1 -0
- package/dist/infra/credit-line/schema.js +89 -0
- package/dist/infra/credit-line/schema.js.map +1 -0
- package/dist/infra/email/inbound.d.ts +14 -2
- package/dist/infra/email/inbound.d.ts.map +1 -1
- package/dist/infra/email/inbound.js +5 -1
- package/dist/infra/email/inbound.js.map +1 -1
- package/dist/infra/email/index.d.ts +2 -2
- package/dist/infra/email/index.d.ts.map +1 -1
- package/dist/infra/email/index.js.map +1 -1
- package/dist/infra/email/mail.d.ts +43 -5
- package/dist/infra/email/mail.d.ts.map +1 -1
- package/dist/infra/email/mail.js +124 -9
- package/dist/infra/email/mail.js.map +1 -1
- package/dist/infra/email/mime.d.ts +6 -0
- package/dist/infra/email/mime.d.ts.map +1 -1
- package/dist/infra/email/mime.js +10 -2
- package/dist/infra/email/mime.js.map +1 -1
- package/dist/infra/email/schema.d.ts +17 -3
- package/dist/infra/email/schema.d.ts.map +1 -1
- package/dist/infra/email/schema.js +15 -4
- package/dist/infra/email/schema.js.map +1 -1
- package/dist/infra/email/sns.js +2 -2
- package/dist/infra/email/sns.js.map +1 -1
- package/dist/infra/email/unsubscribe.d.ts +13 -0
- package/dist/infra/email/unsubscribe.d.ts.map +1 -0
- package/dist/infra/email/unsubscribe.js +43 -0
- package/dist/infra/email/unsubscribe.js.map +1 -0
- package/dist/infra/fetch/handle.d.ts +20 -1
- package/dist/infra/fetch/handle.d.ts.map +1 -1
- package/dist/infra/fetch/handle.js +60 -28
- package/dist/infra/fetch/handle.js.map +1 -1
- package/dist/infra/fetch/index.d.ts +2 -2
- package/dist/infra/fetch/index.d.ts.map +1 -1
- package/dist/infra/fetch/index.js +1 -1
- package/dist/infra/fetch/index.js.map +1 -1
- package/dist/infra/fetch/namespace.d.ts +20 -2
- package/dist/infra/fetch/namespace.d.ts.map +1 -1
- package/dist/infra/fetch/namespace.js +20 -2
- package/dist/infra/fetch/namespace.js.map +1 -1
- package/dist/infra/join-requests/handle.d.ts +86 -0
- package/dist/infra/join-requests/handle.d.ts.map +1 -0
- package/dist/infra/join-requests/handle.js +233 -0
- package/dist/infra/join-requests/handle.js.map +1 -0
- package/dist/infra/join-requests/index.d.ts +3 -0
- package/dist/infra/join-requests/index.d.ts.map +1 -0
- package/dist/infra/join-requests/index.js +2 -0
- package/dist/infra/join-requests/index.js.map +1 -0
- package/dist/infra/join-requests/namespace.d.ts +7 -0
- package/dist/infra/join-requests/namespace.d.ts.map +1 -0
- package/dist/infra/join-requests/namespace.js +7 -0
- package/dist/infra/join-requests/namespace.js.map +1 -0
- package/dist/infra/join-requests/schema.d.ts +58 -0
- package/dist/infra/join-requests/schema.d.ts.map +1 -0
- package/dist/infra/join-requests/schema.js +31 -0
- package/dist/infra/join-requests/schema.js.map +1 -0
- package/dist/infra/outbox/core.d.ts +9 -0
- package/dist/infra/outbox/core.d.ts.map +1 -1
- package/dist/infra/outbox/core.js +14 -0
- package/dist/infra/outbox/core.js.map +1 -1
- package/dist/infra/support/handle.d.ts +43 -0
- package/dist/infra/support/handle.d.ts.map +1 -1
- package/dist/infra/support/handle.js +35 -7
- package/dist/infra/support/handle.js.map +1 -1
- package/dist/infra/support/http.d.ts +28 -0
- package/dist/infra/support/http.d.ts.map +1 -0
- package/dist/infra/support/http.js +217 -0
- package/dist/infra/support/http.js.map +1 -0
- package/dist/infra/support/index.d.ts +2 -0
- package/dist/infra/support/index.d.ts.map +1 -1
- package/dist/infra/support/index.js +1 -0
- package/dist/infra/support/index.js.map +1 -1
- package/dist/infra/support/namespace.d.ts +3 -0
- package/dist/infra/support/namespace.d.ts.map +1 -1
- package/dist/infra/support/namespace.js +3 -0
- package/dist/infra/support/namespace.js.map +1 -1
- package/dist/infra/support/schema.d.ts +4 -4
- package/dist/infra/webhook/outbound.d.ts +16 -0
- package/dist/infra/webhook/outbound.d.ts.map +1 -1
- package/dist/infra/webhook/outbound.js +78 -27
- package/dist/infra/webhook/outbound.js.map +1 -1
- package/dist/request/di/builder.d.ts +24 -1
- package/dist/request/di/builder.d.ts.map +1 -1
- package/dist/request/di/builder.js +35 -0
- package/dist/request/di/builder.js.map +1 -1
- package/dist/request/di/types.d.ts +30 -0
- package/dist/request/di/types.d.ts.map +1 -1
- package/dist/request/http/server.d.ts.map +1 -1
- package/dist/request/http/server.js +111 -20
- package/dist/request/http/server.js.map +1 -1
- package/dist/test/auto-setup.js +2 -2
- package/dist/test/auto-setup.js.map +1 -1
- package/dist/test/crawl-fixture.d.ts +53 -0
- package/dist/test/crawl-fixture.d.ts.map +1 -0
- package/dist/test/crawl-fixture.js +130 -0
- package/dist/test/crawl-fixture.js.map +1 -0
- package/dist/test/index.d.ts +2 -1
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +2 -1
- package/dist/test/index.js.map +1 -1
- package/dist/test/progress.d.ts +7 -1
- package/dist/test/progress.d.ts.map +1 -1
- package/dist/test/progress.js +6 -0
- package/dist/test/progress.js.map +1 -1
- package/dist/test/reap-after-run.d.ts +3 -0
- package/dist/test/reap-after-run.d.ts.map +1 -0
- package/dist/test/reap-after-run.js +29 -0
- package/dist/test/reap-after-run.js.map +1 -0
- package/dist/test/reap.d.ts +11 -2
- package/dist/test/reap.d.ts.map +1 -1
- package/dist/test/reap.js +19 -12
- package/dist/test/reap.js.map +1 -1
- package/dist/test/setup.d.ts +2 -0
- package/dist/test/setup.d.ts.map +1 -1
- package/dist/test/setup.js +87 -30
- package/dist/test/setup.js.map +1 -1
- package/dist/test/vitest-plugin.d.ts.map +1 -1
- package/dist/test/vitest-plugin.js +8 -1
- package/dist/test/vitest-plugin.js.map +1 -1
- package/dist/test/vitest-workspace.d.ts +1 -0
- package/dist/test/vitest-workspace.d.ts.map +1 -1
- package/dist/test/vitest-workspace.js +1 -1
- package/dist/test/vitest-workspace.js.map +1 -1
- package/dist/test/vitest.d.ts +20 -0
- package/dist/test/vitest.d.ts.map +1 -1
- package/dist/test/vitest.js +41 -1
- package/dist/test/vitest.js.map +1 -1
- package/dist/trace/partition/sync.d.ts +8 -2
- package/dist/trace/partition/sync.d.ts.map +1 -1
- package/dist/trace/partition/sync.js +6 -3
- package/dist/trace/partition/sync.js.map +1 -1
- package/dist/workspace/generate.d.ts.map +1 -1
- package/dist/workspace/generate.js +1 -0
- package/dist/workspace/generate.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
export declare const CRAWL_STATES: readonly ["awaiting_approval", "running", "done", "stopped", "failed"];
|
|
2
|
+
export declare const CRAWL_URL_STATES: readonly ["queued", "fetching", "done", "refused"];
|
|
3
|
+
export declare const CRAWL_STOPPED_BY: readonly ["pages", "depth", "bytes", "wall", "robots_unreachable"];
|
|
4
|
+
export declare const crawls: import("../../data/domain/types.js").DefinedTable<{
|
|
5
|
+
id: import("../../data/domain/types.js").FieldDescriptor<string, {
|
|
6
|
+
defaultRandom: true;
|
|
7
|
+
hasDefault: true;
|
|
8
|
+
} & {
|
|
9
|
+
primaryKey: true;
|
|
10
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string, {
|
|
11
|
+
defaultRandom: true;
|
|
12
|
+
hasDefault: true;
|
|
13
|
+
} & {
|
|
14
|
+
primaryKey: true;
|
|
15
|
+
}>;
|
|
16
|
+
site: import("../../data/domain/types.js").FieldDescriptor<string, {}> & import("../../data/domain/field.js").FieldModifiers<string, {}>;
|
|
17
|
+
seed: import("../../data/domain/types.js").FieldDescriptor<string, {}> & import("../../data/domain/field.js").FieldModifiers<string, {}>;
|
|
18
|
+
scope: import("../../data/domain/types.js").FieldDescriptor<import("zod/v4").JSONType, {}> & import("../../data/domain/field.js").FieldModifiers<import("zod/v4").JSONType, {}>;
|
|
19
|
+
limits: import("../../data/domain/types.js").FieldDescriptor<import("zod/v4").JSONType, {}> & import("../../data/domain/field.js").FieldModifiers<import("zod/v4").JSONType, {}>;
|
|
20
|
+
state: import("../../data/domain/types.js").FieldDescriptor<"done" | "failed" | "running" | "awaiting_approval" | "stopped", {}> & import("../../data/domain/field.js").FieldModifiers<"done" | "failed" | "running" | "awaiting_approval" | "stopped", {}>;
|
|
21
|
+
stoppedBy: import("../../data/domain/types.js").FieldDescriptor<string | null, {
|
|
22
|
+
nullable: true;
|
|
23
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string | null, {
|
|
24
|
+
nullable: true;
|
|
25
|
+
}>;
|
|
26
|
+
error: import("../../data/domain/types.js").FieldDescriptor<string | null, {
|
|
27
|
+
nullable: true;
|
|
28
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string | null, {
|
|
29
|
+
nullable: true;
|
|
30
|
+
}>;
|
|
31
|
+
tenantId: import("../../data/domain/types.js").FieldDescriptor<string | null, {
|
|
32
|
+
nullable: true;
|
|
33
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string | null, {
|
|
34
|
+
nullable: true;
|
|
35
|
+
}>;
|
|
36
|
+
startedBy: import("../../data/domain/types.js").FieldDescriptor<string | null, {
|
|
37
|
+
nullable: true;
|
|
38
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string | null, {
|
|
39
|
+
nullable: true;
|
|
40
|
+
}>;
|
|
41
|
+
approvedBy: import("../../data/domain/types.js").FieldDescriptor<string | null, {
|
|
42
|
+
nullable: true;
|
|
43
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string | null, {
|
|
44
|
+
nullable: true;
|
|
45
|
+
}>;
|
|
46
|
+
bytes: import("../../data/domain/types.js").FieldDescriptor<bigint, {
|
|
47
|
+
hasDefault: true;
|
|
48
|
+
}> & import("../../data/domain/field.js").FieldModifiers<bigint, {
|
|
49
|
+
hasDefault: true;
|
|
50
|
+
}>;
|
|
51
|
+
createdAt: import("../../data/domain/types.js").FieldDescriptor<Date, {
|
|
52
|
+
hasDefault: true;
|
|
53
|
+
}> & import("../../data/domain/field.js").FieldModifiers<Date, {
|
|
54
|
+
hasDefault: true;
|
|
55
|
+
}>;
|
|
56
|
+
runStartedAt: import("../../data/domain/types.js").FieldDescriptor<Date | null, {
|
|
57
|
+
nullable: true;
|
|
58
|
+
}> & import("../../data/domain/field.js").FieldModifiers<Date | null, {
|
|
59
|
+
nullable: true;
|
|
60
|
+
}>;
|
|
61
|
+
finishedAt: import("../../data/domain/types.js").FieldDescriptor<Date | null, {
|
|
62
|
+
nullable: true;
|
|
63
|
+
}> & import("../../data/domain/field.js").FieldModifiers<Date | null, {
|
|
64
|
+
nullable: true;
|
|
65
|
+
}>;
|
|
66
|
+
}, "pipework_crawl">;
|
|
67
|
+
export declare const crawlUrls: import("../../data/domain/types.js").DefinedTable<{
|
|
68
|
+
id: import("../../data/domain/types.js").FieldDescriptor<string, {
|
|
69
|
+
defaultRandom: true;
|
|
70
|
+
hasDefault: true;
|
|
71
|
+
} & {
|
|
72
|
+
primaryKey: true;
|
|
73
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string, {
|
|
74
|
+
defaultRandom: true;
|
|
75
|
+
hasDefault: true;
|
|
76
|
+
} & {
|
|
77
|
+
primaryKey: true;
|
|
78
|
+
}>;
|
|
79
|
+
crawlId: import("../../data/domain/types.js").FieldDescriptor<string, {}> & import("../../data/domain/field.js").FieldModifiers<string, {}>;
|
|
80
|
+
url: import("../../data/domain/types.js").FieldDescriptor<string, {}> & import("../../data/domain/field.js").FieldModifiers<string, {}>;
|
|
81
|
+
seq: import("../../data/domain/types.js").FieldDescriptor<number, {
|
|
82
|
+
hasDefault: true;
|
|
83
|
+
serial: true;
|
|
84
|
+
}> & import("../../data/domain/field.js").FieldModifiers<number, {
|
|
85
|
+
hasDefault: true;
|
|
86
|
+
serial: true;
|
|
87
|
+
}>;
|
|
88
|
+
depth: import("../../data/domain/types.js").FieldDescriptor<number, {}> & import("../../data/domain/field.js").FieldModifiers<number, {}>;
|
|
89
|
+
fromUrl: import("../../data/domain/types.js").FieldDescriptor<string | null, {
|
|
90
|
+
nullable: true;
|
|
91
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string | null, {
|
|
92
|
+
nullable: true;
|
|
93
|
+
}>;
|
|
94
|
+
redirects: import("../../data/domain/types.js").FieldDescriptor<number, {
|
|
95
|
+
hasDefault: true;
|
|
96
|
+
}> & import("../../data/domain/field.js").FieldModifiers<number, {
|
|
97
|
+
hasDefault: true;
|
|
98
|
+
}>;
|
|
99
|
+
state: import("../../data/domain/types.js").FieldDescriptor<"done" | "refused" | "queued" | "fetching", {
|
|
100
|
+
hasDefault: true;
|
|
101
|
+
}> & import("../../data/domain/field.js").FieldModifiers<"done" | "refused" | "queued" | "fetching", {
|
|
102
|
+
hasDefault: true;
|
|
103
|
+
}>;
|
|
104
|
+
requested: import("../../data/domain/types.js").FieldDescriptor<boolean, {
|
|
105
|
+
hasDefault: true;
|
|
106
|
+
}> & import("../../data/domain/field.js").FieldModifiers<boolean, {
|
|
107
|
+
hasDefault: true;
|
|
108
|
+
}>;
|
|
109
|
+
seedChain: import("../../data/domain/types.js").FieldDescriptor<boolean, {
|
|
110
|
+
hasDefault: true;
|
|
111
|
+
}> & import("../../data/domain/field.js").FieldModifiers<boolean, {
|
|
112
|
+
hasDefault: true;
|
|
113
|
+
}>;
|
|
114
|
+
reason: import("../../data/domain/types.js").FieldDescriptor<string | null, {
|
|
115
|
+
nullable: true;
|
|
116
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string | null, {
|
|
117
|
+
nullable: true;
|
|
118
|
+
}>;
|
|
119
|
+
message: import("../../data/domain/types.js").FieldDescriptor<string | null, {
|
|
120
|
+
nullable: true;
|
|
121
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string | null, {
|
|
122
|
+
nullable: true;
|
|
123
|
+
}>;
|
|
124
|
+
status: import("../../data/domain/types.js").FieldDescriptor<number | null, {
|
|
125
|
+
nullable: true;
|
|
126
|
+
}> & import("../../data/domain/field.js").FieldModifiers<number | null, {
|
|
127
|
+
nullable: true;
|
|
128
|
+
}>;
|
|
129
|
+
}, "pipework_crawl_url">;
|
|
130
|
+
export declare const crawlHosts: import("../../data/domain/types.js").DefinedTable<{
|
|
131
|
+
id: import("../../data/domain/types.js").FieldDescriptor<string, {
|
|
132
|
+
defaultRandom: true;
|
|
133
|
+
hasDefault: true;
|
|
134
|
+
} & {
|
|
135
|
+
primaryKey: true;
|
|
136
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string, {
|
|
137
|
+
defaultRandom: true;
|
|
138
|
+
hasDefault: true;
|
|
139
|
+
} & {
|
|
140
|
+
primaryKey: true;
|
|
141
|
+
}>;
|
|
142
|
+
crawlId: import("../../data/domain/types.js").FieldDescriptor<string, {}> & import("../../data/domain/field.js").FieldModifiers<string, {}>;
|
|
143
|
+
host: import("../../data/domain/types.js").FieldDescriptor<string, {}> & import("../../data/domain/field.js").FieldModifiers<string, {}>;
|
|
144
|
+
robotsState: import("../../data/domain/types.js").FieldDescriptor<string | null, {
|
|
145
|
+
nullable: true;
|
|
146
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string | null, {
|
|
147
|
+
nullable: true;
|
|
148
|
+
}>;
|
|
149
|
+
robotsText: import("../../data/domain/types.js").FieldDescriptor<string | null, {
|
|
150
|
+
nullable: true;
|
|
151
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string | null, {
|
|
152
|
+
nullable: true;
|
|
153
|
+
}>;
|
|
154
|
+
robotsAttempts: import("../../data/domain/types.js").FieldDescriptor<number, {
|
|
155
|
+
hasDefault: true;
|
|
156
|
+
}> & import("../../data/domain/field.js").FieldModifiers<number, {
|
|
157
|
+
hasDefault: true;
|
|
158
|
+
}>;
|
|
159
|
+
lastRequestAtMs: import("../../data/domain/types.js").FieldDescriptor<bigint, {
|
|
160
|
+
hasDefault: true;
|
|
161
|
+
}> & import("../../data/domain/field.js").FieldModifiers<bigint, {
|
|
162
|
+
hasDefault: true;
|
|
163
|
+
}>;
|
|
164
|
+
}, "pipework_crawl_host">;
|
|
165
|
+
export declare const crawlResources: import("../../data/domain/types.js").DefinedTable<{
|
|
166
|
+
id: import("../../data/domain/types.js").FieldDescriptor<string, {
|
|
167
|
+
defaultRandom: true;
|
|
168
|
+
hasDefault: true;
|
|
169
|
+
} & {
|
|
170
|
+
primaryKey: true;
|
|
171
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string, {
|
|
172
|
+
defaultRandom: true;
|
|
173
|
+
hasDefault: true;
|
|
174
|
+
} & {
|
|
175
|
+
primaryKey: true;
|
|
176
|
+
}>;
|
|
177
|
+
crawlId: import("../../data/domain/types.js").FieldDescriptor<string, {}> & import("../../data/domain/field.js").FieldModifiers<string, {}>;
|
|
178
|
+
url: import("../../data/domain/types.js").FieldDescriptor<string, {}> & import("../../data/domain/field.js").FieldModifiers<string, {}>;
|
|
179
|
+
fromUrl: import("../../data/domain/types.js").FieldDescriptor<string | null, {
|
|
180
|
+
nullable: true;
|
|
181
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string | null, {
|
|
182
|
+
nullable: true;
|
|
183
|
+
}>;
|
|
184
|
+
status: import("../../data/domain/types.js").FieldDescriptor<number, {}> & import("../../data/domain/field.js").FieldModifiers<number, {}>;
|
|
185
|
+
contentType: import("../../data/domain/types.js").FieldDescriptor<string | null, {
|
|
186
|
+
nullable: true;
|
|
187
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string | null, {
|
|
188
|
+
nullable: true;
|
|
189
|
+
}>;
|
|
190
|
+
bytes: import("../../data/domain/types.js").FieldDescriptor<bigint, {}> & import("../../data/domain/field.js").FieldModifiers<bigint, {}>;
|
|
191
|
+
etag: import("../../data/domain/types.js").FieldDescriptor<string | null, {
|
|
192
|
+
nullable: true;
|
|
193
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string | null, {
|
|
194
|
+
nullable: true;
|
|
195
|
+
}>;
|
|
196
|
+
lastModified: import("../../data/domain/types.js").FieldDescriptor<string | null, {
|
|
197
|
+
nullable: true;
|
|
198
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string | null, {
|
|
199
|
+
nullable: true;
|
|
200
|
+
}>;
|
|
201
|
+
sha256: import("../../data/domain/types.js").FieldDescriptor<string | null, {
|
|
202
|
+
nullable: true;
|
|
203
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string | null, {
|
|
204
|
+
nullable: true;
|
|
205
|
+
}>;
|
|
206
|
+
fileId: import("../../data/domain/types.js").FieldDescriptor<string | null, {
|
|
207
|
+
nullable: true;
|
|
208
|
+
}> & import("../../data/domain/field.js").FieldModifiers<string | null, {
|
|
209
|
+
nullable: true;
|
|
210
|
+
}>;
|
|
211
|
+
unchanged: import("../../data/domain/types.js").FieldDescriptor<boolean, {
|
|
212
|
+
hasDefault: true;
|
|
213
|
+
}> & import("../../data/domain/field.js").FieldModifiers<boolean, {
|
|
214
|
+
hasDefault: true;
|
|
215
|
+
}>;
|
|
216
|
+
createdAt: import("../../data/domain/types.js").FieldDescriptor<Date, {
|
|
217
|
+
hasDefault: true;
|
|
218
|
+
}> & import("../../data/domain/field.js").FieldModifiers<Date, {
|
|
219
|
+
hasDefault: true;
|
|
220
|
+
}>;
|
|
221
|
+
}, "pipework_crawl_resource">;
|
|
222
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/infra/crawl/schema.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,YAAY,wEAAyE,CAAA;AAClG,eAAO,MAAM,gBAAgB,oDAAqD,CAAA;AAClF,eAAO,MAAM,gBAAgB,oEAAqE,CAAA;AAElG,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAoBjB,CAAA;AAEF,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAmBpB,CAAA;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAYrB,CAAA;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAkBzB,CAAA"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// The tables behind the site crawler: one row per crawl, one per URL the crawl has met (the frontier and its outcome),
|
|
2
|
+
// one per host (robots.txt and the time of the last request), one per listed resource. Not tenant-scoped; a crawl row
|
|
3
|
+
// records the tenant it was started for.
|
|
4
|
+
import { define } from '../../data/domain/index.js';
|
|
5
|
+
import { field } from '../../data/domain/field.js';
|
|
6
|
+
import { schema } from '../../data/schema/namespace.js';
|
|
7
|
+
import { index, uniqueIndex } from '../../data/db/idx/index.js';
|
|
8
|
+
export const CRAWL_STATES = ['awaiting_approval', 'running', 'done', 'stopped', 'failed'];
|
|
9
|
+
export const CRAWL_URL_STATES = ['queued', 'fetching', 'done', 'refused'];
|
|
10
|
+
export const CRAWL_STOPPED_BY = ['pages', 'depth', 'bytes', 'wall', 'robots_unreachable'];
|
|
11
|
+
export const crawls = define('pipework_crawl', {
|
|
12
|
+
id: field.uuid().defaultRandom().primaryKey(),
|
|
13
|
+
site: field.text(),
|
|
14
|
+
seed: field.text(),
|
|
15
|
+
scope: field.jsonb(schema.check.json()),
|
|
16
|
+
limits: field.jsonb(schema.check.json()),
|
|
17
|
+
state: field.enum(CRAWL_STATES),
|
|
18
|
+
stoppedBy: field.text().nullable(),
|
|
19
|
+
error: field.text().nullable(),
|
|
20
|
+
tenantId: field.text().nullable(),
|
|
21
|
+
startedBy: field.text().nullable(),
|
|
22
|
+
approvedBy: field.text().nullable(),
|
|
23
|
+
bytes: field.bigint().default(0),
|
|
24
|
+
createdAt: field.timestamp().default('now'),
|
|
25
|
+
runStartedAt: field.timestamp().nullable(),
|
|
26
|
+
finishedAt: field.timestamp().nullable(),
|
|
27
|
+
}, {
|
|
28
|
+
indexes: (t) => ({
|
|
29
|
+
bySeed: index('idx_pipework_crawl_seed').on(t['site'], t['seed'], t['createdAt']),
|
|
30
|
+
}),
|
|
31
|
+
});
|
|
32
|
+
export const crawlUrls = define('pipework_crawl_url', {
|
|
33
|
+
id: field.uuid().defaultRandom().primaryKey(),
|
|
34
|
+
crawlId: field.uuid(),
|
|
35
|
+
url: field.text(),
|
|
36
|
+
seq: field.serial(),
|
|
37
|
+
depth: field.integer(),
|
|
38
|
+
fromUrl: field.text().nullable(),
|
|
39
|
+
redirects: field.integer().default(0),
|
|
40
|
+
state: field.enum(CRAWL_URL_STATES).default('queued'),
|
|
41
|
+
requested: field.boolean().default(false),
|
|
42
|
+
seedChain: field.boolean().default(false),
|
|
43
|
+
reason: field.text().nullable(),
|
|
44
|
+
message: field.text().nullable(),
|
|
45
|
+
status: field.integer().nullable(),
|
|
46
|
+
}, {
|
|
47
|
+
indexes: (t) => ({
|
|
48
|
+
byUrl: uniqueIndex('uq_pipework_crawl_url').on(t['crawlId'], t['url']),
|
|
49
|
+
next: index('idx_pipework_crawl_url_next').on(t['crawlId'], t['state'], t['depth'], t['seq']),
|
|
50
|
+
}),
|
|
51
|
+
});
|
|
52
|
+
export const crawlHosts = define('pipework_crawl_host', {
|
|
53
|
+
id: field.uuid().defaultRandom().primaryKey(),
|
|
54
|
+
crawlId: field.uuid(),
|
|
55
|
+
host: field.text(),
|
|
56
|
+
robotsState: field.text().nullable(),
|
|
57
|
+
robotsText: field.text().nullable(),
|
|
58
|
+
robotsAttempts: field.integer().default(0),
|
|
59
|
+
lastRequestAtMs: field.bigint().default(0),
|
|
60
|
+
}, {
|
|
61
|
+
indexes: (t) => ({
|
|
62
|
+
byHost: uniqueIndex('uq_pipework_crawl_host').on(t['crawlId'], t['host']),
|
|
63
|
+
}),
|
|
64
|
+
});
|
|
65
|
+
export const crawlResources = define('pipework_crawl_resource', {
|
|
66
|
+
id: field.uuid().defaultRandom().primaryKey(),
|
|
67
|
+
crawlId: field.uuid(),
|
|
68
|
+
url: field.text(),
|
|
69
|
+
fromUrl: field.text().nullable(),
|
|
70
|
+
status: field.integer(),
|
|
71
|
+
contentType: field.text().nullable(),
|
|
72
|
+
bytes: field.bigint(),
|
|
73
|
+
etag: field.text().nullable(),
|
|
74
|
+
lastModified: field.text().nullable(),
|
|
75
|
+
sha256: field.text().nullable(),
|
|
76
|
+
fileId: field.text().nullable(),
|
|
77
|
+
unchanged: field.boolean().default(false),
|
|
78
|
+
createdAt: field.timestamp().default('now'),
|
|
79
|
+
}, {
|
|
80
|
+
indexes: (t) => ({
|
|
81
|
+
byUrl: uniqueIndex('uq_pipework_crawl_resource').on(t['crawlId'], t['url']),
|
|
82
|
+
}),
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/infra/crawl/schema.ts"],"names":[],"mappings":"AAAA,uHAAuH;AACvH,sHAAsH;AACtH,yCAAyC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAA;AACvD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAE/D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,mBAAmB,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAA;AAClG,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAU,CAAA;AAClF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,oBAAoB,CAAU,CAAA;AAElG,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,EAAE;IAC7C,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC,UAAU,EAAE;IAC7C,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;IAClB,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;IAClB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACxC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;IAC/B,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACjC,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAClC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACnC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAChC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC3C,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE;IAC1C,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE;CACzC,EAAE;IACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACf,MAAM,EAAE,KAAK,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;KAClF,CAAC;CACH,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,oBAAoB,EAAE;IACpD,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC,UAAU,EAAE;IAC7C,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE;IACrB,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE;IACjB,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE;IACnB,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE;IACtB,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACrC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACrD,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACzC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACzC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAC/B,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAChC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACnC,EAAE;IACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACf,KAAK,EAAE,WAAW,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACtE,IAAI,EAAE,KAAK,CAAC,6BAA6B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;KAC9F,CAAC;CACH,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,EAAE;IACtD,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC,UAAU,EAAE;IAC7C,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE;IACrB,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;IAClB,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACnC,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1C,eAAe,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CAC3C,EAAE;IACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACf,MAAM,EAAE,WAAW,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;KAC1E,CAAC;CACH,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,yBAAyB,EAAE;IAC9D,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC,UAAU,EAAE;IAC7C,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE;IACrB,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE;IACjB,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAChC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE;IACvB,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE;IACrB,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAC7B,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACrC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAC/B,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAC/B,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACzC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAC5C,EAAE;IACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACf,KAAK,EAAE,WAAW,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;KAC5E,CAAC;CACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/** The span a cap sums settled work over. Calendar windows are cut in the config's `timeZone`; `{ from, to }` is half-open `[from, to)`. */
|
|
2
|
+
export type CapWindow = 'calendar_year' | 'calendar_month' | {
|
|
3
|
+
readonly from: Date;
|
|
4
|
+
readonly to: Date;
|
|
5
|
+
};
|
|
6
|
+
export interface CreditLineCap {
|
|
7
|
+
/** Unique within the line; this is what a refusal names and what an authorization's `replacesCaps` lists. */
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly cents: number;
|
|
10
|
+
readonly window: CapWindow;
|
|
11
|
+
/** Overrides the line's and the config's warn share for this cap. */
|
|
12
|
+
readonly warnShare?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface CreditLineConfig {
|
|
15
|
+
/** The share of a limit at which it warns, for every limit that sets none. Default 0.8. */
|
|
16
|
+
readonly warnShare?: number;
|
|
17
|
+
/** The zone calendar windows are cut in. Default `'UTC'`. */
|
|
18
|
+
readonly timeZone?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Awaited INSIDE the transaction of the write that took a limit's use from below its warn amount to
|
|
21
|
+
* at-or-above it (reserve, a settle above its reservation, openLine lowering a limit), in a Flow whose
|
|
22
|
+
* tenant is the write's tenant and where `pipe()` is that same transaction. If it throws, the write
|
|
23
|
+
* rolls back. A release, a payment or a raised limit re-arms the warning; nothing is stored.
|
|
24
|
+
*/
|
|
25
|
+
readonly onLineCrossed?: (event: LineCrossing) => void | Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
export interface LimitRef {
|
|
28
|
+
readonly kind: 'ceiling' | 'cap' | 'authorization';
|
|
29
|
+
/** `'ceiling'`, the cap's name, or the authorization's reference. */
|
|
30
|
+
readonly name: string;
|
|
31
|
+
}
|
|
32
|
+
export interface LineCrossing {
|
|
33
|
+
readonly tenantId: string;
|
|
34
|
+
readonly limit: LimitRef;
|
|
35
|
+
readonly usedCents: number;
|
|
36
|
+
readonly limitCents: number;
|
|
37
|
+
readonly warnAtCents: number;
|
|
38
|
+
}
|
|
39
|
+
export interface LineReservation {
|
|
40
|
+
readonly id: string;
|
|
41
|
+
readonly tenantId: string;
|
|
42
|
+
readonly jobId: string;
|
|
43
|
+
readonly amountCents: number;
|
|
44
|
+
readonly status: 'held' | 'settled' | 'released';
|
|
45
|
+
readonly settledAmountCents: number | null;
|
|
46
|
+
/** The authorization in force when the job was reserved, if any. */
|
|
47
|
+
readonly authorizationId: string | null;
|
|
48
|
+
readonly createdAt: Date;
|
|
49
|
+
readonly settledAt: Date | null;
|
|
50
|
+
}
|
|
51
|
+
export type LineReserveResult = {
|
|
52
|
+
readonly ok: true;
|
|
53
|
+
readonly reservation: LineReservation;
|
|
54
|
+
} | {
|
|
55
|
+
readonly ok: false;
|
|
56
|
+
readonly reason: 'no-line';
|
|
57
|
+
} | {
|
|
58
|
+
readonly ok: false;
|
|
59
|
+
readonly reason: 'limit';
|
|
60
|
+
readonly limit: LimitRef;
|
|
61
|
+
readonly limitCents: number;
|
|
62
|
+
readonly usedCents: number;
|
|
63
|
+
readonly requestedCents: number;
|
|
64
|
+
};
|
|
65
|
+
/** One settled job: unpaid work until payments clear it. */
|
|
66
|
+
export interface LineEntry {
|
|
67
|
+
readonly id: string;
|
|
68
|
+
readonly tenantId: string;
|
|
69
|
+
readonly jobId: string;
|
|
70
|
+
readonly reservationId: string;
|
|
71
|
+
readonly amountCents: number;
|
|
72
|
+
readonly paidCents: number;
|
|
73
|
+
readonly authorizationId: string | null;
|
|
74
|
+
readonly at: Date;
|
|
75
|
+
}
|
|
76
|
+
export interface Payment {
|
|
77
|
+
readonly id: string;
|
|
78
|
+
readonly tenantId: string;
|
|
79
|
+
readonly reference: string;
|
|
80
|
+
readonly amountCents: number;
|
|
81
|
+
/** What no entry has cleared yet; the next settle draws on it. */
|
|
82
|
+
readonly unappliedCents: number;
|
|
83
|
+
readonly at: Date;
|
|
84
|
+
}
|
|
85
|
+
export interface PaymentApplication {
|
|
86
|
+
readonly entryId: string;
|
|
87
|
+
readonly jobId: string;
|
|
88
|
+
readonly cents: number;
|
|
89
|
+
}
|
|
90
|
+
export type PaymentWithEntries = Payment & {
|
|
91
|
+
readonly applications: readonly PaymentApplication[];
|
|
92
|
+
};
|
|
93
|
+
export interface Authorization {
|
|
94
|
+
readonly id: string;
|
|
95
|
+
readonly tenantId: string;
|
|
96
|
+
readonly reference: string;
|
|
97
|
+
readonly amountCents: number;
|
|
98
|
+
readonly startsAt: Date;
|
|
99
|
+
readonly endsAt: Date;
|
|
100
|
+
readonly replacesCaps: readonly string[];
|
|
101
|
+
readonly revokedAt: Date | null;
|
|
102
|
+
readonly createdAt: Date;
|
|
103
|
+
}
|
|
104
|
+
export type AuthorizationStatus = Authorization & {
|
|
105
|
+
/** Settled entries tagged with it. */
|
|
106
|
+
readonly usedCents: number;
|
|
107
|
+
/** Held reservations tagged with it. */
|
|
108
|
+
readonly heldCents: number;
|
|
109
|
+
readonly remainingCents: number;
|
|
110
|
+
/** Started, not ended, not revoked. */
|
|
111
|
+
readonly inForce: boolean;
|
|
112
|
+
};
|
|
113
|
+
export interface LineCapState extends CreditLineCap {
|
|
114
|
+
readonly usedCents: number;
|
|
115
|
+
/** The authorization in force replaces this cap. */
|
|
116
|
+
readonly replaced: boolean;
|
|
117
|
+
}
|
|
118
|
+
export interface LineState {
|
|
119
|
+
readonly tenantId: string;
|
|
120
|
+
/** False when no line was ever opened, or it is closed. */
|
|
121
|
+
readonly open: boolean;
|
|
122
|
+
readonly ceilingCents: number;
|
|
123
|
+
readonly warnShare: number | null;
|
|
124
|
+
/** Settled work not yet paid. */
|
|
125
|
+
readonly unpaidCents: number;
|
|
126
|
+
/** Reservations still held. */
|
|
127
|
+
readonly heldCents: number;
|
|
128
|
+
/** What a reserve could still take: the smallest remaining of the limits that apply now, at least 0. */
|
|
129
|
+
readonly availableCents: number;
|
|
130
|
+
readonly caps: readonly LineCapState[];
|
|
131
|
+
readonly authorization: AuthorizationStatus | null;
|
|
132
|
+
readonly openedAt: Date | null;
|
|
133
|
+
readonly closedAt: Date | null;
|
|
134
|
+
}
|
|
135
|
+
export interface Statement {
|
|
136
|
+
readonly from: Date;
|
|
137
|
+
readonly to: Date;
|
|
138
|
+
readonly entries: readonly LineEntry[];
|
|
139
|
+
readonly payments: readonly PaymentWithEntries[];
|
|
140
|
+
readonly totals: {
|
|
141
|
+
/** Sum of the entries in the period. */
|
|
142
|
+
readonly settledCents: number;
|
|
143
|
+
/** Sum of the payments in the period. */
|
|
144
|
+
readonly paidCents: number;
|
|
145
|
+
/** Everything unpaid as of now, not just this period's. */
|
|
146
|
+
readonly unpaidCents: number;
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
export interface OpenLineOptions {
|
|
150
|
+
readonly ceilingCents: number;
|
|
151
|
+
readonly caps?: readonly CreditLineCap[];
|
|
152
|
+
readonly warnShare?: number;
|
|
153
|
+
}
|
|
154
|
+
export interface AuthorizeOptions {
|
|
155
|
+
readonly reference: string;
|
|
156
|
+
readonly amountCents: number;
|
|
157
|
+
readonly from: Date;
|
|
158
|
+
readonly to: Date;
|
|
159
|
+
/** Names of caps this authorization replaces while it is in force; every other cap still applies. */
|
|
160
|
+
readonly replacesCaps?: readonly string[];
|
|
161
|
+
}
|
|
162
|
+
export interface CreditLine {
|
|
163
|
+
/** Opens the tenant's line, or updates an open one (and reopens a closed one). Audited as `CreditLine` `open`. */
|
|
164
|
+
openLine(options: OpenLineOptions): Promise<LineState>;
|
|
165
|
+
openLineFor(tenantId: string, options: OpenLineOptions): Promise<LineState>;
|
|
166
|
+
/** New reserves fail `'no-line'`; held reservations may still settle or release; unpaid work stays. */
|
|
167
|
+
closeLine(): Promise<LineState>;
|
|
168
|
+
closeLineFor(tenantId: string): Promise<LineState>;
|
|
169
|
+
/**
|
|
170
|
+
* Holds `amountCents` for a job against the ceiling (or the authorization in force) and then each cap in
|
|
171
|
+
* order; the first limit it would pass is the refusal and nothing is written. A job id that already has a
|
|
172
|
+
* reservation returns it unchanged, whatever amount is asked this time.
|
|
173
|
+
*/
|
|
174
|
+
reserve(options: {
|
|
175
|
+
jobId: string;
|
|
176
|
+
amountCents: number;
|
|
177
|
+
}): Promise<LineReserveResult>;
|
|
178
|
+
reserveFor(tenantId: string, options: {
|
|
179
|
+
jobId: string;
|
|
180
|
+
amountCents: number;
|
|
181
|
+
}): Promise<LineReserveResult>;
|
|
182
|
+
/**
|
|
183
|
+
* Records the actual cost of a reserved job as an unpaid entry; never fails on limits. The same amount again
|
|
184
|
+
* is a no-op; a different amount, a released job or an unknown job throws. Payments with unapplied cents clear it, oldest first.
|
|
185
|
+
*/
|
|
186
|
+
settle(options: {
|
|
187
|
+
jobId: string;
|
|
188
|
+
amountCents: number;
|
|
189
|
+
}): Promise<LineReservation>;
|
|
190
|
+
settleFor(tenantId: string, options: {
|
|
191
|
+
jobId: string;
|
|
192
|
+
amountCents: number;
|
|
193
|
+
}): Promise<LineReservation>;
|
|
194
|
+
/** Gives up a held reservation. No reservation: `{ released: false, reservation: null }`; already released: `released: false`. A settled job throws. */
|
|
195
|
+
release(options: {
|
|
196
|
+
jobId: string;
|
|
197
|
+
}): Promise<{
|
|
198
|
+
released: boolean;
|
|
199
|
+
reservation: LineReservation | null;
|
|
200
|
+
}>;
|
|
201
|
+
releaseFor(tenantId: string, options: {
|
|
202
|
+
jobId: string;
|
|
203
|
+
}): Promise<{
|
|
204
|
+
released: boolean;
|
|
205
|
+
reservation: LineReservation | null;
|
|
206
|
+
}>;
|
|
207
|
+
/** Records a purchase order. Idempotent by reference. Dates that overlap an unrevoked authorization throw ValidationError. */
|
|
208
|
+
authorize(options: AuthorizeOptions): Promise<{
|
|
209
|
+
authorization: Authorization;
|
|
210
|
+
created: boolean;
|
|
211
|
+
}>;
|
|
212
|
+
authorizeFor(tenantId: string, options: AuthorizeOptions): Promise<{
|
|
213
|
+
authorization: Authorization;
|
|
214
|
+
created: boolean;
|
|
215
|
+
}>;
|
|
216
|
+
revokeAuthorization(reference: string): Promise<Authorization>;
|
|
217
|
+
revokeAuthorizationFor(tenantId: string, reference: string): Promise<Authorization>;
|
|
218
|
+
authorizations(): Promise<AuthorizationStatus[]>;
|
|
219
|
+
authorizationsFor(tenantId: string): Promise<AuthorizationStatus[]>;
|
|
220
|
+
/** Idempotent by reference. Clears unpaid entries oldest first and keeps any excess as `unappliedCents`. */
|
|
221
|
+
recordPayment(options: {
|
|
222
|
+
amountCents: number;
|
|
223
|
+
reference: string;
|
|
224
|
+
at?: Date;
|
|
225
|
+
}): Promise<{
|
|
226
|
+
payment: Payment;
|
|
227
|
+
created: boolean;
|
|
228
|
+
}>;
|
|
229
|
+
recordPaymentFor(tenantId: string, options: {
|
|
230
|
+
amountCents: number;
|
|
231
|
+
reference: string;
|
|
232
|
+
at?: Date;
|
|
233
|
+
}): Promise<{
|
|
234
|
+
payment: Payment;
|
|
235
|
+
created: boolean;
|
|
236
|
+
}>;
|
|
237
|
+
/** The entries and payments with `at` in `[from, to)`, each payment with the entries it cleared, and totals. */
|
|
238
|
+
statement(options: {
|
|
239
|
+
from: Date;
|
|
240
|
+
to: Date;
|
|
241
|
+
}): Promise<Statement>;
|
|
242
|
+
statementFor(tenantId: string, options: {
|
|
243
|
+
from: Date;
|
|
244
|
+
to: Date;
|
|
245
|
+
}): Promise<Statement>;
|
|
246
|
+
line(): Promise<LineState>;
|
|
247
|
+
lineFor(tenantId: string): Promise<LineState>;
|
|
248
|
+
}
|
|
249
|
+
export declare function createCreditLine(config?: CreditLineConfig): CreditLine;
|
|
250
|
+
//# sourceMappingURL=handle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handle.d.ts","sourceRoot":"","sources":["../../../src/infra/credit-line/handle.ts"],"names":[],"mappings":"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"}
|