@malloy-publisher/server 0.0.382-dev → 0.2.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/README.docker.md +145 -20
- package/README.md +65 -12
- package/dist/app/api-doc.html +5 -0
- package/dist/app/api-doc.yaml +3903 -583
- package/dist/app/assets/EnvironmentPage-DiUgLuCH.js +1 -0
- package/dist/app/assets/HomePage-MhhjhnFj.js +1 -0
- package/dist/app/assets/LightMode-BEyvNUzT.js +1 -0
- package/dist/app/assets/MainPage-D4Cfee9o.js +2 -0
- package/dist/app/assets/MaterializationsPage-nGgGqwSN.js +1 -0
- package/dist/app/assets/ModelPage-DLAcEw-F.js +1 -0
- package/dist/app/assets/PackagePage-Df0ikH7w.js +1 -0
- package/dist/app/assets/RouteError-BFQwtroH.js +1 -0
- package/dist/app/assets/ThemeEditorPage-OoskoQYN.js +1 -0
- package/dist/app/assets/WorkbookPage-CpFgvUDC.js +1 -0
- package/dist/app/assets/{core-CjeTkq8O.es-BqRc6yhC.js → core-lb28vQkR.es-BoVSOc75.js} +1 -1
- package/dist/app/assets/github-dark-DenFmJkN.es-DHJKELXO.js +1 -0
- package/dist/app/assets/index-5eLCcNmP.css +1 -0
- package/dist/app/assets/index-6ypuFH6g.js +1774 -0
- package/dist/app/assets/index-B8pnU_V_.js +615 -0
- package/dist/app/assets/index-BImcHmVP.js +1 -0
- package/dist/app/assets/index-DSoCUF-f.js +2725 -0
- package/dist/app/assets/index-DfqzSItA.js +2 -0
- package/dist/app/assets/index-w_0OQJgZ.js +23 -0
- package/dist/app/index.html +8 -4
- package/dist/cpufeatures-1yrn0vtw.node +0 -0
- package/dist/default-publisher.config.json +23 -0
- package/dist/{instrumentation.js → instrumentation.mjs} +10631 -10573
- package/dist/package_load_worker.mjs +15219 -0
- package/dist/runtime/publisher.js +331 -0
- package/dist/{server.js → server.mjs} +115548 -49590
- package/dist/sshcrypto-vd2k5hq9.node +0 -0
- package/package.json +41 -28
- package/publisher.config.example.bigquery.json +33 -0
- package/publisher.config.example.duckdb.json +23 -0
- package/.eslintrc.json +0 -44
- package/.prettierignore +0 -1
- package/.prettierrc +0 -4
- package/build.ts +0 -38
- package/dist/app/assets/HomePage-Dn3E4CuB.js +0 -1
- package/dist/app/assets/MainPage-BzB3yoqi.js +0 -2
- package/dist/app/assets/ModelPage-C9O_sAXT.js +0 -1
- package/dist/app/assets/PackagePage-DcxKEjBX.js +0 -1
- package/dist/app/assets/ProjectPage-BDj307rF.js +0 -1
- package/dist/app/assets/RouteError-DAShbVCG.js +0 -1
- package/dist/app/assets/WorkbookPage-Cs_XYEaB.js +0 -1
- package/dist/app/assets/index-15BOvhp0.js +0 -456
- package/dist/app/assets/index-Bb2jqquW.js +0 -676
- package/dist/app/assets/index-CMlGQMcl.css +0 -1
- package/dist/app/assets/index-D68X76-7.js +0 -1276
- package/dist/app/assets/index.umd-DGBekgSu.js +0 -1145
- package/dxt/malloy_bridge.py +0 -354
- package/dxt/manifest.json +0 -22
- package/eslint.config.mjs +0 -76
- package/k6-tests/README.md +0 -144
- package/k6-tests/bun.lock +0 -797
- package/k6-tests/load-test/load-test-crud-connections.ts +0 -263
- package/k6-tests/load-test/load-test-crud-packages.ts +0 -461
- package/k6-tests/load-test/load-test-crud-projects.ts +0 -160
- package/k6-tests/load-test/load-test-crud.ts +0 -142
- package/k6-tests/load-test/load-test.ts +0 -784
- package/k6-tests/package.json +0 -27
- package/k6-tests/scripts/run-with-otel.sh +0 -50
- package/k6-tests/smoke-test/smoke-test.ts +0 -158
- package/k6-tests/tsconfig.json +0 -29
- package/k6-tests/utils/client_factory.ts +0 -128
- package/k6-tests/utils/common.ts +0 -489
- package/k6-tests/utils/logger.ts +0 -62
- package/k6-tests/utils/types.d.ts +0 -35
- package/malloy_mcp.dxt +0 -0
- package/publisher.config.json +0 -33
- package/src/config.spec.ts +0 -850
- package/src/config.ts +0 -305
- package/src/constants.ts +0 -10
- package/src/controller/compile.controller.ts +0 -35
- package/src/controller/connection.controller.ts +0 -515
- package/src/controller/database.controller.ts +0 -21
- package/src/controller/manifest.controller.ts +0 -29
- package/src/controller/materialization.controller.ts +0 -125
- package/src/controller/model.controller.ts +0 -107
- package/src/controller/package.controller.ts +0 -182
- package/src/controller/query.controller.ts +0 -60
- package/src/controller/watch-mode.controller.ts +0 -98
- package/src/data_styles.ts +0 -71
- package/src/dto/connection.dto.spec.ts +0 -131
- package/src/dto/connection.dto.ts +0 -174
- package/src/dto/index.ts +0 -2
- package/src/dto/package.dto.spec.ts +0 -42
- package/src/dto/package.dto.ts +0 -12
- package/src/dto/validate.spec.ts +0 -76
- package/src/dto/validate.ts +0 -31
- package/src/errors.ts +0 -116
- package/src/health.ts +0 -189
- package/src/instrumentation.ts +0 -148
- package/src/logger.ts +0 -154
- package/src/mcp/error_messages.ts +0 -199
- package/src/mcp/handler_utils.ts +0 -239
- package/src/mcp/mcp_constants.ts +0 -22
- package/src/mcp/prompts/handlers.ts +0 -84
- package/src/mcp/prompts/index.ts +0 -11
- package/src/mcp/prompts/prompt_definitions.ts +0 -160
- package/src/mcp/prompts/prompt_service.ts +0 -67
- package/src/mcp/prompts/utils.ts +0 -62
- package/src/mcp/resource_metadata.ts +0 -47
- package/src/mcp/resources/model_resource.ts +0 -153
- package/src/mcp/resources/notebook_resource.ts +0 -137
- package/src/mcp/resources/package_resource.ts +0 -370
- package/src/mcp/resources/project_resource.ts +0 -184
- package/src/mcp/resources/query_resource.ts +0 -117
- package/src/mcp/resources/source_resource.ts +0 -141
- package/src/mcp/resources/view_resource.ts +0 -136
- package/src/mcp/server.ts +0 -62
- package/src/mcp/tools/discovery_tools.ts +0 -258
- package/src/mcp/tools/execute_query_tool.ts +0 -265
- package/src/server.ts +0 -1195
- package/src/service/connection.spec.ts +0 -1331
- package/src/service/connection.ts +0 -1511
- package/src/service/connection_service.spec.ts +0 -641
- package/src/service/connection_service.ts +0 -181
- package/src/service/db_utils.spec.ts +0 -714
- package/src/service/db_utils.ts +0 -1227
- package/src/service/filter.spec.ts +0 -447
- package/src/service/filter.ts +0 -337
- package/src/service/filter_integration.spec.ts +0 -825
- package/src/service/gcs_s3_utils.ts +0 -427
- package/src/service/manifest_service.spec.ts +0 -201
- package/src/service/manifest_service.ts +0 -106
- package/src/service/materialization_service.spec.ts +0 -648
- package/src/service/materialization_service.ts +0 -929
- package/src/service/materialized_table_gc.spec.ts +0 -383
- package/src/service/materialized_table_gc.ts +0 -279
- package/src/service/model.spec.ts +0 -257
- package/src/service/model.ts +0 -1069
- package/src/service/package.spec.ts +0 -236
- package/src/service/package.ts +0 -463
- package/src/service/project.ts +0 -681
- package/src/service/project_compile.spec.ts +0 -197
- package/src/service/project_store.spec.ts +0 -859
- package/src/service/project_store.ts +0 -1531
- package/src/service/quoting.ts +0 -41
- package/src/service/resolve_project.ts +0 -13
- package/src/storage/BaseRepository.ts +0 -31
- package/src/storage/DatabaseInterface.ts +0 -180
- package/src/storage/StorageManager.mock.ts +0 -59
- package/src/storage/StorageManager.ts +0 -210
- package/src/storage/duckdb/ConnectionRepository.ts +0 -141
- package/src/storage/duckdb/DuckDBConnection.ts +0 -177
- package/src/storage/duckdb/DuckDBManifestStore.ts +0 -70
- package/src/storage/duckdb/DuckDBRepository.ts +0 -224
- package/src/storage/duckdb/ManifestRepository.ts +0 -119
- package/src/storage/duckdb/MaterializationRepository.ts +0 -249
- package/src/storage/duckdb/PackageRepository.ts +0 -135
- package/src/storage/duckdb/ProjectRepository.ts +0 -148
- package/src/storage/duckdb/manifest_store.spec.ts +0 -133
- package/src/storage/duckdb/schema.ts +0 -147
- package/src/storage/ducklake/DuckLakeManifestStore.ts +0 -146
- package/src/utils.ts +0 -13
- package/tests/fixtures/persist-test/data/orders.csv +0 -5
- package/tests/fixtures/persist-test/persist_test.malloy +0 -11
- package/tests/fixtures/persist-test/publisher.json +0 -5
- package/tests/fixtures/publisher.config.json +0 -15
- package/tests/harness/e2e.ts +0 -96
- package/tests/harness/mcp_test_setup.ts +0 -344
- package/tests/harness/mocks.ts +0 -37
- package/tests/harness/rest_e2e.ts +0 -68
- package/tests/harness/uris.ts +0 -31
- package/tests/integration/materialization/materialization_lifecycle.integration.spec.ts +0 -470
- package/tests/integration/mcp/mcp_execute_query_tool.integration.spec.ts +0 -434
- package/tests/integration/mcp/mcp_resource.integration.spec.ts +0 -663
- package/tests/integration/mcp/mcp_transport.integration.spec.ts +0 -122
- package/tests/integration/mcp/setup.spec.ts +0 -5
- package/tests/unit/duckdb/attached_databases.test.ts +0 -1132
- package/tests/unit/ducklake/ducklake.test.ts +0 -950
- package/tests/unit/mcp/prompt_definitions.test.ts +0 -102
- package/tests/unit/mcp/prompt_happy.test.ts +0 -51
- package/tsconfig.json +0 -32
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
2
|
-
import {
|
|
3
|
-
ErrorCode,
|
|
4
|
-
Notification,
|
|
5
|
-
Request,
|
|
6
|
-
Result,
|
|
7
|
-
} from "@modelcontextprotocol/sdk/types.js";
|
|
8
|
-
import { afterAll, beforeAll, describe, expect, it } from "bun:test";
|
|
9
|
-
import { URL } from "url";
|
|
10
|
-
|
|
11
|
-
// --- Import E2E Test Setup ---
|
|
12
|
-
import {
|
|
13
|
-
cleanupE2ETestEnvironment,
|
|
14
|
-
McpE2ETestEnvironment,
|
|
15
|
-
setupE2ETestEnvironment,
|
|
16
|
-
} from "../../harness/mcp_test_setup";
|
|
17
|
-
|
|
18
|
-
// --- Test Suite ---
|
|
19
|
-
// Note: These tests assume interaction via a standard MCP client.
|
|
20
|
-
// Tests for raw HTTP edge cases (non-JSON, non-RPC) are omitted based on this assumption.
|
|
21
|
-
describe("MCP Transport Tests (E2E Integration)", () => {
|
|
22
|
-
let env: McpE2ETestEnvironment | null = null;
|
|
23
|
-
let mcpClient: Client<Request, Notification, Result>; // Convenience variable
|
|
24
|
-
|
|
25
|
-
beforeAll(async () => {
|
|
26
|
-
env = await setupE2ETestEnvironment();
|
|
27
|
-
mcpClient = env.mcpClient;
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
afterAll(async () => {
|
|
31
|
-
await cleanupE2ETestEnvironment(env);
|
|
32
|
-
env = null;
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
describe("Basic Protocol", () => {
|
|
36
|
-
it(
|
|
37
|
-
"should handle a simple listResources request",
|
|
38
|
-
async () => {
|
|
39
|
-
if (!env) throw new Error("Test environment not initialized");
|
|
40
|
-
const result = await mcpClient.listResources();
|
|
41
|
-
// Assert based on actual successful response structure
|
|
42
|
-
expect(result).toHaveProperty("resources");
|
|
43
|
-
expect(Array.isArray(result.resources)).toBe(true);
|
|
44
|
-
},
|
|
45
|
-
{ timeout: 30000 },
|
|
46
|
-
);
|
|
47
|
-
|
|
48
|
-
it("should receive InvalidParams error when calling a known method with invalid params", async () => {
|
|
49
|
-
if (!env) throw new Error("Test environment not initialized");
|
|
50
|
-
expect.assertions(2);
|
|
51
|
-
try {
|
|
52
|
-
// Use the client from the test environment
|
|
53
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
54
|
-
await mcpClient.readResource({} as any); // Force invalid params
|
|
55
|
-
} catch (error) {
|
|
56
|
-
expect(error).toBeInstanceOf(Error);
|
|
57
|
-
// Check error code and message
|
|
58
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
59
|
-
expect((error as any).code).toBe(ErrorCode.InternalError);
|
|
60
|
-
}
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it("should receive MethodNotFound error for unknown methods", async () => {
|
|
64
|
-
if (!env) throw new Error("Test environment not initialized");
|
|
65
|
-
expect.assertions(2); // Expecting error instance and specific code
|
|
66
|
-
try {
|
|
67
|
-
// Attempt to call a method that doesn't exist
|
|
68
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
69
|
-
await (mcpClient as any).request({
|
|
70
|
-
method: "nonexistent/method",
|
|
71
|
-
params: {},
|
|
72
|
-
});
|
|
73
|
-
// Should not reach here
|
|
74
|
-
throw new Error("Request should have failed");
|
|
75
|
-
} catch (error) {
|
|
76
|
-
expect(error).toBeInstanceOf(Error);
|
|
77
|
-
// Check for the specific MethodNotFound error code
|
|
78
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
79
|
-
expect((error as { code?: number }).code).toBe(
|
|
80
|
-
ErrorCode.MethodNotFound,
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
describe("Connection Management & Bridge Logic", () => {
|
|
87
|
-
// DELETED - Test irrelevant in stateless mode
|
|
88
|
-
// it("should maintain session across multiple sequential requests", async () => {
|
|
89
|
-
// ...
|
|
90
|
-
// });
|
|
91
|
-
|
|
92
|
-
// DELETED - Test irrelevant in stateless mode
|
|
93
|
-
// it("should handle reconnection after close", async () => {
|
|
94
|
-
// ...
|
|
95
|
-
// });
|
|
96
|
-
|
|
97
|
-
// --- Bridge Error Handling ---
|
|
98
|
-
|
|
99
|
-
it("should return 405 Method Not Allowed for GET requests", async () => {
|
|
100
|
-
if (!env) throw new Error("Test environment not initialized");
|
|
101
|
-
const getUrl = new URL(`${env.serverUrl}/mcp`); // No session ID needed
|
|
102
|
-
const response = await fetch(getUrl.toString(), {
|
|
103
|
-
method: "GET",
|
|
104
|
-
headers: { Accept: "text/event-stream" },
|
|
105
|
-
});
|
|
106
|
-
expect(response.status).toBe(405); // Expect Method Not Allowed
|
|
107
|
-
const errorBody = await response.json();
|
|
108
|
-
expect(errorBody.error.message).toContain("Method Not Allowed");
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
it("should return 405 Method Not Allowed for DELETE requests", async () => {
|
|
112
|
-
if (!env) throw new Error("Test environment not initialized");
|
|
113
|
-
const deleteUrl = new URL(`${env.serverUrl}/mcp`); // No session ID needed
|
|
114
|
-
const response = await fetch(deleteUrl.toString(), {
|
|
115
|
-
method: "DELETE",
|
|
116
|
-
});
|
|
117
|
-
expect(response.status).toBe(405); // Expect Method Not Allowed
|
|
118
|
-
const errorBody = await response.json();
|
|
119
|
-
expect(errorBody.error.message).toContain("Method Not Allowed");
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
});
|