glasswork 0.12.2 → 0.13.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 (108) hide show
  1. package/dist/auth/abilities.d.ts +41 -0
  2. package/dist/auth/abilities.d.ts.map +1 -0
  3. package/dist/auth/abilities.js +62 -0
  4. package/dist/auth/abilities.js.map +1 -0
  5. package/dist/auth/assert.d.ts +20 -0
  6. package/dist/auth/assert.d.ts.map +1 -0
  7. package/dist/auth/assert.js +28 -0
  8. package/dist/auth/assert.js.map +1 -0
  9. package/dist/auth/better-auth-provider.d.ts +56 -0
  10. package/dist/auth/better-auth-provider.d.ts.map +1 -0
  11. package/dist/auth/better-auth-provider.js +62 -0
  12. package/dist/auth/better-auth-provider.js.map +1 -0
  13. package/dist/auth/index.d.ts +6 -0
  14. package/dist/auth/index.d.ts.map +1 -0
  15. package/dist/auth/index.js +5 -0
  16. package/dist/auth/index.js.map +1 -0
  17. package/dist/auth/middleware.d.ts +31 -0
  18. package/dist/auth/middleware.d.ts.map +1 -0
  19. package/dist/auth/middleware.js +92 -0
  20. package/dist/auth/middleware.js.map +1 -0
  21. package/dist/auth/types.d.ts +54 -0
  22. package/dist/auth/types.d.ts.map +1 -0
  23. package/dist/auth/types.js +2 -0
  24. package/dist/auth/types.js.map +1 -0
  25. package/dist/core/bootstrap.d.ts.map +1 -1
  26. package/dist/core/bootstrap.js +5 -2
  27. package/dist/core/bootstrap.js.map +1 -1
  28. package/dist/core/types.d.ts +8 -2
  29. package/dist/core/types.d.ts.map +1 -1
  30. package/dist/http/route-helpers.d.ts +52 -9
  31. package/dist/http/route-helpers.d.ts.map +1 -1
  32. package/dist/http/route-helpers.js +90 -40
  33. package/dist/http/route-helpers.js.map +1 -1
  34. package/dist/index.d.ts +8 -2
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +7 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/jobs/define-job.d.ts +34 -2
  39. package/dist/jobs/define-job.d.ts.map +1 -1
  40. package/dist/jobs/define-job.js.map +1 -1
  41. package/dist/jobs/drivers/eventbridge-scheduler-driver.d.ts +75 -0
  42. package/dist/jobs/drivers/eventbridge-scheduler-driver.d.ts.map +1 -0
  43. package/dist/jobs/drivers/eventbridge-scheduler-driver.js +135 -0
  44. package/dist/jobs/drivers/eventbridge-scheduler-driver.js.map +1 -0
  45. package/dist/jobs/drivers/mock-driver.d.ts +45 -10
  46. package/dist/jobs/drivers/mock-driver.d.ts.map +1 -1
  47. package/dist/jobs/drivers/mock-driver.js +36 -17
  48. package/dist/jobs/drivers/mock-driver.js.map +1 -1
  49. package/dist/jobs/drivers/sqs-driver.d.ts +26 -19
  50. package/dist/jobs/drivers/sqs-driver.d.ts.map +1 -1
  51. package/dist/jobs/drivers/sqs-driver.js +54 -69
  52. package/dist/jobs/drivers/sqs-driver.js.map +1 -1
  53. package/dist/jobs/errors.d.ts +8 -4
  54. package/dist/jobs/errors.d.ts.map +1 -1
  55. package/dist/jobs/errors.js +13 -7
  56. package/dist/jobs/errors.js.map +1 -1
  57. package/dist/jobs/index.d.ts +4 -3
  58. package/dist/jobs/index.d.ts.map +1 -1
  59. package/dist/jobs/index.js +3 -2
  60. package/dist/jobs/index.js.map +1 -1
  61. package/dist/jobs/job-registry.d.ts +4 -4
  62. package/dist/jobs/job-registry.d.ts.map +1 -1
  63. package/dist/jobs/job-registry.js.map +1 -1
  64. package/dist/jobs/job-service.js +1 -1
  65. package/dist/jobs/job-service.js.map +1 -1
  66. package/dist/jobs/schedule-constants.d.ts +0 -4
  67. package/dist/jobs/schedule-constants.d.ts.map +1 -1
  68. package/dist/jobs/schedule-constants.js +0 -4
  69. package/dist/jobs/schedule-constants.js.map +1 -1
  70. package/dist/jobs/scheduler.d.ts +1 -1
  71. package/dist/jobs/scheduler.d.ts.map +1 -1
  72. package/dist/jobs/scheduler.js +46 -10
  73. package/dist/jobs/scheduler.js.map +1 -1
  74. package/dist/jobs/types.d.ts +59 -50
  75. package/dist/jobs/types.d.ts.map +1 -1
  76. package/dist/jobs/utils.d.ts +0 -9
  77. package/dist/jobs/utils.d.ts.map +1 -1
  78. package/dist/jobs/utils.js +3 -23
  79. package/dist/jobs/utils.js.map +1 -1
  80. package/dist/jobs/worker.d.ts +2 -3
  81. package/dist/jobs/worker.d.ts.map +1 -1
  82. package/dist/jobs/worker.js +183 -82
  83. package/dist/jobs/worker.js.map +1 -1
  84. package/dist/list-query/casl.d.ts +18 -19
  85. package/dist/list-query/casl.d.ts.map +1 -1
  86. package/dist/list-query/casl.js +40 -46
  87. package/dist/list-query/casl.js.map +1 -1
  88. package/dist/uploads/file-upload.d.ts +44 -0
  89. package/dist/uploads/file-upload.d.ts.map +1 -0
  90. package/dist/uploads/file-upload.js +145 -0
  91. package/dist/uploads/file-upload.js.map +1 -0
  92. package/dist/uploads/index.d.ts +6 -0
  93. package/dist/uploads/index.d.ts.map +1 -0
  94. package/dist/uploads/index.js +7 -0
  95. package/dist/uploads/index.js.map +1 -0
  96. package/dist/uploads/uploads.service.d.ts +98 -0
  97. package/dist/uploads/uploads.service.d.ts.map +1 -0
  98. package/dist/uploads/uploads.service.js +134 -0
  99. package/dist/uploads/uploads.service.js.map +1 -0
  100. package/dist/uploads/validators.d.ts +41 -0
  101. package/dist/uploads/validators.d.ts.map +1 -0
  102. package/dist/uploads/validators.js +94 -0
  103. package/dist/uploads/validators.js.map +1 -0
  104. package/package.json +34 -3
  105. package/dist/email/compiler/code-generator.d.ts +0 -11
  106. package/dist/email/compiler/code-generator.d.ts.map +0 -1
  107. package/dist/email/compiler/code-generator.js +0 -319
  108. package/dist/email/compiler/code-generator.js.map +0 -1
