@empire-builder-kit/runtime 1.0.0-beta.8 → 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/NOTICE +6 -0
  2. package/package.json +93 -3
  3. package/src/api-contract/artifacts.d.ts +67 -0
  4. package/src/api-contract/artifacts.js +349 -0
  5. package/src/api-contract/artifacts.js.map +1 -0
  6. package/src/api-contract/client.d.ts +79 -0
  7. package/src/api-contract/client.js +561 -0
  8. package/src/api-contract/client.js.map +1 -0
  9. package/src/api-contract/errors.d.ts +7 -0
  10. package/src/api-contract/errors.js +11 -0
  11. package/src/api-contract/errors.js.map +1 -0
  12. package/src/api-contract/index.d.ts +9 -0
  13. package/src/api-contract/index.js +10 -0
  14. package/src/api-contract/index.js.map +1 -0
  15. package/src/api-contract/operation.d.ts +118 -0
  16. package/src/api-contract/operation.js +609 -0
  17. package/src/api-contract/operation.js.map +1 -0
  18. package/src/api-contract/schema.d.ts +81 -0
  19. package/src/api-contract/schema.js +313 -0
  20. package/src/api-contract/schema.js.map +1 -0
  21. package/src/api-contract/server.d.ts +77 -0
  22. package/src/api-contract/server.js +466 -0
  23. package/src/api-contract/server.js.map +1 -0
  24. package/src/async-work/contract.d.ts +17 -0
  25. package/src/async-work/contract.js +105 -0
  26. package/src/async-work/contract.js.map +1 -0
  27. package/src/async-work/idempotency.d.ts +123 -0
  28. package/src/async-work/idempotency.js +167 -0
  29. package/src/async-work/idempotency.js.map +1 -0
  30. package/src/async-work/index.d.ts +8 -0
  31. package/src/async-work/index.js +9 -0
  32. package/src/async-work/index.js.map +1 -0
  33. package/src/async-work/provider.d.ts +90 -0
  34. package/src/async-work/provider.js +155 -0
  35. package/src/async-work/provider.js.map +1 -0
  36. package/src/async-work/recovery.d.ts +103 -0
  37. package/src/async-work/recovery.js +291 -0
  38. package/src/async-work/recovery.js.map +1 -0
  39. package/src/async-work/schedule.d.ts +117 -0
  40. package/src/async-work/schedule.js +279 -0
  41. package/src/async-work/schedule.js.map +1 -0
  42. package/src/async-work/sqs.d.ts +133 -0
  43. package/src/async-work/sqs.js +280 -0
  44. package/src/async-work/sqs.js.map +1 -0
  45. package/src/async-work/webhook.d.ts +60 -0
  46. package/src/async-work/webhook.js +178 -0
  47. package/src/async-work/webhook.js.map +1 -0
  48. package/src/async-work/workflow.d.ts +98 -0
  49. package/src/async-work/workflow.js +225 -0
  50. package/src/async-work/workflow.js.map +1 -0
  51. package/src/auth-backend.d.ts +12 -2
  52. package/src/auth-backend.js +30 -18
  53. package/src/auth-backend.js.map +1 -1
  54. package/src/authorization/admission.d.ts +30 -0
  55. package/src/authorization/admission.js +87 -0
  56. package/src/authorization/admission.js.map +1 -0
  57. package/src/authorization/approval.d.ts +99 -0
  58. package/src/authorization/approval.js +249 -0
  59. package/src/authorization/approval.js.map +1 -0
  60. package/src/authorization/audit.d.ts +35 -0
  61. package/src/authorization/audit.js +35 -0
  62. package/src/authorization/audit.js.map +1 -0
  63. package/src/authorization/delegation.d.ts +149 -0
  64. package/src/authorization/delegation.js +401 -0
  65. package/src/authorization/delegation.js.map +1 -0
  66. package/src/authorization/errors.d.ts +32 -0
  67. package/src/authorization/errors.js +153 -0
  68. package/src/authorization/errors.js.map +1 -0
  69. package/src/authorization/evaluator.d.ts +39 -0
  70. package/src/authorization/evaluator.js +199 -0
  71. package/src/authorization/evaluator.js.map +1 -0
  72. package/src/authorization/index.d.ts +14 -0
  73. package/src/authorization/index.js +15 -0
  74. package/src/authorization/index.js.map +1 -0
  75. package/src/authorization/machine-token.d.ts +87 -0
  76. package/src/authorization/machine-token.js +201 -0
  77. package/src/authorization/machine-token.js.map +1 -0
  78. package/src/authorization/machine.d.ts +32 -0
  79. package/src/authorization/machine.js +41 -0
  80. package/src/authorization/machine.js.map +1 -0
  81. package/src/authorization/model.d.ts +112 -0
  82. package/src/authorization/model.js +112 -0
  83. package/src/authorization/model.js.map +1 -0
  84. package/src/canonical-json.cjs +157 -0
  85. package/src/canonical-json.d.cts +26 -0
  86. package/src/canonical-json.d.ts +18 -0
  87. package/src/canonical-json.js +125 -0
  88. package/src/canonical-json.js.map +1 -0
  89. package/src/configuration/contract.d.ts +107 -0
  90. package/src/configuration/contract.js +461 -0
  91. package/src/configuration/contract.js.map +1 -0
  92. package/src/configuration/index.d.ts +3 -0
  93. package/src/configuration/index.js +4 -0
  94. package/src/configuration/index.js.map +1 -0
  95. package/src/configuration/provider.d.ts +59 -0
  96. package/src/configuration/provider.js +198 -0
  97. package/src/configuration/provider.js.map +1 -0
  98. package/src/configuration/rollout-evaluator.cjs +54 -0
  99. package/src/configuration/rollout-evaluator.d.cts +26 -0
  100. package/src/configuration/rollout-evaluator.d.ts +18 -0
  101. package/src/configuration/rollout-evaluator.js +38 -0
  102. package/src/configuration/rollout-evaluator.js.map +1 -0
  103. package/src/configuration/rollout-key.cjs +38 -0
  104. package/src/configuration/rollout-key.d.cts +14 -0
  105. package/src/configuration/rollout-key.d.ts +10 -0
  106. package/src/configuration/rollout-key.js +26 -0
  107. package/src/configuration/rollout-key.js.map +1 -0
  108. package/src/configuration/rollout.d.ts +60 -0
  109. package/src/configuration/rollout.js +42 -0
  110. package/src/configuration/rollout.js.map +1 -0
  111. package/src/data-lifecycle/contract.d.ts +33 -0
  112. package/src/data-lifecycle/contract.js +118 -0
  113. package/src/data-lifecycle/contract.js.map +1 -0
  114. package/src/data-lifecycle/event.d.ts +28 -0
  115. package/src/data-lifecycle/event.js +76 -0
  116. package/src/data-lifecycle/event.js.map +1 -0
  117. package/src/data-lifecycle/evidence.d.ts +65 -0
  118. package/src/data-lifecycle/evidence.js +162 -0
  119. package/src/data-lifecycle/evidence.js.map +1 -0
  120. package/src/data-lifecycle/holds.d.ts +29 -0
  121. package/src/data-lifecycle/holds.js +124 -0
  122. package/src/data-lifecycle/holds.js.map +1 -0
  123. package/src/data-lifecycle/index.d.ts +8 -0
  124. package/src/data-lifecycle/index.js +9 -0
  125. package/src/data-lifecycle/index.js.map +1 -0
  126. package/src/data-lifecycle/policy.d.ts +16 -0
  127. package/src/data-lifecycle/policy.js +79 -0
  128. package/src/data-lifecycle/policy.js.map +1 -0
  129. package/src/data-lifecycle/restore.d.ts +90 -0
  130. package/src/data-lifecycle/restore.js +336 -0
  131. package/src/data-lifecycle/restore.js.map +1 -0
  132. package/src/data-lifecycle/retention.d.ts +57 -0
  133. package/src/data-lifecycle/retention.js +232 -0
  134. package/src/data-lifecycle/retention.js.map +1 -0
  135. package/src/data-lifecycle/rights.d.ts +171 -0
  136. package/src/data-lifecycle/rights.js +533 -0
  137. package/src/data-lifecycle/rights.js.map +1 -0
  138. package/src/database.d.ts +36 -0
  139. package/src/database.js +119 -0
  140. package/src/database.js.map +1 -0
  141. package/src/deterministic-order.cjs +16 -0
  142. package/src/deterministic-order.d.cts +9 -0
  143. package/src/deterministic-order.d.ts +7 -0
  144. package/src/deterministic-order.js +10 -0
  145. package/src/deterministic-order.js.map +1 -0
  146. package/src/events.d.ts +28 -19
  147. package/src/events.js +171 -66
  148. package/src/events.js.map +1 -1
  149. package/src/index.d.ts +7 -1
  150. package/src/index.js +24 -0
  151. package/src/index.js.map +1 -1
  152. package/src/lambda.d.ts +8 -2
  153. package/src/lambda.js +100 -39
  154. package/src/lambda.js.map +1 -1
  155. package/src/logging.d.ts +95 -36
  156. package/src/logging.js +460 -62
  157. package/src/logging.js.map +1 -1
  158. package/src/observability.d.ts +80 -18
  159. package/src/observability.js +252 -61
  160. package/src/observability.js.map +1 -1
  161. package/src/performance/index.d.ts +1 -0
  162. package/src/performance/index.js +2 -0
  163. package/src/performance/index.js.map +1 -0
  164. package/src/performance/protected-load-endpoint.d.ts +140 -0
  165. package/src/performance/protected-load-endpoint.js +462 -0
  166. package/src/performance/protected-load-endpoint.js.map +1 -0
  167. package/src/rds-global-ca-bundle.d.ts +1 -0
  168. package/src/rds-global-ca-bundle.js +2742 -0
  169. package/src/rds-global-ca-bundle.js.map +1 -0
  170. package/src/reliability/burn.d.ts +39 -0
  171. package/src/reliability/burn.js +102 -0
  172. package/src/reliability/burn.js.map +1 -0
  173. package/src/reliability/contract.d.ts +5 -0
  174. package/src/reliability/contract.js +317 -0
  175. package/src/reliability/contract.js.map +1 -0
  176. package/src/reliability/incident.d.ts +16 -0
  177. package/src/reliability/incident.js +562 -0
  178. package/src/reliability/incident.js.map +1 -0
  179. package/src/reliability/index.d.ts +5 -0
  180. package/src/reliability/index.js +6 -0
  181. package/src/reliability/index.js.map +1 -0
  182. package/src/reliability/model.d.ts +191 -0
  183. package/src/reliability/model.fixtures.d.ts +2 -0
  184. package/src/reliability/model.fixtures.js +57 -0
  185. package/src/reliability/model.fixtures.js.map +1 -0
  186. package/src/reliability/model.js +2 -0
  187. package/src/reliability/model.js.map +1 -0
  188. package/src/reliability/slo.d.ts +9 -0
  189. package/src/reliability/slo.js +74 -0
  190. package/src/reliability/slo.js.map +1 -0
  191. package/src/request-context.d.ts +57 -15
  192. package/src/request-context.js +116 -36
  193. package/src/request-context.js.map +1 -1
  194. package/src/safe-reference.cjs +57 -0
  195. package/src/safe-reference.d.cts +25 -0
  196. package/src/safe-reference.d.ts +11 -0
  197. package/src/safe-reference.js +46 -0
  198. package/src/safe-reference.js.map +1 -0
  199. package/src/secrets/contract.d.ts +99 -0
  200. package/src/secrets/contract.js +238 -0
  201. package/src/secrets/contract.js.map +1 -0
  202. package/src/secrets/index.d.ts +4 -0
  203. package/src/secrets/index.js +5 -0
  204. package/src/secrets/index.js.map +1 -0
  205. package/src/secrets/observability.d.ts +14 -0
  206. package/src/secrets/observability.js +100 -0
  207. package/src/secrets/observability.js.map +1 -0
  208. package/src/secrets/personal.d.ts +48 -0
  209. package/src/secrets/personal.js +332 -0
  210. package/src/secrets/personal.js.map +1 -0
  211. package/src/secrets/resolver.d.ts +125 -0
  212. package/src/secrets/resolver.js +602 -0
  213. package/src/secrets/resolver.js.map +1 -0
  214. package/src/secrets/sensitive-patterns.cjs +84 -0
  215. package/src/secrets/sensitive-patterns.d.cts +62 -0
  216. package/src/secrets/sensitive-patterns.d.ts +40 -0
  217. package/src/secrets/sensitive-patterns.js +60 -0
  218. package/src/secrets/sensitive-patterns.js.map +1 -0
