@studiocubics/cms 0.0.4 → 0.0.6

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 (96) hide show
  1. package/README.md +0 -13
  2. package/dist/client/constants/pageLimits.d.ts +1 -0
  3. package/dist/client/constants/pageLimits.js +1 -1
  4. package/dist/client/constants/pageLimits.js.map +1 -1
  5. package/dist/client/index.js +1 -1
  6. package/dist/client/ui/System/Invitations/InvitationListPage.d.ts +1 -2
  7. package/dist/client/ui/System/Invitations/InvitationListPage.js +1 -1
  8. package/dist/client/ui/System/Invitations/InvitationListPage.js.map +1 -1
  9. package/dist/client/ui/System/Permissions/RolePermissionsPage.d.ts +1 -4
  10. package/dist/client/ui/System/Permissions/RolePermissionsPage.js +1 -1
  11. package/dist/client/ui/System/Permissions/RolePermissionsPage.js.map +1 -1
  12. package/dist/client/ui/System/Sessions/SessionActions.d.ts +6 -0
  13. package/dist/client/ui/System/Sessions/SessionActions.js +2 -0
  14. package/dist/client/ui/System/Sessions/SessionActions.js.map +1 -0
  15. package/dist/client/ui/System/Sessions/SessionList.d.ts +1 -0
  16. package/dist/client/ui/System/Sessions/SessionList.js +2 -0
  17. package/dist/client/ui/System/Sessions/SessionList.js.map +1 -0
  18. package/dist/client/ui/System/Sessions/SessionListCard/SessionListCard.d.ts +6 -0
  19. package/dist/client/ui/System/Sessions/SessionListCard/SessionListCard.js +2 -0
  20. package/dist/client/ui/System/Sessions/SessionListCard/SessionListCard.js.map +1 -0
  21. package/dist/client/ui/System/Sessions/SessionListCard/SessionListCard.module.css.js +2 -0
  22. package/dist/client/ui/System/Sessions/SessionListCard/SessionListCard.module.css.js.map +1 -0
  23. package/dist/client/ui/System/Sessions/SessionListPagination.d.ts +4 -0
  24. package/dist/client/ui/System/Sessions/SessionListPagination.js +2 -0
  25. package/dist/client/ui/System/Sessions/SessionListPagination.js.map +1 -0
  26. package/dist/client/ui/System/Sessions/SessionsActive/SessionsActive.d.ts +4 -0
  27. package/dist/client/ui/System/Sessions/SessionsActive/SessionsActive.js +2 -0
  28. package/dist/client/ui/System/Sessions/SessionsActive/SessionsActive.js.map +1 -0
  29. package/dist/client/ui/System/Sessions/SessionsActive/SessionsActive.module.css.js +2 -0
  30. package/dist/client/ui/System/Sessions/SessionsActive/SessionsActive.module.css.js.map +1 -0
  31. package/dist/client/ui/System/Sessions/SessionsListPage.d.ts +1 -0
  32. package/dist/client/ui/System/Sessions/SessionsListPage.js +2 -0
  33. package/dist/client/ui/System/Sessions/SessionsListPage.js.map +1 -0
  34. package/dist/client/ui/System/Sessions/_index.d.ts +6 -0
  35. package/dist/client/ui/System/SystemUser/SystemUserActions.d.ts +8 -3
  36. package/dist/client/ui/System/SystemUser/SystemUserActions.js +1 -1
  37. package/dist/client/ui/System/SystemUser/SystemUserActions.js.map +1 -1
  38. package/dist/client/ui/System/SystemUser/SystemUserBanUnbanDialog.d.ts +8 -0
  39. package/dist/client/ui/System/SystemUser/SystemUserBanUnbanDialog.js +2 -0
  40. package/dist/client/ui/System/SystemUser/SystemUserBanUnbanDialog.js.map +1 -0
  41. package/dist/client/ui/System/SystemUser/SystemUserDeleteDialog.d.ts +7 -0
  42. package/dist/client/ui/System/SystemUser/SystemUserDeleteDialog.js +2 -0
  43. package/dist/client/ui/System/SystemUser/SystemUserDeleteDialog.js.map +1 -0
  44. package/dist/client/ui/System/SystemUser/SystemUserDetails/SystemUserDetails.d.ts +3 -2
  45. package/dist/client/ui/System/SystemUser/SystemUserDetails/SystemUserDetails.js +1 -1
  46. package/dist/client/ui/System/SystemUser/SystemUserDetails/SystemUserDetails.js.map +1 -1
  47. package/dist/client/ui/System/SystemUser/SystemUserDetailsForm/SystemUserDetailsForm.d.ts +5 -3
  48. package/dist/client/ui/System/SystemUser/SystemUserDetailsForm/SystemUserDetailsForm.js +1 -1
  49. package/dist/client/ui/System/SystemUser/SystemUserDetailsForm/SystemUserDetailsForm.js.map +1 -1
  50. package/dist/client/ui/System/SystemUser/SystemUserList.js +1 -1
  51. package/dist/client/ui/System/SystemUser/SystemUserList.js.map +1 -1
  52. package/dist/client/ui/System/SystemUser/SystemUserListActions.js +1 -1
  53. package/dist/client/ui/System/SystemUser/SystemUserListActions.js.map +1 -1
  54. package/dist/client/ui/System/SystemUser/SystemUserListCard.d.ts +1 -0
  55. package/dist/client/ui/System/SystemUser/SystemUserListCard.js +1 -1
  56. package/dist/client/ui/System/SystemUser/SystemUserListCard.js.map +1 -1
  57. package/dist/client/ui/System/SystemUser/SystemUserListPage.d.ts +1 -2
  58. package/dist/client/ui/System/SystemUser/SystemUserListPage.js +1 -1
  59. package/dist/client/ui/System/SystemUser/SystemUserListPage.js.map +1 -1
  60. package/dist/client/ui/System/SystemUser/SystemUserListSort.d.ts +1 -0
  61. package/dist/client/ui/System/SystemUser/SystemUserListSort.js +2 -0
  62. package/dist/client/ui/System/SystemUser/SystemUserListSort.js.map +1 -0
  63. package/dist/client/ui/System/SystemUser/SystemUserPage.js +1 -1
  64. package/dist/client/ui/System/SystemUser/SystemUserPage.js.map +1 -1
  65. package/dist/client/ui/System/SystemUser/SystemUserPageContent.js +1 -1
  66. package/dist/client/ui/System/SystemUser/SystemUserPageContent.js.map +1 -1
  67. package/dist/client/ui/System/SystemUser/SystemUserRole/SystemUserRole.d.ts +3 -1
  68. package/dist/client/ui/System/SystemUser/SystemUserRole/SystemUserRole.js +1 -1
  69. package/dist/client/ui/System/SystemUser/SystemUserRole/SystemUserRole.js.map +1 -1
  70. package/dist/client/ui/System/SystemUser/SystemUserRoleForm/SystemUserRoleForm.d.ts +4 -2
  71. package/dist/client/ui/System/SystemUser/SystemUserRoleForm/SystemUserRoleForm.js +1 -1
  72. package/dist/client/ui/System/SystemUser/SystemUserRoleForm/SystemUserRoleForm.js.map +1 -1
  73. package/dist/client/ui/System/SystemUser/_index.d.ts +1 -0
  74. package/dist/client/ui/System/_index.d.ts +1 -1
  75. package/dist/index.css +1 -1
  76. package/dist/server/clerk/_index.d.ts +0 -1
  77. package/dist/server/clerk/actions/invitations.d.ts +0 -1
  78. package/dist/server/clerk/actions/invitations.js.map +1 -1
  79. package/dist/server/clerk/actions/sessions.d.ts +4 -0
  80. package/dist/server/clerk/actions/sessions.js +2 -0
  81. package/dist/server/clerk/actions/sessions.js.map +1 -0
  82. package/dist/server/clerk/actions/systemUsers.d.ts +4 -1
  83. package/dist/server/clerk/actions/systemUsers.js +1 -1
  84. package/dist/server/clerk/actions/systemUsers.js.map +1 -1
  85. package/dist/server/clerk/auth.d.ts +3 -3
  86. package/dist/server/clerk/auth.js.map +1 -1
  87. package/dist/server/clerk/schemas/systemUser.d.ts +3 -1
  88. package/dist/server/clerk/schemas/systemUser.js +2 -0
  89. package/dist/server/clerk/schemas/systemUser.js.map +1 -0
  90. package/dist/server/clerk/toClientSafeUser.d.ts +1 -1
  91. package/dist/server/clerk/toClientSafeUser.js +1 -1
  92. package/dist/server/clerk/toClientSafeUser.js.map +1 -1
  93. package/dist/server/index.d.ts +1 -5
  94. package/dist/server/index.js +1 -1
  95. package/package.json +9 -11
  96. package/dist/client/ui/System/types.d.ts +0 -5
@@ -1,2 +1,2 @@
1
- "use client";import{jsx as e,jsxs as i,Fragment as s}from"react/jsx-runtime";import{List as r,ListItem as t,CollectionItemCard as o,CollectionItemCardActions as n}from"@studiocubics/components";import{toCapitalised as c}from"@studiocubics/utils";import{BrickWallShield as a,OctagonX as l,EllipsisVertical as m,History as u}from"lucide-react";import d from"next/link";import{SystemUserDeleteListItem as p}from"./SystemUserActions.js";function f(f){const{id:h,fullName:y,imageUrl:b,emailAddress:g,role:N,lastSignInAt:U}=f,v=[{actionType:"link",icon:e(a,{}),label:"View Sessions",href:`/dashboard/security/systemUsers/${h}/sessions`,prefetch:!0,as:d},{actionType:"popover",icon:e(m,{}),popoverChildren:i(r,{className:"surfaceContainer",children:[e(p,{uid:h,fullName:y}),e(t,{startIcon:e(l,{}),children:"Ban User",color:"error"})]})}];return e(o,{as:d,href:`/dashboard/security/systemUsers/${h}`,title:y??"Name is missing",thumbnail:e("img",{src:b,alt:y??""}),subtitle:g,chip:c(N),description:U?i(s,{children:[e(u,{size:16})," Last Active ",e("strong",{children:new Date(U).toDateString()})]}):"No activity found!",footer:e(n,{actions:v})})}export{f as SystemUserListCard};
1
+ "use client";import{jsx as e,jsxs as i,Fragment as s}from"react/jsx-runtime";import{List as r,CollectionItemCard as t,CollectionItemCardActions as o}from"@studiocubics/components";import{toCapitalised as n}from"@studiocubics/utils";import{BrickWallShield as a,EllipsisVertical as c,History as l}from"lucide-react";import m from"next/link";import{SystemUserDeleteListItem as d,SystemUserBanListItem as u}from"./SystemUserActions.js";function p(p){const{id:f,fullName:h,imageUrl:b,emailAddress:y,role:g,lastSignInAt:N,banned:v}=p,A=[{actionType:"link",icon:e(a,{}),label:"View Sessions",href:`/dashboard/security/systemUsers/${f}/sessions`,prefetch:!0,as:m},{label:"View Options",actionType:"popover",icon:e(c,{}),popoverChildren:i(r,{className:"surfaceContainer",children:[e(d,{userId:f,fullName:h}),e(u,{userId:f,fullName:h,banned:v})]})}];return e(t,{as:m,href:`/dashboard/security/systemUsers/${f}`,title:h??"Name is missing",thumbnail:e("img",{src:b,alt:h??""}),subtitle:y,chip:v?"Banned":n(g),slotProps:{chip:{color:v?"error":void 0}},description:N?i(s,{children:[e(l,{size:16})," Last Active ",e("strong",{children:new Date(N).toDateString()})]}):"No activity found!",footer:e(o,{actions:A})})}export{p as SystemUserListCard};
2
2
  //# sourceMappingURL=SystemUserListCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SystemUserListCard.js","sources":["../../../../../src/client/ui/System/SystemUser/SystemUserListCard.tsx"],"sourcesContent":["\"use client\";\n\nimport type { User } from \"@clerk/nextjs/server\";\nimport {\n CollectionItemCard,\n CollectionItemCardActions,\n type DocumentAction,\n List,\n ListItem,\n} from \"@studiocubics/components\";\nimport { toCapitalised } from \"@studiocubics/utils\";\nimport {\n BrickWallShield,\n EllipsisVertical,\n History,\n OctagonX,\n} from \"lucide-react\";\nimport Link from \"next/link\";\nimport { SystemUserDeleteListItem } from \"./SystemUserActions\";\nimport type { Route } from \"next\";\nimport type { Role } from \"../../../clerk/rbacConfig\";\n\nexport interface SystemUserListCardProps {\n id: User[\"id\"];\n fullName: User[\"fullName\"];\n imageUrl: User[\"imageUrl\"];\n emailAddress?: NonNullable<User[\"primaryEmailAddress\"]>[\"emailAddress\"];\n role?: Role;\n lastSignInAt?: User[\"lastActiveAt\"];\n}\n\nexport function SystemUserListCard(props: SystemUserListCardProps) {\n const { id, fullName, imageUrl, emailAddress, role, lastSignInAt } = props;\n const actions: DocumentAction[] = [\n {\n actionType: \"link\",\n icon: <BrickWallShield />,\n label: \"View Sessions\",\n href: `/dashboard/security/systemUsers/${id}/sessions`,\n prefetch: true,\n // @ts-expect-error\n // This is dumb polymorphism garbage!\n as: Link,\n },\n {\n actionType: \"popover\",\n icon: <EllipsisVertical />,\n popoverChildren: (\n <List className=\"surfaceContainer\">\n <SystemUserDeleteListItem uid={id} fullName={fullName} />\n <ListItem\n {...{\n startIcon: <OctagonX />,\n children: \"Ban User\",\n color: \"error\",\n }}\n />\n </List>\n ),\n },\n ];\n\n return (\n <CollectionItemCard\n as={Link}\n href={`/dashboard/security/systemUsers/${id}` as Route}\n title={fullName ?? \"Name is missing\"}\n thumbnail={<img src={imageUrl} alt={fullName ?? \"\"} />}\n subtitle={emailAddress}\n chip={toCapitalised(role)}\n description={\n lastSignInAt ? (\n <>\n <History size={16} />\n &ensp;Last Active&ensp;\n <strong>{new Date(lastSignInAt).toDateString()}</strong>\n </>\n ) : (\n \"No activity found!\"\n )\n }\n footer={<CollectionItemCardActions actions={actions} />}\n />\n );\n}\n"],"names":["SystemUserListCard","props","id","fullName","imageUrl","emailAddress","role","lastSignInAt","actions","actionType","icon","_jsx","BrickWallShield","label","href","prefetch","as","Link","EllipsisVertical","popoverChildren","_jsxs","List","className","children","SystemUserDeleteListItem","uid","ListItem","startIcon","OctagonX","color","CollectionItemCard","title","thumbnail","src","alt","subtitle","chip","toCapitalised","description","_Fragment","History","size","Date","toDateString","footer","CollectionItemCardActions"],"mappings":"ibA+BM,SAAUA,EAAmBC,GACjC,MAAMC,GAAEA,EAAEC,SAAEA,EAAQC,SAAEA,EAAQC,aAAEA,EAAYC,KAAEA,EAAIC,aAAEA,GAAiBN,EAC/DO,EAA4B,CAChC,CACEC,WAAY,OACZC,KAAMC,EAACC,EAAe,IACtBC,MAAO,gBACPC,KAAM,mCAAmCZ,aACzCa,UAAU,EAGVC,GAAIC,GAEN,CACER,WAAY,UACZC,KAAMC,EAACO,EAAgB,IACvBC,gBACEC,EAACC,EAAI,CAACC,UAAU,mBAAkBC,SAAA,CAChCZ,EAACa,EAAwB,CAACC,IAAKvB,EAAIC,SAAUA,IAC7CQ,EAACe,EAAQ,CAELC,UAAWhB,EAACiB,EAAQ,IACpBL,SAAU,WACVM,MAAO,eAQnB,OACElB,EAACmB,GACCd,GAAIC,EACJH,KAAM,mCAAmCZ,IACzC6B,MAAO5B,GAAY,kBACnB6B,UAAWrB,EAAA,MAAA,CAAKsB,IAAK7B,EAAU8B,IAAK/B,GAAY,KAChDgC,SAAU9B,EACV+B,KAAMC,EAAc/B,GACpBgC,YACE/B,EACEa,EAAAmB,EAAA,CAAAhB,SAAA,CACEZ,EAAC6B,EAAO,CAACC,KAAM,qBAEf9B,EAAA,SAAA,CAAAY,SAAS,IAAImB,KAAKnC,GAAcoC,oBAC/B,qBAKPC,OAAQjC,EAACkC,GAA0BrC,QAASA,KAGlD"}
