@convex-dev/workos-authkit 0.2.9 → 0.3.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.
Files changed (42) hide show
  1. package/README.md +14 -5
  2. package/dist/client/index.d.ts +5 -0
  3. package/dist/client/index.d.ts.map +1 -1
  4. package/dist/client/index.js +3 -2
  5. package/dist/client/index.js.map +1 -1
  6. package/dist/component/_generated/api.d.ts +0 -1
  7. package/dist/component/_generated/api.d.ts.map +1 -1
  8. package/dist/component/_generated/api.js.map +1 -1
  9. package/dist/component/_generated/component.d.ts +0 -2
  10. package/dist/component/_generated/component.d.ts.map +1 -1
  11. package/dist/component/backfill.d.ts +6 -6
  12. package/dist/component/backfill.d.ts.map +1 -1
  13. package/dist/component/backfill.js +12 -5
  14. package/dist/component/backfill.js.map +1 -1
  15. package/dist/component/convex.config.d.ts.map +1 -1
  16. package/dist/component/convex.config.js +0 -2
  17. package/dist/component/convex.config.js.map +1 -1
  18. package/dist/component/lib.d.ts +7 -27
  19. package/dist/component/lib.d.ts.map +1 -1
  20. package/dist/component/lib.js +91 -112
  21. package/dist/component/lib.js.map +1 -1
  22. package/dist/component/schema.d.ts +13 -4
  23. package/dist/component/schema.d.ts.map +1 -1
  24. package/dist/component/schema.js +7 -14
  25. package/dist/component/schema.js.map +1 -1
  26. package/dist/validators.d.ts +30 -0
  27. package/dist/validators.d.ts.map +1 -0
  28. package/dist/validators.js +17 -0
  29. package/dist/validators.js.map +1 -0
  30. package/package.json +7 -7
  31. package/src/client/index.test.ts +18 -0
  32. package/src/client/index.ts +10 -2
  33. package/src/component/_generated/api.ts +0 -1
  34. package/src/component/_generated/component.ts +0 -2
  35. package/src/component/backfill.test.ts +19 -11
  36. package/src/component/backfill.ts +25 -18
  37. package/src/component/convex.config.ts +0 -2
  38. package/src/component/lib.test.ts +248 -11
  39. package/src/component/lib.ts +95 -124
  40. package/src/component/schema.ts +7 -14
  41. package/src/test.ts +4 -3
  42. package/src/validators.ts +17 -0
@@ -1,14 +1,9 @@
1
- import { v } from "convex/values";
2
- import { internalAction, internalMutation, internalQuery, mutation, query, } from "./_generated/server.js";
3
- import { components, internal } from "./_generated/api.js";
4
- import { omit, withoutSystemFields } from "convex-helpers";
5
- import { WorkOS } from "@workos-inc/node";
6
- import { Workpool } from "@convex-dev/workpool";
7
- import schema from "./schema.js";
1
+ import {} from "@workos-inc/node";
2
+ import { withoutSystemFields } from "convex-helpers";
8
3
  import { parse } from "convex-helpers/validators";
