@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 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/APIService.js';
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';
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,qCAAqC,CAAC;AAC7D,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"}
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
@@ -1,4 +1,4 @@
1
- import APIService from './services/APIService/APIService.js';
1
+ import APIService from './services/APIService/API.service.js';
2
2
  // Export all browser-safe functions and classes from this library
3
3
  export { APIService };
4
4
  //# sourceMappingURL=browser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,qCAAqC,CAAC;AA+B7D,kEAAkE;AAClE,OAAO,EAAE,UAAU,EAAE,CAAC"}
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,4 +1,4 @@
1
- import APIService from './services/APIService/APIService.js';
1
+ import APIService from './services/APIService/API.service.js';
2
2
  import type {
3
3
  AdminInput,
4
4
  AdminOutput,
@@ -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<undefined>>;
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=APIService.d.ts.map
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/GCloudAPIService.js';
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=APIService.js.map
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/GCloudAPIService.js';
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<undefined>> {
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<undefined>>;
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=GCloudAPIService.d.ts.map
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.call('auth/validateUser', input);
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.fetchAndDecode('auth/logout', {
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.call('auth/deleteAccount', undefined);
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.call('project/dashboard', input);
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.call('admin', input);
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.call('project/workout', input);
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.fetchAndDecode(urlPath, input);
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.tryRefreshTokens();
121
+ const refreshed = await this.#tryRefreshTokens();
122
122
  if (refreshed) {
123
- const retry = await this.fetchAndDecode(urlPath, input);
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.fetchAndDecode('auth/refresh', { refreshTokenString: this.#refreshTokenString });
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.decodeResponse(response);
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
- * Type guard that validates the structural shape of an {@link APIResponse}.
204
- * The generic `data` payload is trusted (not validated) since its shape is
205
- * only known at the call site.
206
- *
207
- * @param value - The parsed JSON value to inspect.
208
- */
209
- function isAPIResponseShape(value) {
210
- if (typeof value !== 'object' || value === null) {
211
- return false;
212
- }
213
- if (!('success' in value) || typeof value.success !== 'boolean') {
214
- return false;
215
- }
216
- if (!('errors' in value) || !Array.isArray(value.errors)) {
217
- return false;
218
- }
219
- if (!value.errors.every((err) => typeof err === 'string')) {
220
- return false;
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=GCloudAPIService.js.map
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 { AuthDeleteAccountInput } from '../../types/AuthDeleteAccount.js';
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.call<AuthValidateUserInput, AuthValidateUserOutput>('auth/validateUser', input);
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.fetchAndDecode<AuthRefreshTokenInput, undefined>('auth/logout', {
114
- refreshTokenString: this.#refreshTokenString
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<undefined>> {
124
- return this.call<AuthDeleteAccountInput, undefined>('auth/deleteAccount', undefined);
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.call<ProjectDashboardInput, ProjectDashboardOutput>('project/dashboard', input);
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.call<AdminInput, AdminOutput>('admin', input);
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.call<ProjectWorkoutPrimaryInput, ProjectWorkoutPrimaryOutput>(
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
- private static async call<TInput, TOutput>(
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.fetchAndDecode<TInput, TOutput>(urlPath, input);
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.tryRefreshTokens();
185
+ const refreshed = await this.#tryRefreshTokens();
177
186
  if (refreshed) {
178
- const retry = await this.fetchAndDecode<TInput, TOutput>(urlPath, input);
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
- private static async tryRefreshTokens(): Promise<boolean> {
200
+ static async #tryRefreshTokens(): Promise<boolean> {
192
201
  if (!this.#refreshTokenString) {
193
202
  return false;
194
203
  }
195
204
 
196
- const { decoded } = await this.fetchAndDecode<AuthRefreshTokenInput, AuthRefreshTokenOutput>(
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
- private static async fetchAndDecode<TInput, TOutput>(
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.decodeResponse<TOutput>(response);
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
- private static async decodeResponse<TOutput>(response: Response): Promise<APIResponse<TOutput>> {
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
- * Type guard that validates the structural shape of an {@link APIResponse}.
276
- * The generic `data` payload is trusted (not validated) since its shape is
277
- * only known at the call site.
278
- *
279
- * @param value - The parsed JSON value to inspect.
280
- */
281
- function isAPIResponseShape<TOutput>(value: unknown): value is APIResponse<TOutput> {
282
- if (typeof value !== 'object' || value === null) {
283
- return false;
284
- }
285
- if (!('success' in value) || typeof value.success !== 'boolean') {
286
- return false;
287
- }
288
- if (!('errors' in value) || !Array.isArray(value.errors)) {
289
- return false;
290
- }
291
- if (!value.errors.every((err) => typeof err === 'string')) {
292
- return false;
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. The endpoint returns no
10
- * payload on success.
9
+ * Output type for the auth deleteAccount endpoint.
11
10
  */
12
- export type AuthDeleteAccountOutput = undefined;
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;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,SAAS,CAAC"}
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. The endpoint returns no
11
- * payload on success.
10
+ * Output type for the auth deleteAccount endpoint.
12
11
  */
13
- export type AuthDeleteAccountOutput = undefined;
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.37",
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.8",
76
- "@aneuhold/core-ts-lib": "^2.4.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.32",
81
- "@aneuhold/main-scripts": "^2.9.3",
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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"}