@carlonicora/nextjs-jsonapi 6.31.0 → 6.32.1

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 (80) hide show
  1. package/dist/{BlockNoteEditor-ICGGCW6N.js → BlockNoteEditor-RD3JNEV5.js} +24 -24
  2. package/dist/{BlockNoteEditor-ICGGCW6N.js.map → BlockNoteEditor-RD3JNEV5.js.map} +1 -1
  3. package/dist/{BlockNoteEditor-O4E67ECL.mjs → BlockNoteEditor-XIEMUQCO.mjs} +4 -4
  4. package/dist/{BlockNoteViewer-BNZEXGVT.mjs → BlockNoteViewer-NVSR67X5.mjs} +2 -2
  5. package/dist/{BlockNoteViewer-YONLBNXW.js → BlockNoteViewer-RQBYHBQL.js} +3 -3
  6. package/dist/{BlockNoteViewer-YONLBNXW.js.map → BlockNoteViewer-RQBYHBQL.js.map} +1 -1
  7. package/dist/billing/index.js +465 -465
  8. package/dist/billing/index.mjs +3 -3
  9. package/dist/{chunk-HNK2O6YE.mjs → chunk-4JVLLBRS.mjs} +4 -16
  10. package/dist/chunk-4JVLLBRS.mjs.map +1 -0
  11. package/dist/{chunk-NQL2NDKH.js → chunk-5H25LM2Z.js} +10 -10
  12. package/dist/chunk-5H25LM2Z.js.map +1 -0
  13. package/dist/{chunk-FDKAVSZ6.mjs → chunk-AEBZ67JJ.mjs} +8 -8
  14. package/dist/chunk-AEBZ67JJ.mjs.map +1 -0
  15. package/dist/{chunk-JL6XL5NK.mjs → chunk-AMQFKCAX.mjs} +2 -2
  16. package/dist/{chunk-BT3VFB3I.mjs → chunk-F25BVBEH.mjs} +9 -16
  17. package/dist/chunk-F25BVBEH.mjs.map +1 -0
  18. package/dist/{chunk-5XP5G45B.js → chunk-NPGX2GJD.js} +4 -16
  19. package/dist/chunk-NPGX2GJD.js.map +1 -0
  20. package/dist/{chunk-Q5SMFSE4.js → chunk-PNCO3HMJ.js} +3 -3
  21. package/dist/{chunk-Q5SMFSE4.js.map → chunk-PNCO3HMJ.js.map} +1 -1
  22. package/dist/{chunk-M7FA63QE.js → chunk-SQNFYMYE.js} +732 -739
  23. package/dist/chunk-SQNFYMYE.js.map +1 -0
  24. package/dist/client/index.js +4 -4
  25. package/dist/client/index.mjs +3 -3
  26. package/dist/components/index.js +4 -4
  27. package/dist/components/index.mjs +3 -3
  28. package/dist/contexts/index.js +4 -4
  29. package/dist/contexts/index.mjs +3 -3
  30. package/dist/core/index.js +2 -2
  31. package/dist/core/index.mjs +1 -1
  32. package/dist/email-automations/index.js +105 -105
  33. package/dist/email-automations/index.mjs +3 -3
  34. package/dist/features/analytics/index.js +114 -114
  35. package/dist/features/analytics/index.mjs +3 -3
  36. package/dist/features/analytics/server.js +4 -4
  37. package/dist/features/analytics/server.mjs +2 -2
  38. package/dist/features/auth/components/forms/Logout.d.ts +7 -1
  39. package/dist/features/auth/components/forms/Logout.d.ts.map +1 -1
  40. package/dist/features/auth/components/forms/RefreshUser.d.ts.map +1 -1
  41. package/dist/features/auth/config.d.ts +0 -9
  42. package/dist/features/auth/config.d.ts.map +1 -1
  43. package/dist/features/auth/data/auth.service.d.ts.map +1 -1
  44. package/dist/features/auth/data/two-factor.service.d.ts.map +1 -1
  45. package/dist/features/auth/utils/AuthCookies.d.ts +0 -9
  46. package/dist/features/auth/utils/AuthCookies.d.ts.map +1 -1
  47. package/dist/features/blog/index.js +129 -129
  48. package/dist/features/blog/index.mjs +3 -3
  49. package/dist/features/blog/server.js +7 -7
  50. package/dist/features/blog/server.mjs +1 -1
  51. package/dist/features/help/index.js +37 -37
  52. package/dist/features/help/index.mjs +3 -3
  53. package/dist/features/tokenusage/index.js +114 -114
  54. package/dist/features/tokenusage/index.mjs +3 -3
  55. package/dist/features/user/contexts/CurrentUserContext.d.ts.map +1 -1
  56. package/dist/index.js +3 -3
  57. package/dist/index.mjs +2 -2
  58. package/dist/server/ServerSession.d.ts.map +1 -1
  59. package/dist/server/index.js +3 -3
  60. package/dist/server/index.mjs +2 -2
  61. package/package.json +1 -1
  62. package/src/features/auth/components/forms/Logout.tsx +8 -2
  63. package/src/features/auth/components/forms/RefreshUser.tsx +0 -3
  64. package/src/features/auth/config.ts +0 -9
  65. package/src/features/auth/data/auth.service.ts +0 -8
  66. package/src/features/auth/data/two-factor.service.ts +0 -4
  67. package/src/features/auth/utils/AuthCookies.ts +1 -23
  68. package/src/features/user/contexts/CurrentUserContext.tsx +0 -4
  69. package/src/features/user/contexts/__tests__/CurrentUserContext.spec.tsx +2 -0
  70. package/src/server/ServerSession.ts +10 -26
  71. package/src/server/__tests__/ServerSession.hasPermissionToModule.spec.ts +78 -0
  72. package/dist/chunk-5XP5G45B.js.map +0 -1
  73. package/dist/chunk-BT3VFB3I.mjs.map +0 -1
  74. package/dist/chunk-FDKAVSZ6.mjs.map +0 -1
  75. package/dist/chunk-HNK2O6YE.mjs.map +0 -1
  76. package/dist/chunk-M7FA63QE.js.map +0 -1
  77. package/dist/chunk-NQL2NDKH.js.map +0 -1
  78. /package/dist/{BlockNoteEditor-O4E67ECL.mjs.map → BlockNoteEditor-XIEMUQCO.mjs.map} +0 -0
  79. /package/dist/{BlockNoteViewer-BNZEXGVT.mjs.map → BlockNoteViewer-NVSR67X5.mjs.map} +0 -0
  80. /package/dist/{chunk-JL6XL5NK.mjs.map → chunk-AMQFKCAX.mjs.map} +0 -0
