mcp-quickbase 2.0.5 → 2.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/.crewchief/runs/state.json +3 -0
- package/.mcp.json +6 -32
- package/.sdd/tickets/RELS_relationship-management/README.md +98 -0
- package/.sdd/tickets/RELS_relationship-management/planning/analysis.md +190 -0
- package/.sdd/tickets/RELS_relationship-management/planning/architecture.md +413 -0
- package/.sdd/tickets/RELS_relationship-management/planning/plan.md +177 -0
- package/.sdd/tickets/RELS_relationship-management/planning/quality-strategy.md +335 -0
- package/.sdd/tickets/RELS_relationship-management/planning/review-updates.md +95 -0
- package/.sdd/tickets/RELS_relationship-management/planning/security-review.md +213 -0
- package/.sdd/tickets/RELS_relationship-management/planning/ticket-review.md +885 -0
- package/.sdd/tickets/RELS_relationship-management/tasks/RELS.1001_domain-setup.md +96 -0
- package/.sdd/tickets/RELS_relationship-management/tasks/RELS.1002_get-relationships-tool.md +142 -0
- package/.sdd/tickets/RELS_relationship-management/tasks/RELS.1003_register-phase1-tools.md +105 -0
- package/.sdd/tickets/RELS_relationship-management/tasks/RELS.2001_create-relationship-tool.md +151 -0
- package/.sdd/tickets/RELS_relationship-management/tasks/RELS.2002_update-relationship-tool.md +145 -0
- package/.sdd/tickets/RELS_relationship-management/tasks/RELS.3001_delete-relationship-tool.md +154 -0
- package/.sdd/tickets/RELS_relationship-management/tasks/RELS.4001_integration-testing.md +159 -0
- package/.sdd/tickets/RELS_relationship-management/tasks/RELS.4002_final-verification.md +182 -0
- package/.sdd/tickets/RELS_relationship-management/tasks/RELS_TASK_INDEX.md +179 -0
- package/crewchief.config.js +31 -0
- package/dist/client/quickbase.d.ts +7 -2
- package/dist/client/quickbase.js +64 -51
- package/dist/client/quickbase.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -1
- package/dist/mcp/server.d.ts +3 -3
- package/dist/mcp/server.js +21 -17
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp-stdio-server.js +64 -49
- package/dist/mcp-stdio-server.js.map +1 -1
- package/dist/server.js +84 -83
- package/dist/server.js.map +1 -1
- package/dist/tools/apps/create_app.d.ts +2 -2
- package/dist/tools/apps/create_app.js +23 -23
- package/dist/tools/apps/create_app.js.map +1 -1
- package/dist/tools/apps/index.d.ts +4 -4
- package/dist/tools/apps/index.js +3 -3
- package/dist/tools/apps/list_tables.d.ts +7 -7
- package/dist/tools/apps/list_tables.js +28 -27
- package/dist/tools/apps/list_tables.js.map +1 -1
- package/dist/tools/apps/update_app.d.ts +2 -2
- package/dist/tools/apps/update_app.js +28 -26
- package/dist/tools/apps/update_app.js.map +1 -1
- package/dist/tools/base.d.ts +3 -3
- package/dist/tools/base.js +7 -7
- package/dist/tools/base.js.map +1 -1
- package/dist/tools/configure_cache.d.ts +3 -3
- package/dist/tools/configure_cache.js +16 -16
- package/dist/tools/configure_cache.js.map +1 -1
- package/dist/tools/fields/create_field.d.ts +8 -7
- package/dist/tools/fields/create_field.js +39 -29
- package/dist/tools/fields/create_field.js.map +1 -1
- package/dist/tools/fields/delete_field.d.ts +79 -0
- package/dist/tools/fields/delete_field.js +105 -0
- package/dist/tools/fields/delete_field.js.map +1 -0
- package/dist/tools/fields/get_field.d.ts +91 -0
- package/dist/tools/fields/get_field.js +82 -0
- package/dist/tools/fields/get_field.js.map +1 -0
- package/dist/tools/fields/index.d.ts +5 -3
- package/dist/tools/fields/index.js +11 -5
- package/dist/tools/fields/index.js.map +1 -1
- package/dist/tools/fields/update_field.d.ts +7 -15
- package/dist/tools/fields/update_field.js +39 -38
- package/dist/tools/fields/update_field.js.map +1 -1
- package/dist/tools/files/download_file.d.ts +2 -2
- package/dist/tools/files/download_file.js +35 -35
- package/dist/tools/files/download_file.js.map +1 -1
- package/dist/tools/files/index.d.ts +3 -3
- package/dist/tools/files/index.js +3 -3
- package/dist/tools/files/upload_file.d.ts +2 -2
- package/dist/tools/files/upload_file.js +52 -44
- package/dist/tools/files/upload_file.js.map +1 -1
- package/dist/tools/index.d.ts +13 -12
- package/dist/tools/index.js +6 -3
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/records/bulk_create_records.d.ts +2 -2
- package/dist/tools/records/bulk_create_records.js +28 -28
- package/dist/tools/records/bulk_create_records.js.map +1 -1
- package/dist/tools/records/bulk_update_records.d.ts +2 -2
- package/dist/tools/records/bulk_update_records.js +27 -27
- package/dist/tools/records/bulk_update_records.js.map +1 -1
- package/dist/tools/records/create_record.d.ts +2 -2
- package/dist/tools/records/create_record.js +40 -40
- package/dist/tools/records/create_record.js.map +1 -1
- package/dist/tools/records/index.d.ts +6 -6
- package/dist/tools/records/index.js +3 -3
- package/dist/tools/records/query_records.d.ts +3 -3
- package/dist/tools/records/query_records.js +82 -78
- package/dist/tools/records/query_records.js.map +1 -1
- package/dist/tools/records/update_record.d.ts +2 -2
- package/dist/tools/records/update_record.js +31 -29
- package/dist/tools/records/update_record.js.map +1 -1
- package/dist/tools/registry.d.ts +1 -1
- package/dist/tools/registry.js +1 -1
- package/dist/tools/relationships/create_relationship.d.ts +150 -0
- package/dist/tools/relationships/create_relationship.js +181 -0
- package/dist/tools/relationships/create_relationship.js.map +1 -0
- package/dist/tools/relationships/delete_relationship.d.ts +66 -0
- package/dist/tools/relationships/delete_relationship.js +85 -0
- package/dist/tools/relationships/delete_relationship.js.map +1 -0
- package/dist/tools/relationships/get_relationships.d.ts +126 -0
- package/dist/tools/relationships/get_relationships.js +126 -0
- package/dist/tools/relationships/get_relationships.js.map +1 -0
- package/dist/tools/relationships/index.d.ts +14 -0
- package/dist/tools/relationships/index.js +37 -0
- package/dist/tools/relationships/index.js.map +1 -0
- package/dist/tools/relationships/update_relationship.d.ts +139 -0
- package/dist/tools/relationships/update_relationship.js +168 -0
- package/dist/tools/relationships/update_relationship.js.map +1 -0
- package/dist/tools/reports/index.d.ts +2 -2
- package/dist/tools/reports/index.js +3 -3
- package/dist/tools/reports/run_report.d.ts +3 -3
- package/dist/tools/reports/run_report.js +29 -29
- package/dist/tools/reports/run_report.js.map +1 -1
- package/dist/tools/tables/create_table.d.ts +2 -49
- package/dist/tools/tables/create_table.js +26 -49
- package/dist/tools/tables/create_table.js.map +1 -1
- package/dist/tools/tables/get_table_fields.d.ts +2 -2
- package/dist/tools/tables/get_table_fields.js +25 -25
- package/dist/tools/tables/get_table_fields.js.map +1 -1
- package/dist/tools/tables/index.d.ts +4 -4
- package/dist/tools/tables/index.js +3 -3
- package/dist/tools/tables/update_table.d.ts +2 -2
- package/dist/tools/tables/update_table.js +28 -26
- package/dist/tools/tables/update_table.js.map +1 -1
- package/dist/tools/test_connection.d.ts +2 -2
- package/dist/tools/test_connection.js +28 -28
- package/dist/tools/test_connection.js.map +1 -1
- package/dist/types/api.d.ts +1 -1
- package/dist/types/mcp.d.ts +1 -1
- package/dist/utils/cache.js +16 -16
- package/dist/utils/cache.js.map +1 -1
- package/dist/utils/file.js +44 -40
- package/dist/utils/file.js.map +1 -1
- package/dist/utils/logger.js +30 -28
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/retry.js +10 -10
- package/dist/utils/retry.js.map +1 -1
- package/dist/utils/validation.d.ts +1 -1
- package/dist/utils/validation.js +39 -36
- package/dist/utils/validation.js.map +1 -1
- package/docs/README.md +6 -0
- package/docs/future-improvements.md +33 -0
- package/docs/migration-guide.md +160 -0
- package/docs/release-notes.md +89 -0
- package/package.json +5 -4
- /package/{HARDENING_SUMMARY.md → docs/hardening-summary.md} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update_table.js","sourceRoot":"","sources":["../../../src/tools/tables/update_table.ts"],"names":[],"mappings":";;;AAAA,kCAAmC;AAEnC,+CAAkD;AAElD,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,iBAAiB,CAAC,CAAC;AAyD/C;;GAEG;AACH,MAAa,eAAgB,SAAQ,
|
|
1
|
+
{"version":3,"file":"update_table.js","sourceRoot":"","sources":["../../../src/tools/tables/update_table.ts"],"names":[],"mappings":";;;AAAA,kCAAmC;AAEnC,+CAAkD;AAElD,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,iBAAiB,CAAC,CAAC;AAyD/C;;GAEG;AACH,MAAa,eAAgB,SAAQ,eAGpC;IA8BC;;;OAGG;IACH,YAAY,MAAuB;QACjC,KAAK,CAAC,MAAM,CAAC,CAAC;QAlCT,SAAI,GAAG,cAAc,CAAC;QACtB,gBAAW,GAAG,qCAAqC,CAAC;QAE3D;;WAEG;QACI,gBAAW,GAAG;YACnB,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qBAAqB;iBACnC;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,wBAAwB;iBACtC;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+BAA+B;iBAC7C;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qCAAqC;iBACnD;aACF;YACD,QAAQ,EAAE,CAAC,UAAU,CAAC;SACvB,CAAC;IAQF,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,GAAG,CAAC,MAAyB;QAC3C,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;YACtC,OAAO,EAAE,MAAM,CAAC,QAAQ;SACzB,CAAC,CAAC;QAEH,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAExD,wCAAwC;QACxC,IACE,CAAC,IAAI;YACL,CAAC,WAAW;YACZ,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAC/C,CAAC;YACD,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;QACJ,CAAC;QAED,8DAA8D;QAC9D,MAAM,IAAI,GAAwB,EAAE,CAAC;QAErC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;QAED,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QACjC,CAAC;QAED,6BAA6B;QAC7B,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC;QAED,mBAAmB;QACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;YACzC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,WAAW,QAAQ,EAAE;YAC3B,IAAI;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;gBACrC,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,OAAO,EAAE,QAAQ;aAClB,CAAC,CAAC;YACH,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,wBAAwB,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,IAA2B,CAAC;QAEnD,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;YACxC,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;SACtC,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAClD,GAAG,KAAK;SACT,CAAC;IACJ,CAAC;CACF;AA9GD,0CA8GC"}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.TestConnectionTool = void 0;
|
|
4
4
|
const base_1 = require("./base");
|
|
5
5
|
const logger_1 = require("../utils/logger");
|
|
6
|
-
const logger = (0, logger_1.createLogger)(
|
|
6
|
+
const logger = (0, logger_1.createLogger)("TestConnectionTool");
|
|
7
7
|
/**
|
|
8
8
|
* Tool for testing the connection to Quickbase
|
|
9
9
|
*/
|
|
@@ -14,15 +14,15 @@ class TestConnectionTool extends base_1.BaseTool {
|
|
|
14
14
|
*/
|
|
15
15
|
constructor(client) {
|
|
16
16
|
super(client);
|
|
17
|
-
this.name =
|
|
18
|
-
this.description =
|
|
17
|
+
this.name = "test_connection";
|
|
18
|
+
this.description = "Tests the connection to Quickbase";
|
|
19
19
|
/**
|
|
20
20
|
* Parameter schema for test_connection
|
|
21
21
|
*/
|
|
22
22
|
this.paramSchema = {
|
|
23
|
-
type:
|
|
23
|
+
type: "object",
|
|
24
24
|
properties: {},
|
|
25
|
-
required: []
|
|
25
|
+
required: [],
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
@@ -31,7 +31,7 @@ class TestConnectionTool extends base_1.BaseTool {
|
|
|
31
31
|
* @returns Test result
|
|
32
32
|
*/
|
|
33
33
|
async run(_params) {
|
|
34
|
-
logger.info(
|
|
34
|
+
logger.info("Testing connection to Quickbase");
|
|
35
35
|
try {
|
|
36
36
|
// Try to get apps list as a simple test
|
|
37
37
|
// This endpoint requires authentication and will validate our credentials
|
|
@@ -41,50 +41,50 @@ class TestConnectionTool extends base_1.BaseTool {
|
|
|
41
41
|
let response;
|
|
42
42
|
if (config.appId) {
|
|
43
43
|
response = await this.client.request({
|
|
44
|
-
method:
|
|
45
|
-
path: `/apps/${config.appId}
|
|
44
|
+
method: "GET",
|
|
45
|
+
path: `/apps/${config.appId}`,
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
else {
|
|
49
49
|
response = await this.client.request({
|
|
50
|
-
method:
|
|
51
|
-
path:
|
|
50
|
+
method: "GET",
|
|
51
|
+
path: "/apps",
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
54
|
if (!response.success) {
|
|
55
|
-
logger.error(
|
|
56
|
-
throw new Error(response.error?.message ||
|
|
55
|
+
logger.error("Connection test failed", { error: response.error });
|
|
56
|
+
throw new Error(response.error?.message || "Failed to connect to Quickbase");
|
|
57
57
|
}
|
|
58
|
-
logger.info(
|
|
58
|
+
logger.info("Connection test successful");
|
|
59
59
|
// Extract some basic info from the response
|
|
60
60
|
const data = response.data;
|
|
61
61
|
return {
|
|
62
62
|
connected: true,
|
|
63
63
|
userInfo: {
|
|
64
|
-
id:
|
|
65
|
-
email:
|
|
66
|
-
name:
|
|
64
|
+
id: "authenticated",
|
|
65
|
+
email: "authenticated-user",
|
|
66
|
+
name: "Quickbase User",
|
|
67
67
|
},
|
|
68
68
|
realmInfo: {
|
|
69
69
|
hostname: config.realmHost,
|
|
70
|
-
id: config.appId ||
|
|
71
|
-
appName: data?.name ||
|
|
72
|
-
}
|
|
70
|
+
id: config.appId || "no-app-specified",
|
|
71
|
+
appName: data?.name || "Unknown App",
|
|
72
|
+
},
|
|
73
73
|
};
|
|
74
74
|
}
|
|
75
75
|
catch (error) {
|
|
76
|
-
logger.error(
|
|
76
|
+
logger.error("Connection test failed with error", { error });
|
|
77
77
|
// Provide more specific error messages
|
|
78
|
-
let errorMessage =
|
|
78
|
+
let errorMessage = "Failed to connect to Quickbase";
|
|
79
79
|
if (error instanceof Error) {
|
|
80
|
-
if (error.message.includes(
|
|
81
|
-
errorMessage =
|
|
80
|
+
if (error.message.includes("401")) {
|
|
81
|
+
errorMessage = "Authentication failed. Please check your user token.";
|
|
82
82
|
}
|
|
83
|
-
else if (error.message.includes(
|
|
84
|
-
errorMessage =
|
|
83
|
+
else if (error.message.includes("404")) {
|
|
84
|
+
errorMessage = "App not found. Please check your app ID.";
|
|
85
85
|
}
|
|
86
|
-
else if (error.message.includes(
|
|
87
|
-
errorMessage =
|
|
86
|
+
else if (error.message.includes("403")) {
|
|
87
|
+
errorMessage = "Access denied. Please check your permissions.";
|
|
88
88
|
}
|
|
89
89
|
else {
|
|
90
90
|
errorMessage = error.message;
|
|
@@ -92,7 +92,7 @@ class TestConnectionTool extends base_1.BaseTool {
|
|
|
92
92
|
}
|
|
93
93
|
return {
|
|
94
94
|
connected: false,
|
|
95
|
-
errorMessage
|
|
95
|
+
errorMessage,
|
|
96
96
|
};
|
|
97
97
|
}
|
|
98
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_connection.js","sourceRoot":"","sources":["../../src/tools/test_connection.ts"],"names":[],"mappings":";;;AAAA,iCAAkC;AAElC,4CAA+C;AAE/C,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,oBAAoB,CAAC,CAAC;AA4BlD;;GAEG;AACH,MAAa,kBAAmB,SAAQ,
|
|
1
|
+
{"version":3,"file":"test_connection.js","sourceRoot":"","sources":["../../src/tools/test_connection.ts"],"names":[],"mappings":"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"}
|
package/dist/types/api.d.ts
CHANGED
package/dist/types/mcp.d.ts
CHANGED
package/dist/utils/cache.js
CHANGED
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.CacheService = void 0;
|
|
7
7
|
const node_cache_1 = __importDefault(require("node-cache"));
|
|
8
8
|
const logger_1 = require("./logger");
|
|
9
|
-
const logger = (0, logger_1.createLogger)(
|
|
9
|
+
const logger = (0, logger_1.createLogger)("cache");
|
|
10
10
|
/**
|
|
11
11
|
* Cache service for API responses
|
|
12
12
|
*/
|
|
@@ -57,7 +57,7 @@ class CacheService {
|
|
|
57
57
|
if (!this.enabled) {
|
|
58
58
|
return;
|
|
59
59
|
}
|
|
60
|
-
if (typeof ttl ===
|
|
60
|
+
if (typeof ttl === "number") {
|
|
61
61
|
this.cache.set(key, value, ttl);
|
|
62
62
|
}
|
|
63
63
|
else {
|
|
@@ -78,7 +78,7 @@ class CacheService {
|
|
|
78
78
|
*/
|
|
79
79
|
clear() {
|
|
80
80
|
this.cache.flushAll();
|
|
81
|
-
logger.info(
|
|
81
|
+
logger.info("Cache cleared");
|
|
82
82
|
}
|
|
83
83
|
/**
|
|
84
84
|
* Enables or disables the cache
|
|
@@ -86,7 +86,7 @@ class CacheService {
|
|
|
86
86
|
*/
|
|
87
87
|
setEnabled(enabled) {
|
|
88
88
|
this.enabled = enabled;
|
|
89
|
-
logger.info(`Cache ${enabled ?
|
|
89
|
+
logger.info(`Cache ${enabled ? "enabled" : "disabled"}`);
|
|
90
90
|
if (!enabled) {
|
|
91
91
|
this.clear();
|
|
92
92
|
}
|
|
@@ -124,7 +124,7 @@ class CacheService {
|
|
|
124
124
|
return {
|
|
125
125
|
hits: stats.hits,
|
|
126
126
|
misses: stats.misses,
|
|
127
|
-
keys: this.cache.keys().length
|
|
127
|
+
keys: this.cache.keys().length,
|
|
128
128
|
};
|
|
129
129
|
}
|
|
130
130
|
/**
|
|
@@ -139,7 +139,7 @@ class CacheService {
|
|
|
139
139
|
}
|
|
140
140
|
async safeTtlUpdate(ttl) {
|
|
141
141
|
// Wait a brief moment to allow in-flight operations to complete
|
|
142
|
-
await new Promise(resolve => setTimeout(resolve, 100));
|
|
142
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
143
143
|
const oldCache = this.cache;
|
|
144
144
|
// Create new cache with updated TTL
|
|
145
145
|
const newCache = new node_cache_1.default({ stdTTL: ttl, checkperiod: ttl * 0.2 });
|
|
@@ -154,7 +154,7 @@ class CacheService {
|
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
156
|
catch (error) {
|
|
157
|
-
logger.warn(
|
|
157
|
+
logger.warn("Error migrating cache data during TTL update", { error });
|
|
158
158
|
}
|
|
159
159
|
// Replace the cache atomically
|
|
160
160
|
this.cache = newCache;
|
|
@@ -164,7 +164,7 @@ class CacheService {
|
|
|
164
164
|
oldCache.close();
|
|
165
165
|
}
|
|
166
166
|
catch (error) {
|
|
167
|
-
logger.warn(
|
|
167
|
+
logger.warn("Error closing old cache instance", { error });
|
|
168
168
|
}
|
|
169
169
|
logger.info(`Cache TTL updated to ${ttl} seconds`);
|
|
170
170
|
}
|
|
@@ -175,10 +175,10 @@ class CacheService {
|
|
|
175
175
|
try {
|
|
176
176
|
this.cache.flushAll();
|
|
177
177
|
this.cache.close();
|
|
178
|
-
logger.debug(
|
|
178
|
+
logger.debug("Cache instance cleaned up");
|
|
179
179
|
}
|
|
180
180
|
catch (error) {
|
|
181
|
-
logger.error(
|
|
181
|
+
logger.error("Error cleaning up cache", { error });
|
|
182
182
|
}
|
|
183
183
|
}
|
|
184
184
|
/**
|
|
@@ -186,17 +186,17 @@ class CacheService {
|
|
|
186
186
|
*/
|
|
187
187
|
static installCleanupHandlers() {
|
|
188
188
|
const cleanup = () => {
|
|
189
|
-
logger.info(
|
|
189
|
+
logger.info("Cleaning up all cache instances");
|
|
190
190
|
for (const instance of CacheService.instances) {
|
|
191
191
|
instance.cleanup();
|
|
192
192
|
}
|
|
193
193
|
CacheService.instances.clear();
|
|
194
194
|
};
|
|
195
|
-
process.on(
|
|
196
|
-
process.on(
|
|
197
|
-
process.on(
|
|
198
|
-
process.on(
|
|
199
|
-
process.on(
|
|
195
|
+
process.on("exit", cleanup);
|
|
196
|
+
process.on("SIGTERM", cleanup);
|
|
197
|
+
process.on("SIGINT", cleanup);
|
|
198
|
+
process.on("uncaughtException", cleanup);
|
|
199
|
+
process.on("unhandledRejection", cleanup);
|
|
200
200
|
}
|
|
201
201
|
/**
|
|
202
202
|
* Get cleanup statistics
|
package/dist/utils/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":";;;;;;AAAA,4DAAmC;AACnC,qCAAwC;AAExC,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,OAAO,CAAC,CAAC;AAErC;;GAEG;AACH,MAAa,YAAY;IAOvB;;;;OAIG;IACH,YAAY,MAAc,IAAI,EAAE,UAAmB,IAAI;QAP/C,kBAAa,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;QAQvD,IAAI,CAAC,KAAK,GAAG,IAAI,oBAAS,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,qCAAqC;QACrC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEjC,gCAAgC;QAChC,IAAI,CAAC,YAAY,CAAC,uBAAuB,EAAE,CAAC;YAC1C,YAAY,CAAC,sBAAsB,EAAE,CAAC;YACtC,YAAY,CAAC,uBAAuB,GAAG,IAAI,CAAC;QAC9C,CAAC;QAED,MAAM,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/file.js
CHANGED
|
@@ -41,7 +41,7 @@ exports.writeFile = writeFile;
|
|
|
41
41
|
const fs = __importStar(require("fs"));
|
|
42
42
|
const path = __importStar(require("path"));
|
|
43
43
|
const logger_1 = require("./logger");
|
|
44
|
-
const logger = (0, logger_1.createLogger)(
|
|
44
|
+
const logger = (0, logger_1.createLogger)("FileUtil");
|
|
45
45
|
/**
|
|
46
46
|
* Utility functions for file operations with security hardening
|
|
47
47
|
*/
|
|
@@ -61,19 +61,19 @@ function sanitizePath(filePath) {
|
|
|
61
61
|
// Ensure the path is within the working directory
|
|
62
62
|
const relative = path.relative(WORKING_DIR, absolutePath);
|
|
63
63
|
// Check for directory traversal attempts
|
|
64
|
-
if (relative.startsWith(
|
|
65
|
-
logger.error(
|
|
64
|
+
if (relative.startsWith("..") || path.isAbsolute(relative)) {
|
|
65
|
+
logger.error("Path traversal attempt detected", {
|
|
66
66
|
filePath,
|
|
67
67
|
absolutePath,
|
|
68
68
|
relative,
|
|
69
|
-
workingDir: WORKING_DIR
|
|
69
|
+
workingDir: WORKING_DIR,
|
|
70
70
|
});
|
|
71
71
|
return null;
|
|
72
72
|
}
|
|
73
73
|
return absolutePath;
|
|
74
74
|
}
|
|
75
75
|
catch (error) {
|
|
76
|
-
logger.error(
|
|
76
|
+
logger.error("Error sanitizing path", { filePath, error });
|
|
77
77
|
return null;
|
|
78
78
|
}
|
|
79
79
|
}
|
|
@@ -91,7 +91,7 @@ function fileExists(filePath) {
|
|
|
91
91
|
return fs.existsSync(safePath) && fs.statSync(safePath).isFile();
|
|
92
92
|
}
|
|
93
93
|
catch (error) {
|
|
94
|
-
logger.error(
|
|
94
|
+
logger.error("Error checking if file exists", { filePath, error });
|
|
95
95
|
return false;
|
|
96
96
|
}
|
|
97
97
|
}
|
|
@@ -114,7 +114,7 @@ function ensureDirectoryExists(dirPath) {
|
|
|
114
114
|
return true;
|
|
115
115
|
}
|
|
116
116
|
catch (error) {
|
|
117
|
-
logger.error(
|
|
117
|
+
logger.error("Error ensuring directory exists", { dirPath, error });
|
|
118
118
|
return false;
|
|
119
119
|
}
|
|
120
120
|
}
|
|
@@ -133,36 +133,36 @@ function getFileInfo(filePath) {
|
|
|
133
133
|
const ext = path.extname(filePath).toLowerCase();
|
|
134
134
|
// Simple mime type mapping
|
|
135
135
|
const mimeTypes = {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
136
|
+
".txt": "text/plain",
|
|
137
|
+
".html": "text/html",
|
|
138
|
+
".css": "text/css",
|
|
139
|
+
".js": "application/javascript",
|
|
140
|
+
".json": "application/json",
|
|
141
|
+
".xml": "application/xml",
|
|
142
|
+
".pdf": "application/pdf",
|
|
143
|
+
".zip": "application/zip",
|
|
144
|
+
".png": "image/png",
|
|
145
|
+
".jpg": "image/jpeg",
|
|
146
|
+
".jpeg": "image/jpeg",
|
|
147
|
+
".gif": "image/gif",
|
|
148
|
+
".svg": "image/svg+xml",
|
|
149
|
+
".doc": "application/msword",
|
|
150
|
+
".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
151
|
+
".xls": "application/vnd.ms-excel",
|
|
152
|
+
".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
153
|
+
".ppt": "application/vnd.ms-powerpoint",
|
|
154
|
+
".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
|
155
155
|
};
|
|
156
156
|
return {
|
|
157
157
|
name: path.basename(filePath),
|
|
158
158
|
size: stats.size,
|
|
159
159
|
extension: ext,
|
|
160
|
-
mimeType: mimeTypes[ext] ||
|
|
161
|
-
lastModified: stats.mtime
|
|
160
|
+
mimeType: mimeTypes[ext] || "application/octet-stream",
|
|
161
|
+
lastModified: stats.mtime,
|
|
162
162
|
};
|
|
163
163
|
}
|
|
164
164
|
catch (error) {
|
|
165
|
-
logger.error(
|
|
165
|
+
logger.error("Error getting file info", { filePath, error });
|
|
166
166
|
return null;
|
|
167
167
|
}
|
|
168
168
|
}
|
|
@@ -175,27 +175,27 @@ function readFileAsBuffer(filePath) {
|
|
|
175
175
|
try {
|
|
176
176
|
const safePath = sanitizePath(filePath);
|
|
177
177
|
if (!safePath) {
|
|
178
|
-
logger.error(
|
|
178
|
+
logger.error("Invalid file path", { filePath });
|
|
179
179
|
return null;
|
|
180
180
|
}
|
|
181
181
|
if (!fileExists(filePath)) {
|
|
182
|
-
logger.error(
|
|
182
|
+
logger.error("File does not exist", { filePath });
|
|
183
183
|
return null;
|
|
184
184
|
}
|
|
185
185
|
// Check file size before reading
|
|
186
186
|
const stats = fs.statSync(safePath);
|
|
187
187
|
if (stats.size > MAX_FILE_SIZE) {
|
|
188
|
-
logger.error(
|
|
188
|
+
logger.error("File too large", {
|
|
189
189
|
filePath,
|
|
190
190
|
size: stats.size,
|
|
191
|
-
maxSize: MAX_FILE_SIZE
|
|
191
|
+
maxSize: MAX_FILE_SIZE,
|
|
192
192
|
});
|
|
193
193
|
return null;
|
|
194
194
|
}
|
|
195
195
|
return fs.readFileSync(safePath);
|
|
196
196
|
}
|
|
197
197
|
catch (error) {
|
|
198
|
-
logger.error(
|
|
198
|
+
logger.error("Error reading file", { filePath, error });
|
|
199
199
|
return null;
|
|
200
200
|
}
|
|
201
201
|
}
|
|
@@ -209,22 +209,26 @@ function writeFile(filePath, data) {
|
|
|
209
209
|
try {
|
|
210
210
|
const safePath = sanitizePath(filePath);
|
|
211
211
|
if (!safePath) {
|
|
212
|
-
logger.error(
|
|
212
|
+
logger.error("Invalid file path", { filePath });
|
|
213
213
|
return false;
|
|
214
214
|
}
|
|
215
215
|
const dirPath = path.dirname(safePath);
|
|
216
216
|
const safeDirPath = sanitizePath(dirPath);
|
|
217
217
|
if (!safeDirPath || !ensureDirectoryExists(safeDirPath)) {
|
|
218
|
-
logger.error(
|
|
218
|
+
logger.error("Could not create directory for file", {
|
|
219
|
+
dirPath: safeDirPath,
|
|
220
|
+
});
|
|
219
221
|
return false;
|
|
220
222
|
}
|
|
221
223
|
// Check data size limit
|
|
222
|
-
const dataSize = Buffer.isBuffer(data)
|
|
224
|
+
const dataSize = Buffer.isBuffer(data)
|
|
225
|
+
? data.length
|
|
226
|
+
: Buffer.byteLength(data);
|
|
223
227
|
if (dataSize > MAX_FILE_SIZE) {
|
|
224
|
-
logger.error(
|
|
228
|
+
logger.error("Data too large to write", {
|
|
225
229
|
filePath,
|
|
226
230
|
size: dataSize,
|
|
227
|
-
maxSize: MAX_FILE_SIZE
|
|
231
|
+
maxSize: MAX_FILE_SIZE,
|
|
228
232
|
});
|
|
229
233
|
return false;
|
|
230
234
|
}
|
|
@@ -232,7 +236,7 @@ function writeFile(filePath, data) {
|
|
|
232
236
|
return true;
|
|
233
237
|
}
|
|
234
238
|
catch (error) {
|
|
235
|
-
logger.error(
|
|
239
|
+
logger.error("Error writing file", { filePath, error });
|
|
236
240
|
return false;
|
|
237
241
|
}
|
|
238
242
|
}
|
package/dist/utils/file.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDA,gCAYC;AAOD,sDAkBC;AAOD,
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"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"}
|