graphvault-studio 0.1.2

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 (42) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/CONTRIBUTING.md +27 -0
  3. package/LICENSE +21 -0
  4. package/README.md +119 -0
  5. package/assets/graphvault-logo.png +0 -0
  6. package/assets/studio-screenshot.png +0 -0
  7. package/dist/admin-cli.d.ts +12 -0
  8. package/dist/admin-cli.js +132 -0
  9. package/dist/admin-cli.js.map +1 -0
  10. package/dist/admin-client.d.ts +49 -0
  11. package/dist/admin-client.js +352 -0
  12. package/dist/admin-client.js.map +1 -0
  13. package/dist/admin-inspection.d.ts +4 -0
  14. package/dist/admin-inspection.js +70 -0
  15. package/dist/admin-inspection.js.map +1 -0
  16. package/dist/admin-mutation.d.ts +4 -0
  17. package/dist/admin-mutation.js +83 -0
  18. package/dist/admin-mutation.js.map +1 -0
  19. package/dist/admin-parent-index.d.ts +4 -0
  20. package/dist/admin-parent-index.js +72 -0
  21. package/dist/admin-parent-index.js.map +1 -0
  22. package/dist/admin-server.d.ts +14 -0
  23. package/dist/admin-server.js +132 -0
  24. package/dist/admin-server.js.map +1 -0
  25. package/dist/admin-types.d.ts +97 -0
  26. package/dist/admin-types.js +2 -0
  27. package/dist/admin-types.js.map +1 -0
  28. package/dist/admin-ui.d.ts +1 -0
  29. package/dist/admin-ui.js +886 -0
  30. package/dist/admin-ui.js.map +1 -0
  31. package/dist/admin.d.ts +4 -0
  32. package/dist/admin.js +3 -0
  33. package/dist/admin.js.map +1 -0
  34. package/dist/gvql-examples.d.ts +6 -0
  35. package/dist/gvql-examples.js +45 -0
  36. package/dist/gvql-examples.js.map +1 -0
  37. package/docs/GVQL.md +217 -0
  38. package/docs/PUBLISHING.md +46 -0
  39. package/docs/RELEASE_NOTES_0.1.0.md +41 -0
  40. package/docs/REMOTE_STORAGE.md +56 -0
  41. package/examples/create-demo-store.mjs +85 -0
  42. package/package.json +67 -0
