@stackframe/stack 1.0.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.
- package/LICENSE +7 -0
- package/dist/components/EmailVerification.d.ts +5 -0
- package/dist/components/EmailVerification.js +29 -0
- package/dist/components/ForgotPassword.d.ts +3 -0
- package/dist/components/ForgotPassword.js +22 -0
- package/dist/components/OauthCallback.d.ts +1 -0
- package/dist/components/OauthCallback.js +20 -0
- package/dist/components/PasswordReset.d.ts +4 -0
- package/dist/components/PasswordReset.js +36 -0
- package/dist/components/SignIn.d.ts +4 -0
- package/dist/components/SignIn.js +18 -0
- package/dist/components/SignOut.d.ts +3 -0
- package/dist/components/SignOut.js +12 -0
- package/dist/components/SignUp.d.ts +4 -0
- package/dist/components/SignUp.js +18 -0
- package/dist/components/StackHandler.d.ts +8 -0
- package/dist/components/StackHandler.js +58 -0
- package/dist/elements/Button.d.ts +10 -0
- package/dist/elements/Button.js +18 -0
- package/dist/elements/CardFrame.d.ts +5 -0
- package/dist/elements/CardFrame.js +10 -0
- package/dist/elements/CardHeader.d.ts +5 -0
- package/dist/elements/CardHeader.js +4 -0
- package/dist/elements/CredentialSignIn.d.ts +3 -0
- package/dist/elements/CredentialSignIn.js +57 -0
- package/dist/elements/CredentialSignUp.d.ts +3 -0
- package/dist/elements/CredentialSignUp.js +73 -0
- package/dist/elements/DividerWithText.d.ts +3 -0
- package/dist/elements/DividerWithText.js +5 -0
- package/dist/elements/ForgotPassword.d.ts +3 -0
- package/dist/elements/ForgotPassword.js +32 -0
- package/dist/elements/FormWarning.d.ts +3 -0
- package/dist/elements/FormWarning.js +7 -0
- package/dist/elements/MessageCard.d.ts +6 -0
- package/dist/elements/MessageCard.js +5 -0
- package/dist/elements/OauthButton.d.ts +5 -0
- package/dist/elements/OauthButton.js +67 -0
- package/dist/elements/OauthGroup.d.ts +4 -0
- package/dist/elements/OauthGroup.js +11 -0
- package/dist/elements/PasswordField.d.ts +2 -0
- package/dist/elements/PasswordField.js +27 -0
- package/dist/elements/PasswordResetInner.d.ts +4 -0
- package/dist/elements/PasswordResetInner.js +61 -0
- package/dist/elements/RedirectMessageCard.d.ts +4 -0
- package/dist/elements/RedirectMessageCard.js +49 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +12 -0
- package/dist/lib/auth.d.ts +19 -0
- package/dist/lib/auth.js +85 -0
- package/dist/lib/cookie.d.ts +12 -0
- package/dist/lib/cookie.js +60 -0
- package/dist/lib/hooks.d.ts +21 -0
- package/dist/lib/hooks.js +21 -0
- package/dist/lib/stack-app.d.ts +172 -0
- package/dist/lib/stack-app.js +575 -0
- package/dist/providers/StackProvider.d.ts +6 -0
- package/dist/providers/StackProvider.js +6 -0
- package/dist/providers/StackProviderClient.d.ts +9 -0
- package/dist/providers/StackProviderClient.js +14 -0
- package/dist/tailwind.css +1293 -0
- package/dist/utils/email.d.ts +1 -0
- package/dist/utils/email.js +7 -0
- package/dist/utils/next.d.ts +1 -0
- package/dist/utils/next.js +4 -0
- package/dist/utils/react.d.ts +1 -0
- package/dist/utils/react.js +6 -0
- package/dist/utils/results.d.ts +24 -0
- package/dist/utils/results.js +46 -0
- package/dist/utils/types.d.ts +3 -0
- package/dist/utils/types.js +1 -0
- package/dist/utils/url.d.ts +2 -0
- package/dist/utils/url.js +16 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function validateEmail(email: string): RegExpMatchArray | null;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export function validateEmail(email) {
|
|
2
|
+
// TODO prevent regex DoS
|
|
3
|
+
return String(email)
|
|
4
|
+
.toLowerCase()
|
|
5
|
+
.match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|.(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);
|
|
6
|
+
}
|
|
7
|
+
;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isClient(): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function suspend(): never;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type Result<T, E = unknown> = {
|
|
2
|
+
status: "ok";
|
|
3
|
+
data: T;
|
|
4
|
+
} | {
|
|
5
|
+
status: "error";
|
|
6
|
+
error: E;
|
|
7
|
+
};
|
|
8
|
+
export type AsyncResult<T, E = unknown, P = void> = Result<T, E> | {
|
|
9
|
+
status: "loading";
|
|
10
|
+
} & (P extends void ? {} : {
|
|
11
|
+
progress: P;
|
|
12
|
+
});
|
|
13
|
+
export declare const Result: {
|
|
14
|
+
fromPromise: typeof promiseToResult;
|
|
15
|
+
ok<T>(data: T): Result<T, never>;
|
|
16
|
+
error<E>(error: E): Result<never, E>;
|
|
17
|
+
map: typeof mapResult;
|
|
18
|
+
orThrow: <T_1, E_1>(result: Result<T_1, E_1>) => T_1;
|
|
19
|
+
orThrowAsync: <T_2, E_2>(result: Promise<Result<T_2, E_2>>) => Promise<T_2>;
|
|
20
|
+
};
|
|
21
|
+
declare function promiseToResult<T, E = unknown>(promise: Promise<T>): Promise<Result<T, E>>;
|
|
22
|
+
declare function mapResult<T, U, E = unknown, P = unknown>(result: Result<T, E>, fn: (data: T) => U): Result<U, E>;
|
|
23
|
+
declare function mapResult<T, U, E = unknown, P = unknown>(result: AsyncResult<T, E, P>, fn: (data: T) => U): AsyncResult<U, E, P>;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export const Result = {
|
|
2
|
+
fromPromise: promiseToResult,
|
|
3
|
+
ok(data) {
|
|
4
|
+
return {
|
|
5
|
+
status: "ok",
|
|
6
|
+
data,
|
|
7
|
+
};
|
|
8
|
+
},
|
|
9
|
+
error(error) {
|
|
10
|
+
return {
|
|
11
|
+
status: "error",
|
|
12
|
+
error,
|
|
13
|
+
};
|
|
14
|
+
},
|
|
15
|
+
map: mapResult,
|
|
16
|
+
orThrow: (result) => {
|
|
17
|
+
if (result.status === "error")
|
|
18
|
+
throw result.error;
|
|
19
|
+
return result.data;
|
|
20
|
+
},
|
|
21
|
+
orThrowAsync: async (result) => {
|
|
22
|
+
return Result.orThrow(await result);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
function promiseToResult(promise) {
|
|
26
|
+
return promise.then(data => ({
|
|
27
|
+
status: "ok",
|
|
28
|
+
data,
|
|
29
|
+
}), error => ({
|
|
30
|
+
status: "error",
|
|
31
|
+
error,
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
function mapResult(result, fn) {
|
|
35
|
+
if (result.status === "error")
|
|
36
|
+
return {
|
|
37
|
+
status: "error",
|
|
38
|
+
error: result.error,
|
|
39
|
+
};
|
|
40
|
+
if (result.status === "loading")
|
|
41
|
+
return {
|
|
42
|
+
status: "loading",
|
|
43
|
+
..."progress" in result ? { progress: result.progress } : {},
|
|
44
|
+
};
|
|
45
|
+
return Result.ok(fn(result.data));
|
|
46
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function autoRedirect() {
|
|
2
|
+
const url = new URL(window.location.href);
|
|
3
|
+
const redirectUrl = url.searchParams.get("auto-redirect-url");
|
|
4
|
+
if (redirectUrl) {
|
|
5
|
+
const urlObject = new URL(redirectUrl);
|
|
6
|
+
if (urlObject.origin !== window.location.origin) {
|
|
7
|
+
throw new Error("auto-redirect-url is not same origin (" + urlObject.origin + " !== " + window.location.origin + ")");
|
|
8
|
+
}
|
|
9
|
+
url.searchParams.delete("auto-redirect-url");
|
|
10
|
+
window.location.replace(urlObject.href);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function constructRedirectUrl(redirectUrl) {
|
|
14
|
+
const url = redirectUrl ? new URL(redirectUrl, window.location.href) : new URL(window.location.href);
|
|
15
|
+
return url.href.split("#")[0];
|
|
16
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@stackframe/stack",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "./dist/index.js",
|
|
5
|
+
"types": "./dist/index.d.ts",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@types/js-cookie": "^3.0.6",
|
|
12
|
+
"js-cookie": "^3.0.5",
|
|
13
|
+
"oauth4webapi": "^2.10.3",
|
|
14
|
+
"react-icons": "^5.0.1",
|
|
15
|
+
"tailwindcss-scoped-preflight": "^2.1.0",
|
|
16
|
+
"server-only": "^0.0.1",
|
|
17
|
+
"@stackframe/stack-shared": "1.0.0"
|
|
18
|
+
},
|
|
19
|
+
"peerDependencies": {
|
|
20
|
+
"next": "^14",
|
|
21
|
+
"react": "^18.2.0"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/react": "^18.2.60",
|
|
25
|
+
"@typescript-eslint/eslint-plugin": "^6",
|
|
26
|
+
"@typescript-eslint/parser": "^6.x",
|
|
27
|
+
"autoprefixer": "^10.4.17",
|
|
28
|
+
"concurrently": "^8.2.2",
|
|
29
|
+
"daisyui": "^4.7.2",
|
|
30
|
+
"eslint": "^8",
|
|
31
|
+
"eslint-config-next": "^14",
|
|
32
|
+
"next": "14.0.3-canary.1",
|
|
33
|
+
"postcss": "^8.4.35",
|
|
34
|
+
"postcss-cli": "^11.0.0",
|
|
35
|
+
"postcss-nested": "^6.0.1",
|
|
36
|
+
"postcss-prefix-selector": "^1.16.0",
|
|
37
|
+
"react": "^18.2.0",
|
|
38
|
+
"rimraf": "^5.0.5",
|
|
39
|
+
"tailwindcss": "^3.4.1"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"typecheck": "tsc --noEmit",
|
|
43
|
+
"build": "pnpm clean && tsc && npx tailwindcss build -i src/tailwind.css -o dist/tailwind.css && postcss ./src/tailwind.css -o ./dist/tailwind.css --config postcss.config.js",
|
|
44
|
+
"clean": "rimraf dist",
|
|
45
|
+
"dev": "concurrently \"npm run watch:ts\" \"npm run watch:postcss\"",
|
|
46
|
+
"watch:ts": "tsc -w --preserveWatchOutput --declarationMap",
|
|
47
|
+
"watch:postcss": "postcss ./src/tailwind.css -o ./dist/tailwind.css --config postcss.config.js --watch",
|
|
48
|
+
"lint": "eslint --ext .tsx,.ts ."
|
|
49
|
+
}
|
|
50
|
+
}
|