@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.
- package/README.md +27 -0
- package/dist/components/AccountCard/account_card.d.ts +15 -0
- package/dist/components/AccountCard/account_card.js +21 -0
- package/dist/components/AccountCard/account_card.js.map +1 -0
- package/dist/components/AccountCard/index.d.ts +2 -0
- package/dist/components/AccountCard/index.js +2 -0
- package/dist/components/AccountCard/index.js.map +1 -0
- package/dist/components/AccountCard/view_admin_page_link.d.ts +7 -0
- package/dist/components/AccountCard/view_admin_page_link.js +28 -0
- package/dist/components/AccountCard/view_admin_page_link.js.map +1 -0
- package/dist/components/AccountCard/view_full_user_profile.d.ts +6 -0
- package/dist/components/AccountCard/view_full_user_profile.js +25 -0
- package/dist/components/AccountCard/view_full_user_profile.js.map +1 -0
- package/dist/components/ApiServersCard/api_servers_card.d.ts +9 -0
- package/dist/components/ApiServersCard/api_servers_card.js +12 -0
- package/dist/components/ApiServersCard/api_servers_card.js.map +1 -0
- package/dist/components/ApiServersCard/index.d.ts +2 -0
- package/dist/components/ApiServersCard/index.js +2 -0
- package/dist/components/ApiServersCard/index.js.map +1 -0
- package/dist/components/ApiServersTable/ApiServersTable.d.ts +7 -0
- package/dist/components/ApiServersTable/ApiServersTable.js +28 -0
- package/dist/components/ApiServersTable/ApiServersTable.js.map +1 -0
- package/dist/components/ApiServersTable/columns.d.ts +3 -0
- package/dist/components/ApiServersTable/columns.js +39 -0
- package/dist/components/ApiServersTable/columns.js.map +1 -0
- package/dist/components/ApiServersTable/index.d.ts +2 -0
- package/dist/components/ApiServersTable/index.js +2 -0
- package/dist/components/ApiServersTable/index.js.map +1 -0
- package/dist/components/ApiServersTable/useApiServersList.d.ts +16 -0
- package/dist/components/ApiServersTable/useApiServersList.js +92 -0
- package/dist/components/ApiServersTable/useApiServersList.js.map +1 -0
- package/dist/components/AppsCard/apps_card.d.ts +11 -0
- package/dist/components/AppsCard/apps_card.js +11 -0
- package/dist/components/AppsCard/apps_card.js.map +1 -0
- package/dist/components/AppsCard/index.d.ts +2 -0
- package/dist/components/AppsCard/index.js +2 -0
- package/dist/components/AppsCard/index.js.map +1 -0
- package/dist/components/AppsTable/AppDomainsList.d.ts +7 -0
- package/dist/components/AppsTable/AppDomainsList.js +21 -0
- package/dist/components/AppsTable/AppDomainsList.js.map +1 -0
- package/dist/components/AppsTable/AppsTable.d.ts +9 -0
- package/dist/components/AppsTable/AppsTable.js +36 -0
- package/dist/components/AppsTable/AppsTable.js.map +1 -0
- package/dist/components/AppsTable/columns.d.ts +4 -0
- package/dist/components/AppsTable/columns.js +67 -0
- package/dist/components/AppsTable/columns.js.map +1 -0
- package/dist/components/AppsTable/frontend_app_actions.d.ts +8 -0
- package/dist/components/AppsTable/frontend_app_actions.js +124 -0
- package/dist/components/AppsTable/frontend_app_actions.js.map +1 -0
- package/dist/components/AppsTable/index.d.ts +3 -0
- package/dist/components/AppsTable/index.js +2 -0
- package/dist/components/AppsTable/index.js.map +1 -0
- package/dist/components/AppsTable/launchWebApp.d.ts +9 -0
- package/dist/components/AppsTable/launchWebApp.js +47 -0
- package/dist/components/AppsTable/launchWebApp.js.map +1 -0
- package/dist/components/AppsTable/preloaded_apps_table_data.d.ts +5 -0
- package/dist/components/AppsTable/preloaded_apps_table_data.js +2 -0
- package/dist/components/AppsTable/preloaded_apps_table_data.js.map +1 -0
- package/dist/components/AppsTable/send-authorize-app-request.d.ts +9 -0
- package/dist/components/AppsTable/send-authorize-app-request.js +57 -0
- package/dist/components/AppsTable/send-authorize-app-request.js.map +1 -0
- package/dist/components/AppsTable/useAppDomains.d.ts +8 -0
- package/dist/components/AppsTable/useAppDomains.js +75 -0
- package/dist/components/AppsTable/useAppDomains.js.map +1 -0
- package/dist/components/AppsTable/useAppsList.d.ts +28 -0
- package/dist/components/AppsTable/useAppsList.js +97 -0
- package/dist/components/AppsTable/useAppsList.js.map +1 -0
- package/dist/components/ConnectAppToApiDialog/ConnectAppToApiDialog.d.ts +2 -0
- package/dist/components/ConnectAppToApiDialog/ConnectAppToApiDialog.js +99 -0
- package/dist/components/ConnectAppToApiDialog/ConnectAppToApiDialog.js.map +1 -0
- package/dist/components/ConnectAppToApiDialog/index.d.ts +2 -0
- package/dist/components/ConnectAppToApiDialog/index.js +2 -0
- package/dist/components/ConnectAppToApiDialog/index.js.map +1 -0
- package/dist/components/CreateApiServerDialog/CreateApiServerDialog.d.ts +7 -0
- package/dist/components/CreateApiServerDialog/CreateApiServerDialog.js +118 -0
- package/dist/components/CreateApiServerDialog/CreateApiServerDialog.js.map +1 -0
- package/dist/components/CreateApiServerDialog/index.d.ts +2 -0
- package/dist/components/CreateApiServerDialog/index.js +2 -0
- package/dist/components/CreateApiServerDialog/index.js.map +1 -0
- package/dist/components/CreateAppDialog/CreateAppDialog.d.ts +7 -0
- package/dist/components/CreateAppDialog/CreateAppDialog.js +114 -0
- package/dist/components/CreateAppDialog/CreateAppDialog.js.map +1 -0
- package/dist/components/CreateAppDialog/index.d.ts +2 -0
- package/dist/components/CreateAppDialog/index.js +2 -0
- package/dist/components/CreateAppDialog/index.js.map +1 -0
- package/dist/components/CreateAppDomainDialog/CreateAppDomainDialog.d.ts +10 -0
- package/dist/components/CreateAppDomainDialog/CreateAppDomainDialog.js +125 -0
- package/dist/components/CreateAppDomainDialog/CreateAppDomainDialog.js.map +1 -0
- package/dist/components/CreateAppDomainDialog/index.d.ts +2 -0
- package/dist/components/CreateAppDomainDialog/index.js +2 -0
- package/dist/components/CreateAppDomainDialog/index.js.map +1 -0
- package/dist/components/CreateInviteCodeDialog/CreateInviteCodeDialog.d.ts +3 -0
- package/dist/components/CreateInviteCodeDialog/CreateInviteCodeDialog.js +127 -0
- package/dist/components/CreateInviteCodeDialog/CreateInviteCodeDialog.js.map +1 -0
- package/dist/components/CreateInviteCodeDialog/index.d.ts +1 -0
- package/dist/components/CreateInviteCodeDialog/index.js +2 -0
- package/dist/components/CreateInviteCodeDialog/index.js.map +1 -0
- package/dist/components/InviteCodesCard/InviteCodesCard.d.ts +9 -0
- package/dist/components/InviteCodesCard/InviteCodesCard.js +76 -0
- package/dist/components/InviteCodesCard/InviteCodesCard.js.map +1 -0
- package/dist/components/InviteCodesCard/index.d.ts +2 -0
- package/dist/components/InviteCodesCard/index.js +2 -0
- package/dist/components/InviteCodesCard/index.js.map +1 -0
- package/dist/components/InviteCodesTable/InviteCodesTable.d.ts +7 -0
- package/dist/components/InviteCodesTable/InviteCodesTable.js +23 -0
- package/dist/components/InviteCodesTable/InviteCodesTable.js.map +1 -0
- package/dist/components/InviteCodesTable/columns.d.ts +3 -0
- package/dist/components/InviteCodesTable/columns.js +71 -0
- package/dist/components/InviteCodesTable/columns.js.map +1 -0
- package/dist/components/InviteCodesTable/index.d.ts +2 -0
- package/dist/components/InviteCodesTable/index.js +2 -0
- package/dist/components/InviteCodesTable/index.js.map +1 -0
- package/dist/components/SignOutButton/SignOutButton.d.ts +9 -0
- package/dist/components/SignOutButton/SignOutButton.js +12 -0
- package/dist/components/SignOutButton/SignOutButton.js.map +1 -0
- package/dist/components/SignOutButton/index.d.ts +2 -0
- package/dist/components/SignOutButton/index.js +2 -0
- package/dist/components/SignOutButton/index.js.map +1 -0
- package/dist/components/UsersCard/UsersCard.d.ts +9 -0
- package/dist/components/UsersCard/UsersCard.js +79 -0
- package/dist/components/UsersCard/UsersCard.js.map +1 -0
- package/dist/components/UsersCard/index.d.ts +2 -0
- package/dist/components/UsersCard/index.js +2 -0
- package/dist/components/UsersCard/index.js.map +1 -0
- package/dist/components/UsersTable/UsersTable.d.ts +7 -0
- package/dist/components/UsersTable/UsersTable.js +24 -0
- package/dist/components/UsersTable/UsersTable.js.map +1 -0
- package/dist/components/UsersTable/columns.d.ts +3 -0
- package/dist/components/UsersTable/columns.js +119 -0
- package/dist/components/UsersTable/columns.js.map +1 -0
- package/dist/components/UsersTable/index.d.ts +2 -0
- package/dist/components/UsersTable/index.js +2 -0
- package/dist/components/UsersTable/index.js.map +1 -0
- package/dist/components/index.d.ts +17 -0
- package/dist/components/index.js +9 -0
- package/dist/components/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/printDateTime.d.ts +2 -0
- package/dist/lib/printDateTime.js +21 -0
- package/dist/lib/printDateTime.js.map +1 -0
- package/package.json +72 -0
- package/tsconfig.json +25 -0
|
@@ -0,0 +1,99 @@
|
|
|
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, useToast, } from "@schemavaults/ui";
|
|
4
|
+
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, useForm, } from "@schemavaults/ui";
|
|
5
|
+
import { useAppEnvironment, useAuth } from "@schemavaults/auth-react-provider";
|
|
6
|
+
import { appToApiPermissionSchema, SCHEMAVAULTS_AUTH_APP_DEFINITION, } from "@schemavaults/app-definitions";
|
|
7
|
+
import { zodResolver } from "@hookform/resolvers/zod";
|
|
8
|
+
import { PlugZap } from "lucide-react";
|
|
9
|
+
export function ConnectAppToApiDialog() {
|
|
10
|
+
const { toast } = useToast();
|
|
11
|
+
const form = useForm({
|
|
12
|
+
resolver: zodResolver(appToApiPermissionSchema),
|
|
13
|
+
defaultValues: {
|
|
14
|
+
api_server_id: "",
|
|
15
|
+
client_app_id: "",
|
|
16
|
+
created_at: Date.now(),
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
const auth = useAuth();
|
|
20
|
+
const environment = useAppEnvironment();
|
|
21
|
+
async function onSubmit(values) {
|
|
22
|
+
if (environment === "development") {
|
|
23
|
+
console.log("Submitting App-to-API Permission creation form...");
|
|
24
|
+
toast({
|
|
25
|
+
variant: "default",
|
|
26
|
+
title: "Submitting App-to-API Permission creation form...",
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
const authClient = auth.ready ? auth.client.current : undefined;
|
|
30
|
+
if (!authClient) {
|
|
31
|
+
toast({
|
|
32
|
+
variant: "destructive",
|
|
33
|
+
title: "Auth client not ready",
|
|
34
|
+
description: `Cannot acquire an access token yet`,
|
|
35
|
+
});
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
let auth_access_jwt;
|
|
39
|
+
try {
|
|
40
|
+
const auth_jwt = await authClient.acquireAccessToken({
|
|
41
|
+
token_id: SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id,
|
|
42
|
+
audience: SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id,
|
|
43
|
+
});
|
|
44
|
+
if (!auth_jwt)
|
|
45
|
+
throw new Error("Failed to acquire auth access token");
|
|
46
|
+
auth_access_jwt = auth_jwt;
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
toast({
|
|
50
|
+
variant: "destructive",
|
|
51
|
+
title: "Error loading authentication access token",
|
|
52
|
+
description: e instanceof Error ? e.message : `Failed to prepare network request`,
|
|
53
|
+
});
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const response = await fetch(`/api/apis/connect_app/${values.client_app_id}/${values.api_server_id}`, {
|
|
58
|
+
method: "POST",
|
|
59
|
+
headers: {
|
|
60
|
+
Authorization: `Bearer ${auth_access_jwt.token}}`,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
if (!response.ok || response.status !== 200) {
|
|
64
|
+
throw new Error(`App-to-Api connection creation request has bad status: ${response.status}`);
|
|
65
|
+
}
|
|
66
|
+
const body = await response.json();
|
|
67
|
+
if (typeof body !== "object") {
|
|
68
|
+
throw new Error("Expected JSON object response from app-to-api permission creation attempt");
|
|
69
|
+
}
|
|
70
|
+
if (!Object.hasOwn(body, "success")) {
|
|
71
|
+
throw new Error("No success field in response");
|
|
72
|
+
}
|
|
73
|
+
if (!(typeof body.success === "boolean" &&
|
|
74
|
+
body.success)) {
|
|
75
|
+
console.error(body);
|
|
76
|
+
throw new Error("App-to-API Permission creation response has success flag set to false");
|
|
77
|
+
}
|
|
78
|
+
if (environment === "development") {
|
|
79
|
+
console.log("Received response: ", body);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
toast({
|
|
84
|
+
variant: "destructive",
|
|
85
|
+
title: "Failed to connect app to API server",
|
|
86
|
+
description: e instanceof Error ? e.message : `Failed to send network request`,
|
|
87
|
+
});
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
toast({
|
|
91
|
+
variant: "default",
|
|
92
|
+
title: "Connected app to API server successfully!",
|
|
93
|
+
description: "It can now send the API server authenticated requests.",
|
|
94
|
+
});
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
return (_jsxs(Dialog, { children: [_jsx(DialogTrigger, { asChild: true, children: _jsxs(Button, { children: [_jsx(PlugZap, { className: "h-4 w-4 mr-2" }), " Connect app to API"] }) }), _jsx(DialogContent, { className: "sm:max-w-[425px]", children: _jsx(Form, { ...form, children: _jsxs("form", { onSubmit: form.handleSubmit(onSubmit, (e) => console.error(e)), className: "flex flex-col justify-start gap-4", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Connect an app to an API server" }), _jsx(DialogDescription, { children: "Allow a frontend/client application to access SchemaVaults APIs." })] }), _jsx(FormField, { control: form.control, name: "client_app_id", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Frontend Client App ID" }), _jsx(FormControl, { children: _jsx(Input, { placeholder: "475af02e-0957-485c-bfdb-5315946d5b7e", ...field }) }), _jsx(FormDescription, { children: "Enter the UUID of the API server application." }), _jsx(FormMessage, {})] })) }), _jsx(FormField, { control: form.control, name: "api_server_id", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "API Server ID" }), _jsx(FormControl, { children: _jsx(Input, { placeholder: "fcf06e2d-fa7f-45bf-875f-9ca5384618c9", ...field }) }), _jsx(FormDescription, { children: "Enter the UUID of the API server application." }), _jsx(FormMessage, {})] })) }), _jsx(DialogFooter, { children: _jsxs(Button, { type: "submit", children: [_jsx(PlugZap, { className: "h-4 w-4 mr-2" }), "Connect app to API server"] }) })] }) }) })] }));
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=ConnectAppToApiDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectAppToApiDialog.js","sourceRoot":"","sources":["../../../src/components/ConnectAppToApiDialog/ConnectAppToApiDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ConnectAppToApiDialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ReactElement } from "react";
|
|
2
|
+
import { useSWRConfig } from "swr";
|
|
3
|
+
interface CreateApiServerDialogProps {
|
|
4
|
+
clearApiServersCache: (mutate: ReturnType<typeof useSWRConfig>["mutate"]) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function CreateApiServerDialog({ clearApiServersCache, }: CreateApiServerDialogProps): ReactElement;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button, Checkbox, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Input, Textarea, useToast, } from "@schemavaults/ui";
|
|
4
|
+
import { useMemo } 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 { SCHEMAVAULTS_AUTH_APP_DEFINITION, schemaVaultsApiServerDefinitionSchema, } from "@schemavaults/app-definitions";
|
|
9
|
+
import { zodResolver } from "@hookform/resolvers/zod";
|
|
10
|
+
import { Server } from "lucide-react";
|
|
11
|
+
function generateDefaultApiServerId() {
|
|
12
|
+
try {
|
|
13
|
+
return crypto.randomUUID();
|
|
14
|
+
}
|
|
15
|
+
catch (e) {
|
|
16
|
+
console.error("Failed to generate default API server UUID: ", e);
|
|
17
|
+
return "";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export function CreateApiServerDialog({ clearApiServersCache, }) {
|
|
21
|
+
const { toast } = useToast();
|
|
22
|
+
const defaultValues = useMemo(() => {
|
|
23
|
+
return {
|
|
24
|
+
api_server_name: "",
|
|
25
|
+
api_server_id: generateDefaultApiServerId(),
|
|
26
|
+
api_server_description: "",
|
|
27
|
+
public: false,
|
|
28
|
+
created_at: Date.now(),
|
|
29
|
+
};
|
|
30
|
+
}, []);
|
|
31
|
+
const form = useForm({
|
|
32
|
+
resolver: zodResolver(schemaVaultsApiServerDefinitionSchema),
|
|
33
|
+
defaultValues,
|
|
34
|
+
});
|
|
35
|
+
const auth = useAuth();
|
|
36
|
+
const environment = useAppEnvironment();
|
|
37
|
+
const { mutate } = useSWRConfig();
|
|
38
|
+
async function onSubmit(values) {
|
|
39
|
+
if (environment === "development") {
|
|
40
|
+
console.log("Submitting API creation form...");
|
|
41
|
+
toast({
|
|
42
|
+
variant: "default",
|
|
43
|
+
title: "Submitting API creation form...",
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
const authClient = auth.ready ? auth.client.current : undefined;
|
|
47
|
+
if (!authClient) {
|
|
48
|
+
toast({
|
|
49
|
+
variant: "destructive",
|
|
50
|
+
title: "Auth client not ready",
|
|
51
|
+
description: `Cannot acquire an access token yet`,
|
|
52
|
+
});
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
let auth_access_jwt;
|
|
56
|
+
try {
|
|
57
|
+
const auth_jwt = await authClient.acquireAccessToken({
|
|
58
|
+
token_id: SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id,
|
|
59
|
+
audience: SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id,
|
|
60
|
+
});
|
|
61
|
+
if (!auth_jwt) {
|
|
62
|
+
throw new Error("Failed to acquire auth access token");
|
|
63
|
+
}
|
|
64
|
+
auth_access_jwt = auth_jwt;
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
toast({
|
|
68
|
+
variant: "destructive",
|
|
69
|
+
title: "Error loading authentication access token",
|
|
70
|
+
description: e instanceof Error ? e.message : `Failed to prepare network request`,
|
|
71
|
+
});
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
const response = await fetch("/api/apis", {
|
|
76
|
+
method: "POST",
|
|
77
|
+
body: JSON.stringify(values),
|
|
78
|
+
headers: {
|
|
79
|
+
Authorization: `Bearer ${auth_access_jwt.token}}`,
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
if (!response.ok || response.status !== 200) {
|
|
83
|
+
throw new Error(`API server creation request has bad status: ${response.status}`);
|
|
84
|
+
}
|
|
85
|
+
const body = await response.json();
|
|
86
|
+
if (typeof body !== "object") {
|
|
87
|
+
throw new Error("Expected JSON object response from API server creation attempt");
|
|
88
|
+
}
|
|
89
|
+
if (!Object.hasOwn(body, "success")) {
|
|
90
|
+
throw new Error("No success field in response");
|
|
91
|
+
}
|
|
92
|
+
if (!(typeof body.success === "boolean" &&
|
|
93
|
+
body.success)) {
|
|
94
|
+
console.error(body);
|
|
95
|
+
throw new Error("API server creation response has success flag set to false");
|
|
96
|
+
}
|
|
97
|
+
if (environment === "development") {
|
|
98
|
+
console.log("Received response: ", body);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (e) {
|
|
102
|
+
toast({
|
|
103
|
+
variant: "destructive",
|
|
104
|
+
title: "Failed to create new API server",
|
|
105
|
+
description: e instanceof Error ? e.message : `Failed to send network request`,
|
|
106
|
+
});
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
toast({
|
|
110
|
+
variant: "default",
|
|
111
|
+
title: "Created new API server successfully",
|
|
112
|
+
});
|
|
113
|
+
clearApiServersCache(mutate);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
return (_jsxs(Dialog, { children: [_jsx(DialogTrigger, { asChild: true, children: _jsxs(Button, { children: [_jsx(Server, { className: "h-4 w-4 mr-2" }), " Create API"] }) }), _jsx(DialogContent, { className: "sm:max-w-[425px]", children: _jsx(Form, { ...form, children: _jsxs("form", { onSubmit: form.handleSubmit(onSubmit, (e) => console.error(e)), className: "flex flex-col justify-start gap-4", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Create a new API server" }), _jsx(DialogDescription, { children: "Create a new frontend/client application which can access SchemaVaults APIs." })] }), _jsx(FormField, { control: form.control, name: "api_server_name", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "API Server Name" }), _jsx(FormControl, { children: _jsx(Input, { placeholder: "My New Resource Server", ...field }) }), _jsx(FormDescription, { children: "Give a user-friendly name to the new backend API server application." }), _jsx(FormMessage, {})] })) }), _jsx(FormField, { control: form.control, name: "api_server_description", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Description" }), _jsx(FormControl, { children: _jsx(Textarea, { placeholder: "This API server provides search functionality to my new app.", ...field }) }), _jsx(FormDescription, { children: "Describe what this API server does." }), _jsx(FormMessage, {})] })) }), _jsx(FormField, { control: form.control, name: "public", render: ({ field }) => (_jsxs(FormItem, { className: "flex flex-row gap-2 items-center flex-wrap", children: [_jsx(FormLabel, { className: "w-full", children: "Public?" }), _jsx(FormControl, { children: _jsx(Checkbox, { checked: field.value, onCheckedChange: field.onChange }) }), _jsx(FormDescription, { className: "w-full", children: "Is this API publicly listed to end-users? I.e. can they find it without having authorized a connected client application first?" }), _jsx(FormMessage, {})] })) }), _jsx(DialogFooter, { children: _jsxs(Button, { type: "submit", children: [_jsx(Server, { className: "h-4 w-4 mr-2" }), "Create Server Application"] }) })] }) }) })] }));
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=CreateApiServerDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateApiServerDialog.js","sourceRoot":"","sources":["../../../src/components/CreateApiServerDialog/CreateApiServerDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CreateApiServerDialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ReactElement } from "react";
|
|
2
|
+
import { useSWRConfig } from "swr";
|
|
3
|
+
interface CreateFrontendAppDialogProps {
|
|
4
|
+
clearFrontendAppsCache: (mutate: ReturnType<typeof useSWRConfig>["mutate"]) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function CreateAppDialog({ clearFrontendAppsCache, }: CreateFrontendAppDialogProps): ReactElement;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button, Checkbox, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Input, Textarea, useToast, } from "@schemavaults/ui";
|
|
4
|
+
import { useMemo, useTransition } 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 { SCHEMAVAULTS_AUTH_APP_DEFINITION, schemaVaultsAppDefinitionSchema, } from "@schemavaults/app-definitions";
|
|
9
|
+
import { zodResolver } from "@hookform/resolvers/zod";
|
|
10
|
+
import { AppWindow } from "lucide-react";
|
|
11
|
+
export function CreateAppDialog({ clearFrontendAppsCache, }) {
|
|
12
|
+
const { toast } = useToast();
|
|
13
|
+
const defaultValues = useMemo(() => {
|
|
14
|
+
return {
|
|
15
|
+
app_name: "My Web App",
|
|
16
|
+
app_id: crypto.randomUUID(),
|
|
17
|
+
app_description: "Interact with my API",
|
|
18
|
+
public: false,
|
|
19
|
+
created_at: Date.now(),
|
|
20
|
+
};
|
|
21
|
+
}, []);
|
|
22
|
+
const form = useForm({
|
|
23
|
+
resolver: zodResolver(schemaVaultsAppDefinitionSchema),
|
|
24
|
+
defaultValues,
|
|
25
|
+
});
|
|
26
|
+
const auth = useAuth();
|
|
27
|
+
const environment = useAppEnvironment();
|
|
28
|
+
const { mutate } = useSWRConfig();
|
|
29
|
+
const [submitting, startSubmitting] = useTransition();
|
|
30
|
+
async function onSubmit(values) {
|
|
31
|
+
if (environment === "development") {
|
|
32
|
+
console.log("Submitting frontend app creation form...");
|
|
33
|
+
toast({
|
|
34
|
+
variant: "default",
|
|
35
|
+
title: "Submitting frontend app creation form...",
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
startSubmitting(async () => {
|
|
39
|
+
const authClient = auth.ready ? auth.client.current : undefined;
|
|
40
|
+
if (!authClient) {
|
|
41
|
+
toast({
|
|
42
|
+
variant: "destructive",
|
|
43
|
+
title: "Auth client not ready!",
|
|
44
|
+
description: `Cannot acquire an access token to create app yet.`,
|
|
45
|
+
});
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
let auth_access_jwt;
|
|
49
|
+
try {
|
|
50
|
+
const auth_jwt = await authClient.acquireAccessToken({
|
|
51
|
+
token_id: SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id,
|
|
52
|
+
audience: SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id,
|
|
53
|
+
});
|
|
54
|
+
if (!auth_jwt)
|
|
55
|
+
throw new Error("Failed to acquire auth access token");
|
|
56
|
+
auth_access_jwt = auth_jwt;
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
toast({
|
|
60
|
+
variant: "destructive",
|
|
61
|
+
title: "Error loading authentication access token",
|
|
62
|
+
description: e instanceof Error
|
|
63
|
+
? e.message
|
|
64
|
+
: `Failed to prepare network request`,
|
|
65
|
+
});
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
const response = await fetch("/api/apps", {
|
|
70
|
+
method: "POST",
|
|
71
|
+
body: JSON.stringify(values),
|
|
72
|
+
headers: {
|
|
73
|
+
Authorization: `Bearer ${auth_access_jwt.token}}`,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
if (!response.ok || response.status !== 200) {
|
|
77
|
+
throw new Error(`Frontend app 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 frontend app 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("Frontend app 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 frontend application",
|
|
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 frontend client application successfully",
|
|
106
|
+
});
|
|
107
|
+
clearFrontendAppsCache(mutate);
|
|
108
|
+
return;
|
|
109
|
+
});
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
return (_jsxs(Dialog, { children: [_jsx(DialogTrigger, { asChild: true, children: _jsxs(Button, { children: [_jsx(AppWindow, { className: "h-4 w-4 mr-2" }), " Create app"] }) }), _jsx(DialogContent, { className: "sm:max-w-[425px]", children: _jsx(Form, { ...form, children: _jsxs("form", { onSubmit: form.handleSubmit(onSubmit), className: "flex flex-col justify-start gap-4", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Create a new application" }), _jsx(DialogDescription, { children: "Create a new frontend/client application which can access SchemaVaults APIs." })] }), _jsx(FormField, { control: form.control, name: "app_name", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "App Name" }), _jsx(FormControl, { children: _jsx(Input, { placeholder: "My New React App", ...field, disabled: submitting }) }), _jsx(FormDescription, { children: "Give a user-friendly name to the new application." }), _jsx(FormMessage, {})] })) }), _jsx(FormField, { control: form.control, name: "app_description", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Description" }), _jsx(FormControl, { children: _jsx(Textarea, { placeholder: "This app connects to my new API", ...field, disabled: submitting }) }), _jsx(FormDescription, { children: "Describe what this app does." }), _jsx(FormMessage, {})] })) }), _jsx(FormField, { control: form.control, name: "public", render: ({ field }) => (_jsxs(FormItem, { className: "flex flex-row gap-2 items-center flex-wrap", children: [_jsx(FormLabel, { className: "w-full", children: "Public?" }), _jsx(FormControl, { children: _jsx(Checkbox, { checked: field.value, onCheckedChange: field.onChange, disabled: submitting, onBlur: field.onBlur }) }), _jsx(FormDescription, { className: "w-full", children: "Is this app publicly listed to end-users? I.e. can they find it without having authorized it first" }), _jsx(FormMessage, {})] })) }), _jsx(DialogFooter, { children: _jsxs(Button, { type: "submit", disabled: submitting, children: [_jsx(AppWindow, { className: "h-4 w-4 mr-2" }), "Create client application"] }) })] }) }) })] }));
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=CreateAppDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateAppDialog.js","sourceRoot":"","sources":["../../../src/components/CreateAppDialog/CreateAppDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CreateAppDialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ReactElement } from "react";
|
|
2
|
+
import { useSWRConfig } from "swr";
|
|
3
|
+
interface CreateFrontendAppDialogProps {
|
|
4
|
+
clearFrontendWebAppDomainsCache: (mutate: ReturnType<typeof useSWRConfig>["mutate"]) => void;
|
|
5
|
+
app_id: string;
|
|
6
|
+
open: boolean;
|
|
7
|
+
onOpenChange: (value: boolean) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function CreateAppDomainDialog({ clearFrontendWebAppDomainsCache, app_id, open, onOpenChange, }: CreateFrontendAppDialogProps): ReactElement;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,125 @@
|
|
|
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, useToast, } from "@schemavaults/ui";
|
|
4
|
+
import { useMemo, useTransition } from "react";
|
|
5
|
+
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, RadioGroup, RadioGroupItem, Label, useForm, } from "@schemavaults/ui";
|
|
6
|
+
import { useAppEnvironment, useAuth } from "@schemavaults/auth-react-provider";
|
|
7
|
+
import { useSWRConfig } from "swr";
|
|
8
|
+
import { SCHEMAVAULTS_AUTH_APP_DEFINITION, schemaVaultsAppDomainRefSchema, schemaVaultsAppEnvironments, } from "@schemavaults/app-definitions";
|
|
9
|
+
import { zodResolver } from "@hookform/resolvers/zod";
|
|
10
|
+
import { EarthLock } from "lucide-react";
|
|
11
|
+
export function CreateAppDomainDialog({ clearFrontendWebAppDomainsCache, app_id, open, onOpenChange, }) {
|
|
12
|
+
const { toast } = useToast();
|
|
13
|
+
const environment = useAppEnvironment();
|
|
14
|
+
const defaultValues = useMemo(() => {
|
|
15
|
+
return {
|
|
16
|
+
app_id,
|
|
17
|
+
domain: "",
|
|
18
|
+
app_domain_ref_id: "",
|
|
19
|
+
environment,
|
|
20
|
+
created_at: Date.now(),
|
|
21
|
+
};
|
|
22
|
+
}, [environment, app_id]);
|
|
23
|
+
const form = useForm({
|
|
24
|
+
resolver: zodResolver(schemaVaultsAppDomainRefSchema),
|
|
25
|
+
defaultValues,
|
|
26
|
+
});
|
|
27
|
+
const auth = useAuth();
|
|
28
|
+
const { mutate } = useSWRConfig();
|
|
29
|
+
const [submitting, startSubmitting] = useTransition();
|
|
30
|
+
async function onSubmit(values) {
|
|
31
|
+
if (environment === "development") {
|
|
32
|
+
console.log("Submitting frontend app creation form...");
|
|
33
|
+
toast({
|
|
34
|
+
variant: "default",
|
|
35
|
+
title: "Submitting frontend app web domain creation form...",
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
const authClient = auth.ready ? auth.client.current : undefined;
|
|
39
|
+
if (!authClient) {
|
|
40
|
+
toast({
|
|
41
|
+
variant: "destructive",
|
|
42
|
+
title: "Auth client not ready",
|
|
43
|
+
description: `Cannot acquire an access token yet`,
|
|
44
|
+
});
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
let auth_access_jwt;
|
|
48
|
+
try {
|
|
49
|
+
const auth_jwt = await authClient.acquireAccessToken({
|
|
50
|
+
token_id: SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id,
|
|
51
|
+
audience: SCHEMAVAULTS_AUTH_APP_DEFINITION.app_id,
|
|
52
|
+
});
|
|
53
|
+
if (!auth_jwt)
|
|
54
|
+
throw new Error("Failed to acquire auth access token");
|
|
55
|
+
auth_access_jwt = auth_jwt;
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
toast({
|
|
59
|
+
variant: "destructive",
|
|
60
|
+
title: "Error loading authentication access token",
|
|
61
|
+
description: e instanceof Error ? e.message : `Failed to prepare network request`,
|
|
62
|
+
});
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
const response = await fetch("/api/apps/domains/create", {
|
|
67
|
+
method: "POST",
|
|
68
|
+
body: JSON.stringify({
|
|
69
|
+
...values,
|
|
70
|
+
created_at: Date.now(),
|
|
71
|
+
app_id,
|
|
72
|
+
}),
|
|
73
|
+
headers: {
|
|
74
|
+
Authorization: `Bearer ${auth_access_jwt.token}}`,
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
if (!response.ok || response.status !== 200) {
|
|
78
|
+
throw new Error(`Frontend app domain creation request has bad status: ${response.status}`);
|
|
79
|
+
}
|
|
80
|
+
const body = await response.json();
|
|
81
|
+
if (typeof body !== "object") {
|
|
82
|
+
throw new Error("Expected JSON object response from app domain creation attempt");
|
|
83
|
+
}
|
|
84
|
+
if (!Object.hasOwn(body, "success")) {
|
|
85
|
+
throw new Error("No success field in response");
|
|
86
|
+
}
|
|
87
|
+
if (!(typeof body.success === "boolean" &&
|
|
88
|
+
body.success)) {
|
|
89
|
+
console.error(body);
|
|
90
|
+
throw new Error("Frontend app domain creation response has success flag set to false");
|
|
91
|
+
}
|
|
92
|
+
if (environment === "development") {
|
|
93
|
+
console.log("Received response: ", body);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
toast({
|
|
98
|
+
variant: "destructive",
|
|
99
|
+
title: "Failed to attach domain to application",
|
|
100
|
+
description: e instanceof Error ? e.message : `Failed to send network request`,
|
|
101
|
+
});
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
toast({
|
|
105
|
+
variant: "default",
|
|
106
|
+
title: "Created new application domain successfully",
|
|
107
|
+
});
|
|
108
|
+
clearFrontendWebAppDomainsCache(mutate);
|
|
109
|
+
onOpenChange(false);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsx(DialogContent, { className: "sm:max-w-[425px]", children: _jsx(Form, { ...form, children: _jsxs("form", { onSubmit: form.handleSubmit(function onValid(values) {
|
|
113
|
+
startSubmitting(async () => await onSubmit(values));
|
|
114
|
+
}, function onFormError(e) {
|
|
115
|
+
console.error("App domain form errors: ", e);
|
|
116
|
+
toast({
|
|
117
|
+
variant: "destructive",
|
|
118
|
+
title: "Create app domain form has errors",
|
|
119
|
+
});
|
|
120
|
+
}), className: "flex flex-col justify-start gap-4", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Create a new web app domain" }), _jsx(DialogDescription, { children: "Create a new domain that can be redirected back to from a web PKCE auth flow." })] }), _jsx(FormField, { control: form.control, name: "domain", render: ({ field }) => (_jsxs(FormItem, { children: [_jsx(FormLabel, { children: "Domain Name" }), _jsx(FormControl, { children: _jsx(Input, { placeholder: "schemavaults.com", ...field, disabled: submitting }) }), _jsx(FormDescription, { children: "What URL can this app be reached at?" }), _jsx(FormMessage, {})] })) }), _jsx(FormField, { control: form.control, name: "environment", render: ({ field }) => (_jsxs(FormItem, { className: "flex flex-row gap-2 items-center flex-wrap", children: [_jsx(FormLabel, { className: "w-full", children: "Environment" }), _jsx(FormControl, { children: _jsx(RadioGroup, { onBlur: field.onBlur, onChange: field.onChange, value: field.value, disabled: field.disabled, name: field.name, children: schemaVaultsAppEnvironments.map((app_env) => {
|
|
121
|
+
const environment_radio_button_id = `environment-radio-item-${app_env}`;
|
|
122
|
+
return (_jsxs("div", { className: "flex items-center space-x-2", children: [_jsx(RadioGroupItem, { value: app_env, id: environment_radio_button_id }), _jsx(Label, { htmlFor: environment_radio_button_id, children: app_env })] }, app_env));
|
|
123
|
+
}) }) }), _jsx(FormDescription, { className: "w-full", children: "What environments is this app domain accessible from? This allows restricting production environments to only use a production domain over HTTPS." }), _jsx(FormMessage, {})] })) }), _jsx(DialogFooter, { children: _jsxs(Button, { type: "submit", disabled: submitting, children: [_jsx(EarthLock, { className: "h-4 w-4 mr-2" }), "Create app domain"] }) })] }) }) }) }));
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=CreateAppDomainDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateAppDomainDialog.js","sourceRoot":"","sources":["../../../src/components/CreateAppDomainDialog/CreateAppDomainDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CreateAppDomainDialog/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
|