@@ -0,0 +1,75 @@
1
+ import type { EnqueueResult, JobMessage } from '../types.js';
2
+ export interface EventBridgeSchedulerConfig {
3
+ /** AWS region */
4
+ region: string;
5
+ /** IAM role ARN that EventBridge Scheduler assumes to send messages to SQS */
6
+ roleArn: string;
7
+ /** Optional schedule group name for organization (default: 'default') */
8
+ scheduleGroupName?: string;
9
+ /** Custom endpoint (for LocalStack) */
10
+ endpoint?: string;
11
+ }
12
+ export interface ScheduledJobConfig {
13
+ /** Target SQS queue URL */
14
+ queueUrl: string;
15
+ /** Job message */
16
+ message: JobMessage;
17
+ /** When to run the job */
18
+ scheduledAt: Date;
19
+ }
20
+ /**
21
+ * Result of scheduling a job with EventBridge Scheduler.
22
+ */
23
+ export interface ScheduleResult extends EnqueueResult {
24
+ /** EventBridge Scheduler schedule ARN */
25
+ scheduleArn: string;
26
+ /** Schedule name (can be used for cancellation) */
27
+ scheduleName: string;
28
+ }
29
+ /**
30
+ * EventBridge Scheduler driver for scheduling jobs with delays longer than 15 minutes.
31
+ *
32
+ * Uses one-off schedules with `at()` expressions that target an SQS queue.
33
+ * Schedules are automatically deleted after execution.
34
+ */
35
+ export declare class EventBridgeSchedulerDriver {
36
+ private readonly config;
37
+ private client;
38
+ constructor(config: EventBridgeSchedulerConfig);
39
+ /**
40
+ * Lazily initialize the Scheduler client.
41
+ */
42
+ private getClient;
43
+ /**
44
+ * Schedule a job to be executed at a specific time.
45
+ *
46
+ * Creates a one-off EventBridge Scheduler schedule that sends a message
47
+ * to the specified SQS queue at the scheduled time.
48
+ *
49
+ * @param config - The scheduled job configuration
50
+ * @returns Schedule result with ARN and name
51
+ */
52
+ scheduleAt(config: ScheduledJobConfig): Promise<ScheduleResult>;
53
+ /**
54
+ * Cancel a scheduled job.
55
+ *
56
+ * @param scheduleName - The name of the schedule to cancel
57
+ */
58
+ cancel(scheduleName: string): Promise<void>;
59
+ /**
60
+ * Dispose of the driver and release AWS SDK client resources.
61
+ * Call this when you're done using the driver to prevent memory leaks.
62
+ */
63
+ dispose(): Promise<void>;
64
+ /**
65
+ * Convert an SQS queue URL to its ARN.
66
+ *
67
+ * Supports both standard AWS and LocalStack URL formats:
68
+ * - AWS: https://sqs.{region}.amazonaws.com/{accountId}/{queueName}
69
+ * - LocalStack: http://localhost:4566/{accountId}/{queueName}
70
+ *
71
+ * ARN format: arn:aws:sqs:{region}:{accountId}:{queueName}
72
+ */
73
+ private sqsArnFromUrl;
74
+ }
75
+ //# sourceMappingURL=eventbridge-scheduler-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventbridge-scheduler-driver.d.ts","sourceRoot":"","sources":["../../../src/jobs/drivers/eventbridge-scheduler-driver.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAO7D,MAAM,WAAW,0BAA0B;IACzC,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,OAAO,EAAE,UAAU,CAAC;IACpB,0BAA0B;IAC1B,WAAW,EAAE,IAAI,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,0BAA0B;IAGzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,MAAM,CAAgC;gBAEjB,MAAM,EAAE,0BAA0B;IAE/D;;OAEG;YACW,SAAS;IAWvB;;;;;;;;OAQG;IACG,UAAU,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;IAsDrE;;;;OAIG;IACG,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjD;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;CAwBtB"}
@@ -0,0 +1,135 @@
1
+ import { generateJobId } from '../utils.js';
2
+ /**
3
+ * EventBridge Scheduler driver for scheduling jobs with delays longer than 15 minutes.
4
+ *
5
+ * Uses one-off schedules with `at()` expressions that target an SQS queue.
6
+ * Schedules are automatically deleted after execution.
7
+ */
8
+ export class EventBridgeSchedulerDriver {
9
+ config;
10
+ client = null;
11
+ constructor(config) {
12
+ this.config = config;
13
+ }
14
+ /**
15
+ * Lazily initialize the Scheduler client.
16
+ */
17
+ async getClient() {
18
+ if (!this.client) {
19
+ const { SchedulerClient } = await import('@aws-sdk/client-scheduler');
20
+ this.client = new SchedulerClient({
21
+ region: this.config.region,
22
+ ...(this.config.endpoint && { endpoint: this.config.endpoint }),
23
+ });
24
+ }
25
+ return this.client;
26
+ }
27
+ /**
28
+ * Schedule a job to be executed at a specific time.
29
+ *
30
+ * Creates a one-off EventBridge Scheduler schedule that sends a message
31
+ * to the specified SQS queue at the scheduled time.
32
+ *
33
+ * @param config - The scheduled job configuration
34
+ * @returns Schedule result with ARN and name
35
+ */
36
+ async scheduleAt(config) {
37
+ const client = await this.getClient();
38
+ const { CreateScheduleCommand } = await import('@aws-sdk/client-scheduler');
39
+ const jobId = config.message.jobId ?? generateJobId();
40
+ const scheduleName = `glasswork-${jobId}`;
41
+ // Format: at(yyyy-mm-ddThh:mm:ss)
42
+ const scheduleExpression = `at(${config.scheduledAt.toISOString().slice(0, 19)})`;
43
+ // Build the SQS message payload
44
+ const messageBody = JSON.stringify({
45
+ jobName: config.message.jobName,
46
+ payload: config.message.payload,
47
+ jobId,
48
+ metadata: config.message.metadata,
49
+ enqueuedAt: new Date().toISOString(),
50
+ });
51
+ const command = new CreateScheduleCommand({
52
+ Name: scheduleName,
53
+ GroupName: this.config.scheduleGroupName ?? 'default',
54
+ ScheduleExpression: scheduleExpression,
55
+ ScheduleExpressionTimezone: 'UTC',
56
+ FlexibleTimeWindow: {
57
+ Mode: 'OFF',
58
+ },
59
+ Target: {
60
+ Arn: this.sqsArnFromUrl(config.queueUrl),
61
+ RoleArn: this.config.roleArn,
62
+ Input: messageBody,
63
+ SqsParameters: {
64
+ MessageGroupId: config.message.queue ?? config.message.jobName,
65
+ },
66
+ },
67
+ // Auto-delete the schedule after it runs
68
+ ActionAfterCompletion: 'DELETE',
69
+ });
70
+ const result = await client.send(command);
71
+ const scheduleArn = result.ScheduleArn;
72
+ if (!scheduleArn) {
73
+ throw new Error('EventBridge Scheduler did not return a schedule ARN');
74
+ }
75
+ return {
76
+ messageId: jobId,
77
+ jobId,
78
+ scheduleArn,
79
+ scheduleName,
80
+ };
81
+ }
82
+ /**
83
+ * Cancel a scheduled job.
84
+ *
85
+ * @param scheduleName - The name of the schedule to cancel
86
+ */
87
+ async cancel(scheduleName) {
88
+ const client = await this.getClient();
89
+ const { DeleteScheduleCommand } = await import('@aws-sdk/client-scheduler');
90
+ const command = new DeleteScheduleCommand({
91
+ Name: scheduleName,
92
+ GroupName: this.config.scheduleGroupName ?? 'default',
93
+ });
94
+ await client.send(command);
95
+ }
96
+ /**
97
+ * Dispose of the driver and release AWS SDK client resources.
98
+ * Call this when you're done using the driver to prevent memory leaks.
99
+ */
100
+ async dispose() {
101
+ if (this.client) {
102
+ this.client.destroy();
103
+ this.client = null;
104
+ }
105
+ }
106
+ /**
107
+ * Convert an SQS queue URL to its ARN.
108
+ *
109
+ * Supports both standard AWS and LocalStack URL formats:
110
+ * - AWS: https://sqs.{region}.amazonaws.com/{accountId}/{queueName}
111
+ * - LocalStack: http://localhost:4566/{accountId}/{queueName}
112
+ *
113
+ * ARN format: arn:aws:sqs:{region}:{accountId}:{queueName}
114
+ */
115
+ sqsArnFromUrl(queueUrl) {
116
+ const url = new URL(queueUrl);
117
+ const pathParts = url.pathname.split('/').filter(Boolean);
118
+ if (pathParts.length < 2) {
119
+ throw new Error(`Invalid SQS queue URL format: ${queueUrl}`);
120
+ }
121
+ const accountId = pathParts[0];
122
+ const queueName = pathParts[1];
123
+ // Determine region from URL or fall back to configured region
124
+ // Standard AWS format: sqs.{region}.amazonaws.com
125
+ // LocalStack format: localhost:4566 (no region in hostname)
126
+ let region = this.config.region;
127
+ const hostParts = url.hostname.split('.');
128
+ const isAwsUrl = url.hostname.includes('amazonaws.com');
129
+ if (isAwsUrl && hostParts.length >= 2 && hostParts[0] === 'sqs') {
130
+ region = hostParts[1];
131
+ }
132
+ return `arn:aws:sqs:${region}:${accountId}:${queueName}`;
133
+ }
134
+ }
135
+ //# sourceMappingURL=eventbridge-scheduler-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventbridge-scheduler-driver.js","sourceRoot":"","sources":["../../../src/jobs/drivers/eventbridge-scheduler-driver.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { Duration, EnqueueResult, JobMessage, QueueDriver, ReceivedJob, ReceiveOptions } from '../types.js';
1
+ import type { JobRegistry } from '../job-registry.js';
2
+ import type { Duration, EnqueueResult, JobMessage, QueueDriver } from '../types.js';
2
3
  export interface MockEnqueuedJob {
3
4
  message: JobMessage & {
4
5
  jobId: string;
@@ -7,18 +8,55 @@ export interface MockEnqueuedJob {
7
8
  delay?: Duration;
8
9
  }
9
10
  /**
10
- * In-memory queue driver for testing.
11
+ * Configuration for MockQueueDriver.
12
+ */
13
+ export interface MockQueueDriverConfig {
14
+ /**
15
+ * Execute jobs synchronously when enqueued.
16
+ * Useful for local development to test job handlers immediately.
17
+ * @default false
18
+ */
19
+ executeImmediately?: boolean;
20
+ /**
21
+ * Job registry for looking up job definitions.
22
+ * Required when executeImmediately is true.
23
+ */
24
+ registry?: JobRegistry;
25
+ /**
26
+ * Resolver to get DI services for job execution.
27
+ * Called when a job is executed, returning the services container.
28
+ * Required when executeImmediately is true.
29
+ */
30
+ serviceResolver?: () => Record<string, unknown>;
31
+ }
32
+ /**
33
+ * In-memory queue driver for testing and local development.
34
+ *
35
+ * @example Testing mode (default)
36
+ * ```typescript
37
+ * const driver = new MockQueueDriver();
38
+ * await jobService.enqueue(myJob, payload);
39
+ * expect(driver.enqueued).toHaveLength(1);
40
+ * ```
41
+ *
42
+ * @example Development mode with immediate execution
43
+ * ```typescript
44
+ * const driver = new MockQueueDriver({
45
+ * executeImmediately: true,
46
+ * registry: createJobRegistry([myJob]),
47
+ * serviceResolver: () => diContainer,
48
+ * });
49
+ * ```
11
50
  */
12
51
  export declare class MockQueueDriver implements QueueDriver {
13
52
  readonly name = "mock";
14
53
  private counter;
15
54
  private failNext?;
55
+ private readonly executeImmediately;
56
+ private readonly registry?;
57
+ private readonly serviceResolver?;
16
58
  readonly enqueued: MockEnqueuedJob[];
17
- readonly acks: ReceivedJob[];
18
- readonly nacks: Array<{
19
- job: ReceivedJob;
20
- error?: Error;
21
- }>;
59
+ constructor(config?: MockQueueDriverConfig);
22
60
  /**
23
61
  * Simulate the next enqueue call failing.
24
62
  */
@@ -31,8 +69,5 @@ export declare class MockQueueDriver implements QueueDriver {
31
69
  enqueue(message: JobMessage): Promise<EnqueueResult>;
32
70
  enqueueAt(message: JobMessage, at: Date): Promise<EnqueueResult>;
33
71
  enqueueIn(message: JobMessage, delay: Duration): Promise<EnqueueResult>;
34
- receive(_options?: ReceiveOptions): Promise<ReceivedJob[]>;
35
- ack(job: ReceivedJob): Promise<void>;
36
- nack(job: ReceivedJob, error?: Error): Promise<void>;
37
72
  }
38
73
  //# sourceMappingURL=mock-driver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock-driver.d.ts","sourceRoot":"","sources":["../../../src/jobs/drivers/mock-driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,UAAU,EACV,WAAW,EACX,WAAW,EACX,cAAc,EACf,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,EAAE,CAAC,EAAE,IAAI,CAAC;IACV,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,QAAQ,CAAC,IAAI,UAAU;IACvB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAC,CAAQ;IACzB,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAM;IAC1C,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,CAAM;IAClC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,WAAW,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC,CAAM;IAEhE;;OAEG;IACH,eAAe,CAAC,KAAK,QAAoC,GAAG,IAAI;IAIhE;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb,IAAI,OAAO,IAAI,eAAe,GAAG,SAAS,CAEzC;IAEK,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAoBpD,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IAShE,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;IASvE,OAAO,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAO1D,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3D"}
1
+ {"version":3,"file":"mock-driver.d.ts","sourceRoot":"","sources":["../../../src/jobs/drivers/mock-driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAc,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGhG,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,EAAE,CAAC,EAAE,IAAI,CAAC;IACV,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAC;IAEvB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,QAAQ,CAAC,IAAI,UAAU;IACvB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAC,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAgC;IACjE,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAM;gBAE9B,MAAM,GAAE,qBAA0B;IAM9C;;OAEG;IACH,eAAe,CAAC,KAAK,QAAoC,GAAG,IAAI;IAIhE;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb,IAAI,OAAO,IAAI,eAAe,GAAG,SAAS,CAEzC;IAEK,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAgCpD,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IAShE,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;CAQ9E"}
@@ -1,14 +1,36 @@
1
1
  import { generateJobId } from '../utils.js';
2
2
  /**
3
- * In-memory queue driver for testing.
3
+ * In-memory queue driver for testing and local development.
4
+ *
5
+ * @example Testing mode (default)
6
+ * ```typescript
7
+ * const driver = new MockQueueDriver();
8
+ * await jobService.enqueue(myJob, payload);
9
+ * expect(driver.enqueued).toHaveLength(1);
10
+ * ```
11
+ *
12
+ * @example Development mode with immediate execution
13
+ * ```typescript
14
+ * const driver = new MockQueueDriver({
15
+ * executeImmediately: true,
16
+ * registry: createJobRegistry([myJob]),
17
+ * serviceResolver: () => diContainer,
18
+ * });
19
+ * ```
4
20
  */
5
21
  export class MockQueueDriver {
6
22
  name = 'mock';
7
23
  counter = 0;
8
24
  failNext;
25
+ executeImmediately;
26
+ registry;
27
+ serviceResolver;
9
28
  enqueued = [];
10
- acks = [];
11
- nacks = [];
29
+ constructor(config = {}) {
30
+ this.executeImmediately = config.executeImmediately ?? false;
31
+ this.registry = config.registry;
32
+ this.serviceResolver = config.serviceResolver;
33
+ }
12
34
  /**
13
35
  * Simulate the next enqueue call failing.
14
36
  */
@@ -20,8 +42,6 @@ export class MockQueueDriver {
20
42
  */
21
43
  clear() {
22
44
  this.enqueued.length = 0;
23
- this.acks.length = 0;
24
- this.nacks.length = 0;
25
45
  this.counter = 0;
26
46
  this.failNext = undefined;
27
47
  }
@@ -42,6 +62,17 @@ export class MockQueueDriver {
42
62
  this.enqueued.push({
43
63
  message: { ...message, jobId },
44
64
  });
65
+ // Execute immediately if configured
66
+ if (this.executeImmediately && this.registry && this.serviceResolver) {
67
+ const job = this.registry.getOrThrow(message.jobName);
68
+ const context = {
69
+ services: this.serviceResolver(),
70
+ jobId,
71
+ attemptNumber: 1,
72
+ enqueuedAt: new Date(),
73
+ };
74
+ await job.handler(message.payload, context);
75
+ }
45
76
  return result;
46
77
  }
47
78
  async enqueueAt(message, at) {
@@ -60,17 +91,5 @@ export class MockQueueDriver {
60
91
  }
61
92
  return result;
62
93
  }
63
- async receive(_options) {
64
- return this.enqueued.map(({ message }) => ({
65
- message,
66
- receiptHandle: message.jobId,
67
- }));
68
- }
69
- async ack(job) {
70
- this.acks.push(job);
71
- }
72
- async nack(job, error) {
73
- this.nacks.push({ job, error });
74
- }
75
94
  }
76
95
  //# sourceMappingURL=mock-driver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock-driver.js","sourceRoot":"","sources":["../../../src/jobs/drivers/mock-driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock-driver.js","sourceRoot":"","sources":["../../../src/jobs/drivers/mock-driver.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { SQSClient as SQSClientType } from '@aws-sdk/client-sqs';
2
- import type { Duration, EnqueueResult, JobMessage, QueueDriver, ReceivedJob, ReceiveOptions } from '../types.js';
2
+ import type { Duration, EnqueueResult, JobMessage, QueueDriver } from '../types.js';
3
+ import { type EventBridgeSchedulerConfig } from './eventbridge-scheduler-driver.js';
3
4
  export interface SQSDriverConfig {
4
5
  /** AWS region */
5
6
  region: string;
@@ -10,43 +11,49 @@ export interface SQSDriverConfig {
10
11
  /** Custom endpoint (for LocalStack) */
11
12
  endpoint?: string;
12
13
  /**
13
- * DynamoDB table for scheduled jobs (used when longDelayStrategy is "dynamodb").
14
- * Not required when using the default self-rescheduling strategy.
14
+ * EventBridge Scheduler configuration for delays over 15 minutes.
15
+ * Required when using enqueueAt or enqueueIn with delays exceeding SQS maximum.
15
16
  */
16
- schedulerTable?: string;
17
- /**
18
- * Strategy for delays over 15 minutes (SQS maximum).
19
- * - "self-reschedule" (default): the job re-enqueues itself in 15-minute slices until due.
20
- * - "dynamodb": store in DynamoDB and poll via the scheduler Lambda.
21
- */
22
- longDelayStrategy?: 'self-reschedule' | 'dynamodb';
17
+ scheduler?: EventBridgeSchedulerConfig;
23
18
  /** Optional pre-configured SQS client */
24
19
  client?: SQSClientType;
25
20
  }
26
21
  /**
27
- * AWS SQS queue driver (Phase 1: enqueue only).
22
+ * AWS SQS queue driver with EventBridge Scheduler support for long delays.
23
+ *
24
+ * For delays up to 15 minutes, uses native SQS delay.
25
+ * For delays over 15 minutes, uses EventBridge Scheduler to create a one-off
26
+ * schedule that sends the job to SQS at the specified time.
28
27
  */
29
28
  export declare class SQSQueueDriver implements QueueDriver {
30
29
  private readonly config;
31
30
  readonly name = "sqs";
31
+ readonly defaultQueue: string;
32
32
  private client;
33
- private schedulerClientPromise;
33
+ private schedulerDriver;
34
+ private disposed;
34
35
  constructor(config: SQSDriverConfig);
35
36
  /**
36
37
  * Lazily initialize the SQS client.
38
+ * @throws Error if the driver has been disposed
37
39
  */
38
40
  private getClient;
39
41
  enqueue(message: JobMessage): Promise<EnqueueResult>;
40
42
  enqueueAt(message: JobMessage, at: Date): Promise<EnqueueResult>;
41
43
  enqueueIn(message: JobMessage, delay: Duration): Promise<EnqueueResult>;
42
- receive(_options?: ReceiveOptions): Promise<ReceivedJob[]>;
43
- ack(_job: ReceivedJob): Promise<void>;
44
- nack(_job: ReceivedJob): Promise<void>;
44
+ /**
45
+ * Cancel a scheduled job. Only works for jobs scheduled with EventBridge Scheduler.
46
+ *
47
+ * @param scheduleName - The schedule name from the ScheduleResult
48
+ */
49
+ cancelSchedule(scheduleName: string): Promise<void>;
50
+ /**
51
+ * Dispose of the driver and release AWS SDK client resources.
52
+ * Call this when you're done using the driver to prevent memory leaks.
53
+ */
54
+ dispose(): Promise<void>;
45
55
  private getQueueUrl;
46
56
  private enqueueWithDelay;
47
- private scheduleLongDelay;
48
- private scheduleJobWithSelfReschedule;
49
- private scheduleJobWithDynamo;
50
- private getSchedulerClient;
57
+ private scheduleWithEventBridge;
51
58
  }
52
59
  //# sourceMappingURL=sqs-driver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sqs-driver.d.ts","sourceRoot":"","sources":["../../../src/jobs/drivers/sqs-driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,IAAI,aAAa,EAC3B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,UAAU,EACV,WAAW,EACX,WAAW,EACX,cAAc,EACf,MAAM,aAAa,CAAC;AAMrB,MAAM,WAAW,eAAe;IAC9B,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,UAAU,CAAC;IACnD,yCAAyC;IACzC,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,WAAW;IAKpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,QAAQ,CAAC,IAAI,SAAS;IACtB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,sBAAsB,CAAiC;gBAElC,MAAM,EAAE,eAAe;IAMpD;;OAEG;YACW,SAAS;IAWjB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAqCpD,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IAWhE,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;IASvE,OAAO,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAI1D,GAAG,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,OAAO,CAAC,WAAW;YASL,gBAAgB;YAyChB,iBAAiB;YASjB,6BAA6B;YAyB7B,qBAAqB;YAgCrB,kBAAkB;CAqBjC"}
1
+ {"version":3,"file":"sqs-driver.d.ts","sourceRoot":"","sources":["../../../src/jobs/drivers/sqs-driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,IAAI,aAAa,EAC3B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEpF,OAAO,EACL,KAAK,0BAA0B,EAGhC,MAAM,mCAAmC,CAAC;AAK3C,MAAM,WAAW,eAAe;IAC9B,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,0BAA0B,CAAC;IACvC,yCAAyC;IACzC,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED;;;;;;GAMG;AACH,qBAAa,cAAe,YAAW,WAAW;IAOpC,OAAO,CAAC,QAAQ,CAAC,MAAM;IANnC,QAAQ,CAAC,IAAI,SAAS;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,eAAe,CAA2C;IAClE,OAAO,CAAC,QAAQ,CAAS;gBAEI,MAAM,EAAE,eAAe;IAUpD;;;OAGG;YACW,SAAS;IAcjB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;IAqCpD,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IAWhE,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;IAS7E;;;;OAIG;IACG,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzD;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAW9B,OAAO,CAAC,WAAW;YASL,gBAAgB;YAyChB,uBAAuB;CAgBtC"}