UNPKG

arvo-core

Version:

The core Arvo package which provides application tier core primitives and contract system for building production-grade event-driven application. Provides ArvoEvent (CloudEvents-compliant), ArvoContract for type-safe service interfaces, event factories, O

95 lines (94 loc) 4.05 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 _1 = __importDefault(require(".")); var OpenTelemetry_1 = require("../OpenTelemetry"); var utils_1 = require("../utils"); var id_1 = require("./id"); 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; 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: (0, id_1.createArvoEventId)(event.id), type: event.type, accesscontrol: (_a = event.accesscontrol) !== null && _a !== void 0 ? _a : null, executionunits: (_b = event.executionunits) !== null && _b !== void 0 ? _b : null, traceparent: (_d = (_c = event.traceparent) !== null && _c !== void 0 ? _c : otelHeaders.traceparent) !== null && _d !== void 0 ? _d : null, tracestate: (_f = (_e = event.tracestate) !== null && _e !== void 0 ? _e : otelHeaders.tracestate) !== null && _f !== void 0 ? _f : null, datacontenttype: (_g = event.datacontenttype) !== null && _g !== void 0 ? _g : schema_1.ArvoDataContentType, specversion: (_h = event.specversion) !== null && _h !== void 0 ? _h : '1.0', time: (_j = event.time) !== null && _j !== void 0 ? _j : (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: (_k = event.domain) !== null && _k !== void 0 ? _k : 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;