@contractspec/lib.jobs 1.57.0 → 1.59.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.
Files changed (92) hide show
  1. package/dist/contracts/index.d.ts +494 -500
  2. package/dist/contracts/index.d.ts.map +1 -1
  3. package/dist/contracts/index.js +298 -461
  4. package/dist/entities/index.d.ts +117 -122
  5. package/dist/entities/index.d.ts.map +1 -1
  6. package/dist/entities/index.js +170 -193
  7. package/dist/events.d.ts +297 -303
  8. package/dist/events.d.ts.map +1 -1
  9. package/dist/events.js +199 -351
  10. package/dist/handlers/gmail-sync-handler.d.ts +5 -9
  11. package/dist/handlers/gmail-sync-handler.d.ts.map +1 -1
  12. package/dist/handlers/gmail-sync-handler.js +8 -8
  13. package/dist/handlers/index.d.ts +5 -9
  14. package/dist/handlers/index.d.ts.map +1 -1
  15. package/dist/handlers/index.js +53 -10
  16. package/dist/handlers/ping-job.d.ts +6 -10
  17. package/dist/handlers/ping-job.d.ts.map +1 -1
  18. package/dist/handlers/ping-job.js +13 -12
  19. package/dist/handlers/storage-document-handler.d.ts +7 -11
  20. package/dist/handlers/storage-document-handler.d.ts.map +1 -1
  21. package/dist/handlers/storage-document-handler.js +15 -13
  22. package/dist/index.d.ts +7 -24
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +1366 -64
  25. package/dist/jobs.capability.d.ts +2 -7
  26. package/dist/jobs.capability.d.ts.map +1 -1
  27. package/dist/jobs.capability.js +29 -33
  28. package/dist/jobs.feature.d.ts +1 -6
  29. package/dist/jobs.feature.d.ts.map +1 -1
  30. package/dist/jobs.feature.js +45 -108
  31. package/dist/node/contracts/index.js +318 -0
  32. package/dist/node/entities/index.js +174 -0
  33. package/dist/node/events.js +200 -0
  34. package/dist/node/handlers/gmail-sync-handler.js +9 -0
  35. package/dist/node/handlers/index.js +55 -0
  36. package/dist/node/handlers/ping-job.js +14 -0
  37. package/dist/node/handlers/storage-document-handler.js +16 -0
  38. package/dist/node/index.js +1368 -0
  39. package/dist/node/jobs.capability.js +28 -0
  40. package/dist/node/jobs.feature.js +46 -0
  41. package/dist/node/queue/gcp-cloud-tasks.js +66 -0
  42. package/dist/node/queue/gcp-pubsub.js +54 -0
  43. package/dist/node/queue/index.js +478 -0
  44. package/dist/node/queue/memory-queue.js +160 -0
  45. package/dist/node/queue/register-defined-job.js +15 -0
  46. package/dist/node/queue/scaleway-sqs-queue.js +206 -0
  47. package/dist/node/queue/types.js +10 -0
  48. package/dist/node/scheduler/index.js +117 -0
  49. package/dist/queue/gcp-cloud-tasks.d.ts +33 -36
  50. package/dist/queue/gcp-cloud-tasks.d.ts.map +1 -1
  51. package/dist/queue/gcp-cloud-tasks.js +65 -59
  52. package/dist/queue/gcp-pubsub.d.ts +18 -21
  53. package/dist/queue/gcp-pubsub.d.ts.map +1 -1
  54. package/dist/queue/gcp-pubsub.js +53 -45
  55. package/dist/queue/index.d.ts +6 -15
  56. package/dist/queue/index.d.ts.map +1 -1
  57. package/dist/queue/index.js +476 -20
  58. package/dist/queue/memory-queue.d.ts +25 -29
  59. package/dist/queue/memory-queue.d.ts.map +1 -1
  60. package/dist/queue/memory-queue.js +159 -138
  61. package/dist/queue/register-defined-job.d.ts +3 -7
  62. package/dist/queue/register-defined-job.d.ts.map +1 -1
  63. package/dist/queue/register-defined-job.js +14 -14
  64. package/dist/queue/scaleway-sqs-queue.d.ts +31 -35
  65. package/dist/queue/scaleway-sqs-queue.d.ts.map +1 -1
  66. package/dist/queue/scaleway-sqs-queue.js +205 -173
  67. package/dist/queue/types.d.ts +2 -8
  68. package/dist/queue/types.d.ts.map +1 -1
  69. package/dist/queue/types.js +11 -12
  70. package/dist/scheduler/index.d.ts +68 -72
  71. package/dist/scheduler/index.d.ts.map +1 -1
  72. package/dist/scheduler/index.js +113 -141
  73. package/package.json +176 -50
  74. package/dist/_virtual/_rolldown/runtime.js +0 -36
  75. package/dist/contracts/index.js.map +0 -1
  76. package/dist/entities/index.js.map +0 -1
  77. package/dist/events.js.map +0 -1
  78. package/dist/handlers/gmail-sync-handler.js.map +0 -1
  79. package/dist/handlers/index.js.map +0 -1
  80. package/dist/handlers/ping-job.js.map +0 -1
  81. package/dist/handlers/storage-document-handler.js.map +0 -1
  82. package/dist/index.js.map +0 -1
  83. package/dist/jobs.capability.js.map +0 -1
  84. package/dist/jobs.feature.js.map +0 -1
  85. package/dist/queue/gcp-cloud-tasks.js.map +0 -1
  86. package/dist/queue/gcp-pubsub.js.map +0 -1
  87. package/dist/queue/index.js.map +0 -1
  88. package/dist/queue/memory-queue.js.map +0 -1
  89. package/dist/queue/register-defined-job.js.map +0 -1
  90. package/dist/queue/scaleway-sqs-queue.js.map +0 -1
  91. package/dist/queue/types.js.map +0 -1
  92. package/dist/scheduler/index.js.map +0 -1
