@itwin/core-common 3.7.0-dev.7 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -1
- package/lib/cjs/RpcInterface.d.ts +9 -2
- package/lib/cjs/RpcInterface.d.ts.map +1 -1
- package/lib/cjs/RpcInterface.js.map +1 -1
- package/lib/cjs/RpcManager.d.ts +2 -2
- package/lib/cjs/RpcManager.js +1 -1
- package/lib/cjs/RpcManager.js.map +1 -1
- package/lib/cjs/rpc/core/RpcConfiguration.d.ts +3 -3
- package/lib/cjs/rpc/core/RpcConfiguration.d.ts.map +1 -1
- package/lib/cjs/rpc/core/RpcConfiguration.js +3 -3
- package/lib/cjs/rpc/core/RpcConfiguration.js.map +1 -1
- package/lib/cjs/rpc/core/RpcRoutingToken.d.ts +1 -1
- package/lib/cjs/rpc/core/RpcRoutingToken.d.ts.map +1 -1
- package/lib/cjs/rpc/core/RpcRoutingToken.js +1 -1
- package/lib/cjs/rpc/core/RpcRoutingToken.js.map +1 -1
- package/lib/cjs/rpc/web/BentleyCloudRpcManager.d.ts +10 -8
- package/lib/cjs/rpc/web/BentleyCloudRpcManager.d.ts.map +1 -1
- package/lib/cjs/rpc/web/BentleyCloudRpcManager.js +7 -4
- package/lib/cjs/rpc/web/BentleyCloudRpcManager.js.map +1 -1
- package/lib/esm/RpcInterface.d.ts +9 -2
- package/lib/esm/RpcInterface.d.ts.map +1 -1
- package/lib/esm/RpcInterface.js.map +1 -1
- package/lib/esm/RpcManager.d.ts +2 -2
- package/lib/esm/RpcManager.js +1 -1
- package/lib/esm/RpcManager.js.map +1 -1
- package/lib/esm/rpc/core/RpcConfiguration.d.ts +3 -3
- package/lib/esm/rpc/core/RpcConfiguration.d.ts.map +1 -1
- package/lib/esm/rpc/core/RpcConfiguration.js +3 -3
- package/lib/esm/rpc/core/RpcConfiguration.js.map +1 -1
- package/lib/esm/rpc/core/RpcRoutingToken.d.ts +1 -1
- package/lib/esm/rpc/core/RpcRoutingToken.d.ts.map +1 -1
- package/lib/esm/rpc/core/RpcRoutingToken.js +1 -1
- package/lib/esm/rpc/core/RpcRoutingToken.js.map +1 -1
- package/lib/esm/rpc/web/BentleyCloudRpcManager.d.ts +10 -8
- package/lib/esm/rpc/web/BentleyCloudRpcManager.d.ts.map +1 -1
- package/lib/esm/rpc/web/BentleyCloudRpcManager.js +7 -4
- package/lib/esm/rpc/web/BentleyCloudRpcManager.js.map +1 -1
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
# Change Log - @itwin/core-common
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Wed, 29 Mar 2023 15:02:27 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 3.7.0
|
|
6
|
+
Wed, 29 Mar 2023 15:02:27 GMT
|
|
7
|
+
|
|
8
|
+
### Updates
|
|
9
|
+
|
|
10
|
+
- React to IModelApp.rpcInterfaces and BentleyCloudRpcManager changes.
|
|
11
|
+
- Add interfaces representing 3d tileset schema.
|
|
12
|
+
|
|
13
|
+
## 3.6.3
|
|
14
|
+
Mon, 27 Mar 2023 16:26:47 GMT
|
|
15
|
+
|
|
16
|
+
_Version update only_
|
|
4
17
|
|
|
5
18
|
## 3.6.2
|
|
6
19
|
Fri, 17 Mar 2023 17:52:32 GMT
|
|
@@ -3,13 +3,20 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { RpcConfiguration, RpcConfigurationSupplier } from "./rpc/core/RpcConfiguration";
|
|
5
5
|
import { RpcRoutingToken } from "./rpc/core/RpcRoutingToken";
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Specifies the required static properties of an RpcInterface class.
|
|
8
|
+
* These properties are used to identify RPC requests and responses.
|
|
9
|
+
* @beta
|
|
10
|
+
*/
|
|
7
11
|
export interface RpcInterfaceDefinition<T extends RpcInterface = RpcInterface> {
|
|
8
12
|
prototype: T;
|
|
9
13
|
interfaceName: string;
|
|
10
14
|
interfaceVersion: string;
|
|
11
15
|
}
|
|
12
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* A class that implements the operations of an RPC interface.
|
|
18
|
+
* @beta
|
|
19
|
+
*/
|
|
13
20
|
export declare type RpcInterfaceImplementation<T extends RpcInterface = RpcInterface> = new () => T;
|
|
14
21
|
/** An RPC interface is a set of operations exposed by a service that a client can call, using configurable protocols,
|
|
15
22
|
* in a platform-independent way. TheRpcInterface class is the base class for RPC interface definitions and implementations.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcInterface.d.ts","sourceRoot":"","sources":["../../src/RpcInterface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAGzF,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAW7D
|
|
1
|
+
{"version":3,"file":"RpcInterface.d.ts","sourceRoot":"","sources":["../../src/RpcInterface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAGzF,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAW7D;;;;GAIG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY;IAAI,SAAS,EAAE,CAAC,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE;AAEhJ;;;GAGG;AACH,oBAAY,0BAA0B,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI,UAAU,CAAC,CAAC;AAE5F;;;GAGG;AACH,8BAAsB,YAAY;IAChC,8JAA8J;WAChJ,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAW7E;;OAEG;IACH,SAAgB,aAAa,EAAE,gBAAgB,CAAC;IAEhD,gBAAgB;IAChB,SAAgB,OAAO,EAAE,eAAe,CAAC;IAEzC,gBAAgB;gBACG,OAAO,GAAE,eAAyC;IAKrE,8DAA8D;IACjD,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC;IAgBjE,gBAAgB;IACT,qBAAqB,EAAE,wBAAwB,GAAG,SAAS,CAAC;CACpE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcInterface.js","sourceRoot":"","sources":["../../src/RpcInterface.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport * as semver from \"semver\";\nimport { RpcConfiguration, RpcConfigurationSupplier } from \"./rpc/core/RpcConfiguration\";\nimport { CURRENT_REQUEST } from \"./rpc/core/RpcRegistry\";\nimport { aggregateLoad, RpcRequest } from \"./rpc/core/RpcRequest\";\nimport { RpcRoutingToken } from \"./rpc/core/RpcRoutingToken\";\nimport { InterceptedRpcRequest, IpcSession } from \"./ipc/IpcSession\";\nimport { RpcSerializedValue } from \"./rpc/core/RpcMarshaling\";\nimport { RpcManagedStatus } from \"./rpc/core/RpcProtocol\";\nimport { BentleyStatus, IModelError, NoContentError } from \"./IModelError\";\nimport { RpcRequestEvent, RpcRequestStatus } from \"./rpc/core/RpcConstants\";\nimport { BeDuration } from \"@itwin/core-bentley\";\nimport { RpcNotFoundResponse } from \"./rpc/core/RpcControl\";\n\n/* eslint-disable deprecation/deprecation */\n\n/** @internal */\nexport interface RpcInterfaceDefinition<T extends RpcInterface = RpcInterface> { prototype: T, interfaceName: string, interfaceVersion: string }\n\n/** @internal */\nexport type RpcInterfaceImplementation<T extends RpcInterface = RpcInterface> = new () => T;\n\n/** An RPC interface is a set of operations exposed by a service that a client can call, using configurable protocols,\n * in a platform-independent way. TheRpcInterface class is the base class for RPC interface definitions and implementations.\n * @public\n */\nexport abstract class RpcInterface {\n /** Determines whether the backend version of an RPC interface is compatible (according to semantic versioning) with the frontend version of the interface. */\n public static isVersionCompatible(backend: string, frontend: string): boolean {\n const difference = semver.diff(backend, frontend);\n if (semver.prerelease(backend) || semver.prerelease(frontend)) {\n return difference === null;\n } else if (semver.major(backend) === 0 || semver.major(frontend) === 0) {\n return difference === null || (difference === \"patch\" && semver.patch(frontend) < semver.patch(backend));\n } else {\n return difference === null || difference === \"patch\" || (difference === \"minor\" && semver.minor(frontend) < semver.minor(backend));\n }\n }\n\n /** The configuration for the RPC interface.\n * @internal\n */\n public readonly configuration: RpcConfiguration;\n\n /** @internal */\n public readonly routing: RpcRoutingToken;\n\n /** @internal */\n public constructor(routing: RpcRoutingToken = RpcRoutingToken.default) {\n this.routing = routing;\n this.configuration = RpcConfiguration.supply(this);\n }\n\n /** Obtains the implementation result for an RPC operation. */\n public async forward<T = any>(parameters: IArguments): Promise<T> {\n const parametersCompat = (arguments.length === 1 && typeof (parameters) === \"object\") ? parameters : arguments;\n const parametersArray = Array.isArray(parametersCompat) ? parametersCompat : Array.prototype.slice.call(parametersCompat);\n const operationName = parametersArray.pop();\n\n const session = IpcSession.active;\n if (session) {\n return intercept(session, this, operationName, parametersArray);\n } else {\n const request = new (this.configuration.protocol.requestType as any)(this, operationName, parametersArray) as RpcRequest;\n request.submit(); // eslint-disable-line @typescript-eslint/no-floating-promises\n (this as any)[CURRENT_REQUEST] = request;\n return request.response;\n }\n }\n\n /** @internal */\n public configurationSupplier: RpcConfigurationSupplier | undefined;\n}\n\nRpcInterface.prototype.configurationSupplier = undefined;\n\nclass InterceptedRequest extends RpcRequest {\n protected override async load(): Promise<RpcSerializedValue> { throw new Error(); }\n protected override async send(): Promise<number> { throw new Error(); }\n protected override setHeader(_name: string, _value: string): void { throw new Error(); }\n}\n\nasync function intercept(session: IpcSession, client: RpcInterface, operation: string, parameters: any[]) {\n const request = new InterceptedRequest(client, operation, []);\n (client as any)[CURRENT_REQUEST] = request;\n\n const context = await client.configuration.protocol.serialize(request);\n request.parameters = parameters;\n\n const info: InterceptedRpcRequest = {\n definition: {\n interfaceName: context.operation.interfaceDefinition,\n interfaceVersion: context.operation.interfaceVersion,\n },\n operation,\n parameters,\n context: {\n applicationId: context.applicationId,\n applicationVersion: context.applicationVersion,\n id: context.id,\n sessionId: context.sessionId,\n protocolVersion: (context.protocolVersion || 0).toString(),\n },\n };\n\n const dispatch = async () => {\n aggregateLoad.lastRequest = new Date().getTime();\n\n const response = await session.handleRpc(info);\n\n aggregateLoad.lastResponse = new Date().getTime();\n\n if (typeof (response) === \"object\" && response.hasOwnProperty(\"iTwinRpcCoreResponse\") && response.hasOwnProperty(\"managedStatus\")) {\n const status: RpcManagedStatus = response;\n\n if (status.managedStatus === \"pending\") {\n return handlePending(request, status, dispatch);\n } else if (status.managedStatus === \"notFound\") {\n return handleNotFound(request, status, dispatch);\n } else if (status.managedStatus === \"noContent\") {\n return handleNoContent();\n }\n } else {\n return response;\n }\n };\n\n return dispatch();\n}\n\nasync function handlePending(request: InterceptedRequest, status: RpcManagedStatus, dispatch: () => Promise<any>) {\n request._status = RpcRequestStatus.Pending;\n request._extendedStatus = (status.responseValue as { message: string }).message;\n RpcRequest.events.raiseEvent(RpcRequestEvent.PendingUpdateReceived, request);\n\n const delay = request.operation.policy.retryInterval(request.client.configuration);\n\n await BeDuration.wait(delay);\n return dispatch();\n}\n\nasync function handleNotFound(request: InterceptedRequest, status: RpcManagedStatus, dispatch: () => Promise<any>) {\n return new Promise((resolve, reject) => {\n let resubmitted = false;\n\n RpcRequest.notFoundHandlers.raiseEvent(request, status.responseValue as RpcNotFoundResponse, async () => {\n if (resubmitted) {\n throw new IModelError(BentleyStatus.ERROR, `Already resubmitted using this handler.`);\n }\n\n resubmitted = true;\n\n try {\n const response = await dispatch();\n resolve(response);\n } catch (err) {\n reject(err);\n }\n }, reject);\n });\n}\n\nasync function handleNoContent() {\n throw new NoContentError();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RpcInterface.js","sourceRoot":"","sources":["../../src/RpcInterface.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,iCAAiC;AACjC,kEAAyF;AACzF,wDAAyD;AACzD,sDAAkE;AAClE,gEAA6D;AAC7D,iDAAqE;AAGrE,+CAA2E;AAC3E,0DAA4E;AAC5E,sDAAiD;AAkBjD;;;GAGG;AACH,MAAsB,YAAY;IAqBhC,gBAAgB;IAChB,YAAmB,UAA2B,iCAAe,CAAC,OAAO;QACnE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,mCAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAxBD,8JAA8J;IACvJ,MAAM,CAAC,mBAAmB,CAAC,OAAe,EAAE,QAAgB;QACjE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YAC7D,OAAO,UAAU,KAAK,IAAI,CAAC;SAC5B;aAAM,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACtE,OAAO,UAAU,KAAK,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;SAC1G;aAAM;YACL,OAAO,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,UAAU,KAAK,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;SACpI;IACH,CAAC;IAgBD,8DAA8D;IACvD,KAAK,CAAC,OAAO,CAAU,UAAsB;QAClD,MAAM,gBAAgB,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/G,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1H,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC;QAE5C,MAAM,OAAO,GAAG,uBAAU,CAAC,MAAM,CAAC;QAClC,IAAI,OAAO,EAAE;YACX,OAAO,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;SACjE;aAAM;YACL,MAAM,OAAO,GAAG,IAAK,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAmB,CAAC,IAAI,EAAE,aAAa,EAAE,eAAe,CAAe,CAAC;YACzH,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,8DAA8D;YAC/E,IAAY,CAAC,6BAAe,CAAC,GAAG,OAAO,CAAC;YACzC,OAAO,OAAO,CAAC,QAAQ,CAAC;SACzB;IACH,CAAC;CAIF;AA9CD,oCA8CC;AAED,YAAY,CAAC,SAAS,CAAC,qBAAqB,GAAG,SAAS,CAAC;AAEzD,MAAM,kBAAmB,SAAQ,uBAAU;IACtB,KAAK,CAAC,IAAI,KAAkC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;IAChE,KAAK,CAAC,IAAI,KAAsB,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;IACpD,SAAS,CAAC,KAAa,EAAE,MAAc,IAAU,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;CACzF;AAED,KAAK,UAAU,SAAS,CAAC,OAAmB,EAAE,MAAoB,EAAE,SAAiB,EAAE,UAAiB;IACtG,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAc,CAAC,6BAAe,CAAC,GAAG,OAAO,CAAC;IAE3C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACvE,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;IAEhC,MAAM,IAAI,GAA0B;QAClC,UAAU,EAAE;YACV,aAAa,EAAE,OAAO,CAAC,SAAS,CAAC,mBAAmB;YACpD,gBAAgB,EAAE,OAAO,CAAC,SAAS,CAAC,gBAAgB;SACrD;QACD,SAAS;QACT,UAAU;QACV,OAAO,EAAE;YACP,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,eAAe,EAAE,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;SAC3D;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,0BAAa,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAEjD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAE/C,0BAAa,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAElD,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,IAAI,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE;YACjI,MAAM,MAAM,GAAqB,QAAQ,CAAC;YAE1C,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE;gBACtC,OAAO,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;aACjD;iBAAM,IAAI,MAAM,CAAC,aAAa,KAAK,UAAU,EAAE;gBAC9C,OAAO,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;aAClD;iBAAM,IAAI,MAAM,CAAC,aAAa,KAAK,WAAW,EAAE;gBAC/C,OAAO,eAAe,EAAE,CAAC;aAC1B;SACF;aAAM;YACL,OAAO,QAAQ,CAAC;SACjB;IACH,CAAC,CAAC;IAEF,OAAO,QAAQ,EAAE,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,OAA2B,EAAE,MAAwB,EAAE,QAA4B;IAC9G,OAAO,CAAC,OAAO,GAAG,+BAAgB,CAAC,OAAO,CAAC;IAC3C,OAAO,CAAC,eAAe,GAAI,MAAM,CAAC,aAAqC,CAAC,OAAO,CAAC;IAChF,uBAAU,CAAC,MAAM,CAAC,UAAU,CAAC,8BAAe,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAE7E,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAEnF,MAAM,yBAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,QAAQ,EAAE,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,OAA2B,EAAE,MAAwB,EAAE,QAA4B;IAC/G,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,WAAW,GAAG,KAAK,CAAC;QAExB,uBAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,aAAoC,EAAE,KAAK,IAAI,EAAE;YACtG,IAAI,WAAW,EAAE;gBACf,MAAM,IAAI,yBAAW,CAAC,2BAAa,CAAC,KAAK,EAAE,yCAAyC,CAAC,CAAC;aACvF;YAED,WAAW,GAAG,IAAI,CAAC;YAEnB,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,QAAQ,EAAE,CAAC;gBAClC,OAAO,CAAC,QAAQ,CAAC,CAAC;aACnB;YAAC,OAAO,GAAG,EAAE;gBACZ,MAAM,CAAC,GAAG,CAAC,CAAC;aACb;QACH,CAAC,EAAE,MAAM,CAAC,CAAC;IACb,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,eAAe;IAC5B,MAAM,IAAI,4BAAc,EAAE,CAAC;AAC7B,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport * as semver from \"semver\";\nimport { RpcConfiguration, RpcConfigurationSupplier } from \"./rpc/core/RpcConfiguration\";\nimport { CURRENT_REQUEST } from \"./rpc/core/RpcRegistry\";\nimport { aggregateLoad, RpcRequest } from \"./rpc/core/RpcRequest\";\nimport { RpcRoutingToken } from \"./rpc/core/RpcRoutingToken\";\nimport { InterceptedRpcRequest, IpcSession } from \"./ipc/IpcSession\";\nimport { RpcSerializedValue } from \"./rpc/core/RpcMarshaling\";\nimport { RpcManagedStatus } from \"./rpc/core/RpcProtocol\";\nimport { BentleyStatus, IModelError, NoContentError } from \"./IModelError\";\nimport { RpcRequestEvent, RpcRequestStatus } from \"./rpc/core/RpcConstants\";\nimport { BeDuration } from \"@itwin/core-bentley\";\nimport { RpcNotFoundResponse } from \"./rpc/core/RpcControl\";\n\n/* eslint-disable deprecation/deprecation */\n\n/**\n * Specifies the required static properties of an RpcInterface class.\n * These properties are used to identify RPC requests and responses.\n * @beta\n */\nexport interface RpcInterfaceDefinition<T extends RpcInterface = RpcInterface> { prototype: T, interfaceName: string, interfaceVersion: string }\n\n/**\n * A class that implements the operations of an RPC interface.\n * @beta\n */\nexport type RpcInterfaceImplementation<T extends RpcInterface = RpcInterface> = new () => T;\n\n/** An RPC interface is a set of operations exposed by a service that a client can call, using configurable protocols,\n * in a platform-independent way. TheRpcInterface class is the base class for RPC interface definitions and implementations.\n * @public\n */\nexport abstract class RpcInterface {\n /** Determines whether the backend version of an RPC interface is compatible (according to semantic versioning) with the frontend version of the interface. */\n public static isVersionCompatible(backend: string, frontend: string): boolean {\n const difference = semver.diff(backend, frontend);\n if (semver.prerelease(backend) || semver.prerelease(frontend)) {\n return difference === null;\n } else if (semver.major(backend) === 0 || semver.major(frontend) === 0) {\n return difference === null || (difference === \"patch\" && semver.patch(frontend) < semver.patch(backend));\n } else {\n return difference === null || difference === \"patch\" || (difference === \"minor\" && semver.minor(frontend) < semver.minor(backend));\n }\n }\n\n /** The configuration for the RPC interface.\n * @internal\n */\n public readonly configuration: RpcConfiguration;\n\n /** @internal */\n public readonly routing: RpcRoutingToken;\n\n /** @internal */\n public constructor(routing: RpcRoutingToken = RpcRoutingToken.default) {\n this.routing = routing;\n this.configuration = RpcConfiguration.supply(this);\n }\n\n /** Obtains the implementation result for an RPC operation. */\n public async forward<T = any>(parameters: IArguments): Promise<T> {\n const parametersCompat = (arguments.length === 1 && typeof (parameters) === \"object\") ? parameters : arguments;\n const parametersArray = Array.isArray(parametersCompat) ? parametersCompat : Array.prototype.slice.call(parametersCompat);\n const operationName = parametersArray.pop();\n\n const session = IpcSession.active;\n if (session) {\n return intercept(session, this, operationName, parametersArray);\n } else {\n const request = new (this.configuration.protocol.requestType as any)(this, operationName, parametersArray) as RpcRequest;\n request.submit(); // eslint-disable-line @typescript-eslint/no-floating-promises\n (this as any)[CURRENT_REQUEST] = request;\n return request.response;\n }\n }\n\n /** @internal */\n public configurationSupplier: RpcConfigurationSupplier | undefined;\n}\n\nRpcInterface.prototype.configurationSupplier = undefined;\n\nclass InterceptedRequest extends RpcRequest {\n protected override async load(): Promise<RpcSerializedValue> { throw new Error(); }\n protected override async send(): Promise<number> { throw new Error(); }\n protected override setHeader(_name: string, _value: string): void { throw new Error(); }\n}\n\nasync function intercept(session: IpcSession, client: RpcInterface, operation: string, parameters: any[]) {\n const request = new InterceptedRequest(client, operation, []);\n (client as any)[CURRENT_REQUEST] = request;\n\n const context = await client.configuration.protocol.serialize(request);\n request.parameters = parameters;\n\n const info: InterceptedRpcRequest = {\n definition: {\n interfaceName: context.operation.interfaceDefinition,\n interfaceVersion: context.operation.interfaceVersion,\n },\n operation,\n parameters,\n context: {\n applicationId: context.applicationId,\n applicationVersion: context.applicationVersion,\n id: context.id,\n sessionId: context.sessionId,\n protocolVersion: (context.protocolVersion || 0).toString(),\n },\n };\n\n const dispatch = async () => {\n aggregateLoad.lastRequest = new Date().getTime();\n\n const response = await session.handleRpc(info);\n\n aggregateLoad.lastResponse = new Date().getTime();\n\n if (typeof (response) === \"object\" && response.hasOwnProperty(\"iTwinRpcCoreResponse\") && response.hasOwnProperty(\"managedStatus\")) {\n const status: RpcManagedStatus = response;\n\n if (status.managedStatus === \"pending\") {\n return handlePending(request, status, dispatch);\n } else if (status.managedStatus === \"notFound\") {\n return handleNotFound(request, status, dispatch);\n } else if (status.managedStatus === \"noContent\") {\n return handleNoContent();\n }\n } else {\n return response;\n }\n };\n\n return dispatch();\n}\n\nasync function handlePending(request: InterceptedRequest, status: RpcManagedStatus, dispatch: () => Promise<any>) {\n request._status = RpcRequestStatus.Pending;\n request._extendedStatus = (status.responseValue as { message: string }).message;\n RpcRequest.events.raiseEvent(RpcRequestEvent.PendingUpdateReceived, request);\n\n const delay = request.operation.policy.retryInterval(request.client.configuration);\n\n await BeDuration.wait(delay);\n return dispatch();\n}\n\nasync function handleNotFound(request: InterceptedRequest, status: RpcManagedStatus, dispatch: () => Promise<any>) {\n return new Promise((resolve, reject) => {\n let resubmitted = false;\n\n RpcRequest.notFoundHandlers.raiseEvent(request, status.responseValue as RpcNotFoundResponse, async () => {\n if (resubmitted) {\n throw new IModelError(BentleyStatus.ERROR, `Already resubmitted using this handler.`);\n }\n\n resubmitted = true;\n\n try {\n const response = await dispatch();\n resolve(response);\n } catch (err) {\n reject(err);\n }\n }, reject);\n });\n}\n\nasync function handleNoContent() {\n throw new NoContentError();\n}\n"]}
|
package/lib/cjs/RpcManager.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { IModelRpcProps } from "./IModel";
|
|
|
5
5
|
import { RpcInterface, RpcInterfaceDefinition, RpcInterfaceImplementation } from "./RpcInterface";
|
|
6
6
|
import { RpcRoutingToken } from "./rpc/core/RpcRoutingToken";
|
|
7
7
|
/** Describes the endpoints of an RPC interface.
|
|
8
|
-
* @
|
|
8
|
+
* @beta
|
|
9
9
|
*/
|
|
10
10
|
export interface RpcInterfaceEndpoints {
|
|
11
11
|
interfaceName: string;
|
|
@@ -14,7 +14,7 @@ export interface RpcInterfaceEndpoints {
|
|
|
14
14
|
compatible: boolean;
|
|
15
15
|
}
|
|
16
16
|
/** RPC interface management is concerned with coordination of access and configuration for RPC interfaces.
|
|
17
|
-
* @
|
|
17
|
+
* @beta
|
|
18
18
|
*/
|
|
19
19
|
export declare class RpcManager {
|
|
20
20
|
/** Initializes an RPC interface class.
|
package/lib/cjs/RpcManager.js
CHANGED
|
@@ -12,7 +12,7 @@ const RpcOperation_1 = require("./rpc/core/RpcOperation");
|
|
|
12
12
|
const RpcRegistry_1 = require("./rpc/core/RpcRegistry");
|
|
13
13
|
const RpcRoutingToken_1 = require("./rpc/core/RpcRoutingToken");
|
|
14
14
|
/** RPC interface management is concerned with coordination of access and configuration for RPC interfaces.
|
|
15
|
-
* @
|
|
15
|
+
* @beta
|
|
16
16
|
*/
|
|
17
17
|
class RpcManager {
|
|
18
18
|
/** Initializes an RPC interface class.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcManager.js","sourceRoot":"","sources":["../../src/RpcManager.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,0DAAuD;AACvD,wDAAqD;AAErD,gEAA6D;AAc7D;;GAEG;AACH,MAAa,UAAU;IACrB;;OAEG;IACI,MAAM,CAAC,mBAAmB,CAAyB,UAAqC;QAC7F,yBAAW,CAAC,QAAQ,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC;IAED,yCAAyC;IAClC,MAAM,CAAC,kBAAkB,CAAyB,UAAqC;QAC5F,yBAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,wDAAwD;IACjD,MAAM,CAAC,qBAAqB,CAAyB,UAAqC,EAAE,UAA2B,iCAAe,CAAC,OAAO;QACnJ,OAAO,yBAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,6DAA6D;IACtD,MAAM,CAAC,YAAY,CAAwE,UAA+C,EAAE,cAA2D;QAC5M,yBAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAChE,CAAC;IAED,gGAAgG;IACzF,MAAM,CAAC,kBAAkB,CAAwE,UAA+C,EAAE,QAAyB;QAChL,yBAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;IAED,+DAA+D;IACxD,MAAM,CAAC,cAAc,CAAmC,UAA+C;QAC5G,yBAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,0BAA0B;QAC5C,OAAO,yBAAW,CAAC,QAAQ,CAAC,0BAA0B,EAAE,CAAC;IAC3D,CAAC;IAED,gFAAgF;IACzE,MAAM,CAAC,SAAS,CAAC,KAAqB;QAC3C,2BAAY,CAAC,aAAa,GAAG,KAAK,CAAC;IACrC,CAAC;CACF;AA5CD,gCA4CC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { IModelRpcProps } from \"./IModel\";\nimport { RpcOperation } from \"./rpc/core/RpcOperation\";\nimport { RpcRegistry } from \"./rpc/core/RpcRegistry\";\nimport { RpcInterface, RpcInterfaceDefinition, RpcInterfaceImplementation } from \"./RpcInterface\";\nimport { RpcRoutingToken } from \"./rpc/core/RpcRoutingToken\";\n\n/* eslint-disable deprecation/deprecation */\n\n/** Describes the endpoints of an RPC interface.\n * @
|
|
1
|
+
{"version":3,"file":"RpcManager.js","sourceRoot":"","sources":["../../src/RpcManager.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,0DAAuD;AACvD,wDAAqD;AAErD,gEAA6D;AAc7D;;GAEG;AACH,MAAa,UAAU;IACrB;;OAEG;IACI,MAAM,CAAC,mBAAmB,CAAyB,UAAqC;QAC7F,yBAAW,CAAC,QAAQ,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC;IAED,yCAAyC;IAClC,MAAM,CAAC,kBAAkB,CAAyB,UAAqC;QAC5F,yBAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,wDAAwD;IACjD,MAAM,CAAC,qBAAqB,CAAyB,UAAqC,EAAE,UAA2B,iCAAe,CAAC,OAAO;QACnJ,OAAO,yBAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,6DAA6D;IACtD,MAAM,CAAC,YAAY,CAAwE,UAA+C,EAAE,cAA2D;QAC5M,yBAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAChE,CAAC;IAED,gGAAgG;IACzF,MAAM,CAAC,kBAAkB,CAAwE,UAA+C,EAAE,QAAyB;QAChL,yBAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;IAED,+DAA+D;IACxD,MAAM,CAAC,cAAc,CAAmC,UAA+C;QAC5G,yBAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,0BAA0B;QAC5C,OAAO,yBAAW,CAAC,QAAQ,CAAC,0BAA0B,EAAE,CAAC;IAC3D,CAAC;IAED,gFAAgF;IACzE,MAAM,CAAC,SAAS,CAAC,KAAqB;QAC3C,2BAAY,CAAC,aAAa,GAAG,KAAK,CAAC;IACrC,CAAC;CACF;AA5CD,gCA4CC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { IModelRpcProps } from \"./IModel\";\nimport { RpcOperation } from \"./rpc/core/RpcOperation\";\nimport { RpcRegistry } from \"./rpc/core/RpcRegistry\";\nimport { RpcInterface, RpcInterfaceDefinition, RpcInterfaceImplementation } from \"./RpcInterface\";\nimport { RpcRoutingToken } from \"./rpc/core/RpcRoutingToken\";\n\n/* eslint-disable deprecation/deprecation */\n\n/** Describes the endpoints of an RPC interface.\n * @beta\n */\nexport interface RpcInterfaceEndpoints {\n interfaceName: string;\n interfaceVersion: string;\n operationNames: string[];\n compatible: boolean;\n}\n\n/** RPC interface management is concerned with coordination of access and configuration for RPC interfaces.\n * @beta\n */\nexport class RpcManager {\n /** Initializes an RPC interface class.\n * @note This function must be called on the frontend and on the backend for each RPC interface class used by an application.\n */\n public static initializeInterface<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>): void {\n RpcRegistry.instance.initializeRpcInterface(definition);\n }\n\n /** Terminates an RPC interface class. */\n public static terminateInterface<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>): void {\n RpcRegistry.instance.terminateRpcInterface(definition);\n }\n\n /** Returns the RPC client instance for the frontend. */\n public static getClientForInterface<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, routing: RpcRoutingToken = RpcRoutingToken.default): T {\n return RpcRegistry.instance.getClientForInterface(definition, routing);\n }\n\n /** Register the RPC implementation class for the backend. */\n public static registerImpl<TDefinition extends RpcInterface, TImplementation extends TDefinition>(definition: RpcInterfaceDefinition<TDefinition>, implementation: RpcInterfaceImplementation<TImplementation>): void {\n RpcRegistry.instance.registerImpl(definition, implementation);\n }\n\n /** Supply the instance of the RPC interface implementation class for the backend (optional). */\n public static supplyImplInstance<TDefinition extends RpcInterface, TImplementation extends TDefinition>(definition: RpcInterfaceDefinition<TDefinition>, instance: TImplementation): void {\n RpcRegistry.instance.supplyImplInstance(definition, instance);\n }\n\n /** Unregister the RPC implementation class for the backend. */\n public static unregisterImpl<TDefinition extends RpcInterface>(definition: RpcInterfaceDefinition<TDefinition>): void {\n RpcRegistry.instance.unregisterImpl(definition);\n }\n\n /** Describes the RPC interfaces and endpoints that are currently available from the backend.\n * @note Some endpoints may be marked incompatible if the frontend expected a different interface declaration than the backend supplied. RPC operations against an incompatible interface will fail.\n */\n public static async describeAvailableEndpoints(): Promise<RpcInterfaceEndpoints[]> {\n return RpcRegistry.instance.describeAvailableEndpoints();\n }\n\n /** Configures RPC protocols that employ iModel-based routing infrastructure. */\n public static setIModel(props: IModelRpcProps) {\n RpcOperation.fallbackToken = props;\n }\n}\n"]}
|
|
@@ -21,7 +21,7 @@ export declare namespace RpcRoutingMap {
|
|
|
21
21
|
}
|
|
22
22
|
/** A RpcConfiguration specifies how calls on an RPC interface will be marshalled, plus other operating parameters.
|
|
23
23
|
* RpcConfiguration is the base class for specific configurations.
|
|
24
|
-
* @
|
|
24
|
+
* @beta
|
|
25
25
|
*/
|
|
26
26
|
export declare abstract class RpcConfiguration {
|
|
27
27
|
/** Whether development mode is enabled.
|
|
@@ -41,13 +41,13 @@ export declare abstract class RpcConfiguration {
|
|
|
41
41
|
* @note The parameter token is always replaced by the url token (unless RpcOperationPolicy.allowTokenMismatch is set).
|
|
42
42
|
*/
|
|
43
43
|
static throwOnTokenMismatch: boolean;
|
|
44
|
-
/** Sets the configuration supplier for an RPC interface class. */
|
|
44
|
+
/** @internal Sets the configuration supplier for an RPC interface class. */
|
|
45
45
|
static assign<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, supplier: RpcConfigurationSupplier): void;
|
|
46
46
|
/** Sets the configuration supplier for an RPC interface class for a given routing. */
|
|
47
47
|
static assignWithRouting<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, routing: RpcRoutingToken, configuration: new () => RpcConfiguration): void;
|
|
48
48
|
/** Obtains the instance of an RPC configuration class. */
|
|
49
49
|
static obtain<T extends RpcConfiguration>(configurationConstructor: new () => T): T;
|
|
50
|
-
/** Enables passing of application-specific context with each RPC request. */
|
|
50
|
+
/** @internal Enables passing of application-specific context with each RPC request. */
|
|
51
51
|
static requestContext: RpcRequestContext;
|
|
52
52
|
/** @internal */
|
|
53
53
|
attached: RpcInterfaceDefinition[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcConfiguration.d.ts","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConfiguration.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD,gBAAgB;AAChB,oBAAY,wBAAwB,GAAG,CAAC,OAAO,CAAC,EAAE,eAAe,KAAK;IAAE,QAAO,gBAAgB,CAAA;CAAE,CAAC;AAElG,gBAAgB;AAChB,MAAM,WAAW,aAAc,SAAQ,wBAAwB;IAAG,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAA;CAAE;AAEzH,gBAAgB;AAChB,yBAAiB,aAAa,CAAC;IAC7B,SAAgB,MAAM,IAAI,aAAa,CAGtC;CACF;AAED;;;GAGG;AACH,8BAAsB,gBAAgB;IACpC;;OAEG;IACH,OAAc,eAAe,EAAE,OAAO,CAAS;IAE/C,iGAAiG;IACjG,OAAc,wBAAwB,EAAE,OAAO,CAAS;IAExD;;;OAGG;IACH,OAAc,UAAU,EAAE,OAAO,CAAS;IAE1C;;;;OAIG;IACH,OAAc,oBAAoB,UAAS;IAE3C,
|
|
1
|
+
{"version":3,"file":"RpcConfiguration.d.ts","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConfiguration.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ var RpcRoutingMap;
|
|
|
19
19
|
})(RpcRoutingMap = exports.RpcRoutingMap || (exports.RpcRoutingMap = {}));
|
|
20
20
|
/** A RpcConfiguration specifies how calls on an RPC interface will be marshalled, plus other operating parameters.
|
|
21
21
|
* RpcConfiguration is the base class for specific configurations.
|
|
22
|
-
* @
|
|
22
|
+
* @beta
|
|
23
23
|
*/
|
|
24
24
|
class RpcConfiguration {
|
|
25
25
|
constructor() {
|
|
@@ -38,7 +38,7 @@ class RpcConfiguration {
|
|
|
38
38
|
*/
|
|
39
39
|
this.controlChannel = RpcControl_1.RpcControlChannel.obtain(this);
|
|
40
40
|
}
|
|
41
|
-
/** Sets the configuration supplier for an RPC interface class. */
|
|
41
|
+
/** @internal Sets the configuration supplier for an RPC interface class. */
|
|
42
42
|
static assign(definition, supplier) {
|
|
43
43
|
const map = definition.prototype.configurationSupplier;
|
|
44
44
|
if (!map || typeof (map.configurations) === "undefined") {
|
|
@@ -128,7 +128,7 @@ RpcConfiguration.strictMode = false;
|
|
|
128
128
|
* @note The parameter token is always replaced by the url token (unless RpcOperationPolicy.allowTokenMismatch is set).
|
|
129
129
|
*/
|
|
130
130
|
RpcConfiguration.throwOnTokenMismatch = false;
|
|
131
|
-
/** Enables passing of application-specific context with each RPC request. */
|
|
131
|
+
/** @internal Enables passing of application-specific context with each RPC request. */
|
|
132
132
|
RpcConfiguration.requestContext = {
|
|
133
133
|
getId: (_request) => "",
|
|
134
134
|
serialize: async (request) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcConfiguration.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConfiguration.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\nimport { RpcInterface, RpcInterfaceDefinition } from \"../../RpcInterface\";\nimport { RpcManager } from \"../../RpcManager\";\nimport { RpcControlChannel } from \"./RpcControl\";\nimport { SerializedRpcActivity } from \"./RpcInvocation\";\nimport { RpcProtocol, RpcRequestFulfillment } from \"./RpcProtocol\";\nimport { INSTANCE } from \"./RpcRegistry\";\nimport { RpcRequest } from \"./RpcRequest\";\nimport { RpcRequestContext } from \"./RpcRequestContext\";\nimport { RpcRoutingToken } from \"./RpcRoutingToken\";\n\n/* eslint-disable deprecation/deprecation */\n\n/** @internal */\nexport type RpcConfigurationSupplier = (routing?: RpcRoutingToken) => { new(): RpcConfiguration }; // eslint-disable-line @typescript-eslint/prefer-function-type\n\n/** @internal */\nexport interface RpcRoutingMap extends RpcConfigurationSupplier { configurations: Map<number, RpcConfigurationSupplier> }\n\n/** @internal */\nexport namespace RpcRoutingMap {\n export function create(): RpcRoutingMap {\n const configurations = new Map();\n return Object.assign((routing?: RpcRoutingToken) => configurations.get(routing!.id)(), { configurations });\n }\n}\n\n/** A RpcConfiguration specifies how calls on an RPC interface will be marshalled, plus other operating parameters.\n * RpcConfiguration is the base class for specific configurations.\n * @internal\n */\nexport abstract class RpcConfiguration {\n /** Whether development mode is enabled.\n * @note This parameter determines whether developer convenience features like backend stack traces are available.\n */\n public static developmentMode: boolean = false;\n\n /** Whether frontend checks that are relevant in a cloud-hosted routing scenario are disabled. */\n public static disableRoutingValidation: boolean = false;\n\n /** Whether strict mode is enabled.\n * This parameter determines system behaviors relating to strict checking:\n * - Whether an error is thrown if the type marshaling system encounters an unregistered type (only in strict mode).\n */\n public static strictMode: boolean = false;\n\n /**\n * Whether to throw an error when the IModelRpcProps in the operation parameter list differs from the token in the URL.\n * @note By default, a warning is logged and the operation is allowed to proceed.\n * @note The parameter token is always replaced by the url token (unless RpcOperationPolicy.allowTokenMismatch is set).\n */\n public static throwOnTokenMismatch = false;\n\n /** Sets the configuration supplier for an RPC interface class. */\n public static assign<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, supplier: RpcConfigurationSupplier): void {\n const map = definition.prototype.configurationSupplier as RpcRoutingMap | undefined;\n if (!map || typeof (map.configurations) === \"undefined\") {\n definition.prototype.configurationSupplier = supplier;\n } else {\n map.configurations.set(RpcRoutingToken.default.id, supplier);\n }\n }\n\n /** Sets the configuration supplier for an RPC interface class for a given routing. */\n public static assignWithRouting<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, routing: RpcRoutingToken, configuration: new () => RpcConfiguration): void {\n if (!definition.prototype.configurationSupplier) {\n RpcConfiguration.assign(definition, RpcRoutingMap.create());\n }\n\n let map = definition.prototype.configurationSupplier as RpcRoutingMap;\n if (typeof (map.configurations) === \"undefined\") {\n const existing = map as RpcConfigurationSupplier;\n map = RpcRoutingMap.create();\n RpcConfiguration.assign(definition, map);\n map.configurations.set(RpcRoutingToken.default.id, existing);\n }\n\n const supplier = () => configuration;\n map.configurations.set(routing.id, supplier);\n }\n\n /** Obtains the instance of an RPC configuration class. */\n public static obtain<T extends RpcConfiguration>(configurationConstructor: new () => T): T {\n let instance = (configurationConstructor as any)[INSTANCE] as T;\n if (!instance)\n instance = (configurationConstructor as any)[INSTANCE] = new configurationConstructor();\n\n return instance;\n }\n\n /** Enables passing of application-specific context with each RPC request. */\n public static requestContext: RpcRequestContext = {\n getId: (_request: RpcRequest): string => \"\",\n serialize: async (request: RpcRequest): Promise<SerializedRpcActivity> => ({\n id: request.id,\n applicationId: \"\",\n applicationVersion: \"\",\n sessionId: \"\",\n authorization: \"\",\n }),\n };\n\n /** @internal */\n public attached: RpcInterfaceDefinition[] = [];\n\n /** The protocol of the configuration.\n * @internal\n */\n public abstract readonly protocol: RpcProtocol;\n\n /** The RPC interfaces managed by the configuration. */\n public abstract readonly interfaces: () => RpcInterfaceDefinition[];\n\n /** @internal */\n public allowAttachedInterfaces: boolean = true;\n\n /** @internal */\n public get attachedInterfaces(): ReadonlyArray<RpcInterfaceDefinition> { return this.attached; }\n\n /** The target interval (in milliseconds) between connection attempts for pending RPC operation requests. */\n public pendingOperationRetryInterval = 10000;\n\n /** The maximum number of transient faults permitted before request failure. */\n public transientFaultLimit = 4;\n\n /** @internal */\n public readonly routing: RpcRoutingToken = RpcRoutingToken.default;\n\n /** The control channel for the configuration.\n * @internal\n */\n public readonly controlChannel = RpcControlChannel.obtain(this);\n\n /** @internal */\n public attach<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>): void {\n if (!this.allowAttachedInterfaces) {\n return;\n }\n\n if (this.interfaces().indexOf(definition) !== -1 || this.attached.indexOf(definition) !== -1) {\n return;\n }\n\n this.attached.push(definition);\n RpcConfiguration.assign(definition, () => this.constructor as any);\n RpcManager.initializeInterface(definition);\n }\n\n /** Initializes the RPC interfaces managed by the configuration. */\n public static initializeInterfaces(configuration: RpcConfiguration) {\n configuration.interfaces().forEach((definition) => RpcManager.initializeInterface(definition));\n }\n\n /** @internal */\n public static supply(definition: RpcInterface): RpcConfiguration {\n return RpcConfiguration.obtain(definition.configurationSupplier ? definition.configurationSupplier(definition.routing) : RpcDefaultConfiguration);\n }\n\n /** @internal */\n public onRpcClientInitialized(definition: RpcInterfaceDefinition, client: RpcInterface): void {\n this.protocol.onRpcClientInitialized(definition, client);\n }\n\n /** @internal */\n public onRpcImplInitialized(definition: RpcInterfaceDefinition, impl: RpcInterface): void {\n this.protocol.onRpcImplInitialized(definition, impl);\n }\n\n /** @internal */\n public onRpcClientTerminated(definition: RpcInterfaceDefinition, client: RpcInterface): void {\n this.protocol.onRpcClientTerminated(definition, client);\n }\n\n /** @internal */\n public onRpcImplTerminated(definition: RpcInterfaceDefinition, impl: RpcInterface): void {\n this.protocol.onRpcImplTerminated(definition, impl);\n }\n}\n\n/** A default configuration that can be used for basic testing within a library.\n * @internal\n */\nexport class RpcDefaultConfiguration extends RpcConfiguration {\n public interfaces = () => [];\n public protocol: RpcProtocol = new RpcDirectProtocol(this);\n}\n\n/** A default protocol that can be used for basic testing within a library.\n * @internal\n */\nexport class RpcDirectProtocol extends RpcProtocol {\n public readonly requestType = RpcDirectRequest;\n}\n\n/** A default request type that can be used for basic testing within a library.\n * @internal\n */\nexport class RpcDirectRequest extends RpcRequest {\n public headers: Map<string, string> = new Map();\n public fulfillment: RpcRequestFulfillment | undefined = undefined;\n\n protected async send() {\n const request = await this.protocol.serialize(this);\n return new Promise<number>(async (resolve, reject) => {\n try {\n this.fulfillment = await this.protocol.fulfill(request);\n resolve(this.fulfillment.status);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n protected setHeader(name: string, value: string): void {\n this.headers.set(name, value);\n }\n\n protected async load() {\n return this.fulfillment!.result;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RpcConfiguration.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConfiguration.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\nimport { RpcInterface, RpcInterfaceDefinition } from \"../../RpcInterface\";\nimport { RpcManager } from \"../../RpcManager\";\nimport { RpcControlChannel } from \"./RpcControl\";\nimport { SerializedRpcActivity } from \"./RpcInvocation\";\nimport { RpcProtocol, RpcRequestFulfillment } from \"./RpcProtocol\";\nimport { INSTANCE } from \"./RpcRegistry\";\nimport { RpcRequest } from \"./RpcRequest\";\nimport { RpcRequestContext } from \"./RpcRequestContext\";\nimport { RpcRoutingToken } from \"./RpcRoutingToken\";\n\n/* eslint-disable deprecation/deprecation */\n\n/** @internal */\nexport type RpcConfigurationSupplier = (routing?: RpcRoutingToken) => { new(): RpcConfiguration }; // eslint-disable-line @typescript-eslint/prefer-function-type\n\n/** @internal */\nexport interface RpcRoutingMap extends RpcConfigurationSupplier { configurations: Map<number, RpcConfigurationSupplier> }\n\n/** @internal */\nexport namespace RpcRoutingMap {\n export function create(): RpcRoutingMap {\n const configurations = new Map();\n return Object.assign((routing?: RpcRoutingToken) => configurations.get(routing!.id)(), { configurations });\n }\n}\n\n/** A RpcConfiguration specifies how calls on an RPC interface will be marshalled, plus other operating parameters.\n * RpcConfiguration is the base class for specific configurations.\n * @beta\n */\nexport abstract class RpcConfiguration {\n /** Whether development mode is enabled.\n * @note This parameter determines whether developer convenience features like backend stack traces are available.\n */\n public static developmentMode: boolean = false;\n\n /** Whether frontend checks that are relevant in a cloud-hosted routing scenario are disabled. */\n public static disableRoutingValidation: boolean = false;\n\n /** Whether strict mode is enabled.\n * This parameter determines system behaviors relating to strict checking:\n * - Whether an error is thrown if the type marshaling system encounters an unregistered type (only in strict mode).\n */\n public static strictMode: boolean = false;\n\n /**\n * Whether to throw an error when the IModelRpcProps in the operation parameter list differs from the token in the URL.\n * @note By default, a warning is logged and the operation is allowed to proceed.\n * @note The parameter token is always replaced by the url token (unless RpcOperationPolicy.allowTokenMismatch is set).\n */\n public static throwOnTokenMismatch = false;\n\n /** @internal Sets the configuration supplier for an RPC interface class. */\n public static assign<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, supplier: RpcConfigurationSupplier): void {\n const map = definition.prototype.configurationSupplier as RpcRoutingMap | undefined;\n if (!map || typeof (map.configurations) === \"undefined\") {\n definition.prototype.configurationSupplier = supplier;\n } else {\n map.configurations.set(RpcRoutingToken.default.id, supplier);\n }\n }\n\n /** Sets the configuration supplier for an RPC interface class for a given routing. */\n public static assignWithRouting<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, routing: RpcRoutingToken, configuration: new () => RpcConfiguration): void {\n if (!definition.prototype.configurationSupplier) {\n RpcConfiguration.assign(definition, RpcRoutingMap.create());\n }\n\n let map = definition.prototype.configurationSupplier as RpcRoutingMap;\n if (typeof (map.configurations) === \"undefined\") {\n const existing = map as RpcConfigurationSupplier;\n map = RpcRoutingMap.create();\n RpcConfiguration.assign(definition, map);\n map.configurations.set(RpcRoutingToken.default.id, existing);\n }\n\n const supplier = () => configuration;\n map.configurations.set(routing.id, supplier);\n }\n\n /** Obtains the instance of an RPC configuration class. */\n public static obtain<T extends RpcConfiguration>(configurationConstructor: new () => T): T {\n let instance = (configurationConstructor as any)[INSTANCE] as T;\n if (!instance)\n instance = (configurationConstructor as any)[INSTANCE] = new configurationConstructor();\n\n return instance;\n }\n\n /** @internal Enables passing of application-specific context with each RPC request. */\n public static requestContext: RpcRequestContext = {\n getId: (_request: RpcRequest): string => \"\",\n serialize: async (request: RpcRequest): Promise<SerializedRpcActivity> => ({\n id: request.id,\n applicationId: \"\",\n applicationVersion: \"\",\n sessionId: \"\",\n authorization: \"\",\n }),\n };\n\n /** @internal */\n public attached: RpcInterfaceDefinition[] = [];\n\n /** The protocol of the configuration.\n * @internal\n */\n public abstract readonly protocol: RpcProtocol;\n\n /** The RPC interfaces managed by the configuration. */\n public abstract readonly interfaces: () => RpcInterfaceDefinition[];\n\n /** @internal */\n public allowAttachedInterfaces: boolean = true;\n\n /** @internal */\n public get attachedInterfaces(): ReadonlyArray<RpcInterfaceDefinition> { return this.attached; }\n\n /** The target interval (in milliseconds) between connection attempts for pending RPC operation requests. */\n public pendingOperationRetryInterval = 10000;\n\n /** The maximum number of transient faults permitted before request failure. */\n public transientFaultLimit = 4;\n\n /** @internal */\n public readonly routing: RpcRoutingToken = RpcRoutingToken.default;\n\n /** The control channel for the configuration.\n * @internal\n */\n public readonly controlChannel = RpcControlChannel.obtain(this);\n\n /** @internal */\n public attach<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>): void {\n if (!this.allowAttachedInterfaces) {\n return;\n }\n\n if (this.interfaces().indexOf(definition) !== -1 || this.attached.indexOf(definition) !== -1) {\n return;\n }\n\n this.attached.push(definition);\n RpcConfiguration.assign(definition, () => this.constructor as any);\n RpcManager.initializeInterface(definition);\n }\n\n /** Initializes the RPC interfaces managed by the configuration. */\n public static initializeInterfaces(configuration: RpcConfiguration) {\n configuration.interfaces().forEach((definition) => RpcManager.initializeInterface(definition));\n }\n\n /** @internal */\n public static supply(definition: RpcInterface): RpcConfiguration {\n return RpcConfiguration.obtain(definition.configurationSupplier ? definition.configurationSupplier(definition.routing) : RpcDefaultConfiguration);\n }\n\n /** @internal */\n public onRpcClientInitialized(definition: RpcInterfaceDefinition, client: RpcInterface): void {\n this.protocol.onRpcClientInitialized(definition, client);\n }\n\n /** @internal */\n public onRpcImplInitialized(definition: RpcInterfaceDefinition, impl: RpcInterface): void {\n this.protocol.onRpcImplInitialized(definition, impl);\n }\n\n /** @internal */\n public onRpcClientTerminated(definition: RpcInterfaceDefinition, client: RpcInterface): void {\n this.protocol.onRpcClientTerminated(definition, client);\n }\n\n /** @internal */\n public onRpcImplTerminated(definition: RpcInterfaceDefinition, impl: RpcInterface): void {\n this.protocol.onRpcImplTerminated(definition, impl);\n }\n}\n\n/** A default configuration that can be used for basic testing within a library.\n * @internal\n */\nexport class RpcDefaultConfiguration extends RpcConfiguration {\n public interfaces = () => [];\n public protocol: RpcProtocol = new RpcDirectProtocol(this);\n}\n\n/** A default protocol that can be used for basic testing within a library.\n * @internal\n */\nexport class RpcDirectProtocol extends RpcProtocol {\n public readonly requestType = RpcDirectRequest;\n}\n\n/** A default request type that can be used for basic testing within a library.\n * @internal\n */\nexport class RpcDirectRequest extends RpcRequest {\n public headers: Map<string, string> = new Map();\n public fulfillment: RpcRequestFulfillment | undefined = undefined;\n\n protected async send() {\n const request = await this.protocol.serialize(this);\n return new Promise<number>(async (resolve, reject) => {\n try {\n this.fulfillment = await this.protocol.fulfill(request);\n resolve(this.fulfillment.status);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n protected setHeader(name: string, value: string): void {\n this.headers.set(name, value);\n }\n\n protected async load() {\n return this.fulfillment!.result;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcRoutingToken.d.ts","sourceRoot":"","sources":["../../../../src/rpc/core/RpcRoutingToken.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,
|
|
1
|
+
{"version":3,"file":"RpcRoutingToken.d.ts","sourceRoot":"","sources":["../../../../src/rpc/core/RpcRoutingToken.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,YAAY;AACZ,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAM;WAEZ,QAAQ,CAAC,UAAU,SAAK,GAAG,eAAe;IAIxD,gBAAuB,OAAO,kBAAuC;IAErE,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,SAAgB,UAAU,EAAE,MAAM,CAAC;IAEnC,OAAO;CAIR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcRoutingToken.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcRoutingToken.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,4CAA4C;AAE5C,
|
|
1
|
+
{"version":3,"file":"RpcRoutingToken.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcRoutingToken.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,4CAA4C;AAE5C,YAAY;AACZ,MAAa,eAAe;IAY1B,YAAoB,EAAU,EAAE,UAAkB;QAChD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAZM,MAAM,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE;QACpC,OAAO,IAAI,eAAe,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACvD,CAAC;;AALH,0CAgBC;AAfgB,qBAAK,GAAG,CAAC,CAAC,CAAC;AAMH,uBAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\n/* eslint-disable deprecation/deprecation */\n\n/** @beta */\nexport class RpcRoutingToken {\n private static _next = -1;\n\n public static generate(debugLabel = \"\"): RpcRoutingToken {\n return new RpcRoutingToken(++this._next, debugLabel);\n }\n\n public static readonly default = RpcRoutingToken.generate(\"default\");\n\n public readonly id: number;\n public readonly debugLabel: string;\n\n private constructor(id: number, debugLabel: string) {\n this.id = id;\n this.debugLabel = debugLabel;\n }\n}\n"]}
|
|
@@ -9,20 +9,22 @@ import { BentleyCloudRpcProtocol } from "./BentleyCloudRpcProtocol";
|
|
|
9
9
|
import { OpenAPIInfo } from "./OpenAPI";
|
|
10
10
|
import { RpcRoutingToken } from "../core/RpcRoutingToken";
|
|
11
11
|
/** Initialization parameters for BentleyCloudRpcConfiguration.
|
|
12
|
-
* @
|
|
12
|
+
* @beta
|
|
13
13
|
*/
|
|
14
14
|
export interface BentleyCloudRpcParams {
|
|
15
15
|
/** Identifies the remote server that implements a set of RpcInterfaces. Note that the ID of the remote server is not a URI or hostname. It is a string that matches a key in the orchestrator's app registry. */
|
|
16
16
|
info: OpenAPIInfo;
|
|
17
|
-
/** The protocol for Bentley cloud RPC interface deployments */
|
|
17
|
+
/** @internal The protocol for Bentley cloud RPC interface deployments */
|
|
18
18
|
protocol?: typeof BentleyCloudRpcProtocol;
|
|
19
19
|
/** The URI of the orchestrator that will route requests to the remote RpcInterface server. If not supplied, this default to the origin of the Web page. This is required only when calling initializeClient and only if the server is not the origin of the Web page. */
|
|
20
20
|
uriPrefix?: string;
|
|
21
|
-
/** Handler for RPC request events. */
|
|
21
|
+
/** @internal Handler for RPC request events. */
|
|
22
22
|
pendingRequestListener?: RpcRequestEventHandler;
|
|
23
|
+
/** An optional prefix for RPC operation URI paths. */
|
|
24
|
+
pathPrefix?: string;
|
|
23
25
|
}
|
|
24
26
|
/** Operating parameters for Bentley cloud RPC interface deployments.
|
|
25
|
-
* @
|
|
27
|
+
* @beta
|
|
26
28
|
*/
|
|
27
29
|
export declare abstract class BentleyCloudRpcConfiguration extends RpcConfiguration {
|
|
28
30
|
/** Access-Control header values for backend servers that serve frontends using BentleyCloudRpcProtocol. */
|
|
@@ -31,16 +33,16 @@ export declare abstract class BentleyCloudRpcConfiguration extends RpcConfigurat
|
|
|
31
33
|
allowMethods: string;
|
|
32
34
|
allowHeaders: string;
|
|
33
35
|
};
|
|
34
|
-
/** The protocol of the configuration. */
|
|
36
|
+
/** @internal The protocol of the configuration. */
|
|
35
37
|
abstract readonly protocol: BentleyCloudRpcProtocol;
|
|
36
38
|
}
|
|
37
39
|
/** Coordinates usage of RPC interfaces for Bentley cloud deployments.
|
|
38
|
-
* @
|
|
40
|
+
* @beta
|
|
39
41
|
*/
|
|
40
42
|
export declare class BentleyCloudRpcManager extends RpcManager {
|
|
41
|
-
/** Initializes BentleyCloudRpcManager for the frontend of an application. */
|
|
43
|
+
/** @beta Initializes BentleyCloudRpcManager for the frontend of an application. */
|
|
42
44
|
static initializeClient(params: BentleyCloudRpcParams, interfaces: RpcInterfaceDefinition[], routing?: RpcRoutingToken): BentleyCloudRpcConfiguration;
|
|
43
|
-
/** Initializes BentleyCloudRpcManager for the backend of an application. */
|
|
45
|
+
/** @beta Initializes BentleyCloudRpcManager for the backend of an application. */
|
|
44
46
|
static initializeImpl(params: BentleyCloudRpcParams, interfaces: RpcInterfaceDefinition[]): BentleyCloudRpcConfiguration;
|
|
45
47
|
private static performInitialization;
|
|
46
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BentleyCloudRpcManager.d.ts","sourceRoot":"","sources":["../../../../src/rpc/web/BentleyCloudRpcManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAc,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI1D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,iNAAiN;IACjN,IAAI,EAAE,WAAW,CAAC;IAClB
|
|
1
|
+
{"version":3,"file":"BentleyCloudRpcManager.d.ts","sourceRoot":"","sources":["../../../../src/rpc/web/BentleyCloudRpcManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAc,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI1D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,iNAAiN;IACjN,IAAI,EAAE,WAAW,CAAC;IAClB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,uBAAuB,CAAC;IAC1C,yQAAyQ;IACzQ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,8BAAsB,4BAA6B,SAAQ,gBAAgB;IACzE,2GAA2G;IAC3G,gBAAuB,aAAa;;;;MAIlC;IAEF,mDAAmD;IACnD,kBAAkC,QAAQ,EAAE,uBAAuB,CAAC;CACrE;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,UAAU;IACpD,mFAAmF;WACrE,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,EAAE,UAAU,EAAE,sBAAsB,EAAE,EAAE,OAAO,GAAE,eAAyC,GAAG,4BAA4B;IAIrL,kFAAkF;WACpE,cAAc,CAAC,MAAM,EAAE,qBAAqB,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,4BAA4B;IAI/H,OAAO,CAAC,MAAM,CAAC,qBAAqB;CAoCrC"}
|
|
@@ -15,7 +15,7 @@ const RpcRequest_1 = require("../core/RpcRequest");
|
|
|
15
15
|
const BentleyCloudRpcProtocol_1 = require("./BentleyCloudRpcProtocol");
|
|
16
16
|
const RpcRoutingToken_1 = require("../core/RpcRoutingToken");
|
|
17
17
|
/** Operating parameters for Bentley cloud RPC interface deployments.
|
|
18
|
-
* @
|
|
18
|
+
* @beta
|
|
19
19
|
*/
|
|
20
20
|
class BentleyCloudRpcConfiguration extends RpcConfiguration_1.RpcConfiguration {
|
|
21
21
|
}
|
|
@@ -27,14 +27,14 @@ BentleyCloudRpcConfiguration.accessControl = {
|
|
|
27
27
|
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",
|
|
28
28
|
};
|
|
29
29
|
/** Coordinates usage of RPC interfaces for Bentley cloud deployments.
|
|
30
|
-
* @
|
|
30
|
+
* @beta
|
|
31
31
|
*/
|
|
32
32
|
class BentleyCloudRpcManager extends RpcManager_1.RpcManager {
|
|
33
|
-
/** Initializes BentleyCloudRpcManager for the frontend of an application. */
|
|
33
|
+
/** @beta Initializes BentleyCloudRpcManager for the frontend of an application. */
|
|
34
34
|
static initializeClient(params, interfaces, routing = RpcRoutingToken_1.RpcRoutingToken.default) {
|
|
35
35
|
return BentleyCloudRpcManager.performInitialization(params, interfaces, routing);
|
|
36
36
|
}
|
|
37
|
-
/** Initializes BentleyCloudRpcManager for the backend of an application. */
|
|
37
|
+
/** @beta Initializes BentleyCloudRpcManager for the backend of an application. */
|
|
38
38
|
static initializeImpl(params, interfaces) {
|
|
39
39
|
return BentleyCloudRpcManager.performInitialization(params, interfaces);
|
|
40
40
|
}
|
|
@@ -58,6 +58,9 @@ class BentleyCloudRpcManager extends RpcManager_1.RpcManager {
|
|
|
58
58
|
RpcConfiguration_1.RpcConfiguration.assignWithRouting(def, routing, config);
|
|
59
59
|
}
|
|
60
60
|
const instance = RpcConfiguration_1.RpcConfiguration.obtain(config);
|
|
61
|
+
if (params.pathPrefix) {
|
|
62
|
+
instance.protocol.pathPrefix = params.pathPrefix;
|
|
63
|
+
}
|
|
61
64
|
RpcConfiguration_1.RpcConfiguration.initializeInterfaces(instance);
|
|
62
65
|
if (params.pendingRequestListener) {
|
|
63
66
|
const listener = params.pendingRequestListener;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BentleyCloudRpcManager.js","sourceRoot":"","sources":["../../../../src/rpc/web/BentleyCloudRpcManager.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,iDAA8C;AAC9C,+DAA4D;AAC5D,uDAAuD;AACvD,mDAAwE;AACxE,uEAAoE;AAEpE,6DAA0D;
|
|
1
|
+
{"version":3,"file":"BentleyCloudRpcManager.js","sourceRoot":"","sources":["../../../../src/rpc/web/BentleyCloudRpcManager.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,iDAA8C;AAC9C,+DAA4D;AAC5D,uDAAuD;AACvD,mDAAwE;AACxE,uEAAoE;AAEpE,6DAA0D;AAoB1D;;GAEG;AACH,MAAsB,4BAA6B,SAAQ,mCAAgB;;AAA3E,oEAUC;AATC,2GAA2G;AACpF,0CAAa,GAAG;IACrC,WAAW,EAAE,GAAG;IAChB,YAAY,EAAE,oBAAoB;IAClC,YAAY,EAAE,qLAAqL;CACpM,CAAC;AAMJ;;GAEG;AACH,MAAa,sBAAuB,SAAQ,uBAAU;IACpD,mFAAmF;IAC5E,MAAM,CAAC,gBAAgB,CAAC,MAA6B,EAAE,UAAoC,EAAE,UAA2B,iCAAe,CAAC,OAAO;QACpJ,OAAO,sBAAsB,CAAC,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACnF,CAAC;IAED,kFAAkF;IAC3E,MAAM,CAAC,cAAc,CAAC,MAA6B,EAAE,UAAoC;QAC9F,OAAO,sBAAsB,CAAC,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,MAA6B,EAAE,UAAoC,EAAE,UAA2B,iCAAe,CAAC,OAAO;QAC1J,MAAM,QAAQ,GAAG,KAAM,SAAQ,CAAC,MAAM,CAAC,QAAQ,IAAI,iDAAuB,CAAC;YAA1D;;gBACC,eAAU,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;gBAC7C,SAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YAC5B,CAAC;SAAA,CAAC;QAEF,MAAM,MAAM,GAAG,KAAM,SAAQ,4BAA4B;YAA1C;;gBACN,eAAU,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC;gBAC9B,aAAQ,GAA4B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9C,YAAO,GAAG,OAAO,CAAC;YACpC,CAAC;SAAA,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;YAC5B,mCAAgB,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;SAC1D;QAED,MAAM,QAAQ,GAAG,mCAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEjD,IAAI,MAAM,CAAC,UAAU,EAAE;YACrB,QAAQ,CAAC,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;SAClD;QAED,mCAAgB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,MAAM,CAAC,sBAAsB,EAAE;YACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,sBAAsB,CAAC;YAE/C,uBAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;gBAC9C,IAAI,IAAI,KAAK,8BAAe,CAAC,qBAAqB,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,EAAE;oBAC5F,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;iBACzB;YACH,CAAC,CAAC,CAAC;SACJ;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AA/CD,wDA+CC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { RpcInterfaceDefinition } from \"../../RpcInterface\";\nimport { RpcManager } from \"../../RpcManager\";\nimport { RpcConfiguration } from \"../core/RpcConfiguration\";\nimport { RpcRequestEvent } from \"../core/RpcConstants\";\nimport { RpcRequest, RpcRequestEventHandler } from \"../core/RpcRequest\";\nimport { BentleyCloudRpcProtocol } from \"./BentleyCloudRpcProtocol\";\nimport { OpenAPIInfo } from \"./OpenAPI\";\nimport { RpcRoutingToken } from \"../core/RpcRoutingToken\";\n\n/* eslint-disable deprecation/deprecation */\n\n/** Initialization parameters for BentleyCloudRpcConfiguration.\n * @beta\n */\nexport interface BentleyCloudRpcParams {\n /** Identifies the remote server that implements a set of RpcInterfaces. Note that the ID of the remote server is not a URI or hostname. It is a string that matches a key in the orchestrator's app registry. */\n info: OpenAPIInfo;\n /** @internal The protocol for Bentley cloud RPC interface deployments */\n protocol?: typeof BentleyCloudRpcProtocol;\n /** The URI of the orchestrator that will route requests to the remote RpcInterface server. If not supplied, this default to the origin of the Web page. This is required only when calling initializeClient and only if the server is not the origin of the Web page. */\n uriPrefix?: string;\n /** @internal Handler for RPC request events. */\n pendingRequestListener?: RpcRequestEventHandler;\n /** An optional prefix for RPC operation URI paths. */\n pathPrefix?: string;\n}\n\n/** Operating parameters for Bentley cloud RPC interface deployments.\n * @beta\n */\nexport abstract class BentleyCloudRpcConfiguration extends RpcConfiguration {\n /** Access-Control header values for backend servers that serve frontends using BentleyCloudRpcProtocol. */\n public static readonly accessControl = {\n allowOrigin: \"*\",\n allowMethods: \"POST, GET, OPTIONS\",\n 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\",\n };\n\n /** @internal The protocol of the configuration. */\n public abstract override readonly protocol: BentleyCloudRpcProtocol;\n}\n\n/** Coordinates usage of RPC interfaces for Bentley cloud deployments.\n * @beta\n */\nexport class BentleyCloudRpcManager extends RpcManager {\n /** @beta Initializes BentleyCloudRpcManager for the frontend of an application. */\n public static initializeClient(params: BentleyCloudRpcParams, interfaces: RpcInterfaceDefinition[], routing: RpcRoutingToken = RpcRoutingToken.default): BentleyCloudRpcConfiguration {\n return BentleyCloudRpcManager.performInitialization(params, interfaces, routing);\n }\n\n /** @beta Initializes BentleyCloudRpcManager for the backend of an application. */\n public static initializeImpl(params: BentleyCloudRpcParams, interfaces: RpcInterfaceDefinition[]): BentleyCloudRpcConfiguration {\n return BentleyCloudRpcManager.performInitialization(params, interfaces);\n }\n\n private static performInitialization(params: BentleyCloudRpcParams, interfaces: RpcInterfaceDefinition[], routing: RpcRoutingToken = RpcRoutingToken.default): BentleyCloudRpcConfiguration {\n const protocol = class extends (params.protocol || BentleyCloudRpcProtocol) {\n public override pathPrefix = params.uriPrefix || \"\";\n public info = params.info;\n };\n\n const config = class extends BentleyCloudRpcConfiguration {\n public interfaces = () => interfaces;\n public protocol: BentleyCloudRpcProtocol = new protocol(this);\n public override routing = routing;\n };\n\n for (const def of interfaces) {\n RpcConfiguration.assignWithRouting(def, routing, config);\n }\n\n const instance = RpcConfiguration.obtain(config);\n\n if (params.pathPrefix) {\n instance.protocol.pathPrefix = params.pathPrefix;\n }\n\n RpcConfiguration.initializeInterfaces(instance);\n\n if (params.pendingRequestListener) {\n const listener = params.pendingRequestListener;\n\n RpcRequest.events.addListener((type, request) => {\n if (type === RpcRequestEvent.PendingUpdateReceived && request.protocol === instance.protocol) {\n listener(type, request);\n }\n });\n }\n\n return instance;\n }\n}\n"]}
|
|
@@ -3,13 +3,20 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { RpcConfiguration, RpcConfigurationSupplier } from "./rpc/core/RpcConfiguration";
|
|
5
5
|
import { RpcRoutingToken } from "./rpc/core/RpcRoutingToken";
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Specifies the required static properties of an RpcInterface class.
|
|
8
|
+
* These properties are used to identify RPC requests and responses.
|
|
9
|
+
* @beta
|
|
10
|
+
*/
|
|
7
11
|
export interface RpcInterfaceDefinition<T extends RpcInterface = RpcInterface> {
|
|
8
12
|
prototype: T;
|
|
9
13
|
interfaceName: string;
|
|
10
14
|
interfaceVersion: string;
|
|
11
15
|
}
|
|
12
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* A class that implements the operations of an RPC interface.
|
|
18
|
+
* @beta
|
|
19
|
+
*/
|
|
13
20
|
export declare type RpcInterfaceImplementation<T extends RpcInterface = RpcInterface> = new () => T;
|
|
14
21
|
/** An RPC interface is a set of operations exposed by a service that a client can call, using configurable protocols,
|
|
15
22
|
* in a platform-independent way. TheRpcInterface class is the base class for RPC interface definitions and implementations.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcInterface.d.ts","sourceRoot":"","sources":["../../src/RpcInterface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAGzF,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAW7D
|
|
1
|
+
{"version":3,"file":"RpcInterface.d.ts","sourceRoot":"","sources":["../../src/RpcInterface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAGzF,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAW7D;;;;GAIG;AACH,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY;IAAI,SAAS,EAAE,CAAC,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE;AAEhJ;;;GAGG;AACH,oBAAY,0BAA0B,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI,UAAU,CAAC,CAAC;AAE5F;;;GAGG;AACH,8BAAsB,YAAY;IAChC,8JAA8J;WAChJ,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAW7E;;OAEG;IACH,SAAgB,aAAa,EAAE,gBAAgB,CAAC;IAEhD,gBAAgB;IAChB,SAAgB,OAAO,EAAE,eAAe,CAAC;IAEzC,gBAAgB;gBACG,OAAO,GAAE,eAAyC;IAKrE,8DAA8D;IACjD,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC;IAgBjE,gBAAgB;IACT,qBAAqB,EAAE,wBAAwB,GAAG,SAAS,CAAC;CACpE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcInterface.js","sourceRoot":"","sources":["../../src/RpcInterface.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport * as semver from \"semver\";\nimport { RpcConfiguration, RpcConfigurationSupplier } from \"./rpc/core/RpcConfiguration\";\nimport { CURRENT_REQUEST } from \"./rpc/core/RpcRegistry\";\nimport { aggregateLoad, RpcRequest } from \"./rpc/core/RpcRequest\";\nimport { RpcRoutingToken } from \"./rpc/core/RpcRoutingToken\";\nimport { InterceptedRpcRequest, IpcSession } from \"./ipc/IpcSession\";\nimport { RpcSerializedValue } from \"./rpc/core/RpcMarshaling\";\nimport { RpcManagedStatus } from \"./rpc/core/RpcProtocol\";\nimport { BentleyStatus, IModelError, NoContentError } from \"./IModelError\";\nimport { RpcRequestEvent, RpcRequestStatus } from \"./rpc/core/RpcConstants\";\nimport { BeDuration } from \"@itwin/core-bentley\";\nimport { RpcNotFoundResponse } from \"./rpc/core/RpcControl\";\n\n/* eslint-disable deprecation/deprecation */\n\n/** @internal */\nexport interface RpcInterfaceDefinition<T extends RpcInterface = RpcInterface> { prototype: T, interfaceName: string, interfaceVersion: string }\n\n/** @internal */\nexport type RpcInterfaceImplementation<T extends RpcInterface = RpcInterface> = new () => T;\n\n/** An RPC interface is a set of operations exposed by a service that a client can call, using configurable protocols,\n * in a platform-independent way. TheRpcInterface class is the base class for RPC interface definitions and implementations.\n * @public\n */\nexport abstract class RpcInterface {\n /** Determines whether the backend version of an RPC interface is compatible (according to semantic versioning) with the frontend version of the interface. */\n public static isVersionCompatible(backend: string, frontend: string): boolean {\n const difference = semver.diff(backend, frontend);\n if (semver.prerelease(backend) || semver.prerelease(frontend)) {\n return difference === null;\n } else if (semver.major(backend) === 0 || semver.major(frontend) === 0) {\n return difference === null || (difference === \"patch\" && semver.patch(frontend) < semver.patch(backend));\n } else {\n return difference === null || difference === \"patch\" || (difference === \"minor\" && semver.minor(frontend) < semver.minor(backend));\n }\n }\n\n /** The configuration for the RPC interface.\n * @internal\n */\n public readonly configuration: RpcConfiguration;\n\n /** @internal */\n public readonly routing: RpcRoutingToken;\n\n /** @internal */\n public constructor(routing: RpcRoutingToken = RpcRoutingToken.default) {\n this.routing = routing;\n this.configuration = RpcConfiguration.supply(this);\n }\n\n /** Obtains the implementation result for an RPC operation. */\n public async forward<T = any>(parameters: IArguments): Promise<T> {\n const parametersCompat = (arguments.length === 1 && typeof (parameters) === \"object\") ? parameters : arguments;\n const parametersArray = Array.isArray(parametersCompat) ? parametersCompat : Array.prototype.slice.call(parametersCompat);\n const operationName = parametersArray.pop();\n\n const session = IpcSession.active;\n if (session) {\n return intercept(session, this, operationName, parametersArray);\n } else {\n const request = new (this.configuration.protocol.requestType as any)(this, operationName, parametersArray) as RpcRequest;\n request.submit(); // eslint-disable-line @typescript-eslint/no-floating-promises\n (this as any)[CURRENT_REQUEST] = request;\n return request.response;\n }\n }\n\n /** @internal */\n public configurationSupplier: RpcConfigurationSupplier | undefined;\n}\n\nRpcInterface.prototype.configurationSupplier = undefined;\n\nclass InterceptedRequest extends RpcRequest {\n protected override async load(): Promise<RpcSerializedValue> { throw new Error(); }\n protected override async send(): Promise<number> { throw new Error(); }\n protected override setHeader(_name: string, _value: string): void { throw new Error(); }\n}\n\nasync function intercept(session: IpcSession, client: RpcInterface, operation: string, parameters: any[]) {\n const request = new InterceptedRequest(client, operation, []);\n (client as any)[CURRENT_REQUEST] = request;\n\n const context = await client.configuration.protocol.serialize(request);\n request.parameters = parameters;\n\n const info: InterceptedRpcRequest = {\n definition: {\n interfaceName: context.operation.interfaceDefinition,\n interfaceVersion: context.operation.interfaceVersion,\n },\n operation,\n parameters,\n context: {\n applicationId: context.applicationId,\n applicationVersion: context.applicationVersion,\n id: context.id,\n sessionId: context.sessionId,\n protocolVersion: (context.protocolVersion || 0).toString(),\n },\n };\n\n const dispatch = async () => {\n aggregateLoad.lastRequest = new Date().getTime();\n\n const response = await session.handleRpc(info);\n\n aggregateLoad.lastResponse = new Date().getTime();\n\n if (typeof (response) === \"object\" && response.hasOwnProperty(\"iTwinRpcCoreResponse\") && response.hasOwnProperty(\"managedStatus\")) {\n const status: RpcManagedStatus = response;\n\n if (status.managedStatus === \"pending\") {\n return handlePending(request, status, dispatch);\n } else if (status.managedStatus === \"notFound\") {\n return handleNotFound(request, status, dispatch);\n } else if (status.managedStatus === \"noContent\") {\n return handleNoContent();\n }\n } else {\n return response;\n }\n };\n\n return dispatch();\n}\n\nasync function handlePending(request: InterceptedRequest, status: RpcManagedStatus, dispatch: () => Promise<any>) {\n request._status = RpcRequestStatus.Pending;\n request._extendedStatus = (status.responseValue as { message: string }).message;\n RpcRequest.events.raiseEvent(RpcRequestEvent.PendingUpdateReceived, request);\n\n const delay = request.operation.policy.retryInterval(request.client.configuration);\n\n await BeDuration.wait(delay);\n return dispatch();\n}\n\nasync function handleNotFound(request: InterceptedRequest, status: RpcManagedStatus, dispatch: () => Promise<any>) {\n return new Promise((resolve, reject) => {\n let resubmitted = false;\n\n RpcRequest.notFoundHandlers.raiseEvent(request, status.responseValue as RpcNotFoundResponse, async () => {\n if (resubmitted) {\n throw new IModelError(BentleyStatus.ERROR, `Already resubmitted using this handler.`);\n }\n\n resubmitted = true;\n\n try {\n const response = await dispatch();\n resolve(response);\n } catch (err) {\n reject(err);\n }\n }, reject);\n });\n}\n\nasync function handleNoContent() {\n throw new NoContentError();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RpcInterface.js","sourceRoot":"","sources":["../../src/RpcInterface.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport * as semver from \"semver\";\nimport { RpcConfiguration, RpcConfigurationSupplier } from \"./rpc/core/RpcConfiguration\";\nimport { CURRENT_REQUEST } from \"./rpc/core/RpcRegistry\";\nimport { aggregateLoad, RpcRequest } from \"./rpc/core/RpcRequest\";\nimport { RpcRoutingToken } from \"./rpc/core/RpcRoutingToken\";\nimport { InterceptedRpcRequest, IpcSession } from \"./ipc/IpcSession\";\nimport { RpcSerializedValue } from \"./rpc/core/RpcMarshaling\";\nimport { RpcManagedStatus } from \"./rpc/core/RpcProtocol\";\nimport { BentleyStatus, IModelError, NoContentError } from \"./IModelError\";\nimport { RpcRequestEvent, RpcRequestStatus } from \"./rpc/core/RpcConstants\";\nimport { BeDuration } from \"@itwin/core-bentley\";\nimport { RpcNotFoundResponse } from \"./rpc/core/RpcControl\";\n\n/* eslint-disable deprecation/deprecation */\n\n/**\n * Specifies the required static properties of an RpcInterface class.\n * These properties are used to identify RPC requests and responses.\n * @beta\n */\nexport interface RpcInterfaceDefinition<T extends RpcInterface = RpcInterface> { prototype: T, interfaceName: string, interfaceVersion: string }\n\n/**\n * A class that implements the operations of an RPC interface.\n * @beta\n */\nexport type RpcInterfaceImplementation<T extends RpcInterface = RpcInterface> = new () => T;\n\n/** An RPC interface is a set of operations exposed by a service that a client can call, using configurable protocols,\n * in a platform-independent way. TheRpcInterface class is the base class for RPC interface definitions and implementations.\n * @public\n */\nexport abstract class RpcInterface {\n /** Determines whether the backend version of an RPC interface is compatible (according to semantic versioning) with the frontend version of the interface. */\n public static isVersionCompatible(backend: string, frontend: string): boolean {\n const difference = semver.diff(backend, frontend);\n if (semver.prerelease(backend) || semver.prerelease(frontend)) {\n return difference === null;\n } else if (semver.major(backend) === 0 || semver.major(frontend) === 0) {\n return difference === null || (difference === \"patch\" && semver.patch(frontend) < semver.patch(backend));\n } else {\n return difference === null || difference === \"patch\" || (difference === \"minor\" && semver.minor(frontend) < semver.minor(backend));\n }\n }\n\n /** The configuration for the RPC interface.\n * @internal\n */\n public readonly configuration: RpcConfiguration;\n\n /** @internal */\n public readonly routing: RpcRoutingToken;\n\n /** @internal */\n public constructor(routing: RpcRoutingToken = RpcRoutingToken.default) {\n this.routing = routing;\n this.configuration = RpcConfiguration.supply(this);\n }\n\n /** Obtains the implementation result for an RPC operation. */\n public async forward<T = any>(parameters: IArguments): Promise<T> {\n const parametersCompat = (arguments.length === 1 && typeof (parameters) === \"object\") ? parameters : arguments;\n const parametersArray = Array.isArray(parametersCompat) ? parametersCompat : Array.prototype.slice.call(parametersCompat);\n const operationName = parametersArray.pop();\n\n const session = IpcSession.active;\n if (session) {\n return intercept(session, this, operationName, parametersArray);\n } else {\n const request = new (this.configuration.protocol.requestType as any)(this, operationName, parametersArray) as RpcRequest;\n request.submit(); // eslint-disable-line @typescript-eslint/no-floating-promises\n (this as any)[CURRENT_REQUEST] = request;\n return request.response;\n }\n }\n\n /** @internal */\n public configurationSupplier: RpcConfigurationSupplier | undefined;\n}\n\nRpcInterface.prototype.configurationSupplier = undefined;\n\nclass InterceptedRequest extends RpcRequest {\n protected override async load(): Promise<RpcSerializedValue> { throw new Error(); }\n protected override async send(): Promise<number> { throw new Error(); }\n protected override setHeader(_name: string, _value: string): void { throw new Error(); }\n}\n\nasync function intercept(session: IpcSession, client: RpcInterface, operation: string, parameters: any[]) {\n const request = new InterceptedRequest(client, operation, []);\n (client as any)[CURRENT_REQUEST] = request;\n\n const context = await client.configuration.protocol.serialize(request);\n request.parameters = parameters;\n\n const info: InterceptedRpcRequest = {\n definition: {\n interfaceName: context.operation.interfaceDefinition,\n interfaceVersion: context.operation.interfaceVersion,\n },\n operation,\n parameters,\n context: {\n applicationId: context.applicationId,\n applicationVersion: context.applicationVersion,\n id: context.id,\n sessionId: context.sessionId,\n protocolVersion: (context.protocolVersion || 0).toString(),\n },\n };\n\n const dispatch = async () => {\n aggregateLoad.lastRequest = new Date().getTime();\n\n const response = await session.handleRpc(info);\n\n aggregateLoad.lastResponse = new Date().getTime();\n\n if (typeof (response) === \"object\" && response.hasOwnProperty(\"iTwinRpcCoreResponse\") && response.hasOwnProperty(\"managedStatus\")) {\n const status: RpcManagedStatus = response;\n\n if (status.managedStatus === \"pending\") {\n return handlePending(request, status, dispatch);\n } else if (status.managedStatus === \"notFound\") {\n return handleNotFound(request, status, dispatch);\n } else if (status.managedStatus === \"noContent\") {\n return handleNoContent();\n }\n } else {\n return response;\n }\n };\n\n return dispatch();\n}\n\nasync function handlePending(request: InterceptedRequest, status: RpcManagedStatus, dispatch: () => Promise<any>) {\n request._status = RpcRequestStatus.Pending;\n request._extendedStatus = (status.responseValue as { message: string }).message;\n RpcRequest.events.raiseEvent(RpcRequestEvent.PendingUpdateReceived, request);\n\n const delay = request.operation.policy.retryInterval(request.client.configuration);\n\n await BeDuration.wait(delay);\n return dispatch();\n}\n\nasync function handleNotFound(request: InterceptedRequest, status: RpcManagedStatus, dispatch: () => Promise<any>) {\n return new Promise((resolve, reject) => {\n let resubmitted = false;\n\n RpcRequest.notFoundHandlers.raiseEvent(request, status.responseValue as RpcNotFoundResponse, async () => {\n if (resubmitted) {\n throw new IModelError(BentleyStatus.ERROR, `Already resubmitted using this handler.`);\n }\n\n resubmitted = true;\n\n try {\n const response = await dispatch();\n resolve(response);\n } catch (err) {\n reject(err);\n }\n }, reject);\n });\n}\n\nasync function handleNoContent() {\n throw new NoContentError();\n}\n"]}
|
package/lib/esm/RpcManager.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { IModelRpcProps } from "./IModel";
|
|
|
5
5
|
import { RpcInterface, RpcInterfaceDefinition, RpcInterfaceImplementation } from "./RpcInterface";
|
|
6
6
|
import { RpcRoutingToken } from "./rpc/core/RpcRoutingToken";
|
|
7
7
|
/** Describes the endpoints of an RPC interface.
|
|
8
|
-
* @
|
|
8
|
+
* @beta
|
|
9
9
|
*/
|
|
10
10
|
export interface RpcInterfaceEndpoints {
|
|
11
11
|
interfaceName: string;
|
|
@@ -14,7 +14,7 @@ export interface RpcInterfaceEndpoints {
|
|
|
14
14
|
compatible: boolean;
|
|
15
15
|
}
|
|
16
16
|
/** RPC interface management is concerned with coordination of access and configuration for RPC interfaces.
|
|
17
|
-
* @
|
|
17
|
+
* @beta
|
|
18
18
|
*/
|
|
19
19
|
export declare class RpcManager {
|
|
20
20
|
/** Initializes an RPC interface class.
|
package/lib/esm/RpcManager.js
CHANGED
|
@@ -9,7 +9,7 @@ import { RpcOperation } from "./rpc/core/RpcOperation";
|
|
|
9
9
|
import { RpcRegistry } from "./rpc/core/RpcRegistry";
|
|
10
10
|
import { RpcRoutingToken } from "./rpc/core/RpcRoutingToken";
|
|
11
11
|
/** RPC interface management is concerned with coordination of access and configuration for RPC interfaces.
|
|
12
|
-
* @
|
|
12
|
+
* @beta
|
|
13
13
|
*/
|
|
14
14
|
export class RpcManager {
|
|
15
15
|
/** Initializes an RPC interface class.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcManager.js","sourceRoot":"","sources":["../../src/RpcManager.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAc7D;;GAEG;AACH,MAAM,OAAO,UAAU;IACrB;;OAEG;IACI,MAAM,CAAC,mBAAmB,CAAyB,UAAqC;QAC7F,WAAW,CAAC,QAAQ,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC;IAED,yCAAyC;IAClC,MAAM,CAAC,kBAAkB,CAAyB,UAAqC;QAC5F,WAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,wDAAwD;IACjD,MAAM,CAAC,qBAAqB,CAAyB,UAAqC,EAAE,UAA2B,eAAe,CAAC,OAAO;QACnJ,OAAO,WAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,6DAA6D;IACtD,MAAM,CAAC,YAAY,CAAwE,UAA+C,EAAE,cAA2D;QAC5M,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAChE,CAAC;IAED,gGAAgG;IACzF,MAAM,CAAC,kBAAkB,CAAwE,UAA+C,EAAE,QAAyB;QAChL,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;IAED,+DAA+D;IACxD,MAAM,CAAC,cAAc,CAAmC,UAA+C;QAC5G,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,0BAA0B;QAC5C,OAAO,WAAW,CAAC,QAAQ,CAAC,0BAA0B,EAAE,CAAC;IAC3D,CAAC;IAED,gFAAgF;IACzE,MAAM,CAAC,SAAS,CAAC,KAAqB;QAC3C,YAAY,CAAC,aAAa,GAAG,KAAK,CAAC;IACrC,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { IModelRpcProps } from \"./IModel\";\nimport { RpcOperation } from \"./rpc/core/RpcOperation\";\nimport { RpcRegistry } from \"./rpc/core/RpcRegistry\";\nimport { RpcInterface, RpcInterfaceDefinition, RpcInterfaceImplementation } from \"./RpcInterface\";\nimport { RpcRoutingToken } from \"./rpc/core/RpcRoutingToken\";\n\n/* eslint-disable deprecation/deprecation */\n\n/** Describes the endpoints of an RPC interface.\n * @
|
|
1
|
+
{"version":3,"file":"RpcManager.js","sourceRoot":"","sources":["../../src/RpcManager.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAc7D;;GAEG;AACH,MAAM,OAAO,UAAU;IACrB;;OAEG;IACI,MAAM,CAAC,mBAAmB,CAAyB,UAAqC;QAC7F,WAAW,CAAC,QAAQ,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC;IAED,yCAAyC;IAClC,MAAM,CAAC,kBAAkB,CAAyB,UAAqC;QAC5F,WAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,wDAAwD;IACjD,MAAM,CAAC,qBAAqB,CAAyB,UAAqC,EAAE,UAA2B,eAAe,CAAC,OAAO;QACnJ,OAAO,WAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,6DAA6D;IACtD,MAAM,CAAC,YAAY,CAAwE,UAA+C,EAAE,cAA2D;QAC5M,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAChE,CAAC;IAED,gGAAgG;IACzF,MAAM,CAAC,kBAAkB,CAAwE,UAA+C,EAAE,QAAyB;QAChL,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;IAED,+DAA+D;IACxD,MAAM,CAAC,cAAc,CAAmC,UAA+C;QAC5G,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,KAAK,CAAC,0BAA0B;QAC5C,OAAO,WAAW,CAAC,QAAQ,CAAC,0BAA0B,EAAE,CAAC;IAC3D,CAAC;IAED,gFAAgF;IACzE,MAAM,CAAC,SAAS,CAAC,KAAqB;QAC3C,YAAY,CAAC,aAAa,GAAG,KAAK,CAAC;IACrC,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { IModelRpcProps } from \"./IModel\";\nimport { RpcOperation } from \"./rpc/core/RpcOperation\";\nimport { RpcRegistry } from \"./rpc/core/RpcRegistry\";\nimport { RpcInterface, RpcInterfaceDefinition, RpcInterfaceImplementation } from \"./RpcInterface\";\nimport { RpcRoutingToken } from \"./rpc/core/RpcRoutingToken\";\n\n/* eslint-disable deprecation/deprecation */\n\n/** Describes the endpoints of an RPC interface.\n * @beta\n */\nexport interface RpcInterfaceEndpoints {\n interfaceName: string;\n interfaceVersion: string;\n operationNames: string[];\n compatible: boolean;\n}\n\n/** RPC interface management is concerned with coordination of access and configuration for RPC interfaces.\n * @beta\n */\nexport class RpcManager {\n /** Initializes an RPC interface class.\n * @note This function must be called on the frontend and on the backend for each RPC interface class used by an application.\n */\n public static initializeInterface<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>): void {\n RpcRegistry.instance.initializeRpcInterface(definition);\n }\n\n /** Terminates an RPC interface class. */\n public static terminateInterface<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>): void {\n RpcRegistry.instance.terminateRpcInterface(definition);\n }\n\n /** Returns the RPC client instance for the frontend. */\n public static getClientForInterface<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, routing: RpcRoutingToken = RpcRoutingToken.default): T {\n return RpcRegistry.instance.getClientForInterface(definition, routing);\n }\n\n /** Register the RPC implementation class for the backend. */\n public static registerImpl<TDefinition extends RpcInterface, TImplementation extends TDefinition>(definition: RpcInterfaceDefinition<TDefinition>, implementation: RpcInterfaceImplementation<TImplementation>): void {\n RpcRegistry.instance.registerImpl(definition, implementation);\n }\n\n /** Supply the instance of the RPC interface implementation class for the backend (optional). */\n public static supplyImplInstance<TDefinition extends RpcInterface, TImplementation extends TDefinition>(definition: RpcInterfaceDefinition<TDefinition>, instance: TImplementation): void {\n RpcRegistry.instance.supplyImplInstance(definition, instance);\n }\n\n /** Unregister the RPC implementation class for the backend. */\n public static unregisterImpl<TDefinition extends RpcInterface>(definition: RpcInterfaceDefinition<TDefinition>): void {\n RpcRegistry.instance.unregisterImpl(definition);\n }\n\n /** Describes the RPC interfaces and endpoints that are currently available from the backend.\n * @note Some endpoints may be marked incompatible if the frontend expected a different interface declaration than the backend supplied. RPC operations against an incompatible interface will fail.\n */\n public static async describeAvailableEndpoints(): Promise<RpcInterfaceEndpoints[]> {\n return RpcRegistry.instance.describeAvailableEndpoints();\n }\n\n /** Configures RPC protocols that employ iModel-based routing infrastructure. */\n public static setIModel(props: IModelRpcProps) {\n RpcOperation.fallbackToken = props;\n }\n}\n"]}
|
|
@@ -21,7 +21,7 @@ export declare namespace RpcRoutingMap {
|
|
|
21
21
|
}
|
|
22
22
|
/** A RpcConfiguration specifies how calls on an RPC interface will be marshalled, plus other operating parameters.
|
|
23
23
|
* RpcConfiguration is the base class for specific configurations.
|
|
24
|
-
* @
|
|
24
|
+
* @beta
|
|
25
25
|
*/
|
|
26
26
|
export declare abstract class RpcConfiguration {
|
|
27
27
|
/** Whether development mode is enabled.
|
|
@@ -41,13 +41,13 @@ export declare abstract class RpcConfiguration {
|
|
|
41
41
|
* @note The parameter token is always replaced by the url token (unless RpcOperationPolicy.allowTokenMismatch is set).
|
|
42
42
|
*/
|
|
43
43
|
static throwOnTokenMismatch: boolean;
|
|
44
|
-
/** Sets the configuration supplier for an RPC interface class. */
|
|
44
|
+
/** @internal Sets the configuration supplier for an RPC interface class. */
|
|
45
45
|
static assign<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, supplier: RpcConfigurationSupplier): void;
|
|
46
46
|
/** Sets the configuration supplier for an RPC interface class for a given routing. */
|
|
47
47
|
static assignWithRouting<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, routing: RpcRoutingToken, configuration: new () => RpcConfiguration): void;
|
|
48
48
|
/** Obtains the instance of an RPC configuration class. */
|
|
49
49
|
static obtain<T extends RpcConfiguration>(configurationConstructor: new () => T): T;
|
|
50
|
-
/** Enables passing of application-specific context with each RPC request. */
|
|
50
|
+
/** @internal Enables passing of application-specific context with each RPC request. */
|
|
51
51
|
static requestContext: RpcRequestContext;
|
|
52
52
|
/** @internal */
|
|
53
53
|
attached: RpcInterfaceDefinition[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcConfiguration.d.ts","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConfiguration.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD,gBAAgB;AAChB,oBAAY,wBAAwB,GAAG,CAAC,OAAO,CAAC,EAAE,eAAe,KAAK;IAAE,QAAO,gBAAgB,CAAA;CAAE,CAAC;AAElG,gBAAgB;AAChB,MAAM,WAAW,aAAc,SAAQ,wBAAwB;IAAG,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAA;CAAE;AAEzH,gBAAgB;AAChB,yBAAiB,aAAa,CAAC;IAC7B,SAAgB,MAAM,IAAI,aAAa,CAGtC;CACF;AAED;;;GAGG;AACH,8BAAsB,gBAAgB;IACpC;;OAEG;IACH,OAAc,eAAe,EAAE,OAAO,CAAS;IAE/C,iGAAiG;IACjG,OAAc,wBAAwB,EAAE,OAAO,CAAS;IAExD;;;OAGG;IACH,OAAc,UAAU,EAAE,OAAO,CAAS;IAE1C;;;;OAIG;IACH,OAAc,oBAAoB,UAAS;IAE3C,
|
|
1
|
+
{"version":3,"file":"RpcConfiguration.d.ts","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConfiguration.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ export var RpcRoutingMap;
|
|
|
16
16
|
})(RpcRoutingMap || (RpcRoutingMap = {}));
|
|
17
17
|
/** A RpcConfiguration specifies how calls on an RPC interface will be marshalled, plus other operating parameters.
|
|
18
18
|
* RpcConfiguration is the base class for specific configurations.
|
|
19
|
-
* @
|
|
19
|
+
* @beta
|
|
20
20
|
*/
|
|
21
21
|
export class RpcConfiguration {
|
|
22
22
|
constructor() {
|
|
@@ -35,7 +35,7 @@ export class RpcConfiguration {
|
|
|
35
35
|
*/
|
|
36
36
|
this.controlChannel = RpcControlChannel.obtain(this);
|
|
37
37
|
}
|
|
38
|
-
/** Sets the configuration supplier for an RPC interface class. */
|
|
38
|
+
/** @internal Sets the configuration supplier for an RPC interface class. */
|
|
39
39
|
static assign(definition, supplier) {
|
|
40
40
|
const map = definition.prototype.configurationSupplier;
|
|
41
41
|
if (!map || typeof (map.configurations) === "undefined") {
|
|
@@ -124,7 +124,7 @@ RpcConfiguration.strictMode = false;
|
|
|
124
124
|
* @note The parameter token is always replaced by the url token (unless RpcOperationPolicy.allowTokenMismatch is set).
|
|
125
125
|
*/
|
|
126
126
|
RpcConfiguration.throwOnTokenMismatch = false;
|
|
127
|
-
/** Enables passing of application-specific context with each RPC request. */
|
|
127
|
+
/** @internal Enables passing of application-specific context with each RPC request. */
|
|
128
128
|
RpcConfiguration.requestContext = {
|
|
129
129
|
getId: (_request) => "",
|
|
130
130
|
serialize: async (request) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcConfiguration.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConfiguration.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\nimport { RpcInterface, RpcInterfaceDefinition } from \"../../RpcInterface\";\nimport { RpcManager } from \"../../RpcManager\";\nimport { RpcControlChannel } from \"./RpcControl\";\nimport { SerializedRpcActivity } from \"./RpcInvocation\";\nimport { RpcProtocol, RpcRequestFulfillment } from \"./RpcProtocol\";\nimport { INSTANCE } from \"./RpcRegistry\";\nimport { RpcRequest } from \"./RpcRequest\";\nimport { RpcRequestContext } from \"./RpcRequestContext\";\nimport { RpcRoutingToken } from \"./RpcRoutingToken\";\n\n/* eslint-disable deprecation/deprecation */\n\n/** @internal */\nexport type RpcConfigurationSupplier = (routing?: RpcRoutingToken) => { new(): RpcConfiguration }; // eslint-disable-line @typescript-eslint/prefer-function-type\n\n/** @internal */\nexport interface RpcRoutingMap extends RpcConfigurationSupplier { configurations: Map<number, RpcConfigurationSupplier> }\n\n/** @internal */\nexport namespace RpcRoutingMap {\n export function create(): RpcRoutingMap {\n const configurations = new Map();\n return Object.assign((routing?: RpcRoutingToken) => configurations.get(routing!.id)(), { configurations });\n }\n}\n\n/** A RpcConfiguration specifies how calls on an RPC interface will be marshalled, plus other operating parameters.\n * RpcConfiguration is the base class for specific configurations.\n * @internal\n */\nexport abstract class RpcConfiguration {\n /** Whether development mode is enabled.\n * @note This parameter determines whether developer convenience features like backend stack traces are available.\n */\n public static developmentMode: boolean = false;\n\n /** Whether frontend checks that are relevant in a cloud-hosted routing scenario are disabled. */\n public static disableRoutingValidation: boolean = false;\n\n /** Whether strict mode is enabled.\n * This parameter determines system behaviors relating to strict checking:\n * - Whether an error is thrown if the type marshaling system encounters an unregistered type (only in strict mode).\n */\n public static strictMode: boolean = false;\n\n /**\n * Whether to throw an error when the IModelRpcProps in the operation parameter list differs from the token in the URL.\n * @note By default, a warning is logged and the operation is allowed to proceed.\n * @note The parameter token is always replaced by the url token (unless RpcOperationPolicy.allowTokenMismatch is set).\n */\n public static throwOnTokenMismatch = false;\n\n /** Sets the configuration supplier for an RPC interface class. */\n public static assign<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, supplier: RpcConfigurationSupplier): void {\n const map = definition.prototype.configurationSupplier as RpcRoutingMap | undefined;\n if (!map || typeof (map.configurations) === \"undefined\") {\n definition.prototype.configurationSupplier = supplier;\n } else {\n map.configurations.set(RpcRoutingToken.default.id, supplier);\n }\n }\n\n /** Sets the configuration supplier for an RPC interface class for a given routing. */\n public static assignWithRouting<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, routing: RpcRoutingToken, configuration: new () => RpcConfiguration): void {\n if (!definition.prototype.configurationSupplier) {\n RpcConfiguration.assign(definition, RpcRoutingMap.create());\n }\n\n let map = definition.prototype.configurationSupplier as RpcRoutingMap;\n if (typeof (map.configurations) === \"undefined\") {\n const existing = map as RpcConfigurationSupplier;\n map = RpcRoutingMap.create();\n RpcConfiguration.assign(definition, map);\n map.configurations.set(RpcRoutingToken.default.id, existing);\n }\n\n const supplier = () => configuration;\n map.configurations.set(routing.id, supplier);\n }\n\n /** Obtains the instance of an RPC configuration class. */\n public static obtain<T extends RpcConfiguration>(configurationConstructor: new () => T): T {\n let instance = (configurationConstructor as any)[INSTANCE] as T;\n if (!instance)\n instance = (configurationConstructor as any)[INSTANCE] = new configurationConstructor();\n\n return instance;\n }\n\n /** Enables passing of application-specific context with each RPC request. */\n public static requestContext: RpcRequestContext = {\n getId: (_request: RpcRequest): string => \"\",\n serialize: async (request: RpcRequest): Promise<SerializedRpcActivity> => ({\n id: request.id,\n applicationId: \"\",\n applicationVersion: \"\",\n sessionId: \"\",\n authorization: \"\",\n }),\n };\n\n /** @internal */\n public attached: RpcInterfaceDefinition[] = [];\n\n /** The protocol of the configuration.\n * @internal\n */\n public abstract readonly protocol: RpcProtocol;\n\n /** The RPC interfaces managed by the configuration. */\n public abstract readonly interfaces: () => RpcInterfaceDefinition[];\n\n /** @internal */\n public allowAttachedInterfaces: boolean = true;\n\n /** @internal */\n public get attachedInterfaces(): ReadonlyArray<RpcInterfaceDefinition> { return this.attached; }\n\n /** The target interval (in milliseconds) between connection attempts for pending RPC operation requests. */\n public pendingOperationRetryInterval = 10000;\n\n /** The maximum number of transient faults permitted before request failure. */\n public transientFaultLimit = 4;\n\n /** @internal */\n public readonly routing: RpcRoutingToken = RpcRoutingToken.default;\n\n /** The control channel for the configuration.\n * @internal\n */\n public readonly controlChannel = RpcControlChannel.obtain(this);\n\n /** @internal */\n public attach<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>): void {\n if (!this.allowAttachedInterfaces) {\n return;\n }\n\n if (this.interfaces().indexOf(definition) !== -1 || this.attached.indexOf(definition) !== -1) {\n return;\n }\n\n this.attached.push(definition);\n RpcConfiguration.assign(definition, () => this.constructor as any);\n RpcManager.initializeInterface(definition);\n }\n\n /** Initializes the RPC interfaces managed by the configuration. */\n public static initializeInterfaces(configuration: RpcConfiguration) {\n configuration.interfaces().forEach((definition) => RpcManager.initializeInterface(definition));\n }\n\n /** @internal */\n public static supply(definition: RpcInterface): RpcConfiguration {\n return RpcConfiguration.obtain(definition.configurationSupplier ? definition.configurationSupplier(definition.routing) : RpcDefaultConfiguration);\n }\n\n /** @internal */\n public onRpcClientInitialized(definition: RpcInterfaceDefinition, client: RpcInterface): void {\n this.protocol.onRpcClientInitialized(definition, client);\n }\n\n /** @internal */\n public onRpcImplInitialized(definition: RpcInterfaceDefinition, impl: RpcInterface): void {\n this.protocol.onRpcImplInitialized(definition, impl);\n }\n\n /** @internal */\n public onRpcClientTerminated(definition: RpcInterfaceDefinition, client: RpcInterface): void {\n this.protocol.onRpcClientTerminated(definition, client);\n }\n\n /** @internal */\n public onRpcImplTerminated(definition: RpcInterfaceDefinition, impl: RpcInterface): void {\n this.protocol.onRpcImplTerminated(definition, impl);\n }\n}\n\n/** A default configuration that can be used for basic testing within a library.\n * @internal\n */\nexport class RpcDefaultConfiguration extends RpcConfiguration {\n public interfaces = () => [];\n public protocol: RpcProtocol = new RpcDirectProtocol(this);\n}\n\n/** A default protocol that can be used for basic testing within a library.\n * @internal\n */\nexport class RpcDirectProtocol extends RpcProtocol {\n public readonly requestType = RpcDirectRequest;\n}\n\n/** A default request type that can be used for basic testing within a library.\n * @internal\n */\nexport class RpcDirectRequest extends RpcRequest {\n public headers: Map<string, string> = new Map();\n public fulfillment: RpcRequestFulfillment | undefined = undefined;\n\n protected async send() {\n const request = await this.protocol.serialize(this);\n return new Promise<number>(async (resolve, reject) => {\n try {\n this.fulfillment = await this.protocol.fulfill(request);\n resolve(this.fulfillment.status);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n protected setHeader(name: string, value: string): void {\n this.headers.set(name, value);\n }\n\n protected async load() {\n return this.fulfillment!.result;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RpcConfiguration.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConfiguration.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\nimport { RpcInterface, RpcInterfaceDefinition } from \"../../RpcInterface\";\nimport { RpcManager } from \"../../RpcManager\";\nimport { RpcControlChannel } from \"./RpcControl\";\nimport { SerializedRpcActivity } from \"./RpcInvocation\";\nimport { RpcProtocol, RpcRequestFulfillment } from \"./RpcProtocol\";\nimport { INSTANCE } from \"./RpcRegistry\";\nimport { RpcRequest } from \"./RpcRequest\";\nimport { RpcRequestContext } from \"./RpcRequestContext\";\nimport { RpcRoutingToken } from \"./RpcRoutingToken\";\n\n/* eslint-disable deprecation/deprecation */\n\n/** @internal */\nexport type RpcConfigurationSupplier = (routing?: RpcRoutingToken) => { new(): RpcConfiguration }; // eslint-disable-line @typescript-eslint/prefer-function-type\n\n/** @internal */\nexport interface RpcRoutingMap extends RpcConfigurationSupplier { configurations: Map<number, RpcConfigurationSupplier> }\n\n/** @internal */\nexport namespace RpcRoutingMap {\n export function create(): RpcRoutingMap {\n const configurations = new Map();\n return Object.assign((routing?: RpcRoutingToken) => configurations.get(routing!.id)(), { configurations });\n }\n}\n\n/** A RpcConfiguration specifies how calls on an RPC interface will be marshalled, plus other operating parameters.\n * RpcConfiguration is the base class for specific configurations.\n * @beta\n */\nexport abstract class RpcConfiguration {\n /** Whether development mode is enabled.\n * @note This parameter determines whether developer convenience features like backend stack traces are available.\n */\n public static developmentMode: boolean = false;\n\n /** Whether frontend checks that are relevant in a cloud-hosted routing scenario are disabled. */\n public static disableRoutingValidation: boolean = false;\n\n /** Whether strict mode is enabled.\n * This parameter determines system behaviors relating to strict checking:\n * - Whether an error is thrown if the type marshaling system encounters an unregistered type (only in strict mode).\n */\n public static strictMode: boolean = false;\n\n /**\n * Whether to throw an error when the IModelRpcProps in the operation parameter list differs from the token in the URL.\n * @note By default, a warning is logged and the operation is allowed to proceed.\n * @note The parameter token is always replaced by the url token (unless RpcOperationPolicy.allowTokenMismatch is set).\n */\n public static throwOnTokenMismatch = false;\n\n /** @internal Sets the configuration supplier for an RPC interface class. */\n public static assign<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, supplier: RpcConfigurationSupplier): void {\n const map = definition.prototype.configurationSupplier as RpcRoutingMap | undefined;\n if (!map || typeof (map.configurations) === \"undefined\") {\n definition.prototype.configurationSupplier = supplier;\n } else {\n map.configurations.set(RpcRoutingToken.default.id, supplier);\n }\n }\n\n /** Sets the configuration supplier for an RPC interface class for a given routing. */\n public static assignWithRouting<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, routing: RpcRoutingToken, configuration: new () => RpcConfiguration): void {\n if (!definition.prototype.configurationSupplier) {\n RpcConfiguration.assign(definition, RpcRoutingMap.create());\n }\n\n let map = definition.prototype.configurationSupplier as RpcRoutingMap;\n if (typeof (map.configurations) === \"undefined\") {\n const existing = map as RpcConfigurationSupplier;\n map = RpcRoutingMap.create();\n RpcConfiguration.assign(definition, map);\n map.configurations.set(RpcRoutingToken.default.id, existing);\n }\n\n const supplier = () => configuration;\n map.configurations.set(routing.id, supplier);\n }\n\n /** Obtains the instance of an RPC configuration class. */\n public static obtain<T extends RpcConfiguration>(configurationConstructor: new () => T): T {\n let instance = (configurationConstructor as any)[INSTANCE] as T;\n if (!instance)\n instance = (configurationConstructor as any)[INSTANCE] = new configurationConstructor();\n\n return instance;\n }\n\n /** @internal Enables passing of application-specific context with each RPC request. */\n public static requestContext: RpcRequestContext = {\n getId: (_request: RpcRequest): string => \"\",\n serialize: async (request: RpcRequest): Promise<SerializedRpcActivity> => ({\n id: request.id,\n applicationId: \"\",\n applicationVersion: \"\",\n sessionId: \"\",\n authorization: \"\",\n }),\n };\n\n /** @internal */\n public attached: RpcInterfaceDefinition[] = [];\n\n /** The protocol of the configuration.\n * @internal\n */\n public abstract readonly protocol: RpcProtocol;\n\n /** The RPC interfaces managed by the configuration. */\n public abstract readonly interfaces: () => RpcInterfaceDefinition[];\n\n /** @internal */\n public allowAttachedInterfaces: boolean = true;\n\n /** @internal */\n public get attachedInterfaces(): ReadonlyArray<RpcInterfaceDefinition> { return this.attached; }\n\n /** The target interval (in milliseconds) between connection attempts for pending RPC operation requests. */\n public pendingOperationRetryInterval = 10000;\n\n /** The maximum number of transient faults permitted before request failure. */\n public transientFaultLimit = 4;\n\n /** @internal */\n public readonly routing: RpcRoutingToken = RpcRoutingToken.default;\n\n /** The control channel for the configuration.\n * @internal\n */\n public readonly controlChannel = RpcControlChannel.obtain(this);\n\n /** @internal */\n public attach<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>): void {\n if (!this.allowAttachedInterfaces) {\n return;\n }\n\n if (this.interfaces().indexOf(definition) !== -1 || this.attached.indexOf(definition) !== -1) {\n return;\n }\n\n this.attached.push(definition);\n RpcConfiguration.assign(definition, () => this.constructor as any);\n RpcManager.initializeInterface(definition);\n }\n\n /** Initializes the RPC interfaces managed by the configuration. */\n public static initializeInterfaces(configuration: RpcConfiguration) {\n configuration.interfaces().forEach((definition) => RpcManager.initializeInterface(definition));\n }\n\n /** @internal */\n public static supply(definition: RpcInterface): RpcConfiguration {\n return RpcConfiguration.obtain(definition.configurationSupplier ? definition.configurationSupplier(definition.routing) : RpcDefaultConfiguration);\n }\n\n /** @internal */\n public onRpcClientInitialized(definition: RpcInterfaceDefinition, client: RpcInterface): void {\n this.protocol.onRpcClientInitialized(definition, client);\n }\n\n /** @internal */\n public onRpcImplInitialized(definition: RpcInterfaceDefinition, impl: RpcInterface): void {\n this.protocol.onRpcImplInitialized(definition, impl);\n }\n\n /** @internal */\n public onRpcClientTerminated(definition: RpcInterfaceDefinition, client: RpcInterface): void {\n this.protocol.onRpcClientTerminated(definition, client);\n }\n\n /** @internal */\n public onRpcImplTerminated(definition: RpcInterfaceDefinition, impl: RpcInterface): void {\n this.protocol.onRpcImplTerminated(definition, impl);\n }\n}\n\n/** A default configuration that can be used for basic testing within a library.\n * @internal\n */\nexport class RpcDefaultConfiguration extends RpcConfiguration {\n public interfaces = () => [];\n public protocol: RpcProtocol = new RpcDirectProtocol(this);\n}\n\n/** A default protocol that can be used for basic testing within a library.\n * @internal\n */\nexport class RpcDirectProtocol extends RpcProtocol {\n public readonly requestType = RpcDirectRequest;\n}\n\n/** A default request type that can be used for basic testing within a library.\n * @internal\n */\nexport class RpcDirectRequest extends RpcRequest {\n public headers: Map<string, string> = new Map();\n public fulfillment: RpcRequestFulfillment | undefined = undefined;\n\n protected async send() {\n const request = await this.protocol.serialize(this);\n return new Promise<number>(async (resolve, reject) => {\n try {\n this.fulfillment = await this.protocol.fulfill(request);\n resolve(this.fulfillment.status);\n } catch (err) {\n reject(err);\n }\n });\n }\n\n protected setHeader(name: string, value: string): void {\n this.headers.set(name, value);\n }\n\n protected async load() {\n return this.fulfillment!.result;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcRoutingToken.d.ts","sourceRoot":"","sources":["../../../../src/rpc/core/RpcRoutingToken.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,
|
|
1
|
+
{"version":3,"file":"RpcRoutingToken.d.ts","sourceRoot":"","sources":["../../../../src/rpc/core/RpcRoutingToken.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,YAAY;AACZ,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAM;WAEZ,QAAQ,CAAC,UAAU,SAAK,GAAG,eAAe;IAIxD,gBAAuB,OAAO,kBAAuC;IAErE,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,SAAgB,UAAU,EAAE,MAAM,CAAC;IAEnC,OAAO;CAIR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcRoutingToken.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcRoutingToken.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,4CAA4C;AAE5C,
|
|
1
|
+
{"version":3,"file":"RpcRoutingToken.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcRoutingToken.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,4CAA4C;AAE5C,YAAY;AACZ,MAAM,OAAO,eAAe;IAY1B,YAAoB,EAAU,EAAE,UAAkB;QAChD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAZM,MAAM,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE;QACpC,OAAO,IAAI,eAAe,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACvD,CAAC;;AAJc,qBAAK,GAAG,CAAC,CAAC,CAAC;AAMH,uBAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\n/* eslint-disable deprecation/deprecation */\n\n/** @beta */\nexport class RpcRoutingToken {\n private static _next = -1;\n\n public static generate(debugLabel = \"\"): RpcRoutingToken {\n return new RpcRoutingToken(++this._next, debugLabel);\n }\n\n public static readonly default = RpcRoutingToken.generate(\"default\");\n\n public readonly id: number;\n public readonly debugLabel: string;\n\n private constructor(id: number, debugLabel: string) {\n this.id = id;\n this.debugLabel = debugLabel;\n }\n}\n"]}
|
|
@@ -9,20 +9,22 @@ import { BentleyCloudRpcProtocol } from "./BentleyCloudRpcProtocol";
|
|
|
9
9
|
import { OpenAPIInfo } from "./OpenAPI";
|
|
10
10
|
import { RpcRoutingToken } from "../core/RpcRoutingToken";
|
|
11
11
|
/** Initialization parameters for BentleyCloudRpcConfiguration.
|
|
12
|
-
* @
|
|
12
|
+
* @beta
|
|
13
13
|
*/
|
|
14
14
|
export interface BentleyCloudRpcParams {
|
|
15
15
|
/** Identifies the remote server that implements a set of RpcInterfaces. Note that the ID of the remote server is not a URI or hostname. It is a string that matches a key in the orchestrator's app registry. */
|
|
16
16
|
info: OpenAPIInfo;
|
|
17
|
-
/** The protocol for Bentley cloud RPC interface deployments */
|
|
17
|
+
/** @internal The protocol for Bentley cloud RPC interface deployments */
|
|
18
18
|
protocol?: typeof BentleyCloudRpcProtocol;
|
|
19
19
|
/** The URI of the orchestrator that will route requests to the remote RpcInterface server. If not supplied, this default to the origin of the Web page. This is required only when calling initializeClient and only if the server is not the origin of the Web page. */
|
|
20
20
|
uriPrefix?: string;
|
|
21
|
-
/** Handler for RPC request events. */
|
|
21
|
+
/** @internal Handler for RPC request events. */
|
|
22
22
|
pendingRequestListener?: RpcRequestEventHandler;
|
|
23
|
+
/** An optional prefix for RPC operation URI paths. */
|
|
24
|
+
pathPrefix?: string;
|
|
23
25
|
}
|
|
24
26
|
/** Operating parameters for Bentley cloud RPC interface deployments.
|
|
25
|
-
* @
|
|
27
|
+
* @beta
|
|
26
28
|
*/
|
|
27
29
|
export declare abstract class BentleyCloudRpcConfiguration extends RpcConfiguration {
|
|
28
30
|
/** Access-Control header values for backend servers that serve frontends using BentleyCloudRpcProtocol. */
|
|
@@ -31,16 +33,16 @@ export declare abstract class BentleyCloudRpcConfiguration extends RpcConfigurat
|
|
|
31
33
|
allowMethods: string;
|
|
32
34
|
allowHeaders: string;
|
|
33
35
|
};
|
|
34
|
-
/** The protocol of the configuration. */
|
|
36
|
+
/** @internal The protocol of the configuration. */
|
|
35
37
|
abstract readonly protocol: BentleyCloudRpcProtocol;
|
|
36
38
|
}
|
|
37
39
|
/** Coordinates usage of RPC interfaces for Bentley cloud deployments.
|
|
38
|
-
* @
|
|
40
|
+
* @beta
|
|
39
41
|
*/
|
|
40
42
|
export declare class BentleyCloudRpcManager extends RpcManager {
|
|
41
|
-
/** Initializes BentleyCloudRpcManager for the frontend of an application. */
|
|
43
|
+
/** @beta Initializes BentleyCloudRpcManager for the frontend of an application. */
|
|
42
44
|
static initializeClient(params: BentleyCloudRpcParams, interfaces: RpcInterfaceDefinition[], routing?: RpcRoutingToken): BentleyCloudRpcConfiguration;
|
|
43
|
-
/** Initializes BentleyCloudRpcManager for the backend of an application. */
|
|
45
|
+
/** @beta Initializes BentleyCloudRpcManager for the backend of an application. */
|
|
44
46
|
static initializeImpl(params: BentleyCloudRpcParams, interfaces: RpcInterfaceDefinition[]): BentleyCloudRpcConfiguration;
|
|
45
47
|
private static performInitialization;
|
|
46
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BentleyCloudRpcManager.d.ts","sourceRoot":"","sources":["../../../../src/rpc/web/BentleyCloudRpcManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAc,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI1D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,iNAAiN;IACjN,IAAI,EAAE,WAAW,CAAC;IAClB
|
|
1
|
+
{"version":3,"file":"BentleyCloudRpcManager.d.ts","sourceRoot":"","sources":["../../../../src/rpc/web/BentleyCloudRpcManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAc,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI1D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,iNAAiN;IACjN,IAAI,EAAE,WAAW,CAAC;IAClB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,uBAAuB,CAAC;IAC1C,yQAAyQ;IACzQ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,8BAAsB,4BAA6B,SAAQ,gBAAgB;IACzE,2GAA2G;IAC3G,gBAAuB,aAAa;;;;MAIlC;IAEF,mDAAmD;IACnD,kBAAkC,QAAQ,EAAE,uBAAuB,CAAC;CACrE;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,UAAU;IACpD,mFAAmF;WACrE,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,EAAE,UAAU,EAAE,sBAAsB,EAAE,EAAE,OAAO,GAAE,eAAyC,GAAG,4BAA4B;IAIrL,kFAAkF;WACpE,cAAc,CAAC,MAAM,EAAE,qBAAqB,EAAE,UAAU,EAAE,sBAAsB,EAAE,GAAG,4BAA4B;IAI/H,OAAO,CAAC,MAAM,CAAC,qBAAqB;CAoCrC"}
|
|
@@ -12,7 +12,7 @@ import { RpcRequest } from "../core/RpcRequest";
|
|
|
12
12
|
import { BentleyCloudRpcProtocol } from "./BentleyCloudRpcProtocol";
|
|
13
13
|
import { RpcRoutingToken } from "../core/RpcRoutingToken";
|
|
14
14
|
/** Operating parameters for Bentley cloud RPC interface deployments.
|
|
15
|
-
* @
|
|
15
|
+
* @beta
|
|
16
16
|
*/
|
|
17
17
|
export class BentleyCloudRpcConfiguration extends RpcConfiguration {
|
|
18
18
|
}
|
|
@@ -23,14 +23,14 @@ BentleyCloudRpcConfiguration.accessControl = {
|
|
|
23
23
|
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",
|
|
24
24
|
};
|
|
25
25
|
/** Coordinates usage of RPC interfaces for Bentley cloud deployments.
|
|
26
|
-
* @
|
|
26
|
+
* @beta
|
|
27
27
|
*/
|
|
28
28
|
export class BentleyCloudRpcManager extends RpcManager {
|
|
29
|
-
/** Initializes BentleyCloudRpcManager for the frontend of an application. */
|
|
29
|
+
/** @beta Initializes BentleyCloudRpcManager for the frontend of an application. */
|
|
30
30
|
static initializeClient(params, interfaces, routing = RpcRoutingToken.default) {
|
|
31
31
|
return BentleyCloudRpcManager.performInitialization(params, interfaces, routing);
|
|
32
32
|
}
|
|
33
|
-
/** Initializes BentleyCloudRpcManager for the backend of an application. */
|
|
33
|
+
/** @beta Initializes BentleyCloudRpcManager for the backend of an application. */
|
|
34
34
|
static initializeImpl(params, interfaces) {
|
|
35
35
|
return BentleyCloudRpcManager.performInitialization(params, interfaces);
|
|
36
36
|
}
|
|
@@ -54,6 +54,9 @@ export class BentleyCloudRpcManager extends RpcManager {
|
|
|
54
54
|
RpcConfiguration.assignWithRouting(def, routing, config);
|
|
55
55
|
}
|
|
56
56
|
const instance = RpcConfiguration.obtain(config);
|
|
57
|
+
if (params.pathPrefix) {
|
|
58
|
+
instance.protocol.pathPrefix = params.pathPrefix;
|
|
59
|
+
}
|
|
57
60
|
RpcConfiguration.initializeInterfaces(instance);
|
|
58
61
|
if (params.pendingRequestListener) {
|
|
59
62
|
const listener = params.pendingRequestListener;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BentleyCloudRpcManager.js","sourceRoot":"","sources":["../../../../src/rpc/web/BentleyCloudRpcManager.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAA0B,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"BentleyCloudRpcManager.js","sourceRoot":"","sources":["../../../../src/rpc/web/BentleyCloudRpcManager.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAA0B,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAoB1D;;GAEG;AACH,MAAM,OAAgB,4BAA6B,SAAQ,gBAAgB;;AACzE,2GAA2G;AACpF,0CAAa,GAAG;IACrC,WAAW,EAAE,GAAG;IAChB,YAAY,EAAE,oBAAoB;IAClC,YAAY,EAAE,qLAAqL;CACpM,CAAC;AAMJ;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,UAAU;IACpD,mFAAmF;IAC5E,MAAM,CAAC,gBAAgB,CAAC,MAA6B,EAAE,UAAoC,EAAE,UAA2B,eAAe,CAAC,OAAO;QACpJ,OAAO,sBAAsB,CAAC,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACnF,CAAC;IAED,kFAAkF;IAC3E,MAAM,CAAC,cAAc,CAAC,MAA6B,EAAE,UAAoC;QAC9F,OAAO,sBAAsB,CAAC,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC1E,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,MAA6B,EAAE,UAAoC,EAAE,UAA2B,eAAe,CAAC,OAAO;QAC1J,MAAM,QAAQ,GAAG,KAAM,SAAQ,CAAC,MAAM,CAAC,QAAQ,IAAI,uBAAuB,CAAC;YAA1D;;gBACC,eAAU,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;gBAC7C,SAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YAC5B,CAAC;SAAA,CAAC;QAEF,MAAM,MAAM,GAAG,KAAM,SAAQ,4BAA4B;YAA1C;;gBACN,eAAU,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC;gBAC9B,aAAQ,GAA4B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9C,YAAO,GAAG,OAAO,CAAC;YACpC,CAAC;SAAA,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;YAC5B,gBAAgB,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;SAC1D;QAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEjD,IAAI,MAAM,CAAC,UAAU,EAAE;YACrB,QAAQ,CAAC,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;SAClD;QAED,gBAAgB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,MAAM,CAAC,sBAAsB,EAAE;YACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,sBAAsB,CAAC;YAE/C,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;gBAC9C,IAAI,IAAI,KAAK,eAAe,CAAC,qBAAqB,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,EAAE;oBAC5F,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;iBACzB;YACH,CAAC,CAAC,CAAC;SACJ;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { RpcInterfaceDefinition } from \"../../RpcInterface\";\nimport { RpcManager } from \"../../RpcManager\";\nimport { RpcConfiguration } from \"../core/RpcConfiguration\";\nimport { RpcRequestEvent } from \"../core/RpcConstants\";\nimport { RpcRequest, RpcRequestEventHandler } from \"../core/RpcRequest\";\nimport { BentleyCloudRpcProtocol } from \"./BentleyCloudRpcProtocol\";\nimport { OpenAPIInfo } from \"./OpenAPI\";\nimport { RpcRoutingToken } from \"../core/RpcRoutingToken\";\n\n/* eslint-disable deprecation/deprecation */\n\n/** Initialization parameters for BentleyCloudRpcConfiguration.\n * @beta\n */\nexport interface BentleyCloudRpcParams {\n /** Identifies the remote server that implements a set of RpcInterfaces. Note that the ID of the remote server is not a URI or hostname. It is a string that matches a key in the orchestrator's app registry. */\n info: OpenAPIInfo;\n /** @internal The protocol for Bentley cloud RPC interface deployments */\n protocol?: typeof BentleyCloudRpcProtocol;\n /** The URI of the orchestrator that will route requests to the remote RpcInterface server. If not supplied, this default to the origin of the Web page. This is required only when calling initializeClient and only if the server is not the origin of the Web page. */\n uriPrefix?: string;\n /** @internal Handler for RPC request events. */\n pendingRequestListener?: RpcRequestEventHandler;\n /** An optional prefix for RPC operation URI paths. */\n pathPrefix?: string;\n}\n\n/** Operating parameters for Bentley cloud RPC interface deployments.\n * @beta\n */\nexport abstract class BentleyCloudRpcConfiguration extends RpcConfiguration {\n /** Access-Control header values for backend servers that serve frontends using BentleyCloudRpcProtocol. */\n public static readonly accessControl = {\n allowOrigin: \"*\",\n allowMethods: \"POST, GET, OPTIONS\",\n 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\",\n };\n\n /** @internal The protocol of the configuration. */\n public abstract override readonly protocol: BentleyCloudRpcProtocol;\n}\n\n/** Coordinates usage of RPC interfaces for Bentley cloud deployments.\n * @beta\n */\nexport class BentleyCloudRpcManager extends RpcManager {\n /** @beta Initializes BentleyCloudRpcManager for the frontend of an application. */\n public static initializeClient(params: BentleyCloudRpcParams, interfaces: RpcInterfaceDefinition[], routing: RpcRoutingToken = RpcRoutingToken.default): BentleyCloudRpcConfiguration {\n return BentleyCloudRpcManager.performInitialization(params, interfaces, routing);\n }\n\n /** @beta Initializes BentleyCloudRpcManager for the backend of an application. */\n public static initializeImpl(params: BentleyCloudRpcParams, interfaces: RpcInterfaceDefinition[]): BentleyCloudRpcConfiguration {\n return BentleyCloudRpcManager.performInitialization(params, interfaces);\n }\n\n private static performInitialization(params: BentleyCloudRpcParams, interfaces: RpcInterfaceDefinition[], routing: RpcRoutingToken = RpcRoutingToken.default): BentleyCloudRpcConfiguration {\n const protocol = class extends (params.protocol || BentleyCloudRpcProtocol) {\n public override pathPrefix = params.uriPrefix || \"\";\n public info = params.info;\n };\n\n const config = class extends BentleyCloudRpcConfiguration {\n public interfaces = () => interfaces;\n public protocol: BentleyCloudRpcProtocol = new protocol(this);\n public override routing = routing;\n };\n\n for (const def of interfaces) {\n RpcConfiguration.assignWithRouting(def, routing, config);\n }\n\n const instance = RpcConfiguration.obtain(config);\n\n if (params.pathPrefix) {\n instance.protocol.pathPrefix = params.pathPrefix;\n }\n\n RpcConfiguration.initializeInterfaces(instance);\n\n if (params.pendingRequestListener) {\n const listener = params.pendingRequestListener;\n\n RpcRequest.events.addListener((type, request) => {\n if (type === RpcRequestEvent.PendingUpdateReceived && request.protocol === instance.protocol) {\n listener(type, request);\n }\n });\n }\n\n return instance;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/core-common",
|
|
3
|
-
"version": "3.7.0
|
|
3
|
+
"version": "3.7.0",
|
|
4
4
|
"description": "iTwin.js components common to frontend and backend",
|
|
5
5
|
"main": "lib/cjs/core-common.js",
|
|
6
6
|
"module": "lib/esm/core-common.js",
|
|
@@ -28,14 +28,14 @@
|
|
|
28
28
|
"js-base64": "^3.6.1"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
|
-
"@itwin/core-bentley": "^3.7.0
|
|
32
|
-
"@itwin/core-geometry": "^3.7.0
|
|
31
|
+
"@itwin/core-bentley": "^3.7.0",
|
|
32
|
+
"@itwin/core-geometry": "^3.7.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@itwin/build-tools": "3.7.0
|
|
36
|
-
"@itwin/core-bentley": "3.7.0
|
|
37
|
-
"@itwin/core-geometry": "3.7.0
|
|
38
|
-
"@itwin/eslint-plugin": "3.7.0
|
|
35
|
+
"@itwin/build-tools": "3.7.0",
|
|
36
|
+
"@itwin/core-bentley": "3.7.0",
|
|
37
|
+
"@itwin/core-geometry": "3.7.0",
|
|
38
|
+
"@itwin/eslint-plugin": "3.7.0",
|
|
39
39
|
"@types/chai": "4.3.1",
|
|
40
40
|
"@types/flatbuffers": "~1.10.0",
|
|
41
41
|
"@types/mocha": "^8.2.2",
|