@wirecat/zoom-cli 0.3.1 → 0.4.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/README.md +36 -7
- package/dist/archive-commands.d.ts +2 -1
- package/dist/archive-commands.d.ts.map +1 -1
- package/dist/archive-commands.js +54 -10
- package/dist/archive-commands.js.map +1 -1
- package/dist/bin/zm.js +2 -0
- package/dist/bin/zm.js.map +1 -1
- package/dist/execution.d.ts.map +1 -1
- package/dist/execution.js +3 -0
- package/dist/execution.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/ordinary-file.d.ts +1 -0
- package/dist/ordinary-file.d.ts.map +1 -1
- package/dist/ordinary-file.js +13 -0
- package/dist/ordinary-file.js.map +1 -1
- package/dist/program.d.ts +7 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +62 -0
- package/dist/program.js.map +1 -1
- package/dist/recording-archive.d.ts +2 -0
- package/dist/recording-archive.d.ts.map +1 -1
- package/dist/recording-archive.js +151 -79
- package/dist/recording-archive.js.map +1 -1
- package/dist/recording-partial-store.d.ts +20 -0
- package/dist/recording-partial-store.d.ts.map +1 -0
- package/dist/recording-partial-store.js +225 -0
- package/dist/recording-partial-store.js.map +1 -0
- package/dist/recording-promotion-store.d.ts +12 -0
- package/dist/recording-promotion-store.d.ts.map +1 -0
- package/dist/recording-promotion-store.js +92 -0
- package/dist/recording-promotion-store.js.map +1 -0
- package/dist/recording-schedule-commands.d.ts +12 -0
- package/dist/recording-schedule-commands.d.ts.map +1 -0
- package/dist/recording-schedule-commands.js +80 -0
- package/dist/recording-schedule-commands.js.map +1 -0
- package/dist/recording-schedule-store.d.ts +4 -0
- package/dist/recording-schedule-store.d.ts.map +1 -0
- package/dist/recording-schedule-store.js +141 -0
- package/dist/recording-schedule-store.js.map +1 -0
- package/dist/recording-schedule-systemd.d.ts +14 -0
- package/dist/recording-schedule-systemd.d.ts.map +1 -0
- package/dist/recording-schedule-systemd.js +173 -0
- package/dist/recording-schedule-systemd.js.map +1 -0
- package/dist/recording-schedule.d.ts +93 -0
- package/dist/recording-schedule.d.ts.map +1 -0
- package/dist/recording-schedule.js +121 -0
- package/dist/recording-schedule.js.map +1 -0
- package/dist/recording-sync-store.d.ts +3 -0
- package/dist/recording-sync-store.d.ts.map +1 -0
- package/dist/recording-sync-store.js +187 -0
- package/dist/recording-sync-store.js.map +1 -0
- package/dist/recording-sync.d.ts +10 -1
- package/dist/recording-sync.d.ts.map +1 -1
- package/dist/recording-sync.js +72 -41
- package/dist/recording-sync.js.map +1 -1
- package/dist/recordings.d.ts +9 -10
- package/dist/recordings.d.ts.map +1 -1
- package/dist/recordings.js +50 -13
- package/dist/recordings.js.map +1 -1
- package/dist/remote-meetings.d.ts +15 -0
- package/dist/remote-meetings.d.ts.map +1 -1
- package/dist/remote-meetings.js +73 -65
- package/dist/remote-meetings.js.map +1 -1
- package/package.json +3 -3
- package/skills/zoom-cli/SKILL.md +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recording-sync-store.js","sourceRoot":"","sources":["../src/recording-sync-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EACL,4BAA4B,GAI7B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAA;AAC9B,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,CAAA;AAChC,MAAM,IAAI,GAAG,CAAC,KAAc,EAAsB,EAAE,CAAE,KAA+B,EAAE,IAAI,CAAA;AAC3F,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAS,EAAE;IAC1C,MAAM,IAAI,SAAS,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAA;AACrD,CAAC,CAAA;AACD,MAAM,WAAW,GAAG,KAAK,EAAE,IAAY,EAAE,KAAa,EAAoB,EAAE;IAC1E,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACzC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAA;QACrC,IAAI,IAAI,GAAG,KAAK;YAAE,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,2CAA2C,CAAC,CAAA;QACtG,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;QACtC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACpE,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,GAAG,KAAK;YACzC,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,0CAA0C,CAAC,CAAA;QACrF,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;QACrG,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,0CAA0C,CAAC,CAAA;QACrF,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;AACH,CAAC,CAAA;AAQD,MAAM,OAAO,GAAG,CAAC,KAAc,EAAS,EAAE;IACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7D,OAAO,QAAQ,CAAC,yCAAyC,CAAC,CAAA;IAC5D,MAAM,GAAG,GAAG,KAAuB,CAAA;IACnC,IACE,GAAG,CAAC,OAAO,KAAK,CAAC;QACjB,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;QACpB,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAC5B,CAAC,GAAG,CAAC,IAAI;QACT,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;QAC7B,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QAClC,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;QAC7B,CAAC,GAAG,CAAC,KAAK;QAEV,OAAO,QAAQ,CAAC,yCAAyC,CAAC,CAAA;IAC5D,OAAO,GAAY,CAAA;AACrB,CAAC,CAAA;AACD,MAAM,KAAK,GAAG,CAAC,GAAW,EAAW,EAAE;IACrC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,OAAO,CAAA;IAChC,CAAC;AACH,CAAC,CAAA;AACD,MAAM,UAAU,gCAAgC,CAAC,IAAY;IAC3D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAC1C,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,qCAAqC,CAAC,CAAA;IAChF,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,MAAM,QAAQ,GAAG,GAAG,cAAc,OAAO,CAAA;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IAC3C,MAAM,YAAY,GAAG,GAAG,QAAQ,WAAW,CAAA;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiB,CAAA;IACvC,MAAM,SAAS,GAAG,KAAK,IAAoB,EAAE;QAC3C,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAA;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,QAAQ,CAAC,gEAAgE,CAAC,CAAA;QACnF,CAAC;IACH,CAAC,CAAA;IACD,MAAM,GAAG,GAAG,KAAK,EAAE,KAAa,EAAE,KAAa,EAAiB,EAAE;QAChE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QAC9B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK;YAAE,OAAO,QAAQ,CAAC,uCAAuC,CAAC,CAAA;QAC3F,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;QAChC,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG;YAC1G,OAAO,QAAQ,CAAC,kCAAkC,CAAC,CAAA;IACvD,CAAC,CAAA;IACD,MAAM,IAAI,GAAG,KAAK,IAA6C,EAAE;QAC/D,IAAI,CAAC;YACH,OAAO,4BAA4B,CAAC,MAAM,WAAW,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAA;QAClF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAA;YACzC,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC,CAAA;IACD,OAAO;QACL,KAAK,CAAC,OAAO,CAAC,KAAK;YACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI;gBACnE,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,uCAAuC,CAAC,CAAA;YAClF,MAAM,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;YACtE,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;YACxC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ;oBAAE,MAAM,KAAK,CAAA;gBACzC,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAA;gBACpC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,cAAc,EAAE;oBAClD,OAAO,QAAQ,CAAC,uDAAuD,CAAC,CAAA;gBAC1E,IAAI,CAAC;oBACH,MAAM,KAAK,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;gBAC5C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ;wBAAE,OAAO,QAAQ,CAAC,+CAA+C,CAAC,CAAA;oBAC9F,MAAM,KAAK,CAAA;gBACb,CAAC;gBACD,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAA;oBAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;wBAC/C,OAAO,QAAQ,CAAC,mEAAmE,CAAC,CAAA;oBACtF,MAAM,QAAQ,GAAG,MAAM,SAAS,EAAE,CAAA;oBAClC,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK;wBAAE,OAAO,QAAQ,CAAC,uDAAuD,CAAC,CAAA;oBAC5G,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;oBACpB,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAA;oBACrB,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;gBACxC,CAAC;wBAAS,CAAC;oBACT,MAAM,KAAK,CAAC,YAAY,CAAC,CAAA;gBAC3B,CAAC;YACH,CAAC;YACD,MAAM,KAAK,GAAU,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,CAAA;YACnG,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;YAC5C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;gBAC3C,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;YACnB,CAAC;oBAAS,CAAC;gBACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YACpB,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAC9B,OAAO;gBACL,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK,CAAC,OAAO;oBACX,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;oBAC7B,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;oBACpB,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAA;oBACrB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBAC5B,CAAC;aACF,CAAA;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK;YACrB,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACvB,OAAO,IAAI,EAAE,CAAA;QACf,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK;YAC9C,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACvB,MAAM,KAAK,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAA;YACjD,MAAM,OAAO,GAAG,MAAM,IAAI,EAAE,CAAA;YAC5B,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAC,KAAK,gBAAgB,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC,GAAG,CAAC;gBACpG,OAAO,QAAQ,CAAC,qCAAqC,CAAC,CAAA;YACxD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YACrC,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,QAAQ;gBACvC,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,2CAA2C,CAAC,CAAA;YACtF,MAAM,SAAS,GAAG,GAAG,cAAc,IAAI,KAAK,MAAM,CAAA;YAClD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;YAC/C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;gBAC7B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;YACnB,CAAC;oBAAS,CAAC;gBACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YACpB,CAAC;YACD,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACvB,MAAM,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;YACvC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACjC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,GAAG,CAAC,CAAA;gBAC1D,IAAI,CAAC;oBACH,MAAM,SAAS,CAAC,IAAI,EAAE,CAAA;gBACxB,CAAC;wBAAS,CAAC;oBACT,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/dist/recording-sync.d.ts
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
|
+
import { type RecordingSyncCheckpointStore } from "@wirecat/cli-meetings";
|
|
1
2
|
import type { ArchiveReport, DownloadOptions, RecordingMeeting, ZoomRecordings } from "./recordings.js";
|
|
2
3
|
export interface ArchiveSyncOptions extends Omit<DownloadOptions, "fileIds"> {
|
|
3
4
|
from: string;
|
|
4
5
|
to: string;
|
|
6
|
+
checkpointPath?: string;
|
|
7
|
+
checkpointStore?: RecordingSyncCheckpointStore;
|
|
8
|
+
recheckFrom?: string;
|
|
9
|
+
maxPages?: number;
|
|
10
|
+
maxEntries?: number;
|
|
11
|
+
now?: () => number;
|
|
5
12
|
}
|
|
6
13
|
export interface ArchiveSyncReceipt {
|
|
7
14
|
window: {
|
|
@@ -10,6 +17,8 @@ export interface ArchiveSyncReceipt {
|
|
|
10
17
|
};
|
|
11
18
|
meeting: Pick<RecordingMeeting, "id" | "uuid" | "title">;
|
|
12
19
|
archive: ArchiveReport;
|
|
20
|
+
availability?: "unknown";
|
|
21
|
+
checkpointRevision?: number | null;
|
|
13
22
|
}
|
|
14
|
-
export declare function syncRecordingArchive(recordings: Pick<ZoomRecordings, "list" | "download"
|
|
23
|
+
export declare function syncRecordingArchive(recordings: Pick<ZoomRecordings, "list" | "download"> & Partial<Pick<ZoomRecordings, "catalog">>, input: ArchiveSyncOptions): AsyncGenerator<ArchiveSyncReceipt, void, void>;
|
|
15
24
|
//# sourceMappingURL=recording-sync.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recording-sync.d.ts","sourceRoot":"","sources":["../src/recording-sync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGvG,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC;IAC1E,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"recording-sync.d.ts","sourceRoot":"","sources":["../src/recording-sync.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,4BAA4B,EAIlC,MAAM,uBAAuB,CAAA;AAI9B,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGvG,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC;IAC1E,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,4BAA4B,CAAA;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AACD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;IACxD,OAAO,EAAE,aAAa,CAAA;IACtB,YAAY,CAAC,EAAE,SAAS,CAAA;IACxB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACnC;AACD,wBAAuB,oBAAoB,CACzC,UAAU,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,EAChG,KAAK,EAAE,kBAAkB,GACxB,cAAc,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC,CAyEhD"}
|
package/dist/recording-sync.js
CHANGED
|
@@ -1,49 +1,80 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
import { RecordingSyncError, recordingWindows, syncRecordingArchive as syncArchive, } from "@wirecat/cli-meetings";
|
|
1
4
|
import { checkCancelled, ZoomError } from "./errors.js";
|
|
2
5
|
import { validateDownloadOptions } from "./recording-archive.js";
|
|
6
|
+
import { fileRecordingSyncCheckpointStore } from "./recording-sync-store.js";
|
|
3
7
|
import { operationSignal } from "./remote-http.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
lastDay.setUTCFullYear(from.getUTCFullYear() + 10, from.getUTCMonth() + 1, 0);
|
|
19
|
-
anniversary.setUTCFullYear(from.getUTCFullYear() + 10, from.getUTCMonth(), Math.min(from.getUTCDate(), lastDay.getUTCDate()));
|
|
20
|
-
if (to < from || to > anniversary)
|
|
21
|
-
throw new ZoomError("validation_error", "archive date range must be ordered and at most ten calendar years");
|
|
22
|
-
validateDownloadOptions(options);
|
|
23
|
-
const signal = operationSignal(options.signal);
|
|
24
|
-
const seen = new Set();
|
|
25
|
-
let cursor = from;
|
|
26
|
-
while (cursor <= to) {
|
|
8
|
+
export async function* syncRecordingArchive(recordings, input) {
|
|
9
|
+
const options = { ...input };
|
|
10
|
+
let signal;
|
|
11
|
+
try {
|
|
12
|
+
recordingWindows(options.from, options.to);
|
|
13
|
+
const maxBytes = validateDownloadOptions(options);
|
|
14
|
+
const resume = options.resume === true;
|
|
15
|
+
if (!resume && (options.checkpointPath !== undefined || options.checkpointStore !== undefined))
|
|
16
|
+
throw new ZoomError("validation_error", "archive checkpoints require resume mode");
|
|
17
|
+
if (options.checkpointPath !== undefined &&
|
|
18
|
+
(typeof options.checkpointPath !== "string" || !options.checkpointPath.trim()))
|
|
19
|
+
throw new ZoomError("validation_error", "archive checkpoint path is required");
|
|
20
|
+
const account = options.account ?? "legacy-uncheckpointed";
|
|
21
|
+
signal = operationSignal(options.signal);
|
|
27
22
|
checkCancelled(signal);
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
23
|
+
const catalog = recordings.catalog
|
|
24
|
+
? recordings.catalog(account)
|
|
25
|
+
: {
|
|
26
|
+
provider: "zoom",
|
|
27
|
+
list: async (range) => ({
|
|
28
|
+
items: (await recordings.list(range)).map(({ uuid, ...item }) => ({ ...item, externalId: uuid })),
|
|
29
|
+
nextCursor: null,
|
|
30
|
+
}),
|
|
31
|
+
};
|
|
32
|
+
const configKey = createHash("sha256")
|
|
33
|
+
.update(JSON.stringify({ version: 1, destination: resolve(options.destination), maxBytes }))
|
|
34
|
+
.digest("hex");
|
|
35
|
+
const checkpointStore = resume
|
|
36
|
+
? (options.checkpointStore ??
|
|
37
|
+
fileRecordingSyncCheckpointStore(options.checkpointPath ?? join(options.destination, ".zoom-archive-sync.json")))
|
|
38
|
+
: undefined;
|
|
39
|
+
const receipts = syncArchive(catalog, {
|
|
40
|
+
scope: { provider: "zoom", account },
|
|
41
|
+
from: options.from,
|
|
42
|
+
to: options.to,
|
|
43
|
+
now: options.now ?? Date.now,
|
|
44
|
+
signal,
|
|
45
|
+
...(options.recheckFrom === undefined ? {} : { recheckFrom: options.recheckFrom }),
|
|
46
|
+
...(options.maxPages === undefined ? {} : { maxPages: options.maxPages }),
|
|
47
|
+
...(options.maxEntries === undefined ? {} : { maxEntries: options.maxEntries }),
|
|
48
|
+
...(checkpointStore === undefined
|
|
49
|
+
? {}
|
|
50
|
+
: { checkpoint: { store: checkpointStore, jobId: "recording-archive", configKey } }),
|
|
51
|
+
archive: async (occurrence, activeSignal) => {
|
|
52
|
+
const { uuid, ...archive } = await recordings.download(occurrence.externalId, {
|
|
53
|
+
destination: options.destination,
|
|
54
|
+
signal: activeSignal,
|
|
55
|
+
...(options.maxBytes === undefined ? {} : { maxBytes: options.maxBytes }),
|
|
56
|
+
...(resume ? { resume: true, account } : {}),
|
|
57
|
+
});
|
|
58
|
+
return { ...archive, externalId: uuid };
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
for await (const receipt of receipts) {
|
|
62
|
+
const { externalId, ...archive } = receipt.archive;
|
|
63
|
+
yield {
|
|
64
|
+
window: receipt.window,
|
|
65
|
+
meeting: { id: receipt.occurrence.id, uuid: receipt.occurrence.externalId, title: receipt.occurrence.title },
|
|
66
|
+
archive: { ...archive, uuid: externalId },
|
|
67
|
+
...(resume ? { availability: receipt.availability, checkpointRevision: receipt.checkpointRevision } : {}),
|
|
68
|
+
};
|
|
44
69
|
}
|
|
45
|
-
|
|
46
|
-
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
if (error instanceof RecordingSyncError) {
|
|
73
|
+
if (error.code === "cancelled")
|
|
74
|
+
checkCancelled(signal);
|
|
75
|
+
throw new ZoomError(error.code, error.message);
|
|
76
|
+
}
|
|
77
|
+
throw error;
|
|
47
78
|
}
|
|
48
79
|
}
|
|
49
80
|
//# sourceMappingURL=recording-sync.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recording-sync.js","sourceRoot":"","sources":["../src/recording-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"recording-sync.js","sourceRoot":"","sources":["../src/recording-sync.ts"],"names":[],"mappings":"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"}
|
package/dist/recordings.d.ts
CHANGED
|
@@ -1,16 +1,8 @@
|
|
|
1
|
+
import type { RecordingAsset as CommonRecordingAsset, RecordingCatalog } from "@wirecat/cli-meetings";
|
|
1
2
|
import { type ArchiveReport, type DownloadOptions } from "./recording-archive.js";
|
|
2
3
|
import { type RemoteOptions, ZoomRemote } from "./remote-http.js";
|
|
3
4
|
import type { TokenManager } from "./tokens.js";
|
|
4
|
-
export
|
|
5
|
-
id: string | null;
|
|
6
|
-
type: string;
|
|
7
|
-
format: string | null;
|
|
8
|
-
size: number | null;
|
|
9
|
-
status: string;
|
|
10
|
-
available: boolean;
|
|
11
|
-
startedAt: string | null;
|
|
12
|
-
endedAt: string | null;
|
|
13
|
-
}
|
|
5
|
+
export type RecordingAsset = CommonRecordingAsset;
|
|
14
6
|
export interface RecordingMeeting {
|
|
15
7
|
id: string;
|
|
16
8
|
uuid: string;
|
|
@@ -27,6 +19,13 @@ export declare const required: (value: unknown) => string;
|
|
|
27
19
|
export declare class ZoomRecordings {
|
|
28
20
|
readonly remote: ZoomRemote;
|
|
29
21
|
constructor(tokens: Pick<TokenManager, "tokens">, fetcher: typeof fetch, options?: RemoteOptions);
|
|
22
|
+
catalog(account: string): RecordingCatalog;
|
|
23
|
+
listPage(options: RecordingRange & {
|
|
24
|
+
cursor?: string;
|
|
25
|
+
}): Promise<{
|
|
26
|
+
items: RecordingMeeting[];
|
|
27
|
+
nextCursor: string | null;
|
|
28
|
+
}>;
|
|
30
29
|
list(options: RecordingRange): Promise<RecordingMeeting[]>;
|
|
31
30
|
private details;
|
|
32
31
|
show(id: string, options?: {
|
package/dist/recordings.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recordings.d.ts","sourceRoot":"","sources":["../src/recordings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"recordings.d.ts","sourceRoot":"","sources":["../src/recordings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,IAAI,oBAAoB,EAAE,gBAAgB,EAAiB,MAAM,uBAAuB,CAAA;AAGpH,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAmB,KAAK,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,MAAM,MAAM,cAAc,GAAG,oBAAoB,CAAA;AACjD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE,cAAc,EAAE,CAAA;CACzB;AACD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AACD,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,MAIzC,CAAA;AA2CD,qBAAa,cAAc;IACzB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;IAC3B,YAAY,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,KAAK,EAAE,OAAO,GAAE,aAAkB,EAEnG;IACD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAezC;IACK,QAAQ,CACZ,OAAO,EAAE,cAAc,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC;QAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAyCnE;IACK,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAoB/D;YACa,OAAO;IAuBf,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAExF;IACK,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAK3E;CACF;AAED,YAAY,EACV,YAAY,EACZ,eAAe,EACf,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,eAAe,GAChB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAEhH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AACD,eAAO,MAAM,cAAc,WACjB,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,WAC3B,OAAO,KAAK,YACZ;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAChC,OAAO,CAAC,WAAW,CAGrB,CAAA"}
|
package/dist/recordings.js
CHANGED
|
@@ -55,7 +55,23 @@ export class ZoomRecordings {
|
|
|
55
55
|
constructor(tokens, fetcher, options = {}) {
|
|
56
56
|
this.remote = new ZoomRemote(tokens, fetcher, options);
|
|
57
57
|
}
|
|
58
|
-
|
|
58
|
+
catalog(account) {
|
|
59
|
+
if (typeof account !== "string" || !account.trim())
|
|
60
|
+
throw new ZoomError("validation_error", "recording account is required");
|
|
61
|
+
return {
|
|
62
|
+
provider: "zoom",
|
|
63
|
+
list: async (options) => {
|
|
64
|
+
if (options.account !== account)
|
|
65
|
+
throw new ZoomError("validation_error", "recording catalog account cannot be overridden");
|
|
66
|
+
const page = await this.listPage(options);
|
|
67
|
+
return {
|
|
68
|
+
items: page.items.map(({ uuid, ...item }) => ({ ...item, externalId: uuid })),
|
|
69
|
+
nextCursor: page.nextCursor,
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
async listPage(options) {
|
|
59
75
|
const dates = [options.from, options.to].map((date) => {
|
|
60
76
|
const instant = Date.parse(`${date}T00:00:00Z`);
|
|
61
77
|
if (!/^\d{4}-\d{2}-\d{2}$/.test(date) ||
|
|
@@ -67,28 +83,49 @@ export class ZoomRecordings {
|
|
|
67
83
|
const difference = (dates[1] ?? 0) - (dates[0] ?? 0);
|
|
68
84
|
if (difference < 0 || difference > 31 * 86400000)
|
|
69
85
|
throw new ZoomError("validation_error", "recording date range must be ordered and at most one month");
|
|
86
|
+
if (options.cursor !== undefined &&
|
|
87
|
+
(typeof options.cursor !== "string" || !options.cursor.trim() || options.cursor.length > 4096))
|
|
88
|
+
throw new ZoomError("validation_error", "invalid recording pagination cursor");
|
|
70
89
|
const signal = operationSignal(options.signal);
|
|
71
90
|
const query = new URLSearchParams({ from: options.from, to: options.to, page_size: "100" });
|
|
72
|
-
|
|
91
|
+
if (options.cursor !== undefined)
|
|
92
|
+
query.set("next_page_token", options.cursor);
|
|
93
|
+
const body = await this.remote.request(`/users/me/recordings?${query}`, "cloud_recording:read:list_user_recordings", { signal });
|
|
94
|
+
if (!Array.isArray(body.meetings) || body.meetings.length > 1000)
|
|
95
|
+
throw new ZoomError("invalid_response", "Zoom returned an invalid recording list");
|
|
96
|
+
const items = body.meetings.map(meeting);
|
|
97
|
+
if (body.next_page_token !== undefined &&
|
|
98
|
+
body.next_page_token !== null &&
|
|
99
|
+
body.next_page_token !== "" &&
|
|
100
|
+
(typeof body.next_page_token !== "string" || !body.next_page_token.trim()))
|
|
101
|
+
throw new ZoomError("invalid_response", "Zoom returned an invalid recording pagination cursor");
|
|
102
|
+
const nextCursor = string(body.next_page_token);
|
|
103
|
+
if (nextCursor !== null && nextCursor.length > 4096)
|
|
104
|
+
throw new ZoomError("invalid_response", "Zoom returned an oversized pagination cursor");
|
|
105
|
+
return { items, nextCursor };
|
|
106
|
+
}
|
|
107
|
+
async list(options) {
|
|
108
|
+
const cursors = new Set();
|
|
73
109
|
const meetings = new Map();
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
if (
|
|
77
|
-
throw new ZoomError("invalid_response", "
|
|
78
|
-
|
|
79
|
-
|
|
110
|
+
let cursor;
|
|
111
|
+
for (let pages = 0;; pages++) {
|
|
112
|
+
if (pages >= 1000)
|
|
113
|
+
throw new ZoomError("invalid_response", "recording catalog page limit exceeded");
|
|
114
|
+
const page = await this.listPage({ ...options, ...(cursor === undefined ? {} : { cursor }) });
|
|
115
|
+
for (const item of page.items) {
|
|
80
116
|
const previous = meetings.get(item.uuid);
|
|
81
117
|
if (previous && JSON.stringify(previous) !== JSON.stringify(item))
|
|
82
118
|
throw new ZoomError("invalid_response", "Zoom returned conflicting recording occurrences");
|
|
119
|
+
if (!previous && meetings.size >= 10000)
|
|
120
|
+
throw new ZoomError("invalid_response", "recording catalog occurrence limit exceeded");
|
|
83
121
|
meetings.set(item.uuid, item);
|
|
84
122
|
}
|
|
85
|
-
|
|
86
|
-
if (!next)
|
|
123
|
+
if (page.nextCursor === null)
|
|
87
124
|
return [...meetings.values()];
|
|
88
|
-
if (
|
|
125
|
+
if (cursors.has(page.nextCursor))
|
|
89
126
|
throw new ZoomError("invalid_response", "Zoom repeated a pagination token");
|
|
90
|
-
|
|
91
|
-
|
|
127
|
+
cursors.add(page.nextCursor);
|
|
128
|
+
cursor = page.nextCursor;
|
|
92
129
|
}
|
|
93
130
|
}
|
|
94
131
|
async details(id, signal) {
|
package/dist/recordings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recordings.js","sourceRoot":"","sources":["../src/recordings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"recordings.js","sourceRoot":"","sources":["../src/recordings.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAEL,gBAAgB,EAEhB,uBAAuB,GACxB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,eAAe,EAAsB,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAgBlF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAU,EAAE;IACjD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1B,IAAI,IAAI,KAAK,IAAI;QAAE,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,2CAA2C,CAAC,CAAA;IACvG,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AACD,MAAM,SAAS,GAAG,CAAC,KAAc,EAAiB,EAAE;IAClD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,IAAI,CAAA;IACtE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,oCAAoC,CAAC,CAAA;IACrH,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;AACrC,CAAC,CAAA;AACD,MAAM,OAAO,GAAG,CAAC,KAAc,EAAoB,EAAE;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACzB,MAAM,EAAE,GAAG,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACzG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QACrC,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,uCAAuC,CAAC,CAAA;IAClF,MAAM,GAAG,GAAG;QACV,GAAG,GAAG,CAAC,eAAe;QACtB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;KACnF,CAAA;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,EAAkB,EAAE;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC3B,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,mCAAmC,CAAC,CAAA;QAC7G,IAAI,EAAE,KAAK,IAAI;YAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC7B,OAAO;YACL,EAAE;YACF,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS;YAC1E,MAAM,EACJ,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;gBAC5B,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CACnG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CACxB;gBACD,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;YACzB,IAAI,EACF,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC;gBAClG,CAAC,CAAC,KAAK,CAAC,SAAS;gBACjB,CAAC,CAAC,IAAI;YACV,MAAM,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;YACzE,SAAS,EAAE,EAAE,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI;YAC7F,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC;YAC3C,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;SACxC,CAAA;IACH,CAAC,CAAC,CAAA;IACF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;AACjH,CAAC,CAAA;AACD,MAAM,OAAO,cAAc;IAChB,MAAM,CAAY;IAC3B,YAAY,MAAoC,EAAE,OAAqB,EAAE,OAAO,GAAkB,EAAE;QAClG,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,CAAC,OAAe;QACrB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAChD,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,+BAA+B,CAAC,CAAA;QAC1E,OAAO;YACL,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,KAAK,EAAE,OAAO,EAA0B,EAAE;gBAC9C,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO;oBAC7B,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,gDAAgD,CAAC,CAAA;gBAC3F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;gBACzC,OAAO;oBACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC7E,UAAU,EAAE,IAAI,CAAC,UAAU;iBAC5B,CAAA;YACH,CAAC;SACF,CAAA;IACH,CAAC;IACD,KAAK,CAAC,QAAQ,CACZ,OAA6C;QAE7C,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACpD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,YAAY,CAAC,CAAA;YAC/C,IACE,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACzB,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI;gBAErD,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,gDAAgD,CAAC,CAAA;YAC3F,OAAO,OAAO,CAAA;QAChB,CAAC,CAAC,CAAA;QACF,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QACpD,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,EAAE,GAAG,QAAQ;YAC9C,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,4DAA4D,CAAC,CAAA;QACvG,IACE,OAAO,CAAC,MAAM,KAAK,SAAS;YAC5B,CAAC,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YAE9F,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,qCAAqC,CAAC,CAAA;QAChF,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;QAC3F,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QAC9E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACpC,wBAAwB,KAAK,EAAE,EAC/B,2CAA2C,EAC3C,EAAE,MAAM,EAAE,CACX,CAAA;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI;YAC9D,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,yCAAyC,CAAC,CAAA;QACpF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACxC,IACE,IAAI,CAAC,eAAe,KAAK,SAAS;YAClC,IAAI,CAAC,eAAe,KAAK,IAAI;YAC7B,IAAI,CAAC,eAAe,KAAK,EAAE;YAC3B,CAAC,OAAO,IAAI,CAAC,eAAe,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YAE1E,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,sDAAsD,CAAC,CAAA;QACjG,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAC/C,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,MAAM,GAAG,IAAI;YACjD,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,8CAA8C,CAAC,CAAA;QACzF,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;IAC9B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,OAAuB;QAChC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;QACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAA;QACpD,IAAI,MAA0B,CAAA;QAC9B,KAAK,IAAI,KAAK,GAAG,CAAC,GAAI,KAAK,EAAE,EAAE,CAAC;YAC9B,IAAI,KAAK,IAAI,IAAI;gBAAE,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,uCAAuC,CAAC,CAAA;YACnG,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;YAC7F,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACxC,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAC/D,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,iDAAiD,CAAC,CAAA;gBAC5F,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,IAAI,KAAK;oBACrC,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,6CAA6C,CAAC,CAAA;gBACxF,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC/B,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;gBAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;YAC3D,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;gBAAE,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,kCAAkC,CAAC,CAAA;YAC7G,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC5B,MAAM,GAAG,IAAI,CAAC,UAAU,CAAA;QAC1B,CAAC;IACH,CAAC;IACO,KAAK,CAAC,OAAO,CACnB,EAAU,EACV,MAAoB;QAEpB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,kCAAkC,CAAC,CAAA;QAC3F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACpC,aAAa,UAAU,CAAC,EAAE,CAAC,aAAa,EACxC,2CAA2C,EAC3C,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAClC,CAAA;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QAC1B,MAAM,IAAI,GAAG;YACX,GAAI,IAAI,CAAC,eAA6B;YACtC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;SACrF,CAAA;QACD,MAAM,IAAI,GAAG,IAAI,GAAG,CAClB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACjB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;YACzB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAA;QAC/D,CAAC,CAAC,CACH,CAAA;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IAChC,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAU,EAAE,OAAO,GAA6B,EAAE;QAC3D,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAA;IACzD,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,EAAU,EAAE,OAAwB;QACjD,uBAAuB,CAAC,OAAO,CAAC,CAAA;QAChC,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QAC9C,OAAO,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;IAC7F,CAAC;CACF;AAUD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAOhH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,MAAoC,EACpC,OAAqB,EACrB,OAAO,GAA6B,EAAE,EAChB,EAAE;IACxB,MAAM,IAAI,GAAG,MAAM,IAAI,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAA;IAClG,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAA;AACrG,CAAC,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ManagedMeeting, type ManagedMeetingChange } from "@wirecat/cli-meetings";
|
|
1
2
|
import { type RemoteOptions, ZoomRemote } from "./remote-http.js";
|
|
2
3
|
import type { TokenManager } from "./tokens.js";
|
|
3
4
|
export interface RemoteMeeting {
|
|
@@ -55,4 +56,18 @@ export declare class ZoomRemoteMeetings {
|
|
|
55
56
|
update(id: string, change: MeetingChange, options?: MutationOptions): Promise<MeetingMutation>;
|
|
56
57
|
cancel(id: string, options?: MutationOptions): Promise<MeetingMutation>;
|
|
57
58
|
}
|
|
59
|
+
/** The remote client must already be bound to the selected account's token manager. */
|
|
60
|
+
export declare const createZoomMeetingManagement: (remote: ZoomRemoteMeetings, account: string) => {
|
|
61
|
+
scope: Readonly<import("@wirecat/cli-meetings").MeetingProviderScope>;
|
|
62
|
+
capabilities: readonly string[];
|
|
63
|
+
list(options?: import("@wirecat/cli-meetings").MeetingOperationOptions): Promise<ManagedMeeting[]>;
|
|
64
|
+
get(id: string, options?: import("@wirecat/cli-meetings").MeetingOperationOptions): Promise<ManagedMeeting>;
|
|
65
|
+
invitation(id: string, options?: import("@wirecat/cli-meetings").MeetingOperationOptions): Promise<{
|
|
66
|
+
id: string;
|
|
67
|
+
invitation: string;
|
|
68
|
+
}>;
|
|
69
|
+
create(change: ManagedMeetingChange, options?: import("@wirecat/cli-meetings").MeetingMutationOptions): Promise<import("@wirecat/cli-meetings").MeetingMutationReceipt>;
|
|
70
|
+
update(id: string, change: ManagedMeetingChange, options?: import("@wirecat/cli-meetings").MeetingMutationOptions): Promise<import("@wirecat/cli-meetings").MeetingMutationReceipt>;
|
|
71
|
+
cancel(id: string, options?: import("@wirecat/cli-meetings").MeetingMutationOptions): Promise<import("@wirecat/cli-meetings").MeetingMutationReceipt>;
|
|
72
|
+
};
|
|
58
73
|
//# sourceMappingURL=remote-meetings.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-meetings.d.ts","sourceRoot":"","sources":["../src/remote-meetings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remote-meetings.d.ts","sourceRoot":"","sources":["../src/remote-meetings.ts"],"names":[],"mappings":"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"}
|
package/dist/remote-meetings.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createMeetingManagement, dispatchMeetingMutation, validateMeetingChange, } from "@wirecat/cli-meetings";
|
|
1
2
|
import { object, string, ZoomError } from "./errors.js";
|
|
2
3
|
import { required } from "./recordings.js";
|
|
3
4
|
import { operationSignal, ZoomRemote } from "./remote-http.js";
|
|
@@ -26,57 +27,25 @@ const changeBody = (change, create) => {
|
|
|
26
27
|
if (!change ||
|
|
27
28
|
Object.keys(change).some((key) => !["topic", "startTime", "durationMinutes", "timezone", "agenda", "type"].includes(key)))
|
|
28
29
|
throw new ZoomError("validation_error", "unsupported meeting change field");
|
|
29
|
-
const body = {};
|
|
30
|
-
if (change.topic !== undefined) {
|
|
31
|
-
if (!string(change.topic))
|
|
32
|
-
throw new ZoomError("validation_error", "meeting topic must be nonempty");
|
|
33
|
-
body.topic = change.topic;
|
|
34
|
-
}
|
|
35
|
-
if (create && !string(change.topic))
|
|
36
|
-
throw new ZoomError("validation_error", "meeting topic is required");
|
|
37
|
-
if (change.startTime !== undefined) {
|
|
38
|
-
if (typeof change.startTime !== "string" ||
|
|
39
|
-
!/T.+(?:Z|[+-]\d{2}:\d{2})$/i.test(change.startTime) ||
|
|
40
|
-
!Number.isFinite(Date.parse(change.startTime)))
|
|
41
|
-
throw new ZoomError("validation_error", "meeting start must be an ISO timestamp with a timezone");
|
|
42
|
-
const date = change.startTime.slice(0, 10);
|
|
43
|
-
const dateInstant = Date.parse(`${date}T00:00:00Z`);
|
|
44
|
-
if (!Number.isFinite(dateInstant) || new Date(dateInstant).toISOString().slice(0, 10) !== date)
|
|
45
|
-
throw new ZoomError("validation_error", "meeting start contains an invalid calendar date");
|
|
46
|
-
body.start_time = new Date(change.startTime).toISOString();
|
|
47
|
-
}
|
|
48
|
-
if (change.durationMinutes !== undefined) {
|
|
49
|
-
if (!Number.isSafeInteger(change.durationMinutes) || change.durationMinutes <= 0 || change.durationMinutes > 1440)
|
|
50
|
-
throw new ZoomError("validation_error", "meeting duration must be an integer from 1 to 1440 minutes");
|
|
51
|
-
body.duration = change.durationMinutes;
|
|
52
|
-
}
|
|
53
|
-
if (change.timezone !== undefined) {
|
|
54
|
-
try {
|
|
55
|
-
new Intl.DateTimeFormat("en", { timeZone: change.timezone }).format();
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
throw new ZoomError("validation_error", "meeting timezone must be a valid IANA timezone");
|
|
59
|
-
}
|
|
60
|
-
body.timezone = change.timezone;
|
|
61
|
-
}
|
|
62
|
-
if (change.agenda !== undefined) {
|
|
63
|
-
if (typeof change.agenda !== "string")
|
|
64
|
-
throw new ZoomError("validation_error", "meeting agenda must be text");
|
|
65
|
-
body.agenda = change.agenda;
|
|
66
|
-
}
|
|
67
30
|
if (change.type !== undefined && change.type !== 1 && change.type !== 2)
|
|
68
31
|
throw new ZoomError("validation_error", "only instant or scheduled meeting types are supported");
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
32
|
+
const neutral = {
|
|
33
|
+
...(change.topic !== undefined ? { title: change.topic } : {}),
|
|
34
|
+
...(change.type !== undefined ? { kind: change.type === 1 ? "instant" : "scheduled" } : {}),
|
|
35
|
+
...(change.startTime !== undefined ? { startTime: change.startTime } : {}),
|
|
36
|
+
...(change.durationMinutes !== undefined ? { durationMinutes: change.durationMinutes } : {}),
|
|
37
|
+
...(change.timezone !== undefined ? { timezone: change.timezone } : {}),
|
|
38
|
+
...(change.agenda !== undefined ? { agenda: change.agenda } : {}),
|
|
39
|
+
};
|
|
40
|
+
const validated = validateMeetingChange(neutral, create);
|
|
41
|
+
const body = {
|
|
42
|
+
...(validated.title !== undefined ? { topic: validated.title } : {}),
|
|
43
|
+
...(validated.kind !== undefined ? { type: validated.kind === "instant" ? 1 : 2 } : {}),
|
|
44
|
+
...(validated.startTime !== undefined ? { start_time: validated.startTime } : {}),
|
|
45
|
+
...(validated.durationMinutes !== undefined ? { duration: validated.durationMinutes } : {}),
|
|
46
|
+
...(validated.timezone !== undefined ? { timezone: validated.timezone } : {}),
|
|
47
|
+
...(validated.agenda !== undefined ? { agenda: validated.agenda } : {}),
|
|
48
|
+
};
|
|
80
49
|
return body;
|
|
81
50
|
};
|
|
82
51
|
export class ZoomRemoteMeetings {
|
|
@@ -115,23 +84,26 @@ export class ZoomRemoteMeetings {
|
|
|
115
84
|
}
|
|
116
85
|
async mutate(action, request, scope, options) {
|
|
117
86
|
const result = { action, applied: false, request };
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
throw new ZoomError("outcome_unknown", "Zoom mutation returned incomplete meeting details; verify remote state before retrying");
|
|
87
|
+
const outcome = await dispatchMeetingMutation(options, async (signal) => {
|
|
88
|
+
const init = {
|
|
89
|
+
method: request.method,
|
|
90
|
+
...(request.body ? { body: request.body } : {}),
|
|
91
|
+
...(signal ? { signal } : {}),
|
|
92
|
+
};
|
|
93
|
+
const body = await this.remote.request(request.path, scope, init);
|
|
94
|
+
if (action === "create") {
|
|
95
|
+
try {
|
|
96
|
+
return normalized(body);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
throw new ZoomError("outcome_unknown", "Zoom mutation returned incomplete meeting details; verify remote state before retrying");
|
|
100
|
+
}
|
|
133
101
|
}
|
|
134
|
-
|
|
102
|
+
return undefined;
|
|
103
|
+
});
|
|
104
|
+
result.applied = outcome.applied;
|
|
105
|
+
if (outcome.value)
|
|
106
|
+
result.meeting = outcome.value;
|
|
135
107
|
return result;
|
|
136
108
|
}
|
|
137
109
|
create(change, options = {}) {
|
|
@@ -148,4 +120,40 @@ export class ZoomRemoteMeetings {
|
|
|
148
120
|
return this.mutate("cancel", { method: "DELETE", path: `${path}${query}` }, "meeting:delete:meeting", options);
|
|
149
121
|
}
|
|
150
122
|
}
|
|
123
|
+
const managedMeeting = (meeting) => ({
|
|
124
|
+
id: meeting.id,
|
|
125
|
+
title: meeting.title,
|
|
126
|
+
kind: meeting.type === 1 ? "instant" : meeting.type === 2 ? "scheduled" : null,
|
|
127
|
+
startTime: meeting.startedAt,
|
|
128
|
+
durationMinutes: meeting.durationMinutes,
|
|
129
|
+
timezone: meeting.timezone,
|
|
130
|
+
agenda: meeting.agenda,
|
|
131
|
+
joinUrl: meeting.joinUrl,
|
|
132
|
+
});
|
|
133
|
+
const zoomChange = (change) => ({
|
|
134
|
+
...(change.title !== undefined ? { topic: change.title } : {}),
|
|
135
|
+
...(change.kind !== undefined ? { type: change.kind === "instant" ? 1 : 2 } : {}),
|
|
136
|
+
...(change.startTime !== undefined ? { startTime: change.startTime } : {}),
|
|
137
|
+
...(change.durationMinutes !== undefined ? { durationMinutes: change.durationMinutes } : {}),
|
|
138
|
+
...(change.timezone !== undefined ? { timezone: change.timezone } : {}),
|
|
139
|
+
...(change.agenda !== undefined ? { agenda: change.agenda } : {}),
|
|
140
|
+
});
|
|
141
|
+
/** The remote client must already be bound to the selected account's token manager. */
|
|
142
|
+
export const createZoomMeetingManagement = (remote, account) => createMeetingManagement({ provider: "zoom", account }, {
|
|
143
|
+
list: async ({ signal }) => (await remote.list({ signal })).map(managedMeeting),
|
|
144
|
+
get: async (id, { signal }) => managedMeeting(await remote.show(id, { signal })),
|
|
145
|
+
invitation: (id, { signal }) => remote.invitation(id, { signal }),
|
|
146
|
+
create: async (change, { signal }) => {
|
|
147
|
+
const receipt = await remote.create(zoomChange(change), { apply: true, signal });
|
|
148
|
+
if (!receipt.meeting)
|
|
149
|
+
throw new ZoomError("outcome_unknown", "Zoom did not acknowledge the created meeting");
|
|
150
|
+
return managedMeeting(receipt.meeting);
|
|
151
|
+
},
|
|
152
|
+
update: async (id, change, { signal }) => {
|
|
153
|
+
await remote.update(id, zoomChange(change), { apply: true, signal });
|
|
154
|
+
},
|
|
155
|
+
cancel: async (id, { signal, occurrenceId }) => {
|
|
156
|
+
await remote.cancel(id, { apply: true, signal, occurrenceId });
|
|
157
|
+
},
|
|
158
|
+
});
|
|
151
159
|
//# sourceMappingURL=remote-meetings.js.map
|