@agent-native/scheduling 0.1.75 → 0.2.0-nightly-20260926081002
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/dist/server/providers/index.d.ts +1 -1
- package/dist/server/providers/index.d.ts.map +1 -1
- package/dist/server/providers/index.js +1 -1
- package/dist/server/providers/index.js.map +1 -1
- package/dist/server/providers/zoom.d.ts +4 -0
- package/dist/server/providers/zoom.d.ts.map +1 -1
- package/dist/server/providers/zoom.js +11 -2
- package/dist/server/providers/zoom.js.map +1 -1
- package/package.json +4 -4
- package/src/server/providers/index.ts +1 -1
- package/src/server/providers/zoom.spec.ts +49 -0
- package/src/server/providers/zoom.ts +13 -1
|
@@ -2,7 +2,7 @@ export * from "./types.js";
|
|
|
2
2
|
export * from "./registry.js";
|
|
3
3
|
export { createGoogleCalendarProvider } from "./google-calendar.js";
|
|
4
4
|
export { createOffice365Provider } from "./office365.js";
|
|
5
|
-
export { createZoomProvider } from "./zoom.js";
|
|
5
|
+
export { createZoomProvider, ZoomProviderError } from "./zoom.js";
|
|
6
6
|
export { createTeamsProvider } from "./teams.js";
|
|
7
7
|
export type { TeamsProviderConfig } from "./teams.js";
|
|
8
8
|
export { createDailyVideoProvider } from "./builtin-video.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -2,7 +2,7 @@ export * from "./types.js";
|
|
|
2
2
|
export * from "./registry.js";
|
|
3
3
|
export { createGoogleCalendarProvider } from "./google-calendar.js";
|
|
4
4
|
export { createOffice365Provider } from "./office365.js";
|
|
5
|
-
export { createZoomProvider } from "./zoom.js";
|
|
5
|
+
export { createZoomProvider, ZoomProviderError } from "./zoom.js";
|
|
6
6
|
export { createTeamsProvider } from "./teams.js";
|
|
7
7
|
export { createDailyVideoProvider } from "./builtin-video.js";
|
|
8
8
|
export { googleMeetProvider } from "./google-meet.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -12,6 +12,10 @@
|
|
|
12
12
|
* - User info: GET https://api.zoom.us/v2/users/me (returns account_id + email)
|
|
13
13
|
*/
|
|
14
14
|
import type { VideoProvider } from "./types.js";
|
|
15
|
+
export declare class ZoomProviderError extends Error {
|
|
16
|
+
readonly statusCode: number;
|
|
17
|
+
constructor(statusCode: number, responseBody: string);
|
|
18
|
+
}
|
|
15
19
|
export interface ZoomProviderConfig {
|
|
16
20
|
clientId: string;
|
|
17
21
|
clientSecret: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zoom.d.ts","sourceRoot":"","sources":["../../../src/server/providers/zoom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D;;;;OAIG;IACH,YAAY,CAAC,EAAE,CACb,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,IAAI,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACvC,KACE,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAKD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"zoom.d.ts","sourceRoot":"","sources":["../../../src/server/providers/zoom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,qBAAa,iBAAkB,SAAQ,KAAK;IAExC,QAAQ,CAAC,UAAU,EAAE,MAAM;IAD7B,YACW,UAAU,EAAE,MAAM,EAC3B,YAAY,EAAE,MAAM,EAIrB;CACF;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D;;;;OAIG;IACH,YAAY,CAAC,EAAE,CACb,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,IAAI,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACvC,KACE,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAKD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,aAAa,CAsI5E"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
export class ZoomProviderError extends Error {
|
|
2
|
+
statusCode;
|
|
3
|
+
constructor(statusCode, responseBody) {
|
|
4
|
+
super(`Zoom ${statusCode}: ${responseBody}`);
|
|
5
|
+
this.statusCode = statusCode;
|
|
6
|
+
this.name = "ZoomProviderError";
|
|
7
|
+
}
|
|
8
|
+
}
|
|
1
9
|
// Minimum scope needed to create + read meetings on the user's behalf.
|
|
2
10
|
const SCOPES = ["meeting:write", "meeting:read", "user:read"];
|
|
3
11
|
export function createZoomProvider(config) {
|
|
@@ -88,8 +96,9 @@ export function createZoomProvider(config) {
|
|
|
88
96
|
if (res.status === 401 || res.status === 403) {
|
|
89
97
|
await config.markInvalid?.(credentialId);
|
|
90
98
|
}
|
|
91
|
-
if (!res.ok)
|
|
92
|
-
throw new
|
|
99
|
+
if (!res.ok) {
|
|
100
|
+
throw new ZoomProviderError(res.status, res.statusText);
|
|
101
|
+
}
|
|
93
102
|
const body = await res.json();
|
|
94
103
|
return {
|
|
95
104
|
meetingUrl: body.join_url,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zoom.js","sourceRoot":"","sources":["../../../src/server/providers/zoom.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"zoom.js","sourceRoot":"","sources":["../../../src/server/providers/zoom.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/scheduling",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0-nightly-20260926081002",
|
|
4
4
|
"description": "Scheduling primitives for agent-native apps — event types, availability, bookings, team scheduling, workflows, and routing forms.",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"nanoid": "^5.1.9",
|
|
57
57
|
"rrule": "^2.8.1",
|
|
58
58
|
"zod": "^4.3.6",
|
|
59
|
-
"@agent-native/toolkit": "^0.
|
|
59
|
+
"@agent-native/toolkit": "^0.22.0-nightly-20260926081002"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@tabler/icons-react": "3.44.0",
|
|
@@ -66,10 +66,10 @@
|
|
|
66
66
|
"react": "^19.2.5",
|
|
67
67
|
"typescript-7": "npm:typescript@^7.0.2",
|
|
68
68
|
"vitest": "^4.1.5",
|
|
69
|
-
"@agent-native/core": "0.
|
|
69
|
+
"@agent-native/core": "0.192.0-nightly-20260926081002"
|
|
70
70
|
},
|
|
71
71
|
"peerDependencies": {
|
|
72
|
-
"@agent-native/core": "
|
|
72
|
+
"@agent-native/core": "0.192.0-nightly-20260926081002",
|
|
73
73
|
"@tabler/icons-react": "^3.41.1",
|
|
74
74
|
"drizzle-orm": ">=0.45",
|
|
75
75
|
"react": ">=18",
|
|
@@ -2,7 +2,7 @@ export * from "./types.js";
|
|
|
2
2
|
export * from "./registry.js";
|
|
3
3
|
export { createGoogleCalendarProvider } from "./google-calendar.js";
|
|
4
4
|
export { createOffice365Provider } from "./office365.js";
|
|
5
|
-
export { createZoomProvider } from "./zoom.js";
|
|
5
|
+
export { createZoomProvider, ZoomProviderError } from "./zoom.js";
|
|
6
6
|
export { createTeamsProvider } from "./teams.js";
|
|
7
7
|
export type { TeamsProviderConfig } from "./teams.js";
|
|
8
8
|
export { createDailyVideoProvider } from "./builtin-video.js";
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
|
|
3
|
+
import { createZoomProvider, ZoomProviderError } from "./zoom.js";
|
|
4
|
+
|
|
5
|
+
afterEach(() => {
|
|
6
|
+
vi.unstubAllGlobals();
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
describe("Zoom provider request errors", () => {
|
|
10
|
+
it.each([400, 401, 403, 429, 500])(
|
|
11
|
+
"preserves the rejected HTTP status %s",
|
|
12
|
+
async (statusCode) => {
|
|
13
|
+
vi.stubGlobal(
|
|
14
|
+
"fetch",
|
|
15
|
+
vi
|
|
16
|
+
.fn()
|
|
17
|
+
.mockResolvedValue(
|
|
18
|
+
new Response("request rejected", { status: statusCode }),
|
|
19
|
+
),
|
|
20
|
+
);
|
|
21
|
+
const provider = createZoomProvider({
|
|
22
|
+
clientId: "client-id",
|
|
23
|
+
clientSecret: "client-secret",
|
|
24
|
+
getAccessToken: async () => "access-token",
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
await expect(
|
|
28
|
+
provider.createMeeting({
|
|
29
|
+
credentialId: "zoom-account",
|
|
30
|
+
booking: {
|
|
31
|
+
uid: "booking-1",
|
|
32
|
+
title: "Booking",
|
|
33
|
+
description: "",
|
|
34
|
+
startTime: "2026-09-25T23:30:00.000Z",
|
|
35
|
+
endTime: "2026-09-26T00:00:00.000Z",
|
|
36
|
+
timezone: "America/Los_Angeles",
|
|
37
|
+
hostEmail: "host@example.com",
|
|
38
|
+
attendees: [],
|
|
39
|
+
iCalUid: "ical-1",
|
|
40
|
+
iCalSequence: 0,
|
|
41
|
+
},
|
|
42
|
+
}),
|
|
43
|
+
).rejects.toMatchObject<Partial<ZoomProviderError>>({
|
|
44
|
+
name: "ZoomProviderError",
|
|
45
|
+
statusCode,
|
|
46
|
+
});
|
|
47
|
+
},
|
|
48
|
+
);
|
|
49
|
+
});
|
|
@@ -13,6 +13,16 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import type { VideoProvider } from "./types.js";
|
|
15
15
|
|
|
16
|
+
export class ZoomProviderError extends Error {
|
|
17
|
+
constructor(
|
|
18
|
+
readonly statusCode: number,
|
|
19
|
+
responseBody: string,
|
|
20
|
+
) {
|
|
21
|
+
super(`Zoom ${statusCode}: ${responseBody}`);
|
|
22
|
+
this.name = "ZoomProviderError";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
16
26
|
export interface ZoomProviderConfig {
|
|
17
27
|
clientId: string;
|
|
18
28
|
clientSecret: string;
|
|
@@ -149,7 +159,9 @@ export function createZoomProvider(config: ZoomProviderConfig): VideoProvider {
|
|
|
149
159
|
if (res.status === 401 || res.status === 403) {
|
|
150
160
|
await config.markInvalid?.(credentialId);
|
|
151
161
|
}
|
|
152
|
-
if (!res.ok)
|
|
162
|
+
if (!res.ok) {
|
|
163
|
+
throw new ZoomProviderError(res.status, res.statusText);
|
|
164
|
+
}
|
|
153
165
|
const body = await res.json();
|
|
154
166
|
return {
|
|
155
167
|
meetingUrl: body.join_url,
|