duron 0.1.1 → 0.2.1

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.
Files changed (43) hide show
  1. package/README.md +4 -4
  2. package/dist/adapters/adapter.d.ts +3 -3
  3. package/dist/adapters/adapter.d.ts.map +1 -1
  4. package/dist/adapters/adapter.js +7 -7
  5. package/dist/adapters/postgres/base.d.ts +52 -0
  6. package/dist/adapters/postgres/base.d.ts.map +1 -0
  7. package/dist/adapters/postgres/base.js +834 -0
  8. package/dist/adapters/postgres/pglite.d.ts +10 -5
  9. package/dist/adapters/postgres/pglite.d.ts.map +1 -1
  10. package/dist/adapters/postgres/pglite.js +19 -7
  11. package/dist/adapters/postgres/postgres.d.ts +6 -39
  12. package/dist/adapters/postgres/postgres.d.ts.map +1 -1
  13. package/dist/adapters/postgres/postgres.js +9 -822
  14. package/dist/adapters/postgres/schema.d.ts +90 -136
  15. package/dist/adapters/postgres/schema.d.ts.map +1 -1
  16. package/dist/adapters/postgres/schema.default.d.ts +90 -136
  17. package/dist/adapters/postgres/schema.default.d.ts.map +1 -1
  18. package/dist/adapters/postgres/schema.js +2 -2
  19. package/dist/adapters/schemas.d.ts +6 -3
  20. package/dist/adapters/schemas.d.ts.map +1 -1
  21. package/dist/adapters/schemas.js +2 -1
  22. package/dist/client.d.ts +1 -0
  23. package/dist/client.d.ts.map +1 -1
  24. package/dist/server.d.ts +5 -2
  25. package/dist/server.d.ts.map +1 -1
  26. package/dist/server.js +3 -3
  27. package/dist/utils/p-retry.d.ts.map +1 -1
  28. package/dist/utils/p-retry.js +3 -4
  29. package/migrations/postgres/20251203223656_conscious_johnny_blaze/migration.sql +64 -0
  30. package/migrations/postgres/20251203223656_conscious_johnny_blaze/snapshot.json +941 -0
  31. package/package.json +3 -3
  32. package/src/adapters/adapter.ts +10 -10
  33. package/src/adapters/postgres/base.ts +1299 -0
  34. package/src/adapters/postgres/pglite.ts +36 -18
  35. package/src/adapters/postgres/postgres.ts +19 -1244
  36. package/src/adapters/postgres/schema.ts +2 -2
  37. package/src/adapters/schemas.ts +2 -1
  38. package/src/client.ts +1 -1
  39. package/src/server.ts +2 -2
  40. package/src/utils/p-retry.ts +8 -11
  41. package/migrations/postgres/0000_lethal_speed_demon.sql +0 -64
  42. package/migrations/postgres/meta/0000_snapshot.json +0 -606
  43. package/migrations/postgres/meta/_journal.json +0 -13