@@ -4,7 +4,8 @@ var _chunkG4JR3SFVjs = require('./chunk-G4JR3SFV.js');
4
4
 
5
5
 
6
6
 
7
- var _chunk5XP5G45Bjs = require('./chunk-5XP5G45B.js');
7
+
8
+ var _chunkNPGX2GJDjs = require('./chunk-NPGX2GJD.js');
8
9
 
9
10
 
10
11
  var _chunk7QVYU63Ejs = require('./chunk-7QVYU63E.js');
@@ -30,7 +31,8 @@ _chunk7QVYU63Ejs.__name.call(void 0, updateCacheTag, "updateCacheTag");
30
31
  var _headers = require('next/headers');
31
32
  var _navigation = require('next/navigation');
32
33
  var _server = require('next/server');
33
- var _pako = require('pako');
34
+ var _react = require('react');
35
+ var getCachedFullUser = _react.cache.call(void 0, async () => _chunkNPGX2GJDjs.UserService.findFullUser());
34
36
  var ServerSession = class {
35
37
  static {
36
38
  _chunk7QVYU63Ejs.__name.call(void 0, this, "ServerSession");
@@ -40,7 +42,7 @@ var ServerSession = class {
40
42
  const headerStore = await _headers.headers.call(void 0, );
41
43
  const token = _optionalChain([cookieStore, 'access', _ => _.get, 'call', _2 => _2("token"), 'optionalAccess', _3 => _3.value]) || void 0;
42
44
  const roles = _optionalChain([cookieStore, 'access', _4 => _4.get, 'call', _5 => _5("roles"), 'optionalAccess', _6 => _6.value]);
43
- const viewportCookie = _optionalChain([cookieStore, 'access', _7 => _7.get, 'call', _8 => _8(_chunk5XP5G45Bjs.VIEWPORT_COOKIE_NAME), 'optionalAccess', _9 => _9.value]);
45
+ const viewportCookie = _optionalChain([cookieStore, 'access', _7 => _7.get, 'call', _8 => _8(_chunkNPGX2GJDjs.VIEWPORT_COOKIE_NAME), 'optionalAccess', _9 => _9.value]);
44
46
  return {
45
47
  isLogged: !!token,
46
48
  isAdministrator: !!roles && roles.includes(_chunkG4JR3SFVjs.getRoleId.call(void 0, ).Administrator),
@@ -85,16 +87,14 @@ var ServerSession = class {
85
87
  const features = _optionalChain([cookieStore, 'access', _25 => _25.get, 'call', _26 => _26("features"), 'optionalAccess', _27 => _27.value]);
86
88
  if (features && !features.includes(params.module.feature)) return false;
87
89
  }
88
- const rawModules = _optionalChain([cookieStore, 'access', _28 => _28.get, 'call', _29 => _29("modules"), 'optionalAccess', _30 => _30.value]);
89
- if (!rawModules) return false;
90
- const modules = JSON.parse(_pako.ungzip.call(void 0, Buffer.from(rawModules, "base64"), { toText: true }));
91
- const selectedModule = modules.find((module) => module.id === params.module.moduleId);
92
- return _chunk5XP5G45Bjs.checkPermissionsFromServer.call(void 0, {
90
+ const user = await getCachedFullUser();
91
+ const selectedModule = user.modules.find((module) => module.id === params.module.moduleId);
92
+ return _chunkNPGX2GJDjs.checkPermissionsFromServer.call(void 0, {
93
93
  module: params.module,
94
94
  action: params.action,
95
95
  data: params.data,
96
96
  userId: await this.userId(),
97
- selectedModule
97
+ selectedModule: selectedModule ? { id: selectedModule.id, permissions: selectedModule.permissions } : void 0
98
98
  });
99
99
  }
100
100
  };
@@ -139,4 +139,4 @@ _chunk7QVYU63Ejs.__name.call(void 0, readBuildId, "readBuildId");
139
139
 
140
140
 
141
141
  exports.invalidateCacheTag = invalidateCacheTag; exports.invalidateCacheTags = invalidateCacheTags; exports.updateCacheTag = updateCacheTag; exports.ServerSession = ServerSession; exports.buildOfflineManifest = buildOfflineManifest;
142
- //# sourceMappingURL=chunk-NQL2NDKH.js.map
142
+ //# sourceMappingURL=chunk-5H25LM2Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-5H25LM2Z.js","../src/server/cache.ts","../src/server/ServerSession.ts","../src/offline/server/build-offline-manifest.ts"],"names":[],"mappings":"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","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-5H25LM2Z.js","sourcesContent":[null,"// Server-only utilities (NOT server actions - these cannot be called from client components)\n\nimport { revalidateTag, updateTag } from \"next/cache\";\n\nimport type { CacheProfile } from \"./cacheProfiles\";\n\nexport { CACHE_PROFILES, type CacheProfile } from \"./cacheProfiles\";\n\n/**\n * Revalidate a cache tag to invalidate cached data.\n * Next.js 16+ requires a profile parameter.\n *\n * With `\"max\"` the tagged entries are marked stale and served stale-while-revalidate\n * (a one-year window): the next request still gets the old data while fresh data loads\n * in the background. It is not an immediate invalidation. A Server Action that must\n * read its own write uses `updateCacheTag` instead.\n *\n * @param tag - The cache tag to invalidate\n * @param profile - The cache profile whose `expire` bounds how long stale data may be served (defaults to \"max\")\n */\nexport async function invalidateCacheTag(tag: string, profile: CacheProfile = \"max\"): Promise<void> {\n revalidateTag(tag, profile);\n}\n\n/**\n * Revalidate multiple cache tags.\n *\n * @param tags - Array of cache tags to invalidate\n * @param profile - The cache profile, see `invalidateCacheTag` (defaults to \"max\", stale-while-revalidate)\n */\nexport async function invalidateCacheTags(tags: string[], profile: CacheProfile = \"max\"): Promise<void> {\n for (const tag of tags) {\n revalidateTag(tag, profile);\n }\n}\n\n/**\n * Expire a cache tag immediately, so the same request reads fresh data (read-your-own-writes).\n * Wraps `updateTag`, which works in Server Actions only. Route Handlers use `invalidateCacheTag`.\n *\n * @param tag - The cache tag to expire\n */\nexport async function updateCacheTag(tag: string): Promise<void> {\n updateTag(tag);\n}\n","import { cookies, headers } from \"next/headers\";\nimport { redirect } from \"next/navigation\";\nimport { userAgent } from \"next/server\";\nimport { cache } from \"react\";\nimport { UserService } from \"../features/user/data/user.service\";\nimport { Action, checkPermissionsFromServer, ModuleWithPermissions } from \"../permissions\";\nimport { getRoleId } from \"../roles/config\";\nimport { VIEWPORT_COOKIE_NAME } from \"../utils/use-mobile\";\n\n// The user's modules come from the api once per request. They no longer travel in a\n// cookie: a non-admin user's scoped permissions push it past the browser's 4096-byte limit.\n// No `cache` option on the request: it carries the user's token.\nconst getCachedFullUser = cache(async () => UserService.findFullUser());\n\nexport interface SessionSnapshot {\n isLogged: boolean;\n isAdministrator: boolean;\n token?: string;\n sidebarOpen: boolean;\n isMobile: boolean;\n /** The request's raw `Accept-Language` header; the date locale is resolved from it on the client. */\n acceptLanguage?: string;\n}\n\nexport class ServerSession {\n static async read(): Promise<SessionSnapshot> {\n const cookieStore = await cookies();\n const headerStore = await headers();\n\n const token = cookieStore.get(\"token\")?.value || undefined;\n const roles = cookieStore.get(\"roles\")?.value;\n const viewportCookie = cookieStore.get(VIEWPORT_COOKIE_NAME)?.value;\n\n return {\n isLogged: !!token,\n isAdministrator: !!roles && roles.includes(getRoleId().Administrator),\n token,\n sidebarOpen: cookieStore.get(\"sidebar_state\")?.value !== \"false\",\n isMobile: viewportCookie ? viewportCookie === \"1\" : userAgent({ headers: headerStore }).device.type === \"mobile\",\n acceptLanguage: headerStore.get(\"accept-language\") ?? undefined,\n };\n }\n\n static async isLogged() {\n const cookieStore = await cookies();\n const token = cookieStore.get(\"token\");\n\n if (!token || !token.value) return false;\n return true;\n }\n\n static async companyId() {\n const cookieStore = await cookies();\n return cookieStore.get(\"companyId\")?.value ?? \"\";\n }\n\n static async userId() {\n const cookieStore = await cookies();\n return cookieStore.get(\"userId\")?.value ?? \"\";\n }\n\n static async checkPermission<M extends ModuleWithPermissions>(params: { module: M; action: Action; data?: any }) {\n if (!(await this.hasPermissionToModule(params))) redirect(`/401`);\n }\n\n static async hasRole(roleId: string): Promise<boolean> {\n const cookieStore = await cookies();\n const roles = cookieStore.get(\"roles\")?.value;\n\n if (!roles || !roles.includes(roleId)) return false;\n\n return true;\n }\n\n static async hasFeature(featureId: string): Promise<boolean> {\n const cookieStore = await cookies();\n const features = cookieStore.get(\"features\")?.value;\n\n if (!features || !features.includes(featureId)) return false;\n\n return true;\n }\n\n static async hasPermissionToModule<M extends ModuleWithPermissions>(params: {\n module: M;\n action: Action;\n data?: any;\n }): Promise<boolean> {\n const cookieStore = await cookies();\n\n if (params.module.feature) {\n const features = cookieStore.get(\"features\")?.value;\n\n if (features && !features.includes(params.module.feature)) return false;\n }\n\n const user = await getCachedFullUser();\n const selectedModule = user.modules.find((module) => module.id === params.module.moduleId);\n\n return checkPermissionsFromServer({\n module: params.module,\n action: params.action,\n data: params.data,\n userId: await this.userId(),\n selectedModule: selectedModule ? { id: selectedModule.id, permissions: selectedModule.permissions } : undefined,\n });\n }\n}\n","import { createHash } from \"node:crypto\";\nimport { readdir, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type OfflineManifest = { buildId: string; assets: string[] };\n\nasync function listFiles(dir: string): Promise<string[]> {\n const entries = await readdir(dir, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) files.push(...(await listFiles(full)));\n else if (entry.isFile()) files.push(full);\n }\n return files;\n}\n\n/**\n * Describes the running build for the service worker's offline shell precache\n * (`/offline-manifest.json`): the build id from `<distDir>/BUILD_ID` and every\n * file under `<distDir>/static`, as the `/_next/static/...` URL Next serves it at.\n * `next dev` writes no BUILD_ID (its folder is `.next/dev`): the id is then `dev-` plus a hash\n * of the asset list. Dev chunk names do NOT carry content hashes (an edit rewrites a chunk under\n * the same name), so the id changes only when files appear or disappear; the service worker\n * therefore serves `/_next/static/` network first for a `dev-` build (pwa/sw.js).\n * `distDir` must be the value the app's next.config uses. `extraAssets` are further same-origin\n * URLs the shell needs with no network (the SQLite files the device worker loads).\n */\nexport async function buildOfflineManifest(params: {\n distDir: string;\n extraAssets?: string[];\n}): Promise<OfflineManifest> {\n const staticDir = path.join(params.distDir, \"static\");\n const files = await listFiles(staticDir);\n const assets = files\n .map((file) => `/_next/static/${path.relative(staticDir, file).split(path.sep).join(\"/\")}`)\n .concat(params.extraAssets ?? [])\n .sort();\n const buildId = await readBuildId(params.distDir, assets);\n return { buildId, assets };\n}\n\nasync function readBuildId(distDir: string, assets: string[]): Promise<string> {\n try {\n return (await readFile(path.join(distDir, \"BUILD_ID\"), \"utf8\")).trim();\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n return `dev-${createHash(\"sha256\").update(assets.join(\"\\n\")).digest(\"hex\").slice(0, 16)}`;\n }\n}\n"]}
@@ -2,9 +2,10 @@ import {
2
2
  getRoleId
3
3
  } from "./chunk-PW42LRSL.mjs";
4
4
  import {
5
+ UserService,
5
6
  VIEWPORT_COOKIE_NAME,
6
7
  checkPermissionsFromServer
7
- } from "./chunk-HNK2O6YE.mjs";
8
+ } from "./chunk-4JVLLBRS.mjs";
8
9
  import {
9
10
  __name
10
11
  } from "./chunk-PAWJFY3S.mjs";
@@ -30,7 +31,8 @@ __name(updateCacheTag, "updateCacheTag");
30
31
  import { cookies, headers } from "next/headers";
31
32
  import { redirect } from "next/navigation";
32
33
  import { userAgent } from "next/server";
33
- import { ungzip } from "pako";
34
+ import { cache } from "react";
35
+ var getCachedFullUser = cache(async () => UserService.findFullUser());
34
36
  var ServerSession = class {
35
37
  static {
36
38
  __name(this, "ServerSession");
@@ -85,16 +87,14 @@ var ServerSession = class {
85
87
  const features = cookieStore.get("features")?.value;
86
88
  if (features && !features.includes(params.module.feature)) return false;
87
89
  }
88
- const rawModules = cookieStore.get("modules")?.value;
89
- if (!rawModules) return false;
90
- const modules = JSON.parse(ungzip(Buffer.from(rawModules, "base64"), { toText: true }));
91
- const selectedModule = modules.find((module) => module.id === params.module.moduleId);
90
+ const user = await getCachedFullUser();
91
+ const selectedModule = user.modules.find((module) => module.id === params.module.moduleId);
92
92
  return checkPermissionsFromServer({
93
93
  module: params.module,
94
94
  action: params.action,
95
95
  data: params.data,
96
96
  userId: await this.userId(),
97
- selectedModule
97
+ selectedModule: selectedModule ? { id: selectedModule.id, permissions: selectedModule.permissions } : void 0
98
98
  });
99
99
  }
100
100
  };
@@ -139,4 +139,4 @@ export {
139
139
  ServerSession,
140
140
  buildOfflineManifest
141
141
  };
142
- //# sourceMappingURL=chunk-FDKAVSZ6.mjs.map
142
+ //# sourceMappingURL=chunk-AEBZ67JJ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server/cache.ts","../src/server/ServerSession.ts","../src/offline/server/build-offline-manifest.ts"],"sourcesContent":["// Server-only utilities (NOT server actions - these cannot be called from client components)\n\nimport { revalidateTag, updateTag } from \"next/cache\";\n\nimport type { CacheProfile } from \"./cacheProfiles\";\n\nexport { CACHE_PROFILES, type CacheProfile } from \"./cacheProfiles\";\n\n/**\n * Revalidate a cache tag to invalidate cached data.\n * Next.js 16+ requires a profile parameter.\n *\n * With `\"max\"` the tagged entries are marked stale and served stale-while-revalidate\n * (a one-year window): the next request still gets the old data while fresh data loads\n * in the background. It is not an immediate invalidation. A Server Action that must\n * read its own write uses `updateCacheTag` instead.\n *\n * @param tag - The cache tag to invalidate\n * @param profile - The cache profile whose `expire` bounds how long stale data may be served (defaults to \"max\")\n */\nexport async function invalidateCacheTag(tag: string, profile: CacheProfile = \"max\"): Promise<void> {\n revalidateTag(tag, profile);\n}\n\n/**\n * Revalidate multiple cache tags.\n *\n * @param tags - Array of cache tags to invalidate\n * @param profile - The cache profile, see `invalidateCacheTag` (defaults to \"max\", stale-while-revalidate)\n */\nexport async function invalidateCacheTags(tags: string[], profile: CacheProfile = \"max\"): Promise<void> {\n for (const tag of tags) {\n revalidateTag(tag, profile);\n }\n}\n\n/**\n * Expire a cache tag immediately, so the same request reads fresh data (read-your-own-writes).\n * Wraps `updateTag`, which works in Server Actions only. Route Handlers use `invalidateCacheTag`.\n *\n * @param tag - The cache tag to expire\n */\nexport async function updateCacheTag(tag: string): Promise<void> {\n updateTag(tag);\n}\n","import { cookies, headers } from \"next/headers\";\nimport { redirect } from \"next/navigation\";\nimport { userAgent } from \"next/server\";\nimport { cache } from \"react\";\nimport { UserService } from \"../features/user/data/user.service\";\nimport { Action, checkPermissionsFromServer, ModuleWithPermissions } from \"../permissions\";\nimport { getRoleId } from \"../roles/config\";\nimport { VIEWPORT_COOKIE_NAME } from \"../utils/use-mobile\";\n\n// The user's modules come from the api once per request. They no longer travel in a\n// cookie: a non-admin user's scoped permissions push it past the browser's 4096-byte limit.\n// No `cache` option on the request: it carries the user's token.\nconst getCachedFullUser = cache(async () => UserService.findFullUser());\n\nexport interface SessionSnapshot {\n isLogged: boolean;\n isAdministrator: boolean;\n token?: string;\n sidebarOpen: boolean;\n isMobile: boolean;\n /** The request's raw `Accept-Language` header; the date locale is resolved from it on the client. */\n acceptLanguage?: string;\n}\n\nexport class ServerSession {\n static async read(): Promise<SessionSnapshot> {\n const cookieStore = await cookies();\n const headerStore = await headers();\n\n const token = cookieStore.get(\"token\")?.value || undefined;\n const roles = cookieStore.get(\"roles\")?.value;\n const viewportCookie = cookieStore.get(VIEWPORT_COOKIE_NAME)?.value;\n\n return {\n isLogged: !!token,\n isAdministrator: !!roles && roles.includes(getRoleId().Administrator),\n token,\n sidebarOpen: cookieStore.get(\"sidebar_state\")?.value !== \"false\",\n isMobile: viewportCookie ? viewportCookie === \"1\" : userAgent({ headers: headerStore }).device.type === \"mobile\",\n acceptLanguage: headerStore.get(\"accept-language\") ?? undefined,\n };\n }\n\n static async isLogged() {\n const cookieStore = await cookies();\n const token = cookieStore.get(\"token\");\n\n if (!token || !token.value) return false;\n return true;\n }\n\n static async companyId() {\n const cookieStore = await cookies();\n return cookieStore.get(\"companyId\")?.value ?? \"\";\n }\n\n static async userId() {\n const cookieStore = await cookies();\n return cookieStore.get(\"userId\")?.value ?? \"\";\n }\n\n static async checkPermission<M extends ModuleWithPermissions>(params: { module: M; action: Action; data?: any }) {\n if (!(await this.hasPermissionToModule(params))) redirect(`/401`);\n }\n\n static async hasRole(roleId: string): Promise<boolean> {\n const cookieStore = await cookies();\n const roles = cookieStore.get(\"roles\")?.value;\n\n if (!roles || !roles.includes(roleId)) return false;\n\n return true;\n }\n\n static async hasFeature(featureId: string): Promise<boolean> {\n const cookieStore = await cookies();\n const features = cookieStore.get(\"features\")?.value;\n\n if (!features || !features.includes(featureId)) return false;\n\n return true;\n }\n\n static async hasPermissionToModule<M extends ModuleWithPermissions>(params: {\n module: M;\n action: Action;\n data?: any;\n }): Promise<boolean> {\n const cookieStore = await cookies();\n\n if (params.module.feature) {\n const features = cookieStore.get(\"features\")?.value;\n\n if (features && !features.includes(params.module.feature)) return false;\n }\n\n const user = await getCachedFullUser();\n const selectedModule = user.modules.find((module) => module.id === params.module.moduleId);\n\n return checkPermissionsFromServer({\n module: params.module,\n action: params.action,\n data: params.data,\n userId: await this.userId(),\n selectedModule: selectedModule ? { id: selectedModule.id, permissions: selectedModule.permissions } : undefined,\n });\n }\n}\n","import { createHash } from \"node:crypto\";\nimport { readdir, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport type OfflineManifest = { buildId: string; assets: string[] };\n\nasync function listFiles(dir: string): Promise<string[]> {\n const entries = await readdir(dir, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) files.push(...(await listFiles(full)));\n else if (entry.isFile()) files.push(full);\n }\n return files;\n}\n\n/**\n * Describes the running build for the service worker's offline shell precache\n * (`/offline-manifest.json`): the build id from `<distDir>/BUILD_ID` and every\n * file under `<distDir>/static`, as the `/_next/static/...` URL Next serves it at.\n * `next dev` writes no BUILD_ID (its folder is `.next/dev`): the id is then `dev-` plus a hash\n * of the asset list. Dev chunk names do NOT carry content hashes (an edit rewrites a chunk under\n * the same name), so the id changes only when files appear or disappear; the service worker\n * therefore serves `/_next/static/` network first for a `dev-` build (pwa/sw.js).\n * `distDir` must be the value the app's next.config uses. `extraAssets` are further same-origin\n * URLs the shell needs with no network (the SQLite files the device worker loads).\n */\nexport async function buildOfflineManifest(params: {\n distDir: string;\n extraAssets?: string[];\n}): Promise<OfflineManifest> {\n const staticDir = path.join(params.distDir, \"static\");\n const files = await listFiles(staticDir);\n const assets = files\n .map((file) => `/_next/static/${path.relative(staticDir, file).split(path.sep).join(\"/\")}`)\n .concat(params.extraAssets ?? [])\n .sort();\n const buildId = await readBuildId(params.distDir, assets);\n return { buildId, assets };\n}\n\nasync function readBuildId(distDir: string, assets: string[]): Promise<string> {\n try {\n return (await readFile(path.join(distDir, \"BUILD_ID\"), \"utf8\")).trim();\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") throw error;\n return `dev-${createHash(\"sha256\").update(assets.join(\"\\n\")).digest(\"hex\").slice(0, 16)}`;\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AbstractService
3
- } from "./chunk-HNK2O6YE.mjs";
3
+ } from "./chunk-4JVLLBRS.mjs";
4
4
  import {
5
5
  EndpointCreator,
6
6
  Modules
@@ -351,4 +351,4 @@ export {
351
351
  ACTION_TYPES,
352
352
  RbacService
353
353
  };
354
- //# sourceMappingURL=chunk-JL6XL5NK.mjs.map
354
+ //# sourceMappingURL=chunk-AMQFKCAX.mjs.map
@@ -28,7 +28,7 @@ import {
28
28
  isReferralEnabled,
29
29
  isRegistrationAllowed,
30
30
  useWaitlistText
31
- } from "./chunk-JL6XL5NK.mjs";
31
+ } from "./chunk-AMQFKCAX.mjs";
32
32
  import {
33
33
  getRoleId,
34
34
  isRolesConfigured
@@ -103,7 +103,7 @@ import {
103
103
  useIsMobile,
104
104
  validateItalianTaxCode,
105
105
  validatePartitaIva
106
- } from "./chunk-HNK2O6YE.mjs";
106
+ } from "./chunk-4JVLLBRS.mjs";
107
107
  import {
108
108
  dateFormatLocale,
109
109
  formatDate
@@ -8085,11 +8085,7 @@ var CurrentUserProvider = /* @__PURE__ */ __name(({ children }) => {
8085
8085
  userId: fullUser.id,
8086
8086
  companyId: fullUser.company?.id,
8087
8087
  roles: fullUser.roles.map((role) => role.id),
8088
- features: fullUser.company?.features?.map((feature) => feature.id) ?? [],
8089
- modules: fullUser.modules.map((module) => ({
8090
- id: module.id,
8091
- permissions: module.permissions
8092
- }))
8088
+ features: fullUser.company?.features?.map((feature) => feature.id) ?? []
8093
8089
  });
8094
8090
  }
8095
8091
  setDehydratedUser(fullUser.dehydrate());
@@ -10883,7 +10879,7 @@ import { useRef as useRef18 } from "react";
10883
10879
  import dynamic from "next/dynamic";
10884
10880
  import React18 from "react";
10885
10881
  import { jsx as jsx91 } from "react/jsx-runtime";
10886
- var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-O4E67ECL.mjs"), {
10882
+ var BlockNoteEditor = dynamic(() => import("./BlockNoteEditor-XIEMUQCO.mjs"), {
10887
10883
  ssr: false
10888
10884
  });
10889
10885
  var BlockNoteEditorContainer = React18.memo(/* @__PURE__ */ __name(function EditorContainer(props) {
@@ -17317,7 +17313,7 @@ __name(removeTrailingEmptyBlocks, "removeTrailingEmptyBlocks");
17317
17313
  import dynamic2 from "next/dynamic";
17318
17314
  import React29 from "react";
17319
17315
  import { jsx as jsx178 } from "react/jsx-runtime";
17320
- var BlockNoteViewer = dynamic2(() => import("./BlockNoteViewer-BNZEXGVT.mjs").then((m) => m.BlockNoteViewer), { ssr: false });
17316
+ var BlockNoteViewer = dynamic2(() => import("./BlockNoteViewer-NVSR67X5.mjs").then((m) => m.BlockNoteViewer), { ssr: false });
17321
17317
  var BlockNoteViewerContainer = React29.memo(/* @__PURE__ */ __name(function ViewerContainer(props) {
17322
17318
  return /* @__PURE__ */ jsx178(BlockNoteViewer, { ...props });
17323
17319
  }, "ViewerContainer"));
@@ -22116,14 +22112,14 @@ __name(clearClientStorage, "clearClientStorage");
22116
22112
 
22117
22113
  // src/features/auth/components/forms/Logout.tsx
22118
22114
  import { Fragment as Fragment44, jsx as jsx231 } from "react/jsx-runtime";
22119
- function Logout({ storageKeys, beforeLogout }) {
22115
+ function Logout({ storageKeys, beforeLogout, redirectTo }) {
22120
22116
  const generateUrl = usePageUrlGenerator();
22121
22117
  useEffect66(() => {
22122
22118
  const logOut = /* @__PURE__ */ __name(async () => {
22123
22119
  if (beforeLogout && !await beforeLogout()) return;
22124
22120
  clearClientStorage([CURRENT_USER_STORAGE_KEY, ...storageKeys ?? []]);
22125
22121
  await AuthService.logout();
22126
- window.location.href = generateUrl({ page: `/` });
22122
+ window.location.href = redirectTo ?? generateUrl({ page: `/` });
22127
22123
  }, "logOut");
22128
22124
  logOut();
22129
22125
  }, []);
@@ -22144,10 +22140,7 @@ function RefreshUser() {
22144
22140
  userId: fullUser.id,
22145
22141
  companyId: fullUser.company?.id,
22146
22142
  roles: fullUser.roles.map((role) => role.id),
22147
- features: fullUser.company?.features?.map((feature) => feature.id) ?? [],
22148
- modules: fullUser.modules.map((module) => {
22149
- return { id: module.id, permissions: module.permissions };
22150
- })
22143
+ features: fullUser.company?.features?.map((feature) => feature.id) ?? []
22151
22144
  };
22152
22145
  await getTokenHandler()?.updateToken(token);
22153
22146
  deleteCookie("reloadData");
@@ -31097,4 +31090,4 @@ export {
31097
31090
  useOAuthClients,
31098
31091
  useOAuthClient
31099
31092
  };
31100
- //# sourceMappingURL=chunk-BT3VFB3I.mjs.map
31093
+ //# sourceMappingURL=chunk-F25BVBEH.mjs.map