zoom-api-js 0.1.1 → 0.1.2
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-build.log +10 -10
- package/CHANGELOG.md +6 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +10 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> zoom-api-js@0.1.
|
|
2
|
+
> zoom-api-js@0.1.2 build /home/runner/work/openapi-clients/openapi-clients/packages/zoom-api-js
|
|
3
3
|
> rimraf dist && tsup
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: src/index.ts
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
[34mCLI[39m Cleaning output folder
|
|
11
11
|
[34mCJS[39m Build start
|
|
12
12
|
[34mESM[39m Build start
|
|
13
|
-
[32mCJS[39m [1mdist/index.js [22m[
|
|
14
|
-
[32mCJS[39m [1mdist/index.js.map [22m[32m8.
|
|
15
|
-
[32mCJS[39m ⚡️ Build success in
|
|
16
|
-
[32mESM[39m [1mdist/index.mjs [22m[
|
|
17
|
-
[32mESM[39m [1mdist/index.mjs.map [22m[32m8.
|
|
18
|
-
[32mESM[39m ⚡️ Build success in
|
|
13
|
+
[32mCJS[39m [1mdist/index.js [22m[32m5.06 KB[39m
|
|
14
|
+
[32mCJS[39m [1mdist/index.js.map [22m[32m8.56 KB[39m
|
|
15
|
+
[32mCJS[39m ⚡️ Build success in 54ms
|
|
16
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m4.07 KB[39m
|
|
17
|
+
[32mESM[39m [1mdist/index.mjs.map [22m[32m8.33 KB[39m
|
|
18
|
+
[32mESM[39m ⚡️ Build success in 55ms
|
|
19
19
|
[34mDTS[39m Build start
|
|
20
|
-
[32mDTS[39m ⚡️ Build success in
|
|
21
|
-
[32mDTS[39m [1mdist/index.d.ts [22m[32m480.
|
|
22
|
-
[32mDTS[39m [1mdist/index.d.mts [22m[32m480.
|
|
20
|
+
[32mDTS[39m ⚡️ Build success in 9607ms
|
|
21
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m480.45 KB[39m
|
|
22
|
+
[32mDTS[39m [1mdist/index.d.mts [22m[32m480.45 KB[39m
|
package/CHANGELOG.md
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
type RequestInit = {
|
|
2
|
-
body?: string | FormData | undefined;
|
|
2
|
+
body?: string | FormData | URLSearchParams | undefined;
|
|
3
3
|
headers?: Record<string, string> | undefined;
|
|
4
4
|
method?: string | undefined;
|
|
5
5
|
signal?: any | undefined;
|
|
@@ -6317,7 +6317,7 @@ type RefreshTokenOptions = {
|
|
|
6317
6317
|
};
|
|
6318
6318
|
type RefreshTokenResult = {
|
|
6319
6319
|
access_token: string;
|
|
6320
|
-
expires_in:
|
|
6320
|
+
expires_in: number;
|
|
6321
6321
|
refresh_token: string;
|
|
6322
6322
|
};
|
|
6323
6323
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
type RequestInit = {
|
|
2
|
-
body?: string | FormData | undefined;
|
|
2
|
+
body?: string | FormData | URLSearchParams | undefined;
|
|
3
3
|
headers?: Record<string, string> | undefined;
|
|
4
4
|
method?: string | undefined;
|
|
5
5
|
signal?: any | undefined;
|
|
@@ -6317,7 +6317,7 @@ type RefreshTokenOptions = {
|
|
|
6317
6317
|
};
|
|
6318
6318
|
type RefreshTokenResult = {
|
|
6319
6319
|
access_token: string;
|
|
6320
|
-
expires_in:
|
|
6320
|
+
expires_in: number;
|
|
6321
6321
|
refresh_token: string;
|
|
6322
6322
|
};
|
|
6323
6323
|
|
package/dist/index.js
CHANGED
|
@@ -117,11 +117,8 @@ var ZoomApi = class {
|
|
|
117
117
|
clientId,
|
|
118
118
|
clientSecret
|
|
119
119
|
}) => {
|
|
120
|
-
const
|
|
121
|
-
url: "https://zoom.us/oauth/token",
|
|
120
|
+
const response = await __privateGet(this, _fetch).call(this, "https://zoom.us/oauth/token", {
|
|
122
121
|
method: "POST",
|
|
123
|
-
token: null,
|
|
124
|
-
fetchImpl: __privateGet(this, _fetch),
|
|
125
122
|
body: new URLSearchParams({
|
|
126
123
|
grant_type: "refresh_token",
|
|
127
124
|
refresh_token: refreshToken,
|
|
@@ -129,7 +126,15 @@ var ZoomApi = class {
|
|
|
129
126
|
client_secret: clientSecret
|
|
130
127
|
})
|
|
131
128
|
});
|
|
132
|
-
|
|
129
|
+
if (!response.ok) {
|
|
130
|
+
throw new Error("Failed to refresh Zoom token");
|
|
131
|
+
}
|
|
132
|
+
const result = await response.json();
|
|
133
|
+
return {
|
|
134
|
+
access_token: result.access_token,
|
|
135
|
+
expires_in: result.expires_in,
|
|
136
|
+
refresh_token: result.refresh_token
|
|
137
|
+
};
|
|
133
138
|
}
|
|
134
139
|
};
|
|
135
140
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +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 get auth() {\n return {\n refreshToken: async ({\n refreshToken,\n clientId,\n clientSecret\n }: RefreshTokenOptions): Promise<RefreshTokenResult> => {\n const
|
|
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 get auth() {\n return {\n refreshToken: async ({\n refreshToken,\n clientId,\n clientSecret\n }: RefreshTokenOptions): Promise<RefreshTokenResult> => {\n const response = await this.#fetch(\"https://zoom.us/oauth/token\", {\n method: \"POST\",\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token: refreshToken,\n client_id: clientId,\n client_secret: clientSecret\n })\n });\n\n if (!response.ok) {\n throw new Error(\"Failed to refresh Zoom token\");\n }\n\n const result = await response.json();\n\n return {\n access_token: result.access_token,\n expires_in: result.expires_in,\n refresh_token: result.refresh_token\n }\n }\n };\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\ntype RefreshTokenOptions = {\n refreshToken: string;\n clientId: string;\n clientSecret: string;\n};\n\ntype RefreshTokenResult = {\n access_token: string;\n expires_in: number;\n refresh_token: string;\n}\n"],"mappings":"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","names":["fetch","fetch"]}
|
package/dist/index.mjs
CHANGED
|
@@ -92,11 +92,8 @@ var ZoomApi = class {
|
|
|
92
92
|
clientId,
|
|
93
93
|
clientSecret
|
|
94
94
|
}) => {
|
|
95
|
-
const
|
|
96
|
-
url: "https://zoom.us/oauth/token",
|
|
95
|
+
const response = await __privateGet(this, _fetch).call(this, "https://zoom.us/oauth/token", {
|
|
97
96
|
method: "POST",
|
|
98
|
-
token: null,
|
|
99
|
-
fetchImpl: __privateGet(this, _fetch),
|
|
100
97
|
body: new URLSearchParams({
|
|
101
98
|
grant_type: "refresh_token",
|
|
102
99
|
refresh_token: refreshToken,
|
|
@@ -104,7 +101,15 @@ var ZoomApi = class {
|
|
|
104
101
|
client_secret: clientSecret
|
|
105
102
|
})
|
|
106
103
|
});
|
|
107
|
-
|
|
104
|
+
if (!response.ok) {
|
|
105
|
+
throw new Error("Failed to refresh Zoom token");
|
|
106
|
+
}
|
|
107
|
+
const result = await response.json();
|
|
108
|
+
return {
|
|
109
|
+
access_token: result.access_token,
|
|
110
|
+
expires_in: result.expires_in,
|
|
111
|
+
refresh_token: result.refresh_token
|
|
112
|
+
};
|
|
108
113
|
}
|
|
109
114
|
};
|
|
110
115
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +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 get auth() {\n return {\n refreshToken: async ({\n refreshToken,\n clientId,\n clientSecret\n }: RefreshTokenOptions): Promise<RefreshTokenResult> => {\n const
|
|
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 get auth() {\n return {\n refreshToken: async ({\n refreshToken,\n clientId,\n clientSecret\n }: RefreshTokenOptions): Promise<RefreshTokenResult> => {\n const response = await this.#fetch(\"https://zoom.us/oauth/token\", {\n method: \"POST\",\n body: new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token: refreshToken,\n client_id: clientId,\n client_secret: clientSecret\n })\n });\n\n if (!response.ok) {\n throw new Error(\"Failed to refresh Zoom token\");\n }\n\n const result = await response.json();\n\n return {\n access_token: result.access_token,\n expires_in: result.expires_in,\n refresh_token: result.refresh_token\n }\n }\n };\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\ntype RefreshTokenOptions = {\n refreshToken: string;\n clientId: string;\n clientSecret: string;\n};\n\ntype RefreshTokenResult = {\n access_token: string;\n expires_in: number;\n refresh_token: string;\n}\n"],"mappings":"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","names":["fetch","fetch"]}
|