@happyvertical/smrt-jobs 0.40.28 → 0.40.30
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/AGENTS.md +25 -0
- package/README.md +71 -19
- package/dist/chunks/{runner-CbGCiepJ.js → runner-gUEmy0vg.js} +3 -3
- package/dist/chunks/{runner-CbGCiepJ.js.map → runner-gUEmy0vg.js.map} +1 -1
- package/dist/forge-projection.d.ts +137 -0
- package/dist/forge-projection.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +427 -3
- package/dist/index.js.map +1 -1
- package/dist/manifest.json +689 -8
- package/dist/runner.js +1 -1
- package/dist/smrt-knowledge.json +208 -7
- package/package.json +7 -7
package/AGENTS.md
CHANGED
|
@@ -81,6 +81,28 @@ const handle = await doc.background('analyze', { detailed: true })
|
|
|
81
81
|
await handle.wait({ timeout: 60000, pollInterval: 100 }); // polling-based
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
+
## Durable forge projections
|
|
85
|
+
|
|
86
|
+
`ForgeDeliveryCollection` owns the provider-neutral delivery inbox in
|
|
87
|
+
`_smrt_forge_deliveries`; `ForgeProjectionRuntime` owns lease/retry/dead-letter
|
|
88
|
+
transitions and monotonic checkpoints in
|
|
89
|
+
`_smrt_forge_projection_checkpoints`.
|
|
90
|
+
|
|
91
|
+
- Inbox identity is `(tenant_id, provider, delivery_id)`.
|
|
92
|
+
- Tenant-facing accept/replay requires ambient tenant context. Worker claim is
|
|
93
|
+
cross-tenant, then runtime restores the captured context before observation.
|
|
94
|
+
- Projection callbacks must write through `ForgeProjectionContext.db`; the
|
|
95
|
+
application projection, checkpoint, and inbox completion share one
|
|
96
|
+
transaction.
|
|
97
|
+
- Observation identity is tracker-independent
|
|
98
|
+
`(projection, subjectKey, version)`. Equal or older versions are acknowledged
|
|
99
|
+
without reapplying.
|
|
100
|
+
- Lease-token conditions guard every terminal/failure write. Expired final
|
|
101
|
+
attempts become replayable `dead_letter` rows, and persisted errors are
|
|
102
|
+
redacted.
|
|
103
|
+
- Generated API, CLI, and MCP surfaces stay disabled; replay is an explicit
|
|
104
|
+
tenant-scoped operator action.
|
|
105
|
+
|
|
84
106
|
`bg()` is shorthand: `await doc.bg('analyze', args)` → enqueues immediately, returns JobHandle.
|
|
85
107
|
|
|
86
108
|
## withBackgroundJobs(Class)
|
|
@@ -92,6 +114,9 @@ Mixin that adds `bg()` and `background()` to any SmrtObject. Uses WeakMap for co
|
|
|
92
114
|
- **Cron not timezone-aware**: cron fields match the server's **local** time, not UTC (set `TZ` for UTC); no missed-run catch-up (fire-once-forward)
|
|
93
115
|
- **At-least-once execution**: a timeout cannot preempt a running handler; timed-out jobs fail without retry but the handler keeps running — make handlers idempotent (see "Timeouts & at-least-once")
|
|
94
116
|
- **No dead letter queue**: failed jobs stay in DB with `status='failed'` — manual intervention
|
|
117
|
+
- **Forge deliveries are not SmrtJobs**: they use their own replayable
|
|
118
|
+
dead-letter inbox and projection checkpoint contract. Do not enqueue provider
|
|
119
|
+
deliveries as generic background jobs.
|
|
95
120
|
- **Result storage**: `resultPointer` is just a string — app must implement result backend
|
|
96
121
|
- **Lazy builder**: `background()` returns builder — nothing happens until `enqueue()`
|
|
97
122
|
- **wait() is polling**: JobHandle.wait() polls DB every 100ms (configurable)
|
package/README.md
CHANGED
|
@@ -1,5 +1,64 @@
|
|
|
1
1
|
# @happyvertical/smrt-jobs
|
|
2
2
|
|
|
3
|
+
## Durable forge projections
|
|
4
|
+
|
|
5
|
+
`ForgeDeliveryCollection` and `ForgeProjectionRuntime` provide a
|
|
6
|
+
provider-neutral inbox for durable forge webhook projection. The inbox identity
|
|
7
|
+
is `(tenantId, provider, deliveryId)`, so provider retries are atomically
|
|
8
|
+
deduplicated. A worker lease owns each attempt; failures use bounded exponential
|
|
9
|
+
retry, then remain in `dead_letter` until an operator calls `replay()` from the
|
|
10
|
+
owning tenant context.
|
|
11
|
+
|
|
12
|
+
`leaseMs` must be a finite positive duration. `retryBaseMs` and `retryMaxMs`
|
|
13
|
+
must be finite, non-negative durations no greater than 2,147,483,647 ms;
|
|
14
|
+
invalid timing configuration is rejected before a lease can be claimed. A lease
|
|
15
|
+
that would exceed the JavaScript `Date` range is rejected before any lease
|
|
16
|
+
write; a retry that would exceed that range is durably dead-lettered instead of
|
|
17
|
+
being left leased.
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
const inbox = await ForgeDeliveryCollection.create({ db });
|
|
21
|
+
|
|
22
|
+
await withTenant({ tenantId }, () =>
|
|
23
|
+
inbox.accept({
|
|
24
|
+
provider: 'github',
|
|
25
|
+
deliveryId: request.headers.get('x-github-delivery')!,
|
|
26
|
+
eventName: 'pull_request',
|
|
27
|
+
repositoryKey: 'example/forge-repository',
|
|
28
|
+
payload,
|
|
29
|
+
}),
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
const runtime = new ForgeProjectionRuntime({ db, workerId: workerKey });
|
|
33
|
+
await runtime.processNext({
|
|
34
|
+
async observe(delivery) {
|
|
35
|
+
return {
|
|
36
|
+
projection: 'pull-request-revision',
|
|
37
|
+
subjectKey: `${delivery.repositoryKey}:pr:${delivery.payload.number}`,
|
|
38
|
+
version: Number(delivery.payload.revision),
|
|
39
|
+
value: delivery.payload,
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
async project(observation, context) {
|
|
43
|
+
// Always use context.db: it is the transaction shared by the application
|
|
44
|
+
// projection, monotonic checkpoint, and inbox completion.
|
|
45
|
+
await writeProjection(context.db, observation);
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
`projection` and `subjectKey` are application-defined. A pull request is not
|
|
51
|
+
treated as a tracker issue. `version` must be a non-negative monotonic signed
|
|
52
|
+
32-bit integer (`0` through `2,147,483,647`); observations at or below the
|
|
53
|
+
durable checkpoint are acknowledged without reapplying side effects. Provider
|
|
54
|
+
normalization runs with the delivery's tenant context restored. Generated
|
|
55
|
+
REST/MCP/CLI surfaces are disabled for both system tables; operator replay
|
|
56
|
+
requires an explicit in-process tenant context.
|
|
57
|
+
|
|
58
|
+
The manifest-driven migration adds `_smrt_forge_deliveries` and
|
|
59
|
+
`_smrt_forge_projection_checkpoints`. Run `smrt db:migrate` before starting a
|
|
60
|
+
forge projection worker.
|
|
61
|
+
|
|
3
62
|
Background job execution for s-m-r-t objects. Provides persistent queue storage, retry strategies, cron-based scheduling, and a fluent `JobBuilder` API via the `withBackgroundJobs()` mixin.
|
|
4
63
|
|
|
5
64
|
## Installation
|
|
@@ -58,26 +117,19 @@ runner.on('job:failed', (job, error) => { /* ... */ });
|
|
|
58
117
|
process.on('SIGTERM', () => runner.stop());
|
|
59
118
|
```
|
|
60
119
|
|
|
61
|
-
###
|
|
62
|
-
|
|
63
|
-
`TaskRunner` keeps jobs alive with a heartbeat timer. If your job blocks the
|
|
64
|
-
Node.js event loop for longer than the effective stale-job threshold, the runner
|
|
65
|
-
will recover that work as stale and mark it failed.
|
|
66
|
-
|
|
67
|
-
Common causes:
|
|
68
|
-
|
|
69
|
-
- `execSync`, `spawnSync`, or other synchronous subprocess APIs
|
|
70
|
-
- long CPU-bound loops in the job method itself
|
|
71
|
-
- large synchronous filesystem work
|
|
120
|
+
### Liveness-safe job execution
|
|
72
121
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
122
|
+
`TaskRunner` records heartbeat telemetry, but recovery keys on a worker
|
|
123
|
+
incarnation's live lease rather than a per-job heartbeat threshold. A blocked
|
|
124
|
+
event loop must not make a still-running handler appear dead and cause a
|
|
125
|
+
concurrent duplicate execution. See the live-set and off-loop lease-renewal
|
|
126
|
+
details in
|
|
127
|
+
[Worker liveness & recovery](AGENTS.md#worker-liveness--recovery-1474).
|
|
78
128
|
|
|
79
|
-
|
|
80
|
-
|
|
129
|
+
Job handlers remain at-least-once. Avoid synchronous, CPU-bound, or otherwise
|
|
130
|
+
long-running work when possible; make external effects idempotent because a
|
|
131
|
+
process crash after an effect but before its terminal write still permits a
|
|
132
|
+
later retry.
|
|
81
133
|
|
|
82
134
|
### Schedule recurring jobs with ScheduleRunner
|
|
83
135
|
|
|
@@ -119,7 +171,7 @@ taskRunner.on('job:failed', (job, error) => {
|
|
|
119
171
|
| `JobBuilder` | Fluent API: `.delay()`, `.priority()`, `.retries()`, `.queue()`, `.timeout()`, `.enqueue()` |
|
|
120
172
|
| `JobHandle` | Track, wait, cancel, or retry an enqueued job |
|
|
121
173
|
| `JobContextLogger` | Logger that auto-injects job context (jobId, attempt, queue) |
|
|
122
|
-
| `TaskRunner` | Polling-based execution engine with concurrency control and
|
|
174
|
+
| `TaskRunner` | Polling-based execution engine with concurrency control and liveness leases |
|
|
123
175
|
| `ScheduleRunner` | Polls for due cron schedules and creates SmrtJob entries |
|
|
124
176
|
|
|
125
177
|
`TaskRunner` uses `SmrtJobCollection.claimReady()` so multiple workers can poll
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { a as resolveEngine, c as unregisterLiveWorker, i as registerLiveWorker, n as isWorkerAlive, o as resolveUrl, r as offLoopEligible, s as tuneSqliteForConcurrency, t as createWorkerKey } from "./worker-liveness-C1Gjnhax.js";
|
|
2
2
|
import { ObjectRegistry, SmrtCollection, SmrtObject, detectEngine, ensureJobEventsSystemTableCompatibility, ensureJobsSystemTableCompatibility, field, foreignKey, getClassConfigResolvers, resolveLazyConfig, smrt } from "@happyvertical/smrt-core";
|
|
3
|
-
import { fromConfig } from "@happyvertical/jobs";
|
|
4
3
|
import { TenantContext, TenantScoped, getTenantId, tenantId } from "@happyvertical/smrt-tenancy";
|
|
4
|
+
import { fromConfig } from "@happyvertical/jobs";
|
|
5
5
|
import { EventEmitter } from "node:events";
|
|
6
6
|
import { Worker } from "node:worker_threads";
|
|
7
7
|
import { createLogger } from "@happyvertical/logger";
|
|
8
8
|
import { createId } from "@happyvertical/utils";
|
|
9
9
|
//#region src/__smrt-register__.ts
|
|
10
|
-
ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":1785095301151,\"packageName\":\"@happyvertical/smrt-jobs\",\"packageVersion\":\"0.40.28\",\"objects\":{\"@happyvertical/smrt-jobs:SmrtJobEvent\":{\"name\":\"smrtjobevent\",\"className\":\"SmrtJobEvent\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtJobEvent\",\"collection\":\"smrtjobevents\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/jobs/src/smrt-job-event.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"sqlType\":\"UUID\",\"nullable\":true,\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":false,\"autoPopulate\":true,\"nullable\":true,\"mode\":\"optional\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"jobId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SmrtJob\",\"_meta\":{\"required\":true}},\"type\":{\"type\":\"text\",\"required\":true,\"default\":\"log\",\"_meta\":{\"required\":true,\"default\":\"log\"}},\"level\":{\"type\":\"text\",\"required\":true,\"default\":\"info\",\"_meta\":{\"required\":true,\"default\":\"info\"}},\"stage\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"progress\":{\"type\":\"integer\",\"required\":false,\"_meta\":{\"nullable\":true}},\"message\":{\"type\":\"text\",\"required\":true,\"default\":\"\",\"_meta\":{\"required\":true,\"default\":\"\"}},\"data\":{\"type\":\"json\",\"required\":false,\"_meta\":{}},\"createdAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true}}},\"methods\":{\"toCursor\":{\"name\":\"toCursor\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_job_events\",\"api\":false,\"cli\":{\"include\":[\"list\",\"get\"],\"http\":false,\"skipApiCheck\":true},\"mcp\":false,\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SmrtJobEvent\",\"collectionExportName\":\"SmrtJobEventCollection\",\"validationRules\":[{\"field\":\"jobId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"type\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"level\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"message\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"createdAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"}],\"schema\":{\"tableName\":\"_smrt_job_events\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_job_events\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID,\\n \\\"job_id\\\" UUID NOT NULL,\\n \\\"type\\\" TEXT NOT NULL DEFAULT 'log',\\n \\\"level\\\" TEXT NOT NULL DEFAULT 'info',\\n \\\"stage\\\" TEXT,\\n \\\"progress\\\" INTEGER,\\n \\\"message\\\" TEXT NOT NULL DEFAULT '',\\n \\\"data\\\" JSON\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"job_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"type\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"log\"},\"level\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"info\"},\"stage\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"progress\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false},\"message\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"\"},\"data\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_job_events_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_job_events_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"8a9faeec\"}},\"@happyvertical/smrt-jobs:SmrtJobEventCollection\":{\"name\":\"smrtjobeventcollection\",\"className\":\"SmrtJobEventCollection\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtJobEventCollection\",\"collection\":\"smrtjobevents\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/jobs/src/smrt-job-event.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{},\"methods\":{\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"append\":{\"name\":\"append\",\"async\":true,\"parameters\":[{\"name\":\"input\",\"type\":\"SmrtJobEventData\",\"optional\":false}],\"returnType\":\"Promise<SmrtJobEvent>\",\"isStatic\":false,\"isPublic\":true},\"listByJob\":{\"name\":\"listByJob\",\"async\":true,\"parameters\":[{\"name\":\"jobId\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"ListJobEventsOptions\",\"optional\":true}],\"returnType\":\"Promise<SmrtJobEvent[]>\",\"isStatic\":false,\"isPublic\":true},\"listSinceCursor\":{\"name\":\"listSinceCursor\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"any\",\"optional\":true}],\"returnType\":\"Promise<SmrtJobEvent[]>\",\"isStatic\":false,\"isPublic\":true},\"latestProgressByJobIds\":{\"name\":\"latestProgressByJobIds\",\"async\":true,\"parameters\":[{\"name\":\"jobIds\",\"type\":\"string[]\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Map<string, SmrtJobEvent>>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_job_events\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SmrtJobEvent\",\"exportName\":\"SmrtJobEventCollection\",\"collectionExportName\":\"SmrtJobEventCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_job_events\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_job_events\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"_smrt_job_events_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_job_events_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"bcf5b3bc\"}},\"@happyvertical/smrt-jobs:SmrtJob\":{\"name\":\"smrtjob\",\"className\":\"SmrtJob\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtJob\",\"collection\":\"smrtjobs\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/jobs/src/smrt-job.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"sqlType\":\"UUID\",\"nullable\":true,\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":false,\"autoPopulate\":true,\"nullable\":true,\"mode\":\"optional\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"queue\":{\"type\":\"text\",\"required\":true,\"default\":\"default\",\"_meta\":{\"required\":true,\"default\":\"default\"}},\"objectType\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"objectId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"method\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"args\":{\"type\":\"json\",\"required\":false,\"_meta\":{}},\"runAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true}},\"priority\":{\"type\":\"integer\",\"required\":true,\"default\":50,\"_meta\":{\"required\":true,\"default\":50}},\"status\":{\"type\":\"text\",\"required\":true,\"default\":\"pending\",\"_meta\":{\"required\":true,\"default\":\"pending\"}},\"attempts\":{\"type\":\"integer\",\"required\":true,\"default\":0,\"_meta\":{\"required\":true,\"default\":0}},\"maxAttempts\":{\"type\":\"integer\",\"required\":true,\"default\":3,\"_meta\":{\"required\":true,\"default\":3}},\"timeout\":{\"type\":\"integer\",\"required\":true,\"default\":300000,\"_meta\":{\"required\":true,\"default\":300000}},\"timeoutBehavior\":{\"type\":\"text\",\"required\":true,\"default\":\"fail\",\"_meta\":{\"required\":true,\"default\":\"fail\"}},\"startedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"completedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"lastError\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"resultPointer\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"retryStrategy\":{\"type\":\"json\",\"required\":false,\"_meta\":{}},\"workerId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"workerHeartbeat\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}}},\"methods\":{\"save\":{\"name\":\"save\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"retry\":{\"name\":\"retry\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"cancel\":{\"name\":\"cancel\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getDescription\":{\"name\":\"getDescription\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_jobs\",\"api\":false,\"cli\":{\"include\":[\"list\",\"get\",\"retry\",\"cancel\"],\"skipApiCheck\":true,\"http\":false},\"mcp\":false,\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SmrtJob\",\"collectionExportName\":\"SmrtJobCollection\",\"validationRules\":[{\"field\":\"queue\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"objectType\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"method\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"runAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"},{\"field\":\"priority\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"status\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"attempts\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"maxAttempts\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"timeout\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"timeoutBehavior\",\"rule\":\"required\",\"fieldType\":\"text\"}],\"schema\":{\"tableName\":\"_smrt_jobs\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_jobs\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID,\\n \\\"queue\\\" TEXT NOT NULL DEFAULT 'default',\\n \\\"object_type\\\" TEXT NOT NULL,\\n \\\"object_id\\\" TEXT,\\n \\\"method\\\" TEXT NOT NULL,\\n \\\"args\\\" JSON,\\n \\\"run_at\\\" TIMESTAMP NOT NULL,\\n \\\"priority\\\" INTEGER NOT NULL DEFAULT 50,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'pending',\\n \\\"attempts\\\" INTEGER NOT NULL DEFAULT 0,\\n \\\"max_attempts\\\" INTEGER NOT NULL DEFAULT 3,\\n \\\"timeout\\\" INTEGER NOT NULL DEFAULT 300000,\\n \\\"timeout_behavior\\\" TEXT NOT NULL DEFAULT 'fail',\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"completed_at\\\" TIMESTAMP,\\n \\\"last_error\\\" TEXT,\\n \\\"result_pointer\\\" TEXT,\\n \\\"retry_strategy\\\" JSON,\\n \\\"worker_id\\\" TEXT,\\n \\\"worker_heartbeat\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"queue\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"default\"},\"object_type\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"object_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"method\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"args\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"run_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false},\"priority\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":50},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"pending\"},\"attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":0},\"max_attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":3},\"timeout\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":300000},\"timeout_behavior\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"fail\"},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"completed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"last_error\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"result_pointer\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"retry_strategy\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"worker_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"worker_heartbeat\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_jobs_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_jobs_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"0e543f33\"}},\"@happyvertical/smrt-jobs:SmrtJobCollection\":{\"name\":\"smrtjobcollection\",\"className\":\"SmrtJobCollection\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtJobCollection\",\"collection\":\"smrtjobs\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/jobs/src/smrt-job.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{},\"methods\":{\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"listByStatus\":{\"name\":\"listByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"JobStatus | JobStatus[]\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<SmrtJob[]>\",\"isStatic\":false,\"isPublic\":true},\"listReady\":{\"name\":\"listReady\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<SmrtJob[]>\",\"isStatic\":false,\"isPublic\":true},\"claimReady\":{\"name\":\"claimReady\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"ClaimReadyOptions\",\"optional\":false}],\"returnType\":\"Promise<SmrtJob[]>\",\"isStatic\":false,\"isPublic\":true},\"countInFlightForTenant\":{\"name\":\"countInFlightForTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string | null\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"enqueueJob\":{\"name\":\"enqueueJob\",\"async\":true,\"parameters\":[{\"name\":\"data\",\"type\":\"SmrtJobData\",\"optional\":false},{\"name\":\"options\",\"type\":\"EnqueueJobOptions\",\"optional\":true}],\"returnType\":\"Promise<SmrtJob>\",\"isStatic\":false,\"isPublic\":true},\"stats\":{\"name\":\"stats\",\"async\":true,\"parameters\":[{\"name\":\"queue\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true},\"cleanup\":{\"name\":\"cleanup\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_jobs\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SmrtJob\",\"exportName\":\"SmrtJobCollection\",\"collectionExportName\":\"SmrtJobCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_jobs\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_jobs\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"_smrt_jobs_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_jobs_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"d99c04d1\"}},\"@happyvertical/smrt-jobs:SmrtWorker\":{\"name\":\"smrtworker\",\"className\":\"SmrtWorker\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtWorker\",\"collection\":\"smrtworkers\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/jobs/src/smrt-worker.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{\"workerId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"pid\":{\"type\":\"integer\",\"required\":false,\"_meta\":{\"nullable\":true}},\"hostname\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"startedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"heartbeatAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"leaseExpiresAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"status\":{\"type\":\"text\",\"required\":true,\"default\":\"running\",\"_meta\":{\"required\":true,\"default\":\"running\"}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"_smrt_workers\",\"conflictColumns\":[\"worker_id\"],\"api\":false,\"cli\":false,\"mcp\":false},\"extends\":\"SmrtObject\",\"exportName\":\"SmrtWorker\",\"collectionExportName\":\"SmrtWorkerCollection\",\"validationRules\":[{\"field\":\"workerId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"status\",\"rule\":\"required\",\"fieldType\":\"text\"}],\"schema\":{\"tableName\":\"_smrt_workers\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_workers\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"worker_id\\\" TEXT NOT NULL,\\n \\\"pid\\\" INTEGER,\\n \\\"hostname\\\" TEXT,\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"heartbeat_at\\\" TIMESTAMP,\\n \\\"lease_expires_at\\\" TIMESTAMP,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'running'\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"worker_id\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"pid\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false},\"hostname\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"heartbeat_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"lease_expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"running\"}},\"indexes\":[{\"name\":\"_smrt_workers_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_workers_worker_id_idx\",\"columns\":[\"worker_id\"],\"unique\":true}],\"version\":\"bfaad669\"}},\"@happyvertical/smrt-jobs:SmrtWorkerCollection\":{\"name\":\"smrtworkercollection\",\"className\":\"SmrtWorkerCollection\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtWorkerCollection\",\"collection\":\"smrtworkers\",\"filePath\":\"/home/runner/_work/smrt/smrt/packages/jobs/src/smrt-worker.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{},\"methods\":{\"assertReady\":{\"name\":\"assertReady\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"tableReady\":{\"name\":\"tableReady\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"registerWorker\":{\"name\":\"registerWorker\",\"async\":true,\"parameters\":[{\"name\":\"input\",\"type\":\"RegisterWorkerInput\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"renewLease\":{\"name\":\"renewLease\",\"async\":true,\"parameters\":[{\"name\":\"workerKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"leaseTtlMs\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"expireWorker\":{\"name\":\"expireWorker\",\"async\":true,\"parameters\":[{\"name\":\"workerKey\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"freshLeaseWorkerKeys\":{\"name\":\"freshLeaseWorkerKeys\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Set<string>>\",\"isStatic\":false,\"isPublic\":true},\"pruneExpired\":{\"name\":\"pruneExpired\",\"async\":true,\"parameters\":[{\"name\":\"graceMs\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_workers\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SmrtWorker\",\"exportName\":\"SmrtWorkerCollection\",\"collectionExportName\":\"SmrtWorkerCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_workers\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_workers\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"_smrt_workers_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_workers_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"d3a7edbd\"}}},\"moduleType\":\"smrt\",\"smrtDependencies\":[\"@happyvertical/smrt-core\",\"@happyvertical/smrt-tenancy\"]}"));
|
|
10
|
+
ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":1785184304401,\"packageName\":\"@happyvertical/smrt-jobs\",\"packageVersion\":\"0.40.30\",\"objects\":{\"@happyvertical/smrt-jobs:ForgeDelivery\":{\"name\":\"forgedelivery\",\"className\":\"ForgeDelivery\",\"qualifiedName\":\"@happyvertical/smrt-jobs:ForgeDelivery\",\"collection\":\"forgedeliveries\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/forge-projection.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"sqlType\":\"UUID\",\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":true,\"autoPopulate\":true,\"nullable\":false,\"mode\":\"required\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"provider\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"deliveryId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"installationKey\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"repositoryKey\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"eventName\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"payload\":{\"type\":\"json\",\"required\":false,\"_meta\":{}},\"status\":{\"type\":\"text\",\"required\":true,\"default\":\"pending\",\"_meta\":{\"required\":true,\"default\":\"pending\"}},\"attempts\":{\"type\":\"integer\",\"required\":true,\"default\":0,\"_meta\":{\"required\":true,\"default\":0}},\"maxAttempts\":{\"type\":\"integer\",\"required\":true,\"default\":5,\"_meta\":{\"required\":true,\"default\":5}},\"receivedAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true}},\"nextAttemptAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true}},\"leaseOwner\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"leaseToken\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"leaseExpiresAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"lastError\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"completedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"replayCount\":{\"type\":\"integer\",\"required\":true,\"default\":0,\"_meta\":{\"required\":true,\"default\":0}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"_smrt_forge_deliveries\",\"conflictColumns\":[\"tenant_id\",\"provider\",\"delivery_id\"],\"api\":false,\"cli\":false,\"mcp\":false,\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"ForgeDelivery\",\"collectionExportName\":\"ForgeDeliveryCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"provider\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"deliveryId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"eventName\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"status\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"attempts\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"maxAttempts\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"receivedAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"},{\"field\":\"nextAttemptAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"},{\"field\":\"replayCount\",\"rule\":\"required\",\"fieldType\":\"integer\"}],\"schema\":{\"tableName\":\"_smrt_forge_deliveries\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_forge_deliveries\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID NOT NULL,\\n \\\"provider\\\" TEXT NOT NULL,\\n \\\"delivery_id\\\" TEXT NOT NULL,\\n \\\"installation_key\\\" TEXT,\\n \\\"repository_key\\\" TEXT,\\n \\\"event_name\\\" TEXT NOT NULL,\\n \\\"payload\\\" JSON,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'pending',\\n \\\"attempts\\\" INTEGER NOT NULL DEFAULT 0,\\n \\\"max_attempts\\\" INTEGER NOT NULL DEFAULT 5,\\n \\\"received_at\\\" TIMESTAMP NOT NULL,\\n \\\"next_attempt_at\\\" TIMESTAMP NOT NULL,\\n \\\"lease_owner\\\" TEXT,\\n \\\"lease_token\\\" TEXT,\\n \\\"lease_expires_at\\\" TIMESTAMP,\\n \\\"last_error\\\" TEXT,\\n \\\"completed_at\\\" TIMESTAMP,\\n \\\"replay_count\\\" INTEGER NOT NULL DEFAULT 0\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":true,\"unique\":false},\"provider\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"delivery_id\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"installation_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"repository_key\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"event_name\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"payload\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"pending\"},\"attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":0},\"max_attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":5},\"received_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false},\"next_attempt_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false},\"lease_owner\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"lease_token\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"lease_expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"last_error\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"completed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"replay_count\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":0}},\"indexes\":[{\"name\":\"_smrt_forge_deliveries_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_forge_deliveries_tenant_id_provider_idx\",\"columns\":[\"tenant_id\",\"provider\",\"delivery_id\"],\"unique\":true}],\"version\":\"38d3f476\"}},\"@happyvertical/smrt-jobs:ForgeProjectionCheckpoint\":{\"name\":\"forgeprojectioncheckpoint\",\"className\":\"ForgeProjectionCheckpoint\",\"qualifiedName\":\"@happyvertical/smrt-jobs:ForgeProjectionCheckpoint\",\"collection\":\"forgeprojectioncheckpoints\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/forge-projection.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"sqlType\":\"UUID\",\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":true,\"autoPopulate\":true,\"nullable\":false,\"mode\":\"required\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"projection\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"subjectKey\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"observationVersion\":{\"type\":\"integer\",\"required\":true,\"_meta\":{\"required\":true}},\"deliveryId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"observedAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"_smrt_forge_projection_checkpoints\",\"conflictColumns\":[\"tenant_id\",\"projection\",\"subject_key\"],\"api\":false,\"cli\":false,\"mcp\":false,\"tenantScoped\":{\"mode\":\"required\"}},\"extends\":\"SmrtObject\",\"exportName\":\"ForgeProjectionCheckpoint\",\"collectionExportName\":\"ForgeProjectionCheckpointCollection\",\"validationRules\":[{\"field\":\"tenantId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"projection\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"subjectKey\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"observationVersion\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"deliveryId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"observedAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"}],\"schema\":{\"tableName\":\"_smrt_forge_projection_checkpoints\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_forge_projection_checkpoints\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID NOT NULL,\\n \\\"projection\\\" TEXT NOT NULL,\\n \\\"subject_key\\\" TEXT NOT NULL,\\n \\\"observation_version\\\" INTEGER NOT NULL,\\n \\\"delivery_id\\\" TEXT NOT NULL,\\n \\\"observed_at\\\" TIMESTAMP NOT NULL\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":true,\"unique\":false},\"projection\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"subject_key\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"observation_version\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false},\"delivery_id\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"observed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_forge_projection_checkpoints_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_forge_projection_checkpoints_tenant_id_projection_idx\",\"columns\":[\"tenant_id\",\"projection\",\"subject_key\"],\"unique\":true}],\"version\":\"39c12493\"}},\"@happyvertical/smrt-jobs:ForgeDeliveryCollection\":{\"name\":\"forgedeliverycollection\",\"className\":\"ForgeDeliveryCollection\",\"qualifiedName\":\"@happyvertical/smrt-jobs:ForgeDeliveryCollection\",\"collection\":\"forgedeliveries\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/forge-projection.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{},\"methods\":{\"accept\":{\"name\":\"accept\",\"async\":true,\"parameters\":[{\"name\":\"input\",\"type\":\"AcceptForgeDeliveryInput\",\"optional\":false},{\"name\":\"audit\",\"type\":\"ForgeProjectionAuditHook\",\"optional\":true}],\"returnType\":\"Promise<AcceptedForgeDelivery>\",\"isStatic\":false,\"isPublic\":true},\"claimReady\":{\"name\":\"claimReady\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"ClaimForgeDeliveryOptions\",\"optional\":false},{\"name\":\"audit\",\"type\":\"ForgeProjectionAuditHook\",\"optional\":true}],\"returnType\":\"Promise<ForgeDelivery | null>\",\"isStatic\":false,\"isPublic\":true},\"replay\":{\"name\":\"replay\",\"async\":true,\"parameters\":[{\"name\":\"id\",\"type\":\"string\",\"optional\":false},{\"name\":\"audit\",\"type\":\"ForgeProjectionAuditHook\",\"optional\":true}],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_forge_deliveries\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"ForgeDelivery\",\"exportName\":\"ForgeDeliveryCollection\",\"collectionExportName\":\"ForgeDeliveryCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_forge_deliveries\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_forge_deliveries\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"_smrt_forge_deliveries_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_forge_deliveries_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"0a680146\"}},\"@happyvertical/smrt-jobs:SmrtJobEvent\":{\"name\":\"smrtjobevent\",\"className\":\"SmrtJobEvent\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtJobEvent\",\"collection\":\"smrtjobevents\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-job-event.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"sqlType\":\"UUID\",\"nullable\":true,\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":false,\"autoPopulate\":true,\"nullable\":true,\"mode\":\"optional\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"jobId\":{\"type\":\"foreignKey\",\"required\":true,\"related\":\"SmrtJob\",\"_meta\":{\"required\":true}},\"type\":{\"type\":\"text\",\"required\":true,\"default\":\"log\",\"_meta\":{\"required\":true,\"default\":\"log\"}},\"level\":{\"type\":\"text\",\"required\":true,\"default\":\"info\",\"_meta\":{\"required\":true,\"default\":\"info\"}},\"stage\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"progress\":{\"type\":\"integer\",\"required\":false,\"_meta\":{\"nullable\":true}},\"message\":{\"type\":\"text\",\"required\":true,\"default\":\"\",\"_meta\":{\"required\":true,\"default\":\"\"}},\"data\":{\"type\":\"json\",\"required\":false,\"_meta\":{}},\"createdAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true}}},\"methods\":{\"toCursor\":{\"name\":\"toCursor\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_job_events\",\"api\":false,\"cli\":{\"include\":[\"list\",\"get\"],\"http\":false,\"skipApiCheck\":true},\"mcp\":false,\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SmrtJobEvent\",\"collectionExportName\":\"SmrtJobEventCollection\",\"validationRules\":[{\"field\":\"jobId\",\"rule\":\"required\",\"fieldType\":\"foreignKey\"},{\"field\":\"type\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"level\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"message\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"createdAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"}],\"schema\":{\"tableName\":\"_smrt_job_events\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_job_events\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID,\\n \\\"job_id\\\" UUID NOT NULL,\\n \\\"type\\\" TEXT NOT NULL DEFAULT 'log',\\n \\\"level\\\" TEXT NOT NULL DEFAULT 'info',\\n \\\"stage\\\" TEXT,\\n \\\"progress\\\" INTEGER,\\n \\\"message\\\" TEXT NOT NULL DEFAULT '',\\n \\\"data\\\" JSON\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"job_id\":{\"type\":\"UUID\",\"referenceKind\":\"foreignKey\",\"notNull\":true,\"unique\":false},\"type\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"log\"},\"level\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"info\"},\"stage\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"progress\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false},\"message\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"\"},\"data\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_job_events_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_job_events_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"8a9faeec\"}},\"@happyvertical/smrt-jobs:SmrtJobEventCollection\":{\"name\":\"smrtjobeventcollection\",\"className\":\"SmrtJobEventCollection\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtJobEventCollection\",\"collection\":\"smrtjobevents\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-job-event.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{},\"methods\":{\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"append\":{\"name\":\"append\",\"async\":true,\"parameters\":[{\"name\":\"input\",\"type\":\"SmrtJobEventData\",\"optional\":false}],\"returnType\":\"Promise<SmrtJobEvent>\",\"isStatic\":false,\"isPublic\":true},\"listByJob\":{\"name\":\"listByJob\",\"async\":true,\"parameters\":[{\"name\":\"jobId\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"ListJobEventsOptions\",\"optional\":true}],\"returnType\":\"Promise<SmrtJobEvent[]>\",\"isStatic\":false,\"isPublic\":true},\"listSinceCursor\":{\"name\":\"listSinceCursor\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"any\",\"optional\":true}],\"returnType\":\"Promise<SmrtJobEvent[]>\",\"isStatic\":false,\"isPublic\":true},\"latestProgressByJobIds\":{\"name\":\"latestProgressByJobIds\",\"async\":true,\"parameters\":[{\"name\":\"jobIds\",\"type\":\"string[]\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<Map<string, SmrtJobEvent>>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_job_events\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SmrtJobEvent\",\"exportName\":\"SmrtJobEventCollection\",\"collectionExportName\":\"SmrtJobEventCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_job_events\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_job_events\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"_smrt_job_events_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_job_events_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"bcf5b3bc\"}},\"@happyvertical/smrt-jobs:SmrtJob\":{\"name\":\"smrtjob\",\"className\":\"SmrtJob\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtJob\",\"collection\":\"smrtjobs\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-job.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{\"tenantId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"sqlType\":\"UUID\",\"nullable\":true,\"__tenancy\":{\"isTenantIdField\":true,\"autoFilter\":true,\"required\":false,\"autoPopulate\":true,\"nullable\":true,\"mode\":\"optional\",\"field\":\"tenantId\",\"allowSuperAdminBypass\":false}}},\"queue\":{\"type\":\"text\",\"required\":true,\"default\":\"default\",\"_meta\":{\"required\":true,\"default\":\"default\"}},\"objectType\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"objectId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"method\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"args\":{\"type\":\"json\",\"required\":false,\"_meta\":{}},\"runAt\":{\"type\":\"datetime\",\"required\":true,\"_meta\":{\"required\":true}},\"priority\":{\"type\":\"integer\",\"required\":true,\"default\":50,\"_meta\":{\"required\":true,\"default\":50}},\"status\":{\"type\":\"text\",\"required\":true,\"default\":\"pending\",\"_meta\":{\"required\":true,\"default\":\"pending\"}},\"attempts\":{\"type\":\"integer\",\"required\":true,\"default\":0,\"_meta\":{\"required\":true,\"default\":0}},\"maxAttempts\":{\"type\":\"integer\",\"required\":true,\"default\":3,\"_meta\":{\"required\":true,\"default\":3}},\"timeout\":{\"type\":\"integer\",\"required\":true,\"default\":300000,\"_meta\":{\"required\":true,\"default\":300000}},\"timeoutBehavior\":{\"type\":\"text\",\"required\":true,\"default\":\"fail\",\"_meta\":{\"required\":true,\"default\":\"fail\"}},\"startedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"completedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"lastError\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"resultPointer\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"retryStrategy\":{\"type\":\"json\",\"required\":false,\"_meta\":{}},\"workerId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"workerHeartbeat\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}}},\"methods\":{\"save\":{\"name\":\"save\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"retry\":{\"name\":\"retry\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"cancel\":{\"name\":\"cancel\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"getDescription\":{\"name\":\"getDescription\",\"async\":false,\"parameters\":[],\"returnType\":\"string\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_jobs\",\"api\":false,\"cli\":{\"include\":[\"list\",\"get\",\"retry\",\"cancel\"],\"skipApiCheck\":true,\"http\":false},\"mcp\":false,\"tenantScoped\":{\"mode\":\"optional\"}},\"extends\":\"SmrtObject\",\"exportName\":\"SmrtJob\",\"collectionExportName\":\"SmrtJobCollection\",\"validationRules\":[{\"field\":\"queue\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"objectType\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"method\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"runAt\",\"rule\":\"required\",\"fieldType\":\"datetime\"},{\"field\":\"priority\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"status\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"attempts\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"maxAttempts\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"timeout\",\"rule\":\"required\",\"fieldType\":\"integer\"},{\"field\":\"timeoutBehavior\",\"rule\":\"required\",\"fieldType\":\"text\"}],\"schema\":{\"tableName\":\"_smrt_jobs\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_jobs\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"tenant_id\\\" UUID,\\n \\\"queue\\\" TEXT NOT NULL DEFAULT 'default',\\n \\\"object_type\\\" TEXT NOT NULL,\\n \\\"object_id\\\" TEXT,\\n \\\"method\\\" TEXT NOT NULL,\\n \\\"args\\\" JSON,\\n \\\"run_at\\\" TIMESTAMP NOT NULL,\\n \\\"priority\\\" INTEGER NOT NULL DEFAULT 50,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'pending',\\n \\\"attempts\\\" INTEGER NOT NULL DEFAULT 0,\\n \\\"max_attempts\\\" INTEGER NOT NULL DEFAULT 3,\\n \\\"timeout\\\" INTEGER NOT NULL DEFAULT 300000,\\n \\\"timeout_behavior\\\" TEXT NOT NULL DEFAULT 'fail',\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"completed_at\\\" TIMESTAMP,\\n \\\"last_error\\\" TEXT,\\n \\\"result_pointer\\\" TEXT,\\n \\\"retry_strategy\\\" JSON,\\n \\\"worker_id\\\" TEXT,\\n \\\"worker_heartbeat\\\" TIMESTAMP\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"tenant_id\":{\"type\":\"UUID\",\"referenceKind\":\"tenantId\",\"notNull\":false,\"unique\":false},\"queue\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"default\"},\"object_type\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"object_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"method\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"args\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"run_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"unique\":false},\"priority\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":50},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"pending\"},\"attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":0},\"max_attempts\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":3},\"timeout\":{\"type\":\"INTEGER\",\"notNull\":true,\"unique\":false,\"default\":300000},\"timeout_behavior\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"fail\"},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"completed_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"last_error\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"result_pointer\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"retry_strategy\":{\"type\":\"JSON\",\"notNull\":false,\"unique\":false},\"worker_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"worker_heartbeat\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_jobs_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_jobs_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"0e543f33\"}},\"@happyvertical/smrt-jobs:SmrtJobCollection\":{\"name\":\"smrtjobcollection\",\"className\":\"SmrtJobCollection\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtJobCollection\",\"collection\":\"smrtjobs\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-job.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{},\"methods\":{\"initialize\":{\"name\":\"initialize\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise\",\"isStatic\":false,\"isPublic\":true},\"listByStatus\":{\"name\":\"listByStatus\",\"async\":true,\"parameters\":[{\"name\":\"status\",\"type\":\"JobStatus | JobStatus[]\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<SmrtJob[]>\",\"isStatic\":false,\"isPublic\":true},\"listReady\":{\"name\":\"listReady\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":true}],\"returnType\":\"Promise<SmrtJob[]>\",\"isStatic\":false,\"isPublic\":true},\"claimReady\":{\"name\":\"claimReady\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"ClaimReadyOptions\",\"optional\":false}],\"returnType\":\"Promise<SmrtJob[]>\",\"isStatic\":false,\"isPublic\":true},\"countInFlightForTenant\":{\"name\":\"countInFlightForTenant\",\"async\":true,\"parameters\":[{\"name\":\"tenantId\",\"type\":\"string | null\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true},\"enqueueJob\":{\"name\":\"enqueueJob\",\"async\":true,\"parameters\":[{\"name\":\"data\",\"type\":\"SmrtJobData\",\"optional\":false},{\"name\":\"options\",\"type\":\"EnqueueJobOptions\",\"optional\":true}],\"returnType\":\"Promise<SmrtJob>\",\"isStatic\":false,\"isPublic\":true},\"stats\":{\"name\":\"stats\",\"async\":true,\"parameters\":[{\"name\":\"queue\",\"type\":\"string\",\"optional\":true}],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true},\"cleanup\":{\"name\":\"cleanup\",\"async\":true,\"parameters\":[{\"name\":\"options\",\"type\":\"object\",\"optional\":false}],\"returnType\":\"Promise<number>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_jobs\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SmrtJob\",\"exportName\":\"SmrtJobCollection\",\"collectionExportName\":\"SmrtJobCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_jobs\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_jobs\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"_smrt_jobs_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_jobs_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"d99c04d1\"}},\"@happyvertical/smrt-jobs:SmrtWorker\":{\"name\":\"smrtworker\",\"className\":\"SmrtWorker\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtWorker\",\"collection\":\"smrtworkers\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-worker.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{\"workerId\":{\"type\":\"text\",\"required\":true,\"_meta\":{\"required\":true}},\"pid\":{\"type\":\"integer\",\"required\":false,\"_meta\":{\"nullable\":true}},\"hostname\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"startedAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"heartbeatAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"leaseExpiresAt\":{\"type\":\"datetime\",\"required\":false,\"_meta\":{\"nullable\":true}},\"status\":{\"type\":\"text\",\"required\":true,\"default\":\"running\",\"_meta\":{\"required\":true,\"default\":\"running\"}}},\"methods\":{},\"decoratorConfig\":{\"tableName\":\"_smrt_workers\",\"conflictColumns\":[\"worker_id\"],\"api\":false,\"cli\":false,\"mcp\":false},\"extends\":\"SmrtObject\",\"exportName\":\"SmrtWorker\",\"collectionExportName\":\"SmrtWorkerCollection\",\"validationRules\":[{\"field\":\"workerId\",\"rule\":\"required\",\"fieldType\":\"text\"},{\"field\":\"status\",\"rule\":\"required\",\"fieldType\":\"text\"}],\"schema\":{\"tableName\":\"_smrt_workers\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_workers\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"worker_id\\\" TEXT NOT NULL,\\n \\\"pid\\\" INTEGER,\\n \\\"hostname\\\" TEXT,\\n \\\"started_at\\\" TIMESTAMP,\\n \\\"heartbeat_at\\\" TIMESTAMP,\\n \\\"lease_expires_at\\\" TIMESTAMP,\\n \\\"status\\\" TEXT NOT NULL DEFAULT 'running'\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"worker_id\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false},\"pid\":{\"type\":\"INTEGER\",\"notNull\":false,\"unique\":false},\"hostname\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"started_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"heartbeat_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"lease_expires_at\":{\"type\":\"TIMESTAMP\",\"notNull\":false,\"unique\":false},\"status\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"running\"}},\"indexes\":[{\"name\":\"_smrt_workers_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_workers_worker_id_idx\",\"columns\":[\"worker_id\"],\"unique\":true}],\"version\":\"bfaad669\"}},\"@happyvertical/smrt-jobs:SmrtWorkerCollection\":{\"name\":\"smrtworkercollection\",\"className\":\"SmrtWorkerCollection\",\"qualifiedName\":\"@happyvertical/smrt-jobs:SmrtWorkerCollection\",\"collection\":\"smrtworkers\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/jobs/src/smrt-worker.ts\",\"packageName\":\"@happyvertical/smrt-jobs\",\"fields\":{},\"methods\":{\"assertReady\":{\"name\":\"assertReady\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"tableReady\":{\"name\":\"tableReady\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<boolean>\",\"isStatic\":false,\"isPublic\":true},\"registerWorker\":{\"name\":\"registerWorker\",\"async\":true,\"parameters\":[{\"name\":\"input\",\"type\":\"RegisterWorkerInput\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"renewLease\":{\"name\":\"renewLease\",\"async\":true,\"parameters\":[{\"name\":\"workerKey\",\"type\":\"string\",\"optional\":false},{\"name\":\"leaseTtlMs\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"expireWorker\":{\"name\":\"expireWorker\",\"async\":true,\"parameters\":[{\"name\":\"workerKey\",\"type\":\"string\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true},\"freshLeaseWorkerKeys\":{\"name\":\"freshLeaseWorkerKeys\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<Set<string>>\",\"isStatic\":false,\"isPublic\":true},\"pruneExpired\":{\"name\":\"pruneExpired\",\"async\":true,\"parameters\":[{\"name\":\"graceMs\",\"type\":\"number\",\"optional\":false}],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_workers\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"SmrtWorker\",\"exportName\":\"SmrtWorkerCollection\",\"collectionExportName\":\"SmrtWorkerCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_workers\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_workers\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"}},\"indexes\":[{\"name\":\"_smrt_workers_id_idx\",\"columns\":[\"id\"]},{\"name\":\"_smrt_workers_slug_context_idx\",\"columns\":[\"slug\",\"context\"],\"unique\":true}],\"version\":\"d3a7edbd\"}}},\"moduleType\":\"smrt\",\"smrtDependencies\":[\"@happyvertical/smrt-core\",\"@happyvertical/smrt-tenancy\"]}"));
|
|
11
11
|
//#endregion
|
|
12
12
|
//#region src/background-policy.ts
|
|
13
13
|
var MAX_JOB_RETRIES = 25;
|
|
@@ -1538,4 +1538,4 @@ function createTaskRunner(config) {
|
|
|
1538
1538
|
//#endregion
|
|
1539
1539
|
export { markBackgroundEligible as S, assertWithinTenantCreationCap as _, SmrtWorker as a, getBackgroundEligibleMethods as b, SmrtJobEventCollection as c, JobContextLogger as d, redactErrorForPersistence as f, TenantJobCapExceededError as g, MAX_JOB_RETRIES as h, DEFAULT_TASK_HEARTBEAT_INTERVAL_MS as i, SmrtJob as l, DEFAULT_TENANT_JOB_CAP as m, TaskRunner as n, SmrtWorkerCollection as o, redactErrorMessage as p, createTaskRunner as r, SmrtJobEvent as s, JobTimeoutError as t, SmrtJobCollection as u, backgroundEligible as v, isBackgroundEligibleMethod as x, clampRetries as y };
|
|
1540
1540
|
|
|
1541
|
-
//# sourceMappingURL=runner-
|
|
1541
|
+
//# sourceMappingURL=runner-gUEmy0vg.js.map
|