@authhero/react-admin 0.10.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.
Files changed (110) hide show
  1. package/.eslintrc.js +21 -0
  2. package/.vercelignore +4 -0
  3. package/CHANGELOG.md +56 -0
  4. package/LICENSE +21 -0
  5. package/README.md +50 -0
  6. package/index.html +125 -0
  7. package/package.json +61 -0
  8. package/prettier.config.js +1 -0
  9. package/public/favicon.ico +0 -0
  10. package/public/manifest.json +15 -0
  11. package/src/App.spec.tsx +42 -0
  12. package/src/App.tsx +232 -0
  13. package/src/AuthCallback.tsx +138 -0
  14. package/src/Layout.tsx +12 -0
  15. package/src/TenantsApp.tsx +115 -0
  16. package/src/auth0DataProvider.ts +1242 -0
  17. package/src/authProvider.ts +521 -0
  18. package/src/components/CertificateErrorDialog.tsx +116 -0
  19. package/src/components/DomainSelector.tsx +401 -0
  20. package/src/components/TenantAppBar.tsx +83 -0
  21. package/src/components/TenantLayout.tsx +25 -0
  22. package/src/components/TenantsAppBar.tsx +21 -0
  23. package/src/components/TenantsLayout.tsx +28 -0
  24. package/src/components/activity/ActivityDashboard.tsx +381 -0
  25. package/src/components/activity/index.ts +1 -0
  26. package/src/components/branding/BrandingList.tsx +0 -0
  27. package/src/components/branding/BrandingShow.tsx +0 -0
  28. package/src/components/branding/ThemesTab.tsx +286 -0
  29. package/src/components/branding/edit.tsx +149 -0
  30. package/src/components/branding/hooks/useThemesData.ts +123 -0
  31. package/src/components/branding/index.ts +2 -0
  32. package/src/components/branding/list.tsx +12 -0
  33. package/src/components/clients/create.tsx +12 -0
  34. package/src/components/clients/edit.tsx +1285 -0
  35. package/src/components/clients/index.ts +3 -0
  36. package/src/components/clients/list.tsx +37 -0
  37. package/src/components/common/DateAgo.tsx +6 -0
  38. package/src/components/common/JsonOutput.tsx +26 -0
  39. package/src/components/common/index.ts +1 -0
  40. package/src/components/connections/create.tsx +35 -0
  41. package/src/components/connections/edit.tsx +212 -0
  42. package/src/components/connections/index.ts +3 -0
  43. package/src/components/connections/list.tsx +15 -0
  44. package/src/components/custom-domains/create.tsx +26 -0
  45. package/src/components/custom-domains/edit.tsx +101 -0
  46. package/src/components/custom-domains/index.ts +3 -0
  47. package/src/components/custom-domains/list.tsx +16 -0
  48. package/src/components/flows/create.tsx +30 -0
  49. package/src/components/flows/edit.tsx +238 -0
  50. package/src/components/flows/index.ts +3 -0
  51. package/src/components/flows/list.tsx +15 -0
  52. package/src/components/forms/FlowEditor.tsx +1363 -0
  53. package/src/components/forms/NodeEditor.tsx +1119 -0
  54. package/src/components/forms/RichTextEditor.tsx +145 -0
  55. package/src/components/forms/create.tsx +30 -0
  56. package/src/components/forms/edit.tsx +256 -0
  57. package/src/components/forms/index.ts +3 -0
  58. package/src/components/forms/list.tsx +16 -0
  59. package/src/components/hooks/create.tsx +96 -0
  60. package/src/components/hooks/edit.tsx +114 -0
  61. package/src/components/hooks/index.ts +3 -0
  62. package/src/components/hooks/list.tsx +17 -0
  63. package/src/components/listActions/PostListActions.tsx +10 -0
  64. package/src/components/logs/LogIcon.tsx +32 -0
  65. package/src/components/logs/LogShow.tsx +82 -0
  66. package/src/components/logs/LogType.tsx +38 -0
  67. package/src/components/logs/index.ts +4 -0
  68. package/src/components/logs/list.tsx +41 -0
  69. package/src/components/organizations/create.tsx +13 -0
  70. package/src/components/organizations/edit.tsx +682 -0
  71. package/src/components/organizations/index.ts +3 -0
  72. package/src/components/organizations/list.tsx +21 -0
  73. package/src/components/resource-servers/create.tsx +87 -0
  74. package/src/components/resource-servers/edit.tsx +121 -0
  75. package/src/components/resource-servers/index.ts +3 -0
  76. package/src/components/resource-servers/list.tsx +47 -0
  77. package/src/components/roles/create.tsx +12 -0
  78. package/src/components/roles/edit.tsx +426 -0
  79. package/src/components/roles/index.ts +3 -0
  80. package/src/components/roles/list.tsx +24 -0
  81. package/src/components/sessions/edit.tsx +101 -0
  82. package/src/components/sessions/index.ts +3 -0
  83. package/src/components/sessions/list.tsx +20 -0
  84. package/src/components/sessions/show.tsx +113 -0
  85. package/src/components/settings/edit.tsx +236 -0
  86. package/src/components/settings/index.ts +2 -0
  87. package/src/components/settings/list.tsx +14 -0
  88. package/src/components/tenants/create.tsx +20 -0
  89. package/src/components/tenants/edit.tsx +54 -0
  90. package/src/components/tenants/index.ts +2 -0
  91. package/src/components/tenants/list.tsx +67 -0
  92. package/src/components/themes/edit.tsx +200 -0
  93. package/src/components/themes/index.ts +2 -0
  94. package/src/components/themes/list.tsx +12 -0
  95. package/src/components/users/create.tsx +144 -0
  96. package/src/components/users/edit.tsx +1711 -0
  97. package/src/components/users/index.ts +3 -0
  98. package/src/components/users/list.tsx +35 -0
  99. package/src/data.json +121 -0
  100. package/src/dataProvider.ts +97 -0
  101. package/src/index.tsx +106 -0
  102. package/src/lib/logs.ts +21 -0
  103. package/src/types/reactflow.d.ts +86 -0
  104. package/src/utils/domainUtils.ts +169 -0
  105. package/src/utils/tokenUtils.ts +75 -0
  106. package/src/vite-env.d.ts +1 -0
  107. package/tsconfig.json +37 -0
  108. package/tsconfig.node.json +10 -0
  109. package/vercel.json +17 -0
  110. package/vite.config.ts +30 -0
