@goodsamsoftware/freshbooks-mcp 1.0.8 → 1.0.10
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeentry-list.d.ts","sourceRoot":"","sources":["../../../src/tools/time-entry/timeentry-list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"timeentry-list.d.ts","sourceRoot":"","sources":["../../../src/tools/time-entry/timeentry-list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAkChE;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4D5B;;OAEG;mBAEM,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,UACvC,uBAAuB,GAC9B,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;CAsGtD,CAAC"}
|
|
@@ -7,6 +7,30 @@ import { TimeEntryListInputSchema, TimeEntryListOutputSchema } from './schemas.j
|
|
|
7
7
|
import { ErrorHandler } from '../../errors/error-handler.js';
|
|
8
8
|
import { logger } from '../../utils/logger.js';
|
|
9
9
|
import { buildQueryBuilders } from '../base-tool.js';
|
|
10
|
+
/**
|
|
11
|
+
* Custom query builder for time entry date filters.
|
|
12
|
+
*
|
|
13
|
+
* The FreshBooks Time Entries API expects date filters as top-level query parameters:
|
|
14
|
+
* - started_from: Filter entries started on or after this datetime
|
|
15
|
+
* - started_to: Filter entries started on or before this datetime
|
|
16
|
+
*
|
|
17
|
+
* This is different from the standard SearchQueryBuilder.between() which generates
|
|
18
|
+
* search[field_min] and search[field_max] parameters.
|
|
19
|
+
*/
|
|
20
|
+
class TimeEntryDateFilterBuilder {
|
|
21
|
+
params = [];
|
|
22
|
+
startedFrom(date) {
|
|
23
|
+
this.params.push(`started_from=${encodeURIComponent(date)}`);
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
startedTo(date) {
|
|
27
|
+
this.params.push(`started_to=${encodeURIComponent(date)}`);
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
build() {
|
|
31
|
+
return this.params.join('&');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
10
34
|
/**
|
|
11
35
|
* Tool definition for timeentry_list
|
|
12
36
|
*/
|
|
@@ -111,20 +135,22 @@ EXAMPLES:
|
|
|
111
135
|
if (input.billed !== undefined) {
|
|
112
136
|
search.boolean('billed', input.billed);
|
|
113
137
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
max: input.startedBefore || new Date().toISOString(),
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
else if (input.startedBefore) {
|
|
121
|
-
search.between('started_at', {
|
|
122
|
-
min: '1970-01-01T00:00:00Z',
|
|
123
|
-
max: input.startedBefore,
|
|
124
|
-
});
|
|
125
|
-
}
|
|
138
|
+
// Note: Date filters (startedAfter/startedBefore) are handled separately
|
|
139
|
+
// using TimeEntryDateFilterBuilder because the FreshBooks API expects
|
|
140
|
+
// started_from and started_to as top-level query parameters, not search params.
|
|
126
141
|
},
|
|
127
142
|
});
|
|
143
|
+
// Add date filters using custom builder (top-level query params)
|
|
144
|
+
if (input.startedAfter || input.startedBefore) {
|
|
145
|
+
const dateFilter = new TimeEntryDateFilterBuilder();
|
|
146
|
+
if (input.startedAfter) {
|
|
147
|
+
dateFilter.startedFrom(input.startedAfter);
|
|
148
|
+
}
|
|
149
|
+
if (input.startedBefore) {
|
|
150
|
+
dateFilter.startedTo(input.startedBefore);
|
|
151
|
+
}
|
|
152
|
+
queryBuilders.push(dateFilter);
|
|
153
|
+
}
|
|
128
154
|
// Call FreshBooks API
|
|
129
155
|
const response = await fbClient.timeEntries.list(input.businessId, queryBuilders);
|
|
130
156
|
if (!response.ok) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeentry-list.js","sourceRoot":"","sources":["../../../src/tools/time-entry/timeentry-list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEnF,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"timeentry-list.js","sourceRoot":"","sources":["../../../src/tools/time-entry/timeentry-list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEnF,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAyB,MAAM,iBAAiB,CAAC;AAE5E;;;;;;;;;GASG;AACH,MAAM,0BAA0B;IACtB,MAAM,GAAa,EAAE,CAAC;IAE9B,WAAW,CAAC,IAAY;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mDAqDoC;IAEjD,WAAW,EAAE,wBAAwB;IACrC,YAAY,EAAE,yBAAyB;IAEvC;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,KAA+C,EAC/C,MAA+B;QAE/B,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,CACtC,gBAAgB,EAChB,KAAK,EACH,KAA+C,EAC/C,QAAqB,EACrB,EAAE;YACF,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;gBACnC,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,OAAO,EAAE;oBACP,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,MAAM,EAAE,KAAK,CAAC,MAAM;iBACrB;aACF,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC1C,gBAAgB,EAChB,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACjB,wCAAwC;gBACxC,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC;oBAC7C,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE;wBACxB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;4BACpB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;wBAC/C,CAAC;wBACD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;4BACnB,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;wBAC7C,CAAC;wBACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;4BACjB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;wBACzC,CAAC;wBACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;4BACpB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;wBAC/C,CAAC;wBACD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;4BAC/B,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;wBACzC,CAAC;wBACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;4BACjC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;wBAC7C,CAAC;wBACD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;4BAC/B,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;wBACzC,CAAC;wBACD,yEAAyE;wBACzE,sEAAsE;wBACtE,gFAAgF;oBAClF,CAAC;iBACF,CAAC,CAAC;gBAEH,iEAAiE;gBACjE,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;oBAC9C,MAAM,UAAU,GAAG,IAAI,0BAA0B,EAAE,CAAC;oBACpD,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;wBACvB,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;oBAC7C,CAAC;oBACD,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;wBACxB,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;oBAC5C,CAAC;oBACD,aAAa,CAAC,IAAI,CAAC,UAAyC,CAAC,CAAC;gBAChE,CAAC;gBAED,sBAAsB;gBACtB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,IAAI,CAC9C,KAAK,CAAC,UAAU,EAChB,aAAa,CACd,CAAC;gBAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,QAAQ,CAAC,KAAK,CAAC;gBACvB,CAAC;gBAED,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAW,CAAC;gBAC1C,MAAM,cAAc,GAAG,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;gBAEjD,OAAO;oBACL,WAAW,EAAE,YAAY,EAAE,WAAW,IAAI,EAAE;oBAC5C,UAAU,EAAE;wBACV,IAAI,EAAE,cAAc,CAAC,IAAI,IAAI,CAAC;wBAC9B,KAAK,EAAE,cAAc,CAAC,KAAK,IAAI,CAAC;wBAChC,OAAO,EAAE,cAAc,CAAC,QAAQ,IAAI,cAAc,CAAC,OAAO,IAAI,EAAE;wBAChE,KAAK,EAAE,cAAc,CAAC,KAAK,IAAI,CAAC;qBACjC;iBACF,CAAC;YACJ,CAAC,CACF,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE;gBAC9C,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM;gBAChC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK;aAC/B,CAAC,CAAC;YAEH,OAAO,MAAa,CAAC;QACvB,CAAC,CACF,CAAC;QAEF,OAAO,OAAO,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAQ,CAAC;IACjE,CAAC;CACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goodsamsoftware/freshbooks-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10",
|
|
4
4
|
"description": "FreshBooks MCP server providing 1:1 parity with the FreshBooks Node.js SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/server.js",
|
|
@@ -77,10 +77,10 @@
|
|
|
77
77
|
"zod": "^3.22.0"
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|
|
80
|
-
"@faker-js/faker": "^
|
|
80
|
+
"@faker-js/faker": "^10.2.0",
|
|
81
81
|
"@types/node": "^20.0.0",
|
|
82
82
|
"@vitest/coverage-v8": "^4.0.16",
|
|
83
|
-
"eslint": "^
|
|
83
|
+
"eslint": "^9.39.2",
|
|
84
84
|
"tsx": "^4.0.0",
|
|
85
85
|
"typescript": "^5.3.0",
|
|
86
86
|
"vitest": "^4.0.16"
|