@@ -0,0 +1,119 @@
1
+ import { __awaiter } from "tslib";
2
+ import { RDS_GLOBAL_CA_BUNDLE } from './rds-global-ca-bundle.js';
3
+ import { secret, } from './secrets/contract.js';
4
+ export function databaseTlsOptions(resource) {
5
+ if (resource.provider === 'local')
6
+ return false;
7
+ if (resource.provider === 'aws-secrets-manager') {
8
+ return {
9
+ ca: RDS_GLOBAL_CA_BUNDLE,
10
+ rejectUnauthorized: true,
11
+ };
12
+ }
13
+ throw new Error('Unsupported linked database credential provider.');
14
+ }
15
+ function requireString(value, field) {
16
+ if (typeof value !== 'string' || value.trim() === '') {
17
+ throw new Error(`Database credential ${field} must be a non-empty string.`);
18
+ }
19
+ return value;
20
+ }
21
+ function requirePort(value) {
22
+ if (typeof value !== 'number' ||
23
+ !Number.isSafeInteger(value) ||
24
+ value < 1 ||
25
+ value > 65535) {
26
+ throw new Error('Database credential port must be from 1 through 65535.');
27
+ }
28
+ return value;
29
+ }
30
+ function requireSecretArn(value) {
31
+ if (typeof value !== 'string' || value.trim() === '') {
32
+ throw new Error('Linked database credential secretArn must be a non-empty string.');
33
+ }
34
+ return value;
35
+ }
36
+ function parseCredential(value) {
37
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
38
+ throw new Error('Database credential secret must contain a JSON object.');
39
+ }
40
+ const fields = value;
41
+ return {
42
+ database: requireString(fields['database'], 'database'),
43
+ host: requireString(fields['host'], 'host'),
44
+ password: requireString(fields['password'], 'password'),
45
+ port: requirePort(fields['port']),
46
+ username: requireString(fields['username'], 'username'),
47
+ };
48
+ }
49
+ export const databaseCredentialSecretSchema = secret.json({
50
+ validate(value) {
51
+ try {
52
+ parseCredential(value);
53
+ return true;
54
+ }
55
+ catch (_a) {
56
+ return false;
57
+ }
58
+ },
59
+ });
60
+ function assertReferenceMatches(resource, credential) {
61
+ for (const field of ['database', 'host', 'port', 'username']) {
62
+ if (credential[field] !== resource[field]) {
63
+ throw new Error(`Database credential ${field} does not match its linked reference.`);
64
+ }
65
+ }
66
+ }
67
+ export function resolveDatabaseCredential(resource, options) {
68
+ return __awaiter(this, void 0, void 0, function* () {
69
+ if (resource.provider === 'local') {
70
+ return {
71
+ database: requireString(resource.database, 'database'),
72
+ host: requireString(resource.host, 'host'),
73
+ password: requireString(resource.password, 'password'),
74
+ port: requirePort(resource.port),
75
+ username: requireString(resource.username, 'username'),
76
+ };
77
+ }
78
+ if (resource.provider !== 'aws-secrets-manager') {
79
+ throw new Error('Unsupported linked database credential provider.');
80
+ }
81
+ if (options === undefined) {
82
+ throw new Error('A server secret resolver and declared database credential are required.');
83
+ }
84
+ const credential = parseCredential(yield options.resolver.get(options.declaration, {
85
+ logicalName: resource.logicalName,
86
+ provider: 'aws-secrets-manager',
87
+ secretArn: requireSecretArn(resource.secretArn),
88
+ }, options.context));
89
+ assertReferenceMatches(resource, credential);
90
+ return credential;
91
+ });
92
+ }
93
+ export function runWithDatabaseCredential(resource, options, operation, isAuthenticationFailure) {
94
+ return __awaiter(this, void 0, void 0, function* () {
95
+ if (resource.provider === 'local') {
96
+ return operation(yield resolveDatabaseCredential(resource));
97
+ }
98
+ if (options === undefined) {
99
+ throw new Error('A server secret resolver and declared database credential are required.');
100
+ }
101
+ return options.resolver.runWithSecret({
102
+ context: options.context,
103
+ declaration: options.declaration,
104
+ isAuthenticationFailure,
105
+ operation: (value) => __awaiter(this, void 0, void 0, function* () {
106
+ const credential = parseCredential(value);
107
+ assertReferenceMatches(resource, credential);
108
+ return operation(credential);
109
+ }),
110
+ reference: {
111
+ logicalName: resource.logicalName,
112
+ provider: 'aws-secrets-manager',
113
+ secretArn: requireSecretArn(resource.secretArn),
114
+ },
115
+ });
116
+ });
117
+ }
118
+ export { RDS_GLOBAL_CA_BUNDLE } from './rds-global-ca-bundle.js';
119
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../../../packages/runtime/src/database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ // @generated from packages/runtime/src/deterministic-order.ts by tools/runtime/generate-shared-authorities.mjs
2
+ // Do not edit this artifact directly.
3
+ 'use strict';
4
+ Object.defineProperty(exports, '__esModule', { value: true });
5
+ exports.compareUtf16 = compareUtf16;
6
+ /**
7
+ * Compares strings by literal ECMAScript UTF-16 code-unit order.
8
+ *
9
+ * This ESM source entry must remain directly loadable by generator runners;
10
+ * the CommonJS package entry is held to the same behavior by the parity spec.
11
+ */
12
+ function compareUtf16(left, right) {
13
+ return left < right ? -1 : left > right ? 1 : 0;
14
+ }
15
+
16
+ Object.freeze(module.exports);
@@ -0,0 +1,9 @@
1
+ // @generated from packages/runtime/src/deterministic-order.ts by tools/runtime/generate-shared-authorities.mjs
2
+ // Do not edit this artifact directly.
3
+ /**
4
+ * Compares strings by literal ECMAScript UTF-16 code-unit order.
5
+ *
6
+ * This ESM source entry must remain directly loadable by generator runners;
7
+ * the CommonJS package entry is held to the same behavior by the parity spec.
8
+ */
9
+ export declare function compareUtf16(left: string, right: string): number;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Compares strings by literal ECMAScript UTF-16 code-unit order.
3
+ *
4
+ * This ESM source entry must remain directly loadable by generator runners;
5
+ * the CommonJS package entry is held to the same behavior by the parity spec.
6
+ */
7
+ export declare function compareUtf16(left: string, right: string): number;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Compares strings by literal ECMAScript UTF-16 code-unit order.
3
+ *
4
+ * This ESM source entry must remain directly loadable by generator runners;
5
+ * the CommonJS package entry is held to the same behavior by the parity spec.
6
+ */
7
+ export function compareUtf16(left, right) {
8
+ return left < right ? -1 : left > right ? 1 : 0;
9
+ }
10
+ //# sourceMappingURL=deterministic-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deterministic-order.js","sourceRoot":"","sources":["../../../../packages/runtime/src/deterministic-order.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,KAAa;IACtD,OAAO,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC"}
package/src/events.d.ts CHANGED
@@ -1,39 +1,43 @@
1
- import type { RequestActor, RequestContext } from './request-context.js';
1
+ import { type RequestActor, type RequestContext, type RuntimeContext } from './request-context.js';
2
+ export declare const EVENT_ENVELOPE_VERSION: 2;
3
+ export declare const MAX_EVENT_ENTRY_BYTES: number;
2
4
  export interface EventContractRef {
3
5
  readonly source: string;
4
6
  readonly detailType: string;
5
7
  readonly schemaVersion: number;
6
8
  }
