UNPKG

@sentry/utils

Version:
128 lines (109 loc) 3.55 kB
Object.defineProperty(exports, '__esModule', { value: true }); var object = require('./object.js'); /** * Creates an envelope. * Make sure to always explicitly provide the generic to this function * so that the envelope types resolve correctly. */ function createEnvelope(headers, items = []) { return [headers, items] ; } /** * Add an item to an envelope. * Make sure to always explicitly provide the generic to this function * so that the envelope types resolve correctly. */ function addItemToEnvelope(envelope, newItem) { const [headers, items] = envelope; return [headers, [...items, newItem]] ; } /** * Convenience function to loop through the items and item types of an envelope. * (This function was mostly created because working with envelope types is painful at the moment) */ function forEachEnvelopeItem( envelope, callback, ) { var envelopeItems = envelope[1]; envelopeItems.forEach((envelopeItem) => { var envelopeItemType = envelopeItem[0].type; callback(envelopeItem, envelopeItemType); }); } function encodeUTF8(input, textEncoder) { var utf8 = textEncoder || new TextEncoder(); return utf8.encode(input); } /** * Serializes an envelope. */ function serializeEnvelope(envelope, textEncoder) { const [envHeaders, items] = envelope; // Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data let parts = JSON.stringify(envHeaders); function append(next) { if (typeof parts === 'string') { parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts, textEncoder), next]; } else { parts.push(typeof next === 'string' ? encodeUTF8(next, textEncoder) : next); } } for (var item of items) { const [itemHeaders, payload] = item ; append(`\n${JSON.stringify(itemHeaders)}\n`); append(typeof payload === 'string' || payload instanceof Uint8Array ? payload : JSON.stringify(payload)); } return typeof parts === 'string' ? parts : concatBuffers(parts); } function concatBuffers(buffers) { var totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0); var merged = new Uint8Array(totalLength); let offset = 0; for (var buffer of buffers) { merged.set(buffer, offset); offset += buffer.length; } return merged; } /** * Creates attachment envelope items */ function createAttachmentEnvelopeItem( attachment, textEncoder, ) { var buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data, textEncoder) : attachment.data; return [ object.dropUndefinedKeys({ type: 'attachment', length: buffer.length, filename: attachment.filename, content_type: attachment.contentType, attachment_type: attachment.attachmentType, }), buffer, ]; } var ITEM_TYPE_TO_DATA_CATEGORY_MAP = { session: 'session', sessions: 'session', attachment: 'attachment', transaction: 'transaction', event: 'error', client_report: 'internal', user_report: 'default', }; /** * Maps the type of an envelope item to a data category. */ function envelopeItemTypeToDataCategory(type) { return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type]; } exports.addItemToEnvelope = addItemToEnvelope; exports.createAttachmentEnvelopeItem = createAttachmentEnvelopeItem; exports.createEnvelope = createEnvelope; exports.envelopeItemTypeToDataCategory = envelopeItemTypeToDataCategory; exports.forEachEnvelopeItem = forEachEnvelopeItem; exports.serializeEnvelope = serializeEnvelope; //# sourceMappingURL=envelope.js.map