arvo-core
Version:
This core package contains all the core classes and components of the Arvo Event Driven System
95 lines (94 loc) • 4.08 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createArvoEvent = void 0;
var uuid_1 = require("uuid");
var _1 = __importDefault(require("."));
var OpenTelemetry_1 = require("../OpenTelemetry");
var utils_1 = require("../utils");
var schema_1 = require("./schema");
/**
* Internal generator function for creating instances.
*/
var generator = function (event, extensions, otelHeaders) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
if (event.datacontenttype && event.datacontenttype !== schema_1.ArvoDataContentType) {
var warning = (0, utils_1.cleanString)("\n Warning! The provided datacontenttype(=".concat(event.datacontenttype, ")\n is not ArvoEvent compatible (=").concat(schema_1.ArvoDataContentType, "). There may \n be some limited functionality.\n "));
(0, OpenTelemetry_1.logToSpan)({
level: 'WARNING',
message: warning,
});
}
return new _1.default({
id: (_a = event.id) !== null && _a !== void 0 ? _a : (0, uuid_1.v4)(),
type: event.type,
accesscontrol: (_b = event.accesscontrol) !== null && _b !== void 0 ? _b : null,
executionunits: (_c = event.executionunits) !== null && _c !== void 0 ? _c : null,
traceparent: (_e = (_d = event.traceparent) !== null && _d !== void 0 ? _d : otelHeaders.traceparent) !== null && _e !== void 0 ? _e : null,
tracestate: (_g = (_f = event.tracestate) !== null && _f !== void 0 ? _f : otelHeaders.tracestate) !== null && _g !== void 0 ? _g : null,
datacontenttype: (_h = event.datacontenttype) !== null && _h !== void 0 ? _h : schema_1.ArvoDataContentType,
specversion: (_j = event.specversion) !== null && _j !== void 0 ? _j : '1.0',
time: (_k = event.time) !== null && _k !== void 0 ? _k : (0, utils_1.createTimestamp)(),
source: encodeURI(event.source),
subject: encodeURI(event.subject),
to: event.to ? encodeURI(event.to) : encodeURI(event.type),
redirectto: event.redirectto ? encodeURI(event.redirectto) : null,
dataschema: event.dataschema ? encodeURI(event.dataschema) : null,
parentid: event.parentid ? encodeURI(event.parentid) : null,
domain: (_l = event.domain) !== null && _l !== void 0 ? _l : null,
}, event.data, extensions);
};
/**
* Creates a strongly-typed ArvoEvent with configurable telemetry options.
*
* @param event - Event configuration and data
* @param [extensions] - Optional cloud event extensions
* @param [opentelemetry] - OpenTelemetry configuration with options:
* - disable - Completely disables telemetry if true
*
* @throw {Error} In case any validation in {@link ArvoEvent} fails.
*
* @returns ArvoEvent with type-safety
*
* @example
* ```typescript
* // With default telemetry
* const event = createArvoEvent({
* type: 'order.created',
* source: '/orders',
* subject: 'order-123',
* data: orderData
* });
*
* // With disabled telemetry
* const event = createArvoEvent(
* {
* type: 'order.created',
* source: '/orders',
* subject: 'order-123',
* data: orderData
* },
* undefined,
* { disable: true }
* );
* ```
*/
var createArvoEvent = function (event, extensions, opentelemetry) {
if (opentelemetry === null || opentelemetry === void 0 ? void 0 : opentelemetry.disable) {
return generator(event, extensions, {
traceparent: null,
tracestate: null,
});
}
return OpenTelemetry_1.ArvoOpenTelemetry.getInstance().startActiveSpan({
name: "createArvoEvent<".concat(event.type, ">"),
fn: function (span) {
var generatedEvent = generator(event, extensions, (0, OpenTelemetry_1.currentOpenTelemetryHeaders)());
span.setAttributes(generatedEvent.otelAttributes);
return generatedEvent;
},
});
};
exports.createArvoEvent = createArvoEvent;