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
62 changes: 31 additions & 31 deletions .cursor/rules/web-js.mdc
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
---
description:
globs:
description:
globs:
alwaysApply: false
---
## WebJS

| factor | webjs imports | webjs inits |
| --------------- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `emailpassword` | import SuperTokens from "supertokens-web-js"; | (window as any).supertokensUIEmailPassword.init(), |
| `thirdparty` | import SuperTokens from "supertokens-web-js"; | (window as any).supertokensUIThirdParty.init({<br> signInAndUpFeature: {<br> providers: [<br> (window as any).supertokensUIThirdParty.Github.init(),<br> (window as any).supertokensUIThirdParty.Google.init(),<br> (window as any).supertokensUIThirdParty.Apple.init(),<br> (window as any).supertokensUIThirdParty.Twitter.init(),<br> ],<br> },<br> }), |
| `link_email` | import Session from "supertokens-web-js/recipe/session"; | (window as any).supertokensUIPasswordless.init({<br> contactMethod: "EMAIL_OR_PHONE",<br> }), |
| `link_phone` | import Session from "supertokens-web-js/recipe/session"; | (window as any).supertokensUIPasswordless.init({<br> contactMethod: "EMAIL_OR_PHONE",<br> }), |
| `otp_phone` | import Session from "supertokens-web-js/recipe/session"; | (window as any).supertokensUIPasswordless.init({<br> contactMethod: "EMAIL_OR_PHONE",<br> }), |
| `otp_email` | import Session from "supertokens-web-js/recipe/session"; | (window as any).supertokensUIPasswordless.init({<br> contactMethod: "EMAIL_OR_PHONE",<br> }), |
| `totp` | import SuperTokens from "supertokens-web-js"; | (window as any).supertokensUITOTP.init(),<br> (window as any).supertokensUISession.init(), |
| `emailpassword` | import SuperTokens from "supertokens-web-js"; | window.supertokensUIEmailPassword.init(), |
| `thirdparty` | import SuperTokens from "supertokens-web-js"; | window.supertokensUIThirdParty.init({<br> signInAndUpFeature: {<br> providers: [<br> window.supertokensUIThirdParty.Github.init(),<br> window.supertokensUIThirdParty.Google.init(),<br> window.supertokensUIThirdParty.Apple.init(),<br> window.supertokensUIThirdParty.Twitter.init(),<br> ],<br> },<br> }), |
| `link_email` | import Session from "supertokens-web-js/recipe/session"; | window.supertokensUIPasswordless.init({<br> contactMethod: "EMAIL_OR_PHONE",<br> }), |
| `link_phone` | import Session from "supertokens-web-js/recipe/session"; | window.supertokensUIPasswordless.init({<br> contactMethod: "EMAIL_OR_PHONE",<br> }), |
| `otp_phone` | import Session from "supertokens-web-js/recipe/session"; | window.supertokensUIPasswordless.init({<br> contactMethod: "EMAIL_OR_PHONE",<br> }), |
| `otp_email` | import Session from "supertokens-web-js/recipe/session"; | window.supertokensUIPasswordless.init({<br> contactMethod: "EMAIL_OR_PHONE",<br> }), |
| `totp` | import SuperTokens from "supertokens-web-js"; | window.supertokensUITOTP.init(),<br> window.supertokensUISession.init(), |

**Notes**:
**Notes**:
- Session, Dashboard, UserRoles also imported for all factors, in addition to their own config.
- if both link_email and link_phone are present as factors, the contactMethod in init becomes "EMAIL_OR_PASSWORD".
- if both otp_email and otp_phone are present as factors, the flowType in init becomes "USER_INPUT_CODE_AND_MAGIC_LINK".
Expand All @@ -31,28 +31,28 @@ import SuperTokens from "supertokens-web-js";
import Session from "supertokens-web-js/recipe/session";