1
+ {"version":3,"file":"SystemUserListCard.js","sources":["../../../../../src/client/ui/System/SystemUser/SystemUserListCard.tsx"],"sourcesContent":["\"use client\";\n\nimport type { User } from \"@clerk/nextjs/server\";\nimport {\n CollectionItemCard,\n CollectionItemCardActions,\n type DocumentAction,\n List,\n} from \"@studiocubics/components\";\nimport { toCapitalised } from \"@studiocubics/utils\";\nimport { BrickWallShield, EllipsisVertical, History } from \"lucide-react\";\nimport Link from \"next/link\";\nimport {\n SystemUserBanListItem,\n SystemUserDeleteListItem,\n} from \"./SystemUserActions\";\nimport type { Route } from \"next\";\nimport type { Role } from \"../../../clerk/rbacConfig\";\n\nexport interface SystemUserListCardProps {\n id: User[\"id\"];\n fullName: User[\"fullName\"];\n imageUrl: User[\"imageUrl\"];\n emailAddress?: NonNullable<User[\"primaryEmailAddress\"]>[\"emailAddress\"];\n role?: Role;\n lastSignInAt?: User[\"lastActiveAt\"];\n banned: User[\"banned\"];\n}\n\nexport function SystemUserListCard(props: SystemUserListCardProps) {\n const { id, fullName, imageUrl, emailAddress, role, lastSignInAt, banned } =\n props;\n const actions: DocumentAction[] = [\n {\n actionType: \"link\",\n icon: <BrickWallShield />,\n label: \"View Sessions\",\n href: `/dashboard/security/systemUsers/${id}/sessions`,\n prefetch: true,\n // @ts-expect-error\n // This is dumb polymorphism garbage!\n as: Link,\n },\n {\n label: \"View Options\",\n actionType: \"popover\",\n icon: <EllipsisVertical />,\n popoverChildren: (\n <List className=\"surfaceContainer\">\n <SystemUserDeleteListItem userId={id} fullName={fullName} />\n <SystemUserBanListItem\n userId={id}\n fullName={fullName}\n banned={banned}\n />\n </List>\n ),\n },\n ];\n\n return (\n <CollectionItemCard\n as={Link}\n href={`/dashboard/security/systemUsers/${id}` as Route}\n title={fullName ?? \"Name is missing\"}\n thumbnail={<img src={imageUrl} alt={fullName ?? \"\"} />}\n subtitle={emailAddress}\n chip={banned ? \"Banned\" : toCapitalised(role)}\n slotProps={{ chip: { color: banned ? \"error\" : undefined } }}\n description={\n lastSignInAt ? (\n <>\n <History size={16} />\n &ensp;Last Active&ensp;\n <strong>{new Date(lastSignInAt).toDateString()}</strong>\n </>\n ) : (\n \"No activity found!\"\n )\n }\n footer={<CollectionItemCardActions actions={actions} />}\n />\n );\n}\n"],"names":["SystemUserListCard","props","id","fullName","imageUrl","emailAddress","role","lastSignInAt","banned","actions","actionType","icon","_jsx","BrickWallShield","label","href","prefetch","as","Link","EllipsisVertical","popoverChildren","_jsxs","List","className","children","SystemUserDeleteListItem","userId","SystemUserBanListItem","CollectionItemCard","title","thumbnail","src","alt","subtitle","chip","toCapitalised","slotProps","color","undefined","description","_Fragment","History","size","Date","toDateString","footer","CollectionItemCardActions"],"mappings":"gbA6BM,SAAUA,EAAmBC,GACjC,MAAMC,GAAEA,EAAEC,SAAEA,EAAQC,SAAEA,EAAQC,aAAEA,EAAYC,KAAEA,EAAIC,aAAEA,EAAYC,OAAEA,GAChEP,EACIQ,EAA4B,CAChC,CACEC,WAAY,OACZC,KAAMC,EAACC,EAAe,IACtBC,MAAO,gBACPC,KAAM,mCAAmCb,aACzCc,UAAU,EAGVC,GAAIC,GAEN,CACEJ,MAAO,eACPJ,WAAY,UACZC,KAAMC,EAACO,EAAgB,IACvBC,gBACEC,EAACC,EAAI,CAACC,UAAU,mBAAkBC,SAAA,CAChCZ,EAACa,EAAwB,CAACC,OAAQxB,EAAIC,SAAUA,IAChDS,EAACe,EAAqB,CACpBD,OAAQxB,EACRC,SAAUA,EACVK,OAAQA,SAOlB,OACEI,EAACgB,EAAkB,CACjBX,GAAIC,EACJH,KAAM,mCAAmCb,IACzC2B,MAAO1B,GAAY,kBACnB2B,UAAWlB,EAAA,MAAA,CAAKmB,IAAK3B,EAAU4B,IAAK7B,GAAY,KAChD8B,SAAU5B,EACV6B,KAAM1B,EAAS,SAAW2B,EAAc7B,GACxC8B,UAAW,CAAEF,KAAM,CAAEG,MAAO7B,EAAS,aAAU8B,IAC/CC,YACEhC,EACEc,EAAAmB,EAAA,CAAAhB,SAAA,CACEZ,EAAC6B,EAAO,CAACC,KAAM,KAAM,gBAErB9B,EAAA,SAAA,CAAAY,SAAS,IAAImB,KAAKpC,GAAcqC,oBAC/B,qBAKPC,OAAQjC,EAACkC,EAAyB,CAACrC,QAASA,KAGlD"}
@@ -1,2 +1 @@
1
- import type { SecurityPageProps } from "../types";
2
- export declare function SystemUserListPage({ searchParams, securityLinks, }: SecurityPageProps): Promise<import("react/jsx-runtime").JSX.Element>;
1
+ export declare function SystemUserListPage({ searchParams, }: PageProps<"/dashboard/security/systemUsers">): Promise<import("react/jsx-runtime").JSX.Element>;
@@ -1,2 +1,2 @@
1
- import{jsx as t}from"react/jsx-runtime";import{SYSTEM_USERS_PAGE_LIMIT as r}from"../../../constants/pageLimits.js";import{PageLayoutPagination as i}from"@studiocubics/components";import{SystemUserListActions as s}from"./SystemUserListActions.js";import{SystemUserList as e}from"./SystemUserList.js";import{SystemUserListPagination as o}from"./SystemUserListPagination.js";async function m({searchParams:m,securityLinks:n}){const a=await m,c=Number(a.page??1),p=String(a.orderBy??"created_at"),f=String(a.query??""),u={limit:r,offset:(c-1)*r,orderBy:p,query:f};return t(i,{actions:t(s,{}),size:"sm",title:n[2]?.children,paginationComponent:t(o,{page:c,...u}),children:t(e,{...u})})}export{m as SystemUserListPage};
1
+ import{jsx as t}from"react/jsx-runtime";import{SYSTEM_USERS_PAGE_LIMIT as r}from"../../../constants/pageLimits.js";import{PageLayoutPagination as s}from"@studiocubics/components";import{SystemUserListActions as i}from"./SystemUserListActions.js";import{SystemUserList as o}from"./SystemUserList.js";import{SystemUserListPagination as e}from"./SystemUserListPagination.js";import{defaultSecurityLinks as m}from"../../../constants/defaults.js";async function n({searchParams:n}){const a=await n,c=Number(a.page??1),p=String(a.orderBy??"created_at"),f=String(a.query??""),u={limit:r,offset:(c-1)*r,orderBy:p,query:f};return t(s,{actions:t(i,{}),size:"sm",title:m[2]?.children,paginationComponent:t(e,{page:c,...u}),children:t(o,{...u})})}export{n as SystemUserListPage};
2
2
  //# sourceMappingURL=SystemUserListPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SystemUserListPage.js","sources":["../../../../../src/client/ui/System/SystemUser/SystemUserListPage.tsx"],"sourcesContent":["import { SYSTEM_USERS_PAGE_LIMIT as limit } from \"../../../constants/pageLimits\";\nimport type { SecurityPageProps } from \"../types\";\nimport { PageLayoutPagination } from \"@studiocubics/components\";\nimport { SystemUserListActions } from \"./SystemUserListActions\";\nimport { SystemUserList } from \"./SystemUserList\";\nimport { SystemUserListPagination } from \"./SystemUserListPagination\";\n\nexport async function SystemUserListPage({\n searchParams,\n securityLinks,\n}: SecurityPageProps) {\n const sp = await searchParams;\n const page = Number(sp.page ?? 1);\n const orderBy = String(sp.orderBy ?? \"created_at\");\n const query = String(sp.query ?? \"\");\n const offset = (page - 1) * limit;\n const params = {\n limit,\n offset,\n orderBy,\n query,\n };\n return (\n <PageLayoutPagination\n actions={<SystemUserListActions />}\n size=\"sm\"\n title={securityLinks[2]?.children}\n paginationComponent={<SystemUserListPagination page={page} {...params} />}\n >\n <SystemUserList {...params} />\n </PageLayoutPagination>\n );\n}\n"],"names":["async","SystemUserListPage","searchParams","securityLinks","sp","page","Number","orderBy","String","query","params","limit","offset","_jsx","PageLayoutPagination","actions","SystemUserListActions","size","title","children","paginationComponent","SystemUserListPagination","SystemUserList"],"mappings":"oXAOOA,eAAeC,GAAmBC,aACvCA,EAAYC,cACZA,IAEA,MAAMC,QAAWF,EACXG,EAAOC,OAAOF,EAAGC,MAAQ,GACzBE,EAAUC,OAAOJ,EAAGG,SAAW,cAC/BE,EAAQD,OAAOJ,EAAGK,OAAS,IAE3BC,EAAS,OACbC,EACAC,QAHcP,EAAO,GAAKM,EAI1BJ,UACAE,SAEF,OACEI,EAACC,GACCC,QAASF,EAACG,EAAqB,CAAA,GAC/BC,KAAK,KACLC,MAAOf,EAAc,IAAIgB,SACzBC,oBAAqBP,EAACQ,EAAwB,CAAChB,KAAMA,KAAUK,IAAUS,SAEzEN,EAACS,EAAc,IAAKZ,KAG1B"}
