@varshylinc/team-management 0.1.0 → 0.2.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/client/actions.d.ts +20 -0
- package/dist/client/actions.d.ts.map +1 -0
- package/dist/client/actions.js +23 -0
- package/dist/client/actions.js.map +1 -0
- package/dist/client/api.d.ts +74 -0
- package/dist/client/api.d.ts.map +1 -0
- package/dist/client/api.js +245 -0
- package/dist/client/api.js.map +1 -0
- package/dist/client/components/AddMemberForm.d.ts +12 -0
- package/dist/client/components/AddMemberForm.d.ts.map +1 -0
- package/dist/client/components/AddMemberForm.js +37 -0
- package/dist/client/components/AddMemberForm.js.map +1 -0
- package/dist/client/components/AuditEventRow.d.ts +7 -0
- package/dist/client/components/AuditEventRow.d.ts.map +1 -0
- package/dist/client/components/AuditEventRow.js +20 -0
- package/dist/client/components/AuditEventRow.js.map +1 -0
- package/dist/client/components/CascadePreview.d.ts +11 -0
- package/dist/client/components/CascadePreview.d.ts.map +1 -0
- package/dist/client/components/CascadePreview.js +7 -0
- package/dist/client/components/CascadePreview.js.map +1 -0
- package/dist/client/components/DangerZoneCard.d.ts +10 -0
- package/dist/client/components/DangerZoneCard.d.ts.map +1 -0
- package/dist/client/components/DangerZoneCard.js +28 -0
- package/dist/client/components/DangerZoneCard.js.map +1 -0
- package/dist/client/components/InvitationCodeDisplay.d.ts +7 -0
- package/dist/client/components/InvitationCodeDisplay.d.ts.map +1 -0
- package/dist/client/components/InvitationCodeDisplay.js +26 -0
- package/dist/client/components/InvitationCodeDisplay.js.map +1 -0
- package/dist/client/components/InviteForm.d.ts +7 -0
- package/dist/client/components/InviteForm.d.ts.map +1 -0
- package/dist/client/components/InviteForm.js +35 -0
- package/dist/client/components/InviteForm.js.map +1 -0
- package/dist/client/components/MemberRow.d.ts +10 -0
- package/dist/client/components/MemberRow.d.ts.map +1 -0
- package/dist/client/components/MemberRow.js +17 -0
- package/dist/client/components/MemberRow.js.map +1 -0
- package/dist/client/components/OrgPeopleRoster.d.ts +11 -0
- package/dist/client/components/OrgPeopleRoster.d.ts.map +1 -0
- package/dist/client/components/OrgPeopleRoster.js +13 -0
- package/dist/client/components/OrgPeopleRoster.js.map +1 -0
- package/dist/client/components/PendingTransferBanner.d.ts +10 -0
- package/dist/client/components/PendingTransferBanner.d.ts.map +1 -0
- package/dist/client/components/PendingTransferBanner.js +48 -0
- package/dist/client/components/PendingTransferBanner.js.map +1 -0
- package/dist/client/components/PlaceholderCard.d.ts +7 -0
- package/dist/client/components/PlaceholderCard.d.ts.map +1 -0
- package/dist/client/components/PlaceholderCard.js +15 -0
- package/dist/client/components/PlaceholderCard.js.map +1 -0
- package/dist/client/components/RoleBadge.d.ts +5 -0
- package/dist/client/components/RoleBadge.d.ts.map +1 -0
- package/dist/client/components/RoleBadge.js +17 -0
- package/dist/client/components/RoleBadge.js.map +1 -0
- package/dist/client/components/RoleSelect.d.ts +10 -0
- package/dist/client/components/RoleSelect.d.ts.map +1 -0
- package/dist/client/components/RoleSelect.js +12 -0
- package/dist/client/components/RoleSelect.js.map +1 -0
- package/dist/client/components/SeatUsagePanel.d.ts +6 -0
- package/dist/client/components/SeatUsagePanel.d.ts.map +1 -0
- package/dist/client/components/SeatUsagePanel.js +13 -0
- package/dist/client/components/SeatUsagePanel.js.map +1 -0
- package/dist/client/hooks/useCurrentMembership.d.ts +8 -0
- package/dist/client/hooks/useCurrentMembership.d.ts.map +1 -0
- package/dist/client/hooks/useCurrentMembership.js +20 -0
- package/dist/client/hooks/useCurrentMembership.js.map +1 -0
- package/dist/client/hooks/useMembers.d.ts +10 -0
- package/dist/client/hooks/useMembers.d.ts.map +1 -0
- package/dist/client/hooks/useMembers.js +20 -0
- package/dist/client/hooks/useMembers.js.map +1 -0
- package/dist/client/hooks/useOrgMembers.d.ts +20 -0
- package/dist/client/hooks/useOrgMembers.d.ts.map +1 -0
- package/dist/client/hooks/useOrgMembers.js +63 -0
- package/dist/client/hooks/useOrgMembers.js.map +1 -0
- package/dist/client/hooks/usePendingInvitations.d.ts +8 -0
- package/dist/client/hooks/usePendingInvitations.d.ts.map +1 -0
- package/dist/client/hooks/usePendingInvitations.js +20 -0
- package/dist/client/hooks/usePendingInvitations.js.map +1 -0
- package/dist/client/hooks/usePendingTransfer.d.ts +8 -0
- package/dist/client/hooks/usePendingTransfer.d.ts.map +1 -0
- package/dist/client/hooks/usePendingTransfer.js +23 -0
- package/dist/client/hooks/usePendingTransfer.js.map +1 -0
- package/dist/client/index.d.ts +31 -0
- package/dist/client/index.d.ts.map +1 -0
- package/{src/client/index.ts → dist/client/index.js} +6 -54
- package/dist/client/index.js.map +1 -0
- package/dist/client/pages/AuditLogPage.d.ts +6 -0
- package/dist/client/pages/AuditLogPage.d.ts.map +1 -0
- package/dist/client/pages/AuditLogPage.js +51 -0
- package/dist/client/pages/AuditLogPage.js.map +1 -0
- package/dist/client/pages/EmailChangePage.d.ts +8 -0
- package/dist/client/pages/EmailChangePage.d.ts.map +1 -0
- package/dist/client/pages/EmailChangePage.js +52 -0
- package/dist/client/pages/EmailChangePage.js.map +1 -0
- package/dist/client/pages/InvitationAcceptPage.d.ts +11 -0
- package/dist/client/pages/InvitationAcceptPage.d.ts.map +1 -0
- package/dist/client/pages/InvitationAcceptPage.js +42 -0
- package/dist/client/pages/InvitationAcceptPage.js.map +1 -0
- package/dist/client/pages/InvitationCodePage.d.ts +6 -0
- package/dist/client/pages/InvitationCodePage.d.ts.map +1 -0
- package/dist/client/pages/InvitationCodePage.js +28 -0
- package/dist/client/pages/InvitationCodePage.js.map +1 -0
- package/dist/client/pages/MembersPage.d.ts +6 -0
- package/dist/client/pages/MembersPage.d.ts.map +1 -0
- package/dist/client/pages/MembersPage.js +67 -0
- package/dist/client/pages/MembersPage.js.map +1 -0
- package/dist/client/pages/OrgPeoplePage.d.ts +14 -0
- package/dist/client/pages/OrgPeoplePage.d.ts.map +1 -0
- package/dist/client/pages/OrgPeoplePage.js +40 -0
- package/dist/client/pages/OrgPeoplePage.js.map +1 -0
- package/dist/client/pages/OrgSettingsPage.d.ts +6 -0
- package/dist/client/pages/OrgSettingsPage.d.ts.map +1 -0
- package/dist/client/pages/OrgSettingsPage.js +78 -0
- package/dist/client/pages/OrgSettingsPage.js.map +1 -0
- package/dist/client/pages/OwnershipTransferPage.d.ts +6 -0
- package/dist/client/pages/OwnershipTransferPage.d.ts.map +1 -0
- package/dist/client/pages/OwnershipTransferPage.js +68 -0
- package/dist/client/pages/OwnershipTransferPage.js.map +1 -0
- package/dist/client/pages/PasswordResetPage.d.ts +6 -0
- package/dist/client/pages/PasswordResetPage.d.ts.map +1 -0
- package/dist/client/pages/PasswordResetPage.js +34 -0
- package/dist/client/pages/PasswordResetPage.js.map +1 -0
- package/dist/client/pages/PasswordResetRequestPage.d.ts +2 -0
- package/dist/client/pages/PasswordResetRequestPage.d.ts.map +1 -0
- package/dist/client/pages/PasswordResetRequestPage.js +27 -0
- package/dist/client/pages/PasswordResetRequestPage.js.map +1 -0
- package/dist/client/pages/PlaceholderPage.d.ts +7 -0
- package/dist/client/pages/PlaceholderPage.d.ts.map +1 -0
- package/dist/client/pages/PlaceholderPage.js +16 -0
- package/dist/client/pages/PlaceholderPage.js.map +1 -0
- package/dist/client/pages/SuperAdminDashboard.d.ts +2 -0
- package/dist/client/pages/SuperAdminDashboard.d.ts.map +1 -0
- package/dist/client/pages/SuperAdminDashboard.js +123 -0
- package/dist/client/pages/SuperAdminDashboard.js.map +1 -0
- package/dist/client/theme.d.ts +12 -0
- package/dist/client/theme.d.ts.map +1 -0
- package/dist/client/theme.js +16 -0
- package/dist/client/theme.js.map +1 -0
- package/dist/client/types.d.ts +78 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/org-admin.d.ts +45 -0
- package/dist/server/org-admin.d.ts.map +1 -0
- package/dist/server/org-admin.js +63 -0
- package/dist/server/org-admin.js.map +1 -0
- package/dist/server/routes/orgs.routes.d.ts.map +1 -1
- package/dist/server/routes/orgs.routes.js +81 -12
- package/dist/server/routes/orgs.routes.js.map +1 -1
- package/dist/server/types.d.ts +2 -0
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js.map +1 -1
- package/package.json +18 -11
- package/.eslintrc.cjs +0 -18
- package/CHANGELOG.md +0 -159
- package/src/client/api.ts +0 -314
- package/src/client/components/AuditEventRow.tsx +0 -59
- package/src/client/components/CascadePreview.tsx +0 -36
- package/src/client/components/DangerZoneCard.tsx +0 -103
- package/src/client/components/InvitationCodeDisplay.tsx +0 -48
- package/src/client/components/InviteForm.tsx +0 -77
- package/src/client/components/MemberRow.tsx +0 -69
- package/src/client/components/PendingTransferBanner.tsx +0 -98
- package/src/client/components/PlaceholderCard.tsx +0 -26
- package/src/client/components/RoleBadge.tsx +0 -26
- package/src/client/components/RoleSelect.tsx +0 -35
- package/src/client/hooks/.gitkeep +0 -0
- package/src/client/hooks/useCurrentMembership.ts +0 -24
- package/src/client/hooks/useMembers.ts +0 -24
- package/src/client/hooks/usePendingInvitations.ts +0 -24
- package/src/client/hooks/usePendingTransfer.ts +0 -27
- package/src/client/pages/AuditLogPage.tsx +0 -164
- package/src/client/pages/EmailChangePage.tsx +0 -144
- package/src/client/pages/InvitationAcceptPage.tsx +0 -163
- package/src/client/pages/InvitationCodePage.tsx +0 -108
- package/src/client/pages/MembersPage.tsx +0 -290
- package/src/client/pages/OrgSettingsPage.tsx +0 -185
- package/src/client/pages/OwnershipTransferPage.tsx +0 -163
- package/src/client/pages/PasswordResetPage.tsx +0 -104
- package/src/client/pages/PasswordResetRequestPage.tsx +0 -71
- package/src/client/pages/PlaceholderPage.tsx +0 -20
- package/src/client/pages/SuperAdminDashboard.tsx +0 -401
- package/src/client/types.ts +0 -78
- package/src/index.ts +0 -24
- package/src/server/crypto.ts +0 -47
- package/src/server/index.ts +0 -167
- package/src/server/middleware/require-membership.ts +0 -48
- package/src/server/middleware/require-role.ts +0 -19
- package/src/server/middleware/require-super-admin.ts +0 -32
- package/src/server/migrations/0001_create_tm_schema_migrations.sql +0 -13
- package/src/server/migrations/0002_create_tm_organizations.sql +0 -14
- package/src/server/migrations/0003_create_tm_memberships.sql +0 -24
- package/src/server/migrations/0004_create_tm_invitations.sql +0 -22
- package/src/server/migrations/0005_create_tm_audit_events.sql +0 -17
- package/src/server/migrations/0006_create_tm_email_change_requests.sql +0 -13
- package/src/server/migrations/0007_create_tm_ownership_transfers.sql +0 -22
- package/src/server/migrations/0008_create_tm_super_admins.sql +0 -8
- package/src/server/migrations/0009_create_tm_password_reset_requests.sql +0 -9
- package/src/server/migrations/0010_create_tm_shared_access.sql +0 -8
- package/src/server/migrations/0011_seed_super_admin.sql +0 -15
- package/src/server/migrations/0012_create_tm_user_locks.sql +0 -7
- package/src/server/routes/admin.routes.ts +0 -208
- package/src/server/routes/audit.routes.ts +0 -93
- package/src/server/routes/health.routes.ts +0 -46
- package/src/server/routes/invitations.routes.ts +0 -252
- package/src/server/routes/me.routes.ts +0 -143
- package/src/server/routes/orgs.routes.ts +0 -428
- package/src/server/routes/transfer.routes.ts +0 -110
- package/src/server/services/.gitkeep +0 -0
- package/src/server/services/audit.service.ts +0 -49
- package/src/server/services/email-change.service.ts +0 -178
- package/src/server/services/invitations.service.ts +0 -316
- package/src/server/services/memberships.service.ts +0 -129
- package/src/server/services/organizations.service.ts +0 -110
- package/src/server/services/ownership.service.ts +0 -170
- package/src/server/services/password-reset.service.ts +0 -94
- package/src/server/services/super-admin.service.ts +0 -321
- package/src/server/sql/.gitkeep +0 -0
- package/src/server/types.ts +0 -145
- package/src/shared/types.ts +0 -24
- package/tests/integration/audit-fires.test.ts +0 -288
- package/tests/integration/cascade-preview.test.ts +0 -157
- package/tests/integration/email-change.test.ts +0 -190
- package/tests/integration/feature-flags.test.ts +0 -213
- package/tests/integration/invitations-code.test.ts +0 -218
- package/tests/integration/invitations-expiry.test.ts +0 -216
- package/tests/integration/invitations-resend.test.ts +0 -241
- package/tests/integration/invitations-revoke.test.ts +0 -226
- package/tests/integration/invitations-switch-org.test.ts +0 -156
- package/tests/integration/invitations-token.test.ts +0 -221
- package/tests/integration/migrations.test.ts +0 -119
- package/tests/integration/only-owner-protections.test.ts +0 -130
- package/tests/integration/org-lifecycle.test.ts +0 -169
- package/tests/integration/ownership-transfer-cancel.test.ts +0 -171
- package/tests/integration/ownership-transfer-expire.test.ts +0 -171
- package/tests/integration/ownership-transfer-happy.test.ts +0 -184
- package/tests/integration/ownership-transfer-locks.test.ts +0 -146
- package/tests/integration/password-reset.test.ts +0 -200
- package/tests/integration/super-admin-actions.test.ts +0 -180
- package/tests/integration/super-admin-restrictions.test.ts +0 -209
- package/tests/setup/global-setup.ts +0 -20
- package/tests/unit/adapter-shape.test.ts +0 -330
- package/tests/unit/role-permissions.test.ts +0 -236
- package/tests/unit/validation.test.ts +0 -304
- package/tsconfig.client.json +0 -13
- package/tsconfig.json +0 -12
- package/tsconfig.tsbuildinfo +0 -1
- package/vitest.config.ts +0 -13
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePendingTransfer.js","sourceRoot":"","sources":["../../../src/client/hooks/usePendingTransfer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAG/C,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAA2B,IAAI,CAAC,CAAC;IACzE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,kBAAkB,CAAC,KAAK,CAAC;aACtB,IAAI,CAAC,WAAW,CAAC;aACjB,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;aACxC,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACtC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,EAAE,CAAC;QACP,oDAAoD;QACpD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,KAAM,CAAC,CAAC;QAC3C,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export { OrgPeoplePage } from './pages/OrgPeoplePage.js';
|
|
2
|
+
export { MembersPage } from './pages/MembersPage.js';
|
|
3
|
+
export { OrgSettingsPage } from './pages/OrgSettingsPage.js';
|
|
4
|
+
export { InvitationAcceptPage } from './pages/InvitationAcceptPage.js';
|
|
5
|
+
export { InvitationCodePage } from './pages/InvitationCodePage.js';
|
|
6
|
+
export { AuditLogPage } from './pages/AuditLogPage.js';
|
|
7
|
+
export { OwnershipTransferPage } from './pages/OwnershipTransferPage.js';
|
|
8
|
+
export { EmailChangePage } from './pages/EmailChangePage.js';
|
|
9
|
+
export { PasswordResetRequestPage } from './pages/PasswordResetRequestPage.js';
|
|
10
|
+
export { PasswordResetPage } from './pages/PasswordResetPage.js';
|
|
11
|
+
export { SuperAdminDashboard } from './pages/SuperAdminDashboard.js';
|
|
12
|
+
export { RoleBadge } from './components/RoleBadge.js';
|
|
13
|
+
export { RoleSelect } from './components/RoleSelect.js';
|
|
14
|
+
export { MemberRow } from './components/MemberRow.js';
|
|
15
|
+
export { InviteForm } from './components/InviteForm.js';
|
|
16
|
+
export { InvitationCodeDisplay } from './components/InvitationCodeDisplay.js';
|
|
17
|
+
export { AuditEventRow } from './components/AuditEventRow.js';
|
|
18
|
+
export { DangerZoneCard } from './components/DangerZoneCard.js';
|
|
19
|
+
export { CascadePreview } from './components/CascadePreview.js';
|
|
20
|
+
export { PendingTransferBanner } from './components/PendingTransferBanner.js';
|
|
21
|
+
export { useOrgMembers } from './hooks/useOrgMembers.js';
|
|
22
|
+
export { useCurrentMembership } from './hooks/useCurrentMembership.js';
|
|
23
|
+
export { useMembers } from './hooks/useMembers.js';
|
|
24
|
+
export { usePendingInvitations } from './hooks/usePendingInvitations.js';
|
|
25
|
+
export { usePendingTransfer } from './hooks/usePendingTransfer.js';
|
|
26
|
+
export { orgAdminActions } from './actions.js';
|
|
27
|
+
export { getTeamTheme, setTeamTheme, DEFAULT_TEAM_THEME } from './theme.js';
|
|
28
|
+
export type { TeamManagementTheme } from './theme.js';
|
|
29
|
+
export { setTmApiBase, getOrg, updateOrg, deleteOrg, listMembers, addOrgMember, updateOrgMember, getOrgHierarchy, removeMember, changeMemberRole, listInvitations, createInvitation, revokeInvitation, resendInvitation, getInvitationCode, acceptInvitationByToken, acceptInvitationByCode, getMyMembership, requestEmailChange, verifyEmailChange, cancelEmailChange, requestPasswordReset, resetPassword, getPendingTransfer, initiateTransfer, acceptTransfer, cancelTransfer, getAuditLog, adminListOrgs, adminGetOrg, adminRestoreOrg, adminAppointOwner, adminHardDeleteOrg, adminAddMember, adminRemoveMember, adminLockUser, adminUnlockUser, adminResetPassword, } from './api.js';
|
|
30
|
+
export type { OrgRole, TransferStatus, PublicOrg, PublicMember, PendingInvitation, AuditEvent, OwnershipTransfer, CurrentMembership, SuperAdminOrgSummary, ApiError, OrgHierarchyGroup, } from './types.js';
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAG9E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC5E,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGtD,OAAO,EACL,YAAY,EACZ,MAAM,EACN,SAAS,EACT,SAAS,EACT,WAAW,EACX,YAAY,EACZ,eAAe,EACf,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAGlB,YAAY,EACV,OAAO,EACP,cAAc,EACd,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,QAAQ,EACR,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { OrgPeoplePage } from './pages/OrgPeoplePage.js';
|
|
1
2
|
export { MembersPage } from './pages/MembersPage.js';
|
|
2
3
|
export { OrgSettingsPage } from './pages/OrgSettingsPage.js';
|
|
3
4
|
export { InvitationAcceptPage } from './pages/InvitationAcceptPage.js';
|
|
@@ -8,7 +9,6 @@ export { EmailChangePage } from './pages/EmailChangePage.js';
|
|
|
8
9
|
export { PasswordResetRequestPage } from './pages/PasswordResetRequestPage.js';
|
|
9
10
|
export { PasswordResetPage } from './pages/PasswordResetPage.js';
|
|
10
11
|
export { SuperAdminDashboard } from './pages/SuperAdminDashboard.js';
|
|
11
|
-
|
|
12
12
|
// Components
|
|
13
13
|
export { RoleBadge } from './components/RoleBadge.js';
|
|
14
14
|
export { RoleSelect } from './components/RoleSelect.js';
|
|
@@ -19,62 +19,14 @@ export { AuditEventRow } from './components/AuditEventRow.js';
|
|
|
19
19
|
export { DangerZoneCard } from './components/DangerZoneCard.js';
|
|
20
20
|
export { CascadePreview } from './components/CascadePreview.js';
|
|
21
21
|
export { PendingTransferBanner } from './components/PendingTransferBanner.js';
|
|
22
|
-
|
|
23
22
|
// Hooks
|
|
23
|
+
export { useOrgMembers } from './hooks/useOrgMembers.js';
|
|
24
24
|
export { useCurrentMembership } from './hooks/useCurrentMembership.js';
|
|
25
25
|
export { useMembers } from './hooks/useMembers.js';
|
|
26
26
|
export { usePendingInvitations } from './hooks/usePendingInvitations.js';
|
|
27
27
|
export { usePendingTransfer } from './hooks/usePendingTransfer.js';
|
|
28
|
-
|
|
28
|
+
export { orgAdminActions } from './actions.js';
|
|
29
|
+
export { getTeamTheme, setTeamTheme, DEFAULT_TEAM_THEME } from './theme.js';
|
|
29
30
|
// API
|
|
30
|
-
export {
|
|
31
|
-
|
|
32
|
-
getOrg,
|
|
33
|
-
updateOrg,
|
|
34
|
-
deleteOrg,
|
|
35
|
-
listMembers,
|
|
36
|
-
removeMember,
|
|
37
|
-
changeMemberRole,
|
|
38
|
-
listInvitations,
|
|
39
|
-
createInvitation,
|
|
40
|
-
revokeInvitation,
|
|
41
|
-
resendInvitation,
|
|
42
|
-
getInvitationCode,
|
|
43
|
-
acceptInvitationByToken,
|
|
44
|
-
acceptInvitationByCode,
|
|
45
|
-
getMyMembership,
|
|
46
|
-
requestEmailChange,
|
|
47
|
-
verifyEmailChange,
|
|
48
|
-
cancelEmailChange,
|
|
49
|
-
requestPasswordReset,
|
|
50
|
-
resetPassword,
|
|
51
|
-
getPendingTransfer,
|
|
52
|
-
initiateTransfer,
|
|
53
|
-
acceptTransfer,
|
|
54
|
-
cancelTransfer,
|
|
55
|
-
getAuditLog,
|
|
56
|
-
adminListOrgs,
|
|
57
|
-
adminGetOrg,
|
|
58
|
-
adminRestoreOrg,
|
|
59
|
-
adminAppointOwner,
|
|
60
|
-
adminHardDeleteOrg,
|
|
61
|
-
adminAddMember,
|
|
62
|
-
adminRemoveMember,
|
|
63
|
-
adminLockUser,
|
|
64
|
-
adminUnlockUser,
|
|
65
|
-
adminResetPassword,
|
|
66
|
-
} from './api.js';
|
|
67
|
-
|
|
68
|
-
// Types
|
|
69
|
-
export type {
|
|
70
|
-
OrgRole,
|
|
71
|
-
TransferStatus,
|
|
72
|
-
PublicOrg,
|
|
73
|
-
PublicMember,
|
|
74
|
-
PendingInvitation,
|
|
75
|
-
AuditEvent,
|
|
76
|
-
OwnershipTransfer,
|
|
77
|
-
CurrentMembership,
|
|
78
|
-
SuperAdminOrgSummary,
|
|
79
|
-
ApiError,
|
|
80
|
-
} from './types.js';
|
|
31
|
+
export { setTmApiBase, getOrg, updateOrg, deleteOrg, listMembers, addOrgMember, updateOrgMember, getOrgHierarchy, removeMember, changeMemberRole, listInvitations, createInvitation, revokeInvitation, resendInvitation, getInvitationCode, acceptInvitationByToken, acceptInvitationByCode, getMyMembership, requestEmailChange, verifyEmailChange, cancelEmailChange, requestPasswordReset, resetPassword, getPendingTransfer, initiateTransfer, acceptTransfer, cancelTransfer, getAuditLog, adminListOrgs, adminGetOrg, adminRestoreOrg, adminAppointOwner, adminHardDeleteOrg, adminAddMember, adminRemoveMember, adminLockUser, adminUnlockUser, adminResetPassword, } from './api.js';
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAG5E,MAAM;AACN,OAAO,EACL,YAAY,EACZ,MAAM,EACN,SAAS,EACT,SAAS,EACT,WAAW,EACX,YAAY,EACZ,eAAe,EACf,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,kBAAkB,GACnB,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuditLogPage.d.ts","sourceRoot":"","sources":["../../../src/client/pages/AuditLogPage.tsx"],"names":[],"mappings":"AAMA,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,iBAAiB,2CAuJxD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import React, { useState } from 'react';
|
|
3
|
+
import { useCurrentMembership } from '../hooks/useCurrentMembership.js';
|
|
4
|
+
import { AuditEventRow } from '../components/AuditEventRow.js';
|
|
5
|
+
import { getAuditLog } from '../api.js';
|
|
6
|
+
const PAGE_SIZE = 25;
|
|
7
|
+
export function AuditLogPage({ orgId }) {
|
|
8
|
+
const { membership } = useCurrentMembership();
|
|
9
|
+
const [events, setEvents] = useState([]);
|
|
10
|
+
const [total, setTotal] = useState(0);
|
|
11
|
+
const [page, setPage] = useState(1);
|
|
12
|
+
const [loading, setLoading] = useState(false);
|
|
13
|
+
const [error, setError] = useState(null);
|
|
14
|
+
const [actionFilter, setActionFilter] = useState('');
|
|
15
|
+
const [initialized, setInitialized] = useState(false);
|
|
16
|
+
const role = membership?.role;
|
|
17
|
+
const canView = role === 'owner' || role === 'admin';
|
|
18
|
+
async function load(p, action) {
|
|
19
|
+
setLoading(true);
|
|
20
|
+
setError(null);
|
|
21
|
+
try {
|
|
22
|
+
const result = await getAuditLog(orgId, { page: p, limit: PAGE_SIZE, action: action || undefined });
|
|
23
|
+
setEvents(result.events);
|
|
24
|
+
setTotal(result.total);
|
|
25
|
+
setPage(result.page);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
setError(err instanceof Error ? err.message : 'Failed to load audit log');
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
setLoading(false);
|
|
32
|
+
setInitialized(true);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Load on first render after membership check
|
|
36
|
+
React.useEffect(() => {
|
|
37
|
+
if (canView && !initialized) {
|
|
38
|
+
load(1, actionFilter);
|
|
39
|
+
}
|
|
40
|
+
}, [canView]);
|
|
41
|
+
async function handleFilter(e) {
|
|
42
|
+
e.preventDefault();
|
|
43
|
+
await load(1, actionFilter);
|
|
44
|
+
}
|
|
45
|
+
const totalPages = Math.ceil(total / PAGE_SIZE);
|
|
46
|
+
if (!canView) {
|
|
47
|
+
return (_jsx("div", { className: "max-w-4xl mx-auto px-4 py-8", children: _jsx("div", { className: "rounded-md bg-amber-50 border border-amber-200 px-4 py-3 text-sm text-amber-700", children: "You do not have permission to view the audit log." }) }));
|
|
48
|
+
}
|
|
49
|
+
return (_jsxs("div", { className: "max-w-5xl mx-auto px-4 py-8", children: [_jsxs("div", { className: "flex flex-col sm:flex-row sm:items-center gap-4 mb-6", children: [_jsx("h1", { className: "text-2xl font-bold text-slate-900 flex-1", children: "Audit Log" }), _jsxs("form", { onSubmit: handleFilter, className: "flex gap-2", children: [_jsx("input", { type: "text", value: actionFilter, onChange: (e) => setActionFilter(e.target.value), placeholder: "Filter by action\u2026", className: "rounded-md border border-slate-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500" }), _jsx("button", { type: "submit", className: "rounded-md bg-blue-600 px-4 py-2 text-sm font-medium text-white hover:bg-blue-700 transition-colors", children: "Filter" }), actionFilter && (_jsx("button", { type: "button", onClick: () => { setActionFilter(''); load(1, ''); }, className: "rounded-md border border-slate-300 px-3 py-2 text-sm text-slate-600 hover:bg-slate-50 transition-colors", children: "Clear" }))] })] }), error && (_jsx("div", { className: "rounded-md bg-red-50 border border-red-200 px-4 py-3 text-sm text-red-700 mb-4", children: error })), loading ? (_jsx("div", { className: "flex items-center justify-center py-16", children: _jsx("div", { className: "h-8 w-8 animate-spin rounded-full border-2 border-blue-500 border-t-transparent" }) })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: "overflow-hidden rounded-lg border border-slate-200 shadow-sm", children: _jsxs("table", { className: "w-full text-left", children: [_jsx("thead", { className: "bg-slate-50 border-b border-slate-200", children: _jsxs("tr", { children: [_jsx("th", { className: "py-3 px-4 text-xs font-semibold uppercase tracking-wide text-slate-500", children: "Actor" }), _jsx("th", { className: "py-3 px-4 text-xs font-semibold uppercase tracking-wide text-slate-500", children: "Action" }), _jsx("th", { className: "py-3 px-4 text-xs font-semibold uppercase tracking-wide text-slate-500", children: "Target" }), _jsx("th", { className: "py-3 px-4 text-xs font-semibold uppercase tracking-wide text-slate-500", children: "When" })] }) }), _jsxs("tbody", { className: "bg-white divide-y divide-slate-100", children: [events.map((event) => (_jsx(AuditEventRow, { event: event }, event.id))), events.length === 0 && initialized && (_jsx("tr", { children: _jsx("td", { colSpan: 4, className: "py-10 text-center text-sm text-slate-500", children: "No audit events found." }) }))] })] }) }), totalPages > 1 && (_jsxs("div", { className: "mt-4 flex items-center justify-between", children: [_jsxs("p", { className: "text-sm text-slate-600", children: ["Showing ", (page - 1) * PAGE_SIZE + 1, "\u2013", Math.min(page * PAGE_SIZE, total), " of ", total, " events"] }), _jsxs("div", { className: "flex gap-2", children: [_jsx("button", { onClick: () => load(page - 1, actionFilter), disabled: page <= 1 || loading, className: "rounded-md border border-slate-300 px-3 py-1.5 text-sm text-slate-700 hover:bg-slate-50 disabled:opacity-40 disabled:cursor-not-allowed transition-colors", children: "Previous" }), _jsxs("span", { className: "flex items-center px-2 text-sm text-slate-600", children: [page, " / ", totalPages] }), _jsx("button", { onClick: () => load(page + 1, actionFilter), disabled: page >= totalPages || loading, className: "rounded-md border border-slate-300 px-3 py-1.5 text-sm text-slate-700 hover:bg-slate-50 disabled:opacity-40 disabled:cursor-not-allowed transition-colors", children: "Next" })] })] }))] }))] }));
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=AuditLogPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuditLogPage.js","sourceRoot":"","sources":["../../../src/client/pages/AuditLogPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface EmailChangePageProps {
|
|
2
|
+
/** 'request' | 'verify' | 'cancel' */
|
|
3
|
+
mode: 'request' | 'verify' | 'cancel';
|
|
4
|
+
token?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function EmailChangePage({ mode, token }: EmailChangePageProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=EmailChangePage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailChangePage.d.ts","sourceRoot":"","sources":["../../../src/client/pages/EmailChangePage.tsx"],"names":[],"mappings":"AAGA,UAAU,oBAAoB;IAC5B,sCAAsC;IACtC,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,oBAAoB,2CAsIpE"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import { requestEmailChange, verifyEmailChange, cancelEmailChange } from '../api.js';
|
|
4
|
+
export function EmailChangePage({ mode, token }) {
|
|
5
|
+
const [newEmail, setNewEmail] = useState('');
|
|
6
|
+
const [submitting, setSubmitting] = useState(false);
|
|
7
|
+
const [error, setError] = useState(null);
|
|
8
|
+
const [success, setSuccess] = useState(false);
|
|
9
|
+
// Auto-submit verify/cancel on mount
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
if ((mode === 'verify' || mode === 'cancel') && token) {
|
|
12
|
+
setSubmitting(true);
|
|
13
|
+
const fn = mode === 'verify' ? verifyEmailChange : cancelEmailChange;
|
|
14
|
+
fn(token)
|
|
15
|
+
.then(() => setSuccess(true))
|
|
16
|
+
.catch((e) => setError(e.message))
|
|
17
|
+
.finally(() => setSubmitting(false));
|
|
18
|
+
}
|
|
19
|
+
}, [mode, token]);
|
|
20
|
+
if (mode === 'verify' || mode === 'cancel') {
|
|
21
|
+
if (submitting) {
|
|
22
|
+
return (_jsx("div", { className: "min-h-screen flex items-center justify-center bg-slate-50", children: _jsxs("div", { className: "text-center", children: [_jsx("div", { className: "mx-auto h-10 w-10 animate-spin rounded-full border-2 border-blue-500 border-t-transparent mb-4" }), _jsx("p", { className: "text-sm text-slate-600", children: mode === 'verify' ? 'Verifying your email change…' : 'Cancelling email change…' })] }) }));
|
|
23
|
+
}
|
|
24
|
+
if (success) {
|
|
25
|
+
return (_jsx("div", { className: "min-h-screen flex items-center justify-center bg-slate-50 px-4", children: _jsxs("div", { className: "bg-white rounded-xl shadow-md w-full max-w-md p-8 text-center", children: [_jsx("div", { className: "mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-green-100", children: _jsx("svg", { className: "h-6 w-6 text-green-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }) }), _jsx("h1", { className: "text-xl font-bold text-slate-900 mb-2", children: mode === 'verify' ? 'Email updated!' : 'Email change cancelled.' }), _jsx("p", { className: "text-sm text-slate-600 mb-6", children: mode === 'verify'
|
|
26
|
+
? 'Your email address has been successfully updated.'
|
|
27
|
+
: 'The email change request has been cancelled. Your email remains unchanged.' }), _jsx("a", { href: "/settings", className: "inline-block rounded-md border border-slate-300 px-6 py-2.5 text-sm font-medium text-slate-700 hover:bg-slate-50 transition-colors", children: "Back to Settings" })] }) }));
|
|
28
|
+
}
|
|
29
|
+
return (_jsx("div", { className: "min-h-screen flex items-center justify-center bg-slate-50 px-4", children: _jsxs("div", { className: "bg-white rounded-xl shadow-md w-full max-w-md p-8 text-center", children: [_jsx("div", { className: "mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-red-100", children: _jsx("svg", { className: "h-6 w-6 text-red-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) }), _jsx("h1", { className: "text-xl font-bold text-slate-900 mb-2", children: "Something went wrong" }), _jsx("p", { className: "text-sm text-slate-600 mb-6", children: error }), _jsx("a", { href: "/settings", className: "inline-block rounded-md border border-slate-300 px-6 py-2.5 text-sm font-medium text-slate-700 hover:bg-slate-50 transition-colors", children: "Back to Settings" })] }) }));
|
|
30
|
+
}
|
|
31
|
+
// mode === 'request'
|
|
32
|
+
async function handleSubmit(e) {
|
|
33
|
+
e.preventDefault();
|
|
34
|
+
setSubmitting(true);
|
|
35
|
+
setError(null);
|
|
36
|
+
try {
|
|
37
|
+
await requestEmailChange(newEmail.trim());
|
|
38
|
+
setSuccess(true);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
setError(err instanceof Error ? err.message : 'Failed to request email change');
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
setSubmitting(false);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (success) {
|
|
48
|
+
return (_jsxs("div", { className: "max-w-lg mx-auto px-4 py-8 text-center", children: [_jsx("div", { className: "mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-green-100", children: _jsx("svg", { className: "h-6 w-6 text-green-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" }) }) }), _jsx("h1", { className: "text-xl font-bold text-slate-900 mb-2", children: "Check your email" }), _jsxs("p", { className: "text-sm text-slate-600", children: ["We sent a confirmation link to ", _jsx("strong", { children: newEmail }), ". Click the link to confirm your new email address."] })] }));
|
|
49
|
+
}
|
|
50
|
+
return (_jsxs("div", { className: "max-w-lg mx-auto px-4 py-8", children: [_jsx("h1", { className: "text-2xl font-bold text-slate-900 mb-2", children: "Change Email Address" }), _jsx("p", { className: "text-sm text-slate-600 mb-6", children: "Enter your new email address. We will send a confirmation link to verify the change." }), _jsxs("form", { onSubmit: handleSubmit, className: "space-y-4", children: [_jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-slate-700 mb-1", children: "New Email Address" }), _jsx("input", { type: "email", value: newEmail, onChange: (e) => setNewEmail(e.target.value), required: true, disabled: submitting, placeholder: "new@email.com", className: "w-full rounded-md border border-slate-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500 disabled:bg-slate-50" })] }), error && _jsx("p", { className: "text-sm text-red-600", children: error }), _jsx("button", { type: "submit", disabled: submitting || !newEmail.trim(), className: "rounded-md bg-blue-600 px-4 py-2.5 text-sm font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:opacity-50 transition-colors", children: submitting ? 'Sending…' : 'Send Confirmation' })] })] }));
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=EmailChangePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailChangePage.js","sourceRoot":"","sources":["../../../src/client/pages/EmailChangePage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface InvitationAcceptPageProps {
|
|
2
|
+
/** The magic-link token, typically extracted from the URL query string */
|
|
3
|
+
token: string;
|
|
4
|
+
/** Whether the current user is authenticated */
|
|
5
|
+
isAuthenticated: boolean;
|
|
6
|
+
loginUrl?: string;
|
|
7
|
+
signupUrl?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function InvitationAcceptPage({ token, isAuthenticated, loginUrl, signupUrl, }: InvitationAcceptPageProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=InvitationAcceptPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvitationAcceptPage.d.ts","sourceRoot":"","sources":["../../../src/client/pages/InvitationAcceptPage.tsx"],"names":[],"mappings":"AAIA,UAAU,yBAAyB;IACjC,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,eAAe,EACf,QAAmB,EACnB,SAAqB,GACtB,EAAE,yBAAyB,2CAyI3B"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { acceptInvitationByToken } from '../api.js';
|
|
4
|
+
export function InvitationAcceptPage({ token, isAuthenticated, loginUrl = '/login', signupUrl = '/signup', }) {
|
|
5
|
+
const [state, setState] = useState(isAuthenticated ? { status: 'loading' } : { status: 'unauthenticated' });
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
if (!isAuthenticated || !token)
|
|
8
|
+
return;
|
|
9
|
+
acceptInvitationByToken(token)
|
|
10
|
+
.then(({ orgId, role }) => setState({ status: 'success', orgId, role }))
|
|
11
|
+
.catch((err) => {
|
|
12
|
+
const msg = err.message ?? 'Something went wrong';
|
|
13
|
+
if (msg.includes('already') || msg.includes('member')) {
|
|
14
|
+
setState({ status: 'already_member', message: msg });
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
setState({ status: 'error', message: msg });
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}, [token, isAuthenticated]);
|
|
21
|
+
if (state.status === 'unauthenticated') {
|
|
22
|
+
return (_jsx("div", { className: "min-h-screen flex items-center justify-center bg-slate-50 px-4", children: _jsxs("div", { className: "bg-white rounded-xl shadow-md w-full max-w-md p-8 text-center", children: [_jsx("div", { className: "mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-blue-100", children: _jsx("svg", { className: "h-6 w-6 text-blue-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" }) }) }), _jsx("h1", { className: "text-xl font-bold text-slate-900 mb-2", children: "You have been invited!" }), _jsx("p", { className: "text-sm text-slate-600 mb-6", children: "Please log in or create an account to accept this invitation." }), _jsxs("div", { className: "flex flex-col gap-3", children: [_jsx("a", { href: `${loginUrl}?redirect_token=${encodeURIComponent(token)}`, className: "rounded-md bg-blue-600 px-4 py-2.5 text-sm font-medium text-white hover:bg-blue-700 text-center transition-colors", children: "Log In" }), _jsx("a", { href: `${signupUrl}?redirect_token=${encodeURIComponent(token)}`, className: "rounded-md border border-slate-300 px-4 py-2.5 text-sm font-medium text-slate-700 hover:bg-slate-50 text-center transition-colors", children: "Create Account" })] })] }) }));
|
|
23
|
+
}
|
|
24
|
+
if (state.status === 'loading') {
|
|
25
|
+
return (_jsx("div", { className: "min-h-screen flex items-center justify-center bg-slate-50", children: _jsxs("div", { className: "text-center", children: [_jsx("div", { className: "mx-auto h-10 w-10 animate-spin rounded-full border-2 border-blue-500 border-t-transparent mb-4" }), _jsx("p", { className: "text-sm text-slate-600", children: "Accepting your invitation\u2026" })] }) }));
|
|
26
|
+
}
|
|
27
|
+
if (state.status === 'success') {
|
|
28
|
+
const roleLabels = {
|
|
29
|
+
owner: 'Owner',
|
|
30
|
+
admin: 'Admin',
|
|
31
|
+
member: 'Member',
|
|
32
|
+
viewer: 'Viewer',
|
|
33
|
+
};
|
|
34
|
+
return (_jsx("div", { className: "min-h-screen flex items-center justify-center bg-slate-50 px-4", children: _jsxs("div", { className: "bg-white rounded-xl shadow-md w-full max-w-md p-8 text-center", children: [_jsx("div", { className: "mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-green-100", children: _jsx("svg", { className: "h-6 w-6 text-green-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }) }), _jsx("h1", { className: "text-xl font-bold text-slate-900 mb-2", children: "Welcome aboard!" }), _jsxs("p", { className: "text-sm text-slate-600 mb-6", children: ["You have joined the organization as ", _jsx("strong", { children: roleLabels[state.role] }), "."] }), _jsx("a", { href: `/orgs/${state.orgId}`, className: "inline-block rounded-md bg-blue-600 px-6 py-2.5 text-sm font-medium text-white hover:bg-blue-700 transition-colors", children: "Go to Organization" })] }) }));
|
|
35
|
+
}
|
|
36
|
+
if (state.status === 'already_member') {
|
|
37
|
+
return (_jsx("div", { className: "min-h-screen flex items-center justify-center bg-slate-50 px-4", children: _jsxs("div", { className: "bg-white rounded-xl shadow-md w-full max-w-md p-8 text-center", children: [_jsx("div", { className: "mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-amber-100", children: _jsx("svg", { className: "h-6 w-6 text-amber-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v2m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }) }), _jsx("h1", { className: "text-xl font-bold text-slate-900 mb-2", children: "Already a member" }), _jsx("p", { className: "text-sm text-slate-600 mb-6", children: state.message }), _jsx("a", { href: "/", className: "inline-block rounded-md border border-slate-300 px-6 py-2.5 text-sm font-medium text-slate-700 hover:bg-slate-50 transition-colors", children: "Back to Home" })] }) }));
|
|
38
|
+
}
|
|
39
|
+
// error state
|
|
40
|
+
return (_jsx("div", { className: "min-h-screen flex items-center justify-center bg-slate-50 px-4", children: _jsxs("div", { className: "bg-white rounded-xl shadow-md w-full max-w-md p-8 text-center", children: [_jsx("div", { className: "mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-red-100", children: _jsx("svg", { className: "h-6 w-6 text-red-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) }), _jsx("h1", { className: "text-xl font-bold text-slate-900 mb-2", children: "Invitation failed" }), _jsx("p", { className: "text-sm text-slate-600 mb-6", children: 'message' in state ? state.message : 'This invitation link is invalid or has expired.' }), _jsx("a", { href: "/", className: "inline-block rounded-md border border-slate-300 px-6 py-2.5 text-sm font-medium text-slate-700 hover:bg-slate-50 transition-colors", children: "Back to Home" })] }) }));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=InvitationAcceptPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvitationAcceptPage.js","sourceRoot":"","sources":["../../../src/client/pages/InvitationAcceptPage.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAmBpD,MAAM,UAAU,oBAAoB,CAAC,EACnC,KAAK,EACL,eAAe,EACf,QAAQ,GAAG,QAAQ,EACnB,SAAS,GAAG,SAAS,GACK;IAC1B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAChC,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,CACxE,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,IAAI,CAAC,KAAK;YAAE,OAAO;QAEvC,uBAAuB,CAAC,KAAK,CAAC;aAC3B,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;aACvE,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;YACpB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,IAAI,sBAAsB,CAAC;YAClD,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtD,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;IAE7B,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,EAAE,CAAC;QACvC,OAAO,CACL,cAAK,SAAS,EAAC,gEAAgE,YAC7E,eAAK,SAAS,EAAC,+DAA+D,aAC5E,cAAK,SAAS,EAAC,kFAAkF,YAC/F,cAAK,SAAS,EAAC,uBAAuB,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,YAC1F,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAC,qEAAqE,GAAG,GACzI,GACF,EACN,aAAI,SAAS,EAAC,uCAAuC,uCAA4B,EACjF,YAAG,SAAS,EAAC,6BAA6B,8EAEtC,EACJ,eAAK,SAAS,EAAC,qBAAqB,aAClC,YACE,IAAI,EAAE,GAAG,QAAQ,mBAAmB,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAC/D,SAAS,EAAC,mHAAmH,uBAG3H,EACJ,YACE,IAAI,EAAE,GAAG,SAAS,mBAAmB,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAChE,SAAS,EAAC,mIAAmI,+BAG3I,IACA,IACF,GACF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CACL,cAAK,SAAS,EAAC,2DAA2D,YACxE,eAAK,SAAS,EAAC,aAAa,aAC1B,cAAK,SAAS,EAAC,gGAAgG,GAAG,EAClH,YAAG,SAAS,EAAC,wBAAwB,gDAA+B,IAChE,GACF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,UAAU,GAA4B;YAC1C,KAAK,EAAE,OAAO;YACd,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;SACjB,CAAC;QACF,OAAO,CACL,cAAK,SAAS,EAAC,gEAAgE,YAC7E,eAAK,SAAS,EAAC,+DAA+D,aAC5E,cAAK,SAAS,EAAC,mFAAmF,YAChG,cAAK,SAAS,EAAC,wBAAwB,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,YAC3F,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAC,gBAAgB,GAAG,GACpF,GACF,EACN,aAAI,SAAS,EAAC,uCAAuC,gCAAqB,EAC1E,aAAG,SAAS,EAAC,6BAA6B,qDACJ,2BAAS,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAU,SAC3E,EACJ,YACE,IAAI,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE,EAC5B,SAAS,EAAC,oHAAoH,mCAG5H,IACA,GACF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;QACtC,OAAO,CACL,cAAK,SAAS,EAAC,gEAAgE,YAC7E,eAAK,SAAS,EAAC,+DAA+D,aAC5E,cAAK,SAAS,EAAC,mFAAmF,YAChG,cAAK,SAAS,EAAC,wBAAwB,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,YAC3F,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAC,mDAAmD,GAAG,GACvH,GACF,EACN,aAAI,SAAS,EAAC,uCAAuC,iCAAsB,EAC3E,YAAG,SAAS,EAAC,6BAA6B,YAAE,KAAK,CAAC,OAAO,GAAK,EAC9D,YACE,IAAI,EAAC,GAAG,EACR,SAAS,EAAC,oIAAoI,6BAG5I,IACA,GACF,CACP,CAAC;IACJ,CAAC;IAED,cAAc;IACd,OAAO,CACL,cAAK,SAAS,EAAC,gEAAgE,YAC7E,eAAK,SAAS,EAAC,+DAA+D,aAC5E,cAAK,SAAS,EAAC,iFAAiF,YAC9F,cAAK,SAAS,EAAC,sBAAsB,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,YACzF,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAC,sBAAsB,GAAG,GAC1F,GACF,EACN,aAAI,SAAS,EAAC,uCAAuC,kCAAuB,EAC5E,YAAG,SAAS,EAAC,6BAA6B,YACvC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iDAAiD,GACrF,EACJ,YACE,IAAI,EAAC,GAAG,EACR,SAAS,EAAC,oIAAoI,6BAG5I,IACA,GACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvitationCodePage.d.ts","sourceRoot":"","sources":["../../../src/client/pages/InvitationCodePage.tsx"],"names":[],"mappings":"AAIA,UAAU,uBAAuB;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAQD,wBAAgB,kBAAkB,CAAC,EAAE,YAAiB,EAAE,EAAE,uBAAuB,2CA6FhF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { acceptInvitationByCode } from '../api.js';
|
|
4
|
+
export function InvitationCodePage({ prefillEmail = '' }) {
|
|
5
|
+
const [email, setEmail] = useState(prefillEmail);
|
|
6
|
+
const [code, setCode] = useState('');
|
|
7
|
+
const [state, setState] = useState({ status: 'idle' });
|
|
8
|
+
async function handleSubmit(e) {
|
|
9
|
+
e.preventDefault();
|
|
10
|
+
setState({ status: 'submitting' });
|
|
11
|
+
try {
|
|
12
|
+
const result = await acceptInvitationByCode(email.trim(), code.trim());
|
|
13
|
+
setState({ status: 'success', ...result });
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
setState({ status: 'error', message: err instanceof Error ? err.message : 'Invalid code' });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
if (state.status === 'success') {
|
|
20
|
+
const roleLabels = {
|
|
21
|
+
owner: 'Owner', admin: 'Admin', member: 'Member', viewer: 'Viewer',
|
|
22
|
+
};
|
|
23
|
+
return (_jsx("div", { className: "min-h-screen flex items-center justify-center bg-slate-50 px-4", children: _jsxs("div", { className: "bg-white rounded-xl shadow-md w-full max-w-md p-8 text-center", children: [_jsx("div", { className: "mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-green-100", children: _jsx("svg", { className: "h-6 w-6 text-green-600", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }) }), _jsx("h1", { className: "text-xl font-bold text-slate-900 mb-2", children: "You're in!" }), _jsxs("p", { className: "text-sm text-slate-600 mb-6", children: ["You joined as ", _jsx("strong", { children: roleLabels[state.role] }), "."] }), _jsx("a", { href: `/orgs/${state.orgId}`, className: "inline-block rounded-md bg-blue-600 px-6 py-2.5 text-sm font-medium text-white hover:bg-blue-700 transition-colors", children: "Go to Organization" })] }) }));
|
|
24
|
+
}
|
|
25
|
+
const submitting = state.status === 'submitting';
|
|
26
|
+
return (_jsx("div", { className: "min-h-screen flex items-center justify-center bg-slate-50 px-4", children: _jsxs("div", { className: "bg-white rounded-xl shadow-md w-full max-w-md p-8", children: [_jsx("h1", { className: "text-xl font-bold text-slate-900 mb-2", children: "Enter Invitation Code" }), _jsx("p", { className: "text-sm text-slate-600 mb-6", children: "Enter the email address your invitation was sent to and the 6-digit code you received." }), _jsxs("form", { onSubmit: handleSubmit, className: "space-y-4", children: [_jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-slate-700 mb-1", children: "Email Address" }), _jsx("input", { type: "email", value: email, onChange: (e) => setEmail(e.target.value), required: true, disabled: submitting, placeholder: "you@company.com", className: "w-full rounded-md border border-slate-300 px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500 disabled:bg-slate-50" })] }), _jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-slate-700 mb-1", children: "6-Digit Code" }), _jsx("input", { type: "text", value: code, onChange: (e) => setCode(e.target.value.replace(/\D/g, '').slice(0, 6)), required: true, disabled: submitting, placeholder: "123456", maxLength: 6, inputMode: "numeric", className: "w-full rounded-md border border-slate-300 px-3 py-2 text-sm font-mono tracking-widest text-center focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500 disabled:bg-slate-50" })] }), state.status === 'error' && (_jsx("p", { className: "text-sm text-red-600", children: state.message })), _jsx("button", { type: "submit", disabled: submitting || code.length !== 6 || !email.trim(), className: "w-full rounded-md bg-blue-600 px-4 py-2.5 text-sm font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-1 disabled:opacity-50 disabled:cursor-not-allowed transition-colors", children: submitting ? 'Verifying…' : 'Accept Invitation' })] })] }) }));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=InvitationCodePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InvitationCodePage.js","sourceRoot":"","sources":["../../../src/client/pages/InvitationCodePage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MembersPage.d.ts","sourceRoot":"","sources":["../../../src/client/pages/MembersPage.tsx"],"names":[],"mappings":"AAYA,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,gBAAgB,2CA+QtD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { useMembers } from '../hooks/useMembers.js';
|
|
4
|
+
import { usePendingInvitations } from '../hooks/usePendingInvitations.js';
|
|
5
|
+
import { usePendingTransfer } from '../hooks/usePendingTransfer.js';
|
|
6
|
+
import { useCurrentMembership } from '../hooks/useCurrentMembership.js';
|
|
7
|
+
import { MemberRow } from '../components/MemberRow.js';
|
|
8
|
+
import { InviteForm } from '../components/InviteForm.js';
|
|
9
|
+
import { PendingTransferBanner } from '../components/PendingTransferBanner.js';
|
|
10
|
+
import { RoleBadge } from '../components/RoleBadge.js';
|
|
11
|
+
import { removeMember, changeMemberRole, revokeInvitation, resendInvitation } from '../api.js';
|
|
12
|
+
export function MembersPage({ orgId }) {
|
|
13
|
+
const [tab, setTab] = useState('active');
|
|
14
|
+
const { membership } = useCurrentMembership();
|
|
15
|
+
const { members, loading: membersLoading, error: membersError, refresh: refreshMembers } = useMembers(orgId);
|
|
16
|
+
const { members: formerMembers, loading: formerLoading, error: formerError } = useMembers(orgId, { includeFormer: true });
|
|
17
|
+
const { invitations, loading: invLoading, error: invError, refresh: refreshInvitations } = usePendingInvitations(orgId);
|
|
18
|
+
const { transfer, refresh: refreshTransfer } = usePendingTransfer(orgId);
|
|
19
|
+
const currentRole = membership?.role ?? 'viewer';
|
|
20
|
+
const canManage = currentRole === 'owner' || currentRole === 'admin';
|
|
21
|
+
async function handleRemove(userId) {
|
|
22
|
+
if (!confirm('Remove this member from the organization?'))
|
|
23
|
+
return;
|
|
24
|
+
try {
|
|
25
|
+
await removeMember(orgId, userId);
|
|
26
|
+
refreshMembers();
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
alert(e instanceof Error ? e.message : 'Failed to remove member');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async function handleRoleChange(userId, newRole) {
|
|
33
|
+
try {
|
|
34
|
+
await changeMemberRole(orgId, userId, newRole);
|
|
35
|
+
refreshMembers();
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
alert(e instanceof Error ? e.message : 'Failed to change role');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function handleRevoke(invitationId) {
|
|
42
|
+
if (!confirm('Revoke this invitation?'))
|
|
43
|
+
return;
|
|
44
|
+
try {
|
|
45
|
+
await revokeInvitation(orgId, invitationId);
|
|
46
|
+
refreshInvitations();
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
alert(e instanceof Error ? e.message : 'Failed to revoke invitation');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async function handleResend(invitationId) {
|
|
53
|
+
try {
|
|
54
|
+
await resendInvitation(orgId, invitationId);
|
|
55
|
+
alert('Invitation resent!');
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
alert(e instanceof Error ? e.message : 'Failed to resend invitation');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const activeMembers = members.filter((m) => !m.removed_at);
|
|
62
|
+
const formerOnly = formerMembers.filter((m) => m.removed_at);
|
|
63
|
+
return (_jsxs("div", { className: "max-w-4xl mx-auto px-4 py-8", children: [_jsx("h1", { className: "text-2xl font-bold text-slate-900 mb-6", children: "Team Members" }), transfer && membership && (_jsx("div", { className: "mb-6", children: _jsx(PendingTransferBanner, { transfer: transfer, currentUserId: membership.user_id, orgId: orgId, onAction: refreshTransfer }) })), canManage && (_jsx("div", { className: "mb-6", children: _jsx(InviteForm, { orgId: orgId, onSuccess: refreshInvitations }) })), _jsx("div", { className: "flex gap-1 border-b border-slate-200 mb-4", children: ['active', 'invitations', 'former'].map((t) => ((t === 'former' || t === 'invitations') && !canManage ? null : (_jsxs("button", { onClick: () => setTab(t), className: `px-4 py-2 text-sm font-medium border-b-2 transition-colors -mb-px ${tab === t
|
|
64
|
+
? 'border-blue-500 text-blue-600'
|
|
65
|
+
: 'border-transparent text-slate-500 hover:text-slate-700'}`, children: [t === 'active' ? 'Active' : t === 'invitations' ? 'Pending Invitations' : 'Former Members', t === 'active' && (_jsx("span", { className: "ml-1.5 inline-flex items-center px-1.5 py-0.5 rounded-full text-xs bg-slate-100 text-slate-600", children: activeMembers.length })), t === 'invitations' && (_jsx("span", { className: "ml-1.5 inline-flex items-center px-1.5 py-0.5 rounded-full text-xs bg-blue-100 text-blue-600", children: invitations.length }))] }, t)))) }), tab === 'active' && (_jsxs("div", { children: [membersLoading && (_jsx("div", { className: "flex items-center justify-center py-12", children: _jsx("div", { className: "h-6 w-6 animate-spin rounded-full border-2 border-blue-500 border-t-transparent" }) })), membersError && (_jsx("div", { className: "rounded-md bg-red-50 border border-red-200 px-4 py-3 text-sm text-red-700", children: membersError })), !membersLoading && !membersError && (_jsx("div", { className: "overflow-hidden rounded-lg border border-slate-200 shadow-sm", children: _jsxs("table", { className: "w-full text-left", children: [_jsx("thead", { className: "bg-slate-50 border-b border-slate-200", children: _jsxs("tr", { children: [_jsx("th", { className: "py-3 px-4 text-xs font-semibold uppercase tracking-wide text-slate-500", children: "Member" }), _jsx("th", { className: "py-3 px-4 text-xs font-semibold uppercase tracking-wide text-slate-500", children: "Role" }), _jsx("th", { className: "py-3 px-4 text-xs font-semibold uppercase tracking-wide text-slate-500", children: "Joined" }), _jsx("th", { className: "py-3 px-4" })] }) }), _jsxs("tbody", { className: "bg-white divide-y divide-slate-100", children: [activeMembers.map((member) => (_jsx(MemberRow, { member: member, currentUserRole: currentRole, onRemove: handleRemove, onRoleChange: handleRoleChange }, member.id))), activeMembers.length === 0 && (_jsx("tr", { children: _jsx("td", { colSpan: 4, className: "py-8 text-center text-sm text-slate-500", children: "No active members found." }) }))] })] }) }))] })), tab === 'invitations' && canManage && (_jsxs("div", { children: [invLoading && (_jsx("div", { className: "flex items-center justify-center py-12", children: _jsx("div", { className: "h-6 w-6 animate-spin rounded-full border-2 border-blue-500 border-t-transparent" }) })), invError && (_jsx("div", { className: "rounded-md bg-red-50 border border-red-200 px-4 py-3 text-sm text-red-700", children: invError })), !invLoading && !invError && (_jsx("div", { className: "overflow-hidden rounded-lg border border-slate-200 shadow-sm", children: _jsxs("table", { className: "w-full text-left", children: [_jsx("thead", { className: "bg-slate-50 border-b border-slate-200", children: _jsxs("tr", { children: [_jsx("th", { className: "py-3 px-4 text-xs font-semibold uppercase tracking-wide text-slate-500", children: "Email" }), _jsx("th", { className: "py-3 px-4 text-xs font-semibold uppercase tracking-wide text-slate-500", children: "Role" }), _jsx("th", { className: "py-3 px-4 text-xs font-semibold uppercase tracking-wide text-slate-500", children: "Expires" }), _jsx("th", { className: "py-3 px-4 text-xs font-semibold uppercase tracking-wide text-slate-500", children: "Actions" })] }) }), _jsxs("tbody", { className: "bg-white divide-y divide-slate-100", children: [invitations.map((inv) => (_jsxs("tr", { className: "hover:bg-slate-50 transition-colors", children: [_jsx("td", { className: "py-3 px-4 text-sm text-slate-900", children: inv.email }), _jsx("td", { className: "py-3 px-4", children: _jsx(RoleBadge, { role: inv.role }) }), _jsx("td", { className: "py-3 px-4 text-xs text-slate-500", children: new Date(inv.expires_at).toLocaleDateString() }), _jsx("td", { className: "py-3 px-4", children: _jsxs("div", { className: "flex gap-3", children: [_jsx("button", { onClick: () => handleResend(inv.id), className: "text-xs text-blue-600 hover:text-blue-800 font-medium", children: "Resend" }), _jsx("button", { onClick: () => handleRevoke(inv.id), className: "text-xs text-red-600 hover:text-red-800 font-medium", children: "Revoke" })] }) })] }, inv.id))), invitations.length === 0 && (_jsx("tr", { children: _jsx("td", { colSpan: 4, className: "py-8 text-center text-sm text-slate-500", children: "No pending invitations." }) }))] })] }) }))] })), tab === 'former' && canManage && (_jsxs("div", { children: [formerLoading && (_jsx("div", { className: "flex items-center justify-center py-12", children: _jsx("div", { className: "h-6 w-6 animate-spin rounded-full border-2 border-blue-500 border-t-transparent" }) })), formerError && (_jsx("div", { className: "rounded-md bg-red-50 border border-red-200 px-4 py-3 text-sm text-red-700", children: formerError })), !formerLoading && !formerError && (_jsx("div", { className: "overflow-hidden rounded-lg border border-slate-200 shadow-sm", children: _jsxs("table", { className: "w-full text-left", children: [_jsx("thead", { className: "bg-slate-50 border-b border-slate-200", children: _jsxs("tr", { children: [_jsx("th", { className: "py-3 px-4 text-xs font-semibold uppercase tracking-wide text-slate-500", children: "Member" }), _jsx("th", { className: "py-3 px-4 text-xs font-semibold uppercase tracking-wide text-slate-500", children: "Former Role" }), _jsx("th", { className: "py-3 px-4 text-xs font-semibold uppercase tracking-wide text-slate-500", children: "Removed" }), _jsx("th", { className: "py-3 px-4 text-xs font-semibold uppercase tracking-wide text-slate-500", children: "Reason" })] }) }), _jsxs("tbody", { className: "bg-white divide-y divide-slate-100", children: [formerOnly.map((member) => (_jsxs("tr", { className: "hover:bg-slate-50 transition-colors", children: [_jsx("td", { className: "py-3 px-4", children: _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-sm font-medium text-slate-700", children: member.name ?? member.email }), member.name && _jsx("span", { className: "text-xs text-slate-400", children: member.email })] }) }), _jsx("td", { className: "py-3 px-4", children: _jsx(RoleBadge, { role: member.role }) }), _jsx("td", { className: "py-3 px-4 text-xs text-slate-500", children: member.removed_at ? new Date(member.removed_at).toLocaleDateString() : '—' }), _jsx("td", { className: "py-3 px-4 text-xs text-slate-500", children: member.removal_reason ?? '—' })] }, member.id))), formerOnly.length === 0 && (_jsx("tr", { children: _jsx("td", { colSpan: 4, className: "py-8 text-center text-sm text-slate-500", children: "No former members." }) }))] })] }) }))] }))] }));
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=MembersPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MembersPage.js","sourceRoot":"","sources":["../../../src/client/pages/MembersPage.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { OrgRole } from '../types.js';
|
|
3
|
+
export interface OrgPeoplePageProps {
|
|
4
|
+
orgId: number;
|
|
5
|
+
/** Optional hook for real email invites in Phase 2 — no-op by default. */
|
|
6
|
+
onInvite?: (data: {
|
|
7
|
+
email: string;
|
|
8
|
+
orgId: number;
|
|
9
|
+
role: OrgRole;
|
|
10
|
+
userId: number;
|
|
11
|
+
}) => void | Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export declare function OrgPeoplePage({ orgId, onInvite }: OrgPeoplePageProps): React.ReactElement;
|
|
14
|
+
//# sourceMappingURL=OrgPeoplePage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrgPeoplePage.d.ts","sourceRoot":"","sources":["../../../src/client/pages/OrgPeoplePage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAQ3C,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,OAAO,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,CAsFzF"}
|