@insforge/react 0.4.7 → 0.4.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/router.cjs CHANGED
@@ -3,46 +3,36 @@
3
3
  var react = require('react');
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
5
 
6
- function RedirectToAuth({ baseUrl, path }) {
6
+ function RedirectToAuth({
7
+ baseUrl,
8
+ path,
9
+ afterSignInUrl
10
+ }) {
7
11
  react.useEffect(() => {
8
- const currentUrl = window.location.href;
12
+ const currentUrl = window.location.origin + afterSignInUrl;
9
13
  const authUrl = new URL(path, baseUrl);
10
14
  authUrl.searchParams.set("redirect", currentUrl);
11
15
  window.location.replace(authUrl.toString());
12
- }, [baseUrl, path]);
16
+ }, [baseUrl, path, afterSignInUrl]);
13
17
  return null;
14
18
  }
15
19
  function getInsforgeRoutes(config) {
16
- const { baseUrl, builtInAuth = true, paths = {} } = config;
17
- const {
18
- signIn = "/sign-in",
19
- signUp = "/sign-up",
20
- verifyEmail = "/verify-email",
21
- forgotPassword = "/forgot-password",
22
- resetPassword = "/reset-password"
23
- } = paths;
20
+ const { baseUrl, builtInAuth = true, paths = {}, afterSignInUrl = "/" } = config;
21
+ const { signIn = "/sign-in", signUp = "/sign-up", forgotPassword = "/forgot-password" } = paths;
24
22
  const routes = [];
25
23
  if (builtInAuth) {
26
24
  routes.push(
27
25
  {
28
26
  path: signIn,
29
- element: /* @__PURE__ */ jsxRuntime.jsx(RedirectToAuth, { baseUrl, path: "/auth/sign-in" })
27
+ element: /* @__PURE__ */ jsxRuntime.jsx(RedirectToAuth, { baseUrl, path: "/auth/sign-in", afterSignInUrl })
30
28
  },
31
29
  {
32
30
  path: signUp,
33
- element: /* @__PURE__ */ jsxRuntime.jsx(RedirectToAuth, { baseUrl, path: "/auth/sign-up" })
34
- },
35
- {
36
- path: verifyEmail,
37
- element: /* @__PURE__ */ jsxRuntime.jsx(RedirectToAuth, { baseUrl, path: "/auth/verify-email" })
31
+ element: /* @__PURE__ */ jsxRuntime.jsx(RedirectToAuth, { baseUrl, path: "/auth/sign-up", afterSignInUrl })
38
32
  },
39
33
  {
40
34
  path: forgotPassword,
41
35
  element: /* @__PURE__ */ jsxRuntime.jsx(RedirectToAuth, { baseUrl, path: "/auth/forgot-password" })
42
- },
43
- {
44
- path: resetPassword,
45
- element: /* @__PURE__ */ jsxRuntime.jsx(RedirectToAuth, { baseUrl, path: "/auth/reset-password" })
46
36
  }
47
37
  );
48
38
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/router/getInsforgeRoutes.tsx"],"names":["useEffect","jsx"],"mappings":";;;;;AAyCA,SAAS,cAAA,CAAe,EAAE,OAAA,EAAS,IAAA,EAAK,EAAsC;AAC5E,EAAAA,eAAA,CAAU,MAAM;AAEd,IAAA,MAAM,UAAA,GAAa,OAAO,QAAA,CAAS,IAAA;AACnC,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AACrC,IAAA,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,UAAU,CAAA;AAC/C,IAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,CAAA;AAAA,EAC5C,CAAA,EAAG,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA;AAElB,EAAA,OAAO,IAAA;AACT;AA6CO,SAAS,kBAAkB,MAAA,EAAgD;AAChF,EAAA,MAAM,EAAE,OAAA,EAAS,WAAA,GAAc,MAAM,KAAA,GAAQ,IAAG,GAAI,MAAA;AAEpD,EAAA,MAAM;AAAA,IACJ,MAAA,GAAS,UAAA;AAAA,IACT,MAAA,GAAS,UAAA;AAAA,IACT,WAAA,GAAc,eAAA;AAAA,IACd,cAAA,GAAiB,kBAAA;AAAA,IACjB,aAAA,GAAgB;AAAA,GAClB,GAAI,KAAA;AAEJ,EAAA,MAAM,SAAwB,EAAC;AAG/B,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAA,CAAO,IAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,kBAASC,cAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,eAAA,EAAgB;AAAA,OAClE;AAAA,MACA;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,kBAASA,cAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,eAAA,EAAgB;AAAA,OAClE;AAAA,MACA;AAAA,QACE,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,kBAASA,cAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,oBAAA,EAAqB;AAAA,OACvE;AAAA,MACA;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,kBAASA,cAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,uBAAA,EAAwB;AAAA,OAC1E;AAAA,MACA;AAAA,QACE,IAAA,EAAM,aAAA;AAAA,QACN,OAAA,kBAASA,cAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,sBAAA,EAAuB;AAAA;AACzE,KACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT","file":"router.cjs","sourcesContent":["'use client';\n\nimport { useEffect } from 'react';\nimport type { RouteObject } from 'react-router-dom';\n\ninterface GetInsforgeRoutesConfig {\n /**\n * Base URL of your Insforge backend\n */\n baseUrl: string;\n\n /**\n * Whether to use built-in auth (deployed Insforge Auth)\n * When true: redirects to baseUrl/auth/* pages\n * When false: no redirect routes are added (use your own components)\n * @default true\n */\n builtInAuth?: boolean;\n\n /**\n * Custom paths for auth redirect routes\n * @default {\n * signIn: '/sign-in',\n * signUp: '/sign-up',\n * verifyEmail: '/verify-email',\n * forgotPassword: '/forgot-password',\n * resetPassword: '/reset-password'\n * }\n */\n paths?: {\n signIn?: string;\n signUp?: string;\n verifyEmail?: string;\n forgotPassword?: string;\n resetPassword?: string;\n };\n}\n\n/**\n * Helper component for redirecting to external auth\n */\nfunction RedirectToAuth({ baseUrl, path }: { baseUrl: string; path: string }) {\n useEffect(() => {\n // Redirect back to current URL - middleware/SDK will handle token from URL\n const currentUrl = window.location.href;\n const authUrl = new URL(path, baseUrl);\n authUrl.searchParams.set('redirect', currentUrl);\n window.location.replace(authUrl.toString());\n }, [baseUrl, path]);\n\n return null;\n}\n\n/**\n * Generates Insforge authentication redirect routes for React Router.\n *\n * Returns redirect routes for sign-in, sign-up, etc. that redirect to your deployed Insforge auth pages.\n *\n * @param config - Configuration for Insforge routes\n * @returns Array of RouteObject for React Router (redirect routes only)\n *\n * @example\n * ```tsx\n * import { createBrowserRouter } from 'react-router-dom';\n * import { getInsforgeRoutes } from '@insforge/react/router';\n *\n * const router = createBrowserRouter([\n * {\n * path: '/',\n * element: <Layout />,\n * children: [\n * { index: true, element: <Home /> },\n * { path: 'dashboard', element: <Dashboard /> }\n * ]\n * },\n * // Add redirect routes (sign-in, sign-up, etc.)\n * ...getInsforgeRoutes({\n * baseUrl: 'https://your-backend.com',\n * builtInAuth: true\n * })\n * ]);\n * ```\n *\n * @example\n * ```tsx\n * // Custom paths for redirect routes\n * ...getInsforgeRoutes({\n * baseUrl: 'https://your-backend.com',\n * builtInAuth: true,\n * paths: {\n * signIn: '/login',\n * signUp: '/register'\n * }\n * })\n * ```\n */\nexport function getInsforgeRoutes(config: GetInsforgeRoutesConfig): RouteObject[] {\n const { baseUrl, builtInAuth = true, paths = {} } = config;\n\n const {\n signIn = '/sign-in',\n signUp = '/sign-up',\n verifyEmail = '/verify-email',\n forgotPassword = '/forgot-password',\n resetPassword = '/reset-password',\n } = paths;\n\n const routes: RouteObject[] = [];\n\n // Only add redirect routes if using built-in auth\n if (builtInAuth) {\n routes.push(\n {\n path: signIn,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/sign-in\" />,\n },\n {\n path: signUp,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/sign-up\" />,\n },\n {\n path: verifyEmail,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/verify-email\" />,\n },\n {\n path: forgotPassword,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/forgot-password\" />,\n },\n {\n path: resetPassword,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/reset-password\" />,\n }\n );\n }\n\n return routes;\n}\n"]}
1
+ {"version":3,"sources":["../src/router/getInsforgeRoutes.tsx"],"names":["useEffect","jsx"],"mappings":";;;;;AA2CA,SAAS,cAAA,CAAe;AAAA,EACtB,OAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAAA,eAAA,CAAU,MAAM;AAEd,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,cAAA;AAC5C,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AACrC,IAAA,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,UAAU,CAAA;AAC/C,IAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,CAAA;AAAA,EAC5C,CAAA,EAAG,CAAC,OAAA,EAAS,IAAA,EAAM,cAAc,CAAC,CAAA;AAElC,EAAA,OAAO,IAAA;AACT;AA6CO,SAAS,kBAAkB,MAAA,EAAgD;AAChF,EAAA,MAAM,EAAE,SAAS,WAAA,GAAc,IAAA,EAAM,QAAQ,EAAC,EAAG,cAAA,GAAiB,GAAA,EAAI,GAAI,MAAA;AAE1E,EAAA,MAAM,EAAE,MAAA,GAAS,UAAA,EAAY,SAAS,UAAA,EAAY,cAAA,GAAiB,oBAAmB,GAAI,KAAA;AAE1F,EAAA,MAAM,SAAwB,EAAC;AAG/B,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAA,CAAO,IAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,yBACEC,cAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,IAAA,EAAK,iBAAgB,cAAA,EAAgC;AAAA,OAE3F;AAAA,MACA;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,yBACEA,cAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,IAAA,EAAK,iBAAgB,cAAA,EAAgC;AAAA,OAE3F;AAAA,MACA;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,kBAASA,cAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,uBAAA,EAAwB;AAAA;AAC1E,KACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT","file":"router.cjs","sourcesContent":["'use client';\n\nimport { useEffect } from 'react';\nimport type { RouteObject } from 'react-router-dom';\n\ninterface GetInsforgeRoutesConfig {\n /**\n * Base URL of your Insforge backend\n */\n baseUrl: string;\n\n /**\n * URL to redirect to after successful sign in (when token is detected in URL)\n * @default '/'\n */\n afterSignInUrl?: string;\n\n /**\n * Whether to use built-in auth (deployed Insforge Auth)\n * When true: redirects to baseUrl/auth/* pages\n * When false: no redirect routes are added (use your own components)\n * @default true\n */\n builtInAuth?: boolean;\n\n /**\n * Custom paths for auth redirect routes\n * @default {\n * signIn: '/sign-in',\n * signUp: '/sign-up',\n * forgotPassword: '/forgot-password',\n * }\n */\n paths?: {\n signIn?: string;\n signUp?: string;\n forgotPassword?: string;\n };\n}\n\n/**\n * Helper component for redirecting to external auth\n */\nfunction RedirectToAuth({\n baseUrl,\n path,\n afterSignInUrl,\n}: {\n baseUrl: string;\n path: string;\n afterSignInUrl?: string;\n}) {\n useEffect(() => {\n // Redirect back to current URL - middleware/SDK will handle token from URL\n const currentUrl = window.location.origin + afterSignInUrl;\n const authUrl = new URL(path, baseUrl);\n authUrl.searchParams.set('redirect', currentUrl);\n window.location.replace(authUrl.toString());\n }, [baseUrl, path, afterSignInUrl]);\n\n return null;\n}\n\n/**\n * Generates Insforge authentication redirect routes for React Router.\n *\n * Returns redirect routes for sign-in, sign-up, etc. that redirect to your deployed Insforge auth pages.\n *\n * @param config - Configuration for Insforge routes\n * @returns Array of RouteObject for React Router (redirect routes only)\n *\n * @example\n * ```tsx\n * import { createBrowserRouter } from 'react-router-dom';\n * import { getInsforgeRoutes } from '@insforge/react/router';\n *\n * const router = createBrowserRouter([\n * {\n * path: '/',\n * element: <Layout />,\n * children: [\n * { index: true, element: <Home /> },\n * { path: 'dashboard', element: <Dashboard /> }\n * ]\n * },\n * // Add redirect routes (sign-in, sign-up, etc.)\n * ...getInsforgeRoutes({\n * baseUrl: 'https://your-backend.com',\n * builtInAuth: true\n * })\n * ]);\n * ```\n *\n * @example\n * ```tsx\n * // Custom paths for redirect routes\n * ...getInsforgeRoutes({\n * baseUrl: 'https://your-backend.com',\n * builtInAuth: true,\n * paths: {\n * signIn: '/login',\n * signUp: '/register'\n * }\n * })\n * ```\n */\nexport function getInsforgeRoutes(config: GetInsforgeRoutesConfig): RouteObject[] {\n const { baseUrl, builtInAuth = true, paths = {}, afterSignInUrl = '/' } = config;\n\n const { signIn = '/sign-in', signUp = '/sign-up', forgotPassword = '/forgot-password' } = paths;\n\n const routes: RouteObject[] = [];\n\n // Only add redirect routes if using built-in auth\n if (builtInAuth) {\n routes.push(\n {\n path: signIn,\n element: (\n <RedirectToAuth baseUrl={baseUrl} path=\"/auth/sign-in\" afterSignInUrl={afterSignInUrl} />\n ),\n },\n {\n path: signUp,\n element: (\n <RedirectToAuth baseUrl={baseUrl} path=\"/auth/sign-up\" afterSignInUrl={afterSignInUrl} />\n ),\n },\n {\n path: forgotPassword,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/forgot-password\" />,\n }\n );\n }\n\n return routes;\n}\n"]}
package/dist/router.d.cts CHANGED
@@ -5,6 +5,11 @@ interface GetInsforgeRoutesConfig {
5
5
  * Base URL of your Insforge backend
6
6
  */
7
7
  baseUrl: string;
8
+ /**
9
+ * URL to redirect to after successful sign in (when token is detected in URL)
10
+ * @default '/'
11
+ */
12
+ afterSignInUrl?: string;
8
13
  /**
9
14
  * Whether to use built-in auth (deployed Insforge Auth)
10
15
  * When true: redirects to baseUrl/auth/* pages
@@ -17,17 +22,13 @@ interface GetInsforgeRoutesConfig {
17
22
  * @default {
18
23
  * signIn: '/sign-in',
19
24
  * signUp: '/sign-up',
20
- * verifyEmail: '/verify-email',
21
25
  * forgotPassword: '/forgot-password',
22
- * resetPassword: '/reset-password'
23
26
  * }
24
27
  */
25
28
  paths?: {
26
29
  signIn?: string;
27
30
  signUp?: string;
28
- verifyEmail?: string;
29
31
  forgotPassword?: string;
30
- resetPassword?: string;
31
32
  };
32
33
  }
33
34
  /**
package/dist/router.d.ts CHANGED
@@ -5,6 +5,11 @@ interface GetInsforgeRoutesConfig {
5
5
  * Base URL of your Insforge backend
6
6
  */
7
7
  baseUrl: string;
8
+ /**
9
+ * URL to redirect to after successful sign in (when token is detected in URL)
10
+ * @default '/'
11
+ */
12
+ afterSignInUrl?: string;
8
13
  /**
9
14
  * Whether to use built-in auth (deployed Insforge Auth)
10
15
  * When true: redirects to baseUrl/auth/* pages
@@ -17,17 +22,13 @@ interface GetInsforgeRoutesConfig {
17
22
  * @default {
18
23
  * signIn: '/sign-in',
19
24
  * signUp: '/sign-up',
20
- * verifyEmail: '/verify-email',
21
25
  * forgotPassword: '/forgot-password',
22
- * resetPassword: '/reset-password'
23
26
  * }
24
27
  */
25
28
  paths?: {
26
29
  signIn?: string;
27
30
  signUp?: string;
28
- verifyEmail?: string;
29
31
  forgotPassword?: string;
30
- resetPassword?: string;
31
32
  };
32
33
  }
33
34
  /**
package/dist/router.js CHANGED
@@ -1,46 +1,36 @@
1
1
  import { useEffect } from 'react';
2
2
  import { jsx } from 'react/jsx-runtime';
3
3
 
4
- function RedirectToAuth({ baseUrl, path }) {
4
+ function RedirectToAuth({
5
+ baseUrl,
6
+ path,
7
+ afterSignInUrl
8
+ }) {
5
9
  useEffect(() => {
6
- const currentUrl = window.location.href;
10
+ const currentUrl = window.location.origin + afterSignInUrl;
7
11
  const authUrl = new URL(path, baseUrl);
8
12
  authUrl.searchParams.set("redirect", currentUrl);
9
13
  window.location.replace(authUrl.toString());
10
- }, [baseUrl, path]);
14
+ }, [baseUrl, path, afterSignInUrl]);
11
15
  return null;
12
16
  }
13
17
  function getInsforgeRoutes(config) {
14
- const { baseUrl, builtInAuth = true, paths = {} } = config;
15
- const {
16
- signIn = "/sign-in",
17
- signUp = "/sign-up",
18
- verifyEmail = "/verify-email",
19
- forgotPassword = "/forgot-password",
20
- resetPassword = "/reset-password"
21
- } = paths;
18
+ const { baseUrl, builtInAuth = true, paths = {}, afterSignInUrl = "/" } = config;
19
+ const { signIn = "/sign-in", signUp = "/sign-up", forgotPassword = "/forgot-password" } = paths;
22
20
  const routes = [];
23
21
  if (builtInAuth) {
24
22
  routes.push(
25
23
  {
26
24
  path: signIn,
27
- element: /* @__PURE__ */ jsx(RedirectToAuth, { baseUrl, path: "/auth/sign-in" })
25
+ element: /* @__PURE__ */ jsx(RedirectToAuth, { baseUrl, path: "/auth/sign-in", afterSignInUrl })
28
26
  },
29
27
  {
30
28
  path: signUp,
31
- element: /* @__PURE__ */ jsx(RedirectToAuth, { baseUrl, path: "/auth/sign-up" })
32
- },
33
- {
34
- path: verifyEmail,
35
- element: /* @__PURE__ */ jsx(RedirectToAuth, { baseUrl, path: "/auth/verify-email" })
29
+ element: /* @__PURE__ */ jsx(RedirectToAuth, { baseUrl, path: "/auth/sign-up", afterSignInUrl })
36
30
  },
37
31
  {
38
32
  path: forgotPassword,
39
33
  element: /* @__PURE__ */ jsx(RedirectToAuth, { baseUrl, path: "/auth/forgot-password" })
40
- },
41
- {
42
- path: resetPassword,
43
- element: /* @__PURE__ */ jsx(RedirectToAuth, { baseUrl, path: "/auth/reset-password" })
44
34
  }
45
35
  );
46
36
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/router/getInsforgeRoutes.tsx"],"names":[],"mappings":";;;AAyCA,SAAS,cAAA,CAAe,EAAE,OAAA,EAAS,IAAA,EAAK,EAAsC;AAC5E,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,MAAM,UAAA,GAAa,OAAO,QAAA,CAAS,IAAA;AACnC,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AACrC,IAAA,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,UAAU,CAAA;AAC/C,IAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,CAAA;AAAA,EAC5C,CAAA,EAAG,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA;AAElB,EAAA,OAAO,IAAA;AACT;AA6CO,SAAS,kBAAkB,MAAA,EAAgD;AAChF,EAAA,MAAM,EAAE,OAAA,EAAS,WAAA,GAAc,MAAM,KAAA,GAAQ,IAAG,GAAI,MAAA;AAEpD,EAAA,MAAM;AAAA,IACJ,MAAA,GAAS,UAAA;AAAA,IACT,MAAA,GAAS,UAAA;AAAA,IACT,WAAA,GAAc,eAAA;AAAA,IACd,cAAA,GAAiB,kBAAA;AAAA,IACjB,aAAA,GAAgB;AAAA,GAClB,GAAI,KAAA;AAEJ,EAAA,MAAM,SAAwB,EAAC;AAG/B,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAA,CAAO,IAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,kBAAS,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,eAAA,EAAgB;AAAA,OAClE;AAAA,MACA;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,kBAAS,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,eAAA,EAAgB;AAAA,OAClE;AAAA,MACA;AAAA,QACE,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,kBAAS,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,oBAAA,EAAqB;AAAA,OACvE;AAAA,MACA;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,kBAAS,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,uBAAA,EAAwB;AAAA,OAC1E;AAAA,MACA;AAAA,QACE,IAAA,EAAM,aAAA;AAAA,QACN,OAAA,kBAAS,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,sBAAA,EAAuB;AAAA;AACzE,KACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT","file":"router.js","sourcesContent":["'use client';\n\nimport { useEffect } from 'react';\nimport type { RouteObject } from 'react-router-dom';\n\ninterface GetInsforgeRoutesConfig {\n /**\n * Base URL of your Insforge backend\n */\n baseUrl: string;\n\n /**\n * Whether to use built-in auth (deployed Insforge Auth)\n * When true: redirects to baseUrl/auth/* pages\n * When false: no redirect routes are added (use your own components)\n * @default true\n */\n builtInAuth?: boolean;\n\n /**\n * Custom paths for auth redirect routes\n * @default {\n * signIn: '/sign-in',\n * signUp: '/sign-up',\n * verifyEmail: '/verify-email',\n * forgotPassword: '/forgot-password',\n * resetPassword: '/reset-password'\n * }\n */\n paths?: {\n signIn?: string;\n signUp?: string;\n verifyEmail?: string;\n forgotPassword?: string;\n resetPassword?: string;\n };\n}\n\n/**\n * Helper component for redirecting to external auth\n */\nfunction RedirectToAuth({ baseUrl, path }: { baseUrl: string; path: string }) {\n useEffect(() => {\n // Redirect back to current URL - middleware/SDK will handle token from URL\n const currentUrl = window.location.href;\n const authUrl = new URL(path, baseUrl);\n authUrl.searchParams.set('redirect', currentUrl);\n window.location.replace(authUrl.toString());\n }, [baseUrl, path]);\n\n return null;\n}\n\n/**\n * Generates Insforge authentication redirect routes for React Router.\n *\n * Returns redirect routes for sign-in, sign-up, etc. that redirect to your deployed Insforge auth pages.\n *\n * @param config - Configuration for Insforge routes\n * @returns Array of RouteObject for React Router (redirect routes only)\n *\n * @example\n * ```tsx\n * import { createBrowserRouter } from 'react-router-dom';\n * import { getInsforgeRoutes } from '@insforge/react/router';\n *\n * const router = createBrowserRouter([\n * {\n * path: '/',\n * element: <Layout />,\n * children: [\n * { index: true, element: <Home /> },\n * { path: 'dashboard', element: <Dashboard /> }\n * ]\n * },\n * // Add redirect routes (sign-in, sign-up, etc.)\n * ...getInsforgeRoutes({\n * baseUrl: 'https://your-backend.com',\n * builtInAuth: true\n * })\n * ]);\n * ```\n *\n * @example\n * ```tsx\n * // Custom paths for redirect routes\n * ...getInsforgeRoutes({\n * baseUrl: 'https://your-backend.com',\n * builtInAuth: true,\n * paths: {\n * signIn: '/login',\n * signUp: '/register'\n * }\n * })\n * ```\n */\nexport function getInsforgeRoutes(config: GetInsforgeRoutesConfig): RouteObject[] {\n const { baseUrl, builtInAuth = true, paths = {} } = config;\n\n const {\n signIn = '/sign-in',\n signUp = '/sign-up',\n verifyEmail = '/verify-email',\n forgotPassword = '/forgot-password',\n resetPassword = '/reset-password',\n } = paths;\n\n const routes: RouteObject[] = [];\n\n // Only add redirect routes if using built-in auth\n if (builtInAuth) {\n routes.push(\n {\n path: signIn,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/sign-in\" />,\n },\n {\n path: signUp,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/sign-up\" />,\n },\n {\n path: verifyEmail,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/verify-email\" />,\n },\n {\n path: forgotPassword,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/forgot-password\" />,\n },\n {\n path: resetPassword,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/reset-password\" />,\n }\n );\n }\n\n return routes;\n}\n"]}
1
+ {"version":3,"sources":["../src/router/getInsforgeRoutes.tsx"],"names":[],"mappings":";;;AA2CA,SAAS,cAAA,CAAe;AAAA,EACtB,OAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,cAAA;AAC5C,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AACrC,IAAA,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,UAAU,CAAA;AAC/C,IAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,CAAA;AAAA,EAC5C,CAAA,EAAG,CAAC,OAAA,EAAS,IAAA,EAAM,cAAc,CAAC,CAAA;AAElC,EAAA,OAAO,IAAA;AACT;AA6CO,SAAS,kBAAkB,MAAA,EAAgD;AAChF,EAAA,MAAM,EAAE,SAAS,WAAA,GAAc,IAAA,EAAM,QAAQ,EAAC,EAAG,cAAA,GAAiB,GAAA,EAAI,GAAI,MAAA;AAE1E,EAAA,MAAM,EAAE,MAAA,GAAS,UAAA,EAAY,SAAS,UAAA,EAAY,cAAA,GAAiB,oBAAmB,GAAI,KAAA;AAE1F,EAAA,MAAM,SAAwB,EAAC;AAG/B,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAA,CAAO,IAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,yBACE,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,IAAA,EAAK,iBAAgB,cAAA,EAAgC;AAAA,OAE3F;AAAA,MACA;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,yBACE,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,IAAA,EAAK,iBAAgB,cAAA,EAAgC;AAAA,OAE3F;AAAA,MACA;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,kBAAS,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,uBAAA,EAAwB;AAAA;AAC1E,KACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT","file":"router.js","sourcesContent":["'use client';\n\nimport { useEffect } from 'react';\nimport type { RouteObject } from 'react-router-dom';\n\ninterface GetInsforgeRoutesConfig {\n /**\n * Base URL of your Insforge backend\n */\n baseUrl: string;\n\n /**\n * URL to redirect to after successful sign in (when token is detected in URL)\n * @default '/'\n */\n afterSignInUrl?: string;\n\n /**\n * Whether to use built-in auth (deployed Insforge Auth)\n * When true: redirects to baseUrl/auth/* pages\n * When false: no redirect routes are added (use your own components)\n * @default true\n */\n builtInAuth?: boolean;\n\n /**\n * Custom paths for auth redirect routes\n * @default {\n * signIn: '/sign-in',\n * signUp: '/sign-up',\n * forgotPassword: '/forgot-password',\n * }\n */\n paths?: {\n signIn?: string;\n signUp?: string;\n forgotPassword?: string;\n };\n}\n\n/**\n * Helper component for redirecting to external auth\n */\nfunction RedirectToAuth({\n baseUrl,\n path,\n afterSignInUrl,\n}: {\n baseUrl: string;\n path: string;\n afterSignInUrl?: string;\n}) {\n useEffect(() => {\n // Redirect back to current URL - middleware/SDK will handle token from URL\n const currentUrl = window.location.origin + afterSignInUrl;\n const authUrl = new URL(path, baseUrl);\n authUrl.searchParams.set('redirect', currentUrl);\n window.location.replace(authUrl.toString());\n }, [baseUrl, path, afterSignInUrl]);\n\n return null;\n}\n\n/**\n * Generates Insforge authentication redirect routes for React Router.\n *\n * Returns redirect routes for sign-in, sign-up, etc. that redirect to your deployed Insforge auth pages.\n *\n * @param config - Configuration for Insforge routes\n * @returns Array of RouteObject for React Router (redirect routes only)\n *\n * @example\n * ```tsx\n * import { createBrowserRouter } from 'react-router-dom';\n * import { getInsforgeRoutes } from '@insforge/react/router';\n *\n * const router = createBrowserRouter([\n * {\n * path: '/',\n * element: <Layout />,\n * children: [\n * { index: true, element: <Home /> },\n * { path: 'dashboard', element: <Dashboard /> }\n * ]\n * },\n * // Add redirect routes (sign-in, sign-up, etc.)\n * ...getInsforgeRoutes({\n * baseUrl: 'https://your-backend.com',\n * builtInAuth: true\n * })\n * ]);\n * ```\n *\n * @example\n * ```tsx\n * // Custom paths for redirect routes\n * ...getInsforgeRoutes({\n * baseUrl: 'https://your-backend.com',\n * builtInAuth: true,\n * paths: {\n * signIn: '/login',\n * signUp: '/register'\n * }\n * })\n * ```\n */\nexport function getInsforgeRoutes(config: GetInsforgeRoutesConfig): RouteObject[] {\n const { baseUrl, builtInAuth = true, paths = {}, afterSignInUrl = '/' } = config;\n\n const { signIn = '/sign-in', signUp = '/sign-up', forgotPassword = '/forgot-password' } = paths;\n\n const routes: RouteObject[] = [];\n\n // Only add redirect routes if using built-in auth\n if (builtInAuth) {\n routes.push(\n {\n path: signIn,\n element: (\n <RedirectToAuth baseUrl={baseUrl} path=\"/auth/sign-in\" afterSignInUrl={afterSignInUrl} />\n ),\n },\n {\n path: signUp,\n element: (\n <RedirectToAuth baseUrl={baseUrl} path=\"/auth/sign-up\" afterSignInUrl={afterSignInUrl} />\n ),\n },\n {\n path: forgotPassword,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/forgot-password\" />,\n }\n );\n }\n\n return routes;\n}\n"]}
package/dist/styles.css CHANGED
@@ -469,27 +469,9 @@
469
469
  /* ============================================
470
470
  VERIFICATION CODE INPUT
471
471
  ============================================ */
472
- .if-verificationCode {
473
- display: flex;
474
- flex-direction: column;
475
- gap: var(--if-space-4);
476
- }
477
-
478
- .if-verificationCode-description {
479
- font-size: var(--if-font-size-sm);
480
- color: var(--if-color-text-secondary);
481
- text-align: center;
482
- font-family: var(--if-font-family);
483
- }
484
-
485
- .if-verificationCode-email {
486
- font-weight: 600;
487
- color: var(--if-color-text);
488
- }
489
-
490
472
  .if-verificationCode-inputContainer {
491
473
  display: flex;
492
- gap: var(--if-space-2);
474
+ gap: var(--if-space-3);
493
475
  justify-content: center;
494
476
  }
495
477
 
@@ -497,12 +479,12 @@
497
479
  width: 3rem;
498
480
  height: 3rem;
499
481
  text-align: center;
500
- font-size: var(--if-font-size-xl);
482
+ font-size: var(--if-font-size-base);
501
483
  font-weight: 600;
502
- border: 2px solid var(--if-color-border);
503
- border-radius: var(--if-radius-md);
484
+ border: 1px solid var(--if-color-border);
485
+ border-radius: var(--if-radius-sm);
504
486
  transition: border-color var(--if-transition-base);
505
- font-family: var(--if-font-family);
487
+ font-family: var(--if-font-family-manrope);
506
488
  }
507
489
 
508
490
  .if-verificationCode-input:focus {
@@ -520,29 +502,51 @@
520
502
  align-items: stretch;
521
503
  }
522
504
 
523
- .if-verificationStep-description {
505
+ .if-verificationStep-descriptionContainer {
506
+ width: 100%;
507
+ background-color: #f5f5f5;
508
+ border-radius: var(--if-radius-lg);
509
+ padding: var(--if-space-3) var(--if-space-3) var(--if-space-6) var(--if-space-3);
510
+ display: flex;
511
+ flex-direction: column;
512
+ gap: var(--if-space-3);
513
+ }
514
+
515
+ .if-verificationStep-descriptionTitle {
516
+ color: var(--black, #000);
517
+ font-family: var(--if-font-family);
518
+ font-size: var(--if-font-size-base);
519
+ font-style: normal;
520
+ font-weight: 600;
521
+ line-height: 24px;
522
+ }
523
+
524
+ .if-verificationStep-description,
525
+ .if-verificationStep-codeDescription {
524
526
  font-size: var(--if-font-size-sm);
525
- color: var(--if-color-text-secondary);
526
- text-align: center;
527
- margin: 0;
527
+ color: #525252;
528
+ text-align: left;
528
529
  font-family: var(--if-font-family);
530
+ margin: 0;
531
+ }
532
+
533
+ .if-verificationLink-email,
534
+ .if-verificationCode-email {
535
+ font-weight: 500;
536
+ color: var(--if-color-text);
529
537
  }
530
538
 
531
539
  .if-verificationStep-codeContainer {
532
540
  width: 100%;
533
- background-color: #f5f5f5;
534
- border-radius: var(--if-radius-lg);
535
- padding: var(--if-space-4) var(--if-space-4) var(--if-space-6);
536
541
  display: flex;
537
542
  flex-direction: column;
538
- gap: var(--if-space-4);
543
+ gap: 40px;
539
544
  }
540
545
 
541
546
  .if-verificationStep-codeInputWrapper {
542
547
  display: flex;
543
548
  flex-direction: column;
544
- gap: var(--if-space-3);
545
- margin-top: var(--if-space-2);
549
+ gap: var(--if-space-6);
546
550
  }
547
551
 
548
552
  .if-verificationStep-verifyingText {
@@ -573,12 +577,10 @@
573
577
 
574
578
  .if-verificationStep-resendButton:not(:disabled) {
575
579
  cursor: pointer;
576
- text-decoration: underline;
577
580
  }
578
581
 
579
582
  .if-verificationStep-resendButton:disabled {
580
583
  cursor: not-allowed;
581
- text-decoration: none;
582
584
  opacity: 0.5;
583
585
  }
584
586
 
@@ -589,14 +591,6 @@
589
591
  margin-top: var(--if-space-2);
590
592
  }
591
593
 
592
- .if-passwordStrength-bar {
593
- height: 4px;
594
- background-color: #e5e7eb;
595
- border-radius: 2px;
596
- overflow: hidden;
597
- margin-bottom: var(--if-space-2);
598
- }
599
-
600
594
  .if-passwordStrength-fill {
601
595
  height: 100%;
602
596
  transition:
@@ -604,21 +598,6 @@
604
598
  background-color var(--if-transition-base);
605
599
  }
606
600
 
607
- .if-passwordStrength-fill.weak {
608
- background-color: #ef4444;
609
- width: 33%;
610
- }
611
-
612
- .if-passwordStrength-fill.medium {
613
- background-color: #f59e0b;
614
- width: 66%;
615
- }
616
-
617
- .if-passwordStrength-fill.strong {
618
- background-color: var(--if-color-success);
619
- width: 100%;
620
- }
621
-
622
601
  .if-passwordStrength-text {
623
602
  font-size: var(--if-font-size-xs);
624
603
  color: var(--if-color-text-secondary);
@@ -626,17 +605,18 @@
626
605
  }
627
606
 
628
607
  .if-passwordStrength-requirements {
629
- margin-top: var(--if-space-2);
630
- font-size: var(--if-font-size-xs);
631
- color: var(--if-color-text-secondary);
608
+ display: flex;
609
+ flex-direction: column;
610
+ gap: var(--if-space-2);
611
+ font-size: var(--if-font-size-sm);
612
+ color: #525252;
632
613
  font-family: var(--if-font-family);
633
614
  }
634
615
 
635
616
  .if-passwordStrength-requirement {
636
617
  display: flex;
637
618
  align-items: center;
638
- gap: var(--if-space-1);
639
- margin-bottom: var(--if-space-1);
619
+ gap: var(--if-space-2);
640
620
  }
641
621
 
642
622
  .if-passwordStrength-requirement.met {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@insforge/react",
3
- "version": "0.4.7",
3
+ "version": "0.4.8",
4
4
  "type": "module",
5
5
  "description": "Framework-agnostic React authentication UI components for Insforge - reusable across all frameworks",
6
6
  "main": "./dist/index.cjs",