@frihet/mcp-server 1.9.0-beta.1 → 1.12.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.md +263 -13
- package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.d.ts +13 -0
- package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.d.ts.map +1 -0
- package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.js +420 -0
- package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.js.map +1 -0
- package/dist/__tests__/einvoice-day4-tools.test.d.ts +16 -0
- package/dist/__tests__/einvoice-day4-tools.test.d.ts.map +1 -0
- package/dist/__tests__/einvoice-day4-tools.test.js +377 -0
- package/dist/__tests__/einvoice-day4-tools.test.js.map +1 -0
- package/dist/__tests__/einvoice-tools.test.d.ts +1 -1
- package/dist/__tests__/einvoice-tools.test.js +25 -12
- package/dist/__tests__/einvoice-tools.test.js.map +1 -1
- package/dist/__tests__/fiscal-tools.test.d.ts +5 -4
- package/dist/__tests__/fiscal-tools.test.d.ts.map +1 -1
- package/dist/__tests__/fiscal-tools.test.js +8 -26
- package/dist/__tests__/fiscal-tools.test.js.map +1 -1
- package/dist/__tests__/openai-profile.test.d.ts +10 -0
- package/dist/__tests__/openai-profile.test.d.ts.map +1 -0
- package/dist/__tests__/openai-profile.test.js +132 -0
- package/dist/__tests__/openai-profile.test.js.map +1 -0
- package/dist/__tests__/recurring-tools.test.d.ts +14 -7
- package/dist/__tests__/recurring-tools.test.d.ts.map +1 -1
- package/dist/__tests__/recurring-tools.test.js +195 -9
- package/dist/__tests__/recurring-tools.test.js.map +1 -1
- package/dist/__tests__/team-tools.test.d.ts +18 -0
- package/dist/__tests__/team-tools.test.d.ts.map +1 -0
- package/dist/__tests__/team-tools.test.js +228 -0
- package/dist/__tests__/team-tools.test.js.map +1 -0
- package/dist/__tests__/time-tools.test.d.ts +9 -7
- package/dist/__tests__/time-tools.test.d.ts.map +1 -1
- package/dist/__tests__/time-tools.test.js +96 -9
- package/dist/__tests__/time-tools.test.js.map +1 -1
- package/dist/client-interface.d.ts +236 -0
- package/dist/client-interface.d.ts.map +1 -1
- package/dist/client.d.ts +245 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +266 -5
- package/dist/client.js.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/openai-profile.d.ts +4 -1
- package/dist/openai-profile.d.ts.map +1 -1
- package/dist/openai-profile.js +105 -1
- package/dist/openai-profile.js.map +1 -1
- package/dist/tools/accountingClose.d.ts +20 -0
- package/dist/tools/accountingClose.d.ts.map +1 -0
- package/dist/tools/accountingClose.js +119 -0
- package/dist/tools/accountingClose.js.map +1 -0
- package/dist/tools/audit_gl.d.ts +19 -0
- package/dist/tools/audit_gl.d.ts.map +1 -0
- package/dist/tools/audit_gl.js +86 -0
- package/dist/tools/audit_gl.js.map +1 -0
- package/dist/tools/bank_rules.d.ts +23 -0
- package/dist/tools/bank_rules.d.ts.map +1 -0
- package/dist/tools/bank_rules.js +96 -0
- package/dist/tools/bank_rules.js.map +1 -0
- package/dist/tools/einvoice.d.ts +70 -3
- package/dist/tools/einvoice.d.ts.map +1 -1
- package/dist/tools/einvoice.js +421 -3
- package/dist/tools/einvoice.js.map +1 -1
- package/dist/tools/fiscal.d.ts +3 -2
- package/dist/tools/fiscal.d.ts.map +1 -1
- package/dist/tools/fiscal.js +4 -22
- package/dist/tools/fiscal.js.map +1 -1
- package/dist/tools/gestoria.d.ts +28 -0
- package/dist/tools/gestoria.d.ts.map +1 -0
- package/dist/tools/gestoria.js +248 -0
- package/dist/tools/gestoria.js.map +1 -0
- package/dist/tools/hr.d.ts +24 -0
- package/dist/tools/hr.d.ts.map +1 -0
- package/dist/tools/hr.js +219 -0
- package/dist/tools/hr.js.map +1 -0
- package/dist/tools/igic.d.ts +19 -0
- package/dist/tools/igic.d.ts.map +1 -0
- package/dist/tools/igic.js +102 -0
- package/dist/tools/igic.js.map +1 -0
- package/dist/tools/impuesto_sociedades.d.ts +18 -0
- package/dist/tools/impuesto_sociedades.d.ts.map +1 -0
- package/dist/tools/impuesto_sociedades.js +64 -0
- package/dist/tools/impuesto_sociedades.js.map +1 -0
- package/dist/tools/onboard_vies.d.ts +22 -0
- package/dist/tools/onboard_vies.d.ts.map +1 -0
- package/dist/tools/onboard_vies.js +74 -0
- package/dist/tools/onboard_vies.js.map +1 -0
- package/dist/tools/onboarding.d.ts +19 -0
- package/dist/tools/onboarding.d.ts.map +1 -0
- package/dist/tools/onboarding.js +63 -0
- package/dist/tools/onboarding.js.map +1 -0
- package/dist/tools/payroll.d.ts +20 -0
- package/dist/tools/payroll.d.ts.map +1 -0
- package/dist/tools/payroll.js +73 -0
- package/dist/tools/payroll.js.map +1 -0
- package/dist/tools/permissions.d.ts +19 -0
- package/dist/tools/permissions.d.ts.map +1 -0
- package/dist/tools/permissions.js +52 -0
- package/dist/tools/permissions.js.map +1 -0
- package/dist/tools/portal_domain.d.ts +19 -0
- package/dist/tools/portal_domain.d.ts.map +1 -0
- package/dist/tools/portal_domain.js +85 -0
- package/dist/tools/portal_domain.js.map +1 -0
- package/dist/tools/recurring.d.ts +10 -5
- package/dist/tools/recurring.d.ts.map +1 -1
- package/dist/tools/recurring.js +178 -6
- package/dist/tools/recurring.js.map +1 -1
- package/dist/tools/register-all.d.ts +2 -2
- package/dist/tools/register-all.d.ts.map +1 -1
- package/dist/tools/register-all.js +41 -3
- package/dist/tools/register-all.js.map +1 -1
- package/dist/tools/shared.d.ts +313 -1
- package/dist/tools/shared.d.ts.map +1 -1
- package/dist/tools/shared.js +256 -0
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools/team.d.ts +17 -0
- package/dist/tools/team.d.ts.map +1 -0
- package/dist/tools/team.js +141 -0
- package/dist/tools/team.js.map +1 -0
- package/dist/tools/time.d.ts +9 -8
- package/dist/tools/time.d.ts.map +1 -1
- package/dist/tools/time.js +54 -9
- package/dist/tools/time.js.map +1 -1
- package/dist/tools/webhooks.d.ts.map +1 -1
- package/dist/tools/webhooks.js +27 -1
- package/dist/tools/webhooks.js.map +1 -1
- package/package.json +12 -5
- package/scripts/audit-mcp-refs.mjs +331 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* White-label portal domain tools for the Frihet MCP server — Day 1 Megasprint (3 tools).
|
|
3
|
+
*
|
|
4
|
+
* Tools:
|
|
5
|
+
* 1. frihet_portal_domain_add — add a custom domain to the client portal
|
|
6
|
+
* 2. frihet_portal_domain_verify — verify DNS propagation for a custom domain
|
|
7
|
+
* 3. frihet_portal_domain_remove — remove a custom portal domain
|
|
8
|
+
*
|
|
9
|
+
* REST surface: /v1/portal/domain/* proxies Firebase callables:
|
|
10
|
+
* addCustomPortalDomain, verifyCustomPortalDomain, removeCustomPortalDomain (eu-west1)
|
|
11
|
+
*
|
|
12
|
+
* Backend status (post-Day 1 Megasprint, May 2026):
|
|
13
|
+
* Frihet-ERP PR #397 — White-label portal domain MERGED.
|
|
14
|
+
* Tools will surface 404 errors until backend REST shell ships.
|
|
15
|
+
*/
|
|
16
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
17
|
+
import type { IFrihetClient } from "../client-interface.js";
|
|
18
|
+
export declare function registerPortalDomainTools(server: McpServer, client: IFrihetClient): void;
|
|
19
|
+
//# sourceMappingURL=portal_domain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portal_domain.d.ts","sourceRoot":"","sources":["../../src/tools/portal_domain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAW5D,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CA0FxF"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* White-label portal domain tools for the Frihet MCP server — Day 1 Megasprint (3 tools).
|
|
3
|
+
*
|
|
4
|
+
* Tools:
|
|
5
|
+
* 1. frihet_portal_domain_add — add a custom domain to the client portal
|
|
6
|
+
* 2. frihet_portal_domain_verify — verify DNS propagation for a custom domain
|
|
7
|
+
* 3. frihet_portal_domain_remove — remove a custom portal domain
|
|
8
|
+
*
|
|
9
|
+
* REST surface: /v1/portal/domain/* proxies Firebase callables:
|
|
10
|
+
* addCustomPortalDomain, verifyCustomPortalDomain, removeCustomPortalDomain (eu-west1)
|
|
11
|
+
*
|
|
12
|
+
* Backend status (post-Day 1 Megasprint, May 2026):
|
|
13
|
+
* Frihet-ERP PR #397 — White-label portal domain MERGED.
|
|
14
|
+
* Tools will surface 404 errors until backend REST shell ships.
|
|
15
|
+
*/
|
|
16
|
+
import { z } from "zod/v4";
|
|
17
|
+
import { withToolLogging, formatRecord, getContent, mutateContent, READ_ONLY_ANNOTATIONS, CREATE_ANNOTATIONS, DELETE_ANNOTATIONS, } from "./shared.js";
|
|
18
|
+
export function registerPortalDomainTools(server, client) {
|
|
19
|
+
// -- frihet_portal_domain_add ---------------------------------------------
|
|
20
|
+
server.registerTool("frihet_portal_domain_add", {
|
|
21
|
+
title: "Add Custom Portal Domain",
|
|
22
|
+
description: "Add a custom domain to the Frihet client portal for white-label branding. " +
|
|
23
|
+
"Returns DNS records (CNAME) that must be configured at the registrar before verification. " +
|
|
24
|
+
"Example: domain='portal.miempresa.com'. " +
|
|
25
|
+
"/ Agrega un dominio personalizado al portal de clientes Frihet para marca blanca. " +
|
|
26
|
+
"Devuelve los registros DNS (CNAME) que deben configurarse en el registrador antes de verificar.",
|
|
27
|
+
annotations: CREATE_ANNOTATIONS,
|
|
28
|
+
inputSchema: {
|
|
29
|
+
domain: z.string().describe("Custom domain to add (e.g. 'portal.miempresa.com') / Dominio personalizado (ej. 'portal.miempresa.com')"),
|
|
30
|
+
workspaceId: z.string().optional().describe("Target workspace ID (defaults to caller's workspace) / ID del workspace destino"),
|
|
31
|
+
},
|
|
32
|
+
}, async ({ domain, workspaceId }) => withToolLogging("frihet_portal_domain_add", async () => {
|
|
33
|
+
const result = await client.addCustomPortalDomain({ domain, workspaceId });
|
|
34
|
+
return {
|
|
35
|
+
content: [
|
|
36
|
+
mutateContent(formatRecord(`Custom portal domain added: ${domain}`, result) +
|
|
37
|
+
"\n\nNext step: Configure the returned CNAME record at your DNS registrar, then call frihet_portal_domain_verify." +
|
|
38
|
+
"\nSiguiente paso: Configura el registro CNAME en tu registrador DNS, luego llama a frihet_portal_domain_verify."),
|
|
39
|
+
],
|
|
40
|
+
structuredContent: result,
|
|
41
|
+
};
|
|
42
|
+
}));
|
|
43
|
+
// -- frihet_portal_domain_verify ------------------------------------------
|
|
44
|
+
server.registerTool("frihet_portal_domain_verify", {
|
|
45
|
+
title: "Verify Custom Portal Domain",
|
|
46
|
+
description: "Verify DNS propagation for a custom portal domain added via frihet_portal_domain_add. " +
|
|
47
|
+
"Returns verification status (pending/verified/failed) and any DNS errors. " +
|
|
48
|
+
"DNS propagation can take up to 48 hours — retry if status is 'pending'. " +
|
|
49
|
+
"Example: domain='portal.miempresa.com'. " +
|
|
50
|
+
"/ Verifica la propagacion DNS de un dominio de portal personalizado. " +
|
|
51
|
+
"Devuelve estado (pending/verified/failed). La propagacion puede tardar hasta 48h.",
|
|
52
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
53
|
+
inputSchema: {
|
|
54
|
+
domain: z.string().describe("Custom domain to verify / Dominio personalizado a verificar"),
|
|
55
|
+
},
|
|
56
|
+
}, async ({ domain }) => withToolLogging("frihet_portal_domain_verify", async () => {
|
|
57
|
+
const result = await client.verifyCustomPortalDomain({ domain });
|
|
58
|
+
return {
|
|
59
|
+
content: [getContent(formatRecord(`Domain verification status: ${domain}`, result))],
|
|
60
|
+
structuredContent: result,
|
|
61
|
+
};
|
|
62
|
+
}));
|
|
63
|
+
// -- frihet_portal_domain_remove ------------------------------------------
|
|
64
|
+
server.registerTool("frihet_portal_domain_remove", {
|
|
65
|
+
title: "Remove Custom Portal Domain",
|
|
66
|
+
description: "Remove a custom domain from the Frihet client portal. " +
|
|
67
|
+
"The portal will revert to the default Frihet subdomain. " +
|
|
68
|
+
"Example: domain='portal.miempresa.com'. " +
|
|
69
|
+
"/ Elimina un dominio personalizado del portal de clientes Frihet. " +
|
|
70
|
+
"El portal volverá al subdominio predeterminado de Frihet.",
|
|
71
|
+
annotations: DELETE_ANNOTATIONS,
|
|
72
|
+
inputSchema: {
|
|
73
|
+
domain: z.string().describe("Custom domain to remove / Dominio personalizado a eliminar"),
|
|
74
|
+
},
|
|
75
|
+
}, async ({ domain }) => withToolLogging("frihet_portal_domain_remove", async () => {
|
|
76
|
+
const result = await client.removeCustomPortalDomain({ domain });
|
|
77
|
+
return {
|
|
78
|
+
content: [
|
|
79
|
+
mutateContent(formatRecord(`Custom portal domain removed: ${domain}`, result)),
|
|
80
|
+
],
|
|
81
|
+
structuredContent: result,
|
|
82
|
+
};
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=portal_domain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portal_domain.js","sourceRoot":"","sources":["../../src/tools/portal_domain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Recurring invoice tools for the Frihet MCP server — Wave
|
|
2
|
+
* Recurring invoice tools for the Frihet MCP server — Wave Mature 3 (7 tools).
|
|
3
3
|
*
|
|
4
4
|
* Tools:
|
|
5
|
-
* 1. list_recurring_invoices
|
|
6
|
-
* 2.
|
|
5
|
+
* 1. list_recurring_invoices — list recurring invoice templates
|
|
6
|
+
* 2. get_recurring_invoice — get single recurring template by ID
|
|
7
|
+
* 3. create_recurring_invoice — create a new recurring invoice template
|
|
8
|
+
* 4. update_recurring_invoice — update template fields (PATCH semantics)
|
|
9
|
+
* 5. pause_recurring_invoice — pause an active recurring template
|
|
10
|
+
* 6. resume_recurring_invoice — resume a paused recurring template
|
|
11
|
+
* 7. delete_recurring_invoice — permanently delete a recurring template (Trust Area)
|
|
12
|
+
* 8. run_recurring_now — manually trigger generation of next instance from template
|
|
7
13
|
*
|
|
8
14
|
* REST surface: /v1/recurring/invoices
|
|
9
15
|
*
|
|
10
|
-
*
|
|
11
|
-
* and will surface 404 errors until the backend ships.
|
|
16
|
+
* Backend: /v1/recurring/* endpoints live as of Wave 4-A (Frihet-ERP functions/src/publicApi.ts).
|
|
12
17
|
*/
|
|
13
18
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
14
19
|
import type { IFrihetClient } from "../client-interface.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recurring.d.ts","sourceRoot":"","sources":["../../src/tools/recurring.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"recurring.d.ts","sourceRoot":"","sources":["../../src/tools/recurring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAkB5D,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAsRrF"}
|
package/dist/tools/recurring.js
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Recurring invoice tools for the Frihet MCP server — Wave
|
|
2
|
+
* Recurring invoice tools for the Frihet MCP server — Wave Mature 3 (7 tools).
|
|
3
3
|
*
|
|
4
4
|
* Tools:
|
|
5
|
-
* 1. list_recurring_invoices
|
|
6
|
-
* 2.
|
|
5
|
+
* 1. list_recurring_invoices — list recurring invoice templates
|
|
6
|
+
* 2. get_recurring_invoice — get single recurring template by ID
|
|
7
|
+
* 3. create_recurring_invoice — create a new recurring invoice template
|
|
8
|
+
* 4. update_recurring_invoice — update template fields (PATCH semantics)
|
|
9
|
+
* 5. pause_recurring_invoice — pause an active recurring template
|
|
10
|
+
* 6. resume_recurring_invoice — resume a paused recurring template
|
|
11
|
+
* 7. delete_recurring_invoice — permanently delete a recurring template (Trust Area)
|
|
12
|
+
* 8. run_recurring_now — manually trigger generation of next instance from template
|
|
7
13
|
*
|
|
8
14
|
* REST surface: /v1/recurring/invoices
|
|
9
15
|
*
|
|
10
|
-
*
|
|
11
|
-
* and will surface 404 errors until the backend ships.
|
|
16
|
+
* Backend: /v1/recurring/* endpoints live as of Wave 4-A (Frihet-ERP functions/src/publicApi.ts).
|
|
12
17
|
*/
|
|
13
18
|
import { z } from "zod/v4";
|
|
14
|
-
import { withToolLogging, formatPaginatedResponse, formatRecord, listContent, mutateContent, READ_ONLY_ANNOTATIONS, paginatedOutput, actionResultOutput, recurringInvoiceItemOutput, } from "./shared.js";
|
|
19
|
+
import { withToolLogging, formatPaginatedResponse, formatRecord, listContent, getContent, mutateContent, READ_ONLY_ANNOTATIONS, CREATE_ANNOTATIONS, UPDATE_ANNOTATIONS, DELETE_ANNOTATIONS, paginatedOutput, actionResultOutput, deleteResultOutput, recurringInvoiceItemOutput, } from "./shared.js";
|
|
15
20
|
export function registerRecurringTools(server, client) {
|
|
16
21
|
// -- list_recurring_invoices --
|
|
17
22
|
server.registerTool("list_recurring_invoices", {
|
|
@@ -37,6 +42,173 @@ export function registerRecurringTools(server, client) {
|
|
|
37
42
|
structuredContent: result,
|
|
38
43
|
};
|
|
39
44
|
}));
|
|
45
|
+
// -- get_recurring_invoice --
|
|
46
|
+
server.registerTool("get_recurring_invoice", {
|
|
47
|
+
title: "Get Recurring Invoice",
|
|
48
|
+
description: "Get full details of a recurring invoice template by ID. " +
|
|
49
|
+
"Returns template name, frequency, next run date, recipient, line items, and active/paused status. " +
|
|
50
|
+
"/ Obtiene los detalles completos de una plantilla de factura recurrente por ID. " +
|
|
51
|
+
"Devuelve nombre, frecuencia, proxima ejecucion, destinatario, lineas y estado.",
|
|
52
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
53
|
+
inputSchema: {
|
|
54
|
+
id: z.string().describe("Recurring invoice template ID / ID de la plantilla de factura recurrente"),
|
|
55
|
+
},
|
|
56
|
+
outputSchema: recurringInvoiceItemOutput,
|
|
57
|
+
}, async ({ id }) => withToolLogging("get_recurring_invoice", async () => {
|
|
58
|
+
const result = await client.getRecurringInvoice(id);
|
|
59
|
+
return {
|
|
60
|
+
content: [getContent(formatRecord("Recurring invoice template", result))],
|
|
61
|
+
structuredContent: result,
|
|
62
|
+
};
|
|
63
|
+
}));
|
|
64
|
+
// -- create_recurring_invoice --
|
|
65
|
+
server.registerTool("create_recurring_invoice", {
|
|
66
|
+
title: "Create Recurring Invoice",
|
|
67
|
+
description: "Create a new recurring invoice template. " +
|
|
68
|
+
"Specify frequency (daily/weekly/monthly/quarterly/yearly), recipient client, line items, and optional start date. " +
|
|
69
|
+
"The first invoice instance is generated on the next scheduled run date. " +
|
|
70
|
+
"Example: clientId='cli_abc', frequency='monthly', templateName='Servicio mensual', lineItems=[{description:'SaaS', quantity:1, unitPrice:299}] " +
|
|
71
|
+
"/ Crea una nueva plantilla de factura recurrente. " +
|
|
72
|
+
"Especifica frecuencia, cliente destinatario, lineas y fecha de inicio opcional. " +
|
|
73
|
+
"La primera instancia se genera en la proxima fecha programada.",
|
|
74
|
+
annotations: CREATE_ANNOTATIONS,
|
|
75
|
+
inputSchema: {
|
|
76
|
+
templateName: z.string().describe("Name for this recurring template / Nombre de la plantilla"),
|
|
77
|
+
clientId: z.string().describe("Client ID (recipient of generated invoices) / ID del cliente destinatario"),
|
|
78
|
+
frequency: z
|
|
79
|
+
.enum(["daily", "weekly", "monthly", "quarterly", "yearly"])
|
|
80
|
+
.describe("Billing frequency / Frecuencia de facturacion"),
|
|
81
|
+
lineItems: z
|
|
82
|
+
.array(z.object({
|
|
83
|
+
description: z.string().describe("Line item description / Descripcion de la linea"),
|
|
84
|
+
quantity: z.number().describe("Quantity / Cantidad"),
|
|
85
|
+
unitPrice: z.number().describe("Unit price / Precio unitario"),
|
|
86
|
+
}))
|
|
87
|
+
.describe("Invoice line items / Lineas de la factura"),
|
|
88
|
+
startDate: z
|
|
89
|
+
.string()
|
|
90
|
+
.optional()
|
|
91
|
+
.describe("First billing date ISO 8601 (YYYY-MM-DD). Defaults to next natural cycle date. / Primera fecha de facturacion (por defecto proximo ciclo natural)"),
|
|
92
|
+
taxRate: z.number().optional().describe("Tax rate percentage (e.g. 21 for 21% IVA) / Tipo impositivo (e.g. 21 para IVA 21%)"),
|
|
93
|
+
notes: z.string().optional().describe("Notes to include on generated invoices / Notas a incluir en las facturas generadas"),
|
|
94
|
+
},
|
|
95
|
+
outputSchema: recurringInvoiceItemOutput,
|
|
96
|
+
}, async ({ templateName, clientId, frequency, lineItems, startDate, taxRate, notes }) => withToolLogging("create_recurring_invoice", async () => {
|
|
97
|
+
const result = await client.createRecurringInvoice({ templateName, clientId, frequency, lineItems, startDate, taxRate, notes });
|
|
98
|
+
return {
|
|
99
|
+
content: [mutateContent(formatRecord("Recurring invoice template created", result))],
|
|
100
|
+
structuredContent: result,
|
|
101
|
+
};
|
|
102
|
+
}));
|
|
103
|
+
// -- update_recurring_invoice --
|
|
104
|
+
server.registerTool("update_recurring_invoice", {
|
|
105
|
+
title: "Update Recurring Invoice",
|
|
106
|
+
description: "Update an existing recurring invoice template using PATCH semantics. Only provided fields are changed. " +
|
|
107
|
+
"Changing lineItems or taxRate affects future generated invoices only, not already-created ones. " +
|
|
108
|
+
"/ Actualiza una plantilla de factura recurrente existente. Solo se modifican los campos proporcionados. " +
|
|
109
|
+
"Cambiar lineas o tipo impositivo afecta solo a futuras facturas generadas.",
|
|
110
|
+
annotations: UPDATE_ANNOTATIONS,
|
|
111
|
+
inputSchema: {
|
|
112
|
+
id: z.string().describe("Recurring invoice template ID / ID de la plantilla"),
|
|
113
|
+
templateName: z.string().optional().describe("Updated template name / Nombre actualizado"),
|
|
114
|
+
frequency: z
|
|
115
|
+
.enum(["daily", "weekly", "monthly", "quarterly", "yearly"])
|
|
116
|
+
.optional()
|
|
117
|
+
.describe("Updated frequency / Frecuencia actualizada"),
|
|
118
|
+
lineItems: z
|
|
119
|
+
.array(z.object({
|
|
120
|
+
description: z.string(),
|
|
121
|
+
quantity: z.number(),
|
|
122
|
+
unitPrice: z.number(),
|
|
123
|
+
}))
|
|
124
|
+
.optional()
|
|
125
|
+
.describe("Updated line items (replaces all) / Lineas actualizadas (reemplaza todas)"),
|
|
126
|
+
taxRate: z.number().optional().describe("Updated tax rate percentage / Tipo impositivo actualizado"),
|
|
127
|
+
notes: z.string().optional().describe("Updated notes / Notas actualizadas"),
|
|
128
|
+
},
|
|
129
|
+
outputSchema: recurringInvoiceItemOutput,
|
|
130
|
+
}, async ({ id, ...data }) => withToolLogging("update_recurring_invoice", async () => {
|
|
131
|
+
const result = await client.updateRecurringInvoice(id, data);
|
|
132
|
+
return {
|
|
133
|
+
content: [mutateContent(formatRecord("Recurring invoice template updated", result))],
|
|
134
|
+
structuredContent: result,
|
|
135
|
+
};
|
|
136
|
+
}));
|
|
137
|
+
// -- pause_recurring_invoice --
|
|
138
|
+
server.registerTool("pause_recurring_invoice", {
|
|
139
|
+
title: "Pause Recurring Invoice",
|
|
140
|
+
description: "Pause an active recurring invoice template. " +
|
|
141
|
+
"No new invoices are generated while paused. The template is preserved — use resume_recurring_invoice to restart. " +
|
|
142
|
+
"/ Pausa una plantilla de factura recurrente activa. " +
|
|
143
|
+
"No se generan nuevas facturas mientras esta pausada. Usa resume_recurring_invoice para reanudarla.",
|
|
144
|
+
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
145
|
+
inputSchema: {
|
|
146
|
+
id: z.string().describe("Recurring invoice template ID / ID de la plantilla de factura recurrente"),
|
|
147
|
+
},
|
|
148
|
+
outputSchema: actionResultOutput,
|
|
149
|
+
}, async ({ id }) => withToolLogging("pause_recurring_invoice", async () => {
|
|
150
|
+
const result = await client.pauseRecurringInvoice(id);
|
|
151
|
+
return {
|
|
152
|
+
content: [mutateContent(formatRecord("Recurring invoice paused", result))],
|
|
153
|
+
structuredContent: result,
|
|
154
|
+
};
|
|
155
|
+
}));
|
|
156
|
+
// -- resume_recurring_invoice --
|
|
157
|
+
server.registerTool("resume_recurring_invoice", {
|
|
158
|
+
title: "Resume Recurring Invoice",
|
|
159
|
+
description: "Resume a paused recurring invoice template. " +
|
|
160
|
+
"The next invoice will be generated on the next scheduled cycle date after resumption. " +
|
|
161
|
+
"/ Reanuda una plantilla de factura recurrente pausada. " +
|
|
162
|
+
"La proxima factura se generara en el siguiente ciclo programado tras la reanudacion.",
|
|
163
|
+
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
164
|
+
inputSchema: {
|
|
165
|
+
id: z.string().describe("Recurring invoice template ID / ID de la plantilla de factura recurrente"),
|
|
166
|
+
},
|
|
167
|
+
outputSchema: actionResultOutput,
|
|
168
|
+
}, async ({ id }) => withToolLogging("resume_recurring_invoice", async () => {
|
|
169
|
+
const result = await client.resumeRecurringInvoice(id);
|
|
170
|
+
return {
|
|
171
|
+
content: [mutateContent(formatRecord("Recurring invoice resumed", result))],
|
|
172
|
+
structuredContent: result,
|
|
173
|
+
};
|
|
174
|
+
}));
|
|
175
|
+
// -- delete_recurring_invoice --
|
|
176
|
+
server.registerTool("delete_recurring_invoice", {
|
|
177
|
+
title: "Delete Recurring Invoice",
|
|
178
|
+
description: "Permanently delete a recurring invoice template. " +
|
|
179
|
+
"This does NOT delete previously generated invoices — only the template and future scheduled runs. " +
|
|
180
|
+
"Requires confirm=true to prevent accidental deletion. " +
|
|
181
|
+
"/ Elimina permanentemente una plantilla de factura recurrente. " +
|
|
182
|
+
"No elimina facturas ya generadas — solo la plantilla y las ejecuciones futuras. " +
|
|
183
|
+
"Requiere confirm=true para evitar eliminaciones accidentales.",
|
|
184
|
+
annotations: DELETE_ANNOTATIONS,
|
|
185
|
+
inputSchema: {
|
|
186
|
+
id: z.string().describe("Recurring invoice template ID / ID de la plantilla"),
|
|
187
|
+
confirm: z
|
|
188
|
+
.boolean()
|
|
189
|
+
.describe("Must be true to confirm deletion / Debe ser true para confirmar la eliminacion"),
|
|
190
|
+
},
|
|
191
|
+
outputSchema: deleteResultOutput,
|
|
192
|
+
}, async ({ id, confirm }) => withToolLogging("delete_recurring_invoice", async () => {
|
|
193
|
+
if (!confirm) {
|
|
194
|
+
return {
|
|
195
|
+
content: [
|
|
196
|
+
{
|
|
197
|
+
type: "text",
|
|
198
|
+
text: "Error: confirm=true is required to delete a recurring invoice template. " +
|
|
199
|
+
"This will stop all future invoice generation from this template. Set confirm=true to proceed. / " +
|
|
200
|
+
"Se requiere confirm=true para eliminar la plantilla de factura recurrente.",
|
|
201
|
+
},
|
|
202
|
+
],
|
|
203
|
+
isError: true,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
await client.deleteRecurringInvoice(id);
|
|
207
|
+
return {
|
|
208
|
+
content: [mutateContent(`Recurring invoice template ${id} deleted. / Plantilla ${id} eliminada.`)],
|
|
209
|
+
structuredContent: { success: true, id },
|
|
210
|
+
};
|
|
211
|
+
}));
|
|
40
212
|
// -- run_recurring_now --
|
|
41
213
|
server.registerTool("run_recurring_now", {
|
|
42
214
|
title: "Run Recurring Invoice Now",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recurring.js","sourceRoot":"","sources":["../../src/tools/recurring.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"recurring.js","sourceRoot":"","sources":["../../src/tools/recurring.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Barrel module that registers all
|
|
2
|
+
* Barrel module that registers all 152 Frihet ERP tools on an McpServer.
|
|
3
3
|
*
|
|
4
4
|
* Used by both the local (stdio) and remote (Cloudflare Workers) servers
|
|
5
5
|
* so tool definitions stay in sync — one source of truth.
|
|
6
6
|
*
|
|
7
7
|
* Langfuse observability is injected by patching server.registerTool once
|
|
8
8
|
* before any tool registration. This wraps every tool callback with
|
|
9
|
-
* traceMCPTool so all
|
|
9
|
+
* traceMCPTool so all 152 tools are instrumented at zero per-tool cost.
|
|
10
10
|
*/
|
|
11
11
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
12
12
|
import type { IFrihetClient } from "../client-interface.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-all.d.ts","sourceRoot":"","sources":["../../src/tools/register-all.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"register-all.d.ts","sourceRoot":"","sources":["../../src/tools/register-all.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AA0E5D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAkC/E"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Barrel module that registers all
|
|
2
|
+
* Barrel module that registers all 152 Frihet ERP tools on an McpServer.
|
|
3
3
|
*
|
|
4
4
|
* Used by both the local (stdio) and remote (Cloudflare Workers) servers
|
|
5
5
|
* so tool definitions stay in sync — one source of truth.
|
|
6
6
|
*
|
|
7
7
|
* Langfuse observability is injected by patching server.registerTool once
|
|
8
8
|
* before any tool registration. This wraps every tool callback with
|
|
9
|
-
* traceMCPTool so all
|
|
9
|
+
* traceMCPTool so all 152 tools are instrumented at zero per-tool cost.
|
|
10
10
|
*/
|
|
11
11
|
import { traceMCPTool } from "../observability.js";
|
|
12
12
|
import { registerInvoiceTools } from "./invoices.js";
|
|
@@ -26,14 +26,39 @@ import { registerBankingTools } from "./banking.js";
|
|
|
26
26
|
import { registerFiscalTools } from "./fiscal.js";
|
|
27
27
|
import { registerTimeTools } from "./time.js";
|
|
28
28
|
import { registerRecurringTools } from "./recurring.js";
|
|
29
|
+
import { registerTeamTools } from "./team.js";
|
|
30
|
+
import { registerGestoriaTools } from "./gestoria.js";
|
|
31
|
+
import { registerAuditGLTools } from "./audit_gl.js";
|
|
32
|
+
import { registerPortalDomainTools } from "./portal_domain.js";
|
|
33
|
+
import { registerOnboardViesTools } from "./onboard_vies.js";
|
|
34
|
+
import { registerIgicTools } from "./igic.js";
|
|
35
|
+
import { registerImpuestoSociedadesTools } from "./impuesto_sociedades.js";
|
|
36
|
+
import { registerBankRulesTools } from "./bank_rules.js";
|
|
37
|
+
import { registerHrTools } from "./hr.js";
|
|
38
|
+
import { registerPayrollTools } from "./payroll.js";
|
|
39
|
+
import { registerOnboardingTools } from "./onboarding.js";
|
|
40
|
+
import { registerPermissionsTools } from "./permissions.js";
|
|
41
|
+
import { registerAccountingCloseTools } from "./accountingClose.js";
|
|
29
42
|
/**
|
|
30
43
|
* Patches server.registerTool to wrap every tool callback with Langfuse tracing.
|
|
31
44
|
*
|
|
32
|
-
* The patch is applied once before tool registration so all
|
|
45
|
+
* The patch is applied once before tool registration so all 152 tools are
|
|
33
46
|
* instrumented without per-tool edits. Tool call signatures are unchanged —
|
|
34
47
|
* existing MCP clients continue to work identically.
|
|
35
48
|
*
|
|
36
49
|
* traceMCPTool is fail-open: any Langfuse error → warn log, tool proceeds.
|
|
50
|
+
*
|
|
51
|
+
* Day 4 Wave (v1.11.0-beta.1): 6 new e-invoicing tools added to registerEInvoiceTools:
|
|
52
|
+
* einvoice_export, face_submit, face_status, ticketbai_submit, ticketbai_status, ksef_submit
|
|
53
|
+
*
|
|
54
|
+
* D4-B megasprint (v1.12.0-beta.1): 19 new tools across 5 new files + 1 webhook test:
|
|
55
|
+
* HR (9): leave_request_create, leave_approve, leave_reject, leave_cancel, leave_list,
|
|
56
|
+
* attendance_clock_in, attendance_clock_out, overtime_report, anomaly_list
|
|
57
|
+
* Webhook trust (1): test_webhook (added to registerWebhookTools)
|
|
58
|
+
* Payroll (2): payroll_export, payroll_checklist
|
|
59
|
+
* Onboarding (2): onboarding_status, onboarding_persona_set
|
|
60
|
+
* Permissions (2): permissions_matrix, permissions_me
|
|
61
|
+
* Period close (3): period_close_status, period_close, period_reopen
|
|
37
62
|
*/
|
|
38
63
|
function patchServerWithTracing(server) {
|
|
39
64
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
@@ -69,5 +94,18 @@ export function registerAllTools(server, client) {
|
|
|
69
94
|
registerFiscalTools(server, client);
|
|
70
95
|
registerTimeTools(server, client);
|
|
71
96
|
registerRecurringTools(server, client);
|
|
97
|
+
registerTeamTools(server, client);
|
|
98
|
+
registerGestoriaTools(server, client);
|
|
99
|
+
registerAuditGLTools(server, client);
|
|
100
|
+
registerPortalDomainTools(server, client);
|
|
101
|
+
registerOnboardViesTools(server, client);
|
|
102
|
+
registerIgicTools(server, client);
|
|
103
|
+
registerImpuestoSociedadesTools(server, client);
|
|
104
|
+
registerBankRulesTools(server, client);
|
|
105
|
+
registerHrTools(server, client);
|
|
106
|
+
registerPayrollTools(server, client);
|
|
107
|
+
registerOnboardingTools(server, client);
|
|
108
|
+
registerPermissionsTools(server, client);
|
|
109
|
+
registerAccountingCloseTools(server, client);
|
|
72
110
|
}
|
|
73
111
|
//# sourceMappingURL=register-all.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-all.js","sourceRoot":"","sources":["../../src/tools/register-all.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"register-all.js","sourceRoot":"","sources":["../../src/tools/register-all.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAS,sBAAsB,CAAC,MAAiB;IAC/C,6DAA6D;IAC7D,MAAM,oBAAoB,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE9D,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,8DAA8D;IAC7D,MAAc,CAAC,YAAY,GAAG,SAAS,mBAAmB,CACzD,IAAY,EACZ,MAA+B,EAC/B,EAA8C;QAE9C,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAa,EAAE,KAAc,EAAoB,EAAE;YACzE,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAqB,CAAC,CAAC;QAC7E,CAAC,CAAC;QACF,OAAO,oBAAoB,CAAC,IAAI,EAAE,MAAoD,EAAE,QAAsD,CAAC,CAAC;IAClJ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,MAAqB;IACvE,6EAA6E;IAC7E,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAE/B,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,+BAA+B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,4BAA4B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC"}
|