1
+ {"version":3,"file":"SystemUserListPage.js","sources":["../../../../../src/client/ui/System/SystemUser/SystemUserListPage.tsx"],"sourcesContent":["import { SYSTEM_USERS_PAGE_LIMIT as limit } from \"../../../constants/pageLimits\";\nimport { PageLayoutPagination } from \"@studiocubics/components\";\nimport { SystemUserListActions } from \"./SystemUserListActions\";\nimport { SystemUserList } from \"./SystemUserList\";\nimport { SystemUserListPagination } from \"./SystemUserListPagination\";\nimport { defaultSecurityLinks } from \"../../../constants/defaults\";\n\nexport async function SystemUserListPage({\n searchParams,\n}: PageProps<\"/dashboard/security/systemUsers\">) {\n const sp = await searchParams;\n const page = Number(sp.page ?? 1);\n const orderBy = String(\n sp.orderBy ?? \"created_at\",\n ) as ClerkUserListParams[\"orderBy\"];\n const query = String(sp.query ?? \"\");\n const offset = (page - 1) * limit;\n const params = {\n limit,\n offset,\n orderBy,\n query,\n };\n return (\n <PageLayoutPagination\n actions={<SystemUserListActions />}\n size=\"sm\"\n title={defaultSecurityLinks[2]?.children}\n paginationComponent={<SystemUserListPagination page={page} {...params} />}\n >\n <SystemUserList {...params} />\n </PageLayoutPagination>\n );\n}\n"],"names":["async","SystemUserListPage","searchParams","sp","page","Number","orderBy","String","query","params","limit","offset","_jsx","PageLayoutPagination","actions","SystemUserListActions","size","title","defaultSecurityLinks","children","paginationComponent","SystemUserListPagination","SystemUserList"],"mappings":"0bAOOA,eAAeC,GAAmBC,aACvCA,IAEA,MAAMC,QAAWD,EACXE,EAAOC,OAAOF,EAAGC,MAAQ,GACzBE,EAAUC,OACdJ,EAAGG,SAAW,cAEVE,EAAQD,OAAOJ,EAAGK,OAAS,IAE3BC,EAAS,OACbC,EACAC,QAHcP,EAAO,GAAKM,EAI1BJ,UACAE,SAEF,OACEI,EAACC,GACCC,QAASF,EAACG,EAAqB,CAAA,GAC/BC,KAAK,KACLC,MAAOC,EAAqB,IAAIC,SAChCC,oBAAqBR,EAACS,EAAwB,CAACjB,KAAMA,KAAUK,IAAUU,SAEzEP,EAACU,EAAc,IAAKb,KAG1B"}
@@ -0,0 +1 @@
1
+ export declare function SystemUserListSort(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ "use client";import{jsx as e,jsxs as t,Fragment as n}from"react/jsx-runtime";import{Tooltip as i,Button as r,Popover as o,Card as a,ConfirmationForm as l,Select as s}from"@studiocubics/components";import{useAnchorElement as c}from"@studiocubics/hooks";import{toCapitalised as u}from"@studiocubics/utils";import{ArrowDown01 as m,ArrowDown10 as d,ChartNoAxesGantt as h,X as p}from"lucide-react";import{useSearchParams as g,useRouter as v}from"next/navigation";import{useState as f,useMemo as b}from"react";const S=["created_at","updated_at","email_address","web3wallet","first_name","last_name","phone_number","username","last_active_at","last_sign_in_at"],_=[{icon:e(m,{}),label:"Ascending",value:"+"},{icon:e(d,{}),label:"Descending",value:"-"}];function C(){const{open:m,anchorEl:d,handleClick:C,handleClose:y}=c(),$=g(),z=v(),k=$.get("orderBy"),[w,U]=f(k??""),[x,B]=f(k&&["+","-"].includes(k[0])?k.slice(1):""),[D,E]=f(k&&["+","-"].includes(k[0])?k[0]:""),L=b(()=>_.find(e=>e.value==D)?.icon,[D]);return t(n,{children:[e(i,{title:x?`Sorting by ${u(x)}`:"Sort System Users",children:e(r,{size:"sm",square:!0,onClick:C,children:L??e(h,{})})}),e(o,{anchorEl:d,open:m,onClose:y,children:e(a,{variant:"contained",children:t(l,{formTitle:"Sort System Users by",onCancel:y,onSubmit:function(e){e.preventDefault();const t=new URLSearchParams($.toString());w.trim()?t.set("orderBy",w):t.delete(w),z.push(`?${t.toString()}`)},size:"sm",children:[e(s,{size:"sm",value:x,onChange:e=>{B(e.target.value),U(`${D}${e.target.value}`)},children:S.map(t=>e("option",{value:t,children:u(t)},t))}),e(s,{size:"sm",value:D,onChange:e=>{E(e.target.value),U(`${e.target.value}${x}`)},children:_.map(t=>e("option",{value:t.value,children:t.label},t.label))}),k&&e(r,{type:"button",startIcon:e(p,{}),fullWidth:!0,size:"sm",onClick:function(){const e=new URLSearchParams($.toString());e.delete("orderBy"),U(""),B(""),E(""),z.push(`?${e.toString()}`)},children:"Clear Sorting"})]})})})]})}export{C as SystemUserListSort};
2
+ //# sourceMappingURL=SystemUserListSort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemUserListSort.js","sources":["../../../../../src/client/ui/System/SystemUser/SystemUserListSort.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n Button,\n Card,\n ConfirmationForm,\n Popover,\n Select,\n Tooltip,\n} from \"@studiocubics/components\";\nimport { useAnchorElement } from \"@studiocubics/hooks\";\nimport { toCapitalised } from \"@studiocubics/utils\";\nimport { ChartNoAxesGantt, ArrowDown01, ArrowDown10, X } from \"lucide-react\";\nimport { useRouter, useSearchParams } from \"next/navigation\";\nimport { useState, useMemo, type FormEvent } from \"react\";\n\nconst sortFields = [\n \"created_at\",\n \"updated_at\",\n \"email_address\",\n \"web3wallet\",\n \"first_name\",\n \"last_name\",\n \"phone_number\",\n \"username\",\n \"last_active_at\",\n \"last_sign_in_at\",\n];\nconst sortOrders = [\n {\n icon: <ArrowDown01 />,\n label: \"Ascending\",\n value: \"+\",\n },\n {\n icon: <ArrowDown10 />,\n label: \"Descending\",\n value: \"-\",\n },\n];\nexport function SystemUserListSort() {\n const { open, anchorEl, handleClick, handleClose } = useAnchorElement();\n const searchParams = useSearchParams();\n const router = useRouter();\n const orderBySP = searchParams.get(\"orderBy\");\n const [query, setQuery] = useState(orderBySP ?? \"\");\n const [sortField, setSortField] = useState(\n orderBySP && [\"+\", \"-\"].includes(orderBySP[0]) ? orderBySP.slice(1) : \"\",\n );\n const [sortOrder, setSortOrder] = useState(\n orderBySP && [\"+\", \"-\"].includes(orderBySP[0]) ? orderBySP[0] : \"\",\n );\n const orderIconToRender = useMemo(\n () => sortOrders.find((so) => so.value == sortOrder)?.icon,\n [sortOrder],\n );\n\n function handleSubmit(e: FormEvent) {\n e.preventDefault();\n const params = new URLSearchParams(searchParams.toString());\n if (query.trim()) {\n params.set(\"orderBy\", query);\n } else {\n params.delete(query);\n }\n router.push(`?${params.toString()}`);\n }\n function handleClear() {\n const params = new URLSearchParams(searchParams.toString());\n params.delete(\"orderBy\");\n setQuery(\"\");\n setSortField(\"\");\n setSortOrder(\"\");\n router.push(`?${params.toString()}`);\n }\n return (\n <>\n <Tooltip\n title={\n sortField\n ? `Sorting by ${toCapitalised(sortField)}`\n : \"Sort System Users\"\n }\n >\n <Button size=\"sm\" square onClick={handleClick}>\n {orderIconToRender ?? <ChartNoAxesGantt />}\n </Button>\n </Tooltip>\n <Popover anchorEl={anchorEl} open={open} onClose={handleClose}>\n <Card variant=\"contained\">\n <ConfirmationForm\n formTitle=\"Sort System Users by\"\n onCancel={handleClose}\n onSubmit={handleSubmit}\n size={\"sm\"}\n >\n <Select\n size={\"sm\"}\n value={sortField}\n onChange={(e) => {\n setSortField(e.target.value);\n setQuery(`${sortOrder}${e.target.value}`);\n }}\n >\n {sortFields.map((field) => (\n <option key={field} value={field}>\n {toCapitalised(field)}\n </option>\n ))}\n </Select>\n <Select\n size={\"sm\"}\n value={sortOrder}\n onChange={(e) => {\n setSortOrder(e.target.value);\n setQuery(`${e.target.value}${sortField}`);\n }}\n >\n {sortOrders.map((so) => (\n <option key={so.label} value={so.value}>\n {so.label}\n </option>\n ))}\n </Select>\n {orderBySP && (\n <Button\n type=\"button\"\n startIcon={<X />}\n fullWidth\n size=\"sm\"\n onClick={handleClear}\n >\n Clear Sorting\n </Button>\n )}\n </ConfirmationForm>\n </Card>\n </Popover>\n </>\n );\n}\n"],"names":["sortFields","sortOrders","icon","_jsx","ArrowDown01","label","value","ArrowDown10","SystemUserListSort","open","anchorEl","handleClick","handleClose","useAnchorElement","searchParams","useSearchParams","router","useRouter","orderBySP","get","query","setQuery","useState","sortField","setSortField","includes","slice","sortOrder","setSortOrder","orderIconToRender","useMemo","find","so","_jsxs","_Fragment","children","Tooltip","title","toCapitalised","Button","size","square","onClick","ChartNoAxesGantt","Popover","onClose","Card","variant","ConfirmationForm","formTitle","onCancel","onSubmit","e","preventDefault","params","URLSearchParams","toString","trim","set","delete","push","Select","onChange","target","map","field","type","startIcon","X","fullWidth"],"mappings":"wfAgBA,MAAMA,EAAa,CACjB,aACA,aACA,gBACA,aACA,aACA,YACA,eACA,WACA,iBACA,mBAEIC,EAAa,CACjB,CACEC,KAAMC,EAACC,EAAW,IAClBC,MAAO,YACPC,MAAO,KAET,CACEJ,KAAMC,EAACI,EAAW,IAClBF,MAAO,aACPC,MAAO,eAGKE,IACd,MAAMC,KAAEA,EAAIC,SAAEA,EAAQC,YAAEA,EAAWC,YAAEA,GAAgBC,IAC/CC,EAAeC,IACfC,EAASC,IACTC,EAAYJ,EAAaK,IAAI,YAC5BC,EAAOC,GAAYC,EAASJ,GAAa,KACzCK,EAAWC,GAAgBF,EAChCJ,GAAa,CAAC,IAAK,KAAKO,SAASP,EAAU,IAAMA,EAAUQ,MAAM,GAAK,KAEjEC,EAAWC,GAAgBN,EAChCJ,GAAa,CAAC,IAAK,KAAKO,SAASP,EAAU,IAAMA,EAAU,GAAK,IAE5DW,EAAoBC,EACxB,IAAM7B,EAAW8B,KAAMC,GAAOA,EAAG1B,OAASqB,IAAYzB,KACtD,CAACyB,IAqBH,OACEM,EAAAC,EAAA,CAAAC,SAAA,CACEhC,EAACiC,EAAO,CACNC,MACEd,EACI,cAAce,EAAcf,KAC5B,oBAAmBY,SAGzBhC,EAACoC,GAAOC,KAAK,KAAKC,QAAM,EAACC,QAAS/B,EAAWwB,SAC1CN,GAAqB1B,EAACwC,EAAgB,CAAA,OAG3CxC,EAACyC,GAAQlC,SAAUA,EAAUD,KAAMA,EAAMoC,QAASjC,EAAWuB,SAC3DhC,EAAC2C,EAAI,CAACC,QAAQ,YAAWZ,SACvBF,EAACe,EAAgB,CACfC,UAAU,uBACVC,SAAUtC,EACVuC,SApCV,SAAsBC,GACpBA,EAAEC,iBACF,MAAMC,EAAS,IAAIC,gBAAgBzC,EAAa0C,YAC5CpC,EAAMqC,OACRH,EAAOI,IAAI,UAAWtC,GAEtBkC,EAAOK,OAAOvC,GAEhBJ,EAAO4C,KAAK,IAAIN,EAAOE,aACzB,EA4BUhB,KAAM,KAAIL,SAAA,CAEVhC,EAAC0D,EAAM,CACLrB,KAAM,KACNlC,MAAOiB,EACPuC,SAAWV,IACT5B,EAAa4B,EAAEW,OAAOzD,OACtBe,EAAS,GAAGM,IAAYyB,EAAEW,OAAOzD,mBAGlCN,EAAWgE,IAAKC,GACf9D,EAAA,SAAA,CAAoBG,MAAO2D,WACxB3B,EAAc2B,IADJA,MAKjB9D,EAAC0D,EAAM,CACLrB,KAAM,KACNlC,MAAOqB,EACPmC,SAAWV,IACTxB,EAAawB,EAAEW,OAAOzD,OACtBe,EAAS,GAAG+B,EAAEW,OAAOzD,QAAQiB,MAC9BY,SAEAlC,EAAW+D,IAAKhC,GACf7B,EAAA,SAAA,CAAuBG,MAAO0B,EAAG1B,MAAK6B,SACnCH,EAAG3B,OADO2B,EAAG3B,UAKnBa,GACCf,EAACoC,EAAM,CACL2B,KAAK,SACLC,UAAWhE,EAACiE,EAAC,IACbC,WAAS,EACT7B,KAAK,KACLE,QA/Dd,WACE,MAAMY,EAAS,IAAIC,gBAAgBzC,EAAa0C,YAChDF,EAAOK,OAAO,WACdtC,EAAS,IACTG,EAAa,IACbI,EAAa,IACbZ,EAAO4C,KAAK,IAAIN,EAAOE,aACzB,EAwDkCrB,SAAA,2BAUpC"}
@@ -1,2 +1,2 @@
1
- import{jsxs as r,Fragment as e,jsx as s}from"react/jsx-runtime";import{PageTitle as t,Breadcrumbs as i}from"@studiocubics/components";import{SystemUserPageContent as o}from"./SystemUserPageContent.js";import m from"next/link";import{auth as a}from"../../../../server/clerk/auth.js";import{systemUserReadAction as n}from"../../../../server/clerk/actions/systemUsers.js";async function c({params:c}){const l=(await c).userId,d=await a(),u=await d.hasPermission("systemUsers","update"),h=await n(l);return r(e,{children:[s(t,{size:"sm",title:r(i,{defaultActive:1,children:[s("h4",{children:s(m,{href:"/dashboard/security/systemUsers",children:"System Users"})}),r("h4",{children:[h.fullName,"'s Account"]})]}),noBorders:!0}),s(o,{user:h,allowEdit:u})]})}export{c as SystemUserPage};
1
+ import{jsxs as e,Fragment as r,jsx as s}from"react/jsx-runtime";import{PageTitle as t,Breadcrumbs as i}from"@studiocubics/components";import{SystemUserPageContent as o}from"./SystemUserPageContent.js";import m from"next/link";import{auth as a}from"../../../../server/clerk/auth.js";import{systemUserReadAction as n}from"../../../../server/clerk/actions/systemUsers.js";async function c({params:c}){const l=(await c).userId,u=await a(),d=await u.hasPermission("systemUsers","update"),h=await n(l);return e(r,{children:[s(t,{size:"sm",title:e(i,{defaultActive:1,children:[s("h4",{children:s(m,{href:"/dashboard/security/systemUsers",children:"System Users"})}),e("h4",{children:[h.fullName,"'s Account"]})]})}),s(o,{user:h,allowEdit:d})]})}export{c as SystemUserPage};
2
2
  //# sourceMappingURL=SystemUserPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SystemUserPage.js","sources":["../../../../../src/client/ui/System/SystemUser/SystemUserPage.tsx"],"sourcesContent":["import { Breadcrumbs, PageTitle } from \"@studiocubics/components\";\nimport { SystemUserPageContent } from \"./SystemUserPageContent\";\nimport Link from \"next/link\";\nimport { auth } from \"../../../../server/clerk/auth\";\nimport { systemUserReadAction } from \"../../../../server/clerk/actions/systemUsers\";\nexport async function SystemUserPage({\n params,\n}: PageProps<\"/dashboard/security/systemUsers/[userId]\">) {\n const userId = (await params).userId;\n const session = await auth();\n const allowEdit = await session.hasPermission(\"systemUsers\", \"update\");\n const user = await systemUserReadAction(userId);\n return (\n <>\n <PageTitle\n size=\"sm\"\n title={\n <Breadcrumbs defaultActive={1}>\n <h4>\n <Link href={\"/dashboard/security/systemUsers\"}>System Users</Link>\n </h4>\n <h4>{user.fullName}&apos;s Account</h4>\n </Breadcrumbs>\n }\n noBorders\n />\n <SystemUserPageContent user={user} allowEdit={allowEdit} />\n </>\n );\n}\n"],"names":["async","SystemUserPage","params","userId","session","auth","allowEdit","hasPermission","user","systemUserReadAction","_jsxs","_jsx","PageTitle","size","title","Breadcrumbs","defaultActive","children","Link","href","fullName","noBorders","SystemUserPageContent"],"mappings":"iXAKOA,eAAeC,GAAeC,OACnCA,IAEA,MAAMC,SAAgBD,GAAQC,OACxBC,QAAgBC,IAChBC,QAAkBF,EAAQG,cAAc,cAAe,UACvDC,QAAaC,EAAqBN,GACxC,OACEO,eACEC,EAACC,GACCC,KAAK,KACLC,MACEJ,EAACK,EAAW,CAACC,cAAe,EAACC,SAAA,CAC3BN,iBACEA,EAACO,EAAI,CAACC,KAAM,8DAEdT,EAAA,KAAA,CAAAO,SAAA,CAAKT,EAAKY,4BAGdC,WAAS,IAEXV,EAACW,EAAqB,CAACd,KAAMA,EAAMF,UAAWA,MAGpD"}
1
+ {"version":3,"file":"SystemUserPage.js","sources":["../../../../../src/client/ui/System/SystemUser/SystemUserPage.tsx"],"sourcesContent":["import { Breadcrumbs, PageTitle } from \"@studiocubics/components\";\nimport { SystemUserPageContent } from \"./SystemUserPageContent\";\nimport Link from \"next/link\";\nimport { auth } from \"../../../../server/clerk/auth\";\nimport { systemUserReadAction } from \"../../../../server/clerk/actions/systemUsers\";\nexport async function SystemUserPage({\n params,\n}: PageProps<\"/dashboard/security/systemUsers/[userId]\">) {\n const userId = (await params).userId;\n const session = await auth();\n const allowEdit = await session.hasPermission(\"systemUsers\", \"update\");\n const user = await systemUserReadAction(userId);\n return (\n <>\n <PageTitle\n size=\"sm\"\n title={\n <Breadcrumbs defaultActive={1}>\n <h4>\n <Link href={\"/dashboard/security/systemUsers\"}>System Users</Link>\n </h4>\n <h4>{user.fullName}&apos;s Account</h4>\n </Breadcrumbs>\n }\n />\n <SystemUserPageContent user={user} allowEdit={allowEdit} />\n </>\n );\n}\n"],"names":["async","SystemUserPage","params","userId","session","auth","allowEdit","hasPermission","user","systemUserReadAction","_jsxs","_jsx","PageTitle","size","title","Breadcrumbs","defaultActive","children","Link","href","fullName","SystemUserPageContent"],"mappings":"iXAKOA,eAAeC,GAAeC,OACnCA,IAEA,MAAMC,SAAgBD,GAAQC,OACxBC,QAAgBC,IAChBC,QAAkBF,EAAQG,cAAc,cAAe,UACvDC,QAAaC,EAAqBN,GACxC,OACEO,eACEC,EAACC,GACCC,KAAK,KACLC,MACEJ,EAACK,EAAW,CAACC,cAAe,YAC1BL,EAAA,KAAA,CAAAM,SACEN,EAACO,EAAI,CAACC,KAAM,kCAAiCF,SAAA,mBAE/CP,EAAA,KAAA,CAAAO,SAAA,CAAKT,EAAKY,SAAQ,qBAIxBT,EAACU,EAAqB,CAACb,KAAMA,EAAMF,UAAWA,MAGpD"}
@@ -1,2 +1,2 @@
1
- import{jsxs as e,Fragment as t,jsx as s}from"react/jsx-runtime";import{SectionWrapper as i}from"@studiocubics/components";import{SystemUserDetails as r}from"./SystemUserDetails/SystemUserDetails.js";import{SystemUserRole as l}from"./SystemUserRole/SystemUserRole.js";import{SystemUserTimestamps as m}from"./SystemUserTimestamps.js";import a from"next/link";function o({allowEdit:o,user:d}){return e(t,{children:[s(i,{title:"Account Details",noBorders:!0,children:s(r,{editable:o,id:d.id,fullName:d.fullName,firstName:d.firstName,lastName:d.lastName,imageUrl:d.imageUrl,emailAddress:d.primaryEmailAddress?.emailAddress})}),s(i,{title:"Account Timestamps",children:s(m,{createdAt:d.createdAt,updatedAt:d.updatedAt,lastSignInAt:d.lastSignInAt})}),s(i,{title:"Assigned Role",children:s(l,{role:d.publicMetadata.role,editable:o})}),s(i,{title:"Active Sessions",subtitle:s("p",{style:{fontSize:"var(--fs-body2)"},children:s(a,{href:`/dashboard/security/systemUsers/${d.id}/sessions`,children:"View All Sessions"})})})]})}export{o as SystemUserPageContent};
1
+ import{jsxs as e,Fragment as s,jsx as t}from"react/jsx-runtime";import{SectionWrapper as i}from"@studiocubics/components";import{SystemUserDetails as r}from"./SystemUserDetails/SystemUserDetails.js";import{SystemUserRole as l}from"./SystemUserRole/SystemUserRole.js";import{SystemUserTimestamps as m}from"./SystemUserTimestamps.js";import a from"next/link";import{SessionsActive as o}from"../Sessions/SessionsActive/SessionsActive.js";function d({allowEdit:d,user:n}){return e(s,{children:[t(i,{title:"Account Details",noBorders:!0,children:t(r,{editable:d,hasImage:n.hasImage,userId:n.id,fullName:n.fullName,firstName:n.firstName,lastName:n.lastName,imageUrl:n.imageUrl,emailAddress:n.primaryEmailAddress?.emailAddress})}),t(i,{title:"Account Timestamps",children:t(m,{createdAt:n.createdAt,updatedAt:n.updatedAt,lastSignInAt:n.lastSignInAt})}),t(i,{title:"Assigned Role",children:t(l,{userId:n.id,role:n.publicMetadata.role,editable:d})}),t(i,{title:"Active Sessions",subtitle:t("p",{style:{fontSize:"var(--fs-body2)"},children:t(a,{href:`/dashboard/security/systemUsers/${n.id}/sessions`,children:"View All Sessions"})}),children:t(o,{userId:n.id})})]})}export{d as SystemUserPageContent};
2
2
  //# sourceMappingURL=SystemUserPageContent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SystemUserPageContent.js","sources":["../../../../../src/client/ui/System/SystemUser/SystemUserPageContent.tsx"],"sourcesContent":["import { SectionWrapper } from \"@studiocubics/components\";\nimport { SystemUserDetails } from \"./SystemUserDetails/SystemUserDetails\";\nimport { SystemUserRole } from \"./SystemUserRole/SystemUserRole\";\nimport { SystemUserTimestamps } from \"./SystemUserTimestamps\";\nimport Link from \"next/link\";\nimport type { User } from \"@clerk/nextjs/server\";\nimport type { Role } from \"../../../clerk/rbacConfig\";\n\nexport function SystemUserPageContent({\n allowEdit,\n user,\n}: {\n allowEdit: boolean;\n user: User;\n}) {\n return (\n <>\n <SectionWrapper title={\"Account Details\"} noBorders>\n <SystemUserDetails\n editable={allowEdit}\n id={user.id}\n fullName={user.fullName}\n firstName={user.firstName}\n lastName={user.lastName}\n imageUrl={user.imageUrl}\n emailAddress={user.primaryEmailAddress?.emailAddress}\n />\n </SectionWrapper>\n <SectionWrapper title={\"Account Timestamps\"}>\n <SystemUserTimestamps\n createdAt={user.createdAt}\n updatedAt={user.updatedAt}\n lastSignInAt={user.lastSignInAt}\n />\n </SectionWrapper>\n <SectionWrapper title={\"Assigned Role\"}>\n <SystemUserRole\n role={user.publicMetadata.role as Role}\n editable={allowEdit}\n />\n </SectionWrapper>\n <SectionWrapper\n title={\"Active Sessions\"}\n subtitle={\n <p style={{ fontSize: \"var(--fs-body2)\" }}>\n <Link href={`/dashboard/security/systemUsers/${user.id}/sessions`}>\n View All Sessions\n </Link>\n </p>\n }\n ></SectionWrapper>\n </>\n );\n}\n"],"names":["SystemUserPageContent","allowEdit","user","_jsxs","_Fragment","children","_jsx","SectionWrapper","title","noBorders","SystemUserDetails","editable","id","fullName","firstName","lastName","imageUrl","emailAddress","primaryEmailAddress","SystemUserTimestamps","createdAt","updatedAt","lastSignInAt","SystemUserRole","role","publicMetadata","subtitle","style","fontSize","Link","href"],"mappings":"8WAQgBA,GAAsBC,UACpCA,EAASC,KACTA,IAKA,OACEC,EAAAC,EAAA,CAAAC,SAAA,CACEC,EAACC,GAAeC,MAAO,kBAAmBC,WAAS,EAAAJ,SACjDC,EAACI,GACCC,SAAUV,EACVW,GAAIV,EAAKU,GACTC,SAAUX,EAAKW,SACfC,UAAWZ,EAAKY,UAChBC,SAAUb,EAAKa,SACfC,SAAUd,EAAKc,SACfC,aAAcf,EAAKgB,qBAAqBD,iBAG5CX,EAACC,EAAc,CAACC,MAAO,8BACrBF,EAACa,EAAoB,CACnBC,UAAWlB,EAAKkB,UAChBC,UAAWnB,EAAKmB,UAChBC,aAAcpB,EAAKoB,iBAGvBhB,EAACC,EAAc,CAACC,MAAO,gBAAeH,SACpCC,EAACiB,EAAc,CACbC,KAAMtB,EAAKuB,eAAeD,KAC1Bb,SAAUV,MAGdK,EAACC,EAAc,CACbC,MAAO,kBACPkB,SACEpB,EAAA,IAAA,CAAGqB,MAAO,CAAEC,SAAU,mBAAmBvB,SACvCC,EAACuB,EAAI,CAACC,KAAM,mCAAmC5B,EAAKU,cAAaP,SAAA,4BAQ7E"}
1
+ {"version":3,"file":"SystemUserPageContent.js","sources":["../../../../../src/client/ui/System/SystemUser/SystemUserPageContent.tsx"],"sourcesContent":["import { SectionWrapper } from \"@studiocubics/components\";\nimport { SystemUserDetails } from \"./SystemUserDetails/SystemUserDetails\";\nimport { SystemUserRole } from \"./SystemUserRole/SystemUserRole\";\nimport { SystemUserTimestamps } from \"./SystemUserTimestamps\";\nimport Link from \"next/link\";\nimport type { User } from \"@clerk/nextjs/server\";\nimport type { Role } from \"../../../clerk/rbacConfig\";\nimport { SessionsActive } from \"../Sessions/SessionsActive/SessionsActive\";\n\nexport function SystemUserPageContent({\n allowEdit,\n user,\n}: {\n allowEdit: boolean;\n user: User;\n}) {\n return (\n <>\n <SectionWrapper title={\"Account Details\"} noBorders>\n <SystemUserDetails\n editable={allowEdit}\n hasImage={user.hasImage}\n userId={user.id}\n fullName={user.fullName}\n firstName={user.firstName}\n lastName={user.lastName}\n imageUrl={user.imageUrl}\n emailAddress={user.primaryEmailAddress?.emailAddress}\n />\n </SectionWrapper>\n <SectionWrapper title={\"Account Timestamps\"}>\n <SystemUserTimestamps\n createdAt={user.createdAt}\n updatedAt={user.updatedAt}\n lastSignInAt={user.lastSignInAt}\n />\n </SectionWrapper>\n <SectionWrapper title={\"Assigned Role\"}>\n <SystemUserRole\n userId={user.id}\n role={user.publicMetadata.role as Role}\n editable={allowEdit}\n />\n </SectionWrapper>\n <SectionWrapper\n title={\"Active Sessions\"}\n subtitle={\n <p style={{ fontSize: \"var(--fs-body2)\" }}>\n <Link href={`/dashboard/security/systemUsers/${user.id}/sessions`}>\n View All Sessions\n </Link>\n </p>\n }\n >\n <SessionsActive userId={user.id} />\n </SectionWrapper>\n </>\n );\n}\n"],"names":["SystemUserPageContent","allowEdit","user","_jsxs","_Fragment","children","_jsx","SectionWrapper","title","noBorders","SystemUserDetails","editable","hasImage","userId","id","fullName","firstName","lastName","imageUrl","emailAddress","primaryEmailAddress","SystemUserTimestamps","createdAt","updatedAt","lastSignInAt","SystemUserRole","role","publicMetadata","subtitle","style","fontSize","Link","href","SessionsActive"],"mappings":"4bASgBA,GAAsBC,UACpCA,EAASC,KACTA,IAKA,OACEC,EAAAC,EAAA,CAAAC,SAAA,CACEC,EAACC,EAAc,CAACC,MAAO,kBAAmBC,sBACxCH,EAACI,GACCC,SAAUV,EACVW,SAAUV,EAAKU,SACfC,OAAQX,EAAKY,GACbC,SAAUb,EAAKa,SACfC,UAAWd,EAAKc,UAChBC,SAAUf,EAAKe,SACfC,SAAUhB,EAAKgB,SACfC,aAAcjB,EAAKkB,qBAAqBD,iBAG5Cb,EAACC,GAAeC,MAAO,qBAAoBH,SACzCC,EAACe,EAAoB,CACnBC,UAAWpB,EAAKoB,UAChBC,UAAWrB,EAAKqB,UAChBC,aAActB,EAAKsB,iBAGvBlB,EAACC,EAAc,CAACC,MAAO,gBAAeH,SACpCC,EAACmB,EAAc,CACbZ,OAAQX,EAAKY,GACbY,KAAMxB,EAAKyB,eAAeD,KAC1Bf,SAAUV,MAGdK,EAACC,EAAc,CACbC,MAAO,kBACPoB,SACEtB,OAAGuB,MAAO,CAAEC,SAAU,4BACpBxB,EAACyB,GAAKC,KAAM,mCAAmC9B,EAAKY,+CAGlDT,SAGNC,EAAC2B,EAAc,CAACpB,OAAQX,EAAKY,SAIrC"}
@@ -1,6 +1,8 @@
1
1
  import { type Role } from "../../../../clerk/rbacConfig";
2
+ import type { User } from "@clerk/nextjs/server";
2
3
  export interface SystemUserRoleProps {
4
+ userId: User["id"];
3
5
  role: Role;
4
6
  editable?: boolean;
5
7
  }
6
- export declare function SystemUserRole({ role, editable }: SystemUserRoleProps): import("react/jsx-runtime").JSX.Element | null;
8
+ export declare function SystemUserRole({ userId, role, editable, }: SystemUserRoleProps): import("react/jsx-runtime").JSX.Element | null;
@@ -1,2 +1,2 @@
1
- "use client";import{jsxs as r,Fragment as o,jsx as i}from"react/jsx-runtime";import{toCapitalised as e}from"@studiocubics/utils";import{User as n,Edit as s}from"lucide-react";import{TransitionAnimation as t,Tooltip as m,Button as c}from"@studiocubics/components";import l from"next/link";import{useDisclosure as d}from"@studiocubics/hooks";import a from"./SystemUserRole.module.css.js";import{RBAC_CONFIG as u}from"../../../../clerk/rbacConfig.js";import{SystemUserRoleForm as p}from"../SystemUserRoleForm/SystemUserRoleForm.js";function h({role:h,editable:f}){const y=u[h],{open:O,handleOpen:b,handleClose:x}=d();return y?r(o,{children:[i(t,{in:!O,transformOrigin:"top",mountOnly:!0,unmountOnExit:!0,children:r("div",{className:a.root,children:[r("div",{className:a.main,children:[i(m,{renderArrow:!0,title:"View resource permissions",children:i(c,{as:l,variant:"contained",color:"primary",startIcon:i(n,{size:16}),size:"sm",href:`/dashboard/security/permissions/${h}`,children:e(h)})}),i("p",{children:y.desc})]}),f&&i(c,{size:"sm",startIcon:i(s,{}),onClick:b,children:"Edit Role"})]})}),i(t,{in:O,transformOrigin:"top right",mountOnly:!0,unmountOnExit:!0,children:i(p,{role:h,onClose:x})})]}):null}export{h as SystemUserRole};
1
+ "use client";import{jsxs as r,Fragment as o,jsx as e}from"react/jsx-runtime";import{toCapitalised as i}from"@studiocubics/utils";import{UserIcon as n,Edit as s}from"lucide-react";import{TransitionAnimation as t,Tooltip as m,Button as l}from"@studiocubics/components";import c from"next/link";import{useDisclosure as d}from"@studiocubics/hooks";import u from"./SystemUserRole.module.css.js";import{RBAC_CONFIG as a}from"../../../../clerk/rbacConfig.js";import{SystemUserRoleForm as p}from"../SystemUserRoleForm/SystemUserRoleForm.js";function h({userId:h,role:f,editable:y}){const O=a[f],{open:b,handleOpen:x,handleClose:g}=d();return O?r(o,{children:[e(t,{in:!b,transformOrigin:"top",mountOnly:!0,unmountOnExit:!0,children:r("div",{className:u.root,children:[r("div",{className:u.main,children:[e(m,{renderArrow:!0,title:"View resource permissions",children:e(l,{as:c,variant:"contained",color:"primary",startIcon:e(n,{size:16}),size:"sm",href:`/dashboard/security/permissions/${f}`,children:i(f)})}),e("p",{children:O.desc})]}),y&&e(l,{size:"sm",startIcon:e(s,{}),onClick:x,children:"Edit Role"})]})}),e(t,{in:b,transformOrigin:"top right",mountOnly:!0,unmountOnExit:!0,children:e(p,{userId:h,role:f,handleClose:g})})]}):null}export{h as SystemUserRole};
2
2
  //# sourceMappingURL=SystemUserRole.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SystemUserRole.js","sources":["../../../../../../src/client/ui/System/SystemUser/SystemUserRole/SystemUserRole.tsx"],"sourcesContent":["\"use client\";\n\nimport { toCapitalised } from \"@studiocubics/utils\";\nimport { Edit, User } from \"lucide-react\";\nimport { Button, Tooltip, TransitionAnimation } from \"@studiocubics/components\";\nimport Link from \"next/link\";\nimport { useDisclosure } from \"@studiocubics/hooks\";\nimport styles from \"./SystemUserRole.module.css\";\nimport { RBAC_CONFIG, type Role } from \"../../../../clerk/rbacConfig\";\nimport type { Route } from \"next\";\nimport { SystemUserRoleForm } from \"../SystemUserRoleForm/SystemUserRoleForm\";\n\nexport interface SystemUserRoleProps {\n role: Role;\n editable?: boolean;\n}\n\nexport function SystemUserRole({ role, editable }: SystemUserRoleProps) {\n const roleDetails = RBAC_CONFIG[role];\n const { open, handleOpen, handleClose } = useDisclosure();\n if (!roleDetails) return null;\n\n return (\n <>\n <TransitionAnimation\n in={!open}\n transformOrigin={\"top\"}\n mountOnly\n unmountOnExit\n >\n <div className={styles.root}>\n <div className={styles.main}>\n <Tooltip renderArrow title={\"View resource permissions\"}>\n <Button\n as={Link}\n variant=\"contained\"\n color=\"primary\"\n startIcon={<User size={16} />}\n size=\"sm\"\n href={`/dashboard/security/permissions/${role}` as Route}\n >\n {toCapitalised(role)}\n </Button>\n </Tooltip>\n <p>{roleDetails.desc}</p>\n </div>\n {editable && (\n <Button size=\"sm\" startIcon={<Edit />} onClick={handleOpen}>\n Edit Role\n </Button>\n )}\n </div>\n </TransitionAnimation>\n <TransitionAnimation\n in={open}\n transformOrigin={\"top right\"}\n mountOnly\n unmountOnExit\n >\n <SystemUserRoleForm role={role} onClose={handleClose} />\n </TransitionAnimation>\n </>\n );\n}\n"],"names":["SystemUserRole","role","editable","roleDetails","RBAC_CONFIG","open","handleOpen","handleClose","useDisclosure","_jsxs","_Fragment","children","_jsx","TransitionAnimation","in","transformOrigin","mountOnly","unmountOnExit","className","styles","root","main","Tooltip","renderArrow","title","Button","as","Link","variant","color","startIcon","User","size","href","toCapitalised","desc","Edit","onClick","SystemUserRoleForm","onClose"],"mappings":"0hBAiBgBA,GAAeC,KAAEA,EAAIC,SAAEA,IACrC,MAAMC,EAAcC,EAAYH,IAC1BI,KAAEA,EAAIC,WAAEA,EAAUC,YAAEA,GAAgBC,IAC1C,OAAKL,EAGHM,EAAAC,EAAA,CAAAC,SAAA,CACEC,EAACC,GACCC,IAAKT,EACLU,gBAAiB,MACjBC,WAAS,EACTC,eAAa,EAAAN,SAEbF,EAAA,MAAA,CAAKS,UAAWC,EAAOC,KAAIT,SAAA,CACzBF,EAAA,MAAA,CAAKS,UAAWC,EAAOE,eACrBT,EAACU,EAAO,CAACC,aAAW,EAACC,MAAO,qCAC1BZ,EAACa,EAAM,CACLC,GAAIC,EACJC,QAAQ,YACRC,MAAM,UACNC,UAAWlB,EAACmB,EAAI,CAACC,KAAM,KACvBA,KAAK,KACLC,KAAM,mCAAmChC,IAAeU,SAEvDuB,EAAcjC,OAGnBW,EAAA,IAAA,CAAAD,SAAIR,EAAYgC,UAEjBjC,GACCU,EAACa,GAAOO,KAAK,KAAKF,UAAWlB,EAACwB,EAAI,CAAA,GAAKC,QAAS/B,EAAUK,SAAA,mBAMhEC,EAACC,EAAmB,CAClBC,GAAIT,EACJU,gBAAiB,YACjBC,WAAS,EACTC,eAAa,EAAAN,SAEbC,EAAC0B,EAAkB,CAACrC,KAAMA,EAAMsC,QAAShC,SAvCtB,IA2C3B"}
1
+ {"version":3,"file":"SystemUserRole.js","sources":["../../../../../../src/client/ui/System/SystemUser/SystemUserRole/SystemUserRole.tsx"],"sourcesContent":["\"use client\";\n\nimport { toCapitalised } from \"@studiocubics/utils\";\nimport { Edit, UserIcon } from \"lucide-react\";\nimport { Button, Tooltip, TransitionAnimation } from \"@studiocubics/components\";\nimport Link from \"next/link\";\nimport { useDisclosure } from \"@studiocubics/hooks\";\nimport styles from \"./SystemUserRole.module.css\";\nimport { RBAC_CONFIG, type Role } from \"../../../../clerk/rbacConfig\";\nimport type { Route } from \"next\";\nimport { SystemUserRoleForm } from \"../SystemUserRoleForm/SystemUserRoleForm\";\nimport type { User } from \"@clerk/nextjs/server\";\n\nexport interface SystemUserRoleProps {\n userId: User[\"id\"];\n role: Role;\n editable?: boolean;\n}\n\nexport function SystemUserRole({\n userId,\n role,\n editable,\n}: SystemUserRoleProps) {\n const roleDetails = RBAC_CONFIG[role];\n const { open, handleOpen, handleClose } = useDisclosure();\n if (!roleDetails) return null;\n\n return (\n <>\n <TransitionAnimation\n in={!open}\n transformOrigin={\"top\"}\n mountOnly\n unmountOnExit\n >\n <div className={styles.root}>\n <div className={styles.main}>\n <Tooltip renderArrow title={\"View resource permissions\"}>\n <Button\n as={Link}\n variant=\"contained\"\n color=\"primary\"\n startIcon={<UserIcon size={16} />}\n size=\"sm\"\n href={`/dashboard/security/permissions/${role}` as Route}\n >\n {toCapitalised(role)}\n </Button>\n </Tooltip>\n <p>{roleDetails.desc}</p>\n </div>\n {editable && (\n <Button size=\"sm\" startIcon={<Edit />} onClick={handleOpen}>\n Edit Role\n </Button>\n )}\n </div>\n </TransitionAnimation>\n <TransitionAnimation\n in={open}\n transformOrigin={\"top right\"}\n mountOnly\n unmountOnExit\n >\n <SystemUserRoleForm\n userId={userId}\n role={role}\n handleClose={handleClose}\n />\n </TransitionAnimation>\n </>\n );\n}\n"],"names":["SystemUserRole","userId","role","editable","roleDetails","RBAC_CONFIG","open","handleOpen","handleClose","useDisclosure","_jsxs","_Fragment","children","_jsx","TransitionAnimation","in","transformOrigin","mountOnly","unmountOnExit","className","styles","root","main","Tooltip","renderArrow","title","Button","as","Link","variant","color","startIcon","UserIcon","size","href","toCapitalised","desc","Edit","onClick","SystemUserRoleForm"],"mappings":"qhBAmBM,SAAUA,GAAeC,OAC7BA,EAAMC,KACNA,EAAIC,SACJA,IAEA,MAAMC,EAAcC,EAAYH,IAC1BI,KAAEA,EAAIC,WAAEA,EAAUC,YAAEA,GAAgBC,IAC1C,OAAKL,EAGHM,EAAAC,EAAA,CAAAC,SAAA,CACEC,EAACC,GACCC,IAAKT,EACLU,gBAAiB,MACjBC,WAAS,EACTC,eAAa,EAAAN,SAEbF,EAAA,MAAA,CAAKS,UAAWC,EAAOC,KAAIT,SAAA,CACzBF,EAAA,MAAA,CAAKS,UAAWC,EAAOE,KAAIV,SAAA,CACzBC,EAACU,EAAO,CAACC,aAAW,EAACC,MAAO,4BAA2Bb,SACrDC,EAACa,EAAM,CACLC,GAAIC,EACJC,QAAQ,YACRC,MAAM,UACNC,UAAWlB,EAACmB,GAASC,KAAM,KAC3BA,KAAK,KACLC,KAAM,mCAAmChC,IAAeU,SAEvDuB,EAAcjC,OAGnBW,EAAA,IAAA,CAAAD,SAAIR,EAAYgC,UAEjBjC,GACCU,EAACa,EAAM,CAACO,KAAK,KAAKF,UAAWlB,EAACwB,EAAI,CAAA,GAAKC,QAAS/B,EAAUK,SAAA,mBAMhEC,EAACC,EAAmB,CAClBC,GAAIT,EACJU,gBAAiB,YACjBC,WAAS,EACTC,eAAa,EAAAN,SAEbC,EAAC0B,EAAkB,CACjBtC,OAAQA,EACRC,KAAMA,EACNM,YAAaA,SA1CI,IA+C3B"}
@@ -1,9 +1,11 @@
1
1
  import { type CardProps } from "@studiocubics/components";
2
2
  import { type Role } from "../../../../clerk/rbacConfig";
3
+ import type { User } from "@clerk/nextjs/server";
3
4
  declare const initialSystemUserRoleUpdateState: import("@studiocubics/utils").ActionResponse<"role", "role"[]>;
4
5
  export type SystemUserRoleUpdateState = typeof initialSystemUserRoleUpdateState;
5
- export declare function SystemUserRoleForm({ role, onClose, ...rest }: {
6
+ export declare function SystemUserRoleForm({ userId, role, handleClose, ...rest }: {
7
+ userId: User["id"];
6
8
  role: Role;
7
- onClose(): void;
9
+ handleClose(): void;
8
10
  } & CardProps): import("react/jsx-runtime").JSX.Element;
9
11
  export {};
@@ -1,2 +1,2 @@
1
- "use client";import{jsx as r}from"react/jsx-runtime";import{Card as e,ConfirmationForm as o,Select as i}from"@studiocubics/components";import{initialiseForm as t,toCapitalised as l}from"@studiocubics/utils";import{roles as n}from"../../../../clerk/rbacConfig.js";import{useActionState as s}from"react";import"../../../../../server/clerk/actions/invitations.js";import{systemUserRoleUpdateAction as c}from"../../../../../server/clerk/actions/systemUsers.js";import"@clerk/nextjs/server";import"../../../../../server/clerk/schemas/invitation.js";const m=t("role");function a({role:t,onClose:a,...u}){const[d,f,p]=s(c.bind(null,"hello"),m);return r(e,{...u,fullWidth:!0,children:r(o,{variant:"danger",confirmText:"Change Role",action:f,formTitle:"Edit Role",onCancel:a,children:r(i,{label:"Current role",error:d.fieldErrors?.role,defaultValue:t,disabled:p,children:n.map(e=>r("option",{value:e,children:l(e)},e))})})})}export{a as SystemUserRoleForm};
1
+ "use client";import{jsx as r}from"react/jsx-runtime";import{Card as e,ConfirmationForm as o,Select as i}from"@studiocubics/components";import{initialiseForm as t,toCapitalised as s}from"@studiocubics/utils";import{roles as n}from"../../../../clerk/rbacConfig.js";import{useActionState as l,useEffect as c}from"react";import"../../../../../server/clerk/actions/invitations.js";import{systemUserRoleUpdateAction as m}from"../../../../../server/clerk/actions/systemUsers.js";import"@clerk/nextjs/server";import"../../../../../server/clerk/schemas/invitation.js";const a=t("role");function u({userId:t,role:u,handleClose:d,...f}){const[p,h,v]=l(m.bind(null,t),a);return c(()=>{p.success&&d()},[p]),r(e,{...f,fullWidth:!0,children:r(o,{variant:"danger",confirmText:"Change Role",action:h,formTitle:"Edit Role",onCancel:d,children:r(i,{label:"Current role",error:p.fieldErrors?.role,name:"role",defaultValue:u,disabled:v,children:n.map(e=>r("option",{value:e,children:s(e)},e))})})})}export{u as SystemUserRoleForm};
2
2
  //# sourceMappingURL=SystemUserRoleForm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SystemUserRoleForm.js","sources":["../../../../../../src/client/ui/System/SystemUser/SystemUserRoleForm/SystemUserRoleForm.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type CardProps,\n Card,\n ConfirmationForm,\n Select,\n} from \"@studiocubics/components\";\nimport { initialiseForm, toCapitalised } from \"@studiocubics/utils\";\nimport { type Role, roles } from \"../../../../clerk/rbacConfig\";\nimport { useActionState } from \"react\";\nimport { systemUserRoleUpdateAction } from \"../../../../../server/clerk/_index\";\n\nconst initialSystemUserRoleUpdateState = initialiseForm(\"role\");\n\nexport type SystemUserRoleUpdateState = typeof initialSystemUserRoleUpdateState;\n\nexport function SystemUserRoleForm({\n role,\n onClose,\n ...rest\n}: { role: Role; onClose(): void } & CardProps) {\n const [state, action, pending] = useActionState(\n systemUserRoleUpdateAction.bind(null, \"hello\"),\n initialSystemUserRoleUpdateState,\n );\n return (\n <Card {...rest} fullWidth>\n <ConfirmationForm\n variant=\"danger\"\n confirmText=\"Change Role\"\n action={action}\n formTitle=\"Edit Role\"\n onCancel={onClose}\n >\n <Select\n label=\"Current role\"\n error={state.fieldErrors?.role}\n defaultValue={role}\n disabled={pending}\n >\n {roles.map((r) => (\n <option key={r} value={r}>\n {toCapitalised(r)}\n </option>\n ))}\n </Select>\n </ConfirmationForm>\n </Card>\n );\n}\n"],"names":["initialSystemUserRoleUpdateState","initialiseForm","SystemUserRoleForm","role","onClose","rest","state","action","pending","useActionState","systemUserRoleUpdateAction","bind","_jsx","Card","fullWidth","children","ConfirmationForm","variant","confirmText","formTitle","onCancel","Select","label","error","fieldErrors","defaultValue","disabled","roles","map","r","value","toCapitalised"],"mappings":"giBAaA,MAAMA,EAAmCC,EAAe,QAIlD,SAAUC,GAAmBC,KACjCA,EAAIC,QACJA,KACGC,IAEH,MAAOC,EAAOC,EAAQC,GAAWC,EAC/BC,EAA2BC,KAAK,KAAM,SACtCX,GAEF,OACEY,EAACC,EAAI,IAAKR,EAAMS,WAAS,EAAAC,SACvBH,EAACI,GACCC,QAAQ,SACRC,YAAY,cACZX,OAAQA,EACRY,UAAU,YACVC,SAAUhB,EAAOW,SAEjBH,EAACS,EAAM,CACLC,MAAM,eACNC,MAAOjB,EAAMkB,aAAarB,KAC1BsB,aAActB,EACduB,SAAUlB,WAETmB,EAAMC,IAAKC,GACVjB,YAAgBkB,MAAOD,EAACd,SACrBgB,EAAcF,IADJA,SAQzB"}
1
+ {"version":3,"file":"SystemUserRoleForm.js","sources":["../../../../../../src/client/ui/System/SystemUser/SystemUserRoleForm/SystemUserRoleForm.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type CardProps,\n Card,\n ConfirmationForm,\n Select,\n} from \"@studiocubics/components\";\nimport { initialiseForm, toCapitalised } from \"@studiocubics/utils\";\nimport { type Role, roles } from \"../../../../clerk/rbacConfig\";\nimport { useActionState, useEffect } from \"react\";\nimport { systemUserRoleUpdateAction } from \"../../../../../server/clerk/_index\";\nimport type { User } from \"@clerk/nextjs/server\";\n\nconst initialSystemUserRoleUpdateState = initialiseForm(\"role\");\n\nexport type SystemUserRoleUpdateState = typeof initialSystemUserRoleUpdateState;\n\nexport function SystemUserRoleForm({\n userId,\n role,\n handleClose,\n ...rest\n}: { userId: User[\"id\"]; role: Role; handleClose(): void } & CardProps) {\n const [state, action, pending] = useActionState(\n systemUserRoleUpdateAction.bind(null, userId),\n initialSystemUserRoleUpdateState,\n );\n useEffect(() => {\n if (state.success) handleClose();\n }, [state]);\n return (\n <Card {...rest} fullWidth>\n <ConfirmationForm\n variant=\"danger\"\n confirmText=\"Change Role\"\n action={action}\n formTitle=\"Edit Role\"\n onCancel={handleClose}\n >\n <Select\n label=\"Current role\"\n error={state.fieldErrors?.role}\n name=\"role\"\n defaultValue={role}\n disabled={pending}\n >\n {roles.map((r) => (\n <option key={r} value={r}>\n {toCapitalised(r)}\n </option>\n ))}\n </Select>\n </ConfirmationForm>\n </Card>\n );\n}\n"],"names":["initialSystemUserRoleUpdateState","initialiseForm","SystemUserRoleForm","userId","role","handleClose","rest","state","action","pending","useActionState","systemUserRoleUpdateAction","bind","useEffect","success","_jsx","Card","fullWidth","children","ConfirmationForm","variant","confirmText","formTitle","onCancel","Select","label","error","fieldErrors","name","defaultValue","disabled","roles","map","r","value","toCapitalised"],"mappings":"+iBAcA,MAAMA,EAAmCC,EAAe,QAIlD,SAAUC,GAAmBC,OACjCA,EAAMC,KACNA,EAAIC,YACJA,KACGC,IAEH,MAAOC,EAAOC,EAAQC,GAAWC,EAC/BC,EAA2BC,KAAK,KAAMT,GACtCH,GAKF,OAHAa,EAAU,KACJN,EAAMO,SAAST,KAClB,CAACE,IAEFQ,EAACC,MAASV,EAAMW,WAAS,EAAAC,SACvBH,EAACI,EAAgB,CACfC,QAAQ,SACRC,YAAY,cACZb,OAAQA,EACRc,UAAU,YACVC,SAAUlB,EAAWa,SAErBH,EAACS,EAAM,CACLC,MAAM,eACNC,MAAOnB,EAAMoB,aAAavB,KAC1BwB,KAAK,OACLC,aAAczB,EACd0B,SAAUrB,EAAOS,SAEhBa,EAAMC,IAAKC,GACVlB,EAAA,SAAA,CAAgBmB,MAAOD,EAACf,SACrBiB,EAAcF,IADJA,SAQzB"}
@@ -11,4 +11,5 @@ export * from "./SystemUserListPagination";
11
11
  export * from "./SystemUserPage";
12
12
  export * from "./SystemUserPageContent";
13
13
  export * from "./SystemUserRole/SystemUserRole";
14
+ export * from "./SystemUserRoleForm/SystemUserRoleForm";
14
15
  export * from "./SystemUserTimestamps";
@@ -1,6 +1,6 @@
1
1
  export * from "./Auth/_index";
2
2
  export * from "./Invitations/_index";
3
3
  export * from "./Permissions/_index";
4
+ export * from "./Sessions/_index";
4
5
  export * from "./SystemUser/_index";
5
6
  export * from "./WelcomePage/WelcomePage";
6
- export * from "./types";
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- .ThemedMonacoEditor-module_root__9pWgK{border-radius:var(--shape-br-sm);overflow:hidden}.CMSSidebarHeader-module_root__QUbml{align-items:center;display:flex;flex:1;flex-direction:row;gap:var(--spacing-gap);padding-inline:8.33%;padding-bottom:var(--spacing-gap-2);padding-top:var(--spacing-gap-3);transition:padding var(--transition-time) var(--transition-tf)}.CMSSidebarHeader-module_logoContainer__1tdc3{align-items:center;display:flex;flex:1;justify-content:flex-start}.CMSSidebarHeader-module_logo__qCMLH{height:auto;max-width:6rem;width:40%}@media (min-width:600px){.CMSSidebarHeader-module_root__QUbml{align-items:center;flex:0 1 0%;flex-direction:column;padding-inline:0}.CMSSidebarHeader-module_root__QUbml[data-open=true]{flex-direction:row;justify-content:space-between;padding-top:var(--spacing-gap-2);& .CMSSidebarHeader-module_logo__qCMLH{width:100%}}.CMSSidebarHeader-module_logoContainer__1tdc3{justify-content:center}}.CMSSidebarFooter-module_root__ZMRx2{display:flex;flex-direction:column;gap:var(--spacing-gap-2);height:100%;justify-content:flex-end}.CurrentSystemUserButton-module_title__RFrLD{align-items:center;display:flex;gap:var(--spacing-gap)}.SignIn-module_body__2yvpI,.SignIn-module_footer__KKVs7,.SignIn-module_form__IjD6r,.SignIn-module_header__XEjx6,.SignIn-module_root__QZuyy{display:flex;flex-direction:column}.SignIn-module_root__QZuyy{align-items:center;gap:var(--spacing-gap-7);width:clamp(350px,50vw,550px);& p{font-size:var(--fs-body2);text-align:center}}.SignIn-module_body__2yvpI{align-items:center;gap:var(--spacing-gap-3);width:100%}.SignIn-module_header__XEjx6{align-items:center;gap:var(--spacing-gap);text-align:center;&>h1{font-size:var(--fs-h3)}&>p{color:var(--color-on-background-faint);font-size:var(--fs-body2)}}.SignIn-module_form__IjD6r{gap:var(--spacing-gap-2);width:100%}.SignIn-module_footer__KKVs7{align-items:center;border-top:1px solid var(--color-outline);padding:var(--spacing-gap-3);width:100%}.SignIn-module_error__q4xLf{color:var(--color-error);font-size:2rem}.SignUp-module_body__TciO0,.SignUp-module_footer__NhgL2,.SignUp-module_form__8wMar,.SignUp-module_header__ol6o4,.SignUp-module_root__gyyhf{display:flex;flex-direction:column}.SignUp-module_root__gyyhf{align-items:center;gap:var(--spacing-gap-7);width:clamp(350px,50vw,550px);& p{font-size:var(--fs-body2);text-align:center}}.SignUp-module_body__TciO0{align-items:center;gap:var(--spacing-gap-3);width:100%}.SignUp-module_header__ol6o4{align-items:center;gap:var(--spacing-gap);text-align:center;&>h1{font-size:var(--fs-h3)}&>p{color:var(--color-on-background-faint);font-size:var(--fs-body2)}}.SignUp-module_form__8wMar{gap:var(--spacing-gap-2);width:100%}.SignUp-module_footer__NhgL2{align-items:center;border-top:1px solid var(--color-outline);padding:var(--spacing-gap-3);width:100%}.SignUp-module_error__VRpFj{color:var(--color-error);font-size:2rem}.SystemUserDetails-module_root__KsYgB{align-items:flex-start;display:flex;justify-content:space-between;width:100%}.SystemUserDetailsForm-module_form__P1Xz3{flex:1}.SystemUserDetailsForm-module_formRow__YpJTg{display:flex;gap:var(--spacing-gap)}.SystemUserRole-module_root__1wcEv{align-items:flex-start;display:flex;justify-content:space-between;width:100%}.SystemUserRole-module_main__xN-Z1{align-items:flex-start;display:flex;flex:1;flex-direction:column;gap:var(--spacing-gap-2);p{color:var(--color-on-background-faint);font-size:var(--fs-body2)}}.WelcomePage-module_root__hO-sl{align-items:center;display:flex;flex-direction:column;gap:var(--spacing-gap-4);height:100dvh;justify-content:center;width:100dvw}.WelcomePage-module_desc__czLaI{color:var(--color-on-background-faint);font-size:var(--fs-body);max-width:65ch;text-align:center}.WelcomePage-module_catcall__xsT00{font-size:var(--fs-body2)}
1
+ .ThemedMonacoEditor-module_root__9pWgK{border-radius:var(--shape-br-sm);overflow:hidden}.CMSSidebarHeader-module_root__QUbml{align-items:center;display:flex;flex:1;flex-direction:row;gap:var(--spacing-gap);padding-inline:8.33%;padding-bottom:var(--spacing-gap-2);padding-top:var(--spacing-gap-3);transition:padding var(--transition-time) var(--transition-tf)}.CMSSidebarHeader-module_logoContainer__1tdc3{align-items:center;display:flex;flex:1;justify-content:flex-start}.CMSSidebarHeader-module_logo__qCMLH{height:auto;max-width:6rem;width:40%}@media (min-width:600px){.CMSSidebarHeader-module_root__QUbml{align-items:center;flex:0 1 0%;flex-direction:column;padding-inline:0}.CMSSidebarHeader-module_root__QUbml[data-open=true]{flex-direction:row;justify-content:space-between;padding-top:var(--spacing-gap-2);& .CMSSidebarHeader-module_logo__qCMLH{width:100%}}.CMSSidebarHeader-module_logoContainer__1tdc3{justify-content:center}}.CMSSidebarFooter-module_root__ZMRx2{display:flex;flex-direction:column;gap:var(--spacing-gap-2);height:100%;justify-content:flex-end}.CurrentSystemUserButton-module_title__RFrLD{align-items:center;display:flex;gap:var(--spacing-gap)}.SignIn-module_body__2yvpI,.SignIn-module_footer__KKVs7,.SignIn-module_form__IjD6r,.SignIn-module_header__XEjx6,.SignIn-module_root__QZuyy{display:flex;flex-direction:column}.SignIn-module_root__QZuyy{align-items:center;gap:var(--spacing-gap-7);width:clamp(350px,50vw,550px);& p{font-size:var(--fs-body2);text-align:center}}.SignIn-module_body__2yvpI{align-items:center;gap:var(--spacing-gap-3);width:100%}.SignIn-module_header__XEjx6{align-items:center;gap:var(--spacing-gap);text-align:center;&>h1{font-size:var(--fs-h3)}&>p{color:var(--color-on-background-faint);font-size:var(--fs-body2)}}.SignIn-module_form__IjD6r{gap:var(--spacing-gap-2);width:100%}.SignIn-module_footer__KKVs7{align-items:center;border-top:1px solid var(--color-outline);padding:var(--spacing-gap-3);width:100%}.SignIn-module_error__q4xLf{color:var(--color-error);font-size:2rem}.SignUp-module_body__TciO0,.SignUp-module_footer__NhgL2,.SignUp-module_form__8wMar,.SignUp-module_header__ol6o4,.SignUp-module_root__gyyhf{display:flex;flex-direction:column}.SignUp-module_root__gyyhf{align-items:center;gap:var(--spacing-gap-7);width:clamp(350px,50vw,550px);& p{font-size:var(--fs-body2);text-align:center}}.SignUp-module_body__TciO0{align-items:center;gap:var(--spacing-gap-3);width:100%}.SignUp-module_header__ol6o4{align-items:center;gap:var(--spacing-gap);text-align:center;&>h1{font-size:var(--fs-h3)}&>p{color:var(--color-on-background-faint);font-size:var(--fs-body2)}}.SignUp-module_form__8wMar{gap:var(--spacing-gap-2);width:100%}.SignUp-module_footer__NhgL2{align-items:center;border-top:1px solid var(--color-outline);padding:var(--spacing-gap-3);width:100%}.SignUp-module_error__VRpFj{color:var(--color-error);font-size:2rem}.SessionListCard-module_title__rvGVQ{align-items:baseline;display:flex;font-size:var(--fs-body2);gap:var(--spacing-gap);&>p{color:var(--color-on-background-faint);font-weight:400}}.SessionListCard-module_desc__26-hF{color:var(--color-on-surface);display:flex;flex-wrap:wrap;gap:var(--spacing-gap-5)}.SessionListCard-module_thumb__mfBlO{--bgcolor:var(--color-surface);--color:var(--color-on-surface);background-color:var(--bgcolor);color:var(--color);&.SessionListCard-module_error__rdAIR{--bgcolor:var(--color-error-alpha);--color:var(--color-on-error-container)}&.SessionListCard-module_primary__JUrYc{--bgcolor:var(--color-primary-alpha);--color:var(--color-on-primary-container)}}.SessionsActive-module_root__oCUdG{background-color:var(--color-background-alpha);border-radius:var(--shape-br-lg);container-type:inline-size;height:50dvh;overflow-y:auto;padding:var(--spacing-gap-2);width:100%;&>div{margin-bottom:var(--spacing-gap-2)}}.SystemUserDetails-module_root__KsYgB{align-items:flex-start;display:flex;justify-content:space-between;width:100%}.SystemUserDetailsForm-module_form__P1Xz3{flex:1}.SystemUserDetailsForm-module_formRow__YpJTg{display:flex;gap:var(--spacing-gap)}.SystemUserRole-module_root__1wcEv{align-items:flex-start;display:flex;justify-content:space-between;width:100%}.SystemUserRole-module_main__xN-Z1{align-items:flex-start;display:flex;flex:1;flex-direction:column;gap:var(--spacing-gap-2);p{color:var(--color-on-background-faint);font-size:var(--fs-body2)}}.WelcomePage-module_root__hO-sl{align-items:center;display:flex;flex-direction:column;gap:var(--spacing-gap-4);height:100dvh;justify-content:center;width:100dvw}.WelcomePage-module_desc__czLaI{color:var(--color-on-background-faint);font-size:var(--fs-body);max-width:65ch;text-align:center}.WelcomePage-module_catcall__xsT00{font-size:var(--fs-body2)}
@@ -1,6 +1,5 @@
1
1
  export * from "./actions/_index";
2
2
  export * from "./auth";
3
3
  export * from "./hasPermission";
4
- export * from "../../client/clerk/rbacConfig";
5
4
  export * from "./schemas/_index";
6
5
  export * from "./toClientSafeUser";
@@ -1,6 +1,5 @@
1
1
  import { type Invitation } from "@clerk/nextjs/server";
2
2
  import type { InvitationCreateState } from "../../../client/ui/System/Invitations/InvitationListActions";
3
- import type { PaginatedResponse } from "../clerk";
4
3
  export declare const invitationListReadAction: (params: ClerkInvitationListParams) => Promise<PaginatedResponse<Invitation[]>>;
5
4
  export declare const invitationDeleteAction: (id: string) => Promise<import("@studiocubics/utils").ActionResponse<string, string[]>>;
6
5
  export declare function invitationCreateAction(_: InvitationCreateState, formData: FormData): Promise<InvitationCreateState>;
@@ -1 +1 @@
1
- {"version":3,"file":"invitations.js","sources":["../../../../src/server/clerk/actions/invitations.ts"],"sourcesContent":["\"use server\";\n\nimport { clerkClient, type Invitation } from \"@clerk/nextjs/server\";\nimport { auth } from \"../auth\";\nimport { revalidatePath } from \"next/cache\";\nimport { headers } from \"next/headers\";\nimport { getInvitationPublicMetadata } from \"../../../client/clerk/rbacConfig\";\nimport { createInvitationSchema } from \"../schemas/invitation\";\nimport z from \"zod\";\nimport type { InvitationCreateState } from \"../../../client/ui/System/Invitations/InvitationListActions\";\nimport { apiRes } from \"@studiocubics/utils\";\nimport type { PaginatedResponse } from \"../clerk\";\nimport { cache } from \"react\";\n\nexport const invitationListReadAction = cache(\n async (\n params: ClerkInvitationListParams,\n ): Promise<PaginatedResponse<Invitation[]>> => {\n const session = await auth();\n if (!session.hasPermission(\"invitations\", \"read\")) {\n throw new Error(apiRes.forbidden);\n }\n const client = await clerkClient();\n const invitationsList = await client.invitations.getInvitationList(params);\n return invitationsList;\n },\n);\nexport const invitationDeleteAction = async (id: string) => {\n const session = await auth();\n if (!session.hasPermission(\"invitations\", \"delete\")) {\n return apiRes.actionFail(apiRes.forbidden);\n }\n\n if (!id || typeof id !== \"string\")\n return apiRes.actionFail(apiRes.wrongType(\"id\", \"string\"));\n\n const client = await clerkClient();\n await client.invitations.revokeInvitation(id);\n\n revalidatePath(\"/dashboard/security/invitations\");\n return apiRes.actionSuccess();\n};\n\nexport async function invitationCreateAction(\n _: InvitationCreateState,\n formData: FormData,\n): Promise<InvitationCreateState> {\n const session = await auth();\n if (!session.hasPermission(\"invitations\", \"create\")) {\n return apiRes.actionFail(apiRes.forbidden);\n }\n\n const headersList = await headers();\n const host = headersList.get(\"host\");\n const protocol = host?.startsWith(\"localhost\") ? \"http\" : \"https\";\n\n const formDataObj = Object.fromEntries(formData.entries());\n const { success, data, error } =\n createInvitationSchema.safeParse(formDataObj);\n if (!success) {\n const flattenedError = z.flattenError(error);\n return apiRes.actionFail(\n flattenedError.formErrors.join(\"\\n\"),\n flattenedError.fieldErrors,\n );\n }\n\n const publicMetadata = getInvitationPublicMetadata(data.role);\n const client = await clerkClient();\n await client.invitations.createInvitation({\n ...data,\n redirectUrl: `${protocol}://${host}/auth/signUp`,\n publicMetadata,\n });\n\n revalidatePath(\"/dashboard/security/invitations\");\n return apiRes.actionSuccess();\n}\n"],"names":["invitationListReadAction","cache","async","params","auth","hasPermission","Error","apiRes","forbidden","client","clerkClient","invitations","getInvitationList","invitationDeleteAction","id","actionFail","wrongType","revokeInvitation","revalidatePath","actionSuccess","invitationCreateAction","_","formData","host","headers","get","protocol","startsWith","formDataObj","Object","fromEntries","entries","success","data","error","createInvitationSchema","safeParse","flattenedError","z","flattenError","formErrors","join","fieldErrors","publicMetadata","getInvitationPublicMetadata","role","createInvitation","redirectUrl"],"mappings":"uaAcO,MAAMA,EAA2BC,EACtCC,MACEC,IAGA,WADsBC,KACTC,cAAc,cAAe,QACxC,MAAM,IAAIC,MAAMC,EAAOC,WAEzB,MAAMC,QAAeC,IAErB,aAD8BD,EAAOE,YAAYC,kBAAkBT,KAI1DU,EAAyBX,MAAOY,IAE3C,WADsBV,KACTC,cAAc,cAAe,UACxC,OAAOE,EAAOQ,WAAWR,EAAOC,WAGlC,IAAKM,GAAoB,iBAAPA,EAChB,OAAOP,EAAOQ,WAAWR,EAAOS,UAAU,KAAM,WAElD,MAAMP,QAAeC,IAIrB,aAHMD,EAAOE,YAAYM,iBAAiBH,GAE1CI,EAAe,mCACRX,EAAOY,iBAGTjB,eAAekB,EACpBC,EACAC,GAGA,WADsBlB,KACTC,cAAc,cAAe,UACxC,OAAOE,EAAOQ,WAAWR,EAAOC,WAGlC,MACMe,SADoBC,KACDC,IAAI,QACvBC,EAAWH,GAAMI,WAAW,aAAe,OAAS,QAEpDC,EAAcC,OAAOC,YAAYR,EAASS,YAC1CC,QAAEA,EAAOC,KAAEA,EAAIC,MAAEA,GACrBC,EAAuBC,UAAUR,GACnC,IAAKI,EAAS,CACZ,MAAMK,EAAiBC,EAAEC,aAAaL,GACtC,OAAO3B,EAAOQ,WACZsB,EAAeG,WAAWC,KAAK,MAC/BJ,EAAeK,YAEnB,CAEA,MAAMC,EAAiBC,EAA4BX,EAAKY,MAClDpC,QAAeC,IAQrB,aAPMD,EAAOE,YAAYmC,iBAAiB,IACrCb,EACHc,YAAa,GAAGrB,OAAcH,gBAC9BoB,mBAGFzB,EAAe,mCACRX,EAAOY,eAChB"}
1
+ {"version":3,"file":"invitations.js","sources":["../../../../src/server/clerk/actions/invitations.ts"],"sourcesContent":["\"use server\";\n\nimport { clerkClient, type Invitation } from \"@clerk/nextjs/server\";\nimport { auth } from \"../auth\";\nimport { revalidatePath } from \"next/cache\";\nimport { headers } from \"next/headers\";\nimport { getInvitationPublicMetadata } from \"../../../client/clerk/rbacConfig\";\nimport { createInvitationSchema } from \"../schemas/invitation\";\nimport z from \"zod\";\nimport type { InvitationCreateState } from \"../../../client/ui/System/Invitations/InvitationListActions\";\nimport { apiRes } from \"@studiocubics/utils\";\nimport { cache } from \"react\";\n\nexport const invitationListReadAction = cache(\n async (\n params: ClerkInvitationListParams,\n ): Promise<PaginatedResponse<Invitation[]>> => {\n const session = await auth();\n if (!session.hasPermission(\"invitations\", \"read\")) {\n throw new Error(apiRes.forbidden);\n }\n const client = await clerkClient();\n const payload = await client.invitations.getInvitationList(params);\n return payload;\n },\n);\nexport const invitationDeleteAction = async (id: string) => {\n const session = await auth();\n if (!session.hasPermission(\"invitations\", \"delete\")) {\n return apiRes.actionFail(apiRes.forbidden);\n }\n\n if (!id || typeof id !== \"string\")\n return apiRes.actionFail(apiRes.wrongType(\"id\", \"string\"));\n\n const client = await clerkClient();\n await client.invitations.revokeInvitation(id);\n\n revalidatePath(\"/dashboard/security/invitations\");\n return apiRes.actionSuccess();\n};\n\nexport async function invitationCreateAction(\n _: InvitationCreateState,\n formData: FormData,\n): Promise<InvitationCreateState> {\n const session = await auth();\n if (!session.hasPermission(\"invitations\", \"create\")) {\n return apiRes.actionFail(apiRes.forbidden);\n }\n\n const headersList = await headers();\n const host = headersList.get(\"host\");\n const protocol = host?.startsWith(\"localhost\") ? \"http\" : \"https\";\n\n const formDataObj = Object.fromEntries(formData.entries());\n const { success, data, error } =\n createInvitationSchema.safeParse(formDataObj);\n if (!success) {\n const flattenedError = z.flattenError(error);\n return apiRes.actionFail(\n flattenedError.formErrors.join(\"\\n\"),\n flattenedError.fieldErrors,\n );\n }\n\n const publicMetadata = getInvitationPublicMetadata(data.role);\n const client = await clerkClient();\n await client.invitations.createInvitation({\n ...data,\n redirectUrl: `${protocol}://${host}/auth/signUp`,\n publicMetadata,\n });\n\n revalidatePath(\"/dashboard/security/invitations\");\n return apiRes.actionSuccess();\n}\n"],"names":["invitationListReadAction","cache","async","params","auth","hasPermission","Error","apiRes","forbidden","client","clerkClient","invitations","getInvitationList","invitationDeleteAction","id","actionFail","wrongType","revokeInvitation","revalidatePath","actionSuccess","invitationCreateAction","_","formData","host","headers","get","protocol","startsWith","formDataObj","Object","fromEntries","entries","success","data","error","createInvitationSchema","safeParse","flattenedError","z","flattenError","formErrors","join","fieldErrors","publicMetadata","getInvitationPublicMetadata","role","createInvitation","redirectUrl"],"mappings":"uaAaO,MAAMA,EAA2BC,EACtCC,MACEC,IAGA,WADsBC,KACTC,cAAc,cAAe,QACxC,MAAM,IAAIC,MAAMC,EAAOC,WAEzB,MAAMC,QAAeC,IAErB,aADsBD,EAAOE,YAAYC,kBAAkBT,KAIlDU,EAAyBX,MAAOY,IAE3C,WADsBV,KACTC,cAAc,cAAe,UACxC,OAAOE,EAAOQ,WAAWR,EAAOC,WAGlC,IAAKM,GAAoB,iBAAPA,EAChB,OAAOP,EAAOQ,WAAWR,EAAOS,UAAU,KAAM,WAElD,MAAMP,QAAeC,IAIrB,aAHMD,EAAOE,YAAYM,iBAAiBH,GAE1CI,EAAe,mCACRX,EAAOY,iBAGTjB,eAAekB,EACpBC,EACAC,GAGA,WADsBlB,KACTC,cAAc,cAAe,UACxC,OAAOE,EAAOQ,WAAWR,EAAOC,WAGlC,MACMe,SADoBC,KACDC,IAAI,QACvBC,EAAWH,GAAMI,WAAW,aAAe,OAAS,QAEpDC,EAAcC,OAAOC,YAAYR,EAASS,YAC1CC,QAAEA,EAAOC,KAAEA,EAAIC,MAAEA,GACrBC,EAAuBC,UAAUR,GACnC,IAAKI,EAAS,CACZ,MAAMK,EAAiBC,EAAEC,aAAaL,GACtC,OAAO3B,EAAOQ,WACZsB,EAAeG,WAAWC,KAAK,MAC/BJ,EAAeK,YAEnB,CAEA,MAAMC,EAAiBC,EAA4BX,EAAKY,MAClDpC,QAAeC,IAQrB,aAPMD,EAAOE,YAAYmC,iBAAiB,IACrCb,EACHc,YAAa,GAAGrB,OAAcH,gBAC9BoB,mBAGFzB,EAAe,mCACRX,EAAOY,eAChB"}
@@ -0,0 +1,4 @@
1
+ import { type Session } from "@clerk/nextjs/server";
2
+ export declare const sessionListReadAction: (params: ClerkUserSessionListParams) => Promise<PaginatedResponse<Session[]>>;
3
+ export declare const sessionReadAction: (id: Session["id"]) => Promise<Session>;
4
+ export declare const sessionDeleteAction: (id: Session["id"]) => Promise<import("@studiocubics/utils").ActionResponse<string, string[]>>;
@@ -0,0 +1,2 @@
1
+ "use server";import{clerkClient as s}from"@clerk/nextjs/server";import{cache as r}from"react";import{auth as e}from"../auth.js";import{apiRes as t}from"@studiocubics/utils";import{revalidatePath as i}from"next/cache";const o=r(async r=>{if(!(await e()).hasPermission("systemUsers","read"))throw new Error(t.forbidden);const i=await s();return await i.sessions.getSessionList(r)});r(async r=>{if(!(await e()).hasPermission("systemUsers","read"))throw new Error(t.forbidden);const i=await s();return await i.sessions.getSession(r)});const n=async s=>{const r=await e();if(r.sessionId==s)return t.actionFail("Cannot revoke session currently in use!");if(!r.hasPermission("systemUsers","update"))throw new Error(t.forbidden);return i(`/dashboard/security/systemUsers/${r.userId}`),i(`/dashboard/security/systemUsers/${r.userId}/sessions`),t.actionSuccess()};export{n as sessionDeleteAction,o as sessionListReadAction};
2
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sources":["../../../../src/server/clerk/actions/sessions.ts"],"sourcesContent":["\"use server\";\n\nimport { clerkClient, type Session } from \"@clerk/nextjs/server\";\nimport { cache } from \"react\";\nimport { auth } from \"../auth\";\nimport { apiRes } from \"@studiocubics/utils\";\nimport { revalidatePath } from \"next/cache\";\n\nexport const sessionListReadAction = cache(\n async (\n params: ClerkUserSessionListParams,\n ): Promise<PaginatedResponse<Session[]>> => {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"read\"))\n throw new Error(apiRes.forbidden);\n\n const client = await clerkClient();\n const payload = await client.sessions.getSessionList(params);\n\n return payload;\n },\n);\nexport const sessionReadAction = cache(\n async (id: Session[\"id\"]): Promise<Session> => {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"read\"))\n throw new Error(apiRes.forbidden);\n\n const client = await clerkClient();\n const payload = await client.sessions.getSession(id);\n\n return payload;\n },\n);\nexport const sessionDeleteAction = async (id: Session[\"id\"]) => {\n const session = await auth();\n\n if (session.sessionId == id)\n return apiRes.actionFail(\"Cannot revoke session currently in use!\");\n\n if (!session.hasPermission(\"systemUsers\", \"update\"))\n throw new Error(apiRes.forbidden);\n\n // const client = await clerkClient();\n // await client.sessions.revokeSession(id);\n revalidatePath(`/dashboard/security/systemUsers/${session.userId}`);\n revalidatePath(`/dashboard/security/systemUsers/${session.userId}/sessions`);\n return apiRes.actionSuccess();\n};\n"],"names":["sessionListReadAction","cache","async","params","auth","hasPermission","Error","apiRes","forbidden","client","clerkClient","sessions","getSessionList","id","getSession","sessionDeleteAction","session","sessionId","actionFail","revalidatePath","userId","actionSuccess"],"mappings":"yNAQO,MAAMA,EAAwBC,EACnCC,MACEC,IAIA,WAFsBC,KAETC,cAAc,cAAe,QACxC,MAAM,IAAIC,MAAMC,EAAOC,WAEzB,MAAMC,QAAeC,IAGrB,aAFsBD,EAAOE,SAASC,eAAeT,KAKxBF,EAC/BC,MAAOW,IAGL,WAFsBT,KAETC,cAAc,cAAe,QACxC,MAAM,IAAIC,MAAMC,EAAOC,WAEzB,MAAMC,QAAeC,IAGrB,aAFsBD,EAAOE,SAASG,WAAWD,WAKxCE,EAAsBb,MAAOW,IACxC,MAAMG,QAAgBZ,IAEtB,GAAIY,EAAQC,WAAaJ,EACvB,OAAON,EAAOW,WAAW,2CAE3B,IAAKF,EAAQX,cAAc,cAAe,UACxC,MAAM,IAAIC,MAAMC,EAAOC,WAMzB,OAFAW,EAAe,mCAAmCH,EAAQI,UAC1DD,EAAe,mCAAmCH,EAAQI,mBACnDb,EAAOc"}
@@ -1,8 +1,11 @@
1
1
  import { type User } from "@clerk/nextjs/server";
2
- import type { PaginatedResponse } from "../clerk";
3
2
  import type { SystemUserRoleUpdateState } from "../../../client/ui/System/SystemUser/SystemUserRoleForm/SystemUserRoleForm";
4
3
  import type { SystemUserDetailsUpdateState } from "../../../client/ui/_index";
5
4
  export declare const systemUserListReadAction: (params: ClerkUserListParams, removeCurrent?: boolean) => Promise<PaginatedResponse<User[]>>;
6
5
  export declare const systemUserReadAction: (id: string) => Promise<User>;
7
6
  export declare function systemUserRoleUpdateAction(userId: string, _: SystemUserRoleUpdateState, formData: FormData): Promise<SystemUserRoleUpdateState>;
8
7
  export declare function systemUserDetailsUpdateAction(userId: string, _: SystemUserDetailsUpdateState, formData: FormData): Promise<SystemUserDetailsUpdateState>;
8
+ export declare function systemUserProfileImageDeleteAction(userId: User["id"]): Promise<import("@studiocubics/utils").ActionResponse<string, string[]>>;
9
+ export declare function systemUserDeleteAction(userId: User["id"]): Promise<void>;
10
+ export declare function systemUserBanAction(userId: User["id"]): Promise<void>;
11
+ export declare function systemUserUnbanAction(userId: User["id"]): Promise<void>;
@@ -1,2 +1,2 @@
1
- "use server";import{clerkClient as e}from"@clerk/nextjs/server";import{auth as r}from"../auth.js";import{apiRes as s}from"@studiocubics/utils";import{cache as o}from"react";const t=o(async(o,t=!1)=>{const i=await r();if(!i.hasPermission("systemUsers","read"))throw new Error(s.forbidden);const a=await e(),n=await a.users.getUserList(o);return t&&(n.data=n.data.filter(e=>e.id!==i.userId),n.totalCount--),n}),i=o(async o=>{if(!(await r()).hasPermission("systemUsers","read"))throw new Error(s.forbidden);const t=await e(),i=await t.users.getUser(o);if(!i)throw new Error(s.notFound(`System User: ${o}`));return i});async function a(e,o,t){if(!(await r()).hasPermission("systemUsers","update"))throw new Error(s.forbidden);const i=t.get("role");return console.log("userId",e),console.log("role",i),s.actionSuccess()}async function n(e,o,t){if(!(await r()).hasPermission("systemUsers","update"))throw new Error(s.forbidden);return console.log("firstName",t.get("firstName")),console.log("lastName",t.get("firstName")),console.log("imageFile",t.get("imageFile")),console.log("userId",e),s.actionSuccess()}export{n as systemUserDetailsUpdateAction,t as systemUserListReadAction,i as systemUserReadAction,a as systemUserRoleUpdateAction};
1
+ "use server";import{clerkClient as s}from"@clerk/nextjs/server";import{auth as e}from"../auth.js";import{apiRes as r}from"@studiocubics/utils";import{cache as t}from"react";import{revalidatePath as a}from"next/cache";import{systemUserUpdateSchema as o}from"../schemas/systemUser.js";import i from"zod";import{redirect as n}from"next/navigation";const c=t(async(t,a=!1)=>{const o=await e();if(!o.hasPermission("systemUsers","read"))throw new Error(r.forbidden);const i=await s(),n=await i.users.getUserList(t);return a&&(n.data=n.data.filter(s=>s.id!==o.userId),n.totalCount--),n}),u=t(async t=>{if(!(await e()).hasPermission("systemUsers","read"))throw new Error(r.forbidden);const a=await s(),o=await a.users.getUser(t);if(!o)throw new Error(r.notFound(`System User: ${t}`));return o});async function d(t,o,i){const n=await e();if(!n.hasPermission("systemUsers","update"))throw new Error(r.forbidden);const c=i.get("role");console.log("userId",t),console.log("role",c);const u=await s(),{publicMetadata:d}=await u.users.getUser(t);return await u.users.updateUserMetadata(t,{publicMetadata:{...d,role:c}}),n.userId==t&&a("/dashboard/security/account"),a(`/dashboard/security/systemUsers/${t}`),r.actionSuccess()}async function m(t,n,c){const u=await e();if(!u.hasPermission("systemUsers","update"))throw new Error(r.forbidden);console.log("firstName",c.get("firstName")),console.log("lastName",c.get("lastName")),console.log("imageFile",c.get("imageFile")),console.log("userId",t);const d=Object.fromEntries(c.entries()),{success:m,data:f,error:w}=o.safeParse(d);if(!m){const s=i.flattenError(w);return r.actionFail(s.formErrors.join("\n"),s.fieldErrors)}const l=await s();return f.imageFile instanceof File&&await l.users.updateUserProfileImage(t,{file:f.imageFile}),(f.firstName||f.lastName)&&await l.users.updateUser(t,{firstName:f.firstName,lastName:f.lastName}),u.userId==t&&a("/dashboard/security/account"),a(`/dashboard/security/systemUsers/${t}`),r.actionSuccess()}async function f(t){const o=await e();if(!o.hasPermission("systemUsers","update"))throw new Error(r.forbidden);const i=await s();return await i.users.deleteUserProfileImage(t),o.userId==t&&a("/dashboard/security/account"),a(`/dashboard/security/systemUsers/${t}`),r.actionSuccess()}async function w(t){const o=await e();if(o.userId==t)throw new Error("Cannot delete current account.");if(!o.hasPermission("systemUsers","delete"))throw new Error(r.forbidden);const i=await s();await i.users.deleteUser(t),a("/dashboard/security/systemUsers"),n("/dashboard/security/systemUsers")}async function l(t){const o=await e();if(o.userId==t)throw new Error("Cannot ban current account.");if(!o.hasPermission("systemUsers","update"))throw new Error(r.forbidden);const i=await s();await i.users.banUser(t),a(`/dashboard/security/systemUsers/${t}`)}async function y(t){const o=await e();if(o.userId==t)throw new Error("Cannot ban current account.");if(!o.hasPermission("systemUsers","update"))throw new Error(r.forbidden);const i=await s();await i.users.unbanUser(t),a(`/dashboard/security/systemUsers/${t}`)}export{l as systemUserBanAction,w as systemUserDeleteAction,m as systemUserDetailsUpdateAction,c as systemUserListReadAction,f as systemUserProfileImageDeleteAction,u as systemUserReadAction,d as systemUserRoleUpdateAction,y as systemUserUnbanAction};
2
2
  //# sourceMappingURL=systemUsers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"systemUsers.js","sources":["../../../../src/server/clerk/actions/systemUsers.ts"],"sourcesContent":["\"use server\";\n\nimport { clerkClient, type User } from \"@clerk/nextjs/server\";\nimport { auth } from \"../auth\";\nimport { apiRes } from \"@studiocubics/utils\";\nimport type { PaginatedResponse } from \"../clerk\";\nimport type { SystemUserRoleUpdateState } from \"../../../client/ui/System/SystemUser/SystemUserRoleForm/SystemUserRoleForm\";\nimport { cache } from \"react\";\nimport type { SystemUserDetailsUpdateState } from \"../../../client/ui/_index\";\n\nexport const systemUserListReadAction = cache(\n async (\n params: ClerkUserListParams,\n removeCurrent: boolean = false,\n ): Promise<PaginatedResponse<User[]>> => {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"read\")) {\n throw new Error(apiRes.forbidden);\n }\n\n const client = await clerkClient();\n const systemUserList = await client.users.getUserList(params);\n\n if (removeCurrent) {\n systemUserList.data = systemUserList.data.filter(\n (su) => su.id !== session.userId,\n );\n systemUserList.totalCount--;\n }\n\n return systemUserList;\n },\n);\n\nexport const systemUserReadAction = cache(async (id: string) => {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"read\")) {\n throw new Error(apiRes.forbidden);\n }\n\n const client = await clerkClient();\n const systemUser = await client.users.getUser(id);\n\n if (!systemUser) {\n throw new Error(apiRes.notFound(`System User: ${id}`));\n }\n\n return systemUser;\n});\n\nexport async function systemUserRoleUpdateAction(\n userId: string,\n _: SystemUserRoleUpdateState,\n formData: FormData,\n): Promise<SystemUserRoleUpdateState> {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"update\")) {\n throw new Error(apiRes.forbidden);\n }\n const role = formData.get(\"role\");\n console.log(\"userId\", userId);\n console.log(\"role\", role);\n return apiRes.actionSuccess();\n\n // const client = await clerkClient();\n // const { publicMetadata } = await client.users.getUser(userId);\n // const patchedUser = await client.users.updateUserMetadata(userId, {\n // publicMetadata: {\n // ...publicMetadata,\n // role,\n // },\n // });\n // return apiRes.actionSuccess(patchedUser);\n}\n\nexport async function systemUserDetailsUpdateAction(\n userId: string,\n _: SystemUserDetailsUpdateState,\n formData: FormData,\n): Promise<SystemUserDetailsUpdateState> {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"update\")) {\n throw new Error(apiRes.forbidden);\n }\n console.log(\"firstName\", formData.get(\"firstName\"));\n console.log(\"lastName\", formData.get(\"firstName\"));\n console.log(\"imageFile\", formData.get(\"imageFile\"));\n\n console.log(\"userId\", userId);\n return apiRes.actionSuccess();\n}\n"],"names":["systemUserListReadAction","cache","async","params","removeCurrent","session","auth","hasPermission","Error","apiRes","forbidden","client","clerkClient","systemUserList","users","getUserList","data","filter","su","id","userId","totalCount","systemUserReadAction","systemUser","getUser","notFound","systemUserRoleUpdateAction","_","formData","role","get","console","log","actionSuccess","systemUserDetailsUpdateAction"],"mappings":"6KAUO,MAAMA,EAA2BC,EACtCC,MACEC,EACAC,GAAyB,KAEzB,MAAMC,QAAgBC,IAEtB,IAAKD,EAAQE,cAAc,cAAe,QACxC,MAAM,IAAIC,MAAMC,EAAOC,WAGzB,MAAMC,QAAeC,IACfC,QAAuBF,EAAOG,MAAMC,YAAYZ,GAStD,OAPIC,IACFS,EAAeG,KAAOH,EAAeG,KAAKC,OACvCC,GAAOA,EAAGC,KAAOd,EAAQe,QAE5BP,EAAeQ,cAGVR,IAIES,EAAuBrB,EAAMC,MAAOiB,IAG/C,WAFsBb,KAETC,cAAc,cAAe,QACxC,MAAM,IAAIC,MAAMC,EAAOC,WAGzB,MAAMC,QAAeC,IACfW,QAAmBZ,EAAOG,MAAMU,QAAQL,GAE9C,IAAKI,EACH,MAAM,IAAIf,MAAMC,EAAOgB,SAAS,gBAAgBN,MAGlD,OAAOI,IAGFrB,eAAewB,EACpBN,EACAO,EACAC,GAIA,WAFsBtB,KAETC,cAAc,cAAe,UACxC,MAAM,IAAIC,MAAMC,EAAOC,WAEzB,MAAMmB,EAAOD,EAASE,IAAI,QAG1B,OAFAC,QAAQC,IAAI,SAAUZ,GACtBW,QAAQC,IAAI,OAAQH,GACbpB,EAAOwB,eAWhB,CAEO/B,eAAegC,EACpBd,EACAO,EACAC,GAIA,WAFsBtB,KAETC,cAAc,cAAe,UACxC,MAAM,IAAIC,MAAMC,EAAOC,WAOzB,OALAqB,QAAQC,IAAI,YAAaJ,EAASE,IAAI,cACtCC,QAAQC,IAAI,WAAYJ,EAASE,IAAI,cACrCC,QAAQC,IAAI,YAAaJ,EAASE,IAAI,cAEtCC,QAAQC,IAAI,SAAUZ,GACfX,EAAOwB,eAChB"}
1
+ {"version":3,"file":"systemUsers.js","sources":["../../../../src/server/clerk/actions/systemUsers.ts"],"sourcesContent":["\"use server\";\n\nimport { clerkClient, type User } from \"@clerk/nextjs/server\";\nimport { auth } from \"../auth\";\nimport { apiRes } from \"@studiocubics/utils\";\nimport type { SystemUserRoleUpdateState } from \"../../../client/ui/System/SystemUser/SystemUserRoleForm/SystemUserRoleForm\";\nimport { cache } from \"react\";\nimport type { SystemUserDetailsUpdateState } from \"../../../client/ui/_index\";\nimport { revalidatePath } from \"next/cache\";\nimport { systemUserUpdateSchema } from \"../schemas/systemUser\";\nimport z from \"zod\";\nimport { redirect } from \"next/navigation\";\n\nexport const systemUserListReadAction = cache(\n async (\n params: ClerkUserListParams,\n removeCurrent: boolean = false,\n ): Promise<PaginatedResponse<User[]>> => {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"read\")) {\n throw new Error(apiRes.forbidden);\n }\n\n const client = await clerkClient();\n const systemUserList = await client.users.getUserList(params);\n\n if (removeCurrent) {\n systemUserList.data = systemUserList.data.filter(\n (su) => su.id !== session.userId,\n );\n systemUserList.totalCount--;\n }\n\n return systemUserList;\n },\n);\n\nexport const systemUserReadAction = cache(async (id: string) => {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"read\")) {\n throw new Error(apiRes.forbidden);\n }\n\n const client = await clerkClient();\n const systemUser = await client.users.getUser(id);\n\n if (!systemUser) {\n throw new Error(apiRes.notFound(`System User: ${id}`));\n }\n\n return systemUser;\n});\n\nexport async function systemUserRoleUpdateAction(\n userId: string,\n _: SystemUserRoleUpdateState,\n formData: FormData,\n): Promise<SystemUserRoleUpdateState> {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"update\")) {\n throw new Error(apiRes.forbidden);\n }\n const role = formData.get(\"role\");\n console.log(\"userId\", userId);\n console.log(\"role\", role);\n\n const client = await clerkClient();\n const { publicMetadata } = await client.users.getUser(userId);\n await client.users.updateUserMetadata(userId, {\n publicMetadata: {\n ...publicMetadata,\n role,\n },\n });\n if (session.userId == userId) revalidatePath(`/dashboard/security/account`);\n\n revalidatePath(`/dashboard/security/systemUsers/${userId}`);\n return apiRes.actionSuccess();\n}\n\nexport async function systemUserDetailsUpdateAction(\n userId: string,\n _: SystemUserDetailsUpdateState,\n formData: FormData,\n): Promise<SystemUserDetailsUpdateState> {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"update\")) {\n throw new Error(apiRes.forbidden);\n }\n console.log(\"firstName\", formData.get(\"firstName\"));\n console.log(\"lastName\", formData.get(\"lastName\"));\n console.log(\"imageFile\", formData.get(\"imageFile\"));\n console.log(\"userId\", userId);\n\n const formDataObj = Object.fromEntries(formData.entries());\n const { success, data, error } =\n systemUserUpdateSchema.safeParse(formDataObj);\n if (!success) {\n const flattenedError = z.flattenError(error);\n return apiRes.actionFail(\n flattenedError.formErrors.join(\"\\n\"),\n flattenedError.fieldErrors,\n );\n }\n const client = await clerkClient();\n\n if (data.imageFile instanceof File) {\n await client.users.updateUserProfileImage(userId, { file: data.imageFile });\n }\n if (data.firstName || data.lastName) {\n await client.users.updateUser(userId, {\n firstName: data.firstName,\n lastName: data.lastName,\n });\n }\n\n if (session.userId == userId) revalidatePath(`/dashboard/security/account`);\n\n revalidatePath(`/dashboard/security/systemUsers/${userId}`);\n return apiRes.actionSuccess();\n}\n\nexport async function systemUserProfileImageDeleteAction(userId: User[\"id\"]) {\n const session = await auth();\n\n if (!session.hasPermission(\"systemUsers\", \"update\")) {\n throw new Error(apiRes.forbidden);\n }\n const client = await clerkClient();\n await client.users.deleteUserProfileImage(userId);\n\n if (session.userId == userId) revalidatePath(`/dashboard/security/account`);\n\n revalidatePath(`/dashboard/security/systemUsers/${userId}`);\n return apiRes.actionSuccess();\n}\n\nexport async function systemUserDeleteAction(userId: User[\"id\"]) {\n const session = await auth();\n if (session.userId == userId)\n throw new Error(\"Cannot delete current account.\");\n\n if (!session.hasPermission(\"systemUsers\", \"delete\"))\n throw new Error(apiRes.forbidden);\n\n const client = await clerkClient();\n await client.users.deleteUser(userId);\n\n revalidatePath(`/dashboard/security/systemUsers`);\n redirect(`/dashboard/security/systemUsers`);\n}\n\nexport async function systemUserBanAction(userId: User[\"id\"]) {\n const session = await auth();\n if (session.userId == userId) throw new Error(\"Cannot ban current account.\");\n\n if (!session.hasPermission(\"systemUsers\", \"update\"))\n throw new Error(apiRes.forbidden);\n\n const client = await clerkClient();\n await client.users.banUser(userId);\n\n revalidatePath(`/dashboard/security/systemUsers/${userId}`);\n}\nexport async function systemUserUnbanAction(userId: User[\"id\"]) {\n const session = await auth();\n if (session.userId == userId) throw new Error(\"Cannot ban current account.\");\n\n if (!session.hasPermission(\"systemUsers\", \"update\"))\n throw new Error(apiRes.forbidden);\n\n const client = await clerkClient();\n await client.users.unbanUser(userId);\n\n revalidatePath(`/dashboard/security/systemUsers/${userId}`);\n}\n"],"names":["systemUserListReadAction","cache","async","params","removeCurrent","session","auth","hasPermission","Error","apiRes","forbidden","client","clerkClient","systemUserList","users","getUserList","data","filter","su","id","userId","totalCount","systemUserReadAction","systemUser","getUser","notFound","systemUserRoleUpdateAction","_","formData","role","get","console","log","publicMetadata","updateUserMetadata","revalidatePath","actionSuccess","systemUserDetailsUpdateAction","formDataObj","Object","fromEntries","entries","success","error","systemUserUpdateSchema","safeParse","flattenedError","z","flattenError","actionFail","formErrors","join","fieldErrors","imageFile","File","updateUserProfileImage","file","firstName","lastName","updateUser","systemUserProfileImageDeleteAction","deleteUserProfileImage","systemUserDeleteAction","deleteUser","redirect","systemUserBanAction","banUser","systemUserUnbanAction","unbanUser"],"mappings":"yVAaO,MAAMA,EAA2BC,EACtCC,MACEC,EACAC,GAAyB,KAEzB,MAAMC,QAAgBC,IAEtB,IAAKD,EAAQE,cAAc,cAAe,QACxC,MAAM,IAAIC,MAAMC,EAAOC,WAGzB,MAAMC,QAAeC,IACfC,QAAuBF,EAAOG,MAAMC,YAAYZ,GAStD,OAPIC,IACFS,EAAeG,KAAOH,EAAeG,KAAKC,OACvCC,GAAOA,EAAGC,KAAOd,EAAQe,QAE5BP,EAAeQ,cAGVR,IAIES,EAAuBrB,EAAMC,MAAOiB,IAG/C,WAFsBb,KAETC,cAAc,cAAe,QACxC,MAAM,IAAIC,MAAMC,EAAOC,WAGzB,MAAMC,QAAeC,IACfW,QAAmBZ,EAAOG,MAAMU,QAAQL,GAE9C,IAAKI,EACH,MAAM,IAAIf,MAAMC,EAAOgB,SAAS,gBAAgBN,MAGlD,OAAOI,IAGFrB,eAAewB,EACpBN,EACAO,EACAC,GAEA,MAAMvB,QAAgBC,IAEtB,IAAKD,EAAQE,cAAc,cAAe,UACxC,MAAM,IAAIC,MAAMC,EAAOC,WAEzB,MAAMmB,EAAOD,EAASE,IAAI,QAC1BC,QAAQC,IAAI,SAAUZ,GACtBW,QAAQC,IAAI,OAAQH,GAEpB,MAAMlB,QAAeC,KACfqB,eAAEA,SAAyBtB,EAAOG,MAAMU,QAAQJ,GAUtD,aATMT,EAAOG,MAAMoB,mBAAmBd,EAAQ,CAC5Ca,eAAgB,IACXA,EACHJ,UAGAxB,EAAQe,QAAUA,GAAQe,EAAe,+BAE7CA,EAAe,mCAAmCf,KAC3CX,EAAO2B,eAChB,CAEOlC,eAAemC,EACpBjB,EACAO,EACAC,GAEA,MAAMvB,QAAgBC,IAEtB,IAAKD,EAAQE,cAAc,cAAe,UACxC,MAAM,IAAIC,MAAMC,EAAOC,WAEzBqB,QAAQC,IAAI,YAAaJ,EAASE,IAAI,cACtCC,QAAQC,IAAI,WAAYJ,EAASE,IAAI,aACrCC,QAAQC,IAAI,YAAaJ,EAASE,IAAI,cACtCC,QAAQC,IAAI,SAAUZ,GAEtB,MAAMkB,EAAcC,OAAOC,YAAYZ,EAASa,YAC1CC,QAAEA,EAAO1B,KAAEA,EAAI2B,MAAEA,GACrBC,EAAuBC,UAAUP,GACnC,IAAKI,EAAS,CACZ,MAAMI,EAAiBC,EAAEC,aAAaL,GACtC,OAAOlC,EAAOwC,WACZH,EAAeI,WAAWC,KAAK,MAC/BL,EAAeM,YAEnB,CACA,MAAMzC,QAAeC,IAerB,OAbII,EAAKqC,qBAAqBC,YACtB3C,EAAOG,MAAMyC,uBAAuBnC,EAAQ,CAAEoC,KAAMxC,EAAKqC,aAE7DrC,EAAKyC,WAAazC,EAAK0C,iBACnB/C,EAAOG,MAAM6C,WAAWvC,EAAQ,CACpCqC,UAAWzC,EAAKyC,UAChBC,SAAU1C,EAAK0C,WAIfrD,EAAQe,QAAUA,GAAQe,EAAe,+BAE7CA,EAAe,mCAAmCf,KAC3CX,EAAO2B,eAChB,CAEOlC,eAAe0D,EAAmCxC,GACvD,MAAMf,QAAgBC,IAEtB,IAAKD,EAAQE,cAAc,cAAe,UACxC,MAAM,IAAIC,MAAMC,EAAOC,WAEzB,MAAMC,QAAeC,IAMrB,aALMD,EAAOG,MAAM+C,uBAAuBzC,GAEtCf,EAAQe,QAAUA,GAAQe,EAAe,+BAE7CA,EAAe,mCAAmCf,KAC3CX,EAAO2B,eAChB,CAEOlC,eAAe4D,EAAuB1C,GAC3C,MAAMf,QAAgBC,IACtB,GAAID,EAAQe,QAAUA,EACpB,MAAM,IAAIZ,MAAM,kCAElB,IAAKH,EAAQE,cAAc,cAAe,UACxC,MAAM,IAAIC,MAAMC,EAAOC,WAEzB,MAAMC,QAAeC,UACfD,EAAOG,MAAMiD,WAAW3C,GAE9Be,EAAe,mCACf6B,EAAS,kCACX,CAEO9D,eAAe+D,EAAoB7C,GACxC,MAAMf,QAAgBC,IACtB,GAAID,EAAQe,QAAUA,EAAQ,MAAM,IAAIZ,MAAM,+BAE9C,IAAKH,EAAQE,cAAc,cAAe,UACxC,MAAM,IAAIC,MAAMC,EAAOC,WAEzB,MAAMC,QAAeC,UACfD,EAAOG,MAAMoD,QAAQ9C,GAE3Be,EAAe,mCAAmCf,IACpD,CACOlB,eAAeiE,EAAsB/C,GAC1C,MAAMf,QAAgBC,IACtB,GAAID,EAAQe,QAAUA,EAAQ,MAAM,IAAIZ,MAAM,+BAE9C,IAAKH,EAAQE,cAAc,cAAe,UACxC,MAAM,IAAIC,MAAMC,EAAOC,WAEzB,MAAMC,QAAeC,UACfD,EAAOG,MAAMsD,UAAUhD,GAE7Be,EAAe,mCAAmCf,IACpD"}
@@ -1,8 +1,8 @@
1
1
  import { auth as clerkAuth } from "@clerk/nextjs/server";
2
2
  import type { Resource, RoleActions } from "../../client/clerk/rbacConfig";
3
- type ClerkAuthResult = Awaited<ReturnType<typeof clerkAuth>>;
3
+ export type ClerkAuthResult = Awaited<ReturnType<typeof clerkAuth>>;
4
+ export type ClerkAuthOptions = Parameters<typeof clerkAuth>[0];
4
5
  export type AuthWithPermissions = ClerkAuthResult & {
5
6
  hasPermission: (resource: Resource, action: RoleActions, record?: Record<string, any>) => Promise<boolean>;
6
7
  };
7
- export declare function auth(options?: Parameters<typeof clerkAuth>[0]): Promise<AuthWithPermissions>;
8
- export {};
8
+ export declare function auth(options?: ClerkAuthOptions): Promise<AuthWithPermissions>;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sources":["../../../src/server/clerk/auth.ts"],"sourcesContent":["\"use server\";\n\nimport { auth as clerkAuth } from \"@clerk/nextjs/server\";\nimport { hasPermissionForClaims } from \"./hasPermission\";\nimport type { Resource, RoleActions } from \"../../client/clerk/rbacConfig\";\ntype ClerkAuthResult = Awaited<ReturnType<typeof clerkAuth>>;\n\nexport type AuthWithPermissions = ClerkAuthResult & {\n hasPermission: (\n resource: Resource,\n action: RoleActions,\n record?: Record<string, any>,\n ) => Promise<boolean>;\n};\nexport async function auth(\n options?: Parameters<typeof clerkAuth>[0],\n): Promise<AuthWithPermissions> {\n const clerkAuthResult = await clerkAuth(options);\n\n return {\n ...clerkAuthResult,\n hasPermission: async (\n resource: Resource,\n action: RoleActions,\n record?: Record<string, any>,\n ) => {\n return hasPermissionForClaims({\n claims: clerkAuthResult.sessionClaims,\n resource,\n action,\n record,\n });\n },\n };\n}\n"],"names":["async","auth","options","clerkAuthResult","clerkAuth","hasPermission","resource","action","record","hasPermissionForClaims","claims","sessionClaims"],"mappings":"qHAcOA,eAAeC,EACpBC,GAEA,MAAMC,QAAwBC,EAAUF,GAExC,MAAO,IACFC,EACHE,cAAeL,MACbM,EACAC,EACAC,IAEOC,EAAuB,CAC5BC,OAAQP,EAAgBQ,cACxBL,WACAC,SACAC,WAIR"}
1
+ {"version":3,"file":"auth.js","sources":["../../../src/server/clerk/auth.ts"],"sourcesContent":["\"use server\";\n\nimport { auth as clerkAuth } from \"@clerk/nextjs/server\";\nimport { hasPermissionForClaims } from \"./hasPermission\";\nimport type { Resource, RoleActions } from \"../../client/clerk/rbacConfig\";\nexport type ClerkAuthResult = Awaited<ReturnType<typeof clerkAuth>>;\nexport type ClerkAuthOptions = Parameters<typeof clerkAuth>[0];\nexport type AuthWithPermissions = ClerkAuthResult & {\n hasPermission: (\n resource: Resource,\n action: RoleActions,\n record?: Record<string, any>,\n ) => Promise<boolean>;\n};\nexport async function auth(\n options?: ClerkAuthOptions,\n): Promise<AuthWithPermissions> {\n const clerkAuthResult = await clerkAuth(options);\n\n return {\n ...clerkAuthResult,\n hasPermission: async (\n resource: Resource,\n action: RoleActions,\n record?: Record<string, any>,\n ) => {\n return hasPermissionForClaims({\n claims: clerkAuthResult.sessionClaims,\n resource,\n action,\n record,\n });\n },\n };\n}\n"],"names":["async","auth","options","clerkAuthResult","clerkAuth","hasPermission","resource","action","record","hasPermissionForClaims","claims","sessionClaims"],"mappings":"qHAcOA,eAAeC,EACpBC,GAEA,MAAMC,QAAwBC,EAAUF,GAExC,MAAO,IACFC,EACHE,cAAeL,MACbM,EACAC,EACAC,IAEOC,EAAuB,CAC5BC,OAAQP,EAAgBQ,cACxBL,WACAC,SACAC,WAIR"}
@@ -1,6 +1,8 @@
1
1
  import z from "zod";