7
9
  export interface EventEnvelopeMeta {
10
+ actor?: RequestActor;
11
+ causationId?: string;
12
+ correlationId: string;
13
+ envelopeVersion: typeof EVENT_ENVELOPE_VERSION;
8
14
  eventId: string;
9
- schemaVersion: number;
10
15
  occurredAt: string;
11
- app: string;
16
+ schemaVersion: number;
17
+ slice: string;
12
18
  stage: string;
13
- correlationId: string;
14
- causationId?: string;
15
- actor?: RequestActor;
16
19
  tenantId?: string;
17
20
  traceParent?: string;
18
21
  traceState?: string;
19
22
  }
20
23
  export interface EventEnvelope<TData = unknown> {
21
- meta: EventEnvelopeMeta;
22
24
  data: TData;
25
+ meta: EventEnvelopeMeta;
23
26
  }
24
27
  export interface PublishableEventEntry {
28
+ detail: string;
29
+ detailType: string;
25
30
  eventBusName: string;
26
31
  source: string;
27
- detailType: string;
28
- detail: string;
29
32
  }
33
+ type EventPropagationContext = Pick<RequestContext, 'actor' | 'causationId' | 'correlationId' | 'eventId' | 'requestId' | 'tenantId' | 'traceParent' | 'traceState'>;
30
34
  export interface BuildEventEntryOptions {
31
- busName: string;
32
- stage: string;
33
- context?: Pick<RequestContext, 'actor' | 'correlationId' | 'requestId' | 'tenantId' | 'traceParent' | 'traceState'>;
34
35
  actor?: RequestActor;
36
+ busName: string;
37
+ context?: Partial<EventPropagationContext>;
35
38
  eventId?: string;
36
39
  occurredAt?: string;
40
+ stage: string;
37
41
  }
