@aneuhold/core-ts-api-lib 3.0.37 → 3.0.39
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 +16 -0
- package/lib/browser.d.ts +1 -1
- package/lib/browser.d.ts.map +1 -1
- package/lib/browser.js +1 -1
- package/lib/browser.js.map +1 -1
- package/lib/browser.ts +1 -1
- package/lib/services/APIService/{APIService.d.ts → API.service.d.ts} +3 -2
- package/lib/services/APIService/API.service.d.ts.map +1 -0
- package/lib/services/APIService/{APIService.js → API.service.js} +2 -2
- package/lib/services/APIService/API.service.js.map +1 -0
- package/lib/services/APIService/{APIService.ts → API.service.ts} +3 -2
- package/lib/services/GCloudAPIService/{GCloudAPIService.d.ts → GCloudAPI.service.d.ts} +3 -30
- package/lib/services/GCloudAPIService/GCloudAPI.service.d.ts.map +1 -0
- package/lib/services/GCloudAPIService/{GCloudAPIService.js → GCloudAPI.service.js} +38 -38
- package/lib/services/GCloudAPIService/GCloudAPI.service.js.map +1 -0
- package/lib/services/GCloudAPIService/{GCloudAPIService.ts → GCloudAPI.service.ts} +50 -41
- package/lib/types/AuthDeleteAccount.d.ts +2 -3
- package/lib/types/AuthDeleteAccount.d.ts.map +1 -1
- package/lib/types/AuthDeleteAccount.ts +2 -3
- package/package.json +5 -5
- package/lib/services/APIService/APIService.d.ts.map +0 -1
- package/lib/services/APIService/APIService.js.map +0 -1
- package/lib/services/GCloudAPIService/GCloudAPIService.d.ts.map +0 -1
- package/lib/services/GCloudAPIService/GCloudAPIService.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## 🔖 [3.0.39] (2026-06-12)
|
|
9
|
+
|
|
10
|
+
### 🏗️ Changed
|
|
11
|
+
|
|
12
|
+
- Renamed service files to use the `.service.ts` naming convention (`APIService.ts` → `API.service.ts`, `GCloudAPIService.ts` → `GCloudAPI.service.ts`).
|
|
13
|
+
- Converted `private static` methods to native `#` private class fields in `GCloudAPIService`.
|
|
14
|
+
|
|
15
|
+
## 🔖 [3.0.38] (2026-05-10)
|
|
16
|
+
|
|
17
|
+
### 🏗️ Changed
|
|
18
|
+
|
|
19
|
+
- Changed `AuthDeleteAccountOutput` from `undefined` to `Record<string, never>` to better represent an empty object response.
|
|
20
|
+
- Updated `GCloudAPIService.authDeleteAccount()` and `APIService.deleteAccount()` return types to `APIResponse<AuthDeleteAccountOutput>`.
|
|
21
|
+
|
|
8
22
|
## 🔖 [3.0.37] (2026-05-10)
|
|
9
23
|
|
|
10
24
|
### ✅ Added
|
|
@@ -419,6 +433,8 @@ No direct code changes; version bump for compatibility.
|
|
|
419
433
|
- Updated workflow permissions to allow repository write access
|
|
420
434
|
|
|
421
435
|
<!-- Link References -->
|
|
436
|
+
[3.0.39]: https://github.com/aneuhold/ts-libs/compare/core-ts-api-lib-v3.0.38...core-ts-api-lib-v3.0.39
|
|
437
|
+
[3.0.38]: https://github.com/aneuhold/ts-libs/compare/core-ts-api-lib-v3.0.37...core-ts-api-lib-v3.0.38
|
|
422
438
|
[3.0.37]: https://github.com/aneuhold/ts-libs/compare/core-ts-api-lib-v3.0.36...core-ts-api-lib-v3.0.37
|
|
423
439
|
[3.0.36]: https://github.com/aneuhold/ts-libs/compare/core-ts-api-lib-v3.0.35...core-ts-api-lib-v3.0.36
|
|
424
440
|
[3.0.35]: https://github.com/aneuhold/ts-libs/compare/core-ts-api-lib-v3.0.34...core-ts-api-lib-v3.0.35
|
package/lib/browser.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import APIService from './services/APIService/
|
|
1
|
+
import APIService from './services/APIService/API.service.js';
|
|
2
2
|
import type { AdminInput, AdminOutput, AdminOutputUserDetail, AdminOutputUserDocumentCounts } from './types/Admin.js';
|
|
3
3
|
import type { APIResponse } from './types/APIResponse.js';
|
|
4
4
|
import type { AuthCheckPasswordInput, AuthCheckPasswordOutput } from './types/AuthCheckPassword.js';
|
package/lib/browser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,sCAAsC,CAAC;AAC9D,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,6BAA6B,EAC9B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACpG,OAAO,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACpG,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACjG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,KAAK,EACV,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,+CAA+C,CAAC;AACvD,OAAO,KAAK,EACV,oCAAoC,EACpC,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,KAAK,EACV,sCAAsC,EACtC,sCAAsC,EACtC,sBAAsB,EACtB,oCAAoC,EACpC,oCAAoC,EACrC,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,UAAU,EAAE,CAAC;AAGtB,YAAY,EACV,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,6BAA6B,EAC7B,WAAW,EACX,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,eAAe,EACf,sCAAsC,EACtC,sCAAsC,EACtC,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,oCAAoC,EACpC,0BAA0B,EAC1B,2BAA2B,EAC3B,WAAW,EACX,YAAY,EACZ,sBAAsB,EACtB,oCAAoC,EACpC,oCAAoC,EACrC,CAAC"}
|
package/lib/browser.js
CHANGED
package/lib/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,sCAAsC,CAAC;AA+B9D,kEAAkE;AAClE,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
package/lib/browser.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AdminInput, AdminOutput } from '../../types/Admin.js';
|
|
2
2
|
import type { APIResponse } from '../../types/APIResponse.js';
|
|
3
|
+
import type { AuthDeleteAccountOutput } from '../../types/AuthDeleteAccount.js';
|
|
3
4
|
import type { AuthValidateUserInput, AuthValidateUserOutput } from '../../types/AuthValidateUser.js';
|
|
4
5
|
import type { ProjectDashboardInput, ProjectDashboardOutput } from '../../types/project/dashboard/ProjectDashboard.js';
|
|
5
6
|
import type { ProjectWorkoutPrimaryInput, ProjectWorkoutPrimaryOutput } from '../../types/project/workout/ProjectWorkout.js';
|
|
@@ -25,7 +26,7 @@ export default class APIService {
|
|
|
25
26
|
* Permanently deletes the currently-authenticated user along with every
|
|
26
27
|
* per-user document tied to them.
|
|
27
28
|
*/
|
|
28
|
-
static deleteAccount(): Promise<APIResponse<
|
|
29
|
+
static deleteAccount(): Promise<APIResponse<AuthDeleteAccountOutput>>;
|
|
29
30
|
/**
|
|
30
31
|
* Sets the JWT access token to attach to all API requests.
|
|
31
32
|
*
|
|
@@ -78,4 +79,4 @@ export default class APIService {
|
|
|
78
79
|
*/
|
|
79
80
|
static getDefaultAPIUrl(): string;
|
|
80
81
|
}
|
|
81
|
-
//# sourceMappingURL=
|
|
82
|
+
//# sourceMappingURL=API.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"API.service.d.ts","sourceRoot":"","sources":["../../../src/services/APIService/API.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,KAAK,EACV,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,+CAA+C,CAAC;AAGvD;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B;;;;;;OAMG;WACU,YAAY,CACvB,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAI/C;;;OAGG;WACU,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAItD;;;OAGG;WACU,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;IAI3E;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI1C;;;;OAIG;IACH,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjD;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CACzB,QAAQ,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,GAC3E,IAAI;IAIP;;;;OAIG;WACU,gBAAgB,CAC3B,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAI/C;;;;OAIG;WACU,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAI/E;;;;OAIG;WACU,cAAc,CACzB,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;IAIpD;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,MAAM;IAIjC;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAInC;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,MAAM;CAGlC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import GCloudAPIService from '../GCloudAPIService/
|
|
1
|
+
import GCloudAPIService from '../GCloudAPIService/GCloudAPI.service.js';
|
|
2
2
|
/**
|
|
3
3
|
* A service for making calls to the backend API for personal projects. This is
|
|
4
4
|
* abstracted so that the backend implementation can change over time.
|
|
@@ -98,4 +98,4 @@ export default class APIService {
|
|
|
98
98
|
return GCloudAPIService.defaultUrl;
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
|
-
//# sourceMappingURL=
|
|
101
|
+
//# sourceMappingURL=API.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"API.service.js","sourceRoot":"","sources":["../../../src/services/APIService/API.service.ts"],"names":[],"mappings":"AAeA,OAAO,gBAAgB,MAAM,0CAA0C,CAAC;AAExE;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB,KAA4B;QAE5B,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM;QACjB,OAAO,gBAAgB,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,aAAa;QACxB,OAAO,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,KAAa;QACjC,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,qBAAqB,CAAC,KAAa;QACxC,gBAAgB,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CACzB,QAA4E;QAE5E,gBAAgB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAC3B,KAA4B;QAE5B,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,KAAiB;QACzC,OAAO,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,cAAc,CACzB,KAAiC;QAEjC,OAAO,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB;QACrB,OAAO,gBAAgB,CAAC,MAAM,EAAE,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,GAAW;QAC1B,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB;QACrB,OAAO,gBAAgB,CAAC,UAAU,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AdminInput, AdminOutput } from '../../types/Admin.js';
|
|
2
2
|
import type { APIResponse } from '../../types/APIResponse.js';
|
|
3
|
+
import type { AuthDeleteAccountOutput } from '../../types/AuthDeleteAccount.js';
|
|
3
4
|
import type {
|
|
4
5
|
AuthValidateUserInput,
|
|
5
6
|
AuthValidateUserOutput
|
|
@@ -12,7 +13,7 @@ import type {
|
|
|
12
13
|
ProjectWorkoutPrimaryInput,
|
|
13
14
|
ProjectWorkoutPrimaryOutput
|
|
14
15
|
} from '../../types/project/workout/ProjectWorkout.js';
|
|
15
|
-
import GCloudAPIService from '../GCloudAPIService/
|
|
16
|
+
import GCloudAPIService from '../GCloudAPIService/GCloudAPI.service.js';
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* A service for making calls to the backend API for personal projects. This is
|
|
@@ -44,7 +45,7 @@ export default class APIService {
|
|
|
44
45
|
* Permanently deletes the currently-authenticated user along with every
|
|
45
46
|
* per-user document tied to them.
|
|
46
47
|
*/
|
|
47
|
-
static async deleteAccount(): Promise<APIResponse<
|
|
48
|
+
static async deleteAccount(): Promise<APIResponse<AuthDeleteAccountOutput>> {
|
|
48
49
|
return GCloudAPIService.authDeleteAccount();
|
|
49
50
|
}
|
|
50
51
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AdminInput, AdminOutput } from '../../types/Admin.js';
|
|
2
2
|
import type { APIResponse } from '../../types/APIResponse.js';
|
|
3
|
+
import type { AuthDeleteAccountOutput } from '../../types/AuthDeleteAccount.js';
|
|
3
4
|
import type { AuthValidateUserInput, AuthValidateUserOutput } from '../../types/AuthValidateUser.js';
|
|
4
5
|
import type { ProjectDashboardInput, ProjectDashboardOutput } from '../../types/project/dashboard/ProjectDashboard.js';
|
|
5
6
|
import type { ProjectWorkoutPrimaryInput, ProjectWorkoutPrimaryOutput } from '../../types/project/workout/ProjectWorkout.js';
|
|
@@ -62,7 +63,7 @@ export default class GCloudAPIService {
|
|
|
62
63
|
* Calls the auth deleteAccount endpoint to permanently delete the
|
|
63
64
|
* currently-authenticated user and every per-user document tied to them.
|
|
64
65
|
*/
|
|
65
|
-
static authDeleteAccount(): Promise<APIResponse<
|
|
66
|
+
static authDeleteAccount(): Promise<APIResponse<AuthDeleteAccountOutput>>;
|
|
66
67
|
/**
|
|
67
68
|
* Calls the project dashboard endpoint to get, insert, update, or delete dashboard data.
|
|
68
69
|
*
|
|
@@ -81,34 +82,6 @@ export default class GCloudAPIService {
|
|
|
81
82
|
* @param input - The input for the project workout function.
|
|
82
83
|
*/
|
|
83
84
|
static projectWorkout(input: ProjectWorkoutPrimaryInput): Promise<APIResponse<ProjectWorkoutPrimaryOutput>>;
|
|
84
|
-
/**
|
|
85
|
-
* Makes a call to the API. On a 401 response, automatically attempts to
|
|
86
|
-
* refresh the access token using the stored refresh token. If refresh
|
|
87
|
-
* succeeds, the original request is retried once.
|
|
88
|
-
*
|
|
89
|
-
* @param urlPath - The path to the endpoint.
|
|
90
|
-
* @param input - The input to the endpoint.
|
|
91
|
-
*/
|
|
92
|
-
private static call;
|
|
93
|
-
/**
|
|
94
|
-
* Attempts to refresh the access token using the stored refresh token.
|
|
95
|
-
* On success, updates the stored tokens and notifies via the
|
|
96
|
-
* {@link #onTokensRefreshed} callback.
|
|
97
|
-
*/
|
|
98
|
-
private static tryRefreshTokens;
|
|
99
|
-
/**
|
|
100
|
-
* Performs a POST request and decodes the JSON response.
|
|
101
|
-
*
|
|
102
|
-
* @param urlPath - The path to the endpoint.
|
|
103
|
-
* @param input - The input to the endpoint.
|
|
104
|
-
*/
|
|
105
|
-
private static fetchAndDecode;
|
|
106
|
-
/**
|
|
107
|
-
* Decodes a fetch Response into an APIResponse.
|
|
108
|
-
*
|
|
109
|
-
* @param response - The fetch response to decode.
|
|
110
|
-
*/
|
|
111
|
-
private static decodeResponse;
|
|
112
85
|
}
|
|
113
86
|
export {};
|
|
114
|
-
//# sourceMappingURL=
|
|
87
|
+
//# sourceMappingURL=GCloudAPI.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GCloudAPI.service.d.ts","sourceRoot":"","sources":["../../../src/services/GCloudAPIService/GCloudAPI.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAEV,uBAAuB,EACxB,MAAM,kCAAkC,CAAC;AAK1C,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,KAAK,EACV,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,+CAA+C,CAAC;AAEvD;;;GAGG;AACH,KAAK,yBAAyB,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,KAAK,IAAI,CAAC;AAE3F;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;;IACnC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAmC;IAcrE;;;;OAIG;IACH,MAAM,CAAC,MAAM,IAAI,MAAM;IAIvB;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIhC;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI1C;;;;;OAKG;IACH,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjD;;;;;;OAMG;IACH,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI,GAAG,IAAI;IAI7E;;;;OAIG;WACU,gBAAgB,CAC3B,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAI/C;;;OAGG;WACU,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAa1D;;;OAGG;WACU,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;IAO/E;;;;OAIG;WACU,gBAAgB,CAC3B,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAI/C;;;;OAIG;WACU,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAIxE;;;;OAIG;WACU,cAAc,CACzB,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;CA6IrD"}
|
|
@@ -61,7 +61,7 @@ export default class GCloudAPIService {
|
|
|
61
61
|
* @param input - The input for the validateUser endpoint.
|
|
62
62
|
*/
|
|
63
63
|
static async authValidateUser(input) {
|
|
64
|
-
return this
|
|
64
|
+
return this.#call('auth/validateUser', input);
|
|
65
65
|
}
|
|
66
66
|
/**
|
|
67
67
|
* Calls the auth logout endpoint to delete the current refresh token
|
|
@@ -71,7 +71,7 @@ export default class GCloudAPIService {
|
|
|
71
71
|
if (!this.#refreshTokenString) {
|
|
72
72
|
return { success: true, errors: [], data: undefined };
|
|
73
73
|
}
|
|
74
|
-
const { decoded } = await this
|
|
74
|
+
const { decoded } = await this.#fetchAndDecode('auth/logout', {
|
|
75
75
|
refreshTokenString: this.#refreshTokenString
|
|
76
76
|
});
|
|
77
77
|
return decoded;
|
|
@@ -81,7 +81,7 @@ export default class GCloudAPIService {
|
|
|
81
81
|
* currently-authenticated user and every per-user document tied to them.
|
|
82
82
|
*/
|
|
83
83
|
static async authDeleteAccount() {
|
|
84
|
-
return this
|
|
84
|
+
return this.#call('auth/deleteAccount', undefined);
|
|
85
85
|
}
|
|
86
86
|
/**
|
|
87
87
|
* Calls the project dashboard endpoint to get, insert, update, or delete dashboard data.
|
|
@@ -89,7 +89,7 @@ export default class GCloudAPIService {
|
|
|
89
89
|
* @param input - The input for the project dashboard function.
|
|
90
90
|
*/
|
|
91
91
|
static async projectDashboard(input) {
|
|
92
|
-
return this
|
|
92
|
+
return this.#call('project/dashboard', input);
|
|
93
93
|
}
|
|
94
94
|
/**
|
|
95
95
|
* Calls the admin endpoint. Requires super admin access.
|
|
@@ -97,7 +97,7 @@ export default class GCloudAPIService {
|
|
|
97
97
|
* @param input - The input for the admin endpoint.
|
|
98
98
|
*/
|
|
99
99
|
static async admin(input) {
|
|
100
|
-
return this
|
|
100
|
+
return this.#call('admin', input);
|
|
101
101
|
}
|
|
102
102
|
/**
|
|
103
103
|
* Calls the project workout endpoint to get, insert, update, or delete workout data.
|
|
@@ -105,7 +105,7 @@ export default class GCloudAPIService {
|
|
|
105
105
|
* @param input - The input for the project workout function.
|
|
106
106
|
*/
|
|
107
107
|
static async projectWorkout(input) {
|
|
108
|
-
return this
|
|
108
|
+
return this.#call('project/workout', input);
|
|
109
109
|
}
|
|
110
110
|
/**
|
|
111
111
|
* Makes a call to the API. On a 401 response, automatically attempts to
|
|
@@ -115,12 +115,12 @@ export default class GCloudAPIService {
|
|
|
115
115
|
* @param urlPath - The path to the endpoint.
|
|
116
116
|
* @param input - The input to the endpoint.
|
|
117
117
|
*/
|
|
118
|
-
static async call(urlPath, input) {
|
|
119
|
-
const { response, decoded } = await this
|
|
118
|
+
static async #call(urlPath, input) {
|
|
119
|
+
const { response, decoded } = await this.#fetchAndDecode(urlPath, input);
|
|
120
120
|
if (response.status === 401 && this.#refreshTokenString) {
|
|
121
|
-
const refreshed = await this
|
|
121
|
+
const refreshed = await this.#tryRefreshTokens();
|
|
122
122
|
if (refreshed) {
|
|
123
|
-
const retry = await this
|
|
123
|
+
const retry = await this.#fetchAndDecode(urlPath, input);
|
|
124
124
|
return retry.decoded;
|
|
125
125
|
}
|
|
126
126
|
}
|
|
@@ -131,11 +131,11 @@ export default class GCloudAPIService {
|
|
|
131
131
|
* On success, updates the stored tokens and notifies via the
|
|
132
132
|
* {@link #onTokensRefreshed} callback.
|
|
133
133
|
*/
|
|
134
|
-
static async tryRefreshTokens() {
|
|
134
|
+
static async #tryRefreshTokens() {
|
|
135
135
|
if (!this.#refreshTokenString) {
|
|
136
136
|
return false;
|
|
137
137
|
}
|
|
138
|
-
const { decoded } = await this
|
|
138
|
+
const { decoded } = await this.#fetchAndDecode('auth/refresh', { refreshTokenString: this.#refreshTokenString });
|
|
139
139
|
if (!decoded.success) {
|
|
140
140
|
return false;
|
|
141
141
|
}
|
|
@@ -153,7 +153,7 @@ export default class GCloudAPIService {
|
|
|
153
153
|
* @param urlPath - The path to the endpoint.
|
|
154
154
|
* @param input - The input to the endpoint.
|
|
155
155
|
*/
|
|
156
|
-
static async fetchAndDecode(urlPath, input) {
|
|
156
|
+
static async #fetchAndDecode(urlPath, input) {
|
|
157
157
|
const headers = new Headers({
|
|
158
158
|
Connection: 'keep-alive',
|
|
159
159
|
'Content-Type': 'application/json',
|
|
@@ -167,7 +167,7 @@ export default class GCloudAPIService {
|
|
|
167
167
|
headers,
|
|
168
168
|
body: JSON.stringify(input)
|
|
169
169
|
});
|
|
170
|
-
const decoded = await this
|
|
170
|
+
const decoded = await this.#decodeResponse(response);
|
|
171
171
|
return { response, decoded };
|
|
172
172
|
}
|
|
173
173
|
/**
|
|
@@ -175,11 +175,11 @@ export default class GCloudAPIService {
|
|
|
175
175
|
*
|
|
176
176
|
* @param response - The fetch response to decode.
|
|
177
177
|
*/
|
|
178
|
-
static async decodeResponse(response) {
|
|
178
|
+
static async #decodeResponse(response) {
|
|
179
179
|
try {
|
|
180
180
|
const text = await response.text();
|
|
181
181
|
const parsed = JSON.parse(text, DateService.dateReviver);
|
|
182
|
-
if (!isAPIResponseShape(parsed)) {
|
|
182
|
+
if (!this.#isAPIResponseShape(parsed)) {
|
|
183
183
|
return {
|
|
184
184
|
success: false,
|
|
185
185
|
errors: ['Response did not match the expected APIResponse shape'],
|
|
@@ -198,27 +198,27 @@ export default class GCloudAPIService {
|
|
|
198
198
|
};
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
201
|
+
/**
|
|
202
|
+
* Type guard that validates the structural shape of an {@link APIResponse}.
|
|
203
|
+
* The generic `data` payload is trusted (not validated) since its shape is
|
|
204
|
+
* only known at the call site.
|
|
205
|
+
*
|
|
206
|
+
* @param value - The parsed JSON value to inspect.
|
|
207
|
+
*/
|
|
208
|
+
static #isAPIResponseShape(value) {
|
|
209
|
+
if (typeof value !== 'object' || value === null) {
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
if (!('success' in value) || typeof value.success !== 'boolean') {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
if (!('errors' in value) || !Array.isArray(value.errors)) {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
if (!value.errors.every((err) => typeof err === 'string')) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
return 'data' in value;
|
|
221
222
|
}
|
|
222
|
-
return 'data' in value;
|
|
223
223
|
}
|
|
224
|
-
//# sourceMappingURL=
|
|
224
|
+
//# sourceMappingURL=GCloudAPI.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GCloudAPI.service.js","sourceRoot":"","sources":["../../../src/services/GCloudAPIService/GCloudAPI.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { DateService, ErrorUtils } from '@aneuhold/core-ts-lib';
|
|
2
2
|
import type { AdminInput, AdminOutput } from '../../types/Admin.js';
|
|
3
3
|
import type { APIResponse } from '../../types/APIResponse.js';
|
|
4
|
-
import type {
|
|
4
|
+
import type {
|
|
5
|
+
AuthDeleteAccountInput,
|
|
6
|
+
AuthDeleteAccountOutput
|
|
7
|
+
} from '../../types/AuthDeleteAccount.js';
|
|
5
8
|
import type {
|
|
6
9
|
AuthRefreshTokenInput,
|
|
7
10
|
AuthRefreshTokenOutput
|
|
@@ -99,7 +102,7 @@ export default class GCloudAPIService {
|
|
|
99
102
|
static async authValidateUser(
|
|
100
103
|
input: AuthValidateUserInput
|
|
101
104
|
): Promise<APIResponse<AuthValidateUserOutput>> {
|
|
102
|
-
return this
|
|
105
|
+
return this.#call<AuthValidateUserInput, AuthValidateUserOutput>('auth/validateUser', input);
|
|
103
106
|
}
|
|
104
107
|
|
|
105
108
|
/**
|
|
@@ -110,9 +113,12 @@ export default class GCloudAPIService {
|
|
|
110
113
|
if (!this.#refreshTokenString) {
|
|
111
114
|
return { success: true, errors: [], data: undefined };
|
|
112
115
|
}
|
|
113
|
-
const { decoded } = await this
|
|
114
|
-
|
|
115
|
-
|
|
116
|
+
const { decoded } = await this.#fetchAndDecode<AuthRefreshTokenInput, undefined>(
|
|
117
|
+
'auth/logout',
|
|
118
|
+
{
|
|
119
|
+
refreshTokenString: this.#refreshTokenString
|
|
120
|
+
}
|
|
121
|
+
);
|
|
116
122
|
return decoded;
|
|
117
123
|
}
|
|
118
124
|
|
|
@@ -120,8 +126,11 @@ export default class GCloudAPIService {
|
|
|
120
126
|
* Calls the auth deleteAccount endpoint to permanently delete the
|
|
121
127
|
* currently-authenticated user and every per-user document tied to them.
|
|
122
128
|
*/
|
|
123
|
-
static async authDeleteAccount(): Promise<APIResponse<
|
|
124
|
-
return this
|
|
129
|
+
static async authDeleteAccount(): Promise<APIResponse<AuthDeleteAccountOutput>> {
|
|
130
|
+
return this.#call<AuthDeleteAccountInput, AuthDeleteAccountOutput>(
|
|
131
|
+
'auth/deleteAccount',
|
|
132
|
+
undefined
|
|
133
|
+
);
|
|
125
134
|
}
|
|
126
135
|
|
|
127
136
|
/**
|
|
@@ -132,7 +141,7 @@ export default class GCloudAPIService {
|
|
|
132
141
|
static async projectDashboard(
|
|
133
142
|
input: ProjectDashboardInput
|
|
134
143
|
): Promise<APIResponse<ProjectDashboardOutput>> {
|
|
135
|
-
return this
|
|
144
|
+
return this.#call<ProjectDashboardInput, ProjectDashboardOutput>('project/dashboard', input);
|
|
136
145
|
}
|
|
137
146
|
|
|
138
147
|
/**
|
|
@@ -141,7 +150,7 @@ export default class GCloudAPIService {
|
|
|
141
150
|
* @param input - The input for the admin endpoint.
|
|
142
151
|
*/
|
|
143
152
|
static async admin(input: AdminInput): Promise<APIResponse<AdminOutput>> {
|
|
144
|
-
return this
|
|
153
|
+
return this.#call<AdminInput, AdminOutput>('admin', input);
|
|
145
154
|
}
|
|
146
155
|
|
|
147
156
|
/**
|
|
@@ -152,7 +161,7 @@ export default class GCloudAPIService {
|
|
|
152
161
|
static async projectWorkout(
|
|
153
162
|
input: ProjectWorkoutPrimaryInput
|
|
154
163
|
): Promise<APIResponse<ProjectWorkoutPrimaryOutput>> {
|
|
155
|
-
return this
|
|
164
|
+
return this.#call<ProjectWorkoutPrimaryInput, ProjectWorkoutPrimaryOutput>(
|
|
156
165
|
'project/workout',
|
|
157
166
|
input
|
|
158
167
|
);
|
|
@@ -166,16 +175,16 @@ export default class GCloudAPIService {
|
|
|
166
175
|
* @param urlPath - The path to the endpoint.
|
|
167
176
|
* @param input - The input to the endpoint.
|
|
168
177
|
*/
|
|
169
|
-
|
|
178
|
+
static async #call<TInput, TOutput>(
|
|
170
179
|
urlPath: string,
|
|
171
180
|
input: TInput
|
|
172
181
|
): Promise<APIResponse<TOutput>> {
|
|
173
|
-
const { response, decoded } = await this
|
|
182
|
+
const { response, decoded } = await this.#fetchAndDecode<TInput, TOutput>(urlPath, input);
|
|
174
183
|
|
|
175
184
|
if (response.status === 401 && this.#refreshTokenString) {
|
|
176
|
-
const refreshed = await this
|
|
185
|
+
const refreshed = await this.#tryRefreshTokens();
|
|
177
186
|
if (refreshed) {
|
|
178
|
-
const retry = await this
|
|
187
|
+
const retry = await this.#fetchAndDecode<TInput, TOutput>(urlPath, input);
|
|
179
188
|
return retry.decoded;
|
|
180
189
|
}
|
|
181
190
|
}
|
|
@@ -188,12 +197,12 @@ export default class GCloudAPIService {
|
|
|
188
197
|
* On success, updates the stored tokens and notifies via the
|
|
189
198
|
* {@link #onTokensRefreshed} callback.
|
|
190
199
|
*/
|
|
191
|
-
|
|
200
|
+
static async #tryRefreshTokens(): Promise<boolean> {
|
|
192
201
|
if (!this.#refreshTokenString) {
|
|
193
202
|
return false;
|
|
194
203
|
}
|
|
195
204
|
|
|
196
|
-
const { decoded } = await this
|
|
205
|
+
const { decoded } = await this.#fetchAndDecode<AuthRefreshTokenInput, AuthRefreshTokenOutput>(
|
|
197
206
|
'auth/refresh',
|
|
198
207
|
{ refreshTokenString: this.#refreshTokenString }
|
|
199
208
|
);
|
|
@@ -219,7 +228,7 @@ export default class GCloudAPIService {
|
|
|
219
228
|
* @param urlPath - The path to the endpoint.
|
|
220
229
|
* @param input - The input to the endpoint.
|
|
221
230
|
*/
|
|
222
|
-
|
|
231
|
+
static async #fetchAndDecode<TInput, TOutput>(
|
|
223
232
|
urlPath: string,
|
|
224
233
|
input: TInput
|
|
225
234
|
): Promise<{ response: Response; decoded: APIResponse<TOutput> }> {
|
|
@@ -238,7 +247,7 @@ export default class GCloudAPIService {
|
|
|
238
247
|
headers,
|
|
239
248
|
body: JSON.stringify(input)
|
|
240
249
|
});
|
|
241
|
-
const decoded = await this
|
|
250
|
+
const decoded = await this.#decodeResponse<TOutput>(response);
|
|
242
251
|
return { response, decoded };
|
|
243
252
|
}
|
|
244
253
|
|
|
@@ -247,11 +256,11 @@ export default class GCloudAPIService {
|
|
|
247
256
|
*
|
|
248
257
|
* @param response - The fetch response to decode.
|
|
249
258
|
*/
|
|
250
|
-
|
|
259
|
+
static async #decodeResponse<TOutput>(response: Response): Promise<APIResponse<TOutput>> {
|
|
251
260
|
try {
|
|
252
261
|
const text = await response.text();
|
|
253
262
|
const parsed: unknown = JSON.parse(text, DateService.dateReviver);
|
|
254
|
-
if (!isAPIResponseShape<TOutput>(parsed)) {
|
|
263
|
+
if (!this.#isAPIResponseShape<TOutput>(parsed)) {
|
|
255
264
|
return {
|
|
256
265
|
success: false,
|
|
257
266
|
errors: ['Response did not match the expected APIResponse shape'],
|
|
@@ -269,27 +278,27 @@ export default class GCloudAPIService {
|
|
|
269
278
|
};
|
|
270
279
|
}
|
|
271
280
|
}
|
|
272
|
-
}
|
|
273
281
|
|
|
274
|
-
/**
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
282
|
+
/**
|
|
283
|
+
* Type guard that validates the structural shape of an {@link APIResponse}.
|
|
284
|
+
* The generic `data` payload is trusted (not validated) since its shape is
|
|
285
|
+
* only known at the call site.
|
|
286
|
+
*
|
|
287
|
+
* @param value - The parsed JSON value to inspect.
|
|
288
|
+
*/
|
|
289
|
+
static #isAPIResponseShape<TOutput>(value: unknown): value is APIResponse<TOutput> {
|
|
290
|
+
if (typeof value !== 'object' || value === null) {
|
|
291
|
+
return false;
|
|
292
|
+
}
|
|
293
|
+
if (!('success' in value) || typeof value.success !== 'boolean') {
|
|
294
|
+
return false;
|
|
295
|
+
}
|
|
296
|
+
if (!('errors' in value) || !Array.isArray(value.errors)) {
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
if (!value.errors.every((err) => typeof err === 'string')) {
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
return 'data' in value;
|
|
293
303
|
}
|
|
294
|
-
return 'data' in value;
|
|
295
304
|
}
|
|
@@ -6,8 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export type AuthDeleteAccountInput = undefined;
|
|
8
8
|
/**
|
|
9
|
-
* Output type for the auth deleteAccount endpoint.
|
|
10
|
-
* payload on success.
|
|
9
|
+
* Output type for the auth deleteAccount endpoint.
|
|
11
10
|
*/
|
|
12
|
-
export type AuthDeleteAccountOutput =
|
|
11
|
+
export type AuthDeleteAccountOutput = Record<string, never>;
|
|
13
12
|
//# sourceMappingURL=AuthDeleteAccount.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthDeleteAccount.d.ts","sourceRoot":"","sources":["../../src/types/AuthDeleteAccount.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,SAAS,CAAC;AAE/C
|
|
1
|
+
{"version":3,"file":"AuthDeleteAccount.d.ts","sourceRoot":"","sources":["../../src/types/AuthDeleteAccount.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,SAAS,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC"}
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
export type AuthDeleteAccountInput = undefined;
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
* Output type for the auth deleteAccount endpoint.
|
|
11
|
-
* payload on success.
|
|
10
|
+
* Output type for the auth deleteAccount endpoint.
|
|
12
11
|
*/
|
|
13
|
-
export type AuthDeleteAccountOutput =
|
|
12
|
+
export type AuthDeleteAccountOutput = Record<string, never>;
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@aneuhold/core-ts-api-lib",
|
|
3
3
|
"author": "Anton G. Neuhold Jr.",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"version": "3.0.
|
|
5
|
+
"version": "3.0.39",
|
|
6
6
|
"description": "A library for interacting with the backend and defining the backend API for personal projects.",
|
|
7
7
|
"packageManager": "pnpm@10.25.0",
|
|
8
8
|
"type": "module",
|
|
@@ -72,13 +72,13 @@
|
|
|
72
72
|
"TypeScript"
|
|
73
73
|
],
|
|
74
74
|
"dependencies": {
|
|
75
|
-
"@aneuhold/core-ts-db-lib": "^5.0.
|
|
76
|
-
"@aneuhold/core-ts-lib": "^2.4.
|
|
75
|
+
"@aneuhold/core-ts-db-lib": "^5.0.9",
|
|
76
|
+
"@aneuhold/core-ts-lib": "^2.4.5",
|
|
77
77
|
"bson": "^7.0.0"
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|
|
80
|
-
"@aneuhold/local-npm-registry": "^0.2.
|
|
81
|
-
"@aneuhold/main-scripts": "^2.9.
|
|
80
|
+
"@aneuhold/local-npm-registry": "^0.2.33",
|
|
81
|
+
"@aneuhold/main-scripts": "^2.9.5",
|
|
82
82
|
"@types/node": "^25.0.2",
|
|
83
83
|
"eslint": "^9.39.2",
|
|
84
84
|
"jsr": "^0.13.5",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"APIService.d.ts","sourceRoot":"","sources":["../../../src/services/APIService/APIService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,KAAK,EACV,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,+CAA+C,CAAC;AAGvD;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B;;;;;;OAMG;WACU,YAAY,CACvB,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAI/C;;;OAGG;WACU,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAItD;;;OAGG;WACU,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAI7D;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI1C;;;;OAIG;IACH,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjD;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CACzB,QAAQ,EAAE,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,GAC3E,IAAI;IAIP;;;;OAIG;WACU,gBAAgB,CAC3B,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAI/C;;;;OAIG;WACU,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAI/E;;;;OAIG;WACU,cAAc,CACzB,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;IAIpD;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,MAAM;IAIjC;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAInC;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,MAAM;CAGlC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"APIService.js","sourceRoot":"","sources":["../../../src/services/APIService/APIService.ts"],"names":[],"mappings":"AAcA,OAAO,gBAAgB,MAAM,yCAAyC,CAAC;AAEvE;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB,KAA4B;QAE5B,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM;QACjB,OAAO,gBAAgB,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,aAAa;QACxB,OAAO,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,KAAa;QACjC,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,qBAAqB,CAAC,KAAa;QACxC,gBAAgB,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CACzB,QAA4E;QAE5E,gBAAgB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAC3B,KAA4B;QAE5B,OAAO,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,KAAiB;QACzC,OAAO,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,cAAc,CACzB,KAAiC;QAEjC,OAAO,gBAAgB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB;QACrB,OAAO,gBAAgB,CAAC,MAAM,EAAE,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,GAAW;QAC1B,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB;QACrB,OAAO,gBAAgB,CAAC,UAAU,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GCloudAPIService.d.ts","sourceRoot":"","sources":["../../../src/services/GCloudAPIService/GCloudAPIService.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAM9D,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,mDAAmD,CAAC;AAC3D,OAAO,KAAK,EACV,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,+CAA+C,CAAC;AAEvD;;;GAGG;AACH,KAAK,yBAAyB,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,KAAK,IAAI,CAAC;AAE3F;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;;IACnC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAmC;IAcrE;;;;OAIG;IACH,MAAM,CAAC,MAAM,IAAI,MAAM;IAIvB;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIhC;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI1C;;;;;OAKG;IACH,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjD;;;;;;OAMG;IACH,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI,GAAG,IAAI;IAI7E;;;;OAIG;WACU,gBAAgB,CAC3B,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAI/C;;;OAGG;WACU,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAU1D;;;OAGG;WACU,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAIjE;;;;OAIG;WACU,gBAAgB,CAC3B,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAI/C;;;;OAIG;WACU,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAIxE;;;;OAIG;WACU,cAAc,CACzB,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;IAOpD;;;;;;;OAOG;mBACkB,IAAI;IAiBzB;;;;OAIG;mBACkB,gBAAgB;IAyBrC;;;;;OAKG;mBACkB,cAAc;IAuBnC;;;;OAIG;mBACkB,cAAc;CAsBpC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GCloudAPIService.js","sourceRoot":"","sources":["../../../src/services/GCloudAPIService/GCloudAPIService.ts"],"names":[],"mappings":"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"}
|