graphvault-studio 0.1.2 → 0.1.4

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/CHANGELOG.md CHANGED
@@ -1,8 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.4
4
+
5
+ - Add production safety status and score to the summary API, Overview, KPI bar, and Operations view.
6
+ - Surface concrete warnings for pending WAL recovery, disabled WAL, missing stale-lock recovery, verification findings, and missing transaction hash-chain metadata.
7
+
8
+ ## 0.1.3
9
+
10
+ - Fix the published `graphvault-studio` npm binary so it starts correctly through npm's `.bin` symlink.
11
+ - Align CLI help with the published `graphvault-studio` command name.
12
+ - Add a package install smoke gate that verifies the published CLI and programmatic API from a fresh tarball install.
13
+
3
14
  ## 0.1.2
4
15
 
5
16
  - Publish the Studio CLI under the unscoped `graphvault-studio` npm package name for a reliable `npx graphvault-studio` install path.
17
+ - Add WAL-backed admin mutation commits with writer-lock protection and optional fencing-token validation.
18
+ - Add operational hardening information to the summary API, Studio KPI bar, `/api/operations`, and a dedicated Operations view.
19
+ - Publish `manifest.json` last for Studio mutation commits so late metadata failures remain recoverable instead of partially visible.
20
+ - Add versioned object-record read/write compatibility for GraphVault 0.2+ stores and maintenance.
21
+ - Add role-based access tokens for viewer, operator, and admin workflows.
22
+ - Add bounded graph-slice/subtree endpoints and a Studio graph view depth control for large stores.
23
+ - Show installed GraphVault Library compatibility status in the summary API and KPI bar.
24
+ - Add a CI-friendly compatibility preflight so Studio's dependency range must accept the recommended GraphVault Library runtime.
6
25
 
7
26
  ## 0.1.1
8
27
 
package/README.md CHANGED
@@ -41,11 +41,18 @@ It is deliberately generic. It does not assume customers, orders, tickets, CMS p
41
41
  - parent path lookup from object to root
42
42
  - support for objects with multiple direct parents
43
43
  - paged object browser for large stores
44
- - graph edge view
44
+ - depth-limited graph/subtree view for large stores and REST-style graph slices
45
45
  - GVQL query console for graph queries and batch-update previews
46
46
  - editable primitive fields with preview and confirmation-token safety
47
+ - reads and writes versioned GraphVault object records used by crash-safe 0.2+ stores
48
+ - admin mutations use writer locks, WAL prepare/commit records, and fencing-token validation when the installed GraphVault Library supports it
49
+ - admin mutations preserve GraphVault's SHA-256 transaction hash chain for audit-oriented stores
50
+ - direct edits and committed GVQL updates can attach actor, reason, source, and trace metadata to the transaction record
51
+ - operational hardening KPIs and an Operations view for WAL mode, pending WAL recovery, writer lock status, mutation mode, and latest transaction
52
+ - production safety score with concrete warnings for WAL, stale-lock recovery, verification, and transaction hash-chain readiness
53
+ - visible GraphVault Library compatibility status, including warnings for older runtime packages
47
54
  - verification, maintenance, backup, transaction and journal views
48
- - optional bearer-token protection
55
+ - optional bearer-token protection with viewer, operator, and admin roles
49
56
  - zero frontend build step; the UI is embedded in the TypeScript package
50
57
 
51
58
  ## Install
@@ -93,6 +100,33 @@ Optional auth:
93
100
  GRAPHVAULT_ADMIN_TOKEN=secret npx graphvault-studio --dir ./data
94
101
  ```
95
102
 
103
+ Role-based tokens:
104
+
105
+ ```bash
106
+ npx graphvault-studio \
107
+ --dir ./data \
108
+ --viewer-token view-secret \
109
+ --operator-token ops-secret \
110
+ --admin-token admin-secret \
111
+ --allow-mutations \
112
+ --confirm-token confirm
113
+ ```
114
+
115
+ - viewer: read-only API and UI access.
116
+ - operator: viewer access plus maintenance and backup endpoints.
117
+ - admin: full access, including committed direct edits and GVQL mutations.
118
+
119
+ For critical stores, run Studio with mutations behind authentication and a confirmation token:
120
+
121
+ ```bash
122
+ GRAPHVAULT_ADMIN_ROLE_TOKEN=secret npx graphvault-studio \
123
+ --dir ./data \
124
+ --allow-mutations \
125
+ --confirm-token "$(openssl rand -hex 16)"
126
+ ```
127
+
128
+ Studio mutation commits are written through the same storage-level safety shape expected from GraphVault deployments: writer lock, WAL prepare, data write, WAL commit marker, transaction journal, parent index, current pointer, and manifest publish as the final visibility step. With GraphVault Library 0.2 or newer, fencing tokens prevent stale recovered writers from publishing or releasing newer locks.
129
+
96
130
  Then open:
97
131
 
98
132
  ```text