2
+ export declare const MAX_UPLOAD_SIZE: number;
3
+ export declare const ACCEPTED_IMAGE_TYPES: string[];
2
4
  export declare const systemUserUpdateSchema: z.ZodObject<{
3
5
  firstName: z.ZodString;
4
6
  lastName: z.ZodString;
5
- imageFile: z.ZodFile;
7
+ imageFile: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodOptional<z.ZodFile>]>;
6
8
  }, z.core.$strip>;
@@ -0,0 +1,2 @@
1
+ import e from"zod";const i=2097152,r=["image/jpeg","image/png"],a=e.object({firstName:e.string().max(25).min(2),lastName:e.string().max(25).min(2),imageFile:e.string().optional().or(e.file().optional().refine(e=>e&&e.size<=i,{error:"Image size is larger than >2MB"}).refine(e=>e&&r.includes(e.type),"Only .jpg and .png formats are supported."))});export{r as ACCEPTED_IMAGE_TYPES,i as MAX_UPLOAD_SIZE,a as systemUserUpdateSchema};
2
+ //# sourceMappingURL=systemUser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systemUser.js","sources":["../../../../src/server/clerk/schemas/systemUser.ts"],"sourcesContent":["import z from \"zod\";\nexport const MAX_UPLOAD_SIZE = 1024 * 1024 * 2; // 2MB\nexport const ACCEPTED_IMAGE_TYPES = [\"image/jpeg\", \"image/png\"];\nexport const systemUserUpdateSchema = z.object({\n firstName: z.string().max(25).min(2),\n lastName: z.string().max(25).min(2),\n imageFile: z\n .string()\n .optional()\n .or(\n z\n .file()\n .optional()\n .refine((f) => f && f.size <= MAX_UPLOAD_SIZE, {\n error: \"Image size is larger than >2MB\",\n })\n .refine(\n (f) => f && ACCEPTED_IMAGE_TYPES.includes(f.type),\n \"Only .jpg and .png formats are supported.\",\n ),\n ),\n});\n"],"names":["MAX_UPLOAD_SIZE","ACCEPTED_IMAGE_TYPES","systemUserUpdateSchema","z","object","firstName","string","max","min","lastName","imageFile","optional","or","file","refine","f","size","error","includes","type"],"mappings":"mBACO,MAAMA,EAAkB,QAClBC,EAAuB,CAAC,aAAc,aACtCC,EAAyBC,EAAEC,OAAO,CAC7CC,UAAWF,EAAEG,SAASC,IAAI,IAAIC,IAAI,GAClCC,SAAUN,EAAEG,SAASC,IAAI,IAAIC,IAAI,GACjCE,UAAWP,EACRG,SACAK,WACAC,GACCT,EACGU,OACAF,WACAG,OAAQC,GAAMA,GAAKA,EAAEC,MAAQhB,EAAiB,CAC7CiB,MAAO,mCAERH,OACEC,GAAMA,GAAKd,EAAqBiB,SAASH,EAAEI,MAC5C"}
@@ -45,4 +45,4 @@ export type ClientSafeUser = {
45
45
  * @param user Clerk User instance from `@clerk/nextjs/server`
46
46
  * @returns ClientSafeUser plain object
47
47
  */
48
- export declare function toClientSafeUser(user: User): ClientSafeUser;
48
+ export declare function toClientSafeUser(user: User): Promise<ClientSafeUser>;
@@ -1,2 +1,2 @@
1
- "use server";function e(e){const i=e.emailAddresses.find(i=>i.id==e.primaryEmailAddressId);if(!i)throw new Error("Missing primaryEmailAddress");return{id:e.id,username:e.username,firstName:e.firstName,lastName:e.lastName,fullName:e.fullName,imageUrl:e.imageUrl,primaryEmailAddress:{id:i.id,emailAddress:i.emailAddress,verified:"verified"===i.verification?.status},emailAddresses:e.emailAddresses.map(e=>({id:e.id,emailAddress:e.emailAddress,verified:"verified"===e.verification?.status})),publicMetadata:e.publicMetadata??{},createdAt:new Date(e.createdAt),updatedAt:new Date(e.updatedAt),lastSignInAt:e.lastSignInAt?new Date(e.lastSignInAt):null}}export{e as toClientSafeUser};
1
+ "use server";async function e(e){const i=e.emailAddresses.find(i=>i.id==e.primaryEmailAddressId);if(!i)throw new Error("Missing primaryEmailAddress");return{id:e.id,username:e.username,firstName:e.firstName,lastName:e.lastName,fullName:e.fullName,imageUrl:e.imageUrl,primaryEmailAddress:{id:i.id,emailAddress:i.emailAddress,verified:"verified"===i.verification?.status},emailAddresses:e.emailAddresses.map(e=>({id:e.id,emailAddress:e.emailAddress,verified:"verified"===e.verification?.status})),publicMetadata:e.publicMetadata??{},createdAt:new Date(e.createdAt),updatedAt:new Date(e.updatedAt),lastSignInAt:e.lastSignInAt?new Date(e.lastSignInAt):null}}export{e as toClientSafeUser};
2
2
  //# sourceMappingURL=toClientSafeUser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toClientSafeUser.js","sources":["../../../src/server/clerk/toClientSafeUser.ts"],"sourcesContent":["\"use server\";\n\nimport type { User } from \"@clerk/nextjs/server\";\n\n/**\n * Client-safe representation of a Clerk User.\n *\n * This intentionally excludes any sensitive or server-only fields\n * (e.g. privateMetadata, externalAccounts with tokens, etc.)\n * and contains only JSON-serializable data that is safe to pass\n * from Server Components to Client Components.\n */\nexport type ClientSafeUser = {\n id: string;\n username: string | null;\n firstName: string | null;\n lastName: string | null;\n fullName: string | null;\n imageUrl: string;\n primaryEmailAddress: {\n id: string;\n emailAddress: string;\n verified: boolean;\n };\n emailAddresses: Array<{\n id: string;\n emailAddress: string;\n verified: boolean;\n }>;\n publicMetadata: CustomJwtSessionClaims[\"metadata\"];\n createdAt: Date | null;\n updatedAt: Date | null;\n lastSignInAt: Date | null;\n};\n\n/**\n * Converts a Clerk `User` (server-side) into a client-safe, serializable object.\n *\n * Why this exists:\n * - The Clerk `User` class contains methods and non-serializable fields.\n * - Passing it directly to a Client Component will break React Server Components.\n * - This function strips the object down to stable, safe primitives only.\n *\n * Rules enforced here:\n * - No functions\n * - No circular references\n * - No private or sensitive data\n *\n * @param user Clerk User instance from `@clerk/nextjs/server`\n * @returns ClientSafeUser plain object\n */\nexport function toClientSafeUser(user: User): ClientSafeUser {\n const pea = user.emailAddresses.find(\n (ea) => ea.id == user.primaryEmailAddressId,\n );\n if (!pea) throw new Error(\"Missing primaryEmailAddress\");\n return {\n id: user.id,\n username: user.username,\n firstName: user.firstName,\n lastName: user.lastName,\n fullName: user.fullName,\n imageUrl: user.imageUrl,\n primaryEmailAddress: {\n id: pea.id,\n emailAddress: pea.emailAddress,\n verified: pea.verification?.status === \"verified\",\n },\n emailAddresses: user.emailAddresses.map((email) => ({\n id: email.id,\n emailAddress: email.emailAddress,\n verified: email.verification?.status === \"verified\",\n })),\n publicMetadata: user.publicMetadata ?? {},\n createdAt: new Date(user.createdAt),\n updatedAt: new Date(user.updatedAt),\n lastSignInAt: user.lastSignInAt ? new Date(user.lastSignInAt) : null,\n };\n}\n"],"names":["toClientSafeUser","user","pea","emailAddresses","find","ea","id","primaryEmailAddressId","Error","username","firstName","lastName","fullName","imageUrl","primaryEmailAddress","emailAddress","verified","verification","status","map","email","publicMetadata","createdAt","Date","updatedAt","lastSignInAt"],"mappings":"aAmDM,SAAUA,EAAiBC,GAC/B,MAAMC,EAAMD,EAAKE,eAAeC,KAC7BC,GAAOA,EAAGC,IAAML,EAAKM,uBAExB,IAAKL,EAAK,MAAM,IAAIM,MAAM,+BAC1B,MAAO,CACLF,GAAIL,EAAKK,GACTG,SAAUR,EAAKQ,SACfC,UAAWT,EAAKS,UAChBC,SAAUV,EAAKU,SACfC,SAAUX,EAAKW,SACfC,SAAUZ,EAAKY,SACfC,oBAAqB,CACnBR,GAAIJ,EAAII,GACRS,aAAcb,EAAIa,aAClBC,SAAuC,aAA7Bd,EAAIe,cAAcC,QAE9Bf,eAAgBF,EAAKE,eAAegB,IAAKC,IAAK,CAC5Cd,GAAIc,EAAMd,GACVS,aAAcK,EAAML,aACpBC,SAAyC,aAA/BI,EAAMH,cAAcC,UAEhCG,eAAgBpB,EAAKoB,gBAAkB,CAAA,EACvCC,UAAW,IAAIC,KAAKtB,EAAKqB,WACzBE,UAAW,IAAID,KAAKtB,EAAKuB,WACzBC,aAAcxB,EAAKwB,aAAe,IAAIF,KAAKtB,EAAKwB,cAAgB,KAEpE"}
1
+ {"version":3,"file":"toClientSafeUser.js","sources":["../../../src/server/clerk/toClientSafeUser.ts"],"sourcesContent":["\"use server\";\n\nimport type { User } from \"@clerk/nextjs/server\";\n\n/**\n * Client-safe representation of a Clerk User.\n *\n * This intentionally excludes any sensitive or server-only fields\n * (e.g. privateMetadata, externalAccounts with tokens, etc.)\n * and contains only JSON-serializable data that is safe to pass\n * from Server Components to Client Components.\n */\nexport type ClientSafeUser = {\n id: string;\n username: string | null;\n firstName: string | null;\n lastName: string | null;\n fullName: string | null;\n imageUrl: string;\n primaryEmailAddress: {\n id: string;\n emailAddress: string;\n verified: boolean;\n };\n emailAddresses: Array<{\n id: string;\n emailAddress: string;\n verified: boolean;\n }>;\n publicMetadata: CustomJwtSessionClaims[\"metadata\"];\n createdAt: Date | null;\n updatedAt: Date | null;\n lastSignInAt: Date | null;\n};\n\n/**\n * Converts a Clerk `User` (server-side) into a client-safe, serializable object.\n *\n * Why this exists:\n * - The Clerk `User` class contains methods and non-serializable fields.\n * - Passing it directly to a Client Component will break React Server Components.\n * - This function strips the object down to stable, safe primitives only.\n *\n * Rules enforced here:\n * - No functions\n * - No circular references\n * - No private or sensitive data\n *\n * @param user Clerk User instance from `@clerk/nextjs/server`\n * @returns ClientSafeUser plain object\n */\nexport async function toClientSafeUser(user: User): Promise<ClientSafeUser> {\n const pea = user.emailAddresses.find(\n (ea) => ea.id == user.primaryEmailAddressId,\n );\n if (!pea) throw new Error(\"Missing primaryEmailAddress\");\n return {\n id: user.id,\n username: user.username,\n firstName: user.firstName,\n lastName: user.lastName,\n fullName: user.fullName,\n imageUrl: user.imageUrl,\n primaryEmailAddress: {\n id: pea.id,\n emailAddress: pea.emailAddress,\n verified: pea.verification?.status === \"verified\",\n },\n emailAddresses: user.emailAddresses.map((email) => ({\n id: email.id,\n emailAddress: email.emailAddress,\n verified: email.verification?.status === \"verified\",\n })),\n publicMetadata: user.publicMetadata ?? {},\n createdAt: new Date(user.createdAt),\n updatedAt: new Date(user.updatedAt),\n lastSignInAt: user.lastSignInAt ? new Date(user.lastSignInAt) : null,\n };\n}\n"],"names":["async","toClientSafeUser","user","pea","emailAddresses","find","ea","id","primaryEmailAddressId","Error","username","firstName","lastName","fullName","imageUrl","primaryEmailAddress","emailAddress","verified","verification","status","map","email","publicMetadata","createdAt","Date","updatedAt","lastSignInAt"],"mappings":"aAmDOA,eAAeC,EAAiBC,GACrC,MAAMC,EAAMD,EAAKE,eAAeC,KAC7BC,GAAOA,EAAGC,IAAML,EAAKM,uBAExB,IAAKL,EAAK,MAAM,IAAIM,MAAM,+BAC1B,MAAO,CACLF,GAAIL,EAAKK,GACTG,SAAUR,EAAKQ,SACfC,UAAWT,EAAKS,UAChBC,SAAUV,EAAKU,SACfC,SAAUX,EAAKW,SACfC,SAAUZ,EAAKY,SACfC,oBAAqB,CACnBR,GAAIJ,EAAII,GACRS,aAAcb,EAAIa,aAClBC,SAAuC,aAA7Bd,EAAIe,cAAcC,QAE9Bf,eAAgBF,EAAKE,eAAegB,IAAKC,IAAK,CAC5Cd,GAAIc,EAAMd,GACVS,aAAcK,EAAML,aACpBC,SAAyC,aAA/BI,EAAMH,cAAcC,UAEhCG,eAAgBpB,EAAKoB,gBAAkB,CAAA,EACvCC,UAAW,IAAIC,KAAKtB,EAAKqB,WACzBE,UAAW,IAAID,KAAKtB,EAAKuB,WACzBC,aAAcxB,EAAKwB,aAAe,IAAIF,KAAKtB,EAAKwB,cAAgB,KAEpE"}
@@ -1,5 +1 @@
1
- export * from "./clerk/actions/_index";
2
- export * from "./clerk/schemas/_index";
3
- export * from "./clerk/auth";
4
- export * from "./clerk/hasPermission";
5
- export * from "./clerk/toClientSafeUser";
1
+ export * from "./clerk/_index";
@@ -1,2 +1,2 @@
1
- export{invitationCreateAction,invitationDeleteAction,invitationListReadAction}from"./clerk/actions/invitations.js";export{systemUserDetailsUpdateAction,systemUserListReadAction,systemUserReadAction,systemUserRoleUpdateAction}from"./clerk/actions/systemUsers.js";export{createInvitationSchema}from"./clerk/schemas/invitation.js";export{auth}from"./clerk/auth.js";export{hasPermission,hasPermissionForClaims}from"./clerk/hasPermission.js";export{toClientSafeUser}from"./clerk/toClientSafeUser.js";
1
+ export{invitationCreateAction,invitationDeleteAction,invitationListReadAction}from"./clerk/actions/invitations.js";export{systemUserBanAction,systemUserDeleteAction,systemUserDetailsUpdateAction,systemUserListReadAction,systemUserProfileImageDeleteAction,systemUserReadAction,systemUserRoleUpdateAction,systemUserUnbanAction}from"./clerk/actions/systemUsers.js";export{auth}from"./clerk/auth.js";export{hasPermission,hasPermissionForClaims}from"./clerk/hasPermission.js";export{createInvitationSchema}from"./clerk/schemas/invitation.js";export{toClientSafeUser}from"./clerk/toClientSafeUser.js";
2
2
  //# sourceMappingURL=index.js.map