@ibgib/space-gib 0.0.1

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 (84) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/Dockerfile +14 -0
  3. package/IMPLEMENTATION.md +484 -0
  4. package/README.md +46 -0
  5. package/dist/client/bootstrap.mjs +58 -0
  6. package/dist/client/bootstrap.mjs.map +7 -0
  7. package/dist/client/chunk-CT47Z5WU.mjs +21 -0
  8. package/dist/client/chunk-CT47Z5WU.mjs.map +7 -0
  9. package/dist/client/chunk-RHEDTRKF.mjs +235 -0
  10. package/dist/client/chunk-RHEDTRKF.mjs.map +7 -0
  11. package/dist/client/index.html +147 -0
  12. package/dist/client/index.mjs +2 -0
  13. package/dist/client/index.mjs.map +7 -0
  14. package/dist/client/script.mjs +2 -0
  15. package/dist/client/script.mjs.map +7 -0
  16. package/dist/client/style.css +605 -0
  17. package/dist/respec-gib.node.mjs +5 -0
  18. package/dist/server/server.mjs +20157 -0
  19. package/dist/server/server.mjs.map +7 -0
  20. package/generate-version-file.js +35 -0
  21. package/package.json +27 -0
  22. package/src/client/AUTO-GENERATED-version.mts +11 -0
  23. package/src/client/README.md +19 -0
  24. package/src/client/api/function-infos.web.mts +38 -0
  25. package/src/client/api/space-gib-api-bridge.mts +85 -0
  26. package/src/client/bootstrap.mts +49 -0
  27. package/src/client/components/keystone-creator/keystone-creator.css +139 -0
  28. package/src/client/components/keystone-creator/keystone-creator.html +26 -0
  29. package/src/client/components/keystone-creator/keystone-creator.mts +229 -0
  30. package/src/client/constants.mts +76 -0
  31. package/src/client/custom.d.ts +11 -0
  32. package/src/client/dev-tools.mts +540 -0
  33. package/src/client/helpers.web.mts +178 -0
  34. package/src/client/index.html +147 -0
  35. package/src/client/index.mts +59 -0
  36. package/src/client/script.mts +13 -0
  37. package/src/client/style.css +605 -0
  38. package/src/client/types.mts +85 -0
  39. package/src/client/ui/shell/space-gib-shell-constants.mts +24 -0
  40. package/src/client/ui/shell/space-gib-shell-service.mts +233 -0
  41. package/src/client/ui/shell/space-gib-shell-types.mts +5 -0
  42. package/src/client/witness/app/space-gib/space-gib-app-v1.mts +160 -0
  43. package/src/client/witness/app/space-gib/space-gib-constants.mts +38 -0
  44. package/src/client/witness/app/space-gib/space-gib-helper.mts +72 -0
  45. package/src/client/witness/app/space-gib/space-gib-types.mts +47 -0
  46. package/src/common/keystone-policies.mts +159 -0
  47. package/src/respec-gib.node.mts +6 -0
  48. package/src/server/README.md +18 -0
  49. package/src/server/bootstrap-helper.mts +141 -0
  50. package/src/server/bootstrap-helper.respec.mts +100 -0
  51. package/src/server/metaspace-nodeindexedspace/metaspace-nodeindexedspace.mts +85 -0
  52. package/src/server/path-constants.mts +89 -0
  53. package/src/server/path-helper.mts +101 -0
  54. package/src/server/path-helper.respec.mts +94 -0
  55. package/src/server/serve-gib/CHANGELOG.md +29 -0
  56. package/src/server/serve-gib/README.md +34 -0
  57. package/src/server/serve-gib/constants.mts +1 -0
  58. package/src/server/serve-gib/handlers/api/debug/ws-echo.handler.mts +104 -0
  59. package/src/server/serve-gib/handlers/api/health.handler.mts +23 -0
  60. package/src/server/serve-gib/handlers/api/health.respec.mts +51 -0
  61. package/src/server/serve-gib/handlers/api/ibgib/ibgib-handler-types.mts +49 -0
  62. package/src/server/serve-gib/handlers/api/ibgib/ibgib.handler.mts +176 -0
  63. package/src/server/serve-gib/handlers/api/keystone/keystone-evolve.handler.mts +261 -0
  64. package/src/server/serve-gib/handlers/api/keystone/keystone-genesis.handler.mts +146 -0
  65. package/src/server/serve-gib/handlers/api/keystone/keystone-get.handler.mts +198 -0
  66. package/src/server/serve-gib/handlers/api/keystone/keystone-get.respec.mts +107 -0
  67. package/src/server/serve-gib/handlers/api/keystone/keystone-handler-types.mts +29 -0
  68. package/src/server/serve-gib/handlers/api/keystone/keystone-post.handler.mts +70 -0
  69. package/src/server/serve-gib/handlers/api/keystone/keystone-post.respec.mts +130 -0
  70. package/src/server/serve-gib/handlers/error-handler.mts +36 -0
  71. package/src/server/serve-gib/handlers/handler-base.mts +383 -0
  72. package/src/server/serve-gib/handlers/static-handler.mts +82 -0
  73. package/src/server/serve-gib/handlers/ws/sync-upgrade.handler.mts +498 -0
  74. package/src/server/serve-gib/handlers/ws/ws-helper.mts +111 -0
  75. package/src/server/serve-gib/handlers/ws/ws-types.mts +53 -0
  76. package/src/server/serve-gib/serve-gib-helpers.mts +32 -0
  77. package/src/server/serve-gib/serve-gib-v1.mts +172 -0
  78. package/src/server/serve-gib/serve-gib.respec.mts +90 -0
  79. package/src/server/serve-gib/types.mts +102 -0
  80. package/src/server/server-constants.mts +2 -0
  81. package/src/server/server.mts +96 -0
  82. package/tsconfig.json +29 -0
  83. package/tsconfig.server.json +29 -0
  84. package/tsconfig.test.json +27 -0