38
42
  export interface BuiltEventEntry<TData = unknown> {
39
43
  entry: PublishableEventEntry;
@@ -42,33 +46,38 @@ export interface BuiltEventEntry<TData = unknown> {
42
46
  export declare function buildEventEntry<TData>(contract: EventContractRef, data: TData, options: BuildEventEntryOptions): BuiltEventEntry<TData>;
43
47
  export interface EventPublisherOptions {
44
48
  busName: string;
45
- stage: string;
46
49
  send: (entry: PublishableEventEntry) => Promise<unknown>;
50
+ stage: string;
47
51
  }
48
52
  export interface PublishEventOptions {
49
- context?: Pick<RequestContext, 'actor' | 'correlationId' | 'requestId' | 'tenantId' | 'traceParent' | 'traceState'>;
50
53
  actor?: RequestActor;
54
+ context?: Partial<EventPropagationContext>;
51
55
  }
52
56
  export type EventPublisher = <TData>(contract: EventContractRef, data: TData, options?: PublishEventOptions) => Promise<EventEnvelope<TData>>;
53
57
  export declare function createEventPublisher(options: EventPublisherOptions): EventPublisher;
54
58
  export declare function parseEventEnvelope<TData = unknown>(detail: unknown): EventEnvelope<TData>;
55
59
  export interface SqsRecordLike {
56
- messageId?: string;
57
60
  body: string;
61
+ messageId?: string;
58
62
  }
59
63
  export interface ParsedEventRecord<TData = unknown> {
60
- messageId?: string;
61
- source: string;
62
64
  detailType: string;
63
65
  envelope: EventEnvelope<TData>;
66
+ messageId?: string;
67
+ source: string;
64
68
  }
65
69
  export interface FailedEventRecord {
66
- messageId?: string;
67
70
  error: string;
71
+ messageId?: string;
68
72
  }
69
73
  export interface ParsedEventBatch<TData = unknown> {
70
74
  events: ParsedEventRecord<TData>[];
71
75
  failures: FailedEventRecord[];
72
76
  }
73
77
  export declare function parseSqsEventBridgeRecords<TData = unknown>(records: readonly SqsRecordLike[]): ParsedEventBatch<TData>;
74
- export declare function toEventLogMetadata(meta: EventEnvelopeMeta): Record<string, string | number>;
78
+ /**
79
+ * Converts validated event identity into the same top-level context consumed
80
+ * by the logger. Event data, actor, and tenant identity are never projected.
81
+ */
82
+ export declare function toEventLogContext(meta: EventEnvelopeMeta, eventType: string): RuntimeContext;
83
+ export {};
package/src/events.js CHANGED
@@ -1,120 +1,207 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { randomUUID } from 'node:crypto';
3
- // EventBridge caps a PutEvents entry at 256 KB. We guard below the hard limit
4
- // so envelope overhead never turns a passing payload into a runtime failure.
5
- const MAX_EVENT_ENTRY_BYTES = 256 * 1024;
3
+ import { createConsumerContext, normalizeEventType, normalizePropagationId, normalizeTraceParent, normalizeTraceState, } from './request-context.js';
4
+ export const EVENT_ENVELOPE_VERSION = 2;
5
+ // EventBridge caps a PutEvents entry at 256 KB. Guard below the hard limit so
6
+ // envelope overhead never turns a passing payload into a runtime failure.
7
+ export const MAX_EVENT_ENTRY_BYTES = 256 * 1024;
8
+ function hasControlCharacter(value) {
9
+ return [...value].some((character) => {
10
+ const code = character.charCodeAt(0);
11
+ return code <= 31 || code === 127;
12
+ });
13
+ }
14
+ function assertNonEmpty(value, field, maximumLength = 128) {
15
+ const normalized = value === null || value === void 0 ? void 0 : value.trim();
16
+ if (!normalized ||
17
+ normalized.length > maximumLength ||
18
+ hasControlCharacter(normalized)) {
19
+ throw new Error(`[runtime/events] \`${field}\` is required.`);
20
+ }
21
+ return normalized;
22
+ }
6
23
  function assertContract(contract) {
7
24
  var _a, _b;
8
25
  if (!((_a = contract.source) === null || _a === void 0 ? void 0 : _a.trim())) {
9
- throw new Error('[runtime/events] Event contract is missing a non-empty `source` (the publishing app group).');
26
+ throw new Error('[runtime/events] Event contract is missing a non-empty `source` (the publishing Slice).');
10
27
  }
28
+ assertNonEmpty(contract.source, 'source');
11
29
  if (!((_b = contract.detailType) === null || _b === void 0 ? void 0 : _b.trim())) {
12
30
  throw new Error('[runtime/events] Event contract is missing a non-empty `detailType`.');
13
31
  }
32
+ if (!normalizeEventType(contract.detailType)) {
33
+ throw new Error('[runtime/events] Event contract `detailType` must be a stable event identifier.');
34
+ }
14
35
  if (!Number.isInteger(contract.schemaVersion) || contract.schemaVersion < 1) {
15
36
  throw new Error('[runtime/events] Event contract `schemaVersion` must be a positive integer.');
16
37
  }
17
38
  }
18
- // Builds a validated envelope + PutEvents entry for the shared core bus.
19
- // Pure no AWS calls — so publishers and tests share the exact same path.
39
+ function assertOccurredAt(value) {
40
+ if (value.trim() !== value ||
41
+ value === '' ||
42
+ Number.isNaN(new Date(value).getTime()) ||
43
+ /[\r\n]/.test(value)) {
44
+ throw new Error('[runtime/events] Event envelope `occurredAt` must be an RFC 3339 timestamp.');
45
+ }
46
+ return value;
47
+ }
48
+ function assertActor(actor) {
49
+ if (actor === undefined) {
50
+ return undefined;
51
+ }
52
+ if (typeof actor !== 'object' || Array.isArray(actor)) {
53
+ throw new Error('[runtime/events] Event envelope actor must be an object.');
54
+ }
55
+ const candidate = actor;
56
+ if (typeof candidate.type !== 'string' ||
57
+ !['service', 'system', 'user'].includes(candidate.type)) {
58
+ throw new Error('[runtime/events] Event envelope actor.type is unsupported.');
59
+ }
60
+ if (candidate.id !== undefined &&
61
+ (typeof candidate.id !== 'string' || !normalizePropagationId(candidate.id))) {
62
+ throw new Error('[runtime/events] Event envelope actor.id is not a valid opaque identifier.');
63
+ }
64
+ return Object.assign(Object.assign({}, (candidate.id ? { id: candidate.id } : {})), { type: candidate.type });
65
+ }
66
+ function serializeEnvelope(envelope) {
67
+ try {
68
+ return JSON.stringify(envelope);
69
+ }
70
+ catch (_a) {
71
+ throw new Error('[runtime/events] Event data must be JSON serializable without bigint values or cycles.');
72
+ }
73
+ }
20
74
  export function buildEventEntry(contract, data, options) {
21
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
75
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
22
76
  assertContract(contract);
23
- if (!((_a = options.stage) === null || _a === void 0 ? void 0 : _a.trim())) {
24
- throw new Error('[runtime/events] `stage` is required — consumers filter on meta.stage to isolate shared-bus traffic.');
77
+ const stage = assertNonEmpty(options.stage, 'stage');
78
+ const busName = assertNonEmpty(options.busName, 'busName', 1600);
79
+ const slice = contract.source.trim();
80
+ const providedEventId = options.eventId === undefined
81
+ ? undefined
82
+ : normalizePropagationId(options.eventId);
83
+ if (options.eventId !== undefined && !providedEventId) {
84
+ throw new Error('[runtime/events] `eventId` is not a valid opaque identifier.');
25
85
  }
26
- const eventId = (_b = options.eventId) !== null && _b !== void 0 ? _b : randomUUID();
86
+ const eventId = providedEventId !== null && providedEventId !== void 0 ? providedEventId : randomUUID();
87
+ const correlationId = (_b = normalizePropagationId((_a = options.context) === null || _a === void 0 ? void 0 : _a.correlationId)) !== null && _b !== void 0 ? _b : eventId;
88
+ const causationId = (_f = (_d = normalizePropagationId((_c = options.context) === null || _c === void 0 ? void 0 : _c.eventId)) !== null && _d !== void 0 ? _d : normalizePropagationId((_e = options.context) === null || _e === void 0 ? void 0 : _e.requestId)) !== null && _f !== void 0 ? _f : normalizePropagationId((_g = options.context) === null || _g === void 0 ? void 0 : _g.causationId);
89
+ const traceParent = normalizeTraceParent((_h = options.context) === null || _h === void 0 ? void 0 : _h.traceParent);
90
+ const traceState = normalizeTraceState((_j = options.context) === null || _j === void 0 ? void 0 : _j.traceState);
91
+ const tenantId = normalizePropagationId((_k = options.context) === null || _k === void 0 ? void 0 : _k.tenantId);
92
+ const actor = assertActor((_l = options.actor) !== null && _l !== void 0 ? _l : (_m = options.context) === null || _m === void 0 ? void 0 : _m.actor);
27
93
  const envelope = {
28
- meta: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ eventId, schemaVersion: contract.schemaVersion, occurredAt: (_c = options.occurredAt) !== null && _c !== void 0 ? _c : new Date().toISOString(), app: contract.source, stage: options.stage, correlationId: (_e = (_d = options.context) === null || _d === void 0 ? void 0 : _d.correlationId) !== null && _e !== void 0 ? _e : eventId }, (((_f = options.context) === null || _f === void 0 ? void 0 : _f.requestId)
29
- ? { causationId: options.context.requestId }
30
- : {})), { actor: (_g = options.actor) !== null && _g !== void 0 ? _g : (_h = options.context) === null || _h === void 0 ? void 0 : _h.actor }), (((_j = options.context) === null || _j === void 0 ? void 0 : _j.tenantId)
31
- ? { tenantId: options.context.tenantId }
32
- : {})), (((_k = options.context) === null || _k === void 0 ? void 0 : _k.traceParent)
33
- ? { traceParent: options.context.traceParent }
34
- : {})), (((_l = options.context) === null || _l === void 0 ? void 0 : _l.traceState)
35
- ? { traceState: options.context.traceState }
36
- : {})),
37
94
  data,
