arvo-core 1.1.5 → 1.1.6
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/dist/ArvoEventHttp/index.d.ts +47 -0
- package/dist/ArvoEventHttp/index.js +130 -96
- package/package.json +1 -1
@@ -30,4 +30,51 @@ export default class ArvoEventHttp {
|
|
30
30
|
* @throws {Error} If required fields are missing or if there's an error parsing the input.
|
31
31
|
*/
|
32
32
|
static importFromStructured(config: ArvoEventHttpConfig): ArvoEvent;
|
33
|
+
/**
|
34
|
+
* Validates the content type of the HTTP request.
|
35
|
+
* @param actual - The actual content type from the request.
|
36
|
+
* @param expected - The expected content type.
|
37
|
+
* @throws {Error} If the actual content type doesn't match the expected one.
|
38
|
+
*/
|
39
|
+
private static validateContentType;
|
40
|
+
/**
|
41
|
+
* Extracts event fields from the HTTP headers.
|
42
|
+
* @param headers - The HTTP headers containing event information.
|
43
|
+
* @returns An object with extracted event fields.
|
44
|
+
*/
|
45
|
+
private static extractEventFieldsFromHeaders;
|
46
|
+
/**
|
47
|
+
* Creates an error message for a missing required field.
|
48
|
+
* @param type - The type of the missing field.
|
49
|
+
* @param isHeader - A flag to distinguish between headers and structured payload
|
50
|
+
* @returns A formatted error message string.
|
51
|
+
*/
|
52
|
+
private static createErrorMessageForMissingField;
|
53
|
+
/**
|
54
|
+
* Validates that all required fields are present in the event data.
|
55
|
+
* @param event - The event data to validate.
|
56
|
+
* @param isHeader - A flag to distinguish between headers and structured payload
|
57
|
+
* @throws {Error} If any required field is missing.
|
58
|
+
*/
|
59
|
+
private static validateRequiredFields;
|
60
|
+
/**
|
61
|
+
* Extracts extension fields from the HTTP headers.
|
62
|
+
* @param headers - The HTTP headers containing event information.
|
63
|
+
* @returns An object with extracted extension fields.
|
64
|
+
*/
|
65
|
+
private static extractExtensions;
|
66
|
+
/**
|
67
|
+
* Creates an ArvoEvent instance from extracted event data, payload, and extensions.
|
68
|
+
* @param event - The extracted event data.
|
69
|
+
* @param data - The event payload.
|
70
|
+
* @param extensions - The extracted extension fields.
|
71
|
+
* @returns A new ArvoEvent instance.
|
72
|
+
*/
|
73
|
+
private static createArvoEvent;
|
74
|
+
/**
|
75
|
+
* Creates an ArvoEvent instance from structured event data.
|
76
|
+
* @param eventData - The structured event data.
|
77
|
+
* @returns A new ArvoEvent instance.
|
78
|
+
*/
|
79
|
+
private static createArvoEventFromStructured;
|
33
80
|
}
|
@@ -87,75 +87,12 @@ var ArvoEventHttp = /** @class */ (function () {
|
|
87
87
|
* @throws {Error} If required fields are missing or if there's an error parsing the input.
|
88
88
|
*/
|
89
89
|
ArvoEventHttp.importFromBinary = function (config) {
|
90
|
-
var _a, _b
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
'id',
|
97
|
-
'type',
|
98
|
-
'accesscontrol',
|
99
|
-
'executionunits',
|
100
|
-
'traceparent',
|
101
|
-
'tracestate',
|
102
|
-
'datacontenttype',
|
103
|
-
'specversion',
|
104
|
-
'time',
|
105
|
-
'source',
|
106
|
-
'subject',
|
107
|
-
'to',
|
108
|
-
'redirectto',
|
109
|
-
'dataschema',
|
110
|
-
];
|
111
|
-
var event_1 = {};
|
112
|
-
// Extract event fields from headers
|
113
|
-
for (var _i = 0, eventFields_1 = eventFields; _i < eventFields_1.length; _i++) {
|
114
|
-
var field = eventFields_1[_i];
|
115
|
-
var headerKey = "ce-".concat(field);
|
116
|
-
if (headerKey in config.headers) {
|
117
|
-
event_1[field] = config.headers[headerKey];
|
118
|
-
}
|
119
|
-
}
|
120
|
-
// Validate required fields
|
121
|
-
if (!event_1.type || !event_1.source || !event_1.subject) {
|
122
|
-
throw new Error('Missing required header fields: ce-type, ce-source, or ce-subject');
|
123
|
-
}
|
124
|
-
// Extract extensions
|
125
|
-
var prefixedEventFields_1 = eventFields.map(function (item) { return "ce-".concat(item); });
|
126
|
-
var extensions = Object.entries(config.headers)
|
127
|
-
.filter(function (_a) {
|
128
|
-
var key = _a[0];
|
129
|
-
return key.startsWith('ce-') && !prefixedEventFields_1.includes(key);
|
130
|
-
})
|
131
|
-
.reduce(function (acc, _a) {
|
132
|
-
var key = _a[0], value = _a[1];
|
133
|
-
acc[key.slice(3)] = value;
|
134
|
-
return acc;
|
135
|
-
}, {});
|
136
|
-
// Create and return ArvoEvent
|
137
|
-
return new ArvoEvent_1.default({
|
138
|
-
id: (_a = event_1.id) !== null && _a !== void 0 ? _a : (0, uuid_1.v4)(),
|
139
|
-
type: event_1.type,
|
140
|
-
accesscontrol: (_b = event_1.accesscontrol) !== null && _b !== void 0 ? _b : null,
|
141
|
-
executionunits: event_1.executionunits
|
142
|
-
? Number(event_1.executionunits)
|
143
|
-
: null,
|
144
|
-
traceparent: (_c = event_1.traceparent) !== null && _c !== void 0 ? _c : null,
|
145
|
-
tracestate: (_d = event_1.tracestate) !== null && _d !== void 0 ? _d : null,
|
146
|
-
datacontenttype: (_e = event_1.datacontenttype) !== null && _e !== void 0 ? _e : schema_1.ArvoDataContentType,
|
147
|
-
specversion: (_f = event_1.specversion) !== null && _f !== void 0 ? _f : '1.0',
|
148
|
-
time: (_g = event_1.time) !== null && _g !== void 0 ? _g : (0, utils_1.createTimestamp)(),
|
149
|
-
source: event_1.source,
|
150
|
-
subject: event_1.subject,
|
151
|
-
to: (_h = event_1.to) !== null && _h !== void 0 ? _h : null,
|
152
|
-
redirectto: (_j = event_1.redirectto) !== null && _j !== void 0 ? _j : null,
|
153
|
-
dataschema: (_k = event_1.dataschema) !== null && _k !== void 0 ? _k : null,
|
154
|
-
}, config.data, extensions);
|
155
|
-
}
|
156
|
-
catch (error) {
|
157
|
-
throw new Error("Failed to import ArvoEvent from binary: ".concat(error.message));
|
158
|
-
}
|
90
|
+
var _a, _b;
|
91
|
+
this.validateContentType((_b = (_a = config.headers['content-type']) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : "", 'application/json');
|
92
|
+
var event = this.extractEventFieldsFromHeaders(config.headers);
|
93
|
+
this.validateRequiredFields(event, true);
|
94
|
+
var extensions = this.extractExtensions(config.headers);
|
95
|
+
return this.createArvoEvent(event, config.data, extensions);
|
159
96
|
};
|
160
97
|
/**
|
161
98
|
* Imports an ArvoEvent from a structured-mode HTTP representation.
|
@@ -164,35 +101,132 @@ var ArvoEventHttp = /** @class */ (function () {
|
|
164
101
|
* @throws {Error} If required fields are missing or if there's an error parsing the input.
|
165
102
|
*/
|
166
103
|
ArvoEventHttp.importFromStructured = function (config) {
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
datacontenttype: datacontenttype !== null && datacontenttype !== void 0 ? datacontenttype : schema_1.ArvoDataContentType,
|
183
|
-
specversion: specversion !== null && specversion !== void 0 ? specversion : '1.0',
|
184
|
-
dataschema: dataschema !== null && dataschema !== void 0 ? dataschema : null,
|
185
|
-
to: to !== null && to !== void 0 ? to : null,
|
186
|
-
accesscontrol: accesscontrol !== null && accesscontrol !== void 0 ? accesscontrol : null,
|
187
|
-
redirectto: redirectto !== null && redirectto !== void 0 ? redirectto : null,
|
188
|
-
executionunits: executionunits ? Number(executionunits) : null,
|
189
|
-
traceparent: traceparent !== null && traceparent !== void 0 ? traceparent : null,
|
190
|
-
tracestate: tracestate !== null && tracestate !== void 0 ? tracestate : null,
|
191
|
-
}, data !== null && data !== void 0 ? data : {}, extensions);
|
104
|
+
var _a, _b;
|
105
|
+
this.validateContentType((_b = (_a = config.headers['content-type']) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : "", schema_1.ArvoDataContentType);
|
106
|
+
var eventData = config.data;
|
107
|
+
this.validateRequiredFields(eventData, false);
|
108
|
+
return this.createArvoEventFromStructured(eventData);
|
109
|
+
};
|
110
|
+
/**
|
111
|
+
* Validates the content type of the HTTP request.
|
112
|
+
* @param actual - The actual content type from the request.
|
113
|
+
* @param expected - The expected content type.
|
114
|
+
* @throws {Error} If the actual content type doesn't match the expected one.
|
115
|
+
*/
|
116
|
+
ArvoEventHttp.validateContentType = function (actual, expected) {
|
117
|
+
if (actual !== expected) {
|
118
|
+
throw new Error("Invalid content-type: ".concat(actual, ". Expected: ").concat(expected));
|
192
119
|
}
|
193
|
-
|
194
|
-
|
120
|
+
};
|
121
|
+
/**
|
122
|
+
* Extracts event fields from the HTTP headers.
|
123
|
+
* @param headers - The HTTP headers containing event information.
|
124
|
+
* @returns An object with extracted event fields.
|
125
|
+
*/
|
126
|
+
ArvoEventHttp.extractEventFieldsFromHeaders = function (headers) {
|
127
|
+
var eventFields = ['id', 'type', 'accesscontrol', 'executionunits', 'traceparent', 'tracestate', 'datacontenttype', 'specversion', 'time', 'source', 'subject', 'to', 'redirectto', 'dataschema'];
|
128
|
+
return Object.fromEntries(eventFields
|
129
|
+
.map(function (field) { return ["ce-".concat(field), headers["ce-".concat(field)]]; })
|
130
|
+
.filter(function (_a) {
|
131
|
+
var value = _a[1];
|
132
|
+
return value !== undefined;
|
133
|
+
})
|
134
|
+
.map(function (_a) {
|
135
|
+
var key = _a[0], value = _a[1];
|
136
|
+
return [key.slice(3), value];
|
137
|
+
}));
|
138
|
+
};
|
139
|
+
/**
|
140
|
+
* Creates an error message for a missing required field.
|
141
|
+
* @param type - The type of the missing field.
|
142
|
+
* @param isHeader - A flag to distinguish between headers and structured payload
|
143
|
+
* @returns A formatted error message string.
|
144
|
+
*/
|
145
|
+
ArvoEventHttp.createErrorMessageForMissingField = function (type, isHeader) {
|
146
|
+
if (isHeader) {
|
147
|
+
return "Missing required header field(s): ".concat(type);
|
195
148
|
}
|
149
|
+
return "Missing required field(s): ".concat(type);
|
150
|
+
};
|
151
|
+
/**
|
152
|
+
* Validates that all required fields are present in the event data.
|
153
|
+
* @param event - The event data to validate.
|
154
|
+
* @param isHeader - A flag to distinguish between headers and structured payload
|
155
|
+
* @throws {Error} If any required field is missing.
|
156
|
+
*/
|
157
|
+
ArvoEventHttp.validateRequiredFields = function (event, isHeader) {
|
158
|
+
['type', 'source', 'subject'].forEach(function (field) {
|
159
|
+
if (!event[field]) {
|
160
|
+
throw new Error(ArvoEventHttp.createErrorMessageForMissingField(isHeader ? "ce-".concat(field) : field, isHeader));
|
161
|
+
}
|
162
|
+
});
|
163
|
+
};
|
164
|
+
/**
|
165
|
+
* Extracts extension fields from the HTTP headers.
|
166
|
+
* @param headers - The HTTP headers containing event information.
|
167
|
+
* @returns An object with extracted extension fields.
|
168
|
+
*/
|
169
|
+
ArvoEventHttp.extractExtensions = function (headers) {
|
170
|
+
var eventFields = ['id', 'type', 'accesscontrol', 'executionunits', 'traceparent', 'tracestate', 'datacontenttype', 'specversion', 'time', 'source', 'subject', 'to', 'redirectto', 'dataschema'];
|
171
|
+
return Object.fromEntries(Object.entries(headers)
|
172
|
+
.filter(function (_a) {
|
173
|
+
var key = _a[0];
|
174
|
+
return key.startsWith('ce-') && !eventFields.includes(key.slice(3));
|
175
|
+
})
|
176
|
+
.map(function (_a) {
|
177
|
+
var key = _a[0], value = _a[1];
|
178
|
+
return [key.slice(3), value];
|
179
|
+
}));
|
180
|
+
};
|
181
|
+
/**
|
182
|
+
* Creates an ArvoEvent instance from extracted event data, payload, and extensions.
|
183
|
+
* @param event - The extracted event data.
|
184
|
+
* @param data - The event payload.
|
185
|
+
* @param extensions - The extracted extension fields.
|
186
|
+
* @returns A new ArvoEvent instance.
|
187
|
+
*/
|
188
|
+
ArvoEventHttp.createArvoEvent = function (event, data, extensions) {
|
189
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
190
|
+
return new ArvoEvent_1.default({
|
191
|
+
id: (_a = event.id) !== null && _a !== void 0 ? _a : (0, uuid_1.v4)(),
|
192
|
+
type: event.type,
|
193
|
+
accesscontrol: (_b = event.accesscontrol) !== null && _b !== void 0 ? _b : null,
|
194
|
+
executionunits: event.executionunits ? Number(event.executionunits) : null,
|
195
|
+
traceparent: (_c = event.traceparent) !== null && _c !== void 0 ? _c : null,
|
196
|
+
tracestate: (_d = event.tracestate) !== null && _d !== void 0 ? _d : null,
|
197
|
+
datacontenttype: (_e = event.datacontenttype) !== null && _e !== void 0 ? _e : schema_1.ArvoDataContentType,
|
198
|
+
specversion: (_f = event.specversion) !== null && _f !== void 0 ? _f : '1.0',
|
199
|
+
time: (_g = event.time) !== null && _g !== void 0 ? _g : (0, utils_1.createTimestamp)(),
|
200
|
+
source: event.source,
|
201
|
+
subject: event.subject,
|
202
|
+
to: (_h = event.to) !== null && _h !== void 0 ? _h : null,
|
203
|
+
redirectto: (_j = event.redirectto) !== null && _j !== void 0 ? _j : null,
|
204
|
+
dataschema: (_k = event.dataschema) !== null && _k !== void 0 ? _k : null,
|
205
|
+
}, data, extensions);
|
206
|
+
};
|
207
|
+
/**
|
208
|
+
* Creates an ArvoEvent instance from structured event data.
|
209
|
+
* @param eventData - The structured event data.
|
210
|
+
* @returns A new ArvoEvent instance.
|
211
|
+
*/
|
212
|
+
ArvoEventHttp.createArvoEventFromStructured = function (eventData) {
|
213
|
+
var id = eventData.id, type = eventData.type, source = eventData.source, subject = eventData.subject, time = eventData.time, datacontenttype = eventData.datacontenttype, specversion = eventData.specversion, dataschema = eventData.dataschema, data = eventData.data, to = eventData.to, accesscontrol = eventData.accesscontrol, redirectto = eventData.redirectto, executionunits = eventData.executionunits, traceparent = eventData.traceparent, tracestate = eventData.tracestate, extensions = __rest(eventData, ["id", "type", "source", "subject", "time", "datacontenttype", "specversion", "dataschema", "data", "to", "accesscontrol", "redirectto", "executionunits", "traceparent", "tracestate"]);
|
214
|
+
return ArvoEventHttp.createArvoEvent({
|
215
|
+
id: id !== null && id !== void 0 ? id : (0, uuid_1.v4)(),
|
216
|
+
type: type,
|
217
|
+
source: source,
|
218
|
+
subject: subject,
|
219
|
+
time: time !== null && time !== void 0 ? time : (0, utils_1.createTimestamp)(),
|
220
|
+
datacontenttype: datacontenttype !== null && datacontenttype !== void 0 ? datacontenttype : schema_1.ArvoDataContentType,
|
221
|
+
specversion: specversion !== null && specversion !== void 0 ? specversion : '1.0',
|
222
|
+
dataschema: dataschema !== null && dataschema !== void 0 ? dataschema : null,
|
223
|
+
to: to !== null && to !== void 0 ? to : null,
|
224
|
+
accesscontrol: accesscontrol !== null && accesscontrol !== void 0 ? accesscontrol : null,
|
225
|
+
redirectto: redirectto !== null && redirectto !== void 0 ? redirectto : null,
|
226
|
+
executionunits: executionunits ? Number(executionunits) : null,
|
227
|
+
traceparent: traceparent !== null && traceparent !== void 0 ? traceparent : null,
|
228
|
+
tracestate: tracestate !== null && tracestate !== void 0 ? tracestate : null,
|
229
|
+
}, data !== null && data !== void 0 ? data : {}, extensions);
|
196
230
|
};
|
197
231
|
return ArvoEventHttp;
|
198
232
|
}());
|