@@ -1,198 +1,175 @@
1
- import { defineEntity, defineEntityEnum, field, index } from "@contractspec/lib.schema";
2
-
3
- //#region src/entities/index.ts
4
- /**
5
- * Job status enum.
6
- */
7
- const JobStatusEnum = defineEntityEnum({
8
- name: "JobStatus",
9
- values: [
10
- "PENDING",
11
- "RUNNING",
12
- "COMPLETED",
13
- "FAILED",
14
- "CANCELLED",
15
- "DEAD_LETTER"
16
- ],
17
- schema: "lssm_jobs",
18
- description: "Status of a background job."
1
+ // @bun
2
+ // src/entities/index.ts
3
+ import {
4
+ defineEntity,
5
+ defineEntityEnum,
6
+ field,
7
+ index
8
+ } from "@contractspec/lib.schema";
9
+ var JobStatusEnum = defineEntityEnum({
10
+ name: "JobStatus",
11
+ values: [
12
+ "PENDING",
13
+ "RUNNING",
14
+ "COMPLETED",
15
+ "FAILED",
16
+ "CANCELLED",
17
+ "DEAD_LETTER"
18
+ ],
19
+ schema: "lssm_jobs",
20
+ description: "Status of a background job."
19
21
  });
20
- /**
21
- * Job entity - represents a single job execution.
22
- */
23
- const JobEntity = defineEntity({
24
- name: "Job",
25
- description: "A background job for async processing.",
26
- schema: "lssm_jobs",
27
- map: "job",
28
- fields: {
29
- id: field.id({ description: "Unique job identifier" }),
30
- type: field.string({ description: "Job type identifier" }),
31
- version: field.int({
32
- default: 1,
33
- description: "Job type version"
34
- }),
35
- payload: field.json({ description: "Job payload data" }),
36
- status: field.enum("JobStatus", { default: "PENDING" }),
37
- priority: field.int({
38
- default: 0,
39
- description: "Higher = more urgent"
40
- }),
41
- attempts: field.int({
42
- default: 0,
43
- description: "Number of execution attempts"
44
- }),
45
- maxRetries: field.int({
46
- default: 3,
47
- description: "Maximum retry attempts"
48
- }),
49
- lastError: field.string({
50
- isOptional: true,
51
- description: "Last error message"
52
- }),
53
- lastErrorStack: field.string({
54
- isOptional: true,
55
- description: "Last error stack trace"
56
- }),
57
- scheduledAt: field.dateTime({
58
- isOptional: true,
59
- description: "When job should be processed"
60
- }),
61
- startedAt: field.dateTime({
62
- isOptional: true,
63
- description: "When processing started"
64
- }),
65
- completedAt: field.dateTime({
66
- isOptional: true,
67
- description: "When processing completed"
68
- }),
69
- timeoutAt: field.dateTime({
70
- isOptional: true,
71
- description: "Job timeout deadline"
72
- }),
73
- dedupeKey: field.string({
74
- isOptional: true,
75
- description: "Key for deduplication"
76
- }),
77
- tenantId: field.string({
78
- isOptional: true,
79
- description: "Tenant/org context"
80
- }),
81
- userId: field.string({
82
- isOptional: true,
83
- description: "User who enqueued"
84
- }),
85
- traceId: field.string({
86
- isOptional: true,
87
- description: "Distributed trace ID"
88
- }),
89
- metadata: field.json({
90
- isOptional: true,
91
- description: "Additional metadata"
92
- }),
93
- result: field.json({
94
- isOptional: true,
95
- description: "Job result data"
96
- }),
97
- createdAt: field.createdAt(),
98
- updatedAt: field.updatedAt(),
99
- scheduledJob: field.belongsTo("ScheduledJob", ["scheduledJobId"], ["id"]),
100
- scheduledJobId: field.string({ isOptional: true }),
101
- executions: field.hasMany("JobExecution")
102
- },
103
- indexes: [
104
- index.on(["status", "scheduledAt"]),
105
- index.on(["type", "status"]),
106
- index.on(["tenantId", "status"]),
107
- index.unique(["dedupeKey"], { name: "job_dedupe_key_unique" })
108
- ],
109
- enums: [JobStatusEnum]
22
+ var JobEntity = defineEntity({
23
+ name: "Job",
24
+ description: "A background job for async processing.",
25
+ schema: "lssm_jobs",
26
+ map: "job",
27
+ fields: {
28
+ id: field.id({ description: "Unique job identifier" }),
29
+ type: field.string({ description: "Job type identifier" }),
30
+ version: field.int({ default: 1, description: "Job type version" }),
31
+ payload: field.json({ description: "Job payload data" }),
32
+ status: field.enum("JobStatus", { default: "PENDING" }),
33
+ priority: field.int({ default: 0, description: "Higher = more urgent" }),
34
+ attempts: field.int({
35
+ default: 0,
36
+ description: "Number of execution attempts"
37
+ }),
38
+ maxRetries: field.int({
39
+ default: 3,
40
+ description: "Maximum retry attempts"
41
+ }),
42
+ lastError: field.string({
43
+ isOptional: true,
44
+ description: "Last error message"
45
+ }),
46
+ lastErrorStack: field.string({
47
+ isOptional: true,
48
+ description: "Last error stack trace"
49
+ }),
50
+ scheduledAt: field.dateTime({
51
+ isOptional: true,
52
+ description: "When job should be processed"
53
+ }),
54
+ startedAt: field.dateTime({
55
+ isOptional: true,
56
+ description: "When processing started"
57
+ }),
58
+ completedAt: field.dateTime({
59
+ isOptional: true,
60
+ description: "When processing completed"
61
+ }),
62
+ timeoutAt: field.dateTime({
63
+ isOptional: true,
64
+ description: "Job timeout deadline"
65
+ }),
66
+ dedupeKey: field.string({
67
+ isOptional: true,
68
+ description: "Key for deduplication"
69
+ }),
70
+ tenantId: field.string({
71
+ isOptional: true,
72
+ description: "Tenant/org context"
73
+ }),
74
+ userId: field.string({
75
+ isOptional: true,
76
+ description: "User who enqueued"
77
+ }),
78
+ traceId: field.string({
79
+ isOptional: true,
80
+ description: "Distributed trace ID"
81
+ }),
82
+ metadata: field.json({
83
+ isOptional: true,
84
+ description: "Additional metadata"
85
+ }),
86
+ result: field.json({ isOptional: true, description: "Job result data" }),
87
+ createdAt: field.createdAt(),
88
+ updatedAt: field.updatedAt(),
89
+ scheduledJob: field.belongsTo("ScheduledJob", ["scheduledJobId"], ["id"]),
90
+ scheduledJobId: field.string({ isOptional: true }),
91
+ executions: field.hasMany("JobExecution")
92
+ },
93
+ indexes: [
94
+ index.on(["status", "scheduledAt"]),
95
+ index.on(["type", "status"]),
96
+ index.on(["tenantId", "status"]),
97
+ index.unique(["dedupeKey"], { name: "job_dedupe_key_unique" })
98
+ ],
99
+ enums: [JobStatusEnum]
110
100
  });
111
- /**
112
- * ScheduledJob entity - recurring job definitions.
113
- */
114
- const ScheduledJobEntity = defineEntity({
115
- name: "ScheduledJob",
116
- description: "A scheduled/recurring job definition.",
117
- schema: "lssm_jobs",
118
- map: "scheduled_job",
119
- fields: {
120
- id: field.id(),
121
- name: field.string({
122
- isUnique: true,
123
- description: "Unique schedule name"
124
- }),
125
- description: field.string({ isOptional: true }),
126
- cronExpression: field.string({ description: "Cron expression for scheduling" }),
127
- timezone: field.string({
128
- default: "\"UTC\"",
129
- description: "Timezone for cron evaluation"
130
- }),
131
- jobType: field.string({ description: "Job type to create" }),
132
- jobVersion: field.int({ default: 1 }),
133
- payload: field.json({
134
- isOptional: true,
135
- description: "Default payload for created jobs"
136
- }),
137
- maxRetries: field.int({ default: 3 }),
138
- timeoutMs: field.int({
139
- isOptional: true,
140
- description: "Job timeout in milliseconds"
141
- }),
142
- enabled: field.boolean({ default: true }),
143
- lastRunAt: field.dateTime({ isOptional: true }),
144
- nextRunAt: field.dateTime({ isOptional: true }),
145
- tenantId: field.string({ isOptional: true }),
146
- createdAt: field.createdAt(),
147
- updatedAt: field.updatedAt(),
148
- jobs: field.hasMany("Job")
149
- },
150
- indexes: [index.on(["enabled", "nextRunAt"])]
101
+ var ScheduledJobEntity = defineEntity({
102
+ name: "ScheduledJob",
103
+ description: "A scheduled/recurring job definition.",
104
+ schema: "lssm_jobs",
105
+ map: "scheduled_job",
106
+ fields: {
107
+ id: field.id(),
108
+ name: field.string({ isUnique: true, description: "Unique schedule name" }),
109
+ description: field.string({ isOptional: true }),
110
+ cronExpression: field.string({
111
+ description: "Cron expression for scheduling"
112
+ }),
113
+ timezone: field.string({
114
+ default: '"UTC"',
115
+ description: "Timezone for cron evaluation"
116
+ }),
117
+ jobType: field.string({ description: "Job type to create" }),
118
+ jobVersion: field.int({ default: 1 }),
119
+ payload: field.json({
120
+ isOptional: true,
121
+ description: "Default payload for created jobs"
122
+ }),
123
+ maxRetries: field.int({ default: 3 }),
124
+ timeoutMs: field.int({
125
+ isOptional: true,
126
+ description: "Job timeout in milliseconds"
127
+ }),
128
+ enabled: field.boolean({ default: true }),
129
+ lastRunAt: field.dateTime({ isOptional: true }),
130
+ nextRunAt: field.dateTime({ isOptional: true }),
131
+ tenantId: field.string({ isOptional: true }),
132
+ createdAt: field.createdAt(),
133
+ updatedAt: field.updatedAt(),
134
+ jobs: field.hasMany("Job")
135
+ },
136
+ indexes: [index.on(["enabled", "nextRunAt"])]
151
137
  });
152
- /**
153
- * JobExecution entity - individual execution attempts.
154
- */
155
- const JobExecutionEntity = defineEntity({
156
- name: "JobExecution",
157
- description: "A single execution attempt of a job.",
158
- schema: "lssm_jobs",
159
- map: "job_execution",
160
- fields: {
161
- id: field.id(),
162
- jobId: field.foreignKey(),
163
- attemptNumber: field.int({ description: "Which attempt this is" }),
164
- startedAt: field.dateTime(),
165
- completedAt: field.dateTime({ isOptional: true }),
166
- durationMs: field.int({ isOptional: true }),
167
- success: field.boolean({ isOptional: true }),
168
- error: field.string({ isOptional: true }),
169
- errorStack: field.string({ isOptional: true }),
170
- result: field.json({ isOptional: true }),
171
- workerId: field.string({
172
- isOptional: true,
173
- description: "ID of worker that processed"
174
- }),
175
- job: field.belongsTo("Job", ["jobId"], ["id"], { onDelete: "Cascade" })
176
- },
177
- indexes: [index.on(["jobId", "attemptNumber"])]
138
+ var JobExecutionEntity = defineEntity({
139
+ name: "JobExecution",
140
+ description: "A single execution attempt of a job.",
141
+ schema: "lssm_jobs",
142
+ map: "job_execution",
143
+ fields: {
144
+ id: field.id(),
145
+ jobId: field.foreignKey(),
146
+ attemptNumber: field.int({ description: "Which attempt this is" }),
147
+ startedAt: field.dateTime(),
148
+ completedAt: field.dateTime({ isOptional: true }),
149
+ durationMs: field.int({ isOptional: true }),
150
+ success: field.boolean({ isOptional: true }),
151
+ error: field.string({ isOptional: true }),
152
+ errorStack: field.string({ isOptional: true }),
153
+ result: field.json({ isOptional: true }),
154
+ workerId: field.string({
155
+ isOptional: true,
156
+ description: "ID of worker that processed"
157
+ }),
158
+ job: field.belongsTo("Job", ["jobId"], ["id"], { onDelete: "Cascade" })
159
+ },
160
+ indexes: [index.on(["jobId", "attemptNumber"])]
178
161
  });
179
- /**
180
- * All job entities for schema composition.
181
- */
182
- const jobEntities = [
183
- JobEntity,
184
- ScheduledJobEntity,
185
- JobExecutionEntity
186
- ];
187
- /**
188
- * Module schema contribution for jobs.
189
- */
190
- const jobsSchemaContribution = {
191
- moduleId: "@contractspec/lib.jobs",
192
- entities: jobEntities,
193
- enums: [JobStatusEnum]
162
+ var jobEntities = [JobEntity, ScheduledJobEntity, JobExecutionEntity];
163
+ var jobsSchemaContribution = {
164
+ moduleId: "@contractspec/lib.jobs",
165
+ entities: jobEntities,
166
+ enums: [JobStatusEnum]
167
+ };
168
+ export {
169
+ jobsSchemaContribution,
170
+ jobEntities,
171
+ ScheduledJobEntity,
172
+ JobStatusEnum,
173
+ JobExecutionEntity,
174
+ JobEntity
194
175
  };
195
-
196
- //#endregion
197
- export { JobEntity, JobExecutionEntity, JobStatusEnum, ScheduledJobEntity, jobEntities, jobsSchemaContribution };
198
- //# sourceMappingURL=index.js.map