@itwin/core-common 3.4.0-dev.43 → 3.4.0-dev.46
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/Localization.d.ts +4 -5
- package/lib/cjs/Localization.d.ts.map +1 -1
- package/lib/cjs/Localization.js.map +1 -1
- package/lib/cjs/rpc/core/RpcConfiguration.js +1 -1
- package/lib/cjs/rpc/core/RpcConfiguration.js.map +1 -1
- package/lib/cjs/rpc/core/RpcConstants.d.ts +3 -1
- package/lib/cjs/rpc/core/RpcConstants.d.ts.map +1 -1
- package/lib/cjs/rpc/core/RpcConstants.js +4 -1
- package/lib/cjs/rpc/core/RpcConstants.js.map +1 -1
- package/lib/cjs/rpc/web/WebAppRpcProtocol.d.ts +1 -1
- package/lib/cjs/rpc/web/WebAppRpcProtocol.d.ts.map +1 -1
- package/lib/cjs/rpc/web/WebAppRpcProtocol.js +4 -0
- package/lib/cjs/rpc/web/WebAppRpcProtocol.js.map +1 -1
- package/lib/esm/Localization.d.ts +4 -5
- package/lib/esm/Localization.d.ts.map +1 -1
- package/lib/esm/Localization.js.map +1 -1
- package/lib/esm/rpc/core/RpcConfiguration.js +1 -1
- package/lib/esm/rpc/core/RpcConfiguration.js.map +1 -1
- package/lib/esm/rpc/core/RpcConstants.d.ts +3 -1
- package/lib/esm/rpc/core/RpcConstants.d.ts.map +1 -1
- package/lib/esm/rpc/core/RpcConstants.js +4 -1
- package/lib/esm/rpc/core/RpcConstants.js.map +1 -1
- package/lib/esm/rpc/web/WebAppRpcProtocol.d.ts +1 -1
- package/lib/esm/rpc/web/WebAppRpcProtocol.d.ts.map +1 -1
- package/lib/esm/rpc/web/WebAppRpcProtocol.js +4 -0
- package/lib/esm/rpc/web/WebAppRpcProtocol.js.map +1 -1
- package/package.json +8 -8
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
/** Options for Localization
|
|
5
5
|
* @public
|
|
6
6
|
*/
|
|
7
|
-
interface
|
|
7
|
+
export interface TranslationOptions {
|
|
8
8
|
/** for interpolation values */
|
|
9
9
|
[key: string]: any;
|
|
10
10
|
/**
|
|
@@ -52,16 +52,16 @@ export interface Localization {
|
|
|
52
52
|
* @returns The string corresponding to the first key that resolves.
|
|
53
53
|
* @throws Error if no keys resolve to a string.
|
|
54
54
|
*/
|
|
55
|
-
getLocalizedString(key: string | string[], options?:
|
|
55
|
+
getLocalizedString(key: string | string[], options?: TranslationOptions): string;
|
|
56
56
|
/** Similar to `getLocalizedString` but the namespace is a separate param and the key does not include the namespace.
|
|
57
57
|
* @param namespace - the namespace that identifies the particular localization file that contains the property.
|
|
58
58
|
* @param key - the key that matches a property in the JSON localization file.
|
|
59
59
|
* @returns The string corresponding to the first key that resolves.
|
|
60
60
|
* @throws Error if no keys resolve to a string.
|
|
61
61
|
*/
|
|
62
|
-
getLocalizedStringWithNamespace(namespace: string, key: string | string[], options?:
|
|
62
|
+
getLocalizedStringWithNamespace(namespace: string, key: string | string[], options?: TranslationOptions): string;
|
|
63
63
|
/** get the English string for a key. */
|
|
64
|
-
getEnglishString(namespace: string, key: string | string[], options?:
|
|
64
|
+
getEnglishString(namespace: string, key: string | string[], options?: TranslationOptions): string;
|
|
65
65
|
/** Replace all instances of `%{key}` within a string with the translations of those keys.
|
|
66
66
|
* For example:
|
|
67
67
|
* ``` ts
|
|
@@ -109,5 +109,4 @@ export declare class EmptyLocalization implements Localization {
|
|
|
109
109
|
getLanguageList(): readonly string[];
|
|
110
110
|
changeLanguage(): Promise<void>;
|
|
111
111
|
}
|
|
112
|
-
export {};
|
|
113
112
|
//# sourceMappingURL=Localization.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Localization.d.ts","sourceRoot":"","sources":["../../src/Localization.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"Localization.d.ts","sourceRoot":"","sources":["../../src/Localization.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,+BAA+B;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,CAAC,EAAE,GAAG,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC;IACjF;;;;;OAKG;IACH,+BAA+B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC;IACjH,wCAAwC;IACxC,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC;IAClG;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAE9C;;;;;;;OAOG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,gBAAgB;IAChB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,gBAAgB;IAChB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAC7D,2DAA2D;IAC3D,eAAe,IAAI,SAAS,MAAM,EAAE,CAAC;IACrC,qGAAqG;IACrG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACvC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IACjC,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IAClD,+BAA+B,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IACnF,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IACpE,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IACvC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IACxC,mBAAmB,IAAI,IAAI;IAC3B,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS;IAChD,eAAe,IAAI,SAAS,MAAM,EAAE;IAC9B,cAAc;CAC5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Localization.js","sourceRoot":"","sources":["../../src/Localization.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAmGH;;GAEG;AACH,MAAa,iBAAiB;IACrB,KAAK,CAAC,UAAU,KAAoB,CAAC;IACrC,kBAAkB,CAAC,GAAsB,IAAY,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG,+BAA+B,CAAC,UAAkB,EAAE,GAAsB,IAAY,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5H,gBAAgB,CAAC,UAAkB,EAAE,GAAsB,IAAY,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7G,gBAAgB,CAAC,WAAmB,IAAY,OAAO,WAAW,CAAC,CAAC,CAAC;IACrE,KAAK,CAAC,iBAAiB,KAAoB,CAAC;IAC5C,mBAAmB,KAAW,CAAC;IAC/B,mBAAmB,KAAgC,OAAO,SAAS,CAAC,CAAC,CAAC;IACtE,eAAe,KAAwB,OAAO,EAAE,CAAC,CAAC,CAAC;IACnD,KAAK,CAAC,cAAc,KAAK,CAAC;CAClC;AAXD,8CAWC","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 Localization\r\n */\r\n\r\n/** Options for Localization\r\n * @public\r\n */\r\
|
|
1
|
+
{"version":3,"file":"Localization.js","sourceRoot":"","sources":["../../src/Localization.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAmGH;;GAEG;AACH,MAAa,iBAAiB;IACrB,KAAK,CAAC,UAAU,KAAoB,CAAC;IACrC,kBAAkB,CAAC,GAAsB,IAAY,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG,+BAA+B,CAAC,UAAkB,EAAE,GAAsB,IAAY,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5H,gBAAgB,CAAC,UAAkB,EAAE,GAAsB,IAAY,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7G,gBAAgB,CAAC,WAAmB,IAAY,OAAO,WAAW,CAAC,CAAC,CAAC;IACrE,KAAK,CAAC,iBAAiB,KAAoB,CAAC;IAC5C,mBAAmB,KAAW,CAAC;IAC/B,mBAAmB,KAAgC,OAAO,SAAS,CAAC,CAAC,CAAC;IACtE,eAAe,KAAwB,OAAO,EAAE,CAAC,CAAC,CAAC;IACnD,KAAK,CAAC,cAAc,KAAK,CAAC;CAClC;AAXD,8CAWC","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 Localization\r\n */\r\n\r\n/** Options for Localization\r\n * @public\r\n */\r\nexport interface TranslationOptions {\r\n /** for interpolation values */\r\n [key: string]: any;\r\n /**\r\n * defaultValue to return if a translation was not found\r\n */\r\n defaultValue?: any;\r\n /**\r\n * count value used for plurals\r\n */\r\n count?: number;\r\n /**\r\n * used for contexts (eg. male\\female)\r\n */\r\n context?: any;\r\n /**\r\n * override languages to use\r\n */\r\n lngs?: string[];\r\n /**\r\n * override language to lookup key if not found see fallbacks for details\r\n */\r\n fallbackLng?: string;\r\n}\r\n\r\n/** The interface defining the localization requirements of [IModelApp]($frontend).\r\n * @public\r\n * @extensions\r\n */\r\nexport interface Localization {\r\n /** This method must be called and awaited before using an instance of Localization.\r\n * @param namespaces an array of namespaces to load. There must be at least one namespace, and it\r\n * becomes the default namespace.\r\n * @note IModelApp.startup calls this internally, so you should not call this method directly\r\n * except for Localization instances outside of IModelApp (e.g., for tests.)\r\n */\r\n initialize(namespaces: string[]): Promise<void>;\r\n\r\n /** Return the translated value of a key.\r\n * @param key - the key that matches a property in the JSON localization file.\r\n * @note The key includes the namespace, which identifies the particular localization file that contains the property,\r\n * followed by a colon, followed by the property in the JSON file.\r\n * For example:\r\n * ``` ts\r\n * const dataString: string = IModelApp.localization.getLocalizedString(\"iModelJs:BackgroundMap.BingDataAttribution\");\r\n * ```\r\n * assigns to dataString the string with property BackgroundMap.BingDataAttribution from the iModelJs.json localization file.\r\n * @returns The string corresponding to the first key that resolves.\r\n * @throws Error if no keys resolve to a string.\r\n */\r\n getLocalizedString(key: string | string[], options?: TranslationOptions): string;\r\n /** Similar to `getLocalizedString` but the namespace is a separate param and the key does not include the namespace.\r\n * @param namespace - the namespace that identifies the particular localization file that contains the property.\r\n * @param key - the key that matches a property in the JSON localization file.\r\n * @returns The string corresponding to the first key that resolves.\r\n * @throws Error if no keys resolve to a string.\r\n */\r\n getLocalizedStringWithNamespace(namespace: string, key: string | string[], options?: TranslationOptions): string;\r\n /** get the English string for a key. */\r\n getEnglishString(namespace: string, key: string | string[], options?: TranslationOptions): string;\r\n /** Replace all instances of `%{key}` within a string with the translations of those keys.\r\n * For example:\r\n * ``` ts\r\n * \"MyKeys\": {\r\n * \"Key1\": \"First value\",\r\n * \"Key2\": \"Second value\"\r\n * }\r\n * ```\r\n *\r\n * ``` ts\r\n * getLocalizedKeys(\"string with %{MyKeys.Key1} followed by %{MyKeys.Key2}!\"\") // returns \"string with First Value followed by Second Value!\"\r\n * ```\r\n */\r\n getLocalizedKeys(inputString: string): string;\r\n\r\n /** Register a new Namespace and return a Promise that is fulfilled when the content is loaded.\r\n * If the namespace is already registered, its Promise will be returned.\r\n * @param name - the name of the namespace.\r\n * @note - The registerNamespace method starts fetching the appropriate version of the JSON localization file from the server,\r\n * based on the current locale. To make sure that fetch is complete before performing translations from this namespace, await\r\n * fulfillment of returned Promise.\r\n * @see [Localization in iTwin.js]($docs/learning/frontend/Localization.md)\r\n */\r\n registerNamespace(namespace: string): Promise<void>;\r\n /** @internal */\r\n unregisterNamespace(namespace: string): void;\r\n /** @internal */\r\n getNamespacePromise(name: string): Promise<void> | undefined;\r\n /** Get the list of available languages for translations */\r\n getLanguageList(): readonly string[];\r\n /** Change the language for translations. This overrides the language from the browser, for tests. */\r\n changeLanguage(language: string): Promise<void>;\r\n}\r\n\r\n/** An empty [[Localization]] used if one is not provided to [IModelApp]($frontend). Does not perform localizations (merely returns the key.)\r\n * @public\r\n */\r\nexport class EmptyLocalization implements Localization {\r\n public async initialize(): Promise<void> { }\r\n public getLocalizedString(key: string | string[]): string { return typeof (key) == \"string\" ? key : key[0]; }\r\n public getLocalizedStringWithNamespace(_namespace: string, key: string | string[]): string { return this.getLocalizedString(key); }\r\n public getEnglishString(_namespace: string, key: string | string[]): string { return this.getLocalizedString(key); }\r\n public getLocalizedKeys(inputString: string): string { return inputString; }\r\n public async registerNamespace(): Promise<void> { }\r\n public unregisterNamespace(): void { }\r\n public getNamespacePromise(): Promise<void> | undefined { return undefined; }\r\n public getLanguageList(): readonly string[] { return []; }\r\n public async changeLanguage() { }\r\n}\r\n"]}
|
|
@@ -30,7 +30,7 @@ class RpcConfiguration {
|
|
|
30
30
|
/** The target interval (in milliseconds) between connection attempts for pending RPC operation requests. */
|
|
31
31
|
this.pendingOperationRetryInterval = 10000;
|
|
32
32
|
/** The maximum number of transient faults permitted before request failure. */
|
|
33
|
-
this.transientFaultLimit =
|
|
33
|
+
this.transientFaultLimit = 4;
|
|
34
34
|
/** @internal */
|
|
35
35
|
this.routing = RpcRoutingToken_1.RpcRoutingToken.default;
|
|
36
36
|
/** The control channel for the configuration.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcConfiguration.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConfiguration.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\nimport { RpcInterface, RpcInterfaceDefinition } from \"../../RpcInterface\";\r\nimport { RpcManager } from \"../../RpcManager\";\r\nimport { RpcControlChannel } from \"./RpcControl\";\r\nimport { SerializedRpcActivity } from \"./RpcInvocation\";\r\nimport { RpcProtocol, RpcRequestFulfillment } from \"./RpcProtocol\";\r\nimport { INSTANCE } from \"./RpcRegistry\";\r\nimport { RpcRequest } from \"./RpcRequest\";\r\nimport { RpcRequestContext } from \"./RpcRequestContext\";\r\nimport { RpcRoutingToken } from \"./RpcRoutingToken\";\r\n\r\n/** @internal */\r\nexport type RpcConfigurationSupplier = (routing?: RpcRoutingToken) => { new(): RpcConfiguration }; // eslint-disable-line @typescript-eslint/prefer-function-type\r\n\r\n/** @internal */\r\nexport interface RpcRoutingMap extends RpcConfigurationSupplier { configurations: Map<number, RpcConfigurationSupplier> }\r\n\r\n/** @internal */\r\nexport namespace RpcRoutingMap {\r\n export function create(): RpcRoutingMap {\r\n const configurations = new Map();\r\n return Object.assign((routing?: RpcRoutingToken) => configurations.get(routing!.id)(), { configurations });\r\n }\r\n}\r\n\r\n/** A RpcConfiguration specifies how calls on an RPC interface will be marshalled, plus other operating parameters.\r\n * RpcConfiguration is the base class for specific configurations.\r\n * @internal\r\n */\r\nexport abstract class RpcConfiguration {\r\n /** Whether development mode is enabled.\r\n * @note This parameter determines whether developer convenience features like backend stack traces are available.\r\n */\r\n public static developmentMode: boolean = false;\r\n\r\n /** Whether frontend checks that are relevant in a cloud-hosted routing scenario are disabled. */\r\n public static disableRoutingValidation: boolean = false;\r\n\r\n /** Whether strict mode is enabled.\r\n * This parameter determines system behaviors relating to strict checking:\r\n * - Whether an error is thrown if the type marshaling system encounters an unregistered type (only in strict mode).\r\n */\r\n public static strictMode: boolean = false;\r\n\r\n /**\r\n * Whether to throw an error when the IModelRpcProps in the operation parameter list differs from the token in the URL.\r\n * @note By default, a warning is logged and the operation is allowed to proceed.\r\n * @note The parameter token is always replaced by the url token (unless RpcOperationPolicy.allowTokenMismatch is set).\r\n */\r\n public static throwOnTokenMismatch = false;\r\n\r\n /** Sets the configuration supplier for an RPC interface class. */\r\n public static assign<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, supplier: RpcConfigurationSupplier): void {\r\n const map = definition.prototype.configurationSupplier as RpcRoutingMap | undefined;\r\n if (!map || typeof (map.configurations) === \"undefined\") {\r\n definition.prototype.configurationSupplier = supplier;\r\n } else {\r\n map.configurations.set(RpcRoutingToken.default.id, supplier);\r\n }\r\n }\r\n\r\n /** Sets the configuration supplier for an RPC interface class for a given routing. */\r\n public static assignWithRouting<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, routing: RpcRoutingToken, configuration: new () => RpcConfiguration): void {\r\n if (!definition.prototype.configurationSupplier) {\r\n RpcConfiguration.assign(definition, RpcRoutingMap.create());\r\n }\r\n\r\n let map = definition.prototype.configurationSupplier as RpcRoutingMap;\r\n if (typeof (map.configurations) === \"undefined\") {\r\n const existing = map as RpcConfigurationSupplier;\r\n map = RpcRoutingMap.create();\r\n RpcConfiguration.assign(definition, map);\r\n map.configurations.set(RpcRoutingToken.default.id, existing);\r\n }\r\n\r\n const supplier = () => configuration;\r\n map.configurations.set(routing.id, supplier);\r\n }\r\n\r\n /** Obtains the instance of an RPC configuration class. */\r\n public static obtain<T extends RpcConfiguration>(configurationConstructor: new () => T): T {\r\n let instance = (configurationConstructor as any)[INSTANCE] as T;\r\n if (!instance)\r\n instance = (configurationConstructor as any)[INSTANCE] = new configurationConstructor();\r\n\r\n return instance;\r\n }\r\n\r\n /** Enables passing of application-specific context with each RPC request. */\r\n public static requestContext: RpcRequestContext = {\r\n getId: (_request: RpcRequest): string => \"\",\r\n serialize: async (request: RpcRequest): Promise<SerializedRpcActivity> => ({\r\n id: request.id,\r\n applicationId: \"\",\r\n applicationVersion: \"\",\r\n sessionId: \"\",\r\n authorization: \"\",\r\n }),\r\n };\r\n\r\n /** @internal */\r\n public attached: RpcInterfaceDefinition[] = [];\r\n\r\n /** The protocol of the configuration.\r\n * @internal\r\n */\r\n public abstract readonly protocol: RpcProtocol;\r\n\r\n /** The RPC interfaces managed by the configuration. */\r\n public abstract readonly interfaces: () => RpcInterfaceDefinition[];\r\n\r\n /** @internal */\r\n public allowAttachedInterfaces: boolean = true;\r\n\r\n /** @internal */\r\n public get attachedInterfaces(): ReadonlyArray<RpcInterfaceDefinition> { return this.attached; }\r\n\r\n /** The target interval (in milliseconds) between connection attempts for pending RPC operation requests. */\r\n public pendingOperationRetryInterval = 10000;\r\n\r\n /** The maximum number of transient faults permitted before request failure. */\r\n public transientFaultLimit = 3;\r\n\r\n /** @internal */\r\n public readonly routing: RpcRoutingToken = RpcRoutingToken.default;\r\n\r\n /** The control channel for the configuration.\r\n * @internal\r\n */\r\n public readonly controlChannel = RpcControlChannel.obtain(this);\r\n\r\n /** @internal */\r\n public attach<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>): void {\r\n if (!this.allowAttachedInterfaces) {\r\n return;\r\n }\r\n\r\n if (this.interfaces().indexOf(definition) !== -1 || this.attached.indexOf(definition) !== -1) {\r\n return;\r\n }\r\n\r\n this.attached.push(definition);\r\n RpcConfiguration.assign(definition, () => this.constructor as any);\r\n RpcManager.initializeInterface(definition);\r\n }\r\n\r\n /** Initializes the RPC interfaces managed by the configuration. */\r\n public static initializeInterfaces(configuration: RpcConfiguration) {\r\n configuration.interfaces().forEach((definition) => RpcManager.initializeInterface(definition));\r\n configuration.controlChannel.initialize();\r\n }\r\n\r\n /** @internal */\r\n public static supply(definition: RpcInterface): RpcConfiguration {\r\n return RpcConfiguration.obtain(definition.configurationSupplier ? definition.configurationSupplier(definition.routing) : RpcDefaultConfiguration);\r\n }\r\n\r\n /** @internal */\r\n public onRpcClientInitialized(definition: RpcInterfaceDefinition, client: RpcInterface): void {\r\n this.protocol.onRpcClientInitialized(definition, client);\r\n }\r\n\r\n /** @internal */\r\n public onRpcImplInitialized(definition: RpcInterfaceDefinition, impl: RpcInterface): void {\r\n this.protocol.onRpcImplInitialized(definition, impl);\r\n }\r\n\r\n /** @internal */\r\n public onRpcClientTerminated(definition: RpcInterfaceDefinition, client: RpcInterface): void {\r\n this.protocol.onRpcClientTerminated(definition, client);\r\n }\r\n\r\n /** @internal */\r\n public onRpcImplTerminated(definition: RpcInterfaceDefinition, impl: RpcInterface): void {\r\n this.protocol.onRpcImplTerminated(definition, impl);\r\n }\r\n}\r\n\r\n/** A default configuration that can be used for basic testing within a library.\r\n * @internal\r\n */\r\nexport class RpcDefaultConfiguration extends RpcConfiguration {\r\n public interfaces = () => [];\r\n public protocol: RpcProtocol = new RpcDirectProtocol(this);\r\n}\r\n\r\n/** A default protocol that can be used for basic testing within a library.\r\n * @internal\r\n */\r\nexport class RpcDirectProtocol extends RpcProtocol {\r\n public readonly requestType = RpcDirectRequest;\r\n}\r\n\r\n/** A default request type that can be used for basic testing within a library.\r\n * @internal\r\n */\r\nexport class RpcDirectRequest extends RpcRequest {\r\n public headers: Map<string, string> = new Map();\r\n public fulfillment: RpcRequestFulfillment | undefined = undefined;\r\n\r\n protected async send() {\r\n const request = await this.protocol.serialize(this);\r\n return new Promise<number>(async (resolve, reject) => {\r\n try {\r\n this.fulfillment = await this.protocol.fulfill(request);\r\n resolve(this.fulfillment.status);\r\n } catch (err) {\r\n reject(err);\r\n }\r\n });\r\n }\r\n\r\n protected setHeader(name: string, value: string): void {\r\n this.headers.set(name, value);\r\n }\r\n\r\n protected async load() {\r\n return this.fulfillment!.result;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"RpcConfiguration.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConfiguration.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\nimport { RpcInterface, RpcInterfaceDefinition } from \"../../RpcInterface\";\r\nimport { RpcManager } from \"../../RpcManager\";\r\nimport { RpcControlChannel } from \"./RpcControl\";\r\nimport { SerializedRpcActivity } from \"./RpcInvocation\";\r\nimport { RpcProtocol, RpcRequestFulfillment } from \"./RpcProtocol\";\r\nimport { INSTANCE } from \"./RpcRegistry\";\r\nimport { RpcRequest } from \"./RpcRequest\";\r\nimport { RpcRequestContext } from \"./RpcRequestContext\";\r\nimport { RpcRoutingToken } from \"./RpcRoutingToken\";\r\n\r\n/** @internal */\r\nexport type RpcConfigurationSupplier = (routing?: RpcRoutingToken) => { new(): RpcConfiguration }; // eslint-disable-line @typescript-eslint/prefer-function-type\r\n\r\n/** @internal */\r\nexport interface RpcRoutingMap extends RpcConfigurationSupplier { configurations: Map<number, RpcConfigurationSupplier> }\r\n\r\n/** @internal */\r\nexport namespace RpcRoutingMap {\r\n export function create(): RpcRoutingMap {\r\n const configurations = new Map();\r\n return Object.assign((routing?: RpcRoutingToken) => configurations.get(routing!.id)(), { configurations });\r\n }\r\n}\r\n\r\n/** A RpcConfiguration specifies how calls on an RPC interface will be marshalled, plus other operating parameters.\r\n * RpcConfiguration is the base class for specific configurations.\r\n * @internal\r\n */\r\nexport abstract class RpcConfiguration {\r\n /** Whether development mode is enabled.\r\n * @note This parameter determines whether developer convenience features like backend stack traces are available.\r\n */\r\n public static developmentMode: boolean = false;\r\n\r\n /** Whether frontend checks that are relevant in a cloud-hosted routing scenario are disabled. */\r\n public static disableRoutingValidation: boolean = false;\r\n\r\n /** Whether strict mode is enabled.\r\n * This parameter determines system behaviors relating to strict checking:\r\n * - Whether an error is thrown if the type marshaling system encounters an unregistered type (only in strict mode).\r\n */\r\n public static strictMode: boolean = false;\r\n\r\n /**\r\n * Whether to throw an error when the IModelRpcProps in the operation parameter list differs from the token in the URL.\r\n * @note By default, a warning is logged and the operation is allowed to proceed.\r\n * @note The parameter token is always replaced by the url token (unless RpcOperationPolicy.allowTokenMismatch is set).\r\n */\r\n public static throwOnTokenMismatch = false;\r\n\r\n /** Sets the configuration supplier for an RPC interface class. */\r\n public static assign<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, supplier: RpcConfigurationSupplier): void {\r\n const map = definition.prototype.configurationSupplier as RpcRoutingMap | undefined;\r\n if (!map || typeof (map.configurations) === \"undefined\") {\r\n definition.prototype.configurationSupplier = supplier;\r\n } else {\r\n map.configurations.set(RpcRoutingToken.default.id, supplier);\r\n }\r\n }\r\n\r\n /** Sets the configuration supplier for an RPC interface class for a given routing. */\r\n public static assignWithRouting<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, routing: RpcRoutingToken, configuration: new () => RpcConfiguration): void {\r\n if (!definition.prototype.configurationSupplier) {\r\n RpcConfiguration.assign(definition, RpcRoutingMap.create());\r\n }\r\n\r\n let map = definition.prototype.configurationSupplier as RpcRoutingMap;\r\n if (typeof (map.configurations) === \"undefined\") {\r\n const existing = map as RpcConfigurationSupplier;\r\n map = RpcRoutingMap.create();\r\n RpcConfiguration.assign(definition, map);\r\n map.configurations.set(RpcRoutingToken.default.id, existing);\r\n }\r\n\r\n const supplier = () => configuration;\r\n map.configurations.set(routing.id, supplier);\r\n }\r\n\r\n /** Obtains the instance of an RPC configuration class. */\r\n public static obtain<T extends RpcConfiguration>(configurationConstructor: new () => T): T {\r\n let instance = (configurationConstructor as any)[INSTANCE] as T;\r\n if (!instance)\r\n instance = (configurationConstructor as any)[INSTANCE] = new configurationConstructor();\r\n\r\n return instance;\r\n }\r\n\r\n /** Enables passing of application-specific context with each RPC request. */\r\n public static requestContext: RpcRequestContext = {\r\n getId: (_request: RpcRequest): string => \"\",\r\n serialize: async (request: RpcRequest): Promise<SerializedRpcActivity> => ({\r\n id: request.id,\r\n applicationId: \"\",\r\n applicationVersion: \"\",\r\n sessionId: \"\",\r\n authorization: \"\",\r\n }),\r\n };\r\n\r\n /** @internal */\r\n public attached: RpcInterfaceDefinition[] = [];\r\n\r\n /** The protocol of the configuration.\r\n * @internal\r\n */\r\n public abstract readonly protocol: RpcProtocol;\r\n\r\n /** The RPC interfaces managed by the configuration. */\r\n public abstract readonly interfaces: () => RpcInterfaceDefinition[];\r\n\r\n /** @internal */\r\n public allowAttachedInterfaces: boolean = true;\r\n\r\n /** @internal */\r\n public get attachedInterfaces(): ReadonlyArray<RpcInterfaceDefinition> { return this.attached; }\r\n\r\n /** The target interval (in milliseconds) between connection attempts for pending RPC operation requests. */\r\n public pendingOperationRetryInterval = 10000;\r\n\r\n /** The maximum number of transient faults permitted before request failure. */\r\n public transientFaultLimit = 4;\r\n\r\n /** @internal */\r\n public readonly routing: RpcRoutingToken = RpcRoutingToken.default;\r\n\r\n /** The control channel for the configuration.\r\n * @internal\r\n */\r\n public readonly controlChannel = RpcControlChannel.obtain(this);\r\n\r\n /** @internal */\r\n public attach<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>): void {\r\n if (!this.allowAttachedInterfaces) {\r\n return;\r\n }\r\n\r\n if (this.interfaces().indexOf(definition) !== -1 || this.attached.indexOf(definition) !== -1) {\r\n return;\r\n }\r\n\r\n this.attached.push(definition);\r\n RpcConfiguration.assign(definition, () => this.constructor as any);\r\n RpcManager.initializeInterface(definition);\r\n }\r\n\r\n /** Initializes the RPC interfaces managed by the configuration. */\r\n public static initializeInterfaces(configuration: RpcConfiguration) {\r\n configuration.interfaces().forEach((definition) => RpcManager.initializeInterface(definition));\r\n configuration.controlChannel.initialize();\r\n }\r\n\r\n /** @internal */\r\n public static supply(definition: RpcInterface): RpcConfiguration {\r\n return RpcConfiguration.obtain(definition.configurationSupplier ? definition.configurationSupplier(definition.routing) : RpcDefaultConfiguration);\r\n }\r\n\r\n /** @internal */\r\n public onRpcClientInitialized(definition: RpcInterfaceDefinition, client: RpcInterface): void {\r\n this.protocol.onRpcClientInitialized(definition, client);\r\n }\r\n\r\n /** @internal */\r\n public onRpcImplInitialized(definition: RpcInterfaceDefinition, impl: RpcInterface): void {\r\n this.protocol.onRpcImplInitialized(definition, impl);\r\n }\r\n\r\n /** @internal */\r\n public onRpcClientTerminated(definition: RpcInterfaceDefinition, client: RpcInterface): void {\r\n this.protocol.onRpcClientTerminated(definition, client);\r\n }\r\n\r\n /** @internal */\r\n public onRpcImplTerminated(definition: RpcInterfaceDefinition, impl: RpcInterface): void {\r\n this.protocol.onRpcImplTerminated(definition, impl);\r\n }\r\n}\r\n\r\n/** A default configuration that can be used for basic testing within a library.\r\n * @internal\r\n */\r\nexport class RpcDefaultConfiguration extends RpcConfiguration {\r\n public interfaces = () => [];\r\n public protocol: RpcProtocol = new RpcDirectProtocol(this);\r\n}\r\n\r\n/** A default protocol that can be used for basic testing within a library.\r\n * @internal\r\n */\r\nexport class RpcDirectProtocol extends RpcProtocol {\r\n public readonly requestType = RpcDirectRequest;\r\n}\r\n\r\n/** A default request type that can be used for basic testing within a library.\r\n * @internal\r\n */\r\nexport class RpcDirectRequest extends RpcRequest {\r\n public headers: Map<string, string> = new Map();\r\n public fulfillment: RpcRequestFulfillment | undefined = undefined;\r\n\r\n protected async send() {\r\n const request = await this.protocol.serialize(this);\r\n return new Promise<number>(async (resolve, reject) => {\r\n try {\r\n this.fulfillment = await this.protocol.fulfill(request);\r\n resolve(this.fulfillment.status);\r\n } catch (err) {\r\n reject(err);\r\n }\r\n });\r\n }\r\n\r\n protected setHeader(name: string, value: string): void {\r\n this.headers.set(name, value);\r\n }\r\n\r\n protected async load() {\r\n return this.fulfillment!.result;\r\n }\r\n}\r\n"]}
|
|
@@ -42,7 +42,9 @@ export declare enum RpcRequestStatus {
|
|
|
42
42
|
NoContent = 9,
|
|
43
43
|
BadGateway = 10,
|
|
44
44
|
ServiceUnavailable = 11,
|
|
45
|
-
GatewayTimeout = 12
|
|
45
|
+
GatewayTimeout = 12,
|
|
46
|
+
RequestTimeout = 13,
|
|
47
|
+
TooManyRequests = 14
|
|
46
48
|
}
|
|
47
49
|
/** @public */
|
|
48
50
|
export declare namespace RpcRequestStatus {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcConstants.d.ts","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConstants.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH;;GAEG;AACH,oBAAY,uBAAuB;IACjC,IAAI,IAAA;IACJ,SAAS,IAAA;CACV;AAED;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,cAAc,IAAA;IACd,cAAc,IAAA;IACd,eAAe,IAAA;IACf,uBAAuB,IAAA;IACvB,oBAAoB,IAAA;IACpB,oBAAoB,IAAA;IACpB,iBAAiB,IAAA;IACjB,eAAe,IAAA;IACf,sBAAsB,IAAA;IACtB,sBAAsB,IAAA;IACtB,uBAAuB,KAAA;IACvB,oBAAoB,KAAA;IACpB,wBAAwB,KAAA;CACzB;AAED;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,OAAO,IAAA;IACP,OAAO,IAAA;IACP,SAAS,IAAA;IACT,OAAO,IAAA;IACP,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,SAAS,IAAA;IACT,SAAS,IAAA;IACT,UAAU,KAAA;IACV,kBAAkB,KAAA;IAClB,cAAc,KAAA;
|
|
1
|
+
{"version":3,"file":"RpcConstants.d.ts","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConstants.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH;;GAEG;AACH,oBAAY,uBAAuB;IACjC,IAAI,IAAA;IACJ,SAAS,IAAA;CACV;AAED;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,cAAc,IAAA;IACd,cAAc,IAAA;IACd,eAAe,IAAA;IACf,uBAAuB,IAAA;IACvB,oBAAoB,IAAA;IACpB,oBAAoB,IAAA;IACpB,iBAAiB,IAAA;IACjB,eAAe,IAAA;IACf,sBAAsB,IAAA;IACtB,sBAAsB,IAAA;IACtB,uBAAuB,KAAA;IACvB,oBAAoB,KAAA;IACpB,wBAAwB,KAAA;CACzB;AAED;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,OAAO,IAAA;IACP,OAAO,IAAA;IACP,SAAS,IAAA;IACT,OAAO,IAAA;IACP,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,SAAS,IAAA;IACT,SAAS,IAAA;IACT,UAAU,KAAA;IACV,kBAAkB,KAAA;IAClB,cAAc,KAAA;IACd,cAAc,KAAA;IACd,eAAe,KAAA;CAChB;AAED,cAAc;AACd,yBAAiB,gBAAgB,CAAC;IAChC,SAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,WAGxD;CACF;AAED;;GAEG;AACH,oBAAY,eAAe;IACzB,aAAa,IAAA;IACb,qBAAqB,IAAA;IACrB,sBAAsB,IAAA;CACvB;AAED;;GAEG;AACH,oBAAY,cAAc;IACxB,OAAO,IAAA;IACP,IAAI,IAAA;IACJ,MAAM,IAAA;IACN,SAAS,IAAA;IACT,MAAM,IAAA;CACP;AAED;;GAEG;AACH,oBAAY,WAAW;IACrB,QAAQ,IAAA;IACR,OAAO,IAAA;CACR;AAID,gBAAgB;AAChB,eAAO,MAAM,iBAAiB;;;;;;CAM7B,CAAC"}
|
|
@@ -53,11 +53,14 @@ var RpcRequestStatus;
|
|
|
53
53
|
RpcRequestStatus[RpcRequestStatus["BadGateway"] = 10] = "BadGateway";
|
|
54
54
|
RpcRequestStatus[RpcRequestStatus["ServiceUnavailable"] = 11] = "ServiceUnavailable";
|
|
55
55
|
RpcRequestStatus[RpcRequestStatus["GatewayTimeout"] = 12] = "GatewayTimeout";
|
|
56
|
+
RpcRequestStatus[RpcRequestStatus["RequestTimeout"] = 13] = "RequestTimeout";
|
|
57
|
+
RpcRequestStatus[RpcRequestStatus["TooManyRequests"] = 14] = "TooManyRequests";
|
|
56
58
|
})(RpcRequestStatus = exports.RpcRequestStatus || (exports.RpcRequestStatus = {}));
|
|
57
59
|
/** @public */
|
|
58
60
|
(function (RpcRequestStatus) {
|
|
59
61
|
function isTransientError(status) {
|
|
60
|
-
return status === RpcRequestStatus.BadGateway || status === RpcRequestStatus.ServiceUnavailable || status === RpcRequestStatus.GatewayTimeout
|
|
62
|
+
return status === RpcRequestStatus.BadGateway || status === RpcRequestStatus.ServiceUnavailable || status === RpcRequestStatus.GatewayTimeout
|
|
63
|
+
|| status === RpcRequestStatus.RequestTimeout || status === RpcRequestStatus.TooManyRequests;
|
|
61
64
|
}
|
|
62
65
|
RpcRequestStatus.isTransientError = isTransientError;
|
|
63
66
|
})(RpcRequestStatus = exports.RpcRequestStatus || (exports.RpcRequestStatus = {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcConstants.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConstants.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH;;GAEG;AACH,IAAY,uBAGX;AAHD,WAAY,uBAAuB;IACjC,qEAAI,CAAA;IACJ,+EAAS,CAAA;AACX,CAAC,EAHW,uBAAuB,GAAvB,+BAAuB,KAAvB,+BAAuB,QAGlC;AAED;;GAEG;AACH,IAAY,gBAcX;AAdD,WAAY,gBAAgB;IAC1B,2EAAc,CAAA;IACd,2EAAc,CAAA;IACd,6EAAe,CAAA;IACf,6FAAuB,CAAA;IACvB,uFAAoB,CAAA;IACpB,uFAAoB,CAAA;IACpB,iFAAiB,CAAA;IACjB,6EAAe,CAAA;IACf,2FAAsB,CAAA;IACtB,2FAAsB,CAAA;IACtB,8FAAuB,CAAA;IACvB,wFAAoB,CAAA;IACpB,gGAAwB,CAAA;AAC1B,CAAC,EAdW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAc3B;AAED;;GAEG;AACH,IAAY,
|
|
1
|
+
{"version":3,"file":"RpcConstants.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConstants.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH;;GAEG;AACH,IAAY,uBAGX;AAHD,WAAY,uBAAuB;IACjC,qEAAI,CAAA;IACJ,+EAAS,CAAA;AACX,CAAC,EAHW,uBAAuB,GAAvB,+BAAuB,KAAvB,+BAAuB,QAGlC;AAED;;GAEG;AACH,IAAY,gBAcX;AAdD,WAAY,gBAAgB;IAC1B,2EAAc,CAAA;IACd,2EAAc,CAAA;IACd,6EAAe,CAAA;IACf,6FAAuB,CAAA;IACvB,uFAAoB,CAAA;IACpB,uFAAoB,CAAA;IACpB,iFAAiB,CAAA;IACjB,6EAAe,CAAA;IACf,2FAAsB,CAAA;IACtB,2FAAsB,CAAA;IACtB,8FAAuB,CAAA;IACvB,wFAAoB,CAAA;IACpB,gGAAwB,CAAA;AAC1B,CAAC,EAdW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAc3B;AAED;;GAEG;AACH,IAAY,gBAgBX;AAhBD,WAAY,gBAAgB;IAC1B,6DAAO,CAAA;IACP,6DAAO,CAAA;IACP,iEAAS,CAAA;IACT,6DAAO,CAAA;IACP,+DAAQ,CAAA;IACR,+DAAQ,CAAA;IACR,+DAAQ,CAAA;IACR,+DAAQ,CAAA;IACR,iEAAS,CAAA;IACT,iEAAS,CAAA;IACT,oEAAU,CAAA;IACV,oFAAkB,CAAA;IAClB,4EAAc,CAAA;IACd,4EAAc,CAAA;IACd,8EAAe,CAAA;AACjB,CAAC,EAhBW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAgB3B;AAED,cAAc;AACd,WAAiB,gBAAgB;IAC/B,SAAgB,gBAAgB,CAAC,MAAwB;QACvD,OAAO,MAAM,KAAK,gBAAgB,CAAC,UAAU,IAAI,MAAM,KAAK,gBAAgB,CAAC,kBAAkB,IAAI,MAAM,KAAK,gBAAgB,CAAC,cAAc;eACvI,MAAM,KAAK,gBAAgB,CAAC,cAAc,IAAI,MAAM,KAAK,gBAAgB,CAAC,eAAe,CAAC;IAClG,CAAC;IAHe,iCAAgB,mBAG/B,CAAA;AACH,CAAC,EALgB,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAKhC;AAED;;GAEG;AACH,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,uEAAa,CAAA;IACb,uFAAqB,CAAA;IACrB,yFAAsB,CAAA;AACxB,CAAC,EAJW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAI1B;AAED;;GAEG;AACH,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,yDAAO,CAAA;IACP,mDAAI,CAAA;IACJ,uDAAM,CAAA;IACN,6DAAS,CAAA;IACT,uDAAM,CAAA;AACR,CAAC,EANW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAMzB;AAED;;GAEG;AACH,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,qDAAQ,CAAA;IACR,mDAAO,CAAA;AACT,CAAC,EAHW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAGtB;AAED,yDAAyD;AAEzD,gBAAgB;AACH,QAAA,iBAAiB,GAAG;IAC/B,OAAO,EAAE,cAAc;IACvB,IAAI,EAAE,YAAY;IAClB,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,0BAA0B;IAClC,SAAS,EAAE,qBAAqB;CACjC,CAAC","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\n/** Describes available options for RPC response caching.\r\n * @public\r\n */\r\nexport enum RpcResponseCacheControl {\r\n None,\r\n Immutable,\r\n}\r\n\r\n/** RPC protocol event types.\r\n * @public\r\n */\r\nexport enum RpcProtocolEvent {\r\n RequestCreated,\r\n ResponseLoaded,\r\n ResponseLoading,\r\n ConnectionErrorReceived,\r\n UnknownErrorReceived,\r\n BackendErrorReceived,\r\n ConnectionAborted,\r\n RequestReceived,\r\n BackendResponseCreated,\r\n BackendReportedPending,\r\n BackendReportedNotFound,\r\n BackendErrorOccurred,\r\n BackendReportedNoContent,\r\n}\r\n\r\n/** The status of an RPC operation request.\r\n * @public\r\n */\r\nexport enum RpcRequestStatus {\r\n Unknown,\r\n Created,\r\n Submitted,\r\n Pending,\r\n Resolved,\r\n Rejected,\r\n Disposed,\r\n NotFound,\r\n Cancelled,\r\n NoContent,\r\n BadGateway,\r\n ServiceUnavailable,\r\n GatewayTimeout,\r\n RequestTimeout,\r\n TooManyRequests\r\n}\r\n\r\n/** @public */\r\nexport namespace RpcRequestStatus { // eslint-disable-line @typescript-eslint/no-redeclare\r\n export function isTransientError(status: RpcRequestStatus) {\r\n return status === RpcRequestStatus.BadGateway || status === RpcRequestStatus.ServiceUnavailable || status === RpcRequestStatus.GatewayTimeout\r\n || status === RpcRequestStatus.RequestTimeout || status === RpcRequestStatus.TooManyRequests;\r\n }\r\n}\r\n\r\n/** RPC request event types.\r\n * @public\r\n */\r\nexport enum RpcRequestEvent {\r\n StatusChanged,\r\n PendingUpdateReceived,\r\n TransientErrorReceived\r\n}\r\n\r\n/** RPC content types.\r\n * @public\r\n */\r\nexport enum RpcContentType {\r\n Unknown,\r\n Text,\r\n Binary,\r\n Multipart,\r\n Stream,\r\n}\r\n\r\n/** Endpoints for RPC protocols.\r\n * @public\r\n */\r\nexport enum RpcEndpoint {\r\n Frontend,\r\n Backend,\r\n}\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\n/** @internal */\r\nexport const WEB_RPC_CONSTANTS = {\r\n CONTENT: \"Content-Type\",\r\n TEXT: \"text/plain\",\r\n ANY_TEXT: \"text/\",\r\n BINARY: \"application/octet-stream\",\r\n MULTIPART: \"multipart/form-data\",\r\n};\r\n"]}
|
|
@@ -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;AAE5C,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,EAAwB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,QAAQ;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,GAAG,CAAC;IAChB,OAAO,EAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAA;KAAE,CAAC;IAC7D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAChD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC;IACZ,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,QAAQ;IAClD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,kBAAkB,CAAC;IACrC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC;IACzC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAED;;GAEG;AACH,8BAAsB,iBAAkB,SAAQ,WAAW;IACzC,eAAe,UAAQ;IAEvC,+EAA+E;IAClE,yBAAyB,CAAC,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,kBAAkB;IAItF,gFAAgF;IACnE,0BAA0B,CAAC,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,kBAAkB;IAevF,iFAAiF;IAC1E,+BAA+B,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,kBAAkB;IAKvF,wEAAwE;WAC1D,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,cAAc;IAerF,4DAA4D;IAC5D,SAAgB,IAAI,EAAE,WAAW,CAAC;IAElC,sDAAsD;IAC/C,UAAU,EAAE,MAAM,CAAM;IAE/B,+CAA+C;IAC/C,SAAgB,WAAW,0BAAoB;IAE/C,2EAA2E;IAC3D,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB;
|
|
1
|
+
{"version":3,"file":"WebAppRpcProtocol.d.ts","sourceRoot":"","sources":["../../../../src/rpc/web/WebAppRpcProtocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -83,6 +83,8 @@ class WebAppRpcProtocol extends RpcProtocol_1.RpcProtocol {
|
|
|
83
83
|
case 502: return RpcConstants_1.RpcRequestStatus.BadGateway;
|
|
84
84
|
case 503: return RpcConstants_1.RpcRequestStatus.ServiceUnavailable;
|
|
85
85
|
case 504: return RpcConstants_1.RpcRequestStatus.GatewayTimeout;
|
|
86
|
+
case 408: return RpcConstants_1.RpcRequestStatus.RequestTimeout;
|
|
87
|
+
case 429: return RpcConstants_1.RpcRequestStatus.TooManyRequests;
|
|
86
88
|
default: return RpcConstants_1.RpcRequestStatus.Unknown;
|
|
87
89
|
}
|
|
88
90
|
}
|
|
@@ -97,6 +99,8 @@ class WebAppRpcProtocol extends RpcProtocol_1.RpcProtocol {
|
|
|
97
99
|
case RpcConstants_1.RpcRequestStatus.BadGateway: return 502;
|
|
98
100
|
case RpcConstants_1.RpcRequestStatus.ServiceUnavailable: return 503;
|
|
99
101
|
case RpcConstants_1.RpcRequestStatus.GatewayTimeout: return 504;
|
|
102
|
+
case RpcConstants_1.RpcRequestStatus.RequestTimeout: return 408;
|
|
103
|
+
case RpcConstants_1.RpcRequestStatus.TooManyRequests: return 429;
|
|
100
104
|
default: return 501;
|
|
101
105
|
}
|
|
102
106
|
}
|
|
@@ -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 { CommonLoggerCategory } from \"../../CommonLoggerCategory\";\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, SerializedRpcRequest } from \"../core/RpcProtocol\";\r\nimport { OpenAPIInfo, OpenAPIParameter, RpcOpenAPIDescription } from \"./OpenAPI\";\r\nimport { WebAppRpcLogging } from \"./WebAppRpcLogging\";\r\nimport { WebAppRpcRequest } from \"./WebAppRpcRequest\";\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 /** 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 let request: SerializedRpcRequest;\r\n try {\r\n request = await WebAppRpcRequest.parseRequest(this, req);\r\n } catch (error) {\r\n const message = BentleyError.getErrorMessage(error);\r\n Logger.logError(CommonLoggerCategory.RpcInterfaceBackend, `Failed to parse request: ${message}`, BentleyError.getErrorMetadata(error));\r\n res.status(400);\r\n res.send(JSON.stringify({ message, isError: true }));\r\n return;\r\n }\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 { CommonLoggerCategory } from \"../../CommonLoggerCategory\";\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, SerializedRpcRequest } from \"../core/RpcProtocol\";\r\nimport { OpenAPIInfo, OpenAPIParameter, RpcOpenAPIDescription } from \"./OpenAPI\";\r\nimport { WebAppRpcLogging } from \"./WebAppRpcLogging\";\r\nimport { WebAppRpcRequest } from \"./WebAppRpcRequest\";\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): this;\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 /** 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 let request: SerializedRpcRequest;\r\n try {\r\n request = await WebAppRpcRequest.parseRequest(this, req);\r\n } catch (error) {\r\n const message = BentleyError.getErrorMessage(error);\r\n Logger.logError(CommonLoggerCategory.RpcInterfaceBackend, `Failed to parse request: ${message}`, BentleyError.getErrorMetadata(error));\r\n res.status(400);\r\n res.send(JSON.stringify({ message, isError: true }));\r\n return;\r\n }\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 case 408: return RpcRequestStatus.RequestTimeout;\r\n case 429: return RpcRequestStatus.TooManyRequests;\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 case RpcRequestStatus.RequestTimeout: return 408;\r\n case RpcRequestStatus.TooManyRequests: return 429;\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"]}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
/** Options for Localization
|
|
5
5
|
* @public
|
|
6
6
|
*/
|
|
7
|
-
interface
|
|
7
|
+
export interface TranslationOptions {
|
|
8
8
|
/** for interpolation values */
|
|
9
9
|
[key: string]: any;
|
|
10
10
|
/**
|
|
@@ -52,16 +52,16 @@ export interface Localization {
|
|
|
52
52
|
* @returns The string corresponding to the first key that resolves.
|
|
53
53
|
* @throws Error if no keys resolve to a string.
|
|
54
54
|
*/
|
|
55
|
-
getLocalizedString(key: string | string[], options?:
|
|
55
|
+
getLocalizedString(key: string | string[], options?: TranslationOptions): string;
|
|
56
56
|
/** Similar to `getLocalizedString` but the namespace is a separate param and the key does not include the namespace.
|
|
57
57
|
* @param namespace - the namespace that identifies the particular localization file that contains the property.
|
|
58
58
|
* @param key - the key that matches a property in the JSON localization file.
|
|
59
59
|
* @returns The string corresponding to the first key that resolves.
|
|
60
60
|
* @throws Error if no keys resolve to a string.
|
|
61
61
|
*/
|
|
62
|
-
getLocalizedStringWithNamespace(namespace: string, key: string | string[], options?:
|
|
62
|
+
getLocalizedStringWithNamespace(namespace: string, key: string | string[], options?: TranslationOptions): string;
|
|
63
63
|
/** get the English string for a key. */
|
|
64
|
-
getEnglishString(namespace: string, key: string | string[], options?:
|
|
64
|
+
getEnglishString(namespace: string, key: string | string[], options?: TranslationOptions): string;
|
|
65
65
|
/** Replace all instances of `%{key}` within a string with the translations of those keys.
|
|
66
66
|
* For example:
|
|
67
67
|
* ``` ts
|
|
@@ -109,5 +109,4 @@ export declare class EmptyLocalization implements Localization {
|
|
|
109
109
|
getLanguageList(): readonly string[];
|
|
110
110
|
changeLanguage(): Promise<void>;
|
|
111
111
|
}
|
|
112
|
-
export {};
|
|
113
112
|
//# sourceMappingURL=Localization.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Localization.d.ts","sourceRoot":"","sources":["../../src/Localization.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"Localization.d.ts","sourceRoot":"","sources":["../../src/Localization.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,+BAA+B;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,CAAC,EAAE,GAAG,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC;IACjF;;;;;OAKG;IACH,+BAA+B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC;IACjH,wCAAwC;IACxC,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC;IAClG;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAE9C;;;;;;;OAOG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,gBAAgB;IAChB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,gBAAgB;IAChB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAC7D,2DAA2D;IAC3D,eAAe,IAAI,SAAS,MAAM,EAAE,CAAC;IACrC,qGAAqG;IACrG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACvC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IACjC,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IAClD,+BAA+B,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IACnF,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IACpE,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IACvC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IACxC,mBAAmB,IAAI,IAAI;IAC3B,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS;IAChD,eAAe,IAAI,SAAS,MAAM,EAAE;IAC9B,cAAc;CAC5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Localization.js","sourceRoot":"","sources":["../../src/Localization.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAmGH;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACrB,KAAK,CAAC,UAAU,KAAoB,CAAC;IACrC,kBAAkB,CAAC,GAAsB,IAAY,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG,+BAA+B,CAAC,UAAkB,EAAE,GAAsB,IAAY,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5H,gBAAgB,CAAC,UAAkB,EAAE,GAAsB,IAAY,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7G,gBAAgB,CAAC,WAAmB,IAAY,OAAO,WAAW,CAAC,CAAC,CAAC;IACrE,KAAK,CAAC,iBAAiB,KAAoB,CAAC;IAC5C,mBAAmB,KAAW,CAAC;IAC/B,mBAAmB,KAAgC,OAAO,SAAS,CAAC,CAAC,CAAC;IACtE,eAAe,KAAwB,OAAO,EAAE,CAAC,CAAC,CAAC;IACnD,KAAK,CAAC,cAAc,KAAK,CAAC;CAClC","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 Localization\r\n */\r\n\r\n/** Options for Localization\r\n * @public\r\n */\r\
|
|
1
|
+
{"version":3,"file":"Localization.js","sourceRoot":"","sources":["../../src/Localization.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAmGH;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACrB,KAAK,CAAC,UAAU,KAAoB,CAAC;IACrC,kBAAkB,CAAC,GAAsB,IAAY,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG,+BAA+B,CAAC,UAAkB,EAAE,GAAsB,IAAY,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5H,gBAAgB,CAAC,UAAkB,EAAE,GAAsB,IAAY,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7G,gBAAgB,CAAC,WAAmB,IAAY,OAAO,WAAW,CAAC,CAAC,CAAC;IACrE,KAAK,CAAC,iBAAiB,KAAoB,CAAC;IAC5C,mBAAmB,KAAW,CAAC;IAC/B,mBAAmB,KAAgC,OAAO,SAAS,CAAC,CAAC,CAAC;IACtE,eAAe,KAAwB,OAAO,EAAE,CAAC,CAAC,CAAC;IACnD,KAAK,CAAC,cAAc,KAAK,CAAC;CAClC","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 Localization\r\n */\r\n\r\n/** Options for Localization\r\n * @public\r\n */\r\nexport interface TranslationOptions {\r\n /** for interpolation values */\r\n [key: string]: any;\r\n /**\r\n * defaultValue to return if a translation was not found\r\n */\r\n defaultValue?: any;\r\n /**\r\n * count value used for plurals\r\n */\r\n count?: number;\r\n /**\r\n * used for contexts (eg. male\\female)\r\n */\r\n context?: any;\r\n /**\r\n * override languages to use\r\n */\r\n lngs?: string[];\r\n /**\r\n * override language to lookup key if not found see fallbacks for details\r\n */\r\n fallbackLng?: string;\r\n}\r\n\r\n/** The interface defining the localization requirements of [IModelApp]($frontend).\r\n * @public\r\n * @extensions\r\n */\r\nexport interface Localization {\r\n /** This method must be called and awaited before using an instance of Localization.\r\n * @param namespaces an array of namespaces to load. There must be at least one namespace, and it\r\n * becomes the default namespace.\r\n * @note IModelApp.startup calls this internally, so you should not call this method directly\r\n * except for Localization instances outside of IModelApp (e.g., for tests.)\r\n */\r\n initialize(namespaces: string[]): Promise<void>;\r\n\r\n /** Return the translated value of a key.\r\n * @param key - the key that matches a property in the JSON localization file.\r\n * @note The key includes the namespace, which identifies the particular localization file that contains the property,\r\n * followed by a colon, followed by the property in the JSON file.\r\n * For example:\r\n * ``` ts\r\n * const dataString: string = IModelApp.localization.getLocalizedString(\"iModelJs:BackgroundMap.BingDataAttribution\");\r\n * ```\r\n * assigns to dataString the string with property BackgroundMap.BingDataAttribution from the iModelJs.json localization file.\r\n * @returns The string corresponding to the first key that resolves.\r\n * @throws Error if no keys resolve to a string.\r\n */\r\n getLocalizedString(key: string | string[], options?: TranslationOptions): string;\r\n /** Similar to `getLocalizedString` but the namespace is a separate param and the key does not include the namespace.\r\n * @param namespace - the namespace that identifies the particular localization file that contains the property.\r\n * @param key - the key that matches a property in the JSON localization file.\r\n * @returns The string corresponding to the first key that resolves.\r\n * @throws Error if no keys resolve to a string.\r\n */\r\n getLocalizedStringWithNamespace(namespace: string, key: string | string[], options?: TranslationOptions): string;\r\n /** get the English string for a key. */\r\n getEnglishString(namespace: string, key: string | string[], options?: TranslationOptions): string;\r\n /** Replace all instances of `%{key}` within a string with the translations of those keys.\r\n * For example:\r\n * ``` ts\r\n * \"MyKeys\": {\r\n * \"Key1\": \"First value\",\r\n * \"Key2\": \"Second value\"\r\n * }\r\n * ```\r\n *\r\n * ``` ts\r\n * getLocalizedKeys(\"string with %{MyKeys.Key1} followed by %{MyKeys.Key2}!\"\") // returns \"string with First Value followed by Second Value!\"\r\n * ```\r\n */\r\n getLocalizedKeys(inputString: string): string;\r\n\r\n /** Register a new Namespace and return a Promise that is fulfilled when the content is loaded.\r\n * If the namespace is already registered, its Promise will be returned.\r\n * @param name - the name of the namespace.\r\n * @note - The registerNamespace method starts fetching the appropriate version of the JSON localization file from the server,\r\n * based on the current locale. To make sure that fetch is complete before performing translations from this namespace, await\r\n * fulfillment of returned Promise.\r\n * @see [Localization in iTwin.js]($docs/learning/frontend/Localization.md)\r\n */\r\n registerNamespace(namespace: string): Promise<void>;\r\n /** @internal */\r\n unregisterNamespace(namespace: string): void;\r\n /** @internal */\r\n getNamespacePromise(name: string): Promise<void> | undefined;\r\n /** Get the list of available languages for translations */\r\n getLanguageList(): readonly string[];\r\n /** Change the language for translations. This overrides the language from the browser, for tests. */\r\n changeLanguage(language: string): Promise<void>;\r\n}\r\n\r\n/** An empty [[Localization]] used if one is not provided to [IModelApp]($frontend). Does not perform localizations (merely returns the key.)\r\n * @public\r\n */\r\nexport class EmptyLocalization implements Localization {\r\n public async initialize(): Promise<void> { }\r\n public getLocalizedString(key: string | string[]): string { return typeof (key) == \"string\" ? key : key[0]; }\r\n public getLocalizedStringWithNamespace(_namespace: string, key: string | string[]): string { return this.getLocalizedString(key); }\r\n public getEnglishString(_namespace: string, key: string | string[]): string { return this.getLocalizedString(key); }\r\n public getLocalizedKeys(inputString: string): string { return inputString; }\r\n public async registerNamespace(): Promise<void> { }\r\n public unregisterNamespace(): void { }\r\n public getNamespacePromise(): Promise<void> | undefined { return undefined; }\r\n public getLanguageList(): readonly string[] { return []; }\r\n public async changeLanguage() { }\r\n}\r\n"]}
|
|
@@ -27,7 +27,7 @@ export class RpcConfiguration {
|
|
|
27
27
|
/** The target interval (in milliseconds) between connection attempts for pending RPC operation requests. */
|
|
28
28
|
this.pendingOperationRetryInterval = 10000;
|
|
29
29
|
/** The maximum number of transient faults permitted before request failure. */
|
|
30
|
-
this.transientFaultLimit =
|
|
30
|
+
this.transientFaultLimit = 4;
|
|
31
31
|
/** @internal */
|
|
32
32
|
this.routing = RpcRoutingToken.default;
|
|
33
33
|
/** The control channel for the configuration.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcConfiguration.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConfiguration.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\nimport { RpcInterface, RpcInterfaceDefinition } from \"../../RpcInterface\";\r\nimport { RpcManager } from \"../../RpcManager\";\r\nimport { RpcControlChannel } from \"./RpcControl\";\r\nimport { SerializedRpcActivity } from \"./RpcInvocation\";\r\nimport { RpcProtocol, RpcRequestFulfillment } from \"./RpcProtocol\";\r\nimport { INSTANCE } from \"./RpcRegistry\";\r\nimport { RpcRequest } from \"./RpcRequest\";\r\nimport { RpcRequestContext } from \"./RpcRequestContext\";\r\nimport { RpcRoutingToken } from \"./RpcRoutingToken\";\r\n\r\n/** @internal */\r\nexport type RpcConfigurationSupplier = (routing?: RpcRoutingToken) => { new(): RpcConfiguration }; // eslint-disable-line @typescript-eslint/prefer-function-type\r\n\r\n/** @internal */\r\nexport interface RpcRoutingMap extends RpcConfigurationSupplier { configurations: Map<number, RpcConfigurationSupplier> }\r\n\r\n/** @internal */\r\nexport namespace RpcRoutingMap {\r\n export function create(): RpcRoutingMap {\r\n const configurations = new Map();\r\n return Object.assign((routing?: RpcRoutingToken) => configurations.get(routing!.id)(), { configurations });\r\n }\r\n}\r\n\r\n/** A RpcConfiguration specifies how calls on an RPC interface will be marshalled, plus other operating parameters.\r\n * RpcConfiguration is the base class for specific configurations.\r\n * @internal\r\n */\r\nexport abstract class RpcConfiguration {\r\n /** Whether development mode is enabled.\r\n * @note This parameter determines whether developer convenience features like backend stack traces are available.\r\n */\r\n public static developmentMode: boolean = false;\r\n\r\n /** Whether frontend checks that are relevant in a cloud-hosted routing scenario are disabled. */\r\n public static disableRoutingValidation: boolean = false;\r\n\r\n /** Whether strict mode is enabled.\r\n * This parameter determines system behaviors relating to strict checking:\r\n * - Whether an error is thrown if the type marshaling system encounters an unregistered type (only in strict mode).\r\n */\r\n public static strictMode: boolean = false;\r\n\r\n /**\r\n * Whether to throw an error when the IModelRpcProps in the operation parameter list differs from the token in the URL.\r\n * @note By default, a warning is logged and the operation is allowed to proceed.\r\n * @note The parameter token is always replaced by the url token (unless RpcOperationPolicy.allowTokenMismatch is set).\r\n */\r\n public static throwOnTokenMismatch = false;\r\n\r\n /** Sets the configuration supplier for an RPC interface class. */\r\n public static assign<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, supplier: RpcConfigurationSupplier): void {\r\n const map = definition.prototype.configurationSupplier as RpcRoutingMap | undefined;\r\n if (!map || typeof (map.configurations) === \"undefined\") {\r\n definition.prototype.configurationSupplier = supplier;\r\n } else {\r\n map.configurations.set(RpcRoutingToken.default.id, supplier);\r\n }\r\n }\r\n\r\n /** Sets the configuration supplier for an RPC interface class for a given routing. */\r\n public static assignWithRouting<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, routing: RpcRoutingToken, configuration: new () => RpcConfiguration): void {\r\n if (!definition.prototype.configurationSupplier) {\r\n RpcConfiguration.assign(definition, RpcRoutingMap.create());\r\n }\r\n\r\n let map = definition.prototype.configurationSupplier as RpcRoutingMap;\r\n if (typeof (map.configurations) === \"undefined\") {\r\n const existing = map as RpcConfigurationSupplier;\r\n map = RpcRoutingMap.create();\r\n RpcConfiguration.assign(definition, map);\r\n map.configurations.set(RpcRoutingToken.default.id, existing);\r\n }\r\n\r\n const supplier = () => configuration;\r\n map.configurations.set(routing.id, supplier);\r\n }\r\n\r\n /** Obtains the instance of an RPC configuration class. */\r\n public static obtain<T extends RpcConfiguration>(configurationConstructor: new () => T): T {\r\n let instance = (configurationConstructor as any)[INSTANCE] as T;\r\n if (!instance)\r\n instance = (configurationConstructor as any)[INSTANCE] = new configurationConstructor();\r\n\r\n return instance;\r\n }\r\n\r\n /** Enables passing of application-specific context with each RPC request. */\r\n public static requestContext: RpcRequestContext = {\r\n getId: (_request: RpcRequest): string => \"\",\r\n serialize: async (request: RpcRequest): Promise<SerializedRpcActivity> => ({\r\n id: request.id,\r\n applicationId: \"\",\r\n applicationVersion: \"\",\r\n sessionId: \"\",\r\n authorization: \"\",\r\n }),\r\n };\r\n\r\n /** @internal */\r\n public attached: RpcInterfaceDefinition[] = [];\r\n\r\n /** The protocol of the configuration.\r\n * @internal\r\n */\r\n public abstract readonly protocol: RpcProtocol;\r\n\r\n /** The RPC interfaces managed by the configuration. */\r\n public abstract readonly interfaces: () => RpcInterfaceDefinition[];\r\n\r\n /** @internal */\r\n public allowAttachedInterfaces: boolean = true;\r\n\r\n /** @internal */\r\n public get attachedInterfaces(): ReadonlyArray<RpcInterfaceDefinition> { return this.attached; }\r\n\r\n /** The target interval (in milliseconds) between connection attempts for pending RPC operation requests. */\r\n public pendingOperationRetryInterval = 10000;\r\n\r\n /** The maximum number of transient faults permitted before request failure. */\r\n public transientFaultLimit = 3;\r\n\r\n /** @internal */\r\n public readonly routing: RpcRoutingToken = RpcRoutingToken.default;\r\n\r\n /** The control channel for the configuration.\r\n * @internal\r\n */\r\n public readonly controlChannel = RpcControlChannel.obtain(this);\r\n\r\n /** @internal */\r\n public attach<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>): void {\r\n if (!this.allowAttachedInterfaces) {\r\n return;\r\n }\r\n\r\n if (this.interfaces().indexOf(definition) !== -1 || this.attached.indexOf(definition) !== -1) {\r\n return;\r\n }\r\n\r\n this.attached.push(definition);\r\n RpcConfiguration.assign(definition, () => this.constructor as any);\r\n RpcManager.initializeInterface(definition);\r\n }\r\n\r\n /** Initializes the RPC interfaces managed by the configuration. */\r\n public static initializeInterfaces(configuration: RpcConfiguration) {\r\n configuration.interfaces().forEach((definition) => RpcManager.initializeInterface(definition));\r\n configuration.controlChannel.initialize();\r\n }\r\n\r\n /** @internal */\r\n public static supply(definition: RpcInterface): RpcConfiguration {\r\n return RpcConfiguration.obtain(definition.configurationSupplier ? definition.configurationSupplier(definition.routing) : RpcDefaultConfiguration);\r\n }\r\n\r\n /** @internal */\r\n public onRpcClientInitialized(definition: RpcInterfaceDefinition, client: RpcInterface): void {\r\n this.protocol.onRpcClientInitialized(definition, client);\r\n }\r\n\r\n /** @internal */\r\n public onRpcImplInitialized(definition: RpcInterfaceDefinition, impl: RpcInterface): void {\r\n this.protocol.onRpcImplInitialized(definition, impl);\r\n }\r\n\r\n /** @internal */\r\n public onRpcClientTerminated(definition: RpcInterfaceDefinition, client: RpcInterface): void {\r\n this.protocol.onRpcClientTerminated(definition, client);\r\n }\r\n\r\n /** @internal */\r\n public onRpcImplTerminated(definition: RpcInterfaceDefinition, impl: RpcInterface): void {\r\n this.protocol.onRpcImplTerminated(definition, impl);\r\n }\r\n}\r\n\r\n/** A default configuration that can be used for basic testing within a library.\r\n * @internal\r\n */\r\nexport class RpcDefaultConfiguration extends RpcConfiguration {\r\n public interfaces = () => [];\r\n public protocol: RpcProtocol = new RpcDirectProtocol(this);\r\n}\r\n\r\n/** A default protocol that can be used for basic testing within a library.\r\n * @internal\r\n */\r\nexport class RpcDirectProtocol extends RpcProtocol {\r\n public readonly requestType = RpcDirectRequest;\r\n}\r\n\r\n/** A default request type that can be used for basic testing within a library.\r\n * @internal\r\n */\r\nexport class RpcDirectRequest extends RpcRequest {\r\n public headers: Map<string, string> = new Map();\r\n public fulfillment: RpcRequestFulfillment | undefined = undefined;\r\n\r\n protected async send() {\r\n const request = await this.protocol.serialize(this);\r\n return new Promise<number>(async (resolve, reject) => {\r\n try {\r\n this.fulfillment = await this.protocol.fulfill(request);\r\n resolve(this.fulfillment.status);\r\n } catch (err) {\r\n reject(err);\r\n }\r\n });\r\n }\r\n\r\n protected setHeader(name: string, value: string): void {\r\n this.headers.set(name, value);\r\n }\r\n\r\n protected async load() {\r\n return this.fulfillment!.result;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"RpcConfiguration.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConfiguration.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\nimport { RpcInterface, RpcInterfaceDefinition } from \"../../RpcInterface\";\r\nimport { RpcManager } from \"../../RpcManager\";\r\nimport { RpcControlChannel } from \"./RpcControl\";\r\nimport { SerializedRpcActivity } from \"./RpcInvocation\";\r\nimport { RpcProtocol, RpcRequestFulfillment } from \"./RpcProtocol\";\r\nimport { INSTANCE } from \"./RpcRegistry\";\r\nimport { RpcRequest } from \"./RpcRequest\";\r\nimport { RpcRequestContext } from \"./RpcRequestContext\";\r\nimport { RpcRoutingToken } from \"./RpcRoutingToken\";\r\n\r\n/** @internal */\r\nexport type RpcConfigurationSupplier = (routing?: RpcRoutingToken) => { new(): RpcConfiguration }; // eslint-disable-line @typescript-eslint/prefer-function-type\r\n\r\n/** @internal */\r\nexport interface RpcRoutingMap extends RpcConfigurationSupplier { configurations: Map<number, RpcConfigurationSupplier> }\r\n\r\n/** @internal */\r\nexport namespace RpcRoutingMap {\r\n export function create(): RpcRoutingMap {\r\n const configurations = new Map();\r\n return Object.assign((routing?: RpcRoutingToken) => configurations.get(routing!.id)(), { configurations });\r\n }\r\n}\r\n\r\n/** A RpcConfiguration specifies how calls on an RPC interface will be marshalled, plus other operating parameters.\r\n * RpcConfiguration is the base class for specific configurations.\r\n * @internal\r\n */\r\nexport abstract class RpcConfiguration {\r\n /** Whether development mode is enabled.\r\n * @note This parameter determines whether developer convenience features like backend stack traces are available.\r\n */\r\n public static developmentMode: boolean = false;\r\n\r\n /** Whether frontend checks that are relevant in a cloud-hosted routing scenario are disabled. */\r\n public static disableRoutingValidation: boolean = false;\r\n\r\n /** Whether strict mode is enabled.\r\n * This parameter determines system behaviors relating to strict checking:\r\n * - Whether an error is thrown if the type marshaling system encounters an unregistered type (only in strict mode).\r\n */\r\n public static strictMode: boolean = false;\r\n\r\n /**\r\n * Whether to throw an error when the IModelRpcProps in the operation parameter list differs from the token in the URL.\r\n * @note By default, a warning is logged and the operation is allowed to proceed.\r\n * @note The parameter token is always replaced by the url token (unless RpcOperationPolicy.allowTokenMismatch is set).\r\n */\r\n public static throwOnTokenMismatch = false;\r\n\r\n /** Sets the configuration supplier for an RPC interface class. */\r\n public static assign<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, supplier: RpcConfigurationSupplier): void {\r\n const map = definition.prototype.configurationSupplier as RpcRoutingMap | undefined;\r\n if (!map || typeof (map.configurations) === \"undefined\") {\r\n definition.prototype.configurationSupplier = supplier;\r\n } else {\r\n map.configurations.set(RpcRoutingToken.default.id, supplier);\r\n }\r\n }\r\n\r\n /** Sets the configuration supplier for an RPC interface class for a given routing. */\r\n public static assignWithRouting<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>, routing: RpcRoutingToken, configuration: new () => RpcConfiguration): void {\r\n if (!definition.prototype.configurationSupplier) {\r\n RpcConfiguration.assign(definition, RpcRoutingMap.create());\r\n }\r\n\r\n let map = definition.prototype.configurationSupplier as RpcRoutingMap;\r\n if (typeof (map.configurations) === \"undefined\") {\r\n const existing = map as RpcConfigurationSupplier;\r\n map = RpcRoutingMap.create();\r\n RpcConfiguration.assign(definition, map);\r\n map.configurations.set(RpcRoutingToken.default.id, existing);\r\n }\r\n\r\n const supplier = () => configuration;\r\n map.configurations.set(routing.id, supplier);\r\n }\r\n\r\n /** Obtains the instance of an RPC configuration class. */\r\n public static obtain<T extends RpcConfiguration>(configurationConstructor: new () => T): T {\r\n let instance = (configurationConstructor as any)[INSTANCE] as T;\r\n if (!instance)\r\n instance = (configurationConstructor as any)[INSTANCE] = new configurationConstructor();\r\n\r\n return instance;\r\n }\r\n\r\n /** Enables passing of application-specific context with each RPC request. */\r\n public static requestContext: RpcRequestContext = {\r\n getId: (_request: RpcRequest): string => \"\",\r\n serialize: async (request: RpcRequest): Promise<SerializedRpcActivity> => ({\r\n id: request.id,\r\n applicationId: \"\",\r\n applicationVersion: \"\",\r\n sessionId: \"\",\r\n authorization: \"\",\r\n }),\r\n };\r\n\r\n /** @internal */\r\n public attached: RpcInterfaceDefinition[] = [];\r\n\r\n /** The protocol of the configuration.\r\n * @internal\r\n */\r\n public abstract readonly protocol: RpcProtocol;\r\n\r\n /** The RPC interfaces managed by the configuration. */\r\n public abstract readonly interfaces: () => RpcInterfaceDefinition[];\r\n\r\n /** @internal */\r\n public allowAttachedInterfaces: boolean = true;\r\n\r\n /** @internal */\r\n public get attachedInterfaces(): ReadonlyArray<RpcInterfaceDefinition> { return this.attached; }\r\n\r\n /** The target interval (in milliseconds) between connection attempts for pending RPC operation requests. */\r\n public pendingOperationRetryInterval = 10000;\r\n\r\n /** The maximum number of transient faults permitted before request failure. */\r\n public transientFaultLimit = 4;\r\n\r\n /** @internal */\r\n public readonly routing: RpcRoutingToken = RpcRoutingToken.default;\r\n\r\n /** The control channel for the configuration.\r\n * @internal\r\n */\r\n public readonly controlChannel = RpcControlChannel.obtain(this);\r\n\r\n /** @internal */\r\n public attach<T extends RpcInterface>(definition: RpcInterfaceDefinition<T>): void {\r\n if (!this.allowAttachedInterfaces) {\r\n return;\r\n }\r\n\r\n if (this.interfaces().indexOf(definition) !== -1 || this.attached.indexOf(definition) !== -1) {\r\n return;\r\n }\r\n\r\n this.attached.push(definition);\r\n RpcConfiguration.assign(definition, () => this.constructor as any);\r\n RpcManager.initializeInterface(definition);\r\n }\r\n\r\n /** Initializes the RPC interfaces managed by the configuration. */\r\n public static initializeInterfaces(configuration: RpcConfiguration) {\r\n configuration.interfaces().forEach((definition) => RpcManager.initializeInterface(definition));\r\n configuration.controlChannel.initialize();\r\n }\r\n\r\n /** @internal */\r\n public static supply(definition: RpcInterface): RpcConfiguration {\r\n return RpcConfiguration.obtain(definition.configurationSupplier ? definition.configurationSupplier(definition.routing) : RpcDefaultConfiguration);\r\n }\r\n\r\n /** @internal */\r\n public onRpcClientInitialized(definition: RpcInterfaceDefinition, client: RpcInterface): void {\r\n this.protocol.onRpcClientInitialized(definition, client);\r\n }\r\n\r\n /** @internal */\r\n public onRpcImplInitialized(definition: RpcInterfaceDefinition, impl: RpcInterface): void {\r\n this.protocol.onRpcImplInitialized(definition, impl);\r\n }\r\n\r\n /** @internal */\r\n public onRpcClientTerminated(definition: RpcInterfaceDefinition, client: RpcInterface): void {\r\n this.protocol.onRpcClientTerminated(definition, client);\r\n }\r\n\r\n /** @internal */\r\n public onRpcImplTerminated(definition: RpcInterfaceDefinition, impl: RpcInterface): void {\r\n this.protocol.onRpcImplTerminated(definition, impl);\r\n }\r\n}\r\n\r\n/** A default configuration that can be used for basic testing within a library.\r\n * @internal\r\n */\r\nexport class RpcDefaultConfiguration extends RpcConfiguration {\r\n public interfaces = () => [];\r\n public protocol: RpcProtocol = new RpcDirectProtocol(this);\r\n}\r\n\r\n/** A default protocol that can be used for basic testing within a library.\r\n * @internal\r\n */\r\nexport class RpcDirectProtocol extends RpcProtocol {\r\n public readonly requestType = RpcDirectRequest;\r\n}\r\n\r\n/** A default request type that can be used for basic testing within a library.\r\n * @internal\r\n */\r\nexport class RpcDirectRequest extends RpcRequest {\r\n public headers: Map<string, string> = new Map();\r\n public fulfillment: RpcRequestFulfillment | undefined = undefined;\r\n\r\n protected async send() {\r\n const request = await this.protocol.serialize(this);\r\n return new Promise<number>(async (resolve, reject) => {\r\n try {\r\n this.fulfillment = await this.protocol.fulfill(request);\r\n resolve(this.fulfillment.status);\r\n } catch (err) {\r\n reject(err);\r\n }\r\n });\r\n }\r\n\r\n protected setHeader(name: string, value: string): void {\r\n this.headers.set(name, value);\r\n }\r\n\r\n protected async load() {\r\n return this.fulfillment!.result;\r\n }\r\n}\r\n"]}
|
|
@@ -42,7 +42,9 @@ export declare enum RpcRequestStatus {
|
|
|
42
42
|
NoContent = 9,
|
|
43
43
|
BadGateway = 10,
|
|
44
44
|
ServiceUnavailable = 11,
|
|
45
|
-
GatewayTimeout = 12
|
|
45
|
+
GatewayTimeout = 12,
|
|
46
|
+
RequestTimeout = 13,
|
|
47
|
+
TooManyRequests = 14
|
|
46
48
|
}
|
|
47
49
|
/** @public */
|
|
48
50
|
export declare namespace RpcRequestStatus {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcConstants.d.ts","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConstants.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH;;GAEG;AACH,oBAAY,uBAAuB;IACjC,IAAI,IAAA;IACJ,SAAS,IAAA;CACV;AAED;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,cAAc,IAAA;IACd,cAAc,IAAA;IACd,eAAe,IAAA;IACf,uBAAuB,IAAA;IACvB,oBAAoB,IAAA;IACpB,oBAAoB,IAAA;IACpB,iBAAiB,IAAA;IACjB,eAAe,IAAA;IACf,sBAAsB,IAAA;IACtB,sBAAsB,IAAA;IACtB,uBAAuB,KAAA;IACvB,oBAAoB,KAAA;IACpB,wBAAwB,KAAA;CACzB;AAED;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,OAAO,IAAA;IACP,OAAO,IAAA;IACP,SAAS,IAAA;IACT,OAAO,IAAA;IACP,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,SAAS,IAAA;IACT,SAAS,IAAA;IACT,UAAU,KAAA;IACV,kBAAkB,KAAA;IAClB,cAAc,KAAA;
|
|
1
|
+
{"version":3,"file":"RpcConstants.d.ts","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConstants.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH;;GAEG;AACH,oBAAY,uBAAuB;IACjC,IAAI,IAAA;IACJ,SAAS,IAAA;CACV;AAED;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,cAAc,IAAA;IACd,cAAc,IAAA;IACd,eAAe,IAAA;IACf,uBAAuB,IAAA;IACvB,oBAAoB,IAAA;IACpB,oBAAoB,IAAA;IACpB,iBAAiB,IAAA;IACjB,eAAe,IAAA;IACf,sBAAsB,IAAA;IACtB,sBAAsB,IAAA;IACtB,uBAAuB,KAAA;IACvB,oBAAoB,KAAA;IACpB,wBAAwB,KAAA;CACzB;AAED;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,OAAO,IAAA;IACP,OAAO,IAAA;IACP,SAAS,IAAA;IACT,OAAO,IAAA;IACP,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,SAAS,IAAA;IACT,SAAS,IAAA;IACT,UAAU,KAAA;IACV,kBAAkB,KAAA;IAClB,cAAc,KAAA;IACd,cAAc,KAAA;IACd,eAAe,KAAA;CAChB;AAED,cAAc;AACd,yBAAiB,gBAAgB,CAAC;IAChC,SAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,WAGxD;CACF;AAED;;GAEG;AACH,oBAAY,eAAe;IACzB,aAAa,IAAA;IACb,qBAAqB,IAAA;IACrB,sBAAsB,IAAA;CACvB;AAED;;GAEG;AACH,oBAAY,cAAc;IACxB,OAAO,IAAA;IACP,IAAI,IAAA;IACJ,MAAM,IAAA;IACN,SAAS,IAAA;IACT,MAAM,IAAA;CACP;AAED;;GAEG;AACH,oBAAY,WAAW;IACrB,QAAQ,IAAA;IACR,OAAO,IAAA;CACR;AAID,gBAAgB;AAChB,eAAO,MAAM,iBAAiB;;;;;;CAM7B,CAAC"}
|
|
@@ -50,11 +50,14 @@ export var RpcRequestStatus;
|
|
|
50
50
|
RpcRequestStatus[RpcRequestStatus["BadGateway"] = 10] = "BadGateway";
|
|
51
51
|
RpcRequestStatus[RpcRequestStatus["ServiceUnavailable"] = 11] = "ServiceUnavailable";
|
|
52
52
|
RpcRequestStatus[RpcRequestStatus["GatewayTimeout"] = 12] = "GatewayTimeout";
|
|
53
|
+
RpcRequestStatus[RpcRequestStatus["RequestTimeout"] = 13] = "RequestTimeout";
|
|
54
|
+
RpcRequestStatus[RpcRequestStatus["TooManyRequests"] = 14] = "TooManyRequests";
|
|
53
55
|
})(RpcRequestStatus || (RpcRequestStatus = {}));
|
|
54
56
|
/** @public */
|
|
55
57
|
(function (RpcRequestStatus) {
|
|
56
58
|
function isTransientError(status) {
|
|
57
|
-
return status === RpcRequestStatus.BadGateway || status === RpcRequestStatus.ServiceUnavailable || status === RpcRequestStatus.GatewayTimeout
|
|
59
|
+
return status === RpcRequestStatus.BadGateway || status === RpcRequestStatus.ServiceUnavailable || status === RpcRequestStatus.GatewayTimeout
|
|
60
|
+
|| status === RpcRequestStatus.RequestTimeout || status === RpcRequestStatus.TooManyRequests;
|
|
58
61
|
}
|
|
59
62
|
RpcRequestStatus.isTransientError = isTransientError;
|
|
60
63
|
})(RpcRequestStatus || (RpcRequestStatus = {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcConstants.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConstants.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,uBAGX;AAHD,WAAY,uBAAuB;IACjC,qEAAI,CAAA;IACJ,+EAAS,CAAA;AACX,CAAC,EAHW,uBAAuB,KAAvB,uBAAuB,QAGlC;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,gBAcX;AAdD,WAAY,gBAAgB;IAC1B,2EAAc,CAAA;IACd,2EAAc,CAAA;IACd,6EAAe,CAAA;IACf,6FAAuB,CAAA;IACvB,uFAAoB,CAAA;IACpB,uFAAoB,CAAA;IACpB,iFAAiB,CAAA;IACjB,6EAAe,CAAA;IACf,2FAAsB,CAAA;IACtB,2FAAsB,CAAA;IACtB,8FAAuB,CAAA;IACvB,wFAAoB,CAAA;IACpB,gGAAwB,CAAA;AAC1B,CAAC,EAdW,gBAAgB,KAAhB,gBAAgB,QAc3B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"RpcConstants.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcConstants.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,uBAGX;AAHD,WAAY,uBAAuB;IACjC,qEAAI,CAAA;IACJ,+EAAS,CAAA;AACX,CAAC,EAHW,uBAAuB,KAAvB,uBAAuB,QAGlC;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,gBAcX;AAdD,WAAY,gBAAgB;IAC1B,2EAAc,CAAA;IACd,2EAAc,CAAA;IACd,6EAAe,CAAA;IACf,6FAAuB,CAAA;IACvB,uFAAoB,CAAA;IACpB,uFAAoB,CAAA;IACpB,iFAAiB,CAAA;IACjB,6EAAe,CAAA;IACf,2FAAsB,CAAA;IACtB,2FAAsB,CAAA;IACtB,8FAAuB,CAAA;IACvB,wFAAoB,CAAA;IACpB,gGAAwB,CAAA;AAC1B,CAAC,EAdW,gBAAgB,KAAhB,gBAAgB,QAc3B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,gBAgBX;AAhBD,WAAY,gBAAgB;IAC1B,6DAAO,CAAA;IACP,6DAAO,CAAA;IACP,iEAAS,CAAA;IACT,6DAAO,CAAA;IACP,+DAAQ,CAAA;IACR,+DAAQ,CAAA;IACR,+DAAQ,CAAA;IACR,+DAAQ,CAAA;IACR,iEAAS,CAAA;IACT,iEAAS,CAAA;IACT,oEAAU,CAAA;IACV,oFAAkB,CAAA;IAClB,4EAAc,CAAA;IACd,4EAAc,CAAA;IACd,8EAAe,CAAA;AACjB,CAAC,EAhBW,gBAAgB,KAAhB,gBAAgB,QAgB3B;AAED,cAAc;AACd,WAAiB,gBAAgB;IAC/B,SAAgB,gBAAgB,CAAC,MAAwB;QACvD,OAAO,MAAM,KAAK,gBAAgB,CAAC,UAAU,IAAI,MAAM,KAAK,gBAAgB,CAAC,kBAAkB,IAAI,MAAM,KAAK,gBAAgB,CAAC,cAAc;eACvI,MAAM,KAAK,gBAAgB,CAAC,cAAc,IAAI,MAAM,KAAK,gBAAgB,CAAC,eAAe,CAAC;IAClG,CAAC;IAHe,iCAAgB,mBAG/B,CAAA;AACH,CAAC,EALgB,gBAAgB,KAAhB,gBAAgB,QAKhC;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,uEAAa,CAAA;IACb,uFAAqB,CAAA;IACrB,yFAAsB,CAAA;AACxB,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,yDAAO,CAAA;IACP,mDAAI,CAAA;IACJ,uDAAM,CAAA;IACN,6DAAS,CAAA;IACT,uDAAM,CAAA;AACR,CAAC,EANW,cAAc,KAAd,cAAc,QAMzB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,qDAAQ,CAAA;IACR,mDAAO,CAAA;AACT,CAAC,EAHW,WAAW,KAAX,WAAW,QAGtB;AAED,yDAAyD;AAEzD,gBAAgB;AAChB,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO,EAAE,cAAc;IACvB,IAAI,EAAE,YAAY;IAClB,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,0BAA0B;IAClC,SAAS,EAAE,qBAAqB;CACjC,CAAC","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\n/** Describes available options for RPC response caching.\r\n * @public\r\n */\r\nexport enum RpcResponseCacheControl {\r\n None,\r\n Immutable,\r\n}\r\n\r\n/** RPC protocol event types.\r\n * @public\r\n */\r\nexport enum RpcProtocolEvent {\r\n RequestCreated,\r\n ResponseLoaded,\r\n ResponseLoading,\r\n ConnectionErrorReceived,\r\n UnknownErrorReceived,\r\n BackendErrorReceived,\r\n ConnectionAborted,\r\n RequestReceived,\r\n BackendResponseCreated,\r\n BackendReportedPending,\r\n BackendReportedNotFound,\r\n BackendErrorOccurred,\r\n BackendReportedNoContent,\r\n}\r\n\r\n/** The status of an RPC operation request.\r\n * @public\r\n */\r\nexport enum RpcRequestStatus {\r\n Unknown,\r\n Created,\r\n Submitted,\r\n Pending,\r\n Resolved,\r\n Rejected,\r\n Disposed,\r\n NotFound,\r\n Cancelled,\r\n NoContent,\r\n BadGateway,\r\n ServiceUnavailable,\r\n GatewayTimeout,\r\n RequestTimeout,\r\n TooManyRequests\r\n}\r\n\r\n/** @public */\r\nexport namespace RpcRequestStatus { // eslint-disable-line @typescript-eslint/no-redeclare\r\n export function isTransientError(status: RpcRequestStatus) {\r\n return status === RpcRequestStatus.BadGateway || status === RpcRequestStatus.ServiceUnavailable || status === RpcRequestStatus.GatewayTimeout\r\n || status === RpcRequestStatus.RequestTimeout || status === RpcRequestStatus.TooManyRequests;\r\n }\r\n}\r\n\r\n/** RPC request event types.\r\n * @public\r\n */\r\nexport enum RpcRequestEvent {\r\n StatusChanged,\r\n PendingUpdateReceived,\r\n TransientErrorReceived\r\n}\r\n\r\n/** RPC content types.\r\n * @public\r\n */\r\nexport enum RpcContentType {\r\n Unknown,\r\n Text,\r\n Binary,\r\n Multipart,\r\n Stream,\r\n}\r\n\r\n/** Endpoints for RPC protocols.\r\n * @public\r\n */\r\nexport enum RpcEndpoint {\r\n Frontend,\r\n Backend,\r\n}\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\n/** @internal */\r\nexport const WEB_RPC_CONSTANTS = {\r\n CONTENT: \"Content-Type\",\r\n TEXT: \"text/plain\",\r\n ANY_TEXT: \"text/\",\r\n BINARY: \"application/octet-stream\",\r\n MULTIPART: \"multipart/form-data\",\r\n};\r\n"]}
|
|
@@ -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;AAE5C,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,EAAwB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAEjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,QAAQ;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,GAAG,CAAC;IAChB,OAAO,EAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAA;KAAE,CAAC;IAC7D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAChD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC;IACZ,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,QAAQ;IAClD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,kBAAkB,CAAC;IACrC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAAC;IACzC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAED;;GAEG;AACH,8BAAsB,iBAAkB,SAAQ,WAAW;IACzC,eAAe,UAAQ;IAEvC,+EAA+E;IAClE,yBAAyB,CAAC,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,kBAAkB;IAItF,gFAAgF;IACnE,0BAA0B,CAAC,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,kBAAkB;IAevF,iFAAiF;IAC1E,+BAA+B,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,kBAAkB;IAKvF,wEAAwE;WAC1D,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,cAAc;IAerF,4DAA4D;IAC5D,SAAgB,IAAI,EAAE,WAAW,CAAC;IAElC,sDAAsD;IAC/C,UAAU,EAAE,MAAM,CAAM;IAE/B,+CAA+C;IAC/C,SAAgB,WAAW,0BAAoB;IAE/C,2EAA2E;IAC3D,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB;
|
|
1
|
+
{"version":3,"file":"WebAppRpcProtocol.d.ts","sourceRoot":"","sources":["../../../../src/rpc/web/WebAppRpcProtocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -80,6 +80,8 @@ export class WebAppRpcProtocol extends RpcProtocol {
|
|
|
80
80
|
case 502: return RpcRequestStatus.BadGateway;
|
|
81
81
|
case 503: return RpcRequestStatus.ServiceUnavailable;
|
|
82
82
|
case 504: return RpcRequestStatus.GatewayTimeout;
|
|
83
|
+
case 408: return RpcRequestStatus.RequestTimeout;
|
|
84
|
+
case 429: return RpcRequestStatus.TooManyRequests;
|
|
83
85
|
default: return RpcRequestStatus.Unknown;
|
|
84
86
|
}
|
|
85
87
|
}
|
|
@@ -94,6 +96,8 @@ export class WebAppRpcProtocol extends RpcProtocol {
|
|
|
94
96
|
case RpcRequestStatus.BadGateway: return 502;
|
|
95
97
|
case RpcRequestStatus.ServiceUnavailable: return 503;
|
|
96
98
|
case RpcRequestStatus.GatewayTimeout: return 504;
|
|
99
|
+
case RpcRequestStatus.RequestTimeout: return 408;
|
|
100
|
+
case RpcRequestStatus.TooManyRequests: return 429;
|
|
97
101
|
default: return 501;
|
|
98
102
|
}
|
|
99
103
|
}
|
|
@@ -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 { CommonLoggerCategory } from \"../../CommonLoggerCategory\";\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, SerializedRpcRequest } from \"../core/RpcProtocol\";\r\nimport { OpenAPIInfo, OpenAPIParameter, RpcOpenAPIDescription } from \"./OpenAPI\";\r\nimport { WebAppRpcLogging } from \"./WebAppRpcLogging\";\r\nimport { WebAppRpcRequest } from \"./WebAppRpcRequest\";\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 /** 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 let request: SerializedRpcRequest;\r\n try {\r\n request = await WebAppRpcRequest.parseRequest(this, req);\r\n } catch (error) {\r\n const message = BentleyError.getErrorMessage(error);\r\n Logger.logError(CommonLoggerCategory.RpcInterfaceBackend, `Failed to parse request: ${message}`, BentleyError.getErrorMetadata(error));\r\n res.status(400);\r\n res.send(JSON.stringify({ message, isError: true }));\r\n return;\r\n }\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 { CommonLoggerCategory } from \"../../CommonLoggerCategory\";\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, SerializedRpcRequest } from \"../core/RpcProtocol\";\r\nimport { OpenAPIInfo, OpenAPIParameter, RpcOpenAPIDescription } from \"./OpenAPI\";\r\nimport { WebAppRpcLogging } from \"./WebAppRpcLogging\";\r\nimport { WebAppRpcRequest } from \"./WebAppRpcRequest\";\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): this;\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 /** 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 let request: SerializedRpcRequest;\r\n try {\r\n request = await WebAppRpcRequest.parseRequest(this, req);\r\n } catch (error) {\r\n const message = BentleyError.getErrorMessage(error);\r\n Logger.logError(CommonLoggerCategory.RpcInterfaceBackend, `Failed to parse request: ${message}`, BentleyError.getErrorMetadata(error));\r\n res.status(400);\r\n res.send(JSON.stringify({ message, isError: true }));\r\n return;\r\n }\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 case 408: return RpcRequestStatus.RequestTimeout;\r\n case 429: return RpcRequestStatus.TooManyRequests;\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 case RpcRequestStatus.RequestTimeout: return 408;\r\n case RpcRequestStatus.TooManyRequests: return 429;\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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/core-common",
|
|
3
|
-
"version": "3.4.0-dev.
|
|
3
|
+
"version": "3.4.0-dev.46",
|
|
4
4
|
"description": "iTwin.js components common to frontend and backend",
|
|
5
5
|
"main": "lib/cjs/core-common.js",
|
|
6
6
|
"module": "lib/esm/core-common.js",
|
|
@@ -29,18 +29,18 @@
|
|
|
29
29
|
"js-base64": "^3.6.1"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
|
-
"@itwin/core-bentley": "^3.4.0-dev.
|
|
33
|
-
"@itwin/core-geometry": "^3.4.0-dev.
|
|
32
|
+
"@itwin/core-bentley": "^3.4.0-dev.46",
|
|
33
|
+
"@itwin/core-geometry": "^3.4.0-dev.46"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@itwin/build-tools": "3.4.0-dev.
|
|
37
|
-
"@itwin/core-bentley": "3.4.0-dev.
|
|
38
|
-
"@itwin/core-geometry": "3.4.0-dev.
|
|
39
|
-
"@itwin/eslint-plugin": "3.4.0-dev.
|
|
36
|
+
"@itwin/build-tools": "3.4.0-dev.46",
|
|
37
|
+
"@itwin/core-bentley": "3.4.0-dev.46",
|
|
38
|
+
"@itwin/core-geometry": "3.4.0-dev.46",
|
|
39
|
+
"@itwin/eslint-plugin": "3.4.0-dev.46",
|
|
40
40
|
"@types/chai": "4.3.1",
|
|
41
41
|
"@types/flatbuffers": "~1.10.0",
|
|
42
42
|
"@types/mocha": "^8.2.2",
|
|
43
|
-
"@types/node": "16.11.
|
|
43
|
+
"@types/node": "16.11.59",
|
|
44
44
|
"@types/semver": "7.3.10",
|
|
45
45
|
"chai": "^4.1.2",
|
|
46
46
|
"eslint": "^7.11.0",
|