@itwin/core-common 4.8.0-dev.10 → 4.8.0-dev.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,13 @@
1
1
  # Change Log - @itwin/core-common
2
2
 
3
- This log was last generated on Thu, 13 Jun 2024 22:48:58 GMT and should not be manually modified.
3
+ This log was last generated on Sat, 22 Jun 2024 01:11:18 GMT and should not be manually modified.
4
+
5
+ ## 4.7.2
6
+ Sat, 22 Jun 2024 01:09:54 GMT
7
+
8
+ ### Updates
9
+
10
+ - Fixed planar masks when using new tiles
4
11
 
5
12
  ## 4.7.1
6
13
  Thu, 13 Jun 2024 22:47:31 GMT
@@ -16,6 +16,43 @@ export type IModelErrorNumber = IModelStatus | DbResult | BentleyStatus | Briefc
16
16
  export declare class IModelError extends BentleyError {
17
17
  constructor(errorNumber: IModelErrorNumber | number, message: string, getMetaData?: LoggingMetaData);
18
18
  }
19
+ /** The state of a lock. See [Acquiring locks on elements.]($docs/learning/backend/ConcurrencyControl.md#acquiring-locks-on-elements).
20
+ * @public
21
+ */
22
+ export declare enum LockState {
23
+ /** The element is not locked */
24
+ None = 0,
25
+ /** Holding a shared lock on an element blocks other users from acquiring the Exclusive lock it. More than one user may acquire the shared lock. */
26
+ Shared = 1,
27
+ /** A Lock that permits modifications to an element and blocks other users from making modifications to it.
28
+ * Holding an exclusive lock on an "owner" (a model or a parent element), implicitly exclusively locks all its members.
29
+ */
30
+ Exclusive = 2
31
+ }
32
+ /** Detailed information about a particular object Lock that is causing the Lock update conflict.
33
+ * An example of a lock update conflict would be attempting to use [LockControl.acquireLocks]($backend) on an object that is already locked by another Briefcase.
34
+ * @public
35
+ */
36
+ export interface ConflictingLock {
37
+ /** Id of the object that is causing conflict. */
38
+ objectId: string;
39
+ /**
40
+ * The level of conflicting lock. Possible values are {@link LockState.Shared}, {@link LockState.Exclusive}.
41
+ * See {@link LockState}.
42
+ */
43
+ state: LockState;
44
+ /** An array of Briefcase ids that hold this lock. */
45
+ briefcaseIds: number[];
46
+ }
47
+ /**
48
+ * An error raised when there is a lock conflict detected.
49
+ * Typically this error would be thrown by [LockControl.acquireLocks]($backend) when you are requesting a lock on an element that is already held by another briefcase.
50
+ * @public
51
+ */
52
+ export declare class ConflictingLocksError extends IModelError {
53
+ conflictingLocks?: ConflictingLock[];
54
+ constructor(message: string, getMetaData?: LoggingMetaData, conflictingLocks?: ConflictingLock[]);
55
+ }
19
56
  /** @public */
