bx-rest 0.21.1 → 0.21.2

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/README.md CHANGED
@@ -86,11 +86,17 @@ REST calls are lazy: the request starts when the returned `Observable` is subscr
86
86
 
87
87
  | Method | Result |
88
88
  | --- | --- |
89
- | `.res()` | Unwraps the Bitrix response and applies the configured mapper. For paginated methods it returns the current page. |
89
+ | `.res(options?)` | Unwraps the Bitrix response and applies the configured mapper. For paginated methods it returns the current page. |
90
90
  | `.resAll()` | Loads and combines every page. Available on paginated Navvy helpers. |
91
91
  | `.resVanilla()` | Returns the raw Bitrix response, including fields such as `result`, `total` and `next`. |
92
92
  | `.mapForVanilla()` | Keeps the raw response envelope but applies the mapper to its `result`. |
93
93
 
94
+ `.res()` accepts an optional options object:
95
+
96
+ | Option | Default | Effect |
97
+ | --- | --- | --- |
98
+ | `throwOnApiError` | `false` | When `true`, a Bitrix-level API error makes the returned `Observable` error out with a `BXRestApiError` instead of resolving with `undefined`. See [Error handling](#error-handling). |
99
+
94
100
  ## Authentication and OAuth2
95
101
 
96
102
  `auth.source` controls where credentials are read from. `auth.key` controls the request parameter name, except for the special `OAuth2` cookie-credentials mode.
@@ -129,9 +135,34 @@ BXRestSettings.update({
129
135
  | Failure | When it happens | How it surfaces on `.res()` |
130
136
  | --- | --- | --- |
131
137
  | Transport / configuration errors — network failure, missing auth, missing base URL | Before or during the HTTP call | The returned `Observable` errors. Handle it with RxJS `catchError` or the `error` callback of `subscribe()`. |
132
- | Bitrix API errors — `{ error, error_description }`, e.g. `INSUFFICIENT_SCOPE`, `expired_token` | HTTP 200 response whose body is not a success payload | `.res()` resolves normally with `undefined`. **It does not throw.** |
138
+ | Bitrix API errors — `{ error, error_description }`, e.g. `INSUFFICIENT_SCOPE`, `expired_token` | HTTP 200 response whose body is not a success payload | By default, `.res()` resolves normally with `undefined` — **it does not throw**. Pass `{ throwOnApiError: true }` to make it throw a `BXRestApiError` instead. |
139
+
140
+ Because a Bitrix-level error resolves as `undefined` rather than as an `Observable` error by default, don't rely on plain `.res()` alone to tell "no records" apart from "the call failed". You have two options.
141
+
142
+ **Option 1 — opt in to throwing with `.res({ throwOnApiError: true })`.** The `Observable` errors with a `BXRestApiError`, exposing `error` and `error_description`, so it can be handled alongside transport errors in a single `catchError`/`error` callback:
143
+
144
+ ```typescript
145
+ import { BXRestNavvy, BXRestApiError } from 'bx-rest'
146
+
147
+ const bxRest = new BXRestNavvy()
148
+
149
+ bxRest.crm.deal.list({
150
+ select: ['ID', 'TITLE'],
151
+ filter: {},
152
+ start: 0
153
+ }).res({ throwOnApiError: true }).subscribe({
154
+ next: deals => console.log(deals),
155
+ error: err => {
156
+ if (err instanceof BXRestApiError) {
157
+ console.error('Bitrix API error:', err.error, err.error_description)
158
+ } else {
159
+ console.error('Request failed:', err.message)
160
+ }
161
+ }
162
+ })
163
+ ```
133
164
 
134
- Because a Bitrix-level error resolves as `undefined` rather than as an `Observable` error, don't rely on `.res()` alone to tell "no records" apart from "the call failed". When that distinction matters, call `.resVanilla()` instead and check the response with the exported `isBXRestAnswerSuccess()` type guard:
165
+ **Option 2 — keep the default and check the raw response.** Call `.resVanilla()` instead and check the response with the exported `isBXRestAnswerSuccess()` type guard:
135
166
 
136
167
  ```typescript
137
168
  import { firstValueFrom } from 'rxjs'
@@ -154,7 +185,7 @@ if (!answer || !isBXRestAnswerSuccess(answer)) {
154
185
  }
155
186
  ```
156
187
 
157
- Transport-level failures still propagate as `Observable` errors and can be caught the usual RxJS way:
188
+ Regardless of `throwOnApiError`, transport-level failures always propagate as `Observable` errors and can be caught the usual RxJS way:
158
189
 
159
190
  ```typescript
160
191
  bxRest.crm.deal.list({
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Thrown by `.res()` when called with `{ throwOnApiError: true }` and the
3
+ * Bitrix REST call resolves as a Bitrix-level API error, e.g.
4
+ * `INSUFFICIENT_SCOPE` or `expired_token`.
5
+ *
6
+ * By default `.res()` resolves such responses as `undefined` instead of
7
+ * throwing — see the "Error handling" section of the README.
8
+ */
9
+ export class BXRestApiError extends Error {
10
+ constructor(error, error_description) {
11
+ super(error_description || error || 'Bitrix API error');
12
+ this.error = error;
13
+ this.error_description = error_description;
14
+ this.name = 'BXRestApiError';
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYngtcmVzdC9zcmMvZnVuY3Rpb25zL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLGNBQWUsU0FBUSxLQUFLO0lBQ3ZDLFlBQ1MsS0FBeUIsRUFDekIsaUJBQXFDO1FBRTVDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxLQUFLLElBQUksa0JBQWtCLENBQUMsQ0FBQTtRQUhoRCxVQUFLLEdBQUwsS0FBSyxDQUFvQjtRQUN6QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW9CO1FBRzVDLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUE7SUFDOUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaHJvd24gYnkgYC5yZXMoKWAgd2hlbiBjYWxsZWQgd2l0aCBgeyB0aHJvd09uQXBpRXJyb3I6IHRydWUgfWAgYW5kIHRoZVxuICogQml0cml4IFJFU1QgY2FsbCByZXNvbHZlcyBhcyBhIEJpdHJpeC1sZXZlbCBBUEkgZXJyb3IsIGUuZy5cbiAqIGBJTlNVRkZJQ0lFTlRfU0NPUEVgIG9yIGBleHBpcmVkX3Rva2VuYC5cbiAqXG4gKiBCeSBkZWZhdWx0IGAucmVzKClgIHJlc29sdmVzIHN1Y2ggcmVzcG9uc2VzIGFzIGB1bmRlZmluZWRgIGluc3RlYWQgb2ZcbiAqIHRocm93aW5nIOKAlCBzZWUgdGhlIFwiRXJyb3IgaGFuZGxpbmdcIiBzZWN0aW9uIG9mIHRoZSBSRUFETUUuXG4gKi9cbmV4cG9ydCBjbGFzcyBCWFJlc3RBcGlFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcHVibGljIGVycm9yX2Rlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgc3VwZXIoZXJyb3JfZGVzY3JpcHRpb24gfHwgZXJyb3IgfHwgJ0JpdHJpeCBBUEkgZXJyb3InKVxuICAgIHRoaXMubmFtZSA9ICdCWFJlc3RBcGlFcnJvcidcbiAgfVxufVxuIl19
@@ -9,7 +9,8 @@ export { Navvy } from './services/navvy';
9
9
  export { HttpBXServices as BXRestRequest } from './services/http/HttpBX';
10
10
  export { SessionKeyServices, SessionKeyError } from './services/http/sessionKey';
11
11
  export { instanceOfiBXRestAnswerSuccess as isBXRestAnswerSuccess } from './functions/mapResult';
12
+ export { BXRestApiError } from './functions/errors';
12
13
  export { HttpNavvyServices } from './services/http/httpNavvy';
13
14
  export * as partNameMethods from './consts/part-name-methods';
14
15
  export * as BXBaseServices from './services/base';
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLElBQUksYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ2hGLE9BQU8sRUFBRSw4QkFBOEIsSUFBSSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQzdELE9BQU8sS0FBSyxlQUFlLE1BQU0sNEJBQTRCLENBQUE7QUFDN0QsT0FBTyxLQUFLLGNBQWMsTUFBTSxpQkFBaUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgYngtcmVzdFxyXG4gKi9cclxuZXhwb3J0IHsgQlhSZXN0U2V0dGluZ3MgfSBmcm9tICcuL3NldHRpbmdzJ1xyXG5leHBvcnQgeyBCWFJlc3RNYXBSZXN1bHQgfSBmcm9tICcuL2Z1bmN0aW9ucy9tYXBSZXN1bHQnXHJcbmV4cG9ydCB7IEJYUmVzdE5hdnZ5IH0gZnJvbSAnLi9yZXN0L25hdnZ5J1xyXG5leHBvcnQgeyBCWFJlc3RNYXAgfSBmcm9tICcuL3Jlc3QvbWFwJ1xyXG5leHBvcnQgeyBOYXZ2eSB9IGZyb20gJy4vc2VydmljZXMvbmF2dnknXHJcbmV4cG9ydCB7IEh0dHBCWFNlcnZpY2VzIGFzIEJYUmVzdFJlcXVlc3QgfSBmcm9tICcuL3NlcnZpY2VzL2h0dHAvSHR0cEJYJ1xuZXhwb3J0IHsgU2Vzc2lvbktleVNlcnZpY2VzLCBTZXNzaW9uS2V5RXJyb3IgfSBmcm9tICcuL3NlcnZpY2VzL2h0dHAvc2Vzc2lvbktleSdcbmV4cG9ydCB7IGluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2VzcyBhcyBpc0JYUmVzdEFuc3dlclN1Y2Nlc3MgfSBmcm9tICcuL2Z1bmN0aW9ucy9tYXBSZXN1bHQnXG5leHBvcnQgeyBIdHRwTmF2dnlTZXJ2aWNlcyB9IGZyb20gJy4vc2VydmljZXMvaHR0cC9odHRwTmF2dnknXHJcbmV4cG9ydCAqIGFzIHBhcnROYW1lTWV0aG9kcyBmcm9tICcuL2NvbnN0cy9wYXJ0LW5hbWUtbWV0aG9kcydcclxuZXhwb3J0ICogYXMgQlhCYXNlU2VydmljZXMgZnJvbSAnLi9zZXJ2aWNlcy9iYXNlJ1xuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLElBQUksYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ2hGLE9BQU8sRUFBRSw4QkFBOEIsSUFBSSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9GLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUVuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUM3RCxPQUFPLEtBQUssZUFBZSxNQUFNLDRCQUE0QixDQUFBO0FBQzdELE9BQU8sS0FBSyxjQUFjLE1BQU0saUJBQWlCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGJ4LXJlc3RcclxuICovXHJcbmV4cG9ydCB7IEJYUmVzdFNldHRpbmdzIH0gZnJvbSAnLi9zZXR0aW5ncydcclxuZXhwb3J0IHsgQlhSZXN0TWFwUmVzdWx0IH0gZnJvbSAnLi9mdW5jdGlvbnMvbWFwUmVzdWx0J1xyXG5leHBvcnQgeyBCWFJlc3ROYXZ2eSB9IGZyb20gJy4vcmVzdC9uYXZ2eSdcclxuZXhwb3J0IHsgQlhSZXN0TWFwIH0gZnJvbSAnLi9yZXN0L21hcCdcclxuZXhwb3J0IHsgTmF2dnkgfSBmcm9tICcuL3NlcnZpY2VzL25hdnZ5J1xyXG5leHBvcnQgeyBIdHRwQlhTZXJ2aWNlcyBhcyBCWFJlc3RSZXF1ZXN0IH0gZnJvbSAnLi9zZXJ2aWNlcy9odHRwL0h0dHBCWCdcclxuZXhwb3J0IHsgU2Vzc2lvbktleVNlcnZpY2VzLCBTZXNzaW9uS2V5RXJyb3IgfSBmcm9tICcuL3NlcnZpY2VzL2h0dHAvc2Vzc2lvbktleSdcclxuZXhwb3J0IHsgaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzIGFzIGlzQlhSZXN0QW5zd2VyU3VjY2VzcyB9IGZyb20gJy4vZnVuY3Rpb25zL21hcFJlc3VsdCdcclxuZXhwb3J0IHsgQlhSZXN0QXBpRXJyb3IgfSBmcm9tICcuL2Z1bmN0aW9ucy9lcnJvcnMnXHJcbmV4cG9ydCB7IEJYUmVzdFJlc09wdGlvbnMgfSBmcm9tICcuL3NlcnZpY2VzL25hdnZ5L2V4dGVuZHMvbmF2dnktcGFnLWJhc2UnXHJcbmV4cG9ydCB7IEh0dHBOYXZ2eVNlcnZpY2VzIH0gZnJvbSAnLi9zZXJ2aWNlcy9odHRwL2h0dHBOYXZ2eSdcclxuZXhwb3J0ICogYXMgcGFydE5hbWVNZXRob2RzIGZyb20gJy4vY29uc3RzL3BhcnQtbmFtZS1tZXRob2RzJ1xyXG5leHBvcnQgKiBhcyBCWEJhc2VTZXJ2aWNlcyBmcm9tICcuL3NlcnZpY2VzL2Jhc2UnXHJcbiJdfQ==
@@ -1,6 +1,7 @@
1
1
  import { catchError, map } from 'rxjs/operators';
2
2
  import { BXRestMapResult, instanceOfiBXRestAnswerSuccess } from '../../../functions/mapResult';
3
3
  import { HttpBXServices } from '../../http/HttpBX';
4
+ import { BXRestApiError } from '../../../functions/errors';
4
5
  export class NavvyPagBase {
5
6
  constructor(url, param, map = undefined, restApi = false) {
6
7
  this.url = url;
@@ -24,16 +25,24 @@ export class NavvyPagBase {
24
25
  return v;
25
26
  }));
26
27
  }
27
- res() {
28
- return this.mapAndError(this.resVanilla()).pipe(map(v => (v && this.map)
28
+ res(options) {
29
+ return this.mapAndError(this.resVanilla(), options).pipe(map(v => (v && this.map)
29
30
  ? this.map(v)
30
31
  : v));
31
32
  }
32
- mapAndError(request) {
33
- return request.pipe(map(v => BXRestMapResult(v)), catchError((err) => {
33
+ mapAndError(request, options) {
34
+ return request.pipe(map(v => {
35
+ if (options?.throwOnApiError && v && !instanceOfiBXRestAnswerSuccess(v)) {
36
+ throw new BXRestApiError(v.error, v.error_description);
37
+ }
38
+ return BXRestMapResult(v);
39
+ }), catchError((err) => {
34
40
  console.error(err);
41
+ if (err instanceof BXRestApiError) {
42
+ throw err;
43
+ }
35
44
  throw new Error((err.error) ? err.error : err);
36
45
  }));
37
46
  }
38
47
  }
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnktcGFnLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9zZXJ2aWNlcy9uYXZ2eS9leHRlbmRzL25hdnZ5LXBhZy1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUdsRCxNQUFNLE9BQWdCLFlBQVk7SUFLaEMsWUFDWSxHQUFhLEVBQ2IsS0FBUSxFQUNSLE1BQTRELFNBQVMsRUFDckUsVUFBVSxLQUFLO1FBSGYsUUFBRyxHQUFILEdBQUcsQ0FBVTtRQUNiLFVBQUssR0FBTCxLQUFLLENBQUc7UUFDUixRQUFHLEdBQUgsR0FBRyxDQUFrRTtRQUNyRSxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBTjNCLGFBQVEsR0FBRyxFQUFFLENBQUEsQ0FBQyw4QkFBOEI7UUFRMUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFBO0lBQ2xDLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzlELENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFO2FBQ3JCLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixJQUFJLENBQUMsSUFBSSw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3ZELG9EQUFvRDtnQkFDcEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBVyxDQUEwQixDQUFBO2dCQUMvRCxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUMsRUFBMEMsQ0FBQTtZQUM5RSxDQUFDO1lBQ0QsT0FBTyxDQUFxRCxDQUFBO1FBQzlELENBQUMsQ0FBQyxDQUNILENBQUE7SUFDTCxDQUFDO0lBRUQsR0FBRztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzdDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDdEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FDSixDQUMrQyxDQUFBO0lBQ3BELENBQUM7SUFFRCxXQUFXLENBQ1QsT0FBaUQ7UUFFakQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUNqQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDNUIsVUFBVSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDdEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNoRCxDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IGlCWFJlc3RBbnN3ZXIgfSBmcm9tICcuLi8uLi8uLi90eXBpZmljYXRpb24vcmVzdC9iYXNlL2Fuc3dlcidcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXHJcbmltcG9ydCB7IEJYUmVzdE1hcFJlc3VsdCwgaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzIH0gZnJvbSAnLi4vLi4vLi4vZnVuY3Rpb25zL21hcFJlc3VsdCdcclxuaW1wb3J0IHsgSHR0cEJYU2VydmljZXMgfSBmcm9tICcuLi8uLi9odHRwL0h0dHBCWCdcclxuaW1wb3J0IHsgUmV0dXJuVHlwZU5hdnZ5IH0gZnJvbSAnLi4vbmF2dnktc3VwcG9ydCdcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOYXZ2eVBhZ0Jhc2U8VCwgUiwgUD4ge1xuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGh0dHA6IEh0dHBCWFNlcnZpY2VzXHJcbiAgcGFnZVNpemUgPSA1MCAvLyDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INGA0LDQt9C80LXRgCDRgdGC0YDQsNC90LjRhtGLXHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCB1cmw6IHN0cmluZ1tdLFxuICAgIHByb3RlY3RlZCBwYXJhbTogUCxcbiAgICBwcm90ZWN0ZWQgbWFwOiAoKHBhcmFtOiBUfCB1bmRlZmluZWQpID0+IFIgfCB1bmRlZmluZWQpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIHByb3RlY3RlZCByZXN0QXBpID0gZmFsc2VcbiAgKSB7XHJcbiAgICB0aGlzLmh0dHAgPSBuZXcgSHR0cEJYU2VydmljZXMoKVxyXG4gIH1cclxuXHJcbiAgcmVzVmFuaWxsYSgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUPih0aGlzLnVybCwgdGhpcy5wYXJhbSwgdGhpcy5yZXN0QXBpKVxuICB9XHJcblxyXG4gIG1hcEZvclZhbmlsbGEoKTogT2JzZXJ2YWJsZTxpQlhSZXN0QW5zd2VyPFJldHVyblR5cGVOYXZ2eTxULCBSPj4gfCB1bmRlZmluZWQ+IHtcclxuICAgIHJldHVybiB0aGlzLnJlc1ZhbmlsbGEoKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAodiA9PiB7XHJcbiAgICAgICAgICBpZiAodiAmJiBpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3ModikgJiYgdGhpcy5tYXApIHtcclxuICAgICAgICAgICAgLy8g0J/RgNC40LzQtdC90Y/QtdC8IHRoaXMubWFwINC4INGP0LLQvdC+INC/0YDQuNCy0L7QtNC40Lwg0YLQuNC/INGA0LXQt9GD0LvRjNGC0LDRgtCwXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubWFwKHYucmVzdWx0IGFzIFQpIGFzIFJldHVyblR5cGVOYXZ2eTxULCBSPlxyXG4gICAgICAgICAgICByZXR1cm4geyAuLi52LCAuLi57cmVzdWx0OiByZXN1bHR9IH0gYXMgaUJYUmVzdEFuc3dlcjxSZXR1cm5UeXBlTmF2dnk8VCwgUj4+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdiBhcyBpQlhSZXN0QW5zd2VyPFJldHVyblR5cGVOYXZ2eTxULCBSPj4gfCB1bmRlZmluZWRcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgfVxyXG5cclxuICByZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXBBbmRFcnJvcih0aGlzLnJlc1ZhbmlsbGEoKSkucGlwZShcclxuICAgICAgbWFwKHYgPT4gKHYgJiYgdGhpcy5tYXApXHJcbiAgICAgICAgPyB0aGlzLm1hcCh2KVxyXG4gICAgICAgIDogdlxyXG4gICAgICApXHJcbiAgICApIGFzIE9ic2VydmFibGU8UmV0dXJuVHlwZU5hdnZ5PFQsIFI+IHwgdW5kZWZpbmVkPlxyXG4gIH1cclxuXHJcbiAgbWFwQW5kRXJyb3I8VD4oXHJcbiAgICByZXF1ZXN0OiBPYnNlcnZhYmxlPGlCWFJlc3RBbnN3ZXI8VD4gfCB1bmRlZmluZWQ+XHJcbiAgKSB7XHJcbiAgICByZXR1cm4gcmVxdWVzdC5waXBlKFxyXG4gICAgICBtYXAodiA9PiBCWFJlc3RNYXBSZXN1bHQodikpLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigoZXJyLmVycm9yKSA/IGVyci5lcnJvciA6IGVycilcclxuICAgICAgfSlcclxuICAgIClcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2dnktcGFnLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ieC1yZXN0L3NyYy9zZXJ2aWNlcy9uYXZ2eS9leHRlbmRzL25hdnZ5LXBhZy1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUVsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFjMUQsTUFBTSxPQUFnQixZQUFZO0lBS2hDLFlBQ1ksR0FBYSxFQUNiLEtBQVEsRUFDUixNQUE0RCxTQUFTLEVBQ3JFLFVBQVUsS0FBSztRQUhmLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFDYixVQUFLLEdBQUwsS0FBSyxDQUFHO1FBQ1IsUUFBRyxHQUFILEdBQUcsQ0FBa0U7UUFDckUsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQU4zQixhQUFRLEdBQUcsRUFBRSxDQUFBLENBQUMsOEJBQThCO1FBUTFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQTtJQUNsQyxDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRTthQUNyQixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ04sSUFBSSxDQUFDLElBQUksOEJBQThCLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN2RCxvREFBb0Q7Z0JBQ3BELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQVcsQ0FBMEIsQ0FBQTtnQkFDL0QsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLEVBQTBDLENBQUE7WUFDOUUsQ0FBQztZQUNELE9BQU8sQ0FBcUQsQ0FBQTtRQUM5RCxDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0wsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUEwQjtRQUM1QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDdEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUN0QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDYixDQUFDLENBQUMsQ0FBQyxDQUNKLENBQytDLENBQUE7SUFDcEQsQ0FBQztJQUVELFdBQVcsQ0FDVCxPQUFpRCxFQUNqRCxPQUEwQjtRQUUxQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQ2pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNOLElBQUksT0FBTyxFQUFFLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN4RSxNQUFNLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUE7WUFDeEQsQ0FBQztZQUNELE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNCLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDbEIsSUFBSSxHQUFHLFlBQVksY0FBYyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sR0FBRyxDQUFBO1lBQ1gsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2hELENBQUMsQ0FBQyxDQUNILENBQUE7SUFDSCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgaUJYUmVzdEFuc3dlciB9IGZyb20gJy4uLy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2Jhc2UvYW5zd2VyJ1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuaW1wb3J0IHsgQlhSZXN0TWFwUmVzdWx0LCBpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3MgfSBmcm9tICcuLi8uLi8uLi9mdW5jdGlvbnMvbWFwUmVzdWx0J1xyXG5pbXBvcnQgeyBIdHRwQlhTZXJ2aWNlcyB9IGZyb20gJy4uLy4uL2h0dHAvSHR0cEJYJ1xyXG5pbXBvcnQgeyBSZXR1cm5UeXBlTmF2dnkgfSBmcm9tICcuLi9uYXZ2eS1zdXBwb3J0J1xyXG5pbXBvcnQgeyBCWFJlc3RBcGlFcnJvciB9IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9ucy9lcnJvcnMnXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEJYUmVzdFJlc09wdGlvbnMge1xyXG4gIC8qKlxyXG4gICAqIFdoZW4gYHRydWVgLCBhIEJpdHJpeC1sZXZlbCBBUEkgZXJyb3IgKGB7IGVycm9yLCBlcnJvcl9kZXNjcmlwdGlvbiB9YCxcclxuICAgKiBlLmcuIGBJTlNVRkZJQ0lFTlRfU0NPUEVgLCBgZXhwaXJlZF90b2tlbmApIG1ha2VzIHRoZSBgT2JzZXJ2YWJsZWBcclxuICAgKiByZXR1cm5lZCBieSBgLnJlcygpYCBlcnJvciBvdXQgd2l0aCBhIGBCWFJlc3RBcGlFcnJvcmAgaW5zdGVhZCBvZlxyXG4gICAqIHJlc29sdmluZyB3aXRoIGB1bmRlZmluZWRgLlxyXG4gICAqXHJcbiAgICogRGVmYXVsdDogYGZhbHNlYCAocHJlc2VydmVzIHRoZSBoaXN0b3JpY2FsIGAucmVzKClgIGJlaGF2aW91cikuXHJcbiAgICovXHJcbiAgdGhyb3dPbkFwaUVycm9yPzogYm9vbGVhblxyXG59XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmF2dnlQYWdCYXNlPFQsIFIsIFA+IHtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGh0dHA6IEh0dHBCWFNlcnZpY2VzXHJcbiAgcGFnZVNpemUgPSA1MCAvLyDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INGA0LDQt9C80LXRgCDRgdGC0YDQsNC90LjRhtGLXHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCB1cmw6IHN0cmluZ1tdLFxyXG4gICAgcHJvdGVjdGVkIHBhcmFtOiBQLFxyXG4gICAgcHJvdGVjdGVkIG1hcDogKChwYXJhbTogVHwgdW5kZWZpbmVkKSA9PiBSIHwgdW5kZWZpbmVkKSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcclxuICAgIHByb3RlY3RlZCByZXN0QXBpID0gZmFsc2VcclxuICApIHtcclxuICAgIHRoaXMuaHR0cCA9IG5ldyBIdHRwQlhTZXJ2aWNlcygpXHJcbiAgfVxyXG5cclxuICByZXNWYW5pbGxhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFQ+KHRoaXMudXJsLCB0aGlzLnBhcmFtLCB0aGlzLnJlc3RBcGkpXHJcbiAgfVxyXG5cclxuICBtYXBGb3JWYW5pbGxhKCk6IE9ic2VydmFibGU8aUJYUmVzdEFuc3dlcjxSZXR1cm5UeXBlTmF2dnk8VCwgUj4+IHwgdW5kZWZpbmVkPiB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXNWYW5pbGxhKClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4ge1xyXG4gICAgICAgICAgaWYgKHYgJiYgaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzKHYpICYmIHRoaXMubWFwKSB7XHJcbiAgICAgICAgICAgIC8vINCf0YDQuNC80LXQvdGP0LXQvCB0aGlzLm1hcCDQuCDRj9Cy0L3QviDQv9GA0LjQstC+0LTQuNC8INGC0LjQvyDRgNC10LfRg9C70YzRgtCw0YLQsFxyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLm1hcCh2LnJlc3VsdCBhcyBUKSBhcyBSZXR1cm5UeXBlTmF2dnk8VCwgUj5cclxuICAgICAgICAgICAgcmV0dXJuIHsgLi4udiwgLi4ue3Jlc3VsdDogcmVzdWx0fSB9IGFzIGlCWFJlc3RBbnN3ZXI8UmV0dXJuVHlwZU5hdnZ5PFQsIFI+PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHYgYXMgaUJYUmVzdEFuc3dlcjxSZXR1cm5UeXBlTmF2dnk8VCwgUj4+IHwgdW5kZWZpbmVkXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gIH1cclxuXHJcbiAgcmVzKG9wdGlvbnM/OiBCWFJlc3RSZXNPcHRpb25zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXBBbmRFcnJvcih0aGlzLnJlc1ZhbmlsbGEoKSwgb3B0aW9ucykucGlwZShcclxuICAgICAgbWFwKHYgPT4gKHYgJiYgdGhpcy5tYXApXHJcbiAgICAgICAgPyB0aGlzLm1hcCh2KVxyXG4gICAgICAgIDogdlxyXG4gICAgICApXHJcbiAgICApIGFzIE9ic2VydmFibGU8UmV0dXJuVHlwZU5hdnZ5PFQsIFI+IHwgdW5kZWZpbmVkPlxyXG4gIH1cclxuXHJcbiAgbWFwQW5kRXJyb3I8VD4oXHJcbiAgICByZXF1ZXN0OiBPYnNlcnZhYmxlPGlCWFJlc3RBbnN3ZXI8VD4gfCB1bmRlZmluZWQ+LFxyXG4gICAgb3B0aW9ucz86IEJYUmVzdFJlc09wdGlvbnNcclxuICApIHtcclxuICAgIHJldHVybiByZXF1ZXN0LnBpcGUoXHJcbiAgICAgIG1hcCh2ID0+IHtcclxuICAgICAgICBpZiAob3B0aW9ucz8udGhyb3dPbkFwaUVycm9yICYmIHYgJiYgIWluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2Vzcyh2KSkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEJYUmVzdEFwaUVycm9yKHYuZXJyb3IsIHYuZXJyb3JfZGVzY3JpcHRpb24pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBCWFJlc3RNYXBSZXN1bHQodilcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEJYUmVzdEFwaUVycm9yKSB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKChlcnIuZXJyb3IpID8gZXJyLmVycm9yIDogZXJyKVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -832,6 +832,23 @@ class HttpBXServices extends HttpServices {
832
832
  }
833
833
  }
834
834
 
835
+ /**
836
+ * Thrown by `.res()` when called with `{ throwOnApiError: true }` and the
837
+ * Bitrix REST call resolves as a Bitrix-level API error, e.g.
838
+ * `INSUFFICIENT_SCOPE` or `expired_token`.
839
+ *
840
+ * By default `.res()` resolves such responses as `undefined` instead of
841
+ * throwing — see the "Error handling" section of the README.
842
+ */
843
+ class BXRestApiError extends Error {
844
+ constructor(error, error_description) {
845
+ super(error_description || error || 'Bitrix API error');
846
+ this.error = error;
847
+ this.error_description = error_description;
848
+ this.name = 'BXRestApiError';
849
+ }
850
+ }
851
+
835
852
  class NavvyPagBase {
836
853
  constructor(url, param, map = undefined, restApi = false) {
837
854
  this.url = url;
@@ -855,14 +872,22 @@ class NavvyPagBase {
855
872
  return v;
856
873
  }));
857
874
  }
858
- res() {
859
- return this.mapAndError(this.resVanilla()).pipe(map(v => (v && this.map)
875
+ res(options) {
876
+ return this.mapAndError(this.resVanilla(), options).pipe(map(v => (v && this.map)
860
877
  ? this.map(v)
861
878
  : v));
862
879
  }
863
- mapAndError(request) {
864
- return request.pipe(map(v => BXRestMapResult(v)), catchError((err) => {
880
+ mapAndError(request, options) {
881
+ return request.pipe(map(v => {
882
+ if (options?.throwOnApiError && v && !instanceOfiBXRestAnswerSuccess(v)) {
883
+ throw new BXRestApiError(v.error, v.error_description);
884
+ }
885
+ return BXRestMapResult(v);
886
+ }), catchError((err) => {
865
887
  console.error(err);
888
+ if (err instanceof BXRestApiError) {
889
+ throw err;
890
+ }
866
891
  throw new Error((err.error) ? err.error : err);
867
892
  }));
868
893
  }
@@ -15475,5 +15500,5 @@ class BXRestMap {
15475
15500
  * Generated bundle index. Do not edit.
15476
15501
  */
15477
15502
 
15478
- export { base as BXBaseServices, BXRestMap, BXRestMapResult, BXRestNavvy, HttpBXServices as BXRestRequest, BXRestSettings, HttpNavvyServices, Navvy, SessionKeyError, SessionKeyServices, instanceOfiBXRestAnswerSuccess as isBXRestAnswerSuccess, partNameMethods$1 as partNameMethods };
15503
+ export { base as BXBaseServices, BXRestApiError, BXRestMap, BXRestMapResult, BXRestNavvy, HttpBXServices as BXRestRequest, BXRestSettings, HttpNavvyServices, Navvy, SessionKeyError, SessionKeyServices, instanceOfiBXRestAnswerSuccess as isBXRestAnswerSuccess, partNameMethods$1 as partNameMethods };
15479
15504
  //# sourceMappingURL=bx-rest.mjs.map