@@ -114,6 +148,9 @@ The storage engine lives in [graphvault-library](https://github.com/Sprengmeiste
114
148
 
115
149
  - Studio is a pure TypeScript package with no frontend build toolchain.
116
150
  - The UI is served from the embedded admin server, so `npx graphvault-studio --dir ./data` is enough to inspect a store.
151
+ - The HTTP API exposes bounded graph slices through `/api/subtree?depth=2` and `/api/objects/:id/subtree?depth=2`, which is useful when you want to preview what an external REST endpoint would return.
152
+ - The Overview API and UI report the installed GraphVault Library version and warn when it is older than the recommended runtime for the current Studio build.
117
153
  - The package depends on GraphVault Library for storage layout, verification, parent index reading, and storage targets.
118
154
  - Run `npm test` to type-check, emit `dist/`, create a real store, exercise the admin client, and verify the embedded HTTP API.
155
+ - Run `npm run package:smoke` before publishing to install the generated tarball into a fresh temporary project and verify the CLI plus public programmatic API as a consumer would use them.
119
156
  - CI runs on Node.js 20 and 22.
@@ -5,6 +5,9 @@ export interface ParsedAdminCliArgs {
5
5
  port: number;
6
6
  allowMutations: boolean;
7
7
  authToken?: string;
8
+ viewerToken?: string;
9
+ operatorToken?: string;
10
+ adminToken?: string;
8
11
  mutationConfirmToken?: string;
9
12
  help: boolean;
10
13
  }
package/dist/admin-cli.js CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env node
2
+ import { realpathSync } from "node:fs";
3
+ import { fileURLToPath } from "node:url";
2
4
  import { startAdminServer } from "./admin-server.js";
3
5
  const DEFAULT_HOST = "127.0.0.1";
4
6
  const DEFAULT_PORT = 4177;
@@ -12,6 +14,15 @@ export function parseAdminCliArgs(argv, env = process.env) {
12
14
  if (env["GRAPHVAULT_ADMIN_TOKEN"]) {
13
15
  parsed.authToken = env["GRAPHVAULT_ADMIN_TOKEN"];
14
16
  }
17
+ if (env["GRAPHVAULT_VIEWER_TOKEN"]) {
18
+ parsed.viewerToken = env["GRAPHVAULT_VIEWER_TOKEN"];
19
+ }
20
+ if (env["GRAPHVAULT_OPERATOR_TOKEN"]) {
21
+ parsed.operatorToken = env["GRAPHVAULT_OPERATOR_TOKEN"];
22
+ }
23
+ if (env["GRAPHVAULT_ADMIN_ROLE_TOKEN"]) {
24
+ parsed.adminToken = env["GRAPHVAULT_ADMIN_ROLE_TOKEN"];
25
+ }
15
26
  if (env["GRAPHVAULT_ADMIN_CONFIRM_TOKEN"]) {
16
27
  parsed.mutationConfirmToken = env["GRAPHVAULT_ADMIN_CONFIRM_TOKEN"];
17
28
  }
@@ -41,6 +52,18 @@ export function parseAdminCliArgs(argv, env = process.env) {
41
52
  parsed.authToken = readValue(argv, ++index, arg);
42
53
  continue;
43
54
  }
55
+ if (arg === "--viewer-token") {
56
+ parsed.viewerToken = readValue(argv, ++index, arg);
57
+ continue;
58
+ }
59
+ if (arg === "--operator-token") {
60
+ parsed.operatorToken = readValue(argv, ++index, arg);
61
+ continue;
62
+ }
63
+ if (arg === "--admin-token") {
64
+ parsed.adminToken = readValue(argv, ++index, arg);
65
+ continue;
66
+ }
44
67
  if (arg === "--confirm-token" || arg === "--mutation-confirm-token") {
45
68
  parsed.mutationConfirmToken = readValue(argv, ++index, arg);
46
69
  continue;
@@ -51,19 +74,25 @@ export function parseAdminCliArgs(argv, env = process.env) {
51
74
  }
52
75
  export function adminCliHelp() {
53
76
  return [
54
- "Usage: graphvault-admin --dir <storage-directory> [options]",
77
+ "Usage: graphvault-studio --dir <storage-directory> [options]",
55
78
  "",
56
79
  "Options:",
57
80
  " --dir, --storage-directory <path> Storage directory to inspect.",
58
81
  " --host <host> Host to bind. Defaults to 127.0.0.1.",
59
82
  " --port <port> Port to bind. Defaults to 4177.",
60
83
  " --token, --auth-token <token> Bearer token for UI/API access.",
84
+ " --viewer-token <token> Read-only bearer token.",
85
+ " --operator-token <token> Maintenance and backup bearer token.",
86
+ " --admin-token <token> Full mutation bearer token.",
61
87
  " --confirm-token <token> Token required to commit mutations.",
62
88
  " --allow-mutations Enable maintenance and data mutation APIs.",
63
89
  " -h, --help Show this help.",
64
90
  "",
65
91
  "Environment:",
66
92
  " GRAPHVAULT_ADMIN_TOKEN Default bearer token.",
93
+ " GRAPHVAULT_VIEWER_TOKEN Read-only bearer token.",
94
+ " GRAPHVAULT_OPERATOR_TOKEN Maintenance and backup bearer token.",
95
+ " GRAPHVAULT_ADMIN_ROLE_TOKEN Full mutation bearer token.",
67
96
  " GRAPHVAULT_ADMIN_CONFIRM_TOKEN Default mutation confirmation token.",
68
97
  ].join("\n");
69
98
  }
@@ -85,12 +114,13 @@ async function main(argv) {
85
114
  const running = await startAdminServer({
86
115
  ...serverOptions,
87
116
  ...(options.authToken ? { authToken: options.authToken } : {}),
117
+ ...(accessTokensFromOptions(options).length ? { accessTokens: accessTokensFromOptions(options) } : {}),
88
118
  ...(options.mutationConfirmToken ? { mutationConfirmToken: options.mutationConfirmToken } : {}),
89
119
  });
90
120
  console.log(`GraphVault Studio: ${running.url}`);
91
121
  console.log(`Storage directory: ${options.storageDirectory}`);
92
122
  console.log(`Mutations: ${options.allowMutations ? "enabled" : "disabled"}`);
93
- if (options.authToken) {
123
+ if (options.authToken || accessTokensFromOptions(options).length) {
94
124
  console.log("Auth: bearer token required");
95
125
  }
96
126
  if (options.mutationConfirmToken) {
@@ -107,6 +137,13 @@ async function main(argv) {
107
137
  process.once("SIGINT", close);
108
138
  process.once("SIGTERM", close);
109
139
  }
140
+ function accessTokensFromOptions(options) {
141
+ return [
142
+ ...(options.viewerToken ? [{ token: options.viewerToken, role: "viewer" }] : []),
143
+ ...(options.operatorToken ? [{ token: options.operatorToken, role: "operator" }] : []),
144
+ ...(options.adminToken ? [{ token: options.adminToken, role: "admin" }] : []),
145
+ ];
146
+ }
110
147
  function readValue(argv, index, option) {
111
148
  const value = argv[index];
112
149
  if (!value || value.startsWith("-")) {
@@ -121,7 +158,19 @@ function parsePort(value) {
121
158
  }
122
159
  return port;
123
160
  }
124
- if (import.meta.url === `file://${process.argv[1]}`) {
161
+ function isCliEntryPoint(moduleUrl, argvPath) {
162
+ if (!argvPath) {
163
+ return false;
164
+ }
165
+ const modulePath = fileURLToPath(moduleUrl);
166
+ try {
167
+ return realpathSync(argvPath) === realpathSync(modulePath);
168
+ }
169
+ catch {
170
+ return argvPath === modulePath;
171
+ }
172
+ }
173
+ if (isCliEntryPoint(import.meta.url, process.argv[1])) {
125
174
  main(process.argv.slice(2)).catch((error) => {
126
175
  console.error(error instanceof Error ? error.message : String(error));
127
176
  console.error("");
@@ -1 +1 @@
1
- {"version":3,"file":"admin-cli.js","sourceRoot":"","sources":["../src/admin-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin-cli.js","sourceRoot":"","sources":["../src/admin-cli.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { BackupResult, MaintenanceResult, ObjectRecord, StorageTarget, TransactionRecord, TypeDictionary, VerificationResult } from "@sprengmeister/graphvault/internal/core/types";
2
2
  import type { GvqlExecutionOptions, GvqlResult } from "@sprengmeister/graphvault/internal/gvql/gvql";
3
- import type { AdminGraph, AdminHierarchyPath, AdminMutation, AdminMutationPreview, AdminObjectChild, AdminObjectListItem, AdminObjectPage, AdminRootReference, AdminSearchResult, AdminSummary, StorageAdminClientOptions } from "./admin-types.js";
4
- export type { AdminGraph, AdminGraphEdge, AdminGraphNode, AdminHierarchyPath, AdminHierarchyPathItem, AdminMutation, AdminMutationPreview, GvqlResult, AdminObjectChild, AdminObjectListItem, AdminObjectPage, AdminObjectParent, AdminRootReference, AdminSearchResult, AdminSummary, StorageAdminClientOptions, } from "./admin-types.js";
3
+ import type { AdminGraph, AdminHierarchyPath, AdminMutation, AdminMutationPreview, AdminObjectChild, AdminObjectListItem, AdminObjectPage, AdminRootReference, AdminSearchResult, AdminSummary, AdminSubtree, AdminTransactionMetadata, StorageAdminClientOptions } from "./admin-types.js";
4
+ export type { AdminGraph, AdminGraphEdge, AdminGraphNode, AdminHierarchyPath, AdminHierarchyPathItem, AdminMutation, AdminMutationPreview, GvqlResult, AdminObjectChild, AdminObjectListItem, AdminObjectPage, AdminObjectParent, AdminOperationalStatus, AdminRootReference, AdminSearchResult, AdminSummary, AdminSubtree, StorageAdminClientOptions, } from "./admin-types.js";
5
5
  export declare class StorageAdminClient {
6
6
  private readonly options;
7
7
  private readonly target;
@@ -24,10 +24,16 @@ export declare class StorageAdminClient {
24
24
  listObjectChildren(objectId: string): Promise<AdminObjectChild[]>;
25
25
  hierarchyPath(targetObjectId: string): Promise<AdminHierarchyPath>;
26
26
  graph(): Promise<AdminGraph>;
27
+ subtree(options?: {
28
+ rootObjectId?: string;
29
+ depth?: number;
30
+ }): Promise<AdminSubtree>;
27
31
  search(query: string, options?: {
28
32
  limit?: number;
29
33
  }): Promise<AdminSearchResult[]>;
30
- gvql(query: string, options?: GvqlExecutionOptions): Promise<GvqlResult>;
34
+ gvql(query: string, options?: GvqlExecutionOptions & {
35
+ metadata?: AdminTransactionMetadata;
36
+ }): Promise<GvqlResult>;
31
37
  listTransactions(): Promise<TransactionRecord[]>;
32
38
  readJournal(): Promise<string>;
33
39
  readTypeDictionary(): Promise<TypeDictionary | undefined>;
@@ -41,7 +47,19 @@ export declare class StorageAdminClient {
41
47
  }): Promise<BackupResult>;
42
48
  previewMutation(mutation: AdminMutation): Promise<AdminMutationPreview>;
43
49
  mutate(mutation: AdminMutation): Promise<TransactionRecord>;
50
+ private commitEnvelope;
44
51
  private requireManifest;
52
+ private readObjectRecord;
53
+ private envelopeFromManifest;
54
+ private get walDirectory();
55
+ private get transactionLogEnabled();
56
+ private hardening;
57
+ private operations;
58
+ private productionSafety;
59
+ private acquireWriteLock;
60
+ private lockOptions;
61
+ private assertLockValid;
62
+ private writeWalJson;
45
63
  private compact;
46
64
  private collectGarbage;
47
65
  private assertMutationsAllowed;