@anmiles/google-api-wrapper 19.0.3 → 19.0.5

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,14 @@ 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.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [19.0.5](../../tags/v19.0.5) - 2025-07-24
9
+ ### Changed
10
+ - Fix vulnerable dependencies
11
+
12
+ ## [19.0.4](../../tags/v19.0.4) - 2025-06-02
13
+ ### Changed
14
+ - Fixed api property that was optional by mistake
15
+
8
16
  ## [19.0.3](../../tags/v19.0.3) - 2025-05-24
9
17
  ### Changed
10
18
  - Fixed path to templates
package/README.md CHANGED
@@ -65,3 +65,4 @@ getProfiles().map(async (profile) => {
65
65
  ### Live examples
66
66
  - [youtube-likes-downloader](https://www.npmjs.com/package/youtube-likes-downloader) - download all liked videos from youtube
67
67
  - [google-calendar-entries](https://www.npmjs.com/package/google-calendar-entries) - view and manage google calendar entries
68
+ - [school-schedule-sync](https://www.npmjs.com/package/school-schedule-sync) - synchronization between JSON schedule and Google Calendar
package/dist/lib/api.d.ts CHANGED
@@ -18,13 +18,13 @@ export interface CommonResponse<TItem> {
18
18
  nextPageToken?: string | null | undefined;
19
19
  }
20
20
  export declare class API<TGoogleAPI> {
21
+ api: TGoogleAPI;
22
+ private auth;
21
23
  private readonly getter;
22
24
  private readonly profile;
23
25
  private readonly authOptions?;
24
- api: TGoogleAPI | undefined;
25
- private auth;
26
- constructor(getter: (auth: GoogleApis.Common.OAuth2Client) => TGoogleAPI, profile: string, authOptions?: AuthOptions | undefined);
27
- init(): Promise<void>;
26
+ private constructor();
27
+ static init<TGoogleAPI>(getter: (auth: GoogleApis.Common.OAuth2Client) => TGoogleAPI, profile: string, authOptions?: AuthOptions): Promise<API<TGoogleAPI>>;
28
28
  getItems<TItem>(selectAPI: (api: TGoogleAPI) => CommonAPI<TItem>, params: object, options?: CommonOptions): Promise<TItem[]>;
29
29
  }
30
30
  export declare function getAPI<TGoogleAPI>(getter: (auth: GoogleApis.Common.OAuth2Client) => TGoogleAPI, profile: string, authOptions?: AuthOptions): Promise<API<TGoogleAPI>>;
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AACA,OAAO,qBAAqB,CAAC;AAE7B,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOnE,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAC3C,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAAC;AAEF,UAAU,SAAS,CAAC,KAAK;IACxB,IAAI,EAAE;QACL,CACC,MAAM,CAAC,EAAE,UAAU,EACnB,OAAO,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,aAAa,GACvC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpE,CACC,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,KAAI,IAAI,GACxG,IAAI,CAAC;KACR,CAAC;CACF;AAED,MAAM,WAAW,cAAc,CAAC,KAAK;IACpC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE;QACV,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;KACzC,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC1C;AAED,qBAAa,GAAG,CAAC,UAAU;IAKzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAN9B,GAAG,EAAE,UAAU,GAAG,SAAS,CAAC;IAC5B,OAAO,CAAC,IAAI,CAA6C;gBAGvC,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,YAAY,KAAI,UAAU,EAC3D,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,WAAW,YAAA;IAGrC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,UAAU,KAAI,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;CAyCjI;AAED,wBAAsB,MAAM,CAAC,UAAU,EACtC,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,YAAY,KAAI,UAAU,EAC3D,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,WAAW,GACvB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAY1B"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AACA,OAAO,qBAAqB,CAAC;AAE7B,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAOnE,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAC3C,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAAC;AAEF,UAAU,SAAS,CAAC,KAAK;IACxB,IAAI,EAAE;QACL,CACC,MAAM,CAAC,EAAE,UAAU,EACnB,OAAO,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,aAAa,GACvC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpE,CACC,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,KAAI,IAAI,GACxG,IAAI,CAAC;KACR,CAAC;CACF;AAED,MAAM,WAAW,cAAc,CAAC,KAAK;IACpC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE;QACV,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;KACzC,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC1C;AAED,qBAAa,GAAG,CAAC,UAAU;IAElB,GAAG,EAAE,UAAU;IACtB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAL9B,OAAO;WAQM,IAAI,CAAC,UAAU,EAC3B,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,YAAY,KAAI,UAAU,EAC3D,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,WAAW,GACvB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAKrB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,UAAU,KAAI,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;CAuCjI;AAED,wBAAsB,MAAM,CAAC,UAAU,EACtC,MAAM,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,YAAY,KAAI,UAAU,EAC3D,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,WAAW,GACvB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAU1B"}
package/dist/lib/api.js CHANGED
@@ -12,19 +12,21 @@ const auth_1 = require("./auth");
12
12
  const credentials_1 = require("./credentials");
13
13
  const requestInterval = 300;
14
14
  class API {
15
+ api;
16
+ auth;
15
17
  getter;
16
18
  profile;
17
19
  authOptions;
18
- api;
19
- auth;
20
- constructor(getter, profile, authOptions) {
20
+ constructor(api, auth, getter, profile, authOptions) {
21
+ this.api = api;
22
+ this.auth = auth;
21
23
  this.getter = getter;
22
24
  this.profile = profile;
23
25
  this.authOptions = authOptions;
24
26
  }
25
- async init() {
26
- this.auth = await (0, auth_1.getAuth)(this.profile, this.authOptions);
27
- this.api = this.getter(this.auth);
27
+ static async init(getter, profile, authOptions) {
28
+ const { api, auth } = await resetAuth(getter, profile, authOptions);
29
+ return new API(api, auth, getter, profile, authOptions);
28
30
  }
29
31
  async getItems(selectAPI, params, options) {
30
32
  const items = [];
@@ -32,9 +34,6 @@ class API {
32
34
  do {
33
35
  let response;
34
36
  try {
35
- if (!this.api) {
36
- throw new Error('API is not initialized. Call `init` before getting items.');
37
- }
38
37
  const selectedAPI = selectAPI(this.api);
39
38
  response = await selectedAPI.list({ ...params, pageToken });
40
39
  }
@@ -43,7 +42,9 @@ class API {
43
42
  if ((message === 'invalid_grant' || message === 'Invalid credentials') && !this.authOptions?.temporary) {
44
43
  (0, logger_1.warn)('Access token stored is invalid, re-creating...');
45
44
  (0, credentials_1.deleteCredentials)(this.profile);
46
- await this.init();
45
+ const { api, auth } = await resetAuth(this.getter, this.profile, this.authOptions);
46
+ this.api = api;
47
+ this.auth = auth;
47
48
  return this.getItems(selectAPI, params, options);
48
49
  }
49
50
  else {
@@ -68,8 +69,11 @@ async function getAPI(getter, profile, authOptions) {
68
69
  (0, logger_1.warn)(`WARNING: trying to create permanent credentials using non-readonly scopes (${writableScopes.join(', ')}). Permanent credentials will be stored in the file and potentially might be re-used to modify your data`);
69
70
  }
70
71
  }
71
- const instance = new API(getter, profile, authOptions);
72
- await instance.init();
73
- return instance;
72
+ return API.init(getter, profile, authOptions);
73
+ }
74
+ async function resetAuth(getter, profile, authOptions) {
75
+ const auth = await (0, auth_1.getAuth)(profile, authOptions);
76
+ const api = getter(auth);
77
+ return { api, auth };
74
78
  }
75
79
  //# sourceMappingURL=api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anmiles/google-api-wrapper",
3
- "version": "19.0.3",
3
+ "version": "19.0.5",
4
4
  "description": "Wrapper around googleapis for getting data shortly",
5
5
  "keywords": [
6
6
  "google",
@@ -30,9 +30,9 @@
30
30
  "test:report:coverage": "nyc report"
31
31
  },
32
32
  "dependencies": {
33
- "@anmiles/logger": "^8.0.0",
34
- "@anmiles/prototypes": "^11.0.0",
35
- "@anmiles/sleep": "^5.0.0",
33
+ "@anmiles/logger": "^8.0.1",
34
+ "@anmiles/prototypes": "^11.2.2",
35
+ "@anmiles/sleep": "^5.0.1",
36
36
  "out-url": "^1.2.2",
37
37
  "server-destroy": "^1.0.1"
38
38
  },
@@ -40,35 +40,35 @@
40
40
  "googleapis": "^148.0.0"
41
41
  },
42
42
  "devDependencies": {
43
- "@anmiles/eslint-config": "^9.0.0",
43
+ "@anmiles/eslint-config": "^9.0.3",
44
44
  "@anmiles/tsconfig": "^4.0.0",
45
- "@eslint/compat": "^1.2.9",
46
- "@eslint/css": "^0.8.1",
47
- "@eslint/js": "^9.27.0",
48
- "@eslint/json": "^0.12.0",
49
- "@eslint/markdown": "^6.4.0",
50
- "@stylistic/eslint-plugin": "^4.2.0",
51
- "@types/jest": "^29.5.14",
45
+ "@eslint/compat": "^1.3.1",
46
+ "@eslint/css": "^0.10.0",
47
+ "@eslint/js": "^9.31.0",
48
+ "@eslint/json": "^0.13.1",
49
+ "@eslint/markdown": "^7.1.0",
50
+ "@stylistic/eslint-plugin": "^5.2.2",
51
+ "@types/jest": "^30.0.0",
52
52
  "@types/mock-fs": "^4.13.4",
53
53
  "@types/server-destroy": "^1.0.4",
54
- "@typescript-eslint/eslint-plugin": "^8.32.1",
55
- "@typescript-eslint/parser": "^8.32.1",
54
+ "@typescript-eslint/eslint-plugin": "^8.38.0",
55
+ "@typescript-eslint/parser": "^8.38.0",
56
56
  "copyfiles": "^2.4.1",
57
- "cspell": "^9.0.1",
58
- "eslint": "^9.27.0",
59
- "eslint-import-resolver-typescript": "^4.3.5",
57
+ "cspell": "^9.2.0",
58
+ "eslint": "^9.31.0",
59
+ "eslint-import-resolver-typescript": "^4.4.4",
60
60
  "eslint-plugin-align-assignments": "^1.1.2",
61
- "eslint-plugin-i18next": "^6.1.1",
62
- "eslint-plugin-import": "^2.31.0",
63
- "eslint-plugin-jest": "^28.11.0",
64
- "eslint-plugin-n": "^17.18.0",
61
+ "eslint-plugin-i18next": "^6.1.3",
62
+ "eslint-plugin-import": "^2.32.0",
63
+ "eslint-plugin-jest": "^29.0.1",
64
+ "eslint-plugin-n": "^17.21.0",
65
65
  "eslint-plugin-promise": "^7.2.1",
66
- "jest": "^29.7.0",
67
- "jiti": "^2.4.2",
66
+ "jest": "^30.0.5",
67
+ "jiti": "^2.5.0",
68
68
  "mock-fs": "^5.5.0",
69
69
  "nyc": "^17.1.0",
70
70
  "rimraf": "^6.0.1",
71
- "ts-jest": "^29.3.4",
71
+ "ts-jest": "^29.4.0",
72
72
  "typescript": "^5.8.3"
73
73
  }
74
74
  }
@@ -1,4 +1,4 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
2
 
3
3
  exports[`src/lib/scopes getScopes should throw if scopes file does not exist 1`] = `
4
4
  "File scopes.json not found!
@@ -1,4 +1,4 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
2
 
3
3
  exports[`src/lib/secrets getSecrets should throw if callbackURI is incorrect 1`] = `"Error in credentials file: redirect URI should be http://localhost:6006/oauthcallback"`;
4
4
 
@@ -4,8 +4,8 @@ import type GoogleApis from 'googleapis';
4
4
  import type { calendar_v3 } from 'googleapis/build/src/apis/calendar';
5
5
  import { calendar } from 'googleapis/build/src/apis/calendar';
6
6
 
7
- import { API, getAPI } from '../api';
8
- import type { CommonResponse } from '../api';
7
+ import { getAPI } from '../api';
8
+ import type { API, CommonResponse } from '../api';
9
9
  import { getAuth } from '../auth';
10
10
  import { deleteCredentials } from '../credentials';
11
11
 
@@ -211,13 +211,6 @@ Permanent credentials will be stored in the file and potentially might be re-use
211
211
 
212
212
  expect(returnedItems).toEqual(items);
213
213
  });
214
-
215
- it('should throw if api was not initialized before getting items', async () => {
216
- instance = new API((auth) => calendar({ version: 'v3', auth }), profile);
217
-
218
- await expect(async () => instance.getItems(() => calendarList, params))
219
- .rejects.toEqual(new Error('API is not initialized. Call `init` before getting items.'));
220
- });
221
214
  });
222
215
  });
223
216
  });
package/src/lib/api.ts CHANGED
@@ -35,18 +35,21 @@ export interface CommonResponse<TItem> {
35
35
  }
36
36
 
37
37
  export class API<TGoogleAPI> {
38
- api: TGoogleAPI | undefined;
39
- private auth: GoogleApis.Common.OAuth2Client | undefined;
40
-
41
- constructor(
38
+ private constructor(
39
+ public api: TGoogleAPI,
40
+ private auth: GoogleApis.Common.OAuth2Client,
42
41
  private readonly getter: (auth: GoogleApis.Common.OAuth2Client)=> TGoogleAPI,
43
42
  private readonly profile: string,
44
43
  private readonly authOptions?: AuthOptions,
45
44
  ) { }
46
45
 
47
- async init(): Promise<void> {
48
- this.auth = await getAuth(this.profile, this.authOptions);
49
- this.api = this.getter(this.auth);
46
+ static async init<TGoogleAPI>(
47
+ getter: (auth: GoogleApis.Common.OAuth2Client)=> TGoogleAPI,
48
+ profile: string,
49
+ authOptions?: AuthOptions,
50
+ ): Promise<API<TGoogleAPI>> {
51
+ const { api, auth } = await resetAuth(getter, profile, authOptions);
52
+ return new API<TGoogleAPI>(api, auth, getter, profile, authOptions);
50
53
  }
51
54
 
52
55
  async getItems<TItem>(selectAPI: (api: TGoogleAPI)=> CommonAPI<TItem>, params: object, options?: CommonOptions): Promise<TItem[]> {
@@ -58,10 +61,6 @@ export class API<TGoogleAPI> {
58
61
  let response: GoogleApis.Common.GaxiosResponse<CommonResponse<TItem>>;
59
62
 
60
63
  try {
61
- if (!this.api) {
62
- throw new Error('API is not initialized. Call `init` before getting items.');
63
- }
64
-
65
64
  const selectedAPI = selectAPI(this.api);
66
65
 
67
66
  response = await selectedAPI.list({ ...params, pageToken });
@@ -71,7 +70,9 @@ export class API<TGoogleAPI> {
71
70
  if ((message === 'invalid_grant' || message === 'Invalid credentials') && !this.authOptions?.temporary) {
72
71
  warn('Access token stored is invalid, re-creating...');
73
72
  deleteCredentials(this.profile);
74
- await this.init();
73
+ const { api, auth } = await resetAuth(this.getter, this.profile, this.authOptions);
74
+ this.api = api;
75
+ this.auth = auth;
75
76
  return this.getItems(selectAPI, params, options);
76
77
  } else {
77
78
  throw ex;
@@ -105,7 +106,18 @@ export async function getAPI<TGoogleAPI>(
105
106
  }
106
107
  }
107
108
 
108
- const instance = new API<TGoogleAPI>(getter, profile, authOptions);
109
- await instance.init();
110
- return instance;
109
+ return API.init<TGoogleAPI>(getter, profile, authOptions);
110
+ }
111
+
112
+ async function resetAuth<TGoogleAPI>(
113
+ getter: (auth: GoogleApis.Common.OAuth2Client)=> TGoogleAPI,
114
+ profile: string,
115
+ authOptions?: AuthOptions,
116
+ ): Promise<{
117
+ api: TGoogleAPI;
118
+ readonly auth: GoogleApis.Common.OAuth2Client;
119
+ }> {
120
+ const auth = await getAuth(profile, authOptions);
121
+ const api = getter(auth);
122
+ return { api, auth };
111
123
  }