9
- const eventWorkpool = new Workpool(components.eventWorkpool, {
10
- maxParallelism: 1,
11
- });
4
+ import { v } from "convex/values";
5
+ import { vUser } from "../validators.js";
6
+ import { mutation, query } from "./_generated/server.js";
12
7
  export const vEvent = v.object({
13
8
  id: v.string(),
14
9
  createdAt: v.string(),
@@ -16,10 +11,29 @@ export const vEvent = v.object({
16
11
  data: v.record(v.string(), v.any()),
17
12
  context: v.optional(v.record(v.string(), v.any())),
18
13
  });
14
+ /**
15
+ * Returns the WorkOS user id an event is about, or undefined when the
16
+ * event is about something other than a user.
17
+ */
18
+ function eventUserId(event) {
19
+ const data = event.data;
20
+ if (typeof data.userId === "string") {
21
+ return data.userId;
22
+ }
23
+ const isUserEvent = event.event === "user.created" ||
24
+ event.event === "user.updated" ||
25
+ event.event === "user.deleted";
26
+ if (isUserEvent && typeof data.id === "string") {
27
+ return data.id;
28
+ }
29
+ return undefined;
30
+ }
19
31
  async function processEventHandler(ctx, args) {
20
32
  if (args.logLevel === "DEBUG") {
21
33
  console.log("processing event", args.event);
22
34
  }
35
+ const event = args.event;
36
+ const userId = eventUserId(args.event);
23
37
  const dbEvent = await ctx.db
24
38
  .query("events")
25
39
  .withIndex("eventId", (q) => q.eq("eventId", args.event.id))
@@ -29,73 +43,95 @@ async function processEventHandler(ctx, args) {
29
43
  return;
30
44
  }
31
45
  await ctx.db.insert("events", {
46
+ userId,
32
47
  eventId: args.event.id,
33
48
  event: args.event.event,
34
49
  updatedAt: args.event.data.updatedAt,
35
50
  });
36
- const event = args.event;
51
+ let eventForCallback = event.event;
52
+ let dataForCallback = args.event.data;
37
53
  switch (event.event) {
38
- case "user.created": {
39
- const data = omit(event.data, ["object"]);
40
- const existingUser = await ctx.db
41
- .query("users")
42
- .withIndex("id", (q) => q.eq("id", data.id))
43
- .unique();
44
- if (existingUser) {
45
- console.warn("user already exists", data.id);
46
- return;
47
- }
48
- await ctx.db.insert("users", data);
49
- break;
50
- }
54
+ case "user.created":
51
55
  case "user.updated": {
52
- const data = omit(event.data, ["object"]);
53
- const user = await ctx.db
56
+ const data = parse(vUser, event.data);
57
+ const existingUser = await ctx.db
54
58
  .query("users")
55
59
  .withIndex("id", (q) => q.eq("id", data.id))
56
60
  .unique();
57
- if (!user) {
58
- // The update may have been delivered before the create; the
59
- // payload is the full user object, so insert it. The create
60
- // no-ops on arrival via the existing-user guard above.
61
- console.warn("user not found for update, inserting", data.id);
61
+ if (!existingUser) {
62
+ const deletedUser = await ctx.db
63
+ .query("deletedUsers")
64
+ .withIndex("id", (q) => q.eq("id", data.id))
65
+ .unique();
66
+ if (deletedUser) {
67
+ console.warn("user already deleted, skipping", event.event, data.id);
68
+ return;
69
+ }
62
70
  await ctx.db.insert("users", data);
63
- break;
71
+ if (event.event === "user.updated") {
72
+ // WorkOS can deliver the update before the create. The update
73
+ // payload holds the whole user, so it is safe to insert.
74
+ console.warn("user not found for update, inserting", data.id);
75
+ eventForCallback = "user.created";
76
+ }
64
77
  }
65
- if (user.updatedAt >= data.updatedAt) {
66
- console.warn(`user already updated for event ${event.id}, skipping`);
67
- return;
78
+ else {
79
+ if (event.event === "user.created") {
80
+ console.warn("user already exists", data.id);
81
+ // The callback already fired as user.created when this user was
82
+ // first inserted, so skip it here.
83
+ return;
84
+ }
85
+ else if (existingUser.updatedAt >= data.updatedAt) {
86
+ console.warn(`user already updated for event ${event.id}, skipping`);
87
+ return;
88
+ }
89
+ await ctx.db.patch("users", existingUser._id, data);
68
90
  }
69
- await ctx.db.patch("users", user._id, data);
70
91
  break;
71
92
  }
72
93
  case "user.deleted": {
73
- const data = omit(event.data, ["object"]);
94
+ // Only the id is needed, so a trimmed payload should not fail the webhook.
95
+ const { id } = parse(v.object({ id: v.string() }), event.data);
96
+ // Record the deletion even if the user was never inserted locally, so a
97
+ // late user.created or user.updated for this user is skipped.
98
+ const deletedUser = await ctx.db
99
+ .query("deletedUsers")
100
+ .withIndex("id", (q) => q.eq("id", id))
101
+ .unique();
102
+ if (!deletedUser) {
103
+ await ctx.db.insert("deletedUsers", { id });
104
+ }
74
105
  const user = await ctx.db
75
106
  .query("users")
76
- .withIndex("id", (q) => q.eq("id", data.id))
107
+ .withIndex("id", (q) => q.eq("id", id))
77
108
  .unique();
78
109
  if (!user) {
79
- console.warn("user not found", data.id);
80
- return;
110
+ console.warn("user not found, forwarding deletion", id);
111
+ break;
81
112
  }
82
113
  await ctx.db.delete("users", user._id);
114
+ // The callback data is typed as a whole user, so fill anything the
115
+ // payload left out from the stored user.
116
+ dataForCallback = {
117
+ ...withoutSystemFields(user),
118
+ object: "user",
119
+ ...args.event.data,
120
+ };
83
121
  break;
84
122
  }
85
123
  }
86
124
  if (args.onEventHandle) {
87
125
  await ctx.runMutation(args.onEventHandle, {
88
- event: args.event.event,
89
- data: args.event.data,
126
+ event: eventForCallback,
127
+ data: dataForCallback,
90
128
  });
91
129
  }
92
130
  }
93
131
  export const onWebhookEvent = mutation({
94
132
  args: {
95
- apiKey: v.string(),
96
133
  event: vEvent,
97
134
  onEventHandle: v.optional(v.string()),
98
- eventTypes: v.optional(v.array(v.string())),
99
135
  logLevel: v.optional(v.literal("DEBUG")),
100
136
  },
101
137
  returns: v.null(),
@@ -106,94 +142,37 @@ export const onWebhookEvent = mutation({
106
142
  return null;
107
143
  },
108
144
  });
109
- export const getCursor = internalQuery({
110
- args: {},
111
- returns: v.union(v.string(), v.null()),
112
- handler: async (ctx) => {
113
- const lastProcessedEvent = await ctx.db
114
- .query("events")
115
- .order("desc")
116
- .first();
117
- return lastProcessedEvent?.eventId;
118
- },
119
- });
120
- export const updateEvents = internalAction({
121
- args: {
122
- apiKey: v.string(),
123
- onEventHandle: v.optional(v.string()),
124
- eventTypes: v.optional(v.array(v.string())),
125
- logLevel: v.optional(v.literal("DEBUG")),
126
- },
127
- handler: async (ctx, args) => {
128
- // Cancel other pending workpool jobs since this run will
129
- // process all available events from the WorkOS API.
130
- await eventWorkpool.cancelAll(ctx);
131
- const workos = new WorkOS(args.apiKey);
132
- const cursor = await ctx.runQuery(internal.lib.getCursor);
133
- let nextCursor = cursor ?? undefined;
134
- const eventTypes = [
135
- "user.created",
136
- "user.updated",
137
- "user.deleted",
138
- ...(args.eventTypes ?? []),
139
- ];
140
- // No cursor should mean we haven't handled any events - set
141
- // a start time of 5 minutes ago
142
- let rangeStart = nextCursor
143
- ? undefined
144
- : new Date(Date.now() - 1000 * 60 * 5).toISOString();
145
- do {
146
- const { data, listMetadata } = await workos.events.listEvents({
147
- events: eventTypes,
148
- after: nextCursor,
149
- rangeStart,
150
- });
151
- for (const event of data) {
152
- await ctx.runMutation(internal.lib.processEvent, {
153
- event: parse(vEvent, event),
154
- logLevel: args.logLevel,
155
- onEventHandle: args.onEventHandle,
156
- });
157
- }
158
- nextCursor = listMetadata.after ?? undefined;
159
- rangeStart = undefined;
160
- } while (nextCursor);
161
- },
162
- });
163
- export const processEvent = internalMutation({
164
- args: {
165
- event: vEvent,
166
- logLevel: v.optional(v.literal("DEBUG")),
167
- onEventHandle: v.optional(v.string()),
168
- },
169
- handler: async (ctx, args) => {
170
- await processEventHandler(ctx, args);
171
- },
172
- });
173
145
  export const getAuthUser = query({
174
146
  args: {
175
147
  id: v.string(),
176
148
  },
177
- returns: v.union(schema.tables.users.validator, v.null()),
149
+ returns: v.union(vUser, v.null()),
178
150
  handler: async (ctx, args) => {
179
151
  const user = await ctx.db
180
152
  .query("users")
181
153
  .withIndex("id", (q) => q.eq("id", args.id))
182
154
  .unique();
183
- return user ? withoutSystemFields(user) : null;
155
+ return publicUser(user);
184
156
  },
185
157
  });
186
158
  export const getAuthUserByExternalId = query({
187
159
  args: {
188
160
  externalId: v.string(),
189
161
  },
190
- returns: v.union(schema.tables.users.validator, v.null()),
162
+ returns: v.union(vUser, v.null()),
191
163
  handler: async (ctx, args) => {
192
164
  const user = await ctx.db
193
165
  .query("users")
194
166
  .withIndex("externalId", (q) => q.eq("externalId", args.externalId))
195
167
  .unique();
196
- return user ? withoutSystemFields(user) : null;
168
+ return publicUser(user);
197
169
  },
198
170
  });
171
+ /** Drops the Convex system fields so the user matches the public vUser shape. */
172
+ function publicUser(user) {
173
+ if (!user) {
174
+ return null;
175
+ }
176
+ return withoutSystemFields(user);
177
+ }
199
178
  //# sourceMappingURL=lib.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/component/lib.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/component/lib.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,15 @@
1
1
  declare const _default: import("convex/server").SchemaDefinition<{
2
2
  events: import("convex/server").TableDefinition<import("convex/values").VObject<{
3
3
  updatedAt?: string | undefined;
4
+ userId?: string | undefined;
4
5
  event: string;
5
6
  eventId: string;
6
7
  }, {
7
8
  eventId: import("convex/values").VString<string, "required">;
8
9
  event: import("convex/values").VString<string, "required">;
9
10
  updatedAt: import("convex/values").VString<string | undefined, "optional">;
10
- }, "required", "event" | "eventId" | "updatedAt">, {
11
+ userId: import("convex/values").VString<string | undefined, "optional">;
12
+ }, "required", "updatedAt" | "event" | "eventId" | "userId">, {
11
13
  eventId: ["eventId", "_creationTime"];
12
14
  }, {}, {}>;
13
15
  backfillState: import("convex/server").TableDefinition<import("convex/values").VObject<{
@@ -16,19 +18,19 @@ declare const _default: import("convex/server").SchemaDefinition<{
16
18
  apiKey: import("convex/values").VString<string, "required">;
17
19
  }, "required", "apiKey">, {}, {}, {}>;
18
20
  users: import("convex/server").TableDefinition<import("convex/values").VObject<{
19
- externalId?: string | null | undefined;
20
21
  name?: string | null | undefined;
21
22
  firstName?: string | null | undefined;
22
23
  lastName?: string | null | undefined;
23
24
  profilePictureUrl?: string | null | undefined;
24
25
  lastSignInAt?: string | null | undefined;
26
+ externalId?: string | null | undefined;
25
27
  locale?: string | null | undefined;
26
28
  id: string;
27
- updatedAt: string;
28
29
  email: string;
29
30
  emailVerified: boolean;
30
31
  metadata: Record<string, any>;
31
32
  createdAt: string;
33
+ updatedAt: string;
32
34
  }, {
33
35
  id: import("convex/values").VString<string, "required">;
34
36
  email: import("convex/values").VString<string, "required">;
@@ -43,10 +45,17 @@ declare const _default: import("convex/server").SchemaDefinition<{
43
45
  locale: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VNull<null, "required">, import("convex/values").VString<string, "required">], "optional", never>;
44
46
  createdAt: import("convex/values").VString<string, "required">;
45
47
  updatedAt: import("convex/values").VString<string, "required">;
46
- }, "required", "id" | "externalId" | "updatedAt" | "email" | "name" | "firstName" | "lastName" | "emailVerified" | "profilePictureUrl" | "lastSignInAt" | "metadata" | "locale" | "createdAt" | `metadata.${string}`>, {
48
+ }, "required", "id" | "email" | "name" | "firstName" | "lastName" | "emailVerified" | "profilePictureUrl" | "lastSignInAt" | "externalId" | "metadata" | "locale" | "createdAt" | "updatedAt" | `metadata.${string}`>, {
47
49
  id: ["id", "_creationTime"];
48
50
  externalId: ["externalId", "_creationTime"];
49
51
  }, {}, {}>;
52
+ deletedUsers: import("convex/server").TableDefinition<import("convex/values").VObject<{
53
+ id: string;
54
+ }, {
55
+ id: import("convex/values").VString<string, "required">;
56
+ }, "required", "id">, {
57
+ id: ["id", "_creationTime"];
58
+ }, {}, {}>;
50
59
  }, true>;
51
60
  export default _default;
52
61
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,wBAwBG"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,wBAgBG"}
@@ -1,28 +1,21 @@
1
1
  import { defineSchema, defineTable } from "convex/server";
2
2
  import { v } from "convex/values";
3
+ import { vUser } from "../validators.js";
3
4
  export default defineSchema({
4
5
  events: defineTable({
5
6
  eventId: v.string(),
6
7
  event: v.string(),
7
8
  updatedAt: v.optional(v.string()),
9
+ userId: v.optional(v.string()),
8
10
  }).index("eventId", ["eventId"]),
9
11
  backfillState: defineTable({
10
12
  apiKey: v.string(),
11
13
  }),
12
- users: defineTable({
14
+ users: defineTable(vUser)
15
+ .index("id", ["id"])
16
+ .index("externalId", ["externalId"]),
17
+ deletedUsers: defineTable({
13
18
  id: v.string(),
14
- email: v.string(),
15
- name: v.optional(v.union(v.null(), v.string())),
16
- firstName: v.optional(v.union(v.null(), v.string())),
17
- lastName: v.optional(v.union(v.null(), v.string())),
18
- emailVerified: v.boolean(),
19
- profilePictureUrl: v.optional(v.union(v.null(), v.string())),
20
- lastSignInAt: v.optional(v.union(v.null(), v.string())),
21
- externalId: v.optional(v.union(v.null(), v.string())),
22
- metadata: v.record(v.string(), v.any()),
23
- locale: v.optional(v.union(v.null(), v.string())),
24
- createdAt: v.string(),
25
- updatedAt: v.string(),
26
- }).index("id", ["id"]).index("externalId", ["externalId"]),
19
+ }).index("id", ["id"]),
27
20
  });
28
21
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,eAAe,YAAY,CAAC;IAC1B,MAAM,EAAE,WAAW,CAAC;QAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAClC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;IAChC,aAAa,EAAE,WAAW,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KACnB,CAAC;IACF,KAAK,EAAE,WAAW,CAAC;QACjB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACpD,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACnD,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE;QAC1B,iBAAiB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACvD,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QACvC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACjD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,YAAY,CAAC,CAAC;CAC3D,CAAC,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,eAAe,YAAY,CAAC;IAC1B,MAAM,EAAE,WAAW,CAAC;QAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC/B,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;IAChC,aAAa,EAAE,WAAW,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KACnB,CAAC;IACF,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC;SACtB,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;SACnB,KAAK,CAAC,YAAY,EAAE,CAAC,YAAY,CAAC,CAAC;IACtC,YAAY,EAAE,WAAW,CAAC;QACxB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;KACf,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;CACvB,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ export declare const vUser: import("convex/values").VObject<{
2
+ name?: string | null | undefined;
3
+ firstName?: string | null | undefined;
4
+ lastName?: string | null | undefined;
5
+ profilePictureUrl?: string | null | undefined;
6
+ lastSignInAt?: string | null | undefined;
7
+ externalId?: string | null | undefined;
8
+ locale?: string | null | undefined;
9
+ id: string;
10
+ email: string;
11
+ emailVerified: boolean;
12
+ metadata: Record<string, any>;
13
+ createdAt: string;
14
+ updatedAt: string;
15
+ }, {
16
+ id: import("convex/values").VString<string, "required">;
17
+ email: import("convex/values").VString<string, "required">;
18
+ name: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VNull<null, "required">, import("convex/values").VString<string, "required">], "optional", never>;
19
+ firstName: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VNull<null, "required">, import("convex/values").VString<string, "required">], "optional", never>;
20
+ lastName: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VNull<null, "required">, import("convex/values").VString<string, "required">], "optional", never>;
21
+ emailVerified: import("convex/values").VBoolean<boolean, "required">;
22
+ profilePictureUrl: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VNull<null, "required">, import("convex/values").VString<string, "required">], "optional", never>;
23
+ lastSignInAt: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VNull<null, "required">, import("convex/values").VString<string, "required">], "optional", never>;
24
+ externalId: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VNull<null, "required">, import("convex/values").VString<string, "required">], "optional", never>;
25
+ metadata: import("convex/values").VRecord<Record<string, any>, import("convex/values").VString<string, "required">, import("convex/values").VAny<any, "required", string>, "required", string>;
26
+ locale: import("convex/values").VUnion<string | null | undefined, [import("convex/values").VNull<null, "required">, import("convex/values").VString<string, "required">], "optional", never>;
27
+ createdAt: import("convex/values").VString<string, "required">;
28
+ updatedAt: import("convex/values").VString<string, "required">;
29
+ }, "required", "id" | "email" | "name" | "firstName" | "lastName" | "emailVerified" | "profilePictureUrl" | "lastSignInAt" | "externalId" | "metadata" | "locale" | "createdAt" | "updatedAt" | `metadata.${string}`>;
30
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;qNAchB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { v } from "convex/values";
2
+ export const vUser = v.object({
3
+ id: v.string(),
4
+ email: v.string(),
5
+ name: v.optional(v.union(v.null(), v.string())),
6
+ firstName: v.optional(v.union(v.null(), v.string())),
7
+ lastName: v.optional(v.union(v.null(), v.string())),
8
+ emailVerified: v.boolean(),
9
+ profilePictureUrl: v.optional(v.union(v.null(), v.string())),
10
+ lastSignInAt: v.optional(v.union(v.null(), v.string())),
11
+ externalId: v.optional(v.union(v.null(), v.string())),
12
+ metadata: v.record(v.string(), v.any()),
13
+ locale: v.optional(v.union(v.null(), v.string())),
14
+ createdAt: v.string(),
15
+ updatedAt: v.string(),
16
+ });
17
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACnD,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE;IAC1B,iBAAiB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5D,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;IACvC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "bugs": {
7
7
  "url": "https://github.com/get-convex/workos-authkit/issues"
8
8
  },
