@snap/camera-kit
Version:
Camera Kit Web
42 lines • 2.09 kB
JavaScript
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