@better-auth/infra 0.2.7 → 0.2.8

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/index.d.mts CHANGED
@@ -753,7 +753,7 @@ interface DashIdRow {
753
753
  id: string;
754
754
  }
755
755
  //#endregion
756
- //#region ../../node_modules/.bun/@better-auth+scim@1.6.9+b412fc3af1df8c24/node_modules/@better-auth/scim/dist/index.d.mts
756
+ //#region ../../node_modules/.bun/@better-auth+scim@1.6.9+5243a6431671e89e/node_modules/@better-auth/scim/dist/index.d.mts
757
757
  //#region src/types.d.ts
758
758
  interface SCIMProvider {
759
759
  id: string;
@@ -4369,7 +4369,13 @@ interface DashCompleteInvitationResponse {
4369
4369
  //#endregion
4370
4370
  //#region src/routes/organizations/types.d.ts
4371
4371
  type DashOrganizationUpdateResponse = Organization;
4372
- type DashOrganizationMemberUser = Pick<User, "id" | "name" | "email" | "image">;
4372
+ /** Mirrors joined `user` row fields exposed on dash org APIs. Omitted when the user has no email (e.g. phone-only). */
4373
+ type DashOrganizationMemberUser = {
4374
+ id: string;
4375
+ name: string;
4376
+ email?: string;
4377
+ image: string | null;
4378
+ };
4373
4379
  type DashOrganizationDetailResponse = Organization & {
4374
4380
  memberCount: number;
4375
4381
  members?: DashOrganizationMemberUser[];
package/dist/index.mjs CHANGED
@@ -535,7 +535,7 @@ const initSessionEvents = (tracker) => {
535
535
  eventData: {
536
536
  userId: session.userId,
537
537
  userName: user.name,
538
- userEmail: user.email,
538
+ userEmail: user.email ?? "unknown",
539
539
  sessionId: session.id,
540
540
  triggeredBy: trigger.triggeredBy,
541
541
  triggerContext: trigger.triggerContext
@@ -621,10 +621,10 @@ const initUserEvents = (tracker) => {
621
621
  trackEvent({
622
622
  eventKey: user.id,
623
623
  eventType: EVENT_TYPES.USER_CREATED,
624
- eventDisplayName: `${user.name || user.email} signed up`,
624
+ eventDisplayName: `${user.name || user.email || "unknown"} signed up`,
625
625
  eventData: {
626
626
  userId: user.id,
627
- userEmail: user.email,
627
+ userEmail: user.email ?? "unknown",
628
628
  userName: user.name,
629
629
  triggeredBy: trigger.triggeredBy,
630
630
  triggerContext: trigger.triggerContext
@@ -642,7 +642,7 @@ const initUserEvents = (tracker) => {
642
642
  eventDisplayName: "User deleted",
643
643
  eventData: {
644
644
  userId: user.id,
645
- userEmail: user.email,
645
+ userEmail: user.email ?? "unknown",
646
646
  userName: user.name,
647
647
  triggeredBy: trigger.triggeredBy,
648
648
  triggerContext: trigger.triggerContext
@@ -660,7 +660,7 @@ const initUserEvents = (tracker) => {
660
660
  eventDisplayName: "Profile updated",
661
661
  eventData: {
662
662
  userId: user.id,
663
- userEmail: user.email,
663
+ userEmail: user.email ?? "unknown",
664
664
  userName: user.name,
665
665
  updatedFields: Object.keys(ctx?.body || {}),
666
666
  triggeredBy: trigger.triggeredBy,
@@ -679,7 +679,7 @@ const initUserEvents = (tracker) => {
679
679
  eventDisplayName: "Profile image updated",
680
680
  eventData: {
681
681
  userId: user.id,
682
- userEmail: user.email,
682
+ userEmail: user.email ?? "unknown",
683
683
  userName: user.name,
684
684
  triggeredBy: trigger.triggeredBy,
685
685
  triggerContext: trigger.triggerContext
@@ -699,7 +699,7 @@ const initUserEvents = (tracker) => {
699
699
  eventDisplayName: `User banned${reasonSuffix}${expiresSuffix}`,
700
700
  eventData: {
701
701
  userId: user.id,
702
- userEmail: user.email,
702
+ userEmail: user.email ?? "unknown",
703
703
  userName: user.name,
704
704
  banned: user.banned,
705
705
  banReason: user.banReason,
@@ -720,7 +720,7 @@ const initUserEvents = (tracker) => {
720
720
  eventDisplayName: "User unbanned",
721
721
  eventData: {
722
722
  userId: user.id,
723
- userEmail: user.email,
723
+ userEmail: user.email ?? "unknown",
724
724
  userName: user.name,
725
725
  banned: user.banned,
726
726
  triggeredBy: trigger.triggeredBy,
@@ -739,7 +739,7 @@ const initUserEvents = (tracker) => {
739
739
  eventDisplayName: "Email verified",
740
740
  eventData: {
741
741
  userId: user.id,
742
- userEmail: user.email,
742
+ userEmail: user.email ?? "unknown",
743
743
  userName: user.name,
744
744
  triggeredBy: trigger.triggeredBy,
745
745
  triggerContext: trigger.triggerContext
@@ -2356,7 +2356,7 @@ const initInvitationEvents = (tracker) => {
2356
2356
  inviteeTeamId: invitation.teamId,
2357
2357
  inviterId: inviter.id,
2358
2358
  inviterName: inviter.name,
2359
- inviterEmail: inviter.email,
2359
+ inviterEmail: inviter.email ?? "unknown",
2360
2360
  triggeredBy: trigger.triggeredBy,
2361
2361
  triggerContext: trigger.triggerContext
2362
2362
  }
@@ -2376,7 +2376,7 @@ const initInvitationEvents = (tracker) => {
2376
2376
  inviteeRole: invitation.role,
2377
2377
  inviteeTeamId: invitation.teamId,
2378
2378
  acceptedById: acceptedBy.id,
2379
- acceptedByEmail: acceptedBy.email,
2379
+ acceptedByEmail: acceptedBy.email ?? "unknown",
2380
2380
  acceptedByName: acceptedBy.name,
2381
2381
  memberId: member.id,
2382
2382
  memberRole: member.role,
@@ -2399,7 +2399,7 @@ const initInvitationEvents = (tracker) => {
2399
2399
  inviteeRole: invitation.role,
2400
2400
  inviteeTeamId: invitation.teamId,
2401
2401
  rejectedById: rejectedBy.id,
2402
- rejectedByEmail: rejectedBy.email,
2402
+ rejectedByEmail: rejectedBy.email ?? "unknown",
2403
2403
  rejectedByName: rejectedBy.name,
2404
2404
  triggeredBy: trigger.triggeredBy,
2405
2405
  triggerContext: trigger.triggerContext
@@ -2421,7 +2421,7 @@ const initInvitationEvents = (tracker) => {
2421
2421
  inviteeTeamId: invitation.teamId,
2422
2422
  cancelledById: cancelledBy.id,
2423
2423
  cancelledByName: cancelledBy.name,
2424
- cancelledByEmail: cancelledBy.email,
2424
+ cancelledByEmail: cancelledBy.email ?? "unknown",
2425
2425
  triggeredBy: trigger.triggeredBy,
2426
2426
  triggerContext: trigger.triggerContext
2427
2427
  }
@@ -2451,7 +2451,7 @@ const initMemberEvents = (tracker) => {
2451
2451
  memberName: user.name,
2452
2452
  role: member.role,
2453
2453
  memberId: member.id,
2454
- memberEmail: user.email,
2454
+ memberEmail: user.email ?? "unknown",
2455
2455
  triggeredBy: trigger.triggeredBy,
2456
2456
  triggerContext: trigger.triggerContext
2457
2457
  }
@@ -2470,7 +2470,7 @@ const initMemberEvents = (tracker) => {
2470
2470
  memberName: user.name,
2471
2471
  role: member.role,
2472
2472
  memberId: member.id,
2473
- memberEmail: user.email,
2473
+ memberEmail: user.email ?? "unknown",
2474
2474
  triggeredBy: trigger.triggeredBy,
2475
2475
  triggerContext: trigger.triggerContext
2476
2476
  }
@@ -2490,7 +2490,7 @@ const initMemberEvents = (tracker) => {
2490
2490
  newRole: member.role,
2491
2491
  oldRole: previousRole,
2492
2492
  memberId: member.id,
2493
- memberEmail: user.email,
2493
+ memberEmail: user.email ?? "unknown",
2494
2494
  triggeredBy: trigger.triggeredBy,
2495
2495
  triggerContext: trigger.triggerContext
2496
2496
  }
@@ -2779,7 +2779,7 @@ const jwtValidateMiddleware = (options) => {
2779
2779
  };
2780
2780
  //#endregion
2781
2781
  //#region src/version.ts
2782
- const PLUGIN_VERSION = "0.2.7";
2782
+ const PLUGIN_VERSION = "0.2.8";
2783
2783
  //#endregion
2784
2784
  //#region src/routes/auth/config.ts
2785
2785
  const PLUGIN_OPTIONS_EXCLUDE_KEYS = { stripe: new Set(["stripeClient"]) };
@@ -3837,7 +3837,7 @@ const listOrganizationInvitations = (options) => {
3837
3837
  operator: "in"
3838
3838
  }]
3839
3839
  }) : [];
3840
- const userByEmail = new Map(users.map((u) => [normalizeEmail(u.email, ctx.context), u]));
3840
+ const userByEmail = new Map(users.filter((u) => u.email != null).map((u) => [normalizeEmail(u.email, ctx.context), u]));
3841
3841
  return invitations.map((invitation) => {
3842
3842
  const invitationEmail = normalizeEmail(invitation.email, ctx.context);
3843
3843
  const user = userByEmail.get(invitationEmail);
@@ -3846,7 +3846,7 @@ const listOrganizationInvitations = (options) => {
3846
3846
  user: user ? {
3847
3847
  id: user.id,
3848
3848
  name: user.name,
3849
- email: user.email,
3849
+ email: user.email ?? void 0,
3850
3850
  image: user.image || null
3851
3851
  } : null
3852
3852
  };
@@ -3932,7 +3932,7 @@ const checkUserByEmail = (options) => {
3932
3932
  user: {
3933
3933
  id: user.id,
3934
3934
  name: user.name,
3935
- email: user.email,
3935
+ email: user.email ?? void 0,
3936
3936
  image: user.image ?? null
3937
3937
  },
3938
3938
  isAlreadyMember: !!existingMember
@@ -4088,18 +4088,18 @@ const listOrganizationMembers = (options) => {
4088
4088
  for (const m of members) {
4089
4089
  const joinedUser = Array.isArray(m.user) ? m.user[0] : m.user;
4090
4090
  if (!joinedUser) continue;
4091
- const invitation = invitationByEmail.get(joinedUser.email.toLowerCase());
4091
+ const invitation = joinedUser.email ? invitationByEmail.get(joinedUser.email.toLowerCase()) : void 0;
4092
4092
  const inviter = invitation ? inviterById.get(invitation.inviterId) : void 0;
4093
4093
  const user = {
4094
4094
  id: joinedUser.id,
4095
- email: joinedUser.email,
4095
+ email: joinedUser.email ?? void 0,
4096
4096
  name: joinedUser.name,
4097
4097
  image: joinedUser.image ?? null
4098
4098
  };
4099
4099
  const invitedBy = inviter ? {
4100
4100
  id: inviter.id,
4101
4101
  name: inviter.name,
4102
- email: inviter.email,
4102
+ email: inviter.email ?? void 0,
4103
4103
  image: inviter.image ?? null
4104
4104
  } : null;
4105
4105
  result.push({
@@ -4542,8 +4542,8 @@ const listOrganizations = (options) => {
4542
4542
  const members = organization.member.map((m) => userMap.get(m.userId)).filter((u) => u !== void 0).map((u) => ({
4543
4543
  id: u.id,
4544
4544
  name: u.name,
4545
- email: u.email,
4546
- image: u.image
4545
+ email: u.email ?? void 0,
4546
+ image: u.image ?? null
4547
4547
  }));
4548
4548
  const { member: _members, ...org } = organization;
4549
4549
  return {
@@ -5285,7 +5285,7 @@ const listTeamMembers = (options) => {
5285
5285
  user: user ? {
5286
5286
  id: user.id,
5287
5287
  name: user.name,
5288
- email: user.email,
5288
+ email: user.email ?? void 0,
5289
5289
  image: user.image ?? null
5290
5290
  } : null
5291
5291
  };
@@ -7365,6 +7365,7 @@ const sendVerificationEmail = (options) => createAuthEndpoint("/dash/send-verifi
7365
7365
  const user = await ctx.context.internalAdapter.findUserById(userId);
7366
7366
  if (!user) throw ctx.error("NOT_FOUND", { message: "User not found" });
7367
7367
  if (user.emailVerified) throw ctx.error("BAD_REQUEST", { message: "Email is already verified" });
7368
+ if (!user.email) throw ctx.error("BAD_REQUEST", { message: "User has no associated email address" });
7368
7369
  if (!ctx.context.options.emailVerification?.sendVerificationEmail) throw ctx.error("BAD_REQUEST", { message: "Email verification is not enabled" });
7369
7370
  await sendVerificationEmailFn({
7370
7371
  ...ctx,
@@ -7401,6 +7402,10 @@ const sendManyVerificationEmails = (options) => {
7401
7402
  });
7402
7403
  if (chunk.length - users.length > 0) for (const id of chunk.filter((id) => !users.some((u) => u.id === id))) skippedEmailUserIds.add(id);
7403
7404
  for (const result of await Promise.allSettled(users.map(async (user) => {
7405
+ if (!user.email) return {
7406
+ success: false,
7407
+ id: user.id
7408
+ };
7404
7409
  try {
7405
7410
  await sendVerificationEmailFn({
7406
7411
  ...ctx,
@@ -7440,6 +7445,7 @@ const sendResetPasswordEmail = (options) => createAuthEndpoint("/dash/send-reset
7440
7445
  const { userId } = ctx.context.payload;
7441
7446
  const user = await ctx.context.internalAdapter.findUserById(userId);
7442
7447
  if (!user) throw ctx.error("NOT_FOUND", { message: "User not found" });
7448
+ if (!user.email) throw ctx.error("BAD_REQUEST", { message: "User has no associated email address" });
7443
7449
  ctx.body.redirectTo = ctx.body.callbackUrl;
7444
7450
  ctx.body.email = user.email;
7445
7451
  return await requestPasswordReset(ctx);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@better-auth/infra",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "description": "Dashboard and analytics plugin for Better Auth",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",
@@ -78,7 +78,7 @@
78
78
  "@better-fetch/fetch": "^1.1.21",
79
79
  "better-call": "^1.3.3",
80
80
  "jose": "^6.1.0",
81
- "libphonenumber-js": "^1.12.42"
81
+ "libphonenumber-js": "^1.13.1"
82
82
  },
83
83
  "peerDependencies": {
84
84
  "better-auth": ">=1.4.0",