UNPKG

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
"use strict"; 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;