glasswork 0.12.2 → 0.13.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.
- package/dist/auth/abilities.d.ts +41 -0
- package/dist/auth/abilities.d.ts.map +1 -0
- package/dist/auth/abilities.js +62 -0
- package/dist/auth/abilities.js.map +1 -0
- package/dist/auth/assert.d.ts +20 -0
- package/dist/auth/assert.d.ts.map +1 -0
- package/dist/auth/assert.js +28 -0
- package/dist/auth/assert.js.map +1 -0
- package/dist/auth/better-auth-provider.d.ts +56 -0
- package/dist/auth/better-auth-provider.d.ts.map +1 -0
- package/dist/auth/better-auth-provider.js +62 -0
- package/dist/auth/better-auth-provider.js.map +1 -0
- package/dist/auth/index.d.ts +6 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +5 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +31 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +92 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/types.d.ts +54 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/core/bootstrap.d.ts.map +1 -1
- package/dist/core/bootstrap.js +5 -2
- package/dist/core/bootstrap.js.map +1 -1
- package/dist/core/types.d.ts +8 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/http/route-helpers.d.ts +43 -0
- package/dist/http/route-helpers.d.ts.map +1 -1
- package/dist/http/route-helpers.js +90 -40
- package/dist/http/route-helpers.js.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/jobs/define-job.d.ts +34 -2
- package/dist/jobs/define-job.d.ts.map +1 -1
- package/dist/jobs/define-job.js.map +1 -1
- package/dist/jobs/drivers/eventbridge-scheduler-driver.d.ts +75 -0
- package/dist/jobs/drivers/eventbridge-scheduler-driver.d.ts.map +1 -0
- package/dist/jobs/drivers/eventbridge-scheduler-driver.js +135 -0
- package/dist/jobs/drivers/eventbridge-scheduler-driver.js.map +1 -0
- package/dist/jobs/drivers/mock-driver.d.ts +45 -10
- package/dist/jobs/drivers/mock-driver.d.ts.map +1 -1
- package/dist/jobs/drivers/mock-driver.js +36 -17
- package/dist/jobs/drivers/mock-driver.js.map +1 -1
- package/dist/jobs/drivers/sqs-driver.d.ts +26 -19
- package/dist/jobs/drivers/sqs-driver.d.ts.map +1 -1
- package/dist/jobs/drivers/sqs-driver.js +54 -69
- package/dist/jobs/drivers/sqs-driver.js.map +1 -1
- package/dist/jobs/errors.d.ts +8 -4
- package/dist/jobs/errors.d.ts.map +1 -1
- package/dist/jobs/errors.js +13 -7
- package/dist/jobs/errors.js.map +1 -1
- package/dist/jobs/index.d.ts +4 -3
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js +3 -2
- package/dist/jobs/index.js.map +1 -1
- package/dist/jobs/job-registry.d.ts +4 -4
- package/dist/jobs/job-registry.d.ts.map +1 -1
- package/dist/jobs/job-registry.js.map +1 -1
- package/dist/jobs/job-service.js +1 -1
- package/dist/jobs/job-service.js.map +1 -1
- package/dist/jobs/schedule-constants.d.ts +0 -4
- package/dist/jobs/schedule-constants.d.ts.map +1 -1
- package/dist/jobs/schedule-constants.js +0 -4
- package/dist/jobs/schedule-constants.js.map +1 -1
- package/dist/jobs/scheduler.d.ts +1 -1
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +46 -10
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/jobs/types.d.ts +59 -50
- package/dist/jobs/types.d.ts.map +1 -1
- package/dist/jobs/utils.d.ts +0 -9
- package/dist/jobs/utils.d.ts.map +1 -1
- package/dist/jobs/utils.js +3 -23
- package/dist/jobs/utils.js.map +1 -1
- package/dist/jobs/worker.d.ts +2 -3
- package/dist/jobs/worker.d.ts.map +1 -1
- package/dist/jobs/worker.js +183 -82
- package/dist/jobs/worker.js.map +1 -1
- package/dist/list-query/casl.d.ts +18 -19
- package/dist/list-query/casl.d.ts.map +1 -1
- package/dist/list-query/casl.js +40 -46
- package/dist/list-query/casl.js.map +1 -1
- package/dist/uploads/file-upload.d.ts +44 -0
- package/dist/uploads/file-upload.d.ts.map +1 -0
- package/dist/uploads/file-upload.js +145 -0
- package/dist/uploads/file-upload.js.map +1 -0
- package/dist/uploads/index.d.ts +6 -0
- package/dist/uploads/index.d.ts.map +1 -0
- package/dist/uploads/index.js +7 -0
- package/dist/uploads/index.js.map +1 -0
- package/dist/uploads/uploads.service.d.ts +98 -0
- package/dist/uploads/uploads.service.d.ts.map +1 -0
- package/dist/uploads/uploads.service.js +134 -0
- package/dist/uploads/uploads.service.js.map +1 -0
- package/dist/uploads/validators.d.ts +41 -0
- package/dist/uploads/validators.d.ts.map +1 -0
- package/dist/uploads/validators.js +94 -0
- package/dist/uploads/validators.js.map +1 -0
- package/package.json +34 -3
- package/dist/email/compiler/code-generator.d.ts +0 -11
- package/dist/email/compiler/code-generator.d.ts.map +0 -1
- package/dist/email/compiler/code-generator.js +0 -319
- package/dist/email/compiler/code-generator.js.map +0 -1
package/dist/jobs/worker.js
CHANGED
|
@@ -1,17 +1,31 @@
|
|
|
1
1
|
import { asValue, createContainer, InjectionMode } from 'awilix';
|
|
2
|
-
import { safeParse } from 'valibot';
|
|
2
|
+
import { object, optional, record, safeParse, string, unknown } from 'valibot';
|
|
3
3
|
import { collectModules, registerModuleProviders, validateNoCycles } from '../core/bootstrap.js';
|
|
4
4
|
import { createLogger } from '../utils/logger.js';
|
|
5
|
-
import { InvalidJobPayloadError, PermanentJobError, TransientJobError } from './errors.js';
|
|
5
|
+
import { InvalidJobPayloadError, PermanentJobError, RetryExhaustedError, TransientJobError, } from './errors.js';
|
|
6
6
|
import { createJobRegistry } from './job-registry.js';
|
|
7
|
-
import {
|
|
7
|
+
import { generateJobId } from './utils.js';
|
|
8
|
+
/**
|
|
9
|
+
* Default maximum retry attempts before a job is considered dead.
|
|
10
|
+
*/
|
|
11
|
+
const DEFAULT_MAX_ATTEMPTS = 25;
|
|
12
|
+
/**
|
|
13
|
+
* Valibot schema for validating SQS job message structure.
|
|
14
|
+
*/
|
|
15
|
+
const JobMessageSchema = object({
|
|
16
|
+
jobName: string(),
|
|
17
|
+
payload: optional(unknown()),
|
|
18
|
+
jobId: optional(string()),
|
|
19
|
+
enqueuedAt: optional(string()),
|
|
20
|
+
metadata: optional(record(string(), string())),
|
|
21
|
+
});
|
|
8
22
|
/**
|
|
9
23
|
* Bootstrap a worker Lambda handler for processing jobs.
|
|
10
24
|
*/
|
|
11
25
|
export function bootstrapWorker(config) {
|
|
12
26
|
const logger = config.logger ?? createLogger('JobsWorker');
|
|
13
27
|
const statePromise = buildWorkerState(config.module, logger);
|
|
14
|
-
return async (event,
|
|
28
|
+
return async (event, ctx) => {
|
|
15
29
|
const { container, registry } = await statePromise;
|
|
16
30
|
if (isSQSEvent(event)) {
|
|
17
31
|
const batchItemFailures = [];
|
|
@@ -22,7 +36,6 @@ export function bootstrapWorker(config) {
|
|
|
22
36
|
moduleContainer: container,
|
|
23
37
|
hooks: config.hooks,
|
|
24
38
|
logger,
|
|
25
|
-
driver: config.driver,
|
|
26
39
|
});
|
|
27
40
|
}
|
|
28
41
|
catch (_error) {
|
|
@@ -37,13 +50,15 @@ export function bootstrapWorker(config) {
|
|
|
37
50
|
if (!jobName) {
|
|
38
51
|
throw new Error('Job name is required for non-SQS invocation');
|
|
39
52
|
}
|
|
53
|
+
// Extract attempt number from Lambda context retry metadata if available
|
|
54
|
+
const attemptNumber = extractAttemptNumber(ctx);
|
|
40
55
|
await executeJob({
|
|
41
56
|
jobName,
|
|
42
|
-
jobId:
|
|
57
|
+
jobId: `eb-${generateJobId()}`,
|
|
43
58
|
payload,
|
|
44
|
-
attemptNumber
|
|
59
|
+
attemptNumber,
|
|
45
60
|
enqueuedAt: new Date(),
|
|
46
|
-
}, { registry, moduleContainer: container, hooks: config.hooks, logger
|
|
61
|
+
}, { registry, moduleContainer: container, hooks: config.hooks, logger });
|
|
47
62
|
return { success: true };
|
|
48
63
|
};
|
|
49
64
|
}
|
|
@@ -104,17 +119,23 @@ async function processRecord(record, context) {
|
|
|
104
119
|
if (!parsed || typeof parsed !== 'object') {
|
|
105
120
|
throw new Error('Invalid job message payload');
|
|
106
121
|
}
|
|
122
|
+
// Validate message structure using Valibot
|
|
123
|
+
const validationResult = safeParse(JobMessageSchema, parsed);
|
|
124
|
+
if (!validationResult.success) {
|
|
125
|
+
context.logger.error('Invalid job message structure', {
|
|
126
|
+
messageId: record.messageId,
|
|
127
|
+
issues: validationResult.issues,
|
|
128
|
+
});
|
|
129
|
+
throw new Error('Invalid job message structure');
|
|
130
|
+
}
|
|
107
131
|
const parsedMessage = parsed;
|
|
108
132
|
const jobName = parsedMessage.jobName;
|
|
109
133
|
const payload = parsedMessage.payload;
|
|
110
134
|
const jobId = parsedMessage.jobId ?? record.messageId;
|
|
111
135
|
const enqueuedAt = parsedMessage.enqueuedAt ? new Date(parsedMessage.enqueuedAt) : new Date();
|
|
112
136
|
const metadata = parsedMessage.metadata;
|
|
113
|
-
if (!jobName) {
|
|
114
|
-
throw new Error('Job name is required');
|
|
115
|
-
}
|
|
116
137
|
const attemptNumber = record.attributes?.ApproximateReceiveCount
|
|
117
|
-
? Number.parseInt(record.attributes.ApproximateReceiveCount, 10)
|
|
138
|
+
? Number.parseInt(record.attributes.ApproximateReceiveCount, 10) || 1
|
|
118
139
|
: 1;
|
|
119
140
|
const execution = {
|
|
120
141
|
jobId,
|
|
@@ -128,18 +149,11 @@ async function processRecord(record, context) {
|
|
|
128
149
|
}
|
|
129
150
|
async function executeJob(execution, context) {
|
|
130
151
|
const job = context.registry.getOrThrow(execution.jobName);
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
152
|
+
// Normalize retry configuration
|
|
153
|
+
const retryConfig = normalizeRetryConfig(job.retry);
|
|
134
154
|
const scope = context.moduleContainer.createScope();
|
|
135
155
|
const services = scope.cradle;
|
|
136
|
-
|
|
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
|
-
}
|
|
156
|
+
const jobLogger = resolveJobLogger(context, execution);
|
|
143
157
|
const jobContext = {
|
|
144
158
|
services,
|
|
145
159
|
jobId: execution.jobId,
|
|
@@ -159,85 +173,151 @@ async function executeJob(execution, context) {
|
|
|
159
173
|
await context.hooks?.onJobComplete?.(execution, jobContext);
|
|
160
174
|
}
|
|
161
175
|
catch (error) {
|
|
162
|
-
|
|
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;
|
|
176
|
+
await handleJobError(error, execution, jobContext, context, retryConfig, jobLogger);
|
|
182
177
|
}
|
|
183
178
|
finally {
|
|
184
179
|
await scope.dispose();
|
|
185
180
|
}
|
|
186
181
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
182
|
+
/**
|
|
183
|
+
* Resolve the logger for job execution, scoped to the job if possible.
|
|
184
|
+
*/
|
|
185
|
+
function resolveJobLogger(context, execution) {
|
|
186
|
+
if (!context.moduleContainer.hasRegistration('logger')) {
|
|
187
|
+
return context.logger;
|
|
188
|
+
}
|
|
189
|
+
const baseLogger = context.moduleContainer.resolve('logger');
|
|
190
|
+
return baseLogger?.child
|
|
191
|
+
? baseLogger.child({ jobId: execution.jobId, jobName: execution.jobName })
|
|
192
|
+
: baseLogger;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Handle job execution errors with retry logic.
|
|
196
|
+
*/
|
|
197
|
+
async function handleJobError(err, execution, jobContext, context, retryConfig, jobLogger) {
|
|
198
|
+
const { maxAttempts, dead: sendToDead } = retryConfig;
|
|
199
|
+
// PermanentJobError: Never retry, go straight to DLQ
|
|
200
|
+
if (err instanceof PermanentJobError) {
|
|
201
|
+
jobLogger?.error('Job permanently failed', { err });
|
|
202
|
+
await context.hooks?.onJobFailed?.(execution, jobContext, err);
|
|
203
|
+
await context.hooks?.onJobDeadLetter?.(execution, jobContext, err);
|
|
204
|
+
throw err;
|
|
191
205
|
}
|
|
192
|
-
|
|
193
|
-
if (
|
|
194
|
-
|
|
206
|
+
// No retries configured: discard the job silently
|
|
207
|
+
if (maxAttempts === false) {
|
|
208
|
+
jobLogger?.warn('Job failed with retries disabled, discarding', {
|
|
209
|
+
err,
|
|
195
210
|
jobName: execution.jobName,
|
|
196
211
|
jobId: execution.jobId,
|
|
197
|
-
runAt: runAtValue,
|
|
198
212
|
});
|
|
199
|
-
|
|
213
|
+
await context.hooks?.onJobFailed?.(execution, jobContext, err);
|
|
214
|
+
// Return without throwing to acknowledge and discard the message
|
|
215
|
+
return undefined;
|
|
200
216
|
}
|
|
201
|
-
|
|
202
|
-
if (
|
|
203
|
-
return
|
|
217
|
+
// Check if retries are exhausted
|
|
218
|
+
if (execution.attemptNumber >= maxAttempts) {
|
|
219
|
+
return handleExhaustedRetries(err, execution, jobContext, context, maxAttempts, sendToDead, jobLogger);
|
|
204
220
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
221
|
+
// Normal failure: log and throw to trigger SQS retry
|
|
222
|
+
await context.hooks?.onJobFailed?.(execution, jobContext, err);
|
|
223
|
+
logRetryableError(err, execution, maxAttempts, jobLogger);
|
|
224
|
+
throw err;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Handle the case when all retries are exhausted.
|
|
228
|
+
*/
|
|
229
|
+
async function handleExhaustedRetries(err, execution, jobContext, context, maxAttempts, sendToDead, jobLogger) {
|
|
230
|
+
const exhaustedError = new RetryExhaustedError(execution.jobName, execution.attemptNumber, maxAttempts, err);
|
|
231
|
+
jobLogger?.error('Job retries exhausted', {
|
|
232
|
+
err,
|
|
233
|
+
attemptNumber: execution.attemptNumber,
|
|
234
|
+
maxAttempts,
|
|
235
|
+
cause: err.message,
|
|
236
|
+
});
|
|
237
|
+
await context.hooks?.onJobFailed?.(execution, jobContext, err);
|
|
238
|
+
await context.hooks?.onJobDeadLetter?.(execution, jobContext, exhaustedError);
|
|
239
|
+
if (!sendToDead) {
|
|
240
|
+
jobLogger?.info('Job discarded (dead: false)', {
|
|
208
241
|
jobName: execution.jobName,
|
|
209
242
|
jobId: execution.jobId,
|
|
210
|
-
runAt: runAtValue,
|
|
211
243
|
});
|
|
212
|
-
|
|
244
|
+
// Return without throwing to discard
|
|
245
|
+
return undefined;
|
|
213
246
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
247
|
+
throw exhaustedError;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Log a retriable error with appropriate context.
|
|
251
|
+
*/
|
|
252
|
+
function logRetryableError(err, execution, maxAttempts, jobLogger) {
|
|
253
|
+
if (err instanceof InvalidJobPayloadError) {
|
|
254
|
+
jobLogger?.warn('Invalid job payload, retrying until DLQ', {
|
|
255
|
+
err,
|
|
256
|
+
jobName: execution.jobName,
|
|
257
|
+
jobId: execution.jobId,
|
|
258
|
+
attemptNumber: execution.attemptNumber,
|
|
259
|
+
maxAttempts,
|
|
260
|
+
});
|
|
227
261
|
}
|
|
228
|
-
else if (
|
|
229
|
-
|
|
262
|
+
else if (err instanceof TransientJobError) {
|
|
263
|
+
jobLogger?.warn('Job transient failure, retrying', {
|
|
264
|
+
err,
|
|
265
|
+
retryAfter: err.retryAfter,
|
|
266
|
+
attemptNumber: execution.attemptNumber,
|
|
267
|
+
maxAttempts,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
jobLogger?.warn('Job failed, will retry', {
|
|
272
|
+
err,
|
|
273
|
+
attemptNumber: execution.attemptNumber,
|
|
274
|
+
maxAttempts,
|
|
275
|
+
remainingAttempts: maxAttempts - execution.attemptNumber,
|
|
276
|
+
});
|
|
230
277
|
}
|
|
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
278
|
}
|
|
279
|
+
/**
|
|
280
|
+
* Normalize retry configuration to a consistent format.
|
|
281
|
+
* Zero or negative maxAttempts are treated as "no retries" (same as retry: false).
|
|
282
|
+
*/
|
|
283
|
+
function normalizeRetryConfig(config) {
|
|
284
|
+
if (config === false) {
|
|
285
|
+
return { maxAttempts: false, dead: false };
|
|
286
|
+
}
|
|
287
|
+
if (typeof config === 'number') {
|
|
288
|
+
// Treat zero or negative as "no retries"
|
|
289
|
+
if (config <= 0) {
|
|
290
|
+
return { maxAttempts: false, dead: false };
|
|
291
|
+
}
|
|
292
|
+
return { maxAttempts: config, dead: true };
|
|
293
|
+
}
|
|
294
|
+
if (config === undefined) {
|
|
295
|
+
return { maxAttempts: DEFAULT_MAX_ATTEMPTS, dead: true };
|
|
296
|
+
}
|
|
297
|
+
// Handle object config with potential invalid maxAttempts
|
|
298
|
+
const maxAttempts = config.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;
|
|
299
|
+
if (maxAttempts <= 0) {
|
|
300
|
+
return { maxAttempts: false, dead: false };
|
|
301
|
+
}
|
|
302
|
+
return {
|
|
303
|
+
maxAttempts,
|
|
304
|
+
dead: config.dead ?? true,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Type guard to check if an event is an SQS event.
|
|
309
|
+
* Validates presence of Records array with SQS-specific properties.
|
|
310
|
+
*/
|
|
239
311
|
function isSQSEvent(event) {
|
|
240
|
-
|
|
312
|
+
const maybeEvent = event;
|
|
313
|
+
if (!Array.isArray(maybeEvent?.Records) || maybeEvent.Records.length === 0) {
|
|
314
|
+
return false;
|
|
315
|
+
}
|
|
316
|
+
const firstRecord = maybeEvent.Records[0];
|
|
317
|
+
// Check for SQS-specific properties to distinguish from other AWS event types
|
|
318
|
+
return (typeof firstRecord.messageId === 'string' &&
|
|
319
|
+
typeof firstRecord.body === 'string' &&
|
|
320
|
+
typeof firstRecord.receiptHandle === 'string');
|
|
241
321
|
}
|
|
242
322
|
function extractJobName(event) {
|
|
243
323
|
if (typeof event.jobName === 'string')
|
|
@@ -257,4 +337,25 @@ function extractPayload(event) {
|
|
|
257
337
|
return detail.payload;
|
|
258
338
|
return undefined;
|
|
259
339
|
}
|
|
340
|
+
/**
|
|
341
|
+
* Extract attempt number from Lambda context.
|
|
342
|
+
* For EventBridge retries, checks for retry metadata in the context.
|
|
343
|
+
*/
|
|
344
|
+
function extractAttemptNumber(ctx) {
|
|
345
|
+
if (!ctx)
|
|
346
|
+
return 1;
|
|
347
|
+
// EventBridge retry information may be available in client context
|
|
348
|
+
// or through environment variables in some configurations
|
|
349
|
+
try {
|
|
350
|
+
const clientContext = ctx
|
|
351
|
+
.clientContext;
|
|
352
|
+
if (clientContext?.custom?.retryAttempt !== undefined) {
|
|
353
|
+
return clientContext.custom.retryAttempt + 1;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
catch {
|
|
357
|
+
// Ignore parsing errors
|
|
358
|
+
}
|
|
359
|
+
return 1;
|
|
360
|
+
}
|
|
260
361
|
//# sourceMappingURL=worker.js.map
|
package/dist/jobs/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/jobs/worker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/jobs/worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +1,36 @@
|
|
|
1
|
-
|
|
1
|
+
export type CaslAccessibleBy = (ability: any, action?: string) => Record<string, Record<string, unknown>>;
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* @param ability - The CASL ability instance (any object that works with @casl/prisma's accessibleBy)
|
|
6
|
-
* @param subject - The Prisma model name (e.g., 'User', 'Organization')
|
|
7
|
-
* @returns A function that applies the CASL conditions to a builder
|
|
3
|
+
* Register CASL integration dependencies.
|
|
4
|
+
* This must be called at application startup if you use CASL features.
|
|
8
5
|
*
|
|
9
6
|
* @example
|
|
10
7
|
* ```typescript
|
|
11
|
-
* import {
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* .apply(scope)
|
|
16
|
-
* .build();
|
|
8
|
+
* import { accessibleBy } from '@casl/prisma';
|
|
9
|
+
* import { registerCasl } from 'glasswork';
|
|
10
|
+
*
|
|
11
|
+
* registerCasl({ accessibleBy });
|
|
17
12
|
* ```
|
|
18
13
|
*/
|
|
19
|
-
export declare function
|
|
14
|
+
export declare function registerCasl(options: {
|
|
15
|
+
accessibleBy: CaslAccessibleBy;
|
|
16
|
+
}): void;
|
|
20
17
|
/**
|
|
21
18
|
* Create a CASL scope helper that extracts ability from context
|
|
22
19
|
*
|
|
20
|
+
* @param ability - The CASL ability instance
|
|
21
|
+
* @param action - The action to check ('read', 'update', etc.)
|
|
23
22
|
* @param subject - The Prisma model name (e.g., 'User', 'Organization')
|
|
24
|
-
* @returns
|
|
23
|
+
* @returns The CASL conditions object (Prisma where clause)
|
|
25
24
|
*
|
|
26
25
|
* @example
|
|
27
26
|
* ```typescript
|
|
28
|
-
* import {
|
|
29
|
-
*
|
|
30
|
-
* const params =
|
|
27
|
+
* import { accessibleBy } from '@casl/prisma';
|
|
28
|
+
*
|
|
29
|
+
* const params = createListQuery({ filter: UserFilterSchema })
|
|
31
30
|
* .parse(query)
|
|
32
|
-
* .
|
|
31
|
+
* .scope(withCaslScope(ability, 'read', 'User'))
|
|
33
32
|
* .build();
|
|
34
33
|
* ```
|
|
35
34
|
*/
|
|
36
|
-
export declare function withCaslScope
|
|
35
|
+
export declare function withCaslScope<TAbility = any>(ability: TAbility, action: string, subject: string): Record<string, unknown>;
|
|
37
36
|
//# sourceMappingURL=casl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"casl.d.ts","sourceRoot":"","sources":["../../src/list-query/casl.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"casl.d.ts","sourceRoot":"","sources":["../../src/list-query/casl.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,gBAAgB,GAAG,CAE7B,OAAO,EAAE,GAAG,EACZ,MAAM,CAAC,EAAE,MAAM,KACZ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAU7C;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE;IAAE,YAAY,EAAE,gBAAgB,CAAA;CAAE,QAEvE;AAeD;;;;;;;;;;;;;;;;;GAiBG;AAEH,wBAAgB,aAAa,CAAC,QAAQ,GAAG,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,2BAY/F"}
|
package/dist/list-query/casl.js
CHANGED
|
@@ -1,66 +1,60 @@
|
|
|
1
|
+
const config = {
|
|
2
|
+
accessibleBy: null,
|
|
3
|
+
};
|
|
1
4
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*/
|
|
5
|
-
async function getAccessibleBy() {
|
|
6
|
-
try {
|
|
7
|
-
const { accessibleBy } = await import('@casl/prisma');
|
|
8
|
-
return accessibleBy;
|
|
9
|
-
}
|
|
10
|
-
catch {
|
|
11
|
-
throw new Error('@casl/prisma package not found. Install with: npm install @casl/ability @casl/prisma\n' +
|
|
12
|
-
'Note: @casl/ability is required as a peer dependency of @casl/prisma.');
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Create a CASL scope function that can be applied to a ListQueryBuilder
|
|
17
|
-
*
|
|
18
|
-
* @param ability - The CASL ability instance (any object that works with @casl/prisma's accessibleBy)
|
|
19
|
-
* @param subject - The Prisma model name (e.g., 'User', 'Organization')
|
|
20
|
-
* @returns A function that applies the CASL conditions to a builder
|
|
5
|
+
* Register CASL integration dependencies.
|
|
6
|
+
* This must be called at application startup if you use CASL features.
|
|
21
7
|
*
|
|
22
8
|
* @example
|
|
23
9
|
* ```typescript
|
|
24
|
-
* import {
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* .apply(scope)
|
|
29
|
-
* .build();
|
|
10
|
+
* import { accessibleBy } from '@casl/prisma';
|
|
11
|
+
* import { registerCasl } from 'glasswork';
|
|
12
|
+
*
|
|
13
|
+
* registerCasl({ accessibleBy });
|
|
30
14
|
* ```
|
|
31
15
|
*/
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
16
|
+
export function registerCasl(options) {
|
|
17
|
+
config.accessibleBy = options.accessibleBy;
|
|
18
|
+
}
|
|
19
|
+
function getAccessibleBy() {
|
|
20
|
+
if (!config.accessibleBy) {
|
|
21
|
+
throw new Error('CASL integration not configured. You must call registerCasl({ accessibleBy }) at application startup.\n' +
|
|
22
|
+
'Example:\n' +
|
|
23
|
+
" import { accessibleBy } from '@casl/prisma';\n" +
|
|
24
|
+
" import { registerCasl } from 'glasswork';\n" +
|
|
25
|
+
' registerCasl({ accessibleBy });');
|
|
26
|
+
}
|
|
27
|
+
return config.accessibleBy;
|
|
39
28
|
}
|
|
40
29
|
/**
|
|
41
30
|
* Create a CASL scope helper that extracts ability from context
|
|
42
31
|
*
|
|
32
|
+
* @param ability - The CASL ability instance
|
|
33
|
+
* @param action - The action to check ('read', 'update', etc.)
|
|
43
34
|
* @param subject - The Prisma model name (e.g., 'User', 'Organization')
|
|
44
|
-
* @returns
|
|
35
|
+
* @returns The CASL conditions object (Prisma where clause)
|
|
45
36
|
*
|
|
46
37
|
* @example
|
|
47
38
|
* ```typescript
|
|
48
|
-
* import {
|
|
49
|
-
*
|
|
50
|
-
* const params =
|
|
39
|
+
* import { accessibleBy } from '@casl/prisma';
|
|
40
|
+
*
|
|
41
|
+
* const params = createListQuery({ filter: UserFilterSchema })
|
|
51
42
|
* .parse(query)
|
|
52
|
-
* .
|
|
43
|
+
* .scope(withCaslScope(ability, 'read', 'User'))
|
|
53
44
|
* .build();
|
|
54
45
|
* ```
|
|
55
46
|
*/
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
//
|
|
63
|
-
return
|
|
64
|
-
|
|
47
|
+
// biome-ignore lint/suspicious/noExplicitAny: Ability type is generic
|
|
48
|
+
export function withCaslScope(ability, action, subject) {
|
|
49
|
+
const accessibleBy = getAccessibleBy();
|
|
50
|
+
const conditions = accessibleBy(ability, action);
|
|
51
|
+
if (!(subject in conditions)) {
|
|
52
|
+
// Return empty object or undefined? Prisma generally assumes conditions exist if asked.
|
|
53
|
+
// If we assume accessibleBy returns all possible subjects, then missing key might be fine or error.
|
|
54
|
+
// Let's just return what is there, which is undefined if missing. The types expect Record<string, unknown>.
|
|
55
|
+
// Casting to allow potentially undefined access if user made a typo.
|
|
56
|
+
return conditions[subject];
|
|
57
|
+
}
|
|
58
|
+
return conditions[subject];
|
|
65
59
|
}
|
|
66
60
|
//# sourceMappingURL=casl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"casl.js","sourceRoot":"","sources":["../../src/list-query/casl.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"casl.js","sourceRoot":"","sources":["../../src/list-query/casl.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,GAAe;IACzB,YAAY,EAAE,IAAI;CACnB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,OAA2C;IACtE,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;AAC7C,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,yGAAyG;YACvG,YAAY;YACZ,kDAAkD;YAClD,+CAA+C;YAC/C,mCAAmC,CACtC,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,YAAY,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,sEAAsE;AACtE,MAAM,UAAU,aAAa,CAAiB,OAAiB,EAAE,MAAc,EAAE,OAAe;IAC9F,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEjD,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC;QAC7B,wFAAwF;QACxF,oGAAoG;QACpG,4GAA4G;QAC5G,qEAAqE;QACrE,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface UploadPathConfig {
|
|
2
|
+
/** Directory path for the file (e.g., 'uploads/avatars/user123/abc123') */
|
|
3
|
+
readonly dir: string;
|
|
4
|
+
/** Sanitized file name (e.g., 'photo.jpg') */
|
|
5
|
+
readonly fileName: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Creates an upload configuration object for presigned URL generation.
|
|
9
|
+
* Validates IDs and generates a unique random folder to prevent overwrites.
|
|
10
|
+
*
|
|
11
|
+
* @param prefix - Upload folder prefix (e.g., 'avatars', 'documents')
|
|
12
|
+
* @param ids - Array of IDs to include in path (e.g., [userId] or [clientId, orderId])
|
|
13
|
+
* @param fileName - Sanitized filename (validate with sanitizedFileName schema first)
|
|
14
|
+
* @returns Configuration object with dir and fileName properties
|
|
15
|
+
* @throws BadRequestException if prefix is empty or IDs contain invalid characters
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* // In route handler:
|
|
20
|
+
* const config = createUploadConfig('avatars', [user.id], query.name);
|
|
21
|
+
* const result = await uploadsService.getSignedUploadUrl(config);
|
|
22
|
+
* // Result path: /uploads/avatars/{userId}/{randomId}/{filename}
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function createUploadConfig(prefix: string, ids: readonly string[], fileName: string): UploadPathConfig;
|
|
26
|
+
/**
|
|
27
|
+
* Asserts that a file path belongs to the specified prefix and IDs.
|
|
28
|
+
* Use this to validate delete operations - ensures users can only delete their own files.
|
|
29
|
+
*
|
|
30
|
+
* @param path - The file path to validate (e.g., from query.name)
|
|
31
|
+
* @param prefix - The expected upload prefix (e.g., 'avatars', 'documents')
|
|
32
|
+
* @param ids - The expected IDs in the path
|
|
33
|
+
* @param errorMessage - Custom error message (default: 'Invalid file path')
|
|
34
|
+
* @throws ForbiddenException if path doesn't match expected structure
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* // In delete handler:
|
|
39
|
+
* assertUploadPathOwnership(query.path, 'avatars', [user.id]);
|
|
40
|
+
* await uploadsService.deleteFile(query.path);
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function assertUploadPathOwnership(path: string, prefix: string, ids: readonly string[], errorMessage?: string): void;
|
|
44
|
+
//# sourceMappingURL=file-upload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-upload.d.ts","sourceRoot":"","sources":["../../src/uploads/file-upload.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,QAAQ,EAAE,MAAM,GACf,gBAAgB,CAoBlB;AAsED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,YAAY,SAAsB,GACjC,IAAI,CAYN"}
|