@dereekb/zoom 12.6.21 → 13.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/LICENSE +1 -1
- package/index.cjs.js +4 -1417
- package/index.esm.js +5 -1418
- package/nestjs/index.cjs.js +692 -0
- package/nestjs/index.esm.js +662 -0
- package/nestjs/package.json +19 -3
- package/nestjs/src/lib/webhook/webhook.zoom.controller.d.ts +1 -1
- package/nestjs/src/lib/zoom/zoom.api.d.ts +1 -1
- package/package.json +14 -7
- package/src/lib/oauth/oauth.error.api.d.ts +2 -2
- package/src/lib/zoom/zoom.error.api.d.ts +2 -2
- package/src/lib/zoom.error.api.d.ts +2 -2
- package/src/lib/zoom.type.d.ts +2 -2
- package/nestjs/CHANGELOG.md +0 -459
- package/nestjs/README.md +0 -11
- package/nestjs/src/index.js +0 -5
- package/nestjs/src/index.js.map +0 -1
- package/nestjs/src/lib/index.js +0 -7
- package/nestjs/src/lib/index.js.map +0 -1
- package/nestjs/src/lib/oauth/index.js +0 -8
- package/nestjs/src/lib/oauth/index.js.map +0 -1
- package/nestjs/src/lib/oauth/oauth.api.js +0 -41
- package/nestjs/src/lib/oauth/oauth.api.js.map +0 -1
- package/nestjs/src/lib/oauth/oauth.config.js +0 -50
- package/nestjs/src/lib/oauth/oauth.config.js.map +0 -1
- package/nestjs/src/lib/oauth/oauth.module.js +0 -36
- package/nestjs/src/lib/oauth/oauth.module.js.map +0 -1
- package/nestjs/src/lib/oauth/oauth.service.js +0 -230
- package/nestjs/src/lib/oauth/oauth.service.js.map +0 -1
- package/nestjs/src/lib/webhook/index.js +0 -15
- package/nestjs/src/lib/webhook/index.js.map +0 -1
- package/nestjs/src/lib/webhook/webhook.zoom.config.js +0 -17
- package/nestjs/src/lib/webhook/webhook.zoom.config.js.map +0 -1
- package/nestjs/src/lib/webhook/webhook.zoom.controller.js +0 -38
- package/nestjs/src/lib/webhook/webhook.zoom.controller.js.map +0 -1
- package/nestjs/src/lib/webhook/webhook.zoom.js +0 -38
- package/nestjs/src/lib/webhook/webhook.zoom.js.map +0 -1
- package/nestjs/src/lib/webhook/webhook.zoom.module.js +0 -41
- package/nestjs/src/lib/webhook/webhook.zoom.module.js.map +0 -1
- package/nestjs/src/lib/webhook/webhook.zoom.service.js +0 -60
- package/nestjs/src/lib/webhook/webhook.zoom.service.js.map +0 -1
- package/nestjs/src/lib/webhook/webhook.zoom.type.common.js +0 -3
- package/nestjs/src/lib/webhook/webhook.zoom.type.common.js.map +0 -1
- package/nestjs/src/lib/webhook/webhook.zoom.type.js +0 -3
- package/nestjs/src/lib/webhook/webhook.zoom.type.js.map +0 -1
- package/nestjs/src/lib/webhook/webhook.zoom.type.meeting.js +0 -18
- package/nestjs/src/lib/webhook/webhook.zoom.type.meeting.js.map +0 -1
- package/nestjs/src/lib/webhook/webhook.zoom.type.validate.js +0 -5
- package/nestjs/src/lib/webhook/webhook.zoom.type.validate.js.map +0 -1
- package/nestjs/src/lib/webhook/webhook.zoom.validate.js +0 -25
- package/nestjs/src/lib/webhook/webhook.zoom.validate.js.map +0 -1
- package/nestjs/src/lib/webhook/webhook.zoom.verify.js +0 -27
- package/nestjs/src/lib/webhook/webhook.zoom.verify.js.map +0 -1
- package/nestjs/src/lib/zoom/index.js +0 -7
- package/nestjs/src/lib/zoom/index.js.map +0 -1
- package/nestjs/src/lib/zoom/zoom.api.js +0 -78
- package/nestjs/src/lib/zoom/zoom.api.js.map +0 -1
- package/nestjs/src/lib/zoom/zoom.config.js +0 -15
- package/nestjs/src/lib/zoom/zoom.config.js.map +0 -1
- package/nestjs/src/lib/zoom/zoom.module.js +0 -40
- package/nestjs/src/lib/zoom/zoom.module.js.map +0 -1
- /package/{index.cjs.d.ts → index.d.ts} +0 -0
- /package/{index.esm.d.ts → nestjs/index.d.ts} +0 -0
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ZoomOAuthServiceConfig = void 0;
|
|
4
|
-
exports.readZoomOAuthServiceConfigFromConfigService = readZoomOAuthServiceConfigFromConfigService;
|
|
5
|
-
const util_1 = require("@dereekb/util");
|
|
6
|
-
/**
|
|
7
|
-
* Configuration for ZoomService
|
|
8
|
-
*/
|
|
9
|
-
class ZoomOAuthServiceConfig {
|
|
10
|
-
zoomOAuth;
|
|
11
|
-
factoryConfig;
|
|
12
|
-
static assertValidConfig(config) {
|
|
13
|
-
const { zoomOAuth } = config;
|
|
14
|
-
if (!zoomOAuth) {
|
|
15
|
-
throw new Error('ZoomOAuthServiceConfig.zoomOAuth is required');
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
if (!zoomOAuth.accountId) {
|
|
19
|
-
throw new Error('ZoomOAuthServiceConfig.zoomOAuth.accountId is required');
|
|
20
|
-
}
|
|
21
|
-
else if (!zoomOAuth.clientSecret) {
|
|
22
|
-
throw new Error('ZoomOAuthServiceConfig.zoomOAuth.clientSecret is required');
|
|
23
|
-
}
|
|
24
|
-
else if (!zoomOAuth.clientId) {
|
|
25
|
-
throw new Error('ZoomOAuthServiceConfig.zoomOAuth.clientId is required');
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
exports.ZoomOAuthServiceConfig = ZoomOAuthServiceConfig;
|
|
31
|
-
function readZoomOAuthServiceConfigFromConfigService(configService, prefix) {
|
|
32
|
-
const prefixString = (0, util_1.characterPrefixSuffixInstance)({ suffix: '_', suffixEmptyString: false }).prefixSuffixString(prefix ?? '');
|
|
33
|
-
const accountIdKey = `${prefixString}ZOOM_ACCOUNT_ID`;
|
|
34
|
-
const clientIdKey = `${prefixString}ZOOM_CLIENT_ID`;
|
|
35
|
-
const clientSecretKey = `${prefixString}ZOOM_CLIENT_SECRET`;
|
|
36
|
-
const accountId = configService.getOrThrow(accountIdKey);
|
|
37
|
-
const clientId = configService.getOrThrow(clientIdKey);
|
|
38
|
-
const clientSecret = configService.getOrThrow(clientSecretKey);
|
|
39
|
-
const config = {
|
|
40
|
-
zoomOAuth: {
|
|
41
|
-
authEntityType: 'account',
|
|
42
|
-
accountId,
|
|
43
|
-
clientId,
|
|
44
|
-
clientSecret
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
ZoomOAuthServiceConfig.assertValidConfig(config);
|
|
48
|
-
return config;
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=oauth.config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.config.js","sourceRoot":"","sources":["../../../../../../../packages/zoom/nestjs/src/lib/oauth/oauth.config.ts"],"names":[],"mappings":";;;AAgCA,kGAsBC;AAtDD,wCAA8D;AAQ9D;;GAEG;AACH,MAAsB,sBAAsB;IACjC,SAAS,CAA6B;IACtC,aAAa,CAA0B;IAEhD,MAAM,CAAC,iBAAiB,CAAC,MAA8B;QACrD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAE7B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;YAC5E,CAAC;iBAAM,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;YAC/E,CAAC;iBAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAnBD,wDAmBC;AAED,SAAgB,2CAA2C,CAAC,aAA4B,EAAE,MAAe;IACvG,MAAM,YAAY,GAAG,IAAA,oCAA6B,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAE/H,MAAM,YAAY,GAAG,GAAG,YAAY,iBAAiB,CAAC;IACtD,MAAM,WAAW,GAAG,GAAG,YAAY,gBAAgB,CAAC;IACpD,MAAM,eAAe,GAAG,GAAG,YAAY,oBAAoB,CAAC;IAE5D,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAS,YAAY,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAS,WAAW,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,aAAa,CAAC,UAAU,CAAS,eAAe,CAAC,CAAC;IAEvE,MAAM,MAAM,GAA2B;QACrC,SAAS,EAAE;YACT,cAAc,EAAE,SAAS;YACzB,SAAS;YACT,QAAQ;YACR,YAAY;SACb;KACF,CAAC;IAEF,sBAAsB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.zoomOAuthServiceConfigFactory = zoomOAuthServiceConfigFactory;
|
|
4
|
-
exports.appZoomOAuthModuleMetadata = appZoomOAuthModuleMetadata;
|
|
5
|
-
const config_1 = require("@nestjs/config");
|
|
6
|
-
const oauth_config_1 = require("./oauth.config");
|
|
7
|
-
const oauth_api_1 = require("./oauth.api");
|
|
8
|
-
function zoomOAuthServiceConfigFactory(configService) {
|
|
9
|
-
const config = (0, oauth_config_1.readZoomOAuthServiceConfigFromConfigService)(configService);
|
|
10
|
-
return config;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Convenience function used to generate ModuleMetadata for an app's ZoomOAuthModule.
|
|
14
|
-
*
|
|
15
|
-
* @param provide
|
|
16
|
-
* @param useFactory
|
|
17
|
-
* @returns
|
|
18
|
-
*/
|
|
19
|
-
function appZoomOAuthModuleMetadata(config) {
|
|
20
|
-
const { dependencyModule, imports, exports, providers } = config;
|
|
21
|
-
const dependencyModuleImport = dependencyModule ? [dependencyModule] : [];
|
|
22
|
-
return {
|
|
23
|
-
imports: [config_1.ConfigModule, ...dependencyModuleImport, ...(imports ?? [])],
|
|
24
|
-
exports: [oauth_api_1.ZoomOAuthApi, ...(exports ?? [])],
|
|
25
|
-
providers: [
|
|
26
|
-
{
|
|
27
|
-
provide: oauth_config_1.ZoomOAuthServiceConfig,
|
|
28
|
-
inject: [config_1.ConfigService],
|
|
29
|
-
useFactory: config.zoomOAuthServiceConfigFactory ?? zoomOAuthServiceConfigFactory
|
|
30
|
-
},
|
|
31
|
-
oauth_api_1.ZoomOAuthApi,
|
|
32
|
-
...(providers ?? [])
|
|
33
|
-
]
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=oauth.module.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.module.js","sourceRoot":"","sources":["../../../../../../../packages/zoom/nestjs/src/lib/oauth/oauth.module.ts"],"names":[],"mappings":";;AAQA,sEAGC;AA0BD,gEAiBC;AArDD,2CAA6D;AAC7D,iDAAqG;AACrG,2CAA2C;AAK3C,SAAgB,6BAA6B,CAAC,aAA4B;IACxE,MAAM,MAAM,GAAG,IAAA,0DAA2C,EAAC,aAAa,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC;AAChB,CAAC;AAmBD;;;;;;GAMG;AACH,SAAgB,0BAA0B,CAAC,MAAyC;IAClF,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IACjE,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1E,OAAO;QACL,OAAO,EAAE,CAAC,qBAAY,EAAE,GAAG,sBAAsB,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACtE,OAAO,EAAE,CAAC,wBAAY,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC3C,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,qCAAsB;gBAC/B,MAAM,EAAE,CAAC,sBAAa,CAAC;gBACvB,UAAU,EAAE,MAAM,CAAC,6BAA6B,IAAI,6BAA6B;aAClF;YACD,wBAAY;YACZ,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;SACrB;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_FILE_ZOOM_ACCOUNTS_ACCESS_TOKEN_CACHE_SERVICE_PATH = exports.ZoomOAuthAccessTokenCacheService = void 0;
|
|
4
|
-
exports.logMergeZoomOAuthAccessTokenCacheServiceErrorFunction = logMergeZoomOAuthAccessTokenCacheServiceErrorFunction;
|
|
5
|
-
exports.mergeZoomOAuthAccessTokenCacheServices = mergeZoomOAuthAccessTokenCacheServices;
|
|
6
|
-
exports.memoryZoomOAuthAccessTokenCacheService = memoryZoomOAuthAccessTokenCacheService;
|
|
7
|
-
exports.fileZoomOAuthAccessTokenCacheService = fileZoomOAuthAccessTokenCacheService;
|
|
8
|
-
const tslib_1 = require("tslib");
|
|
9
|
-
const common_1 = require("@nestjs/common");
|
|
10
|
-
const util_1 = require("@dereekb/util");
|
|
11
|
-
const path_1 = require("path");
|
|
12
|
-
const fs_1 = require("fs");
|
|
13
|
-
/**
|
|
14
|
-
* Service used for retrieving ZoomAccessTokenCache for Zoom services.
|
|
15
|
-
*/
|
|
16
|
-
let ZoomOAuthAccessTokenCacheService = class ZoomOAuthAccessTokenCacheService {
|
|
17
|
-
};
|
|
18
|
-
exports.ZoomOAuthAccessTokenCacheService = ZoomOAuthAccessTokenCacheService;
|
|
19
|
-
exports.ZoomOAuthAccessTokenCacheService = ZoomOAuthAccessTokenCacheService = tslib_1.__decorate([
|
|
20
|
-
(0, common_1.Injectable)()
|
|
21
|
-
], ZoomOAuthAccessTokenCacheService);
|
|
22
|
-
function logMergeZoomOAuthAccessTokenCacheServiceErrorFunction(failedUpdates) {
|
|
23
|
-
console.warn(`mergeZoomOAuthAccessTokenCacheServices(): failed updating ${failedUpdates.length} caches.`);
|
|
24
|
-
failedUpdates.forEach(([x, e], i) => {
|
|
25
|
-
console.warn(`Cache update failure ${i + 1}: - ${e}`);
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Merges the input services in order to use some as a backup source.
|
|
30
|
-
*
|
|
31
|
-
* If once source fails retrieval, the next will be tried.
|
|
32
|
-
*
|
|
33
|
-
* When updating a cached token, it will update the token across all services.
|
|
34
|
-
*
|
|
35
|
-
* @param servicesToMerge Must include atleast one service. Empty arrays will throw an error.
|
|
36
|
-
*/
|
|
37
|
-
function mergeZoomOAuthAccessTokenCacheServices(inputServicesToMerge, logError) {
|
|
38
|
-
const allServices = [...inputServicesToMerge];
|
|
39
|
-
const logErrorFunction = typeof logError === 'function' ? logError : logError !== false ? logMergeZoomOAuthAccessTokenCacheServiceErrorFunction : undefined;
|
|
40
|
-
if (allServices.length === 0) {
|
|
41
|
-
throw new Error('mergeZoomOAuthAccessTokenCacheServices() input cannot be empty.');
|
|
42
|
-
}
|
|
43
|
-
const loadZoomAccessTokenCache = (accessCachesForServices) => {
|
|
44
|
-
const loadCachedTokenFromFirstService = (0, util_1.tryWithPromiseFactoriesFunction)({
|
|
45
|
-
promiseFactories: accessCachesForServices.map((x) => () => x
|
|
46
|
-
.loadCachedToken()
|
|
47
|
-
.catch(() => null)
|
|
48
|
-
.then((x) => {
|
|
49
|
-
let result = undefined;
|
|
50
|
-
if (x && !(0, util_1.isPast)(x.expiresAt)) {
|
|
51
|
-
result = x; // only return from cache if it is not expired
|
|
52
|
-
}
|
|
53
|
-
return result;
|
|
54
|
-
})),
|
|
55
|
-
successOnMaybe: false,
|
|
56
|
-
throwErrors: false
|
|
57
|
-
});
|
|
58
|
-
const cacheForService = {
|
|
59
|
-
loadCachedToken: function () {
|
|
60
|
-
return loadCachedTokenFromFirstService();
|
|
61
|
-
},
|
|
62
|
-
updateCachedToken: async function (accessToken) {
|
|
63
|
-
return Promise.allSettled(accessCachesForServices.map((x) => x
|
|
64
|
-
.updateCachedToken(accessToken)
|
|
65
|
-
.then(() => null)
|
|
66
|
-
.catch((e) => {
|
|
67
|
-
return [x, e];
|
|
68
|
-
}))).then((x) => {
|
|
69
|
-
// only find the failures if we're logging
|
|
70
|
-
if (logErrorFunction != null) {
|
|
71
|
-
const failedUpdates = (0, util_1.filterMaybeArrayValues)(x.map((y) => y.value));
|
|
72
|
-
if (failedUpdates.length) {
|
|
73
|
-
logErrorFunction(failedUpdates);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
return cacheForService;
|
|
80
|
-
};
|
|
81
|
-
const allServiceAccessTokenCaches = allServices.map((x) => x.loadZoomAccessTokenCache());
|
|
82
|
-
const allServicesWithCacheForRefreshToken = allServices.filter((x) => x.cacheForRefreshToken != null);
|
|
83
|
-
const cacheForRefreshToken = allServiceAccessTokenCaches.length > 0
|
|
84
|
-
? (refreshToken) => {
|
|
85
|
-
const allCaches = allServicesWithCacheForRefreshToken.map((x) => x.cacheForRefreshToken(refreshToken));
|
|
86
|
-
return loadZoomAccessTokenCache(allCaches);
|
|
87
|
-
}
|
|
88
|
-
: undefined;
|
|
89
|
-
const service = {
|
|
90
|
-
loadZoomAccessTokenCache: () => loadZoomAccessTokenCache(allServiceAccessTokenCaches),
|
|
91
|
-
cacheForRefreshToken
|
|
92
|
-
};
|
|
93
|
-
return service;
|
|
94
|
-
}
|
|
95
|
-
// MARK: Memory Access Token Cache
|
|
96
|
-
/**
|
|
97
|
-
* Creates a ZoomOAuthAccessTokenCacheService that uses in-memory storage.
|
|
98
|
-
*
|
|
99
|
-
* @returns
|
|
100
|
-
*/
|
|
101
|
-
function memoryZoomOAuthAccessTokenCacheService(existingToken, logAccessToConsole) {
|
|
102
|
-
let token = existingToken;
|
|
103
|
-
function loadZoomAccessTokenCache() {
|
|
104
|
-
const accessTokenCache = {
|
|
105
|
-
loadCachedToken: async function () {
|
|
106
|
-
if (logAccessToConsole) {
|
|
107
|
-
console.log('retrieving access token from memory: ', { token });
|
|
108
|
-
}
|
|
109
|
-
return token;
|
|
110
|
-
},
|
|
111
|
-
updateCachedToken: async function (accessToken) {
|
|
112
|
-
token = accessToken;
|
|
113
|
-
if (logAccessToConsole) {
|
|
114
|
-
console.log('updating access token in memory: ', { accessToken });
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
return accessTokenCache;
|
|
119
|
-
}
|
|
120
|
-
return {
|
|
121
|
-
loadZoomAccessTokenCache,
|
|
122
|
-
cacheForRefreshToken: () => loadZoomAccessTokenCache()
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
// MARK: File System Access Token Cache
|
|
126
|
-
exports.DEFAULT_FILE_ZOOM_ACCOUNTS_ACCESS_TOKEN_CACHE_SERVICE_PATH = '.tmp/zoom-access-tokens.json';
|
|
127
|
-
/**
|
|
128
|
-
* Creates a ZoomOAuthAccessTokenCacheService that reads and writes the access token to the file system.
|
|
129
|
-
*
|
|
130
|
-
* Useful for testing.
|
|
131
|
-
*
|
|
132
|
-
* @returns
|
|
133
|
-
*/
|
|
134
|
-
function fileZoomOAuthAccessTokenCacheService(filename = exports.DEFAULT_FILE_ZOOM_ACCOUNTS_ACCESS_TOKEN_CACHE_SERVICE_PATH, useMemoryCache = true) {
|
|
135
|
-
let loadedToken = null;
|
|
136
|
-
async function loadTokenFile() {
|
|
137
|
-
let token = undefined;
|
|
138
|
-
if (!loadedToken) {
|
|
139
|
-
token = (await readTokenFile()) ?? {};
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
token = loadedToken;
|
|
143
|
-
}
|
|
144
|
-
return token;
|
|
145
|
-
}
|
|
146
|
-
function readTokenFile() {
|
|
147
|
-
return new Promise((resolve) => {
|
|
148
|
-
(0, fs_1.mkdirSync)((0, path_1.dirname)(filename), { recursive: true }); // make the directory first
|
|
149
|
-
(0, fs_1.readFile)(filename, {}, (x, data) => {
|
|
150
|
-
let result = undefined;
|
|
151
|
-
if (!x) {
|
|
152
|
-
try {
|
|
153
|
-
result = JSON.parse(data.toString());
|
|
154
|
-
if (result?.token) {
|
|
155
|
-
result.token.expiresAt = new Date(result.token.expiresAt);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
catch (e) {
|
|
159
|
-
console.error('Failed reading token file: ', e);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
resolve(result);
|
|
163
|
-
});
|
|
164
|
-
}).then((x) => {
|
|
165
|
-
// update loaded tokens
|
|
166
|
-
if (useMemoryCache) {
|
|
167
|
-
loadedToken = {
|
|
168
|
-
...loadedToken,
|
|
169
|
-
...x
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
return x;
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
async function writeTokenFile(tokens) {
|
|
176
|
-
return new Promise((resolve, reject) => {
|
|
177
|
-
(0, fs_1.writeFile)(filename, JSON.stringify(tokens), {}, (x) => {
|
|
178
|
-
if (!x) {
|
|
179
|
-
resolve();
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
reject(x);
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
async function deleteTokenFile() {
|
|
188
|
-
return new Promise((resolve, reject) => {
|
|
189
|
-
(0, fs_1.rm)(filename, (x) => {
|
|
190
|
-
if (!x) {
|
|
191
|
-
resolve();
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
reject(x);
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
function loadZoomAccessTokenCache() {
|
|
200
|
-
const accessTokenCache = {
|
|
201
|
-
loadCachedToken: async function () {
|
|
202
|
-
const tokens = await loadTokenFile();
|
|
203
|
-
const token = tokens.token;
|
|
204
|
-
// console.log('retrieving access token from file: ', { token });
|
|
205
|
-
return token;
|
|
206
|
-
},
|
|
207
|
-
updateCachedToken: async function (accessToken) {
|
|
208
|
-
const tokenFile = await loadTokenFile();
|
|
209
|
-
if (tokenFile) {
|
|
210
|
-
tokenFile.token = accessToken;
|
|
211
|
-
}
|
|
212
|
-
// console.log('updating access token in file: ', { accessToken });
|
|
213
|
-
try {
|
|
214
|
-
await writeTokenFile(tokenFile);
|
|
215
|
-
}
|
|
216
|
-
catch (e) {
|
|
217
|
-
console.error('Failed updating access token in file: ', e);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
};
|
|
221
|
-
return accessTokenCache;
|
|
222
|
-
}
|
|
223
|
-
return {
|
|
224
|
-
loadZoomAccessTokenCache,
|
|
225
|
-
readTokenFile,
|
|
226
|
-
writeTokenFile,
|
|
227
|
-
deleteTokenFile
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
//# sourceMappingURL=oauth.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.service.js","sourceRoot":"","sources":["../../../../../../../packages/zoom/nestjs/src/lib/oauth/oauth.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
tslib_1.__exportStar(require("./webhook.zoom.config"), exports);
|
|
5
|
-
tslib_1.__exportStar(require("./webhook.zoom.controller"), exports);
|
|
6
|
-
tslib_1.__exportStar(require("./webhook.zoom.module"), exports);
|
|
7
|
-
tslib_1.__exportStar(require("./webhook.zoom.service"), exports);
|
|
8
|
-
tslib_1.__exportStar(require("./webhook.zoom"), exports);
|
|
9
|
-
tslib_1.__exportStar(require("./webhook.zoom.type"), exports);
|
|
10
|
-
tslib_1.__exportStar(require("./webhook.zoom.type.common"), exports);
|
|
11
|
-
tslib_1.__exportStar(require("./webhook.zoom.type.meeting"), exports);
|
|
12
|
-
tslib_1.__exportStar(require("./webhook.zoom.type.validate"), exports);
|
|
13
|
-
tslib_1.__exportStar(require("./webhook.zoom.verify"), exports);
|
|
14
|
-
tslib_1.__exportStar(require("./webhook.zoom.validate"), exports);
|
|
15
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/zoom/nestjs/src/lib/webhook/index.ts"],"names":[],"mappings":";;;AAAA,gEAAsC;AACtC,oEAA0C;AAC1C,gEAAsC;AACtC,iEAAuC;AACvC,yDAA+B;AAC/B,8DAAoC;AACpC,qEAA2C;AAC3C,sEAA4C;AAC5C,uEAA6C;AAC7C,gEAAsC;AACtC,kEAAwC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ZoomWebhookServiceConfig = exports.ZOOM_SECRET_TOKEN_ENV_VAR = void 0;
|
|
4
|
-
exports.ZOOM_SECRET_TOKEN_ENV_VAR = 'ZOOM_SECRET_TOKEN';
|
|
5
|
-
/**
|
|
6
|
-
* Configuration for ZoomService
|
|
7
|
-
*/
|
|
8
|
-
class ZoomWebhookServiceConfig {
|
|
9
|
-
webhookConfig;
|
|
10
|
-
static assertValidConfig(config) {
|
|
11
|
-
if (!config.webhookConfig.zoomSecretToken) {
|
|
12
|
-
throw new Error('No zoom secret token specified.');
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
exports.ZoomWebhookServiceConfig = ZoomWebhookServiceConfig;
|
|
17
|
-
//# sourceMappingURL=webhook.zoom.config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.zoom.config.js","sourceRoot":"","sources":["../../../../../../../packages/zoom/nestjs/src/lib/webhook/webhook.zoom.config.ts"],"names":[],"mappings":";;;AAEa,QAAA,yBAAyB,GAAG,mBAAmB,CAAC;AAM7D;;GAEG;AACH,MAAsB,wBAAwB;IACnC,aAAa,CAAqB;IAE3C,MAAM,CAAC,iBAAiB,CAAC,MAAgC;QACvD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;CACF;AARD,4DAQC"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ZoomWebhookController = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const nestjs_1 = require("@dereekb/nestjs");
|
|
6
|
-
const common_1 = require("@nestjs/common");
|
|
7
|
-
const webhook_zoom_service_1 = require("./webhook.zoom.service");
|
|
8
|
-
let ZoomWebhookController = class ZoomWebhookController {
|
|
9
|
-
zoomWebhookService;
|
|
10
|
-
constructor(zoomWebhookService) {
|
|
11
|
-
this.zoomWebhookService = zoomWebhookService;
|
|
12
|
-
}
|
|
13
|
-
async handleZoomWebhook(res, req, rawBody) {
|
|
14
|
-
const { valid, validationEventResponse } = await this.zoomWebhookService.updateForWebhook(req, rawBody);
|
|
15
|
-
const response = res.status(200); // always return a 200 status code
|
|
16
|
-
if (valid && validationEventResponse) {
|
|
17
|
-
response.json(validationEventResponse);
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
response.json({});
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
exports.ZoomWebhookController = ZoomWebhookController;
|
|
25
|
-
tslib_1.__decorate([
|
|
26
|
-
(0, common_1.Post)(),
|
|
27
|
-
tslib_1.__param(0, (0, common_1.Res)()),
|
|
28
|
-
tslib_1.__param(1, (0, common_1.Req)()),
|
|
29
|
-
tslib_1.__param(2, (0, nestjs_1.RawBody)()),
|
|
30
|
-
tslib_1.__metadata("design:type", Function),
|
|
31
|
-
tslib_1.__metadata("design:paramtypes", [Object, Object, Object]),
|
|
32
|
-
tslib_1.__metadata("design:returntype", Promise)
|
|
33
|
-
], ZoomWebhookController.prototype, "handleZoomWebhook", null);
|
|
34
|
-
exports.ZoomWebhookController = ZoomWebhookController = tslib_1.__decorate([
|
|
35
|
-
(0, common_1.Controller)('/webhook/zoom'),
|
|
36
|
-
tslib_1.__metadata("design:paramtypes", [webhook_zoom_service_1.ZoomWebhookService])
|
|
37
|
-
], ZoomWebhookController);
|
|
38
|
-
//# sourceMappingURL=webhook.zoom.controller.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.zoom.controller.js","sourceRoot":"","sources":["../../../../../../../packages/zoom/nestjs/src/lib/webhook/webhook.zoom.controller.ts"],"names":[],"mappings":";;;;AAAA,4CAAyD;AACzD,2CAA4D;AAE5D,iEAA4D;AAGrD,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IACvB,kBAAkB,CAAqB;IAEhD,YAAY,kBAAsC;QAChD,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IAC/C,CAAC;IAGK,AAAN,KAAK,CAAC,iBAAiB,CAAQ,GAAa,EAAS,GAAY,EAAa,OAAsB;QAClG,MAAM,EAAE,KAAK,EAAE,uBAAuB,EAAE,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAExG,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,kCAAkC;QAEpE,IAAI,KAAK,IAAI,uBAAuB,EAAE,CAAC;YACrC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;CACF,CAAA;AAnBY,sDAAqB;AAQ1B;IADL,IAAA,aAAI,GAAE;IACkB,mBAAA,IAAA,YAAG,GAAE,CAAA;IAAiB,mBAAA,IAAA,YAAG,GAAE,CAAA;IAAgB,mBAAA,IAAA,gBAAO,GAAE,CAAA;;;;8DAU5E;gCAlBU,qBAAqB;IADjC,IAAA,mBAAU,EAAC,eAAe,CAAC;6CAIM,yCAAkB;GAHvC,qBAAqB,CAmBjC"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.zoomEventHandlerConfigurerFactory = exports.zoomEventHandlerFactory = void 0;
|
|
4
|
-
exports.zoomWebhookEvent = zoomWebhookEvent;
|
|
5
|
-
const util_1 = require("@dereekb/util");
|
|
6
|
-
const webhook_zoom_type_meeting_1 = require("./webhook.zoom.type.meeting");
|
|
7
|
-
/**
|
|
8
|
-
* Creates a ZoomWebhookEvent and treats the data as the input type.
|
|
9
|
-
*
|
|
10
|
-
* @param event
|
|
11
|
-
* @returns
|
|
12
|
-
*/
|
|
13
|
-
function zoomWebhookEvent(event) {
|
|
14
|
-
return {
|
|
15
|
-
event: event.event,
|
|
16
|
-
event_ts: event.event_ts,
|
|
17
|
-
payload: event.payload
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
exports.zoomEventHandlerFactory = (0, util_1.handlerFactory)((x) => x.event);
|
|
21
|
-
exports.zoomEventHandlerConfigurerFactory = (0, util_1.handlerConfigurerFactory)({
|
|
22
|
-
configurerForAccessor: (accessor) => {
|
|
23
|
-
// eslint-disable-next-line
|
|
24
|
-
const fnWithKey = (0, util_1.handlerMappedSetFunctionFactory)(accessor, zoomWebhookEvent);
|
|
25
|
-
const configurer = {
|
|
26
|
-
...accessor,
|
|
27
|
-
// Meetings
|
|
28
|
-
handleMeetingCreated: fnWithKey(webhook_zoom_type_meeting_1.ZOOM_WEBHOOK_MEETING_CREATED_EVENT_TYPE),
|
|
29
|
-
handleMeetingUpdated: fnWithKey(webhook_zoom_type_meeting_1.ZOOM_WEBHOOK_MEETING_UPDATED_EVENT_TYPE),
|
|
30
|
-
handleMeetingDeleted: fnWithKey(webhook_zoom_type_meeting_1.ZOOM_WEBHOOK_MEETING_DELETED_EVENT_TYPE),
|
|
31
|
-
handleMeetingStarted: fnWithKey(webhook_zoom_type_meeting_1.ZOOM_WEBHOOK_MEETING_STARTED_EVENT_TYPE),
|
|
32
|
-
handleMeetingEnded: fnWithKey(webhook_zoom_type_meeting_1.ZOOM_WEBHOOK_MEETING_ENDED_EVENT_TYPE),
|
|
33
|
-
handleMeetingPermanentlyDeleted: fnWithKey(webhook_zoom_type_meeting_1.ZOOM_WEBHOOK_MEETING_PERMANENTLY_DELETED_EVENT_TYPE)
|
|
34
|
-
};
|
|
35
|
-
return configurer;
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
//# sourceMappingURL=webhook.zoom.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.zoom.js","sourceRoot":"","sources":["../../../../../../../packages/zoom/nestjs/src/lib/webhook/webhook.zoom.ts"],"names":[],"mappings":";;;AAwBA,4CAMC;AA9BD,wCAAiL;AAGjL,2EAaqC;AAErC;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAI,KAA8B;IAChE,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAuB;KACvC,CAAC;AACJ,CAAC;AAIY,QAAA,uBAAuB,GAAG,IAAA,qBAAc,EAA0B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAclF,QAAA,iCAAiC,GAAG,IAAA,+BAAwB,EAAsD;IAC7H,qBAAqB,EAAE,CAAC,QAA4E,EAAE,EAAE;QACtG,2BAA2B;QAC3B,MAAM,SAAS,GAAG,IAAA,sCAA+B,EAA6B,QAAQ,EAAE,gBAAgB,CAAC,CAAC;QAE1G,MAAM,UAAU,GAA+B;YAC7C,GAAG,QAAQ;YACX,WAAW;YACX,oBAAoB,EAAE,SAAS,CAAC,mEAAuC,CAAC;YACxE,oBAAoB,EAAE,SAAS,CAAC,mEAAuC,CAAC;YACxE,oBAAoB,EAAE,SAAS,CAAC,mEAAuC,CAAC;YACxE,oBAAoB,EAAE,SAAS,CAAC,mEAAuC,CAAC;YACxE,kBAAkB,EAAE,SAAS,CAAC,iEAAqC,CAAC;YACpE,+BAA+B,EAAE,SAAS,CAAC,+EAAmD,CAAC;SAChG,CAAC;QAEF,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ZoomWebhookModule = void 0;
|
|
4
|
-
exports.zoomWebhookServiceConfigFactory = zoomWebhookServiceConfigFactory;
|
|
5
|
-
const tslib_1 = require("tslib");
|
|
6
|
-
const webhook_zoom_controller_1 = require("./webhook.zoom.controller");
|
|
7
|
-
const common_1 = require("@nestjs/common");
|
|
8
|
-
const webhook_zoom_service_1 = require("./webhook.zoom.service");
|
|
9
|
-
const config_1 = require("@nestjs/config");
|
|
10
|
-
const webhook_zoom_config_1 = require("./webhook.zoom.config");
|
|
11
|
-
function zoomWebhookServiceConfigFactory(configService) {
|
|
12
|
-
const config = {
|
|
13
|
-
webhookConfig: {
|
|
14
|
-
zoomSecretToken: configService.get(webhook_zoom_config_1.ZOOM_SECRET_TOKEN_ENV_VAR)
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
webhook_zoom_config_1.ZoomWebhookServiceConfig.assertValidConfig(config);
|
|
18
|
-
return config;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Configures webhooks for the service.
|
|
22
|
-
*/
|
|
23
|
-
let ZoomWebhookModule = class ZoomWebhookModule {
|
|
24
|
-
};
|
|
25
|
-
exports.ZoomWebhookModule = ZoomWebhookModule;
|
|
26
|
-
exports.ZoomWebhookModule = ZoomWebhookModule = tslib_1.__decorate([
|
|
27
|
-
(0, common_1.Module)({
|
|
28
|
-
imports: [config_1.ConfigModule],
|
|
29
|
-
controllers: [webhook_zoom_controller_1.ZoomWebhookController],
|
|
30
|
-
exports: [webhook_zoom_service_1.ZoomWebhookService],
|
|
31
|
-
providers: [
|
|
32
|
-
{
|
|
33
|
-
provide: webhook_zoom_config_1.ZoomWebhookServiceConfig,
|
|
34
|
-
inject: [config_1.ConfigService],
|
|
35
|
-
useFactory: zoomWebhookServiceConfigFactory
|
|
36
|
-
},
|
|
37
|
-
webhook_zoom_service_1.ZoomWebhookService
|
|
38
|
-
]
|
|
39
|
-
})
|
|
40
|
-
], ZoomWebhookModule);
|
|
41
|
-
//# sourceMappingURL=webhook.zoom.module.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.zoom.module.js","sourceRoot":"","sources":["../../../../../../../packages/zoom/nestjs/src/lib/webhook/webhook.zoom.module.ts"],"names":[],"mappings":";;;AAMA,0EASC;;AAfD,uEAAkE;AAClE,2CAAwC;AACxC,iEAA4D;AAC5D,2CAA6D;AAC7D,+DAA4F;AAE5F,SAAgB,+BAA+B,CAAC,aAA4B;IAC1E,MAAM,MAAM,GAA6B;QACvC,aAAa,EAAE;YACb,eAAe,EAAE,aAAa,CAAC,GAAG,CAAS,+CAAyB,CAAW;SAChF;KACF,CAAC;IAEF,8CAAwB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AAcI,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAAG,CAAA;AAApB,8CAAiB;4BAAjB,iBAAiB;IAb7B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,qBAAY,CAAC;QACvB,WAAW,EAAE,CAAC,+CAAqB,CAAC;QACpC,OAAO,EAAE,CAAC,yCAAkB,CAAC;QAC7B,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,8CAAwB;gBACjC,MAAM,EAAE,CAAC,sBAAa,CAAC;gBACvB,UAAU,EAAE,+BAA+B;aAC5C;YACD,yCAAkB;SACnB;KACF,CAAC;GACW,iBAAiB,CAAG"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ZoomWebhookService = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const common_1 = require("@nestjs/common");
|
|
6
|
-
const webhook_zoom_1 = require("./webhook.zoom");
|
|
7
|
-
const webhook_zoom_config_1 = require("./webhook.zoom.config");
|
|
8
|
-
const webhook_zoom_verify_1 = require("./webhook.zoom.verify");
|
|
9
|
-
const webhook_zoom_type_validate_1 = require("./webhook.zoom.type.validate");
|
|
10
|
-
const webhook_zoom_validate_1 = require("./webhook.zoom.validate");
|
|
11
|
-
/**
|
|
12
|
-
* Service that makes system changes based on Zoom webhook events.
|
|
13
|
-
*/
|
|
14
|
-
let ZoomWebhookService = class ZoomWebhookService {
|
|
15
|
-
logger = new common_1.Logger('ZoomWebhookService');
|
|
16
|
-
_verifier;
|
|
17
|
-
_validator;
|
|
18
|
-
handler = (0, webhook_zoom_1.zoomEventHandlerFactory)();
|
|
19
|
-
configure = (0, webhook_zoom_1.zoomEventHandlerConfigurerFactory)(this.handler);
|
|
20
|
-
constructor(config) {
|
|
21
|
-
this._verifier = (0, webhook_zoom_verify_1.zoomWebhookEventVerifier)(config.webhookConfig.zoomSecretToken);
|
|
22
|
-
this._validator = (0, webhook_zoom_validate_1.zoomWebhookEventValidationFunction)(config.webhookConfig.zoomSecretToken);
|
|
23
|
-
}
|
|
24
|
-
async updateForWebhook(req, rawBody) {
|
|
25
|
-
const { valid, event } = this._verifier(req, rawBody);
|
|
26
|
-
let handled = false;
|
|
27
|
-
let validationEventResponse;
|
|
28
|
-
if (!valid) {
|
|
29
|
-
this.logger.warn('Received invalid zoom event: ', event);
|
|
30
|
-
}
|
|
31
|
-
else if (event.event === webhook_zoom_type_validate_1.ZOOM_WEBHOOK_URL_VALIDATION_EVENT_TYPE) {
|
|
32
|
-
validationEventResponse = this._validator(event);
|
|
33
|
-
handled = true;
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
handled = await this.updateForZoomEvent(event);
|
|
37
|
-
}
|
|
38
|
-
const result = {
|
|
39
|
-
valid,
|
|
40
|
-
handled,
|
|
41
|
-
event,
|
|
42
|
-
validationEventResponse
|
|
43
|
-
};
|
|
44
|
-
return result;
|
|
45
|
-
}
|
|
46
|
-
async updateForZoomEvent(event) {
|
|
47
|
-
const handled = await this.handler(event);
|
|
48
|
-
if (!handled) {
|
|
49
|
-
this.logger.warn('Received unexpected/unhandled zoom event: ', event);
|
|
50
|
-
}
|
|
51
|
-
return handled;
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
exports.ZoomWebhookService = ZoomWebhookService;
|
|
55
|
-
exports.ZoomWebhookService = ZoomWebhookService = tslib_1.__decorate([
|
|
56
|
-
(0, common_1.Injectable)(),
|
|
57
|
-
tslib_1.__param(0, (0, common_1.Inject)(webhook_zoom_config_1.ZoomWebhookServiceConfig)),
|
|
58
|
-
tslib_1.__metadata("design:paramtypes", [webhook_zoom_config_1.ZoomWebhookServiceConfig])
|
|
59
|
-
], ZoomWebhookService);
|
|
60
|
-
//# sourceMappingURL=webhook.zoom.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.zoom.service.js","sourceRoot":"","sources":["../../../../../../../packages/zoom/nestjs/src/lib/webhook/webhook.zoom.service.ts"],"names":[],"mappings":";;;;AAAA,2CAA4D;AAE5D,iDAA4F;AAE5F,+DAAiE;AACjE,+DAA2F;AAE3F,6EAAqH;AACrH,mEAAgJ;AAShJ;;GAEG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IACZ,MAAM,GAAG,IAAI,eAAM,CAAC,oBAAoB,CAAC,CAAC;IAE1C,SAAS,CAA2B;IACpC,UAAU,CAAqC;IAEvD,OAAO,GAAqC,IAAA,sCAAuB,GAAE,CAAC;IACtE,SAAS,GAAG,IAAA,gDAAiC,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAErE,YAA8C,MAAgC;QAC5E,IAAI,CAAC,SAAS,GAAG,IAAA,8CAAwB,EAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QAChF,IAAI,CAAC,UAAU,GAAG,IAAA,0DAAkC,EAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;IAC7F,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,GAAY,EAAE,OAAe;QACzD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,OAAO,GAAY,KAAK,CAAC;QAC7B,IAAI,uBAAkE,CAAC;QAEvE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,KAAK,mEAAsC,EAAE,CAAC;YAClE,uBAAuB,GAAG,IAAI,CAAC,UAAU,CAAC,KAAsC,CAAC,CAAC;YAClF,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,MAAM,GAA6B;YACvC,KAAK;YACL,OAAO;YACP,KAAK;YACL,uBAAuB;SACxB,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,KAA8B;QACrD,MAAM,OAAO,GAAY,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEnD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAA;AA/CY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;IAUE,mBAAA,IAAA,eAAM,EAAC,8CAAwB,CAAC,CAAA;6CAAS,8CAAwB;GATnE,kBAAkB,CA+C9B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.zoom.type.common.js","sourceRoot":"","sources":["../../../../../../../packages/zoom/nestjs/src/lib/webhook/webhook.zoom.type.common.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.zoom.type.js","sourceRoot":"","sources":["../../../../../../../packages/zoom/nestjs/src/lib/webhook/webhook.zoom.type.ts"],"names":[],"mappings":""}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ZOOM_WEBHOOK_MEETING_PERMANENTLY_DELETED_EVENT_TYPE = exports.ZOOM_WEBHOOK_MEETING_ENDED_EVENT_TYPE = exports.ZOOM_WEBHOOK_MEETING_STARTED_EVENT_TYPE = exports.ZOOM_WEBHOOK_MEETING_DELETED_EVENT_TYPE = exports.ZOOM_WEBHOOK_MEETING_UPDATED_EVENT_TYPE = exports.ZOOM_WEBHOOK_MEETING_CREATED_EVENT_TYPE = exports.ZOOM_WEBHOOK_MEETING_ALERT_EVENT_TYPE = void 0;
|
|
4
|
-
// MARK: Meeting Alert
|
|
5
|
-
exports.ZOOM_WEBHOOK_MEETING_ALERT_EVENT_TYPE = 'meeting.alert';
|
|
6
|
-
// MARK: Meeting Created
|
|
7
|
-
exports.ZOOM_WEBHOOK_MEETING_CREATED_EVENT_TYPE = 'meeting.created';
|
|
8
|
-
// MARK: Meeting Updated
|
|
9
|
-
exports.ZOOM_WEBHOOK_MEETING_UPDATED_EVENT_TYPE = 'meeting.updated';
|
|
10
|
-
// MARK: Meeting Deleted
|
|
11
|
-
exports.ZOOM_WEBHOOK_MEETING_DELETED_EVENT_TYPE = 'meeting.deleted';
|
|
12
|
-
// MARK: Meeting Started
|
|
13
|
-
exports.ZOOM_WEBHOOK_MEETING_STARTED_EVENT_TYPE = 'meeting.started';
|
|
14
|
-
// MARK: Meeting Ended
|
|
15
|
-
exports.ZOOM_WEBHOOK_MEETING_ENDED_EVENT_TYPE = 'meeting.ended';
|
|
16
|
-
// MARK: Meeting Permanently Deleted
|
|
17
|
-
exports.ZOOM_WEBHOOK_MEETING_PERMANENTLY_DELETED_EVENT_TYPE = 'meeting.permanently_deleted';
|
|
18
|
-
//# sourceMappingURL=webhook.zoom.type.meeting.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.zoom.type.meeting.js","sourceRoot":"","sources":["../../../../../../../packages/zoom/nestjs/src/lib/webhook/webhook.zoom.type.meeting.ts"],"names":[],"mappings":";;;AAOA,sBAAsB;AACT,QAAA,qCAAqC,GAAG,eAAe,CAAC;AAQrE,wBAAwB;AACX,QAAA,uCAAuC,GAAG,iBAAiB,CAAC;AAMzE,wBAAwB;AACX,QAAA,uCAAuC,GAAG,iBAAiB,CAAC;AAMzE,wBAAwB;AACX,QAAA,uCAAuC,GAAG,iBAAiB,CAAC;AAMzE,wBAAwB;AACX,QAAA,uCAAuC,GAAG,iBAAiB,CAAC;AAMzE,sBAAsB;AACT,QAAA,qCAAqC,GAAG,eAAe,CAAC;AAMrE,oCAAoC;AACvB,QAAA,mDAAmD,GAAG,6BAA6B,CAAC"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ZOOM_WEBHOOK_URL_VALIDATION_EVENT_TYPE = void 0;
|
|
4
|
-
exports.ZOOM_WEBHOOK_URL_VALIDATION_EVENT_TYPE = 'endpoint.url_validation';
|
|
5
|
-
//# sourceMappingURL=webhook.zoom.type.validate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.zoom.type.validate.js","sourceRoot":"","sources":["../../../../../../../packages/zoom/nestjs/src/lib/webhook/webhook.zoom.type.validate.ts"],"names":[],"mappings":";;;AAEa,QAAA,sCAAsC,GAAG,yBAAyB,CAAC"}
|