95
+ meta: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (actor ? { actor } : {})), (causationId ? { causationId } : {})), { correlationId, envelopeVersion: EVENT_ENVELOPE_VERSION, eventId, occurredAt: assertOccurredAt((_o = options.occurredAt) !== null && _o !== void 0 ? _o : new Date().toISOString()), schemaVersion: contract.schemaVersion, slice,
96
+ stage }), (tenantId ? { tenantId } : {})), (traceParent ? { traceParent } : {})), (traceState ? { traceState } : {})),
38
97
  };
39
- const detail = JSON.stringify(envelope);
98
+ const detail = serializeEnvelope(envelope);
40
99
  const bytes = Buffer.byteLength(detail, 'utf8');
41
100
  if (bytes > MAX_EVENT_ENTRY_BYTES) {
42
101
  throw new Error(`[runtime/events] Event ${contract.source}/${contract.detailType} detail is ${bytes} bytes, ` +
43
102
  `over the ${MAX_EVENT_ENTRY_BYTES}-byte EventBridge entry limit. ` +
44
- 'Store the payload (e.g. S3) and publish a claim-check reference instead.');
103
+ 'Store the payload (for example in S3) and publish a claim-check reference instead.');
45
104
  }
46
105
  return {
47
106
  entry: {
48
- eventBusName: options.busName,
49
- source: contract.source,
50
- detailType: contract.detailType,
51
107
  detail,
108
+ detailType: contract.detailType.trim(),
109
+ eventBusName: busName,
110
+ source: slice,
52
111
  },
53
112
  envelope,
54
113
  };
