glasswork 0.12.1 → 0.12.2

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 (66) hide show
  1. package/dist/core/types.d.ts +6 -1
  2. package/dist/core/types.d.ts.map +1 -1
  3. package/dist/email/compiler/code-generator.d.ts +11 -0
  4. package/dist/email/compiler/code-generator.d.ts.map +1 -0
  5. package/dist/email/compiler/code-generator.js +319 -0
  6. package/dist/email/compiler/code-generator.js.map +1 -0
  7. package/dist/http/route-helpers.d.ts +4 -9
  8. package/dist/http/route-helpers.d.ts.map +1 -1
  9. package/dist/http/route-helpers.js +1 -0
  10. package/dist/http/route-helpers.js.map +1 -1
  11. package/dist/index.d.ts +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/jobs/define-job.d.ts +25 -0
  15. package/dist/jobs/define-job.d.ts.map +1 -0
  16. package/dist/jobs/define-job.js +12 -0
  17. package/dist/jobs/define-job.js.map +1 -0
  18. package/dist/jobs/drivers/mock-driver.d.ts +38 -0
  19. package/dist/jobs/drivers/mock-driver.d.ts.map +1 -0
  20. package/dist/jobs/drivers/mock-driver.js +76 -0
  21. package/dist/jobs/drivers/mock-driver.js.map +1 -0
  22. package/dist/jobs/drivers/sqs-driver.d.ts +52 -0
  23. package/dist/jobs/drivers/sqs-driver.d.ts.map +1 -0
  24. package/dist/jobs/drivers/sqs-driver.js +191 -0
  25. package/dist/jobs/drivers/sqs-driver.js.map +1 -0
  26. package/dist/jobs/errors.d.ts +40 -0
  27. package/dist/jobs/errors.d.ts.map +1 -0
  28. package/dist/jobs/errors.js +61 -0
  29. package/dist/jobs/errors.js.map +1 -0
  30. package/dist/jobs/index.d.ts +11 -0
  31. package/dist/jobs/index.d.ts.map +1 -0
  32. package/dist/jobs/index.js +10 -0
  33. package/dist/jobs/index.js.map +1 -0
  34. package/dist/jobs/job-registry.d.ts +33 -0
  35. package/dist/jobs/job-registry.d.ts.map +1 -0
  36. package/dist/jobs/job-registry.js +56 -0
  37. package/dist/jobs/job-registry.js.map +1 -0
  38. package/dist/jobs/job-service.d.ts +44 -0
  39. package/dist/jobs/job-service.d.ts.map +1 -0
  40. package/dist/jobs/job-service.js +105 -0
  41. package/dist/jobs/job-service.js.map +1 -0
  42. package/dist/jobs/periodic-job.d.ts +6 -0
  43. package/dist/jobs/periodic-job.d.ts.map +1 -0
  44. package/dist/jobs/periodic-job.js +11 -0
  45. package/dist/jobs/periodic-job.js.map +1 -0
  46. package/dist/jobs/schedule-constants.d.ts +9 -0
  47. package/dist/jobs/schedule-constants.d.ts.map +1 -0
  48. package/dist/jobs/schedule-constants.js +9 -0
  49. package/dist/jobs/schedule-constants.js.map +1 -0
  50. package/dist/jobs/scheduler.d.ts +17 -0
  51. package/dist/jobs/scheduler.d.ts.map +1 -0
  52. package/dist/jobs/scheduler.js +47 -0
  53. package/dist/jobs/scheduler.js.map +1 -0
  54. package/dist/jobs/types.d.ts +156 -0
  55. package/dist/jobs/types.d.ts.map +1 -0
  56. package/dist/jobs/types.js +2 -0
  57. package/dist/jobs/types.js.map +1 -0
  58. package/dist/jobs/utils.d.ts +24 -0
  59. package/dist/jobs/utils.d.ts.map +1 -0
  60. package/dist/jobs/utils.js +69 -0
  61. package/dist/jobs/utils.js.map +1 -0
  62. package/dist/jobs/worker.d.ts +36 -0
  63. package/dist/jobs/worker.d.ts.map +1 -0
  64. package/dist/jobs/worker.js +260 -0
  65. package/dist/jobs/worker.js.map +1 -0
  66. package/package.json +2 -2