@@ -0,0 +1,14 @@
1
+ import { type Server } from "node:http";
2
+ import { type StorageAdminClientOptions } from "./admin-client.js";
3
+ export interface AdminServerOptions extends StorageAdminClientOptions {
4
+ host?: string;
5
+ port?: number;
6
+ authToken?: string;
7
+ mutationConfirmToken?: string;
8
+ }
9
+ export interface RunningAdminServer {
10
+ server: Server;
11
+ url: string;
12
+ close(): Promise<void>;
13
+ }
14
+ export declare function startAdminServer(options: AdminServerOptions): Promise<RunningAdminServer>;
@@ -0,0 +1,132 @@
1
+ import { createServer } from "node:http";
2
+ import { readFile } from "node:fs/promises";
3
+ import { StorageAdminClient } from "./admin-client.js";
4
+ import { ADMIN_HTML } from "./admin-ui.js";
5
+ export async function startAdminServer(options) {
6
+ const client = new StorageAdminClient(options);
7
+ const server = createServer((request, response) => {
8
+ void route(client, options, request, response).catch((error) => sendJson(response, 500, { error: String(error?.message ?? error) }));
9
+ });
10
+ const host = options.host ?? "127.0.0.1";
11
+ const port = options.port ?? 0;
12
+ await new Promise((resolve, reject) => {
13
+ server.once("error", reject);
14
+ server.listen(port, host, () => {
15
+ server.off("error", reject);
16
+ resolve();
17
+ });
18
+ });
19
+ const address = server.address();
20
+ const actualPort = typeof address === "object" && address ? address.port : port;
21
+ return {
22
+ server,
23
+ url: `http://${host}:${actualPort}`,
24
+ close: () => new Promise((resolve, reject) => server.close((error) => (error ? reject(error) : resolve()))),
25
+ };
26
+ }
27
+ async function route(client, options, request, response) {
28
+ const url = new URL(request.url ?? "/", "http://127.0.0.1");
29
+ if (request.method === "GET" && url.pathname === "/") {
30
+ response.writeHead(200, { "content-type": "text/html; charset=utf-8" });
31
+ response.end(ADMIN_HTML.replace("__CONFIRM_REQUIRED__", options.mutationConfirmToken ? "true" : "false").replace("__AUTH_REQUIRED__", options.authToken ? "true" : "false"));
32
+ return;
33
+ }
34
+ if (request.method === "GET" && (url.pathname === "/assets/graphvault-logo.png" || url.pathname === "/favicon.ico")) {
35
+ const logo = await readFile(new URL("../assets/graphvault-logo.png", import.meta.url));
36
+ response.writeHead(200, { "content-type": "image/png", "cache-control": "public, max-age=86400" });
37
+ response.end(logo);
38
+ return;
39
+ }
40
+ if (options.authToken && !isAuthorized(request, options.authToken)) {
41
+ return sendJson(response, 401, { error: "Unauthorized" });
42
+ }
43
+ if (request.method === "GET" && url.pathname === "/api/summary") {
44
+ return sendJson(response, 200, await client.summary({ verify: url.searchParams.get("verify") !== "false" }));
45
+ }
46
+ if (request.method === "GET" && url.pathname === "/api/root") {
47
+ return sendJson(response, 200, await client.rootReference());
48
+ }
49
+ if (request.method === "GET" && url.pathname === "/api/object-page") {
50
+ return sendJson(response, 200, await client.listObjectPage({ offset: numberParam(url, "offset", 0), limit: numberParam(url, "limit", 100) }));
51
+ }
52
+ if (request.method === "GET" && url.pathname === "/api/objects") {
53
+ return sendJson(response, 200, await client.listObjects());
54
+ }
55
+ if (request.method === "GET" && url.pathname?.startsWith("/api/objects/") && url.pathname.endsWith("/children")) {
56
+ const objectId = decodeURIComponent(url.pathname.slice("/api/objects/".length, -"/children".length));
57
+ return sendJson(response, 200, await client.listObjectChildren(objectId));
58
+ }
59
+ if (request.method === "GET" && url.pathname?.startsWith("/api/objects/") && url.pathname.endsWith("/path")) {
60
+ const objectId = decodeURIComponent(url.pathname.slice("/api/objects/".length, -"/path".length));
61
+ return sendJson(response, 200, await client.hierarchyPath(objectId));
62
+ }
63
+ if (request.method === "GET" && url.pathname?.startsWith("/api/objects/")) {
64
+ return sendJson(response, 200, await client.getObject(decodeURIComponent(url.pathname.slice("/api/objects/".length))));
65
+ }
66
+ if (request.method === "GET" && url.pathname === "/api/graph") {
67
+ return sendJson(response, 200, await client.graph());
68
+ }
69
+ if (request.method === "GET" && url.pathname === "/api/search") {
70
+ return sendJson(response, 200, await client.search(url.searchParams.get("q") ?? "", { limit: numberParam(url, "limit", 500) }));
71
+ }
72
+ if (request.method === "GET" && url.pathname === "/api/types") {
73
+ return sendJson(response, 200, (await client.readTypeDictionary()) ?? null);
74
+ }
75
+ if (request.method === "GET" && url.pathname === "/api/transactions") {
76
+ return sendJson(response, 200, await client.listTransactions());
77
+ }
78
+ if (request.method === "GET" && url.pathname === "/api/journal") {
79
+ return sendText(response, 200, await client.readJournal());
80
+ }
81
+ if (request.method === "GET" && url.pathname === "/api/verify") {
82
+ return sendJson(response, 200, await client.verify());
83
+ }
84
+ if (request.method === "POST" && url.pathname === "/api/maintenance") {
85
+ return sendJson(response, 200, await client.maintain(await readJson(request)));
86
+ }
87
+ if (request.method === "POST" && url.pathname === "/api/backup") {
88
+ return sendJson(response, 200, await client.backup(await readJson(request)));
89
+ }
90
+ if (request.method === "POST" && url.pathname === "/api/preview-mutation") {
91
+ return sendJson(response, 200, await client.previewMutation(await readJson(request)));
92
+ }
93
+ if (request.method === "POST" && url.pathname === "/api/gvql") {
94
+ const body = await readJson(request);
95
+ if (body?.dryRun !== true && options.mutationConfirmToken && body?.confirmToken !== options.mutationConfirmToken) {
96
+ return sendJson(response, 403, { error: "GVQL mutation confirmation token is missing or invalid." });
97
+ }
98
+ return sendJson(response, 200, await client.gvql(String(body?.query ?? ""), { parameters: body?.parameters ?? {}, dryRun: body?.dryRun === true }));
99
+ }
100
+ if (request.method === "POST" && url.pathname === "/api/mutate") {
101
+ const body = await readJson(request);
102
+ if (options.mutationConfirmToken && body?.confirmToken !== options.mutationConfirmToken) {
103
+ return sendJson(response, 403, { error: "Mutation confirmation token is missing or invalid." });
104
+ }
105
+ return sendJson(response, 200, await client.mutate(body));
106
+ }
107
+ sendJson(response, 404, { error: "Not found" });
108
+ }
109
+ function numberParam(url, name, fallback) {
110
+ const value = Number(url.searchParams.get(name));
111
+ return Number.isFinite(value) ? value : fallback;
112
+ }
113
+ function isAuthorized(request, authToken) {
114
+ return request.headers.authorization === `Bearer ${authToken}`;
115
+ }
116
+ function sendJson(response, status, value) {
117
+ response.writeHead(status, { "content-type": "application/json; charset=utf-8" });
118
+ response.end(JSON.stringify(value, null, 2));
119
+ }
120
+ function sendText(response, status, value) {
121
+ response.writeHead(status, { "content-type": "text/plain; charset=utf-8" });
122
+ response.end(value);
123
+ }
124
+ async function readJson(request) {
125
+ const chunks = [];
126
+ for await (const chunk of request) {
127
+ chunks.push(Buffer.from(chunk));
128
+ }
129
+ const body = Buffer.concat(chunks).toString("utf8").trim();
130
+ return body ? JSON.parse(body) : {};
131
+ }
132
+ //# sourceMappingURL=admin-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-server.js","sourceRoot":"","sources":["../src/admin-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import type { EncodedNode, EncodedValue, ObjectRecord, StorageTarget, TransactionRecord, TypeDictionary, VerificationResult } from "@sprengmeister/graphvault/internal/core/types";
2
+ export type { GvqlResult } from "@sprengmeister/graphvault/internal/gvql/gvql";
3
+ export interface StorageAdminClientOptions {
4
+ storageDirectory: string;
5
+ storageTarget?: StorageTarget;
6
+ channelCount?: number;
7
+ allowMutations?: boolean;
8
+ }
9
+ export interface AdminSummary {
10
+ storageDirectory: string;
11
+ transactionId: number;
12
+ currentSnapshot?: string;
13
+ objectCount: number;
14
+ latestTransaction?: TransactionRecord;
15
+ typeDictionary?: TypeDictionary;
16
+ verification?: VerificationResult;
17
+ verificationSkipped?: boolean;
18
+ }
19
+ export interface AdminObjectListItem {
20
+ objectId: string;
21
+ kind: EncodedNode["kind"];
22
+ type?: string;
23
+ transactionId: number;
24
+ preview: string;
25
+ }
26
+ export interface AdminObjectPage {
27
+ offset: number;
28
+ limit: number;
29
+ total: number;
30
+ items: AdminObjectListItem[];
31
+ }
32
+ export interface AdminObjectChild {
33
+ from: string;
34
+ to: string;
35
+ path: string;
36
+ kind: EncodedNode["kind"];
37
+ type?: string;
38
+ preview: string;
39
+ }
40
+ export interface AdminObjectParent {
41
+ objectId: string;
42
+ path: string;
43
+ kind: EncodedNode["kind"];
44
+ type?: string;
45
+ transactionId: number;
46
+ preview: string;
47
+ }
48
+ export interface AdminHierarchyPathItem {
49
+ objectId: string;
50
+ label: string;
51
+ kind: EncodedNode["kind"];
52
+ type?: string;
53
+ transactionId: number;
54
+ preview: string;
55
+ }
56
+ export interface AdminHierarchyPath {
57
+ targetObjectId: string;
58
+ found: boolean;
59
+ items: AdminHierarchyPathItem[];
60
+ directParents: AdminObjectParent[];
61
+ }
62
+ export interface AdminRootReference {
63
+ root: EncodedValue;
64
+ rootObjectId?: string;
65
+ }
66
+ export interface AdminSearchResult {
67
+ objectId: string;
68
+ path: string;
69
+ preview: string;
70
+ }
71
+ export interface AdminGraph {
72
+ root: EncodedValue;
73
+ nodes: AdminGraphNode[];
74
+ edges: AdminGraphEdge[];
75
+ }
76
+ export interface AdminGraphNode {
77
+ objectId: string;
78
+ kind: EncodedNode["kind"];
79
+ type?: string;
80
+ }
81
+ export interface AdminGraphEdge {
82
+ from: string;
83
+ to: string;
84
+ path: string;
85
+ }
86
+ export interface AdminMutation {
87
+ objectId: string;
88
+ path: string;
89
+ value: unknown;
90
+ }
91
+ export interface AdminMutationPreview {
92
+ objectId: string;
93
+ path: string;
94
+ before: EncodedValue;
95
+ after: EncodedValue;
96
+ }
97
+ export type AdminObjectRecord = ObjectRecord;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=admin-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-types.js","sourceRoot":"","sources":["../src/admin-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare const ADMIN_HTML: string;