zoom-api-js 0.1.0 → 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.
@@ -1,5 +1,5 @@
1
1
 
2
- > zoom-api-js@0.1.0 build /home/runner/work/openapi-clients/openapi-clients/packages/zoom-api-js
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
  CLI Building entry: src/index.ts
@@ -10,13 +10,13 @@
10
10
  CLI Cleaning output folder
11
11
  CJS Build start
12
12
  ESM Build start
13
- CJS dist/index.js 4.28 KB
14
- CJS dist/index.js.map 7.04 KB
15
- CJS ⚡️ Build success in 31ms
16
- ESM dist/index.mjs 3.29 KB
17
- ESM dist/index.mjs.map 6.80 KB
18
- ESM ⚡️ Build success in 32ms
13
+ CJS dist/index.js 5.06 KB
14
+ CJS dist/index.js.map 8.56 KB
15
+ CJS ⚡️ Build success in 54ms
16
+ ESM dist/index.mjs 4.07 KB
17
+ ESM dist/index.mjs.map 8.33 KB
18
+ ESM ⚡️ Build success in 55ms
19
19
  DTS Build start
20
- DTS ⚡️ Build success in 9852ms
21
- DTS dist/index.d.ts 480.09 KB
22
- DTS dist/index.d.mts 480.09 KB
20
+ DTS ⚡️ Build success in 9607ms
21
+ DTS dist/index.d.ts 480.45 KB
22
+ DTS dist/index.d.mts 480.45 KB
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # zoom-api-js
2
2
 
3
+ ## 0.1.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 9e0fcd1: Update OAuth refresh token logic
8
+
9
+ ## 0.1.1
10
+
11
+ ### Patch Changes
12
+
13
+ - 9349c03: Add a way to refresh token
14
+
3
15
  ## 0.1.0
4
16
 
5
17
  ### Minor Changes
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;
@@ -6132,6 +6132,9 @@ type MeetingRequestEndpointParams<T extends keyof typeof operationsByPath> = Omi
6132
6132
  declare class ZoomApi {
6133
6133
  #private;
6134
6134
  constructor(options: ZoomApiOptions);
6135
+ get auth(): {
6136
+ refreshToken: ({ refreshToken, clientId, clientSecret }: RefreshTokenOptions) => Promise<RefreshTokenResult>;
6137
+ };
6135
6138
  request<Endpoint extends keyof typeof operationsByPath>(endpoint: Endpoint, params: MeetingRequestEndpointParams<Endpoint>): Promise<ReturnType<{
6136
6139
  'GET /archive_files/statistics': (variables: GetArchiveFilesStatisticsVariables, signal?: AbortSignal) => Promise<Record<string, any>>;
6137
6140
  'PATCH /archive_files/{fileId}': (variables: PatchArchiveFilesFileIdVariables, signal?: AbortSignal) => Promise<undefined>;
@@ -6307,6 +6310,16 @@ declare class ZoomApi {
6307
6310
  'POST /h323/devices': (variables: PostH323DevicesVariables, signal?: AbortSignal) => Promise<Record<string, any>>;
6308
6311
  }[Endpoint]>>;
6309
6312
  }
6313
+ type RefreshTokenOptions = {
6314
+ refreshToken: string;
6315
+ clientId: string;
6316
+ clientSecret: string;
6317
+ };
6318
+ type RefreshTokenResult = {
6319
+ access_token: string;
6320
+ expires_in: number;
6321
+ refresh_token: string;
6322
+ };
6310
6323
 
6311
6324
  declare namespace schemas {
6312
6325
  export { };
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;
@@ -6132,6 +6132,9 @@ type MeetingRequestEndpointParams<T extends keyof typeof operationsByPath> = Omi
6132
6132
  declare class ZoomApi {
6133
6133
  #private;
6134
6134
  constructor(options: ZoomApiOptions);
6135
+ get auth(): {
6136
+ refreshToken: ({ refreshToken, clientId, clientSecret }: RefreshTokenOptions) => Promise<RefreshTokenResult>;
6137
+ };
6135
6138
  request<Endpoint extends keyof typeof operationsByPath>(endpoint: Endpoint, params: MeetingRequestEndpointParams<Endpoint>): Promise<ReturnType<{
6136
6139
  'GET /archive_files/statistics': (variables: GetArchiveFilesStatisticsVariables, signal?: AbortSignal) => Promise<Record<string, any>>;
6137
6140
  'PATCH /archive_files/{fileId}': (variables: PatchArchiveFilesFileIdVariables, signal?: AbortSignal) => Promise<undefined>;
@@ -6307,6 +6310,16 @@ declare class ZoomApi {
6307
6310
  'POST /h323/devices': (variables: PostH323DevicesVariables, signal?: AbortSignal) => Promise<Record<string, any>>;
6308
6311
  }[Endpoint]>>;
6309
6312
  }
6313
+ type RefreshTokenOptions = {
6314
+ refreshToken: string;
6315
+ clientId: string;
6316
+ clientSecret: string;
6317
+ };
6318
+ type RefreshTokenResult = {
6319
+ access_token: string;
6320
+ expires_in: number;
6321
+ refresh_token: string;
6322
+ };
6310
6323
 
6311
6324
  declare namespace schemas {
6312
6325
  export { };
package/dist/index.js CHANGED
@@ -110,6 +110,34 @@ var ZoomApi = class {
110
110
  __privateSet(this, _fetch, options.fetch || fetch);
111
111
  if (!__privateGet(this, _fetch)) throw new Error("Fetch is required");
112
112
  }
113
+ get auth() {
114
+ return {
115
+ refreshToken: async ({
116
+ refreshToken,
117
+ clientId,
118
+ clientSecret
119
+ }) => {
120
+ const response = await __privateGet(this, _fetch).call(this, "https://zoom.us/oauth/token", {
121
+ method: "POST",
122
+ body: new URLSearchParams({
123
+ grant_type: "refresh_token",
124
+ refresh_token: refreshToken,
125
+ client_id: clientId,
126
+ client_secret: clientSecret
127
+ })
128
+ });
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
+ };
138
+ }
139
+ };
140
+ }
113
141
  async request(endpoint, params) {
114
142
  const [method = "", url = ""] = endpoint.split(" ");
115
143
  const extraParams = params || {};
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 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"]}
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
@@ -85,6 +85,34 @@ var ZoomApi = class {
85
85
  __privateSet(this, _fetch, options.fetch || fetch);
86
86
  if (!__privateGet(this, _fetch)) throw new Error("Fetch is required");
87
87
  }
88
+ get auth() {
89
+ return {
90
+ refreshToken: async ({
91
+ refreshToken,
92
+ clientId,
93
+ clientSecret
94
+ }) => {
95
+ const response = await __privateGet(this, _fetch).call(this, "https://zoom.us/oauth/token", {
96
+ method: "POST",
97
+ body: new URLSearchParams({
98
+ grant_type: "refresh_token",
99
+ refresh_token: refreshToken,
100
+ client_id: clientId,
101
+ client_secret: clientSecret
102
+ })
103
+ });
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
+ };
113
+ }
114
+ };
115
+ }
88
116
  async request(endpoint, params) {
89
117
  const [method = "", url = ""] = endpoint.split(" ");
90
118
  const extraParams = params || {};
@@ -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 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"]}
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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zoom-api-js",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Zoom API client for Node.js",
5
5
  "author": "SferaDev",
6
6
  "license": "ISC",