9
- "version": "0.2.9",
9
+ "version": "0.3.0",
10
10
  "license": "Apache-2.0",
11
11
  "keywords": [
12
12
  "convex",
@@ -67,7 +67,7 @@
67
67
  },
68
68
  "devDependencies": {
69
69
  "@arethetypeswrong/cli": "0.18.5",
70
- "@convex-dev/eslint-plugin": "2.0.0",
70
+ "@convex-dev/eslint-plugin": "5.0.0",
71
71
  "@edge-runtime/vm": "5.0.0",
72
72
  "@eslint/eslintrc": "3.3.6",
73
73
  "@eslint/js": "9.39.5",
@@ -76,8 +76,8 @@
76
76
  "@types/react-dom": "19.2.3",
77
77
  "@vitejs/plugin-react": "6.0.4",
78
78
  "chokidar-cli": "3.0.0",
79
- "convex": "1.44.0",
80
- "convex-test": "0.0.54",
79
+ "convex": "1.46.0",
80
+ "convex-test": "0.0.62",
81
81
  "eslint": "9.39.5",
82
82
  "eslint-plugin-react": "7.37.5",
83
83
  "eslint-plugin-react-hooks": "7.1.1",
@@ -90,15 +90,15 @@
90
90
  "typescript": "5.9.3",
91
91
  "typescript-eslint": "8.65.0",
92
92
  "vite": "8.1.5",
93
- "vitest": "4.1.10"
93
+ "vitest": "5.0.0"
94
94
  },
