glasswork 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +22 -1
  2. package/dist/jobs/define-job.d.ts +4 -4
  3. package/dist/jobs/define-job.d.ts.map +1 -1
  4. package/dist/jobs/drivers/mock-driver.d.ts.map +1 -1
  5. package/dist/jobs/drivers/mock-driver.js +11 -1
  6. package/dist/jobs/drivers/mock-driver.js.map +1 -1
  7. package/dist/jobs/index.d.ts +2 -2
  8. package/dist/jobs/index.d.ts.map +1 -1
  9. package/dist/jobs/index.js +1 -1
  10. package/dist/jobs/index.js.map +1 -1
  11. package/dist/jobs/job-service.d.ts +6 -6
  12. package/dist/jobs/job-service.d.ts.map +1 -1
  13. package/dist/jobs/job-service.js +8 -0
  14. package/dist/jobs/job-service.js.map +1 -1
  15. package/dist/jobs/observability/emf.d.ts +5 -15
  16. package/dist/jobs/observability/emf.d.ts.map +1 -1
  17. package/dist/jobs/observability/emf.js +87 -67
  18. package/dist/jobs/observability/emf.js.map +1 -1
  19. package/dist/jobs/observability/index.d.ts +2 -4
  20. package/dist/jobs/observability/index.d.ts.map +1 -1
  21. package/dist/jobs/observability/index.js +1 -3
  22. package/dist/jobs/observability/index.js.map +1 -1
  23. package/dist/jobs/observability/types.d.ts +16 -193
  24. package/dist/jobs/observability/types.d.ts.map +1 -1
  25. package/dist/jobs/types.d.ts +4 -4
  26. package/dist/jobs/types.d.ts.map +1 -1
  27. package/dist/jobs/worker.d.ts +3 -0
  28. package/dist/jobs/worker.d.ts.map +1 -1
  29. package/dist/jobs/worker.js +71 -12
  30. package/dist/jobs/worker.js.map +1 -1
  31. package/package.json +1 -1
  32. package/dist/jobs/observability/client.d.ts +0 -26
  33. package/dist/jobs/observability/client.d.ts.map +0 -1
  34. package/dist/jobs/observability/client.js +0 -286
  35. package/dist/jobs/observability/client.js.map +0 -1
  36. package/dist/jobs/observability/dashboard.d.ts +0 -19
  37. package/dist/jobs/observability/dashboard.d.ts.map +0 -1
  38. package/dist/jobs/observability/dashboard.js +0 -144
  39. package/dist/jobs/observability/dashboard.js.map +0 -1
  40. package/dist/jobs/scheduler.d.ts +0 -17
  41. package/dist/jobs/scheduler.d.ts.map +0 -1
  42. package/dist/jobs/scheduler.js +0 -83
  43. package/dist/jobs/scheduler.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.3.0] - 2026-10-03
11
+
12
+ ### Added
13
+
14
+ - Automatic per-attempt CloudWatch EMF metrics for `bootstrapWorker` in Lambda, with configurable namespaces, stable dimensions, opt-out and a synchronous test sink. Metrics use raw stdout without an AWS SDK dependency, omit payloads and error details, and never change job acknowledgements when emission fails. Dashboards and CloudWatch queries remain application-owned; the jobs documentation includes native CDK and Logs Insights examples.
15
+
16
+ ### Changed
17
+
18
+ - Use TypeScript CDK examples as the primary deployment documentation, while retaining alternative deployment options in the Lambda deployment guide.
19
+
20
+ ### Fixed
21
+
22
+ - Stop FIFO batches after the first failure and report all unprocessed records for retry.
23
+ - Infer separate job input/output types and pass schema output to worker and mock handlers; transport original validated input to avoid chained transforms.
24
+ - Reject unsupported driver delays without recursion.
25
+
26
+ ### Removed
27
+
28
+ - Remove the unused DynamoDB scheduler and its public exports in favor of EventBridge Scheduler.
29
+
10
30
  ## [1.2.0] - 2026-09-29
11
31
 
12
32
  ### Added
