Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions packages/user/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
"mercurius-auth": "6.0.0",
"prettier": "3.8.3",
"slonik": "46.8.0",
"supertokens-node": "14.1.4",
"supertokens-node": "15.0.0",
"typescript": "5.9.3",
"vite": "6.4.2",
"vitest": "3.2.4",
Expand All @@ -75,7 +75,7 @@
"mercurius": ">=16.1.0",
"mercurius-auth": ">=6.0.0",
"slonik": ">=46.1.0",
"supertokens-node": ">=14.1.4",
"supertokens-node": ">=15.0.0",
"zod": ">=3.23.8"
},
"engines": {
Expand Down
36 changes: 29 additions & 7 deletions packages/user/src/auth/supertokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import type {
} from "./adapter";
import type { ClaimValidationError, RefreshableClaim } from "./types";

import { ERROR_CODES } from "../constants";
import { ERROR_CODES, SUPERTOKENS_DEFAULT_TENANT_ID } from "../constants";
import supertokensPlugin from "../supertokens";
import createUserContextImpl from "../supertokens/utils/createUserContext";
import ProfileValidationClaim from "../supertokens/utils/profileValidationClaim";
Expand Down Expand Up @@ -123,8 +123,10 @@ const createUserContext = (

const supertokensEmailPasswordAdapter: EmailPasswordProvider = {
async createResetPasswordToken(userId: string): Promise<string> {
const response =
await ThirdPartyEmailPassword.createResetPasswordToken(userId);
const response = await ThirdPartyEmailPassword.createResetPasswordToken(
SUPERTOKENS_DEFAULT_TENANT_ID,
userId,
);

if (response.status === "OK") {
return response.token;
Expand All @@ -142,6 +144,7 @@ const supertokensEmailPasswordAdapter: EmailPasswordProvider = {
userContext?: AuthUserContext,
): Promise<AuthResult> {
const response = await ThirdPartyEmailPassword.emailPasswordSignIn(
SUPERTOKENS_DEFAULT_TENANT_ID,
email,
password,
userContext,
Expand All @@ -166,6 +169,7 @@ const supertokensEmailPasswordAdapter: EmailPasswordProvider = {
userContext?: AuthUserContext,
): Promise<AuthResult> {
const response = await ThirdPartyEmailPassword.emailPasswordSignUp(
SUPERTOKENS_DEFAULT_TENANT_ID,
email,
password,
userContext,
Expand Down Expand Up @@ -193,7 +197,10 @@ const supertokensEmailPasswordAdapter: EmailPasswordProvider = {
},

async getUsersByEmail(email: string): Promise<AuthUser[]> {
const users = await ThirdPartyEmailPassword.getUsersByEmail(email);
const users = await ThirdPartyEmailPassword.getUsersByEmail(
SUPERTOKENS_DEFAULT_TENANT_ID,
email,
);

return users.map((user) => user as AuthUser);
},
Expand All @@ -203,6 +210,7 @@ const supertokensEmailPasswordAdapter: EmailPasswordProvider = {
newPassword: string,
): Promise<ResetPasswordResult> {
const response = await ThirdPartyEmailPassword.resetPasswordUsingToken(
SUPERTOKENS_DEFAULT_TENANT_ID,
token,
newPassword,
);
Expand Down Expand Up @@ -236,6 +244,7 @@ const supertokensEmailVerificationAdapter: EmailVerificationProvider = {
userContext?: AuthUserContext,
): Promise<string> {
const response = await EmailVerification.createEmailVerificationToken(
SUPERTOKENS_DEFAULT_TENANT_ID,
userId,
email,
userContext,
Expand All @@ -258,6 +267,7 @@ const supertokensEmailVerificationAdapter: EmailVerificationProvider = {
async sendVerificationEmail(input) {
await EmailVerification.sendEmail({
emailVerifyLink: `${input.appOrigin}/auth/verify-email?token=${input.token}&rid=emailverification`,
tenantId: SUPERTOKENS_DEFAULT_TENANT_ID,
type: "EMAIL_VERIFICATION",
user: {
email: input.email,
Expand All @@ -278,6 +288,7 @@ const supertokensEmailVerificationAdapter: EmailVerificationProvider = {
userContext?: AuthUserContext,
): Promise<boolean> {
const response = await EmailVerification.verifyEmailUsingToken(
SUPERTOKENS_DEFAULT_TENANT_ID,
token,
userContext,
);
Expand All @@ -288,7 +299,11 @@ const supertokensEmailVerificationAdapter: EmailVerificationProvider = {

const supertokensRolesAdapter: RolesProvider = {
async addRoleToUser(userId: string, role: string): Promise<void> {
const response = await UserRoles.addRoleToUser(userId, role);
const response = await UserRoles.addRoleToUser(
SUPERTOKENS_DEFAULT_TENANT_ID,
userId,
role,
);

if (response.status !== "OK") {
throw new CustomError(
Expand Down Expand Up @@ -333,13 +348,19 @@ const supertokensRolesAdapter: RolesProvider = {
},

async getRolesForUser(userId: string): Promise<string[]> {
const response = await UserRoles.getRolesForUser(userId);
const response = await UserRoles.getRolesForUser(
SUPERTOKENS_DEFAULT_TENANT_ID,
userId,
);

return response.roles;
},

async getUsersThatHaveRole(role: string): Promise<string[]> {
const response = await UserRoles.getUsersThatHaveRole(role);
const response = await UserRoles.getUsersThatHaveRole(
SUPERTOKENS_DEFAULT_TENANT_ID,
role,
);

if (response.status === "OK") {
return response.users;
Expand Down Expand Up @@ -376,6 +397,7 @@ const supertokensSessionAdapter: SessionProvider = {
return Session.createNewSession(
request,
reply,
SUPERTOKENS_DEFAULT_TENANT_ID,
userId,
accessTokenPayload,
sessionData,
Expand Down
3 changes: 3 additions & 0 deletions packages/user/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ const ROUTE_PERMISSIONS = "/permissions";
const EMAIL_VERIFICATION_MODE = "REQUIRED";
const EMAIL_VERIFICATION_PATH = "/verify-email";

const SUPERTOKENS_DEFAULT_TENANT_ID = "public";

const PERMISSIONS_INVITATIONS_CREATE = "invitations:create";
const PERMISSIONS_INVITATIONS_DELETE = "invitations:delete";
const PERMISSIONS_INVITATIONS_LIST = "invitations:list";
Expand Down Expand Up @@ -124,6 +126,7 @@ export {
ROUTE_USERS_ENABLE,
ROUTE_USERS_FIND_BY_ID,
SUPERTOKENS_CORS_HEADERS,
SUPERTOKENS_DEFAULT_TENANT_ID,
TABLE_INVITATIONS,
TABLE_USERS,
};
Loading
Loading