@anmiles/google-api-wrapper 9.1.0 → 11.0.0
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 +27 -0
- package/README.md +12 -7
- package/dist/index.d.ts +1 -3
- package/dist/index.js +3 -7
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +306 -0
- package/dist/lib/api.js +336 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/secrets.d.ts +3 -1
- package/dist/lib/secrets.js +9 -2
- package/dist/lib/secrets.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -3
- package/src/lib/__tests__/api.test.ts +206 -0
- package/src/lib/__tests__/secrets.test.ts +16 -0
- package/src/lib/api.ts +365 -0
- package/src/lib/secrets.ts +10 -2
- package/tsconfig.json +1 -0
- package/dist/lib/api/calendar.d.ts +0 -3
- package/dist/lib/api/calendar.js +0 -14
- package/dist/lib/api/calendar.js.map +0 -1
- package/dist/lib/api/shared.d.ts +0 -23
- package/dist/lib/api/shared.js +0 -27
- package/dist/lib/api/shared.js.map +0 -1
- package/dist/lib/api/youtube.d.ts +0 -3
- package/dist/lib/api/youtube.js +0 -14
- package/dist/lib/api/youtube.js.map +0 -1
- package/src/lib/api/__tests__/calendar.test.ts +0 -45
- package/src/lib/api/__tests__/shared.test.ts +0 -93
- package/src/lib/api/__tests__/youtube.test.ts +0 -45
- package/src/lib/api/calendar.ts +0 -13
- package/src/lib/api/shared.ts +0 -44
- package/src/lib/api/youtube.ts +0 -13
package/tsconfig.json
CHANGED
package/dist/lib/api/calendar.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getAPI = void 0;
|
|
4
|
-
const googleapis_1 = require("googleapis");
|
|
5
|
-
const auth_1 = require("../auth");
|
|
6
|
-
async function getAPI(profile, options) {
|
|
7
|
-
const googleAuth = await (0, auth_1.getAuth)(profile, options);
|
|
8
|
-
return googleapis_1.google.calendar({
|
|
9
|
-
version: 'v3',
|
|
10
|
-
auth: googleAuth,
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
exports.getAPI = getAPI;
|
|
14
|
-
//# sourceMappingURL=calendar.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../src/lib/api/calendar.ts"],"names":[],"mappings":";;;AAAA,2CAAoC;AAGpC,kCAAkC;AAE3B,KAAK,UAAU,MAAM,CAAC,OAAe,EAAE,OAAqB;IAClE,MAAM,UAAU,GAAG,MAAM,IAAA,cAAO,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEnD,OAAO,mBAAM,CAAC,QAAQ,CAAC;QACtB,OAAO,EAAG,IAAI;QACd,IAAI,EAAM,UAAU;KACpB,CAAC,CAAC;AACJ,CAAC;AAPD,wBAOC"}
|
package/dist/lib/api/shared.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type GoogleApis from 'googleapis';
|
|
2
|
-
import type { CommonOptions } from '../../types';
|
|
3
|
-
export { getItems };
|
|
4
|
-
declare const _default: {
|
|
5
|
-
getItems: typeof getItems;
|
|
6
|
-
};
|
|
7
|
-
export default _default;
|
|
8
|
-
type CommonApi<TItem> = {
|
|
9
|
-
list: {
|
|
10
|
-
(params?: {
|
|
11
|
-
pageToken: string | undefined;
|
|
12
|
-
}, options?: GoogleApis.Common.MethodOptions): Promise<GoogleApis.Common.GaxiosResponse<CommonResponse<TItem>>>;
|
|
13
|
-
(callback: (err: Error | null, res?: GoogleApis.Common.GaxiosResponse<CommonResponse<TItem>> | null) => void): void;
|
|
14
|
-
};
|
|
15
|
-
};
|
|
16
|
-
type CommonResponse<TItem> = {
|
|
17
|
-
items?: TItem[];
|
|
18
|
-
pageInfo?: {
|
|
19
|
-
totalResults?: number | null | undefined;
|
|
20
|
-
};
|
|
21
|
-
nextPageToken?: string | null | undefined;
|
|
22
|
-
};
|
|
23
|
-
declare function getItems<TItem>(api: CommonApi<TItem>, params: any, options?: CommonOptions): Promise<TItem[]>;
|
package/dist/lib/api/shared.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getItems = void 0;
|
|
7
|
-
const logger_1 = require("@anmiles/logger");
|
|
8
|
-
const sleep_1 = __importDefault(require("@anmiles/sleep"));
|
|
9
|
-
exports.default = { getItems };
|
|
10
|
-
const requestInterval = 300;
|
|
11
|
-
async function getItems(api, params, options) {
|
|
12
|
-
var _a, _b;
|
|
13
|
-
const items = [];
|
|
14
|
-
let pageToken = undefined;
|
|
15
|
-
do {
|
|
16
|
-
const response = await api.list({ ...params, pageToken });
|
|
17
|
-
(_a = response.data.items) === null || _a === void 0 ? void 0 : _a.forEach((item) => items.push(item));
|
|
18
|
-
if (!(options === null || options === void 0 ? void 0 : options.hideProgress)) {
|
|
19
|
-
(0, logger_1.log)(`Getting items (${items.length} of ${((_b = response.data.pageInfo) === null || _b === void 0 ? void 0 : _b.totalResults) || 'many'})...`);
|
|
20
|
-
}
|
|
21
|
-
await (0, sleep_1.default)(requestInterval);
|
|
22
|
-
pageToken = response.data.nextPageToken;
|
|
23
|
-
} while (pageToken);
|
|
24
|
-
return items;
|
|
25
|
-
}
|
|
26
|
-
exports.getItems = getItems;
|
|
27
|
-
//# sourceMappingURL=shared.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/lib/api/shared.ts"],"names":[],"mappings":";;;;;;AACA,4CAAsC;AACtC,2DAAmC;AAInC,kBAAe,EAAE,QAAQ,EAAE,CAAC;AAE5B,MAAM,eAAe,GAAG,GAAG,CAAC;AAiB5B,KAAK,UAAU,QAAQ,CAAQ,GAAqB,EAAE,MAAW,EAAE,OAAuB;;IACzF,MAAM,KAAK,GAAY,EAAE,CAAC;IAE1B,IAAI,SAAS,GAA8B,SAAS,CAAC;IAErD,GAAG;QACF,MAAM,QAAQ,GAA4D,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACnH,MAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,0CAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzD,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAA,EAAE;YAC3B,IAAA,YAAG,EAAC,kBAAkB,KAAK,CAAC,MAAM,OAAO,CAAA,MAAA,QAAQ,CAAC,IAAI,CAAC,QAAQ,0CAAE,YAAY,KAAI,MAAM,MAAM,CAAC,CAAC;SAC/F;QAED,MAAM,IAAA,eAAK,EAAC,eAAe,CAAC,CAAC;QAC7B,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;KACxC,QAAQ,SAAS,EAAE;IAEpB,OAAO,KAAK,CAAC;AACd,CAAC;AAtCQ,4BAAQ"}
|
package/dist/lib/api/youtube.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getAPI = void 0;
|
|
4
|
-
const googleapis_1 = require("googleapis");
|
|
5
|
-
const auth_1 = require("../auth");
|
|
6
|
-
async function getAPI(profile, options) {
|
|
7
|
-
const googleAuth = await (0, auth_1.getAuth)(profile, options);
|
|
8
|
-
return googleapis_1.google.youtube({
|
|
9
|
-
version: 'v3',
|
|
10
|
-
auth: googleAuth,
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
exports.getAPI = getAPI;
|
|
14
|
-
//# sourceMappingURL=youtube.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"youtube.js","sourceRoot":"","sources":["../../../src/lib/api/youtube.ts"],"names":[],"mappings":";;;AAAA,2CAAoC;AAGpC,kCAAkC;AAE3B,KAAK,UAAU,MAAM,CAAC,OAAe,EAAE,OAAqB;IAClE,MAAM,UAAU,GAAG,MAAM,IAAA,cAAO,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEnD,OAAO,mBAAM,CAAC,OAAO,CAAC;QACrB,OAAO,EAAG,IAAI;QACd,IAAI,EAAM,UAAU;KACpB,CAAC,CAAC;AACJ,CAAC;AAPD,wBAOC"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { google } from 'googleapis';
|
|
2
|
-
import auth from '../../auth';
|
|
3
|
-
import { getAPI } from '../calendar';
|
|
4
|
-
|
|
5
|
-
jest.mock('googleapis', () => ({
|
|
6
|
-
google : {
|
|
7
|
-
calendar : jest.fn().mockImplementation(() => api),
|
|
8
|
-
},
|
|
9
|
-
}));
|
|
10
|
-
|
|
11
|
-
jest.mock<Partial<typeof auth>>('../../auth', () => ({
|
|
12
|
-
getAuth : jest.fn().mockImplementation(() => googleAuth),
|
|
13
|
-
}));
|
|
14
|
-
|
|
15
|
-
const profile = 'username';
|
|
16
|
-
const api = 'api';
|
|
17
|
-
const googleAuth = 'googleAuth';
|
|
18
|
-
|
|
19
|
-
describe('src/lib/api/calendar', () => {
|
|
20
|
-
describe('getAPI', () => {
|
|
21
|
-
it('should call getAuth', async () => {
|
|
22
|
-
await getAPI(profile);
|
|
23
|
-
|
|
24
|
-
expect(auth.getAuth).toHaveBeenCalledWith(profile, undefined);
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
it('should pass temporariness', async () => {
|
|
28
|
-
await getAPI(profile, { temporary : true });
|
|
29
|
-
|
|
30
|
-
expect(auth.getAuth).toHaveBeenCalledWith(profile, { temporary : true });
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
it('should get calendar api', async () => {
|
|
34
|
-
await getAPI(profile);
|
|
35
|
-
|
|
36
|
-
expect(google.calendar).toHaveBeenCalledWith({ version : 'v3', auth : googleAuth });
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it('should return calendar api', async () => {
|
|
40
|
-
const result = await getAPI(profile);
|
|
41
|
-
|
|
42
|
-
expect(result).toEqual(api);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
});
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import logger from '@anmiles/logger';
|
|
2
|
-
import sleep from '@anmiles/sleep';
|
|
3
|
-
import shared from '../shared';
|
|
4
|
-
|
|
5
|
-
const original = jest.requireActual('../shared').default as typeof shared;
|
|
6
|
-
jest.mock<Partial<typeof shared>>('../shared', () => ({
|
|
7
|
-
getItems : jest.fn().mockImplementation(async () => items),
|
|
8
|
-
}));
|
|
9
|
-
|
|
10
|
-
jest.mock<Partial<typeof logger>>('@anmiles/logger', () => ({
|
|
11
|
-
log : jest.fn(),
|
|
12
|
-
}));
|
|
13
|
-
|
|
14
|
-
jest.mock<Partial<typeof sleep>>('@anmiles/sleep', () => jest.fn());
|
|
15
|
-
|
|
16
|
-
const items: Array<{ data: string}> = [
|
|
17
|
-
{ data : 'first' },
|
|
18
|
-
{ data : 'second' },
|
|
19
|
-
{ data : 'third' },
|
|
20
|
-
{ data : 'forth' },
|
|
21
|
-
];
|
|
22
|
-
|
|
23
|
-
const response = [
|
|
24
|
-
[ items[0], items[1] ],
|
|
25
|
-
null,
|
|
26
|
-
[ items[2], items[3] ],
|
|
27
|
-
];
|
|
28
|
-
|
|
29
|
-
const pageTokens = [
|
|
30
|
-
undefined,
|
|
31
|
-
'token1',
|
|
32
|
-
'token2',
|
|
33
|
-
];
|
|
34
|
-
|
|
35
|
-
const getAPI = <T>(items: Array<Array<T> | null>, pageTokens: Array<string | undefined>) => ({
|
|
36
|
-
list : jest.fn().mockImplementation(async ({ pageToken }: {pageToken?: string}) => {
|
|
37
|
-
const index = pageTokens.indexOf(pageToken);
|
|
38
|
-
|
|
39
|
-
return {
|
|
40
|
-
data : {
|
|
41
|
-
items : items[index],
|
|
42
|
-
nextPageToken : pageTokens[index + 1],
|
|
43
|
-
pageInfo : !items[index] ? null : {
|
|
44
|
-
totalResults : items.reduce((sum, list) => sum + (list?.length || 0), 0),
|
|
45
|
-
},
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
}),
|
|
49
|
-
update : jest.fn(),
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
const api = getAPI(response, pageTokens);
|
|
53
|
-
const args = { key : 'value' };
|
|
54
|
-
|
|
55
|
-
describe('src/lib/api/shared', () => {
|
|
56
|
-
describe('getItems', () => {
|
|
57
|
-
it('should call API list method for each page', async () => {
|
|
58
|
-
await original.getItems(api, args);
|
|
59
|
-
|
|
60
|
-
pageTokens.forEach((pageToken) => {
|
|
61
|
-
expect(api.list).toHaveBeenCalledWith({ ...args, pageToken });
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it('should output progress by default', async () => {
|
|
66
|
-
await original.getItems(api, args);
|
|
67
|
-
|
|
68
|
-
expect(logger.log).toHaveBeenCalledTimes(response.length);
|
|
69
|
-
expect(logger.log).toHaveBeenCalledWith('Getting items (2 of 4)...');
|
|
70
|
-
expect(logger.log).toHaveBeenCalledWith('Getting items (2 of many)...');
|
|
71
|
-
expect(logger.log).toHaveBeenCalledWith('Getting items (4 of 4)...');
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
it('should not output progress if hidden', async () => {
|
|
75
|
-
await original.getItems(api, args, { hideProgress : true });
|
|
76
|
-
|
|
77
|
-
expect(logger.log).not.toHaveBeenCalled();
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
it('should sleep after reach request', async () => {
|
|
81
|
-
await original.getItems(api, args);
|
|
82
|
-
|
|
83
|
-
expect(sleep).toHaveBeenCalledTimes(response.length);
|
|
84
|
-
expect(sleep).toHaveBeenCalledWith(300);
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it('should return items data', async () => {
|
|
88
|
-
const items = await original.getItems(api, args);
|
|
89
|
-
|
|
90
|
-
expect(items).toEqual(items);
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
});
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { google } from 'googleapis';
|
|
2
|
-
import auth from '../../auth';
|
|
3
|
-
import { getAPI } from '../youtube';
|
|
4
|
-
|
|
5
|
-
jest.mock('googleapis', () => ({
|
|
6
|
-
google : {
|
|
7
|
-
youtube : jest.fn().mockImplementation(() => api),
|
|
8
|
-
},
|
|
9
|
-
}));
|
|
10
|
-
|
|
11
|
-
jest.mock<Partial<typeof auth>>('../../auth', () => ({
|
|
12
|
-
getAuth : jest.fn().mockImplementation(() => googleAuth),
|
|
13
|
-
}));
|
|
14
|
-
|
|
15
|
-
const profile = 'username';
|
|
16
|
-
const api = 'api';
|
|
17
|
-
const googleAuth = 'googleAuth';
|
|
18
|
-
|
|
19
|
-
describe('src/lib/api/youtube', () => {
|
|
20
|
-
describe('getAPI', () => {
|
|
21
|
-
it('should call getAuth', async () => {
|
|
22
|
-
await getAPI(profile);
|
|
23
|
-
|
|
24
|
-
expect(auth.getAuth).toHaveBeenCalledWith(profile, undefined);
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
it('should pass temporariness', async () => {
|
|
28
|
-
await getAPI(profile, { temporary : true });
|
|
29
|
-
|
|
30
|
-
expect(auth.getAuth).toHaveBeenCalledWith(profile, { temporary : true });
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
it('should get youtube api', async () => {
|
|
34
|
-
await getAPI(profile);
|
|
35
|
-
|
|
36
|
-
expect(google.youtube).toHaveBeenCalledWith({ version : 'v3', auth : googleAuth });
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it('should return youtube api', async () => {
|
|
40
|
-
const result = await getAPI(profile);
|
|
41
|
-
|
|
42
|
-
expect(result).toEqual(api);
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
});
|
package/src/lib/api/calendar.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { google } from 'googleapis';
|
|
2
|
-
import type GoogleApis from 'googleapis';
|
|
3
|
-
import type { AuthOptions } from '../../types';
|
|
4
|
-
import { getAuth } from '../auth';
|
|
5
|
-
|
|
6
|
-
export async function getAPI(profile: string, options?: AuthOptions): Promise<GoogleApis.calendar_v3.Calendar> {
|
|
7
|
-
const googleAuth = await getAuth(profile, options);
|
|
8
|
-
|
|
9
|
-
return google.calendar({
|
|
10
|
-
version : 'v3',
|
|
11
|
-
auth : googleAuth,
|
|
12
|
-
});
|
|
13
|
-
}
|
package/src/lib/api/shared.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type GoogleApis from 'googleapis';
|
|
2
|
-
import { log } from '@anmiles/logger';
|
|
3
|
-
import sleep from '@anmiles/sleep';
|
|
4
|
-
import type { CommonOptions } from '../../types';
|
|
5
|
-
|
|
6
|
-
export { getItems };
|
|
7
|
-
export default { getItems };
|
|
8
|
-
|
|
9
|
-
const requestInterval = 300;
|
|
10
|
-
|
|
11
|
-
type CommonApi<TItem> = {
|
|
12
|
-
list: {
|
|
13
|
-
(params?: { pageToken: string | undefined }, options?: GoogleApis.Common.MethodOptions): Promise<GoogleApis.Common.GaxiosResponse<CommonResponse<TItem>>>;
|
|
14
|
-
(callback: (err: Error | null, res?: GoogleApis.Common.GaxiosResponse<CommonResponse<TItem>> | null) => void): void;
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
type CommonResponse<TItem> = {
|
|
19
|
-
items?: TItem[],
|
|
20
|
-
pageInfo?: {
|
|
21
|
-
totalResults?: number | null | undefined
|
|
22
|
-
},
|
|
23
|
-
nextPageToken?: string | null | undefined
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
async function getItems<TItem>(api: CommonApi<TItem>, params: any, options?: CommonOptions): Promise<TItem[]> {
|
|
27
|
-
const items: TItem[] = [];
|
|
28
|
-
|
|
29
|
-
let pageToken: string | null | undefined = undefined;
|
|
30
|
-
|
|
31
|
-
do {
|
|
32
|
-
const response: GoogleApis.Common.GaxiosResponse<CommonResponse<TItem>> = await api.list({ ...params, pageToken });
|
|
33
|
-
response.data.items?.forEach((item) => items.push(item));
|
|
34
|
-
|
|
35
|
-
if (!options?.hideProgress) {
|
|
36
|
-
log(`Getting items (${items.length} of ${response.data.pageInfo?.totalResults || 'many'})...`);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
await sleep(requestInterval);
|
|
40
|
-
pageToken = response.data.nextPageToken;
|
|
41
|
-
} while (pageToken);
|
|
42
|
-
|
|
43
|
-
return items;
|
|
44
|
-
}
|
package/src/lib/api/youtube.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { google } from 'googleapis';
|
|
2
|
-
import type GoogleApis from 'googleapis';
|
|
3
|
-
import type { AuthOptions } from '../../types';
|
|
4
|
-
import { getAuth } from '../auth';
|
|
5
|
-
|
|
6
|
-
export async function getAPI(profile: string, options?: AuthOptions): Promise<GoogleApis.youtube_v3.Youtube> {
|
|
7
|
-
const googleAuth = await getAuth(profile, options);
|
|
8
|
-
|
|
9
|
-
return google.youtube({
|
|
10
|
-
version : 'v3',
|
|
11
|
-
auth : googleAuth,
|
|
12
|
-
});
|
|
13
|
-
}
|