@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.
Files changed (73) hide show
  1. package/LICENSE +7 -0
  2. package/dist/components/EmailVerification.d.ts +5 -0
  3. package/dist/components/EmailVerification.js +29 -0
  4. package/dist/components/ForgotPassword.d.ts +3 -0
  5. package/dist/components/ForgotPassword.js +22 -0
  6. package/dist/components/OauthCallback.d.ts +1 -0
  7. package/dist/components/OauthCallback.js +20 -0
  8. package/dist/components/PasswordReset.d.ts +4 -0
  9. package/dist/components/PasswordReset.js +36 -0
  10. package/dist/components/SignIn.d.ts +4 -0
  11. package/dist/components/SignIn.js +18 -0
  12. package/dist/components/SignOut.d.ts +3 -0
  13. package/dist/components/SignOut.js +12 -0
  14. package/dist/components/SignUp.d.ts +4 -0
  15. package/dist/components/SignUp.js +18 -0
  16. package/dist/components/StackHandler.d.ts +8 -0
  17. package/dist/components/StackHandler.js +58 -0
  18. package/dist/elements/Button.d.ts +10 -0
  19. package/dist/elements/Button.js +18 -0
  20. package/dist/elements/CardFrame.d.ts +5 -0
  21. package/dist/elements/CardFrame.js +10 -0
  22. package/dist/elements/CardHeader.d.ts +5 -0
  23. package/dist/elements/CardHeader.js +4 -0
  24. package/dist/elements/CredentialSignIn.d.ts +3 -0
  25. package/dist/elements/CredentialSignIn.js +57 -0
  26. package/dist/elements/CredentialSignUp.d.ts +3 -0
  27. package/dist/elements/CredentialSignUp.js +73 -0
  28. package/dist/elements/DividerWithText.d.ts +3 -0
  29. package/dist/elements/DividerWithText.js +5 -0
  30. package/dist/elements/ForgotPassword.d.ts +3 -0
  31. package/dist/elements/ForgotPassword.js +32 -0
  32. package/dist/elements/FormWarning.d.ts +3 -0
  33. package/dist/elements/FormWarning.js +7 -0
  34. package/dist/elements/MessageCard.d.ts +6 -0
  35. package/dist/elements/MessageCard.js +5 -0
  36. package/dist/elements/OauthButton.d.ts +5 -0
  37. package/dist/elements/OauthButton.js +67 -0
  38. package/dist/elements/OauthGroup.d.ts +4 -0
  39. package/dist/elements/OauthGroup.js +11 -0
  40. package/dist/elements/PasswordField.d.ts +2 -0
  41. package/dist/elements/PasswordField.js +27 -0
  42. package/dist/elements/PasswordResetInner.d.ts +4 -0
  43. package/dist/elements/PasswordResetInner.js +61 -0
  44. package/dist/elements/RedirectMessageCard.d.ts +4 -0
  45. package/dist/elements/RedirectMessageCard.js +49 -0
  46. package/dist/index.d.ts +11 -0
  47. package/dist/index.js +12 -0
  48. package/dist/lib/auth.d.ts +19 -0
  49. package/dist/lib/auth.js +85 -0
  50. package/dist/lib/cookie.d.ts +12 -0
  51. package/dist/lib/cookie.js +60 -0
  52. package/dist/lib/hooks.d.ts +21 -0
  53. package/dist/lib/hooks.js +21 -0
  54. package/dist/lib/stack-app.d.ts +172 -0
  55. package/dist/lib/stack-app.js +575 -0
  56. package/dist/providers/StackProvider.d.ts +6 -0
  57. package/dist/providers/StackProvider.js +6 -0
  58. package/dist/providers/StackProviderClient.d.ts +9 -0
  59. package/dist/providers/StackProviderClient.js +14 -0
  60. package/dist/tailwind.css +1293 -0
  61. package/dist/utils/email.d.ts +1 -0
  62. package/dist/utils/email.js +7 -0
  63. package/dist/utils/next.d.ts +1 -0
  64. package/dist/utils/next.js +4 -0
  65. package/dist/utils/react.d.ts +1 -0
  66. package/dist/utils/react.js +6 -0
  67. package/dist/utils/results.d.ts +24 -0
  68. package/dist/utils/results.js +46 -0
  69. package/dist/utils/types.d.ts +3 -0
  70. package/dist/utils/types.js +1 -0
  71. package/dist/utils/url.d.ts +2 -0
  72. package/dist/utils/url.js +16 -0
  73. 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,4 @@
1
+ export function isClient() {
2
+ // TODO improve function name (could be confused because this may return false in client components during SSR)
3
+ return typeof window !== "undefined";
4
+ }
@@ -0,0 +1 @@
1
+ export declare function suspend(): never;
@@ -0,0 +1,6 @@
1
+ import { use } from "react";
2
+ import { neverResolve } from "@stackframe/stack-shared/dist/utils/promises";
3
+ export function suspend() {
4
+ use(neverResolve());
5
+ throw new Error("Somehow a Promise that never resolves was resolved?");
6
+ }
@@ -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,3 @@
1
+ export type ReadonlyJson = null | boolean | number | string | readonly ReadonlyJson[] | {
2
+ readonly [key: string]: ReadonlyJson;
3
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export declare function autoRedirect(): void;
2
+ export declare function constructRedirectUrl(redirectUrl: URL | string | undefined): string;
@@ -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
+ }