@mesob/auth-react 0.4.6 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-WQ3UUUKF.js → chunk-2PV7RYNK.js} +12 -4
- package/dist/chunk-2PV7RYNK.js.map +1 -0
- package/dist/{chunk-TB2ZPGLW.js → chunk-4X3CJHKR.js} +2 -2
- package/dist/{chunk-PG65ZD7A.js → chunk-5BFG47VF.js} +4 -4
- package/dist/{chunk-OQUUS5ZX.js → chunk-5E3XN6SW.js} +2 -2
- package/dist/{chunk-KOBZ34XU.js → chunk-6THPM5LB.js} +7 -1
- package/dist/chunk-6THPM5LB.js.map +1 -0
- package/dist/{chunk-RBXITSE2.js → chunk-73ZNGEWU.js} +5 -5
- package/dist/{chunk-DY3NVBLJ.js → chunk-7CLKBH5Z.js} +10 -1
- package/dist/chunk-7CLKBH5Z.js.map +1 -0
- package/dist/{chunk-FPYQ7XGV.js → chunk-ECF6S2Y2.js} +90 -20
- package/dist/chunk-ECF6S2Y2.js.map +1 -0
- package/dist/{chunk-G74DDR4O.js → chunk-GBDNBY6K.js} +2 -2
- package/dist/{chunk-LHZ4EEN6.js → chunk-H5PUZDNU.js} +7 -1
- package/dist/chunk-H5PUZDNU.js.map +1 -0
- package/dist/{chunk-A3GIMM2R.js → chunk-H7JRQFFI.js} +2 -2
- package/dist/{chunk-IFAVSKHE.js → chunk-IQNQGPIT.js} +7 -1
- package/dist/chunk-IQNQGPIT.js.map +1 -0
- package/dist/chunk-MWMSZVH3.js +601 -0
- package/dist/chunk-MWMSZVH3.js.map +1 -0
- package/dist/{chunk-L32Z3TPA.js → chunk-N4JFMKGK.js} +67 -12
- package/dist/chunk-N4JFMKGK.js.map +1 -0
- package/dist/{chunk-A7ORWWM5.js → chunk-NFGFJPCX.js} +9 -1
- package/dist/chunk-NFGFJPCX.js.map +1 -0
- package/dist/{chunk-SW7WD64K.js → chunk-NJMNRSJH.js} +7 -1
- package/dist/chunk-NJMNRSJH.js.map +1 -0
- package/dist/{chunk-HXHI4FU6.js → chunk-OXUOGOG3.js} +111 -91
- package/dist/chunk-OXUOGOG3.js.map +1 -0
- package/dist/{chunk-ETOCBXDT.js → chunk-QPEUVMSP.js} +9 -1
- package/dist/chunk-QPEUVMSP.js.map +1 -0
- package/dist/{chunk-YN7OEQI7.js → chunk-RCQTWNAG.js} +7 -1
- package/dist/chunk-RCQTWNAG.js.map +1 -0
- package/dist/{chunk-55BMNC4S.js → chunk-RRLFPSSM.js} +25 -11
- package/dist/chunk-RRLFPSSM.js.map +1 -0
- package/dist/{chunk-NUWAI3FE.js → chunk-SGUROG23.js} +8 -2
- package/dist/chunk-SGUROG23.js.map +1 -0
- package/dist/{chunk-SXVTYYUT.js → chunk-T34HJRUW.js} +7 -1
- package/dist/chunk-T34HJRUW.js.map +1 -0
- package/dist/{chunk-UAKGEJUN.js → chunk-TEHMLZFI.js} +2 -2
- package/dist/chunk-V6ZHX4LT.js +15 -0
- package/dist/chunk-V6ZHX4LT.js.map +1 -0
- package/dist/{chunk-CXMPZWMX.js → chunk-VVKXFEAN.js} +2 -2
- package/dist/{chunk-ZXKEG3X5.js → chunk-X6EUQZSZ.js} +10 -1
- package/dist/chunk-X6EUQZSZ.js.map +1 -0
- package/dist/components/auth/forgot-password.js +2 -2
- package/dist/components/auth/reset-password-form.js +2 -2
- package/dist/components/auth/set-password.js +2 -2
- package/dist/components/auth/sign-in.js +2 -2
- package/dist/components/auth/sign-up.js +2 -2
- package/dist/components/auth/verify-email.js +2 -2
- package/dist/components/auth/verify-phone.js +2 -2
- package/dist/components/iam/domains-page.d.ts +1 -0
- package/dist/components/iam/domains-page.js +14 -0
- package/dist/components/iam/domains-page.js.map +1 -0
- package/dist/components/iam/iam-guard.d.ts +7 -0
- package/dist/components/iam/iam-guard.js +10 -0
- package/dist/components/iam/iam-guard.js.map +1 -0
- package/dist/components/iam/permissions-page.js +3 -1
- package/dist/components/iam/role-detail-page.d.ts +1 -1
- package/dist/components/iam/role-detail-page.js +3 -1
- package/dist/components/iam/role-permissions-page.d.ts +1 -1
- package/dist/components/iam/role-permissions-page.js +3 -1
- package/dist/components/iam/roles-page.js +3 -1
- package/dist/components/iam/sessions-page.js +3 -1
- package/dist/components/iam/tenants-page.js +3 -1
- package/dist/components/iam/users-page.js +4 -2
- package/dist/components/profile/change-email-form.js +2 -2
- package/dist/components/profile/change-phone-form.js +1 -1
- package/dist/components/profile/security.js +6 -6
- package/dist/index.d.ts +2 -0
- package/dist/index.js +60 -52
- package/dist/index.js.map +1 -1
- package/dist/pages/auth/forgot-password.js +2 -2
- package/dist/pages/auth/reset-password.js +2 -2
- package/dist/pages/auth/set-password.js +2 -2
- package/dist/pages/auth/sign-in.js +2 -2
- package/dist/pages/auth/sign-up.js +2 -2
- package/dist/pages/auth/verify-email.js +2 -2
- package/dist/pages/auth/verify-phone.js +2 -2
- package/dist/pages/iam/domains/_components/domain-card.d.ts +6 -0
- package/dist/pages/iam/domains/_components/domain-form.d.ts +9 -0
- package/dist/pages/iam/domains/_components/domains-data.d.ts +10 -0
- package/dist/pages/iam/domains/_components/domains-list.d.ts +15 -0
- package/dist/pages/iam/domains.d.ts +1 -0
- package/dist/pages/iam/permissions.js +3 -1
- package/dist/pages/iam/role-detail.js +3 -1
- package/dist/pages/iam/role-detail.js.map +1 -1
- package/dist/pages/iam/role-permissions.js +3 -1
- package/dist/pages/iam/role-permissions.js.map +1 -1
- package/dist/pages/iam/role-users.js +5 -3
- package/dist/pages/iam/role-users.js.map +1 -1
- package/dist/pages/iam/roles/users/_components/role-users-page.d.ts +1 -1
- package/dist/pages/iam/roles.js +3 -1
- package/dist/pages/iam/sessions.js +3 -1
- package/dist/pages/iam/tenant-detail.js +3 -1
- package/dist/pages/iam/tenant-detail.js.map +1 -1
- package/dist/pages/iam/tenants/tenant-detail-page-content.d.ts +1 -1
- package/dist/pages/iam/tenants.js +3 -1
- package/dist/pages/iam/user-activity.js +3 -1
- package/dist/pages/iam/user-activity.js.map +1 -1
- package/dist/pages/iam/user-detail-layout.js +3 -1
- package/dist/pages/iam/user-detail-layout.js.map +1 -1
- package/dist/pages/iam/user-detail.js +3 -1
- package/dist/pages/iam/user-detail.js.map +1 -1
- package/dist/pages/iam/users/_components/user-detail-layout-content.d.ts +1 -1
- package/dist/pages/iam/users/_components/user-detail-page-content.d.ts +1 -1
- package/dist/pages/iam/users/activity/user-activity-page-content.d.ts +1 -1
- package/dist/pages/iam/users/user-selector.js +2 -2
- package/dist/pages/iam/users.js +4 -2
- package/dist/pages/profile/security.js +6 -6
- package/dist/utils/handle-error.d.ts +4 -1
- package/package.json +4 -4
- package/dist/chunk-55BMNC4S.js.map +0 -1
- package/dist/chunk-A7ORWWM5.js.map +0 -1
- package/dist/chunk-DY3NVBLJ.js.map +0 -1
- package/dist/chunk-ETOCBXDT.js.map +0 -1
- package/dist/chunk-FPYQ7XGV.js.map +0 -1
- package/dist/chunk-HXHI4FU6.js.map +0 -1
- package/dist/chunk-IFAVSKHE.js.map +0 -1
- package/dist/chunk-KOBZ34XU.js.map +0 -1
- package/dist/chunk-L32Z3TPA.js.map +0 -1
- package/dist/chunk-LHZ4EEN6.js.map +0 -1
- package/dist/chunk-NUWAI3FE.js.map +0 -1
- package/dist/chunk-SW7WD64K.js.map +0 -1
- package/dist/chunk-SXVTYYUT.js.map +0 -1
- package/dist/chunk-WQ3UUUKF.js.map +0 -1
- package/dist/chunk-YN7OEQI7.js.map +0 -1
- package/dist/chunk-ZXKEG3X5.js.map +0 -1
- /package/dist/{chunk-TB2ZPGLW.js.map → chunk-4X3CJHKR.js.map} +0 -0
- /package/dist/{chunk-PG65ZD7A.js.map → chunk-5BFG47VF.js.map} +0 -0
- /package/dist/{chunk-OQUUS5ZX.js.map → chunk-5E3XN6SW.js.map} +0 -0
- /package/dist/{chunk-RBXITSE2.js.map → chunk-73ZNGEWU.js.map} +0 -0
- /package/dist/{chunk-G74DDR4O.js.map → chunk-GBDNBY6K.js.map} +0 -0
- /package/dist/{chunk-A3GIMM2R.js.map → chunk-H7JRQFFI.js.map} +0 -0
- /package/dist/{chunk-UAKGEJUN.js.map → chunk-TEHMLZFI.js.map} +0 -0
- /package/dist/{chunk-CXMPZWMX.js.map → chunk-VVKXFEAN.js.map} +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SetPassword
|
|
3
|
-
} from "../../chunk-
|
|
3
|
+
} from "../../chunk-TEHMLZFI.js";
|
|
4
4
|
import "../../chunk-V2W3WPCZ.js";
|
|
5
|
-
import "../../chunk-
|
|
5
|
+
import "../../chunk-RRLFPSSM.js";
|
|
6
6
|
import "../../chunk-DPH2PHK3.js";
|
|
7
7
|
import "../../chunk-EPEXIGKB.js";
|
|
8
8
|
import "../../chunk-AWSAC7RT.js";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SignIn
|
|
3
|
-
} from "../../chunk-
|
|
3
|
+
} from "../../chunk-2PV7RYNK.js";
|
|
4
4
|
import "../../chunk-V2W3WPCZ.js";
|
|
5
|
-
import "../../chunk-
|
|
5
|
+
import "../../chunk-RRLFPSSM.js";
|
|
6
6
|
import "../../chunk-DPH2PHK3.js";
|
|
7
7
|
import "../../chunk-EPEXIGKB.js";
|
|
8
8
|
import "../../chunk-AWSAC7RT.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SignUp
|
|
3
|
-
} from "../../chunk-
|
|
4
|
-
import "../../chunk-
|
|
3
|
+
} from "../../chunk-OXUOGOG3.js";
|
|
4
|
+
import "../../chunk-RRLFPSSM.js";
|
|
5
5
|
import "../../chunk-DPH2PHK3.js";
|
|
6
6
|
import "../../chunk-EPEXIGKB.js";
|
|
7
7
|
import "../../chunk-AWSAC7RT.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
VerifyEmail
|
|
3
|
-
} from "../../chunk-
|
|
3
|
+
} from "../../chunk-VVKXFEAN.js";
|
|
4
4
|
import "../../chunk-Z34NJZRL.js";
|
|
5
5
|
import "../../chunk-RMJNENJB.js";
|
|
6
|
-
import "../../chunk-
|
|
6
|
+
import "../../chunk-RRLFPSSM.js";
|
|
7
7
|
import "../../chunk-DPH2PHK3.js";
|
|
8
8
|
import "../../chunk-EPEXIGKB.js";
|
|
9
9
|
import "../../chunk-AWSAC7RT.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
VerifyPhone
|
|
3
|
-
} from "../../chunk-
|
|
3
|
+
} from "../../chunk-5E3XN6SW.js";
|
|
4
4
|
import "../../chunk-Z34NJZRL.js";
|
|
5
5
|
import "../../chunk-RMJNENJB.js";
|
|
6
|
-
import "../../chunk-
|
|
6
|
+
import "../../chunk-RRLFPSSM.js";
|
|
7
7
|
import "../../chunk-DPH2PHK3.js";
|
|
8
8
|
import "../../chunk-EPEXIGKB.js";
|
|
9
9
|
import "../../chunk-AWSAC7RT.js";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type DomainFormProps = {
|
|
2
|
+
mode: 'new' | 'edit';
|
|
3
|
+
domainId?: string;
|
|
4
|
+
open: boolean;
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
onSuccess?: () => void;
|
|
7
|
+
};
|
|
8
|
+
export declare function DomainForm({ mode, domainId, open, onClose, onSuccess, }: DomainFormProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Domain } from './domains-data';
|
|
2
|
+
type DomainsListProps = {
|
|
3
|
+
data: Domain[];
|
|
4
|
+
isLoading?: boolean;
|
|
5
|
+
view: 'table' | 'card';
|
|
6
|
+
pageIndex: number;
|
|
7
|
+
pageSize: number;
|
|
8
|
+
pageCount: number;
|
|
9
|
+
totalRows: number;
|
|
10
|
+
onPageChange: (page: number) => void;
|
|
11
|
+
onPageSizeChange: (size: number) => void;
|
|
12
|
+
onCreateNew?: () => void;
|
|
13
|
+
};
|
|
14
|
+
export declare function DomainsList({ data, isLoading, view, pageIndex, pageSize, pageCount, totalRows, onPageChange, onPageSizeChange, onCreateNew, }: DomainsListProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DomainsPage as default } from '../../components/iam/domains-page';
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
PermissionsPage
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-T34HJRUW.js";
|
|
5
5
|
import "../../chunk-NPW7D2HZ.js";
|
|
6
|
+
import "../../chunk-V6ZHX4LT.js";
|
|
7
|
+
import "../../chunk-5SDS2E3F.js";
|
|
6
8
|
import "../../chunk-AWSAC7RT.js";
|
|
7
9
|
export {
|
|
8
10
|
PermissionsPage as default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/pages/iam/role-detail.tsx"],"sourcesContent":["import type { Metadata } from 'next';\nimport { RoleDetailPage } from '../../components/iam/role-detail-page';\n\ntype RoleDetailPageProps = {\n params: Promise<{ id: string }>;\n};\n\nexport const metadata: Metadata = {\n title: 'Role Detail',\n description: 'Manage role details.',\n};\n\nexport default async function RoleDetailRoutePage({\n params,\n}: RoleDetailPageProps) {\n const { id } = await params;\n\n return <RoleDetailPage roleId={id} basePath=\"/iam/roles\" />;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/pages/iam/role-detail.tsx"],"sourcesContent":["import type { Metadata } from 'next';\nimport { RoleDetailPage } from '../../components/iam/role-detail-page';\n\ntype RoleDetailPageProps = {\n params: Promise<{ id: string }>;\n};\n\nexport const metadata: Metadata = {\n title: 'Role Detail',\n description: 'Manage role details.',\n};\n\nexport default async function RoleDetailRoutePage({\n params,\n}: RoleDetailPageProps) {\n const { id } = await params;\n\n return <RoleDetailPage roleId={id} basePath=\"/iam/roles\" />;\n}\n"],"mappings":";;;;;;;;AAiBS;AAVF,IAAM,WAAqB;AAAA,EAChC,OAAO;AAAA,EACP,aAAa;AACf;AAEA,eAAO,oBAA2C;AAAA,EAChD;AACF,GAAwB;AACtB,QAAM,EAAE,GAAG,IAAI,MAAM;AAErB,SAAO,oBAAC,kBAAe,QAAQ,IAAI,UAAS,cAAa;AAC3D;","names":[]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
RolePermissionsPage
|
|
3
|
-
} from "../../chunk-
|
|
3
|
+
} from "../../chunk-IQNQGPIT.js";
|
|
4
4
|
import "../../chunk-GVEBIL3O.js";
|
|
5
|
+
import "../../chunk-V6ZHX4LT.js";
|
|
6
|
+
import "../../chunk-5SDS2E3F.js";
|
|
5
7
|
import "../../chunk-AWSAC7RT.js";
|
|
6
8
|
|
|
7
9
|
// src/pages/iam/role-permissions.tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/pages/iam/role-permissions.tsx"],"sourcesContent":["import type { Metadata } from 'next';\nimport { RolePermissionsPage } from '../../components/iam/role-permissions-page';\n\ntype RolePermissionsPageProps = {\n params: Promise<{ id: string }>;\n};\n\nexport const metadata: Metadata = {\n title: 'Role Permissions',\n description: 'Manage permissions assigned to a role.',\n};\n\nexport default async function RolePermissionsRoutePage({\n params,\n}: RolePermissionsPageProps) {\n const { id } = await params;\n\n return <RolePermissionsPage roleId={id} />;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/pages/iam/role-permissions.tsx"],"sourcesContent":["import type { Metadata } from 'next';\nimport { RolePermissionsPage } from '../../components/iam/role-permissions-page';\n\ntype RolePermissionsPageProps = {\n params: Promise<{ id: string }>;\n};\n\nexport const metadata: Metadata = {\n title: 'Role Permissions',\n description: 'Manage permissions assigned to a role.',\n};\n\nexport default async function RolePermissionsRoutePage({\n params,\n}: RolePermissionsPageProps) {\n const { id } = await params;\n\n return <RolePermissionsPage roleId={id} />;\n}\n"],"mappings":";;;;;;;;;AAiBS;AAVF,IAAM,WAAqB;AAAA,EAChC,OAAO;AAAA,EACP,aAAa;AACf;AAEA,eAAO,yBAAgD;AAAA,EACrD;AACF,GAA6B;AAC3B,QAAM,EAAE,GAAG,IAAI,MAAM;AAErB,SAAO,oBAAC,uBAAoB,QAAQ,IAAI;AAC1C;","names":[]}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
RoleUsersPage
|
|
3
|
-
} from "../../chunk-
|
|
4
|
-
import "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
3
|
+
} from "../../chunk-SGUROG23.js";
|
|
4
|
+
import "../../chunk-GBDNBY6K.js";
|
|
5
|
+
import "../../chunk-ECF6S2Y2.js";
|
|
6
6
|
import "../../chunk-OW75JENQ.js";
|
|
7
7
|
import "../../chunk-W3D4HG5W.js";
|
|
8
8
|
import "../../chunk-WY2JJNZW.js";
|
|
9
9
|
import "../../chunk-NPW7D2HZ.js";
|
|
10
|
+
import "../../chunk-V6ZHX4LT.js";
|
|
11
|
+
import "../../chunk-5SDS2E3F.js";
|
|
10
12
|
import "../../chunk-AWSAC7RT.js";
|
|
11
13
|
|
|
12
14
|
// src/pages/iam/role-users.tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/pages/iam/role-users.tsx"],"sourcesContent":["import type { Metadata } from 'next';\nimport { RoleUsersPage } from './roles/users/_components/role-users-page';\n\ntype RoleUsersPageProps = {\n params: Promise<{ id: string }>;\n};\n\nexport const metadata: Metadata = {\n title: 'Role Users',\n description: 'Manage users assigned to a role.',\n};\n\nexport default async function RoleUsersRoutePage({\n params,\n}: RoleUsersPageProps) {\n const { id } = await params;\n\n return <RoleUsersPage roleId={id} />;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/pages/iam/role-users.tsx"],"sourcesContent":["import type { Metadata } from 'next';\nimport { RoleUsersPage } from './roles/users/_components/role-users-page';\n\ntype RoleUsersPageProps = {\n params: Promise<{ id: string }>;\n};\n\nexport const metadata: Metadata = {\n title: 'Role Users',\n description: 'Manage users assigned to a role.',\n};\n\nexport default async function RoleUsersRoutePage({\n params,\n}: RoleUsersPageProps) {\n const { id } = await params;\n\n return <RoleUsersPage roleId={id} />;\n}\n"],"mappings":";;;;;;;;;;;;;;AAiBS;AAVF,IAAM,WAAqB;AAAA,EAChC,OAAO;AAAA,EACP,aAAa;AACf;AAEA,eAAO,mBAA0C;AAAA,EAC/C;AACF,GAAuB;AACrB,QAAM,EAAE,GAAG,IAAI,MAAM;AAErB,SAAO,oBAAC,iBAAc,QAAQ,IAAI;AACpC;","names":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
type RoleUsersPageProps = {
|
|
2
2
|
roleId: string;
|
|
3
3
|
};
|
|
4
|
-
export declare function RoleUsersPage({ roleId }: RoleUsersPageProps): import("react/jsx-runtime").JSX.Element
|
|
4
|
+
export declare function RoleUsersPage({ roleId }: RoleUsersPageProps): import("react/jsx-runtime").JSX.Element;
|
|
5
5
|
export {};
|
package/dist/pages/iam/roles.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
RolesPage
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-RCQTWNAG.js";
|
|
5
5
|
import "../../chunk-MQI6Q2S4.js";
|
|
6
6
|
import "../../chunk-OW75JENQ.js";
|
|
7
7
|
import "../../chunk-W3D4HG5W.js";
|
|
8
8
|
import "../../chunk-WY2JJNZW.js";
|
|
9
9
|
import "../../chunk-NPW7D2HZ.js";
|
|
10
|
+
import "../../chunk-V6ZHX4LT.js";
|
|
11
|
+
import "../../chunk-5SDS2E3F.js";
|
|
10
12
|
import "../../chunk-AWSAC7RT.js";
|
|
11
13
|
export {
|
|
12
14
|
RolesPage as default
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
SessionsPage
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-H5PUZDNU.js";
|
|
5
5
|
import "../../chunk-W3D4HG5W.js";
|
|
6
6
|
import "../../chunk-WY2JJNZW.js";
|
|
7
7
|
import "../../chunk-NPW7D2HZ.js";
|
|
8
|
+
import "../../chunk-V6ZHX4LT.js";
|
|
9
|
+
import "../../chunk-5SDS2E3F.js";
|
|
8
10
|
import "../../chunk-AWSAC7RT.js";
|
|
9
11
|
export {
|
|
10
12
|
SessionsPage as default
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TenantDetailPageContent
|
|
3
|
-
} from "../../chunk-
|
|
3
|
+
} from "../../chunk-QPEUVMSP.js";
|
|
4
4
|
import "../../chunk-EWXK56WQ.js";
|
|
5
|
+
import "../../chunk-V6ZHX4LT.js";
|
|
6
|
+
import "../../chunk-5SDS2E3F.js";
|
|
5
7
|
import "../../chunk-AWSAC7RT.js";
|
|
6
8
|
|
|
7
9
|
// src/pages/iam/tenant-detail.tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/pages/iam/tenant-detail.tsx"],"sourcesContent":["import { TenantDetailPageContent } from './tenants/tenant-detail-page-content';\n\ntype TenantDetailPageProps = {\n params: Promise<{ id: string }>;\n};\n\nexport default async function TenantDetailPage({\n params,\n}: TenantDetailPageProps) {\n const { id } = await params;\n\n return <TenantDetailPageContent tenantId={id} />;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/pages/iam/tenant-detail.tsx"],"sourcesContent":["import { TenantDetailPageContent } from './tenants/tenant-detail-page-content';\n\ntype TenantDetailPageProps = {\n params: Promise<{ id: string }>;\n};\n\nexport default async function TenantDetailPage({\n params,\n}: TenantDetailPageProps) {\n const { id } = await params;\n\n return <TenantDetailPageContent tenantId={id} />;\n}\n"],"mappings":";;;;;;;;;AAWS;AALT,eAAO,iBAAwC;AAAA,EAC7C;AACF,GAA0B;AACxB,QAAM,EAAE,GAAG,IAAI,MAAM;AAErB,SAAO,oBAAC,2BAAwB,UAAU,IAAI;AAChD;","names":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
type TenantDetailPageContentProps = {
|
|
2
2
|
tenantId: string;
|
|
3
3
|
};
|
|
4
|
-
export declare function TenantDetailPageContent({ tenantId, }: TenantDetailPageContentProps): import("react/jsx-runtime").JSX.Element
|
|
4
|
+
export declare function TenantDetailPageContent({ tenantId, }: TenantDetailPageContentProps): import("react/jsx-runtime").JSX.Element;
|
|
5
5
|
export {};
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
TenantsPage
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-6THPM5LB.js";
|
|
5
5
|
import "../../chunk-EWXK56WQ.js";
|
|
6
6
|
import "../../chunk-W3D4HG5W.js";
|
|
7
7
|
import "../../chunk-WY2JJNZW.js";
|
|
8
8
|
import "../../chunk-NPW7D2HZ.js";
|
|
9
|
+
import "../../chunk-V6ZHX4LT.js";
|
|
10
|
+
import "../../chunk-5SDS2E3F.js";
|
|
9
11
|
import "../../chunk-AWSAC7RT.js";
|
|
10
12
|
export {
|
|
11
13
|
TenantsPage as default
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
UserActivityPageContent
|
|
3
|
-
} from "../../chunk-
|
|
3
|
+
} from "../../chunk-NFGFJPCX.js";
|
|
4
4
|
import "../../chunk-MQI6Q2S4.js";
|
|
5
5
|
import "../../chunk-OW75JENQ.js";
|
|
6
6
|
import "../../chunk-W3D4HG5W.js";
|
|
7
7
|
import "../../chunk-WY2JJNZW.js";
|
|
8
8
|
import "../../chunk-NPW7D2HZ.js";
|
|
9
|
+
import "../../chunk-V6ZHX4LT.js";
|
|
10
|
+
import "../../chunk-5SDS2E3F.js";
|
|
9
11
|
import "../../chunk-AWSAC7RT.js";
|
|
10
12
|
|
|
11
13
|
// src/pages/iam/user-activity.tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/pages/iam/user-activity.tsx"],"sourcesContent":["import { UserActivityPageContent } from './users/activity/user-activity-page-content';\n\ntype UserActivityPageProps = {\n params: Promise<{ id: string }>;\n};\n\nexport default async function UserActivityPage({\n params,\n}: UserActivityPageProps) {\n const { id } = await params;\n\n return <UserActivityPageContent userId={id} />;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/pages/iam/user-activity.tsx"],"sourcesContent":["import { UserActivityPageContent } from './users/activity/user-activity-page-content';\n\ntype UserActivityPageProps = {\n params: Promise<{ id: string }>;\n};\n\nexport default async function UserActivityPage({\n params,\n}: UserActivityPageProps) {\n const { id } = await params;\n\n return <UserActivityPageContent userId={id} />;\n}\n"],"mappings":";;;;;;;;;;;;;AAWS;AALT,eAAO,iBAAwC;AAAA,EAC7C;AACF,GAA0B;AACxB,QAAM,EAAE,GAAG,IAAI,MAAM;AAErB,SAAO,oBAAC,2BAAwB,QAAQ,IAAI;AAC9C;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/pages/iam/user-detail-layout.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { UserDetailLayoutContent } from './users/_components/user-detail-layout-content';\n\ntype UserDetailLayoutPageProps = {\n children: ReactNode;\n params: Promise<{ id: string }>;\n};\n\nexport default async function UserDetailLayoutPage({\n children,\n params,\n}: UserDetailLayoutPageProps) {\n const { id } = await params;\n\n return (\n <UserDetailLayoutContent userId={id}>{children}</UserDetailLayoutContent>\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/pages/iam/user-detail-layout.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { UserDetailLayoutContent } from './users/_components/user-detail-layout-content';\n\ntype UserDetailLayoutPageProps = {\n children: ReactNode;\n params: Promise<{ id: string }>;\n};\n\nexport default async function UserDetailLayoutPage({\n children,\n params,\n}: UserDetailLayoutPageProps) {\n const { id } = await params;\n\n return (\n <UserDetailLayoutContent userId={id}>{children}</UserDetailLayoutContent>\n );\n}\n"],"mappings":";;;;;;;;AAeI;AAPJ,eAAO,qBAA4C;AAAA,EACjD;AAAA,EACA;AACF,GAA8B;AAC5B,QAAM,EAAE,GAAG,IAAI,MAAM;AAErB,SACE,oBAAC,2BAAwB,QAAQ,IAAK,UAAS;AAEnD;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/pages/iam/user-detail.tsx"],"sourcesContent":["import { UserDetailPageContent } from './users/_components/user-detail-page-content';\n\ntype UserDetailPageProps = {\n params: Promise<{ id: string }>;\n};\n\nexport default async function UserDetailPage({ params }: UserDetailPageProps) {\n const { id } = await params;\n\n return <UserDetailPageContent userId={id} />;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/pages/iam/user-detail.tsx"],"sourcesContent":["import { UserDetailPageContent } from './users/_components/user-detail-page-content';\n\ntype UserDetailPageProps = {\n params: Promise<{ id: string }>;\n};\n\nexport default async function UserDetailPage({ params }: UserDetailPageProps) {\n const { id } = await params;\n\n return <UserDetailPageContent userId={id} />;\n}\n"],"mappings":";;;;;;;;AASS;AAHT,eAAO,eAAsC,EAAE,OAAO,GAAwB;AAC5E,QAAM,EAAE,GAAG,IAAI,MAAM;AAErB,SAAO,oBAAC,yBAAsB,QAAQ,IAAI;AAC5C;","names":[]}
|
|
@@ -2,5 +2,5 @@ type UserDetailLayoutContentProps = {
|
|
|
2
2
|
userId: string;
|
|
3
3
|
children: React.ReactNode;
|
|
4
4
|
};
|
|
5
|
-
export declare function UserDetailLayoutContent({ userId, children, }: UserDetailLayoutContentProps): import("react/jsx-runtime").JSX.Element
|
|
5
|
+
export declare function UserDetailLayoutContent({ userId, children, }: UserDetailLayoutContentProps): import("react/jsx-runtime").JSX.Element;
|
|
6
6
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
type UserDetailPageContentProps = {
|
|
2
2
|
userId: string;
|
|
3
3
|
};
|
|
4
|
-
export declare function UserDetailPageContent({ userId }: UserDetailPageContentProps): import("react/jsx-runtime").JSX.Element
|
|
4
|
+
export declare function UserDetailPageContent({ userId }: UserDetailPageContentProps): import("react/jsx-runtime").JSX.Element;
|
|
5
5
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
type UserActivityPageContentProps = {
|
|
2
2
|
userId: string;
|
|
3
3
|
};
|
|
4
|
-
export declare function UserActivityPageContent({ userId, }: UserActivityPageContentProps): import("react/jsx-runtime").JSX.Element
|
|
4
|
+
export declare function UserActivityPageContent({ userId, }: UserActivityPageContentProps): import("react/jsx-runtime").JSX.Element;
|
|
5
5
|
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
UserSelector
|
|
4
|
-
} from "../../../chunk-
|
|
5
|
-
import "../../../chunk-
|
|
4
|
+
} from "../../../chunk-GBDNBY6K.js";
|
|
5
|
+
import "../../../chunk-ECF6S2Y2.js";
|
|
6
6
|
import "../../../chunk-OW75JENQ.js";
|
|
7
7
|
import "../../../chunk-W3D4HG5W.js";
|
|
8
8
|
import "../../../chunk-WY2JJNZW.js";
|
package/dist/pages/iam/users.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
UsersPage
|
|
4
|
-
} from "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
4
|
+
} from "../../chunk-N4JFMKGK.js";
|
|
5
|
+
import "../../chunk-ECF6S2Y2.js";
|
|
6
6
|
import "../../chunk-OW75JENQ.js";
|
|
7
7
|
import "../../chunk-W3D4HG5W.js";
|
|
8
8
|
import "../../chunk-WY2JJNZW.js";
|
|
9
9
|
import "../../chunk-NPW7D2HZ.js";
|
|
10
|
+
import "../../chunk-V6ZHX4LT.js";
|
|
11
|
+
import "../../chunk-5SDS2E3F.js";
|
|
10
12
|
import "../../chunk-AWSAC7RT.js";
|
|
11
13
|
export {
|
|
12
14
|
UsersPage as default
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
Security
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-73ZNGEWU.js";
|
|
5
|
+
import "../../chunk-5BFG47VF.js";
|
|
6
|
+
import "../../chunk-5AEV7RAN.js";
|
|
7
|
+
import "../../chunk-ZZ6D4KE4.js";
|
|
5
8
|
import "../../chunk-TLQMK2QF.js";
|
|
6
9
|
import "../../chunk-6IEX2RLA.js";
|
|
7
|
-
import "../../chunk-DG6GRTPG.js";
|
|
8
|
-
import "../../chunk-PG65ZD7A.js";
|
|
9
|
-
import "../../chunk-X2BHF4KC.js";
|
|
10
|
-
import "../../chunk-5AEV7RAN.js";
|
|
11
10
|
import "../../chunk-UGQP733V.js";
|
|
12
|
-
import "../../chunk-
|
|
11
|
+
import "../../chunk-X2BHF4KC.js";
|
|
12
|
+
import "../../chunk-DG6GRTPG.js";
|
|
13
13
|
import "../../chunk-Z34NJZRL.js";
|
|
14
14
|
import "../../chunk-RMJNENJB.js";
|
|
15
15
|
import "../../chunk-V2W3WPCZ.js";
|
|
@@ -3,5 +3,8 @@ export type AuthErrorContent = {
|
|
|
3
3
|
description: string;
|
|
4
4
|
};
|
|
5
5
|
type TranslatorFunction = (key: string, params?: Record<string, string | number>) => string;
|
|
6
|
-
export
|
|
6
|
+
export type HandleErrorOptions = {
|
|
7
|
+
signIn?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare const handleError: (err: unknown, setError: (error: AuthErrorContent | null) => void, t: TranslatorFunction, options?: HandleErrorOptions) => void;
|
|
7
10
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mesob/auth-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -132,8 +132,8 @@
|
|
|
132
132
|
],
|
|
133
133
|
"dependencies": {
|
|
134
134
|
"@hookform/resolvers": "^5.2.2",
|
|
135
|
-
"@mesob/common": "^0.
|
|
136
|
-
"@mesob/ui": "^0.
|
|
135
|
+
"@mesob/common": "^0.5.0",
|
|
136
|
+
"@mesob/ui": "^0.5.0",
|
|
137
137
|
"@tabler/icons-react": "^3.35.0",
|
|
138
138
|
"deepmerge-ts": "^7.1.5",
|
|
139
139
|
"nuqs": "^2.8.1",
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
"openapi-react-query": "^0.5.1",
|
|
142
142
|
"react-hook-form": "^7.66.1",
|
|
143
143
|
"sonner": "^2.0.7",
|
|
144
|
-
"zod": "^4.
|
|
144
|
+
"zod": "^4.3.6"
|
|
145
145
|
},
|
|
146
146
|
"devDependencies": {
|
|
147
147
|
"@types/react": "^19",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants/auth.error.codes.ts","../src/utils/handle-error.ts"],"sourcesContent":["export const AUTH_ERROR_MAPPING: Record<\n string,\n { title: string; description: string }\n> = {\n USER_NOT_FOUND: {\n title: 'Account Not Found',\n description:\n 'We could not find an account with that identifier. Please check your spelling or sign up.',\n },\n INVALID_PASSWORD: {\n title: 'Invalid Password',\n description: 'The password you entered is incorrect. Please try again.',\n },\n USER_EXISTS: {\n title: 'Account Already Exists',\n description:\n 'An account with this identifier already exists. Please sign in instead.',\n },\n VERIFICATION_EXPIRED: {\n title: 'Verification Expired',\n description:\n 'The verification code or link has expired. Please request a new one.',\n },\n VERIFICATION_MISMATCH: {\n title: 'Invalid Code',\n description:\n 'The verification code you entered is invalid. Please double-check and try again.',\n },\n VERIFICATION_NOT_FOUND: {\n title: 'Verification Not Found',\n description:\n 'We could not find a pending verification request. Please restart the process.',\n },\n TOO_MANY_ATTEMPTS: {\n title: 'Too Many Attempts',\n description:\n 'You have made too many requests recently. Please wait a moment before trying again.',\n },\n REQUIRES_VERIFICATION: {\n title: 'Verification Required',\n description:\n 'You need to verify your account before you can continue. Please check your email or phone.',\n },\n UNAUTHORIZED: {\n title: 'Unauthorized',\n description:\n 'You are not authorized to perform this action. Please sign in again.',\n },\n ACCESS_DENIED: {\n title: 'Access Denied',\n description:\n 'You do not have permission to access this resource. Please contact support if you believe this is an error.',\n },\n HAS_NO_PASSWORD: {\n title: 'No Password Set',\n description:\n 'Your account does not have a password yet. Continue to set a password before signing in.',\n },\n PASSWORD_ALREADY_SET: {\n title: 'Password Already Set',\n description:\n 'This account already has a password. Use the normal sign-in form instead.',\n },\n};\n\nexport const validCodes = Object.keys(AUTH_ERROR_MAPPING);\n","import { AUTH_ERROR_MAPPING, validCodes } from '../constants/auth.error.codes';\nimport type { AuthError } from '../types';\n\nexport type AuthErrorContent = {\n title: string;\n description: string;\n};\n\ntype TranslatorFunction = (\n key: string,\n params?: Record<string, string | number>,\n) => string;\n\n// Type guard to check if error is an AuthError\nfunction isAuthError(err: unknown): err is AuthError {\n return (\n typeof err === 'object' &&\n err !== null &&\n 'message' in err &&\n typeof (err as { message: unknown }).message === 'string'\n );\n}\n\nfunction extractErrorCode(err: AuthError): string {\n if (err.code && validCodes.includes(err.code)) {\n return err.code;\n }\n if (err.message) {\n const messageUpper = err.message.toUpperCase().trim();\n if (validCodes.includes(messageUpper)) {\n return messageUpper;\n }\n }\n return '';\n}\n\nfunction sanitizeErrorMessage(message: string): string {\n const lowerMessage = message.toLowerCase();\n const isDatabaseError =\n lowerMessage.includes('failed query') ||\n lowerMessage.includes('select') ||\n lowerMessage.includes('insert') ||\n lowerMessage.includes('update') ||\n lowerMessage.includes('delete') ||\n lowerMessage.includes('from') ||\n lowerMessage.includes('where') ||\n lowerMessage.includes('limit') ||\n lowerMessage.includes('params:') ||\n lowerMessage.includes('query') ||\n message.includes('\"iam\".') ||\n message.includes('\"tenants\"') ||\n message.includes('\"users\"') ||\n message.includes('\"sessions\"') ||\n message.includes('\"accounts\"') ||\n lowerMessage.includes('relation') ||\n lowerMessage.includes('column') ||\n lowerMessage.includes('syntax error') ||\n lowerMessage.includes('database') ||\n lowerMessage.includes('postgres') ||\n lowerMessage.includes('sql');\n\n if (isDatabaseError) {\n return 'An error occurred while processing your request';\n }\n\n return message;\n}\n\nfunction handleAuthError(\n err: AuthError,\n setError: (error: AuthErrorContent | null) => void,\n t: TranslatorFunction,\n) {\n const errorCode = extractErrorCode(err);\n\n if (errorCode && AUTH_ERROR_MAPPING[errorCode]) {\n const mapping = AUTH_ERROR_MAPPING[errorCode];\n setError({\n title: mapping.title,\n description: mapping.description,\n });\n return;\n }\n\n const sanitizedMessage = sanitizeErrorMessage(\n err.message || t('errors.fallback'),\n );\n setError({\n title: t('errors.fallback'),\n description: sanitizedMessage,\n });\n}\n\nfunction handleGenericError(\n err: unknown,\n setError: (error: AuthErrorContent | null) => void,\n t: TranslatorFunction,\n) {\n const rawMessage = err instanceof Error ? err.message : t('errors.fallback');\n const sanitizedMessage = sanitizeErrorMessage(rawMessage);\n setError({\n title: 'Error',\n description: sanitizedMessage,\n });\n}\n\nexport const handleError = (\n err: unknown,\n setError: (error: AuthErrorContent | null) => void,\n t: TranslatorFunction,\n) => {\n if (isAuthError(err)) {\n handleAuthError(err, setError, t);\n } else {\n handleGenericError(err, setError, t);\n }\n};\n"],"mappings":";AAAO,IAAM,qBAGT;AAAA,EACF,gBAAgB;AAAA,IACd,OAAO;AAAA,IACP,aACE;AAAA,EACJ;AAAA,EACA,kBAAkB;AAAA,IAChB,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,IACP,aACE;AAAA,EACJ;AAAA,EACA,sBAAsB;AAAA,IACpB,OAAO;AAAA,IACP,aACE;AAAA,EACJ;AAAA,EACA,uBAAuB;AAAA,IACrB,OAAO;AAAA,IACP,aACE;AAAA,EACJ;AAAA,EACA,wBAAwB;AAAA,IACtB,OAAO;AAAA,IACP,aACE;AAAA,EACJ;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,aACE;AAAA,EACJ;AAAA,EACA,uBAAuB;AAAA,IACrB,OAAO;AAAA,IACP,aACE;AAAA,EACJ;AAAA,EACA,cAAc;AAAA,IACZ,OAAO;AAAA,IACP,aACE;AAAA,EACJ;AAAA,EACA,eAAe;AAAA,IACb,OAAO;AAAA,IACP,aACE;AAAA,EACJ;AAAA,EACA,iBAAiB;AAAA,IACf,OAAO;AAAA,IACP,aACE;AAAA,EACJ;AAAA,EACA,sBAAsB;AAAA,IACpB,OAAO;AAAA,IACP,aACE;AAAA,EACJ;AACF;AAEO,IAAM,aAAa,OAAO,KAAK,kBAAkB;;;ACnDxD,SAAS,YAAY,KAAgC;AACnD,SACE,OAAO,QAAQ,YACf,QAAQ,QACR,aAAa,OACb,OAAQ,IAA6B,YAAY;AAErD;AAEA,SAAS,iBAAiB,KAAwB;AAChD,MAAI,IAAI,QAAQ,WAAW,SAAS,IAAI,IAAI,GAAG;AAC7C,WAAO,IAAI;AAAA,EACb;AACA,MAAI,IAAI,SAAS;AACf,UAAM,eAAe,IAAI,QAAQ,YAAY,EAAE,KAAK;AACpD,QAAI,WAAW,SAAS,YAAY,GAAG;AACrC,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,SAAyB;AACrD,QAAM,eAAe,QAAQ,YAAY;AACzC,QAAM,kBACJ,aAAa,SAAS,cAAc,KACpC,aAAa,SAAS,QAAQ,KAC9B,aAAa,SAAS,QAAQ,KAC9B,aAAa,SAAS,QAAQ,KAC9B,aAAa,SAAS,QAAQ,KAC9B,aAAa,SAAS,MAAM,KAC5B,aAAa,SAAS,OAAO,KAC7B,aAAa,SAAS,OAAO,KAC7B,aAAa,SAAS,SAAS,KAC/B,aAAa,SAAS,OAAO,KAC7B,QAAQ,SAAS,QAAQ,KACzB,QAAQ,SAAS,WAAW,KAC5B,QAAQ,SAAS,SAAS,KAC1B,QAAQ,SAAS,YAAY,KAC7B,QAAQ,SAAS,YAAY,KAC7B,aAAa,SAAS,UAAU,KAChC,aAAa,SAAS,QAAQ,KAC9B,aAAa,SAAS,cAAc,KACpC,aAAa,SAAS,UAAU,KAChC,aAAa,SAAS,UAAU,KAChC,aAAa,SAAS,KAAK;AAE7B,MAAI,iBAAiB;AACnB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,gBACP,KACA,UACA,GACA;AACA,QAAM,YAAY,iBAAiB,GAAG;AAEtC,MAAI,aAAa,mBAAmB,SAAS,GAAG;AAC9C,UAAM,UAAU,mBAAmB,SAAS;AAC5C,aAAS;AAAA,MACP,OAAO,QAAQ;AAAA,MACf,aAAa,QAAQ;AAAA,IACvB,CAAC;AACD;AAAA,EACF;AAEA,QAAM,mBAAmB;AAAA,IACvB,IAAI,WAAW,EAAE,iBAAiB;AAAA,EACpC;AACA,WAAS;AAAA,IACP,OAAO,EAAE,iBAAiB;AAAA,IAC1B,aAAa;AAAA,EACf,CAAC;AACH;AAEA,SAAS,mBACP,KACA,UACA,GACA;AACA,QAAM,aAAa,eAAe,QAAQ,IAAI,UAAU,EAAE,iBAAiB;AAC3E,QAAM,mBAAmB,qBAAqB,UAAU;AACxD,WAAS;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACf,CAAC;AACH;AAEO,IAAM,cAAc,CACzB,KACA,UACA,MACG;AACH,MAAI,YAAY,GAAG,GAAG;AACpB,oBAAgB,KAAK,UAAU,CAAC;AAAA,EAClC,OAAO;AACL,uBAAmB,KAAK,UAAU,CAAC;AAAA,EACrC;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/pages/iam/users/activity/user-activity-page-content.tsx","../src/pages/iam/users/activity/_components/role-section.tsx","../src/pages/iam/roles/_components/role-selector.tsx"],"sourcesContent":["'use client';\n\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Section,\n} from '@mesob/ui/components';\nimport { IconCalendar } from '@tabler/icons-react';\nimport { RoleSection } from './_components/role-section';\n\ntype UserActivityPageContentProps = {\n userId: string;\n};\n\nexport function UserActivityPageContent({\n userId,\n}: UserActivityPageContentProps) {\n if (!userId) {\n return null;\n }\n\n return (\n <div className=\"space-y-4\">\n <Card>\n <CardHeader>\n <CardTitle>Activity</CardTitle>\n </CardHeader>\n <CardContent className=\"flex items-center gap-2 text-muted-foreground text-sm\">\n <IconCalendar className=\"h-4 w-4\" />\n Activity (placeholder)\n </CardContent>\n </Card>\n <RoleSection userId={userId} />\n <Section title=\"Permissions\">test</Section>\n <Section title=\"Groups\">test</Section>\n </div>\n );\n}\n","'use client';\n\nimport {\n Button,\n EntityEmptyState,\n EntityLoadingState,\n EntitySection,\n useEntitySectionState,\n} from '@mesob/ui/components';\nimport { IconPlus, IconShield } from '@tabler/icons-react';\nimport { useMemo, useState } from 'react';\nimport { RoleSelector } from '../../../roles/_components/role-selector';\nimport type { Role } from '../../../roles/_components/roles-data';\nimport { str } from '../../../roles/_components/roles-data';\nimport { RolesList } from '../../../roles/_components/roles-list';\nimport {\n authApi$,\n defaultEntityQueryOptions,\n} from '../../../shared/page-helpers';\n\nconst LIMIT = 100;\nconst TABLE_COLUMN_COUNT = 4;\n\nfunction filterAndSort(\n roles: Role[],\n search: string,\n sort: string,\n order: 'asc' | 'desc',\n) {\n let out = roles;\n if (search.trim()) {\n const q = search.trim().toLowerCase();\n out = out.filter(\n (r) =>\n str(r.name).toLowerCase().includes(q) ||\n r.code.toLowerCase().includes(q),\n );\n }\n const mult = order === 'asc' ? 1 : -1;\n const by = sort === 'code' ? 'code' : 'createdAt';\n out = [...out].sort((a, b) =>\n by === 'code'\n ? mult * a.code.localeCompare(b.code)\n : mult *\n (new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()),\n );\n return out;\n}\n\nexport function RoleSection({ userId }: { userId: string }) {\n const [open, setOpen] = useState(false);\n const sectionState = useEntitySectionState({\n defaultSort: 'createdAt',\n defaultOrder: 'desc',\n defaultPageSize: 10,\n filterOptions: [\n { label: 'All', value: '' },\n { label: 'By Code', value: 'code' },\n ],\n sortOptions: [\n { label: 'Created', value: 'createdAt' },\n { label: 'Updated', value: 'updatedAt' },\n { label: 'Code', value: 'code' },\n ],\n views: ['table', 'card'],\n });\n\n const { data, isPending, isFetching } = authApi$.useQuery(\n 'get',\n '/roles',\n { params: { query: { limit: LIMIT } } },\n { ...defaultEntityQueryOptions, enabled: open },\n );\n const isLoading = isPending || isFetching;\n const roles = data?.roles ?? [];\n\n const filtered = useMemo(\n () =>\n filterAndSort(\n roles,\n sectionState.search,\n sectionState.sort,\n sectionState.order,\n ),\n [roles, sectionState.search, sectionState.sort, sectionState.order],\n );\n const pageCount = Math.ceil(filtered.length / sectionState.pageSize) || 1;\n const pageIndex = Math.min(sectionState.page - 1, Math.max(0, pageCount - 1));\n const paginated = useMemo(\n () =>\n filtered.slice(\n pageIndex * sectionState.pageSize,\n pageIndex * sectionState.pageSize + sectionState.pageSize,\n ),\n [filtered, pageIndex, sectionState.pageSize],\n );\n\n return (\n <EntitySection\n title=\"Role\"\n state={sectionState}\n onOpenChange={setOpen}\n actions={\n <RoleSelector\n trigger={\n <Button variant=\"outline\" size=\"sm\">\n <IconPlus className=\"h-4 w-4\" />\n Add role\n </Button>\n }\n multiple\n onSelect={(roles) => {\n // TODO: assign roles to user; logging for now\n // biome-ignore lint/suspicious/noConsole: intentional for now\n console.log('Selected roles:', userId, roles);\n }}\n />\n }\n config={{\n searchPlaceholder: 'Search roles...',\n filterOptions: sectionState.filterOptions,\n sortOptions: sectionState.sortOptions,\n views: sectionState.views,\n }}\n >\n {(state) => (\n <>\n {isLoading && (\n <EntityLoadingState\n view={state.view as 'table' | 'card'}\n rowCount={state.pageSize}\n columnCount={TABLE_COLUMN_COUNT}\n cardCount={state.pageSize}\n />\n )}\n {!isLoading && filtered.length === 0 && (\n <EntityEmptyState\n icon={IconShield}\n entityName=\"role\"\n title=\"No roles\"\n description={\n roles.length === 0 ? 'No roles in tenant.' : 'No matches.'\n }\n />\n )}\n {!isLoading && filtered.length > 0 && (\n <RolesList\n data={paginated}\n view={state.view as 'table' | 'card'}\n pageIndex={pageIndex}\n pageSize={state.pageSize}\n pageCount={pageCount}\n totalRows={filtered.length}\n onPageChange={(p) => state.setPage(p + 1)}\n onPageSizeChange={(size) => {\n state.setPageSize(size);\n state.setPage(1);\n }}\n />\n )}\n </>\n )}\n </EntitySection>\n );\n}\n","'use client';\n\nimport {\n EntitySelector,\n type EntitySelectorColumn,\n type EntitySelectorConfig,\n useEntitySectionState,\n} from '@mesob/ui/components';\nimport { cn } from '@mesob/ui/lib/utils';\nimport { IconCalendar, IconShield } from '@tabler/icons-react';\nimport type { ReactNode } from 'react';\nimport type { paths } from '../../../../data/openapi';\nimport { authApi$, defaultEntityQueryOptions } from '../../shared/page-helpers';\nimport { RoleCard } from './role-card';\nimport type { Role } from './roles-data';\nimport { str } from './roles-data';\n\nfunction SelectableRoleCard({\n role,\n selected,\n onToggle,\n}: {\n role: Role;\n selected: boolean;\n onToggle: () => void;\n}) {\n return (\n // biome-ignore lint/a11y/useSemanticElements: div to avoid nested buttons from RoleCard\n <div\n role=\"button\"\n tabIndex={0}\n onClick={onToggle}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n onToggle();\n }\n }}\n className={cn(\n 'cursor-pointer rounded-lg transition-shadow focus:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n selected && 'ring-primary ring-2',\n )}\n >\n <RoleCard role={role} mode=\"static\" />\n </div>\n );\n}\n\nconst roleColumns: EntitySelectorColumn<Role>[] = [\n {\n key: 'role',\n header: 'Role',\n cell: (role) => (\n <>\n <p className=\"font-medium\">{str(role.name) || role.code}</p>\n <p className=\"text-sm text-muted-foreground\">{role.code}</p>\n </>\n ),\n },\n {\n key: 'description',\n header: 'Description',\n cell: (role) => (\n <span className=\"text-muted-foreground line-clamp-1 max-w-[200px]\">\n {str(role.description) || '—'}\n </span>\n ),\n },\n {\n key: 'created',\n header: 'Created',\n cell: (role) => (\n <div className=\"flex items-center gap-1 text-muted-foreground\">\n <IconCalendar className=\"h-4 w-4\" />\n {new Date(role.createdAt).toLocaleDateString()}\n </div>\n ),\n },\n];\n\ntype RoleSelectorProps = {\n trigger: ReactNode;\n multiple?: boolean;\n onSelect: (roles: Role[]) => void;\n modalSize?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n contentClassName?: string;\n};\n\nexport function RoleSelector({\n trigger,\n multiple = true,\n onSelect,\n modalSize = 'xl',\n contentClassName,\n}: RoleSelectorProps) {\n const state = useEntitySectionState({\n defaultSort: 'createdAt',\n defaultOrder: 'desc',\n defaultPageSize: 10,\n searchParamName: 'search',\n });\n const rolesQuery = state.queryConfig as {\n params: {\n query: NonNullable<paths['/roles']['get']['parameters']['query']>;\n };\n };\n\n const { data, isPending, isFetching } = authApi$.useQuery(\n 'get',\n '/roles',\n rolesQuery,\n defaultEntityQueryOptions,\n );\n\n const roles = data?.roles ?? [];\n\n const config: EntitySelectorConfig<Role> = {\n title: 'Select role(s)',\n modalSize,\n contentClassName,\n multiple,\n entityName: 'role',\n entityIcon: IconShield,\n columns: roleColumns,\n columnCount: 3,\n getItemLabel: (role) => str(role.name) || role.code,\n searchPlaceholder: 'Search roles...',\n wrapHeaderInCard: false,\n filterOptions: [\n { label: 'All', value: '' },\n { label: 'By Code', value: 'code' },\n ],\n sortOptions: [\n { label: 'Created', value: 'createdAt' },\n { label: 'Updated', value: 'updatedAt' },\n { label: 'Code', value: 'code' },\n ],\n showViewToggle: false,\n renderCard: (role, selected, onToggle) => (\n <SelectableRoleCard role={role} selected={selected} onToggle={onToggle} />\n ),\n };\n\n return (\n <EntitySelector<Role>\n trigger={trigger}\n config={config}\n onSelect={onSelect}\n items={roles}\n total={data?.total}\n isLoading={isPending || isFetching}\n state={state}\n />\n );\n}\n"],"mappings":"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","names":["IconCalendar","useEntitySectionState","IconShield","Fragment","jsx","jsxs","useEntitySectionState","roles","IconShield","jsx","jsxs","IconCalendar"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/iam/role-detail-page.tsx"],"sourcesContent":["'use client';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport {\n EntityFormActions,\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n Input,\n LocaleInputText,\n LocaleInputTextarea,\n Section,\n Skeleton,\n} from '@mesob/ui/components';\nimport { useLocaleSchemas } from '@mesob/ui/providers';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useEffect, useMemo } from 'react';\nimport type { Resolver } from 'react-hook-form';\nimport { useForm } from 'react-hook-form';\nimport { toast } from 'sonner';\nimport { z } from 'zod';\nimport { useApi, useConfig } from '../../provider';\n\ntype RoleFormData = {\n name: Record<string, string>;\n code: string;\n description: Record<string, string>;\n};\n\ntype RoleDetailPageProps = {\n roleId: string;\n basePath?: string;\n};\n\nexport function RoleDetailPage({\n roleId,\n basePath = '/iam/roles',\n}: RoleDetailPageProps) {\n const { hooks } = useApi();\n const { config } = useConfig();\n const qc = useQueryClient();\n const { localeInputDefault, requiredSchema, optionalSchema } =\n useLocaleSchemas();\n const schema = useMemo(\n () =>\n z.object({\n name: requiredSchema,\n code: z.string().min(1, 'Code is required'),\n description: optionalSchema,\n }),\n [requiredSchema, optionalSchema],\n );\n const defaults: RoleFormData = useMemo(\n () => ({\n name: { ...localeInputDefault },\n code: '',\n description: { ...localeInputDefault },\n }),\n [localeInputDefault],\n );\n\n const { data, isLoading } = hooks.useQuery(\n 'get',\n '/roles/{id}',\n { params: { path: { id: roleId } } },\n { enabled: !!roleId },\n );\n\n const update = hooks.useMutation('put', '/roles/{id}', {\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: ['get', '/roles'] });\n qc.invalidateQueries({ queryKey: ['get', '/roles/{id}'] });\n toast.success('Role updated');\n },\n onError: () => {\n toast.error('Failed to update role');\n },\n });\n const remove = hooks.useMutation('delete', '/roles/{id}', {\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: ['get', '/roles'] });\n toast.success('Role deleted');\n config.navigation?.onNavigate?.(basePath);\n },\n onError: () => {\n toast.error('Failed to delete role');\n },\n });\n\n const form = useForm<RoleFormData>({\n resolver: zodResolver(schema) as Resolver<RoleFormData>,\n defaultValues: defaults,\n });\n\n const { reset, formState, control, register } = form;\n\n useEffect(() => {\n if (!data?.role) {\n return;\n }\n const r = data.role;\n reset({\n name: (r.name ?? {}) as RoleFormData['name'],\n code: r.code,\n description: (r.description ?? {}) as RoleFormData['description'],\n });\n }, [data?.role, reset]);\n\n if (!roleId) {\n return null;\n }\n\n const role = data?.role;\n const editable = role?.isEditable !== false;\n const deletable = role?.isDeletable !== false;\n const onSubmit = form.handleSubmit(async (d) => {\n await update.mutateAsync({\n params: { path: { id: roleId } },\n body: {\n name: d.name,\n code: d.code,\n description: d.description ?? undefined,\n },\n });\n });\n\n const footer = role ? (\n <EntityFormActions\n mode=\"edit\"\n onSubmit={onSubmit}\n onDelete={\n deletable\n ? () =>\n remove.mutate({\n params: { path: { id: roleId } },\n })\n : undefined\n }\n isSubmitting={update.isPending}\n isDeleting={remove.isPending}\n disabled={!editable}\n itemName=\"role\"\n />\n ) : null;\n\n return (\n <Section title=\"Role details\" footer={footer} defaultOpen>\n {isLoading || !role ? (\n <RoleDetailSkeleton />\n ) : (\n <Form {...form}>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <LocaleInputText\n label=\"Name\"\n field=\"name\"\n required\n register={register}\n errors={formState.errors}\n placeholder=\"e.g. Administrator\"\n disabled={!editable}\n />\n <FormField\n control={control}\n name=\"code\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>\n Code <span className=\"text-destructive\">*</span>\n </FormLabel>\n <FormControl>\n <Input\n placeholder=\"e.g. admin\"\n disabled={!editable}\n {...field}\n />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n <LocaleInputTextarea\n label=\"Description\"\n field=\"description\"\n register={register}\n errors={formState.errors}\n placeholder=\"Description\"\n rows={3}\n disabled={!editable}\n />\n </form>\n </Form>\n )}\n </Section>\n );\n}\n\nfunction RoleDetailSkeleton() {\n return (\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Skeleton className=\"h-4 w-16\" />\n <Skeleton className=\"h-10 w-full\" />\n </div>\n <div className=\"space-y-2\">\n <Skeleton className=\"h-4 w-14\" />\n <Skeleton className=\"h-10 w-full\" />\n </div>\n <div className=\"space-y-2\">\n <Skeleton className=\"h-4 w-24\" />\n <Skeleton className=\"h-20 w-full\" />\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/pages/iam/tenants/tenant-detail-page-content.tsx"],"sourcesContent":["'use client';\n\nimport {\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n EntityDetailHeader,\n PageContainer,\n type TabItem,\n useBreadcrumbs,\n} from '@mesob/ui/components';\nimport { IconBuilding } from '@tabler/icons-react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { useApi, useConfig } from '../../../provider';\nimport { str } from './_components/tenants-data';\n\ntype TenantDetailPageContentProps = {\n tenantId: string;\n};\n\nexport function TenantDetailPageContent({\n tenantId,\n}: TenantDetailPageContentProps) {\n const { hooks } = useApi();\n const { config } = useConfig();\n const homeHref = config.navigation?.defaultRedirectUrl || '/';\n const qc = useQueryClient();\n\n const { data, isLoading } = hooks.useQuery(\n 'get',\n '/tenants/{id}',\n { params: { path: { id: tenantId } } },\n { enabled: !!tenantId },\n );\n const tenant = data?.tenant;\n\n const toggleActive = hooks.useMutation('put', '/tenants/{id}', {\n onSuccess: () => {\n qc.invalidateQueries({ queryKey: ['get', '/tenants/{id}'] });\n qc.invalidateQueries({ queryKey: ['get', '/tenants'] });\n },\n });\n\n const title = tenant ? str(tenant.name) || tenant.id : (tenantId ?? 'Tenant');\n useBreadcrumbs({\n items: [\n { label: 'Home', href: homeHref },\n { label: 'IAM', href: '/iam' },\n { label: 'Tenants', href: '/iam/tenants' },\n { label: title },\n ],\n });\n\n const tabs: TabItem[] = useMemo(\n () => [\n {\n value: 'detail',\n name: 'Detail',\n content: (\n <Card className=\"mt-4\">\n <CardHeader>\n <CardTitle>Tenant details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2 text-sm\">\n {tenant && (\n <>\n <p>\n <span className=\"text-muted-foreground\">Name:</span>{' '}\n {str(tenant.name) || '—'}\n </p>\n <p>\n <span className=\"text-muted-foreground\">Description:</span>{' '}\n {str(tenant.description) || '—'}\n </p>\n <p>\n <span className=\"text-muted-foreground\">Language:</span>{' '}\n {tenant.defaultLanguage ?? '—'}\n </p>\n <p>\n <span className=\"text-muted-foreground\">Currency:</span>{' '}\n {tenant.defaultCurrency ?? '—'}\n </p>\n <p>\n <span className=\"text-muted-foreground\">Timezone:</span>{' '}\n {tenant.timezone ?? '—'}\n </p>\n </>\n )}\n </CardContent>\n </Card>\n ),\n },\n {\n value: 'theme',\n name: 'Theme',\n content: (\n <Card className=\"mt-4\">\n <CardHeader>\n <CardTitle>Theme</CardTitle>\n </CardHeader>\n <CardContent className=\"text-muted-foreground text-sm\">\n Theme settings (placeholder)\n </CardContent>\n </Card>\n ),\n },\n {\n value: 'settings',\n name: 'Settings',\n content: (\n <Card className=\"mt-4\">\n <CardHeader>\n <CardTitle>Settings</CardTitle>\n </CardHeader>\n <CardContent className=\"text-muted-foreground text-sm\">\n Tenant settings (placeholder)\n </CardContent>\n </Card>\n ),\n },\n ],\n [tenant],\n );\n\n const actions = tenant && (\n <Button\n variant={tenant.isActive ? 'secondary' : 'default'}\n size=\"sm\"\n onClick={() =>\n toggleActive.mutate({\n params: { path: { id: tenantId } },\n body: { isActive: !tenant.isActive },\n })\n }\n disabled={toggleActive.isPending}\n >\n {tenant.isActive ? 'Deactivate' : 'Activate'}\n </Button>\n );\n\n if (!tenantId) {\n return null;\n }\n if (isLoading || !tenant) {\n return (\n <div className=\"flex flex-1 flex-col gap-4 p-4 pt-0\">\n <div className=\"h-24 animate-pulse rounded-xl bg-muted\" />\n </div>\n );\n }\n\n return (\n <PageContainer className=\"flex flex-1 flex-col gap-4 p-4 pt-0\">\n <EntityDetailHeader\n title={title}\n icon={<IconBuilding className=\"h-5 w-5 text-muted-foreground\" />}\n actions={actions}\n tabs={tabs}\n />\n </PageContainer>\n );\n}\n"],"mappings":"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","names":[]}
|