@schemavaults/auth-ui 0.5.44

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 (144) hide show
  1. package/README.md +27 -0
  2. package/dist/components/AccountCard/account_card.d.ts +15 -0
  3. package/dist/components/AccountCard/account_card.js +21 -0
  4. package/dist/components/AccountCard/account_card.js.map +1 -0
  5. package/dist/components/AccountCard/index.d.ts +2 -0
  6. package/dist/components/AccountCard/index.js +2 -0
  7. package/dist/components/AccountCard/index.js.map +1 -0
  8. package/dist/components/AccountCard/view_admin_page_link.d.ts +7 -0
  9. package/dist/components/AccountCard/view_admin_page_link.js +28 -0
  10. package/dist/components/AccountCard/view_admin_page_link.js.map +1 -0
  11. package/dist/components/AccountCard/view_full_user_profile.d.ts +6 -0
  12. package/dist/components/AccountCard/view_full_user_profile.js +25 -0
  13. package/dist/components/AccountCard/view_full_user_profile.js.map +1 -0
  14. package/dist/components/ApiServersCard/api_servers_card.d.ts +9 -0
  15. package/dist/components/ApiServersCard/api_servers_card.js +12 -0
  16. package/dist/components/ApiServersCard/api_servers_card.js.map +1 -0
  17. package/dist/components/ApiServersCard/index.d.ts +2 -0
  18. package/dist/components/ApiServersCard/index.js +2 -0
  19. package/dist/components/ApiServersCard/index.js.map +1 -0
  20. package/dist/components/ApiServersTable/ApiServersTable.d.ts +7 -0
  21. package/dist/components/ApiServersTable/ApiServersTable.js +28 -0
  22. package/dist/components/ApiServersTable/ApiServersTable.js.map +1 -0
  23. package/dist/components/ApiServersTable/columns.d.ts +3 -0
  24. package/dist/components/ApiServersTable/columns.js +39 -0
  25. package/dist/components/ApiServersTable/columns.js.map +1 -0
  26. package/dist/components/ApiServersTable/index.d.ts +2 -0
  27. package/dist/components/ApiServersTable/index.js +2 -0
  28. package/dist/components/ApiServersTable/index.js.map +1 -0
  29. package/dist/components/ApiServersTable/useApiServersList.d.ts +16 -0
  30. package/dist/components/ApiServersTable/useApiServersList.js +92 -0
  31. package/dist/components/ApiServersTable/useApiServersList.js.map +1 -0
  32. package/dist/components/AppsCard/apps_card.d.ts +11 -0
  33. package/dist/components/AppsCard/apps_card.js +11 -0
  34. package/dist/components/AppsCard/apps_card.js.map +1 -0
  35. package/dist/components/AppsCard/index.d.ts +2 -0
  36. package/dist/components/AppsCard/index.js +2 -0
  37. package/dist/components/AppsCard/index.js.map +1 -0
  38. package/dist/components/AppsTable/AppDomainsList.d.ts +7 -0
  39. package/dist/components/AppsTable/AppDomainsList.js +21 -0
  40. package/dist/components/AppsTable/AppDomainsList.js.map +1 -0
  41. package/dist/components/AppsTable/AppsTable.d.ts +9 -0
  42. package/dist/components/AppsTable/AppsTable.js +36 -0
  43. package/dist/components/AppsTable/AppsTable.js.map +1 -0
  44. package/dist/components/AppsTable/columns.d.ts +4 -0
  45. package/dist/components/AppsTable/columns.js +67 -0
  46. package/dist/components/AppsTable/columns.js.map +1 -0
  47. package/dist/components/AppsTable/frontend_app_actions.d.ts +8 -0
  48. package/dist/components/AppsTable/frontend_app_actions.js +124 -0
  49. package/dist/components/AppsTable/frontend_app_actions.js.map +1 -0
  50. package/dist/components/AppsTable/index.d.ts +3 -0
  51. package/dist/components/AppsTable/index.js +2 -0
  52. package/dist/components/AppsTable/index.js.map +1 -0
  53. package/dist/components/AppsTable/launchWebApp.d.ts +9 -0
  54. package/dist/components/AppsTable/launchWebApp.js +47 -0
  55. package/dist/components/AppsTable/launchWebApp.js.map +1 -0
  56. package/dist/components/AppsTable/preloaded_apps_table_data.d.ts +5 -0
  57. package/dist/components/AppsTable/preloaded_apps_table_data.js +2 -0
  58. package/dist/components/AppsTable/preloaded_apps_table_data.js.map +1 -0
  59. package/dist/components/AppsTable/send-authorize-app-request.d.ts +9 -0
  60. package/dist/components/AppsTable/send-authorize-app-request.js +57 -0
  61. package/dist/components/AppsTable/send-authorize-app-request.js.map +1 -0
  62. package/dist/components/AppsTable/useAppDomains.d.ts +8 -0
  63. package/dist/components/AppsTable/useAppDomains.js +75 -0
  64. package/dist/components/AppsTable/useAppDomains.js.map +1 -0
  65. package/dist/components/AppsTable/useAppsList.d.ts +28 -0
  66. package/dist/components/AppsTable/useAppsList.js +97 -0
  67. package/dist/components/AppsTable/useAppsList.js.map +1 -0
  68. package/dist/components/ConnectAppToApiDialog/ConnectAppToApiDialog.d.ts +2 -0
  69. package/dist/components/ConnectAppToApiDialog/ConnectAppToApiDialog.js +99 -0
  70. package/dist/components/ConnectAppToApiDialog/ConnectAppToApiDialog.js.map +1 -0
  71. package/dist/components/ConnectAppToApiDialog/index.d.ts +2 -0
  72. package/dist/components/ConnectAppToApiDialog/index.js +2 -0
  73. package/dist/components/ConnectAppToApiDialog/index.js.map +1 -0
  74. package/dist/components/CreateApiServerDialog/CreateApiServerDialog.d.ts +7 -0
  75. package/dist/components/CreateApiServerDialog/CreateApiServerDialog.js +118 -0
  76. package/dist/components/CreateApiServerDialog/CreateApiServerDialog.js.map +1 -0
  77. package/dist/components/CreateApiServerDialog/index.d.ts +2 -0
  78. package/dist/components/CreateApiServerDialog/index.js +2 -0
  79. package/dist/components/CreateApiServerDialog/index.js.map +1 -0
  80. package/dist/components/CreateAppDialog/CreateAppDialog.d.ts +7 -0
  81. package/dist/components/CreateAppDialog/CreateAppDialog.js +114 -0
  82. package/dist/components/CreateAppDialog/CreateAppDialog.js.map +1 -0
  83. package/dist/components/CreateAppDialog/index.d.ts +2 -0
  84. package/dist/components/CreateAppDialog/index.js +2 -0
  85. package/dist/components/CreateAppDialog/index.js.map +1 -0
  86. package/dist/components/CreateAppDomainDialog/CreateAppDomainDialog.d.ts +10 -0
  87. package/dist/components/CreateAppDomainDialog/CreateAppDomainDialog.js +125 -0
  88. package/dist/components/CreateAppDomainDialog/CreateAppDomainDialog.js.map +1 -0
  89. package/dist/components/CreateAppDomainDialog/index.d.ts +2 -0
  90. package/dist/components/CreateAppDomainDialog/index.js +2 -0
  91. package/dist/components/CreateAppDomainDialog/index.js.map +1 -0
  92. package/dist/components/CreateInviteCodeDialog/CreateInviteCodeDialog.d.ts +3 -0
  93. package/dist/components/CreateInviteCodeDialog/CreateInviteCodeDialog.js +127 -0
  94. package/dist/components/CreateInviteCodeDialog/CreateInviteCodeDialog.js.map +1 -0
  95. package/dist/components/CreateInviteCodeDialog/index.d.ts +1 -0
  96. package/dist/components/CreateInviteCodeDialog/index.js +2 -0
  97. package/dist/components/CreateInviteCodeDialog/index.js.map +1 -0
  98. package/dist/components/InviteCodesCard/InviteCodesCard.d.ts +9 -0
  99. package/dist/components/InviteCodesCard/InviteCodesCard.js +76 -0
  100. package/dist/components/InviteCodesCard/InviteCodesCard.js.map +1 -0
  101. package/dist/components/InviteCodesCard/index.d.ts +2 -0
  102. package/dist/components/InviteCodesCard/index.js +2 -0
  103. package/dist/components/InviteCodesCard/index.js.map +1 -0
  104. package/dist/components/InviteCodesTable/InviteCodesTable.d.ts +7 -0
  105. package/dist/components/InviteCodesTable/InviteCodesTable.js +23 -0
  106. package/dist/components/InviteCodesTable/InviteCodesTable.js.map +1 -0
  107. package/dist/components/InviteCodesTable/columns.d.ts +3 -0
  108. package/dist/components/InviteCodesTable/columns.js +71 -0
  109. package/dist/components/InviteCodesTable/columns.js.map +1 -0
  110. package/dist/components/InviteCodesTable/index.d.ts +2 -0
  111. package/dist/components/InviteCodesTable/index.js +2 -0
  112. package/dist/components/InviteCodesTable/index.js.map +1 -0
  113. package/dist/components/SignOutButton/SignOutButton.d.ts +9 -0
  114. package/dist/components/SignOutButton/SignOutButton.js +12 -0
  115. package/dist/components/SignOutButton/SignOutButton.js.map +1 -0
  116. package/dist/components/SignOutButton/index.d.ts +2 -0
  117. package/dist/components/SignOutButton/index.js +2 -0
  118. package/dist/components/SignOutButton/index.js.map +1 -0
  119. package/dist/components/UsersCard/UsersCard.d.ts +9 -0
  120. package/dist/components/UsersCard/UsersCard.js +79 -0
  121. package/dist/components/UsersCard/UsersCard.js.map +1 -0
  122. package/dist/components/UsersCard/index.d.ts +2 -0
  123. package/dist/components/UsersCard/index.js +2 -0
  124. package/dist/components/UsersCard/index.js.map +1 -0
  125. package/dist/components/UsersTable/UsersTable.d.ts +7 -0
  126. package/dist/components/UsersTable/UsersTable.js +24 -0
  127. package/dist/components/UsersTable/UsersTable.js.map +1 -0
  128. package/dist/components/UsersTable/columns.d.ts +3 -0
  129. package/dist/components/UsersTable/columns.js +119 -0
  130. package/dist/components/UsersTable/columns.js.map +1 -0
  131. package/dist/components/UsersTable/index.d.ts +2 -0
  132. package/dist/components/UsersTable/index.js +2 -0
  133. package/dist/components/UsersTable/index.js.map +1 -0
  134. package/dist/components/index.d.ts +17 -0
  135. package/dist/components/index.js +9 -0
  136. package/dist/components/index.js.map +1 -0
  137. package/dist/index.d.ts +2 -0
  138. package/dist/index.js +3 -0
  139. package/dist/index.js.map +1 -0
  140. package/dist/lib/printDateTime.d.ts +2 -0
  141. package/dist/lib/printDateTime.js +21 -0
  142. package/dist/lib/printDateTime.js.map +1 -0
  143. package/package.json +72 -0
  144. package/tsconfig.json +25 -0
