@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.
- package/NOTICE +6 -0
- package/package.json +93 -3
- package/src/api-contract/artifacts.d.ts +67 -0
- package/src/api-contract/artifacts.js +349 -0
- package/src/api-contract/artifacts.js.map +1 -0
- package/src/api-contract/client.d.ts +79 -0
- package/src/api-contract/client.js +561 -0
- package/src/api-contract/client.js.map +1 -0
- package/src/api-contract/errors.d.ts +7 -0
- package/src/api-contract/errors.js +11 -0
- package/src/api-contract/errors.js.map +1 -0
- package/src/api-contract/index.d.ts +9 -0
- package/src/api-contract/index.js +10 -0
- package/src/api-contract/index.js.map +1 -0
- package/src/api-contract/operation.d.ts +118 -0
- package/src/api-contract/operation.js +609 -0
- package/src/api-contract/operation.js.map +1 -0
- package/src/api-contract/schema.d.ts +81 -0
- package/src/api-contract/schema.js +313 -0
- package/src/api-contract/schema.js.map +1 -0
- package/src/api-contract/server.d.ts +77 -0
- package/src/api-contract/server.js +466 -0
- package/src/api-contract/server.js.map +1 -0
- package/src/async-work/contract.d.ts +17 -0
- package/src/async-work/contract.js +105 -0
- package/src/async-work/contract.js.map +1 -0
- package/src/async-work/idempotency.d.ts +123 -0
- package/src/async-work/idempotency.js +167 -0
- package/src/async-work/idempotency.js.map +1 -0
- package/src/async-work/index.d.ts +8 -0
- package/src/async-work/index.js +9 -0
- package/src/async-work/index.js.map +1 -0
- package/src/async-work/provider.d.ts +90 -0
- package/src/async-work/provider.js +155 -0
- package/src/async-work/provider.js.map +1 -0
- package/src/async-work/recovery.d.ts +103 -0
- package/src/async-work/recovery.js +291 -0
- package/src/async-work/recovery.js.map +1 -0
- package/src/async-work/schedule.d.ts +117 -0
- package/src/async-work/schedule.js +279 -0
- package/src/async-work/schedule.js.map +1 -0
- package/src/async-work/sqs.d.ts +133 -0
- package/src/async-work/sqs.js +280 -0
- package/src/async-work/sqs.js.map +1 -0
- package/src/async-work/webhook.d.ts +60 -0
- package/src/async-work/webhook.js +178 -0
- package/src/async-work/webhook.js.map +1 -0
- package/src/async-work/workflow.d.ts +98 -0
- package/src/async-work/workflow.js +225 -0
- package/src/async-work/workflow.js.map +1 -0
- package/src/auth-backend.d.ts +12 -2
- package/src/auth-backend.js +30 -18
- package/src/auth-backend.js.map +1 -1
- package/src/authorization/admission.d.ts +30 -0
- package/src/authorization/admission.js +87 -0
- package/src/authorization/admission.js.map +1 -0
- package/src/authorization/approval.d.ts +99 -0
- package/src/authorization/approval.js +249 -0
- package/src/authorization/approval.js.map +1 -0
- package/src/authorization/audit.d.ts +35 -0
- package/src/authorization/audit.js +35 -0
- package/src/authorization/audit.js.map +1 -0
- package/src/authorization/delegation.d.ts +149 -0
- package/src/authorization/delegation.js +401 -0
- package/src/authorization/delegation.js.map +1 -0
- package/src/authorization/errors.d.ts +32 -0
- package/src/authorization/errors.js +153 -0
- package/src/authorization/errors.js.map +1 -0
- package/src/authorization/evaluator.d.ts +39 -0
- package/src/authorization/evaluator.js +199 -0
- package/src/authorization/evaluator.js.map +1 -0
- package/src/authorization/index.d.ts +14 -0
- package/src/authorization/index.js +15 -0
- package/src/authorization/index.js.map +1 -0
- package/src/authorization/machine-token.d.ts +87 -0
- package/src/authorization/machine-token.js +201 -0
- package/src/authorization/machine-token.js.map +1 -0
- package/src/authorization/machine.d.ts +32 -0
- package/src/authorization/machine.js +41 -0
- package/src/authorization/machine.js.map +1 -0
- package/src/authorization/model.d.ts +112 -0
- package/src/authorization/model.js +112 -0
- package/src/authorization/model.js.map +1 -0
- package/src/canonical-json.cjs +157 -0
- package/src/canonical-json.d.cts +26 -0
- package/src/canonical-json.d.ts +18 -0
- package/src/canonical-json.js +125 -0
- package/src/canonical-json.js.map +1 -0
- package/src/configuration/contract.d.ts +107 -0
- package/src/configuration/contract.js +461 -0
- package/src/configuration/contract.js.map +1 -0
- package/src/configuration/index.d.ts +3 -0
- package/src/configuration/index.js +4 -0
- package/src/configuration/index.js.map +1 -0
- package/src/configuration/provider.d.ts +59 -0
- package/src/configuration/provider.js +198 -0
- package/src/configuration/provider.js.map +1 -0
- package/src/configuration/rollout-evaluator.cjs +54 -0
- package/src/configuration/rollout-evaluator.d.cts +26 -0
- package/src/configuration/rollout-evaluator.d.ts +18 -0
- package/src/configuration/rollout-evaluator.js +38 -0
- package/src/configuration/rollout-evaluator.js.map +1 -0
- package/src/configuration/rollout-key.cjs +38 -0
- package/src/configuration/rollout-key.d.cts +14 -0
- package/src/configuration/rollout-key.d.ts +10 -0
- package/src/configuration/rollout-key.js +26 -0
- package/src/configuration/rollout-key.js.map +1 -0
- package/src/configuration/rollout.d.ts +60 -0
- package/src/configuration/rollout.js +42 -0
- package/src/configuration/rollout.js.map +1 -0
- package/src/data-lifecycle/contract.d.ts +33 -0
- package/src/data-lifecycle/contract.js +118 -0
- package/src/data-lifecycle/contract.js.map +1 -0
- package/src/data-lifecycle/event.d.ts +28 -0
- package/src/data-lifecycle/event.js +76 -0
- package/src/data-lifecycle/event.js.map +1 -0
- package/src/data-lifecycle/evidence.d.ts +65 -0
- package/src/data-lifecycle/evidence.js +162 -0
- package/src/data-lifecycle/evidence.js.map +1 -0
- package/src/data-lifecycle/holds.d.ts +29 -0
- package/src/data-lifecycle/holds.js +124 -0
- package/src/data-lifecycle/holds.js.map +1 -0
- package/src/data-lifecycle/index.d.ts +8 -0
- package/src/data-lifecycle/index.js +9 -0
- package/src/data-lifecycle/index.js.map +1 -0
- package/src/data-lifecycle/policy.d.ts +16 -0
- package/src/data-lifecycle/policy.js +79 -0
- package/src/data-lifecycle/policy.js.map +1 -0
- package/src/data-lifecycle/restore.d.ts +90 -0
- package/src/data-lifecycle/restore.js +336 -0
- package/src/data-lifecycle/restore.js.map +1 -0
- package/src/data-lifecycle/retention.d.ts +57 -0
- package/src/data-lifecycle/retention.js +232 -0
- package/src/data-lifecycle/retention.js.map +1 -0
- package/src/data-lifecycle/rights.d.ts +171 -0
- package/src/data-lifecycle/rights.js +533 -0
- package/src/data-lifecycle/rights.js.map +1 -0
- package/src/database.d.ts +36 -0
- package/src/database.js +119 -0
- package/src/database.js.map +1 -0
- package/src/deterministic-order.cjs +16 -0
- package/src/deterministic-order.d.cts +9 -0
- package/src/deterministic-order.d.ts +7 -0
- package/src/deterministic-order.js +10 -0
- package/src/deterministic-order.js.map +1 -0
- package/src/events.d.ts +28 -19
- package/src/events.js +171 -66
- package/src/events.js.map +1 -1
- package/src/index.d.ts +7 -1
- package/src/index.js +24 -0
- package/src/index.js.map +1 -1
- package/src/lambda.d.ts +8 -2
- package/src/lambda.js +100 -39
- package/src/lambda.js.map +1 -1
- package/src/logging.d.ts +95 -36
- package/src/logging.js +460 -62
- package/src/logging.js.map +1 -1
- package/src/observability.d.ts +80 -18
- package/src/observability.js +252 -61
- package/src/observability.js.map +1 -1
- package/src/performance/index.d.ts +1 -0
- package/src/performance/index.js +2 -0
- package/src/performance/index.js.map +1 -0
- package/src/performance/protected-load-endpoint.d.ts +140 -0
- package/src/performance/protected-load-endpoint.js +462 -0
- package/src/performance/protected-load-endpoint.js.map +1 -0
- package/src/rds-global-ca-bundle.d.ts +1 -0
- package/src/rds-global-ca-bundle.js +2742 -0
- package/src/rds-global-ca-bundle.js.map +1 -0
- package/src/reliability/burn.d.ts +39 -0
- package/src/reliability/burn.js +102 -0
- package/src/reliability/burn.js.map +1 -0
- package/src/reliability/contract.d.ts +5 -0
- package/src/reliability/contract.js +317 -0
- package/src/reliability/contract.js.map +1 -0
- package/src/reliability/incident.d.ts +16 -0
- package/src/reliability/incident.js +562 -0
- package/src/reliability/incident.js.map +1 -0
- package/src/reliability/index.d.ts +5 -0
- package/src/reliability/index.js +6 -0
- package/src/reliability/index.js.map +1 -0
- package/src/reliability/model.d.ts +191 -0
- package/src/reliability/model.fixtures.d.ts +2 -0
- package/src/reliability/model.fixtures.js +57 -0
- package/src/reliability/model.fixtures.js.map +1 -0
- package/src/reliability/model.js +2 -0
- package/src/reliability/model.js.map +1 -0
- package/src/reliability/slo.d.ts +9 -0
- package/src/reliability/slo.js +74 -0
- package/src/reliability/slo.js.map +1 -0
- package/src/request-context.d.ts +57 -15
- package/src/request-context.js +116 -36
- package/src/request-context.js.map +1 -1
- package/src/safe-reference.cjs +57 -0
- package/src/safe-reference.d.cts +25 -0
- package/src/safe-reference.d.ts +11 -0
- package/src/safe-reference.js +46 -0
- package/src/safe-reference.js.map +1 -0
- package/src/secrets/contract.d.ts +99 -0
- package/src/secrets/contract.js +238 -0
- package/src/secrets/contract.js.map +1 -0
- package/src/secrets/index.d.ts +4 -0
- package/src/secrets/index.js +5 -0
- package/src/secrets/index.js.map +1 -0
- package/src/secrets/observability.d.ts +14 -0
- package/src/secrets/observability.js +100 -0
- package/src/secrets/observability.js.map +1 -0
- package/src/secrets/personal.d.ts +48 -0
- package/src/secrets/personal.js +332 -0
- package/src/secrets/personal.js.map +1 -0
- package/src/secrets/resolver.d.ts +125 -0
- package/src/secrets/resolver.js +602 -0
- package/src/secrets/resolver.js.map +1 -0
- package/src/secrets/sensitive-patterns.cjs +84 -0
- package/src/secrets/sensitive-patterns.d.cts +62 -0
- package/src/secrets/sensitive-patterns.d.ts +40 -0
- package/src/secrets/sensitive-patterns.js +60 -0
- package/src/secrets/sensitive-patterns.js.map +1 -0
package/src/database.js
ADDED
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
|
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
|
-
|
|
19
|
-
|
|
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
|
-
|
|
24
|
-
|
|
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 =
|
|
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 =
|
|
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 (
|
|
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
|
-
|
|
58
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 ||
|
|
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
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
'
|
|
91
|
-
|
|
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 (
|
|
94
|
-
throw new Error(`[runtime/events] Event envelope meta.${field} is
|
|
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
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
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 (
|
|
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
|
-
|
|
147
|
-
|
|
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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"}
|