@ontemper/sdk 0.0.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +221 -2
- package/dist/AxiosError.d.ts +46 -0
- package/dist/AxiosError.d.ts.map +1 -0
- package/dist/AxiosError.js +118 -0
- package/dist/AxiosError.js.map +1 -0
- package/dist/Contract/Invocation.d.ts +21 -0
- package/dist/Contract/Invocation.d.ts.map +1 -0
- package/dist/Contract/Invocation.js +2 -0
- package/dist/Contract/Invocation.js.map +1 -0
- package/dist/Contract/Manifest.d.ts +125 -0
- package/dist/Contract/Manifest.d.ts.map +1 -0
- package/dist/Contract/Manifest.js +59 -0
- package/dist/Contract/Manifest.js.map +1 -0
- package/dist/Contract/RuntimeApi.d.ts +143 -0
- package/dist/Contract/RuntimeApi.d.ts.map +1 -0
- package/dist/Contract/RuntimeApi.js +148 -0
- package/dist/Contract/RuntimeApi.js.map +1 -0
- package/dist/Contract/index.d.ts +4 -0
- package/dist/Contract/index.d.ts.map +1 -0
- package/dist/Contract/index.js +3 -0
- package/dist/Contract/index.js.map +1 -0
- package/dist/Correlation.d.ts +33 -0
- package/dist/Correlation.d.ts.map +1 -0
- package/dist/Correlation.js +57 -0
- package/dist/Correlation.js.map +1 -0
- package/dist/HttpApiResource.d.ts +32 -0
- package/dist/HttpApiResource.d.ts.map +1 -0
- package/dist/HttpApiResource.js +35 -0
- package/dist/HttpApiResource.js.map +1 -0
- package/dist/HttpClient.d.ts +10 -0
- package/dist/HttpClient.d.ts.map +1 -0
- package/dist/HttpClient.js +167 -0
- package/dist/HttpClient.js.map +1 -0
- package/dist/HttpPayload.d.ts +9 -0
- package/dist/HttpPayload.d.ts.map +1 -0
- package/dist/HttpPayload.js +32 -0
- package/dist/HttpPayload.js.map +1 -0
- package/dist/Invocation.d.ts +7 -0
- package/dist/Invocation.d.ts.map +1 -0
- package/dist/Invocation.js +4 -0
- package/dist/Invocation.js.map +1 -0
- package/dist/LogContext.d.ts +59 -0
- package/dist/LogContext.d.ts.map +1 -0
- package/dist/LogContext.js +47 -0
- package/dist/LogContext.js.map +1 -0
- package/dist/Logger.d.ts +5 -0
- package/dist/Logger.d.ts.map +1 -0
- package/dist/Logger.js +314 -0
- package/dist/Logger.js.map +1 -0
- package/dist/Manifest.d.ts +8 -0
- package/dist/Manifest.d.ts.map +1 -0
- package/dist/Manifest.js +101 -0
- package/dist/Manifest.js.map +1 -0
- package/dist/Middleware.d.ts +13 -0
- package/dist/Middleware.d.ts.map +1 -0
- package/dist/Middleware.js +287 -0
- package/dist/Middleware.js.map +1 -0
- package/dist/Redaction.d.ts +27 -0
- package/dist/Redaction.d.ts.map +1 -0
- package/dist/Redaction.js +149 -0
- package/dist/Redaction.js.map +1 -0
- package/dist/Resource.d.ts +66 -0
- package/dist/Resource.d.ts.map +1 -0
- package/dist/Resource.js +57 -0
- package/dist/Resource.js.map +1 -0
- package/dist/ResourcesErrors.d.ts +36 -0
- package/dist/ResourcesErrors.d.ts.map +1 -0
- package/dist/ResourcesErrors.js +27 -0
- package/dist/ResourcesErrors.js.map +1 -0
- package/dist/ResourcesToken.d.ts +10 -0
- package/dist/ResourcesToken.d.ts.map +1 -0
- package/dist/ResourcesToken.js +63 -0
- package/dist/ResourcesToken.js.map +1 -0
- package/dist/RuntimeResources.d.ts +26 -0
- package/dist/RuntimeResources.d.ts.map +1 -0
- package/dist/RuntimeResources.js +115 -0
- package/dist/RuntimeResources.js.map +1 -0
- package/dist/Trigger.d.ts +17 -0
- package/dist/Trigger.d.ts.map +1 -0
- package/dist/Trigger.js +4 -0
- package/dist/Trigger.js.map +1 -0
- package/dist/Workflow.d.ts +36 -0
- package/dist/Workflow.d.ts.map +1 -0
- package/dist/Workflow.js +80 -0
- package/dist/Workflow.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +447 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/testing.d.ts +42 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +49 -0
- package/dist/testing.js.map +1 -0
- package/package.json +57 -5
package/dist/Logger.js
ADDED
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { Cause, Config, Context, Effect, Formatter, Layer, Logger, Predicate, Redacted, References, } from 'effect';
|
|
2
|
+
import { Invocation } from './Invocation.js';
|
|
3
|
+
import { CurrentLogContext } from './LogContext.js';
|
|
4
|
+
import { REDACTED, redactLine, SecretMasks } from './Redaction.js';
|
|
5
|
+
/** Levels the Firecracker guest and the log pipeline recognize on a stdout JSON line. */
|
|
6
|
+
const lineLevels = {
|
|
7
|
+
All: 'debug',
|
|
8
|
+
Trace: 'debug',
|
|
9
|
+
Debug: 'debug',
|
|
10
|
+
Info: 'info',
|
|
11
|
+
Warn: 'warn',
|
|
12
|
+
Error: 'error',
|
|
13
|
+
Fatal: 'fatal',
|
|
14
|
+
None: 'debug',
|
|
15
|
+
};
|
|
16
|
+
/** `LOG_LEVEL` takes the pino level names legacy workflows used. */
|
|
17
|
+
const pinoLevels = ['trace', 'debug', 'info', 'warn', 'error', 'fatal', 'silent'];
|
|
18
|
+
const minimumLevels = {
|
|
19
|
+
trace: 'Trace',
|
|
20
|
+
debug: 'Debug',
|
|
21
|
+
info: 'Info',
|
|
22
|
+
warn: 'Warn',
|
|
23
|
+
error: 'Error',
|
|
24
|
+
fatal: 'Fatal',
|
|
25
|
+
silent: 'None',
|
|
26
|
+
};
|
|
27
|
+
/** The first present variable wins, as legacy `process.env.A ?? process.env.B` did. */
|
|
28
|
+
const firstOf = (names) => names.reduceRight((fallback, name) => Config.String(name).pipe(Config.orElse(() => fallback)), Config.succeed(undefined));
|
|
29
|
+
/**
|
|
30
|
+
* Bytes of one stdout line the Firecracker guest keeps; it cuts the rest
|
|
31
|
+
* (`MAX_GUEST_LOG_MESSAGE_BYTES`, apps/firecracker-runtime/crates/protocol/src/types.rs).
|
|
32
|
+
*/
|
|
33
|
+
const FIRECRACKER_LINE_BYTES = 64 * 1024;
|
|
34
|
+
/** The identity and level legacy `unnbound-logger-sdk` read from the environment, and the runtime's line budget. */
|
|
35
|
+
const LogSettings = Config.all({
|
|
36
|
+
level: Config.Literals(pinoLevels, 'LOG_LEVEL').pipe(Config.withDefault('debug')),
|
|
37
|
+
environment: firstOf(['TEMPER_ENVIRONMENT', 'WORKFLOW_ENV', 'UNNBOUND_ENVIRONMENT', 'ENVIRONMENT']),
|
|
38
|
+
workflowId: firstOf(['UNNBOUND_WORKFLOW_ID']),
|
|
39
|
+
serviceId: firstOf(['UNNBOUND_SERVICE_ID']),
|
|
40
|
+
deploymentId: firstOf(['UNNBOUND_DEPLOYMENT_ID']),
|
|
41
|
+
source: Config.String('UNNBOUND_LOG_SOURCE').pipe(Config.withDefault('workflow')),
|
|
42
|
+
// Serve and k8s keep whole lines, as legacy did.
|
|
43
|
+
lineBudget: firstOf(['UNNBOUND_RUNTIME_TARGET']).pipe(Config.map((target) => (target === 'firecracker' ? FIRECRACKER_LINE_BYTES : undefined))),
|
|
44
|
+
});
|
|
45
|
+
const isErrorLike = (value) => Predicate.hasProperty(value, 'message') && Predicate.isString(value.message);
|
|
46
|
+
// pino-std-serializers 6: causes extend the message and stack instead of nesting.
|
|
47
|
+
const messageWithCauses = (error, seen) => {
|
|
48
|
+
if (!isErrorLike(error.cause))
|
|
49
|
+
return error.message;
|
|
50
|
+
if (seen.has(error))
|
|
51
|
+
return `${error.message}: ...`;
|
|
52
|
+
seen.add(error);
|
|
53
|
+
return `${error.message}: ${messageWithCauses(error.cause, seen)}`;
|
|
54
|
+
};
|
|
55
|
+
const stackWithCauses = (error, seen) => {
|
|
56
|
+
const stack = Predicate.isString(error.stack) ? error.stack : '';
|
|
57
|
+
if (!isErrorLike(error.cause))
|
|
58
|
+
return stack;
|
|
59
|
+
if (seen.has(error))
|
|
60
|
+
return `${stack}\ncauses have become circular...`;
|
|
61
|
+
seen.add(error);
|
|
62
|
+
return `${stack}\ncaused by: ${stackWithCauses(error.cause, seen)}`;
|
|
63
|
+
};
|
|
64
|
+
/** `value`'s own enumerable fields added to `serialized`, except keys already there and Effect type ids. */
|
|
65
|
+
const addFields = (serialized, value, masks, ancestors) => {
|
|
66
|
+
for (const [key, item] of Object.entries(value)) {
|
|
67
|
+
if (key in serialized || key.startsWith('~') || key === '__proto__' || key === 'constructor')
|
|
68
|
+
continue;
|
|
69
|
+
serialized[key] = normalize(item, key, masks, ancestors);
|
|
70
|
+
}
|
|
71
|
+
return serialized;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* pino-std-serializers 6's `err` shape: `type`, `message` and `stack` with their causes, then the
|
|
75
|
+
* error's own fields. pino's `for...in` copy also carried an enumerable `toJSON`, even an inherited
|
|
76
|
+
* one as axios before 1.13 left it, and `JSON.stringify` then wrote what it returned for the
|
|
77
|
+
* serialized error under `key` instead.
|
|
78
|
+
*/
|
|
79
|
+
const errorJson = (error, key, masks, ancestors) => {
|
|
80
|
+
const serialized = {};
|
|
81
|
+
serialized.type = Predicate.isFunction(error.constructor)
|
|
82
|
+
? error.constructor.name
|
|
83
|
+
: Predicate.hasProperty(error, 'name')
|
|
84
|
+
? normalize(error.name, 'type', masks, ancestors)
|
|
85
|
+
: undefined;
|
|
86
|
+
serialized.message = masks.mask(messageWithCauses(error, new Set()));
|
|
87
|
+
serialized.stack = masks.mask(stackWithCauses(error, new Set()));
|
|
88
|
+
if (Predicate.hasProperty(error, 'errors') && Array.isArray(error.errors)) {
|
|
89
|
+
serialized.aggregateErrors = error.errors.map((item, index) => normalize(item, String(index), masks, ancestors));
|
|
90
|
+
}
|
|
91
|
+
// The cause already extends the message and stack; the undefined key drops out of the JSON.
|
|
92
|
+
if (isErrorLike(error.cause))
|
|
93
|
+
serialized.cause = undefined;
|
|
94
|
+
// `type` already names an Effect tagged error's class; legacy `err` never carried `_tag`.
|
|
95
|
+
if (Predicate.hasProperty(error, '_tag'))
|
|
96
|
+
serialized._tag = undefined;
|
|
97
|
+
addFields(serialized, error, masks, ancestors);
|
|
98
|
+
for (const field in error) {
|
|
99
|
+
if (field === 'toJSON' && Predicate.hasProperty(error, 'toJSON') && Predicate.isFunction(error.toJSON)) {
|
|
100
|
+
return normalize(error.toJSON.call(serialized, key), key, masks, ancestors);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return serialized;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* The JSON form of the value logged under `key` (`''` for a line's own fields, which pino wrote one by
|
|
107
|
+
* one): secrets masked, `Redacted` hidden, errors (and, under `err`, anything error-like, as pino's
|
|
108
|
+
* `err` serializer did) in the pino shape, `toJSON` called with `key` as `JSON.stringify` did, cycles
|
|
109
|
+
* cut. Keys starting with `~` are Effect type ids, never data. This is the logger's input boundary.
|
|
110
|
+
*/
|
|
111
|
+
const normalize = (value, key, masks, ancestors, errorLike = false) => {
|
|
112
|
+
if (Predicate.isString(value))
|
|
113
|
+
return masks.mask(value);
|
|
114
|
+
if (Predicate.isBigInt(value))
|
|
115
|
+
return value.toString();
|
|
116
|
+
if (Predicate.isNumber(value) || Predicate.isBoolean(value))
|
|
117
|
+
return value;
|
|
118
|
+
if (value === null)
|
|
119
|
+
return null;
|
|
120
|
+
// Functions, symbols, and `undefined` have no JSON form and drop out of the line.
|
|
121
|
+
if (!Predicate.isObjectOrArray(value))
|
|
122
|
+
return undefined;
|
|
123
|
+
if (Redacted.isRedacted(value))
|
|
124
|
+
return REDACTED;
|
|
125
|
+
if (ancestors.has(value))
|
|
126
|
+
return '[Circular]';
|
|
127
|
+
ancestors.add(value);
|
|
128
|
+
try {
|
|
129
|
+
if (Array.isArray(value))
|
|
130
|
+
return value.map((item, index) => normalize(item, String(index), masks, ancestors));
|
|
131
|
+
if (value instanceof Error || (errorLike && isErrorLike(value)))
|
|
132
|
+
return errorJson(value, key, masks, ancestors);
|
|
133
|
+
if (Predicate.hasProperty(value, 'toJSON') && Predicate.isFunction(value.toJSON)) {
|
|
134
|
+
return normalize(value.toJSON(key), key, masks, ancestors);
|
|
135
|
+
}
|
|
136
|
+
return addFields({}, value, masks, ancestors);
|
|
137
|
+
}
|
|
138
|
+
finally {
|
|
139
|
+
ancestors.delete(value);
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* One legacy `unnbound-logger-sdk` line: level, identity, request correlation, a fresh `logId`,
|
|
144
|
+
* annotations, the caller's plain-object fields as top-level keys, `err`, and `message` last.
|
|
145
|
+
*/
|
|
146
|
+
const lineOf = (settings, options) => {
|
|
147
|
+
const { cause, fiber, logLevel, message } = options;
|
|
148
|
+
const masks = fiber.getRef(SecretMasks);
|
|
149
|
+
const context = fiber.getRef(CurrentLogContext);
|
|
150
|
+
const invocation = Context.getOrUndefined(fiber.context, Invocation);
|
|
151
|
+
const line = {};
|
|
152
|
+
const assign = (key, value) => {
|
|
153
|
+
line[key] = normalize(value, '', masks, new Set(), key === 'err');
|
|
154
|
+
};
|
|
155
|
+
// The logger owns these keys; caller fields and annotations never replace them.
|
|
156
|
+
const assignFields = (fields) => {
|
|
157
|
+
for (const [key, value] of Object.entries(fields)) {
|
|
158
|
+
if (key !== 'level' && key !== 'logId' && key !== 'message')
|
|
159
|
+
assign(key, value);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
assign('level', lineLevels[logLevel]);
|
|
163
|
+
assign('environment', settings.environment);
|
|
164
|
+
assign('workflowId', settings.workflowId ?? invocation?.workflowId);
|
|
165
|
+
assign('serviceId', settings.serviceId);
|
|
166
|
+
assign('deploymentId', settings.deploymentId ?? invocation?.deploymentId);
|
|
167
|
+
assign('traceId', context?.traceId);
|
|
168
|
+
assign('messageId', context?.messageId);
|
|
169
|
+
assign('source', context?.source ?? settings.source);
|
|
170
|
+
assign('spanId', context?.spanId);
|
|
171
|
+
assign('logId', crypto.randomUUID());
|
|
172
|
+
assignFields(fiber.getRef(References.CurrentLogAnnotations));
|
|
173
|
+
const text = [];
|
|
174
|
+
let error;
|
|
175
|
+
for (const part of Array.isArray(message) ? message : [message]) {
|
|
176
|
+
const prototype = Predicate.isObject(part) ? Object.getPrototypeOf(part) : undefined;
|
|
177
|
+
if (Predicate.isString(part))
|
|
178
|
+
text.push(part);
|
|
179
|
+
else if (Predicate.isObject(part) && (prototype === Object.prototype || prototype === null))
|
|
180
|
+
assignFields(part);
|
|
181
|
+
else if (part instanceof Error && error === undefined)
|
|
182
|
+
error = part;
|
|
183
|
+
else
|
|
184
|
+
text.push(Redacted.isRedacted(part) ? REDACTED : Formatter.format(part));
|
|
185
|
+
}
|
|
186
|
+
if (line.err === undefined || line.err === null) {
|
|
187
|
+
assign('err', error ?? (cause.reasons.length > 0 ? Cause.squash(cause) : undefined));
|
|
188
|
+
}
|
|
189
|
+
line.message = masks.mask(text.join(' '));
|
|
190
|
+
return line;
|
|
191
|
+
};
|
|
192
|
+
const byteLength = (text) => Buffer.byteLength(text, 'utf8');
|
|
193
|
+
/** The longest prefix of `text` whose JSON string, quotes included, fits in `room` bytes; a surrogate pair stays whole. */
|
|
194
|
+
const prefixWithin = (text, room) => {
|
|
195
|
+
let low = 0;
|
|
196
|
+
let high = text.length;
|
|
197
|
+
while (low < high) {
|
|
198
|
+
const middle = Math.ceil((low + high) / 2);
|
|
199
|
+
if (byteLength(JSON.stringify(text.slice(0, middle))) <= room)
|
|
200
|
+
low = middle;
|
|
201
|
+
else
|
|
202
|
+
high = middle - 1;
|
|
203
|
+
}
|
|
204
|
+
const last = text.charCodeAt(low - 1);
|
|
205
|
+
return text.slice(0, last >= 0xd800 && last <= 0xdbff ? low - 1 : low);
|
|
206
|
+
};
|
|
207
|
+
/** Keys that identify, correlate, and route a line; a line cut to fit its budget keeps them. */
|
|
208
|
+
const identityKeys = [
|
|
209
|
+
'level',
|
|
210
|
+
'environment',
|
|
211
|
+
'workflowId',
|
|
212
|
+
'serviceId',
|
|
213
|
+
'deploymentId',
|
|
214
|
+
'traceId',
|
|
215
|
+
'messageId',
|
|
216
|
+
'source',
|
|
217
|
+
'spanId',
|
|
218
|
+
'logId',
|
|
219
|
+
'runId',
|
|
220
|
+
'executionId',
|
|
221
|
+
'attempt',
|
|
222
|
+
'triggerKind',
|
|
223
|
+
'traceparent',
|
|
224
|
+
'type',
|
|
225
|
+
];
|
|
226
|
+
/** The strings, objects, and arrays among `slots`, largest first. */
|
|
227
|
+
const largestFirst = (slots) => slots
|
|
228
|
+
.filter(({ holder, key }) => Predicate.isString(holder[key]) || Predicate.isObjectOrArray(holder[key]))
|
|
229
|
+
.map(({ holder, key }) => ({ holder, key, bytes: byteLength(JSON.stringify(holder[key])) }))
|
|
230
|
+
.sort((left, right) => right.bytes - left.bytes);
|
|
231
|
+
/**
|
|
232
|
+
* Over budget, a line keeping only its ids, http url, method, status, and headers, and as much of its
|
|
233
|
+
* message as fits, marked `truncated: { byteLength }` with the whole line's size.
|
|
234
|
+
*/
|
|
235
|
+
const reducedLine = (line, lineBytes, budget) => {
|
|
236
|
+
const ids = {};
|
|
237
|
+
for (const key of identityKeys)
|
|
238
|
+
if (line[key] !== undefined)
|
|
239
|
+
ids[key] = line[key];
|
|
240
|
+
const http = Predicate.isObject(line.http) ? line.http : undefined;
|
|
241
|
+
const request = http !== undefined && Predicate.isObject(http.request) ? http.request : undefined;
|
|
242
|
+
const response = http !== undefined && Predicate.isObject(http.response) ? http.response : undefined;
|
|
243
|
+
const message = Predicate.isString(line.message) ? line.message : '';
|
|
244
|
+
const marked = (fields) => ({ ...fields, truncated: { byteLength: lineBytes }, message: '' });
|
|
245
|
+
const reduced = [
|
|
246
|
+
{
|
|
247
|
+
...ids,
|
|
248
|
+
http: http && {
|
|
249
|
+
url: http.url,
|
|
250
|
+
method: http.method,
|
|
251
|
+
request: request && { headers: request.headers },
|
|
252
|
+
response: response && { status: response.status, headers: response.headers },
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
...ids,
|
|
257
|
+
http: http && { url: http.url, method: http.method, response: response && { status: response.status } },
|
|
258
|
+
},
|
|
259
|
+
ids,
|
|
260
|
+
]
|
|
261
|
+
.map(marked)
|
|
262
|
+
.find((candidate) => byteLength(JSON.stringify(candidate)) <= budget) ??
|
|
263
|
+
// `level` and `logId` are bounded, so this line always fits.
|
|
264
|
+
marked({ level: line.level, logId: line.logId });
|
|
265
|
+
reduced.message = prefixWithin(message, budget - byteLength(JSON.stringify(reduced)) + 2);
|
|
266
|
+
return JSON.stringify(reduced);
|
|
267
|
+
};
|
|
268
|
+
/**
|
|
269
|
+
* `line` as JSON of at most `budget` bytes, so the runtime never cuts it into invalid JSON. Over budget,
|
|
270
|
+
* the largest http bodies, then the largest other fields, become legacy's truncation marker
|
|
271
|
+
* (sdk/events/src/lib/utils.ts:167-190) holding as much of their text as fits; ids, level, message,
|
|
272
|
+
* type, and http metadata stay. When those alone exceed the budget, {@link reducedLine} drops fields.
|
|
273
|
+
*/
|
|
274
|
+
const fitLine = (line, budget) => {
|
|
275
|
+
const whole = JSON.stringify(line);
|
|
276
|
+
const wholeBytes = byteLength(whole);
|
|
277
|
+
if (wholeBytes <= budget)
|
|
278
|
+
return whole;
|
|
279
|
+
const bodies = [];
|
|
280
|
+
if (Predicate.isObject(line.http)) {
|
|
281
|
+
for (const part of [line.http.request, line.http.response]) {
|
|
282
|
+
if (Predicate.isObject(part))
|
|
283
|
+
bodies.push({ holder: part, key: 'body' });
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
const fields = Object.keys(line)
|
|
287
|
+
.filter((key) => key !== 'http' && key !== 'message' && !identityKeys.some((identity) => identity === key))
|
|
288
|
+
.map((key) => ({ holder: line, key }));
|
|
289
|
+
for (const { holder, key, bytes } of [...largestFirst(bodies), ...largestFirst(fields)]) {
|
|
290
|
+
const value = holder[key];
|
|
291
|
+
const text = Predicate.isString(value) ? value : JSON.stringify(value);
|
|
292
|
+
const marker = { truncated: true, byteLength: byteLength(text), text: '' };
|
|
293
|
+
if (byteLength(JSON.stringify(marker)) >= bytes)
|
|
294
|
+
continue;
|
|
295
|
+
holder[key] = marker;
|
|
296
|
+
const bare = byteLength(JSON.stringify(line));
|
|
297
|
+
if (bare <= budget) {
|
|
298
|
+
marker.text = prefixWithin(text, budget - bare + 2);
|
|
299
|
+
return JSON.stringify(line);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return reducedLine(line, wholeBytes, budget);
|
|
303
|
+
};
|
|
304
|
+
const workflowLogger = (settings, writeLine) => Logger.make((options) => {
|
|
305
|
+
const line = lineOf(settings, options);
|
|
306
|
+
redactLine(line);
|
|
307
|
+
writeLine(settings.lineBudget === undefined ? JSON.stringify(line) : fitLine(line, settings.lineBudget));
|
|
308
|
+
});
|
|
309
|
+
/** Replaces Effect's loggers with the workflow line logger, keeps span events, and applies `LOG_LEVEL`. */
|
|
310
|
+
export const loggerLayer = (writeLine) => Layer.unwrap(Effect.map(LogSettings, (settings) => Layer.mergeAll(Logger.layer([workflowLogger(settings, writeLine), Logger.tracerLogger], { mergeWithExisting: false }), Layer.succeed(References.MinimumLogLevel, minimumLevels[settings.level]))));
|
|
311
|
+
export const writeStdoutLine = (line) => {
|
|
312
|
+
process.stdout.write(`${line}\n`);
|
|
313
|
+
};
|
|
314
|
+
//# sourceMappingURL=Logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../src/Logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { HttpApi, type HttpApiGroup } from 'effect/unstable/httpapi';
|
|
2
|
+
import { type WorkflowManifest } from './Contract/Manifest.js';
|
|
3
|
+
export declare const SDK_VERSION = "0.2.0";
|
|
4
|
+
export declare const RUNTIME_API_VERSION = 1;
|
|
5
|
+
/** The route the SDK serves for platform probes; an API declaring `GET` on it collides with it on every request. */
|
|
6
|
+
export declare const HEALTHCHECK_PATH = "/healthcheck";
|
|
7
|
+
export declare const makeManifest: <Id extends string, Groups extends HttpApiGroup.Constraint>(api: HttpApi.HttpApi<Id, Groups>) => WorkflowManifest;
|
|
8
|
+
//# sourceMappingURL=Manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Manifest.d.ts","sourceRoot":"","sources":["../src/Manifest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAIL,KAAK,gBAAgB,EAEtB,MAAM,wBAAwB,CAAC;AAShC,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,oHAAoH;AACpH,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAoD/C,eAAO,MAAM,YAAY,GAAI,EAAE,SAAS,MAAM,EAAE,MAAM,SAAS,YAAY,CAAC,UAAU,OAC/E,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,KAC/B,gBAqDF,CAAC"}
|
package/dist/Manifest.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Context, Option, Schema } from 'effect';
|
|
2
|
+
import { HttpApi } from 'effect/unstable/httpapi';
|
|
3
|
+
import { TriggerMetadata, } from './Contract/Manifest.js';
|
|
4
|
+
import { declarationOf } from './Resource.js';
|
|
5
|
+
import { Trigger } from './Trigger.js';
|
|
6
|
+
const decodeTrigger = Schema.decodeUnknownSync(TriggerMetadata, { onExcessProperty: 'error' });
|
|
7
|
+
const identityOf = (resource) => `${resource.kind}:${resource.kind === 'resourceType' ? resource.type : resource.key}`;
|
|
8
|
+
export const SDK_VERSION = '0.2.0';
|
|
9
|
+
export const RUNTIME_API_VERSION = 1;
|
|
10
|
+
/** The route the SDK serves for platform probes; an API declaring `GET` on it collides with it on every request. */
|
|
11
|
+
export const HEALTHCHECK_PATH = '/healthcheck';
|
|
12
|
+
const compareText = (left, right) => (left < right ? -1 : left > right ? 1 : 0);
|
|
13
|
+
const compareEndpoints = (left, right) => compareText(left.group, right.group) ||
|
|
14
|
+
compareText(left.name, right.name) ||
|
|
15
|
+
compareText(left.method, right.method) ||
|
|
16
|
+
compareText(left.path, right.path);
|
|
17
|
+
/** The path a stored Trigger keys on for every method: `:param` becomes `*` (apps/api `toTriggerPathPattern`). */
|
|
18
|
+
const triggerPathPattern = (path) => path.replaceAll(/:[A-Za-z0-9_]+/g, '*');
|
|
19
|
+
/** The response policy deploy stores for a route (apps/api Triggers `seedFromManifest`). */
|
|
20
|
+
const storedPolicyOf = (trigger) => {
|
|
21
|
+
switch (trigger.kind) {
|
|
22
|
+
case 'http':
|
|
23
|
+
return trigger.response ?? 'wait';
|
|
24
|
+
case 'schedule':
|
|
25
|
+
return 'ack';
|
|
26
|
+
case 'manual':
|
|
27
|
+
return 'wait';
|
|
28
|
+
case 'internal':
|
|
29
|
+
return 'passthrough';
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const describeEndpoint = (endpoint) => `${endpoint.group}.${endpoint.name} (${endpoint.method} ${endpoint.path})`;
|
|
33
|
+
/** One stored Trigger holds one response policy, so every endpoint on its path must derive the same one. */
|
|
34
|
+
const assertOnePolicyPerPath = (endpoints) => {
|
|
35
|
+
const firstOnPath = new Map();
|
|
36
|
+
for (const endpoint of endpoints) {
|
|
37
|
+
const pattern = triggerPathPattern(endpoint.path);
|
|
38
|
+
const first = firstOnPath.get(pattern);
|
|
39
|
+
if (first === undefined) {
|
|
40
|
+
firstOnPath.set(pattern, endpoint);
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const firstPolicy = storedPolicyOf(first.trigger);
|
|
44
|
+
const policy = storedPolicyOf(endpoint.trigger);
|
|
45
|
+
if (firstPolicy !== policy) {
|
|
46
|
+
throw new Error(`Endpoints ${describeEndpoint(first)} and ${describeEndpoint(endpoint)} derive the response policies ` +
|
|
47
|
+
`${firstPolicy} and ${policy}, but share the one Trigger stored for ${pattern}. ` +
|
|
48
|
+
'Give them one policy or separate paths.');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
export const makeManifest = (api) => {
|
|
53
|
+
const endpoints = [];
|
|
54
|
+
// One key serves one declaration: a second class with the same key would read the first one's value.
|
|
55
|
+
const declarations = new Map();
|
|
56
|
+
HttpApi.reflect(api, {
|
|
57
|
+
onGroup() { },
|
|
58
|
+
onEndpoint({ endpoint, group, middleware }) {
|
|
59
|
+
const name = `${group.identifier}.${endpoint.identifier}`;
|
|
60
|
+
if (endpoint.method === 'GET' && endpoint.path === HEALTHCHECK_PATH) {
|
|
61
|
+
throw new Error(`Endpoint ${name} declares GET ${HEALTHCHECK_PATH}: remove it; the SDK serves ${HEALTHCHECK_PATH}.`);
|
|
62
|
+
}
|
|
63
|
+
const trigger = Option.getOrUndefined(Context.getOption(endpoint.annotations, Trigger));
|
|
64
|
+
if (trigger === undefined) {
|
|
65
|
+
throw new Error(`Endpoint ${name} must have a Trigger annotation.`);
|
|
66
|
+
}
|
|
67
|
+
const resources = [];
|
|
68
|
+
for (const key of middleware) {
|
|
69
|
+
const declaration = declarationOf(key);
|
|
70
|
+
if (declaration === undefined)
|
|
71
|
+
continue;
|
|
72
|
+
const first = declarations.get(key.key);
|
|
73
|
+
if (first !== undefined && first !== declaration) {
|
|
74
|
+
throw new Error(`Two declarations use ${key.key}: declare it once and share that class.`);
|
|
75
|
+
}
|
|
76
|
+
declarations.set(key.key, declaration);
|
|
77
|
+
resources.push(declaration.manifest);
|
|
78
|
+
}
|
|
79
|
+
resources.sort((left, right) => compareText(identityOf(left), identityOf(right)));
|
|
80
|
+
endpoints.push(Object.freeze({
|
|
81
|
+
group: group.identifier,
|
|
82
|
+
name: endpoint.identifier,
|
|
83
|
+
method: endpoint.method,
|
|
84
|
+
path: endpoint.path,
|
|
85
|
+
// Validated so a typo in a default never reaches the deploy that seeds records from it.
|
|
86
|
+
trigger: Object.freeze(decodeTrigger(trigger)),
|
|
87
|
+
resources: Object.freeze(resources),
|
|
88
|
+
}));
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
endpoints.sort(compareEndpoints);
|
|
92
|
+
assertOnePolicyPerPath(endpoints);
|
|
93
|
+
return Object.freeze({
|
|
94
|
+
version: 1,
|
|
95
|
+
sdkVersion: SDK_VERSION,
|
|
96
|
+
runtimeApiVersion: RUNTIME_API_VERSION,
|
|
97
|
+
apiId: api.identifier,
|
|
98
|
+
endpoints: Object.freeze(endpoints),
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=Manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Manifest.js","sourceRoot":"","sources":["../src/Manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { HttpRouter } from 'effect/unstable/http';
|
|
2
|
+
/** Wire body of the SDK-owned 504 when a request reaches its invocation deadline, less the SDK's margin. */
|
|
3
|
+
export interface DeadlineExceededBody {
|
|
4
|
+
readonly _tag: 'InvocationDeadlineExceeded';
|
|
5
|
+
readonly runId: string;
|
|
6
|
+
readonly executionId: string;
|
|
7
|
+
readonly deadline: string;
|
|
8
|
+
}
|
|
9
|
+
/** Serves every API route as an `Event request`; provide it to the routes it wraps. */
|
|
10
|
+
export declare const EventRequestMiddleware: import("effect/Layer").Layer<never, never, never>;
|
|
11
|
+
/** An unmatched route answers like legacy `notFound`: `404 {"message":"Endpoint not found."}` in its own span, with no id headers. */
|
|
12
|
+
export declare const UnmatchedRequestMiddleware: import("effect/Layer").Layer<never, never, HttpRouter.HttpRouter>;
|
|
13
|
+
//# sourceMappingURL=Middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Middleware.d.ts","sourceRoot":"","sources":["../src/Middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,UAAU,EAA0D,MAAM,sBAAsB,CAAC;AAMnH,4GAA4G;AAC5G,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,4BAA4B,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AA+VD,uFAAuF;AACvF,eAAO,MAAM,sBAAsB,mDAE5B,CAAC;AAER,sIAAsI;AACtI,eAAO,MAAM,0BAA0B,mEAMtC,CAAC"}
|