@@ -0,0 +1,127 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Button, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Input, Textarea, useToast, } from "@schemavaults/ui";
4
+ import { useCallback } from "react";
5
+ import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, useForm, } from "@schemavaults/ui";
6
+ import { useAppEnvironment, useAuth } from "@schemavaults/auth-react-provider";
7
+ import { useSWRConfig } from "swr";
8
+ import { inviteCodeDefinitionSchema, } from "@schemavaults/auth-common";
9
+ import { SCHEMAVAULTS_AUTH_APP_DEFINITION, } from "@schemavaults/app-definitions";
10
+ import { zodResolver } from "@hookform/resolvers/zod";
11
+ import { SwatchBook } from "lucide-react";
12
+ export function CreateInviteCodeDialog() {
13
+ const { toast } = useToast();
14
+ const form = useForm({
15
+ resolver: zodResolver(inviteCodeDefinitionSchema),
16
+ defaultValues: {
17
+ invite_code: "",
18
+ description: "",
19
+ max_uses: 1,
20
+ created_at: Date.now(),
21
+ },
22
+ });
23
+ const auth = useAuth();
24
+ const { mutate } = useSWRConfig();
25
+ const environment = useAppEnvironment();
26
+ const clearInviteCodesCache = useCallback(() => {
27
+ mutate((key) => typeof key === "string" && key.startsWith("/api/admin/invite-codes"), undefined, { revalidate: true });
28
+ }, [mutate]);
29
+ async function onSubmit(values) {
30
+ if (environment === "development") {
31
+ console.log("Submitting invite code creation form with values: ", values);
32
+ toast({
33
+ variant: "default",
34
+ title: "Submitting invite code creation form...",
35
+ });
36
+ }
37
+ const newInviteCode = {
38
+ ...values,
39
+ created_at: Date.now(),
40
+ };
41
+ const authClient = auth.ready ? auth.client.current : undefined;
42
+ if (!authClient) {
43
+ toast({
44
+ variant: "destructive",
45
+ title: "Auth client not ready",
46
+ description: `Cannot acquire an access token yet`,
47
+ });
48
+ return;
49
+ }
50
+ let auth_access_jwt;
51
+ try {
52
+ const auth_jwt = await authClient.acquireAccessToken({
53
+ token_id: SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id,
54
+ audience: SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id,
55
+ });
56
+ if (!auth_jwt)
57
+ throw new Error("Failed to acquire auth access token");
58
+ auth_access_jwt = auth_jwt;
59
+ }
60
+ catch (e) {
61
+ toast({
62
+ variant: "destructive",
63
+ title: "Error loading authentication access token",
64
+ description: e instanceof Error ? e.message : `Failed to prepare network request`,
65
+ });
66
+ return;
67
+ }
68
+ try {
69
+ const response = await fetch(`/api/admin/invite-codes`, {
70
+ method: "POST",
71
+ headers: {
72
+ Authorization: `Bearer ${auth_access_jwt.token}}`,
73
+ },
74
+ body: JSON.stringify(newInviteCode),
75
+ });
76
+ if (!response.ok || response.status !== 200) {
77
+ throw new Error(`Invite code creation request has bad status: ${response.status}`);
78
+ }
79
+ const body = await response.json();
80
+ if (typeof body !== "object") {
81
+ throw new Error("Expected JSON object response from invite code creation attempt");
82
+ }
83
+ if (!Object.hasOwn(body, "success")) {
84
+ throw new Error("No success field in response");
85
+ }
86
+ if (!(typeof body.success === "boolean" &&
87
+ body.success)) {
88
+ console.error(body);
89
+ throw new Error("Invite code creation response has success flag set to false");
90
+ }
91
+ if (environment === "development") {
92
+ console.log("Received response: ", body);
93
+ }
94
+ }
95
+ catch (e) {
96
+ toast({
97
+ variant: "destructive",
98
+ title: "Failed to create new invite code!",
99
+ description: e instanceof Error ? e.message : `Failed to send network request`,
100
+ });
101
+ return;
102
+ }
103
+ toast({
104
+ variant: "default",
105
+ title: "Created new invite code successfully!",
106
+ description: "New users should now be able to use it to register!",
107
+ });
108
+ clearInviteCodesCache();
109
+ return;
110
+ }
111
+ return (_jsxs(Dialog, { children: [_jsx(DialogTrigger, { asChild: true, children: _jsxs(Button, { id: "open-create-invite-code-dialog-button", children: [_jsx(SwatchBook, { className: "h-4 w-4 mr-2" }), " Create Invite Code"] }) }), _jsx(DialogContent, { id: "create-invite-code-dialog-content", className: "sm:max-w-[425px]", children: _jsx(Form, { ...form, children: _jsxs("form", { onSubmit: form.handleSubmit(onSubmit, function onSubmitInviteCodeCreationFormError(e) {
112
+ console.error(e);
113
+ toast({
114
+ variant: "destructive",
115
+ title: "Failed to submit invite code creation form",
116
+ description: "Failed to parse form into a valid invite code definition object!",
117
+ });
118
+ }), className: "flex flex-col justify-start gap-4", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Create a new invite code" }), _jsx(DialogDescription, { children: "Create a new invite code for a new promotion or group of users." })] }), _jsx(FormField, { control: form.control, name: "invite_code", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Invite Code" }), _jsx(FormControl, { children: _jsx(Input, { placeholder: "BLAHBLAHBLAH420", ...field, name: "invite_code" }) }), _jsx(FormDescription, { children: "Enter the new invite code." }), _jsx(FormMessage, {})] })) }), _jsx(FormField, { control: form.control, name: "description", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Description" }), _jsx(FormControl, { children: _jsx(Textarea, { placeholder: "e.g. Facebook Ad Campaign", ...field, name: "description" }) }), _jsx(FormDescription, { children: "Describe the promotion or group this invite code is for." }), _jsx(FormMessage, {})] })) }), _jsx(FormField, { control: form.control, name: "max_uses", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Maximum # of Uses" }), _jsx(FormControl, { children: _jsx(Input, { placeholder: "99999", ...field, name: "max_uses", onChange: (e) => {
119
+ let asInt = e.target.valueAsNumber;
120
+ if (typeof asInt !== "number" || isNaN(asInt)) {
121
+ asInt = 1;
122
+ }
123
+ field.onChange(asInt);
124
+ }, type: "number", step: 1, min: 1 }) }), _jsx(FormDescription, { children: "Limit usage of this code to a certain number of registrations." }), _jsx(FormMessage, {})] })) }), _jsx(DialogFooter, { children: _jsxs(Button, { type: "submit", id: "submit-create-invite-code-form-button", children: [_jsx(SwatchBook, { className: "h-4 w-4 mr-2" }), "Create new invite code"] }) })] }) }) })] }));
125
+ }
126
+ export default CreateInviteCodeDialog;
127
+ //# sourceMappingURL=CreateInviteCodeDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateInviteCodeDialog.js","sourceRoot":"","sources":["../../../src/components/CreateInviteCodeDialog/CreateInviteCodeDialog.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { CreateInviteCodeDialog, CreateInviteCodeDialog as default, } from "./CreateInviteCodeDialog";
@@ -0,0 +1,2 @@
1
+ export { CreateInviteCodeDialog, CreateInviteCodeDialog as default, } from "./CreateInviteCodeDialog";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CreateInviteCodeDialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,sBAAsB,IAAI,OAAO,GAClC,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ReactElement } from "react";
2
+ import { type InviteCodeDefinition } from "@schemavaults/auth-common";
3
+ export interface InviteCodesCardProps {
4
+ cardTitle?: string;
5
+ cardDescription?: string;
6
+ cardClassName?: string;
7
+ preloaded?: readonly InviteCodeDefinition[];
8
+ }
9
+ export declare function InviteCodesCard(props: InviteCodesCardProps): ReactElement;
@@ -0,0 +1,76 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, cn, } from "@schemavaults/ui";
4
+ import { useAuth, } from "@schemavaults/auth-react-provider";
5
+ import InviteCodesTable from "../InviteCodesTable";
6
+ import { inviteCodeDefinitionSchema, } from "@schemavaults/auth-common";
7
+ import useSWR from "swr";
8
+ import { SCHEMAVAULTS_AUTH_APP_DEFINITION } from "@schemavaults/app-definitions";
9
+ export function InviteCodesCard(props) {
10
+ const authClient = useAuth();
11
+ const cardTitle = props.cardTitle ?? "Invite Codes";
12
+ const cardDescription = props.cardDescription ??
13
+ "View and manage what invite codes are available for new users to register with.";
14
+ const cardClassName = cn("w-full", props.cardClassName);
15
+ const listAllInviteCodesEndpoint = "/api/admin/invite-codes/list";
16
+ const invite_codes = useSWR(listAllInviteCodesEndpoint, async () => {
17
+ if (!authClient.ready || !authClient.client.current) {
18
+ throw new Error("Auth client is not ready to list data!");
19
+ }
20
+ const auth = authClient.client.current;
21
+ let jwt;
22
+ try {
23
+ const accessToken = await auth.acquireAccessToken({
24
+ audience: SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id,
25
+ token_id: SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id,
26
+ });
27
+ jwt = accessToken.token;
28
+ }
29
+ catch (e) {
30
+ console.error("Failed to acquire access token in order to list invite codes: ", e);
31
+ throw new Error("Failed to acquire access token in order to list invite codes!");
32
+ }
33
+ try {
34
+ const response = await fetch(listAllInviteCodesEndpoint, {
35
+ method: "GET",
36
+ headers: {
37
+ Authorization: `Bearer ${jwt}`,
38
+ },
39
+ });
40
+ if (!response.ok || response.status !== 200) {
41
+ throw new Error(`Failed to list invite codes (response status: ${response.status})!`);
42
+ }
43
+ const body = await response.json();
44
+ if (typeof body !== "object" ||
45
+ !body ||
46
+ !("success" in body) ||
47
+ !body.success) {
48
+ throw new Error("Received failure response when attempting to list invite codes");
49
+ }
50
+ if (!("data" in body) ||
51
+ typeof body.data !== "object" ||
52
+ !body.data ||
53
+ !("invite_codes" in body.data) ||
54
+ !Array.isArray(body.data.invite_codes)) {
55
+ throw new Error("Failed to extract 'invite_codes' array from response!");
56
+ }
57
+ const parsed_invite_codes = await inviteCodeDefinitionSchema
58
+ .array()
59
+ .safeParseAsync(body.data.invite_codes);
60
+ if (!parsed_invite_codes.success) {
61
+ console.error(`Failed to parse 'invite_codes' from response object: `, parsed_invite_codes.error);
62
+ throw new Error("Failed to parse 'invite_codes' from response object!");
63
+ }
64
+ const invite_codes = parsed_invite_codes.data;
65
+ return invite_codes;
66
+ }
67
+ catch (e) {
68
+ console.error(`Failed to list invite codes: `, e);
69
+ throw new Error(`Failed to list invite codes!`);
70
+ }
71
+ }, {
72
+ fallbackData: props.preloaded,
73
+ });
74
+ return (_jsxs(Card, { className: cardClassName, children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: cardTitle }), _jsx(CardDescription, { children: cardDescription })] }), _jsx(CardContent, { children: _jsx(InviteCodesTable, { invite_codes: invite_codes }) }), _jsx(CardFooter, { children: _jsx("div", { className: "flex flex-row items-start justify-start gap-2" }) })] }));
75
+ }
76
+ //# sourceMappingURL=InviteCodesCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InviteCodesCard.js","sourceRoot":"","sources":["../../../src/components/InviteCodesCard/InviteCodesCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { InviteCodesCard, InviteCodesCard as default } from "./InviteCodesCard";
2
+ export type { InviteCodesCardProps } from "./InviteCodesCard";
@@ -0,0 +1,2 @@
1
+ export { InviteCodesCard, InviteCodesCard as default } from "./InviteCodesCard";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/InviteCodesCard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,IAAI,OAAO,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ReactElement } from "react";
2
+ import type { SWRResponse } from "swr";
3
+ export interface InviteCodesDatatableProps {
4
+ invite_codes: SWRResponse<readonly InviteCodeDefinition[], Error>;
5
+ }
6
+ import type { InviteCodeDefinition } from "@schemavaults/auth-common";
7
+ export declare function InviteCodesTable({ invite_codes, }: InviteCodesDatatableProps): ReactElement;
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { Datatable } from "@schemavaults/ui";
4
+ import { columns } from "./columns";
5
+ import { Loader2 } from "lucide-react";
6
+ import CreateInviteCodeDialog from "../CreateInviteCodeDialog";
7
+ export function InviteCodesTable({ invite_codes, }) {
8
+ const { isLoading, data } = invite_codes;
9
+ if (!data && isLoading) {
10
+ return (_jsx("div", { className: "min-h-48 w-full flex items-center justify-center", children: _jsx(Loader2, { className: "h-12 w-12 animate-spin" }) }));
11
+ }
12
+ return (_jsx(Datatable, { data: data ? (data.length > 0 ? [...data] : []) : [], columns: columns, initialVisibleColumns: {
13
+ actions: true,
14
+ select: true,
15
+ invite_code: true,
16
+ description: true,
17
+ max_uses: true,
18
+ created_at: false,
19
+ }, HeaderButtons: () => {
20
+ return (_jsx(_Fragment, { children: _jsx(CreateInviteCodeDialog, {}) }));
21
+ }, datatypeLabel: "Invite Code", searchColumn: ['invite_code', 'description'] }));
22
+ }
23
+ //# sourceMappingURL=InviteCodesTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InviteCodesTable.js","sourceRoot":"","sources":["../../../src/components/InviteCodesTable/InviteCodesTable.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAIb,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAMvC,OAAO,sBAAsB,MAAM,qCAAqC,CAAC;AAEzE,MAAM,UAAU,gBAAgB,CAAC,EAC/B,YAAY,GACc;IAC1B,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;IAEzC,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;QACvB,OAAO,CACL,cAAK,SAAS,EAAC,kDAAkD,YAC/D,KAAC,OAAO,IAAC,SAAS,EAAC,wBAAwB,GAAG,GAC1C,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,SAAS,IACR,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EACpD,OAAO,EAAE,OAAO,EAChB,qBAAqB,EAAE;YACrB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,KAAK;SAClB,EACD,aAAa,EAAE,GAAiB,EAAE;YAChC,OAAO,CACL,4BACE,KAAC,sBAAsB,KAAG,GACzB,CACJ,CAAC;QACJ,CAAC,EACD,aAAa,EAAC,aAAa,EAC3B,YAAY,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,GAC5C,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ColumnDef } from "@tanstack/react-table";
2
+ import type { InviteCodeDefinition } from "@schemavaults/auth-common";
3
+ export declare const columns: ColumnDef<InviteCodeDefinition>[];
@@ -0,0 +1,71 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Checkbox, useToast } from "@schemavaults/ui";
4
+ import { Button } from "@schemavaults/ui";
5
+ import { ClipboardCopy, MoreHorizontal } from "lucide-react";
6
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger, } from "@schemavaults/ui";
7
+ import printDateTime from "../../lib/printDateTime";
8
+ export const columns = [
9
+ {
10
+ id: "select",
11
+ header: ({ table }) => (_jsx(Checkbox, { checked: table.getIsAllPageRowsSelected() ||
12
+ (table.getIsSomePageRowsSelected() && "indeterminate"), onCheckedChange: (value) => table.toggleAllPageRowsSelected(!!value), "aria-label": "Select all" })),
13
+ cell: ({ row }) => (_jsx(Checkbox, { checked: row.getIsSelected(), onCheckedChange: (value) => row.toggleSelected(!!value), "aria-label": "Select row" })),
14
+ enableSorting: false,
15
+ enableHiding: false,
16
+ },
17
+ {
18
+ id: "invite_code",
19
+ accessorKey: "invite_code",
20
+ header: "Invite Code",
21
+ },
22
+ {
23
+ id: "description",
24
+ accessorKey: "description",
25
+ header: "Description",
26
+ },
27
+ {
28
+ id: "max_uses",
29
+ accessorKey: "max_uses",
30
+ header: "Max Uses",
31
+ },
32
+ {
33
+ id: "created_at",
34
+ accessorKey: "created_at",
35
+ header: "Creation Time",
36
+ cell: ({ row }) => {
37
+ const invite_code_definition = row.original;
38
+ const created_at = invite_code_definition.created_at;
39
+ const asDate = new Date(created_at);
40
+ return _jsx("div", { children: printDateTime(asDate) });
41
+ },
42
+ },
43
+ {
44
+ id: "actions",
45
+ cell: function InviteCodesTableRowActionsCell({ row }) {
46
+ const { toast } = useToast();
47
+ const invite_code_definition = row.original;
48
+ return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: "ghost", className: "h-8 w-8 p-0", children: [_jsx("span", { className: "sr-only", children: "Open menu" }), _jsx(MoreHorizontal, { className: "h-4 w-4" })] }) }), _jsxs(DropdownMenuContent, { align: "end", children: [_jsx(DropdownMenuLabel, { children: "Actions" }), _jsxs(DropdownMenuItem, { onClick: (e) => {
49
+ e.preventDefault();
50
+ const invite_code = invite_code_definition.invite_code;
51
+ navigator.clipboard
52
+ .writeText(invite_code)
53
+ .then(() => {
54
+ toast({
55
+ title: "Successfully copied invite code to clipboard!",
56
+ description: `You should now be able to paste '${invite_code}' from your clipboard!`,
57
+ });
58
+ })
59
+ .catch((e) => {
60
+ toast({
61
+ title: "Failed to copy invite code to clipboard!",
62
+ description: e instanceof Error
63
+ ? e.message
64
+ : "An unknown error has occurred!",
65
+ });
66
+ });
67
+ }, children: [_jsx(ClipboardCopy, { className: "h-4 w-4 pr-2" }), " Copy Invite Code"] })] })] }));
68
+ },
69
+ },
70
+ ];
71
+ //# sourceMappingURL=columns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"columns.js","sourceRoot":"","sources":["../../../src/components/InviteCodesTable/columns.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { InviteCodesTable, InviteCodesTable as default, } from "./InviteCodesTable";
2
+ export type { InviteCodesDatatableProps } from "./InviteCodesTable";
@@ -0,0 +1,2 @@
1
+ export { InviteCodesTable, InviteCodesTable as default, } from "./InviteCodesTable";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/InviteCodesTable/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,IAAI,OAAO,GAC5B,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { PropsWithChildren, ReactElement, ReactNode } from "react";
2
+ export interface SignOutButtonProps {
3
+ logout_page_href?: string;
4
+ Link: ({ href, children }: PropsWithChildren<{
5
+ href: string;
6
+ }>) => ReactNode;
7
+ }
8
+ export declare function SignOutButton({ logout_page_href, Link, }: SignOutButtonProps): ReactElement;
9
+ export default SignOutButton;
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Button } from "@schemavaults/ui";
4
+ import { LogOut } from "lucide-react";
5
+ export function SignOutButton({ logout_page_href, Link, }) {
6
+ const defaultLogoutPageHref = "/auth/logout";
7
+ return (_jsx(Link, { href: typeof logout_page_href === "string"
8
+ ? logout_page_href
9
+ : defaultLogoutPageHref, children: _jsx(Button, { variant: "destructive", id: "sign-out-button", children: _jsxs("span", { className: "flex flex-row justify-start items-center", children: [_jsx(LogOut, { className: "h-4 w-4 mr-2" }, "sign-out-icon"), " Sign out"] }) }) }));
10
+ }
11
+ export default SignOutButton;
12
+ //# sourceMappingURL=SignOutButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignOutButton.js","sourceRoot":"","sources":["../../../src/components/SignOutButton/SignOutButton.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAOtC,MAAM,UAAU,aAAa,CAAC,EAC5B,gBAAgB,EAChB,IAAI,GACe;IACnB,MAAM,qBAAqB,GAAW,cAAuB,CAAC;IAC9D,OAAO,CACL,KAAC,IAAI,IACH,IAAI,EACF,OAAO,gBAAgB,KAAK,QAAQ;YAClC,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,qBAAqB,YAG3B,KAAC,MAAM,IAAC,OAAO,EAAE,aAAa,EAAE,EAAE,EAAC,iBAAiB,YAClD,gBAAM,SAAS,EAAC,0CAA0C,aACxD,KAAC,MAAM,IAAC,SAAS,EAAC,cAAc,IAAK,eAAe,CAAG,iBAClD,GACA,GACJ,CACR,CAAC;AACJ,CAAC;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { SignOutButton, SignOutButton as default } from "./SignOutButton";
2
+ export type { SignOutButtonProps } from "./SignOutButton";
@@ -0,0 +1,2 @@
1
+ export { SignOutButton, SignOutButton as default } from "./SignOutButton";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/SignOutButton/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ReactElement } from "react";
2
+ import { type UserData } from "@schemavaults/auth-common";
3
+ export interface UsersCardProps {
4
+ cardTitle?: string;
5
+ cardDescription?: string;
6
+ cardClassName?: string;
7
+ preloaded?: readonly UserData[];
8
+ }
9
+ export declare function UsersCard(props: UsersCardProps): ReactElement;
@@ -0,0 +1,79 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, cn, } from "@schemavaults/ui";
4
+ import { useAuth, } from "@schemavaults/auth-react-provider";
5
+ import UsersTable from "../UsersTable";
6
+ import { userDataSchema } from "@schemavaults/auth-common";
7
+ import useSWR from "swr";
8
+ import { SCHEMAVAULTS_AUTH_APP_DEFINITION } from "@schemavaults/app-definitions";
9
+ export function UsersCard(props) {
10
+ const authClient = useAuth();
11
+ const cardTitle = props.cardTitle ?? "Users";
12
+ const cardDescription = props.cardDescription ?? "View and manage registered users.";
13
+ const cardClassName = cn("w-full", props.cardClassName);
14
+ const listAllUsersEndpoint = "/api/admin/users/list";
15
+ const users = useSWR(listAllUsersEndpoint, async () => {
16
+ if (!authClient.ready || !authClient.client.current) {
17
+ throw new Error("Auth client is not ready to list data!");
18
+ }
19
+ const auth = authClient.client.current;
20
+ let jwt;
21
+ try {
22
+ const accessToken = await auth.acquireAccessToken({
23
+ audience: SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id,
24
+ token_id: SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id,
25
+ });
26
+ jwt = accessToken.token;
27
+ }
28
+ catch (e) {
29
+ console.error("Failed to acquire access token in order to list users: ", e);
30
+ throw new Error("Failed to acquire access token in order to list users!");
31
+ }
32
+ try {
33
+ const response = await fetch(listAllUsersEndpoint, {
34
+ method: "GET",
35
+ headers: {
36
+ Authorization: `Bearer ${jwt}`,
37
+ },
38
+ });
39
+ if (!response.ok || response.status !== 200) {
40
+ throw new Error(`Failed to list users (response status: ${response.status})!`);
41
+ }
42
+ const body = await response.json();
43
+ if (typeof body !== "object" ||
44
+ !body ||
45
+ !("success" in body) ||
46
+ !body.success) {
47
+ throw new Error("Received failure response when attempting to list users");
48
+ }
49
+ if (!("data" in body) ||
50
+ typeof body.data !== "object" ||
51
+ !body.data ||
52
+ !("users" in body.data) ||
53
+ !Array.isArray(body.data.users)) {
54
+ throw new Error("Failed to extract 'users' array from response!");
55
+ }
56
+ const usersWithSub = body.data.users.map((user) => ({
57
+ ...user,
58
+ sub: user.uid,
59
+ }));
60
+ const parsed_users = await userDataSchema
61
+ .array()
62
+ .safeParseAsync(usersWithSub);
63
+ if (!parsed_users.success) {
64
+ console.error(`Failed to parse 'users' from response object: `, parsed_users.error);
65
+ throw new Error("Failed to parse 'users' from response object!");
66
+ }
67
+ const users = parsed_users.data;
68
+ return users;
69
+ }
70
+ catch (e) {
71
+ console.error(`Failed to list users: `, e);
72
+ throw new Error(`Failed to list users!`);
73
+ }
74
+ }, {
75
+ fallbackData: props.preloaded,
76
+ });
77
+ return (_jsxs(Card, { className: cardClassName, children: [_jsxs(CardHeader, { children: [_jsx(CardTitle, { children: cardTitle }), _jsx(CardDescription, { children: cardDescription })] }), _jsx(CardContent, { children: _jsx(UsersTable, { users: users }) }), _jsx(CardFooter, { children: _jsx("div", { className: "flex flex-row items-start justify-start gap-2" }) })] }));
78
+ }
79
+ //# sourceMappingURL=UsersCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UsersCard.js","sourceRoot":"","sources":["../../../src/components/UsersCard/UsersCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { UsersCard, UsersCard as default } from "./UsersCard";
2
+ export type { UsersCardProps } from "./UsersCard";
@@ -0,0 +1,2 @@
1
+ export { UsersCard, UsersCard as default } from "./UsersCard";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/UsersCard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ReactElement } from "react";
2
+ import type { SWRResponse } from "swr";
3
+ import type { UserData } from "@schemavaults/auth-common";
4
+ export interface UsersDatatableProps {
5
+ users: SWRResponse<readonly UserData[], Error>;
6
+ }
7
+ export declare function UsersTable({ users }: UsersDatatableProps): ReactElement;
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { Datatable } from "@schemavaults/ui";
4
+ import { columns } from "./columns";
5
+ import { Loader2 } from "lucide-react";
6
+ export function UsersTable({ users }) {
7
+ const { isLoading, data } = users;
8
+ if (!data && isLoading) {
9
+ return (_jsx("div", { className: "min-h-48 w-full flex items-center justify-center", children: _jsx(Loader2, { className: "h-12 w-12 animate-spin" }) }));
10
+ }
11
+ return (_jsx(Datatable, { data: data ? (data.length > 0 ? [...data] : []) : [], columns: columns, initialVisibleColumns: {
12
+ actions: true,
13
+ select: true,
14
+ email: true,
15
+ admin: true,
16
+ email_verified: false,
17
+ disabled: false,
18
+ invite_code: false,
19
+ created_at: true,
20
+ }, HeaderButtons: () => {
21
+ return _jsx(_Fragment, {});
22
+ }, datatypeLabel: "User", searchColumn: ['email', 'invite_code'] }));
23
+ }
24
+ //# sourceMappingURL=UsersTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UsersTable.js","sourceRoot":"","sources":["../../../src/components/UsersTable/UsersTable.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAIb,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAOvC,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAuB;IACvD,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAElC,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;QACvB,OAAO,CACL,cAAK,SAAS,EAAC,kDAAkD,YAC/D,KAAC,OAAO,IAAC,SAAS,EAAC,wBAAwB,GAAG,GAC1C,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,SAAS,IACR,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EACpD,OAAO,EAAE,OAAO,EAChB,qBAAqB,EAAE;YACrB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,IAAI;YACX,cAAc,EAAE,KAAK;YACrB,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,IAAI;SACjB,EACD,aAAa,EAAE,GAAiB,EAAE;YAChC,OAAO,mBAAK,CAAC;QACf,CAAC,EACD,aAAa,EAAC,MAAM,EACpB,YAAY,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,GACtC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ColumnDef } from "@tanstack/react-table";
2
+ import type { UserData } from "@schemavaults/auth-common";
3
+ export declare const columns: ColumnDef<UserData>[];