@snap/camera-kit
Version:
Camera Kit Web
61 lines • 3.2 kB
JavaScript
import { isState } from "@snap/state-management";
import { metricsClientFactory } from "../clients/metricsClient";
import { Injectable } from "../dependency-injection/Injectable";
import { lensKeyboardFactory } from "../session/LensKeyboard";
import { lensStateFactory } from "../session/lensState";
import { lensRepositoryFactory } from "../lens/LensRepository";
import { sessionStateFactory } from "../session/sessionState";
import { getLogger } from "../logger/logger";
import { lensCoreFactory } from "../lens-core-module/loader/lensCoreFactory";
import { getRemoteApiUriHandler, remoteApiServicesFactory } from "./RemoteApiServices";
import { extractSchemeAndRoute, isUriHandlers, isUriResponse, uriHandlersFactory } from "./UriHandlers";
const logger = getLogger("uriHandlersRegister");
export const registerUriHandlers = Injectable("registerUriHandlers", [
lensCoreFactory.token,
lensStateFactory.token,
uriHandlersFactory.token,
lensKeyboardFactory.token,
remoteApiServicesFactory.token,
lensRepositoryFactory.token,
sessionStateFactory.token,
metricsClientFactory.token,
], (lensCore, lensState, userHandlers, lensKeyboard, remoteApiServices, lensRepository, sessionState, metrics) => {
if (!isUriHandlers(userHandlers)) {
throw new Error("Expected an array of UriHandler objects");
}
const allHandlers = userHandlers.concat(lensKeyboard.uriHandler, getRemoteApiUriHandler(remoteApiServices, sessionState, lensState, lensRepository, metrics));
for (const { uri, handleRequest, cancelRequest } of allHandlers) {
const uris = Array.isArray(uri) ? uri : [uri];
for (const { scheme, route } of uris.map(extractSchemeAndRoute)) {
lensCore.registerUriListener(scheme, route, {
handleRequest: (request) => {
const reply = (response) => {
if (!isUriResponse(response)) {
throw new Error("Expected UriResponse object");
}
lensCore.provideUriResponse(request.identifier, response);
};
const state = lensState.getState();
if (isState(state, "noLensApplied")) {
logger.warn(`Got a URI request for ${request.uri}, but there is no active lens. The ` +
`request will not be processed.`);
return;
}
handleRequest(request, reply, state.data);
},
cancelRequest: (request) => {
if (cancelRequest) {
const state = lensState.getState();
if (isState(state, "noLensApplied")) {
logger.warn(`Got a URI cancel request for ${request.uri}, but there is no active ` +
`lens. The cancel request will not be processed.`);
return;
}
cancelRequest(request, state.data);
}
},
});
}
}
});
//# sourceMappingURL=uriHandlersRegister.js.map