@itwin/core-common 3.3.0-dev.18 → 3.3.0-dev.20
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/lib/cjs/rpc/IModelReadRpcInterface.d.ts.map +1 -1
- package/lib/cjs/rpc/IModelReadRpcInterface.js +34 -2
- package/lib/cjs/rpc/IModelReadRpcInterface.js.map +1 -1
- package/lib/cjs/rpc/IModelTileRpcInterface.d.ts.map +1 -1
- package/lib/cjs/rpc/IModelTileRpcInterface.js +16 -2
- package/lib/cjs/rpc/IModelTileRpcInterface.js.map +1 -1
- package/lib/cjs/rpc/core/RpcProtocol.d.ts +2 -0
- package/lib/cjs/rpc/core/RpcProtocol.d.ts.map +1 -1
- package/lib/cjs/rpc/core/RpcProtocol.js +2 -0
- package/lib/cjs/rpc/core/RpcProtocol.js.map +1 -1
- package/lib/cjs/rpc/core/RpcRequest.d.ts.map +1 -1
- package/lib/cjs/rpc/core/RpcRequest.js +1 -0
- package/lib/cjs/rpc/core/RpcRequest.js.map +1 -1
- package/lib/cjs/rpc/web/WebAppRpcProtocol.d.ts +2 -1
- package/lib/cjs/rpc/web/WebAppRpcProtocol.d.ts.map +1 -1
- package/lib/cjs/rpc/web/WebAppRpcProtocol.js +5 -5
- package/lib/cjs/rpc/web/WebAppRpcProtocol.js.map +1 -1
- package/lib/cjs/rpc/web/WebAppRpcRequest.d.ts +2 -0
- package/lib/cjs/rpc/web/WebAppRpcRequest.d.ts.map +1 -1
- package/lib/cjs/rpc/web/WebAppRpcRequest.js +25 -5
- package/lib/cjs/rpc/web/WebAppRpcRequest.js.map +1 -1
- package/lib/esm/rpc/IModelReadRpcInterface.d.ts.map +1 -1
- package/lib/esm/rpc/IModelReadRpcInterface.js +33 -1
- package/lib/esm/rpc/IModelReadRpcInterface.js.map +1 -1
- package/lib/esm/rpc/IModelTileRpcInterface.d.ts.map +1 -1
- package/lib/esm/rpc/IModelTileRpcInterface.js +15 -1
- package/lib/esm/rpc/IModelTileRpcInterface.js.map +1 -1
- package/lib/esm/rpc/core/RpcProtocol.d.ts +2 -0
- package/lib/esm/rpc/core/RpcProtocol.d.ts.map +1 -1
- package/lib/esm/rpc/core/RpcProtocol.js +2 -0
- package/lib/esm/rpc/core/RpcProtocol.js.map +1 -1
- package/lib/esm/rpc/core/RpcRequest.d.ts.map +1 -1
- package/lib/esm/rpc/core/RpcRequest.js +1 -0
- package/lib/esm/rpc/core/RpcRequest.js.map +1 -1
- package/lib/esm/rpc/web/WebAppRpcProtocol.d.ts +2 -1
- package/lib/esm/rpc/web/WebAppRpcProtocol.d.ts.map +1 -1
- package/lib/esm/rpc/web/WebAppRpcProtocol.js +5 -5
- package/lib/esm/rpc/web/WebAppRpcProtocol.js.map +1 -1
- package/lib/esm/rpc/web/WebAppRpcRequest.d.ts +2 -0
- package/lib/esm/rpc/web/WebAppRpcRequest.d.ts.map +1 -1
- package/lib/esm/rpc/web/WebAppRpcRequest.js +25 -5
- package/lib/esm/rpc/web/WebAppRpcRequest.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcProtocol.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcProtocol.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module RpcInterface\r\n */\r\n\r\nimport { BeEvent } from \"@itwin/core-bentley\";\r\nimport { IModelRpcProps } from \"../../IModel\";\r\nimport { RpcInterface, RpcInterfaceDefinition } from \"../../RpcInterface\";\r\nimport { RpcConfiguration } from \"./RpcConfiguration\";\r\nimport { RpcProtocolEvent, RpcRequestStatus, RpcResponseCacheControl } from \"./RpcConstants\";\r\nimport { RpcInvocation, SerializedRpcActivity } from \"./RpcInvocation\";\r\nimport { RpcMarshaling, RpcSerializedValue } from \"./RpcMarshaling\";\r\nimport { RpcOperation } from \"./RpcOperation\";\r\nimport { RpcRequest } from \"./RpcRequest\";\r\n\r\n/** A serialized RPC operation descriptor.\r\n * @internal\r\n */\r\nexport interface SerializedRpcOperation {\r\n interfaceDefinition: string;\r\n operationName: string;\r\n interfaceVersion: string;\r\n encodedRequest?: string;\r\n}\r\n\r\n/** A serialized RPC operation request.\r\n * @internal\r\n */\r\nexport interface SerializedRpcRequest extends SerializedRpcActivity {\r\n operation: SerializedRpcOperation;\r\n method: string;\r\n path: string;\r\n parameters: RpcSerializedValue;\r\n caching: RpcResponseCacheControl;\r\n ip?: string;\r\n protocolVersion?: number;\r\n}\r\n\r\n/** An RPC operation request fulfillment.\r\n * @internal\r\n */\r\nexport interface RpcRequestFulfillment {\r\n /** The RPC interface for the request. */\r\n interfaceName: string;\r\n\r\n /** The id for the request. */\r\n id: string;\r\n\r\n /** The result for the request. */\r\n result: RpcSerializedValue;\r\n\r\n /** The un-serialized result for the request. */\r\n rawResult: any;\r\n\r\n /** A protocol-specific status code value for the request. */\r\n status: number;\r\n\r\n /* A protocol-specific value for retrying this request. */\r\n retry?: string;\r\n\r\n /** Whether to compress the result with one of the client's supported encodings. */\r\n allowCompression?: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport namespace RpcRequestFulfillment {\r\n export async function forUnknownError(request: SerializedRpcRequest, error: any): Promise<RpcRequestFulfillment> {\r\n const result = await RpcMarshaling.serialize(undefined, error);\r\n\r\n return {\r\n interfaceName: request.operation.interfaceDefinition,\r\n id: request.id,\r\n result,\r\n rawResult: error,\r\n status: RpcRequestStatus.Rejected,\r\n };\r\n }\r\n}\r\n\r\n/** Handles RPC protocol events.\r\n * @internal\r\n */\r\nexport type RpcProtocolEventHandler = (type: RpcProtocolEvent, object: RpcRequest | RpcInvocation, err?: any) => void;\r\n\r\n/** Documents changes to the RPC protocol version.\r\n * @internal\r\n */\r\nexport enum RpcProtocolVersion {\r\n None = 0,\r\n IntroducedNoContent = 1,\r\n IntroducedStatusCategory = 2\r\n}\r\n\r\n/**\r\n * A backend response that is handled internally by the RPC system.\r\n * @internal\r\n */\r\nexport interface RpcManagedStatus {\r\n iTwinRpcCoreResponse: true;\r\n managedStatus: \"pending\" | \"notFound\";\r\n responseValue: string;\r\n}\r\n\r\n/** An application protocol for an RPC interface.\r\n * @internal\r\n */\r\nexport abstract class RpcProtocol {\r\n /** Events raised by all protocols. See [[RpcProtocolEvent]] */\r\n public static readonly events: BeEvent<RpcProtocolEventHandler> = new BeEvent();\r\n\r\n /** A version code that identifies the RPC protocol capabilties of this endpoint. */\r\n public static readonly protocolVersion: number = RpcProtocolVersion.IntroducedStatusCategory;\r\n\r\n /** The name of the RPC protocol version header. */\r\n public protocolVersionHeaderName = \"\";\r\n\r\n /** Events raised by the protocol. See [[RpcProtocolEvent]] */\r\n public readonly events: BeEvent<RpcProtocolEventHandler> = new BeEvent();\r\n\r\n /** The configuration for the protocol. */\r\n public readonly configuration: RpcConfiguration;\r\n\r\n /** The RPC request class for this protocol. */\r\n public abstract readonly requestType: typeof RpcRequest;\r\n\r\n /** The RPC invocation class for this protocol. */\r\n public readonly invocationType: typeof RpcInvocation = RpcInvocation;\r\n\r\n public serializedClientRequestContextHeaderNames: SerializedRpcActivity = {\r\n /** The name of the request id header. */\r\n id: \"\",\r\n\r\n /** The name of the application id header */\r\n applicationId: \"\",\r\n\r\n /** The name of the version header. */\r\n applicationVersion: \"\",\r\n\r\n /** The name of the session id header */\r\n sessionId: \"\",\r\n\r\n /** The name of the authorization header. */\r\n authorization: \"\",\r\n };\r\n\r\n /** If greater than zero, specifies where to break large binary request payloads. */\r\n public transferChunkThreshold: number = 0;\r\n\r\n /** Used by protocols that can transmit stream values natively. */\r\n public preserveStreams: boolean = false;\r\n\r\n /** Used by protocols that can transmit IModelRpcProps values natively. */\r\n public checkToken: boolean = false;\r\n\r\n /** Used by protocols that support user-defined status codes. */\r\n public supportsStatusCategory: boolean = false;\r\n\r\n /** If checkToken is true, will be called on the backend to inflate the IModelRpcProps for each request. */\r\n public inflateToken(tokenFromBody: IModelRpcProps, _request: SerializedRpcRequest): IModelRpcProps { return tokenFromBody; }\r\n\r\n /** Override to supply the status corresponding to a protocol-specific code value. */\r\n public getStatus(code: number): RpcRequestStatus {\r\n return code;\r\n }\r\n\r\n /** Override to supply the protocol-specific code corresponding to a status value. */\r\n public getCode(status: RpcRequestStatus): number {\r\n return status;\r\n }\r\n\r\n /** Override to supply the protocol-specific path value for an RPC operation. */\r\n public supplyPathForOperation(operation: RpcOperation, _request: RpcRequest | undefined): string {\r\n return JSON.stringify(operation);\r\n }\r\n\r\n /** Override to supply the operation for a protocol-specific path value. */\r\n public getOperationFromPath(path: string): SerializedRpcOperation {\r\n return JSON.parse(path);\r\n }\r\n\r\n /** Obtains the implementation result on the backend for an RPC operation request. */\r\n public async fulfill(request: SerializedRpcRequest): Promise<RpcRequestFulfillment> {\r\n return new (this.invocationType)(this, request).fulfillment;\r\n }\r\n\r\n /** Serializes a request. */\r\n public async serialize(request: RpcRequest): Promise<SerializedRpcRequest> {\r\n const serializedContext = await RpcConfiguration.requestContext.serialize(request);\r\n return {\r\n ...serializedContext,\r\n operation: {\r\n interfaceDefinition: request.operation.interfaceDefinition.interfaceName,\r\n operationName: request.operation.operationName,\r\n interfaceVersion: request.operation.interfaceVersion,\r\n },\r\n method: request.method,\r\n path: request.path,\r\n parameters: await RpcMarshaling.serialize(request.protocol, request.parameters),\r\n caching: RpcResponseCacheControl.None,\r\n protocolVersion: RpcProtocol.protocolVersion,\r\n };\r\n }\r\n\r\n /** Constructs a protocol. */\r\n public constructor(configuration: RpcConfiguration) {\r\n this.configuration = configuration;\r\n this.events.addListener((type, object) => RpcProtocol.events.raiseEvent(type, object));\r\n }\r\n\r\n /** @internal */\r\n public onRpcClientInitialized(_definition: RpcInterfaceDefinition, _client: RpcInterface): void { }\r\n\r\n /** @internal */\r\n public onRpcImplInitialized(_definition: RpcInterfaceDefinition, _impl: RpcInterface): void { }\r\n\r\n /** @internal */\r\n public onRpcClientTerminated(_definition: RpcInterfaceDefinition, _client: RpcInterface): void { }\r\n\r\n /** @internal */\r\n public onRpcImplTerminated(_definition: RpcInterfaceDefinition, _impl: RpcInterface): void { }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"RpcProtocol.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcProtocol.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module RpcInterface\r\n */\r\n\r\nimport { BeEvent } from \"@itwin/core-bentley\";\r\nimport { IModelRpcProps } from \"../../IModel\";\r\nimport { RpcInterface, RpcInterfaceDefinition } from \"../../RpcInterface\";\r\nimport { RpcConfiguration } from \"./RpcConfiguration\";\r\nimport { RpcProtocolEvent, RpcRequestStatus, RpcResponseCacheControl } from \"./RpcConstants\";\r\nimport { RpcInvocation, SerializedRpcActivity } from \"./RpcInvocation\";\r\nimport { RpcMarshaling, RpcSerializedValue } from \"./RpcMarshaling\";\r\nimport { RpcOperation } from \"./RpcOperation\";\r\nimport { RpcRequest } from \"./RpcRequest\";\r\n\r\n/** A serialized RPC operation descriptor.\r\n * @internal\r\n */\r\nexport interface SerializedRpcOperation {\r\n interfaceDefinition: string;\r\n operationName: string;\r\n interfaceVersion: string;\r\n encodedRequest?: string;\r\n}\r\n\r\n/** A serialized RPC operation request.\r\n * @internal\r\n */\r\nexport interface SerializedRpcRequest extends SerializedRpcActivity {\r\n operation: SerializedRpcOperation;\r\n method: string;\r\n path: string;\r\n parameters: RpcSerializedValue;\r\n caching: RpcResponseCacheControl;\r\n ip?: string;\r\n protocolVersion?: number;\r\n}\r\n\r\n/** An RPC operation request fulfillment.\r\n * @internal\r\n */\r\nexport interface RpcRequestFulfillment {\r\n /** The RPC interface for the request. */\r\n interfaceName: string;\r\n\r\n /** The id for the request. */\r\n id: string;\r\n\r\n /** The result for the request. */\r\n result: RpcSerializedValue;\r\n\r\n /** The un-serialized result for the request. */\r\n rawResult: any;\r\n\r\n /** A protocol-specific status code value for the request. */\r\n status: number;\r\n\r\n /* A protocol-specific value for retrying this request. */\r\n retry?: string;\r\n\r\n /** Whether to compress the result with one of the client's supported encodings. */\r\n allowCompression?: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport namespace RpcRequestFulfillment {\r\n export async function forUnknownError(request: SerializedRpcRequest, error: any): Promise<RpcRequestFulfillment> {\r\n const result = await RpcMarshaling.serialize(undefined, error);\r\n\r\n return {\r\n interfaceName: request.operation.interfaceDefinition,\r\n id: request.id,\r\n result,\r\n rawResult: error,\r\n status: RpcRequestStatus.Rejected,\r\n };\r\n }\r\n}\r\n\r\n/** Handles RPC protocol events.\r\n * @internal\r\n */\r\nexport type RpcProtocolEventHandler = (type: RpcProtocolEvent, object: RpcRequest | RpcInvocation, err?: any) => void;\r\n\r\n/** Documents changes to the RPC protocol version.\r\n * @internal\r\n */\r\nexport enum RpcProtocolVersion {\r\n None = 0,\r\n IntroducedNoContent = 1,\r\n IntroducedStatusCategory = 2\r\n}\r\n\r\n/**\r\n * A backend response that is handled internally by the RPC system.\r\n * @internal\r\n */\r\nexport interface RpcManagedStatus {\r\n iTwinRpcCoreResponse: true;\r\n managedStatus: \"pending\" | \"notFound\";\r\n responseValue: string;\r\n}\r\n\r\n/** An application protocol for an RPC interface.\r\n * @internal\r\n */\r\nexport abstract class RpcProtocol {\r\n /** Events raised by all protocols. See [[RpcProtocolEvent]] */\r\n public static readonly events: BeEvent<RpcProtocolEventHandler> = new BeEvent();\r\n\r\n /** A version code that identifies the RPC protocol capabilties of this endpoint. */\r\n public static readonly protocolVersion: number = RpcProtocolVersion.IntroducedStatusCategory;\r\n\r\n /** The name of the RPC protocol version header. */\r\n public protocolVersionHeaderName = \"\";\r\n\r\n /** Events raised by the protocol. See [[RpcProtocolEvent]] */\r\n public readonly events: BeEvent<RpcProtocolEventHandler> = new BeEvent();\r\n\r\n /** The configuration for the protocol. */\r\n public readonly configuration: RpcConfiguration;\r\n\r\n /** The RPC request class for this protocol. */\r\n public abstract readonly requestType: typeof RpcRequest;\r\n\r\n /** The RPC invocation class for this protocol. */\r\n public readonly invocationType: typeof RpcInvocation = RpcInvocation;\r\n\r\n public serializedClientRequestContextHeaderNames: SerializedRpcActivity = {\r\n /** The name of the request id header. */\r\n id: \"\",\r\n\r\n /** The name of the application id header */\r\n applicationId: \"\",\r\n\r\n /** The name of the version header. */\r\n applicationVersion: \"\",\r\n\r\n /** The name of the session id header */\r\n sessionId: \"\",\r\n\r\n /** The name of the authorization header. */\r\n authorization: \"\",\r\n };\r\n\r\n /** If greater than zero, specifies where to break large binary request payloads. */\r\n public transferChunkThreshold: number = 0;\r\n\r\n /** Used by protocols that can transmit stream values natively. */\r\n public preserveStreams: boolean = false;\r\n\r\n /** Used by protocols that can transmit IModelRpcProps values natively. */\r\n public checkToken: boolean = false;\r\n\r\n /** Used by protocols that support user-defined status codes. */\r\n public supportsStatusCategory: boolean = false;\r\n\r\n /** If checkToken is true, will be called on the backend to inflate the IModelRpcProps for each request. */\r\n public inflateToken(tokenFromBody: IModelRpcProps, _request: SerializedRpcRequest): IModelRpcProps { return tokenFromBody; }\r\n\r\n /** Override to supply the status corresponding to a protocol-specific code value. */\r\n public getStatus(code: number): RpcRequestStatus {\r\n return code;\r\n }\r\n\r\n /** Override to supply the protocol-specific code corresponding to a status value. */\r\n public getCode(status: RpcRequestStatus): number {\r\n return status;\r\n }\r\n\r\n /** Override to supply the protocol-specific path value for an RPC operation. */\r\n public supplyPathForOperation(operation: RpcOperation, _request: RpcRequest | undefined): string {\r\n return JSON.stringify(operation);\r\n }\r\n\r\n /** Override to supply the operation for a protocol-specific path value. */\r\n public getOperationFromPath(path: string): SerializedRpcOperation {\r\n return JSON.parse(path);\r\n }\r\n\r\n /** Obtains the implementation result on the backend for an RPC operation request. */\r\n public async fulfill(request: SerializedRpcRequest): Promise<RpcRequestFulfillment> {\r\n return new (this.invocationType)(this, request).fulfillment;\r\n }\r\n\r\n /** @internal */\r\n public async initialize(_token?: IModelRpcProps): Promise<void> { }\r\n\r\n /** Serializes a request. */\r\n public async serialize(request: RpcRequest): Promise<SerializedRpcRequest> {\r\n const serializedContext = await RpcConfiguration.requestContext.serialize(request);\r\n return {\r\n ...serializedContext,\r\n operation: {\r\n interfaceDefinition: request.operation.interfaceDefinition.interfaceName,\r\n operationName: request.operation.operationName,\r\n interfaceVersion: request.operation.interfaceVersion,\r\n },\r\n method: request.method,\r\n path: request.path,\r\n parameters: await RpcMarshaling.serialize(request.protocol, request.parameters),\r\n caching: RpcResponseCacheControl.None,\r\n protocolVersion: RpcProtocol.protocolVersion,\r\n };\r\n }\r\n\r\n /** Constructs a protocol. */\r\n public constructor(configuration: RpcConfiguration) {\r\n this.configuration = configuration;\r\n this.events.addListener((type, object) => RpcProtocol.events.raiseEvent(type, object));\r\n }\r\n\r\n /** @internal */\r\n public onRpcClientInitialized(_definition: RpcInterfaceDefinition, _client: RpcInterface): void { }\r\n\r\n /** @internal */\r\n public onRpcImplInitialized(_definition: RpcInterfaceDefinition, _impl: RpcInterface): void { }\r\n\r\n /** @internal */\r\n public onRpcClientTerminated(_definition: RpcInterfaceDefinition, _client: RpcInterface): void { }\r\n\r\n /** @internal */\r\n public onRpcImplTerminated(_definition: RpcInterfaceDefinition, _impl: RpcInterface): void { }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcRequest.d.ts","sourceRoot":"","sources":["../../../../src/rpc/core/RpcRequest.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"RpcRequest.d.ts","sourceRoot":"","sources":["../../../../src/rpc/core/RpcRequest.ts"],"names":[],"mappings":"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"}
|
|
@@ -195,6 +195,7 @@ export class RpcRequest {
|
|
|
195
195
|
this._connecting = true;
|
|
196
196
|
RpcRequest._activeRequests.set(this.id, this);
|
|
197
197
|
this.protocol.events.raiseEvent(RpcProtocolEvent.RequestCreated, this);
|
|
198
|
+
await this.protocol.initialize(this.operation.policy.token(this));
|
|
198
199
|
this._sending = new Cancellable(this.setHeaders().then(async () => this.send()));
|
|
199
200
|
this.operation.policy.sentCallback(this);
|
|
200
201
|
const response = await this._sending.promise;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcRequest.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcRequest.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module RpcInterface\r\n */\r\n\r\nimport { BeEvent, BentleyStatus, Guid } from \"@itwin/core-bentley\";\r\nimport { IModelRpcProps } from \"../../IModel\";\r\nimport { BackendError, IModelError, NoContentError } from \"../../IModelError\";\r\nimport { RpcInterface } from \"../../RpcInterface\";\r\nimport { RpcConfiguration } from \"./RpcConfiguration\";\r\nimport { RpcProtocolEvent, RpcRequestEvent, RpcRequestStatus, RpcResponseCacheControl } from \"./RpcConstants\";\r\nimport { RpcNotFoundResponse } from \"./RpcControl\";\r\nimport { RpcMarshaling, RpcSerializedValue } from \"./RpcMarshaling\";\r\nimport { RpcOperation } from \"./RpcOperation\";\r\nimport { RpcManagedStatus, RpcProtocol, RpcProtocolVersion } from \"./RpcProtocol\";\r\nimport { CURRENT_REQUEST } from \"./RpcRegistry\";\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n// cspell:ignore csrf\r\n\r\nconst aggregateLoad = { lastRequest: 0, lastResponse: 0 };\r\n\r\n/** @internal */\r\nexport class ResponseLike implements Response {\r\n private _data: Promise<any>;\r\n public get body() { return null; }\r\n public async arrayBuffer(): Promise<ArrayBuffer> { return this._data; }\r\n public async blob(): Promise<Blob> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\r\n public async formData(): Promise<FormData> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\r\n public async json(): Promise<any> { return this._data; }\r\n public async text(): Promise<string> { return this._data; }\r\n public get bodyUsed() { return false; }\r\n public get headers(): Headers { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\r\n public get ok(): boolean { return this.status >= 200 && this.status <= 299; }\r\n public get redirected() { return false; }\r\n public get status() { return 200; }\r\n public get statusText() { return \"\"; }\r\n public get trailer(): Promise<Headers> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\r\n public get type(): ResponseType { return \"basic\"; }\r\n public get url() { return \"\"; }\r\n public clone() { return { ...this }; }\r\n\r\n public constructor(data: any) {\r\n this._data = Promise.resolve(data);\r\n }\r\n}\r\n\r\n/** Supplies an IModelRpcProps for an RPC request.\r\n * @internal\r\n */\r\nexport type RpcRequestTokenSupplier_T = (request: RpcRequest) => IModelRpcProps | undefined;\r\n\r\n/** Supplies the initial retry interval for an RPC request.\r\n * @internal\r\n */\r\nexport type RpcRequestInitialRetryIntervalSupplier_T = (configuration: RpcConfiguration) => number;\r\n\r\n/** Notification callback for an RPC request.\r\n * @internal\r\n */\r\nexport type RpcRequestCallback_T = (request: RpcRequest) => void;\r\n\r\n/** Determines if caching is permitted for a RPC response.\r\n * @internal\r\n */\r\nexport type RpcResponseCachingCallback_T = (request: RpcRequest) => RpcResponseCacheControl;\r\n\r\n/** Runtime information related to the operation load of one or more RPC interfaces.\r\n * @internal\r\n */\r\nexport interface RpcOperationsProfile {\r\n readonly lastRequest: number;\r\n readonly lastResponse: number;\r\n}\r\n\r\n/** Handles RPC request events.\r\n * @internal\r\n */\r\nexport type RpcRequestEventHandler = (type: RpcRequestEvent, request: RpcRequest) => void;\r\n\r\n/** Resolves \"not found\" responses for RPC requests.\r\n * @internal\r\n */\r\nexport type RpcRequestNotFoundHandler = (request: RpcRequest, response: RpcNotFoundResponse, resubmit: () => void, reject: (reason: any) => void) => void;\r\n\r\nclass Cancellable<T> {\r\n public promise: Promise<T | undefined>;\r\n public cancel() { }\r\n\r\n public constructor(task: Promise<T>) {\r\n this.promise = new Promise((resolve, reject) => {\r\n // eslint-disable-next-line @typescript-eslint/unbound-method\r\n this.cancel = () => resolve(undefined);\r\n task.then(resolve, reject);\r\n });\r\n }\r\n}\r\n\r\n/** A RPC operation request.\r\n * @internal\r\n */\r\nexport abstract class RpcRequest<TResponse = any> {\r\n private static _activeRequests: Map<string, RpcRequest> = new Map();\r\n private _resolve: (value?: TResponse | PromiseLike<TResponse> | undefined) => void = () => undefined;\r\n protected _resolveRaw: (value?: Response | PromiseLike<Response> | undefined) => void = () => undefined;\r\n private _reject: (reason?: any) => void = () => undefined;\r\n private _rejectRaw: (reason?: any) => void = () => undefined;\r\n private _created: number = 0;\r\n private _lastSubmitted: number = 0;\r\n private _lastUpdated: number = 0;\r\n private _status: RpcRequestStatus = RpcRequestStatus.Unknown;\r\n private _extendedStatus: string = \"\";\r\n private _connecting: boolean = false;\r\n private _active: boolean = true;\r\n private _hasRawListener = false;\r\n private _raw: ArrayBuffer | string | undefined = undefined;\r\n private _sending?: Cancellable<number>;\r\n private _attempts = 0;\r\n private _retryAfter: number | null = null;\r\n private _transientFaults = 0;\r\n protected _response: Response | undefined = undefined;\r\n protected _rawPromise: Promise<Response | undefined>;\r\n protected responseProtocolVersion = 0;\r\n\r\n /** All RPC requests that are currently in flight. */\r\n public static get activeRequests(): ReadonlyMap<string, RpcRequest> { return this._activeRequests; }\r\n\r\n /** Events raised by RpcRequest. See [[RpcRequestEvent]] */\r\n public static readonly events: BeEvent<RpcRequestEventHandler> = new BeEvent();\r\n\r\n /** Resolvers for \"not found\" requests. See [[RpcRequestNotFoundHandler]] */\r\n public static readonly notFoundHandlers: BeEvent<RpcRequestNotFoundHandler> = new BeEvent();\r\n\r\n /** The aggregate operations profile of all active RPC interfaces. */\r\n public static get aggregateLoad(): RpcOperationsProfile { return aggregateLoad; }\r\n\r\n /**\r\n * The request for the current RPC operation.\r\n * @note The return value of this function is only reliable if program control was received from a RPC interface class member function that directly returns the result of calling RpcInterface.forward.\r\n */\r\n public static current(context: RpcInterface): RpcRequest {\r\n return (context as any)[CURRENT_REQUEST];\r\n }\r\n\r\n /** The unique identifier of this request. */\r\n public readonly id: string;\r\n\r\n /** The operation for this request. */\r\n public readonly operation: RpcOperation;\r\n\r\n /** The parameters for this request. */\r\n public parameters: any[];\r\n\r\n /** The RPC client instance for this request. */\r\n public readonly client: RpcInterface;\r\n\r\n /** Convenience access to the protocol of this request. */\r\n public readonly protocol: RpcProtocol;\r\n\r\n /** The implementation response for this request. */\r\n public readonly response: Promise<TResponse | undefined>;\r\n\r\n /** The status of this request. */\r\n public get status() { return this._status; }\r\n\r\n /** Extended status information for this request (if available). */\r\n public get extendedStatus() { return this._extendedStatus; }\r\n\r\n /** The last submission for this request. */\r\n public get lastSubmitted() { return this._lastSubmitted; }\r\n\r\n /** The last status update received for this request. */\r\n public get lastUpdated() { return this._lastUpdated; }\r\n\r\n /** The target interval (in milliseconds) between submission attempts for this request. */\r\n public retryInterval: number;\r\n\r\n /** Whether a connection is active for this request. */\r\n public get connecting() { return this._connecting; }\r\n\r\n /** Whether this request is pending. */\r\n public get pending(): boolean {\r\n switch (this.status) {\r\n case RpcRequestStatus.Submitted:\r\n case RpcRequestStatus.Pending: {\r\n return true;\r\n }\r\n\r\n default: {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n /** The elapsed time for this request. */\r\n public get elapsed(): number {\r\n return this._lastUpdated - this._created;\r\n }\r\n\r\n /** A protocol-specific path identifier for this request. */\r\n public path: string;\r\n\r\n /** A protocol-specific method identifier for this request. */\r\n public method: string;\r\n\r\n /** An attempt-specific value for when to next retry this request. */\r\n public get retryAfter() { return this._retryAfter; }\r\n\r\n /** Finds the first parameter of a given structural type if present. */\r\n public findParameterOfType<T>(requiredProperties: { [index: string]: string }): T | undefined {\r\n for (const param of this.parameters) {\r\n if (typeof (param) === \"object\" && param !== null) {\r\n for (const prop of Object.getOwnPropertyNames(requiredProperties)) {\r\n if (param.hasOwnProperty(prop) && typeof (param[prop]) === requiredProperties[prop]) {\r\n return param;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /** Finds the first IModelRpcProps parameter if present. */\r\n public findTokenPropsParameter(): IModelRpcProps | undefined {\r\n return this.findParameterOfType({ iModelId: \"string\" });\r\n\r\n }\r\n\r\n /** The raw implementation response for this request. */\r\n public get rawResponse(): Promise<Response | undefined> {\r\n this._hasRawListener = true;\r\n return this._rawPromise;\r\n }\r\n\r\n /** Constructs an RPC request. */\r\n public constructor(client: RpcInterface, operation: string, parameters: any[]) {\r\n this._created = new Date().getTime();\r\n this.path = \"\";\r\n this.method = \"\";\r\n this.client = client;\r\n this.protocol = client.configuration.protocol;\r\n this.operation = RpcOperation.lookup(client.constructor as any, operation);\r\n this.parameters = parameters;\r\n this.retryInterval = this.operation.policy.retryInterval(client.configuration);\r\n this.response = new Promise((resolve, reject) => { this._resolve = resolve; this._reject = reject; });\r\n this._rawPromise = new Promise((resolve, reject) => { this._resolveRaw = resolve; this._rejectRaw = reject; });\r\n this.id = RpcConfiguration.requestContext.getId(this) || Guid.createValue();\r\n this.setStatus(RpcRequestStatus.Created);\r\n this.operation.policy.requestCallback(this);\r\n }\r\n\r\n /** Override to send the request. */\r\n protected abstract send(): Promise<number>;\r\n\r\n /** Override to load response value. */\r\n protected abstract load(): Promise<RpcSerializedValue>;\r\n\r\n /** Override to set request header values. */\r\n protected abstract setHeader(name: string, value: string): void;\r\n\r\n /** Sets the last updated time for the request. */\r\n protected setLastUpdatedTime() {\r\n this._lastUpdated = new Date().getTime();\r\n }\r\n\r\n /** Override to describe available headers based on a protocol-specific criteria (such as a CORS whitelist). */\r\n protected isHeaderAvailable(_name: string): boolean {\r\n return true;\r\n }\r\n\r\n protected computeRetryAfter(attempts: number) {\r\n return (((Math.pow(2, attempts) - 1) / 2) * 500) + 500;\r\n }\r\n\r\n protected recordTransientFault() {\r\n ++this._transientFaults;\r\n }\r\n\r\n protected resetTransientFaultCount() {\r\n this._transientFaults = 0;\r\n }\r\n\r\n protected supportsStatusCategory() {\r\n if (!this.protocol.supportsStatusCategory) {\r\n return false;\r\n }\r\n\r\n return RpcProtocol.protocolVersion >= RpcProtocolVersion.IntroducedStatusCategory && this.responseProtocolVersion >= RpcProtocolVersion.IntroducedStatusCategory;\r\n }\r\n\r\n /* @internal */\r\n public cancel() {\r\n if (typeof (this._sending) === \"undefined\") {\r\n return;\r\n }\r\n\r\n this._sending.cancel();\r\n this._sending = undefined;\r\n\r\n this._connecting = false;\r\n RpcRequest._activeRequests.delete(this.id);\r\n this.setStatus(RpcRequestStatus.Cancelled);\r\n }\r\n\r\n /* @internal */\r\n public async submit(): Promise<void> {\r\n if (!this._active)\r\n return;\r\n\r\n this._lastSubmitted = new Date().getTime();\r\n this._retryAfter = null;\r\n ++this._attempts;\r\n\r\n if (this.status === RpcRequestStatus.Created || this.status === RpcRequestStatus.NotFound || this.status === RpcRequestStatus.Cancelled) {\r\n this.setStatus(RpcRequestStatus.Submitted);\r\n }\r\n\r\n try {\r\n this._connecting = true;\r\n RpcRequest._activeRequests.set(this.id, this);\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.RequestCreated, this);\r\n this._sending = new Cancellable(this.setHeaders().then(async () => this.send()));\r\n this.operation.policy.sentCallback(this);\r\n\r\n const response = await this._sending.promise;\r\n if (typeof (response) === \"undefined\") {\r\n return;\r\n }\r\n\r\n this._sending = undefined;\r\n\r\n const status = this.protocol.getStatus(response);\r\n\r\n if (this._hasRawListener && status === RpcRequestStatus.Resolved && typeof (this._response) !== \"undefined\") {\r\n this._connecting = false;\r\n RpcRequest._activeRequests.delete(this.id);\r\n this.resolveRaw();\r\n } else {\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.ResponseLoading, this);\r\n\r\n if (status === RpcRequestStatus.Unknown) {\r\n this._connecting = false;\r\n RpcRequest._activeRequests.delete(this.id);\r\n this.handleUnknownResponse(response);\r\n return;\r\n }\r\n\r\n const value = await this.load();\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.ResponseLoaded, this);\r\n RpcRequest._activeRequests.delete(this.id);\r\n this._connecting = false;\r\n this.handleResponse(response, value);\r\n }\r\n } catch (err) {\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.ConnectionErrorReceived, this, err);\r\n RpcRequest._activeRequests.delete(this.id);\r\n this._connecting = false;\r\n this.reject(err);\r\n }\r\n }\r\n\r\n protected handleUnknownResponse(code: number) {\r\n this.reject(new IModelError(BentleyStatus.ERROR, `Unknown response ${code}.`));\r\n }\r\n\r\n private handleResponse(code: number, value: RpcSerializedValue) {\r\n const protocolStatus = this.protocol.getStatus(code);\r\n const status = this.transformResponseStatus(protocolStatus, value);\r\n\r\n if (RpcRequestStatus.isTransientError(status)) {\r\n return this.handleTransientError(status);\r\n }\r\n\r\n switch (status) {\r\n case RpcRequestStatus.Resolved: {\r\n return this.handleResolved(value);\r\n }\r\n\r\n case RpcRequestStatus.Rejected: {\r\n return this.handleRejected(value);\r\n }\r\n\r\n case RpcRequestStatus.Pending: {\r\n return this.setPending(status, value.objects);\r\n }\r\n\r\n case RpcRequestStatus.NotFound: {\r\n return this.handleNotFound(status, value);\r\n }\r\n\r\n case RpcRequestStatus.NoContent: {\r\n return this.handleNoContent();\r\n }\r\n }\r\n }\r\n\r\n private transformResponseStatus(protocolStatus: RpcRequestStatus, value: RpcSerializedValue): RpcRequestStatus {\r\n if (!this.supportsStatusCategory()) {\r\n return protocolStatus;\r\n }\r\n\r\n let status = protocolStatus;\r\n\r\n if (protocolStatus === RpcRequestStatus.Pending) {\r\n status = RpcRequestStatus.Rejected;\r\n } else if (protocolStatus === RpcRequestStatus.NotFound) {\r\n status = RpcRequestStatus.Rejected;\r\n } else if (protocolStatus === RpcRequestStatus.Unknown) {\r\n status = RpcRequestStatus.Rejected;\r\n }\r\n\r\n if (value.objects.indexOf(\"iTwinRpcCoreResponse\") !== -1 && value.objects.indexOf(\"managedStatus\") !== -1) {\r\n const managedStatus: RpcManagedStatus = JSON.parse(value.objects);\r\n value.objects = managedStatus.responseValue;\r\n\r\n if (managedStatus.managedStatus === \"pending\") {\r\n status = RpcRequestStatus.Pending;\r\n } else if (managedStatus.managedStatus === \"notFound\") {\r\n status = RpcRequestStatus.NotFound;\r\n }\r\n }\r\n\r\n return status;\r\n }\r\n\r\n private handleResolved(value: RpcSerializedValue) {\r\n try {\r\n this._raw = value.objects;\r\n const result: TResponse = RpcMarshaling.deserialize(this.protocol, value);\r\n\r\n if (ArrayBuffer.isView(result)) {\r\n this._raw = result.buffer;\r\n }\r\n\r\n return this.resolve(result);\r\n } catch (err) {\r\n return this.reject(err);\r\n }\r\n }\r\n\r\n private handleRejected(value: RpcSerializedValue) {\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.BackendErrorReceived, this);\r\n\r\n try {\r\n const error = RpcMarshaling.deserialize(this.protocol, value);\r\n const hasInfo = error && typeof (error) === \"object\" && error.hasOwnProperty(\"name\") && error.hasOwnProperty(\"message\");\r\n const name = hasInfo ? error.name : \"\";\r\n const message = hasInfo ? error.message : \"\";\r\n const errorNumber = (hasInfo && error.hasOwnProperty(\"errorNumber\")) ? error.errorNumber : BentleyStatus.ERROR;\r\n return this.reject(new BackendError(errorNumber, name, message, () => error));\r\n } catch (err) {\r\n return this.reject(err);\r\n }\r\n }\r\n\r\n private handleNoContent() {\r\n return this.reject(new NoContentError());\r\n }\r\n\r\n private handleNotFound(status: RpcRequestStatus, value: RpcSerializedValue) {\r\n const response = RpcMarshaling.deserialize(this.protocol, value);\r\n this.setStatus(status);\r\n\r\n let resubmitted = false;\r\n RpcRequest.notFoundHandlers.raiseEvent(this, response, () => {\r\n if (resubmitted)\r\n throw new IModelError(BentleyStatus.ERROR, `Already resubmitted using this handler.`);\r\n\r\n resubmitted = true;\r\n this.submit(); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n }, (reason: any) => this.reject(reason));\r\n return;\r\n }\r\n\r\n private resolve(result: TResponse): void {\r\n if (!this._active)\r\n return;\r\n\r\n this._active = false;\r\n this.setLastUpdatedTime();\r\n this._resolve(result);\r\n\r\n if (this._hasRawListener) {\r\n if (typeof (this._raw) === \"undefined\") {\r\n throw new IModelError(BentleyStatus.ERROR, \"Cannot access raw response.\");\r\n }\r\n\r\n this._resolveRaw(new ResponseLike(this._raw));\r\n }\r\n\r\n this.setStatus(RpcRequestStatus.Resolved);\r\n this.dispose();\r\n }\r\n\r\n private resolveRaw() {\r\n if (typeof (this._response) === \"undefined\") {\r\n throw new IModelError(BentleyStatus.ERROR, \"Cannot access raw response.\");\r\n }\r\n\r\n this._active = false;\r\n this.setLastUpdatedTime();\r\n this._resolveRaw(this._response);\r\n this.setStatus(RpcRequestStatus.Resolved);\r\n this.dispose();\r\n }\r\n\r\n protected reject(reason: any): void {\r\n if (!this._active)\r\n return;\r\n\r\n this._active = false;\r\n this.setLastUpdatedTime();\r\n this._reject(reason);\r\n\r\n if (this._hasRawListener) {\r\n this._rejectRaw(reason);\r\n }\r\n\r\n this.setStatus(RpcRequestStatus.Rejected);\r\n this.dispose();\r\n }\r\n\r\n /** @internal */\r\n public dispose(): void {\r\n this.setStatus(RpcRequestStatus.Disposed);\r\n this._raw = undefined;\r\n this._response = undefined;\r\n\r\n const client = this.client as any;\r\n if (client[CURRENT_REQUEST] === this) {\r\n client[CURRENT_REQUEST] = undefined;\r\n }\r\n }\r\n\r\n private setPending(status: RpcRequestStatus.Pending, extendedStatus: string): void {\r\n if (!this._active)\r\n return;\r\n\r\n this.setLastUpdatedTime();\r\n this._extendedStatus = extendedStatus;\r\n this.setStatus(status);\r\n RpcRequest.events.raiseEvent(RpcRequestEvent.PendingUpdateReceived, this);\r\n }\r\n\r\n private handleTransientError(status: RpcRequestStatus) {\r\n if (!this._active)\r\n return;\r\n\r\n this.setLastUpdatedTime();\r\n this._retryAfter = this.computeRetryAfter(this._attempts - 1);\r\n\r\n if (this._transientFaults > this.protocol.configuration.transientFaultLimit) {\r\n this.reject(new IModelError(BentleyStatus.ERROR, `Exceeded transient fault limit.`));\r\n } else {\r\n this.setStatus(status);\r\n RpcRequest.events.raiseEvent(RpcRequestEvent.TransientErrorReceived, this);\r\n }\r\n }\r\n\r\n protected async setHeaders(): Promise<void> {\r\n const versionHeader = this.protocol.protocolVersionHeaderName;\r\n if (versionHeader && RpcProtocol.protocolVersion && this.isHeaderAvailable(versionHeader)) {\r\n this.setHeader(versionHeader, RpcProtocol.protocolVersion.toString());\r\n }\r\n\r\n const headerNames = this.protocol.serializedClientRequestContextHeaderNames;\r\n const headerValues = await RpcConfiguration.requestContext.serialize(this);\r\n\r\n if (headerNames.id)\r\n this.setHeader(headerNames.id, headerValues.id || this.id); // Cannot be empty\r\n\r\n if (headerNames.applicationVersion)\r\n this.setHeader(headerNames.applicationVersion, headerValues.applicationVersion);\r\n\r\n if (headerNames.applicationId)\r\n this.setHeader(headerNames.applicationId, headerValues.applicationId);\r\n\r\n if (headerNames.sessionId)\r\n this.setHeader(headerNames.sessionId, headerValues.sessionId);\r\n\r\n if (headerNames.authorization && headerValues.authorization)\r\n this.setHeader(headerNames.authorization, headerValues.authorization);\r\n\r\n if (headerValues.csrfToken)\r\n this.setHeader(headerValues.csrfToken.headerName, headerValues.csrfToken.headerValue);\r\n }\r\n\r\n private setStatus(status: RpcRequestStatus): void {\r\n if (this._status === status)\r\n return;\r\n\r\n this._status = status;\r\n RpcRequest.events.raiseEvent(RpcRequestEvent.StatusChanged, this);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport const initializeRpcRequest = (() => {\r\n let initialized = false;\r\n\r\n return () => {\r\n if (initialized) {\r\n return;\r\n }\r\n\r\n initialized = true;\r\n\r\n RpcRequest.events.addListener((type, request) => {\r\n if (type !== RpcRequestEvent.StatusChanged)\r\n return;\r\n\r\n switch (request.status) {\r\n case RpcRequestStatus.Submitted: {\r\n aggregateLoad.lastRequest = request.lastSubmitted;\r\n break;\r\n }\r\n\r\n case RpcRequestStatus.Pending:\r\n case RpcRequestStatus.Resolved:\r\n case RpcRequestStatus.Rejected: {\r\n aggregateLoad.lastResponse = request.lastUpdated;\r\n break;\r\n }\r\n }\r\n });\r\n\r\n RpcProtocol.events.addListener((type) => {\r\n const now = new Date().getTime();\r\n\r\n switch (type) {\r\n case RpcProtocolEvent.RequestReceived: {\r\n aggregateLoad.lastRequest = now;\r\n break;\r\n }\r\n\r\n case RpcProtocolEvent.BackendReportedPending:\r\n case RpcProtocolEvent.BackendErrorOccurred:\r\n case RpcProtocolEvent.BackendResponseCreated: {\r\n aggregateLoad.lastResponse = now;\r\n break;\r\n }\r\n }\r\n });\r\n };\r\n})();\r\n"]}
|
|
1
|
+
{"version":3,"file":"RpcRequest.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcRequest.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module RpcInterface\r\n */\r\n\r\nimport { BeEvent, BentleyStatus, Guid } from \"@itwin/core-bentley\";\r\nimport { IModelRpcProps } from \"../../IModel\";\r\nimport { BackendError, IModelError, NoContentError } from \"../../IModelError\";\r\nimport { RpcInterface } from \"../../RpcInterface\";\r\nimport { RpcConfiguration } from \"./RpcConfiguration\";\r\nimport { RpcProtocolEvent, RpcRequestEvent, RpcRequestStatus, RpcResponseCacheControl } from \"./RpcConstants\";\r\nimport { RpcNotFoundResponse } from \"./RpcControl\";\r\nimport { RpcMarshaling, RpcSerializedValue } from \"./RpcMarshaling\";\r\nimport { RpcOperation } from \"./RpcOperation\";\r\nimport { RpcManagedStatus, RpcProtocol, RpcProtocolVersion } from \"./RpcProtocol\";\r\nimport { CURRENT_REQUEST } from \"./RpcRegistry\";\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n// cspell:ignore csrf\r\n\r\nconst aggregateLoad = { lastRequest: 0, lastResponse: 0 };\r\n\r\n/** @internal */\r\nexport class ResponseLike implements Response {\r\n private _data: Promise<any>;\r\n public get body() { return null; }\r\n public async arrayBuffer(): Promise<ArrayBuffer> { return this._data; }\r\n public async blob(): Promise<Blob> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\r\n public async formData(): Promise<FormData> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\r\n public async json(): Promise<any> { return this._data; }\r\n public async text(): Promise<string> { return this._data; }\r\n public get bodyUsed() { return false; }\r\n public get headers(): Headers { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\r\n public get ok(): boolean { return this.status >= 200 && this.status <= 299; }\r\n public get redirected() { return false; }\r\n public get status() { return 200; }\r\n public get statusText() { return \"\"; }\r\n public get trailer(): Promise<Headers> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\r\n public get type(): ResponseType { return \"basic\"; }\r\n public get url() { return \"\"; }\r\n public clone() { return { ...this }; }\r\n\r\n public constructor(data: any) {\r\n this._data = Promise.resolve(data);\r\n }\r\n}\r\n\r\n/** Supplies an IModelRpcProps for an RPC request.\r\n * @internal\r\n */\r\nexport type RpcRequestTokenSupplier_T = (request: RpcRequest) => IModelRpcProps | undefined;\r\n\r\n/** Supplies the initial retry interval for an RPC request.\r\n * @internal\r\n */\r\nexport type RpcRequestInitialRetryIntervalSupplier_T = (configuration: RpcConfiguration) => number;\r\n\r\n/** Notification callback for an RPC request.\r\n * @internal\r\n */\r\nexport type RpcRequestCallback_T = (request: RpcRequest) => void;\r\n\r\n/** Determines if caching is permitted for a RPC response.\r\n * @internal\r\n */\r\nexport type RpcResponseCachingCallback_T = (request: RpcRequest) => RpcResponseCacheControl;\r\n\r\n/** Runtime information related to the operation load of one or more RPC interfaces.\r\n * @internal\r\n */\r\nexport interface RpcOperationsProfile {\r\n readonly lastRequest: number;\r\n readonly lastResponse: number;\r\n}\r\n\r\n/** Handles RPC request events.\r\n * @internal\r\n */\r\nexport type RpcRequestEventHandler = (type: RpcRequestEvent, request: RpcRequest) => void;\r\n\r\n/** Resolves \"not found\" responses for RPC requests.\r\n * @internal\r\n */\r\nexport type RpcRequestNotFoundHandler = (request: RpcRequest, response: RpcNotFoundResponse, resubmit: () => void, reject: (reason: any) => void) => void;\r\n\r\nclass Cancellable<T> {\r\n public promise: Promise<T | undefined>;\r\n public cancel() { }\r\n\r\n public constructor(task: Promise<T>) {\r\n this.promise = new Promise((resolve, reject) => {\r\n // eslint-disable-next-line @typescript-eslint/unbound-method\r\n this.cancel = () => resolve(undefined);\r\n task.then(resolve, reject);\r\n });\r\n }\r\n}\r\n\r\n/** A RPC operation request.\r\n * @internal\r\n */\r\nexport abstract class RpcRequest<TResponse = any> {\r\n private static _activeRequests: Map<string, RpcRequest> = new Map();\r\n private _resolve: (value?: TResponse | PromiseLike<TResponse> | undefined) => void = () => undefined;\r\n protected _resolveRaw: (value?: Response | PromiseLike<Response> | undefined) => void = () => undefined;\r\n private _reject: (reason?: any) => void = () => undefined;\r\n private _rejectRaw: (reason?: any) => void = () => undefined;\r\n private _created: number = 0;\r\n private _lastSubmitted: number = 0;\r\n private _lastUpdated: number = 0;\r\n private _status: RpcRequestStatus = RpcRequestStatus.Unknown;\r\n private _extendedStatus: string = \"\";\r\n private _connecting: boolean = false;\r\n private _active: boolean = true;\r\n private _hasRawListener = false;\r\n private _raw: ArrayBuffer | string | undefined = undefined;\r\n private _sending?: Cancellable<number>;\r\n private _attempts = 0;\r\n private _retryAfter: number | null = null;\r\n private _transientFaults = 0;\r\n protected _response: Response | undefined = undefined;\r\n protected _rawPromise: Promise<Response | undefined>;\r\n protected responseProtocolVersion = 0;\r\n\r\n /** All RPC requests that are currently in flight. */\r\n public static get activeRequests(): ReadonlyMap<string, RpcRequest> { return this._activeRequests; }\r\n\r\n /** Events raised by RpcRequest. See [[RpcRequestEvent]] */\r\n public static readonly events: BeEvent<RpcRequestEventHandler> = new BeEvent();\r\n\r\n /** Resolvers for \"not found\" requests. See [[RpcRequestNotFoundHandler]] */\r\n public static readonly notFoundHandlers: BeEvent<RpcRequestNotFoundHandler> = new BeEvent();\r\n\r\n /** The aggregate operations profile of all active RPC interfaces. */\r\n public static get aggregateLoad(): RpcOperationsProfile { return aggregateLoad; }\r\n\r\n /**\r\n * The request for the current RPC operation.\r\n * @note The return value of this function is only reliable if program control was received from a RPC interface class member function that directly returns the result of calling RpcInterface.forward.\r\n */\r\n public static current(context: RpcInterface): RpcRequest {\r\n return (context as any)[CURRENT_REQUEST];\r\n }\r\n\r\n /** The unique identifier of this request. */\r\n public readonly id: string;\r\n\r\n /** The operation for this request. */\r\n public readonly operation: RpcOperation;\r\n\r\n /** The parameters for this request. */\r\n public parameters: any[];\r\n\r\n /** The RPC client instance for this request. */\r\n public readonly client: RpcInterface;\r\n\r\n /** Convenience access to the protocol of this request. */\r\n public readonly protocol: RpcProtocol;\r\n\r\n /** The implementation response for this request. */\r\n public readonly response: Promise<TResponse | undefined>;\r\n\r\n /** The status of this request. */\r\n public get status() { return this._status; }\r\n\r\n /** Extended status information for this request (if available). */\r\n public get extendedStatus() { return this._extendedStatus; }\r\n\r\n /** The last submission for this request. */\r\n public get lastSubmitted() { return this._lastSubmitted; }\r\n\r\n /** The last status update received for this request. */\r\n public get lastUpdated() { return this._lastUpdated; }\r\n\r\n /** The target interval (in milliseconds) between submission attempts for this request. */\r\n public retryInterval: number;\r\n\r\n /** Whether a connection is active for this request. */\r\n public get connecting() { return this._connecting; }\r\n\r\n /** Whether this request is pending. */\r\n public get pending(): boolean {\r\n switch (this.status) {\r\n case RpcRequestStatus.Submitted:\r\n case RpcRequestStatus.Pending: {\r\n return true;\r\n }\r\n\r\n default: {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n /** The elapsed time for this request. */\r\n public get elapsed(): number {\r\n return this._lastUpdated - this._created;\r\n }\r\n\r\n /** A protocol-specific path identifier for this request. */\r\n public path: string;\r\n\r\n /** A protocol-specific method identifier for this request. */\r\n public method: string;\r\n\r\n /** An attempt-specific value for when to next retry this request. */\r\n public get retryAfter() { return this._retryAfter; }\r\n\r\n /** Finds the first parameter of a given structural type if present. */\r\n public findParameterOfType<T>(requiredProperties: { [index: string]: string }): T | undefined {\r\n for (const param of this.parameters) {\r\n if (typeof (param) === \"object\" && param !== null) {\r\n for (const prop of Object.getOwnPropertyNames(requiredProperties)) {\r\n if (param.hasOwnProperty(prop) && typeof (param[prop]) === requiredProperties[prop]) {\r\n return param;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /** Finds the first IModelRpcProps parameter if present. */\r\n public findTokenPropsParameter(): IModelRpcProps | undefined {\r\n return this.findParameterOfType({ iModelId: \"string\" });\r\n\r\n }\r\n\r\n /** The raw implementation response for this request. */\r\n public get rawResponse(): Promise<Response | undefined> {\r\n this._hasRawListener = true;\r\n return this._rawPromise;\r\n }\r\n\r\n /** Constructs an RPC request. */\r\n public constructor(client: RpcInterface, operation: string, parameters: any[]) {\r\n this._created = new Date().getTime();\r\n this.path = \"\";\r\n this.method = \"\";\r\n this.client = client;\r\n this.protocol = client.configuration.protocol;\r\n this.operation = RpcOperation.lookup(client.constructor as any, operation);\r\n this.parameters = parameters;\r\n this.retryInterval = this.operation.policy.retryInterval(client.configuration);\r\n this.response = new Promise((resolve, reject) => { this._resolve = resolve; this._reject = reject; });\r\n this._rawPromise = new Promise((resolve, reject) => { this._resolveRaw = resolve; this._rejectRaw = reject; });\r\n this.id = RpcConfiguration.requestContext.getId(this) || Guid.createValue();\r\n this.setStatus(RpcRequestStatus.Created);\r\n this.operation.policy.requestCallback(this);\r\n }\r\n\r\n /** Override to send the request. */\r\n protected abstract send(): Promise<number>;\r\n\r\n /** Override to load response value. */\r\n protected abstract load(): Promise<RpcSerializedValue>;\r\n\r\n /** Override to set request header values. */\r\n protected abstract setHeader(name: string, value: string): void;\r\n\r\n /** Sets the last updated time for the request. */\r\n protected setLastUpdatedTime() {\r\n this._lastUpdated = new Date().getTime();\r\n }\r\n\r\n /** Override to describe available headers based on a protocol-specific criteria (such as a CORS whitelist). */\r\n protected isHeaderAvailable(_name: string): boolean {\r\n return true;\r\n }\r\n\r\n protected computeRetryAfter(attempts: number) {\r\n return (((Math.pow(2, attempts) - 1) / 2) * 500) + 500;\r\n }\r\n\r\n protected recordTransientFault() {\r\n ++this._transientFaults;\r\n }\r\n\r\n protected resetTransientFaultCount() {\r\n this._transientFaults = 0;\r\n }\r\n\r\n protected supportsStatusCategory() {\r\n if (!this.protocol.supportsStatusCategory) {\r\n return false;\r\n }\r\n\r\n return RpcProtocol.protocolVersion >= RpcProtocolVersion.IntroducedStatusCategory && this.responseProtocolVersion >= RpcProtocolVersion.IntroducedStatusCategory;\r\n }\r\n\r\n /* @internal */\r\n public cancel() {\r\n if (typeof (this._sending) === \"undefined\") {\r\n return;\r\n }\r\n\r\n this._sending.cancel();\r\n this._sending = undefined;\r\n\r\n this._connecting = false;\r\n RpcRequest._activeRequests.delete(this.id);\r\n this.setStatus(RpcRequestStatus.Cancelled);\r\n }\r\n\r\n /* @internal */\r\n public async submit(): Promise<void> {\r\n if (!this._active)\r\n return;\r\n\r\n this._lastSubmitted = new Date().getTime();\r\n this._retryAfter = null;\r\n ++this._attempts;\r\n\r\n if (this.status === RpcRequestStatus.Created || this.status === RpcRequestStatus.NotFound || this.status === RpcRequestStatus.Cancelled) {\r\n this.setStatus(RpcRequestStatus.Submitted);\r\n }\r\n\r\n try {\r\n this._connecting = true;\r\n RpcRequest._activeRequests.set(this.id, this);\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.RequestCreated, this);\r\n await this.protocol.initialize(this.operation.policy.token(this));\r\n this._sending = new Cancellable(this.setHeaders().then(async () => this.send()));\r\n this.operation.policy.sentCallback(this);\r\n\r\n const response = await this._sending.promise;\r\n if (typeof (response) === \"undefined\") {\r\n return;\r\n }\r\n\r\n this._sending = undefined;\r\n\r\n const status = this.protocol.getStatus(response);\r\n\r\n if (this._hasRawListener && status === RpcRequestStatus.Resolved && typeof (this._response) !== \"undefined\") {\r\n this._connecting = false;\r\n RpcRequest._activeRequests.delete(this.id);\r\n this.resolveRaw();\r\n } else {\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.ResponseLoading, this);\r\n\r\n if (status === RpcRequestStatus.Unknown) {\r\n this._connecting = false;\r\n RpcRequest._activeRequests.delete(this.id);\r\n this.handleUnknownResponse(response);\r\n return;\r\n }\r\n\r\n const value = await this.load();\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.ResponseLoaded, this);\r\n RpcRequest._activeRequests.delete(this.id);\r\n this._connecting = false;\r\n this.handleResponse(response, value);\r\n }\r\n } catch (err) {\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.ConnectionErrorReceived, this, err);\r\n RpcRequest._activeRequests.delete(this.id);\r\n this._connecting = false;\r\n this.reject(err);\r\n }\r\n }\r\n\r\n protected handleUnknownResponse(code: number) {\r\n this.reject(new IModelError(BentleyStatus.ERROR, `Unknown response ${code}.`));\r\n }\r\n\r\n private handleResponse(code: number, value: RpcSerializedValue) {\r\n const protocolStatus = this.protocol.getStatus(code);\r\n const status = this.transformResponseStatus(protocolStatus, value);\r\n\r\n if (RpcRequestStatus.isTransientError(status)) {\r\n return this.handleTransientError(status);\r\n }\r\n\r\n switch (status) {\r\n case RpcRequestStatus.Resolved: {\r\n return this.handleResolved(value);\r\n }\r\n\r\n case RpcRequestStatus.Rejected: {\r\n return this.handleRejected(value);\r\n }\r\n\r\n case RpcRequestStatus.Pending: {\r\n return this.setPending(status, value.objects);\r\n }\r\n\r\n case RpcRequestStatus.NotFound: {\r\n return this.handleNotFound(status, value);\r\n }\r\n\r\n case RpcRequestStatus.NoContent: {\r\n return this.handleNoContent();\r\n }\r\n }\r\n }\r\n\r\n private transformResponseStatus(protocolStatus: RpcRequestStatus, value: RpcSerializedValue): RpcRequestStatus {\r\n if (!this.supportsStatusCategory()) {\r\n return protocolStatus;\r\n }\r\n\r\n let status = protocolStatus;\r\n\r\n if (protocolStatus === RpcRequestStatus.Pending) {\r\n status = RpcRequestStatus.Rejected;\r\n } else if (protocolStatus === RpcRequestStatus.NotFound) {\r\n status = RpcRequestStatus.Rejected;\r\n } else if (protocolStatus === RpcRequestStatus.Unknown) {\r\n status = RpcRequestStatus.Rejected;\r\n }\r\n\r\n if (value.objects.indexOf(\"iTwinRpcCoreResponse\") !== -1 && value.objects.indexOf(\"managedStatus\") !== -1) {\r\n const managedStatus: RpcManagedStatus = JSON.parse(value.objects);\r\n value.objects = managedStatus.responseValue;\r\n\r\n if (managedStatus.managedStatus === \"pending\") {\r\n status = RpcRequestStatus.Pending;\r\n } else if (managedStatus.managedStatus === \"notFound\") {\r\n status = RpcRequestStatus.NotFound;\r\n }\r\n }\r\n\r\n return status;\r\n }\r\n\r\n private handleResolved(value: RpcSerializedValue) {\r\n try {\r\n this._raw = value.objects;\r\n const result: TResponse = RpcMarshaling.deserialize(this.protocol, value);\r\n\r\n if (ArrayBuffer.isView(result)) {\r\n this._raw = result.buffer;\r\n }\r\n\r\n return this.resolve(result);\r\n } catch (err) {\r\n return this.reject(err);\r\n }\r\n }\r\n\r\n private handleRejected(value: RpcSerializedValue) {\r\n this.protocol.events.raiseEvent(RpcProtocolEvent.BackendErrorReceived, this);\r\n\r\n try {\r\n const error = RpcMarshaling.deserialize(this.protocol, value);\r\n const hasInfo = error && typeof (error) === \"object\" && error.hasOwnProperty(\"name\") && error.hasOwnProperty(\"message\");\r\n const name = hasInfo ? error.name : \"\";\r\n const message = hasInfo ? error.message : \"\";\r\n const errorNumber = (hasInfo && error.hasOwnProperty(\"errorNumber\")) ? error.errorNumber : BentleyStatus.ERROR;\r\n return this.reject(new BackendError(errorNumber, name, message, () => error));\r\n } catch (err) {\r\n return this.reject(err);\r\n }\r\n }\r\n\r\n private handleNoContent() {\r\n return this.reject(new NoContentError());\r\n }\r\n\r\n private handleNotFound(status: RpcRequestStatus, value: RpcSerializedValue) {\r\n const response = RpcMarshaling.deserialize(this.protocol, value);\r\n this.setStatus(status);\r\n\r\n let resubmitted = false;\r\n RpcRequest.notFoundHandlers.raiseEvent(this, response, () => {\r\n if (resubmitted)\r\n throw new IModelError(BentleyStatus.ERROR, `Already resubmitted using this handler.`);\r\n\r\n resubmitted = true;\r\n this.submit(); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n }, (reason: any) => this.reject(reason));\r\n return;\r\n }\r\n\r\n private resolve(result: TResponse): void {\r\n if (!this._active)\r\n return;\r\n\r\n this._active = false;\r\n this.setLastUpdatedTime();\r\n this._resolve(result);\r\n\r\n if (this._hasRawListener) {\r\n if (typeof (this._raw) === \"undefined\") {\r\n throw new IModelError(BentleyStatus.ERROR, \"Cannot access raw response.\");\r\n }\r\n\r\n this._resolveRaw(new ResponseLike(this._raw));\r\n }\r\n\r\n this.setStatus(RpcRequestStatus.Resolved);\r\n this.dispose();\r\n }\r\n\r\n private resolveRaw() {\r\n if (typeof (this._response) === \"undefined\") {\r\n throw new IModelError(BentleyStatus.ERROR, \"Cannot access raw response.\");\r\n }\r\n\r\n this._active = false;\r\n this.setLastUpdatedTime();\r\n this._resolveRaw(this._response);\r\n this.setStatus(RpcRequestStatus.Resolved);\r\n this.dispose();\r\n }\r\n\r\n protected reject(reason: any): void {\r\n if (!this._active)\r\n return;\r\n\r\n this._active = false;\r\n this.setLastUpdatedTime();\r\n this._reject(reason);\r\n\r\n if (this._hasRawListener) {\r\n this._rejectRaw(reason);\r\n }\r\n\r\n this.setStatus(RpcRequestStatus.Rejected);\r\n this.dispose();\r\n }\r\n\r\n /** @internal */\r\n public dispose(): void {\r\n this.setStatus(RpcRequestStatus.Disposed);\r\n this._raw = undefined;\r\n this._response = undefined;\r\n\r\n const client = this.client as any;\r\n if (client[CURRENT_REQUEST] === this) {\r\n client[CURRENT_REQUEST] = undefined;\r\n }\r\n }\r\n\r\n private setPending(status: RpcRequestStatus.Pending, extendedStatus: string): void {\r\n if (!this._active)\r\n return;\r\n\r\n this.setLastUpdatedTime();\r\n this._extendedStatus = extendedStatus;\r\n this.setStatus(status);\r\n RpcRequest.events.raiseEvent(RpcRequestEvent.PendingUpdateReceived, this);\r\n }\r\n\r\n private handleTransientError(status: RpcRequestStatus) {\r\n if (!this._active)\r\n return;\r\n\r\n this.setLastUpdatedTime();\r\n this._retryAfter = this.computeRetryAfter(this._attempts - 1);\r\n\r\n if (this._transientFaults > this.protocol.configuration.transientFaultLimit) {\r\n this.reject(new IModelError(BentleyStatus.ERROR, `Exceeded transient fault limit.`));\r\n } else {\r\n this.setStatus(status);\r\n RpcRequest.events.raiseEvent(RpcRequestEvent.TransientErrorReceived, this);\r\n }\r\n }\r\n\r\n protected async setHeaders(): Promise<void> {\r\n const versionHeader = this.protocol.protocolVersionHeaderName;\r\n if (versionHeader && RpcProtocol.protocolVersion && this.isHeaderAvailable(versionHeader)) {\r\n this.setHeader(versionHeader, RpcProtocol.protocolVersion.toString());\r\n }\r\n\r\n const headerNames = this.protocol.serializedClientRequestContextHeaderNames;\r\n const headerValues = await RpcConfiguration.requestContext.serialize(this);\r\n\r\n if (headerNames.id)\r\n this.setHeader(headerNames.id, headerValues.id || this.id); // Cannot be empty\r\n\r\n if (headerNames.applicationVersion)\r\n this.setHeader(headerNames.applicationVersion, headerValues.applicationVersion);\r\n\r\n if (headerNames.applicationId)\r\n this.setHeader(headerNames.applicationId, headerValues.applicationId);\r\n\r\n if (headerNames.sessionId)\r\n this.setHeader(headerNames.sessionId, headerValues.sessionId);\r\n\r\n if (headerNames.authorization && headerValues.authorization)\r\n this.setHeader(headerNames.authorization, headerValues.authorization);\r\n\r\n if (headerValues.csrfToken)\r\n this.setHeader(headerValues.csrfToken.headerName, headerValues.csrfToken.headerValue);\r\n }\r\n\r\n private setStatus(status: RpcRequestStatus): void {\r\n if (this._status === status)\r\n return;\r\n\r\n this._status = status;\r\n RpcRequest.events.raiseEvent(RpcRequestEvent.StatusChanged, this);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport const initializeRpcRequest = (() => {\r\n let initialized = false;\r\n\r\n return () => {\r\n if (initialized) {\r\n return;\r\n }\r\n\r\n initialized = true;\r\n\r\n RpcRequest.events.addListener((type, request) => {\r\n if (type !== RpcRequestEvent.StatusChanged)\r\n return;\r\n\r\n switch (request.status) {\r\n case RpcRequestStatus.Submitted: {\r\n aggregateLoad.lastRequest = request.lastSubmitted;\r\n break;\r\n }\r\n\r\n case RpcRequestStatus.Pending:\r\n case RpcRequestStatus.Resolved:\r\n case RpcRequestStatus.Rejected: {\r\n aggregateLoad.lastResponse = request.lastUpdated;\r\n break;\r\n }\r\n }\r\n });\r\n\r\n RpcProtocol.events.addListener((type) => {\r\n const now = new Date().getTime();\r\n\r\n switch (type) {\r\n case RpcProtocolEvent.RequestReceived: {\r\n aggregateLoad.lastRequest = now;\r\n break;\r\n }\r\n\r\n case RpcProtocolEvent.BackendReportedPending:\r\n case RpcProtocolEvent.BackendErrorOccurred:\r\n case RpcProtocolEvent.BackendResponseCreated: {\r\n aggregateLoad.lastResponse = now;\r\n break;\r\n }\r\n }\r\n });\r\n };\r\n})();\r\n"]}
|
|
@@ -9,6 +9,7 @@ import { RpcOperation } from "../core/RpcOperation";
|
|
|
9
9
|
import { RpcProtocol } from "../core/RpcProtocol";
|
|
10
10
|
import { OpenAPIInfo, OpenAPIParameter, RpcOpenAPIDescription } from "./OpenAPI";
|
|
11
11
|
import { WebAppRpcRequest } from "./WebAppRpcRequest";
|
|
12
|
+
import { IModelRpcProps } from "../../IModel";
|
|
12
13
|
/** An HTTP server request object.
|
|
13
14
|
* @public
|
|
14
15
|
*/
|
|
@@ -56,7 +57,7 @@ export declare abstract class WebAppRpcProtocol extends RpcProtocol {
|
|
|
56
57
|
/** @internal */
|
|
57
58
|
allowedHeaders: Set<string>;
|
|
58
59
|
/** @internal */
|
|
59
|
-
initialize(): Promise<void>;
|
|
60
|
+
initialize(token?: IModelRpcProps): Promise<void>;
|
|
60
61
|
/** Convenience handler for an RPC operation get request for an HTTP server. */
|
|
61
62
|
handleOperationGetRequest(req: HttpServerRequest, res: HttpServerResponse): Promise<void>;
|
|
62
63
|
/** Convenience handler for an RPC operation post request for an HTTP server. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebAppRpcProtocol.d.ts","sourceRoot":"","sources":["../../../../src/rpc/web/WebAppRpcProtocol.ts"],"names":[],"mappings":"AAIA;;GAEG;;AAGH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAqB,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"WebAppRpcProtocol.d.ts","sourceRoot":"","sources":["../../../../src/rpc/web/WebAppRpcProtocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,8 +17,8 @@ import { RpcInterface } from "../../RpcInterface";
|
|
|
17
17
|
import { RpcManager } from "../../RpcManager";
|
|
18
18
|
import { RpcRoutingToken } from "../core/RpcRoutingToken";
|
|
19
19
|
class InitializeInterface extends RpcInterface {
|
|
20
|
-
async initialize() { return this.forward(arguments); }
|
|
21
|
-
static createRequest(protocol) {
|
|
20
|
+
async initialize(_token) { return this.forward(arguments); }
|
|
21
|
+
static createRequest(protocol, token) {
|
|
22
22
|
const routing = RpcRoutingToken.generate();
|
|
23
23
|
const config = class extends RpcConfiguration {
|
|
24
24
|
constructor() {
|
|
@@ -31,7 +31,7 @@ class InitializeInterface extends RpcInterface {
|
|
|
31
31
|
const instance = RpcConfiguration.obtain(config);
|
|
32
32
|
RpcConfiguration.initializeInterfaces(instance);
|
|
33
33
|
const client = RpcManager.getClientForInterface(InitializeInterface, routing);
|
|
34
|
-
return new (protocol.requestType)(client, "initialize", []);
|
|
34
|
+
return new (protocol.requestType)(client, "initialize", [token]);
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
InitializeInterface.interfaceName = "InitializeInterface";
|
|
@@ -54,13 +54,13 @@ export class WebAppRpcProtocol extends RpcProtocol {
|
|
|
54
54
|
this.events.addListener(WebAppRpcLogging.logProtocolEvent);
|
|
55
55
|
}
|
|
56
56
|
/** @internal */
|
|
57
|
-
async initialize() {
|
|
57
|
+
async initialize(token) {
|
|
58
58
|
if (this._initialized) {
|
|
59
59
|
return this._initialized;
|
|
60
60
|
}
|
|
61
61
|
return this._initialized = new Promise(async (resolve) => {
|
|
62
62
|
try {
|
|
63
|
-
const request = InitializeInterface.createRequest(this);
|
|
63
|
+
const request = InitializeInterface.createRequest(this, token);
|
|
64
64
|
const response = await request.preflight();
|
|
65
65
|
if (response && response.ok) {
|
|
66
66
|
(response.headers.get("Access-Control-Allow-Headers") || "").split(",").forEach((v) => this.allowedHeaders.add(v.trim()));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebAppRpcProtocol.js","sourceRoot":"","sources":["../../../../src/rpc/web/WebAppRpcProtocol.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module RpcInterface\r\n */\r\n\r\nimport { BentleyError, Logger } from \"@itwin/core-bentley\";\r\nimport { Readable, Writable } from \"stream\";\r\nimport { RpcConfiguration } from \"../core/RpcConfiguration\";\r\nimport { RpcContentType, RpcRequestStatus, WEB_RPC_CONSTANTS } from \"../core/RpcConstants\";\r\nimport { RpcOperation } from \"../core/RpcOperation\";\r\nimport { RpcProtocol } from \"../core/RpcProtocol\";\r\nimport { OpenAPIInfo, OpenAPIParameter, RpcOpenAPIDescription } from \"./OpenAPI\";\r\nimport { WebAppRpcLogging } from \"./WebAppRpcLogging\";\r\nimport { WebAppRpcRequest } from \"./WebAppRpcRequest\";\r\nimport { CommonLoggerCategory } from \"../../CommonLoggerCategory\";\r\nimport { RpcInterface } from \"../../RpcInterface\";\r\nimport { RpcManager } from \"../../RpcManager\";\r\nimport { RpcRoutingToken } from \"../core/RpcRoutingToken\";\r\n\r\nclass InitializeInterface extends RpcInterface {\r\n public static readonly interfaceName = \"InitializeInterface\";\r\n public static readonly interfaceVersion = \"1.0.0\";\r\n public async initialize() { return this.forward(arguments); }\r\n\r\n public static createRequest(protocol: WebAppRpcProtocol) {\r\n const routing = RpcRoutingToken.generate();\r\n\r\n const config = class extends RpcConfiguration {\r\n public interfaces = () => [InitializeInterface];\r\n public protocol = protocol;\r\n };\r\n\r\n RpcConfiguration.assignWithRouting(InitializeInterface, routing, config);\r\n\r\n const instance = RpcConfiguration.obtain(config);\r\n RpcConfiguration.initializeInterfaces(instance);\r\n\r\n const client = RpcManager.getClientForInterface(InitializeInterface, routing);\r\n return new (protocol.requestType)(client, \"initialize\", []);\r\n }\r\n}\r\n\r\n/** An HTTP server request object.\r\n * @public\r\n */\r\nexport interface HttpServerRequest extends Readable {\r\n aborted: boolean;\r\n httpVersion: string;\r\n httpVersionMajor: number;\r\n httpVersionMinor: number;\r\n complete: boolean;\r\n connection: any;\r\n headers: { [header: string]: string | string[] | undefined };\r\n rawHeaders: string[];\r\n trailers: { [key: string]: string | undefined };\r\n rawTrailers: string[];\r\n setTimeout(msecs: number, callback: () => void): this;\r\n url?: string;\r\n statusCode?: number;\r\n statusMessage?: string;\r\n socket: any;\r\n destroy(error?: Error): void;\r\n body: string | Buffer;\r\n path: string;\r\n method: string;\r\n ip?: string;\r\n header: (field: string) => string | undefined;\r\n}\r\n\r\n/** An HTTP server response object.\r\n * @public\r\n */\r\nexport interface HttpServerResponse extends Writable {\r\n send(body?: any): HttpServerResponse;\r\n status(code: number): HttpServerResponse;\r\n set(field: string, value: string): void;\r\n}\r\n\r\n/** The HTTP application protocol.\r\n * @internal\r\n */\r\nexport abstract class WebAppRpcProtocol extends RpcProtocol {\r\n public override preserveStreams = true;\r\n\r\n private _initialized: Promise<void> | undefined;\r\n\r\n /** @internal */\r\n public allowedHeaders: Set<string> = new Set();\r\n\r\n /** @internal */\r\n public async initialize() {\r\n if (this._initialized) {\r\n return this._initialized;\r\n }\r\n\r\n return this._initialized = new Promise(async (resolve) => {\r\n try {\r\n const request = InitializeInterface.createRequest(this);\r\n const response = await request.preflight();\r\n if (response && response.ok) {\r\n (response.headers.get(\"Access-Control-Allow-Headers\") || \"\").split(\",\").forEach((v) => this.allowedHeaders.add(v.trim()));\r\n }\r\n } catch (err) {\r\n Logger.logWarning(CommonLoggerCategory.RpcInterfaceFrontend, \"Unable to discover backend capabilities.\", BentleyError.getErrorProps(err));\r\n }\r\n\r\n resolve();\r\n });\r\n }\r\n\r\n /** Convenience handler for an RPC operation get request for an HTTP server. */\r\n public async handleOperationGetRequest(req: HttpServerRequest, res: HttpServerResponse) {\r\n return this.handleOperationPostRequest(req, res);\r\n }\r\n\r\n /** Convenience handler for an RPC operation post request for an HTTP server. */\r\n public async handleOperationPostRequest(req: HttpServerRequest, res: HttpServerResponse) {\r\n const request = await WebAppRpcRequest.parseRequest(this, req);\r\n const fulfillment = await this.fulfill(request);\r\n await WebAppRpcRequest.sendResponse(this, request, fulfillment, req, res);\r\n }\r\n\r\n /** Convenience handler for an OpenAPI description request for an HTTP server. */\r\n public handleOpenApiDescriptionRequest(_req: HttpServerRequest, res: HttpServerResponse) {\r\n const description = JSON.stringify(this.openAPIDescription);\r\n res.send(description);\r\n }\r\n\r\n /** Converts an HTTP content type value to an RPC content type value. */\r\n public static computeContentType(httpType: string | null | undefined): RpcContentType {\r\n if (!httpType)\r\n return RpcContentType.Unknown;\r\n\r\n if (httpType.indexOf(WEB_RPC_CONSTANTS.ANY_TEXT) === 0) {\r\n return RpcContentType.Text;\r\n } else if (httpType.indexOf(WEB_RPC_CONSTANTS.BINARY) === 0) {\r\n return RpcContentType.Binary;\r\n } else if (httpType.indexOf(WEB_RPC_CONSTANTS.MULTIPART) === 0) {\r\n return RpcContentType.Multipart;\r\n } else {\r\n return RpcContentType.Unknown;\r\n }\r\n }\r\n\r\n /** The OpenAPI-compatible info object for this protocol. */\r\n public abstract info: OpenAPIInfo;\r\n\r\n /** An optional prefix for RPC operation URI paths. */\r\n public pathPrefix: string = \"\";\r\n\r\n /** The RPC request class for this protocol. */\r\n public readonly requestType = WebAppRpcRequest;\r\n\r\n /** Supplies the status corresponding to a protocol-specific code value. */\r\n public override getStatus(code: number): RpcRequestStatus {\r\n switch (code) {\r\n case 404: return RpcRequestStatus.NotFound;\r\n case 202: return RpcRequestStatus.Pending;\r\n case 200: return RpcRequestStatus.Resolved;\r\n case 500: return RpcRequestStatus.Rejected;\r\n case 204: return RpcRequestStatus.NoContent;\r\n case 502: return RpcRequestStatus.BadGateway;\r\n case 503: return RpcRequestStatus.ServiceUnavailable;\r\n case 504: return RpcRequestStatus.GatewayTimeout;\r\n default: return RpcRequestStatus.Unknown;\r\n }\r\n }\r\n\r\n /** Supplies the protocol-specific code corresponding to a status value. */\r\n public override getCode(status: RpcRequestStatus): number {\r\n switch (status) {\r\n case RpcRequestStatus.NotFound: return 404;\r\n case RpcRequestStatus.Pending: return 202;\r\n case RpcRequestStatus.Resolved: return 200;\r\n case RpcRequestStatus.Rejected: return 500;\r\n case RpcRequestStatus.NoContent: return 204;\r\n case RpcRequestStatus.BadGateway: return 502;\r\n case RpcRequestStatus.ServiceUnavailable: return 503;\r\n case RpcRequestStatus.GatewayTimeout: return 504;\r\n default: return 501;\r\n }\r\n }\r\n\r\n public override supportsStatusCategory = true;\r\n\r\n /** Whether an HTTP status code indicates a request timeout. */\r\n public isTimeout(code: number): boolean {\r\n return code === 504;\r\n }\r\n\r\n /** An OpenAPI-compatible description of this protocol.\r\n * @internal\r\n */\r\n public get openAPIDescription() { return new RpcOpenAPIDescription(this); }\r\n\r\n /** Returns the OpenAPI-compatible URI path parameters for an RPC operation.\r\n * @internal\r\n */\r\n public abstract supplyPathParametersForOperation(_operation: RpcOperation): OpenAPIParameter[];\r\n\r\n /** Constructs an HTTP protocol. */\r\n public constructor(configuration: RpcConfiguration) {\r\n super(configuration);\r\n this.events.addListener(WebAppRpcLogging.logProtocolEvent);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"WebAppRpcProtocol.js","sourceRoot":"","sources":["../../../../src/rpc/web/WebAppRpcProtocol.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module RpcInterface\r\n */\r\n\r\nimport { BentleyError, Logger } from \"@itwin/core-bentley\";\r\nimport { Readable, Writable } from \"stream\";\r\nimport { RpcConfiguration } from \"../core/RpcConfiguration\";\r\nimport { RpcContentType, RpcRequestStatus, WEB_RPC_CONSTANTS } from \"../core/RpcConstants\";\r\nimport { RpcOperation } from \"../core/RpcOperation\";\r\nimport { RpcProtocol } from \"../core/RpcProtocol\";\r\nimport { OpenAPIInfo, OpenAPIParameter, RpcOpenAPIDescription } from \"./OpenAPI\";\r\nimport { WebAppRpcLogging } from \"./WebAppRpcLogging\";\r\nimport { WebAppRpcRequest } from \"./WebAppRpcRequest\";\r\nimport { CommonLoggerCategory } from \"../../CommonLoggerCategory\";\r\nimport { RpcInterface } from \"../../RpcInterface\";\r\nimport { RpcManager } from \"../../RpcManager\";\r\nimport { RpcRoutingToken } from \"../core/RpcRoutingToken\";\r\nimport { IModelRpcProps } from \"../../IModel\";\r\n\r\nclass InitializeInterface extends RpcInterface {\r\n public static readonly interfaceName = \"InitializeInterface\";\r\n public static readonly interfaceVersion = \"1.0.0\";\r\n public async initialize(_token?: IModelRpcProps) { return this.forward(arguments); }\r\n\r\n public static createRequest(protocol: WebAppRpcProtocol, token?: IModelRpcProps) {\r\n const routing = RpcRoutingToken.generate();\r\n\r\n const config = class extends RpcConfiguration {\r\n public interfaces = () => [InitializeInterface];\r\n public protocol = protocol;\r\n };\r\n\r\n RpcConfiguration.assignWithRouting(InitializeInterface, routing, config);\r\n\r\n const instance = RpcConfiguration.obtain(config);\r\n RpcConfiguration.initializeInterfaces(instance);\r\n\r\n const client = RpcManager.getClientForInterface(InitializeInterface, routing);\r\n return new (protocol.requestType)(client, \"initialize\", [token]);\r\n }\r\n}\r\n\r\n/** An HTTP server request object.\r\n * @public\r\n */\r\nexport interface HttpServerRequest extends Readable {\r\n aborted: boolean;\r\n httpVersion: string;\r\n httpVersionMajor: number;\r\n httpVersionMinor: number;\r\n complete: boolean;\r\n connection: any;\r\n headers: { [header: string]: string | string[] | undefined };\r\n rawHeaders: string[];\r\n trailers: { [key: string]: string | undefined };\r\n rawTrailers: string[];\r\n setTimeout(msecs: number, callback: () => void): this;\r\n url?: string;\r\n statusCode?: number;\r\n statusMessage?: string;\r\n socket: any;\r\n destroy(error?: Error): void;\r\n body: string | Buffer;\r\n path: string;\r\n method: string;\r\n ip?: string;\r\n header: (field: string) => string | undefined;\r\n}\r\n\r\n/** An HTTP server response object.\r\n * @public\r\n */\r\nexport interface HttpServerResponse extends Writable {\r\n send(body?: any): HttpServerResponse;\r\n status(code: number): HttpServerResponse;\r\n set(field: string, value: string): void;\r\n}\r\n\r\n/** The HTTP application protocol.\r\n * @internal\r\n */\r\nexport abstract class WebAppRpcProtocol extends RpcProtocol {\r\n public override preserveStreams = true;\r\n\r\n private _initialized: Promise<void> | undefined;\r\n\r\n /** @internal */\r\n public allowedHeaders: Set<string> = new Set();\r\n\r\n /** @internal */\r\n public override async initialize(token?: IModelRpcProps) {\r\n if (this._initialized) {\r\n return this._initialized;\r\n }\r\n\r\n return this._initialized = new Promise(async (resolve) => {\r\n try {\r\n const request = InitializeInterface.createRequest(this, token);\r\n const response = await request.preflight();\r\n if (response && response.ok) {\r\n (response.headers.get(\"Access-Control-Allow-Headers\") || \"\").split(\",\").forEach((v) => this.allowedHeaders.add(v.trim()));\r\n }\r\n } catch (err) {\r\n Logger.logWarning(CommonLoggerCategory.RpcInterfaceFrontend, \"Unable to discover backend capabilities.\", BentleyError.getErrorProps(err));\r\n }\r\n\r\n resolve();\r\n });\r\n }\r\n\r\n /** Convenience handler for an RPC operation get request for an HTTP server. */\r\n public async handleOperationGetRequest(req: HttpServerRequest, res: HttpServerResponse) {\r\n return this.handleOperationPostRequest(req, res);\r\n }\r\n\r\n /** Convenience handler for an RPC operation post request for an HTTP server. */\r\n public async handleOperationPostRequest(req: HttpServerRequest, res: HttpServerResponse) {\r\n const request = await WebAppRpcRequest.parseRequest(this, req);\r\n const fulfillment = await this.fulfill(request);\r\n await WebAppRpcRequest.sendResponse(this, request, fulfillment, req, res);\r\n }\r\n\r\n /** Convenience handler for an OpenAPI description request for an HTTP server. */\r\n public handleOpenApiDescriptionRequest(_req: HttpServerRequest, res: HttpServerResponse) {\r\n const description = JSON.stringify(this.openAPIDescription);\r\n res.send(description);\r\n }\r\n\r\n /** Converts an HTTP content type value to an RPC content type value. */\r\n public static computeContentType(httpType: string | null | undefined): RpcContentType {\r\n if (!httpType)\r\n return RpcContentType.Unknown;\r\n\r\n if (httpType.indexOf(WEB_RPC_CONSTANTS.ANY_TEXT) === 0) {\r\n return RpcContentType.Text;\r\n } else if (httpType.indexOf(WEB_RPC_CONSTANTS.BINARY) === 0) {\r\n return RpcContentType.Binary;\r\n } else if (httpType.indexOf(WEB_RPC_CONSTANTS.MULTIPART) === 0) {\r\n return RpcContentType.Multipart;\r\n } else {\r\n return RpcContentType.Unknown;\r\n }\r\n }\r\n\r\n /** The OpenAPI-compatible info object for this protocol. */\r\n public abstract info: OpenAPIInfo;\r\n\r\n /** An optional prefix for RPC operation URI paths. */\r\n public pathPrefix: string = \"\";\r\n\r\n /** The RPC request class for this protocol. */\r\n public readonly requestType = WebAppRpcRequest;\r\n\r\n /** Supplies the status corresponding to a protocol-specific code value. */\r\n public override getStatus(code: number): RpcRequestStatus {\r\n switch (code) {\r\n case 404: return RpcRequestStatus.NotFound;\r\n case 202: return RpcRequestStatus.Pending;\r\n case 200: return RpcRequestStatus.Resolved;\r\n case 500: return RpcRequestStatus.Rejected;\r\n case 204: return RpcRequestStatus.NoContent;\r\n case 502: return RpcRequestStatus.BadGateway;\r\n case 503: return RpcRequestStatus.ServiceUnavailable;\r\n case 504: return RpcRequestStatus.GatewayTimeout;\r\n default: return RpcRequestStatus.Unknown;\r\n }\r\n }\r\n\r\n /** Supplies the protocol-specific code corresponding to a status value. */\r\n public override getCode(status: RpcRequestStatus): number {\r\n switch (status) {\r\n case RpcRequestStatus.NotFound: return 404;\r\n case RpcRequestStatus.Pending: return 202;\r\n case RpcRequestStatus.Resolved: return 200;\r\n case RpcRequestStatus.Rejected: return 500;\r\n case RpcRequestStatus.NoContent: return 204;\r\n case RpcRequestStatus.BadGateway: return 502;\r\n case RpcRequestStatus.ServiceUnavailable: return 503;\r\n case RpcRequestStatus.GatewayTimeout: return 504;\r\n default: return 501;\r\n }\r\n }\r\n\r\n public override supportsStatusCategory = true;\r\n\r\n /** Whether an HTTP status code indicates a request timeout. */\r\n public isTimeout(code: number): boolean {\r\n return code === 504;\r\n }\r\n\r\n /** An OpenAPI-compatible description of this protocol.\r\n * @internal\r\n */\r\n public get openAPIDescription() { return new RpcOpenAPIDescription(this); }\r\n\r\n /** Returns the OpenAPI-compatible URI path parameters for an RPC operation.\r\n * @internal\r\n */\r\n public abstract supplyPathParametersForOperation(_operation: RpcOperation): OpenAPIParameter[];\r\n\r\n /** Constructs an HTTP protocol. */\r\n public constructor(configuration: RpcConfiguration) {\r\n super(configuration);\r\n this.events.addListener(WebAppRpcLogging.logProtocolEvent);\r\n }\r\n}\r\n"]}
|
|
@@ -18,6 +18,8 @@ export declare class WebAppRpcRequest extends RpcRequest {
|
|
|
18
18
|
private _pathSuffix;
|
|
19
19
|
private get _headers();
|
|
20
20
|
/** The maximum size permitted for an encoded component in a URL.
|
|
21
|
+
* Note that some backends limit the total cumulative request size. Our current node backends accept requests with a max size of 16 kb.
|
|
22
|
+
* In addition to the url size, an authorization header may also add considerably to the request size.
|
|
21
23
|
* @note This is used for features like encoding the payload of a cacheable request in the URL.
|
|
22
24
|
*/
|
|
23
25
|
static maxUrlComponentSize: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebAppRpcRequest.d.ts","sourceRoot":"","sources":["../../../../src/rpc/web/WebAppRpcRequest.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAkF,MAAM,sBAAsB,CAAC;AAEtI,OAAO,EAA0B,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAe,qBAAqB,EAA0B,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACvH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE/F,gBAAgB;AAChB,oBAAY,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAEtG;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,KAAK,QAAQ,GAAiE;IAErF
|
|
1
|
+
{"version":3,"file":"WebAppRpcRequest.d.ts","sourceRoot":"","sources":["../../../../src/rpc/web/WebAppRpcRequest.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAkF,MAAM,sBAAsB,CAAC;AAEtI,OAAO,EAA0B,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAe,qBAAqB,EAA0B,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACvH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE/F,gBAAgB;AAChB,oBAAY,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAEtG;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,KAAK,QAAQ,GAAiE;IAErF;;;;OAIG;IACH,OAAc,mBAAmB,SAAY;IAE7C,wCAAwC;IACxB,MAAM,EAAE,YAAY,CAAC;IAErC,0DAA0D;IAC1D,SAAyB,QAAQ,EAAE,iBAAiB,CAA6C;IAEjG,+FAA+F;IACxF,QAAQ;;;MAA8B;IAE7C,oBAAoB;IACpB,OAAO,CAAC,MAAM,CAAC,YAAY;IAY3B,wBAAwB;WACJ,YAAY,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAoCpH,4CAA4C;WACxB,YAAY,CAC9B,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,oBAAoB,EAC7B,WAAW,EAAE,qBAAqB,EAClC,GAAG,EAAE,iBAAiB,EACtB,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,IAAI,CAAC;IAuChB,qEAAqE;IACrE,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,GAAG,cAAc;IAY7F,4CAA4C;gBACzB,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE;IAO7E,gBAAgB;IACH,SAAS,IAAI,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;cAQpC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK3D,kCAAkC;IAClC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAItD,yBAAyB;cACT,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;cAapB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;cAqB3C,qBAAqB,CAAC,IAAI,EAAE,MAAM;cAQrC,IAAI,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA2CnD,sDAAsD;IACtD,SAAS,CAAC,WAAW,IAAI,OAAO,KAAK;IAIrC,wDAAwD;IACxD,SAAS,CAAC,aAAa,IAAI,OAAO,OAAO;IAIzC,OAAO,CAAC,MAAM,CAAC,iBAAiB;IA6BhC,OAAO,CAAC,MAAM,CAAC,aAAa;IAK5B,OAAO,CAAC,MAAM,CAAC,eAAe;IAM9B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAYjC,OAAO,CAAC,MAAM,CAAC,eAAe;IAI9B,OAAO,CAAC,MAAM,CAAC,aAAa;mBAKP,aAAa;YAapB,YAAY;YAkBZ,QAAQ;YAMR,UAAU;YAMV,aAAa;YAMb,cAAc;IAiB5B,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,kBAAkB;CAiB3B"}
|
|
@@ -149,9 +149,6 @@ export class WebAppRpcRequest extends RpcRequest {
|
|
|
149
149
|
}
|
|
150
150
|
/** Sends the request. */
|
|
151
151
|
async send() {
|
|
152
|
-
if (this.method !== "options") {
|
|
153
|
-
await this.protocol.initialize();
|
|
154
|
-
}
|
|
155
152
|
this._loading = true;
|
|
156
153
|
await this.setupTransport();
|
|
157
154
|
return new Promise(async (resolve, reject) => {
|
|
@@ -238,8 +235,29 @@ export class WebAppRpcRequest extends RpcRequest {
|
|
|
238
235
|
}
|
|
239
236
|
static configureResponse(protocol, request, fulfillment, res) {
|
|
240
237
|
const success = protocol.getStatus(fulfillment.status) === RpcRequestStatus.Resolved;
|
|
238
|
+
// TODO: Use stale-while-revalidate in cache headers. This needs to be tested, and does not currently have support in the router/caching-service.
|
|
239
|
+
// This will allow browsers to use stale cached responses while also revalidating with the router, allowing us to start up a backend if necessary.
|
|
240
|
+
// RPC Caching Service uses the s-maxage header to determine the TTL for the redis cache.
|
|
241
|
+
const oneHourInSeconds = 3600;
|
|
241
242
|
if (success && request.caching === RpcResponseCacheControl.Immutable) {
|
|
242
|
-
|
|
243
|
+
// If response size is > 50 MB, do not cache it.
|
|
244
|
+
if (fulfillment.result.objects.length > (50 * 10 ** 7)) {
|
|
245
|
+
res.set("Cache-Control", "no-store");
|
|
246
|
+
}
|
|
247
|
+
else if (request.operation.operationName === "generateTileContent") {
|
|
248
|
+
res.set("Cache-Control", "no-store");
|
|
249
|
+
}
|
|
250
|
+
else if (request.operation.operationName === "getConnectionProps") {
|
|
251
|
+
// GetConnectionprops can't be cached on the browser longer than the lifespan of the backend. The lifespan of backend may shrink too. Keep it at 1 second to be safe.
|
|
252
|
+
res.set("Cache-Control", `s-maxage=${oneHourInSeconds * 24}, max-age=1, immutable`);
|
|
253
|
+
}
|
|
254
|
+
else if (request.operation.operationName === "getTileCacheContainerUrl") {
|
|
255
|
+
// getTileCacheContainerUrl returns a SAS with an expiry of 23:59:59. We can't exceed that time when setting the max-age.
|
|
256
|
+
res.set("Cache-Control", `s-maxage=${oneHourInSeconds * 23}, max-age=${oneHourInSeconds * 23}, immutable`);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
res.set("Cache-Control", `s-maxage=${oneHourInSeconds * 24}, max-age=${oneHourInSeconds * 48}, immutable`);
|
|
260
|
+
}
|
|
243
261
|
}
|
|
244
262
|
if (fulfillment.retry) {
|
|
245
263
|
res.set("Retry-After", fulfillment.retry);
|
|
@@ -360,7 +378,9 @@ export class WebAppRpcRequest extends RpcRequest {
|
|
|
360
378
|
}
|
|
361
379
|
}
|
|
362
380
|
/** The maximum size permitted for an encoded component in a URL.
|
|
381
|
+
* Note that some backends limit the total cumulative request size. Our current node backends accept requests with a max size of 16 kb.
|
|
382
|
+
* In addition to the url size, an authorization header may also add considerably to the request size.
|
|
363
383
|
* @note This is used for features like encoding the payload of a cacheable request in the URL.
|
|
364
384
|
*/
|
|
365
|
-
WebAppRpcRequest.maxUrlComponentSize =
|
|
385
|
+
WebAppRpcRequest.maxUrlComponentSize = 1024 * 8;
|
|
366
386
|
//# sourceMappingURL=WebAppRpcRequest.js.map
|