@stoneforge/quarry 0.1.0
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/LICENSE +13 -0
- package/README.md +160 -0
- package/dist/api/index.d.ts +8 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +8 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/quarry-api.d.ts +268 -0
- package/dist/api/quarry-api.d.ts.map +1 -0
- package/dist/api/quarry-api.js +3905 -0
- package/dist/api/quarry-api.js.map +1 -0
- package/dist/api/types.d.ts +1359 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +204 -0
- package/dist/api/types.js.map +1 -0
- package/dist/bin/sf.d.ts +3 -0
- package/dist/bin/sf.d.ts.map +1 -0
- package/dist/bin/sf.js +9 -0
- package/dist/bin/sf.js.map +1 -0
- package/dist/cli/commands/admin.d.ts +11 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +465 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/commands/alias.d.ts +8 -0
- package/dist/cli/commands/alias.d.ts.map +1 -0
- package/dist/cli/commands/alias.js +70 -0
- package/dist/cli/commands/alias.js.map +1 -0
- package/dist/cli/commands/channel.d.ts +13 -0
- package/dist/cli/commands/channel.d.ts.map +1 -0
- package/dist/cli/commands/channel.js +680 -0
- package/dist/cli/commands/channel.js.map +1 -0
- package/dist/cli/commands/completion.d.ts +8 -0
- package/dist/cli/commands/completion.d.ts.map +1 -0
- package/dist/cli/commands/completion.js +87 -0
- package/dist/cli/commands/completion.js.map +1 -0
- package/dist/cli/commands/config.d.ts +12 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +242 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/crud.d.ts +64 -0
- package/dist/cli/commands/crud.d.ts.map +1 -0
- package/dist/cli/commands/crud.js +805 -0
- package/dist/cli/commands/crud.js.map +1 -0
- package/dist/cli/commands/dep.d.ts +16 -0
- package/dist/cli/commands/dep.d.ts.map +1 -0
- package/dist/cli/commands/dep.js +499 -0
- package/dist/cli/commands/dep.js.map +1 -0
- package/dist/cli/commands/document.d.ts +12 -0
- package/dist/cli/commands/document.d.ts.map +1 -0
- package/dist/cli/commands/document.js +1039 -0
- package/dist/cli/commands/document.js.map +1 -0
- package/dist/cli/commands/embeddings.d.ts +12 -0
- package/dist/cli/commands/embeddings.d.ts.map +1 -0
- package/dist/cli/commands/embeddings.js +273 -0
- package/dist/cli/commands/embeddings.js.map +1 -0
- package/dist/cli/commands/entity.d.ts +16 -0
- package/dist/cli/commands/entity.d.ts.map +1 -0
- package/dist/cli/commands/entity.js +522 -0
- package/dist/cli/commands/entity.js.map +1 -0
- package/dist/cli/commands/gc.d.ts +10 -0
- package/dist/cli/commands/gc.d.ts.map +1 -0
- package/dist/cli/commands/gc.js +257 -0
- package/dist/cli/commands/gc.js.map +1 -0
- package/dist/cli/commands/help.d.ts +11 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +169 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/history.d.ts +9 -0
- package/dist/cli/commands/history.d.ts.map +1 -0
- package/dist/cli/commands/history.js +160 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/identity.d.ts +18 -0
- package/dist/cli/commands/identity.d.ts.map +1 -0
- package/dist/cli/commands/identity.js +698 -0
- package/dist/cli/commands/identity.js.map +1 -0
- package/dist/cli/commands/inbox.d.ts +20 -0
- package/dist/cli/commands/inbox.d.ts.map +1 -0
- package/dist/cli/commands/inbox.js +493 -0
- package/dist/cli/commands/inbox.js.map +1 -0
- package/dist/cli/commands/init.d.ts +20 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +144 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +9 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +200 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/library.d.ts +12 -0
- package/dist/cli/commands/library.d.ts.map +1 -0
- package/dist/cli/commands/library.js +665 -0
- package/dist/cli/commands/library.js.map +1 -0
- package/dist/cli/commands/message.d.ts +11 -0
- package/dist/cli/commands/message.d.ts.map +1 -0
- package/dist/cli/commands/message.js +608 -0
- package/dist/cli/commands/message.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +17 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +698 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/playbook.d.ts +12 -0
- package/dist/cli/commands/playbook.d.ts.map +1 -0
- package/dist/cli/commands/playbook.js +730 -0
- package/dist/cli/commands/playbook.js.map +1 -0
- package/dist/cli/commands/reset.d.ts +12 -0
- package/dist/cli/commands/reset.d.ts.map +1 -0
- package/dist/cli/commands/reset.js +306 -0
- package/dist/cli/commands/reset.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +11 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +106 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +8 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +82 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +14 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +370 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/task.d.ts +25 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +1153 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/commands/team.d.ts +13 -0
- package/dist/cli/commands/team.d.ts.map +1 -0
- package/dist/cli/commands/team.js +471 -0
- package/dist/cli/commands/team.js.map +1 -0
- package/dist/cli/commands/workflow.d.ts +16 -0
- package/dist/cli/commands/workflow.d.ts.map +1 -0
- package/dist/cli/commands/workflow.js +753 -0
- package/dist/cli/commands/workflow.js.map +1 -0
- package/dist/cli/completion.d.ts +28 -0
- package/dist/cli/completion.d.ts.map +1 -0
- package/dist/cli/completion.js +295 -0
- package/dist/cli/completion.js.map +1 -0
- package/dist/cli/db.d.ts +38 -0
- package/dist/cli/db.d.ts.map +1 -0
- package/dist/cli/db.js +90 -0
- package/dist/cli/db.js.map +1 -0
- package/dist/cli/formatter.d.ts +87 -0
- package/dist/cli/formatter.d.ts.map +1 -0
- package/dist/cli/formatter.js +464 -0
- package/dist/cli/formatter.js.map +1 -0
- package/dist/cli/index.d.ts +33 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +38 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/parser.d.ts +45 -0
- package/dist/cli/parser.d.ts.map +1 -0
- package/dist/cli/parser.js +256 -0
- package/dist/cli/parser.js.map +1 -0
- package/dist/cli/plugin-loader.d.ts +39 -0
- package/dist/cli/plugin-loader.d.ts.map +1 -0
- package/dist/cli/plugin-loader.js +165 -0
- package/dist/cli/plugin-loader.js.map +1 -0
- package/dist/cli/plugin-registry.d.ts +50 -0
- package/dist/cli/plugin-registry.d.ts.map +1 -0
- package/dist/cli/plugin-registry.js +206 -0
- package/dist/cli/plugin-registry.js.map +1 -0
- package/dist/cli/plugin-types.d.ts +106 -0
- package/dist/cli/plugin-types.d.ts.map +1 -0
- package/dist/cli/plugin-types.js +103 -0
- package/dist/cli/plugin-types.js.map +1 -0
- package/dist/cli/runner.d.ts +35 -0
- package/dist/cli/runner.d.ts.map +1 -0
- package/dist/cli/runner.js +340 -0
- package/dist/cli/runner.js.map +1 -0
- package/dist/cli/suggest.d.ts +15 -0
- package/dist/cli/suggest.d.ts.map +1 -0
- package/dist/cli/suggest.js +49 -0
- package/dist/cli/suggest.js.map +1 -0
- package/dist/cli/types.d.ts +138 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +63 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/config/config.d.ts +86 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +348 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/defaults.d.ts +66 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +114 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/duration.d.ts +75 -0
- package/dist/config/duration.d.ts.map +1 -0
- package/dist/config/duration.js +190 -0
- package/dist/config/duration.js.map +1 -0
- package/dist/config/env.d.ts +67 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +207 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/file.d.ts +97 -0
- package/dist/config/file.d.ts.map +1 -0
- package/dist/config/file.js +365 -0
- package/dist/config/file.js.map +1 -0
- package/dist/config/index.d.ts +35 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +41 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/merge.d.ts +53 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/merge.js +226 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/types.d.ts +257 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +72 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +55 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +251 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/http/index.d.ts +8 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +12 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/sync-handlers.d.ts +162 -0
- package/dist/http/sync-handlers.d.ts.map +1 -0
- package/dist/http/sync-handlers.js +271 -0
- package/dist/http/sync-handlers.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/server/index.d.ts +34 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +3329 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/static.d.ts +18 -0
- package/dist/server/static.d.ts.map +1 -0
- package/dist/server/static.js +71 -0
- package/dist/server/static.js.map +1 -0
- package/dist/server/ws/broadcaster.d.ts +8 -0
- package/dist/server/ws/broadcaster.d.ts.map +1 -0
- package/dist/server/ws/broadcaster.js +7 -0
- package/dist/server/ws/broadcaster.js.map +1 -0
- package/dist/server/ws/handler.d.ts +55 -0
- package/dist/server/ws/handler.d.ts.map +1 -0
- package/dist/server/ws/handler.js +160 -0
- package/dist/server/ws/handler.js.map +1 -0
- package/dist/services/blocked-cache.d.ts +297 -0
- package/dist/services/blocked-cache.d.ts.map +1 -0
- package/dist/services/blocked-cache.js +755 -0
- package/dist/services/blocked-cache.js.map +1 -0
- package/dist/services/dependency.d.ts +205 -0
- package/dist/services/dependency.d.ts.map +1 -0
- package/dist/services/dependency.js +566 -0
- package/dist/services/dependency.js.map +1 -0
- package/dist/services/embeddings/fusion.d.ts +33 -0
- package/dist/services/embeddings/fusion.d.ts.map +1 -0
- package/dist/services/embeddings/fusion.js +34 -0
- package/dist/services/embeddings/fusion.js.map +1 -0
- package/dist/services/embeddings/index.d.ts +12 -0
- package/dist/services/embeddings/index.d.ts.map +1 -0
- package/dist/services/embeddings/index.js +10 -0
- package/dist/services/embeddings/index.js.map +1 -0
- package/dist/services/embeddings/local-provider.d.ts +31 -0
- package/dist/services/embeddings/local-provider.d.ts.map +1 -0
- package/dist/services/embeddings/local-provider.js +80 -0
- package/dist/services/embeddings/local-provider.js.map +1 -0
- package/dist/services/embeddings/service.d.ts +76 -0
- package/dist/services/embeddings/service.d.ts.map +1 -0
- package/dist/services/embeddings/service.js +153 -0
- package/dist/services/embeddings/service.js.map +1 -0
- package/dist/services/embeddings/types.d.ts +70 -0
- package/dist/services/embeddings/types.d.ts.map +1 -0
- package/dist/services/embeddings/types.js +8 -0
- package/dist/services/embeddings/types.js.map +1 -0
- package/dist/services/id-length-cache.d.ts +156 -0
- package/dist/services/id-length-cache.d.ts.map +1 -0
- package/dist/services/id-length-cache.js +197 -0
- package/dist/services/id-length-cache.js.map +1 -0
- package/dist/services/inbox.d.ts +147 -0
- package/dist/services/inbox.d.ts.map +1 -0
- package/dist/services/inbox.js +428 -0
- package/dist/services/inbox.js.map +1 -0
- package/dist/services/index.d.ts +10 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +10 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/priority-service.d.ts +145 -0
- package/dist/services/priority-service.d.ts.map +1 -0
- package/dist/services/priority-service.js +272 -0
- package/dist/services/priority-service.js.map +1 -0
- package/dist/services/search-utils.d.ts +47 -0
- package/dist/services/search-utils.d.ts.map +1 -0
- package/dist/services/search-utils.js +83 -0
- package/dist/services/search-utils.js.map +1 -0
- package/dist/sync/hash.d.ts +48 -0
- package/dist/sync/hash.d.ts.map +1 -0
- package/dist/sync/hash.js +136 -0
- package/dist/sync/hash.js.map +1 -0
- package/dist/sync/index.d.ts +11 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +16 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/merge.d.ts +80 -0
- package/dist/sync/merge.d.ts.map +1 -0
- package/dist/sync/merge.js +310 -0
- package/dist/sync/merge.js.map +1 -0
- package/dist/sync/serialization.d.ts +132 -0
- package/dist/sync/serialization.d.ts.map +1 -0
- package/dist/sync/serialization.js +306 -0
- package/dist/sync/serialization.js.map +1 -0
- package/dist/sync/service.d.ts +102 -0
- package/dist/sync/service.d.ts.map +1 -0
- package/dist/sync/service.js +493 -0
- package/dist/sync/service.js.map +1 -0
- package/dist/sync/types.d.ts +275 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +76 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/systems/identity.d.ts +479 -0
- package/dist/systems/identity.d.ts.map +1 -0
- package/dist/systems/identity.js +817 -0
- package/dist/systems/identity.js.map +1 -0
- package/dist/systems/index.d.ts +8 -0
- package/dist/systems/index.d.ts.map +1 -0
- package/dist/systems/index.js +29 -0
- package/dist/systems/index.js.map +1 -0
- package/package.json +121 -0
- package/web/assets/charts-vendor-D1YcbGux.js +55 -0
- package/web/assets/dnd-vendor-DmxE-_ZH.js +5 -0
- package/web/assets/editor-vendor-BxraAWts.js +279 -0
- package/web/assets/index-B77vv208.js +341 -0
- package/web/assets/index-CF_XnVLh.css +1 -0
- package/web/assets/router-vendor-BCKpRBrB.js +41 -0
- package/web/assets/ui-vendor-DUahGnbT.js +45 -0
- package/web/assets/utils-vendor-CfYKiENT.js +813 -0
- package/web/favicon.ico +0 -0
- package/web/index.html +23 -0
- package/web/logo.png +0 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP Sync Handlers - Browser sync support via HTTP endpoints
|
|
3
|
+
*
|
|
4
|
+
* Provides framework-agnostic handlers for browser sync operations.
|
|
5
|
+
* These can be integrated with any HTTP framework (Bun.serve, Express, Hono, etc.)
|
|
6
|
+
*
|
|
7
|
+
* Implements the browser sync protocol from api/sync.md:
|
|
8
|
+
* 1. Browser exports local changes
|
|
9
|
+
* 2. HTTP POST to server with JSONL
|
|
10
|
+
* 3. Server merges with its state
|
|
11
|
+
* 4. Server exports current state
|
|
12
|
+
* 5. HTTP response with JSONL
|
|
13
|
+
* 6. Browser imports and merges
|
|
14
|
+
*/
|
|
15
|
+
import { createSyncService } from '../sync/service.js';
|
|
16
|
+
import { createTimestamp, ValidationError, ErrorCode } from '@stoneforge/core';
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Handler Class
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* HTTP handlers for browser sync operations
|
|
22
|
+
*/
|
|
23
|
+
export class SyncHttpHandlers {
|
|
24
|
+
backend;
|
|
25
|
+
syncService;
|
|
26
|
+
constructor(backend) {
|
|
27
|
+
this.backend = backend;
|
|
28
|
+
this.syncService = createSyncService(backend);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Handle GET /api/sync/status
|
|
32
|
+
*
|
|
33
|
+
* Returns current sync status including dirty element count
|
|
34
|
+
*/
|
|
35
|
+
getStatus() {
|
|
36
|
+
try {
|
|
37
|
+
const dirtyElements = this.backend.getDirtyElements();
|
|
38
|
+
const status = {
|
|
39
|
+
dirtyElementCount: dirtyElements.length,
|
|
40
|
+
dirtyDependencyCount: 0, // Not tracked separately currently
|
|
41
|
+
hasPendingChanges: dirtyElements.length > 0,
|
|
42
|
+
};
|
|
43
|
+
return {
|
|
44
|
+
success: true,
|
|
45
|
+
data: status,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
return this.handleError(error);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Handle GET /api/sync/pull or POST /api/sync/pull
|
|
54
|
+
*
|
|
55
|
+
* Exports server state as JSONL for client to import
|
|
56
|
+
*/
|
|
57
|
+
pull(request) {
|
|
58
|
+
try {
|
|
59
|
+
const includeEphemeral = request?.includeEphemeral ?? false;
|
|
60
|
+
const includeDependencies = request?.includeDependencies !== false;
|
|
61
|
+
const result = this.syncService.exportToString({
|
|
62
|
+
includeEphemeral,
|
|
63
|
+
includeDependencies,
|
|
64
|
+
});
|
|
65
|
+
const elementCount = result.elements
|
|
66
|
+
? result.elements.trim().split('\n').filter(Boolean).length
|
|
67
|
+
: 0;
|
|
68
|
+
const dependencyCount = includeDependencies && result.dependencies
|
|
69
|
+
? result.dependencies.trim().split('\n').filter(Boolean).length
|
|
70
|
+
: undefined;
|
|
71
|
+
return {
|
|
72
|
+
success: true,
|
|
73
|
+
data: {
|
|
74
|
+
elements: result.elements,
|
|
75
|
+
dependencies: includeDependencies ? result.dependencies : undefined,
|
|
76
|
+
elementCount,
|
|
77
|
+
dependencyCount,
|
|
78
|
+
exportedAt: createTimestamp(),
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
return this.handleError(error);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Handle POST /api/sync/push
|
|
88
|
+
*
|
|
89
|
+
* Imports client JSONL data to server
|
|
90
|
+
*/
|
|
91
|
+
push(request) {
|
|
92
|
+
try {
|
|
93
|
+
// Validate request
|
|
94
|
+
if (typeof request.elements !== 'string') {
|
|
95
|
+
throw new ValidationError('elements field is required and must be a string', ErrorCode.MISSING_REQUIRED_FIELD, {
|
|
96
|
+
field: 'elements',
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
const result = this.syncService.importFromStrings(request.elements, request.dependencies ?? '', {
|
|
100
|
+
dryRun: request.dryRun ?? false,
|
|
101
|
+
force: request.force ?? false,
|
|
102
|
+
});
|
|
103
|
+
// Optionally include server state after merge
|
|
104
|
+
let serverState;
|
|
105
|
+
if (!request.dryRun) {
|
|
106
|
+
// After push, client may want to pull updated state
|
|
107
|
+
const exported = this.syncService.exportToString({ includeDependencies: true });
|
|
108
|
+
const elementCount = exported.elements
|
|
109
|
+
? exported.elements.trim().split('\n').filter(Boolean).length
|
|
110
|
+
: 0;
|
|
111
|
+
const dependencyCount = exported.dependencies
|
|
112
|
+
? exported.dependencies.trim().split('\n').filter(Boolean).length
|
|
113
|
+
: 0;
|
|
114
|
+
serverState = {
|
|
115
|
+
elements: exported.elements,
|
|
116
|
+
dependencies: exported.dependencies,
|
|
117
|
+
elementCount,
|
|
118
|
+
dependencyCount,
|
|
119
|
+
exportedAt: createTimestamp(),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
success: true,
|
|
124
|
+
data: {
|
|
125
|
+
result,
|
|
126
|
+
serverState,
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
return this.handleError(error);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Handle POST /api/sync/exchange
|
|
136
|
+
*
|
|
137
|
+
* Bidirectional sync in a single request:
|
|
138
|
+
* 1. Import client data
|
|
139
|
+
* 2. Export server state
|
|
140
|
+
* 3. Return both results
|
|
141
|
+
*/
|
|
142
|
+
exchange(request) {
|
|
143
|
+
try {
|
|
144
|
+
// Validate request
|
|
145
|
+
if (typeof request.elements !== 'string') {
|
|
146
|
+
throw new ValidationError('elements field is required and must be a string', ErrorCode.MISSING_REQUIRED_FIELD, {
|
|
147
|
+
field: 'elements',
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
// Step 1: Import client data
|
|
151
|
+
const importResult = this.syncService.importFromStrings(request.elements, request.dependencies ?? '', {
|
|
152
|
+
dryRun: false,
|
|
153
|
+
force: request.force ?? false,
|
|
154
|
+
});
|
|
155
|
+
// Step 2: Export server state (after merge)
|
|
156
|
+
const exported = this.syncService.exportToString({ includeDependencies: true });
|
|
157
|
+
const serverElementCount = exported.elements
|
|
158
|
+
? exported.elements.trim().split('\n').filter(Boolean).length
|
|
159
|
+
: 0;
|
|
160
|
+
const serverDependencyCount = exported.dependencies
|
|
161
|
+
? exported.dependencies.trim().split('\n').filter(Boolean).length
|
|
162
|
+
: 0;
|
|
163
|
+
return {
|
|
164
|
+
success: true,
|
|
165
|
+
data: {
|
|
166
|
+
importResult,
|
|
167
|
+
serverElements: exported.elements,
|
|
168
|
+
serverDependencies: exported.dependencies ?? '',
|
|
169
|
+
serverElementCount,
|
|
170
|
+
serverDependencyCount,
|
|
171
|
+
syncedAt: createTimestamp(),
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
return this.handleError(error);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Handle errors and return appropriate HTTP response
|
|
181
|
+
*/
|
|
182
|
+
handleError(error) {
|
|
183
|
+
if (error instanceof ValidationError) {
|
|
184
|
+
return {
|
|
185
|
+
success: false,
|
|
186
|
+
error: {
|
|
187
|
+
code: error.code,
|
|
188
|
+
message: error.message,
|
|
189
|
+
details: error.details,
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
if (error instanceof Error) {
|
|
194
|
+
return {
|
|
195
|
+
success: false,
|
|
196
|
+
error: {
|
|
197
|
+
code: 'INTERNAL_ERROR',
|
|
198
|
+
message: error.message,
|
|
199
|
+
},
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
success: false,
|
|
204
|
+
error: {
|
|
205
|
+
code: 'UNKNOWN_ERROR',
|
|
206
|
+
message: 'An unknown error occurred',
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// ============================================================================
|
|
212
|
+
// Factory Function
|
|
213
|
+
// ============================================================================
|
|
214
|
+
/**
|
|
215
|
+
* Create sync HTTP handlers for a storage backend
|
|
216
|
+
*/
|
|
217
|
+
export function createSyncHttpHandlers(backend) {
|
|
218
|
+
return new SyncHttpHandlers(backend);
|
|
219
|
+
}
|
|
220
|
+
// ============================================================================
|
|
221
|
+
// HTTP Status Helpers
|
|
222
|
+
// ============================================================================
|
|
223
|
+
/**
|
|
224
|
+
* Map response to HTTP status code
|
|
225
|
+
*/
|
|
226
|
+
export function getHttpStatus(response) {
|
|
227
|
+
if (response.success) {
|
|
228
|
+
return 200;
|
|
229
|
+
}
|
|
230
|
+
switch (response.error?.code) {
|
|
231
|
+
case ErrorCode.MISSING_REQUIRED_FIELD:
|
|
232
|
+
case ErrorCode.INVALID_INPUT:
|
|
233
|
+
case ErrorCode.INVALID_ID:
|
|
234
|
+
return 400;
|
|
235
|
+
case ErrorCode.NOT_FOUND:
|
|
236
|
+
return 404;
|
|
237
|
+
case ErrorCode.ALREADY_EXISTS:
|
|
238
|
+
case ErrorCode.CYCLE_DETECTED:
|
|
239
|
+
case ErrorCode.SYNC_CONFLICT:
|
|
240
|
+
return 409;
|
|
241
|
+
case ErrorCode.DATABASE_ERROR:
|
|
242
|
+
return 500;
|
|
243
|
+
default:
|
|
244
|
+
return 500;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// ============================================================================
|
|
248
|
+
// Content-Type Helpers
|
|
249
|
+
// ============================================================================
|
|
250
|
+
/**
|
|
251
|
+
* Supported content types for sync endpoints
|
|
252
|
+
*/
|
|
253
|
+
export const SYNC_CONTENT_TYPES = {
|
|
254
|
+
JSON: 'application/json',
|
|
255
|
+
JSONL: 'application/jsonl',
|
|
256
|
+
NDJSON: 'application/x-ndjson',
|
|
257
|
+
};
|
|
258
|
+
/**
|
|
259
|
+
* Parse request body based on content type
|
|
260
|
+
*/
|
|
261
|
+
export function parseRequestBody(body, _contentType) {
|
|
262
|
+
// Default to JSON parsing (contentType reserved for future JSONL streaming support)
|
|
263
|
+
return JSON.parse(body);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Serialize response based on accept header
|
|
267
|
+
*/
|
|
268
|
+
export function serializeResponse(response) {
|
|
269
|
+
return JSON.stringify(response);
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=sync-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-handlers.js","sourceRoot":"","sources":["../../src/http/sync-handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @stoneforge/quarry
|
|
3
|
+
*
|
|
4
|
+
* Core SDK for Stoneforge - API, services, sync, and CLI.
|
|
5
|
+
* This package provides the main programmatic interface to Stoneforge,
|
|
6
|
+
* building on @stoneforge/core for types and @stoneforge/storage for persistence.
|
|
7
|
+
*
|
|
8
|
+
* Note: Types from @stoneforge/core and @stoneforge/storage are NOT re-exported here
|
|
9
|
+
* to avoid naming conflicts. Import them directly:
|
|
10
|
+
* import { Task, Entity, ... } from '@stoneforge/core';
|
|
11
|
+
* import { createStorage, ... } from '@stoneforge/storage';
|
|
12
|
+
*/
|
|
13
|
+
export { type Row, type QueryResult, type MutationResult, type StatementResult, type PreparedStatement, type IsolationLevel, type TransactionOptions, type Transaction, type SqlitePragmas, type StorageConfig, type DirtyElement, type DirtyTrackingOptions, type Migration, type MigrationResult, type StorageBackend, type StorageStats, type StorageFactory, type AsyncStorageFactory, DEFAULT_PRAGMAS, SqliteResultCode, isBusyError, isConstraintError, isUniqueViolation, isForeignKeyViolation, isCorruptionError, mapStorageError, queryError, mutationError, connectionError, migrationError, createStorage, createStorageAsync, isBunRuntime, isNodeRuntime, isBrowserRuntime, getRuntimeName, CURRENT_SCHEMA_VERSION, MIGRATIONS, EXPECTED_TABLES, initializeSchema, getSchemaVersion, isSchemaUpToDate, getPendingMigrations, resetSchema, validateSchema, getTableColumns, getTableIndexes, } from '@stoneforge/storage';
|
|
14
|
+
export * from './api/index.js';
|
|
15
|
+
export { InboxService, createInboxService } from './services/inbox.js';
|
|
16
|
+
export * from './services/dependency.js';
|
|
17
|
+
export * from './services/priority-service.js';
|
|
18
|
+
export * from './services/id-length-cache.js';
|
|
19
|
+
export * from './services/blocked-cache.js';
|
|
20
|
+
export * from './http/index.js';
|
|
21
|
+
export { type ExportOptions as SyncExportOptions, type ImportOptions as SyncImportOptions, type ImportResult as SyncImportResult, type SerializedElement, type SerializedDependency, type ContentHashResult, MergeResolution, type ConflictRecord, type DependencyConflictRecord, type ExportResult, type ImportError, type DirtyElement as SyncDirtyElement, type DirtyDependency, type SyncStatus, type TombstoneStatus, type ElementWithTombstoneStatus, ELEMENT_TYPE_PRIORITY, getTypePriority, HASH_EXCLUDED_FIELDS, serializeElement, serializeDependency, parseElement, parseDependency, tryParseElement, tryParseDependency, serializeElements, serializeDependencies, parseElements, parseDependencies, sortElementsForExport, sortDependenciesForExport, isSerializedElement, isSerializedDependency, type ParseError, computeContentHash, computeContentHashSync, hasSameContentHash, matchesContentHash, mergeElements, mergeTags, mergeDependencies, getTombstoneStatus, type ElementMergeResult, type DependencyMergeResult, SyncService, createSyncService, } from './sync/index.js';
|
|
22
|
+
export * from './config/index.js';
|
|
23
|
+
export { IdentityMode, type Signature, type PublicKey, type SignedRequestFields, type SigningInput, type SignedData, VerificationStatus, type VerificationResult, type IdentityConfig, type EntityLookup, type VerifySignatureOptions, DEFAULT_TIME_TOLERANCE, DEFAULT_IDENTITY_CONFIG as DEFAULT_IDENTITY_SYSTEM_CONFIG, isValidIdentityMode, validateIdentityMode, isValidPublicKey, validatePublicKey, isValidSignature, validateSignature, isValidRequestHash, validateRequestHash, isValidTimeTolerance, validateTimeTolerance, isSignedRequestFields, validateSignedRequestFields, isVerificationResult, isIdentityConfig, validateIdentityConfig, constructSignedData, parseSignedData, checkTimeTolerance, validateTimeTolerance2, verificationSuccess, verificationFailure, verificationNotSigned, verifyEd25519Signature, signEd25519, generateEd25519Keypair, verifySignature, shouldAllowRequest, hashRequestBody, createSignedRequest, createIdentityConfig, } from './systems/index.js';
|
|
24
|
+
export { OPERATOR_ENTITY_ID, OPERATOR_ENTITY_NAME } from './cli/commands/init.js';
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,eAAe,EAEf,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,aAAa,EACb,eAAe,EACf,cAAc,EAEd,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,cAAc,EAEd,sBAAsB,EACtB,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAG7B,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACvE,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAG5C,cAAc,iBAAiB,CAAC;AAIhC,OAAO,EAEL,KAAK,aAAa,IAAI,iBAAiB,EACvC,KAAK,aAAa,IAAI,iBAAiB,EACvC,KAAK,YAAY,IAAI,gBAAgB,EAErC,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,YAAY,IAAI,gBAAgB,EACrC,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAC/B,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EAEpB,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,UAAU,EAEf,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAElB,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAE1B,WAAW,EACX,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAGzB,cAAc,mBAAmB,CAAC;AAIlC,OAAO,EAEL,YAAY,EACZ,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAE3B,sBAAsB,EACtB,uBAAuB,IAAI,8BAA8B,EAEzD,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EAErB,qBAAqB,EACrB,2BAA2B,EAC3B,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EAEtB,mBAAmB,EACnB,eAAe,EAEf,kBAAkB,EAClB,sBAAsB,EAEtB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EAErB,sBAAsB,EACtB,WAAW,EACX,sBAAsB,EAEtB,eAAe,EACf,kBAAkB,EAElB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @stoneforge/quarry
|
|
3
|
+
*
|
|
4
|
+
* Core SDK for Stoneforge - API, services, sync, and CLI.
|
|
5
|
+
* This package provides the main programmatic interface to Stoneforge,
|
|
6
|
+
* building on @stoneforge/core for types and @stoneforge/storage for persistence.
|
|
7
|
+
*
|
|
8
|
+
* Note: Types from @stoneforge/core and @stoneforge/storage are NOT re-exported here
|
|
9
|
+
* to avoid naming conflicts. Import them directly:
|
|
10
|
+
* import { Task, Entity, ... } from '@stoneforge/core';
|
|
11
|
+
* import { createStorage, ... } from '@stoneforge/storage';
|
|
12
|
+
*/
|
|
13
|
+
// Re-export storage utilities for convenience
|
|
14
|
+
export { DEFAULT_PRAGMAS,
|
|
15
|
+
// Error utilities
|
|
16
|
+
SqliteResultCode, isBusyError, isConstraintError, isUniqueViolation, isForeignKeyViolation, isCorruptionError, mapStorageError, queryError, mutationError, connectionError, migrationError,
|
|
17
|
+
// Storage factory (handles runtime detection automatically)
|
|
18
|
+
createStorage, createStorageAsync, isBunRuntime, isNodeRuntime, isBrowserRuntime, getRuntimeName,
|
|
19
|
+
// Schema management
|
|
20
|
+
CURRENT_SCHEMA_VERSION, MIGRATIONS, EXPECTED_TABLES, initializeSchema, getSchemaVersion, isSchemaUpToDate, getPendingMigrations, resetSchema, validateSchema, getTableColumns, getTableIndexes, } from '@stoneforge/storage';
|
|
21
|
+
// API - Main programmatic interface
|
|
22
|
+
export * from './api/index.js';
|
|
23
|
+
// Services - Business logic services
|
|
24
|
+
export { InboxService, createInboxService } from './services/inbox.js';
|
|
25
|
+
export * from './services/dependency.js';
|
|
26
|
+
export * from './services/priority-service.js';
|
|
27
|
+
export * from './services/id-length-cache.js';
|
|
28
|
+
export * from './services/blocked-cache.js';
|
|
29
|
+
// HTTP handlers for browser sync
|
|
30
|
+
export * from './http/index.js';
|
|
31
|
+
// Sync module (excluding types that conflict with api/types.ts)
|
|
32
|
+
// Use SyncExportOptions, SyncImportOptions, SyncImportResult for sync-specific types
|
|
33
|
+
export { MergeResolution, ELEMENT_TYPE_PRIORITY, getTypePriority, HASH_EXCLUDED_FIELDS,
|
|
34
|
+
// Serialization
|
|
35
|
+
serializeElement, serializeDependency, parseElement, parseDependency, tryParseElement, tryParseDependency, serializeElements, serializeDependencies, parseElements, parseDependencies, sortElementsForExport, sortDependenciesForExport, isSerializedElement, isSerializedDependency,
|
|
36
|
+
// Hashing
|
|
37
|
+
computeContentHash, computeContentHashSync, hasSameContentHash, matchesContentHash,
|
|
38
|
+
// Merge
|
|
39
|
+
mergeElements, mergeTags, mergeDependencies, getTombstoneStatus,
|
|
40
|
+
// Service
|
|
41
|
+
SyncService, createSyncService, } from './sync/index.js';
|
|
42
|
+
// Config - Configuration management
|
|
43
|
+
export * from './config/index.js';
|
|
44
|
+
// Systems - Identity and other cross-cutting concerns
|
|
45
|
+
// Note: DEFAULT_IDENTITY_CONFIG from systems is aliased to avoid conflict with config
|
|
46
|
+
export {
|
|
47
|
+
// Types
|
|
48
|
+
IdentityMode, VerificationStatus,
|
|
49
|
+
// Constants
|
|
50
|
+
DEFAULT_TIME_TOLERANCE, DEFAULT_IDENTITY_CONFIG as DEFAULT_IDENTITY_SYSTEM_CONFIG,
|
|
51
|
+
// Validation
|
|
52
|
+
isValidIdentityMode, validateIdentityMode, isValidPublicKey, validatePublicKey, isValidSignature, validateSignature, isValidRequestHash, validateRequestHash, isValidTimeTolerance, validateTimeTolerance,
|
|
53
|
+
// Type guards
|
|
54
|
+
isSignedRequestFields, validateSignedRequestFields, isVerificationResult, isIdentityConfig, validateIdentityConfig,
|
|
55
|
+
// Signed data
|
|
56
|
+
constructSignedData, parseSignedData,
|
|
57
|
+
// Time tolerance
|
|
58
|
+
checkTimeTolerance, validateTimeTolerance2,
|
|
59
|
+
// Verification factories
|
|
60
|
+
verificationSuccess, verificationFailure, verificationNotSigned,
|
|
61
|
+
// Ed25519 operations
|
|
62
|
+
verifyEd25519Signature, signEd25519, generateEd25519Keypair,
|
|
63
|
+
// Verification pipeline
|
|
64
|
+
verifySignature, shouldAllowRequest,
|
|
65
|
+
// Utilities
|
|
66
|
+
hashRequestBody, createSignedRequest, createIdentityConfig, } from './systems/index.js';
|
|
67
|
+
// CLI Constants - Default operator entity for CLI and web apps
|
|
68
|
+
export { OPERATOR_ENTITY_ID, OPERATOR_ENTITY_NAME } from './cli/commands/init.js';
|
|
69
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,8CAA8C;AAC9C,OAAO,EAoBL,eAAe;AACf,kBAAkB;AAClB,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,aAAa,EACb,eAAe,EACf,cAAc;AACd,4DAA4D;AAC5D,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,cAAc;AACd,oBAAoB;AACpB,sBAAsB,EACtB,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,oCAAoC;AACpC,cAAc,gBAAgB,CAAC;AAE/B,qCAAqC;AACrC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACvE,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAE5C,iCAAiC;AACjC,cAAc,iBAAiB,CAAC;AAEhC,gEAAgE;AAChE,qFAAqF;AACrF,OAAO,EASL,eAAe,EAUf,qBAAqB,EACrB,eAAe,EACf,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,yBAAyB,EACzB,mBAAmB,EACnB,sBAAsB;AAEtB,UAAU;AACV,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB;AAClB,QAAQ;AACR,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,kBAAkB;AAGlB,UAAU;AACV,WAAW,EACX,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,oCAAoC;AACpC,cAAc,mBAAmB,CAAC;AAElC,sDAAsD;AACtD,sFAAsF;AACtF,OAAO;AACL,QAAQ;AACR,YAAY,EAMZ,kBAAkB;AAKlB,YAAY;AACZ,sBAAsB,EACtB,uBAAuB,IAAI,8BAA8B;AACzD,aAAa;AACb,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB;AACrB,cAAc;AACd,qBAAqB,EACrB,2BAA2B,EAC3B,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB;AACtB,cAAc;AACd,mBAAmB,EACnB,eAAe;AACf,iBAAiB;AACjB,kBAAkB,EAClB,sBAAsB;AACtB,yBAAyB;AACzB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB;AACrB,qBAAqB;AACrB,sBAAsB,EACtB,WAAW,EACX,sBAAsB;AACtB,wBAAwB;AACxB,eAAe,EACf,kBAAkB;AAClB,YAAY;AACZ,eAAe,EACf,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,+DAA+D;AAC/D,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stoneforge Platform Server
|
|
3
|
+
*
|
|
4
|
+
* HTTP + WebSocket server for the Stoneforge web platform.
|
|
5
|
+
* Built with Hono for fast, minimal overhead.
|
|
6
|
+
*
|
|
7
|
+
* Exports `createQuarryApp` (builds the Hono app + services) and
|
|
8
|
+
* `startQuarryServer` (creates the app and starts listening with
|
|
9
|
+
* dual-runtime Bun/Node support).
|
|
10
|
+
*/
|
|
11
|
+
import { Hono } from 'hono';
|
|
12
|
+
import { createStorage } from '@stoneforge/storage';
|
|
13
|
+
import type { QuarryAPI } from '../api/types.js';
|
|
14
|
+
import type { SyncService } from '../sync/service.js';
|
|
15
|
+
import type { InboxService } from '../services/inbox.js';
|
|
16
|
+
import { initializeBroadcaster } from './ws/broadcaster.js';
|
|
17
|
+
export interface QuarryServerOptions {
|
|
18
|
+
port?: number;
|
|
19
|
+
host?: string;
|
|
20
|
+
dbPath?: string;
|
|
21
|
+
webRoot?: string;
|
|
22
|
+
corsOrigins?: string[];
|
|
23
|
+
}
|
|
24
|
+
export interface QuarryApp {
|
|
25
|
+
app: InstanceType<typeof Hono>;
|
|
26
|
+
api: QuarryAPI;
|
|
27
|
+
syncService: SyncService;
|
|
28
|
+
inboxService: InboxService;
|
|
29
|
+
broadcaster: ReturnType<typeof initializeBroadcaster>;
|
|
30
|
+
storageBackend: ReturnType<typeof createStorage>;
|
|
31
|
+
}
|
|
32
|
+
export declare function createQuarryApp(options?: QuarryServerOptions): QuarryApp;
|
|
33
|
+
export declare function startQuarryServer(options?: QuarryServerOptions): QuarryApp;
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAmD5B,OAAO,EAAE,aAAa,EAAoB,MAAM,qBAAqB,CAAC;AAKtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAUzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAkB5D,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,YAAY,CAAC,OAAO,IAAI,CAAC,CAAC;IAC/B,GAAG,EAAE,SAAS,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;IACtD,cAAc,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;CAClD;AAMD,wBAAgB,eAAe,CAAC,OAAO,GAAE,mBAAwB,GAAG,SAAS,CAojH5E;AAgJD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,mBAAwB,GAAG,SAAS,CA2B9E"}
|