@@ -120,7 +140,8 @@ Major release: subpath exports, dependency upgrades (CASL 7, MJML 5, Valibot 1.4
120
140
 
121
141
  Last 0.x release before the 1.0 breaking changes. Earlier 0.x history is available on [GitHub releases](https://github.com/rolandboon/glasswork/releases).
122
142
 
123
- [Unreleased]: https://github.com/rolandboon/glasswork/compare/v1.2.0...HEAD
143
+ [Unreleased]: https://github.com/rolandboon/glasswork/compare/v1.3.0...HEAD
144
+ [1.3.0]: https://github.com/rolandboon/glasswork/compare/v1.2.0...v1.3.0
124
145
  [1.2.0]: https://github.com/rolandboon/glasswork/compare/v1.1.0...v1.2.0
125
146
  [1.1.0]: https://github.com/rolandboon/glasswork/compare/v1.0.0...v1.1.0
126
147
  [1.0.0]: https://github.com/rolandboon/glasswork/compare/v0.13.3...v1.0.0
@@ -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.
@@ -43,9 +43,9 @@ export declare function defineJob<TSchema extends BaseSchema<unknown, unknown, B
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>>['handler'];
48
- }): JobDefinition<InferInput<TSchema>>;
46
+ unique?: JobDefinition<InferInput<TSchema>, InferOutput<TSchema>>['unique'];
47
+ handler: JobDefinition<InferInput<TSchema>, InferOutput<TSchema>>['handler'];
48
+ }): JobDefinition<InferInput<TSchema>, InferOutput<TSchema>>;
49
49
  export declare function defineJob<TPayload>(config: {
50
50
  name: string;
51
51
  queue?: string;
@@ -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;AACjE,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,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,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtD,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;CACxD,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAEvC,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE;IAC1C,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,CAAC,CAAC,SAAS,CAAC,CAAC;CAC7C,GAAG,aAAa,CAAC,QAAQ,CAAC,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,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,CAAC,CAAC,SAAS,CAAC,CAAC;CAC9E,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAE7D,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE;IAC1C,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,CAAC,CAAC,SAAS,CAAC,CAAC;CAC7C,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-driver.d.ts","sourceRoot":"","sources":["../../../src/jobs/drivers/mock-driver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EAGb,UAAU,EACV,WAAW,EACZ,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,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;IAE1C,YAAY,MAAM,GAAE,qBAA0B,EAI7C;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;IAgChC,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,gBAAgB;YAoBV,aAAa;IAyB3B,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
+ {"version":3,"file":"mock-driver.d.ts","sourceRoot":"","sources":["../../../src/jobs/drivers/mock-driver.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EAGb,UAAU,EACV,WAAW,EACZ,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,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;IAE1C,YAAY,MAAM,GAAE,qBAA0B,EAI7C;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;IAyChC,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,gBAAgB;YAoBV,aAAa;IAyB3B,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 { safeParse } from 'valibot';
2
+ import { InvalidJobPayloadError } from '../errors.js';
1
3
  import { generateJobId } from '../utils.js';
2
4
  /**
3
5
  * In-memory queue driver for testing and local development.
@@ -89,11 +91,19 @@ export class MockQueueDriver {
89
91
  jobId,
90
92
  jobName: message.jobName,
91
93
  });
94
+ let payload = message.payload;
95
+ if (job.schema) {
96
+ const result = safeParse(job.schema, payload);
97
+ if (!result.success) {
98
+ throw new InvalidJobPayloadError(job.name, result.issues);
99
+ }
100
+ payload = result.output;
101
+ }
92
102
  await this.runJobHandler({
93
103
  jobId,
94
104
  jobName: message.jobName,
95
105
  logger,
96
- payload: message.payload,
106
+ payload,
97
107
  handler: job.handler,
98
108
  context,
99
109
  });
@@ -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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"}
@@ -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
@@ -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,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC9E,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,MAAM,aAAa,CAAC"}
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"}
@@ -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
@@ -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,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAwB,MAAM,gBAAgB,CAAC;AAY9E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
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"}
@@ -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,EACpB,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC5B,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,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAgB/F;IAED;;OAEG;IACG,SAAS,CAAC,QAAQ,EACtB,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC5B,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAE,QAAQ,GACd,OAAO,CAAC,aAAa,CAAC,CAyBxB;IAED;;OAEG;IACG,SAAS,CAAC,QAAQ,EACtB,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC5B,OAAO,EAAE,QAAQ,EACjB,EAAE,EAAE,IAAI,GACP,OAAO,CAAC,aAAa,CAAC,CAyBxB;IAED;;OAEG;IACG,YAAY,CAAC,QAAQ,EACzB,IAAI,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;QAAC,OAAO,EAAE,QAAQ,CAAA;KAAE,CAAC,GAC/D,OAAO,CAAC,aAAa,EAAE,CAAC,CAE1B;IAED,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,QAAQ;CAMjB"}
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"}
@@ -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":"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"}
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 structured AWS CloudWatch Embedded Metric Format (EMF) record for a background job.
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 an EMF metric to stdout or a configured sink.
15
- *
16
- * When emitted to stdout within an AWS Lambda environment, AWS CloudWatch Logs automatically
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;AAE/F;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,CAAC,EAAE,gBAAgB,GACxB,kBAAkB,CAyEpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,sBAAsB,EAC5B,MAAM,CAAC,EAAE,gBAAgB,GACxB,kBAAkB,GAAG,IAAI,CAgB3B"}
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"}
@@ -1,100 +1,120 @@
1
- import { isTest } from '../../utils/environment.js';
1
+ import { isLambda, isTest } from '../../utils/environment.js';
2
+ const RESERVED_FIELDS = new Set([
3
+ '_aws',
4
+ 'JobName',
5
+ 'Status',
6
+ 'JobId',
7
+ 'AttemptNumber',
8
+ 'JobCount',
9
+ 'JobDuration',
10
+ 'JobErrorCount',
11
+ 'RetryCount',
12
+ 'DeadLetterCount',
13
+ 'QueueWaitTime',
14
+ 'FunctionName',
15
+ ]);
2
16
  /**
3
- * Build a structured AWS CloudWatch Embedded Metric Format (EMF) record for a background job.
4
- *
5
- * Conforms to the AWS CloudWatch EMF specification:
17
+ * Build a CloudWatch EMF document without an SDK dependency or network request.
18
+ * Each attempt contributes one sample; identifiers and status remain searchable log fields.
6
19
  * 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
20
  */
12
21
  export function createEMFJobMetric(data, config) {
13
22
  const namespace = config?.namespace ?? 'Glasswork/Jobs';
14
- const customDimensions = {
15
- ...(config?.dimensions ?? {}),
16
- ...(data.customDimensions ?? {}),
17
- };
18
- const customDimensionKeys = Object.keys(customDimensions);
19
- // Standard dimension sets:
20
- // 1. [JobName]
21
- // 2. [JobName, Status]
22
- // 3. [Status]
23
- // If custom dimensions exist, they are appended to each dimension set for granular filtering.
24
- const baseDimensionSets = [['JobName'], ['JobName', 'Status'], ['Status']];
25
- const dimensionSets = customDimensionKeys.length > 0
26
- ? baseDimensionSets.map((set) => [...set, ...customDimensionKeys])
27
- : baseDimensionSets;
23
+ const dimensions = { ...config?.dimensions };
24
+ validateDimensions(dimensions);
25
+ validateMetricData(data);
26
+ if (!isMetricString(namespace, 255) ||
27
+ namespace.startsWith(':') ||
28
+ namespace.startsWith('AWS/')) {
29
+ throw new Error('Job metrics namespace must contain 1-255 characters outside AWS/');
30
+ }
31
+ const functionName = process.env.AWS_LAMBDA_FUNCTION_NAME;
32
+ if (functionName && !isMetricString(functionName, 1024)) {
33
+ throw new Error('Job metric function names must contain 1-1024 printable ASCII characters');
34
+ }
35
+ const dimensionValues = functionName ? { ...dimensions, FunctionName: functionName } : dimensions;
36
+ const dimensionKeys = Object.keys(dimensionValues);
37
+ if (dimensionKeys.length + 1 > 30) {
38
+ throw new Error('Job metrics support at most 30 dimensions including FunctionName and JobName');
39
+ }
28
40
  const queueWaitTime = data.enqueuedAt
29
- ? Math.max(0, data.startedAt.getTime() - data.enqueuedAt.getTime())
41
+ ? data.startedAt.getTime() - data.enqueuedAt.getTime()
30
42
  : undefined;
31
- const retryCount = Math.max(0, data.attemptNumber - 1);
32
- const isError = data.status !== 'success';
33
- const metrics = [
34
- { Name: 'JobCount', Unit: 'Count' },
35
- { Name: 'JobDuration', Unit: 'Milliseconds' },
36
- { Name: 'JobErrorCount', Unit: 'Count' },
37
- { Name: 'RetryCount', Unit: 'Count' },
38
- ];
39
- if (queueWaitTime !== undefined) {
40
- metrics.push({ Name: 'QueueWaitTime', Unit: 'Milliseconds' });
41
- }
42
- const record = {
43
+ const metric = {
43
44
  _aws: {
44
45
  Timestamp: Date.now(),
45
46
  CloudWatchMetrics: [
46
47
  {
47
48
  Namespace: namespace,
48
- Dimensions: dimensionSets,
49
- Metrics: metrics,
49
+ Dimensions: [dimensionKeys, [...dimensionKeys, 'JobName']],
50
+ Metrics: [
51
+ { Name: 'JobCount', Unit: 'Count' },
52
+ { Name: 'JobDuration', Unit: 'Milliseconds' },
53
+ { Name: 'JobErrorCount', Unit: 'Count' },
54
+ { Name: 'RetryCount', Unit: 'Count' },
55
+ { Name: 'DeadLetterCount', Unit: 'Count' },
56
+ ],
50
57
  },
51
58
  ],
52
59
  },
60
+ ...dimensionValues,
53
61
  JobName: data.jobName,
54
62
  Status: data.status,
55
63
  JobId: data.jobId,
56
64
  AttemptNumber: data.attemptNumber,
57
65
  JobCount: 1,
58
66
  JobDuration: data.durationMs,
59
- JobErrorCount: isError ? 1 : 0,
60
- RetryCount: retryCount,
61
- ...customDimensions,
67
+ JobErrorCount: data.status === 'success' ? 0 : 1,
68
+ RetryCount: data.attemptNumber > 1 ? 1 : 0,
69
+ DeadLetterCount: data.status === 'dead_letter' ? 1 : 0,
62
70
  };
63
- if (queueWaitTime !== undefined) {
64
- record.QueueWaitTime = queueWaitTime;
65
- }
66
- if (data.error) {
67
- record.ErrorName = data.error.name || 'Error';
68
- record.ErrorMessage = data.error.message;
69
- if (data.error.stack) {
70
- record.ErrorStack = data.error.stack;
71
- }
71
+ // Invalid or absent producer timestamps must not create null/NaN metric targets.
72
+ if (queueWaitTime !== undefined && Number.isFinite(queueWaitTime)) {
73
+ metric.QueueWaitTime = Math.max(0, queueWaitTime);
74
+ metric._aws.CloudWatchMetrics[0].Metrics.push({ Name: 'QueueWaitTime', Unit: 'Milliseconds' });
72
75
  }
73
- return record;
76
+ return metric;
74
77
  }
75
78
  /**
76
- * Emit an EMF metric to stdout or a configured sink.
77
- *
78
- * When emitted to stdout within an AWS Lambda environment, AWS CloudWatch Logs automatically
79
- * extracts these metrics into CloudWatch Metrics with zero API overhead and zero latency.
80
- *
81
- * @param data - Execution metrics for the job.
82
- * @param config - Optional configuration for namespace, dimensions, or custom sink.
83
- * @returns The generated record or null if metrics are disabled.
79
+ * Emit one raw EMF JSON document. Lambda's console wrappers and application loggers can
80
+ * nest or prefix JSON and prevent metric extraction, so the default sink writes to stdout.
81
+ * Direct calls may throw; bootstrapWorker isolates telemetry failures from job processing.
84
82
  */
85
83
  export function emitJobMetric(data, config) {
86
- const isEnabled = config?.enabled ?? (config?.sink !== undefined || !isTest());
87
- if (!isEnabled) {
84
+ const enabled = config?.enabled ?? (config?.sink !== undefined || (isLambda() && !isTest()));
85
+ if (!enabled)
88
86
  return null;
89
- }
90
- const record = createEMFJobMetric(data, config);
91
- const json = JSON.stringify(record);
92
- if (config?.sink) {
87
+ const metric = createEMFJobMetric(data, config);
88
+ const json = JSON.stringify(metric);
89
+ if (config?.sink)
93
90
  config.sink(json);
91
+ else
92
+ process.stdout.write(`${json}\n`);
93
+ return metric;
94
+ }
95
+ function validateMetricData(data) {
96
+ if (!isMetricString(data.jobName, 1024)) {
97
+ throw new Error('Job metric names must contain 1-1024 printable ASCII characters');
98
+ }
99
+ if (!Number.isFinite(data.durationMs) || data.durationMs < 0) {
100
+ throw new Error('Job duration must be a finite, non-negative number');
94
101
  }
95
- else {
96
- console.log(json);
102
+ if (!Number.isSafeInteger(data.attemptNumber) || data.attemptNumber < 1) {
103
+ throw new Error('Job attempt number must be a positive safe integer');
97
104
  }
98
- return record;
105
+ }
106
+ function validateDimensions(dimensions) {
107
+ for (const [name, value] of Object.entries(dimensions)) {
108
+ if (!isMetricString(name, 250) || name.startsWith(':') || RESERVED_FIELDS.has(name)) {
109
+ throw new Error('Job metric dimensions must have unique, non-reserved names of 1-250 characters');
110
+ }
111
+ if (!isMetricString(value, 1024)) {
112
+ throw new Error('Job metric dimension values must contain 1-1024 characters');
113
+ }
114
+ }
115
+ }
116
+ /** CloudWatch identities allow printable ASCII, with at least one non-whitespace character. */
117
+ function isMetricString(value, maxLength) {
118
+ return value.trim().length > 0 && value.length <= maxLength && /^[\x20-\x7e]+$/.test(value);
99
119
  }
100
120
  //# sourceMappingURL=emf.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"emf.js","sourceRoot":"","sources":["../../../src/jobs/observability/emf.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emf.js","sourceRoot":"","sources":["../../../src/jobs/observability/emf.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,3 @@
1
- export { createJobsObservabilityClient, type JobsObservabilityClient, } from './client.js';
2
- export { generateJobsDashboard, getJobsInsightsQueries, } from './dashboard.js';
3
- export { createEMFJobMetric, emitJobMetric, } from './emf.js';
4
- export type { CloudWatchDashboardDefinition, EMFJobMetricRecord, EMFMetadata, EMFMetricUnit, FailedJobDTO, GenerateJobsDashboardOptions, GetFailedJobsOptions, GetJobSummaryOptions, GetJobsInsightsQueriesOptions, JobExecutionMetricData, JobExecutionStatus, JobMetricsConfig, JobStatsSummaryDTO, JobsInsightsQueries, JobsObservabilityClientOptions, JobTypeStatsDTO, } from './types.js';
1
+ export { createEMFJobMetric, emitJobMetric } from './emf.js';
2
+ export type { EMFJobMetricRecord, EMFMetadata, EMFMetricUnit, JobExecutionMetricData, JobExecutionStatus, JobMetricsConfig, } from './types.js';
5
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jobs/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,kBAAkB,EAClB,aAAa,GACd,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,6BAA6B,EAC7B,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,4BAA4B,EAC5B,oBAAoB,EACpB,oBAAoB,EACpB,6BAA6B,EAC7B,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,8BAA8B,EAC9B,eAAe,GAChB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jobs/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
@@ -1,4 +1,2 @@
1
- export { createJobsObservabilityClient, } from './client.js';
2
- export { generateJobsDashboard, getJobsInsightsQueries, } from './dashboard.js';
3
- export { createEMFJobMetric, emitJobMetric, } from './emf.js';
1
+ export { createEMFJobMetric, emitJobMetric } from './emf.js';
4
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/jobs/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,GAE9B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,kBAAkB,EAClB,aAAa,GACd,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/jobs/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}