glasswork 1.2.0 → 1.4.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/CHANGELOG.md +37 -1
- package/dist/core/bootstrap.d.ts.map +1 -1
- package/dist/core/bootstrap.js +110 -25
- package/dist/core/bootstrap.js.map +1 -1
- package/dist/core/contract.d.ts +37 -0
- package/dist/core/contract.d.ts.map +1 -0
- package/dist/core/contract.js +19 -0
- package/dist/core/contract.js.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/types.d.ts +12 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/email/email-service.d.ts +5 -2
- package/dist/email/email-service.d.ts.map +1 -1
- package/dist/email/email-service.js +8 -4
- package/dist/email/email-service.js.map +1 -1
- package/dist/email/index.d.ts +1 -1
- package/dist/email/index.d.ts.map +1 -1
- package/dist/email/index.js.map +1 -1
- package/dist/email/templated-email-service.d.ts.map +1 -1
- package/dist/email/templated-email-service.js +2 -1
- package/dist/email/templated-email-service.js.map +1 -1
- package/dist/email/types.d.ts +9 -4
- package/dist/email/types.d.ts.map +1 -1
- package/dist/email/webhooks/handler-factory.d.ts.map +1 -1
- package/dist/email/webhooks/handler-factory.js +7 -3
- package/dist/email/webhooks/handler-factory.js.map +1 -1
- package/dist/email/webhooks/notification-parser.d.ts +2 -1
- package/dist/email/webhooks/notification-parser.d.ts.map +1 -1
- package/dist/email/webhooks/notification-parser.js +1 -2
- package/dist/email/webhooks/notification-parser.js.map +1 -1
- package/dist/email/webhooks/signature-verification.d.ts.map +1 -1
- package/dist/email/webhooks/signature-verification.js +3 -3
- package/dist/email/webhooks/signature-verification.js.map +1 -1
- package/dist/email/webhooks/subscription-handler.d.ts +2 -0
- package/dist/email/webhooks/subscription-handler.d.ts.map +1 -1
- package/dist/email/webhooks/subscription-handler.js +5 -5
- package/dist/email/webhooks/subscription-handler.js.map +1 -1
- package/dist/email/webhooks/types.d.ts +2 -0
- package/dist/email/webhooks/types.d.ts.map +1 -1
- package/dist/http/error-handler.d.ts +3 -1
- package/dist/http/error-handler.d.ts.map +1 -1
- package/dist/http/error-handler.js +3 -4
- package/dist/http/error-handler.js.map +1 -1
- package/dist/http/index.d.ts +1 -0
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +1 -0
- package/dist/http/index.js.map +1 -1
- package/dist/http/route-context.d.ts.map +1 -1
- package/dist/http/route-context.js +7 -2
- package/dist/http/route-context.js.map +1 -1
- package/dist/http/route-helpers.d.ts.map +1 -1
- package/dist/http/route-helpers.js +1 -1
- package/dist/http/route-helpers.js.map +1 -1
- package/dist/http/route-openapi-context.d.ts +2 -0
- package/dist/http/route-openapi-context.d.ts.map +1 -1
- package/dist/http/route-openapi-context.js.map +1 -1
- package/dist/http/route-response.d.ts +2 -1
- package/dist/http/route-response.d.ts.map +1 -1
- package/dist/http/route-response.js +3 -4
- package/dist/http/route-response.js.map +1 -1
- package/dist/jobs/define-job.d.ts +12 -8
- package/dist/jobs/define-job.d.ts.map +1 -1
- package/dist/jobs/define-job.js +2 -0
- package/dist/jobs/define-job.js.map +1 -1
- package/dist/jobs/drivers/mock-driver.d.ts +3 -1
- package/dist/jobs/drivers/mock-driver.d.ts.map +1 -1
- package/dist/jobs/drivers/mock-driver.js +15 -21
- package/dist/jobs/drivers/mock-driver.js.map +1 -1
- package/dist/jobs/index.d.ts +2 -2
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js +1 -1
- package/dist/jobs/index.js.map +1 -1
- package/dist/jobs/job-runner.d.ts +7 -0
- package/dist/jobs/job-runner.d.ts.map +1 -0
- package/dist/jobs/job-runner.js +38 -0
- package/dist/jobs/job-runner.js.map +1 -0
- package/dist/jobs/job-service.d.ts +6 -6
- package/dist/jobs/job-service.d.ts.map +1 -1
- package/dist/jobs/job-service.js +8 -0
- package/dist/jobs/job-service.js.map +1 -1
- package/dist/jobs/observability/emf.d.ts +5 -15
- package/dist/jobs/observability/emf.d.ts.map +1 -1
- package/dist/jobs/observability/emf.js +87 -67
- package/dist/jobs/observability/emf.js.map +1 -1
- package/dist/jobs/observability/index.d.ts +2 -4
- package/dist/jobs/observability/index.d.ts.map +1 -1
- package/dist/jobs/observability/index.js +1 -3
- package/dist/jobs/observability/index.js.map +1 -1
- package/dist/jobs/observability/types.d.ts +16 -193
- package/dist/jobs/observability/types.d.ts.map +1 -1
- package/dist/jobs/types.d.ts +17 -7
- package/dist/jobs/types.d.ts.map +1 -1
- package/dist/jobs/worker.d.ts +3 -0
- package/dist/jobs/worker.d.ts.map +1 -1
- package/dist/jobs/worker.js +66 -13
- package/dist/jobs/worker.js.map +1 -1
- package/dist/list-query/client.d.ts +36 -0
- package/dist/list-query/client.d.ts.map +1 -0
- package/dist/list-query/client.js +74 -0
- package/dist/list-query/client.js.map +1 -0
- package/dist/list-query/parser.d.ts.map +1 -1
- package/dist/list-query/parser.js +8 -46
- package/dist/list-query/parser.js.map +1 -1
- package/dist/list-query/protocol.d.ts +14 -0
- package/dist/list-query/protocol.d.ts.map +1 -0
- package/dist/list-query/protocol.js +44 -0
- package/dist/list-query/protocol.js.map +1 -0
- package/dist/list-query/query-schema.d.ts.map +1 -1
- package/dist/list-query/query-schema.js +6 -5
- package/dist/list-query/query-schema.js.map +1 -1
- package/dist/list-query/types.d.ts +2 -5
- package/dist/list-query/types.d.ts.map +1 -1
- package/dist/middleware/rate-limit.d.ts.map +1 -1
- package/dist/middleware/rate-limit.js +1 -1
- package/dist/middleware/rate-limit.js.map +1 -1
- package/dist/observability/exception-tracking.d.ts +6 -1
- package/dist/observability/exception-tracking.d.ts.map +1 -1
- package/dist/observability/exception-tracking.js +29 -5
- package/dist/observability/exception-tracking.js.map +1 -1
- package/dist/observability/index.d.ts +1 -0
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +1 -0
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/pino-logger.d.ts +3 -1
- package/dist/observability/pino-logger.d.ts.map +1 -1
- package/dist/observability/pino-logger.js +17 -11
- package/dist/observability/pino-logger.js.map +1 -1
- package/dist/observability/sanitizers.d.ts +14 -0
- package/dist/observability/sanitizers.d.ts.map +1 -0
- package/dist/observability/sanitizers.js +52 -0
- package/dist/observability/sanitizers.js.map +1 -0
- package/dist/openapi/drift.d.ts +6 -0
- package/dist/openapi/drift.d.ts.map +1 -0
- package/dist/openapi/drift.js +18 -0
- package/dist/openapi/drift.js.map +1 -0
- package/dist/openapi/openapi.d.ts +5 -0
- package/dist/openapi/openapi.d.ts.map +1 -1
- package/dist/openapi/openapi.js +5 -2
- package/dist/openapi/openapi.js.map +1 -1
- package/dist/uploads/guardduty.d.ts +20 -0
- package/dist/uploads/guardduty.d.ts.map +1 -0
- package/dist/uploads/guardduty.js +29 -0
- package/dist/uploads/guardduty.js.map +1 -0
- package/dist/uploads/index.d.ts +1 -1
- package/dist/uploads/index.d.ts.map +1 -1
- package/dist/uploads/index.js.map +1 -1
- package/dist/uploads/s3-key.d.ts +3 -0
- package/dist/uploads/s3-key.d.ts.map +1 -0
- package/dist/uploads/s3-key.js +5 -0
- package/dist/uploads/s3-key.js.map +1 -0
- package/dist/uploads/uploads.service.d.ts +27 -7
- package/dist/uploads/uploads.service.d.ts.map +1 -1
- package/dist/uploads/uploads.service.js +50 -14
- package/dist/uploads/uploads.service.js.map +1 -1
- package/package.json +11 -1
- package/dist/jobs/observability/client.d.ts +0 -26
- package/dist/jobs/observability/client.d.ts.map +0 -1
- package/dist/jobs/observability/client.js +0 -286
- package/dist/jobs/observability/client.js.map +0 -1
- package/dist/jobs/observability/dashboard.d.ts +0 -19
- package/dist/jobs/observability/dashboard.d.ts.map +0 -1
- package/dist/jobs/observability/dashboard.js +0 -144
- package/dist/jobs/observability/dashboard.js.map +0 -1
- package/dist/jobs/scheduler.d.ts +0 -17
- package/dist/jobs/scheduler.d.ts.map +0 -1
- package/dist/jobs/scheduler.js +0 -83
- package/dist/jobs/scheduler.js.map +0 -1
|
@@ -13,6 +13,8 @@ export interface OpenAPIContext {
|
|
|
13
13
|
* When set, enables `logger` property in RouteContext.
|
|
14
14
|
*/
|
|
15
15
|
pino?: PinoLogger;
|
|
16
|
+
logger?: import('../utils/logger.js').Logger;
|
|
17
|
+
sanitizers?: import('../observability/sanitizers.js').ObservabilitySanitizers;
|
|
16
18
|
}
|
|
17
19
|
/**
|
|
18
20
|
* Set the OpenAPI context for a Hono app instance.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-openapi-context.d.ts","sourceRoot":"","sources":["../../src/http/route-openapi-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,wBAAwB,EAAE,CAAC;IACvC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"route-openapi-context.d.ts","sourceRoot":"","sources":["../../src/http/route-openapi-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,wBAAwB,EAAE,CAAC;IACvC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,oBAAoB,EAAE,MAAM,CAAC;IAC7C,UAAU,CAAC,EAAE,OAAO,gCAAgC,EAAE,uBAAuB,CAAC;CAC/E;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAE1E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,IAAI,GAAG,cAAc,CAE3D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-openapi-context.js","sourceRoot":"","sources":["../../src/http/route-openapi-context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"route-openapi-context.js","sourceRoot":"","sources":["../../src/http/route-openapi-context.ts"],"names":[],"mappings":"AAoBA,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAwB,CAAC;AAE9D;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAS,EAAE,OAAuB;IAClE,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAS;IACzC,OAAO,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAChG,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Context } from 'hono';
|
|
2
|
+
import { type Logger } from '../utils/logger.js';
|
|
2
3
|
import { type SerializationConfig } from '../utils/serialize-prisma-types.js';
|
|
3
4
|
import type { STATUS_DESCRIPTIONS, ValibotSchema } from './route-types.js';
|
|
4
|
-
export declare function handleResponse<TResponses extends Partial<Record<keyof typeof STATUS_DESCRIPTIONS, ValibotSchema | undefined>>>(result: unknown, responses: TResponses | undefined, serializationConfig: Partial<SerializationConfig> | undefined, strictTypes: boolean | undefined, routeSummary: string | undefined, context: Context): Promise<Response | undefined>;
|
|
5
|
+
export declare function handleResponse<TResponses extends Partial<Record<keyof typeof STATUS_DESCRIPTIONS, ValibotSchema | undefined>>>(result: unknown, responses: TResponses | undefined, serializationConfig: Partial<SerializationConfig> | undefined, strictTypes: boolean | undefined, routeSummary: string | undefined, context: Context, logger?: Logger): Promise<Response | undefined>;
|
|
5
6
|
//# sourceMappingURL=route-response.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-response.d.ts","sourceRoot":"","sources":["../../src/http/route-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"route-response.d.ts","sourceRoot":"","sources":["../../src/http/route-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAGpC,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAgE3E,wBAAsB,cAAc,CAClC,UAAU,SAAS,OAAO,CAAC,MAAM,CAAC,MAAM,OAAO,mBAAmB,EAAE,aAAa,GAAG,SAAS,CAAC,CAAC,EAE/F,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,UAAU,GAAG,SAAS,EACjC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,SAAS,EAC7D,WAAW,EAAE,OAAO,GAAG,SAAS,EAChC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,MAA+B,GACtC,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CA4C/B"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { safeParseAsync } from 'valibot';
|
|
2
2
|
import { createLogger } from '../utils/logger.js';
|
|
3
3
|
import { defaultConfig as defaultSerializationConfig, serializePrismaTypes, } from '../utils/serialize-prisma-types.js';
|
|
4
|
-
const logger = createLogger('Routes');
|
|
5
4
|
function serializeResponseData(data, serializationConfig) {
|
|
6
5
|
const config = serializationConfig
|
|
7
6
|
? {
|
|
@@ -13,7 +12,7 @@ function serializeResponseData(data, serializationConfig) {
|
|
|
13
12
|
: defaultSerializationConfig;
|
|
14
13
|
return serializePrismaTypes(data, config);
|
|
15
14
|
}
|
|
16
|
-
async function parseResponse(data, responses) {
|
|
15
|
+
async function parseResponse(data, responses, logger) {
|
|
17
16
|
if (!responses) {
|
|
18
17
|
return { data };
|
|
19
18
|
}
|
|
@@ -40,7 +39,7 @@ async function parseResponse(data, responses) {
|
|
|
40
39
|
'This would throw an error in production.');
|
|
41
40
|
return { data };
|
|
42
41
|
}
|
|
43
|
-
export async function handleResponse(result, responses, serializationConfig, strictTypes, routeSummary, context) {
|
|
42
|
+
export async function handleResponse(result, responses, serializationConfig, strictTypes, routeSummary, context, logger = createLogger('Routes')) {
|
|
44
43
|
if (result instanceof Response) {
|
|
45
44
|
return result;
|
|
46
45
|
}
|
|
@@ -69,7 +68,7 @@ export async function handleResponse(result, responses, serializationConfig, str
|
|
|
69
68
|
: String(error);
|
|
70
69
|
return context.json({ error: 'Internal Server Error', message: errorMessage }, 500);
|
|
71
70
|
}
|
|
72
|
-
const { data: parsedResult, statusCode } = await parseResponse(serializedResult, responses);
|
|
71
|
+
const { data: parsedResult, statusCode } = await parseResponse(serializedResult, responses, logger);
|
|
73
72
|
if (statusCode) {
|
|
74
73
|
context.status(statusCode);
|
|
75
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-response.js","sourceRoot":"","sources":["../../src/http/route-response.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"route-response.js","sourceRoot":"","sources":["../../src/http/route-response.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BaseIssue, BaseSchema, InferInput } from 'valibot';
|
|
1
|
+
import type { BaseIssue, BaseSchema, InferInput, InferOutput } from 'valibot';
|
|
2
2
|
import type { JobDefinition, RetryConfig } from './types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Define a background job with typed payload and handler.
|
|
@@ -37,21 +37,25 @@ import type { JobDefinition, RetryConfig } from './types.js';
|
|
|
37
37
|
* });
|
|
38
38
|
* ```
|
|
39
39
|
*/
|
|
40
|
-
export declare function defineJob<TSchema extends BaseSchema<unknown, unknown, BaseIssue<unknown
|
|
40
|
+
export declare function defineJob<TSchema extends BaseSchema<unknown, unknown, BaseIssue<unknown>>, TServices extends object = Record<string, unknown>>(config: {
|
|
41
41
|
name: string;
|
|
42
42
|
queue?: string;
|
|
43
43
|
deadLetterQueue?: string;
|
|
44
44
|
schema: TSchema;
|
|
45
45
|
retry?: RetryConfig | number | false;
|
|
46
|
-
unique?: JobDefinition<InferInput<TSchema>>['unique'];
|
|
47
|
-
handler: JobDefinition<InferInput<TSchema
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
unique?: JobDefinition<InferInput<TSchema>, InferOutput<TSchema>>['unique'];
|
|
47
|
+
handler: JobDefinition<InferInput<TSchema>, InferOutput<TSchema>, TServices>['handler'];
|
|
48
|
+
runInContext?: JobDefinition<InferInput<TSchema>, InferOutput<TSchema>, TServices>['runInContext'];
|
|
49
|
+
onDeadLetter?: JobDefinition<InferInput<TSchema>, InferOutput<TSchema>, TServices>['onDeadLetter'];
|
|
50
|
+
}): JobDefinition<InferInput<TSchema>, InferOutput<TSchema>, TServices>;
|
|
51
|
+
export declare function defineJob<TPayload, TServices extends object = Record<string, unknown>>(config: {
|
|
50
52
|
name: string;
|
|
51
53
|
queue?: string;
|
|
52
54
|
deadLetterQueue?: string;
|
|
53
55
|
retry?: RetryConfig | number | false;
|
|
54
56
|
unique?: JobDefinition<TPayload>['unique'];
|
|
55
|
-
handler: JobDefinition<TPayload>['handler'];
|
|
56
|
-
|
|
57
|
+
handler: JobDefinition<TPayload, TPayload, TServices>['handler'];
|
|
58
|
+
runInContext?: JobDefinition<TPayload, TPayload, TServices>['runInContext'];
|
|
59
|
+
onDeadLetter?: JobDefinition<TPayload, TPayload, TServices>['onDeadLetter'];
|
|
60
|
+
}): JobDefinition<TPayload, TPayload, TServices>;
|
|
57
61
|
//# sourceMappingURL=define-job.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-job.d.ts","sourceRoot":"","sources":["../../src/jobs/define-job.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"define-job.d.ts","sourceRoot":"","sources":["../../src/jobs/define-job.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,SAAS,CACvB,OAAO,SAAS,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,EAChE,SAAS,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClD,MAAM,EAAE;IACR,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;IACrC,MAAM,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC5E,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC;IACxF,YAAY,CAAC,EAAE,aAAa,CAC1B,UAAU,CAAC,OAAO,CAAC,EACnB,WAAW,CAAC,OAAO,CAAC,EACpB,SAAS,CACV,CAAC,cAAc,CAAC,CAAC;IAClB,YAAY,CAAC,EAAE,aAAa,CAC1B,UAAU,CAAC,OAAO,CAAC,EACnB,WAAW,CAAC,OAAO,CAAC,EACpB,SAAS,CACV,CAAC,cAAc,CAAC,CAAC;CACnB,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;AAExE,wBAAgB,SAAS,CAAC,QAAQ,EAAE,SAAS,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE;IAC9F,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;IACrC,MAAM,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC;IACjE,YAAY,CAAC,EAAE,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,cAAc,CAAC,CAAC;IAC5E,YAAY,CAAC,EAAE,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,cAAc,CAAC,CAAC;CAC7E,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC"}
|
package/dist/jobs/define-job.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-job.js","sourceRoot":"","sources":["../../src/jobs/define-job.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"define-job.js","sourceRoot":"","sources":["../../src/jobs/define-job.ts"],"names":[],"mappings":"AA0EA,MAAM,UAAU,SAAS,CAAC,MAA8B;IACtD,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,YAAY,EAAE,MAAM,CAAC,YAAY;KAClC,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { Logger } from '../../utils/logger.js';
|
|
1
2
|
import type { JobRegistry } from '../job-registry.js';
|
|
2
3
|
import type { Duration, EnqueueResult, JobMessage, QueueDriver } from '../types.js';
|
|
3
4
|
export interface MockEnqueuedJob {
|
|
@@ -11,6 +12,7 @@ export interface MockEnqueuedJob {
|
|
|
11
12
|
* Configuration for MockQueueDriver.
|
|
12
13
|
*/
|
|
13
14
|
export interface MockQueueDriverConfig {
|
|
15
|
+
logger?: Logger;
|
|
14
16
|
/**
|
|
15
17
|
* Execute jobs synchronously when enqueued.
|
|
16
18
|
* Useful for local development to test job handlers immediately.
|
|
@@ -56,6 +58,7 @@ export declare class MockQueueDriver implements QueueDriver {
|
|
|
56
58
|
private readonly registry?;
|
|
57
59
|
private readonly serviceResolver?;
|
|
58
60
|
readonly enqueued: MockEnqueuedJob[];
|
|
61
|
+
private readonly logger?;
|
|
59
62
|
constructor(config?: MockQueueDriverConfig);
|
|
60
63
|
/**
|
|
61
64
|
* Simulate the next enqueue call failing.
|
|
@@ -72,7 +75,6 @@ export declare class MockQueueDriver implements QueueDriver {
|
|
|
72
75
|
private executeEnqueuedJob;
|
|
73
76
|
private resolveLogger;
|
|
74
77
|
private createJobContext;
|
|
75
|
-
private runJobHandler;
|
|
76
78
|
private warnMissingJobDefinition;
|
|
77
79
|
enqueueAt(message: JobMessage, at: Date): Promise<EnqueueResult>;
|
|
78
80
|
enqueueIn(message: JobMessage, delay: Duration): Promise<EnqueueResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-driver.d.ts","sourceRoot":"","sources":["../../../src/jobs/drivers/mock-driver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mock-driver.d.ts","sourceRoot":"","sources":["../../../src/jobs/drivers/mock-driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,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,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;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;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IAEjC,YAAY,MAAM,GAAE,qBAA0B,EAK7C;IAED;;OAEG;IACH,eAAe,CAAC,KAAK,QAAoC,GAAG,IAAI,CAE/D;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAIZ;IAED,IAAI,OAAO,IAAI,eAAe,GAAG,SAAS,CAEzC;IAEK,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAczD;IAED,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,oBAAoB;YAMd,kBAAkB;IA8BhC,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,wBAAwB;IAO1B,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,CAOrE;IAEK,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAO5E;CACF"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { createLogger } from '../../utils/logger.js';
|
|
2
|
+
import { runJobAttempt } from '../job-runner.js';
|
|
1
3
|
import { generateJobId } from '../utils.js';
|
|
2
4
|
/**
|
|
3
5
|
* In-memory queue driver for testing and local development.
|
|
@@ -26,10 +28,12 @@ export class MockQueueDriver {
|
|
|
26
28
|
registry;
|
|
27
29
|
serviceResolver;
|
|
28
30
|
enqueued = [];
|
|
31
|
+
logger;
|
|
29
32
|
constructor(config = {}) {
|
|
30
33
|
this.executeImmediately = config.executeImmediately ?? false;
|
|
31
34
|
this.registry = config.registry;
|
|
32
35
|
this.serviceResolver = config.serviceResolver;
|
|
36
|
+
this.logger = config.logger;
|
|
33
37
|
}
|
|
34
38
|
/**
|
|
35
39
|
* Simulate the next enqueue call failing.
|
|
@@ -89,17 +93,18 @@ export class MockQueueDriver {
|
|
|
89
93
|
jobId,
|
|
90
94
|
jobName: message.jobName,
|
|
91
95
|
});
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
});
|
|
96
|
+
try {
|
|
97
|
+
await runJobAttempt(job, message.payload, context);
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
logger.error('Local job attempt failed', { jobId, jobName: message.jobName, error });
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
100
103
|
}
|
|
101
104
|
resolveLogger(services) {
|
|
102
|
-
|
|
105
|
+
if (this.logger)
|
|
106
|
+
return this.logger;
|
|
107
|
+
let logger = createLogger('MockQueueDriver');
|
|
103
108
|
try {
|
|
104
109
|
if (services.logger) {
|
|
105
110
|
logger = services.logger;
|
|
@@ -119,19 +124,8 @@ export class MockQueueDriver {
|
|
|
119
124
|
logger: logger.child ? logger.child({ jobId, jobName }) : logger,
|
|
120
125
|
};
|
|
121
126
|
}
|
|
122
|
-
async runJobHandler({ jobId, jobName, logger, payload, handler, context, }) {
|
|
123
|
-
try {
|
|
124
|
-
logger.info(`[MockQueueDriver] Executing job immediately: ${jobName} (${jobId})`);
|
|
125
|
-
await handler(payload, context);
|
|
126
|
-
logger.info(`[MockQueueDriver] Successfully executed job: ${jobName} (${jobId})`);
|
|
127
|
-
}
|
|
128
|
-
catch (error) {
|
|
129
|
-
logger.error(`[MockQueueDriver] Failed to execute job: ${jobName} (${jobId})`, error);
|
|
130
|
-
throw error;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
127
|
warnMissingJobDefinition(jobName) {
|
|
134
|
-
|
|
128
|
+
(this.logger ?? createLogger('MockQueueDriver')).warn(`[MockQueueDriver] Could not execute job "${jobName}" immediately because ` +
|
|
135
129
|
`no job definition was provided and no JobRegistry is configured.`);
|
|
136
130
|
}
|
|
137
131
|
async enqueueAt(message, at) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-driver.js","sourceRoot":"","sources":["../../../src/jobs/drivers/mock-driver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mock-driver.js","sourceRoot":"","sources":["../../../src/jobs/drivers/mock-driver.ts"],"names":[],"mappings":"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"}
|
package/dist/jobs/index.d.ts
CHANGED
|
@@ -5,8 +5,8 @@ export { type SQSDriverConfig, SQSQueueDriver } from './drivers/sqs-driver.js';
|
|
|
5
5
|
export { InvalidJobPayloadError, PayloadTooLargeError, PermanentJobError, RetryExhaustedError, TransientJobError, } from './errors.js';
|
|
6
6
|
export { createJobRegistry, JobRegistry } from './job-registry.js';
|
|
7
7
|
export { JobService, type JobServiceConfig, type JobServiceHooks, } from './job-service.js';
|
|
8
|
+
export { createEMFJobMetric, type EMFJobMetricRecord, type EMFMetadata, type EMFMetricUnit, emitJobMetric, type JobExecutionMetricData, type JobExecutionStatus, type JobMetricsConfig, } from './observability/index.js';
|
|
8
9
|
export { definePeriodicJob } from './periodic-job.js';
|
|
9
|
-
export { createSchedulerHandler, type SchedulerConfig } from './scheduler.js';
|
|
10
10
|
export type { AnyJobDefinition, Duration, EnqueueResult, JobContext, JobDefinition, JobHandler, JobMessage, QueueDriver, RetryConfig, } from './types.js';
|
|
11
|
-
export { bootstrapWorker } from './worker.js';
|
|
11
|
+
export { bootstrapWorker, type JobExecution, type WorkerConfig } from './worker.js';
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/jobs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,KAAK,0BAA0B,EAC/B,0BAA0B,EAC1B,KAAK,cAAc,GACpB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,KAAK,eAAe,EACpB,eAAe,EACf,KAAK,qBAAqB,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,KAAK,0BAA0B,EAC/B,0BAA0B,EAC1B,KAAK,cAAc,GACpB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,KAAK,eAAe,EACpB,eAAe,EACf,KAAK,qBAAqB,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,aAAa,EACb,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EACV,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,UAAU,EACV,aAAa,EACb,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/jobs/index.js
CHANGED
|
@@ -5,7 +5,7 @@ export { SQSQueueDriver } from './drivers/sqs-driver.js';
|
|
|
5
5
|
export { InvalidJobPayloadError, PayloadTooLargeError, PermanentJobError, RetryExhaustedError, TransientJobError, } from './errors.js';
|
|
6
6
|
export { createJobRegistry, JobRegistry } from './job-registry.js';
|
|
7
7
|
export { JobService, } from './job-service.js';
|
|
8
|
+
export { createEMFJobMetric, emitJobMetric, } from './observability/index.js';
|
|
8
9
|
export { definePeriodicJob } from './periodic-job.js';
|
|
9
|
-
export { createSchedulerHandler } from './scheduler.js';
|
|
10
10
|
export { bootstrapWorker } from './worker.js';
|
|
11
11
|
//# sourceMappingURL=index.js.map
|
package/dist/jobs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAEL,0BAA0B,GAE3B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEL,eAAe,GAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAwB,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,UAAU,GAGX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAEL,0BAA0B,GAE3B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEL,eAAe,GAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAwB,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,UAAU,GAGX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAIlB,aAAa,GAId,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAYtD,OAAO,EAAE,eAAe,EAAwC,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AnyJobDefinition, JobContext } from './types.js';
|
|
2
|
+
/** One validated attempt for local execution and queue workers. SQS owns retries. */
|
|
3
|
+
export declare function runJobAttempt(job: AnyJobDefinition, input: unknown, context: JobContext, hooks?: {
|
|
4
|
+
onStart?: () => Promise<void> | void;
|
|
5
|
+
onComplete?: () => Promise<void> | void;
|
|
6
|
+
}): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=job-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-runner.d.ts","sourceRoot":"","sources":["../../src/jobs/job-runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE/D,qFAAqF;AACrF,wBAAsB,aAAa,CACjC,GAAG,EAAE,gBAAgB,EACrB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,UAAU,EACnB,KAAK,GAAE;IACL,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACpC,GACL,OAAO,CAAC,IAAI,CAAC,CAyBf"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { safeParse } from 'valibot';
|
|
2
|
+
import { InvalidJobPayloadError, PermanentJobError } from './errors.js';
|
|
3
|
+
/** One validated attempt for local execution and queue workers. SQS owns retries. */
|
|
4
|
+
export async function runJobAttempt(job, input, context, hooks = {}) {
|
|
5
|
+
let payload = input;
|
|
6
|
+
if (job.schema) {
|
|
7
|
+
const result = safeParse(job.schema, input);
|
|
8
|
+
if (!result.success)
|
|
9
|
+
throw new InvalidJobPayloadError(job.name, result.issues);
|
|
10
|
+
payload = result.output;
|
|
11
|
+
}
|
|
12
|
+
const execute = async () => {
|
|
13
|
+
try {
|
|
14
|
+
await hooks.onStart?.();
|
|
15
|
+
await job.handler(payload, context);
|
|
16
|
+
await hooks.onComplete?.();
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
if (isTerminalFailure(job, context, error)) {
|
|
20
|
+
await job.onDeadLetter?.(payload, context, error instanceof Error ? error : new Error(String(error)));
|
|
21
|
+
}
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
if (job.runInContext)
|
|
26
|
+
await job.runInContext(payload, context, execute);
|
|
27
|
+
else
|
|
28
|
+
await execute();
|
|
29
|
+
}
|
|
30
|
+
function isTerminalFailure(job, context, error) {
|
|
31
|
+
if (error instanceof PermanentJobError)
|
|
32
|
+
return true;
|
|
33
|
+
if (job.retry === false)
|
|
34
|
+
return false;
|
|
35
|
+
const maxAttempts = typeof job.retry === 'number' ? job.retry : (job.retry?.maxAttempts ?? 25);
|
|
36
|
+
return maxAttempts > 0 && context.attemptNumber >= maxAttempts;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=job-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-runner.js","sourceRoot":"","sources":["../../src/jobs/job-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGxE,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAqB,EACrB,KAAc,EACd,OAAmB,EACnB,KAAK,GAGD,EAAE;IAEN,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,IAAI,sBAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/E,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YACxB,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACpC,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC3C,MAAM,GAAG,CAAC,YAAY,EAAE,CACtB,OAAO,EACP,OAAO,EACP,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IACF,IAAI,GAAG,CAAC,YAAY;QAAE,MAAM,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;;QACnE,MAAM,OAAO,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAqB,EAAE,OAAmB,EAAE,KAAc;IACnF,IAAI,KAAK,YAAY,iBAAiB;QAAE,OAAO,IAAI,CAAC;IACpD,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;IAC/F,OAAO,WAAW,GAAG,CAAC,IAAI,OAAO,CAAC,aAAa,IAAI,WAAW,CAAC;AACjE,CAAC"}
|
|
@@ -7,7 +7,7 @@ export interface JobServiceConfig {
|
|
|
7
7
|
}
|
|
8
8
|
export interface JobServiceHooks {
|
|
9
9
|
/** Called after a job is successfully enqueued */
|
|
10
|
-
onEnqueued?: <TPayload>(job: JobDefinition<TPayload>, payload: TPayload, result: EnqueueResult) => Promise<void> | void;
|
|
10
|
+
onEnqueued?: <TPayload, TOutput = TPayload>(job: JobDefinition<TPayload, TOutput>, payload: TPayload, result: EnqueueResult) => Promise<void> | void;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* Service responsible for enqueuing jobs.
|
|
@@ -21,20 +21,20 @@ export declare class JobService {
|
|
|
21
21
|
/**
|
|
22
22
|
* Enqueue a job for immediate processing.
|
|
23
23
|
*/
|
|
24
|
-
enqueue<TPayload>(job: JobDefinition<TPayload>, payload: TPayload): Promise<EnqueueResult>;
|
|
24
|
+
enqueue<TPayload, TOutput = TPayload>(job: JobDefinition<TPayload, TOutput>, payload: TPayload): Promise<EnqueueResult>;
|
|
25
25
|
/**
|
|
26
26
|
* Enqueue a job to run after a delay.
|
|
27
27
|
*/
|
|
28
|
-
enqueueIn<TPayload>(job: JobDefinition<TPayload>, payload: TPayload, delay: Duration): Promise<EnqueueResult>;
|
|
28
|
+
enqueueIn<TPayload, TOutput = TPayload>(job: JobDefinition<TPayload, TOutput>, payload: TPayload, delay: Duration): Promise<EnqueueResult>;
|
|
29
29
|
/**
|
|
30
30
|
* Enqueue a job to run at a specific time.
|
|
31
31
|
*/
|
|
32
|
-
enqueueAt<TPayload>(job: JobDefinition<TPayload>, payload: TPayload, at: Date): Promise<EnqueueResult>;
|
|
32
|
+
enqueueAt<TPayload, TOutput = TPayload>(job: JobDefinition<TPayload, TOutput>, payload: TPayload, at: Date): Promise<EnqueueResult>;
|
|
33
33
|
/**
|
|
34
34
|
* Enqueue multiple jobs sequentially.
|
|
35
35
|
*/
|
|
36
|
-
enqueueBatch<TPayload>(jobs: Array<{
|
|
37
|
-
job: JobDefinition<TPayload>;
|
|
36
|
+
enqueueBatch<TPayload, TOutput = TPayload>(jobs: Array<{
|
|
37
|
+
job: JobDefinition<TPayload, TOutput>;
|
|
38
38
|
payload: TPayload;
|
|
39
39
|
}>): Promise<EnqueueResult[]>;
|
|
40
40
|
private validatePayload;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-service.d.ts","sourceRoot":"","sources":["../../src/jobs/job-service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,QAAQ,EACR,aAAa,EACb,aAAa,EACb,WAAW,EACZ,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,UAAU,CAAC,EAAE,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"job-service.d.ts","sourceRoot":"","sources":["../../src/jobs/job-service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,QAAQ,EACR,aAAa,EACb,aAAa,EACb,WAAW,EACZ,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EACxC,GAAG,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,EACrC,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,aAAa,KAClB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,UAAU;IAKnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IANzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IAEzC,YACmB,MAAM,EAAE,WAAW,EACpC,MAAM,GAAE,gBAAqB,EACZ,KAAK,CAAC,EAAE,eAAe,YAAA,EAIzC;IAED;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EACxC,GAAG,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,EACrC,OAAO,EAAE,QAAQ,GAChB,OAAO,CAAC,aAAa,CAAC,CAgBxB;IAED;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAC1C,GAAG,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,EACrC,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAE,QAAQ,GACd,OAAO,CAAC,aAAa,CAAC,CA4BxB;IAED;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAC1C,GAAG,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,EACrC,OAAO,EAAE,QAAQ,EACjB,EAAE,EAAE,IAAI,GACP,OAAO,CAAC,aAAa,CAAC,CA4BxB;IAED;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAC7C,IAAI,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,EAAE,QAAQ,CAAA;KAAE,CAAC,GACxE,OAAO,CAAC,aAAa,EAAE,CAAC,CAE1B;IAED,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,QAAQ;CASjB"}
|
package/dist/jobs/job-service.js
CHANGED
|
@@ -41,6 +41,9 @@ export class JobService {
|
|
|
41
41
|
this.validatePayload(job, payload);
|
|
42
42
|
this.validatePayloadSize(payload);
|
|
43
43
|
if (!this.driver.enqueueIn) {
|
|
44
|
+
if (!this.driver.enqueueAt) {
|
|
45
|
+
throw new Error(`Queue driver "${this.driver.name}" does not support delayed jobs`);
|
|
46
|
+
}
|
|
44
47
|
const seconds = durationToSeconds(delay);
|
|
45
48
|
return this.enqueueAt(job, payload, new Date(Date.now() + seconds * 1000));
|
|
46
49
|
}
|
|
@@ -63,6 +66,9 @@ export class JobService {
|
|
|
63
66
|
this.validatePayload(job, payload);
|
|
64
67
|
this.validatePayloadSize(payload);
|
|
65
68
|
if (!this.driver.enqueueAt) {
|
|
69
|
+
if (!this.driver.enqueueIn) {
|
|
70
|
+
throw new Error(`Queue driver "${this.driver.name}" does not support delayed jobs`);
|
|
71
|
+
}
|
|
66
72
|
const delaySeconds = Math.max(0, Math.floor((at.getTime() - Date.now()) / 1000));
|
|
67
73
|
return this.enqueueIn(job, payload, delaySeconds);
|
|
68
74
|
}
|
|
@@ -85,6 +91,8 @@ export class JobService {
|
|
|
85
91
|
return Promise.all(jobs.map(({ job, payload }) => this.enqueue(job, payload)));
|
|
86
92
|
}
|
|
87
93
|
validatePayload(job, payload) {
|
|
94
|
+
// Validate input here, but transport the original input. The worker parses it
|
|
95
|
+
// independently so transforms are never applied to already transformed output.
|
|
88
96
|
if (job.schema) {
|
|
89
97
|
const result = safeParse(job.schema, payload);
|
|
90
98
|
if (!result.success) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-service.js","sourceRoot":"","sources":["../../src/jobs/job-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAQ3E,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,yBAAyB,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ;AAkBtD;;GAEG;AACH,MAAM,OAAO,UAAU;IAKF,MAAM;IAEN,KAAK;IANP,YAAY,CAAS;IACrB,eAAe,CAAS;IAEzC,YACmB,MAAmB,EACpC,MAAM,GAAqB,EAAE,EACZ,KAAuB;sBAFvB,MAAM;qBAEN,KAAK;QAEtB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,IAAI,SAAS,CAAC;QAC5E,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,yBAAyB,CAAC;IAC7E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"job-service.js","sourceRoot":"","sources":["../../src/jobs/job-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,14 @@
|
|
|
1
1
|
import type { EMFJobMetricRecord, JobExecutionMetricData, JobMetricsConfig } from './types.js';
|
|
2
2
|
/**
|
|
3
|
-
* Build a
|
|
4
|
-
*
|
|
5
|
-
* Conforms to the AWS CloudWatch EMF specification:
|
|
3
|
+
* Build a CloudWatch EMF document without an SDK dependency or network request.
|
|
4
|
+
* Each attempt contributes one sample; identifiers and status remain searchable log fields.
|
|
6
5
|
* https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format_Specification.html
|
|
7
|
-
*
|
|
8
|
-
* @param data - Execution metrics for the completed or failed job.
|
|
9
|
-
* @param config - Optional configuration for namespace, dimensions, etc.
|
|
10
|
-
* @returns An object adhering to the EMF JSON schema.
|
|
11
6
|
*/
|
|
12
7
|
export declare function createEMFJobMetric(data: JobExecutionMetricData, config?: JobMetricsConfig): EMFJobMetricRecord;
|
|
13
8
|
/**
|
|
14
|
-
* Emit
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* extracts these metrics into CloudWatch Metrics with zero API overhead and zero latency.
|
|
18
|
-
*
|
|
19
|
-
* @param data - Execution metrics for the job.
|
|
20
|
-
* @param config - Optional configuration for namespace, dimensions, or custom sink.
|
|
21
|
-
* @returns The generated record or null if metrics are disabled.
|
|
9
|
+
* Emit one raw EMF JSON document. Lambda's console wrappers and application loggers can
|
|
10
|
+
* nest or prefix JSON and prevent metric extraction, so the default sink writes to stdout.
|
|
11
|
+
* Direct calls may throw; bootstrapWorker isolates telemetry failures from job processing.
|
|
22
12
|
*/
|
|
23
13
|
export declare function emitJobMetric(data: JobExecutionMetricData, config?: JobMetricsConfig): EMFJobMetricRecord | null;
|
|
24
14
|
//# sourceMappingURL=emf.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emf.d.ts","sourceRoot":"","sources":["../../../src/jobs/observability/emf.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"emf.d.ts","sourceRoot":"","sources":["../../../src/jobs/observability/emf.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAiB/F;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,CAAC,EAAE,gBAAgB,GACxB,kBAAkB,CA6DpB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,sBAAsB,EAC5B,MAAM,CAAC,EAAE,gBAAgB,GACxB,kBAAkB,GAAG,IAAI,CAS3B"}
|