@frihet/mcp-server 1.14.3 → 1.14.5
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.md +1 -1
- package/dist/__tests__/intelligence-duplicate-invoice.test.d.ts +14 -0
- package/dist/__tests__/intelligence-duplicate-invoice.test.d.ts.map +1 -0
- package/dist/__tests__/intelligence-duplicate-invoice.test.js +108 -0
- package/dist/__tests__/intelligence-duplicate-invoice.test.js.map +1 -0
- package/dist/__tests__/observability-redaction.test.d.ts +13 -0
- package/dist/__tests__/observability-redaction.test.d.ts.map +1 -0
- package/dist/__tests__/observability-redaction.test.js +94 -0
- package/dist/__tests__/observability-redaction.test.js.map +1 -0
- package/dist/__tests__/openai-profile.test.js +33 -0
- package/dist/__tests__/openai-profile.test.js.map +1 -1
- package/dist/observability.d.ts +60 -0
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js +94 -69
- package/dist/observability.js.map +1 -1
- package/dist/openai-profile.d.ts.map +1 -1
- package/dist/openai-profile.js +76 -40
- package/dist/openai-profile.js.map +1 -1
- package/dist/redaction.d.ts +39 -0
- package/dist/redaction.d.ts.map +1 -0
- package/dist/redaction.js +91 -0
- package/dist/redaction.js.map +1 -0
- package/dist/tools/intelligence.d.ts.map +1 -1
- package/dist/tools/intelligence.js +36 -9
- package/dist/tools/intelligence.js.map +1 -1
- package/dist/tools/invoices.d.ts.map +1 -1
- package/dist/tools/invoices.js +73 -2
- package/dist/tools/invoices.js.map +1 -1
- package/dist/tools/quotes.d.ts.map +1 -1
- package/dist/tools/quotes.js +48 -0
- package/dist/tools/quotes.js.map +1 -1
- package/package.json +2 -2
- package/scripts/audit-mcp-refs.mjs +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability.js","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"observability.js","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-profile.d.ts","sourceRoot":"","sources":["../src/openai-profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;
|
|
1
|
+
{"version":3,"file":"openai-profile.d.ts","sourceRoot":"","sources":["../src/openai-profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AA6SH;;;GAGG;AACH,eAAO,MAAM,UAAU,QAQkB,CAAC;AAM1C;;;;;;;;;;;;;;;;GAgBG;AAEH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAsIpD;AAED,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB,QAA4B,CAAC;AAE/D,yDAAyD;AACzD,eAAO,MAAM,yBAAyB,QAA4B,CAAC;AAEnE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,8BAA8B,EAAE,WAAW,CAAC,MAAM,CACzC,CAAC;AAEvB,iEAAiE;AACjE,eAAO,MAAM,8BAA8B,QAAyB,CAAC"}
|
package/dist/openai-profile.js
CHANGED
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
*
|
|
21
21
|
* @see https://developers.openai.com/apps-sdk/app-submission-guidelines
|
|
22
22
|
*/
|
|
23
|
+
import { z } from "zod";
|
|
24
|
+
import { SENSITIVE_FIELD_NAMES, deepRedact, redactText } from "./redaction.js";
|
|
23
25
|
const PROFILE = {
|
|
24
26
|
// -- OpenAI-reviewed core surface ----------------------------------------
|
|
25
27
|
//
|
|
@@ -170,53 +172,80 @@ const PROFILE = {
|
|
|
170
172
|
},
|
|
171
173
|
// ── Output fields redacted ─────────────────────────────────────────
|
|
172
174
|
// Stripped from structuredContent and text in ALL tool responses.
|
|
173
|
-
//
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
"nif", "cif", "vatNumber", // Spanish/EU synonyms for government tax ID
|
|
177
|
-
"vat_number", "vatId", "vat_id",
|
|
178
|
-
"secret", // Webhook signing credential
|
|
179
|
-
"iban", "bankAccount", // Banking identifiers (if exposed via passthrough)
|
|
180
|
-
"bank_account", "accountNumber",
|
|
181
|
-
"idDocument", "documentNumber", // Guest/customer government document fields
|
|
182
|
-
"passport", "passportNumber",
|
|
183
|
-
"dni", "nationalId", "national_id",
|
|
184
|
-
"ssn", "socialSecurityNumber", "social_security_number",
|
|
185
|
-
"apiKey", "api_key",
|
|
186
|
-
"accessToken", "access_token", "refreshToken", "refresh_token",
|
|
187
|
-
"password", "mfa", "otp",
|
|
188
|
-
],
|
|
175
|
+
// Single source of truth lives in redaction.ts (shared with observability.ts
|
|
176
|
+
// so Langfuse traces redact the EXACT same field set).
|
|
177
|
+
redactOutputFields: SENSITIVE_FIELD_NAMES,
|
|
189
178
|
};
|
|
190
179
|
/* ------------------------------------------------------------------ */
|
|
191
|
-
/* Deep field redaction
|
|
180
|
+
/* Deep field redaction — shared policy in redaction.ts */
|
|
192
181
|
/* ------------------------------------------------------------------ */
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
182
|
+
//
|
|
183
|
+
// deepRedact (in-place DELETE) + redactText (regex) now live in ./redaction.ts
|
|
184
|
+
// so observability.ts redacts the SAME field set before tracing to Langfuse.
|
|
185
|
+
/* ------------------------------------------------------------------ */
|
|
186
|
+
/* Output SCHEMA stripping (descriptor-level) */
|
|
187
|
+
/* ------------------------------------------------------------------ */
|
|
188
|
+
/**
|
|
189
|
+
* Returns a Zod output schema with sensitive fields removed at EVERY depth.
|
|
190
|
+
*
|
|
191
|
+
* Runtime output redaction (deepRedact in the handler wrapper) hides the
|
|
192
|
+
* VALUES, but the advertised `outputSchema` descriptor still DECLARES taxId /
|
|
193
|
+
* secret etc. at tools/list — which OpenAI's submission review auto-detects as
|
|
194
|
+
* exposed government IDs / credentials. This strips them from the descriptor too.
|
|
195
|
+
*
|
|
196
|
+
* Surgical: only the object/array nodes on the path to a sensitive field are
|
|
197
|
+
* rebuilt; untouched branches are returned BY REFERENCE so their `.describe()`
|
|
198
|
+
* metadata and `.passthrough()` behavior are preserved. A schema with no
|
|
199
|
+
* sensitive field anywhere is returned unchanged (identity).
|
|
200
|
+
*/
|
|
201
|
+
function stripSensitiveOutputSchema(schema, fields) {
|
|
202
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
203
|
+
const def = schema?._def;
|
|
204
|
+
const typeName = def?.typeName;
|
|
205
|
+
if (typeName === "ZodObject") {
|
|
206
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
207
|
+
const shape = schema.shape;
|
|
208
|
+
const newShape = {};
|
|
209
|
+
let changed = false;
|
|
210
|
+
for (const [key, value] of Object.entries(shape)) {
|
|
211
|
+
if (fields.includes(key)) {
|
|
212
|
+
changed = true;
|
|
213
|
+
continue; // drop the sensitive field entirely from the descriptor
|
|
214
|
+
}
|
|
215
|
+
const stripped = stripSensitiveOutputSchema(value, fields);
|
|
216
|
+
if (stripped !== value)
|
|
217
|
+
changed = true;
|
|
218
|
+
newShape[key] = stripped;
|
|
219
|
+
}
|
|
220
|
+
if (!changed)
|
|
221
|
+
return schema;
|
|
222
|
+
let rebuilt = z.object(newShape);
|
|
223
|
+
if (typeof def.description === "string")
|
|
224
|
+
rebuilt = rebuilt.describe(def.description);
|
|
225
|
+
return rebuilt;
|
|
201
226
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
227
|
+
if (typeName === "ZodArray") {
|
|
228
|
+
const inner = def.type;
|
|
229
|
+
const stripped = stripSensitiveOutputSchema(inner, fields);
|
|
230
|
+
if (stripped === inner)
|
|
231
|
+
return schema;
|
|
232
|
+
let rebuilt = z.array(stripped);
|
|
233
|
+
if (typeof def.description === "string")
|
|
234
|
+
rebuilt = rebuilt.describe(def.description);
|
|
235
|
+
return rebuilt;
|
|
206
236
|
}
|
|
207
|
-
|
|
208
|
-
|
|
237
|
+
if (typeName === "ZodOptional") {
|
|
238
|
+
const inner = def.innerType;
|
|
239
|
+
const stripped = stripSensitiveOutputSchema(inner, fields);
|
|
240
|
+
return stripped === inner ? schema : z.optional(stripped);
|
|
209
241
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
for (const field of fields) {
|
|
215
|
-
// Remove "field": "value", or "field": value patterns
|
|
216
|
-
result = result.replace(new RegExp(`\\s*"${field}"\\s*:\\s*(?:"[^"]*"|null|true|false|\\d+(?:\\.\\d+)?)\\s*,?`, "g"), "");
|
|
242
|
+
if (typeName === "ZodNullable") {
|
|
243
|
+
const inner = def.innerType;
|
|
244
|
+
const stripped = stripSensitiveOutputSchema(inner, fields);
|
|
245
|
+
return stripped === inner ? schema : z.nullable(stripped);
|
|
217
246
|
}
|
|
218
|
-
//
|
|
219
|
-
return
|
|
247
|
+
// Primitives, unions, records, and anything else: leave untouched.
|
|
248
|
+
return schema;
|
|
220
249
|
}
|
|
221
250
|
/* ------------------------------------------------------------------ */
|
|
222
251
|
/* Resources excluded / redacted in OpenAI mode */
|
|
@@ -306,6 +335,13 @@ export function applyOpenAIProfile(server) {
|
|
|
306
335
|
delete config.inputSchema[field];
|
|
307
336
|
}
|
|
308
337
|
}
|
|
338
|
+
// 4b. Strip sensitive fields from the OUTPUT schema descriptor too.
|
|
339
|
+
// The handler wrapper (step 5) redacts VALUES at runtime; this removes the
|
|
340
|
+
// field DECLARATIONS (taxId/secret/iban/…) from the outputSchema advertised
|
|
341
|
+
// at tools/list, so OpenAI review never sees a gov-ID/credential field.
|
|
342
|
+
if (config.outputSchema) {
|
|
343
|
+
config.outputSchema = stripSensitiveOutputSchema(config.outputSchema, fieldsToRedact);
|
|
344
|
+
}
|
|
309
345
|
// 5. Wrap handler to redact sensitive output fields
|
|
310
346
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
311
347
|
const wrappedHandler = async (input) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-profile.js","sourceRoot":"","sources":["../src/openai-profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;
|
|
1
|
+
{"version":3,"file":"openai-profile.js","sourceRoot":"","sources":["../src/openai-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared PII / credential redaction policy for the Frihet MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for the set of field names that must never leave the
|
|
5
|
+
* process in cleartext — government IDs (NIF/CIF/VAT), banking identifiers,
|
|
6
|
+
* identity documents, webhook signing secrets, and auth tokens.
|
|
7
|
+
*
|
|
8
|
+
* Two consumers:
|
|
9
|
+
* - openai-profile.ts — strips these from tool I/O in OpenAI-safe mode
|
|
10
|
+
* (in-place DELETE of the live response the user receives).
|
|
11
|
+
* - observability.ts — redacts these from every Langfuse trace payload
|
|
12
|
+
* (non-mutating CLONE) so an external observability service never stores a
|
|
13
|
+
* taxId / secret / IBAN, regardless of profile mode.
|
|
14
|
+
*
|
|
15
|
+
* Zero runtime deps — safe in both Node.js (stdio) and Cloudflare Workers (edge).
|
|
16
|
+
*/
|
|
17
|
+
/** Sentinel left in place of a redacted value in cloned (tracing) payloads. */
|
|
18
|
+
export declare const REDACTED = "[redacted]";
|
|
19
|
+
/**
|
|
20
|
+
* Field names whose VALUES must never appear in logs, traces, or any surface
|
|
21
|
+
* outside the process boundary. Includes snake_case + locale synonyms because
|
|
22
|
+
* the Frihet API may return any of them via `.passthrough()` schemas.
|
|
23
|
+
*/
|
|
24
|
+
export declare const SENSITIVE_FIELD_NAMES: readonly string[];
|
|
25
|
+
/** Recursively removes named fields from an object/array tree, IN PLACE. */
|
|
26
|
+
export declare function deepRedact(obj: unknown, fields?: readonly string[]): void;
|
|
27
|
+
/** Best-effort redaction of JSON field patterns from display / serialized text. */
|
|
28
|
+
export declare function redactText(text: string, fields?: readonly string[]): string;
|
|
29
|
+
/**
|
|
30
|
+
* Returns a deep CLONE of `value` with sensitive field values replaced by the
|
|
31
|
+
* REDACTED sentinel (objects/arrays) and JSON field patterns stripped from any
|
|
32
|
+
* string leaf (covers the serialized MCP `content[].text` block).
|
|
33
|
+
*
|
|
34
|
+
* Unlike {@link deepRedact} this never mutates its argument — required for
|
|
35
|
+
* tracing, where the original object is the live response returned to the
|
|
36
|
+
* caller. A depth guard bounds pathological / cyclic structures.
|
|
37
|
+
*/
|
|
38
|
+
export declare function redactClone(value: unknown, fields?: readonly string[], depth?: number): unknown;
|
|
39
|
+
//# sourceMappingURL=redaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../src/redaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,QAAQ,eAAe,CAAC;AAErC;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAclD,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,SAAS,MAAM,EAA0B,GAAG,IAAI,CAehG;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,SAAS,MAAM,EAA0B,GAAG,MAAM,CAclG;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,OAAO,EACd,MAAM,GAAE,SAAS,MAAM,EAA0B,EACjD,KAAK,SAAI,GACR,OAAO,CAWT"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared PII / credential redaction policy for the Frihet MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for the set of field names that must never leave the
|
|
5
|
+
* process in cleartext — government IDs (NIF/CIF/VAT), banking identifiers,
|
|
6
|
+
* identity documents, webhook signing secrets, and auth tokens.
|
|
7
|
+
*
|
|
8
|
+
* Two consumers:
|
|
9
|
+
* - openai-profile.ts — strips these from tool I/O in OpenAI-safe mode
|
|
10
|
+
* (in-place DELETE of the live response the user receives).
|
|
11
|
+
* - observability.ts — redacts these from every Langfuse trace payload
|
|
12
|
+
* (non-mutating CLONE) so an external observability service never stores a
|
|
13
|
+
* taxId / secret / IBAN, regardless of profile mode.
|
|
14
|
+
*
|
|
15
|
+
* Zero runtime deps — safe in both Node.js (stdio) and Cloudflare Workers (edge).
|
|
16
|
+
*/
|
|
17
|
+
/** Sentinel left in place of a redacted value in cloned (tracing) payloads. */
|
|
18
|
+
export const REDACTED = "[redacted]";
|
|
19
|
+
/**
|
|
20
|
+
* Field names whose VALUES must never appear in logs, traces, or any surface
|
|
21
|
+
* outside the process boundary. Includes snake_case + locale synonyms because
|
|
22
|
+
* the Frihet API may return any of them via `.passthrough()` schemas.
|
|
23
|
+
*/
|
|
24
|
+
export const SENSITIVE_FIELD_NAMES = [
|
|
25
|
+
"taxId", "tax_id", // Primary field name + snake_case variant
|
|
26
|
+
"nif", "cif", "vatNumber", // Spanish/EU synonyms for government tax ID
|
|
27
|
+
"vat_number", "vatId", "vat_id",
|
|
28
|
+
"secret", // Webhook signing credential
|
|
29
|
+
"iban", "bankAccount", // Banking identifiers
|
|
30
|
+
"bank_account", "accountNumber",
|
|
31
|
+
"idDocument", "documentNumber", // Guest/customer government document fields
|
|
32
|
+
"passport", "passportNumber",
|
|
33
|
+
"dni", "nationalId", "national_id",
|
|
34
|
+
"ssn", "socialSecurityNumber", "social_security_number",
|
|
35
|
+
"apiKey", "api_key",
|
|
36
|
+
"accessToken", "access_token", "refreshToken", "refresh_token",
|
|
37
|
+
"password", "mfa", "otp",
|
|
38
|
+
];
|
|
39
|
+
/** Recursively removes named fields from an object/array tree, IN PLACE. */
|
|
40
|
+
export function deepRedact(obj, fields = SENSITIVE_FIELD_NAMES) {
|
|
41
|
+
if (obj === null || typeof obj !== "object")
|
|
42
|
+
return;
|
|
43
|
+
if (Array.isArray(obj)) {
|
|
44
|
+
for (const item of obj)
|
|
45
|
+
deepRedact(item, fields);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const record = obj;
|
|
49
|
+
for (const field of fields) {
|
|
50
|
+
if (field in record)
|
|
51
|
+
delete record[field];
|
|
52
|
+
}
|
|
53
|
+
for (const value of Object.values(record)) {
|
|
54
|
+
deepRedact(value, fields);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** Best-effort redaction of JSON field patterns from display / serialized text. */
|
|
58
|
+
export function redactText(text, fields = SENSITIVE_FIELD_NAMES) {
|
|
59
|
+
let result = text;
|
|
60
|
+
for (const field of fields) {
|
|
61
|
+
// Remove "field": "value", or "field": value patterns
|
|
62
|
+
result = result.replace(new RegExp(`\\s*"${field}"\\s*:\\s*(?:"[^"]*"|null|true|false|\\d+(?:\\.\\d+)?)\\s*,?`, "g"), "");
|
|
63
|
+
}
|
|
64
|
+
// Clean up trailing commas before } or ] left by removals
|
|
65
|
+
return result.replace(/,(\s*[}\]])/g, "$1");
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Returns a deep CLONE of `value` with sensitive field values replaced by the
|
|
69
|
+
* REDACTED sentinel (objects/arrays) and JSON field patterns stripped from any
|
|
70
|
+
* string leaf (covers the serialized MCP `content[].text` block).
|
|
71
|
+
*
|
|
72
|
+
* Unlike {@link deepRedact} this never mutates its argument — required for
|
|
73
|
+
* tracing, where the original object is the live response returned to the
|
|
74
|
+
* caller. A depth guard bounds pathological / cyclic structures.
|
|
75
|
+
*/
|
|
76
|
+
export function redactClone(value, fields = SENSITIVE_FIELD_NAMES, depth = 0) {
|
|
77
|
+
if (depth > 16)
|
|
78
|
+
return REDACTED; // cycle / pathological-depth guard
|
|
79
|
+
if (typeof value === "string")
|
|
80
|
+
return redactText(value, fields);
|
|
81
|
+
if (value === null || typeof value !== "object")
|
|
82
|
+
return value;
|
|
83
|
+
if (Array.isArray(value))
|
|
84
|
+
return value.map((v) => redactClone(v, fields, depth + 1));
|
|
85
|
+
const out = {};
|
|
86
|
+
for (const [k, v] of Object.entries(value)) {
|
|
87
|
+
out[k] = fields.includes(k) ? REDACTED : redactClone(v, fields, depth + 1);
|
|
88
|
+
}
|
|
89
|
+
return out;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=redaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../src/redaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intelligence.d.ts","sourceRoot":"","sources":["../../src/tools/intelligence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAU5D,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"intelligence.d.ts","sourceRoot":"","sources":["../../src/tools/intelligence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAU5D,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA+KxF"}
|
|
@@ -99,17 +99,44 @@ export function registerIntelligenceTools(server, client) {
|
|
|
99
99
|
.describe("Due date for the new invoice (YYYY-MM-DD) / Fecha de vencimiento de la nueva factura"),
|
|
100
100
|
},
|
|
101
101
|
}, async ({ id, newIssueDate, newDueDate }) => withToolLogging("duplicate_invoice", async () => {
|
|
102
|
-
// 1. Fetch the original invoice
|
|
102
|
+
// 1. Fetch the original invoice (returns the FULL raw stored document —
|
|
103
|
+
// payments, verifactu, eInvoice, operationType, createdBy, etc.)
|
|
103
104
|
const original = await client.getInvoice(id);
|
|
104
|
-
// 2.
|
|
105
|
-
|
|
106
|
-
//
|
|
105
|
+
// 2. Allowlist-PICK only the fields the create endpoint actually accepts.
|
|
106
|
+
// The create POST validates against a Zod `.strict()` schema that
|
|
107
|
+
// REJECTS unknown keys (HTTP 400). Spreading the raw GET doc and only
|
|
108
|
+
// blacklisting a handful of fields left stored-only fields (payments,
|
|
109
|
+
// amountPaid, verifactu, eInvoice, operationType, poNumber, createdBy,
|
|
110
|
+
// sentTo/sentAt, cancelled*, attachments, …) in the body, so any paid /
|
|
111
|
+
// sent / cancelled / e-invoiced invoice failed to duplicate. Picking
|
|
112
|
+
// the writable subset mirrors the create schema and never 400s.
|
|
113
|
+
// Deliberately NOT copied: documentNumber (fresh gapless number),
|
|
114
|
+
// status (forced draft), recurring (a copy is a one-off), and every
|
|
115
|
+
// lifecycle/computed field (total, payments, verifactu, …).
|
|
116
|
+
const COPYABLE_INVOICE_FIELDS = [
|
|
117
|
+
"clientName",
|
|
118
|
+
"clientId",
|
|
119
|
+
"clientAddress",
|
|
120
|
+
"clientTaxId",
|
|
121
|
+
"items",
|
|
122
|
+
"dueDate",
|
|
123
|
+
"notes",
|
|
124
|
+
"taxRate",
|
|
125
|
+
"irpfRate",
|
|
126
|
+
"equivalenceSurchargeRate",
|
|
127
|
+
"clientLocation",
|
|
128
|
+
"prepayment",
|
|
129
|
+
"seriesId",
|
|
130
|
+
];
|
|
131
|
+
// 3. Build the duplicate from the writable subset + new values.
|
|
107
132
|
const today = new Date().toISOString().split("T")[0];
|
|
108
|
-
const invoiceData = {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
133
|
+
const invoiceData = {};
|
|
134
|
+
for (const field of COPYABLE_INVOICE_FIELDS) {
|
|
135
|
+
if (original[field] !== undefined)
|
|
136
|
+
invoiceData[field] = original[field];
|
|
137
|
+
}
|
|
138
|
+
invoiceData.status = "draft";
|
|
139
|
+
invoiceData.issueDate = newIssueDate || today;
|
|
113
140
|
if (newDueDate) {
|
|
114
141
|
invoiceData.dueDate = newDueDate;
|
|
115
142
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intelligence.js","sourceRoot":"","sources":["../../src/tools/intelligence.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"intelligence.js","sourceRoot":"","sources":["../../src/tools/intelligence.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoices.d.ts","sourceRoot":"","sources":["../../src/tools/invoices.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"invoices.d.ts","sourceRoot":"","sources":["../../src/tools/invoices.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AA6E5D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA0dnF"}
|
package/dist/tools/invoices.js
CHANGED
|
@@ -8,6 +8,72 @@ const invoiceItemSchema = z.object({
|
|
|
8
8
|
quantity: z.number().describe("Quantity / Cantidad"),
|
|
9
9
|
unitPrice: z.number().describe("Unit price in EUR / Precio unitario en EUR"),
|
|
10
10
|
});
|
|
11
|
+
// Optional client-identity fields the Frihet API accepts on invoice/quote
|
|
12
|
+
// create+update. When clientId is supplied the server back-fills taxId/address
|
|
13
|
+
// from the stored client; clientTaxId/clientAddress override per-document.
|
|
14
|
+
const clientIdentityFields = {
|
|
15
|
+
clientId: z
|
|
16
|
+
.string()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("Existing client ID — server back-fills taxId/address / ID de cliente existente"),
|
|
19
|
+
clientTaxId: z
|
|
20
|
+
.string()
|
|
21
|
+
.optional()
|
|
22
|
+
.describe("Client tax ID (NIF/CIF/VAT) shown on the invoice / NIF/CIF del cliente"),
|
|
23
|
+
clientAddress: z
|
|
24
|
+
.string()
|
|
25
|
+
.optional()
|
|
26
|
+
.describe("Client billing address shown on the invoice / Direccion fiscal del cliente"),
|
|
27
|
+
};
|
|
28
|
+
// Optional Spanish fiscal fields the Frihet API accepts on invoice create+update.
|
|
29
|
+
// irpfRate is the freelancer withholding (retencion IRPF) — critical for ES
|
|
30
|
+
// autonomos; equivalenceSurchargeRate is recargo de equivalencia.
|
|
31
|
+
const invoiceFiscalFields = {
|
|
32
|
+
irpfRate: z
|
|
33
|
+
.number()
|
|
34
|
+
.min(0)
|
|
35
|
+
.max(100)
|
|
36
|
+
.optional()
|
|
37
|
+
.describe("IRPF withholding % (retencion autonomo ES, e.g. 15 or 7) / Retencion IRPF %"),
|
|
38
|
+
equivalenceSurchargeRate: z
|
|
39
|
+
.number()
|
|
40
|
+
.min(0)
|
|
41
|
+
.max(100)
|
|
42
|
+
.optional()
|
|
43
|
+
.describe("Recargo de equivalencia % (ES retail regime) / Recargo de equivalencia %"),
|
|
44
|
+
clientLocation: z
|
|
45
|
+
.enum(["peninsula", "canarias", "ceuta_melilla", "eu", "world"])
|
|
46
|
+
.optional()
|
|
47
|
+
.describe("Fiscal zone driving IVA vs IGIC vs exempt / Zona fiscal (IVA/IGIC/exento)"),
|
|
48
|
+
prepayment: z
|
|
49
|
+
.number()
|
|
50
|
+
.min(0)
|
|
51
|
+
.optional()
|
|
52
|
+
.describe("Prepaid/advance amount already collected in EUR / Anticipo cobrado en EUR"),
|
|
53
|
+
discountRate: z
|
|
54
|
+
.number()
|
|
55
|
+
.min(0)
|
|
56
|
+
.max(100)
|
|
57
|
+
.optional()
|
|
58
|
+
.describe("Global discount % applied to the invoice / Descuento global %"),
|
|
59
|
+
seriesId: z
|
|
60
|
+
.string()
|
|
61
|
+
.optional()
|
|
62
|
+
.describe("Invoice numbering series ID / ID de serie de numeracion"),
|
|
63
|
+
documentNumber: z
|
|
64
|
+
.string()
|
|
65
|
+
.max(50)
|
|
66
|
+
.optional()
|
|
67
|
+
.describe("Externally-issued number for import (honored verbatim) / Numero externo para importacion"),
|
|
68
|
+
poNumber: z
|
|
69
|
+
.string()
|
|
70
|
+
.optional()
|
|
71
|
+
.describe("Client purchase-order reference / Numero de pedido del cliente"),
|
|
72
|
+
operationType: z
|
|
73
|
+
.enum(["service", "goods"])
|
|
74
|
+
.optional()
|
|
75
|
+
.describe("Operation type (service or goods) / Tipo de operacion"),
|
|
76
|
+
};
|
|
11
77
|
export function registerInvoiceTools(server, client) {
|
|
12
78
|
// -- list_invoices --
|
|
13
79
|
server.registerTool("list_invoices", {
|
|
@@ -93,12 +159,14 @@ export function registerInvoiceTools(server, client) {
|
|
|
93
159
|
title: "Create Invoice",
|
|
94
160
|
description: "Create a new invoice. Requires client name and at least one line item. " +
|
|
95
161
|
"The invoice number is auto-generated. Defaults to draft status and today's date. " +
|
|
96
|
-
"Example: clientName='Acme Corp', items=[{description:'Consulting', quantity:10, unitPrice:150}], taxRate=21 " +
|
|
162
|
+
"Example: clientName='Acme Corp', items=[{description:'Consulting', quantity:10, unitPrice:150}], taxRate=21, irpfRate=15 " +
|
|
97
163
|
"/ Crea una nueva factura. Requiere nombre del cliente y al menos un concepto. " +
|
|
98
|
-
"El numero se genera automaticamente. Por defecto estado borrador y fecha de hoy."
|
|
164
|
+
"El numero se genera automaticamente. Por defecto estado borrador y fecha de hoy. " +
|
|
165
|
+
"Soporta retencion IRPF (autonomos ES), recargo de equivalencia, serie, anticipo y descuento global.",
|
|
99
166
|
annotations: CREATE_ANNOTATIONS,
|
|
100
167
|
inputSchema: {
|
|
101
168
|
clientName: z.string().describe("Client/customer name / Nombre del cliente"),
|
|
169
|
+
...clientIdentityFields,
|
|
102
170
|
items: z
|
|
103
171
|
.array(invoiceItemSchema)
|
|
104
172
|
.min(1)
|
|
@@ -125,6 +193,7 @@ export function registerInvoiceTools(server, client) {
|
|
|
125
193
|
.max(100)
|
|
126
194
|
.optional()
|
|
127
195
|
.describe("Tax rate percentage (e.g. 21 for 21% IVA, 7 for IGIC) / Porcentaje de impuesto"),
|
|
196
|
+
...invoiceFiscalFields,
|
|
128
197
|
},
|
|
129
198
|
outputSchema: invoiceItemOutput,
|
|
130
199
|
}, async (input) => withToolLogging("create_invoice", async () => {
|
|
@@ -145,6 +214,7 @@ export function registerInvoiceTools(server, client) {
|
|
|
145
214
|
inputSchema: {
|
|
146
215
|
id: z.string().describe("Invoice ID / ID de la factura"),
|
|
147
216
|
clientName: z.string().optional().describe("Client name / Nombre del cliente"),
|
|
217
|
+
...clientIdentityFields,
|
|
148
218
|
items: z
|
|
149
219
|
.array(invoiceItemSchema)
|
|
150
220
|
.min(1)
|
|
@@ -158,6 +228,7 @@ export function registerInvoiceTools(server, client) {
|
|
|
158
228
|
.describe("Invoice status / Estado"),
|
|
159
229
|
notes: z.string().optional().describe("Notes / Notas"),
|
|
160
230
|
taxRate: z.number().min(0).max(100).optional().describe("Tax rate % / IVA %"),
|
|
231
|
+
...invoiceFiscalFields,
|
|
161
232
|
},
|
|
162
233
|
outputSchema: invoiceItemOutput,
|
|
163
234
|
}, async ({ id, ...data }) => withToolLogging("update_invoice", async () => {
|