55
114
  }
56
115
  export function createEventPublisher(options) {
57
- var _a, _b;
58
- if (!((_a = options.busName) === null || _a === void 0 ? void 0 : _a.trim())) {
59
- throw new Error('[runtime/events] `busName` is required.');
60
- }
61
- if (!((_b = options.stage) === null || _b === void 0 ? void 0 : _b.trim())) {
62
- throw new Error('[runtime/events] `stage` is required.');
63
- }
116
+ const busName = assertNonEmpty(options.busName, 'busName', 1600);
117
+ const stage = assertNonEmpty(options.stage, 'stage');
64
118
  return (contract_1, data_1, ...args_1) => __awaiter(this, [contract_1, data_1, ...args_1], void 0, function* (contract, data, publishOptions = {}) {
65
119
  const { entry, envelope } = buildEventEntry(contract, data, {
66
- busName: options.busName,
67
- stage: options.stage,
68
- context: publishOptions.context,
69
120
  actor: publishOptions.actor,
121
+ busName,
122
+ context: publishOptions.context,
123
+ stage,
70
124
  });
71
125
  yield options.send(entry);
72
126
  return envelope;
73
127
  });
74
128
  }
75
- // --- Consumer-side parsing -------------------------------------------------
129
+ function requireMetaString(meta, field) {
130
+ const value = meta[field];
131
+ if (typeof value !== 'string' ||
132
+ value.trim() === '' ||
133
+ value.trim() !== value ||
134
+ value.length > 128 ||
135
+ hasControlCharacter(value)) {
136
+ throw new Error(`[runtime/events] Event envelope meta.${field} is missing or not a string.`);
137
+ }
138
+ return value;
139
+ }
140
+ function optionalMetaString(meta, field) {
141
+ const value = meta[field];
142
+ if (value !== undefined && typeof value !== 'string') {
143
+ throw new Error(`[runtime/events] Event envelope meta.${field} must be a string when present.`);
144
+ }
145
+ return value;
146
+ }
76
147
  export function parseEventEnvelope(detail) {
77
- var _a;
78
- if (!detail || typeof detail !== 'object') {
148
+ if (!detail || typeof detail !== 'object' || Array.isArray(detail)) {
79
149
  throw new Error('[runtime/events] Event detail is not an object envelope.');
80
150
  }
81
151
  const candidate = detail;
82
- if (!candidate.meta || typeof candidate.meta !== 'object') {
152
+ if (!candidate.meta ||
153
+ typeof candidate.meta !== 'object' ||
154
+ Array.isArray(candidate.meta)) {
83
155
  throw new Error('[runtime/events] Event detail is missing the `meta` envelope block.');
84
156
  }
85
157
  const meta = candidate.meta;
86
- for (const field of [
87
- 'eventId',
88
- 'occurredAt',
89
- 'app',
90
- 'stage',
91
- 'correlationId',
158
+ if (meta['envelopeVersion'] !== EVENT_ENVELOPE_VERSION) {
159
+ throw new Error(`[runtime/events] Unsupported event envelope version; expected ${EVENT_ENVELOPE_VERSION}.`);
160
+ }
161
+ if ('app' in meta) {
162
+ throw new Error('[runtime/events] Event envelope v2 uses meta.slice and rejects legacy meta.app.');
163
+ }
164
+ const eventId = requireMetaString(meta, 'eventId');
165
+ const occurredAt = assertOccurredAt(requireMetaString(meta, 'occurredAt'));
166
+ const slice = requireMetaString(meta, 'slice');
167
+ const stage = requireMetaString(meta, 'stage');
168
+ const correlationId = requireMetaString(meta, 'correlationId');
169
+ for (const [field, value] of [
170
+ ['eventId', eventId],
171
+ ['correlationId', correlationId],
92
172
  ]) {
93
- if (typeof meta[field] !== 'string' || !meta[field]) {
94
- throw new Error(`[runtime/events] Event envelope meta.${field} is missing or not a string.`);
173
+ if (!normalizePropagationId(value)) {
174
+ throw new Error(`[runtime/events] Event envelope meta.${field} is not a valid opaque identifier.`);
95
175
  }
96
176
  }
97
- if (!Number.isInteger(meta.schemaVersion) || ((_a = meta.schemaVersion) !== null && _a !== void 0 ? _a : 0) < 1) {
177
+ if (!Number.isInteger(meta['schemaVersion']) ||
178
+ Number(meta['schemaVersion']) < 1) {
98
179
  throw new Error('[runtime/events] Event envelope meta.schemaVersion is missing or not a positive integer.');
99
180
  }
100
- for (const field of [
101
- 'causationId',
102
- 'tenantId',
103
- 'traceParent',
104
- 'traceState',
105
- ]) {
106
- if (meta[field] !== undefined && typeof meta[field] !== 'string') {
107
- throw new Error(`[runtime/events] Event envelope meta.${field} must be a string when present.`);
108
- }
181
+ const causationId = optionalMetaString(meta, 'causationId');
182
+ const tenantId = optionalMetaString(meta, 'tenantId');
183
+ const traceParent = optionalMetaString(meta, 'traceParent');
184
+ const traceState = optionalMetaString(meta, 'traceState');
185
+ if (causationId && !normalizePropagationId(causationId)) {
186
+ throw new Error('[runtime/events] Event envelope meta.causationId is not a valid opaque identifier.');
187
+ }
188
+ if (tenantId && !normalizePropagationId(tenantId)) {
189
+ throw new Error('[runtime/events] Event envelope meta.tenantId is not a valid opaque identifier.');
190
+ }
191
+ if (traceParent && !normalizeTraceParent(traceParent)) {
192
+ throw new Error('[runtime/events] Event envelope meta.traceParent is invalid.');
109
193
  }
194
+ if (traceState && !normalizeTraceState(traceState)) {
195
+ throw new Error('[runtime/events] Event envelope meta.traceState is invalid.');
196
+ }
197
+ const actor = meta['actor'] === undefined ? undefined : assertActor(meta['actor']);
110
198
  return {
111
- meta: meta,
112
199
  data: candidate.data,
200
+ meta: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (actor ? { actor } : {})), (causationId ? { causationId } : {})), { correlationId, envelopeVersion: EVENT_ENVELOPE_VERSION, eventId,
201
+ occurredAt, schemaVersion: Number(meta['schemaVersion']), slice,
202
+ stage }), (tenantId ? { tenantId } : {})), (traceParent ? { traceParent } : {})), (traceState ? { traceState } : {})),
113
203
  };
114
204
  }
115
- // Consumers receive EventBridge events wrapped in SQS bodies (the buffer
116
- // queue between the bus rule and the handler). Each body is the EventBridge
117
- // event JSON: { id, source, "detail-type", detail, ... }.
118
205
  export function parseSqsEventBridgeRecords(records) {
119
206
  const events = [];
120
207
  const failures = [];
@@ -127,23 +214,41 @@ export function parseSqsEventBridgeRecords(records) {
127
214
  if (typeof raw['detail-type'] !== 'string' || !raw['detail-type']) {
128
215
  throw new Error('EventBridge record is missing `detail-type`.');
129
216
  }
217
+ if (!normalizeEventType(raw['detail-type'])) {
218
+ throw new Error('EventBridge record has an invalid `detail-type`.');
219
+ }
220
+ const envelope = parseEventEnvelope(raw.detail);
221
+ if (raw.source !== envelope.meta.slice) {
222
+ throw new Error('EventBridge record source does not match envelope meta.slice.');
223
+ }
130
224
  events.push({
225
+ detailType: raw['detail-type'],
226
+ envelope,
131
227
  messageId: record.messageId,
132
228
  source: raw.source,
133
- detailType: raw['detail-type'],
134
- envelope: parseEventEnvelope(raw.detail),
135
229
  });
136
230
  }
137
- catch (err) {
231
+ catch (error) {
138
232
  failures.push({
233
+ error: error instanceof Error ? error.message : String(error),
139
234
  messageId: record.messageId,
140
- error: err instanceof Error ? err.message : String(err),
141
235
  });
142
236
  }
143
237
  }
144
238
  return { events, failures };
145
239
  }
146
- export function toEventLogMetadata(meta) {
147
- return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ app: meta.app }, (meta.causationId ? { causationId: meta.causationId } : {})), { correlationId: meta.correlationId, eventId: meta.eventId, occurredAt: meta.occurredAt, schemaVersion: meta.schemaVersion, stage: meta.stage }), (meta.tenantId ? { tenantId: meta.tenantId } : {})), (meta.traceParent ? { traceParent: meta.traceParent } : {})), (meta.traceState ? { traceState: meta.traceState } : {}));
240
+ /**
241
+ * Converts validated event identity into the same top-level context consumed
242
+ * by the logger. Event data, actor, and tenant identity are never projected.
243
+ */
244
+ export function toEventLogContext(meta, eventType) {
245
+ return createConsumerContext({
246
+ causationId: meta.causationId,
247
+ correlationId: meta.correlationId,
248
+ eventId: meta.eventId,
249
+ eventType,
250
+ traceParent: meta.traceParent,
251
+ traceState: meta.traceState,
252
+ });
148
253
  }
149
254
  //# sourceMappingURL=events.js.map
package/src/events.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../packages/runtime/src/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../packages/runtime/src/events.ts"],"names":[],"mappings":"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"}