@@ -0,0 +1,178 @@
1
+ /**
2
+ * @module helpers.web
3
+ *
4
+ * Web-specific helper functions for space-gib.
5
+ */
6
+
7
+ import { extractErrorMsg } from "@ibgib/helper-gib/dist/helpers/utils-helper.mjs";
8
+ import { storageGet } from "@ibgib/web-gib/dist/storage/storage-helpers.web.mjs";
9
+ import { initAppStorage } from "@ibgib/web-gib/dist/helpers.web.mjs";
10
+ import { getGlobalMetaspace_waitIfNeeded } from "@ibgib/web-gib/dist/helpers.mjs";
11
+ import { IbGibDynamicComponentMetaCtorOpts } from "@ibgib/web-gib/dist/ui/component/component-types.mjs";
12
+ import { IbGibGlobalThisInfo } from "@ibgib/web-gib/dist/types.mjs";
13
+ import { delay } from "@ibgib/helper-gib/dist/helpers/utils-helper.mjs";
14
+
15
+ import { GLOBAL_LOG_A_LOT } from "./constants.mjs";
16
+ import { AUTO_GENERATED_VERSION } from "./AUTO-GENERATED-version.mjs";
17
+ import {
18
+ IbGibAmbientContextConfig,
19
+ IbGibGlobalThis_SpaceGib,
20
+ IbGibGlobalThis_Common,
21
+ } from "./types.mjs";
22
+
23
+ const logalot = GLOBAL_LOG_A_LOT;
24
+
25
+ // ---------------------------------------------------------------------------
26
+ // Storage initialization
27
+ // ---------------------------------------------------------------------------
28
+
29
+ export async function initIbGibStorage(config: IbGibAmbientContextConfig): Promise<void> {
30
+ const lc = `[${initIbGibStorage.name}]`;
31
+ try {
32
+ if (logalot) { console.log(`${lc} starting... (I: 1905af1827a34ca8a5507fe0c5085b01)`); }
33
+ await initAppStorage({
34
+ infos: [
35
+ {
36
+ dbName: config.dbName,
37
+ storeNames: [config.storeName, ...(config.additionalStoreNames ?? [])],
38
+ },
39
+ ],
40
+ });
41
+ } catch (error) {
42
+ console.error(`${lc} ${extractErrorMsg(error)}`);
43
+ throw error;
44
+ } finally {
45
+ if (logalot) { console.log(`${lc} complete.`); }
46
+ }
47
+ }
48
+
49
+ // ---------------------------------------------------------------------------
50
+ // globalThis initialization
51
+ // ---------------------------------------------------------------------------
52
+
53
+ export function initIbGibGlobalThis(config: IbGibAmbientContextConfig): void {
54
+ const lc = `[${initIbGibGlobalThis.name}]`;
55
+ try {
56
+ if (logalot) { console.log(`${lc} starting... (I: 7be20d161bb14a498c44a42d3193bec1)`); }
57
+
58
+ if (!(globalThis as any).ibgib) {
59
+ (globalThis as any).ibgib = {
60
+ dbName_hack: config.dbName,
61
+ apiKeyName_hack: config.apiKeyName,
62
+ storeName_hack: config.storeName,
63
+ } satisfies IbGibGlobalThisInfo;
64
+ }
65
+
66
+ if (!(globalThis as any).ibgib.spaceGib) {
67
+ (globalThis as any).ibgib.spaceGib = {
68
+ version: AUTO_GENERATED_VERSION,
69
+ spaceShim: {},
70
+ fnDefaultGetAPIKey: async () => {
71
+ const apiKey = await storageGet({
72
+ dbName: config.dbName,
73
+ storeName: config.storeName,
74
+ key: config.apiKeyName,
75
+ });
76
+ return apiKey ?? '';
77
+ },
78
+ dbName_hack: config.dbName,
79
+ apiKeyName_hack: config.apiKeyName,
80
+ storeName_hack: config.storeName,
81
+ } satisfies IbGibGlobalThis_SpaceGib;
82
+ }
83
+ } catch (error) {
84
+ console.error(`${lc} ${extractErrorMsg(error)}`);
85
+ throw error;
86
+ } finally {
87
+ if (logalot) { console.log(`${lc} complete.`); }
88
+ }
89
+ }
90
+
91
+ // ---------------------------------------------------------------------------
92
+ // GlobalThis accessors
93
+ // ---------------------------------------------------------------------------
94
+
95
+ export function getIbGibGlobalThis_SpaceGib(
96
+ config?: IbGibAmbientContextConfig
97
+ ): IbGibGlobalThis_SpaceGib {
98
+ if (!(globalThis as any).ibgib?.spaceGib) {
99
+ if (!config) {
100
+ throw new Error(`Global context not initialized and config not provided.`);
101
+ }
102
+ initIbGibGlobalThis(config);
103
+ }
104
+ return (globalThis as any).ibgib.spaceGib as IbGibGlobalThis_SpaceGib;
105
+ }
106
+
107
+ export function getIbGibGlobalThis_Common(): IbGibGlobalThis_Common {
108
+ const g = (globalThis as any).ibgib?.spaceGib;
109
+ if (!g) {
110
+ throw new Error(`(UNEXPECTED) globalThis.ibgib.spaceGib not initialized.`);
111
+ }
112
+ return g as IbGibGlobalThis_Common;
113
+ }
114
+
115
+ // ---------------------------------------------------------------------------
116
+ // API key helper
117
+ // ---------------------------------------------------------------------------
118
+
119
+ export function getDefaultFnGetAPIKey(): () => Promise<string> {
120
+ return async () => {
121
+ const gb = getIbGibGlobalThis_SpaceGib();
122
+ return (await storageGet({
123
+ dbName: gb.dbName_hack,
124
+ storeName: gb.storeName_hack,
125
+ key: gb.apiKeyName_hack,
126
+ })) ?? '';
127
+ };
128
+ }
129
+
130
+ // ---------------------------------------------------------------------------
131
+ // Dynamic bootstrap loading
132
+ // ---------------------------------------------------------------------------
133
+
134
+ export async function dynamicallyLoadBootstrapScript(path: string): Promise<void> {
135
+ const lc = `[${dynamicallyLoadBootstrapScript.name}]`;
136
+ try {
137
+ if (logalot) { console.log(`${lc} starting... (I: 3123b18eb29b480bad056a9a029b9ad4)`); }
138
+ const module = await import(path);
139
+ await module.bootstrapSpaceGibApp();
140
+ } catch (error) {
141
+ console.error(`${lc} ${extractErrorMsg(error)}`);
142
+ throw error;
143
+ } finally {
144
+ if (logalot) { console.log(`${lc} complete.`); }
145
+ }
146
+ }
147
+
148
+ // ---------------------------------------------------------------------------
149
+ // Component constructor args helper
150
+ // ---------------------------------------------------------------------------
151
+
152
+ export function getComponentCtorArg(): IbGibDynamicComponentMetaCtorOpts {
153
+ const fnGetMetaspace = async () => getGlobalMetaspace_waitIfNeeded();
154
+
155
+ const bootstrapPromiseWrapper = new Promise<void>(async (resolve, reject) => {
156
+ try {
157
+ let maxTries = 100_000;
158
+ let counter = 0;
159
+ let bootstrapPromise: Promise<void> | undefined;
160
+ do {
161
+ bootstrapPromise =
162
+ getIbGibGlobalThis_SpaceGib()?.bootstrapPromise;
163
+ counter++;
164
+ if (counter > maxTries) { break; }
165
+ await delay(10);
166
+ } while (bootstrapPromise === undefined);
167
+ if (!bootstrapPromise) {
168
+ throw new Error(`Timed out waiting for bootstrapPromise. (E: ceb3ba5261994476900e4a623c0e9d10)`);
169
+ }
170
+ await bootstrapPromise;
171
+ resolve();
172
+ } catch (error) {
173
+ reject(error);
174
+ }
175
+ });
176
+
177
+ return { fnGetMetaspace, bootstrapPromise: bootstrapPromiseWrapper };
178
+ }
@@ -0,0 +1,147 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en-US">
3
+
4
+ <head>
5
+ <meta charset="utf-8" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <!--
8
+ HTML_META_APP_ID: Used by isExecutingInBlankGibWebAppProper() to detect
9
+ whether code is running in the top-level shell vs. an embedded iframe.
10
+ The content value MUST be unique per app.
11
+ -->
12
+ <meta name="ibgib-app-id" content="0c45ac92e668410190b115512d5e2d51" />
13
+ <meta name="description"
14
+ content="space-gib — ibgib durable storage and SaaS provider. Store, retrieve, and manage ibgib data in a decentralized, content-addressed space." />
15
+ <title>space-gib · ibgib.space</title>
16
+ <link rel="stylesheet" type="text/css" href="style.css">
17
+ <script type="module" src="script.mjs" defer></script>
18
+ <script type="module" src="index.mjs" defer></script>
19
+ </head>
20
+
21
+ <body>
22
+ <!--
23
+ REQUIRED: fullscreen-dialog
24
+ This block is required by @ibgib/web-gib helper functions (alertUser,
25
+ promptForText, promptForSecret, promptForConfirm). Do not remove or rename
26
+ the element IDs prefixed with "fullscreen-dialog-".
27
+ -->
28
+ <dialog id="fullscreen-dialog" class="fullscreen-dialog">
29
+ <div id="fullscreen-dialog-content" class="fullscreen-dialog-content">
30
+ <div id="fullscreen-dialog-header" class="fullscreen-dialog-header">
31
+ <h2 id="fullscreen-dialog-title"></h2>
32
+ </div>
33
+ <div id="fullscreen-dialog-body" class="fullscreen-dialog-body">
34
+ <div id="fullscreen-dialog-message" class="fullscreen-dialog-message"></div>
35
+ <input type="text" id="fullscreen-dialog-prompt-input" class="collapsed">
36
+ </div>
37
+ <div id="fullscreen-dialog-footer" class="fullscreen-dialog-footer">
38
+ <button id="fullscreen-dialog-ok-button" class="dialog-button">OK</button>
39
+ <button id="fullscreen-dialog-cancel-button" class="dialog-button">Cancel</button>
40
+ </div>
41
+ </div>
42
+ </dialog>
43
+
44
+ <!-- =====================================================================
45
+ SPACE-GIB SHELL
46
+ This is the Phase 1 shell scaffold. The full four-panel UI will be
47
+ wired up in Phase 1b / 2 alongside the shell service.
48
+ ===================================================================== -->
49
+
50
+ <div id="app-root" class="app-root">
51
+
52
+ <!-- Header Panel -->
53
+ <header id="header-panel" class="header-panel">
54
+ <div class="header-content">
55
+ <button id="btn-left-panel-toggle" class="panel-toggle-btn" aria-label="Toggle Left Panel">☰</button>
56
+ <a id="space-gib-title-link" href="/" class="brand-link">
57
+ <span class="brand-icon">◈</span>
58
+ <span class="brand-name">space<span class="brand-accent">-</span>gib</span>
59
+ </a>
60
+ <nav class="header-nav" aria-label="Main navigation">
61
+ <a href="/docs" class="nav-link">Docs</a>
62
+ <a href="/api" class="nav-link">API</a>
63
+ </nav>
64
+ <button id="btn-right-panel-toggle" class="panel-toggle-btn" aria-label="Toggle Right Panel">◨</button>
65
+ </div>
66
+ </header>
67
+
68
+ <!-- Middle Content Row -->
69
+ <div class="middle-row">
70
+ <!-- Left Panel -->
71
+ <aside id="left-panel" class="side-panel left-panel collapsed">
72
+ <div class="panel-content-inner">
73
+ <p class="placeholder-text">Left Panel Content</p>
74
+ </div>
75
+ </aside>
76
+
77
+ <!-- Left Resizer -->
78
+ <div id="left-resizer" class="resizer resizer-v"></div>
79
+
80
+ <!-- Center Panel -->
81
+ <main id="center-panel" class="center-panel">
82
+ <div class="center-panel-content">
83
+ <section class="hero-section">
84
+ <div class="hero-glyph" aria-hidden="true">◈</div>
85
+ <h1 class="hero-title">space-gib</h1>
86
+ <p class="hero-tagline">
87
+ Durable, content-addressed ibgib storage.<br>
88
+ Your data, your keystone, your space.
89
+ </p>
90
+ <div class="cta-row">
91
+ <button id="btn-create-keystone" class="cta-btn cta-primary">Create Keystone</button>
92
+ <a href="/docs" class="cta-btn cta-secondary">Learn More</a>
93
+ </div>
94
+ </section>
95
+
96
+ <!-- Status / health indicator -->
97
+ <section class="status-section" id="status-section" aria-live="polite">
98
+ <div id="engine-status" class="status-badge status-loading">
99
+ ⏳ Initialising ibgib engine…
100
+ </div>
101
+ </section>
102
+
103
+ <!-- DEV TOOLS — remove or hide once WS sync is confirmed working -->
104
+ <section class="dev-panel" id="dev-panel" aria-label="Developer tools">
105
+ <h2 class="dev-panel-title">Dev Tools</h2>
106
+ <div class="dev-panel-row">
107
+ <button id="btn-print-dev-state" class="dev-btn">Print Dev State</button>
108
+ <button id="btn-create-domain-keystone" class="dev-btn">1. Create Domain Keystone (I)</button>
109
+ <button id="btn-create-test-ibgib" class="dev-btn" disabled>2. Create Test IbGib (X)</button>
110
+ <button id="btn-create-session-keystone" class="dev-btn" disabled>3. Create Session Keystone (S)</button>
111
+ <button id="btn-evolve-domain-keystone" class="dev-btn" disabled>4. Evolve Domain Keystone (I^I1)</button>
112
+ <button id="btn-perform-sync" class="dev-btn" disabled>5. Perform Sync Handshake (S)</button>
113
+ <button id="btn-test-ws" class="dev-btn">Test WebSocket Echo</button>
114
+ </div>
115
+ <pre id="dev-panel-log" class="dev-panel-log" aria-live="polite" aria-label="Dev log"></pre>
116
+ </section>
117
+ </div>
118
+ </main>
119
+
120
+ <!-- Right Resizer -->
121
+ <div id="right-resizer" class="resizer resizer-v"></div>
122
+
123
+ <!-- Right Panel -->
124
+ <aside id="right-panel" class="side-panel right-panel collapsed">
125
+ <div class="panel-content-inner">
126
+ <p class="placeholder-text">Right Panel Content</p>
127
+ </div>
128
+ </aside>
129
+ </div>
130
+
131
+ <!-- Footer Resizer -->
132
+ <div id="footer-resizer" class="resizer resizer-h"></div>
133
+
134
+ <!-- Footer Panel -->
135
+ <footer id="footer-panel" class="footer-panel">
136
+ <p class="footer-text">
137
+ <span>© ibgib contributors</span> ·
138
+ <a href="https://ibgib.space" class="footer-link">ibgib.space</a> ·
139
+ <a href="https://github.com/ibgib" class="footer-link" target="_blank" rel="noopener">GitHub</a>
140
+ </p>
141
+ </footer>
142
+
143
+ </div>
144
+
145
+ </body>
146
+
147
+ </html>
@@ -0,0 +1,59 @@
1
+ import { extractErrorMsg } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
2
+
3
+ import { GLOBAL_LOG_A_LOT, APP_CONFIG } from './constants.mjs';
4
+ import {
5
+ initIbGibStorage,
6
+ initIbGibGlobalThis,
7
+ dynamicallyLoadBootstrapScript,
8
+ } from './helpers.web.mjs';
9
+ import { initDevTools } from './dev-tools.mjs';
10
+
11
+ initIbGibGlobalThis(APP_CONFIG);
12
+
13
+ const logalot = GLOBAL_LOG_A_LOT;
14
+
15
+ /**
16
+ * hmm
17
+ * Initiates startup without blocking DOMContentLoaded.
18
+ *
19
+ * Sequence:
20
+ * 1. Init IndexedDB storage
21
+ * 2. Dynamically import bootstrap.mts — the heavy ibgib graph loads here
22
+ */
23
+ async function spinOffStartup(): Promise<void> {
24
+ const lc = `[${spinOffStartup.name}]`;
25
+ try {
26
+ if (logalot) { console.log(`${lc} starting... (I: 3d893846d02c4ff49181f9b8e586eb74)`); }
27
+ console.time(lc);
28
+
29
+ document.addEventListener('DOMContentLoaded', async () => {
30
+ try {
31
+ console.timeLog(lc, 'DOMContentLoaded fired');
32
+
33
+ await initIbGibStorage(APP_CONFIG);
34
+ console.timeLog(lc, 'initIbGibStorage complete');
35
+
36
+ await dynamicallyLoadBootstrapScript('./bootstrap.mjs');
37
+ console.timeLog(lc, 'dynamicallyLoadBootstrapScript complete');
38
+
39
+ initDevTools();
40
+ console.timeLog(lc, 'initDevTools complete');
41
+
42
+ console.timeEnd(lc);
43
+ } catch (error) {
44
+ console.error(`${lc} ${extractErrorMsg(error)}`);
45
+ throw error;
46
+ }
47
+ });
48
+
49
+ } catch (error) {
50
+ console.timeEnd(lc);
51
+ debugger; // error in index.mts — investigate immediately
52
+ console.error(`${lc} ${extractErrorMsg(error)}`);
53
+ throw error;
54
+ } finally {
55
+ if (logalot) { console.log(`${lc} complete.`); }
56
+ }
57
+ }
58
+
59
+ spinOffStartup();
@@ -0,0 +1,13 @@
1
+ /**
2
+ * script.mts
3
+ *
4
+ * Early initialization script for the space-gib SPA.
5
+ * Runs as soon as the HTML is parsed (before DOMContentLoaded).
6
+ */
7
+
8
+ console.log('space-gib early script executing...');
9
+
10
+ import { getSpaceGibShellSvc } from "./ui/shell/space-gib-shell-service.mjs";
11
+
12
+ // Initialize the UI shell singleton
13
+ getSpaceGibShellSvc();