zoom-api-js 0.0.1
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/.turbo/turbo-generate.log +8 -0
- package/README.md +10 -0
- package/dist/index.d.mts +7187 -0
- package/dist/index.d.ts +7187 -0
- package/dist/index.js +126 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +100 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +42 -0
- package/specs/meeting.yml +17122 -0
- package/tsconfig.json +19 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __typeError = (msg) => {
|
|
7
|
+
throw TypeError(msg);
|
|
8
|
+
};
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
22
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
23
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
24
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
25
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
26
|
+
|
|
27
|
+
// src/index.ts
|
|
28
|
+
var src_exports = {};
|
|
29
|
+
__export(src_exports, {
|
|
30
|
+
ZoomApi: () => ZoomApi
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(src_exports);
|
|
33
|
+
|
|
34
|
+
// src/utils/lang.ts
|
|
35
|
+
function notEmpty(value) {
|
|
36
|
+
return value !== null && value !== void 0;
|
|
37
|
+
}
|
|
38
|
+
function compactObject(obj) {
|
|
39
|
+
return Object.fromEntries(Object.entries(obj).filter(([, value]) => notEmpty(value)));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// src/meeting/fetcher.ts
|
|
43
|
+
var baseUrl = "https://api.zoom.us/v2";
|
|
44
|
+
async function fetch2({
|
|
45
|
+
url,
|
|
46
|
+
method,
|
|
47
|
+
body,
|
|
48
|
+
headers,
|
|
49
|
+
pathParams,
|
|
50
|
+
queryParams,
|
|
51
|
+
signal,
|
|
52
|
+
token,
|
|
53
|
+
fetchImpl
|
|
54
|
+
}) {
|
|
55
|
+
try {
|
|
56
|
+
const requestHeaders = compactObject({
|
|
57
|
+
"Content-Type": "application/json",
|
|
58
|
+
Authorization: token ? `Bearer ${token}` : void 0,
|
|
59
|
+
...headers
|
|
60
|
+
});
|
|
61
|
+
if (requestHeaders["Content-Type"]?.toLowerCase().includes("multipart/form-data")) {
|
|
62
|
+
delete requestHeaders["Content-Type"];
|
|
63
|
+
}
|
|
64
|
+
const payload = body instanceof FormData ? body : requestHeaders["Content-Type"] === "application/json" ? JSON.stringify(body) : body;
|
|
65
|
+
const response = await fetchImpl(`${baseUrl}${resolveUrl(url, queryParams, pathParams)}`, {
|
|
66
|
+
signal,
|
|
67
|
+
method: method.toUpperCase(),
|
|
68
|
+
body: payload,
|
|
69
|
+
headers: requestHeaders
|
|
70
|
+
});
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
let error;
|
|
73
|
+
try {
|
|
74
|
+
error = await response.json();
|
|
75
|
+
} catch (e) {
|
|
76
|
+
error = {
|
|
77
|
+
status: "unknown",
|
|
78
|
+
payload: e instanceof Error ? `Unexpected error (${e.message})` : "Unexpected error"
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
if (response.headers?.get("content-type")?.includes("json")) {
|
|
84
|
+
return await response.json();
|
|
85
|
+
} else {
|
|
86
|
+
return await response.text();
|
|
87
|
+
}
|
|
88
|
+
} catch (e) {
|
|
89
|
+
let errorObject = {
|
|
90
|
+
name: "unknown",
|
|
91
|
+
message: e instanceof Error ? `Network error (${e.message})` : "Network error",
|
|
92
|
+
stack: e
|
|
93
|
+
};
|
|
94
|
+
throw errorObject;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
var resolveUrl = (url, queryParams = {}, pathParams = {}) => {
|
|
98
|
+
let query = new URLSearchParams(queryParams).toString();
|
|
99
|
+
if (query) query = `?${query}`;
|
|
100
|
+
return url.replace(/\{\w*\}/g, (key) => pathParams[key.slice(1, -1)] ?? "") + query;
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
// src/client.ts
|
|
104
|
+
var _token, _fetch;
|
|
105
|
+
var ZoomApi = class {
|
|
106
|
+
constructor(options) {
|
|
107
|
+
__privateAdd(this, _token);
|
|
108
|
+
__privateAdd(this, _fetch);
|
|
109
|
+
__privateSet(this, _token, options.token);
|
|
110
|
+
__privateSet(this, _fetch, options.fetch || fetch);
|
|
111
|
+
if (!__privateGet(this, _fetch)) throw new Error("Fetch is required");
|
|
112
|
+
}
|
|
113
|
+
async request(endpoint, params) {
|
|
114
|
+
const [method = "", url = ""] = endpoint.split(" ");
|
|
115
|
+
const extraParams = params || {};
|
|
116
|
+
const result = await fetch2({ ...extraParams, method, url, token: __privateGet(this, _token), fetchImpl: __privateGet(this, _fetch) });
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
_token = new WeakMap();
|
|
121
|
+
_fetch = new WeakMap();
|
|
122
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
123
|
+
0 && (module.exports = {
|
|
124
|
+
ZoomApi
|
|
125
|
+
});
|
|
126
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/lang.ts","../src/meeting/fetcher.ts","../src/client.ts"],"sourcesContent":["export * from \"./client\";\n\nimport type * as Schemas from \"./api/schemas\";\nimport type * as Components from \"./api/components\";\nexport { Schemas, Components };\n","function notEmpty<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nexport function compactObject<T>(obj: Record<string, T | null | undefined>): Record<string, T> {\n return Object.fromEntries(Object.entries(obj).filter(([, value]) => notEmpty(value))) as Record<string, T>;\n}\n","import { FetchImpl } from '../utils/fetch';\nimport { compactObject } from '../utils/lang';\n\nexport type FetcherExtraProps = {\n token: string | null;\n fetchImpl: FetchImpl;\n};\n\nconst baseUrl = 'https://api.zoom.us/v2';\n\nexport type ErrorWrapper<TError> = TError | { status: 'unknown'; payload: string };\n\nexport type FetcherOptions<TBody, THeaders, TQueryParams, TPathParams> = {\n url: string;\n method: string;\n body?: TBody | undefined;\n headers?: THeaders | undefined;\n queryParams?: TQueryParams | undefined;\n pathParams?: TPathParams | undefined;\n signal?: AbortSignal | undefined;\n} & FetcherExtraProps;\n\nexport async function fetch<\n TData,\n TError,\n TBody extends {} | FormData | undefined | null,\n THeaders extends {},\n TQueryParams extends {},\n TPathParams extends {}\n>({\n url,\n method,\n body,\n headers,\n pathParams,\n queryParams,\n signal,\n token,\n fetchImpl\n}: FetcherOptions<TBody, THeaders, TQueryParams, TPathParams>): Promise<TData> {\n try {\n const requestHeaders: HeadersInit = compactObject({\n 'Content-Type': 'application/json',\n Authorization: token ? `Bearer ${token}` : undefined,\n ...headers\n });\n\n /**\n * As the fetch API is being used, when multipart/form-data is specified\n * the Content-Type header must be deleted so that the browser can set\n * the correct boundary.\n * https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects#sending_files_using_a_formdata_object\n */\n if (requestHeaders['Content-Type']?.toLowerCase().includes('multipart/form-data')) {\n delete requestHeaders['Content-Type'];\n }\n\n const payload =\n body instanceof FormData\n ? body\n : requestHeaders['Content-Type'] === 'application/json'\n ? JSON.stringify(body)\n : (body as string);\n\n const response = await fetchImpl(`${baseUrl}${resolveUrl(url, queryParams, pathParams)}`, {\n signal,\n method: method.toUpperCase(),\n body: payload,\n headers: requestHeaders\n });\n\n if (!response.ok) {\n let error: ErrorWrapper<TError>;\n try {\n error = await response.json();\n } catch (e) {\n error = {\n status: 'unknown' as const,\n payload: e instanceof Error ? `Unexpected error (${e.message})` : 'Unexpected error'\n };\n }\n\n throw error;\n }\n\n if (response.headers?.get('content-type')?.includes('json')) {\n return await response.json();\n } else {\n // if it is not a json response, assume it is a blob and cast it to TData\n return (await response.text()) as unknown as TData;\n }\n } catch (e) {\n let errorObject: Error = {\n name: 'unknown' as const,\n message: e instanceof Error ? `Network error (${e.message})` : 'Network error',\n stack: e as string\n };\n throw errorObject;\n }\n}\n\nconst resolveUrl = (url: string, queryParams: Record<string, string> = {}, pathParams: Record<string, string> = {}) => {\n let query = new URLSearchParams(queryParams).toString();\n if (query) query = `?${query}`;\n return url.replace(/\\{\\w*\\}/g, (key) => pathParams[key.slice(1, -1)] ?? '') + query;\n};\n","import { operationsByPath as meetingOperationsByPath } from './meeting/extra';\nimport { FetcherExtraProps, fetch as zoomFetch } from './meeting/fetcher';\nimport { FetchImpl } from './utils/fetch';\n\nexport interface ZoomApiOptions {\n token: string | null;\n fetch?: FetchImpl;\n}\n\ntype MeetingRequestEndpointParams<T extends keyof typeof meetingOperationsByPath> = Omit<\n Parameters<(typeof meetingOperationsByPath)[T]>[0],\n keyof FetcherExtraProps\n>;\n\ntype MeetingRequestEndpointResult<T extends keyof typeof meetingOperationsByPath> = ReturnType<(typeof meetingOperationsByPath)[T]>;\n\nexport class ZoomApi {\n #token: string | null;\n #fetch: FetchImpl;\n\n constructor(options: ZoomApiOptions) {\n this.#token = options.token;\n\n this.#fetch = options.fetch || (fetch as FetchImpl);\n if (!this.#fetch) throw new Error('Fetch is required');\n }\n\n public async request<Endpoint extends keyof typeof meetingOperationsByPath>(\n endpoint: Endpoint,\n params: MeetingRequestEndpointParams<Endpoint>\n ) {\n const [method = '', url = ''] = endpoint.split(' ');\n const extraParams = (params || {}) as Record<string, unknown>;\n\n const result = await zoomFetch({ ...extraParams, method, url, token: this.#token, fetchImpl: this.#fetch });\n return result as MeetingRequestEndpointResult<Endpoint>;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,SAAS,SAAY,OAAyC;AAC5D,SAAO,UAAU,QAAQ,UAAU;AACrC;AAEO,SAAS,cAAiB,KAA8D;AAC7F,SAAO,OAAO,YAAY,OAAO,QAAQ,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,SAAS,KAAK,CAAC,CAAC;AACtF;;;ACEA,IAAM,UAAU;AAchB,eAAsBA,OAOpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA+E;AAC7E,MAAI;AACF,UAAM,iBAA8B,cAAc;AAAA,MAChD,gBAAgB;AAAA,MAChB,eAAe,QAAQ,UAAU,KAAK,KAAK;AAAA,MAC3C,GAAG;AAAA,IACL,CAAC;AAQD,QAAI,eAAe,cAAc,GAAG,YAAY,EAAE,SAAS,qBAAqB,GAAG;AACjF,aAAO,eAAe,cAAc;AAAA,IACtC;AAEA,UAAM,UACJ,gBAAgB,WACZ,OACA,eAAe,cAAc,MAAM,qBACjC,KAAK,UAAU,IAAI,IAClB;AAET,UAAM,WAAW,MAAM,UAAU,GAAG,OAAO,GAAG,WAAW,KAAK,aAAa,UAAU,CAAC,IAAI;AAAA,MACxF;AAAA,MACA,QAAQ,OAAO,YAAY;AAAA,MAC3B,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,UAAI;AACJ,UAAI;AACF,gBAAQ,MAAM,SAAS,KAAK;AAAA,MAC9B,SAAS,GAAG;AACV,gBAAQ;AAAA,UACN,QAAQ;AAAA,UACR,SAAS,aAAa,QAAQ,qBAAqB,EAAE,OAAO,MAAM;AAAA,QACpE;AAAA,MACF;AAEA,YAAM;AAAA,IACR;AAEA,QAAI,SAAS,SAAS,IAAI,cAAc,GAAG,SAAS,MAAM,GAAG;AAC3D,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B,OAAO;AAEL,aAAQ,MAAM,SAAS,KAAK;AAAA,IAC9B;AAAA,EACF,SAAS,GAAG;AACV,QAAI,cAAqB;AAAA,MACvB,MAAM;AAAA,MACN,SAAS,aAAa,QAAQ,kBAAkB,EAAE,OAAO,MAAM;AAAA,MAC/D,OAAO;AAAA,IACT;AACA,UAAM;AAAA,EACR;AACF;AAEA,IAAM,aAAa,CAAC,KAAa,cAAsC,CAAC,GAAG,aAAqC,CAAC,MAAM;AACrH,MAAI,QAAQ,IAAI,gBAAgB,WAAW,EAAE,SAAS;AACtD,MAAI,MAAO,SAAQ,IAAI,KAAK;AAC5B,SAAO,IAAI,QAAQ,YAAY,CAAC,QAAQ,WAAW,IAAI,MAAM,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI;AAChF;;;ACzGA;AAgBO,IAAM,UAAN,MAAc;AAAA,EAInB,YAAY,SAAyB;AAHrC;AACA;AAGE,uBAAK,QAAS,QAAQ;AAEtB,uBAAK,QAAS,QAAQ,SAAU;AAChC,QAAI,CAAC,mBAAK,QAAQ,OAAM,IAAI,MAAM,mBAAmB;AAAA,EACvD;AAAA,EAEA,MAAa,QACX,UACA,QACA;AACA,UAAM,CAAC,SAAS,IAAI,MAAM,EAAE,IAAI,SAAS,MAAM,GAAG;AAClD,UAAM,cAAe,UAAU,CAAC;AAEhC,UAAM,SAAS,MAAMC,OAAU,EAAE,GAAG,aAAa,QAAQ,KAAK,OAAO,mBAAK,SAAQ,WAAW,mBAAK,QAAO,CAAC;AAC1G,WAAO;AAAA,EACT;AACF;AApBE;AACA;","names":["fetch","fetch"]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
var __typeError = (msg) => {
|
|
2
|
+
throw TypeError(msg);
|
|
3
|
+
};
|
|
4
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
5
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
6
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
7
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
8
|
+
|
|
9
|
+
// src/utils/lang.ts
|
|
10
|
+
function notEmpty(value) {
|
|
11
|
+
return value !== null && value !== void 0;
|
|
12
|
+
}
|
|
13
|
+
function compactObject(obj) {
|
|
14
|
+
return Object.fromEntries(Object.entries(obj).filter(([, value]) => notEmpty(value)));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// src/meeting/fetcher.ts
|
|
18
|
+
var baseUrl = "https://api.zoom.us/v2";
|
|
19
|
+
async function fetch2({
|
|
20
|
+
url,
|
|
21
|
+
method,
|
|
22
|
+
body,
|
|
23
|
+
headers,
|
|
24
|
+
pathParams,
|
|
25
|
+
queryParams,
|
|
26
|
+
signal,
|
|
27
|
+
token,
|
|
28
|
+
fetchImpl
|
|
29
|
+
}) {
|
|
30
|
+
try {
|
|
31
|
+
const requestHeaders = compactObject({
|
|
32
|
+
"Content-Type": "application/json",
|
|
33
|
+
Authorization: token ? `Bearer ${token}` : void 0,
|
|
34
|
+
...headers
|
|
35
|
+
});
|
|
36
|
+
if (requestHeaders["Content-Type"]?.toLowerCase().includes("multipart/form-data")) {
|
|
37
|
+
delete requestHeaders["Content-Type"];
|
|
38
|
+
}
|
|
39
|
+
const payload = body instanceof FormData ? body : requestHeaders["Content-Type"] === "application/json" ? JSON.stringify(body) : body;
|
|
40
|
+
const response = await fetchImpl(`${baseUrl}${resolveUrl(url, queryParams, pathParams)}`, {
|
|
41
|
+
signal,
|
|
42
|
+
method: method.toUpperCase(),
|
|
43
|
+
body: payload,
|
|
44
|
+
headers: requestHeaders
|
|
45
|
+
});
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
let error;
|
|
48
|
+
try {
|
|
49
|
+
error = await response.json();
|
|
50
|
+
} catch (e) {
|
|
51
|
+
error = {
|
|
52
|
+
status: "unknown",
|
|
53
|
+
payload: e instanceof Error ? `Unexpected error (${e.message})` : "Unexpected error"
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
if (response.headers?.get("content-type")?.includes("json")) {
|
|
59
|
+
return await response.json();
|
|
60
|
+
} else {
|
|
61
|
+
return await response.text();
|
|
62
|
+
}
|
|
63
|
+
} catch (e) {
|
|
64
|
+
let errorObject = {
|
|
65
|
+
name: "unknown",
|
|
66
|
+
message: e instanceof Error ? `Network error (${e.message})` : "Network error",
|
|
67
|
+
stack: e
|
|
68
|
+
};
|
|
69
|
+
throw errorObject;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
var resolveUrl = (url, queryParams = {}, pathParams = {}) => {
|
|
73
|
+
let query = new URLSearchParams(queryParams).toString();
|
|
74
|
+
if (query) query = `?${query}`;
|
|
75
|
+
return url.replace(/\{\w*\}/g, (key) => pathParams[key.slice(1, -1)] ?? "") + query;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
// src/client.ts
|
|
79
|
+
var _token, _fetch;
|
|
80
|
+
var ZoomApi = class {
|
|
81
|
+
constructor(options) {
|
|
82
|
+
__privateAdd(this, _token);
|
|
83
|
+
__privateAdd(this, _fetch);
|
|
84
|
+
__privateSet(this, _token, options.token);
|
|
85
|
+
__privateSet(this, _fetch, options.fetch || fetch);
|
|
86
|
+
if (!__privateGet(this, _fetch)) throw new Error("Fetch is required");
|
|
87
|
+
}
|
|
88
|
+
async request(endpoint, params) {
|
|
89
|
+
const [method = "", url = ""] = endpoint.split(" ");
|
|
90
|
+
const extraParams = params || {};
|
|
91
|
+
const result = await fetch2({ ...extraParams, method, url, token: __privateGet(this, _token), fetchImpl: __privateGet(this, _fetch) });
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
_token = new WeakMap();
|
|
96
|
+
_fetch = new WeakMap();
|
|
97
|
+
export {
|
|
98
|
+
ZoomApi
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/lang.ts","../src/meeting/fetcher.ts","../src/client.ts"],"sourcesContent":["function notEmpty<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nexport function compactObject<T>(obj: Record<string, T | null | undefined>): Record<string, T> {\n return Object.fromEntries(Object.entries(obj).filter(([, value]) => notEmpty(value))) as Record<string, T>;\n}\n","import { FetchImpl } from '../utils/fetch';\nimport { compactObject } from '../utils/lang';\n\nexport type FetcherExtraProps = {\n token: string | null;\n fetchImpl: FetchImpl;\n};\n\nconst baseUrl = 'https://api.zoom.us/v2';\n\nexport type ErrorWrapper<TError> = TError | { status: 'unknown'; payload: string };\n\nexport type FetcherOptions<TBody, THeaders, TQueryParams, TPathParams> = {\n url: string;\n method: string;\n body?: TBody | undefined;\n headers?: THeaders | undefined;\n queryParams?: TQueryParams | undefined;\n pathParams?: TPathParams | undefined;\n signal?: AbortSignal | undefined;\n} & FetcherExtraProps;\n\nexport async function fetch<\n TData,\n TError,\n TBody extends {} | FormData | undefined | null,\n THeaders extends {},\n TQueryParams extends {},\n TPathParams extends {}\n>({\n url,\n method,\n body,\n headers,\n pathParams,\n queryParams,\n signal,\n token,\n fetchImpl\n}: FetcherOptions<TBody, THeaders, TQueryParams, TPathParams>): Promise<TData> {\n try {\n const requestHeaders: HeadersInit = compactObject({\n 'Content-Type': 'application/json',\n Authorization: token ? `Bearer ${token}` : undefined,\n ...headers\n });\n\n /**\n * As the fetch API is being used, when multipart/form-data is specified\n * the Content-Type header must be deleted so that the browser can set\n * the correct boundary.\n * https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects#sending_files_using_a_formdata_object\n */\n if (requestHeaders['Content-Type']?.toLowerCase().includes('multipart/form-data')) {\n delete requestHeaders['Content-Type'];\n }\n\n const payload =\n body instanceof FormData\n ? body\n : requestHeaders['Content-Type'] === 'application/json'\n ? JSON.stringify(body)\n : (body as string);\n\n const response = await fetchImpl(`${baseUrl}${resolveUrl(url, queryParams, pathParams)}`, {\n signal,\n method: method.toUpperCase(),\n body: payload,\n headers: requestHeaders\n });\n\n if (!response.ok) {\n let error: ErrorWrapper<TError>;\n try {\n error = await response.json();\n } catch (e) {\n error = {\n status: 'unknown' as const,\n payload: e instanceof Error ? `Unexpected error (${e.message})` : 'Unexpected error'\n };\n }\n\n throw error;\n }\n\n if (response.headers?.get('content-type')?.includes('json')) {\n return await response.json();\n } else {\n // if it is not a json response, assume it is a blob and cast it to TData\n return (await response.text()) as unknown as TData;\n }\n } catch (e) {\n let errorObject: Error = {\n name: 'unknown' as const,\n message: e instanceof Error ? `Network error (${e.message})` : 'Network error',\n stack: e as string\n };\n throw errorObject;\n }\n}\n\nconst resolveUrl = (url: string, queryParams: Record<string, string> = {}, pathParams: Record<string, string> = {}) => {\n let query = new URLSearchParams(queryParams).toString();\n if (query) query = `?${query}`;\n return url.replace(/\\{\\w*\\}/g, (key) => pathParams[key.slice(1, -1)] ?? '') + query;\n};\n","import { operationsByPath as meetingOperationsByPath } from './meeting/extra';\nimport { FetcherExtraProps, fetch as zoomFetch } from './meeting/fetcher';\nimport { FetchImpl } from './utils/fetch';\n\nexport interface ZoomApiOptions {\n token: string | null;\n fetch?: FetchImpl;\n}\n\ntype MeetingRequestEndpointParams<T extends keyof typeof meetingOperationsByPath> = Omit<\n Parameters<(typeof meetingOperationsByPath)[T]>[0],\n keyof FetcherExtraProps\n>;\n\ntype MeetingRequestEndpointResult<T extends keyof typeof meetingOperationsByPath> = ReturnType<(typeof meetingOperationsByPath)[T]>;\n\nexport class ZoomApi {\n #token: string | null;\n #fetch: FetchImpl;\n\n constructor(options: ZoomApiOptions) {\n this.#token = options.token;\n\n this.#fetch = options.fetch || (fetch as FetchImpl);\n if (!this.#fetch) throw new Error('Fetch is required');\n }\n\n public async request<Endpoint extends keyof typeof meetingOperationsByPath>(\n endpoint: Endpoint,\n params: MeetingRequestEndpointParams<Endpoint>\n ) {\n const [method = '', url = ''] = endpoint.split(' ');\n const extraParams = (params || {}) as Record<string, unknown>;\n\n const result = await zoomFetch({ ...extraParams, method, url, token: this.#token, fetchImpl: this.#fetch });\n return result as MeetingRequestEndpointResult<Endpoint>;\n }\n}\n"],"mappings":";;;;;;;;;AAAA,SAAS,SAAY,OAAyC;AAC5D,SAAO,UAAU,QAAQ,UAAU;AACrC;AAEO,SAAS,cAAiB,KAA8D;AAC7F,SAAO,OAAO,YAAY,OAAO,QAAQ,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,SAAS,KAAK,CAAC,CAAC;AACtF;;;ACEA,IAAM,UAAU;AAchB,eAAsBA,OAOpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA+E;AAC7E,MAAI;AACF,UAAM,iBAA8B,cAAc;AAAA,MAChD,gBAAgB;AAAA,MAChB,eAAe,QAAQ,UAAU,KAAK,KAAK;AAAA,MAC3C,GAAG;AAAA,IACL,CAAC;AAQD,QAAI,eAAe,cAAc,GAAG,YAAY,EAAE,SAAS,qBAAqB,GAAG;AACjF,aAAO,eAAe,cAAc;AAAA,IACtC;AAEA,UAAM,UACJ,gBAAgB,WACZ,OACA,eAAe,cAAc,MAAM,qBACjC,KAAK,UAAU,IAAI,IAClB;AAET,UAAM,WAAW,MAAM,UAAU,GAAG,OAAO,GAAG,WAAW,KAAK,aAAa,UAAU,CAAC,IAAI;AAAA,MACxF;AAAA,MACA,QAAQ,OAAO,YAAY;AAAA,MAC3B,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,UAAI;AACJ,UAAI;AACF,gBAAQ,MAAM,SAAS,KAAK;AAAA,MAC9B,SAAS,GAAG;AACV,gBAAQ;AAAA,UACN,QAAQ;AAAA,UACR,SAAS,aAAa,QAAQ,qBAAqB,EAAE,OAAO,MAAM;AAAA,QACpE;AAAA,MACF;AAEA,YAAM;AAAA,IACR;AAEA,QAAI,SAAS,SAAS,IAAI,cAAc,GAAG,SAAS,MAAM,GAAG;AAC3D,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B,OAAO;AAEL,aAAQ,MAAM,SAAS,KAAK;AAAA,IAC9B;AAAA,EACF,SAAS,GAAG;AACV,QAAI,cAAqB;AAAA,MACvB,MAAM;AAAA,MACN,SAAS,aAAa,QAAQ,kBAAkB,EAAE,OAAO,MAAM;AAAA,MAC/D,OAAO;AAAA,IACT;AACA,UAAM;AAAA,EACR;AACF;AAEA,IAAM,aAAa,CAAC,KAAa,cAAsC,CAAC,GAAG,aAAqC,CAAC,MAAM;AACrH,MAAI,QAAQ,IAAI,gBAAgB,WAAW,EAAE,SAAS;AACtD,MAAI,MAAO,SAAQ,IAAI,KAAK;AAC5B,SAAO,IAAI,QAAQ,YAAY,CAAC,QAAQ,WAAW,IAAI,MAAM,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI;AAChF;;;ACzGA;AAgBO,IAAM,UAAN,MAAc;AAAA,EAInB,YAAY,SAAyB;AAHrC;AACA;AAGE,uBAAK,QAAS,QAAQ;AAEtB,uBAAK,QAAS,QAAQ,SAAU;AAChC,QAAI,CAAC,mBAAK,QAAQ,OAAM,IAAI,MAAM,mBAAmB;AAAA,EACvD;AAAA,EAEA,MAAa,QACX,UACA,QACA;AACA,UAAM,CAAC,SAAS,IAAI,MAAM,EAAE,IAAI,SAAS,MAAM,GAAG;AAClD,UAAM,cAAe,UAAU,CAAC;AAEhC,UAAM,SAAS,MAAMC,OAAU,EAAE,GAAG,aAAa,QAAQ,KAAK,OAAO,mBAAK,SAAQ,WAAW,mBAAK,QAAO,CAAC;AAC1G,WAAO;AAAA,EACT;AACF;AApBE;AACA;","names":["fetch","fetch"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "zoom-api-js",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Zoom API client for Node.js",
|
|
5
|
+
"author": "SferaDev",
|
|
6
|
+
"license": "ISC",
|
|
7
|
+
"bugs": {
|
|
8
|
+
"url": "https://github.com/SferaDev/openapi-clients/issues"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/SferaDev/openapi-clients#readme",
|
|
11
|
+
"main": "dist/index.js",
|
|
12
|
+
"module": "dist/index.mjs",
|
|
13
|
+
"typings": "dist/index.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
"./package.json": "./package.json",
|
|
16
|
+
".": {
|
|
17
|
+
"import": {
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"default": "./dist/index.mjs"
|
|
20
|
+
},
|
|
21
|
+
"require": {
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"default": "./dist/index.js"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"tsc": "tsc --noEmit",
|
|
29
|
+
"build": "rimraf dist && tsup",
|
|
30
|
+
"generate": "openapi-codegen meeting"
|
|
31
|
+
},
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "git+https://github.com/SferaDev/openapi-clients.git"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"openapi3-ts": "^4.4.0"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"case": "^1.6.3"
|
|
41
|
+
}
|
|
42
|
+
}
|