95
95
  "types": "./dist/client/index.d.ts",
96
96
  "module": "./dist/client/index.js",
97
97
  "dependencies": {
98
98
  "@convex-dev/workflow": "^0.4.0",
99
99
  "@convex-dev/workos": "^0.0.3",
100
- "@convex-dev/workpool": "^0.4.0",
101
- "convex-helpers": "^0.1.111",
100
+ "@convex-dev/workpool": "^0.4.4",
101
+ "convex-helpers": "^0.1.128",
102
102
  "type-fest": "^5.1.0"
103
103
  }
104
104
  }
@@ -59,6 +59,24 @@ describe("AuthKit constructor", () => {
59
59
  expect.objectContaining({ clientId: "client_test" })
60
60
  );
61
61
  });
62
+
63
+ test("warns when additionalEventTypes is set", () => {
64
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => {});
65
+
66
+ new AuthKit(fakeComponent, { additionalEventTypes: ["session.created"] });
67
+
68
+ expect(warnSpy).toHaveBeenCalledTimes(1);
69
+ warnSpy.mockRestore();
70
+ });
71
+
72
+ test("does not warn when additionalEventTypes is unset", () => {
73
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => {});
74
+
75
+ new AuthKit(fakeComponent);
76
+
77
+ expect(warnSpy).not.toHaveBeenCalled();
78
+ warnSpy.mockRestore();
79
+ });
62
80
  });
