@goxtechnologies/connectwise-psa-mcp 1.3.0 → 1.4.2
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/data/reports.json +29 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/operations/analytics-extended.d.ts.map +1 -1
- package/dist/operations/analytics-extended.js +15 -4
- package/dist/operations/analytics-extended.js.map +1 -1
- package/dist/operations/analytics-msp-schedule.js +12 -2
- package/dist/operations/analytics-msp-schedule.js.map +1 -1
- package/dist/operations/analytics-msp-time-entry.d.ts +68 -0
- package/dist/operations/analytics-msp-time-entry.d.ts.map +1 -0
- package/dist/operations/analytics-msp-time-entry.js +235 -0
- package/dist/operations/analytics-msp-time-entry.js.map +1 -0
- package/dist/operations/analytics-msp-time.js +27 -8
- package/dist/operations/analytics-msp-time.js.map +1 -1
- package/dist/operations/analytics.d.ts.map +1 -1
- package/dist/operations/analytics.js +2 -0
- package/dist/operations/analytics.js.map +1 -1
- package/dist/operations/registry.d.ts.map +1 -1
- package/dist/operations/registry.js +1 -0
- package/dist/operations/registry.js.map +1 -1
- package/dist/scrapers/index.d.ts +4 -0
- package/dist/scrapers/index.d.ts.map +1 -0
- package/dist/scrapers/index.js +10 -0
- package/dist/scrapers/index.js.map +1 -0
- package/dist/scrapers/reports.d.ts +3 -0
- package/dist/scrapers/reports.d.ts.map +1 -0
- package/dist/scrapers/reports.js +443 -0
- package/dist/scrapers/reports.js.map +1 -0
- package/dist/services/load-env.d.ts.map +1 -1
- package/dist/services/load-env.js +11 -1
- package/dist/services/load-env.js.map +1 -1
- package/dist/services/report-cache.d.ts +16 -0
- package/dist/services/report-cache.d.ts.map +1 -0
- package/dist/services/report-cache.js +230 -0
- package/dist/services/report-cache.js.map +1 -0
- package/dist/services/report-config.d.ts +28 -0
- package/dist/services/report-config.d.ts.map +1 -0
- package/dist/services/report-config.js +127 -0
- package/dist/services/report-config.js.map +1 -0
- package/dist/services/totp.d.ts +27 -0
- package/dist/services/totp.d.ts.map +1 -0
- package/dist/services/totp.js +76 -0
- package/dist/services/totp.js.map +1 -0
- package/dist/services/web-scraper.d.ts +76 -0
- package/dist/services/web-scraper.d.ts.map +1 -0
- package/dist/services/web-scraper.js +435 -0
- package/dist/services/web-scraper.js.map +1 -0
- package/dist/tools/reports.d.ts +9 -0
- package/dist/tools/reports.d.ts.map +1 -0
- package/dist/tools/reports.js +388 -0
- package/dist/tools/reports.js.map +1 -0
- package/dist/tools/validation.js +2 -2
- package/dist/tools/validation.js.map +1 -1
- package/dist/types/reports.d.ts +87 -0
- package/dist/types/reports.d.ts.map +1 -0
- package/dist/types/reports.js +3 -0
- package/dist/types/reports.js.map +1 -0
- package/package.json +18 -4
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export interface ReportNavigation {
|
|
2
|
+
strategy: 'menu' | 'url';
|
|
3
|
+
path?: string[];
|
|
4
|
+
url?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ReportParameter {
|
|
7
|
+
name: string;
|
|
8
|
+
type: 'string' | 'date' | 'number' | 'boolean';
|
|
9
|
+
required: boolean;
|
|
10
|
+
selector: string;
|
|
11
|
+
default?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ExtractionConfig {
|
|
14
|
+
strategy: 'xhr_first' | 'export' | 'dom';
|
|
15
|
+
xhrPattern?: string;
|
|
16
|
+
exportSelector?: string;
|
|
17
|
+
tableSelector?: string;
|
|
18
|
+
waitFor: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ReportCacheConfig {
|
|
21
|
+
ttlMinutes: number;
|
|
22
|
+
keepHistory: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface ReportDefinition {
|
|
25
|
+
id: string;
|
|
26
|
+
name: string;
|
|
27
|
+
module: string;
|
|
28
|
+
type: 'standard' | 'custom';
|
|
29
|
+
navigation: ReportNavigation;
|
|
30
|
+
url?: string;
|
|
31
|
+
parameters: ReportParameter[];
|
|
32
|
+
extraction: ExtractionConfig;
|
|
33
|
+
cache: ReportCacheConfig;
|
|
34
|
+
}
|
|
35
|
+
export interface ReportConfig {
|
|
36
|
+
reports: ReportDefinition[];
|
|
37
|
+
}
|
|
38
|
+
export interface ReportData {
|
|
39
|
+
columns: string[];
|
|
40
|
+
rows: Record<string, string | number | null>[];
|
|
41
|
+
}
|
|
42
|
+
export interface ReportResult {
|
|
43
|
+
report_id: string;
|
|
44
|
+
report_name: string;
|
|
45
|
+
columns: string[];
|
|
46
|
+
rows: Record<string, string | number | null>[];
|
|
47
|
+
source: 'xhr' | 'export' | 'dom' | 'cache';
|
|
48
|
+
fetched_at: string;
|
|
49
|
+
cached: boolean;
|
|
50
|
+
params: Record<string, unknown>;
|
|
51
|
+
}
|
|
52
|
+
export interface CachedReport {
|
|
53
|
+
report_id: string;
|
|
54
|
+
params_hash: string;
|
|
55
|
+
params_json: string;
|
|
56
|
+
data: ReportData;
|
|
57
|
+
fetched_at: number;
|
|
58
|
+
source: 'xhr' | 'export' | 'dom';
|
|
59
|
+
}
|
|
60
|
+
export interface HistoryEntry {
|
|
61
|
+
id: number;
|
|
62
|
+
report_id: string;
|
|
63
|
+
params_hash: string;
|
|
64
|
+
params_json: string;
|
|
65
|
+
data: ReportData;
|
|
66
|
+
fetched_at: number;
|
|
67
|
+
source: string;
|
|
68
|
+
}
|
|
69
|
+
export interface CalibrationEntry {
|
|
70
|
+
id: number;
|
|
71
|
+
report_id: string;
|
|
72
|
+
params_hash: string;
|
|
73
|
+
params_json: string;
|
|
74
|
+
web_value: string;
|
|
75
|
+
api_value: string;
|
|
76
|
+
match_type: 'scalar' | 'row_count' | 'full_compare';
|
|
77
|
+
drift: number | null;
|
|
78
|
+
logged_at: number;
|
|
79
|
+
}
|
|
80
|
+
export interface LoginStep {
|
|
81
|
+
name: string;
|
|
82
|
+
detect: string;
|
|
83
|
+
timeout?: number;
|
|
84
|
+
}
|
|
85
|
+
export type ScraperParams = Record<string, unknown>;
|
|
86
|
+
export type ScraperHandler = (params: ScraperParams, reportDef: ReportDefinition) => Promise<ReportData>;
|
|
87
|
+
//# sourceMappingURL=reports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reports.d.ts","sourceRoot":"","sources":["../../src/types/reports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reports.js","sourceRoot":"","sources":["../../src/types/reports.ts"],"names":[],"mappings":"AAAA,gDAAgD"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goxtechnologies/connectwise-psa-mcp",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "ConnectWise PSA MCP server —
|
|
3
|
+
"version": "1.4.2",
|
|
4
|
+
"description": "ConnectWise PSA MCP server — 25 tools, 510 named operations, 73 analytics handlers, optional web report scraping",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|
|
@@ -21,18 +21,32 @@
|
|
|
21
21
|
"test:validation": "node --import tsx --test tests/unit/validation.test.ts",
|
|
22
22
|
"test:db": "node --import tsx --test tests/unit/database.test.ts",
|
|
23
23
|
"test:integration": "node --import tsx --test tests/integration/*.test.ts",
|
|
24
|
-
"test:mcp": "node --import tsx --test tests/integration/mcp-protocol.test.ts"
|
|
24
|
+
"test:mcp": "node --import tsx --test tests/integration/mcp-protocol.test.ts",
|
|
25
|
+
"test:totp": "node --import tsx --test tests/unit/totp.test.ts",
|
|
26
|
+
"test:cache": "node --import tsx --test tests/unit/report-cache.test.ts",
|
|
27
|
+
"test:config": "node --import tsx --test tests/unit/report-config.test.ts",
|
|
28
|
+
"test:web": "node --import tsx --test tests/integration/web-scraper.test.ts",
|
|
29
|
+
"test:time-entry": "node --import tsx --test tests/unit/time-entry-prepare.test.ts"
|
|
25
30
|
},
|
|
26
31
|
"dependencies": {
|
|
27
32
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
28
|
-
"better-sqlite3": "^11.
|
|
33
|
+
"better-sqlite3": "^11.10.0"
|
|
29
34
|
},
|
|
30
35
|
"devDependencies": {
|
|
31
36
|
"@types/better-sqlite3": "^7.6.0",
|
|
32
37
|
"@types/node": "^22.0.0",
|
|
38
|
+
"playwright": "^1.52.0",
|
|
33
39
|
"tsx": "^4.21.0",
|
|
34
40
|
"typescript": "^5.7.0"
|
|
35
41
|
},
|
|
42
|
+
"peerDependencies": {
|
|
43
|
+
"playwright": ">=1.40.0"
|
|
44
|
+
},
|
|
45
|
+
"peerDependenciesMeta": {
|
|
46
|
+
"playwright": {
|
|
47
|
+
"optional": true
|
|
48
|
+
}
|
|
49
|
+
},
|
|
36
50
|
"engines": {
|
|
37
51
|
"node": ">=18.0.0"
|
|
38
52
|
},
|