UNPKG

@snap/camera-kit

Version:
42 lines 2.09 kB
import { __awaiter } from "tslib"; import { ensureError } from "../common/errorHelpers"; import { Injectable } from "../dependency-injection/Injectable"; import { TypedCustomEvent } from "../events/TypedCustomEvent"; import { TypedEventTarget } from "../events/TypedEventTarget"; import { Timer } from "../metrics/operational/Timer"; let requestId = 0; const safeParseInt = (str) => { if (str == null) return 0; const maybeInt = parseInt(str); return isNaN(maybeInt) ? 0 : maybeInt; }; export const dispatchRequestStarted = (requestStateEventTarget, data) => { const started = Object.assign(Object.assign({}, data), { requestId: requestId++, timer: new Timer("download_latency") }); requestStateEventTarget.dispatchEvent(new TypedCustomEvent("started", started)); return started; }; export const dispatchRequestCompleted = (requestStateEventTarget, data) => { requestStateEventTarget.dispatchEvent(new TypedCustomEvent("completed", data)); return data; }; export const dispatchRequestErrored = (requestStateEventTarget, data) => { requestStateEventTarget.dispatchEvent(new TypedCustomEvent("errored", data)); return data; }; export const createRequestStateEmittingHandler = (requestStateEventTarget) => (next) => ([request, dimensions], metadata) => __awaiter(void 0, void 0, void 0, function* () { const { requestId } = dispatchRequestStarted(requestStateEventTarget, { dimensions }); try { const response = yield next(request, metadata); const status = response.status; const sizeByte = safeParseInt(response.headers.get("content-length")); dispatchRequestCompleted(requestStateEventTarget, { requestId, dimensions, status, sizeByte }); return response; } catch (error) { dispatchRequestErrored(requestStateEventTarget, { requestId, dimensions, error: ensureError(error) }); throw error; } }); export const requestStateEventTargetFactory = Injectable("requestStateEventTarget", () => new TypedEventTarget()); //# sourceMappingURL=requestStateEmittingHandler.js.map