@@ -0,0 +1,32 @@
1
+ import { LogTypes } from "../../lib/logs";
2
+ import DoneIcon from "@mui/icons-material/Done";
3
+ import CloseIcon from "@mui/icons-material/Close";
4
+ import EmailIcon from "@mui/icons-material/Email";
5
+ import ErrorIcon from "@mui/icons-material/Error";
6
+ import QuestionMarkIcon from "@mui/icons-material/QuestionMark";
7
+
8
+ export function LogIcon({ type: logType }: { type: LogTypes }) {
9
+ switch (logType) {
10
+ case LogTypes.SUCCESS_API_OPERATION:
11
+ case LogTypes.SUCCESS_SILENT_AUTH:
12
+ case LogTypes.SUCCESS_SIGNUP:
13
+ case LogTypes.SUCCESS_LOGIN:
14
+ case LogTypes.SUCCESS_LOGOUT:
15
+ case LogTypes.SUCCESS_CROSS_ORIGIN_AUTHENTICATION:
16
+ case LogTypes.SUCCESS_EXCHANGE_AUTHORIZATION_CODE_FOR_ACCESS_TOKEN:
17
+ return <DoneIcon />;
18
+ case LogTypes.FAILED_SILENT_AUTH:
19
+ case LogTypes.FAILED_SIGNUP:
20
+ case LogTypes.FAILED_LOGIN_INCORRECT_PASSWORD:
21
+ case LogTypes.FAILED_LOGIN_INVALID_EMAIL_USERNAME:
22
+ case LogTypes.FAILED_CROSS_ORIGIN_AUTHENTICATION:
23
+ case LogTypes.FAILED_EXCHANGE_AUTHORIZATION_CODE_FOR_ACCESS_TOKEN:
24
+ return <CloseIcon />;
25
+ case LogTypes.CODE_LINK_SENT:
26
+ return <EmailIcon />;
27
+ case LogTypes.FAILED_LOGIN:
28
+ return <ErrorIcon />;
29
+ default:
30
+ return <QuestionMarkIcon />;
31
+ }
32
+ }
@@ -0,0 +1,82 @@
1
+ import {
2
+ Show,
3
+ FunctionField,
4
+ SimpleShowLayout,
5
+ TextField,
6
+ ReferenceField,
7
+ useRecordContext,
8
+ } from "react-admin";
9
+ import { LogType, LogIcon } from "../logs";
10
+ import { JsonOutput } from "../common/JsonOutput";
11
+ import { Link } from "react-admin";
12
+
13
+ const UserIdField = () => {
14
+ const record = useRecordContext();
15
+
16
+ if (!record?.user_id) return <>-</>;
17
+
18
+ return <Link to={`/users/${record.user_id}`}>{record.user_id}</Link>;
19
+ };
20
+
21
+ const IpAddressField = () => {
22
+ const record = useRecordContext();
23
+
24
+ if (!record?.ip) return <>-</>;
25
+
26
+ return (
27
+ <Link
28
+ to={`/logs?displayedFilters=%7B%22ip%22%3Atrue%7D&filter=%7B%22ip%22%3A%22${encodeURIComponent(record.ip)}%22%7D`}
29
+ >
30
+ {record.ip}
31
+ </Link>
32
+ );
33
+ };
34
+
35
+ export function LogShow() {
36
+ return (
37
+ <Show>
38
+ <SimpleShowLayout>
39
+ <TextField source="id" />
40
+ <TextField source="tenant_id" />
41
+ <FunctionField label="User ID" render={() => <UserIdField />} />
42
+ <TextField source="user_name" />
43
+ <FunctionField label="IP Address" render={() => <IpAddressField />} />
44
+ <TextField source="description" />
45
+ <TextField source="client_id" />
46
+ <TextField source="client_name" />
47
+ <TextField source="user_agent" />
48
+ <TextField source="log_id" />
49
+ <FunctionField
50
+ source="details"
51
+ render={(record: any) => <JsonOutput data={record.details} />}
52
+ />
53
+ <FunctionField
54
+ source="success"
55
+ render={(record: any) => <LogIcon type={record.type} />}
56
+ />
57
+ <FunctionField
58
+ source="type"
59
+ render={(record: any) => <LogType type={record.type} />}
60
+ />
61
+ <FunctionField
62
+ source="date"
63
+ render={(record: any) => (
64
+ <span>
65
+ {record.date ? new Date(record.date).toLocaleString() : "-"}
66
+ </span>
67
+ )}
68
+ />
69
+ <TextField source="auth0_client" />
70
+ <TextField source="isMobile" />
71
+ <TextField source="connection" />
72
+ <TextField source="connection_id" />
73
+ <TextField source="audience" />
74
+ <TextField source="scope" />
75
+ <TextField source="strategy" />
76
+ <TextField source="strategy_type" />
77
+ <TextField source="hostname" />
78
+ <TextField source="session_connection" />
79
+ </SimpleShowLayout>
80
+ </Show>
81
+ );
82
+ }
@@ -0,0 +1,38 @@
1
+ import { LogTypes } from "../../lib/logs";
2
+
3
+ export function LogType({ type: logType }: { type: LogTypes }) {
4
+ switch (logType) {
5
+ case LogTypes.SUCCESS_API_OPERATION:
6
+ return "Success API Operation";
7
+ case LogTypes.SUCCESS_SILENT_AUTH:
8
+ return "Success Silent Auth";
9
+ case LogTypes.FAILED_SILENT_AUTH:
10
+ return "Failed Silent Auth";
11
+ case LogTypes.SUCCESS_SIGNUP:
12
+ return "Success Signup";
13
+ case LogTypes.FAILED_SIGNUP:
14
+ return "Failed Signup";
15
+ case LogTypes.SUCCESS_LOGIN:
16
+ return "Success Login";
17
+ case LogTypes.FAILED_LOGIN_INCORRECT_PASSWORD:
18
+ return "Failed Login Incorrect Password";
19
+ case LogTypes.FAILED_LOGIN_INVALID_EMAIL_USERNAME:
20
+ return "Failed Login Invalid Email Username";
21
+ case LogTypes.SUCCESS_LOGOUT:
22
+ return "Success Logout";
23
+ case LogTypes.SUCCESS_CROSS_ORIGIN_AUTHENTICATION:
24
+ return "Success Cross Origin Authentication";
25
+ case LogTypes.FAILED_CROSS_ORIGIN_AUTHENTICATION:
26
+ return "Failed Cross Origin Authentication";
27
+ case LogTypes.CODE_LINK_SENT:
28
+ return "Code Link Email Sent";
29
+ case LogTypes.FAILED_LOGIN:
30
+ return "Failed Login";
31
+ case LogTypes.SUCCESS_EXCHANGE_AUTHORIZATION_CODE_FOR_ACCESS_TOKEN:
32
+ return "Success Exchange Authorization Code for Access Token";
33
+ case LogTypes.FAILED_EXCHANGE_AUTHORIZATION_CODE_FOR_ACCESS_TOKEN:
34
+ return "Failed Exchange Authorization Code for Access Token";
35
+ default:
36
+ return `${logType}`;
37
+ }
38
+ }
@@ -0,0 +1,4 @@
1
+ export * from "./list";
2
+ export * from "./LogIcon";
3
+ export * from "./LogType";
4
+ export * from "./LogShow";
@@ -0,0 +1,41 @@
1
+ import {
2
+ List,
3
+ Datagrid,
4
+ TextField,
5
+ TextInput,
6
+ FunctionField,
7
+ } from "react-admin";
8
+ import { PostListActions } from "../listActions/PostListActions";
9
+ import { LogType, LogIcon } from "../logs";
10
+ import { DateAgo } from "../common";
11
+
12
+ export function LogsList() {
13
+ const postFilters = [
14
+ <TextInput key="search" label="Search" source="q" alwaysOn />,
15
+ <TextInput key="ip" label="IP Address" source="ip" />,
16
+ ];
17
+
18
+ return (
19
+ <List
20
+ actions={<PostListActions create="false" />}
21
+ filters={postFilters}
22
+ sort={{ field: "date", order: "DESC" }}
23
+ >
24
+ <Datagrid bulkActionButtons={false} rowClick="show">
25
+ <FunctionField
26
+ source="success"
27
+ render={(record: any) => <LogIcon type={record.type} />}
28
+ />
29
+ <FunctionField
30
+ source="type"
31
+ render={(record: any) => <LogType type={record.type} />}
32
+ />
33
+ <FunctionField
34
+ source="date"
35
+ render={(record: any) => <DateAgo date={record.date} />}
36
+ />
37
+ <TextField source="description" />
38
+ </Datagrid>
39
+ </List>
40
+ );
41
+ }
@@ -0,0 +1,13 @@
1
+ import { Create, SimpleForm, TextInput, required } from "react-admin";
2
+
3
+ export function OrganizationCreate() {
4
+ return (
5
+ <Create>
6
+ <SimpleForm>
7
+ <TextInput source="name" validate={[required()]} />
8
+ <TextInput source="display_name" />
9
+ <TextInput source="description" multiline />
10
+ </SimpleForm>
11
+ </Create>
12
+ );
13
+ }