20
57
  export declare class ServerError extends IModelError {
21
58
  constructor(errorNumber: number, message: string);
@@ -1 +1 @@
1
- {"version":3,"file":"IModelError.d.ts","sourceRoot":"","sources":["../../src/IModelError.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EACL,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EACvG,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,GACtF,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EAAC,mBAAmB,EAAE,WAAW,EAAE,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAE3F;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,QAAQ,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC;AAE5G;;;GAGG;AACH,qBAAa,WAAY,SAAQ,YAAY;gBACxB,WAAW,EAAE,iBAAiB,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe;CAG3G;AAED,cAAc;AACd,qBAAa,WAAY,SAAQ,WAAW;gBACvB,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAIxD;AAED,cAAc;AACd,qBAAa,kBAAmB,SAAQ,WAAW;gBAC9B,OAAO,EAAE,MAAM;CAInC;AAED,cAAc;AACd,qBAAa,YAAa,SAAQ,WAAW;gBACxB,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe;CAIrG;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,WAAW;gBAClC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe;CAGlE;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,WAAW;;CAI9C"}
1
+ {"version":3,"file":"IModelError.d.ts","sourceRoot":"","sources":["../../src/IModelError.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EACL,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAmB,YAAY,EAAE,eAAe,EACxH,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,GACtF,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EAAC,mBAAmB,EAAE,WAAW,EAAE,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAE3F;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,QAAQ,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC;AAE5G;;;GAGG;AACH,qBAAa,WAAY,SAAQ,YAAY;gBACxB,WAAW,EAAE,iBAAiB,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe;CAG3G;AAED;;GAEG;AACH,oBAAY,SAAS;IACnB,gCAAgC;IAChC,IAAI,IAAI;IACR,mJAAmJ;IACnJ,MAAM,IAAI;IACV;;OAEG;IACH,SAAS,IAAI;CACd;AAED;;;EAGE;AACF,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;SAGK;IACL,KAAK,EAAE,SAAS,CAAC;IACjB,qDAAqD;IACrD,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,WAAW;IAC7C,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;gBAChC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe,EAAE,gBAAgB,CAAC,EAAE,eAAe,EAAE;CAKjG;AAED,cAAc;AACd,qBAAa,WAAY,SAAQ,WAAW;gBACvB,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAIxD;AAED,cAAc;AACd,qBAAa,kBAAmB,SAAQ,WAAW;gBAC9B,OAAO,EAAE,MAAM;CAInC;AAED,cAAc;AACd,qBAAa,YAAa,SAAQ,WAAW;gBACxB,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe;CAIrG;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,WAAW;gBAClC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe;CAGlE;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,WAAW;;CAI9C"}
@@ -7,7 +7,7 @@
7
7
  * @module iModels
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.NoContentError = exports.ChannelConstraintError = exports.BackendError = exports.ServerTimeoutError = exports.ServerError = exports.IModelError = exports.ChangeSetStatus = exports.DbResult = exports.BriefcaseStatus = exports.IModelStatus = exports.BentleyError = exports.BentleyStatus = void 0;
10
+ exports.NoContentError = exports.ChannelConstraintError = exports.BackendError = exports.ServerTimeoutError = exports.ServerError = exports.ConflictingLocksError = exports.LockState = exports.IModelError = exports.ChangeSetStatus = exports.DbResult = exports.BriefcaseStatus = exports.IModelStatus = exports.BentleyError = exports.BentleyStatus = void 0;
11
11
  const core_bentley_1 = require("@itwin/core-bentley");
12
12
  var core_bentley_2 = require("@itwin/core-bentley");
13
13
  Object.defineProperty(exports, "BentleyStatus", { enumerable: true, get: function () { return core_bentley_2.BentleyStatus; } });
@@ -26,6 +26,32 @@ class IModelError extends core_bentley_1.BentleyError {
26
26
  }
27
27
  }
28
28
  exports.IModelError = IModelError;
29
+ /** The state of a lock. See [Acquiring locks on elements.]($docs/learning/backend/ConcurrencyControl.md#acquiring-locks-on-elements).
30
+ * @public
31
+ */
32
+ var LockState;
33
+ (function (LockState) {
34
+ /** The element is not locked */
35
+ LockState[LockState["None"] = 0] = "None";
36
+ /** Holding a shared lock on an element blocks other users from acquiring the Exclusive lock it. More than one user may acquire the shared lock. */
37
+ LockState[LockState["Shared"] = 1] = "Shared";
38
+ /** A Lock that permits modifications to an element and blocks other users from making modifications to it.
39
+ * Holding an exclusive lock on an "owner" (a model or a parent element), implicitly exclusively locks all its members.
40
+ */
41
+ LockState[LockState["Exclusive"] = 2] = "Exclusive";
42
+ })(LockState || (exports.LockState = LockState = {}));
43
+ /**
44
+ * An error raised when there is a lock conflict detected.
45
+ * Typically this error would be thrown by [LockControl.acquireLocks]($backend) when you are requesting a lock on an element that is already held by another briefcase.
46
+ * @public
47
+ */
48
+ class ConflictingLocksError extends IModelError {
49
+ constructor(message, getMetaData, conflictingLocks) {
50
+ super(core_bentley_1.IModelHubStatus.LockOwnedByAnotherBriefcase, message, getMetaData);
51
+ this.conflictingLocks = conflictingLocks;
52
+ }
53
+ }
54
+ exports.ConflictingLocksError = ConflictingLocksError;
29
55
  /** @public */
30
56
  class ServerError extends IModelError {
31
57
  constructor(errorNumber, message) {
@@ -1 +1 @@
1
- {"version":3,"file":"IModelError.js","sourceRoot":"","sources":["../../src/IModelError.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAE6B;AAE7B,oDAE6B;AAD3B,6GAAA,aAAa,OAAA;AAAE,4GAAA,YAAY,OAAA;AAAE,4GAAA,YAAY,OAAA;AAAE,+GAAA,eAAe,OAAA;AAAE,wGAAA,QAAQ,OAAA;AAAE,+GAAA,eAAe,OAAA;AAWvF;;;GAGG;AACH,MAAa,WAAY,SAAQ,2BAAY;IAC3C,YAAmB,WAAuC,EAAE,OAAe,EAAE,WAA6B;QACxG,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC3C,CAAC;CACF;AAJD,kCAIC;AAED,cAAc;AACd,MAAa,WAAY,SAAQ,WAAW;IAC1C,YAAmB,WAAmB,EAAE,OAAe;QACrD,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,iBAAiB,WAAW,GAAG,CAAC;IAC9C,CAAC;CACF;AALD,kCAKC;AAED,cAAc;AACd,MAAa,kBAAmB,SAAQ,WAAW;IACjD,YAAmB,OAAe;QAChC,KAAK,CAAC,2BAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AALD,gDAKC;AAED,cAAc;AACd,MAAa,YAAa,SAAQ,WAAW;IAC3C,YAAmB,WAAmB,EAAE,IAAY,EAAE,OAAe,EAAE,WAA6B;QAClG,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AALD,oCAKC;AAED;;;GAGG;AACH,MAAa,sBAAuB,SAAQ,WAAW;IACrD,YAAmB,OAAe,EAAE,WAA6B;QAC/D,KAAK,CAAC,+BAAgB,CAAC,0BAA0B,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC;CACF;AAJD,wDAIC;AAED;;GAEG;AACH,MAAa,cAAe,SAAQ,WAAW;IAC7C;QACE,KAAK,CAAC,2BAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAC9C,CAAC;CACF;AAJD,wCAIC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module iModels\n */\n\nimport {\n BentleyError, BentleyStatus, BriefcaseStatus, ChangeSetStatus, DbResult, IModelStatus, LoggingMetaData, RepositoryStatus,\n} from \"@itwin/core-bentley\";\n\nexport {\n BentleyStatus, BentleyError, IModelStatus, BriefcaseStatus, DbResult, ChangeSetStatus,\n} from \"@itwin/core-bentley\";\n\nexport type {GetMetaDataFunction, LogFunction, LoggingMetaData} from \"@itwin/core-bentley\";\n\n/** Numeric values for common errors produced by iTwin.js APIs, typically provided by [[IModelError]].\n * The values within each of these `enum`s are guaranteed not to conflict with one another.\n * @public\n */\nexport type IModelErrorNumber = IModelStatus | DbResult | BentleyStatus | BriefcaseStatus | ChangeSetStatus;\n\n/** The error type thrown by this module.\n * @see [[IModelErrorNumber]] for commonly-used error codes.\n * @public\n */\nexport class IModelError extends BentleyError {\n public constructor(errorNumber: IModelErrorNumber | number, message: string, getMetaData?: LoggingMetaData) {\n super(errorNumber, message, getMetaData);\n }\n}\n\n/** @public */\nexport class ServerError extends IModelError {\n public constructor(errorNumber: number, message: string) {\n super(errorNumber, message);\n this.name = `Server error (${errorNumber})`;\n }\n}\n\n/** @public */\nexport class ServerTimeoutError extends ServerError {\n public constructor(message: string) {\n super(IModelStatus.ServerTimeout, message);\n this.name = \"Server timeout error\";\n }\n}\n\n/** @public */\nexport class BackendError extends IModelError {\n public constructor(errorNumber: number, name: string, message: string, getMetaData?: LoggingMetaData) {\n super(errorNumber, message, getMetaData);\n this.name = name;\n }\n}\n\n/**\n * Channel constraint error\n * @alpha\n */\nexport class ChannelConstraintError extends IModelError {\n public constructor(message: string, getMetaData?: LoggingMetaData) {\n super(RepositoryStatus.ChannelConstraintViolation, message, getMetaData);\n }\n}\n\n/** Intended for API \"no content\" semantics where the error case should not trigger application failure monitoring systems.\n * @public\n */\nexport class NoContentError extends IModelError {\n public constructor() {\n super(IModelStatus.NoContent, \"No Content\");\n }\n}\n"]}
1
+ {"version":3,"file":"IModelError.js","sourceRoot":"","sources":["../../src/IModelError.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAE6B;AAE7B,oDAE6B;AAD3B,6GAAA,aAAa,OAAA;AAAE,4GAAA,YAAY,OAAA;AAAE,4GAAA,YAAY,OAAA;AAAE,+GAAA,eAAe,OAAA;AAAE,wGAAA,QAAQ,OAAA;AAAE,+GAAA,eAAe,OAAA;AAWvF;;;GAGG;AACH,MAAa,WAAY,SAAQ,2BAAY;IAC3C,YAAmB,WAAuC,EAAE,OAAe,EAAE,WAA6B;QACxG,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC3C,CAAC;CACF;AAJD,kCAIC;AAED;;GAEG;AACH,IAAY,SASX;AATD,WAAY,SAAS;IACnB,gCAAgC;IAChC,yCAAQ,CAAA;IACR,mJAAmJ;IACnJ,6CAAU,CAAA;IACV;;OAEG;IACH,mDAAa,CAAA;AACf,CAAC,EATW,SAAS,yBAAT,SAAS,QASpB;AAkBD;;;;GAIG;AACH,MAAa,qBAAsB,SAAQ,WAAW;IAEpD,YAAY,OAAe,EAAE,WAA6B,EAAE,gBAAoC;QAC9F,KAAK,CAAC,8BAAe,CAAC,2BAA2B,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACzE,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CAEF;AAPD,sDAOC;AAED,cAAc;AACd,MAAa,WAAY,SAAQ,WAAW;IAC1C,YAAmB,WAAmB,EAAE,OAAe;QACrD,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,iBAAiB,WAAW,GAAG,CAAC;IAC9C,CAAC;CACF;AALD,kCAKC;AAED,cAAc;AACd,MAAa,kBAAmB,SAAQ,WAAW;IACjD,YAAmB,OAAe;QAChC,KAAK,CAAC,2BAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AALD,gDAKC;AAED,cAAc;AACd,MAAa,YAAa,SAAQ,WAAW;IAC3C,YAAmB,WAAmB,EAAE,IAAY,EAAE,OAAe,EAAE,WAA6B;QAClG,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AALD,oCAKC;AAED;;;GAGG;AACH,MAAa,sBAAuB,SAAQ,WAAW;IACrD,YAAmB,OAAe,EAAE,WAA6B;QAC/D,KAAK,CAAC,+BAAgB,CAAC,0BAA0B,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC;CACF;AAJD,wDAIC;AAED;;GAEG;AACH,MAAa,cAAe,SAAQ,WAAW;IAC7C;QACE,KAAK,CAAC,2BAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAC9C,CAAC;CACF;AAJD,wCAIC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module iModels\n */\n\nimport {\n BentleyError, BentleyStatus, BriefcaseStatus, ChangeSetStatus, DbResult, IModelHubStatus, IModelStatus, LoggingMetaData, RepositoryStatus,\n} from \"@itwin/core-bentley\";\n\nexport {\n BentleyStatus, BentleyError, IModelStatus, BriefcaseStatus, DbResult, ChangeSetStatus,\n} from \"@itwin/core-bentley\";\n\nexport type {GetMetaDataFunction, LogFunction, LoggingMetaData} from \"@itwin/core-bentley\";\n\n/** Numeric values for common errors produced by iTwin.js APIs, typically provided by [[IModelError]].\n * The values within each of these `enum`s are guaranteed not to conflict with one another.\n * @public\n */\nexport type IModelErrorNumber = IModelStatus | DbResult | BentleyStatus | BriefcaseStatus | ChangeSetStatus;\n\n/** The error type thrown by this module.\n * @see [[IModelErrorNumber]] for commonly-used error codes.\n * @public\n */\nexport class IModelError extends BentleyError {\n public constructor(errorNumber: IModelErrorNumber | number, message: string, getMetaData?: LoggingMetaData) {\n super(errorNumber, message, getMetaData);\n }\n}\n\n/** The state of a lock. See [Acquiring locks on elements.]($docs/learning/backend/ConcurrencyControl.md#acquiring-locks-on-elements).\n * @public\n */\nexport enum LockState {\n /** The element is not locked */\n None = 0,\n /** Holding a shared lock on an element blocks other users from acquiring the Exclusive lock it. More than one user may acquire the shared lock. */\n Shared = 1,\n /** A Lock that permits modifications to an element and blocks other users from making modifications to it.\n * Holding an exclusive lock on an \"owner\" (a model or a parent element), implicitly exclusively locks all its members.\n */\n Exclusive = 2,\n}\n\n/** Detailed information about a particular object Lock that is causing the Lock update conflict.\n * An example of a lock update conflict would be attempting to use [LockControl.acquireLocks]($backend) on an object that is already locked by another Briefcase.\n * @public\n*/\nexport interface ConflictingLock {\n /** Id of the object that is causing conflict. */\n objectId: string;\n /**\n * The level of conflicting lock. Possible values are {@link LockState.Shared}, {@link LockState.Exclusive}.\n * See {@link LockState}.\n */\n state: LockState;\n /** An array of Briefcase ids that hold this lock. */\n briefcaseIds: number[];\n}\n\n/**\n * An error raised when there is a lock conflict detected.\n * Typically this error would be thrown by [LockControl.acquireLocks]($backend) when you are requesting a lock on an element that is already held by another briefcase.\n * @public\n */\nexport class ConflictingLocksError extends IModelError {\n public conflictingLocks?: ConflictingLock[];\n constructor(message: string, getMetaData?: LoggingMetaData, conflictingLocks?: ConflictingLock[]) {\n super(IModelHubStatus.LockOwnedByAnotherBriefcase, message, getMetaData);\n this.conflictingLocks = conflictingLocks;\n }\n\n}\n\n/** @public */\nexport class ServerError extends IModelError {\n public constructor(errorNumber: number, message: string) {\n super(errorNumber, message);\n this.name = `Server error (${errorNumber})`;\n }\n}\n\n/** @public */\nexport class ServerTimeoutError extends ServerError {\n public constructor(message: string) {\n super(IModelStatus.ServerTimeout, message);\n this.name = \"Server timeout error\";\n }\n}\n\n/** @public */\nexport class BackendError extends IModelError {\n public constructor(errorNumber: number, name: string, message: string, getMetaData?: LoggingMetaData) {\n super(errorNumber, message, getMetaData);\n this.name = name;\n }\n}\n\n/**\n * Channel constraint error\n * @alpha\n */\nexport class ChannelConstraintError extends IModelError {\n public constructor(message: string, getMetaData?: LoggingMetaData) {\n super(RepositoryStatus.ChannelConstraintViolation, message, getMetaData);\n }\n}\n\n/** Intended for API \"no content\" semantics where the error case should not trigger application failure monitoring systems.\n * @public\n */\nexport class NoContentError extends IModelError {\n public constructor() {\n super(IModelStatus.NoContent, \"No Content\");\n }\n}\n"]}
@@ -102,7 +102,7 @@ class RpcRequest {
102
102
  for (const param of this.parameters) {
103
103
  if (typeof (param) === "object" && param !== null) {
104
104
  for (const prop of Object.getOwnPropertyNames(requiredProperties)) {
105
- if (param.hasOwnProperty(prop) && typeof (param[prop]) === requiredProperties[prop]) {
105
+ if (prop in param && typeof (param[prop]) === requiredProperties[prop]) {
106
106
  return param;
107
107
  }
108
108
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RpcRequest.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcRequest.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { BeEvent, BentleyStatus, Guid } from \"@itwin/core-bentley\";\nimport { IModelRpcProps } from \"../../IModel\";\nimport { BackendError, IModelError, NoContentError } from \"../../IModelError\";\nimport { RpcInterface } from \"../../RpcInterface\";\nimport { RpcConfiguration } from \"./RpcConfiguration\";\nimport { RpcProtocolEvent, RpcRequestEvent, RpcRequestStatus, RpcResponseCacheControl } from \"./RpcConstants\";\nimport { RpcNotFoundResponse } from \"./RpcControl\";\nimport { RpcMarshaling, RpcSerializedValue } from \"./RpcMarshaling\";\nimport { RpcOperation } from \"./RpcOperation\";\nimport { RpcManagedStatus, RpcProtocol, RpcProtocolVersion } from \"./RpcProtocol\";\nimport { CURRENT_REQUEST } from \"./RpcRegistry\";\n\n/* eslint-disable @typescript-eslint/naming-convention */\n// cspell:ignore csrf\n/* eslint-disable deprecation/deprecation */\n\n/** @internal */\nexport const aggregateLoad = { lastRequest: 0, lastResponse: 0 };\n\n/** @internal */\nexport class ResponseLike implements Response {\n private _data: Promise<any>;\n public get body() { return null; }\n public async arrayBuffer(): Promise<ArrayBuffer> { return this._data; }\n public async blob(): Promise<Blob> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n public async formData(): Promise<FormData> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n public async json(): Promise<any> { return this._data; }\n public async text(): Promise<string> { return this._data; }\n public get bodyUsed() { return false; }\n public get headers(): Headers { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n public get ok(): boolean { return this.status >= 200 && this.status <= 299; }\n public get redirected() { return false; }\n public get status() { return 200; }\n public get statusText() { return \"\"; }\n public get trailer(): Promise<Headers> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n public get type(): ResponseType { return \"basic\"; }\n public get url() { return \"\"; }\n public clone() { return { ...this }; }\n\n public constructor(data: any) {\n this._data = Promise.resolve(data);\n }\n}\n\n/** Supplies an IModelRpcProps for an RPC request.\n * @internal\n */\nexport type RpcRequestTokenSupplier_T = (request: RpcRequest) => IModelRpcProps | undefined;\n\n/** Supplies the initial retry interval for an RPC request.\n * @internal\n */\nexport type RpcRequestInitialRetryIntervalSupplier_T = (configuration: RpcConfiguration) => number;\n\n/** Notification callback for an RPC request.\n * @internal\n */\nexport type RpcRequestCallback_T = (request: RpcRequest) => void;\n\n/** Determines if caching is permitted for a RPC response.\n * @internal\n */\nexport type RpcResponseCachingCallback_T = (request: RpcRequest) => RpcResponseCacheControl;\n\n/** Runtime information related to the operation load of one or more RPC interfaces.\n * @internal\n */\nexport interface RpcOperationsProfile {\n readonly lastRequest: number;\n readonly lastResponse: number;\n}\n\n/** Handles RPC request events.\n * @internal\n */\nexport type RpcRequestEventHandler = (type: RpcRequestEvent, request: RpcRequest) => void;\n\n/** Resolves \"not found\" responses for RPC requests.\n * @internal\n */\nexport type RpcRequestNotFoundHandler = (request: RpcRequest, response: RpcNotFoundResponse, resubmit: () => void, reject: (reason?: any) => void) => void;\n\nclass Cancellable<T> {\n public promise: Promise<T | undefined>;\n public cancel() { }\n\n public constructor(task: Promise<T>) {\n this.promise = new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.cancel = () => resolve(undefined);\n task.then(resolve, reject);\n });\n }\n}\n\n/** A RPC operation request.\n * @internal\n */\nexport abstract class RpcRequest<TResponse = any> {\n private static _activeRequests: Map<string, RpcRequest> = new Map();\n private _resolve: (value?: TResponse | PromiseLike<TResponse> | undefined) => void = () => undefined;\n protected _resolveRaw: (value?: Response | PromiseLike<Response> | undefined) => void = () => undefined;\n private _reject: (reason?: any) => void = () => undefined;\n private _rejectRaw: (reason?: any) => void = () => undefined;\n private _created: number = 0;\n private _lastSubmitted: number = 0;\n private _lastUpdated: number = 0;\n\n /** @internal */\n public _status: RpcRequestStatus = RpcRequestStatus.Unknown;\n\n /** @internal */\n public _extendedStatus: string = \"\";\n\n private _connecting: boolean = false;\n private _active: boolean = true;\n private _hasRawListener = false;\n private _raw: ArrayBuffer | string | undefined = undefined;\n private _sending?: Cancellable<number>;\n private _attempts = 0;\n private _retryAfter: number | null = null;\n private _transientFaults = 0;\n protected _response: Response | undefined = undefined;\n protected _rawPromise: Promise<Response | undefined>;\n public responseProtocolVersion = RpcProtocolVersion.None;\n\n /** All RPC requests that are currently in flight. */\n public static get activeRequests(): ReadonlyMap<string, RpcRequest> { return this._activeRequests; }\n\n /** Events raised by RpcRequest. See [[RpcRequestEvent]] */\n public static readonly events: BeEvent<RpcRequestEventHandler> = new BeEvent();\n\n /** Resolvers for \"not found\" requests. See [[RpcRequestNotFoundHandler]] */\n public static readonly notFoundHandlers: BeEvent<RpcRequestNotFoundHandler> = new BeEvent();\n\n /** The aggregate operations profile of all active RPC interfaces. */\n public static get aggregateLoad(): RpcOperationsProfile { return aggregateLoad; }\n\n /**\n * The request for the current RPC operation.\n * @note The return value of this function is only reliable if program control was received from a RPC interface class member function that directly returns the result of calling RpcInterface.forward.\n */\n public static current(context: RpcInterface): RpcRequest {\n return (context as any)[CURRENT_REQUEST];\n }\n\n /** The unique identifier of this request. */\n public readonly id: string;\n\n /** The operation for this request. */\n public readonly operation: RpcOperation;\n\n /** The parameters for this request. */\n public parameters: any[];\n\n /** The RPC client instance for this request. */\n public readonly client: RpcInterface;\n\n /** Convenience access to the protocol of this request. */\n public readonly protocol: RpcProtocol;\n\n /** The implementation response for this request. */\n public readonly response: Promise<TResponse | undefined>;\n\n /** The status of this request. */\n public get status() { return this._status; }\n\n /** Extended status information for this request (if available). */\n public get extendedStatus() { return this._extendedStatus; }\n\n /** The last submission for this request. */\n public get lastSubmitted() { return this._lastSubmitted; }\n\n /** The last status update received for this request. */\n public get lastUpdated() { return this._lastUpdated; }\n\n /** The target interval (in milliseconds) between submission attempts for this request. */\n public retryInterval: number;\n\n /** Whether a connection is active for this request. */\n public get connecting() { return this._connecting; }\n\n /** Whether this request is pending. */\n public get pending(): boolean {\n switch (this.status) {\n case RpcRequestStatus.Submitted:\n case RpcRequestStatus.Pending: {\n return true;\n }\n\n default: {\n return false;\n }\n }\n }\n\n /** The elapsed time for this request. */\n public get elapsed(): number {\n return this._lastUpdated - this._created;\n }\n\n /** A protocol-specific path identifier for this request. */\n public path: string;\n\n /** A protocol-specific method identifier for this request. */\n public method: string;\n\n /** An attempt-specific value for when to next retry this request. */\n public get retryAfter() { return this._retryAfter; }\n\n /** Finds the first parameter of a given structural type if present. */\n public findParameterOfType<T>(requiredProperties: { [index: string]: string }): T | undefined {\n for (const param of this.parameters) {\n if (typeof (param) === \"object\" && param !== null) {\n for (const prop of Object.getOwnPropertyNames(requiredProperties)) {\n if (param.hasOwnProperty(prop) && typeof (param[prop]) === requiredProperties[prop]) {\n return param;\n }\n }\n }\n }\n\n return undefined;\n }\n\n /** Finds the first IModelRpcProps parameter if present. */\n public findTokenPropsParameter(): IModelRpcProps | undefined {\n return this.findParameterOfType({ iModelId: \"string\" });\n\n }\n\n /** The raw implementation response for this request. */\n public get rawResponse(): Promise<Response | undefined> {\n this._hasRawListener = true;\n return this._rawPromise;\n }\n\n /** Constructs an RPC request. */\n public constructor(client: RpcInterface, operation: string, parameters: any[]) {\n this._created = new Date().getTime();\n this.path = \"\";\n this.method = \"\";\n this.client = client;\n this.protocol = client.configuration.protocol;\n this.operation = RpcOperation.lookup(client.constructor as any, operation);\n this.parameters = parameters;\n this.retryInterval = this.operation.policy.retryInterval(client.configuration);\n this.response = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n\n this._rawPromise = new Promise((resolve, reject) => {\n this._resolveRaw = resolve;\n this._rejectRaw = reject;\n });\n\n this.id = RpcConfiguration.requestContext.getId(this) || Guid.createValue();\n this.setStatus(RpcRequestStatus.Created);\n this.operation.policy.requestCallback(this);\n }\n\n /** Override to send the request. */\n protected abstract send(): Promise<number>;\n\n /** Override to load response value. */\n protected abstract load(): Promise<RpcSerializedValue>;\n\n /** Override to set request header values. */\n protected abstract setHeader(name: string, value: string): void;\n\n /** Sets the last updated time for the request. */\n protected setLastUpdatedTime() {\n this._lastUpdated = new Date().getTime();\n }\n\n protected computeRetryAfter(attempts: number) {\n return (((Math.pow(2, attempts) - 1) / 2) * 500) + 500;\n }\n\n protected recordTransientFault() {\n ++this._transientFaults;\n }\n\n protected resetTransientFaultCount() {\n this._transientFaults = 0;\n }\n\n protected supportsStatusCategory() {\n if (!this.protocol.supportsStatusCategory) {\n return false;\n }\n\n return RpcProtocol.protocolVersion >= RpcProtocolVersion.IntroducedStatusCategory && this.responseProtocolVersion >= RpcProtocolVersion.IntroducedStatusCategory;\n }\n\n /* @internal */\n public cancel() {\n if (typeof (this._sending) === \"undefined\") {\n return;\n }\n\n this._sending.cancel();\n this._sending = undefined;\n\n this._connecting = false;\n RpcRequest._activeRequests.delete(this.id);\n this.setStatus(RpcRequestStatus.Cancelled);\n }\n\n /* @internal */\n public async submit(): Promise<void> {\n if (!this._active)\n return;\n\n this._lastSubmitted = new Date().getTime();\n this._retryAfter = null;\n ++this._attempts;\n\n if (this.status === RpcRequestStatus.Created || this.status === RpcRequestStatus.NotFound || this.status === RpcRequestStatus.Cancelled) {\n this.setStatus(RpcRequestStatus.Submitted);\n }\n\n try {\n this._connecting = true;\n RpcRequest._activeRequests.set(this.id, this);\n this.protocol.events.raiseEvent(RpcProtocolEvent.RequestCreated, this);\n this._sending = new Cancellable(this.setHeaders().then(async () => this.send()));\n this.operation.policy.sentCallback(this);\n\n const response = await this._sending.promise;\n if (typeof (response) === \"undefined\") {\n return;\n }\n this._sending = undefined;\n\n const status = this.protocol.getStatus(response);\n\n if (this._hasRawListener && status === RpcRequestStatus.Resolved && typeof (this._response) !== \"undefined\") {\n this._connecting = false;\n RpcRequest._activeRequests.delete(this.id);\n this.resolveRaw();\n } else {\n this.protocol.events.raiseEvent(RpcProtocolEvent.ResponseLoading, this);\n\n if (status === RpcRequestStatus.Unknown) {\n this._connecting = false;\n RpcRequest._activeRequests.delete(this.id);\n this.handleUnknownResponse(response);\n return;\n }\n\n const value = await this.load();\n this.protocol.events.raiseEvent(RpcProtocolEvent.ResponseLoaded, this);\n RpcRequest._activeRequests.delete(this.id);\n this._connecting = false;\n this.handleResponse(response, value);\n }\n } catch (err) {\n this.protocol.events.raiseEvent(RpcProtocolEvent.ConnectionErrorReceived, this, err);\n RpcRequest._activeRequests.delete(this.id);\n this._connecting = false;\n this.reject(err);\n }\n }\n\n protected handleUnknownResponse(code: number) {\n this.reject(new IModelError(BentleyStatus.ERROR, `Unknown response ${code}.`));\n }\n\n private handleResponse(code: number, value: RpcSerializedValue) {\n const protocolStatus = this.protocol.getStatus(code);\n const status = this.transformResponseStatus(protocolStatus, value);\n\n if (RpcRequestStatus.isTransientError(status)) {\n return this.handleTransientError(status);\n }\n\n switch (status) {\n case RpcRequestStatus.Resolved: {\n return this.handleResolved(value);\n }\n\n case RpcRequestStatus.Rejected: {\n return this.handleRejected(value);\n }\n\n case RpcRequestStatus.Pending: {\n return this.setPending(status, value.objects);\n }\n\n case RpcRequestStatus.NotFound: {\n return this.handleNotFound(status, value);\n }\n\n case RpcRequestStatus.NoContent: {\n return this.handleNoContent();\n }\n }\n }\n\n private transformResponseStatus(protocolStatus: RpcRequestStatus, value: RpcSerializedValue): RpcRequestStatus {\n if (!this.supportsStatusCategory()) {\n return protocolStatus;\n }\n\n let status = protocolStatus;\n\n if (protocolStatus === RpcRequestStatus.Pending) {\n status = RpcRequestStatus.Rejected;\n } else if (protocolStatus === RpcRequestStatus.NotFound) {\n status = RpcRequestStatus.Rejected;\n } else if (protocolStatus === RpcRequestStatus.Unknown) {\n status = RpcRequestStatus.Rejected;\n }\n\n if (value.objects.indexOf(\"iTwinRpcCoreResponse\") !== -1 && value.objects.indexOf(\"managedStatus\") !== -1) {\n const managedStatus: RpcManagedStatus = JSON.parse(value.objects);\n value.objects = managedStatus.responseValue as string;\n\n if (managedStatus.managedStatus === \"pending\") {\n status = RpcRequestStatus.Pending;\n } else if (managedStatus.managedStatus === \"notFound\") {\n status = RpcRequestStatus.NotFound;\n }\n }\n\n return status;\n }\n\n private handleResolved(value: RpcSerializedValue) {\n try {\n this._raw = value.objects;\n const result: TResponse = RpcMarshaling.deserialize(this.protocol, value);\n\n if (ArrayBuffer.isView(result)) {\n this._raw = result.buffer;\n }\n\n return this.resolve(result);\n } catch (err) {\n return this.reject(err);\n }\n }\n\n private handleRejected(value: RpcSerializedValue) {\n this.protocol.events.raiseEvent(RpcProtocolEvent.BackendErrorReceived, this);\n\n try {\n const error = RpcMarshaling.deserialize(this.protocol, value);\n const hasInfo = error && typeof (error) === \"object\" && error.hasOwnProperty(\"name\") && error.hasOwnProperty(\"message\");\n const name = hasInfo ? error.name : \"\";\n const message = hasInfo ? error.message : \"\";\n const errorNumber = (hasInfo && error.hasOwnProperty(\"errorNumber\")) ? error.errorNumber : BentleyStatus.ERROR;\n return this.reject(new BackendError(errorNumber, name, message, () => error));\n } catch (err) {\n return this.reject(err);\n }\n }\n\n private handleNoContent() {\n return this.reject(new NoContentError());\n }\n\n private handleNotFound(status: RpcRequestStatus, value: RpcSerializedValue) {\n if (RpcRequest.notFoundHandlers.numberOfListeners === 0)\n this.handleRejected(value);\n\n const response = RpcMarshaling.deserialize(this.protocol, value);\n this.setStatus(status);\n\n let resubmitted = false;\n RpcRequest.notFoundHandlers.raiseEvent(this, response, () => {\n if (resubmitted)\n throw new IModelError(BentleyStatus.ERROR, `Already resubmitted using this handler.`);\n\n resubmitted = true;\n void this.submit();\n }, (reason: any) => reason ? this.reject(reason) : this.handleRejected(value));\n return;\n }\n\n private resolve(result: TResponse): void {\n if (!this._active)\n return;\n\n this._active = false;\n this.setLastUpdatedTime();\n this._resolve(result);\n\n if (this._hasRawListener) {\n if (typeof (this._raw) === \"undefined\") {\n throw new IModelError(BentleyStatus.ERROR, \"Cannot access raw response.\");\n }\n\n this._resolveRaw(new ResponseLike(this._raw));\n }\n\n this.setStatus(RpcRequestStatus.Resolved);\n this.dispose();\n }\n\n private resolveRaw() {\n if (typeof (this._response) === \"undefined\") {\n throw new IModelError(BentleyStatus.ERROR, \"Cannot access raw response.\");\n }\n\n this._active = false;\n this.setLastUpdatedTime();\n this._resolveRaw(this._response);\n this.setStatus(RpcRequestStatus.Resolved);\n this.dispose();\n }\n\n protected reject(reason: any): void {\n if (!this._active)\n return;\n\n this._active = false;\n this.setLastUpdatedTime();\n this._reject(reason);\n\n if (this._hasRawListener) {\n this._rejectRaw(reason);\n }\n\n this.setStatus(RpcRequestStatus.Rejected);\n this.dispose();\n }\n\n /** @internal */\n public dispose(): void {\n this.setStatus(RpcRequestStatus.Disposed);\n this._raw = undefined;\n this._response = undefined;\n\n const client = this.client as any;\n if (client[CURRENT_REQUEST] === this) {\n client[CURRENT_REQUEST] = undefined;\n }\n }\n\n private setPending(status: RpcRequestStatus.Pending, extendedStatus: string): void {\n if (!this._active)\n return;\n\n this.setLastUpdatedTime();\n this._extendedStatus = extendedStatus;\n this.setStatus(status);\n RpcRequest.events.raiseEvent(RpcRequestEvent.PendingUpdateReceived, this);\n }\n\n private handleTransientError(status: RpcRequestStatus) {\n if (!this._active)\n return;\n\n this.setLastUpdatedTime();\n this._retryAfter = this.computeRetryAfter(this._attempts - 1);\n\n if (this._transientFaults > this.protocol.configuration.transientFaultLimit) {\n this.reject(new IModelError(BentleyStatus.ERROR, `Exceeded transient fault limit.`));\n } else {\n this.setStatus(status);\n RpcRequest.events.raiseEvent(RpcRequestEvent.TransientErrorReceived, this);\n }\n }\n\n protected async setHeaders(): Promise<void> {\n const versionHeader = this.protocol.protocolVersionHeaderName;\n if (versionHeader && RpcProtocol.protocolVersion)\n this.setHeader(versionHeader, RpcProtocol.protocolVersion.toString());\n\n const headerNames = this.protocol.serializedClientRequestContextHeaderNames;\n const headerValues = await RpcConfiguration.requestContext.serialize(this);\n\n if (headerNames.id)\n this.setHeader(headerNames.id, headerValues.id || this.id); // Cannot be empty\n\n if (headerNames.applicationVersion)\n this.setHeader(headerNames.applicationVersion, headerValues.applicationVersion);\n\n if (headerNames.applicationId)\n this.setHeader(headerNames.applicationId, headerValues.applicationId);\n\n if (headerNames.sessionId)\n this.setHeader(headerNames.sessionId, headerValues.sessionId);\n\n if (headerNames.authorization && headerValues.authorization)\n this.setHeader(headerNames.authorization, headerValues.authorization);\n\n if (headerValues.csrfToken)\n this.setHeader(headerValues.csrfToken.headerName, headerValues.csrfToken.headerValue);\n }\n\n private setStatus(status: RpcRequestStatus): void {\n if (this._status === status)\n return;\n\n this._status = status;\n RpcRequest.events.raiseEvent(RpcRequestEvent.StatusChanged, this);\n }\n}\n\n/** @internal */\nexport const initializeRpcRequest = (() => {\n let initialized = false;\n\n return () => {\n if (initialized) {\n return;\n }\n\n initialized = true;\n\n RpcRequest.events.addListener((type, request) => {\n if (type !== RpcRequestEvent.StatusChanged)\n return;\n\n switch (request.status) {\n case RpcRequestStatus.Submitted: {\n aggregateLoad.lastRequest = request.lastSubmitted;\n break;\n }\n\n case RpcRequestStatus.Pending:\n case RpcRequestStatus.Resolved:\n case RpcRequestStatus.Rejected: {\n aggregateLoad.lastResponse = request.lastUpdated;\n break;\n }\n }\n });\n\n RpcProtocol.events.addListener((type) => {\n const now = new Date().getTime();\n\n switch (type) {\n case RpcProtocolEvent.RequestReceived: {\n aggregateLoad.lastRequest = now;\n break;\n }\n\n case RpcProtocolEvent.BackendReportedPending:\n case RpcProtocolEvent.BackendErrorOccurred:\n case RpcProtocolEvent.BackendResponseCreated: {\n aggregateLoad.lastResponse = now;\n break;\n }\n }\n });\n };\n})();\n"]}
1
+ {"version":3,"file":"RpcRequest.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcRequest.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { BeEvent, BentleyStatus, Guid } from \"@itwin/core-bentley\";\nimport { IModelRpcProps } from \"../../IModel\";\nimport { BackendError, IModelError, NoContentError } from \"../../IModelError\";\nimport { RpcInterface } from \"../../RpcInterface\";\nimport { RpcConfiguration } from \"./RpcConfiguration\";\nimport { RpcProtocolEvent, RpcRequestEvent, RpcRequestStatus, RpcResponseCacheControl } from \"./RpcConstants\";\nimport { RpcNotFoundResponse } from \"./RpcControl\";\nimport { RpcMarshaling, RpcSerializedValue } from \"./RpcMarshaling\";\nimport { RpcOperation } from \"./RpcOperation\";\nimport { RpcManagedStatus, RpcProtocol, RpcProtocolVersion } from \"./RpcProtocol\";\nimport { CURRENT_REQUEST } from \"./RpcRegistry\";\n\n/* eslint-disable @typescript-eslint/naming-convention */\n// cspell:ignore csrf\n/* eslint-disable deprecation/deprecation */\n\n/** @internal */\nexport const aggregateLoad = { lastRequest: 0, lastResponse: 0 };\n\n/** @internal */\nexport class ResponseLike implements Response {\n private _data: Promise<any>;\n public get body() { return null; }\n public async arrayBuffer(): Promise<ArrayBuffer> { return this._data; }\n public async blob(): Promise<Blob> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n public async formData(): Promise<FormData> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n public async json(): Promise<any> { return this._data; }\n public async text(): Promise<string> { return this._data; }\n public get bodyUsed() { return false; }\n public get headers(): Headers { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n public get ok(): boolean { return this.status >= 200 && this.status <= 299; }\n public get redirected() { return false; }\n public get status() { return 200; }\n public get statusText() { return \"\"; }\n public get trailer(): Promise<Headers> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n public get type(): ResponseType { return \"basic\"; }\n public get url() { return \"\"; }\n public clone() { return { ...this }; }\n\n public constructor(data: any) {\n this._data = Promise.resolve(data);\n }\n}\n\n/** Supplies an IModelRpcProps for an RPC request.\n * @internal\n */\nexport type RpcRequestTokenSupplier_T = (request: RpcRequest) => IModelRpcProps | undefined;\n\n/** Supplies the initial retry interval for an RPC request.\n * @internal\n */\nexport type RpcRequestInitialRetryIntervalSupplier_T = (configuration: RpcConfiguration) => number;\n\n/** Notification callback for an RPC request.\n * @internal\n */\nexport type RpcRequestCallback_T = (request: RpcRequest) => void;\n\n/** Determines if caching is permitted for a RPC response.\n * @internal\n */\nexport type RpcResponseCachingCallback_T = (request: RpcRequest) => RpcResponseCacheControl;\n\n/** Runtime information related to the operation load of one or more RPC interfaces.\n * @internal\n */\nexport interface RpcOperationsProfile {\n readonly lastRequest: number;\n readonly lastResponse: number;\n}\n\n/** Handles RPC request events.\n * @internal\n */\nexport type RpcRequestEventHandler = (type: RpcRequestEvent, request: RpcRequest) => void;\n\n/** Resolves \"not found\" responses for RPC requests.\n * @internal\n */\nexport type RpcRequestNotFoundHandler = (request: RpcRequest, response: RpcNotFoundResponse, resubmit: () => void, reject: (reason?: any) => void) => void;\n\nclass Cancellable<T> {\n public promise: Promise<T | undefined>;\n public cancel() { }\n\n public constructor(task: Promise<T>) {\n this.promise = new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.cancel = () => resolve(undefined);\n task.then(resolve, reject);\n });\n }\n}\n\n/** A RPC operation request.\n * @internal\n */\nexport abstract class RpcRequest<TResponse = any> {\n private static _activeRequests: Map<string, RpcRequest> = new Map();\n private _resolve: (value?: TResponse | PromiseLike<TResponse> | undefined) => void = () => undefined;\n protected _resolveRaw: (value?: Response | PromiseLike<Response> | undefined) => void = () => undefined;\n private _reject: (reason?: any) => void = () => undefined;\n private _rejectRaw: (reason?: any) => void = () => undefined;\n private _created: number = 0;\n private _lastSubmitted: number = 0;\n private _lastUpdated: number = 0;\n\n /** @internal */\n public _status: RpcRequestStatus = RpcRequestStatus.Unknown;\n\n /** @internal */\n public _extendedStatus: string = \"\";\n\n private _connecting: boolean = false;\n private _active: boolean = true;\n private _hasRawListener = false;\n private _raw: ArrayBuffer | string | undefined = undefined;\n private _sending?: Cancellable<number>;\n private _attempts = 0;\n private _retryAfter: number | null = null;\n private _transientFaults = 0;\n protected _response: Response | undefined = undefined;\n protected _rawPromise: Promise<Response | undefined>;\n public responseProtocolVersion = RpcProtocolVersion.None;\n\n /** All RPC requests that are currently in flight. */\n public static get activeRequests(): ReadonlyMap<string, RpcRequest> { return this._activeRequests; }\n\n /** Events raised by RpcRequest. See [[RpcRequestEvent]] */\n public static readonly events: BeEvent<RpcRequestEventHandler> = new BeEvent();\n\n /** Resolvers for \"not found\" requests. See [[RpcRequestNotFoundHandler]] */\n public static readonly notFoundHandlers: BeEvent<RpcRequestNotFoundHandler> = new BeEvent();\n\n /** The aggregate operations profile of all active RPC interfaces. */\n public static get aggregateLoad(): RpcOperationsProfile { return aggregateLoad; }\n\n /**\n * The request for the current RPC operation.\n * @note The return value of this function is only reliable if program control was received from a RPC interface class member function that directly returns the result of calling RpcInterface.forward.\n */\n public static current(context: RpcInterface): RpcRequest {\n return (context as any)[CURRENT_REQUEST];\n }\n\n /** The unique identifier of this request. */\n public readonly id: string;\n\n /** The operation for this request. */\n public readonly operation: RpcOperation;\n\n /** The parameters for this request. */\n public parameters: any[];\n\n /** The RPC client instance for this request. */\n public readonly client: RpcInterface;\n\n /** Convenience access to the protocol of this request. */\n public readonly protocol: RpcProtocol;\n\n /** The implementation response for this request. */\n public readonly response: Promise<TResponse | undefined>;\n\n /** The status of this request. */\n public get status() { return this._status; }\n\n /** Extended status information for this request (if available). */\n public get extendedStatus() { return this._extendedStatus; }\n\n /** The last submission for this request. */\n public get lastSubmitted() { return this._lastSubmitted; }\n\n /** The last status update received for this request. */\n public get lastUpdated() { return this._lastUpdated; }\n\n /** The target interval (in milliseconds) between submission attempts for this request. */\n public retryInterval: number;\n\n /** Whether a connection is active for this request. */\n public get connecting() { return this._connecting; }\n\n /** Whether this request is pending. */\n public get pending(): boolean {\n switch (this.status) {\n case RpcRequestStatus.Submitted:\n case RpcRequestStatus.Pending: {\n return true;\n }\n\n default: {\n return false;\n }\n }\n }\n\n /** The elapsed time for this request. */\n public get elapsed(): number {\n return this._lastUpdated - this._created;\n }\n\n /** A protocol-specific path identifier for this request. */\n public path: string;\n\n /** A protocol-specific method identifier for this request. */\n public method: string;\n\n /** An attempt-specific value for when to next retry this request. */\n public get retryAfter() { return this._retryAfter; }\n\n /** Finds the first parameter of a given structural type if present. */\n public findParameterOfType<T>(requiredProperties: { [index: string]: string }): T | undefined {\n for (const param of this.parameters) {\n if (typeof (param) === \"object\" && param !== null) {\n for (const prop of Object.getOwnPropertyNames(requiredProperties)) {\n if (prop in param && typeof (param[prop]) === requiredProperties[prop]) {\n return param;\n }\n }\n }\n }\n\n return undefined;\n }\n\n /** Finds the first IModelRpcProps parameter if present. */\n public findTokenPropsParameter(): IModelRpcProps | undefined {\n return this.findParameterOfType({ iModelId: \"string\" });\n\n }\n\n /** The raw implementation response for this request. */\n public get rawResponse(): Promise<Response | undefined> {\n this._hasRawListener = true;\n return this._rawPromise;\n }\n\n /** Constructs an RPC request. */\n public constructor(client: RpcInterface, operation: string, parameters: any[]) {\n this._created = new Date().getTime();\n this.path = \"\";\n this.method = \"\";\n this.client = client;\n this.protocol = client.configuration.protocol;\n this.operation = RpcOperation.lookup(client.constructor as any, operation);\n this.parameters = parameters;\n this.retryInterval = this.operation.policy.retryInterval(client.configuration);\n this.response = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n\n this._rawPromise = new Promise((resolve, reject) => {\n this._resolveRaw = resolve;\n this._rejectRaw = reject;\n });\n\n this.id = RpcConfiguration.requestContext.getId(this) || Guid.createValue();\n this.setStatus(RpcRequestStatus.Created);\n this.operation.policy.requestCallback(this);\n }\n\n /** Override to send the request. */\n protected abstract send(): Promise<number>;\n\n /** Override to load response value. */\n protected abstract load(): Promise<RpcSerializedValue>;\n\n /** Override to set request header values. */\n protected abstract setHeader(name: string, value: string): void;\n\n /** Sets the last updated time for the request. */\n protected setLastUpdatedTime() {\n this._lastUpdated = new Date().getTime();\n }\n\n protected computeRetryAfter(attempts: number) {\n return (((Math.pow(2, attempts) - 1) / 2) * 500) + 500;\n }\n\n protected recordTransientFault() {\n ++this._transientFaults;\n }\n\n protected resetTransientFaultCount() {\n this._transientFaults = 0;\n }\n\n protected supportsStatusCategory() {\n if (!this.protocol.supportsStatusCategory) {\n return false;\n }\n\n return RpcProtocol.protocolVersion >= RpcProtocolVersion.IntroducedStatusCategory && this.responseProtocolVersion >= RpcProtocolVersion.IntroducedStatusCategory;\n }\n\n /* @internal */\n public cancel() {\n if (typeof (this._sending) === \"undefined\") {\n return;\n }\n\n this._sending.cancel();\n this._sending = undefined;\n\n this._connecting = false;\n RpcRequest._activeRequests.delete(this.id);\n this.setStatus(RpcRequestStatus.Cancelled);\n }\n\n /* @internal */\n public async submit(): Promise<void> {\n if (!this._active)\n return;\n\n this._lastSubmitted = new Date().getTime();\n this._retryAfter = null;\n ++this._attempts;\n\n if (this.status === RpcRequestStatus.Created || this.status === RpcRequestStatus.NotFound || this.status === RpcRequestStatus.Cancelled) {\n this.setStatus(RpcRequestStatus.Submitted);\n }\n\n try {\n this._connecting = true;\n RpcRequest._activeRequests.set(this.id, this);\n this.protocol.events.raiseEvent(RpcProtocolEvent.RequestCreated, this);\n this._sending = new Cancellable(this.setHeaders().then(async () => this.send()));\n this.operation.policy.sentCallback(this);\n\n const response = await this._sending.promise;\n if (typeof (response) === \"undefined\") {\n return;\n }\n this._sending = undefined;\n\n const status = this.protocol.getStatus(response);\n\n if (this._hasRawListener && status === RpcRequestStatus.Resolved && typeof (this._response) !== \"undefined\") {\n this._connecting = false;\n RpcRequest._activeRequests.delete(this.id);\n this.resolveRaw();\n } else {\n this.protocol.events.raiseEvent(RpcProtocolEvent.ResponseLoading, this);\n\n if (status === RpcRequestStatus.Unknown) {\n this._connecting = false;\n RpcRequest._activeRequests.delete(this.id);\n this.handleUnknownResponse(response);\n return;\n }\n\n const value = await this.load();\n this.protocol.events.raiseEvent(RpcProtocolEvent.ResponseLoaded, this);\n RpcRequest._activeRequests.delete(this.id);\n this._connecting = false;\n this.handleResponse(response, value);\n }\n } catch (err) {\n this.protocol.events.raiseEvent(RpcProtocolEvent.ConnectionErrorReceived, this, err);\n RpcRequest._activeRequests.delete(this.id);\n this._connecting = false;\n this.reject(err);\n }\n }\n\n protected handleUnknownResponse(code: number) {\n this.reject(new IModelError(BentleyStatus.ERROR, `Unknown response ${code}.`));\n }\n\n private handleResponse(code: number, value: RpcSerializedValue) {\n const protocolStatus = this.protocol.getStatus(code);\n const status = this.transformResponseStatus(protocolStatus, value);\n\n if (RpcRequestStatus.isTransientError(status)) {\n return this.handleTransientError(status);\n }\n\n switch (status) {\n case RpcRequestStatus.Resolved: {\n return this.handleResolved(value);\n }\n\n case RpcRequestStatus.Rejected: {\n return this.handleRejected(value);\n }\n\n case RpcRequestStatus.Pending: {\n return this.setPending(status, value.objects);\n }\n\n case RpcRequestStatus.NotFound: {\n return this.handleNotFound(status, value);\n }\n\n case RpcRequestStatus.NoContent: {\n return this.handleNoContent();\n }\n }\n }\n\n private transformResponseStatus(protocolStatus: RpcRequestStatus, value: RpcSerializedValue): RpcRequestStatus {\n if (!this.supportsStatusCategory()) {\n return protocolStatus;\n }\n\n let status = protocolStatus;\n\n if (protocolStatus === RpcRequestStatus.Pending) {\n status = RpcRequestStatus.Rejected;\n } else if (protocolStatus === RpcRequestStatus.NotFound) {\n status = RpcRequestStatus.Rejected;\n } else if (protocolStatus === RpcRequestStatus.Unknown) {\n status = RpcRequestStatus.Rejected;\n }\n\n if (value.objects.indexOf(\"iTwinRpcCoreResponse\") !== -1 && value.objects.indexOf(\"managedStatus\") !== -1) {\n const managedStatus: RpcManagedStatus = JSON.parse(value.objects);\n value.objects = managedStatus.responseValue as string;\n\n if (managedStatus.managedStatus === \"pending\") {\n status = RpcRequestStatus.Pending;\n } else if (managedStatus.managedStatus === \"notFound\") {\n status = RpcRequestStatus.NotFound;\n }\n }\n\n return status;\n }\n\n private handleResolved(value: RpcSerializedValue) {\n try {\n this._raw = value.objects;\n const result: TResponse = RpcMarshaling.deserialize(this.protocol, value);\n\n if (ArrayBuffer.isView(result)) {\n this._raw = result.buffer;\n }\n\n return this.resolve(result);\n } catch (err) {\n return this.reject(err);\n }\n }\n\n private handleRejected(value: RpcSerializedValue) {\n this.protocol.events.raiseEvent(RpcProtocolEvent.BackendErrorReceived, this);\n\n try {\n const error = RpcMarshaling.deserialize(this.protocol, value);\n const hasInfo = error && typeof (error) === \"object\" && error.hasOwnProperty(\"name\") && error.hasOwnProperty(\"message\");\n const name = hasInfo ? error.name : \"\";\n const message = hasInfo ? error.message : \"\";\n const errorNumber = (hasInfo && error.hasOwnProperty(\"errorNumber\")) ? error.errorNumber : BentleyStatus.ERROR;\n return this.reject(new BackendError(errorNumber, name, message, () => error));\n } catch (err) {\n return this.reject(err);\n }\n }\n\n private handleNoContent() {\n return this.reject(new NoContentError());\n }\n\n private handleNotFound(status: RpcRequestStatus, value: RpcSerializedValue) {\n if (RpcRequest.notFoundHandlers.numberOfListeners === 0)\n this.handleRejected(value);\n\n const response = RpcMarshaling.deserialize(this.protocol, value);\n this.setStatus(status);\n\n let resubmitted = false;\n RpcRequest.notFoundHandlers.raiseEvent(this, response, () => {\n if (resubmitted)\n throw new IModelError(BentleyStatus.ERROR, `Already resubmitted using this handler.`);\n\n resubmitted = true;\n void this.submit();\n }, (reason: any) => reason ? this.reject(reason) : this.handleRejected(value));\n return;\n }\n\n private resolve(result: TResponse): void {\n if (!this._active)\n return;\n\n this._active = false;\n this.setLastUpdatedTime();\n this._resolve(result);\n\n if (this._hasRawListener) {\n if (typeof (this._raw) === \"undefined\") {\n throw new IModelError(BentleyStatus.ERROR, \"Cannot access raw response.\");\n }\n\n this._resolveRaw(new ResponseLike(this._raw));\n }\n\n this.setStatus(RpcRequestStatus.Resolved);\n this.dispose();\n }\n\n private resolveRaw() {\n if (typeof (this._response) === \"undefined\") {\n throw new IModelError(BentleyStatus.ERROR, \"Cannot access raw response.\");\n }\n\n this._active = false;\n this.setLastUpdatedTime();\n this._resolveRaw(this._response);\n this.setStatus(RpcRequestStatus.Resolved);\n this.dispose();\n }\n\n protected reject(reason: any): void {\n if (!this._active)\n return;\n\n this._active = false;\n this.setLastUpdatedTime();\n this._reject(reason);\n\n if (this._hasRawListener) {\n this._rejectRaw(reason);\n }\n\n this.setStatus(RpcRequestStatus.Rejected);\n this.dispose();\n }\n\n /** @internal */\n public dispose(): void {\n this.setStatus(RpcRequestStatus.Disposed);\n this._raw = undefined;\n this._response = undefined;\n\n const client = this.client as any;\n if (client[CURRENT_REQUEST] === this) {\n client[CURRENT_REQUEST] = undefined;\n }\n }\n\n private setPending(status: RpcRequestStatus.Pending, extendedStatus: string): void {\n if (!this._active)\n return;\n\n this.setLastUpdatedTime();\n this._extendedStatus = extendedStatus;\n this.setStatus(status);\n RpcRequest.events.raiseEvent(RpcRequestEvent.PendingUpdateReceived, this);\n }\n\n private handleTransientError(status: RpcRequestStatus) {\n if (!this._active)\n return;\n\n this.setLastUpdatedTime();\n this._retryAfter = this.computeRetryAfter(this._attempts - 1);\n\n if (this._transientFaults > this.protocol.configuration.transientFaultLimit) {\n this.reject(new IModelError(BentleyStatus.ERROR, `Exceeded transient fault limit.`));\n } else {\n this.setStatus(status);\n RpcRequest.events.raiseEvent(RpcRequestEvent.TransientErrorReceived, this);\n }\n }\n\n protected async setHeaders(): Promise<void> {\n const versionHeader = this.protocol.protocolVersionHeaderName;\n if (versionHeader && RpcProtocol.protocolVersion)\n this.setHeader(versionHeader, RpcProtocol.protocolVersion.toString());\n\n const headerNames = this.protocol.serializedClientRequestContextHeaderNames;\n const headerValues = await RpcConfiguration.requestContext.serialize(this);\n\n if (headerNames.id)\n this.setHeader(headerNames.id, headerValues.id || this.id); // Cannot be empty\n\n if (headerNames.applicationVersion)\n this.setHeader(headerNames.applicationVersion, headerValues.applicationVersion);\n\n if (headerNames.applicationId)\n this.setHeader(headerNames.applicationId, headerValues.applicationId);\n\n if (headerNames.sessionId)\n this.setHeader(headerNames.sessionId, headerValues.sessionId);\n\n if (headerNames.authorization && headerValues.authorization)\n this.setHeader(headerNames.authorization, headerValues.authorization);\n\n if (headerValues.csrfToken)\n this.setHeader(headerValues.csrfToken.headerName, headerValues.csrfToken.headerValue);\n }\n\n private setStatus(status: RpcRequestStatus): void {\n if (this._status === status)\n return;\n\n this._status = status;\n RpcRequest.events.raiseEvent(RpcRequestEvent.StatusChanged, this);\n }\n}\n\n/** @internal */\nexport const initializeRpcRequest = (() => {\n let initialized = false;\n\n return () => {\n if (initialized) {\n return;\n }\n\n initialized = true;\n\n RpcRequest.events.addListener((type, request) => {\n if (type !== RpcRequestEvent.StatusChanged)\n return;\n\n switch (request.status) {\n case RpcRequestStatus.Submitted: {\n aggregateLoad.lastRequest = request.lastSubmitted;\n break;\n }\n\n case RpcRequestStatus.Pending:\n case RpcRequestStatus.Resolved:\n case RpcRequestStatus.Rejected: {\n aggregateLoad.lastResponse = request.lastUpdated;\n break;\n }\n }\n });\n\n RpcProtocol.events.addListener((type) => {\n const now = new Date().getTime();\n\n switch (type) {\n case RpcProtocolEvent.RequestReceived: {\n aggregateLoad.lastRequest = now;\n break;\n }\n\n case RpcProtocolEvent.BackendReportedPending:\n case RpcProtocolEvent.BackendErrorOccurred:\n case RpcProtocolEvent.BackendResponseCreated: {\n aggregateLoad.lastResponse = now;\n break;\n }\n }\n });\n };\n})();\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"BentleyCloudRpcProtocol.d.ts","sourceRoot":"","sources":["../../../../src/rpc/web/BentleyCloudRpcProtocol.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAQ9D;;GAEG;AACH,8BAAsB,uBAAwB,SAAQ,iBAAiB;IACrD,UAAU,UAAQ;IAElC,iFAAiF;IACjE,yCAAyC,EAAE,qBAAqB,CAe9E;IAEF,mDAAmD;IACnC,yBAAyB,SAAwB;IAEjE,yEAAyE;IACzD,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB;IAoB1E,qEAAqE;IACrD,sBAAsB,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,GAAG,SAAS;IA0C/F;;;OAGG;IACa,YAAY,CAAC,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,oBAAoB,GAAG,cAAc;IA4B1G;;OAEG;IACI,gCAAgC,CAAC,UAAU,EAAE,YAAY,GAAG,gBAAgB,EAAE;CAQtF"}
1
+ {"version":3,"file":"BentleyCloudRpcProtocol.d.ts","sourceRoot":"","sources":["../../../../src/rpc/web/BentleyCloudRpcProtocol.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAQ9D;;GAEG;AACH,8BAAsB,uBAAwB,SAAQ,iBAAiB;IACrD,UAAU,UAAQ;IAElC,iFAAiF;IACjE,yCAAyC,EAAE,qBAAqB,CAe9E;IAEF,mDAAmD;IACnC,yBAAyB,SAAwB;IAEjE,yEAAyE;IACzD,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB;IAoB1E,qEAAqE;IACrD,sBAAsB,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,GAAG,SAAS;IA0C/F;;;OAGG;IACa,YAAY,CAAC,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,oBAAoB,GAAG,cAAc;IA6B1G;;OAEG;IACI,gCAAgC,CAAC,UAAU,EAAE,YAAY,GAAG,gBAAgB,EAAE;CAQtF"}
@@ -101,7 +101,6 @@ class BentleyCloudRpcProtocol extends WebAppRpcProtocol_1.WebAppRpcProtocol {
101
101
  */
102
102
  inflateToken(tokenFromBody, request) {
103
103
  const urlPathComponents = request.path.split("/");
104
- const iModelKey = tokenFromBody.key;
105
104
  let iModelId = tokenFromBody.iModelId;
106
105
  let iTwinId = tokenFromBody.iTwinId;
107
106
  const changeset = { id: tokenFromBody.changeset?.id ?? "0", index: tokenFromBody.changeset?.index };
@@ -124,7 +123,9 @@ class BentleyCloudRpcProtocol extends WebAppRpcProtocol_1.WebAppRpcProtocol {
124
123
  ++i;
125
124
  }
126
125
  }
127
- return { key: iModelKey, iTwinId, iModelId, changeset };
126
+ // Overwrite the key if it includes a : because its most likely a guid. We know what it should be based off of the url.
127
+ // Leave it alone if its a non guid key.
128
+ return { key: tokenFromBody.key === undefined || tokenFromBody.key.includes(":") ? `${iModelId}:${changeset.id}` : tokenFromBody.key, iTwinId, iModelId, changeset };
128
129
  }
129
130
  /** Returns the OpenAPI-compatible URI path parameters for an RPC operation.
130
131
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"BentleyCloudRpcProtocol.js","sourceRoot":"","sources":["../../../../src/rpc/web/BentleyCloudRpcProtocol.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { BentleyStatus } from \"@itwin/core-bentley\";\nimport { IModelRpcProps } from \"../../IModel\";\nimport { IModelError } from \"../../IModelError\";\nimport { RpcConfiguration } from \"../core/RpcConfiguration\";\nimport { RpcOperation } from \"../core/RpcOperation\";\nimport { SerializedRpcOperation, SerializedRpcRequest } from \"../core/RpcProtocol\";\nimport { RpcRequest } from \"../core/RpcRequest\";\nimport { OpenAPIParameter } from \"./OpenAPI\";\nimport { WebAppRpcProtocol } from \"./WebAppRpcProtocol\";\nimport { SerializedRpcActivity } from \"../core/RpcInvocation\";\n\n/* eslint-disable deprecation/deprecation */\n\nenum AppMode {\n MilestoneReview = \"1\",\n}\n\n/** An http protocol for Bentley cloud RPC interface deployments.\n * @internal\n */\nexport abstract class BentleyCloudRpcProtocol extends WebAppRpcProtocol {\n public override checkToken = true;\n\n /** The name of various HTTP request headers based on client's request context */\n public override serializedClientRequestContextHeaderNames: SerializedRpcActivity = {\n /** The name of the HTTP request id header. */\n id: \"X-Correlation-Id\",\n\n /** The name of the HTTP application id header. */\n applicationId: \"X-Application-Id\",\n\n /** The name of the HTTP application version header. */\n applicationVersion: \"X-Application-Version\",\n\n /** The name of the HTTP session id header. */\n sessionId: \"X-Session-Id\",\n\n /** The name of the HTTP authorization header. */\n authorization: \"Authorization\",\n };\n\n /** The name of the RPC protocol version header. */\n public override protocolVersionHeaderName = \"X-Protocol-Version\";\n\n /** Returns the operation specified by an OpenAPI-compatible URI path. */\n public override getOperationFromPath(path: string): SerializedRpcOperation {\n const url = new URL(path, \"https://localhost/\");\n const components = url.pathname.split(\"/\").filter((x) => x); // filter out empty segments\n\n const operationComponent = components.slice(-1)[0];\n const encodedRequest = url.searchParams.get(\"parameters\") || \"\";\n\n // The encodedRequest should be base64 - fail now if any other characters detected.\n if (/[^a-zA-Z0-9=+\\/$]/.test(encodedRequest))\n throw new IModelError(BentleyStatus.ERROR, `Invalid request: Malformed URL parameters detected.`);\n\n const firstHyphen = operationComponent.indexOf(\"-\");\n const lastHyphen = operationComponent.lastIndexOf(\"-\");\n const interfaceDefinition = operationComponent.slice(0, firstHyphen);\n const interfaceVersion = operationComponent.slice(firstHyphen + 1, lastHyphen);\n const operationName = operationComponent.slice(lastHyphen + 1);\n\n return { interfaceDefinition, operationName, interfaceVersion, encodedRequest };\n }\n\n /** Supplies the OpenAPI-compatible URI path for an RPC operation. */\n public override supplyPathForOperation(operation: RpcOperation, request: RpcRequest | undefined) {\n const prefix = this.pathPrefix;\n const appTitle = this.info.title;\n const appVersion = this.info.version;\n const operationId = `${operation.interfaceDefinition.interfaceName}-${operation.interfaceVersion}-${operation.operationName}`;\n\n let appMode: string = \"\";\n let iTwinId: string = \"\";\n let iModelId: string = \"\";\n let routeChangesetId: string | undefined;\n /* Note: The changesetId field is omitted in the route in the case of ReadWrite connections since the connection is generally expected to be at the\n * latest version and not some specific changeset. Also, for the first version (before any changesets), the changesetId in the route is arbitrarily\n * set to \"0\" instead of an empty string, since the latter is more un-intuitive for a route. However, in all other use cases, including the changesetId\n * held by the IModelRpcProps itself, the changesetId of \"\" (i.e., empty string) signifies the first version - this is more intuitive and retains\n * compatibility with the majority of use cases. */\n\n if (request === undefined) {\n appMode = \"{modeId}\";\n iTwinId = \"{iTwinId}\";\n iModelId = \"{iModelId}\";\n routeChangesetId = \"{changeSetId}\";\n } else {\n let token = operation.policy.token(request) || RpcOperation.fallbackToken;\n\n if (!token || !token.iModelId) {\n if (RpcConfiguration.disableRoutingValidation) {\n token = { key: \"\" };\n } else {\n throw new IModelError(BentleyStatus.ERROR, \"Invalid iModelToken for RPC operation request\");\n }\n }\n\n iTwinId = encodeURIComponent(token.iTwinId || \"\");\n iModelId = encodeURIComponent(token.iModelId!);\n\n routeChangesetId = token.changeset?.id || \"0\";\n appMode = AppMode.MilestoneReview;\n }\n\n return `${prefix}/${appTitle}/${appVersion}/mode/${appMode}/context/${iTwinId}/imodel/${iModelId}${!!routeChangesetId ? `/changeset/${routeChangesetId}` : \"\"}/${operationId}`;\n }\n\n /**\n * Inflates the IModelRpcProps from the URL path for each request on the backend.\n * @note This function updates the IModelRpcProps value supplied in the request body.\n */\n public override inflateToken(tokenFromBody: IModelRpcProps, request: SerializedRpcRequest): IModelRpcProps {\n const urlPathComponents = request.path.split(\"/\");\n\n const iModelKey = tokenFromBody.key;\n let iModelId = tokenFromBody.iModelId;\n let iTwinId = tokenFromBody.iTwinId;\n const changeset = { id: tokenFromBody.changeset?.id ?? \"0\", index: tokenFromBody.changeset?.index };\n\n for (let i = 0; i <= urlPathComponents.length; ++i) {\n const key = urlPathComponents[i];\n const value = urlPathComponents[i + 1];\n if (key === \"mode\") {\n ++i;\n } else if (key === \"context\") {\n iTwinId = value;\n ++i;\n } else if (key === \"imodel\") {\n iModelId = value;\n ++i;\n } else if (key === \"changeset\") {\n changeset.id = (value === \"0\") ? \"\" : value;\n ++i;\n }\n }\n\n return { key: iModelKey, iTwinId, iModelId, changeset };\n }\n\n /** Returns the OpenAPI-compatible URI path parameters for an RPC operation.\n * @internal\n */\n public supplyPathParametersForOperation(_operation: RpcOperation): OpenAPIParameter[] {\n return [\n { name: \"modeId\", in: \"path\", required: true, schema: { type: \"string\" } },\n { name: \"iTwinId\", in: \"path\", required: true, schema: { type: \"string\" } },\n { name: \"iModelId\", in: \"path\", required: true, schema: { type: \"string\" } },\n { name: \"changeSetId\", in: \"path\", required: false, schema: { type: \"string\" } },\n ];\n }\n}\n"]}
1
+ {"version":3,"file":"BentleyCloudRpcProtocol.js","sourceRoot":"","sources":["../../../../src/rpc/web/BentleyCloudRpcProtocol.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { BentleyStatus } from \"@itwin/core-bentley\";\nimport { IModelRpcProps } from \"../../IModel\";\nimport { IModelError } from \"../../IModelError\";\nimport { RpcConfiguration } from \"../core/RpcConfiguration\";\nimport { RpcOperation } from \"../core/RpcOperation\";\nimport { SerializedRpcOperation, SerializedRpcRequest } from \"../core/RpcProtocol\";\nimport { RpcRequest } from \"../core/RpcRequest\";\nimport { OpenAPIParameter } from \"./OpenAPI\";\nimport { WebAppRpcProtocol } from \"./WebAppRpcProtocol\";\nimport { SerializedRpcActivity } from \"../core/RpcInvocation\";\n\n/* eslint-disable deprecation/deprecation */\n\nenum AppMode {\n MilestoneReview = \"1\",\n}\n\n/** An http protocol for Bentley cloud RPC interface deployments.\n * @internal\n */\nexport abstract class BentleyCloudRpcProtocol extends WebAppRpcProtocol {\n public override checkToken = true;\n\n /** The name of various HTTP request headers based on client's request context */\n public override serializedClientRequestContextHeaderNames: SerializedRpcActivity = {\n /** The name of the HTTP request id header. */\n id: \"X-Correlation-Id\",\n\n /** The name of the HTTP application id header. */\n applicationId: \"X-Application-Id\",\n\n /** The name of the HTTP application version header. */\n applicationVersion: \"X-Application-Version\",\n\n /** The name of the HTTP session id header. */\n sessionId: \"X-Session-Id\",\n\n /** The name of the HTTP authorization header. */\n authorization: \"Authorization\",\n };\n\n /** The name of the RPC protocol version header. */\n public override protocolVersionHeaderName = \"X-Protocol-Version\";\n\n /** Returns the operation specified by an OpenAPI-compatible URI path. */\n public override getOperationFromPath(path: string): SerializedRpcOperation {\n const url = new URL(path, \"https://localhost/\");\n const components = url.pathname.split(\"/\").filter((x) => x); // filter out empty segments\n\n const operationComponent = components.slice(-1)[0];\n const encodedRequest = url.searchParams.get(\"parameters\") || \"\";\n\n // The encodedRequest should be base64 - fail now if any other characters detected.\n if (/[^a-zA-Z0-9=+\\/$]/.test(encodedRequest))\n throw new IModelError(BentleyStatus.ERROR, `Invalid request: Malformed URL parameters detected.`);\n\n const firstHyphen = operationComponent.indexOf(\"-\");\n const lastHyphen = operationComponent.lastIndexOf(\"-\");\n const interfaceDefinition = operationComponent.slice(0, firstHyphen);\n const interfaceVersion = operationComponent.slice(firstHyphen + 1, lastHyphen);\n const operationName = operationComponent.slice(lastHyphen + 1);\n\n return { interfaceDefinition, operationName, interfaceVersion, encodedRequest };\n }\n\n /** Supplies the OpenAPI-compatible URI path for an RPC operation. */\n public override supplyPathForOperation(operation: RpcOperation, request: RpcRequest | undefined) {\n const prefix = this.pathPrefix;\n const appTitle = this.info.title;\n const appVersion = this.info.version;\n const operationId = `${operation.interfaceDefinition.interfaceName}-${operation.interfaceVersion}-${operation.operationName}`;\n\n let appMode: string = \"\";\n let iTwinId: string = \"\";\n let iModelId: string = \"\";\n let routeChangesetId: string | undefined;\n /* Note: The changesetId field is omitted in the route in the case of ReadWrite connections since the connection is generally expected to be at the\n * latest version and not some specific changeset. Also, for the first version (before any changesets), the changesetId in the route is arbitrarily\n * set to \"0\" instead of an empty string, since the latter is more un-intuitive for a route. However, in all other use cases, including the changesetId\n * held by the IModelRpcProps itself, the changesetId of \"\" (i.e., empty string) signifies the first version - this is more intuitive and retains\n * compatibility with the majority of use cases. */\n\n if (request === undefined) {\n appMode = \"{modeId}\";\n iTwinId = \"{iTwinId}\";\n iModelId = \"{iModelId}\";\n routeChangesetId = \"{changeSetId}\";\n } else {\n let token = operation.policy.token(request) || RpcOperation.fallbackToken;\n\n if (!token || !token.iModelId) {\n if (RpcConfiguration.disableRoutingValidation) {\n token = { key: \"\" };\n } else {\n throw new IModelError(BentleyStatus.ERROR, \"Invalid iModelToken for RPC operation request\");\n }\n }\n\n iTwinId = encodeURIComponent(token.iTwinId || \"\");\n iModelId = encodeURIComponent(token.iModelId!);\n\n routeChangesetId = token.changeset?.id || \"0\";\n appMode = AppMode.MilestoneReview;\n }\n\n return `${prefix}/${appTitle}/${appVersion}/mode/${appMode}/context/${iTwinId}/imodel/${iModelId}${!!routeChangesetId ? `/changeset/${routeChangesetId}` : \"\"}/${operationId}`;\n }\n\n /**\n * Inflates the IModelRpcProps from the URL path for each request on the backend.\n * @note This function updates the IModelRpcProps value supplied in the request body.\n */\n public override inflateToken(tokenFromBody: IModelRpcProps, request: SerializedRpcRequest): IModelRpcProps {\n const urlPathComponents = request.path.split(\"/\");\n\n let iModelId = tokenFromBody.iModelId;\n let iTwinId = tokenFromBody.iTwinId;\n const changeset = { id: tokenFromBody.changeset?.id ?? \"0\", index: tokenFromBody.changeset?.index };\n\n for (let i = 0; i <= urlPathComponents.length; ++i) {\n const key = urlPathComponents[i];\n const value = urlPathComponents[i + 1];\n if (key === \"mode\") {\n ++i;\n } else if (key === \"context\") {\n iTwinId = value;\n ++i;\n } else if (key === \"imodel\") {\n iModelId = value;\n ++i;\n } else if (key === \"changeset\") {\n changeset.id = (value === \"0\") ? \"\" : value;\n ++i;\n }\n }\n\n // Overwrite the key if it includes a : because its most likely a guid. We know what it should be based off of the url.\n // Leave it alone if its a non guid key.\n return { key: tokenFromBody.key === undefined || tokenFromBody.key.includes(\":\") ? `${iModelId}:${changeset.id}` : tokenFromBody.key, iTwinId, iModelId, changeset };\n }\n\n /** Returns the OpenAPI-compatible URI path parameters for an RPC operation.\n * @internal\n */\n public supplyPathParametersForOperation(_operation: RpcOperation): OpenAPIParameter[] {\n return [\n { name: \"modeId\", in: \"path\", required: true, schema: { type: \"string\" } },\n { name: \"iTwinId\", in: \"path\", required: true, schema: { type: \"string\" } },\n { name: \"iModelId\", in: \"path\", required: true, schema: { type: \"string\" } },\n { name: \"changeSetId\", in: \"path\", required: false, schema: { type: \"string\" } },\n ];\n }\n}\n"]}
@@ -16,6 +16,43 @@ export type IModelErrorNumber = IModelStatus | DbResult | BentleyStatus | Briefc
16
16
  export declare class IModelError extends BentleyError {
17
17
  constructor(errorNumber: IModelErrorNumber | number, message: string, getMetaData?: LoggingMetaData);
18
18
  }
19
+ /** The state of a lock. See [Acquiring locks on elements.]($docs/learning/backend/ConcurrencyControl.md#acquiring-locks-on-elements).
20
+ * @public
21
+ */
22
+ export declare enum LockState {
23
+ /** The element is not locked */
24
+ None = 0,
25
+ /** Holding a shared lock on an element blocks other users from acquiring the Exclusive lock it. More than one user may acquire the shared lock. */
26
+ Shared = 1,
27
+ /** A Lock that permits modifications to an element and blocks other users from making modifications to it.
28
+ * Holding an exclusive lock on an "owner" (a model or a parent element), implicitly exclusively locks all its members.
29
+ */
30
+ Exclusive = 2
31
+ }
32
+ /** Detailed information about a particular object Lock that is causing the Lock update conflict.
33
+ * An example of a lock update conflict would be attempting to use [LockControl.acquireLocks]($backend) on an object that is already locked by another Briefcase.
34
+ * @public
35
+ */
36
+ export interface ConflictingLock {
37
+ /** Id of the object that is causing conflict. */
38
+ objectId: string;
39
+ /**
40
+ * The level of conflicting lock. Possible values are {@link LockState.Shared}, {@link LockState.Exclusive}.
41
+ * See {@link LockState}.
42
+ */
43
+ state: LockState;
44
+ /** An array of Briefcase ids that hold this lock. */
45
+ briefcaseIds: number[];
46
+ }
47
+ /**
48
+ * An error raised when there is a lock conflict detected.
49
+ * Typically this error would be thrown by [LockControl.acquireLocks]($backend) when you are requesting a lock on an element that is already held by another briefcase.
50
+ * @public
51
+ */
52
+ export declare class ConflictingLocksError extends IModelError {
53
+ conflictingLocks?: ConflictingLock[];
54
+ constructor(message: string, getMetaData?: LoggingMetaData, conflictingLocks?: ConflictingLock[]);
55
+ }
19
56
  /** @public */
20
57
  export declare class ServerError extends IModelError {
21
58
  constructor(errorNumber: number, message: string);
@@ -1 +1 @@
1
- {"version":3,"file":"IModelError.d.ts","sourceRoot":"","sources":["../../src/IModelError.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EACL,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EACvG,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,GACtF,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EAAC,mBAAmB,EAAE,WAAW,EAAE,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAE3F;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,QAAQ,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC;AAE5G;;;GAGG;AACH,qBAAa,WAAY,SAAQ,YAAY;gBACxB,WAAW,EAAE,iBAAiB,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe;CAG3G;AAED,cAAc;AACd,qBAAa,WAAY,SAAQ,WAAW;gBACvB,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAIxD;AAED,cAAc;AACd,qBAAa,kBAAmB,SAAQ,WAAW;gBAC9B,OAAO,EAAE,MAAM;CAInC;AAED,cAAc;AACd,qBAAa,YAAa,SAAQ,WAAW;gBACxB,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe;CAIrG;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,WAAW;gBAClC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe;CAGlE;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,WAAW;;CAI9C"}
1
+ {"version":3,"file":"IModelError.d.ts","sourceRoot":"","sources":["../../src/IModelError.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EACL,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAmB,YAAY,EAAE,eAAe,EACxH,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,GACtF,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EAAC,mBAAmB,EAAE,WAAW,EAAE,eAAe,EAAC,MAAM,qBAAqB,CAAC;AAE3F;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,QAAQ,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC;AAE5G;;;GAGG;AACH,qBAAa,WAAY,SAAQ,YAAY;gBACxB,WAAW,EAAE,iBAAiB,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe;CAG3G;AAED;;GAEG;AACH,oBAAY,SAAS;IACnB,gCAAgC;IAChC,IAAI,IAAI;IACR,mJAAmJ;IACnJ,MAAM,IAAI;IACV;;OAEG;IACH,SAAS,IAAI;CACd;AAED;;;EAGE;AACF,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;SAGK;IACL,KAAK,EAAE,SAAS,CAAC;IACjB,qDAAqD;IACrD,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,WAAW;IAC7C,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;gBAChC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe,EAAE,gBAAgB,CAAC,EAAE,eAAe,EAAE;CAKjG;AAED,cAAc;AACd,qBAAa,WAAY,SAAQ,WAAW;gBACvB,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAIxD;AAED,cAAc;AACd,qBAAa,kBAAmB,SAAQ,WAAW;gBAC9B,OAAO,EAAE,MAAM;CAInC;AAED,cAAc;AACd,qBAAa,YAAa,SAAQ,WAAW;gBACxB,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe;CAIrG;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,WAAW;gBAClC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe;CAGlE;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,WAAW;;CAI9C"}
@@ -5,7 +5,7 @@
5
5
  /** @packageDocumentation
6
6
  * @module iModels
7
7
  */
8
- import { BentleyError, IModelStatus, RepositoryStatus, } from "@itwin/core-bentley";
8
+ import { BentleyError, IModelHubStatus, IModelStatus, RepositoryStatus, } from "@itwin/core-bentley";
9
9
  export { BentleyStatus, BentleyError, IModelStatus, BriefcaseStatus, DbResult, ChangeSetStatus, } from "@itwin/core-bentley";
10
10
  /** The error type thrown by this module.
11
11
  * @see [[IModelErrorNumber]] for commonly-used error codes.
@@ -16,6 +16,31 @@ export class IModelError extends BentleyError {
16
16
  super(errorNumber, message, getMetaData);
17
17
  }
18
18
  }
19
+ /** The state of a lock. See [Acquiring locks on elements.]($docs/learning/backend/ConcurrencyControl.md#acquiring-locks-on-elements).
20
+ * @public
21
+ */
22
+ export var LockState;
23
+ (function (LockState) {
24
+ /** The element is not locked */
25
+ LockState[LockState["None"] = 0] = "None";
26
+ /** Holding a shared lock on an element blocks other users from acquiring the Exclusive lock it. More than one user may acquire the shared lock. */
27
+ LockState[LockState["Shared"] = 1] = "Shared";
28
+ /** A Lock that permits modifications to an element and blocks other users from making modifications to it.
29
+ * Holding an exclusive lock on an "owner" (a model or a parent element), implicitly exclusively locks all its members.
30
+ */
31
+ LockState[LockState["Exclusive"] = 2] = "Exclusive";
32
+ })(LockState || (LockState = {}));
33
+ /**
34
+ * An error raised when there is a lock conflict detected.
35
+ * Typically this error would be thrown by [LockControl.acquireLocks]($backend) when you are requesting a lock on an element that is already held by another briefcase.
36
+ * @public
37
+ */
38
+ export class ConflictingLocksError extends IModelError {
39
+ constructor(message, getMetaData, conflictingLocks) {
40
+ super(IModelHubStatus.LockOwnedByAnotherBriefcase, message, getMetaData);
41
+ this.conflictingLocks = conflictingLocks;
42
+ }
43
+ }
19
44
  /** @public */
20
45
  export class ServerError extends IModelError {
21
46
  constructor(errorNumber, message) {
@@ -1 +1 @@
1
- {"version":3,"file":"IModelError.js","sourceRoot":"","sources":["../../src/IModelError.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EACL,YAAY,EAA6D,YAAY,EAAmB,gBAAgB,GACzH,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,GACtF,MAAM,qBAAqB,CAAC;AAU7B;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,YAAY;IAC3C,YAAmB,WAAuC,EAAE,OAAe,EAAE,WAA6B;QACxG,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC3C,CAAC;CACF;AAED,cAAc;AACd,MAAM,OAAO,WAAY,SAAQ,WAAW;IAC1C,YAAmB,WAAmB,EAAE,OAAe;QACrD,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,iBAAiB,WAAW,GAAG,CAAC;IAC9C,CAAC;CACF;AAED,cAAc;AACd,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IACjD,YAAmB,OAAe;QAChC,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,cAAc;AACd,MAAM,OAAO,YAAa,SAAQ,WAAW;IAC3C,YAAmB,WAAmB,EAAE,IAAY,EAAE,OAAe,EAAE,WAA6B;QAClG,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,sBAAuB,SAAQ,WAAW;IACrD,YAAmB,OAAe,EAAE,WAA6B;QAC/D,KAAK,CAAC,gBAAgB,CAAC,0BAA0B,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,WAAW;IAC7C;QACE,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAC9C,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module iModels\n */\n\nimport {\n BentleyError, BentleyStatus, BriefcaseStatus, ChangeSetStatus, DbResult, IModelStatus, LoggingMetaData, RepositoryStatus,\n} from \"@itwin/core-bentley\";\n\nexport {\n BentleyStatus, BentleyError, IModelStatus, BriefcaseStatus, DbResult, ChangeSetStatus,\n} from \"@itwin/core-bentley\";\n\nexport type {GetMetaDataFunction, LogFunction, LoggingMetaData} from \"@itwin/core-bentley\";\n\n/** Numeric values for common errors produced by iTwin.js APIs, typically provided by [[IModelError]].\n * The values within each of these `enum`s are guaranteed not to conflict with one another.\n * @public\n */\nexport type IModelErrorNumber = IModelStatus | DbResult | BentleyStatus | BriefcaseStatus | ChangeSetStatus;\n\n/** The error type thrown by this module.\n * @see [[IModelErrorNumber]] for commonly-used error codes.\n * @public\n */\nexport class IModelError extends BentleyError {\n public constructor(errorNumber: IModelErrorNumber | number, message: string, getMetaData?: LoggingMetaData) {\n super(errorNumber, message, getMetaData);\n }\n}\n\n/** @public */\nexport class ServerError extends IModelError {\n public constructor(errorNumber: number, message: string) {\n super(errorNumber, message);\n this.name = `Server error (${errorNumber})`;\n }\n}\n\n/** @public */\nexport class ServerTimeoutError extends ServerError {\n public constructor(message: string) {\n super(IModelStatus.ServerTimeout, message);\n this.name = \"Server timeout error\";\n }\n}\n\n/** @public */\nexport class BackendError extends IModelError {\n public constructor(errorNumber: number, name: string, message: string, getMetaData?: LoggingMetaData) {\n super(errorNumber, message, getMetaData);\n this.name = name;\n }\n}\n\n/**\n * Channel constraint error\n * @alpha\n */\nexport class ChannelConstraintError extends IModelError {\n public constructor(message: string, getMetaData?: LoggingMetaData) {\n super(RepositoryStatus.ChannelConstraintViolation, message, getMetaData);\n }\n}\n\n/** Intended for API \"no content\" semantics where the error case should not trigger application failure monitoring systems.\n * @public\n */\nexport class NoContentError extends IModelError {\n public constructor() {\n super(IModelStatus.NoContent, \"No Content\");\n }\n}\n"]}
1
+ {"version":3,"file":"IModelError.js","sourceRoot":"","sources":["../../src/IModelError.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EACL,YAAY,EAA6D,eAAe,EAAE,YAAY,EAAmB,gBAAgB,GAC1I,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,GACtF,MAAM,qBAAqB,CAAC;AAU7B;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,YAAY;IAC3C,YAAmB,WAAuC,EAAE,OAAe,EAAE,WAA6B;QACxG,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC3C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,SASX;AATD,WAAY,SAAS;IACnB,gCAAgC;IAChC,yCAAQ,CAAA;IACR,mJAAmJ;IACnJ,6CAAU,CAAA;IACV;;OAEG;IACH,mDAAa,CAAA;AACf,CAAC,EATW,SAAS,KAAT,SAAS,QASpB;AAkBD;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,WAAW;IAEpD,YAAY,OAAe,EAAE,WAA6B,EAAE,gBAAoC;QAC9F,KAAK,CAAC,eAAe,CAAC,2BAA2B,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACzE,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CAEF;AAED,cAAc;AACd,MAAM,OAAO,WAAY,SAAQ,WAAW;IAC1C,YAAmB,WAAmB,EAAE,OAAe;QACrD,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,iBAAiB,WAAW,GAAG,CAAC;IAC9C,CAAC;CACF;AAED,cAAc;AACd,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IACjD,YAAmB,OAAe;QAChC,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,cAAc;AACd,MAAM,OAAO,YAAa,SAAQ,WAAW;IAC3C,YAAmB,WAAmB,EAAE,IAAY,EAAE,OAAe,EAAE,WAA6B;QAClG,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,sBAAuB,SAAQ,WAAW;IACrD,YAAmB,OAAe,EAAE,WAA6B;QAC/D,KAAK,CAAC,gBAAgB,CAAC,0BAA0B,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC3E,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,WAAW;IAC7C;QACE,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAC9C,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module iModels\n */\n\nimport {\n BentleyError, BentleyStatus, BriefcaseStatus, ChangeSetStatus, DbResult, IModelHubStatus, IModelStatus, LoggingMetaData, RepositoryStatus,\n} from \"@itwin/core-bentley\";\n\nexport {\n BentleyStatus, BentleyError, IModelStatus, BriefcaseStatus, DbResult, ChangeSetStatus,\n} from \"@itwin/core-bentley\";\n\nexport type {GetMetaDataFunction, LogFunction, LoggingMetaData} from \"@itwin/core-bentley\";\n\n/** Numeric values for common errors produced by iTwin.js APIs, typically provided by [[IModelError]].\n * The values within each of these `enum`s are guaranteed not to conflict with one another.\n * @public\n */\nexport type IModelErrorNumber = IModelStatus | DbResult | BentleyStatus | BriefcaseStatus | ChangeSetStatus;\n\n/** The error type thrown by this module.\n * @see [[IModelErrorNumber]] for commonly-used error codes.\n * @public\n */\nexport class IModelError extends BentleyError {\n public constructor(errorNumber: IModelErrorNumber | number, message: string, getMetaData?: LoggingMetaData) {\n super(errorNumber, message, getMetaData);\n }\n}\n\n/** The state of a lock. See [Acquiring locks on elements.]($docs/learning/backend/ConcurrencyControl.md#acquiring-locks-on-elements).\n * @public\n */\nexport enum LockState {\n /** The element is not locked */\n None = 0,\n /** Holding a shared lock on an element blocks other users from acquiring the Exclusive lock it. More than one user may acquire the shared lock. */\n Shared = 1,\n /** A Lock that permits modifications to an element and blocks other users from making modifications to it.\n * Holding an exclusive lock on an \"owner\" (a model or a parent element), implicitly exclusively locks all its members.\n */\n Exclusive = 2,\n}\n\n/** Detailed information about a particular object Lock that is causing the Lock update conflict.\n * An example of a lock update conflict would be attempting to use [LockControl.acquireLocks]($backend) on an object that is already locked by another Briefcase.\n * @public\n*/\nexport interface ConflictingLock {\n /** Id of the object that is causing conflict. */\n objectId: string;\n /**\n * The level of conflicting lock. Possible values are {@link LockState.Shared}, {@link LockState.Exclusive}.\n * See {@link LockState}.\n */\n state: LockState;\n /** An array of Briefcase ids that hold this lock. */\n briefcaseIds: number[];\n}\n\n/**\n * An error raised when there is a lock conflict detected.\n * Typically this error would be thrown by [LockControl.acquireLocks]($backend) when you are requesting a lock on an element that is already held by another briefcase.\n * @public\n */\nexport class ConflictingLocksError extends IModelError {\n public conflictingLocks?: ConflictingLock[];\n constructor(message: string, getMetaData?: LoggingMetaData, conflictingLocks?: ConflictingLock[]) {\n super(IModelHubStatus.LockOwnedByAnotherBriefcase, message, getMetaData);\n this.conflictingLocks = conflictingLocks;\n }\n\n}\n\n/** @public */\nexport class ServerError extends IModelError {\n public constructor(errorNumber: number, message: string) {\n super(errorNumber, message);\n this.name = `Server error (${errorNumber})`;\n }\n}\n\n/** @public */\nexport class ServerTimeoutError extends ServerError {\n public constructor(message: string) {\n super(IModelStatus.ServerTimeout, message);\n this.name = \"Server timeout error\";\n }\n}\n\n/** @public */\nexport class BackendError extends IModelError {\n public constructor(errorNumber: number, name: string, message: string, getMetaData?: LoggingMetaData) {\n super(errorNumber, message, getMetaData);\n this.name = name;\n }\n}\n\n/**\n * Channel constraint error\n * @alpha\n */\nexport class ChannelConstraintError extends IModelError {\n public constructor(message: string, getMetaData?: LoggingMetaData) {\n super(RepositoryStatus.ChannelConstraintViolation, message, getMetaData);\n }\n}\n\n/** Intended for API \"no content\" semantics where the error case should not trigger application failure monitoring systems.\n * @public\n */\nexport class NoContentError extends IModelError {\n public constructor() {\n super(IModelStatus.NoContent, \"No Content\");\n }\n}\n"]}
@@ -98,7 +98,7 @@ export class RpcRequest {
98
98
  for (const param of this.parameters) {
99
99
  if (typeof (param) === "object" && param !== null) {
100
100
  for (const prop of Object.getOwnPropertyNames(requiredProperties)) {
101
- if (param.hasOwnProperty(prop) && typeof (param[prop]) === requiredProperties[prop]) {
101
+ if (prop in param && typeof (param[prop]) === requiredProperties[prop]) {
102
102
  return param;
103
103
  }
104
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RpcRequest.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcRequest.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { BeEvent, BentleyStatus, Guid } from \"@itwin/core-bentley\";\nimport { IModelRpcProps } from \"../../IModel\";\nimport { BackendError, IModelError, NoContentError } from \"../../IModelError\";\nimport { RpcInterface } from \"../../RpcInterface\";\nimport { RpcConfiguration } from \"./RpcConfiguration\";\nimport { RpcProtocolEvent, RpcRequestEvent, RpcRequestStatus, RpcResponseCacheControl } from \"./RpcConstants\";\nimport { RpcNotFoundResponse } from \"./RpcControl\";\nimport { RpcMarshaling, RpcSerializedValue } from \"./RpcMarshaling\";\nimport { RpcOperation } from \"./RpcOperation\";\nimport { RpcManagedStatus, RpcProtocol, RpcProtocolVersion } from \"./RpcProtocol\";\nimport { CURRENT_REQUEST } from \"./RpcRegistry\";\n\n/* eslint-disable @typescript-eslint/naming-convention */\n// cspell:ignore csrf\n/* eslint-disable deprecation/deprecation */\n\n/** @internal */\nexport const aggregateLoad = { lastRequest: 0, lastResponse: 0 };\n\n/** @internal */\nexport class ResponseLike implements Response {\n private _data: Promise<any>;\n public get body() { return null; }\n public async arrayBuffer(): Promise<ArrayBuffer> { return this._data; }\n public async blob(): Promise<Blob> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n public async formData(): Promise<FormData> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n public async json(): Promise<any> { return this._data; }\n public async text(): Promise<string> { return this._data; }\n public get bodyUsed() { return false; }\n public get headers(): Headers { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n public get ok(): boolean { return this.status >= 200 && this.status <= 299; }\n public get redirected() { return false; }\n public get status() { return 200; }\n public get statusText() { return \"\"; }\n public get trailer(): Promise<Headers> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n public get type(): ResponseType { return \"basic\"; }\n public get url() { return \"\"; }\n public clone() { return { ...this }; }\n\n public constructor(data: any) {\n this._data = Promise.resolve(data);\n }\n}\n\n/** Supplies an IModelRpcProps for an RPC request.\n * @internal\n */\nexport type RpcRequestTokenSupplier_T = (request: RpcRequest) => IModelRpcProps | undefined;\n\n/** Supplies the initial retry interval for an RPC request.\n * @internal\n */\nexport type RpcRequestInitialRetryIntervalSupplier_T = (configuration: RpcConfiguration) => number;\n\n/** Notification callback for an RPC request.\n * @internal\n */\nexport type RpcRequestCallback_T = (request: RpcRequest) => void;\n\n/** Determines if caching is permitted for a RPC response.\n * @internal\n */\nexport type RpcResponseCachingCallback_T = (request: RpcRequest) => RpcResponseCacheControl;\n\n/** Runtime information related to the operation load of one or more RPC interfaces.\n * @internal\n */\nexport interface RpcOperationsProfile {\n readonly lastRequest: number;\n readonly lastResponse: number;\n}\n\n/** Handles RPC request events.\n * @internal\n */\nexport type RpcRequestEventHandler = (type: RpcRequestEvent, request: RpcRequest) => void;\n\n/** Resolves \"not found\" responses for RPC requests.\n * @internal\n */\nexport type RpcRequestNotFoundHandler = (request: RpcRequest, response: RpcNotFoundResponse, resubmit: () => void, reject: (reason?: any) => void) => void;\n\nclass Cancellable<T> {\n public promise: Promise<T | undefined>;\n public cancel() { }\n\n public constructor(task: Promise<T>) {\n this.promise = new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.cancel = () => resolve(undefined);\n task.then(resolve, reject);\n });\n }\n}\n\n/** A RPC operation request.\n * @internal\n */\nexport abstract class RpcRequest<TResponse = any> {\n private static _activeRequests: Map<string, RpcRequest> = new Map();\n private _resolve: (value?: TResponse | PromiseLike<TResponse> | undefined) => void = () => undefined;\n protected _resolveRaw: (value?: Response | PromiseLike<Response> | undefined) => void = () => undefined;\n private _reject: (reason?: any) => void = () => undefined;\n private _rejectRaw: (reason?: any) => void = () => undefined;\n private _created: number = 0;\n private _lastSubmitted: number = 0;\n private _lastUpdated: number = 0;\n\n /** @internal */\n public _status: RpcRequestStatus = RpcRequestStatus.Unknown;\n\n /** @internal */\n public _extendedStatus: string = \"\";\n\n private _connecting: boolean = false;\n private _active: boolean = true;\n private _hasRawListener = false;\n private _raw: ArrayBuffer | string | undefined = undefined;\n private _sending?: Cancellable<number>;\n private _attempts = 0;\n private _retryAfter: number | null = null;\n private _transientFaults = 0;\n protected _response: Response | undefined = undefined;\n protected _rawPromise: Promise<Response | undefined>;\n public responseProtocolVersion = RpcProtocolVersion.None;\n\n /** All RPC requests that are currently in flight. */\n public static get activeRequests(): ReadonlyMap<string, RpcRequest> { return this._activeRequests; }\n\n /** Events raised by RpcRequest. See [[RpcRequestEvent]] */\n public static readonly events: BeEvent<RpcRequestEventHandler> = new BeEvent();\n\n /** Resolvers for \"not found\" requests. See [[RpcRequestNotFoundHandler]] */\n public static readonly notFoundHandlers: BeEvent<RpcRequestNotFoundHandler> = new BeEvent();\n\n /** The aggregate operations profile of all active RPC interfaces. */\n public static get aggregateLoad(): RpcOperationsProfile { return aggregateLoad; }\n\n /**\n * The request for the current RPC operation.\n * @note The return value of this function is only reliable if program control was received from a RPC interface class member function that directly returns the result of calling RpcInterface.forward.\n */\n public static current(context: RpcInterface): RpcRequest {\n return (context as any)[CURRENT_REQUEST];\n }\n\n /** The unique identifier of this request. */\n public readonly id: string;\n\n /** The operation for this request. */\n public readonly operation: RpcOperation;\n\n /** The parameters for this request. */\n public parameters: any[];\n\n /** The RPC client instance for this request. */\n public readonly client: RpcInterface;\n\n /** Convenience access to the protocol of this request. */\n public readonly protocol: RpcProtocol;\n\n /** The implementation response for this request. */\n public readonly response: Promise<TResponse | undefined>;\n\n /** The status of this request. */\n public get status() { return this._status; }\n\n /** Extended status information for this request (if available). */\n public get extendedStatus() { return this._extendedStatus; }\n\n /** The last submission for this request. */\n public get lastSubmitted() { return this._lastSubmitted; }\n\n /** The last status update received for this request. */\n public get lastUpdated() { return this._lastUpdated; }\n\n /** The target interval (in milliseconds) between submission attempts for this request. */\n public retryInterval: number;\n\n /** Whether a connection is active for this request. */\n public get connecting() { return this._connecting; }\n\n /** Whether this request is pending. */\n public get pending(): boolean {\n switch (this.status) {\n case RpcRequestStatus.Submitted:\n case RpcRequestStatus.Pending: {\n return true;\n }\n\n default: {\n return false;\n }\n }\n }\n\n /** The elapsed time for this request. */\n public get elapsed(): number {\n return this._lastUpdated - this._created;\n }\n\n /** A protocol-specific path identifier for this request. */\n public path: string;\n\n /** A protocol-specific method identifier for this request. */\n public method: string;\n\n /** An attempt-specific value for when to next retry this request. */\n public get retryAfter() { return this._retryAfter; }\n\n /** Finds the first parameter of a given structural type if present. */\n public findParameterOfType<T>(requiredProperties: { [index: string]: string }): T | undefined {\n for (const param of this.parameters) {\n if (typeof (param) === \"object\" && param !== null) {\n for (const prop of Object.getOwnPropertyNames(requiredProperties)) {\n if (param.hasOwnProperty(prop) && typeof (param[prop]) === requiredProperties[prop]) {\n return param;\n }\n }\n }\n }\n\n return undefined;\n }\n\n /** Finds the first IModelRpcProps parameter if present. */\n public findTokenPropsParameter(): IModelRpcProps | undefined {\n return this.findParameterOfType({ iModelId: \"string\" });\n\n }\n\n /** The raw implementation response for this request. */\n public get rawResponse(): Promise<Response | undefined> {\n this._hasRawListener = true;\n return this._rawPromise;\n }\n\n /** Constructs an RPC request. */\n public constructor(client: RpcInterface, operation: string, parameters: any[]) {\n this._created = new Date().getTime();\n this.path = \"\";\n this.method = \"\";\n this.client = client;\n this.protocol = client.configuration.protocol;\n this.operation = RpcOperation.lookup(client.constructor as any, operation);\n this.parameters = parameters;\n this.retryInterval = this.operation.policy.retryInterval(client.configuration);\n this.response = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n\n this._rawPromise = new Promise((resolve, reject) => {\n this._resolveRaw = resolve;\n this._rejectRaw = reject;\n });\n\n this.id = RpcConfiguration.requestContext.getId(this) || Guid.createValue();\n this.setStatus(RpcRequestStatus.Created);\n this.operation.policy.requestCallback(this);\n }\n\n /** Override to send the request. */\n protected abstract send(): Promise<number>;\n\n /** Override to load response value. */\n protected abstract load(): Promise<RpcSerializedValue>;\n\n /** Override to set request header values. */\n protected abstract setHeader(name: string, value: string): void;\n\n /** Sets the last updated time for the request. */\n protected setLastUpdatedTime() {\n this._lastUpdated = new Date().getTime();\n }\n\n protected computeRetryAfter(attempts: number) {\n return (((Math.pow(2, attempts) - 1) / 2) * 500) + 500;\n }\n\n protected recordTransientFault() {\n ++this._transientFaults;\n }\n\n protected resetTransientFaultCount() {\n this._transientFaults = 0;\n }\n\n protected supportsStatusCategory() {\n if (!this.protocol.supportsStatusCategory) {\n return false;\n }\n\n return RpcProtocol.protocolVersion >= RpcProtocolVersion.IntroducedStatusCategory && this.responseProtocolVersion >= RpcProtocolVersion.IntroducedStatusCategory;\n }\n\n /* @internal */\n public cancel() {\n if (typeof (this._sending) === \"undefined\") {\n return;\n }\n\n this._sending.cancel();\n this._sending = undefined;\n\n this._connecting = false;\n RpcRequest._activeRequests.delete(this.id);\n this.setStatus(RpcRequestStatus.Cancelled);\n }\n\n /* @internal */\n public async submit(): Promise<void> {\n if (!this._active)\n return;\n\n this._lastSubmitted = new Date().getTime();\n this._retryAfter = null;\n ++this._attempts;\n\n if (this.status === RpcRequestStatus.Created || this.status === RpcRequestStatus.NotFound || this.status === RpcRequestStatus.Cancelled) {\n this.setStatus(RpcRequestStatus.Submitted);\n }\n\n try {\n this._connecting = true;\n RpcRequest._activeRequests.set(this.id, this);\n this.protocol.events.raiseEvent(RpcProtocolEvent.RequestCreated, this);\n this._sending = new Cancellable(this.setHeaders().then(async () => this.send()));\n this.operation.policy.sentCallback(this);\n\n const response = await this._sending.promise;\n if (typeof (response) === \"undefined\") {\n return;\n }\n this._sending = undefined;\n\n const status = this.protocol.getStatus(response);\n\n if (this._hasRawListener && status === RpcRequestStatus.Resolved && typeof (this._response) !== \"undefined\") {\n this._connecting = false;\n RpcRequest._activeRequests.delete(this.id);\n this.resolveRaw();\n } else {\n this.protocol.events.raiseEvent(RpcProtocolEvent.ResponseLoading, this);\n\n if (status === RpcRequestStatus.Unknown) {\n this._connecting = false;\n RpcRequest._activeRequests.delete(this.id);\n this.handleUnknownResponse(response);\n return;\n }\n\n const value = await this.load();\n this.protocol.events.raiseEvent(RpcProtocolEvent.ResponseLoaded, this);\n RpcRequest._activeRequests.delete(this.id);\n this._connecting = false;\n this.handleResponse(response, value);\n }\n } catch (err) {\n this.protocol.events.raiseEvent(RpcProtocolEvent.ConnectionErrorReceived, this, err);\n RpcRequest._activeRequests.delete(this.id);\n this._connecting = false;\n this.reject(err);\n }\n }\n\n protected handleUnknownResponse(code: number) {\n this.reject(new IModelError(BentleyStatus.ERROR, `Unknown response ${code}.`));\n }\n\n private handleResponse(code: number, value: RpcSerializedValue) {\n const protocolStatus = this.protocol.getStatus(code);\n const status = this.transformResponseStatus(protocolStatus, value);\n\n if (RpcRequestStatus.isTransientError(status)) {\n return this.handleTransientError(status);\n }\n\n switch (status) {\n case RpcRequestStatus.Resolved: {\n return this.handleResolved(value);\n }\n\n case RpcRequestStatus.Rejected: {\n return this.handleRejected(value);\n }\n\n case RpcRequestStatus.Pending: {\n return this.setPending(status, value.objects);\n }\n\n case RpcRequestStatus.NotFound: {\n return this.handleNotFound(status, value);\n }\n\n case RpcRequestStatus.NoContent: {\n return this.handleNoContent();\n }\n }\n }\n\n private transformResponseStatus(protocolStatus: RpcRequestStatus, value: RpcSerializedValue): RpcRequestStatus {\n if (!this.supportsStatusCategory()) {\n return protocolStatus;\n }\n\n let status = protocolStatus;\n\n if (protocolStatus === RpcRequestStatus.Pending) {\n status = RpcRequestStatus.Rejected;\n } else if (protocolStatus === RpcRequestStatus.NotFound) {\n status = RpcRequestStatus.Rejected;\n } else if (protocolStatus === RpcRequestStatus.Unknown) {\n status = RpcRequestStatus.Rejected;\n }\n\n if (value.objects.indexOf(\"iTwinRpcCoreResponse\") !== -1 && value.objects.indexOf(\"managedStatus\") !== -1) {\n const managedStatus: RpcManagedStatus = JSON.parse(value.objects);\n value.objects = managedStatus.responseValue as string;\n\n if (managedStatus.managedStatus === \"pending\") {\n status = RpcRequestStatus.Pending;\n } else if (managedStatus.managedStatus === \"notFound\") {\n status = RpcRequestStatus.NotFound;\n }\n }\n\n return status;\n }\n\n private handleResolved(value: RpcSerializedValue) {\n try {\n this._raw = value.objects;\n const result: TResponse = RpcMarshaling.deserialize(this.protocol, value);\n\n if (ArrayBuffer.isView(result)) {\n this._raw = result.buffer;\n }\n\n return this.resolve(result);\n } catch (err) {\n return this.reject(err);\n }\n }\n\n private handleRejected(value: RpcSerializedValue) {\n this.protocol.events.raiseEvent(RpcProtocolEvent.BackendErrorReceived, this);\n\n try {\n const error = RpcMarshaling.deserialize(this.protocol, value);\n const hasInfo = error && typeof (error) === \"object\" && error.hasOwnProperty(\"name\") && error.hasOwnProperty(\"message\");\n const name = hasInfo ? error.name : \"\";\n const message = hasInfo ? error.message : \"\";\n const errorNumber = (hasInfo && error.hasOwnProperty(\"errorNumber\")) ? error.errorNumber : BentleyStatus.ERROR;\n return this.reject(new BackendError(errorNumber, name, message, () => error));\n } catch (err) {\n return this.reject(err);\n }\n }\n\n private handleNoContent() {\n return this.reject(new NoContentError());\n }\n\n private handleNotFound(status: RpcRequestStatus, value: RpcSerializedValue) {\n if (RpcRequest.notFoundHandlers.numberOfListeners === 0)\n this.handleRejected(value);\n\n const response = RpcMarshaling.deserialize(this.protocol, value);\n this.setStatus(status);\n\n let resubmitted = false;\n RpcRequest.notFoundHandlers.raiseEvent(this, response, () => {\n if (resubmitted)\n throw new IModelError(BentleyStatus.ERROR, `Already resubmitted using this handler.`);\n\n resubmitted = true;\n void this.submit();\n }, (reason: any) => reason ? this.reject(reason) : this.handleRejected(value));\n return;\n }\n\n private resolve(result: TResponse): void {\n if (!this._active)\n return;\n\n this._active = false;\n this.setLastUpdatedTime();\n this._resolve(result);\n\n if (this._hasRawListener) {\n if (typeof (this._raw) === \"undefined\") {\n throw new IModelError(BentleyStatus.ERROR, \"Cannot access raw response.\");\n }\n\n this._resolveRaw(new ResponseLike(this._raw));\n }\n\n this.setStatus(RpcRequestStatus.Resolved);\n this.dispose();\n }\n\n private resolveRaw() {\n if (typeof (this._response) === \"undefined\") {\n throw new IModelError(BentleyStatus.ERROR, \"Cannot access raw response.\");\n }\n\n this._active = false;\n this.setLastUpdatedTime();\n this._resolveRaw(this._response);\n this.setStatus(RpcRequestStatus.Resolved);\n this.dispose();\n }\n\n protected reject(reason: any): void {\n if (!this._active)\n return;\n\n this._active = false;\n this.setLastUpdatedTime();\n this._reject(reason);\n\n if (this._hasRawListener) {\n this._rejectRaw(reason);\n }\n\n this.setStatus(RpcRequestStatus.Rejected);\n this.dispose();\n }\n\n /** @internal */\n public dispose(): void {\n this.setStatus(RpcRequestStatus.Disposed);\n this._raw = undefined;\n this._response = undefined;\n\n const client = this.client as any;\n if (client[CURRENT_REQUEST] === this) {\n client[CURRENT_REQUEST] = undefined;\n }\n }\n\n private setPending(status: RpcRequestStatus.Pending, extendedStatus: string): void {\n if (!this._active)\n return;\n\n this.setLastUpdatedTime();\n this._extendedStatus = extendedStatus;\n this.setStatus(status);\n RpcRequest.events.raiseEvent(RpcRequestEvent.PendingUpdateReceived, this);\n }\n\n private handleTransientError(status: RpcRequestStatus) {\n if (!this._active)\n return;\n\n this.setLastUpdatedTime();\n this._retryAfter = this.computeRetryAfter(this._attempts - 1);\n\n if (this._transientFaults > this.protocol.configuration.transientFaultLimit) {\n this.reject(new IModelError(BentleyStatus.ERROR, `Exceeded transient fault limit.`));\n } else {\n this.setStatus(status);\n RpcRequest.events.raiseEvent(RpcRequestEvent.TransientErrorReceived, this);\n }\n }\n\n protected async setHeaders(): Promise<void> {\n const versionHeader = this.protocol.protocolVersionHeaderName;\n if (versionHeader && RpcProtocol.protocolVersion)\n this.setHeader(versionHeader, RpcProtocol.protocolVersion.toString());\n\n const headerNames = this.protocol.serializedClientRequestContextHeaderNames;\n const headerValues = await RpcConfiguration.requestContext.serialize(this);\n\n if (headerNames.id)\n this.setHeader(headerNames.id, headerValues.id || this.id); // Cannot be empty\n\n if (headerNames.applicationVersion)\n this.setHeader(headerNames.applicationVersion, headerValues.applicationVersion);\n\n if (headerNames.applicationId)\n this.setHeader(headerNames.applicationId, headerValues.applicationId);\n\n if (headerNames.sessionId)\n this.setHeader(headerNames.sessionId, headerValues.sessionId);\n\n if (headerNames.authorization && headerValues.authorization)\n this.setHeader(headerNames.authorization, headerValues.authorization);\n\n if (headerValues.csrfToken)\n this.setHeader(headerValues.csrfToken.headerName, headerValues.csrfToken.headerValue);\n }\n\n private setStatus(status: RpcRequestStatus): void {\n if (this._status === status)\n return;\n\n this._status = status;\n RpcRequest.events.raiseEvent(RpcRequestEvent.StatusChanged, this);\n }\n}\n\n/** @internal */\nexport const initializeRpcRequest = (() => {\n let initialized = false;\n\n return () => {\n if (initialized) {\n return;\n }\n\n initialized = true;\n\n RpcRequest.events.addListener((type, request) => {\n if (type !== RpcRequestEvent.StatusChanged)\n return;\n\n switch (request.status) {\n case RpcRequestStatus.Submitted: {\n aggregateLoad.lastRequest = request.lastSubmitted;\n break;\n }\n\n case RpcRequestStatus.Pending:\n case RpcRequestStatus.Resolved:\n case RpcRequestStatus.Rejected: {\n aggregateLoad.lastResponse = request.lastUpdated;\n break;\n }\n }\n });\n\n RpcProtocol.events.addListener((type) => {\n const now = new Date().getTime();\n\n switch (type) {\n case RpcProtocolEvent.RequestReceived: {\n aggregateLoad.lastRequest = now;\n break;\n }\n\n case RpcProtocolEvent.BackendReportedPending:\n case RpcProtocolEvent.BackendErrorOccurred:\n case RpcProtocolEvent.BackendResponseCreated: {\n aggregateLoad.lastResponse = now;\n break;\n }\n }\n });\n };\n})();\n"]}
1
+ {"version":3,"file":"RpcRequest.js","sourceRoot":"","sources":["../../../../src/rpc/core/RpcRequest.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { BeEvent, BentleyStatus, Guid } from \"@itwin/core-bentley\";\nimport { IModelRpcProps } from \"../../IModel\";\nimport { BackendError, IModelError, NoContentError } from \"../../IModelError\";\nimport { RpcInterface } from \"../../RpcInterface\";\nimport { RpcConfiguration } from \"./RpcConfiguration\";\nimport { RpcProtocolEvent, RpcRequestEvent, RpcRequestStatus, RpcResponseCacheControl } from \"./RpcConstants\";\nimport { RpcNotFoundResponse } from \"./RpcControl\";\nimport { RpcMarshaling, RpcSerializedValue } from \"./RpcMarshaling\";\nimport { RpcOperation } from \"./RpcOperation\";\nimport { RpcManagedStatus, RpcProtocol, RpcProtocolVersion } from \"./RpcProtocol\";\nimport { CURRENT_REQUEST } from \"./RpcRegistry\";\n\n/* eslint-disable @typescript-eslint/naming-convention */\n// cspell:ignore csrf\n/* eslint-disable deprecation/deprecation */\n\n/** @internal */\nexport const aggregateLoad = { lastRequest: 0, lastResponse: 0 };\n\n/** @internal */\nexport class ResponseLike implements Response {\n private _data: Promise<any>;\n public get body() { return null; }\n public async arrayBuffer(): Promise<ArrayBuffer> { return this._data; }\n public async blob(): Promise<Blob> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n public async formData(): Promise<FormData> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n public async json(): Promise<any> { return this._data; }\n public async text(): Promise<string> { return this._data; }\n public get bodyUsed() { return false; }\n public get headers(): Headers { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n public get ok(): boolean { return this.status >= 200 && this.status <= 299; }\n public get redirected() { return false; }\n public get status() { return 200; }\n public get statusText() { return \"\"; }\n public get trailer(): Promise<Headers> { throw new IModelError(BentleyStatus.ERROR, \"Not implemented.\"); }\n public get type(): ResponseType { return \"basic\"; }\n public get url() { return \"\"; }\n public clone() { return { ...this }; }\n\n public constructor(data: any) {\n this._data = Promise.resolve(data);\n }\n}\n\n/** Supplies an IModelRpcProps for an RPC request.\n * @internal\n */\nexport type RpcRequestTokenSupplier_T = (request: RpcRequest) => IModelRpcProps | undefined;\n\n/** Supplies the initial retry interval for an RPC request.\n * @internal\n */\nexport type RpcRequestInitialRetryIntervalSupplier_T = (configuration: RpcConfiguration) => number;\n\n/** Notification callback for an RPC request.\n * @internal\n */\nexport type RpcRequestCallback_T = (request: RpcRequest) => void;\n\n/** Determines if caching is permitted for a RPC response.\n * @internal\n */\nexport type RpcResponseCachingCallback_T = (request: RpcRequest) => RpcResponseCacheControl;\n\n/** Runtime information related to the operation load of one or more RPC interfaces.\n * @internal\n */\nexport interface RpcOperationsProfile {\n readonly lastRequest: number;\n readonly lastResponse: number;\n}\n\n/** Handles RPC request events.\n * @internal\n */\nexport type RpcRequestEventHandler = (type: RpcRequestEvent, request: RpcRequest) => void;\n\n/** Resolves \"not found\" responses for RPC requests.\n * @internal\n */\nexport type RpcRequestNotFoundHandler = (request: RpcRequest, response: RpcNotFoundResponse, resubmit: () => void, reject: (reason?: any) => void) => void;\n\nclass Cancellable<T> {\n public promise: Promise<T | undefined>;\n public cancel() { }\n\n public constructor(task: Promise<T>) {\n this.promise = new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.cancel = () => resolve(undefined);\n task.then(resolve, reject);\n });\n }\n}\n\n/** A RPC operation request.\n * @internal\n */\nexport abstract class RpcRequest<TResponse = any> {\n private static _activeRequests: Map<string, RpcRequest> = new Map();\n private _resolve: (value?: TResponse | PromiseLike<TResponse> | undefined) => void = () => undefined;\n protected _resolveRaw: (value?: Response | PromiseLike<Response> | undefined) => void = () => undefined;\n private _reject: (reason?: any) => void = () => undefined;\n private _rejectRaw: (reason?: any) => void = () => undefined;\n private _created: number = 0;\n private _lastSubmitted: number = 0;\n private _lastUpdated: number = 0;\n\n /** @internal */\n public _status: RpcRequestStatus = RpcRequestStatus.Unknown;\n\n /** @internal */\n public _extendedStatus: string = \"\";\n\n private _connecting: boolean = false;\n private _active: boolean = true;\n private _hasRawListener = false;\n private _raw: ArrayBuffer | string | undefined = undefined;\n private _sending?: Cancellable<number>;\n private _attempts = 0;\n private _retryAfter: number | null = null;\n private _transientFaults = 0;\n protected _response: Response | undefined = undefined;\n protected _rawPromise: Promise<Response | undefined>;\n public responseProtocolVersion = RpcProtocolVersion.None;\n\n /** All RPC requests that are currently in flight. */\n public static get activeRequests(): ReadonlyMap<string, RpcRequest> { return this._activeRequests; }\n\n /** Events raised by RpcRequest. See [[RpcRequestEvent]] */\n public static readonly events: BeEvent<RpcRequestEventHandler> = new BeEvent();\n\n /** Resolvers for \"not found\" requests. See [[RpcRequestNotFoundHandler]] */\n public static readonly notFoundHandlers: BeEvent<RpcRequestNotFoundHandler> = new BeEvent();\n\n /** The aggregate operations profile of all active RPC interfaces. */\n public static get aggregateLoad(): RpcOperationsProfile { return aggregateLoad; }\n\n /**\n * The request for the current RPC operation.\n * @note The return value of this function is only reliable if program control was received from a RPC interface class member function that directly returns the result of calling RpcInterface.forward.\n */\n public static current(context: RpcInterface): RpcRequest {\n return (context as any)[CURRENT_REQUEST];\n }\n\n /** The unique identifier of this request. */\n public readonly id: string;\n\n /** The operation for this request. */\n public readonly operation: RpcOperation;\n\n /** The parameters for this request. */\n public parameters: any[];\n\n /** The RPC client instance for this request. */\n public readonly client: RpcInterface;\n\n /** Convenience access to the protocol of this request. */\n public readonly protocol: RpcProtocol;\n\n /** The implementation response for this request. */\n public readonly response: Promise<TResponse | undefined>;\n\n /** The status of this request. */\n public get status() { return this._status; }\n\n /** Extended status information for this request (if available). */\n public get extendedStatus() { return this._extendedStatus; }\n\n /** The last submission for this request. */\n public get lastSubmitted() { return this._lastSubmitted; }\n\n /** The last status update received for this request. */\n public get lastUpdated() { return this._lastUpdated; }\n\n /** The target interval (in milliseconds) between submission attempts for this request. */\n public retryInterval: number;\n\n /** Whether a connection is active for this request. */\n public get connecting() { return this._connecting; }\n\n /** Whether this request is pending. */\n public get pending(): boolean {\n switch (this.status) {\n case RpcRequestStatus.Submitted:\n case RpcRequestStatus.Pending: {\n return true;\n }\n\n default: {\n return false;\n }\n }\n }\n\n /** The elapsed time for this request. */\n public get elapsed(): number {\n return this._lastUpdated - this._created;\n }\n\n /** A protocol-specific path identifier for this request. */\n public path: string;\n\n /** A protocol-specific method identifier for this request. */\n public method: string;\n\n /** An attempt-specific value for when to next retry this request. */\n public get retryAfter() { return this._retryAfter; }\n\n /** Finds the first parameter of a given structural type if present. */\n public findParameterOfType<T>(requiredProperties: { [index: string]: string }): T | undefined {\n for (const param of this.parameters) {\n if (typeof (param) === \"object\" && param !== null) {\n for (const prop of Object.getOwnPropertyNames(requiredProperties)) {\n if (prop in param && typeof (param[prop]) === requiredProperties[prop]) {\n return param;\n }\n }\n }\n }\n\n return undefined;\n }\n\n /** Finds the first IModelRpcProps parameter if present. */\n public findTokenPropsParameter(): IModelRpcProps | undefined {\n return this.findParameterOfType({ iModelId: \"string\" });\n\n }\n\n /** The raw implementation response for this request. */\n public get rawResponse(): Promise<Response | undefined> {\n this._hasRawListener = true;\n return this._rawPromise;\n }\n\n /** Constructs an RPC request. */\n public constructor(client: RpcInterface, operation: string, parameters: any[]) {\n this._created = new Date().getTime();\n this.path = \"\";\n this.method = \"\";\n this.client = client;\n this.protocol = client.configuration.protocol;\n this.operation = RpcOperation.lookup(client.constructor as any, operation);\n this.parameters = parameters;\n this.retryInterval = this.operation.policy.retryInterval(client.configuration);\n this.response = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n\n this._rawPromise = new Promise((resolve, reject) => {\n this._resolveRaw = resolve;\n this._rejectRaw = reject;\n });\n\n this.id = RpcConfiguration.requestContext.getId(this) || Guid.createValue();\n this.setStatus(RpcRequestStatus.Created);\n this.operation.policy.requestCallback(this);\n }\n\n /** Override to send the request. */\n protected abstract send(): Promise<number>;\n\n /** Override to load response value. */\n protected abstract load(): Promise<RpcSerializedValue>;\n\n /** Override to set request header values. */\n protected abstract setHeader(name: string, value: string): void;\n\n /** Sets the last updated time for the request. */\n protected setLastUpdatedTime() {\n this._lastUpdated = new Date().getTime();\n }\n\n protected computeRetryAfter(attempts: number) {\n return (((Math.pow(2, attempts) - 1) / 2) * 500) + 500;\n }\n\n protected recordTransientFault() {\n ++this._transientFaults;\n }\n\n protected resetTransientFaultCount() {\n this._transientFaults = 0;\n }\n\n protected supportsStatusCategory() {\n if (!this.protocol.supportsStatusCategory) {\n return false;\n }\n\n return RpcProtocol.protocolVersion >= RpcProtocolVersion.IntroducedStatusCategory && this.responseProtocolVersion >= RpcProtocolVersion.IntroducedStatusCategory;\n }\n\n /* @internal */\n public cancel() {\n if (typeof (this._sending) === \"undefined\") {\n return;\n }\n\n this._sending.cancel();\n this._sending = undefined;\n\n this._connecting = false;\n RpcRequest._activeRequests.delete(this.id);\n this.setStatus(RpcRequestStatus.Cancelled);\n }\n\n /* @internal */\n public async submit(): Promise<void> {\n if (!this._active)\n return;\n\n this._lastSubmitted = new Date().getTime();\n this._retryAfter = null;\n ++this._attempts;\n\n if (this.status === RpcRequestStatus.Created || this.status === RpcRequestStatus.NotFound || this.status === RpcRequestStatus.Cancelled) {\n this.setStatus(RpcRequestStatus.Submitted);\n }\n\n try {\n this._connecting = true;\n RpcRequest._activeRequests.set(this.id, this);\n this.protocol.events.raiseEvent(RpcProtocolEvent.RequestCreated, this);\n this._sending = new Cancellable(this.setHeaders().then(async () => this.send()));\n this.operation.policy.sentCallback(this);\n\n const response = await this._sending.promise;\n if (typeof (response) === \"undefined\") {\n return;\n }\n this._sending = undefined;\n\n const status = this.protocol.getStatus(response);\n\n if (this._hasRawListener && status === RpcRequestStatus.Resolved && typeof (this._response) !== \"undefined\") {\n this._connecting = false;\n RpcRequest._activeRequests.delete(this.id);\n this.resolveRaw();\n } else {\n this.protocol.events.raiseEvent(RpcProtocolEvent.ResponseLoading, this);\n\n if (status === RpcRequestStatus.Unknown) {\n this._connecting = false;\n RpcRequest._activeRequests.delete(this.id);\n this.handleUnknownResponse(response);\n return;\n }\n\n const value = await this.load();\n this.protocol.events.raiseEvent(RpcProtocolEvent.ResponseLoaded, this);\n RpcRequest._activeRequests.delete(this.id);\n this._connecting = false;\n this.handleResponse(response, value);\n }\n } catch (err) {\n this.protocol.events.raiseEvent(RpcProtocolEvent.ConnectionErrorReceived, this, err);\n RpcRequest._activeRequests.delete(this.id);\n this._connecting = false;\n this.reject(err);\n }\n }\n\n protected handleUnknownResponse(code: number) {\n this.reject(new IModelError(BentleyStatus.ERROR, `Unknown response ${code}.`));\n }\n\n private handleResponse(code: number, value: RpcSerializedValue) {\n const protocolStatus = this.protocol.getStatus(code);\n const status = this.transformResponseStatus(protocolStatus, value);\n\n if (RpcRequestStatus.isTransientError(status)) {\n return this.handleTransientError(status);\n }\n\n switch (status) {\n case RpcRequestStatus.Resolved: {\n return this.handleResolved(value);\n }\n\n case RpcRequestStatus.Rejected: {\n return this.handleRejected(value);\n }\n\n case RpcRequestStatus.Pending: {\n return this.setPending(status, value.objects);\n }\n\n case RpcRequestStatus.NotFound: {\n return this.handleNotFound(status, value);\n }\n\n case RpcRequestStatus.NoContent: {\n return this.handleNoContent();\n }\n }\n }\n\n private transformResponseStatus(protocolStatus: RpcRequestStatus, value: RpcSerializedValue): RpcRequestStatus {\n if (!this.supportsStatusCategory()) {\n return protocolStatus;\n }\n\n let status = protocolStatus;\n\n if (protocolStatus === RpcRequestStatus.Pending) {\n status = RpcRequestStatus.Rejected;\n } else if (protocolStatus === RpcRequestStatus.NotFound) {\n status = RpcRequestStatus.Rejected;\n } else if (protocolStatus === RpcRequestStatus.Unknown) {\n status = RpcRequestStatus.Rejected;\n }\n\n if (value.objects.indexOf(\"iTwinRpcCoreResponse\") !== -1 && value.objects.indexOf(\"managedStatus\") !== -1) {\n const managedStatus: RpcManagedStatus = JSON.parse(value.objects);\n value.objects = managedStatus.responseValue as string;\n\n if (managedStatus.managedStatus === \"pending\") {\n status = RpcRequestStatus.Pending;\n } else if (managedStatus.managedStatus === \"notFound\") {\n status = RpcRequestStatus.NotFound;\n }\n }\n\n return status;\n }\n\n private handleResolved(value: RpcSerializedValue) {\n try {\n this._raw = value.objects;\n const result: TResponse = RpcMarshaling.deserialize(this.protocol, value);\n\n if (ArrayBuffer.isView(result)) {\n this._raw = result.buffer;\n }\n\n return this.resolve(result);\n } catch (err) {\n return this.reject(err);\n }\n }\n\n private handleRejected(value: RpcSerializedValue) {\n this.protocol.events.raiseEvent(RpcProtocolEvent.BackendErrorReceived, this);\n\n try {\n const error = RpcMarshaling.deserialize(this.protocol, value);\n const hasInfo = error && typeof (error) === \"object\" && error.hasOwnProperty(\"name\") && error.hasOwnProperty(\"message\");\n const name = hasInfo ? error.name : \"\";\n const message = hasInfo ? error.message : \"\";\n const errorNumber = (hasInfo && error.hasOwnProperty(\"errorNumber\")) ? error.errorNumber : BentleyStatus.ERROR;\n return this.reject(new BackendError(errorNumber, name, message, () => error));\n } catch (err) {\n return this.reject(err);\n }\n }\n\n private handleNoContent() {\n return this.reject(new NoContentError());\n }\n\n private handleNotFound(status: RpcRequestStatus, value: RpcSerializedValue) {\n if (RpcRequest.notFoundHandlers.numberOfListeners === 0)\n this.handleRejected(value);\n\n const response = RpcMarshaling.deserialize(this.protocol, value);\n this.setStatus(status);\n\n let resubmitted = false;\n RpcRequest.notFoundHandlers.raiseEvent(this, response, () => {\n if (resubmitted)\n throw new IModelError(BentleyStatus.ERROR, `Already resubmitted using this handler.`);\n\n resubmitted = true;\n void this.submit();\n }, (reason: any) => reason ? this.reject(reason) : this.handleRejected(value));\n return;\n }\n\n private resolve(result: TResponse): void {\n if (!this._active)\n return;\n\n this._active = false;\n this.setLastUpdatedTime();\n this._resolve(result);\n\n if (this._hasRawListener) {\n if (typeof (this._raw) === \"undefined\") {\n throw new IModelError(BentleyStatus.ERROR, \"Cannot access raw response.\");\n }\n\n this._resolveRaw(new ResponseLike(this._raw));\n }\n\n this.setStatus(RpcRequestStatus.Resolved);\n this.dispose();\n }\n\n private resolveRaw() {\n if (typeof (this._response) === \"undefined\") {\n throw new IModelError(BentleyStatus.ERROR, \"Cannot access raw response.\");\n }\n\n this._active = false;\n this.setLastUpdatedTime();\n this._resolveRaw(this._response);\n this.setStatus(RpcRequestStatus.Resolved);\n this.dispose();\n }\n\n protected reject(reason: any): void {\n if (!this._active)\n return;\n\n this._active = false;\n this.setLastUpdatedTime();\n this._reject(reason);\n\n if (this._hasRawListener) {\n this._rejectRaw(reason);\n }\n\n this.setStatus(RpcRequestStatus.Rejected);\n this.dispose();\n }\n\n /** @internal */\n public dispose(): void {\n this.setStatus(RpcRequestStatus.Disposed);\n this._raw = undefined;\n this._response = undefined;\n\n const client = this.client as any;\n if (client[CURRENT_REQUEST] === this) {\n client[CURRENT_REQUEST] = undefined;\n }\n }\n\n private setPending(status: RpcRequestStatus.Pending, extendedStatus: string): void {\n if (!this._active)\n return;\n\n this.setLastUpdatedTime();\n this._extendedStatus = extendedStatus;\n this.setStatus(status);\n RpcRequest.events.raiseEvent(RpcRequestEvent.PendingUpdateReceived, this);\n }\n\n private handleTransientError(status: RpcRequestStatus) {\n if (!this._active)\n return;\n\n this.setLastUpdatedTime();\n this._retryAfter = this.computeRetryAfter(this._attempts - 1);\n\n if (this._transientFaults > this.protocol.configuration.transientFaultLimit) {\n this.reject(new IModelError(BentleyStatus.ERROR, `Exceeded transient fault limit.`));\n } else {\n this.setStatus(status);\n RpcRequest.events.raiseEvent(RpcRequestEvent.TransientErrorReceived, this);\n }\n }\n\n protected async setHeaders(): Promise<void> {\n const versionHeader = this.protocol.protocolVersionHeaderName;\n if (versionHeader && RpcProtocol.protocolVersion)\n this.setHeader(versionHeader, RpcProtocol.protocolVersion.toString());\n\n const headerNames = this.protocol.serializedClientRequestContextHeaderNames;\n const headerValues = await RpcConfiguration.requestContext.serialize(this);\n\n if (headerNames.id)\n this.setHeader(headerNames.id, headerValues.id || this.id); // Cannot be empty\n\n if (headerNames.applicationVersion)\n this.setHeader(headerNames.applicationVersion, headerValues.applicationVersion);\n\n if (headerNames.applicationId)\n this.setHeader(headerNames.applicationId, headerValues.applicationId);\n\n if (headerNames.sessionId)\n this.setHeader(headerNames.sessionId, headerValues.sessionId);\n\n if (headerNames.authorization && headerValues.authorization)\n this.setHeader(headerNames.authorization, headerValues.authorization);\n\n if (headerValues.csrfToken)\n this.setHeader(headerValues.csrfToken.headerName, headerValues.csrfToken.headerValue);\n }\n\n private setStatus(status: RpcRequestStatus): void {\n if (this._status === status)\n return;\n\n this._status = status;\n RpcRequest.events.raiseEvent(RpcRequestEvent.StatusChanged, this);\n }\n}\n\n/** @internal */\nexport const initializeRpcRequest = (() => {\n let initialized = false;\n\n return () => {\n if (initialized) {\n return;\n }\n\n initialized = true;\n\n RpcRequest.events.addListener((type, request) => {\n if (type !== RpcRequestEvent.StatusChanged)\n return;\n\n switch (request.status) {\n case RpcRequestStatus.Submitted: {\n aggregateLoad.lastRequest = request.lastSubmitted;\n break;\n }\n\n case RpcRequestStatus.Pending:\n case RpcRequestStatus.Resolved:\n case RpcRequestStatus.Rejected: {\n aggregateLoad.lastResponse = request.lastUpdated;\n break;\n }\n }\n });\n\n RpcProtocol.events.addListener((type) => {\n const now = new Date().getTime();\n\n switch (type) {\n case RpcProtocolEvent.RequestReceived: {\n aggregateLoad.lastRequest = now;\n break;\n }\n\n case RpcProtocolEvent.BackendReportedPending:\n case RpcProtocolEvent.BackendErrorOccurred:\n case RpcProtocolEvent.BackendResponseCreated: {\n aggregateLoad.lastResponse = now;\n break;\n }\n }\n });\n };\n})();\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"BentleyCloudRpcProtocol.d.ts","sourceRoot":"","sources":["../../../../src/rpc/web/BentleyCloudRpcProtocol.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAQ9D;;GAEG;AACH,8BAAsB,uBAAwB,SAAQ,iBAAiB;IACrD,UAAU,UAAQ;IAElC,iFAAiF;IACjE,yCAAyC,EAAE,qBAAqB,CAe9E;IAEF,mDAAmD;IACnC,yBAAyB,SAAwB;IAEjE,yEAAyE;IACzD,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB;IAoB1E,qEAAqE;IACrD,sBAAsB,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,GAAG,SAAS;IA0C/F;;;OAGG;IACa,YAAY,CAAC,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,oBAAoB,GAAG,cAAc;IA4B1G;;OAEG;IACI,gCAAgC,CAAC,UAAU,EAAE,YAAY,GAAG,gBAAgB,EAAE;CAQtF"}
1
+ {"version":3,"file":"BentleyCloudRpcProtocol.d.ts","sourceRoot":"","sources":["../../../../src/rpc/web/BentleyCloudRpcProtocol.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAQ9D;;GAEG;AACH,8BAAsB,uBAAwB,SAAQ,iBAAiB;IACrD,UAAU,UAAQ;IAElC,iFAAiF;IACjE,yCAAyC,EAAE,qBAAqB,CAe9E;IAEF,mDAAmD;IACnC,yBAAyB,SAAwB;IAEjE,yEAAyE;IACzD,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB;IAoB1E,qEAAqE;IACrD,sBAAsB,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,GAAG,SAAS;IA0C/F;;;OAGG;IACa,YAAY,CAAC,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,oBAAoB,GAAG,cAAc;IA6B1G;;OAEG;IACI,gCAAgC,CAAC,UAAU,EAAE,YAAY,GAAG,gBAAgB,EAAE;CAQtF"}
@@ -98,7 +98,6 @@ export class BentleyCloudRpcProtocol extends WebAppRpcProtocol {
98
98
  */
99
99
  inflateToken(tokenFromBody, request) {
100
100
  const urlPathComponents = request.path.split("/");
101
- const iModelKey = tokenFromBody.key;
102
101
  let iModelId = tokenFromBody.iModelId;
103
102
  let iTwinId = tokenFromBody.iTwinId;
104
103
  const changeset = { id: tokenFromBody.changeset?.id ?? "0", index: tokenFromBody.changeset?.index };
@@ -121,7 +120,9 @@ export class BentleyCloudRpcProtocol extends WebAppRpcProtocol {
121
120
  ++i;
122
121
  }
123
122
  }
124
- return { key: iModelKey, iTwinId, iModelId, changeset };
123
+ // Overwrite the key if it includes a : because its most likely a guid. We know what it should be based off of the url.
124
+ // Leave it alone if its a non guid key.
125
+ return { key: tokenFromBody.key === undefined || tokenFromBody.key.includes(":") ? `${iModelId}:${changeset.id}` : tokenFromBody.key, iTwinId, iModelId, changeset };
125
126
  }
126
127
  /** Returns the OpenAPI-compatible URI path parameters for an RPC operation.
127
128
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"BentleyCloudRpcProtocol.js","sourceRoot":"","sources":["../../../../src/rpc/web/BentleyCloudRpcProtocol.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { BentleyStatus } from \"@itwin/core-bentley\";\nimport { IModelRpcProps } from \"../../IModel\";\nimport { IModelError } from \"../../IModelError\";\nimport { RpcConfiguration } from \"../core/RpcConfiguration\";\nimport { RpcOperation } from \"../core/RpcOperation\";\nimport { SerializedRpcOperation, SerializedRpcRequest } from \"../core/RpcProtocol\";\nimport { RpcRequest } from \"../core/RpcRequest\";\nimport { OpenAPIParameter } from \"./OpenAPI\";\nimport { WebAppRpcProtocol } from \"./WebAppRpcProtocol\";\nimport { SerializedRpcActivity } from \"../core/RpcInvocation\";\n\n/* eslint-disable deprecation/deprecation */\n\nenum AppMode {\n MilestoneReview = \"1\",\n}\n\n/** An http protocol for Bentley cloud RPC interface deployments.\n * @internal\n */\nexport abstract class BentleyCloudRpcProtocol extends WebAppRpcProtocol {\n public override checkToken = true;\n\n /** The name of various HTTP request headers based on client's request context */\n public override serializedClientRequestContextHeaderNames: SerializedRpcActivity = {\n /** The name of the HTTP request id header. */\n id: \"X-Correlation-Id\",\n\n /** The name of the HTTP application id header. */\n applicationId: \"X-Application-Id\",\n\n /** The name of the HTTP application version header. */\n applicationVersion: \"X-Application-Version\",\n\n /** The name of the HTTP session id header. */\n sessionId: \"X-Session-Id\",\n\n /** The name of the HTTP authorization header. */\n authorization: \"Authorization\",\n };\n\n /** The name of the RPC protocol version header. */\n public override protocolVersionHeaderName = \"X-Protocol-Version\";\n\n /** Returns the operation specified by an OpenAPI-compatible URI path. */\n public override getOperationFromPath(path: string): SerializedRpcOperation {\n const url = new URL(path, \"https://localhost/\");\n const components = url.pathname.split(\"/\").filter((x) => x); // filter out empty segments\n\n const operationComponent = components.slice(-1)[0];\n const encodedRequest = url.searchParams.get(\"parameters\") || \"\";\n\n // The encodedRequest should be base64 - fail now if any other characters detected.\n if (/[^a-zA-Z0-9=+\\/$]/.test(encodedRequest))\n throw new IModelError(BentleyStatus.ERROR, `Invalid request: Malformed URL parameters detected.`);\n\n const firstHyphen = operationComponent.indexOf(\"-\");\n const lastHyphen = operationComponent.lastIndexOf(\"-\");\n const interfaceDefinition = operationComponent.slice(0, firstHyphen);\n const interfaceVersion = operationComponent.slice(firstHyphen + 1, lastHyphen);\n const operationName = operationComponent.slice(lastHyphen + 1);\n\n return { interfaceDefinition, operationName, interfaceVersion, encodedRequest };\n }\n\n /** Supplies the OpenAPI-compatible URI path for an RPC operation. */\n public override supplyPathForOperation(operation: RpcOperation, request: RpcRequest | undefined) {\n const prefix = this.pathPrefix;\n const appTitle = this.info.title;\n const appVersion = this.info.version;\n const operationId = `${operation.interfaceDefinition.interfaceName}-${operation.interfaceVersion}-${operation.operationName}`;\n\n let appMode: string = \"\";\n let iTwinId: string = \"\";\n let iModelId: string = \"\";\n let routeChangesetId: string | undefined;\n /* Note: The changesetId field is omitted in the route in the case of ReadWrite connections since the connection is generally expected to be at the\n * latest version and not some specific changeset. Also, for the first version (before any changesets), the changesetId in the route is arbitrarily\n * set to \"0\" instead of an empty string, since the latter is more un-intuitive for a route. However, in all other use cases, including the changesetId\n * held by the IModelRpcProps itself, the changesetId of \"\" (i.e., empty string) signifies the first version - this is more intuitive and retains\n * compatibility with the majority of use cases. */\n\n if (request === undefined) {\n appMode = \"{modeId}\";\n iTwinId = \"{iTwinId}\";\n iModelId = \"{iModelId}\";\n routeChangesetId = \"{changeSetId}\";\n } else {\n let token = operation.policy.token(request) || RpcOperation.fallbackToken;\n\n if (!token || !token.iModelId) {\n if (RpcConfiguration.disableRoutingValidation) {\n token = { key: \"\" };\n } else {\n throw new IModelError(BentleyStatus.ERROR, \"Invalid iModelToken for RPC operation request\");\n }\n }\n\n iTwinId = encodeURIComponent(token.iTwinId || \"\");\n iModelId = encodeURIComponent(token.iModelId!);\n\n routeChangesetId = token.changeset?.id || \"0\";\n appMode = AppMode.MilestoneReview;\n }\n\n return `${prefix}/${appTitle}/${appVersion}/mode/${appMode}/context/${iTwinId}/imodel/${iModelId}${!!routeChangesetId ? `/changeset/${routeChangesetId}` : \"\"}/${operationId}`;\n }\n\n /**\n * Inflates the IModelRpcProps from the URL path for each request on the backend.\n * @note This function updates the IModelRpcProps value supplied in the request body.\n */\n public override inflateToken(tokenFromBody: IModelRpcProps, request: SerializedRpcRequest): IModelRpcProps {\n const urlPathComponents = request.path.split(\"/\");\n\n const iModelKey = tokenFromBody.key;\n let iModelId = tokenFromBody.iModelId;\n let iTwinId = tokenFromBody.iTwinId;\n const changeset = { id: tokenFromBody.changeset?.id ?? \"0\", index: tokenFromBody.changeset?.index };\n\n for (let i = 0; i <= urlPathComponents.length; ++i) {\n const key = urlPathComponents[i];\n const value = urlPathComponents[i + 1];\n if (key === \"mode\") {\n ++i;\n } else if (key === \"context\") {\n iTwinId = value;\n ++i;\n } else if (key === \"imodel\") {\n iModelId = value;\n ++i;\n } else if (key === \"changeset\") {\n changeset.id = (value === \"0\") ? \"\" : value;\n ++i;\n }\n }\n\n return { key: iModelKey, iTwinId, iModelId, changeset };\n }\n\n /** Returns the OpenAPI-compatible URI path parameters for an RPC operation.\n * @internal\n */\n public supplyPathParametersForOperation(_operation: RpcOperation): OpenAPIParameter[] {\n return [\n { name: \"modeId\", in: \"path\", required: true, schema: { type: \"string\" } },\n { name: \"iTwinId\", in: \"path\", required: true, schema: { type: \"string\" } },\n { name: \"iModelId\", in: \"path\", required: true, schema: { type: \"string\" } },\n { name: \"changeSetId\", in: \"path\", required: false, schema: { type: \"string\" } },\n ];\n }\n}\n"]}
1
+ {"version":3,"file":"BentleyCloudRpcProtocol.js","sourceRoot":"","sources":["../../../../src/rpc/web/BentleyCloudRpcProtocol.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module RpcInterface\n */\n\nimport { BentleyStatus } from \"@itwin/core-bentley\";\nimport { IModelRpcProps } from \"../../IModel\";\nimport { IModelError } from \"../../IModelError\";\nimport { RpcConfiguration } from \"../core/RpcConfiguration\";\nimport { RpcOperation } from \"../core/RpcOperation\";\nimport { SerializedRpcOperation, SerializedRpcRequest } from \"../core/RpcProtocol\";\nimport { RpcRequest } from \"../core/RpcRequest\";\nimport { OpenAPIParameter } from \"./OpenAPI\";\nimport { WebAppRpcProtocol } from \"./WebAppRpcProtocol\";\nimport { SerializedRpcActivity } from \"../core/RpcInvocation\";\n\n/* eslint-disable deprecation/deprecation */\n\nenum AppMode {\n MilestoneReview = \"1\",\n}\n\n/** An http protocol for Bentley cloud RPC interface deployments.\n * @internal\n */\nexport abstract class BentleyCloudRpcProtocol extends WebAppRpcProtocol {\n public override checkToken = true;\n\n /** The name of various HTTP request headers based on client's request context */\n public override serializedClientRequestContextHeaderNames: SerializedRpcActivity = {\n /** The name of the HTTP request id header. */\n id: \"X-Correlation-Id\",\n\n /** The name of the HTTP application id header. */\n applicationId: \"X-Application-Id\",\n\n /** The name of the HTTP application version header. */\n applicationVersion: \"X-Application-Version\",\n\n /** The name of the HTTP session id header. */\n sessionId: \"X-Session-Id\",\n\n /** The name of the HTTP authorization header. */\n authorization: \"Authorization\",\n };\n\n /** The name of the RPC protocol version header. */\n public override protocolVersionHeaderName = \"X-Protocol-Version\";\n\n /** Returns the operation specified by an OpenAPI-compatible URI path. */\n public override getOperationFromPath(path: string): SerializedRpcOperation {\n const url = new URL(path, \"https://localhost/\");\n const components = url.pathname.split(\"/\").filter((x) => x); // filter out empty segments\n\n const operationComponent = components.slice(-1)[0];\n const encodedRequest = url.searchParams.get(\"parameters\") || \"\";\n\n // The encodedRequest should be base64 - fail now if any other characters detected.\n if (/[^a-zA-Z0-9=+\\/$]/.test(encodedRequest))\n throw new IModelError(BentleyStatus.ERROR, `Invalid request: Malformed URL parameters detected.`);\n\n const firstHyphen = operationComponent.indexOf(\"-\");\n const lastHyphen = operationComponent.lastIndexOf(\"-\");\n const interfaceDefinition = operationComponent.slice(0, firstHyphen);\n const interfaceVersion = operationComponent.slice(firstHyphen + 1, lastHyphen);\n const operationName = operationComponent.slice(lastHyphen + 1);\n\n return { interfaceDefinition, operationName, interfaceVersion, encodedRequest };\n }\n\n /** Supplies the OpenAPI-compatible URI path for an RPC operation. */\n public override supplyPathForOperation(operation: RpcOperation, request: RpcRequest | undefined) {\n const prefix = this.pathPrefix;\n const appTitle = this.info.title;\n const appVersion = this.info.version;\n const operationId = `${operation.interfaceDefinition.interfaceName}-${operation.interfaceVersion}-${operation.operationName}`;\n\n let appMode: string = \"\";\n let iTwinId: string = \"\";\n let iModelId: string = \"\";\n let routeChangesetId: string | undefined;\n /* Note: The changesetId field is omitted in the route in the case of ReadWrite connections since the connection is generally expected to be at the\n * latest version and not some specific changeset. Also, for the first version (before any changesets), the changesetId in the route is arbitrarily\n * set to \"0\" instead of an empty string, since the latter is more un-intuitive for a route. However, in all other use cases, including the changesetId\n * held by the IModelRpcProps itself, the changesetId of \"\" (i.e., empty string) signifies the first version - this is more intuitive and retains\n * compatibility with the majority of use cases. */\n\n if (request === undefined) {\n appMode = \"{modeId}\";\n iTwinId = \"{iTwinId}\";\n iModelId = \"{iModelId}\";\n routeChangesetId = \"{changeSetId}\";\n } else {\n let token = operation.policy.token(request) || RpcOperation.fallbackToken;\n\n if (!token || !token.iModelId) {\n if (RpcConfiguration.disableRoutingValidation) {\n token = { key: \"\" };\n } else {\n throw new IModelError(BentleyStatus.ERROR, \"Invalid iModelToken for RPC operation request\");\n }\n }\n\n iTwinId = encodeURIComponent(token.iTwinId || \"\");\n iModelId = encodeURIComponent(token.iModelId!);\n\n routeChangesetId = token.changeset?.id || \"0\";\n appMode = AppMode.MilestoneReview;\n }\n\n return `${prefix}/${appTitle}/${appVersion}/mode/${appMode}/context/${iTwinId}/imodel/${iModelId}${!!routeChangesetId ? `/changeset/${routeChangesetId}` : \"\"}/${operationId}`;\n }\n\n /**\n * Inflates the IModelRpcProps from the URL path for each request on the backend.\n * @note This function updates the IModelRpcProps value supplied in the request body.\n */\n public override inflateToken(tokenFromBody: IModelRpcProps, request: SerializedRpcRequest): IModelRpcProps {\n const urlPathComponents = request.path.split(\"/\");\n\n let iModelId = tokenFromBody.iModelId;\n let iTwinId = tokenFromBody.iTwinId;\n const changeset = { id: tokenFromBody.changeset?.id ?? \"0\", index: tokenFromBody.changeset?.index };\n\n for (let i = 0; i <= urlPathComponents.length; ++i) {\n const key = urlPathComponents[i];\n const value = urlPathComponents[i + 1];\n if (key === \"mode\") {\n ++i;\n } else if (key === \"context\") {\n iTwinId = value;\n ++i;\n } else if (key === \"imodel\") {\n iModelId = value;\n ++i;\n } else if (key === \"changeset\") {\n changeset.id = (value === \"0\") ? \"\" : value;\n ++i;\n }\n }\n\n // Overwrite the key if it includes a : because its most likely a guid. We know what it should be based off of the url.\n // Leave it alone if its a non guid key.\n return { key: tokenFromBody.key === undefined || tokenFromBody.key.includes(\":\") ? `${iModelId}:${changeset.id}` : tokenFromBody.key, iTwinId, iModelId, changeset };\n }\n\n /** Returns the OpenAPI-compatible URI path parameters for an RPC operation.\n * @internal\n */\n public supplyPathParametersForOperation(_operation: RpcOperation): OpenAPIParameter[] {\n return [\n { name: \"modeId\", in: \"path\", required: true, schema: { type: \"string\" } },\n { name: \"iTwinId\", in: \"path\", required: true, schema: { type: \"string\" } },\n { name: \"iModelId\", in: \"path\", required: true, schema: { type: \"string\" } },\n { name: \"changeSetId\", in: \"path\", required: false, schema: { type: \"string\" } },\n ];\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/core-common",
3
- "version": "4.8.0-dev.10",
3
+ "version": "4.8.0-dev.13",
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",
@@ -27,8 +27,8 @@
27
27
  "js-base64": "^3.6.1"
28
28
  },
29
29
  "peerDependencies": {
30
- "@itwin/core-bentley": "^4.8.0-dev.10",
31
- "@itwin/core-geometry": "^4.8.0-dev.10"
30
+ "@itwin/core-bentley": "^4.8.0-dev.13",
31
+ "@itwin/core-geometry": "^4.8.0-dev.13"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@itwin/eslint-plugin": "^4.0.2",
@@ -43,9 +43,9 @@
43
43
  "nyc": "^15.1.0",
44
44
  "rimraf": "^3.0.2",
45
45
  "typescript": "~5.3.3",
46
- "@itwin/build-tools": "4.8.0-dev.10",
47
- "@itwin/core-bentley": "4.8.0-dev.10",
48
- "@itwin/core-geometry": "4.8.0-dev.10"
46
+ "@itwin/build-tools": "4.8.0-dev.13",
47
+ "@itwin/core-geometry": "4.8.0-dev.13",
48
+ "@itwin/core-bentley": "4.8.0-dev.13"
49
49
  },
50
50
  "nyc": {
51
51
  "extends": "./node_modules/@itwin/build-tools/.nycrc",