UNPKG

@itwin/core-common

Version:

iTwin.js components common to frontend and backend

71 lines 3.67 kB
"use strict"; /*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ /** @packageDocumentation * @module RpcInterface */ Object.defineProperty(exports, "__esModule", { value: true }); exports.BentleyCloudRpcManager = exports.BentleyCloudRpcConfiguration = void 0; const RpcManager_1 = require("../../RpcManager"); const RpcConfiguration_1 = require("../core/RpcConfiguration"); const RpcConstants_1 = require("../core/RpcConstants"); const RpcRequest_1 = require("../core/RpcRequest"); const BentleyCloudRpcProtocol_1 = require("./BentleyCloudRpcProtocol"); const RpcRoutingToken_1 = require("../core/RpcRoutingToken"); /** Operating parameters for Bentley cloud RPC interface deployments. * @beta */ class BentleyCloudRpcConfiguration extends RpcConfiguration_1.RpcConfiguration { /** Access-Control header values for backend servers that serve frontends using BentleyCloudRpcProtocol. */ static accessControl = { allowOrigin: "*", allowMethods: "POST, GET, OPTIONS", allowHeaders: "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With, X-Correlation-Id, X-Session-Id, X-Application-Id, X-Application-Version, X-User-Id, X-Protocol-Version", }; } exports.BentleyCloudRpcConfiguration = BentleyCloudRpcConfiguration; /** Coordinates usage of RPC interfaces for Bentley cloud deployments. * @beta */ class BentleyCloudRpcManager extends RpcManager_1.RpcManager { /** @beta Initializes BentleyCloudRpcManager for the frontend of an application. */ static initializeClient(params, interfaces, routing = RpcRoutingToken_1.RpcRoutingToken.default) { return BentleyCloudRpcManager.performInitialization(params, interfaces, routing); } /** @beta Initializes BentleyCloudRpcManager for the backend of an application. */ static initializeImpl(params, interfaces) { return BentleyCloudRpcManager.performInitialization(params, interfaces); } static performInitialization(params, interfaces, routing = RpcRoutingToken_1.RpcRoutingToken.default) { const protocol = class extends (params.protocol || BentleyCloudRpcProtocol_1.BentleyCloudRpcProtocol) { pathPrefix = params.uriPrefix || ""; info = params.info; }; const config = class extends BentleyCloudRpcConfiguration { interfaces = () => interfaces; protocol = new protocol(this); routing = routing; }; for (const def of interfaces) { RpcConfiguration_1.RpcConfiguration.assignWithRouting(def, routing, config); } const instance = RpcConfiguration_1.RpcConfiguration.obtain(config); if (params.pathPrefix) { instance.protocol.pathPrefix = params.pathPrefix; } RpcConfiguration_1.RpcConfiguration.initializeInterfaces(instance); if (params.pendingRequestListener) { const listener = params.pendingRequestListener; RpcRequest_1.RpcRequest.events.addListener((type, request) => { if (type === RpcConstants_1.RpcRequestEvent.PendingUpdateReceived && request.protocol === instance.protocol) { listener(type, request); } }); } return instance; } } exports.BentleyCloudRpcManager = BentleyCloudRpcManager; //# sourceMappingURL=BentleyCloudRpcManager.js.map