@empire-builder-kit/runtime 1.0.0-beta.9 → 1.0.0-rc.2

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
package/src/logging.js CHANGED
@@ -1,112 +1,510 @@
1
+ import { normalizeEventType, normalizePropagationId, toLogContext, } from './request-context.js';
2
+ export const LOG_SCHEMA_VERSION = 1;
3
+ export const LOG_RECORD_LIMITS = {
4
+ arrayItems: 32,
5
+ attributeKeys: 64,
6
+ attributeKeyLength: 128,
7
+ attributeStringLength: 2048,
8
+ attributeValues: 256,
9
+ dimensionLength: 128,
10
+ errorStackLength: 4096,
11
+ messageLength: 512,
12
+ nestingDepth: 4,
13
+ recordBytes: 16 * 1024,
14
+ };
1
15
  export const loggingContract = {
2
16
  defaultFormat: 'json',
3
17
  exportPath: '@empire-builder-kit/runtime/logging',
4
18
  packageName: '@empire-builder-kit/runtime',
19
+ schemaVersion: LOG_SCHEMA_VERSION,
5
20
  };
6
- function mergeContext(base, overrides) {
7
- var _a, _b, _c, _d, _e, _f, _g, _h;
8
- if (!base && !overrides) {
9
- return undefined;
10
- }
21
+ const LEVEL_PRIORITY = {
22
+ TRACE: 10,
23
+ DEBUG: 20,
24
+ INFO: 30,
25
+ WARN: 40,
26
+ ERROR: 50,
27
+ FATAL: 60,
28
+ };
29
+ const LOG_OUTCOMES = new Set([
30
+ 'success',
31
+ 'failure',
32
+ 'cancelled',
33
+ 'unknown',
34
+ ]);
35
+ const RESERVED_ATTRIBUTE_KEYS = new Set([
36
+ 'attributes',
37
+ 'causationId',
38
+ 'component',
39
+ 'correlationId',
40
+ 'eventId',
41
+ 'eventType',
42
+ 'feature',
43
+ 'level',
44
+ 'message',
45
+ 'operation',
46
+ 'outcome',
47
+ 'requestId',
48
+ 'schemaVersion',
49
+ 'slice',
50
+ 'spanId',
51
+ 'stage',
52
+ 'timestamp',
53
+ 'traceId',
54
+ 'workspace',
55
+ 'ebkTruncation',
56
+ ]);
57
+ const UNSAFE_OBJECT_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
58
+ const SENSITIVE_EXACT_KEYS = new Set([
59
+ 'actorid',
60
+ 'address',
61
+ 'authorization',
62
+ 'body',
63
+ 'cardnumber',
64
+ 'cookie',
65
+ 'credentials',
66
+ 'customerid',
67
+ 'email',
68
+ 'emailaddress',
69
+ 'headers',
70
+ 'ip',
71
+ 'name',
72
+ 'password',
73
+ 'path',
74
+ 'payload',
75
+ 'payment',
76
+ 'phonenumber',
77
+ 'postaladdress',
78
+ 'query',
79
+ 'rawpath',
80
+ 'responsebody',
81
+ 'secret',
82
+ 'session',
83
+ 'sourceip',
84
+ 'tenantid',
85
+ 'token',
86
+ 'userid',
87
+ 'useragent',
88
+ ]);
89
+ const SENSITIVE_KEY_PARTS = [
90
+ 'accesstoken',
91
+ 'apikey',
92
+ 'authorization',
93
+ 'clientsecret',
94
+ 'credential',
95
+ 'password',
96
+ 'privatekey',
97
+ 'refreshtoken',
98
+ 'secretkey',
99
+ 'sessiontoken',
100
+ ];
101
+ function createTruncationState() {
11
102
  return {
12
- actor: (_a = overrides === null || overrides === void 0 ? void 0 : overrides.actor) !== null && _a !== void 0 ? _a : base === null || base === void 0 ? void 0 : base.actor,
13
- correlationId: (_b = overrides === null || overrides === void 0 ? void 0 : overrides.correlationId) !== null && _b !== void 0 ? _b : base === null || base === void 0 ? void 0 : base.correlationId,
14
- metadata: Object.assign(Object.assign({}, ((_c = base === null || base === void 0 ? void 0 : base.metadata) !== null && _c !== void 0 ? _c : {})), ((_d = overrides === null || overrides === void 0 ? void 0 : overrides.metadata) !== null && _d !== void 0 ? _d : {})),
15
- operation: (_e = overrides === null || overrides === void 0 ? void 0 : overrides.operation) !== null && _e !== void 0 ? _e : base === null || base === void 0 ? void 0 : base.operation,
16
- requestId: (_f = overrides === null || overrides === void 0 ? void 0 : overrides.requestId) !== null && _f !== void 0 ? _f : base === null || base === void 0 ? void 0 : base.requestId,
17
- source: (_g = overrides === null || overrides === void 0 ? void 0 : overrides.source) !== null && _g !== void 0 ? _g : base === null || base === void 0 ? void 0 : base.source,
18
- stage: (_h = overrides === null || overrides === void 0 ? void 0 : overrides.stage) !== null && _h !== void 0 ? _h : base === null || base === void 0 ? void 0 : base.stage,
103
+ circularValues: 0,
104
+ droppedKeys: 0,
105
+ recordKeysDropped: 0,
106
+ redactedValues: 0,
107
+ truncatedArrays: 0,
108
+ truncatedDepth: 0,
109
+ truncatedStrings: 0,
110
+ truncatedValues: 0,
111
+ unsupportedValues: 0,
112
+ visitedKeys: 0,
113
+ visitedValues: 0,
19
114
  };
20
115
  }
21
- function contextMetadata(context) {
22
- var _a, _b, _c;
23
- if (!context) {
24
- return {};
25
- }
26
- return compactObject(Object.assign({ actorId: (_a = context.actor) === null || _a === void 0 ? void 0 : _a.id, actorType: (_b = context.actor) === null || _b === void 0 ? void 0 : _b.type, operation: context.operation, source: context.source }, ((_c = context.metadata) !== null && _c !== void 0 ? _c : {})));
27
- }
28
116
  function compactObject(value) {
29
117
  return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
30
118
  }
31
- function safeStringify(value) {
32
- if (typeof value === 'string') {
119
+ function hasControlCharacter(value) {
120
+ return [...value].some((character) => {
121
+ const code = character.charCodeAt(0);
122
+ return code <= 31 || code === 127;
123
+ });
124
+ }
125
+ function assertDimension(value, field) {
126
+ const normalized = value.trim();
127
+ if (normalized.length === 0 ||
128
+ normalized.length > LOG_RECORD_LIMITS.dimensionLength ||
129
+ hasControlCharacter(normalized)) {
130
+ throw new Error(`[runtime/logging] \`${field}\` must be a non-empty, control-free string no longer than ${LOG_RECORD_LIMITS.dimensionLength} characters.`);
131
+ }
132
+ return normalized;
133
+ }
134
+ function truncateString(value, maximum, state) {
135
+ if (value.length <= maximum) {
33
136
  return value;
34
137
  }
138
+ if (state) {
139
+ state.truncatedStrings += 1;
140
+ }
141
+ const suffix = `…[truncated:${value.length - maximum}]`;
142
+ return `${value.slice(0, Math.max(0, maximum - suffix.length))}${suffix}`;
143
+ }
144
+ function normalizeSensitiveKey(key) {
145
+ return key.toLowerCase().replace(/[^a-z0-9]/g, '');
146
+ }
147
+ function isSensitiveKey(key) {
148
+ const normalized = normalizeSensitiveKey(key);
149
+ return (SENSITIVE_EXACT_KEYS.has(normalized) ||
150
+ SENSITIVE_KEY_PARTS.some((part) => normalized.includes(part)));
151
+ }
152
+ function safeObjectValue(value, key) {
35
153
  try {
36
- return JSON.stringify(value);
154
+ return { ok: true, value: value[key] };
37
155
  }
38
156
  catch (_a) {
157
+ return { ok: false };
158
+ }
159
+ }
160
+ function sanitizeAttributeValue(value, state, ancestors, depth) {
161
+ if (state.visitedValues >= LOG_RECORD_LIMITS.attributeValues) {
162
+ state.truncatedValues += 1;
163
+ return '[Truncated:values]';
164
+ }
165
+ state.visitedValues += 1;
166
+ if (value === null || typeof value === 'boolean') {
167
+ return value;
168
+ }
169
+ if (typeof value === 'number') {
170
+ if (Number.isFinite(value)) {
171
+ return value;
172
+ }
173
+ state.unsupportedValues += 1;
174
+ return '[Unsupported:number]';
175
+ }
176
+ if (typeof value === 'string') {
177
+ return truncateString(value, LOG_RECORD_LIMITS.attributeStringLength, state);
178
+ }
179
+ if (value === undefined ||
180
+ typeof value === 'bigint' ||
181
+ typeof value === 'function' ||
182
+ typeof value === 'symbol') {
183
+ state.unsupportedValues += 1;
184
+ return `[Unsupported:${typeof value}]`;
185
+ }
186
+ if (value instanceof Date) {
187
+ if (Number.isNaN(value.getTime())) {
188
+ state.unsupportedValues += 1;
189
+ return '[Unsupported:date]';
190
+ }
191
+ return value.toISOString();
192
+ }
193
+ if (depth >= LOG_RECORD_LIMITS.nestingDepth) {
194
+ state.truncatedDepth += 1;
195
+ return '[Truncated:depth]';
196
+ }
197
+ if (ancestors.has(value)) {
198
+ state.circularValues += 1;
199
+ return '[Circular]';
200
+ }
201
+ ancestors.add(value);
202
+ try {
203
+ if (Array.isArray(value)) {
204
+ const retained = value.slice(0, LOG_RECORD_LIMITS.arrayItems);
205
+ if (retained.length < value.length) {
206
+ state.truncatedArrays += value.length - retained.length;
207
+ }
208
+ return retained.map((entry) => sanitizeAttributeValue(entry, state, ancestors, depth + 1));
209
+ }
210
+ const output = {};
211
+ for (const key of Object.keys(value).sort()) {
212
+ if (state.visitedKeys >= LOG_RECORD_LIMITS.attributeKeys ||
213
+ key.length > LOG_RECORD_LIMITS.attributeKeyLength ||
214
+ UNSAFE_OBJECT_KEYS.has(key) ||
215
+ (depth === 0 && RESERVED_ATTRIBUTE_KEYS.has(key))) {
216
+ state.droppedKeys += 1;
217
+ continue;
218
+ }
219
+ state.visitedKeys += 1;
220
+ if (isSensitiveKey(key)) {
221
+ output[key] = '[REDACTED]';
222
+ state.redactedValues += 1;
223
+ continue;
224
+ }
225
+ const property = safeObjectValue(value, key);
226
+ if (!property.ok) {
227
+ output[key] = '[Unreadable]';
228
+ state.unsupportedValues += 1;
229
+ continue;
230
+ }
231
+ output[key] = sanitizeAttributeValue(property.value, state, ancestors, depth + 1);
232
+ }
233
+ return output;
234
+ }
235
+ finally {
236
+ ancestors.delete(value);
237
+ }
238
+ }
239
+ function truncationMetadata(state) {
240
+ const metadata = compactObject({
241
+ circularValues: state.circularValues || undefined,
242
+ droppedKeys: state.droppedKeys || undefined,
243
+ recordKeysDropped: state.recordKeysDropped || undefined,
244
+ redactedValues: state.redactedValues || undefined,
245
+ truncatedArrays: state.truncatedArrays || undefined,
246
+ truncatedDepth: state.truncatedDepth || undefined,
247
+ truncatedStrings: state.truncatedStrings || undefined,
248
+ truncatedValues: state.truncatedValues || undefined,
249
+ unsupportedValues: state.unsupportedValues || undefined,
250
+ });
251
+ return Object.keys(metadata).length > 0 ? metadata : undefined;
252
+ }
253
+ function sanitizeAttributes(attributes, state) {
254
+ if (!attributes) {
255
+ return {};
256
+ }
257
+ try {
258
+ const sanitized = sanitizeAttributeValue(attributes, state, new WeakSet(), 0);
259
+ return sanitized === null ||
260
+ Array.isArray(sanitized) ||
261
+ typeof sanitized !== 'object'
262
+ ? {}
263
+ : sanitized;
264
+ }
265
+ catch (_a) {
266
+ state.unsupportedValues += 1;
267
+ return { attributeSerialization: '[Unreadable]' };
268
+ }
269
+ }
270
+ function safeUnknownMessage(value) {
271
+ if (typeof value === 'string' ||
272
+ typeof value === 'number' ||
273
+ typeof value === 'boolean') {
39
274
  return String(value);
40
275
  }
276
+ return 'Internal error';
41
277
  }
42
- export function serializeError(error) {
43
- if (error instanceof Error) {
44
- const value = error;
45
- return compactObject({
46
- code: value.code,
47
- message: value.message,
48
- name: value.name,
49
- stack: value.stack,
50
- });
278
+ export function serializeError(error, options = {}) {
279
+ const development = options.detail === 'development';
280
+ const reviewed = development || options.messageIsSafe === true;
281
+ try {
282
+ if (error instanceof Error) {
283
+ const withCode = error;
284
+ const code = reviewed &&
285
+ (typeof withCode.code === 'string' || typeof withCode.code === 'number')
286
+ ? truncateString(String(withCode.code), 128)
287
+ : undefined;
288
+ const message = development || options.messageIsSafe
289
+ ? truncateString(error.message || 'Internal error', LOG_RECORD_LIMITS.attributeStringLength)
290
+ : 'Internal error';
291
+ return compactObject({
292
+ code,
293
+ message,
294
+ name: reviewed ? truncateString(error.name || 'Error', 128) : 'Error',
295
+ stack: development && error.stack
296
+ ? truncateString(error.stack, LOG_RECORD_LIMITS.errorStackLength)
297
+ : undefined,
298
+ });
299
+ }
300
+ return {
301
+ message: development
302
+ ? truncateString(safeUnknownMessage(error), LOG_RECORD_LIMITS.attributeStringLength)
303
+ : 'Internal error',
304
+ name: 'UnknownError',
305
+ };
51
306
  }
52
- return {
53
- message: safeStringify(error),
54
- name: 'UnknownError',
307
+ catch (_a) {
308
+ return {
309
+ message: 'Internal error',
310
+ name: 'UnknownError',
311
+ };
312
+ }
313
+ }
314
+ function mergeContext(base, overrides) {
315
+ if (!base && !overrides) {
316
+ return undefined;
317
+ }
318
+ return Object.assign(Object.assign({}, toLogContext(base !== null && base !== void 0 ? base : {})), toLogContext(overrides !== null && overrides !== void 0 ? overrides : {}));
319
+ }
320
+ function mergeAttributes(base, overrides) {
321
+ if (!base && !overrides) {
322
+ return undefined;
323
+ }
324
+ try {
325
+ return Object.assign(Object.assign({}, (base !== null && base !== void 0 ? base : {})), (overrides !== null && overrides !== void 0 ? overrides : {}));
326
+ }
327
+ catch (_a) {
328
+ return { attributeMerge: '[Unreadable]' };
329
+ }
330
+ }
331
+ function safeTimestamp(now) {
332
+ try {
333
+ const value = now();
334
+ if (!Number.isNaN(value.getTime())) {
335
+ return value.toISOString();
336
+ }
337
+ }
338
+ catch (_a) {
339
+ // The logging path must not replace application behavior.
340
+ }
341
+ return new Date().toISOString();
342
+ }
343
+ function encodedBytes(entry) {
344
+ return Buffer.byteLength(JSON.stringify(entry), 'utf8');
345
+ }
346
+ function fitRecordToBudget(entry, state) {
347
+ var _a;
348
+ const attributes = Object.assign({}, ((_a = entry.attributes) !== null && _a !== void 0 ? _a : {}));
349
+ let result = Object.assign(Object.assign({}, entry), { attributes: Object.keys(attributes).length > 0 ? attributes : undefined });
350
+ while (encodedBytes(result) > LOG_RECORD_LIMITS.recordBytes) {
351
+ const removable = Object.keys(attributes)
352
+ .filter((key) => key !== 'ebkTruncation')
353
+ .sort()
354
+ .at(-1);
355
+ if (!removable) {
356
+ break;
357
+ }
358
+ delete attributes[removable];
359
+ state.recordKeysDropped += 1;
360
+ const truncation = truncationMetadata(state);
361
+ if (truncation) {
362
+ attributes['ebkTruncation'] = truncation;
363
+ }
364
+ result = Object.assign(Object.assign({}, entry), { attributes });
365
+ }
366
+ return result;
367
+ }
368
+ export function serializeLogRecord(entry) {
369
+ return JSON.stringify(entry);
370
+ }
371
+ export function createProcessLogSink(streams = {
372
+ stderr: process.stderr,
373
+ stdout: process.stdout,
374
+ }) {
375
+ return (entry) => {
376
+ const line = `${serializeLogRecord(entry)}\n`;
377
+ const stream = entry.level === 'WARN' ||
378
+ entry.level === 'ERROR' ||
379
+ entry.level === 'FATAL'
380
+ ? streams.stderr
381
+ : streams.stdout;
382
+ stream.write(line);
55
383
  };
56
384
  }
57
- export function consoleSink(entry) {
58
- console.log(JSON.stringify(entry));
385
+ export const processLogSink = createProcessLogSink();
386
+ function validateChildOptions(options) {
387
+ const candidate = options;
388
+ for (const field of ['workspace', 'stage', 'slice']) {
389
+ if (field in candidate) {
390
+ throw new Error(`[runtime/logging] A child logger cannot change immutable \`${field}\` identity.`);
391
+ }
392
+ }
59
393
  }
60
394
  export function createLogger(options) {
61
- var _a, _b;
62
- const sink = (_a = options.sink) !== null && _a !== void 0 ? _a : consoleSink;
63
- const now = (_b = options.now) !== null && _b !== void 0 ? _b : (() => new Date());
395
+ var _a, _b, _c;
396
+ const identity = {
397
+ component: assertDimension(options.component, 'component'),
398
+ feature: assertDimension(options.feature, 'feature'),
399
+ operation: assertDimension(options.operation, 'operation'),
400
+ slice: assertDimension(options.slice, 'slice'),
401
+ stage: assertDimension(options.stage, 'stage'),
402
+ workspace: assertDimension(options.workspace, 'workspace'),
403
+ };
404
+ const minimumLevel = (_a = options.minimumLevel) !== null && _a !== void 0 ? _a : 'INFO';
405
+ if (!Object.prototype.hasOwnProperty.call(LEVEL_PRIORITY, minimumLevel)) {
406
+ throw new Error(`[runtime/logging] Unsupported minimum log level: ${String(minimumLevel)}.`);
407
+ }
408
+ const sink = (_b = options.sink) !== null && _b !== void 0 ? _b : processLogSink;
409
+ const now = (_c = options.now) !== null && _c !== void 0 ? _c : (() => new Date());
64
410
  const write = (level, message, input = {}) => {
65
- var _a, _b, _c;
411
+ if (!Object.prototype.hasOwnProperty.call(LEVEL_PRIORITY, level)) {
412
+ return undefined;
413
+ }
414
+ if (LEVEL_PRIORITY[level] < LEVEL_PRIORITY[minimumLevel]) {
415
+ return undefined;
416
+ }
417
+ const state = createTruncationState();
66
418
  const mergedContext = mergeContext(options.context, input.context);
67
- const metadata = compactObject(Object.assign(Object.assign(Object.assign({}, ((_a = options.metadata) !== null && _a !== void 0 ? _a : {})), contextMetadata(mergedContext)), ((_b = input.metadata) !== null && _b !== void 0 ? _b : {})));
68
- const entry = compactObject({
69
- app: options.app,
70
- correlationId: mergedContext === null || mergedContext === void 0 ? void 0 : mergedContext.correlationId,
71
- error: input.error === undefined ? undefined : serializeError(input.error),
419
+ const attributes = sanitizeAttributes(mergeAttributes(options.attributes, input.attributes), state);
420
+ if (input.error !== undefined) {
421
+ attributes['error'] = serializeError(input.error, {
422
+ detail: options.errorDetail,
423
+ messageIsSafe: input.errorMessageIsSafe,
424
+ });
425
+ const serialized = attributes['error'];
426
+ for (const value of [serialized === null || serialized === void 0 ? void 0 : serialized['message'], serialized === null || serialized === void 0 ? void 0 : serialized['stack']]) {
427
+ if (typeof value === 'string' && value.includes('…[truncated:')) {
428
+ state.truncatedStrings += 1;
429
+ }
430
+ }
431
+ }
432
+ const normalizedMessage = truncateString((typeof message === 'string' ? message.trim() : '') || 'Log event', LOG_RECORD_LIMITS.messageLength, state);
433
+ const truncation = truncationMetadata(state);
434
+ if (truncation) {
435
+ attributes['ebkTruncation'] = truncation;
436
+ }
437
+ const context = toLogContext(mergedContext !== null && mergedContext !== void 0 ? mergedContext : {});
438
+ const entry = fitRecordToBudget(compactObject({
439
+ attributes: Object.keys(attributes).length > 0 ? attributes : undefined,
440
+ causationId: normalizePropagationId(context.causationId),
441
+ component: identity.component,
442
+ correlationId: normalizePropagationId(context.correlationId),
443
+ eventId: normalizePropagationId(context.eventId),
444
+ eventType: normalizeEventType(context.eventType),
445
+ feature: identity.feature,
72
446
  level,
73
- message,
74
- metadata: Object.keys(metadata).length > 0 ? metadata : undefined,
75
- requestId: mergedContext === null || mergedContext === void 0 ? void 0 : mergedContext.requestId,
76
- service: options.service,
77
- stage: (_c = mergedContext === null || mergedContext === void 0 ? void 0 : mergedContext.stage) !== null && _c !== void 0 ? _c : options.stage,
78
- timestamp: now().toISOString(),
79
- });
80
- sink(entry);
447
+ message: normalizedMessage,
448
+ operation: identity.operation,
449
+ outcome: input.outcome && LOG_OUTCOMES.has(input.outcome)
450
+ ? input.outcome
451
+ : undefined,
452
+ requestId: normalizePropagationId(context.requestId),
453
+ schemaVersion: LOG_SCHEMA_VERSION,
454
+ slice: identity.slice,
455
+ spanId: context.spanId,
456
+ stage: identity.stage,
457
+ timestamp: safeTimestamp(now),
458
+ traceId: context.traceId,
459
+ workspace: identity.workspace,
460
+ }), state);
461
+ try {
462
+ sink(entry);
463
+ }
464
+ catch (_a) {
465
+ // Observability is never allowed to replace application behavior.
466
+ }
81
467
  return entry;
82
468
  };
83
469
  return {
84
470
  child(childOptions = {}) {
85
- var _a, _b, _c, _d;
471
+ var _a, _b, _c;
472
+ validateChildOptions(childOptions);
86
473
  return createLogger({
87
- app: options.app,
474
+ attributes: mergeAttributes(options.attributes, childOptions.attributes),
475
+ component: (_a = childOptions.component) !== null && _a !== void 0 ? _a : identity.component,
88
476
  context: mergeContext(options.context, childOptions.context),
89
- metadata: Object.assign(Object.assign({}, ((_a = options.metadata) !== null && _a !== void 0 ? _a : {})), ((_b = childOptions.metadata) !== null && _b !== void 0 ? _b : {})),
477
+ errorDetail: options.errorDetail,
478
+ feature: (_b = childOptions.feature) !== null && _b !== void 0 ? _b : identity.feature,
479
+ minimumLevel,
90
480
  now,
91
- service: (_c = childOptions.service) !== null && _c !== void 0 ? _c : options.service,
481
+ operation: (_c = childOptions.operation) !== null && _c !== void 0 ? _c : identity.operation,
92
482
  sink,
93
- stage: (_d = childOptions.stage) !== null && _d !== void 0 ? _d : options.stage,
483
+ slice: identity.slice,
484
+ stage: identity.stage,
485
+ workspace: identity.workspace,
94
486
  });
95
487
  },
96
488
  debug(message, input) {
97
- return write('debug', message, input);
489
+ return write('DEBUG', message, input);
98
490
  },
99
491
  error(message, input) {
100
- return write('error', message, input);
492
+ return write('ERROR', message, input);
493
+ },
494
+ fatal(message, input) {
495
+ return write('FATAL', message, input);
101
496
  },
102
497
  info(message, input) {
103
- return write('info', message, input);
498
+ return write('INFO', message, input);
104
499
  },
105
500
  log(level, message, input) {
106
501
  return write(level, message, input);
107
502
  },
503
+ trace(message, input) {
504
+ return write('TRACE', message, input);
505
+ },
108
506
  warn(message, input) {
109
- return write('warn', message, input);
507
+ return write('WARN', message, input);
110
508
  },
111
509
  };
112
510
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../../packages/runtime/src/logging.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../../../../packages/runtime/src/logging.ts"],"names":[],"mappings":"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"}