@@ -0,0 +1,260 @@
1
+ import { asValue, createContainer, InjectionMode } from 'awilix';
2
+ import { safeParse } from 'valibot';
3
+ import { collectModules, registerModuleProviders, validateNoCycles } from '../core/bootstrap.js';
4
+ import { createLogger } from '../utils/logger.js';
5
+ import { InvalidJobPayloadError, PermanentJobError, TransientJobError } from './errors.js';
6
+ import { createJobRegistry } from './job-registry.js';
7
+ import { MAX_SQS_DELAY_SECONDS, RUN_AT_METADATA_KEY } from './schedule-constants.js';
8
+ /**
9
+ * Bootstrap a worker Lambda handler for processing jobs.
10
+ */
11
+ export function bootstrapWorker(config) {
12
+ const logger = config.logger ?? createLogger('JobsWorker');
13
+ const statePromise = buildWorkerState(config.module, logger);
14
+ return async (event, _ctx) => {
15
+ const { container, registry } = await statePromise;
16
+ if (isSQSEvent(event)) {
17
+ const batchItemFailures = [];
18
+ for (const record of event.Records) {
19
+ try {
20
+ await processRecord(record, {
21
+ registry,
22
+ moduleContainer: container,
23
+ hooks: config.hooks,
24
+ logger,
25
+ driver: config.driver,
26
+ });
27
+ }
28
+ catch (_error) {
29
+ batchItemFailures.push({ itemIdentifier: record.messageId });
30
+ }
31
+ }
32
+ return { batchItemFailures };
33
+ }
34
+ // Non-SQS invocation (e.g., EventBridge periodic jobs)
35
+ const jobName = extractJobName(event);
36
+ const payload = extractPayload(event);
37
+ if (!jobName) {
38
+ throw new Error('Job name is required for non-SQS invocation');
39
+ }
40
+ await executeJob({
41
+ jobName,
42
+ jobId: 'event',
43
+ payload,
44
+ attemptNumber: 1,
45
+ enqueuedAt: new Date(),
46
+ }, { registry, moduleContainer: container, hooks: config.hooks, logger, driver: config.driver });
47
+ return { success: true };
48
+ };
49
+ }
50
+ async function resolveAsyncFactories(container, names, logger) {
51
+ const resolutions = names.map(async (name) => {
52
+ const resolved = container.resolve(name);
53
+ const value = resolved instanceof Promise ? await resolved : resolved;
54
+ container.register({ [name]: asValue(value) });
55
+ });
56
+ await Promise.all(resolutions).catch((error) => {
57
+ logger.error('Failed to resolve async providers', { error });
58
+ throw error;
59
+ });
60
+ }
61
+ async function buildWorkerState(module, logger) {
62
+ const container = createContainer({
63
+ injectionMode: InjectionMode.PROXY,
64
+ strict: true,
65
+ });
66
+ const allModules = collectModules(module);
67
+ validateNoCycles(allModules);
68
+ // Register providers
69
+ const asyncFactories = [];
70
+ for (const mod of allModules) {
71
+ const names = registerModuleProviders(mod, container, logger);
72
+ asyncFactories.push(...names);
73
+ }
74
+ // Resolve async factories before processing jobs
75
+ if (asyncFactories.length > 0) {
76
+ await resolveAsyncFactories(container, asyncFactories, logger);
77
+ }
78
+ const registry = buildJobRegistry(allModules);
79
+ return { container, registry };
80
+ }
81
+ function buildJobRegistry(modules) {
82
+ const registry = createJobRegistry();
83
+ for (const mod of modules) {
84
+ if (mod.jobs) {
85
+ for (const job of mod.jobs) {
86
+ registry.register(job);
87
+ }
88
+ }
89
+ }
90
+ return registry;
91
+ }
92
+ async function processRecord(record, context) {
93
+ let parsed;
94
+ try {
95
+ parsed = JSON.parse(record.body);
96
+ }
97
+ catch (error) {
98
+ context.logger.error('Failed to parse job message body', {
99
+ error,
100
+ messageId: record.messageId,
101
+ });
102
+ throw error;
103
+ }
104
+ if (!parsed || typeof parsed !== 'object') {
105
+ throw new Error('Invalid job message payload');
106
+ }
107
+ const parsedMessage = parsed;
108
+ const jobName = parsedMessage.jobName;
109
+ const payload = parsedMessage.payload;
110
+ const jobId = parsedMessage.jobId ?? record.messageId;
111
+ const enqueuedAt = parsedMessage.enqueuedAt ? new Date(parsedMessage.enqueuedAt) : new Date();
112
+ const metadata = parsedMessage.metadata;
113
+ if (!jobName) {
114
+ throw new Error('Job name is required');
115
+ }
116
+ const attemptNumber = record.attributes?.ApproximateReceiveCount
117
+ ? Number.parseInt(record.attributes.ApproximateReceiveCount, 10)
118
+ : 1;
119
+ const execution = {
120
+ jobId,
121
+ jobName,
122
+ payload,
123
+ attemptNumber,
124
+ enqueuedAt,
125
+ metadata,
126
+ };
127
+ await executeJob(execution, context);
128
+ }
129
+ async function executeJob(execution, context) {
130
+ const job = context.registry.getOrThrow(execution.jobName);
131
+ if (await rescheduleIfNotDue(execution, job, context)) {
132
+ return;
133
+ }
134
+ const scope = context.moduleContainer.createScope();
135
+ const services = scope.cradle;
136
+ let jobLogger = context.logger;
137
+ if (context.moduleContainer.hasRegistration('logger')) {
138
+ const baseLogger = context.moduleContainer.resolve('logger');
139
+ jobLogger = baseLogger?.child
140
+ ? baseLogger.child({ jobId: execution.jobId, jobName: execution.jobName })
141
+ : baseLogger;
142
+ }
143
+ const jobContext = {
144
+ services,
145
+ jobId: execution.jobId,
146
+ attemptNumber: execution.attemptNumber,
147
+ enqueuedAt: execution.enqueuedAt,
148
+ logger: jobLogger,
149
+ };
150
+ try {
151
+ await context.hooks?.onJobStart?.(execution, jobContext);
152
+ if (job.schema) {
153
+ const result = safeParse(job.schema, execution.payload);
154
+ if (!result.success) {
155
+ throw new InvalidJobPayloadError(job.name, result.issues);
156
+ }
157
+ }
158
+ await job.handler(execution.payload, jobContext);
159
+ await context.hooks?.onJobComplete?.(execution, jobContext);
160
+ }
161
+ catch (error) {
162
+ const err = error;
163
+ await context.hooks?.onJobFailed?.(execution, jobContext, err);
164
+ if (err instanceof PermanentJobError) {
165
+ jobLogger?.error('Job permanently failed', { err });
166
+ await context.hooks?.onJobDeadLetter?.(execution, jobContext, err);
167
+ return;
168
+ }
169
+ if (err instanceof InvalidJobPayloadError) {
170
+ jobLogger?.warn('Invalid job payload, retrying until DLQ', {
171
+ err,
172
+ jobName: execution.jobName,
173
+ jobId: execution.jobId,
174
+ attemptNumber: execution.attemptNumber,
175
+ });
176
+ throw err;
177
+ }
178
+ if (err instanceof TransientJobError) {
179
+ jobLogger?.warn('Job transient failure, retrying', { err, retryAfter: err.retryAfter });
180
+ }
181
+ throw err;
182
+ }
183
+ finally {
184
+ await scope.dispose();
185
+ }
186
+ }
187
+ async function rescheduleIfNotDue(execution, job, context) {
188
+ const runAtValue = execution.metadata?.[RUN_AT_METADATA_KEY];
189
+ if (!runAtValue) {
190
+ return false;
191
+ }
192
+ const runAt = new Date(runAtValue);
193
+ if (Number.isNaN(runAt.getTime())) {
194
+ context.logger.warn('Ignoring invalid runAt metadata; executing immediately', {
195
+ jobName: execution.jobName,
196
+ jobId: execution.jobId,
197
+ runAt: runAtValue,
198
+ });
199
+ return false;
200
+ }
201
+ const remainingMs = runAt.getTime() - Date.now();
202
+ if (remainingMs <= 1000) {
203
+ return false;
204
+ }
205
+ const driver = context.driver;
206
+ if (!driver || (!driver.enqueueIn && !driver.enqueueAt)) {
207
+ context.logger.warn('Job scheduled in future but worker has no driver; executing now', {
208
+ jobName: execution.jobName,
209
+ jobId: execution.jobId,
210
+ runAt: runAtValue,
211
+ });
212
+ return false;
213
+ }
214
+ const delaySeconds = Math.min(MAX_SQS_DELAY_SECONDS, Math.max(1, Math.floor(remainingMs / 1000)));
215
+ const message = {
216
+ jobName: job.name,
217
+ payload: execution.payload,
218
+ queue: job.queue,
219
+ jobId: execution.jobId,
220
+ metadata: {
221
+ ...execution.metadata,
222
+ [RUN_AT_METADATA_KEY]: runAtValue,
223
+ },
224
+ };
225
+ if (driver.enqueueIn) {
226
+ await driver.enqueueIn(message, delaySeconds);
227
+ }
228
+ else if (driver.enqueueAt) {
229
+ await driver.enqueueAt(message, runAt);
230
+ }
231
+ context.logger.info('Deferred job that is not due yet', {
232
+ jobName: execution.jobName,
233
+ jobId: execution.jobId,
234
+ runAt: runAtValue,
235
+ delaySeconds,
236
+ });
237
+ return true;
238
+ }
239
+ function isSQSEvent(event) {
240
+ return Boolean(event?.Records);
241
+ }
242
+ function extractJobName(event) {
243
+ if (typeof event.jobName === 'string')
244
+ return event.jobName;
245
+ const detail = event.detail;
246
+ if (detail && typeof detail.jobName === 'string')
247
+ return detail.jobName;
248
+ if (detail && typeof detail.name === 'string')
249
+ return detail.name;
250
+ return undefined;
251
+ }
252
+ function extractPayload(event) {
253
+ if ('payload' in event)
254
+ return event.payload;
255
+ const detail = event.detail;
256
+ if (detail && 'payload' in detail)
257
+ return detail.payload;
258
+ return undefined;
259
+ }
260
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/jobs/worker.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "glasswork",
3
- "version": "0.12.1",
3
+ "version": "0.12.2",
4
4
  "description": "A transparent, Lambda-optimized web framework for building OpenAPI-compliant REST APIs.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -120,7 +120,7 @@
120
120
  "@vitest/coverage-v8": "^4.0.15",
121
121
  "awilix": "^12.0.5",
122
122
  "dotenv": "^17.2.3",
123
- "hono": "^4.10.8",
123
+ "hono": "^4.11.0",
124
124
  "hono-openapi": "^1.1.2",
125
125
  "html-to-text": "^9.0.5",
126
126
  "mermaid": "^11.12.2",