@relaybus/core 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -8
- package/dist/chunk-3OHMEMZA.cjs +205 -0
- package/dist/chunk-3OHMEMZA.cjs.map +1 -0
- package/dist/chunk-WS274DL3.js +183 -0
- package/dist/chunk-WS274DL3.js.map +1 -0
- package/dist/event-DCRTuYKI.d.cts +142 -0
- package/dist/event-DCRTuYKI.d.ts +142 -0
- package/dist/index.cjs +1405 -589
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +372 -129
- package/dist/index.d.ts +372 -129
- package/dist/index.js +1283 -524
- package/dist/index.js.map +1 -1
- package/dist/internal/index.cjs +444 -0
- package/dist/internal/index.cjs.map +1 -0
- package/dist/internal/index.d.cts +171 -0
- package/dist/internal/index.d.ts +171 -0
- package/dist/internal/index.js +425 -0
- package/dist/internal/index.js.map +1 -0
- package/package.json +18 -1
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { a as EventHeaders, E as EventEnvelope, C as Clock } from '../event-DCRTuYKI.cjs';
|
|
2
|
+
|
|
3
|
+
/** Returns `value` when it is an integer of at least 1, else throws a {@link ConfigurationError} naming the option. */
|
|
4
|
+
declare function assertPositiveInteger(value: number, name: string): number;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Reads one header of an incoming message, for the `type`, `id`, `key` or
|
|
8
|
+
* `source` option of {@link plainJsonDecoder}. Header names are compared
|
|
9
|
+
* exactly (Kafka and AMQP header names are case-sensitive). Returns undefined when the
|
|
10
|
+
* header is absent, so the decoder falls back to its default.
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* plainJsonDecoder({ type: fromHeader('event-type'), id: fromHeader('message-id') })
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
declare function fromHeader(name: string): (message: {
|
|
17
|
+
readonly headers: EventHeaders;
|
|
18
|
+
}) => string | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Reads a field of the JSON payload by a dotted path (`'meta.eventType'`), for
|
|
21
|
+
* the `type`, `id`, `key` or `source` option of {@link plainJsonDecoder}. A
|
|
22
|
+
* string is returned as is and a safe integer as its decimal text (numeric ids
|
|
23
|
+
* are common). Anything else returns undefined so the decoder falls back to its
|
|
24
|
+
* default: a missing field, and also a fraction or an integer beyond 2^53, which
|
|
25
|
+
* JSON parsing may already have rounded, so two different ids could collide.
|
|
26
|
+
*
|
|
27
|
+
* ```ts
|
|
28
|
+
* plainJsonDecoder({ type: fromPayloadField('eventType'), key: fromPayloadField('order.id') })
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
declare function fromPayloadField(path: string): (message: {
|
|
32
|
+
readonly payload: unknown;
|
|
33
|
+
}) => string | undefined;
|
|
34
|
+
|
|
35
|
+
/** The media type of a content type, without parameters and lower-cased; undefined for anything but a string. */
|
|
36
|
+
declare function mediaTypeOf(contentType: unknown): string | undefined;
|
|
37
|
+
declare function isJsonObject(value: unknown): value is Record<string, unknown>;
|
|
38
|
+
/** Readers of structured CloudEvent attributes that fail with the error of the calling transport. */
|
|
39
|
+
interface CloudEventReaders {
|
|
40
|
+
readonly optionalAttribute: (body: Record<string, unknown>, name: string) => string | undefined;
|
|
41
|
+
readonly requiredAttribute: (body: Record<string, unknown>, name: string) => string;
|
|
42
|
+
readonly assertValidType: (type: string, label: string) => void;
|
|
43
|
+
readonly assertJsonDataContentType: (dataContentType: string | undefined) => void;
|
|
44
|
+
}
|
|
45
|
+
declare function createCloudEventReaders(invalid: (reason: string) => Error): CloudEventReaders;
|
|
46
|
+
/**
|
|
47
|
+
* The JSON text of a CloudEvents 1.0 structured-mode event: the attributes (the key as `subject`,
|
|
48
|
+
* correlation and causation ids as extension attributes), then `data`, the already serialized
|
|
49
|
+
* payload, so the payload is serialized only once.
|
|
50
|
+
*/
|
|
51
|
+
declare function writeStructuredCloudEvent(envelope: EventEnvelope, { time, data }: {
|
|
52
|
+
readonly time: string;
|
|
53
|
+
readonly data: string;
|
|
54
|
+
}): string;
|
|
55
|
+
|
|
56
|
+
/** A task for {@link schedule}: what runs, after how long, whether it repeats and keeps the process alive. */
|
|
57
|
+
type ScheduledTask = Parameters<NonNullable<Clock['schedule']>>[0];
|
|
58
|
+
/** Cancels a scheduled task; harmless once it ran or was cancelled. */
|
|
59
|
+
type CancelTimer = () => void;
|
|
60
|
+
/**
|
|
61
|
+
* The one place relaybus starts timers: through `clock.schedule` when the clock controls timers,
|
|
62
|
+
* else with the platform timers.
|
|
63
|
+
*/
|
|
64
|
+
declare function schedule(clock: Clock, task: ScheduledTask): CancelTimer;
|
|
65
|
+
/** Resolves after `milliseconds` on the timers of `clock`. */
|
|
66
|
+
declare function sleep(clock: Clock, milliseconds: number): Promise<void>;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* A field of the JSON body, by dotted path: `'eventName'`, `'meta.correlationId'`. A segment that
|
|
70
|
+
* is a whole number indexes an array: `'messageType.0'` is the first element of `messageType`.
|
|
71
|
+
*/
|
|
72
|
+
type BodyField = {
|
|
73
|
+
readonly body: string;
|
|
74
|
+
};
|
|
75
|
+
/** A message header (Kafka record header, AMQP message header), by exact name. */
|
|
76
|
+
type HeaderField = {
|
|
77
|
+
readonly header: string;
|
|
78
|
+
};
|
|
79
|
+
/** Where one envelope value lives on the wire. */
|
|
80
|
+
type WireField = BodyField | HeaderField;
|
|
81
|
+
/** The one event type every message of the route carries: written nowhere, used for every message read. */
|
|
82
|
+
type FixedType = {
|
|
83
|
+
readonly fixed: string;
|
|
84
|
+
};
|
|
85
|
+
type MappingFields<TField extends WireField, TTransportId extends string> = {
|
|
86
|
+
/** Where the event type lives, or the one type of the route. Required. */
|
|
87
|
+
readonly type: TField | FixedType;
|
|
88
|
+
/**
|
|
89
|
+
* Where the event id lives, or the transport's own message identity (see the transport's
|
|
90
|
+
* mapping type). Required, so the inbox dedup key is always a deliberate choice. A message
|
|
91
|
+
* whose mapped id is missing is malformed.
|
|
92
|
+
*/
|
|
93
|
+
readonly id: TField | TTransportId;
|
|
94
|
+
/** Ordering key. Default: the transport's own (the Kafka record key; none on RabbitMQ). */
|
|
95
|
+
readonly key?: TField;
|
|
96
|
+
/** Producing service. Default: the transport's own (Kafka topic; RabbitMQ `appId`, else the routing key). */
|
|
97
|
+
readonly source?: TField;
|
|
98
|
+
/** RFC 3339 time. Default: the transport's own (Kafka record timestamp; RabbitMQ `timestamp`, seconds). */
|
|
99
|
+
readonly occurredAt?: TField;
|
|
100
|
+
readonly correlationId?: TField;
|
|
101
|
+
readonly causationId?: TField;
|
|
102
|
+
/** Media type written with the message. Default `application/json`. Not checked on read. */
|
|
103
|
+
readonly contentType?: string;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* A JSON object that wraps the payload with event metadata, such as
|
|
107
|
+
* `{ "eventName": ..., "messageId": ..., "data": {...}, "meta": {...} }`.
|
|
108
|
+
* Each value lives at a body path or in a header.
|
|
109
|
+
*/
|
|
110
|
+
type BodyEnvelopeMapping<TTransportId extends string> = MappingFields<WireField, TTransportId> & {
|
|
111
|
+
/** Body path of the payload. Required. */
|
|
112
|
+
readonly payload: BodyField;
|
|
113
|
+
/**
|
|
114
|
+
* Event headers: a body path holding an object of strings, or `'message-headers'` (default),
|
|
115
|
+
* every message header that no other field maps.
|
|
116
|
+
*/
|
|
117
|
+
readonly headers?: BodyField | 'message-headers';
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* The body is the payload itself, as a plain JSON producer writes it; every other value lives in
|
|
121
|
+
* a header, so body paths are a compile error here.
|
|
122
|
+
*/
|
|
123
|
+
type PayloadOnlyMapping<TTransportId extends string> = MappingFields<HeaderField, TTransportId> & {
|
|
124
|
+
readonly payload: 'whole-body';
|
|
125
|
+
/** Event headers: every message header that no other field maps. */
|
|
126
|
+
readonly headers?: 'message-headers';
|
|
127
|
+
};
|
|
128
|
+
/** Where every envelope value lives in a JSON message. `type`, `id` and `payload` are required. */
|
|
129
|
+
type JsonEnvelopeMapping<TTransportId extends string> = BodyEnvelopeMapping<TTransportId> | PayloadOnlyMapping<TTransportId>;
|
|
130
|
+
/** A JSON message: the parsed body and the text headers. */
|
|
131
|
+
type JsonWireMessage = {
|
|
132
|
+
readonly body: unknown;
|
|
133
|
+
readonly headers: EventHeaders;
|
|
134
|
+
};
|
|
135
|
+
/** The values read from a message. An absent optional value is left to the transport's default. */
|
|
136
|
+
type JsonEnvelopeFields = {
|
|
137
|
+
readonly id?: string;
|
|
138
|
+
readonly type: string;
|
|
139
|
+
readonly payload: unknown;
|
|
140
|
+
readonly key?: string;
|
|
141
|
+
readonly source?: string;
|
|
142
|
+
readonly headers: EventHeaders;
|
|
143
|
+
readonly correlationId: string | null;
|
|
144
|
+
readonly causationId: string | null;
|
|
145
|
+
readonly occurredAt?: Date;
|
|
146
|
+
};
|
|
147
|
+
/** The errors of the calling transport. */
|
|
148
|
+
type JsonEnvelopeFailures = {
|
|
149
|
+
/** For a message that cannot be read: it goes to the invalid-message path. */
|
|
150
|
+
readonly invalid: (reason: string) => Error;
|
|
151
|
+
/** For an event that cannot be written: never retried. */
|
|
152
|
+
readonly unencodable: (reason: string) => Error;
|
|
153
|
+
};
|
|
154
|
+
/** Writes and reads one mapping. Created once per codec; both methods are pure. */
|
|
155
|
+
interface JsonEnvelopeFormat {
|
|
156
|
+
/** The mapped headers and the body; the id is left out when the transport supplies it. */
|
|
157
|
+
write(envelope: EventEnvelope): JsonWireMessage;
|
|
158
|
+
read(message: JsonWireMessage): JsonEnvelopeFields;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Compiles `mapping` once. `transportIds` lists the transport's own id strategies.
|
|
162
|
+
*
|
|
163
|
+
* @throws ConfigurationError for a mapping that is incomplete, names a header twice, nests one
|
|
164
|
+
* body path inside another or mixes array indexes and names under one body field.
|
|
165
|
+
*/
|
|
166
|
+
declare function createJsonEnvelopeFormat(mapping: JsonEnvelopeMapping<string>, { transportIds, failures, }: {
|
|
167
|
+
readonly transportIds: readonly string[];
|
|
168
|
+
readonly failures: JsonEnvelopeFailures;
|
|
169
|
+
}): JsonEnvelopeFormat;
|
|
170
|
+
|
|
171
|
+
export { type BodyEnvelopeMapping, type BodyField, type CancelTimer, type CloudEventReaders, type FixedType, type HeaderField, type JsonEnvelopeFailures, type JsonEnvelopeFields, type JsonEnvelopeFormat, type JsonEnvelopeMapping, type JsonWireMessage, type PayloadOnlyMapping, type ScheduledTask, type WireField, assertPositiveInteger, createCloudEventReaders, createJsonEnvelopeFormat, fromHeader, fromPayloadField, isJsonObject, mediaTypeOf, schedule, sleep, writeStructuredCloudEvent };
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { a as EventHeaders, E as EventEnvelope, C as Clock } from '../event-DCRTuYKI.js';
|
|
2
|
+
|
|
3
|
+
/** Returns `value` when it is an integer of at least 1, else throws a {@link ConfigurationError} naming the option. */
|
|
4
|
+
declare function assertPositiveInteger(value: number, name: string): number;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Reads one header of an incoming message, for the `type`, `id`, `key` or
|
|
8
|
+
* `source` option of {@link plainJsonDecoder}. Header names are compared
|
|
9
|
+
* exactly (Kafka and AMQP header names are case-sensitive). Returns undefined when the
|
|
10
|
+
* header is absent, so the decoder falls back to its default.
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* plainJsonDecoder({ type: fromHeader('event-type'), id: fromHeader('message-id') })
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
declare function fromHeader(name: string): (message: {
|
|
17
|
+
readonly headers: EventHeaders;
|
|
18
|
+
}) => string | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Reads a field of the JSON payload by a dotted path (`'meta.eventType'`), for
|
|
21
|
+
* the `type`, `id`, `key` or `source` option of {@link plainJsonDecoder}. A
|
|
22
|
+
* string is returned as is and a safe integer as its decimal text (numeric ids
|
|
23
|
+
* are common). Anything else returns undefined so the decoder falls back to its
|
|
24
|
+
* default: a missing field, and also a fraction or an integer beyond 2^53, which
|
|
25
|
+
* JSON parsing may already have rounded, so two different ids could collide.
|
|
26
|
+
*
|
|
27
|
+
* ```ts
|
|
28
|
+
* plainJsonDecoder({ type: fromPayloadField('eventType'), key: fromPayloadField('order.id') })
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
declare function fromPayloadField(path: string): (message: {
|
|
32
|
+
readonly payload: unknown;
|
|
33
|
+
}) => string | undefined;
|
|
34
|
+
|
|
35
|
+
/** The media type of a content type, without parameters and lower-cased; undefined for anything but a string. */
|
|
36
|
+
declare function mediaTypeOf(contentType: unknown): string | undefined;
|
|
37
|
+
declare function isJsonObject(value: unknown): value is Record<string, unknown>;
|
|
38
|
+
/** Readers of structured CloudEvent attributes that fail with the error of the calling transport. */
|
|
39
|
+
interface CloudEventReaders {
|
|
40
|
+
readonly optionalAttribute: (body: Record<string, unknown>, name: string) => string | undefined;
|
|
41
|
+
readonly requiredAttribute: (body: Record<string, unknown>, name: string) => string;
|
|
42
|
+
readonly assertValidType: (type: string, label: string) => void;
|
|
43
|
+
readonly assertJsonDataContentType: (dataContentType: string | undefined) => void;
|
|
44
|
+
}
|
|
45
|
+
declare function createCloudEventReaders(invalid: (reason: string) => Error): CloudEventReaders;
|
|
46
|
+
/**
|
|
47
|
+
* The JSON text of a CloudEvents 1.0 structured-mode event: the attributes (the key as `subject`,
|
|
48
|
+
* correlation and causation ids as extension attributes), then `data`, the already serialized
|
|
49
|
+
* payload, so the payload is serialized only once.
|
|
50
|
+
*/
|
|
51
|
+
declare function writeStructuredCloudEvent(envelope: EventEnvelope, { time, data }: {
|
|
52
|
+
readonly time: string;
|
|
53
|
+
readonly data: string;
|
|
54
|
+
}): string;
|
|
55
|
+
|
|
56
|
+
/** A task for {@link schedule}: what runs, after how long, whether it repeats and keeps the process alive. */
|
|
57
|
+
type ScheduledTask = Parameters<NonNullable<Clock['schedule']>>[0];
|
|
58
|
+
/** Cancels a scheduled task; harmless once it ran or was cancelled. */
|
|
59
|
+
type CancelTimer = () => void;
|
|
60
|
+
/**
|
|
61
|
+
* The one place relaybus starts timers: through `clock.schedule` when the clock controls timers,
|
|
62
|
+
* else with the platform timers.
|
|
63
|
+
*/
|
|
64
|
+
declare function schedule(clock: Clock, task: ScheduledTask): CancelTimer;
|
|
65
|
+
/** Resolves after `milliseconds` on the timers of `clock`. */
|
|
66
|
+
declare function sleep(clock: Clock, milliseconds: number): Promise<void>;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* A field of the JSON body, by dotted path: `'eventName'`, `'meta.correlationId'`. A segment that
|
|
70
|
+
* is a whole number indexes an array: `'messageType.0'` is the first element of `messageType`.
|
|
71
|
+
*/
|
|
72
|
+
type BodyField = {
|
|
73
|
+
readonly body: string;
|
|
74
|
+
};
|
|
75
|
+
/** A message header (Kafka record header, AMQP message header), by exact name. */
|
|
76
|
+
type HeaderField = {
|
|
77
|
+
readonly header: string;
|
|
78
|
+
};
|
|
79
|
+
/** Where one envelope value lives on the wire. */
|
|
80
|
+
type WireField = BodyField | HeaderField;
|
|
81
|
+
/** The one event type every message of the route carries: written nowhere, used for every message read. */
|
|
82
|
+
type FixedType = {
|
|
83
|
+
readonly fixed: string;
|
|
84
|
+
};
|
|
85
|
+
type MappingFields<TField extends WireField, TTransportId extends string> = {
|
|
86
|
+
/** Where the event type lives, or the one type of the route. Required. */
|
|
87
|
+
readonly type: TField | FixedType;
|
|
88
|
+
/**
|
|
89
|
+
* Where the event id lives, or the transport's own message identity (see the transport's
|
|
90
|
+
* mapping type). Required, so the inbox dedup key is always a deliberate choice. A message
|
|
91
|
+
* whose mapped id is missing is malformed.
|
|
92
|
+
*/
|
|
93
|
+
readonly id: TField | TTransportId;
|
|
94
|
+
/** Ordering key. Default: the transport's own (the Kafka record key; none on RabbitMQ). */
|
|
95
|
+
readonly key?: TField;
|
|
96
|
+
/** Producing service. Default: the transport's own (Kafka topic; RabbitMQ `appId`, else the routing key). */
|
|
97
|
+
readonly source?: TField;
|
|
98
|
+
/** RFC 3339 time. Default: the transport's own (Kafka record timestamp; RabbitMQ `timestamp`, seconds). */
|
|
99
|
+
readonly occurredAt?: TField;
|
|
100
|
+
readonly correlationId?: TField;
|
|
101
|
+
readonly causationId?: TField;
|
|
102
|
+
/** Media type written with the message. Default `application/json`. Not checked on read. */
|
|
103
|
+
readonly contentType?: string;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* A JSON object that wraps the payload with event metadata, such as
|
|
107
|
+
* `{ "eventName": ..., "messageId": ..., "data": {...}, "meta": {...} }`.
|
|
108
|
+
* Each value lives at a body path or in a header.
|
|
109
|
+
*/
|
|
110
|
+
type BodyEnvelopeMapping<TTransportId extends string> = MappingFields<WireField, TTransportId> & {
|
|
111
|
+
/** Body path of the payload. Required. */
|
|
112
|
+
readonly payload: BodyField;
|
|
113
|
+
/**
|
|
114
|
+
* Event headers: a body path holding an object of strings, or `'message-headers'` (default),
|
|
115
|
+
* every message header that no other field maps.
|
|
116
|
+
*/
|
|
117
|
+
readonly headers?: BodyField | 'message-headers';
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* The body is the payload itself, as a plain JSON producer writes it; every other value lives in
|
|
121
|
+
* a header, so body paths are a compile error here.
|
|
122
|
+
*/
|
|
123
|
+
type PayloadOnlyMapping<TTransportId extends string> = MappingFields<HeaderField, TTransportId> & {
|
|
124
|
+
readonly payload: 'whole-body';
|
|
125
|
+
/** Event headers: every message header that no other field maps. */
|
|
126
|
+
readonly headers?: 'message-headers';
|
|
127
|
+
};
|
|
128
|
+
/** Where every envelope value lives in a JSON message. `type`, `id` and `payload` are required. */
|
|
129
|
+
type JsonEnvelopeMapping<TTransportId extends string> = BodyEnvelopeMapping<TTransportId> | PayloadOnlyMapping<TTransportId>;
|
|
130
|
+
/** A JSON message: the parsed body and the text headers. */
|
|
131
|
+
type JsonWireMessage = {
|
|
132
|
+
readonly body: unknown;
|
|
133
|
+
readonly headers: EventHeaders;
|
|
134
|
+
};
|
|
135
|
+
/** The values read from a message. An absent optional value is left to the transport's default. */
|
|
136
|
+
type JsonEnvelopeFields = {
|
|
137
|
+
readonly id?: string;
|
|
138
|
+
readonly type: string;
|
|
139
|
+
readonly payload: unknown;
|
|
140
|
+
readonly key?: string;
|
|
141
|
+
readonly source?: string;
|
|
142
|
+
readonly headers: EventHeaders;
|
|
143
|
+
readonly correlationId: string | null;
|
|
144
|
+
readonly causationId: string | null;
|
|
145
|
+
readonly occurredAt?: Date;
|
|
146
|
+
};
|
|
147
|
+
/** The errors of the calling transport. */
|
|
148
|
+
type JsonEnvelopeFailures = {
|
|
149
|
+
/** For a message that cannot be read: it goes to the invalid-message path. */
|
|
150
|
+
readonly invalid: (reason: string) => Error;
|
|
151
|
+
/** For an event that cannot be written: never retried. */
|
|
152
|
+
readonly unencodable: (reason: string) => Error;
|
|
153
|
+
};
|
|
154
|
+
/** Writes and reads one mapping. Created once per codec; both methods are pure. */
|
|
155
|
+
interface JsonEnvelopeFormat {
|
|
156
|
+
/** The mapped headers and the body; the id is left out when the transport supplies it. */
|
|
157
|
+
write(envelope: EventEnvelope): JsonWireMessage;
|
|
158
|
+
read(message: JsonWireMessage): JsonEnvelopeFields;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Compiles `mapping` once. `transportIds` lists the transport's own id strategies.
|
|
162
|
+
*
|
|
163
|
+
* @throws ConfigurationError for a mapping that is incomplete, names a header twice, nests one
|
|
164
|
+
* body path inside another or mixes array indexes and names under one body field.
|
|
165
|
+
*/
|
|
166
|
+
declare function createJsonEnvelopeFormat(mapping: JsonEnvelopeMapping<string>, { transportIds, failures, }: {
|
|
167
|
+
readonly transportIds: readonly string[];
|
|
168
|
+
readonly failures: JsonEnvelopeFailures;
|
|
169
|
+
}): JsonEnvelopeFormat;
|
|
170
|
+
|
|
171
|
+
export { type BodyEnvelopeMapping, type BodyField, type CancelTimer, type CloudEventReaders, type FixedType, type HeaderField, type JsonEnvelopeFailures, type JsonEnvelopeFields, type JsonEnvelopeFormat, type JsonEnvelopeMapping, type JsonWireMessage, type PayloadOnlyMapping, type ScheduledTask, type WireField, assertPositiveInteger, createCloudEventReaders, createJsonEnvelopeFormat, fromHeader, fromPayloadField, isJsonObject, mediaTypeOf, schedule, sleep, writeStructuredCloudEvent };
|