@@ -22,7 +22,7 @@ export default function createSchema(schemaName: string) {
22
22
  expires_at: timestamp('expires_at', { withTimezone: true }),
23
23
  started_at: timestamp('started_at', { withTimezone: true }),
24
24
  finished_at: timestamp('finished_at', { withTimezone: true }),
25
- owner_id: text('owner_id'),
25
+ client_id: text('client_id'),
26
26
  concurrency_limit: integer('concurrency_limit').notNull().default(10),
27
27
  created_at: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
28
28
  updated_at: timestamp('updated_at', { withTimezone: true })
@@ -43,7 +43,7 @@ export default function createSchema(schemaName: string) {
43
43
  index('idx_jobs_started_at').on(table.started_at),
44
44
  index('idx_jobs_finished_at').on(table.finished_at),
45
45
  index('idx_jobs_expires_at').on(table.expires_at),
46
- index('idx_jobs_owner_id').on(table.owner_id),
46
+ index('idx_jobs_client_id').on(table.client_id),
47
47
  index('idx_jobs_checksum').on(table.checksum),
48
48
  index('idx_jobs_concurrency_limit').on(table.concurrency_limit),
49
49
  // Composite indexes
@@ -45,6 +45,7 @@ export const JobSchema = z.object({
45
45
  createdAt: DateSchema,
46
46
  updatedAt: DateSchema,
47
47
  concurrencyLimit: z.coerce.number(),
48
+ clientId: z.string().nullable().optional(),
48
49
  })
49
50
 
50
51
  // ============================================================================
@@ -93,7 +94,7 @@ export const JobFiltersSchema = z.object({
93
94
  status: z.union([JobStatusSchema, z.array(JobStatusSchema)]).optional(),
94
95
  actionName: z.union([z.string(), z.array(z.string())]).optional(),
95
96
  groupKey: z.union([z.string(), z.array(z.string())]).optional(),
96
- ownerId: z.union([z.string(), z.array(z.string())]).optional(),
97
+ clientId: z.union([z.string(), z.array(z.string())]).optional(),
97
98
  createdAt: z.union([DateSchema, z.array(DateSchema).length(2)]).optional(),
98
99
  startedAt: z.union([DateSchema, z.array(DateSchema).length(2)]).optional(),
99
100
  finishedAt: z.union([DateSchema, z.array(DateSchema).length(2)]).optional(),
package/src/client.ts CHANGED
@@ -710,7 +710,7 @@ export class Client<
710
710
 
711
711
  this.#database.on(
712
712
  'job-status-changed',
713
- async (event: { jobId: string; status: JobStatus | 'retried'; ownerId: string }) => {
713
+ async (event: { jobId: string; status: JobStatus | 'retried'; clientId: string }) => {
714
714
  const pendingWaits = this.#pendingJobWaits.get(event.jobId)
715
715
  if (!pendingWaits || pendingWaits.size === 0) {
716
716
  return
package/src/server.ts CHANGED
@@ -86,7 +86,7 @@ export const GetJobsQuerySchema = z
86
86
  fStatus: z.union([JobStatusSchema, z.array(JobStatusSchema)]).optional(),
87
87
  fActionName: z.union([z.string(), z.array(z.string())]).optional(),
88
88
  fGroupKey: z.union([z.string(), z.array(z.string())]).optional(),
89
- fOwnerId: z.union([z.string(), z.array(z.string())]).optional(),
89
+ fClientId: z.union([z.string(), z.array(z.string())]).optional(),
90
90
  // Date filters: can be a single ISO string or JSON array [start, end] - both coerced to Date objects
91
91
  fCreatedAt: z.union([z.coerce.date(), z.array(z.coerce.date())]).optional(),
92
92
  fStartedAt: z.union([z.coerce.date(), z.array(z.coerce.date())]).optional(),
@@ -107,7 +107,7 @@ export const GetJobsQuerySchema = z
107
107
  if (data.fStatus) filters.status = data.fStatus
108
108
  if (data.fActionName) filters.actionName = data.fActionName
109
109
  if (data.fGroupKey) filters.groupKey = data.fGroupKey
110
- if (data.fOwnerId) filters.ownerId = data.fOwnerId
110
+ if (data.fClientId) filters.clientId = data.fClientId
111
111
  if (data.fCreatedAt) filters.createdAt = data.fCreatedAt
112
112
  if (data.fStartedAt) filters.startedAt = data.fStartedAt
113
113
  if (data.fFinishedAt) filters.finishedAt = data.fFinishedAt
@@ -194,17 +194,14 @@ export default async function pRetry<TResult>(
194
194
 
195
195
  return result
196
196
  } catch (error) {
197
- if (
198
- await onAttemptFailure({
199
- error: error as Error,
200
- attemptNumber,
201
- retriesConsumed,
202
- startTime,
203
- options,
204
- })
205
- ) {
206
- retriesConsumed++
207
- }
197
+ await onAttemptFailure({
198
+ error: error as Error,
199
+ attemptNumber,
200
+ retriesConsumed,
201
+ startTime,
202
+ options,
203
+ })
204
+ retriesConsumed++
208
205
  }
209
206
  }
210
207
 
@@ -1,64 +0,0 @@
1
- CREATE SCHEMA IF NOT EXISTS "duron";
2
- --> statement-breakpoint
3
- CREATE TABLE "duron"."job_steps" (
4
- "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
5
- "job_id" uuid NOT NULL,
6
- "name" text NOT NULL,
7
- "status" text DEFAULT 'active' NOT NULL,
8
- "output" jsonb,
9
- "error" jsonb,
10
- "started_at" timestamp with time zone DEFAULT now() NOT NULL,
11
- "finished_at" timestamp with time zone,
12
- "timeout_ms" integer NOT NULL,
13
- "expires_at" timestamp with time zone,
14
- "retries_limit" integer DEFAULT 0 NOT NULL,
15
- "retries_count" integer DEFAULT 0 NOT NULL,
16
- "delayed_ms" integer,
17
- "history_failed_attempts" jsonb DEFAULT '{}'::jsonb NOT NULL,
18
- "created_at" timestamp with time zone DEFAULT now() NOT NULL,
19
- "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
20
- CONSTRAINT "unique_job_step_name" UNIQUE("job_id","name"),
21
- CONSTRAINT "job_steps_status_check" CHECK ("duron"."job_steps"."status" IN ('active','completed','failed','cancelled'))
22
- );
23
- --> statement-breakpoint
24
- CREATE TABLE "duron"."jobs" (
25
- "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
26
- "action_name" text NOT NULL,
27
- "group_key" text NOT NULL,
28
- "status" text DEFAULT 'created' NOT NULL,
29
- "checksum" text NOT NULL,
30
- "input" jsonb DEFAULT '{}'::jsonb NOT NULL,
31
- "output" jsonb,
32
- "error" jsonb,
33
- "timeout_ms" integer NOT NULL,
34
- "expires_at" timestamp with time zone,
35
- "started_at" timestamp with time zone,
36
- "finished_at" timestamp with time zone,
37
- "owner_id" text,
38
- "concurrency_limit" integer DEFAULT 10 NOT NULL,
39
- "created_at" timestamp with time zone DEFAULT now() NOT NULL,
40
- "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
41
- CONSTRAINT "jobs_status_check" CHECK ("duron"."jobs"."status" IN ('created','active','completed','failed','cancelled'))
42
- );
43
- --> statement-breakpoint
44
- ALTER TABLE "duron"."job_steps" ADD CONSTRAINT "job_steps_job_id_jobs_id_fk" FOREIGN KEY ("job_id") REFERENCES "duron"."jobs"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
45
- CREATE INDEX "idx_job_steps_job_id" ON "duron"."job_steps" USING btree ("job_id");--> statement-breakpoint
46
- CREATE INDEX "idx_job_steps_status" ON "duron"."job_steps" USING btree ("status");--> statement-breakpoint
47
- CREATE INDEX "idx_job_steps_name" ON "duron"."job_steps" USING btree ("name");--> statement-breakpoint
48
- CREATE INDEX "idx_job_steps_expires_at" ON "duron"."job_steps" USING btree ("expires_at");--> statement-breakpoint
49
- CREATE INDEX "idx_job_steps_job_status" ON "duron"."job_steps" USING btree ("job_id","status");--> statement-breakpoint
50
- CREATE INDEX "idx_job_steps_job_name" ON "duron"."job_steps" USING btree ("job_id","name");--> statement-breakpoint
51
- CREATE INDEX "idx_job_steps_output_fts" ON "duron"."job_steps" USING gin (to_tsvector('english', "output"::text));--> statement-breakpoint
52
- CREATE INDEX "idx_jobs_action_name" ON "duron"."jobs" USING btree ("action_name");--> statement-breakpoint
53
- CREATE INDEX "idx_jobs_status" ON "duron"."jobs" USING btree ("status");--> statement-breakpoint
54
- CREATE INDEX "idx_jobs_group_key" ON "duron"."jobs" USING btree ("group_key");--> statement-breakpoint
55
- CREATE INDEX "idx_jobs_started_at" ON "duron"."jobs" USING btree ("started_at");--> statement-breakpoint
56
- CREATE INDEX "idx_jobs_finished_at" ON "duron"."jobs" USING btree ("finished_at");--> statement-breakpoint
57
- CREATE INDEX "idx_jobs_expires_at" ON "duron"."jobs" USING btree ("expires_at");--> statement-breakpoint
58
- CREATE INDEX "idx_jobs_owner_id" ON "duron"."jobs" USING btree ("owner_id");--> statement-breakpoint
59
- CREATE INDEX "idx_jobs_checksum" ON "duron"."jobs" USING btree ("checksum");--> statement-breakpoint
60
- CREATE INDEX "idx_jobs_concurrency_limit" ON "duron"."jobs" USING btree ("concurrency_limit");--> statement-breakpoint
61
- CREATE INDEX "idx_jobs_action_status" ON "duron"."jobs" USING btree ("action_name","status");--> statement-breakpoint
62
- CREATE INDEX "idx_jobs_action_group" ON "duron"."jobs" USING btree ("action_name","group_key");--> statement-breakpoint
63
- CREATE INDEX "idx_jobs_input_fts" ON "duron"."jobs" USING gin (to_tsvector('english', "input"::text));--> statement-breakpoint
64
- CREATE INDEX "idx_jobs_output_fts" ON "duron"."jobs" USING gin (to_tsvector('english', "output"::text));