63
81
 
64
82
  describe("AuthKit.getAuthConfigProviders", () => {
@@ -33,6 +33,11 @@ type Options = {
33
33
  apiHostname?: string;
34
34
  webhookSecret?: string;
35
35
  webhookPath?: string;
36
+ /**
37
+ * @deprecated Unused. Events arrive by webhook, so select the event
38
+ * types in the WorkOS webhook configuration and add a handler for each
39
+ * in `events()`.
40
+ */
36
41
  additionalEventTypes?: WorkOSEvent["event"][];
37
42
  actionSecret?: string;
38
43
  logLevel?: "DEBUG";
@@ -71,6 +76,11 @@ export class AuthKit<DataModel extends GenericDataModel> {
71
76
  public component: ComponentApi,
72
77
  public options?: Options
73
78
  ) {
79
+ if (options?.additionalEventTypes?.length) {
80
+ console.warn(
81
+ "additionalEventTypes is deprecated and ignored. Select event types in your WorkOS webhook configuration and add a handler for each in events()."
82
+ );
83
+ }
74
84
  const missingEnvVars: string[] = [];
75
85
  const clientId = requireEnvVar(
76
86
  options?.clientId ?? process.env.WORKOS_CLIENT_ID,
@@ -257,12 +267,10 @@ export class AuthKit<DataModel extends GenericDataModel> {
257
267
  console.log("received event", event);
258
268
  }
259
269
  await ctx.runMutation(this.component.lib.onWebhookEvent, {
260
- apiKey: this.config.apiKey,
261
270
  event: parse(vEvent, event),
262
271
  onEventHandle: this.config.authFunctions?.authKitEvent
263
272
  ? await createFunctionHandle(this.config.authFunctions.authKitEvent)
264
273
  : undefined,
265
- eventTypes: this.config.additionalEventTypes,
266
274
  logLevel: this.config.logLevel,
267
275
  });
268
276
  return new Response("OK", { status: 200 });
@@ -50,6 +50,5 @@ export const internal: FilterApi<
50
50
  > = anyApi as any;
51
51
 
52
52
  export const components = componentsGeneric() as unknown as {
53
- eventWorkpool: import("@convex-dev/workpool/_generated/component.js").ComponentApi<"eventWorkpool">;
54
53
  backfillWorkflow: import("@convex-dev/workflow/_generated/component.js").ComponentApi<"backfillWorkflow">;
55
54
  };
@@ -79,7 +79,6 @@ export type ComponentApi<Name extends string | undefined = string | undefined> =
79
79
  "mutation",
80
80
  "internal",
81
81
  {
82
- apiKey: string;
83
82
  event: {
84
83
  context?: Record<string, any>;
85
84
  createdAt: string;
@@ -87,7 +86,6 @@ export type ComponentApi<Name extends string | undefined = string | undefined> =
87
86
  event: string;
88
87
  id: string;
89
88
  };
90
- eventTypes?: Array<string>;
91
89
  logLevel?: "DEBUG";
92
90
  onEventHandle?: string;
93
91
  },