export function initSuperTokensUI() {
(window as any).supertokensUIInit("supertokensui", {
window.supertokensUIInit("supertokensui", {
appInfo: {
websiteDomain: "http://localhost:3000",
apiDomain: "http://localhost:3001",
appName: "SuperTokens Demo App",
},
recipeList: [
(window as any).supertokensUIEmailPassword.init(),
(window as any).supertokensUIThirdParty.init({
window.supertokensUIEmailPassword.init(),
window.supertokensUIThirdParty.init({
signInAndUpFeature: {
providers: [
(window as any).supertokensUIThirdParty.Github.init(),
(window as any).supertokensUIThirdParty.Google.init(),
(window as any).supertokensUIThirdParty.Apple.init(),
(window as any).supertokensUIThirdParty.Twitter.init(),
window.supertokensUIThirdParty.Github.init(),
window.supertokensUIThirdParty.Google.init(),
window.supertokensUIThirdParty.Apple.init(),
window.supertokensUIThirdParty.Twitter.init(),
],
},
}),
(window as any).supertokensUIPasswordless.init({
window.supertokensUIPasswordless.init({
contactMethod: "EMAIL_OR_PHONE",
}),
(window as any).supertokensUISession.init(),
window.supertokensUISession.init(),
],
});
}
Expand All @@ -77,35 +77,35 @@ import EmailVerification from "supertokens-web-js/recipe/emailverification";
import MultiFactorAuth from "supertokens-web-js/recipe/multifactorauth";

export function initSuperTokensUI() {
(window as any).supertokensUIInit("supertokensui", {
window.supertokensUIInit("supertokensui", {
appInfo: {
websiteDomain: "http://localhost:3000",
apiDomain: "http://localhost:3001",
appName: "SuperTokens Demo App",
},
recipeList: [
(window as any).supertokensUIEmailPassword.init(),
(window as any).supertokensUIThirdParty.init({
window.supertokensUIEmailPassword.init(),
window.supertokensUIThirdParty.init({
signInAndUpFeature: {
providers: [
(window as any).supertokensUIThirdParty.Github.init(),
(window as any).supertokensUIThirdParty.Google.init(),
(window as any).supertokensUIThirdParty.Apple.init(),
(window as any).supertokensUIThirdParty.Twitter.init(),
window.supertokensUIThirdParty.Github.init(),
window.supertokensUIThirdParty.Google.init(),
window.supertokensUIThirdParty.Apple.init(),
window.supertokensUIThirdParty.Twitter.init(),
],
},
}),
(window as any).supertokensUIPasswordless.init({
window.supertokensUIPasswordless.init({
contactMethod: "EMAIL_OR_PHONE",
}),
(window as any).supertokensUIEmailVerification.init({
window.supertokensUIEmailVerification.init({
mode: "REQUIRED",
}),
(window as any).supertokensUIMultiFactorAuth.init({
window.supertokensUIMultiFactorAuth.init({
firstFactors: ["thirdparty", "emailpassword"],
}),
(window as any).supertokensUITOTP.init(),
(window as any).supertokensUISession.init(),
window.supertokensUITOTP.init(),
window.supertokensUISession.init(),
],
});
}
Expand Down
38 changes: 19 additions & 19 deletions boilerplate/frontend/shared/web-js/template.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,19 +35,19 @@ import Session from "supertokens-web-js/recipe/session";
import Multitenancy from "supertokens-web-js/recipe/multitenancy";`,
};
export const uiRecipeInits = {
emailPassword: () => `(window as any).supertokensUIEmailPassword.init()`,
emailPassword: () => `window.supertokensUIEmailPassword.init()`,
thirdParty: (providers) => {
const providerInitMap = {
google: "(window as any).supertokensUIThirdParty.Google.init()",
github: "(window as any).supertokensUIThirdParty.Github.init()",
apple: "(window as any).supertokensUIThirdParty.Apple.init()",
twitter: "(window as any).supertokensUIThirdParty.Twitter.init()",
google: "window.supertokensUIThirdParty.Google.init()",
github: "window.supertokensUIThirdParty.Github.init()",
apple: "window.supertokensUIThirdParty.Apple.init()",
twitter: "window.supertokensUIThirdParty.Twitter.init()",
};
const providerInits = providers
.map((p) => providerInitMap[p.id])
.filter(Boolean)
.join(",\n ");
return `(window as any).supertokensUIThirdParty.init({
return `window.supertokensUIThirdParty.init({
signInAndUpFeature: {
providers: [
${providerInits}
Expand Down Expand Up @@ -84,26 +84,26 @@ export const uiRecipeInits = {
if (flowType) {
initObj.push(`flowType: "${flowType}"`);
}
return `(window as any).supertokensUIPasswordless.init({
return `window.supertokensUIPasswordless.init({
${initObj.join(",\n ")}
})`;
},
session: () => `(window as any).supertokensUISession.init()`,
session: () => `window.supertokensUISession.init()`,
multiFactorAuth: (firstFactors, secondFactors) => {
const firstFactorsStr = firstFactors
? firstFactors.map((f) => `"${f}"`).join(", ")
: `"thirdparty", "emailpassword"`;
if (secondFactors && secondFactors.length > 0) {
const factorMapping = {
totp: "(window as any).supertokensUIMultiFactorAuth.FactorIds.TOTP",
"otp-email": "(window as any).supertokensUIMultiFactorAuth.FactorIds.OTP_EMAIL",
"otp-phone": "(window as any).supertokensUIMultiFactorAuth.FactorIds.OTP_PHONE",
"link-email": "(window as any).supertokensUIMultiFactorAuth.FactorIds.LINK_EMAIL",
"link-phone": "(window as any).supertokensUIMultiFactorAuth.FactorIds.LINK_PHONE",
totp: "window.supertokensUIMultiFactorAuth.FactorIds.TOTP",
"otp-email": "window.supertokensUIMultiFactorAuth.FactorIds.OTP_EMAIL",
"otp-phone": "window.supertokensUIMultiFactorAuth.FactorIds.OTP_PHONE",
"link-email": "window.supertokensUIMultiFactorAuth.FactorIds.LINK_EMAIL",
"link-phone": "window.supertokensUIMultiFactorAuth.FactorIds.LINK_PHONE",
};
const factorIds = secondFactors.map((factor) => factorMapping[factor] || `"${factor}"`).filter(Boolean);
if (factorIds.length > 0) {
return `(window as any).supertokensUIMultiFactorAuth.init({
return `window.supertokensUIMultiFactorAuth.init({
firstFactors: [${firstFactorsStr}],
override: {
functions: (originalImplementation: any) => ({
Expand All @@ -123,15 +123,15 @@ export const uiRecipeInits = {
})`;
}
}
return `(window as any).supertokensUIMultiFactorAuth.init({
return `window.supertokensUIMultiFactorAuth.init({
firstFactors: [${firstFactorsStr}]
})`;
},
emailVerification: (hasMFA) => `(window as any).supertokensUIEmailVerification.init({
emailVerification: (hasMFA) => `window.supertokensUIEmailVerification.init({
mode: ${hasMFA ? '"OPTIONAL"' : '"REQUIRED"'}
})`,
totp: () => `(window as any).supertokensUITOTP.init()`,
multitenancy: () => `(window as any).supertokensUIMultitenancy.init({
totp: () => `window.supertokensUITOTP.init()`,
multitenancy: () => `window.supertokensUIMultitenancy.init({
override: {
functions: (oI) => {
return {
Expand Down Expand Up @@ -266,7 +266,7 @@ ${getApiDomainFunc}
${getWebsiteDomainFunc}

export function initSuperTokensUI() {
(window as any).supertokensUIInit("supertokensui", {
window.supertokensUIInit("supertokensui", {
appInfo: {
websiteDomain: getWebsiteDomain(),
apiDomain: getApiDomain(),
Expand Down
Loading