@frihet/mcp-server
Advanced tools
| /** | ||
| * Demo mode (`FRIHET_DEMO=1`) — DemoFrihetClient contract + fixture PII safety. | ||
| * | ||
| * Verifies the fixture-backed client serves stamped example data with ZERO | ||
| * network calls, simulates writes with a demo id, labels fiscal actions as | ||
| * simulated, and that no fixture email leaks a non-@example.com domain. | ||
| * | ||
| * Run: npm test (after build) | ||
| */ | ||
| export {}; | ||
| //# sourceMappingURL=demo-mode.test.d.ts.map |
| {"version":3,"file":"demo-mode.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/demo-mode.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"} |
| /** | ||
| * Demo mode (`FRIHET_DEMO=1`) — DemoFrihetClient contract + fixture PII safety. | ||
| * | ||
| * Verifies the fixture-backed client serves stamped example data with ZERO | ||
| * network calls, simulates writes with a demo id, labels fiscal actions as | ||
| * simulated, and that no fixture email leaks a non-@example.com domain. | ||
| * | ||
| * Run: npm test (after build) | ||
| */ | ||
| import { test, describe } from "node:test"; | ||
| import assert from "node:assert/strict"; | ||
| import { DemoFrihetClient } from "../demo-client.js"; | ||
| import * as fixtures from "../demo-fixtures.js"; | ||
| describe("DemoFrihetClient — reads", () => { | ||
| test("listInvoices returns a non-empty stamped PaginatedResponse", async () => { | ||
| const client = new DemoFrihetClient(); | ||
| const res = await client.listInvoices(); | ||
| assert.ok(Array.isArray(res.data), "data is an array"); | ||
| assert.ok(res.data.length > 0, "data is non-empty"); | ||
| assert.equal(res.total, res.data.length); | ||
| assert.equal(res._demo, true); | ||
| assert.ok(res._demoNotice, "_demoNotice present"); | ||
| }); | ||
| test("getInvoice(<fixture id>) returns the fixture stamped _demo:true", async () => { | ||
| const client = new DemoFrihetClient(); | ||
| const firstId = fixtures.demoInvoices[0].id; | ||
| const res = await client.getInvoice(firstId); | ||
| assert.equal(res.id, firstId); | ||
| assert.equal(res._demo, true); | ||
| assert.ok(res._demoNotice, "_demoNotice present"); | ||
| }); | ||
| }); | ||
| describe("DemoFrihetClient — writes are simulated", () => { | ||
| test("createInvoice returns _demo:true with a demo_-prefixed id, purely", async () => { | ||
| const client = new DemoFrihetClient(); | ||
| const res = await client.createInvoice({ | ||
| clientName: "Test Client", | ||
| items: [{ description: "Work", quantity: 2, unitPrice: 100 }], | ||
| taxRate: 21, | ||
| }); | ||
| assert.equal(res._demo, true); | ||
| assert.equal(typeof res.id, "string"); | ||
| assert.ok(res.id.startsWith("demo_"), `id "${res.id}" starts with demo_`); | ||
| // Echoes input + computes totals. | ||
| assert.equal(res.clientName, "Test Client"); | ||
| assert.equal(res.subtotal, 200); | ||
| assert.equal(res.taxAmount, 42); | ||
| assert.equal(res.total, 242); | ||
| // WRITE notice communicates non-persistence. | ||
| assert.match(res._demoNotice, /Simulated — not persisted/); | ||
| }); | ||
| test("createInvoice is a pure function — no throw, no network, repeatable", async () => { | ||
| const client = new DemoFrihetClient(); | ||
| // Called twice back-to-back; neither throws nor hangs on a socket. | ||
| const a = await client.createInvoice({ clientName: "A", items: [] }); | ||
| const b = await client.createInvoice({ clientName: "B", items: [] }); | ||
| assert.equal(a._demo, true); | ||
| assert.equal(b._demo, true); | ||
| assert.notEqual(a.id, b.id, "ids are distinct across calls"); | ||
| }); | ||
| }); | ||
| describe("DemoFrihetClient — fiscal actions are simulated only", () => { | ||
| test("sendEInvoice returns _demo:true + a simulated queued status, never throws", async () => { | ||
| const client = new DemoFrihetClient(); | ||
| const res = await client.sendEInvoice({ invoiceId: "demo_inv_001", format: "facturae", dispatchMode: "peppol" }); | ||
| assert.equal(res.status, "queued"); | ||
| assert.equal(typeof res.workflowRunId, "string"); | ||
| assert.equal(res._demo, true); | ||
| const notice = res._demoNotice; | ||
| assert.ok(notice, "_demoNotice present"); | ||
| assert.match(notice, /no submission was made to any tax authority/); | ||
| }); | ||
| test("faceSubmit + ticketbaiSubmit are labeled simulated, never real submissions", async () => { | ||
| const client = new DemoFrihetClient(); | ||
| const face = await client.faceSubmit({ invoiceId: "demo_inv_001", mode: "sandbox" }); | ||
| assert.equal(face.status, "submitted"); | ||
| assert.equal(face._demo, true); | ||
| const tbai = await client.ticketbaiSubmit({ invoiceId: "demo_inv_001", sandbox: true }); | ||
| assert.equal(tbai._demo, true); | ||
| assert.match(tbai._demoNotice, /no submission was made to any tax authority/); | ||
| }); | ||
| }); | ||
| describe("demo fixtures — PII safety", () => { | ||
| test("every email string in the fixtures ends with @example.com", () => { | ||
| // Collect every string value that looks like an email across all fixture | ||
| // exports; assert none uses a domain other than example.com. | ||
| const emailRe = /[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g; | ||
| const emails = []; | ||
| const seen = new Set(); | ||
| const walk = (val) => { | ||
| if (val == null) | ||
| return; | ||
| if (typeof val === "string") { | ||
| const matches = val.match(emailRe); | ||
| if (matches) | ||
| emails.push(...matches); | ||
| return; | ||
| } | ||
| if (typeof val !== "object") | ||
| return; | ||
| if (seen.has(val)) | ||
| return; | ||
| seen.add(val); | ||
| for (const v of Object.values(val)) | ||
| walk(v); | ||
| }; | ||
| walk(fixtures); | ||
| assert.ok(emails.length > 0, "fixtures contain at least one email (sanity)"); | ||
| for (const email of emails) { | ||
| assert.ok(email.endsWith("@example.com"), `email "${email}" must be under @example.com`); | ||
| } | ||
| }); | ||
| test("fixtures use the ECBS/AEAT test IBAN, not a real one", () => { | ||
| assert.equal(fixtures.DEMO_TEST_IBAN, "ES9121000418450200051332"); | ||
| const account = fixtures.demoBankAccounts[0]; | ||
| assert.equal(account.iban, fixtures.DEMO_TEST_IBAN); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=demo-mode.test.js.map |
| {"version":3,"file":"demo-mode.test.js","sourceRoot":"","sources":["../../src/__tests__/demo-mode.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAEhD,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAI,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;QACxC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,CAAC;QACvD,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,mBAAmB,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAE,GAAqC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACjE,MAAM,CAAC,EAAE,CAAE,GAA2C,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAE,CAAC,EAAY,CAAC;QACvD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,IAAI,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;YACrC,UAAU,EAAE,aAAa;YACzB,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;YAC7D,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAE,GAAG,CAAC,EAAa,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,CAAC,EAAY,qBAAqB,CAAC,CAAC;QAChG,kCAAkC;QAClC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC7B,6CAA6C;QAC7C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAqB,EAAE,2BAA2B,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACtC,mEAAmE;QACnE,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,+BAA+B,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sDAAsD,EAAE,GAAG,EAAE;IACpE,IAAI,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QAC3F,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjH,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAE,GAAqC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACjE,MAAM,MAAM,GAAI,GAA2C,CAAC,WAAW,CAAC;QACxE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,MAAgB,EAAE,6CAA6C,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACrF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAE,IAAsC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACxF,MAAM,CAAC,KAAK,CAAE,IAAsC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClE,MAAM,CAAC,KAAK,CAAE,IAA2C,CAAC,WAAW,EAAE,6CAA6C,CAAC,CAAC;IACxH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,IAAI,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACrE,yEAAyE;QACzE,6DAA6D;QAC7D,MAAM,OAAO,GAAG,iDAAiD,CAAC;QAClE,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;QAChC,MAAM,IAAI,GAAG,CAAC,GAAY,EAAQ,EAAE;YAClC,IAAI,GAAG,IAAI,IAAI;gBAAE,OAAO;YACxB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACnC,IAAI,OAAO;oBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;gBACrC,OAAO;YACT,CAAC;YACD,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO;YACpC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO;YAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAA8B,CAAC;gBAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEf,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,8CAA8C,CAAC,CAAC;QAC7E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,KAAK,8BAA8B,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAE,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} |
| /** | ||
| * DemoFrihetClient — the `FRIHET_DEMO=1` seam. | ||
| * | ||
| * A drop-in IFrihetClient that makes ZERO network calls: it serves the canned | ||
| * PII-safe fixtures in demo-fixtures.ts. index.ts swaps this in for FrihetClient | ||
| * when demo mode is on, so tools (which stringify the client's return value) | ||
| * automatically propagate the `_demo`/`_demoNotice` banner without any change | ||
| * under src/tools/. | ||
| * | ||
| * Response contract (see SPEC-mcp-demo-mode.md option B/C): | ||
| * - reads/lists → fixture data stamped `_demo:true` (READ notice). | ||
| * - lists without fixtures → EMPTY PaginatedResponse, still stamped. | ||
| * - writes → plausible fixture-shaped object with a `demo_`-prefixed id | ||
| * (WRITE notice "…Simulated — not persisted."). | ||
| * - fiscal / e-invoice / email / payroll → SIMULATED labeled response, NEVER | ||
| * a real submission (FISCAL notice). | ||
| * - delete / remove methods → resolve void (interface return type forbids a | ||
| * stamp; this is the one accepted, documented gap). | ||
| */ | ||
| import type { IFrihetClient } from "./client-interface.js"; | ||
| import type { PaginatedResponse } from "./types.js"; | ||
| type Rec = Record<string, unknown>; | ||
| export declare class DemoFrihetClient implements IFrihetClient { | ||
| listInvoices(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| getInvoice(id: string): Promise<Rec>; | ||
| createInvoice(data: Rec): Promise<Rec>; | ||
| updateInvoice(id: string, data: Rec): Promise<Rec>; | ||
| deleteInvoice(_id: string): Promise<void>; | ||
| searchInvoices(query: string, params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| listExpenses(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| getExpense(id: string): Promise<Rec>; | ||
| createExpense(data: Rec): Promise<Rec>; | ||
| updateExpense(id: string, data: Rec): Promise<Rec>; | ||
| deleteExpense(_id: string): Promise<void>; | ||
| listClients(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| getClient(id: string): Promise<Rec>; | ||
| createClient(data: Rec): Promise<Rec>; | ||
| updateClient(id: string, data: Rec): Promise<Rec>; | ||
| deleteClient(_id: string): Promise<void>; | ||
| listProducts(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| getProduct(id: string): Promise<Rec>; | ||
| createProduct(data: Rec): Promise<Rec>; | ||
| updateProduct(id: string, data: Rec): Promise<Rec>; | ||
| deleteProduct(_id: string): Promise<void>; | ||
| listQuotes(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| getQuote(id: string): Promise<Rec>; | ||
| createQuote(data: Rec): Promise<Rec>; | ||
| updateQuote(id: string, data: Rec): Promise<Rec>; | ||
| deleteQuote(_id: string): Promise<void>; | ||
| listVendors(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| getVendor(id: string): Promise<Rec>; | ||
| createVendor(data: Rec): Promise<Rec>; | ||
| updateVendor(id: string, data: Rec): Promise<Rec>; | ||
| deleteVendor(_id: string): Promise<void>; | ||
| sendInvoice(id: string, to?: string): Promise<Rec>; | ||
| markInvoicePaid(id: string, paidDate?: string): Promise<Rec>; | ||
| getInvoicePdf(id: string): Promise<Rec>; | ||
| getInvoiceEInvoice(invoiceId: string): Promise<Rec>; | ||
| createCreditNote(invoiceId: string, data: { | ||
| reason: string; | ||
| reasonDescription?: string; | ||
| fullCredit?: boolean; | ||
| issueDate?: string; | ||
| }): Promise<Rec>; | ||
| applyLateFee(invoiceId: string, data?: { | ||
| amount?: number; | ||
| daysOverdue?: number; | ||
| }): Promise<Rec>; | ||
| sendQuote(id: string, to?: string): Promise<Rec>; | ||
| listWebhooks(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| getWebhook(id: string): Promise<Rec>; | ||
| createWebhook(data: Rec): Promise<Rec>; | ||
| updateWebhook(id: string, data: Rec): Promise<Rec>; | ||
| deleteWebhook(_id: string): Promise<void>; | ||
| listClientContacts(_clientId: string, params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| createClientContact(clientId: string, data: Rec): Promise<Rec>; | ||
| deleteClientContact(_clientId: string, _contactId: string): Promise<void>; | ||
| listClientActivities(_clientId: string, params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| logClientActivity(clientId: string, data: Rec): Promise<Rec>; | ||
| listClientNotes(_clientId: string, params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| createClientNote(clientId: string, data: Rec): Promise<Rec>; | ||
| deleteClientNote(_clientId: string, _noteId: string): Promise<void>; | ||
| listDeposits(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| getDeposit(id: string): Promise<Rec>; | ||
| createDeposit(data: Rec): Promise<Rec>; | ||
| updateDeposit(id: string, data: Rec): Promise<Rec>; | ||
| deleteDeposit(_id: string): Promise<void>; | ||
| applyDeposit(id: string, data?: Rec): Promise<Rec>; | ||
| refundDeposit(id: string, data?: Rec): Promise<Rec>; | ||
| getBusinessContext(): Promise<Rec>; | ||
| getMonthlySummary(month?: string): Promise<Rec>; | ||
| getQuarterlyTaxes(quarter?: string): Promise<Rec>; | ||
| sendEInvoice(_params: { | ||
| invoiceId: string; | ||
| format: string; | ||
| dispatchMode: string; | ||
| }): Promise<{ | ||
| workflowRunId: string; | ||
| status: "queued"; | ||
| estimatedCompletionSec: number; | ||
| }>; | ||
| getEInvoiceStatus(_workflowRunId: string): Promise<{ | ||
| status: "queued" | "running" | "succeeded" | "failed" | "cancelled"; | ||
| step: string; | ||
| error?: string; | ||
| ackId?: string; | ||
| pdfA3Url?: string; | ||
| xmlUrl?: string; | ||
| }>; | ||
| validateEInvoiceXml(_params: { | ||
| xml: string; | ||
| format: string; | ||
| }): Promise<{ | ||
| valid: boolean; | ||
| errors: Array<{ | ||
| severity: string; | ||
| location: string; | ||
| message: string; | ||
| rule: string; | ||
| }>; | ||
| validator: "kosit" | "mustang" | "xsd" | "schematron"; | ||
| durationMs: number; | ||
| }>; | ||
| exportDatev(params: { | ||
| periodStart: string; | ||
| periodEnd: string; | ||
| format: string; | ||
| }): Promise<{ | ||
| fileUrl: string; | ||
| filename: string; | ||
| rowCount: number; | ||
| fiscalPeriod: string; | ||
| encoding: "cp1252"; | ||
| }>; | ||
| exportEInvoice(params: { | ||
| invoiceId: string; | ||
| format: string; | ||
| signed?: boolean; | ||
| }): Promise<{ | ||
| xmlUrl: string; | ||
| filename: string; | ||
| format: string; | ||
| signed: boolean; | ||
| }>; | ||
| faceSubmit(params: { | ||
| invoiceId: string; | ||
| mode: "mock" | "sandbox" | "production"; | ||
| }): Promise<{ | ||
| registroFACe: string; | ||
| status: "submitted" | "error"; | ||
| submittedAt: string; | ||
| mode: string; | ||
| }>; | ||
| faceStatus(_params: { | ||
| invoiceId: string; | ||
| }): Promise<{ | ||
| registroFACe: string; | ||
| statusCode: string; | ||
| statusDescription: string; | ||
| rejectionReason?: string; | ||
| }>; | ||
| ticketbaiSubmit(params: { | ||
| invoiceId: string; | ||
| sandbox: boolean; | ||
| }): Promise<{ | ||
| tbaiId: string; | ||
| territory: "bizkaia" | "gipuzkoa" | "araba"; | ||
| status: "submitted" | "accepted" | "rejected" | "error"; | ||
| sandbox: boolean; | ||
| qrUrl?: string; | ||
| }>; | ||
| ticketbaiStatus(_params: { | ||
| invoiceId: string; | ||
| }): Promise<{ | ||
| tbaiId: string; | ||
| territory: "bizkaia" | "gipuzkoa" | "araba"; | ||
| status: "submitted" | "accepted" | "rejected" | "error"; | ||
| rejectionReason?: string; | ||
| error?: string; | ||
| }>; | ||
| listReservations(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| getReservation(id: string): Promise<Rec>; | ||
| createReservation(data: Rec): Promise<Rec>; | ||
| listProperties(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| syncChannel(channelId: string, direction: "pull" | "push" | "both"): Promise<Rec>; | ||
| listTerminals(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| getSale(id: string): Promise<Rec>; | ||
| listSales(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| refundSale(id: string, data?: { | ||
| amountCents?: number; | ||
| reason?: string; | ||
| }): Promise<Rec>; | ||
| listKitchenTickets(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| getKitchenTicket(id: string): Promise<Rec>; | ||
| updateKitchenTicket(id: string, data: Rec): Promise<Rec>; | ||
| listKitchenStations(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| listMenuItems(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| listBankAccounts(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| getBankAccount(id: string): Promise<Rec>; | ||
| listTransactions(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| categorizeTransaction(id: string, data: { | ||
| category: string; | ||
| notes?: string; | ||
| }): Promise<Rec>; | ||
| matchTransactionToDocument(transactionId: string, data: { | ||
| documentId: string; | ||
| documentType: "invoice" | "expense"; | ||
| notes?: string; | ||
| }): Promise<Rec>; | ||
| getFiscalModeloSummary(modeloCode: string, period?: string): Promise<Rec>; | ||
| getVerifactuStatus(invoiceId: string): Promise<Rec>; | ||
| resubmitVerifactu(invoiceId: string): Promise<Rec>; | ||
| getTicketbaiStatus(invoiceId: string): Promise<Rec>; | ||
| listTimeEntries(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| getTimeEntry(id: string): Promise<Rec>; | ||
| createTimeEntry(data: Rec): Promise<Rec>; | ||
| updateTimeEntry(id: string, data: Rec): Promise<Rec>; | ||
| deleteTimeEntry(_id: string): Promise<void>; | ||
| getTimeSummary(params: { | ||
| from: string; | ||
| to: string; | ||
| }): Promise<Rec>; | ||
| listRecurringInvoices(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| getRecurringInvoice(id: string): Promise<Rec>; | ||
| createRecurringInvoice(data: Rec): Promise<Rec>; | ||
| updateRecurringInvoice(id: string, data: Rec): Promise<Rec>; | ||
| pauseRecurringInvoice(id: string): Promise<Rec>; | ||
| resumeRecurringInvoice(id: string): Promise<Rec>; | ||
| deleteRecurringInvoice(_id: string): Promise<void>; | ||
| runRecurringNow(templateId: string, options?: { | ||
| draftOnly?: boolean; | ||
| }): Promise<Rec>; | ||
| listTeamMembers(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| inviteTeamMember(data: { | ||
| email: string; | ||
| role: string; | ||
| name?: string; | ||
| }): Promise<Rec>; | ||
| updateTeamMemberRole(memberId: string, role: string): Promise<Rec>; | ||
| removeTeamMember(_memberId: string): Promise<void>; | ||
| approveGLEntry(entryId: string, notes?: string): Promise<Rec>; | ||
| rejectGLEntry(entryId: string, reason: string): Promise<Rec>; | ||
| getGLEntryAuditLog(entryId: string): Promise<Rec>; | ||
| addCustomPortalDomain(data: { | ||
| domain: string; | ||
| workspaceId?: string; | ||
| }): Promise<Rec>; | ||
| verifyCustomPortalDomain(data: { | ||
| domain: string; | ||
| }): Promise<Rec>; | ||
| removeCustomPortalDomain(data: { | ||
| domain: string; | ||
| }): Promise<Rec>; | ||
| generatePortalOnboardLink(data: { | ||
| email: string; | ||
| name?: string; | ||
| expiresInHours?: number; | ||
| workspaceId?: string; | ||
| }): Promise<Rec>; | ||
| lookupTaxIdViaVIES(data: { | ||
| vatNumber: string; | ||
| countryCode: string; | ||
| }): Promise<Rec>; | ||
| getIgicModeloSummary(modeloCode: string, params?: { | ||
| year?: string; | ||
| period?: string; | ||
| }): Promise<Rec>; | ||
| calculateAiem(data: { | ||
| ncCode: string; | ||
| amount: number; | ||
| description?: string; | ||
| }): Promise<Rec>; | ||
| getISSummary(modeloCode: string, params?: { | ||
| year?: string; | ||
| installment?: string; | ||
| }): Promise<Rec>; | ||
| listBankRules(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| createBankRule(data: { | ||
| name: string; | ||
| conditions: Array<{ | ||
| field: string; | ||
| operator: string; | ||
| value: string; | ||
| }>; | ||
| actions: Array<{ | ||
| type: string; | ||
| value: string; | ||
| }>; | ||
| isActive?: boolean; | ||
| }): Promise<Rec>; | ||
| sendGestoriaMessage(data: { | ||
| workspaceId: string; | ||
| parentType: "documentRequest" | "filingItem" | "obligation"; | ||
| parentId: string; | ||
| body: string; | ||
| }): Promise<Rec>; | ||
| listGestoriaMessages(_params: { | ||
| workspaceId: string; | ||
| parentType: "documentRequest" | "filingItem" | "obligation"; | ||
| parentId: string; | ||
| limit?: number; | ||
| before?: string; | ||
| }): Promise<{ | ||
| messages: Array<Rec>; | ||
| hasMore: boolean; | ||
| }>; | ||
| createGestoriaTemplate(data: { | ||
| name: string; | ||
| title: string; | ||
| description: string; | ||
| dueDateOffsetDays: number; | ||
| attachmentRequired?: boolean; | ||
| variables?: Array<{ | ||
| key: string; | ||
| label?: string; | ||
| defaultValue?: string; | ||
| }>; | ||
| }): Promise<{ | ||
| templateId: string; | ||
| }>; | ||
| bulkSendGestoriaTemplate(data: { | ||
| templateId: string; | ||
| clientWorkspaceIds: string[]; | ||
| periodOverrides?: { | ||
| quarter?: string | number; | ||
| year?: string | number; | ||
| month?: string | number; | ||
| }; | ||
| }): Promise<Rec>; | ||
| getGestoriaAgingConsolidated(_params?: { | ||
| ownerUid?: string; | ||
| }): Promise<Rec>; | ||
| listLeaves(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| createLeaveRequest(data: { | ||
| employeeId: string; | ||
| type: string; | ||
| startDate: string; | ||
| endDate: string; | ||
| reason?: string; | ||
| }): Promise<Rec>; | ||
| approveLeave(leaveId: string, data?: { | ||
| reason?: string; | ||
| }): Promise<Rec>; | ||
| rejectLeave(leaveId: string, data: { | ||
| reason: string; | ||
| }): Promise<Rec>; | ||
| cancelLeave(leaveId: string): Promise<Rec>; | ||
| attendanceClockIn(data: { | ||
| employeeId: string; | ||
| mood?: string; | ||
| location?: string; | ||
| }): Promise<Rec>; | ||
| attendanceClockOut(entryId: string): Promise<Rec>; | ||
| getOvertimeReport(params: { | ||
| period: string; | ||
| employeeId?: string; | ||
| }): Promise<Rec>; | ||
| listAnomalies(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): Promise<PaginatedResponse<Rec>>; | ||
| testWebhook(id: string, data?: { | ||
| eventType?: string; | ||
| }): Promise<Rec>; | ||
| exportPayroll(params: { | ||
| format: "a3" | "contasol" | "sage" | "holded" | "siltra"; | ||
| month: string; | ||
| }): Promise<Rec>; | ||
| getPayrollChecklist(params: { | ||
| month: string; | ||
| }): Promise<Rec>; | ||
| getOnboardingStatus(): Promise<Rec>; | ||
| setOnboardingPersona(data: { | ||
| persona: "autonomo" | "empresa" | "agencia" | "gestoria"; | ||
| }): Promise<Rec>; | ||
| getPermissionsMatrix(): Promise<Rec>; | ||
| getMyPermissions(): Promise<Rec>; | ||
| getCurrentPeriod(params?: { | ||
| periodId?: string; | ||
| }): Promise<Rec>; | ||
| closePeriod(data: { | ||
| type: "monthly" | "quarterly"; | ||
| }): Promise<Rec>; | ||
| reopenPeriod(data: { | ||
| periodId: string; | ||
| reason: string; | ||
| }): Promise<Rec>; | ||
| } | ||
| export {}; | ||
| //# sourceMappingURL=demo-client.d.ts.map |
| {"version":3,"file":"demo-client.d.ts","sourceRoot":"","sources":["../src/demo-client.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * DemoFrihetClient — the `FRIHET_DEMO=1` seam. | ||
| * | ||
| * A drop-in IFrihetClient that makes ZERO network calls: it serves the canned | ||
| * PII-safe fixtures in demo-fixtures.ts. index.ts swaps this in for FrihetClient | ||
| * when demo mode is on, so tools (which stringify the client's return value) | ||
| * automatically propagate the `_demo`/`_demoNotice` banner without any change | ||
| * under src/tools/. | ||
| * | ||
| * Response contract (see SPEC-mcp-demo-mode.md option B/C): | ||
| * - reads/lists → fixture data stamped `_demo:true` (READ notice). | ||
| * - lists without fixtures → EMPTY PaginatedResponse, still stamped. | ||
| * - writes → plausible fixture-shaped object with a `demo_`-prefixed id | ||
| * (WRITE notice "…Simulated — not persisted."). | ||
| * - fiscal / e-invoice / email / payroll → SIMULATED labeled response, NEVER | ||
| * a real submission (FISCAL notice). | ||
| * - delete / remove methods → resolve void (interface return type forbids a | ||
| * stamp; this is the one accepted, documented gap). | ||
| */ | ||
| import { READ_STAMP, FISCAL_STAMP, DEMO_NOW, demoPage, demoEmptyPage, findOrStub, demoId, simulateWrite, simulateAction, demoClients, demoProducts, demoInvoices, demoExpenses, demoQuotes, demoVendors, demoBankAccounts, demoTransactions, } from "./demo-fixtures.js"; | ||
| export class DemoFrihetClient { | ||
| // ---------------------------------------------------------------- Invoices | ||
| async listInvoices(params) { | ||
| return demoPage(demoInvoices, params); | ||
| } | ||
| async getInvoice(id) { | ||
| return findOrStub(demoInvoices, id); | ||
| } | ||
| async createInvoice(data) { | ||
| const items = Array.isArray(data.items) ? data.items : []; | ||
| const subtotal = Math.round(items.reduce((s, i) => s + (i.quantity || 0) * (i.unitPrice || 0), 0) * 100) / 100; | ||
| const taxRate = typeof data.taxRate === "number" ? data.taxRate : 21; | ||
| const taxAmount = Math.round(subtotal * (taxRate / 100) * 100) / 100; | ||
| return simulateWrite("demo_inv", data, { | ||
| status: data.status ?? "draft", | ||
| subtotal, | ||
| taxAmount, | ||
| total: Math.round((subtotal + taxAmount) * 100) / 100, | ||
| currency: "EUR", | ||
| }); | ||
| } | ||
| async updateInvoice(id, data) { | ||
| return simulateAction(id, { ...data }); | ||
| } | ||
| async deleteInvoice(_id) { | ||
| return; | ||
| } | ||
| async searchInvoices(query, params) { | ||
| const q = query.toLowerCase(); | ||
| const matched = demoInvoices.filter((inv) => JSON.stringify(inv).toLowerCase().includes(q)); | ||
| return demoPage(matched, params); | ||
| } | ||
| // ---------------------------------------------------------------- Expenses | ||
| async listExpenses(params) { | ||
| return demoPage(demoExpenses, params); | ||
| } | ||
| async getExpense(id) { | ||
| return findOrStub(demoExpenses, id); | ||
| } | ||
| async createExpense(data) { | ||
| return simulateWrite("demo_exp", data, { taxDeductible: data.taxDeductible ?? true }); | ||
| } | ||
| async updateExpense(id, data) { | ||
| return simulateAction(id, { ...data }); | ||
| } | ||
| async deleteExpense(_id) { | ||
| return; | ||
| } | ||
| // ---------------------------------------------------------------- Clients | ||
| async listClients(params) { | ||
| return demoPage(demoClients, params); | ||
| } | ||
| async getClient(id) { | ||
| return findOrStub(demoClients, id); | ||
| } | ||
| async createClient(data) { | ||
| return simulateWrite("demo_cli", data); | ||
| } | ||
| async updateClient(id, data) { | ||
| return simulateAction(id, { ...data }); | ||
| } | ||
| async deleteClient(_id) { | ||
| return; | ||
| } | ||
| // ---------------------------------------------------------------- Products | ||
| async listProducts(params) { | ||
| return demoPage(demoProducts, params); | ||
| } | ||
| async getProduct(id) { | ||
| return findOrStub(demoProducts, id); | ||
| } | ||
| async createProduct(data) { | ||
| return simulateWrite("demo_prd", data); | ||
| } | ||
| async updateProduct(id, data) { | ||
| return simulateAction(id, { ...data }); | ||
| } | ||
| async deleteProduct(_id) { | ||
| return; | ||
| } | ||
| // ---------------------------------------------------------------- Quotes | ||
| async listQuotes(params) { | ||
| return demoPage(demoQuotes, params); | ||
| } | ||
| async getQuote(id) { | ||
| return findOrStub(demoQuotes, id); | ||
| } | ||
| async createQuote(data) { | ||
| return simulateWrite("demo_quo", data, { status: data.status ?? "draft" }); | ||
| } | ||
| async updateQuote(id, data) { | ||
| return simulateAction(id, { ...data }); | ||
| } | ||
| async deleteQuote(_id) { | ||
| return; | ||
| } | ||
| // ---------------------------------------------------------------- Vendors | ||
| async listVendors(params) { | ||
| return demoPage(demoVendors, params); | ||
| } | ||
| async getVendor(id) { | ||
| return findOrStub(demoVendors, id); | ||
| } | ||
| async createVendor(data) { | ||
| return simulateWrite("demo_ven", data); | ||
| } | ||
| async updateVendor(id, data) { | ||
| return simulateAction(id, { ...data }); | ||
| } | ||
| async deleteVendor(_id) { | ||
| return; | ||
| } | ||
| // ---------------------------------------------------------------- Invoice actions | ||
| async sendInvoice(id, to) { | ||
| // Email dispatch — simulated, no email is actually sent. | ||
| return { id, status: "sent", sentAt: DEMO_NOW, ...(to ? { to } : {}), ...FISCAL_STAMP }; | ||
| } | ||
| async markInvoicePaid(id, paidDate) { | ||
| return simulateAction(id, { status: "paid", paidAt: paidDate ?? DEMO_NOW }); | ||
| } | ||
| async getInvoicePdf(id) { | ||
| return { id, url: "https://app.frihet.io/demo/invoice.pdf", contentType: "application/pdf", ...READ_STAMP }; | ||
| } | ||
| async getInvoiceEInvoice(invoiceId) { | ||
| return { | ||
| xml: `<?xml version="1.0" encoding="UTF-8"?>\n<Invoice><!-- DEMO example e-invoice for ${invoiceId} --></Invoice>`, | ||
| filename: `${invoiceId}.xml`, | ||
| format: "facturae", | ||
| ...FISCAL_STAMP, | ||
| }; | ||
| } | ||
| async createCreditNote(invoiceId, data) { | ||
| return { | ||
| success: true, | ||
| creditNote: { | ||
| id: demoId("demo_cn"), | ||
| documentNumber: "R4-DEMO-001", | ||
| originalInvoiceId: invoiceId, | ||
| reason: data.reason, | ||
| fullCredit: data.fullCredit ?? true, | ||
| }, | ||
| ...FISCAL_STAMP, | ||
| }; | ||
| } | ||
| async applyLateFee(invoiceId, data) { | ||
| return simulateAction(invoiceId, { lateFeeApplied: true, amount: data?.amount ?? 45.0, daysOverdue: data?.daysOverdue ?? 30 }); | ||
| } | ||
| // ---------------------------------------------------------------- Quote actions | ||
| async sendQuote(id, to) { | ||
| return { id, status: "sent", sentAt: DEMO_NOW, ...(to ? { to } : {}), ...FISCAL_STAMP }; | ||
| } | ||
| // ---------------------------------------------------------------- Webhooks | ||
| async listWebhooks(params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| async getWebhook(id) { | ||
| return { id, ...READ_STAMP }; | ||
| } | ||
| async createWebhook(data) { | ||
| return simulateWrite("demo_wh", data, { active: data.active ?? true }); | ||
| } | ||
| async updateWebhook(id, data) { | ||
| return simulateAction(id, { ...data }); | ||
| } | ||
| async deleteWebhook(_id) { | ||
| return; | ||
| } | ||
| // ---------------------------------------------------------------- CRM: Contacts | ||
| async listClientContacts(_clientId, params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| async createClientContact(clientId, data) { | ||
| return simulateWrite("demo_contact", data, { clientId }); | ||
| } | ||
| async deleteClientContact(_clientId, _contactId) { | ||
| return; | ||
| } | ||
| // ---------------------------------------------------------------- CRM: Activities | ||
| async listClientActivities(_clientId, params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| async logClientActivity(clientId, data) { | ||
| return simulateWrite("demo_act", data, { clientId }); | ||
| } | ||
| // ---------------------------------------------------------------- CRM: Notes | ||
| async listClientNotes(_clientId, params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| async createClientNote(clientId, data) { | ||
| return simulateWrite("demo_note", data, { clientId }); | ||
| } | ||
| async deleteClientNote(_clientId, _noteId) { | ||
| return; | ||
| } | ||
| // ---------------------------------------------------------------- Deposits | ||
| async listDeposits(params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| async getDeposit(id) { | ||
| return { id, ...READ_STAMP }; | ||
| } | ||
| async createDeposit(data) { | ||
| return simulateWrite("demo_dep", data, { status: data.status ?? "held" }); | ||
| } | ||
| async updateDeposit(id, data) { | ||
| return simulateAction(id, { ...data }); | ||
| } | ||
| async deleteDeposit(_id) { | ||
| return; | ||
| } | ||
| async applyDeposit(id, data) { | ||
| return simulateAction(id, { ...(data ?? {}), status: "applied" }); | ||
| } | ||
| async refundDeposit(id, data) { | ||
| return simulateAction(id, { ...(data ?? {}), status: "refunded" }); | ||
| } | ||
| // ---------------------------------------------------------------- Intelligence | ||
| async getBusinessContext() { | ||
| return { | ||
| businessName: "Demo Studio SL", | ||
| fiscalRegime: "autonomo", | ||
| currency: "EUR", | ||
| country: "ES", | ||
| metrics: { openInvoices: 4, overdueInvoices: 1, totalClients: demoClients.length, totalProducts: demoProducts.length }, | ||
| ...READ_STAMP, | ||
| }; | ||
| } | ||
| async getMonthlySummary(month) { | ||
| return { | ||
| month: month ?? "2026-07", | ||
| revenue: 3960.4, | ||
| expenses: 405.6, | ||
| net: 3554.8, | ||
| invoiceCount: 5, | ||
| expenseCount: demoExpenses.length, | ||
| currency: "EUR", | ||
| ...READ_STAMP, | ||
| }; | ||
| } | ||
| async getQuarterlyTaxes(quarter) { | ||
| return { | ||
| quarter: quarter ?? "2026-Q2", | ||
| modelo303: { cuotaRepercutida: 1620.0, cuotaDeducible: 85.15, resultado: 1534.85 }, | ||
| modelo130: { rendimientoNeto: 8200.0, pagoFraccionado: 1640.0 }, | ||
| currency: "EUR", | ||
| readonly: true, | ||
| ...READ_STAMP, | ||
| }; | ||
| } | ||
| // ---------------------------------------------------------------- E-Invoicing (simulated fiscal) | ||
| async sendEInvoice(_params) { | ||
| return { workflowRunId: demoId("demo_wf"), status: "queued", estimatedCompletionSec: 8, ...FISCAL_STAMP }; | ||
| } | ||
| async getEInvoiceStatus(_workflowRunId) { | ||
| return { status: "succeeded", step: "completed", ackId: "DEMO-ACK-001", ...FISCAL_STAMP }; | ||
| } | ||
| async validateEInvoiceXml(_params) { | ||
| return { valid: true, errors: [], validator: "xsd", durationMs: 12, ...FISCAL_STAMP }; | ||
| } | ||
| async exportDatev(params) { | ||
| return { fileUrl: "https://app.frihet.io/demo/datev.csv", filename: "demo-datev.csv", rowCount: 24, fiscalPeriod: `${params.periodStart}..${params.periodEnd}`, encoding: "cp1252", ...FISCAL_STAMP }; | ||
| } | ||
| async exportEInvoice(params) { | ||
| return { xmlUrl: "https://app.frihet.io/demo/einvoice.xml", filename: `${params.invoiceId}.xml`, format: params.format, signed: params.signed ?? false, ...FISCAL_STAMP }; | ||
| } | ||
| async faceSubmit(params) { | ||
| return { registroFACe: "DEMO-FACE-0001", status: "submitted", submittedAt: DEMO_NOW, mode: params.mode, ...FISCAL_STAMP }; | ||
| } | ||
| async faceStatus(_params) { | ||
| return { registroFACe: "DEMO-FACE-0001", statusCode: "1200", statusDescription: "Registrada (demo)", ...FISCAL_STAMP }; | ||
| } | ||
| async ticketbaiSubmit(params) { | ||
| return { tbaiId: "DEMO-TBAI-0001", territory: "bizkaia", status: "submitted", sandbox: params.sandbox, qrUrl: "https://app.frihet.io/demo/tbai-qr.png", ...FISCAL_STAMP }; | ||
| } | ||
| async ticketbaiStatus(_params) { | ||
| return { tbaiId: "DEMO-TBAI-0001", territory: "bizkaia", status: "accepted", ...FISCAL_STAMP }; | ||
| } | ||
| // ---------------------------------------------------------------- Stay | ||
| async listReservations(params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| async getReservation(id) { | ||
| return { id, ...READ_STAMP }; | ||
| } | ||
| async createReservation(data) { | ||
| return simulateWrite("demo_res", data, { status: data.status ?? "confirmed" }); | ||
| } | ||
| async listProperties(params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| async syncChannel(channelId, direction) { | ||
| return simulateAction(channelId, { direction, synced: 0 }); | ||
| } | ||
| // ---------------------------------------------------------------- POS | ||
| async listTerminals(params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| async getSale(id) { | ||
| return { id, ...READ_STAMP }; | ||
| } | ||
| async listSales(params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| async refundSale(id, data) { | ||
| return simulateAction(id, { status: "refunded", refundedAmountCents: data?.amountCents ?? 0 }); | ||
| } | ||
| // ---------------------------------------------------------------- Kitchen | ||
| async listKitchenTickets(params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| async getKitchenTicket(id) { | ||
| return { id, ...READ_STAMP }; | ||
| } | ||
| async updateKitchenTicket(id, data) { | ||
| return simulateAction(id, { ...data }); | ||
| } | ||
| async listKitchenStations(params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| async listMenuItems(params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| // ---------------------------------------------------------------- Banking | ||
| async listBankAccounts(params) { | ||
| return demoPage(demoBankAccounts, params); | ||
| } | ||
| async getBankAccount(id) { | ||
| return findOrStub(demoBankAccounts, id); | ||
| } | ||
| async listTransactions(params) { | ||
| return demoPage(demoTransactions, params); | ||
| } | ||
| async categorizeTransaction(id, data) { | ||
| return simulateAction(id, { category: data.category, ...(data.notes ? { notes: data.notes } : {}) }); | ||
| } | ||
| async matchTransactionToDocument(transactionId, data) { | ||
| return simulateAction(transactionId, { matchedDocId: data.documentId, documentType: data.documentType }); | ||
| } | ||
| // ---------------------------------------------------------------- Fiscal (simulated / read summaries) | ||
| async getFiscalModeloSummary(modeloCode, period) { | ||
| return { model: modeloCode, period: period ?? "2026-Q2", readonly: true, summary: { totalRevenue: 3960.4, totalExpenses: 405.6 }, ...FISCAL_STAMP }; | ||
| } | ||
| async getVerifactuStatus(invoiceId) { | ||
| return { invoiceId, status: "accepted", accepted: true, submittedAt: DEMO_NOW, ...FISCAL_STAMP }; | ||
| } | ||
| async resubmitVerifactu(invoiceId) { | ||
| return { invoiceId, status: "queued", ...FISCAL_STAMP }; | ||
| } | ||
| async getTicketbaiStatus(invoiceId) { | ||
| return { invoiceId, status: "success", province: "bizkaia", ...FISCAL_STAMP }; | ||
| } | ||
| // ---------------------------------------------------------------- Time tracking | ||
| async listTimeEntries(params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| async getTimeEntry(id) { | ||
| return { id, ...READ_STAMP }; | ||
| } | ||
| async createTimeEntry(data) { | ||
| return simulateWrite("demo_time", data); | ||
| } | ||
| async updateTimeEntry(id, data) { | ||
| return simulateAction(id, { ...data }); | ||
| } | ||
| async deleteTimeEntry(_id) { | ||
| return; | ||
| } | ||
| async getTimeSummary(params) { | ||
| return { from: params.from, to: params.to, totalHours: 0, billableHours: 0, nonBillableHours: 0, groups: [], ...READ_STAMP }; | ||
| } | ||
| // ---------------------------------------------------------------- Recurring invoices | ||
| async listRecurringInvoices(params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| async getRecurringInvoice(id) { | ||
| return { id, ...READ_STAMP }; | ||
| } | ||
| async createRecurringInvoice(data) { | ||
| return simulateWrite("demo_rec", data, { status: "active" }); | ||
| } | ||
| async updateRecurringInvoice(id, data) { | ||
| return simulateAction(id, { ...data }); | ||
| } | ||
| async pauseRecurringInvoice(id) { | ||
| return simulateAction(id, { status: "paused" }); | ||
| } | ||
| async resumeRecurringInvoice(id) { | ||
| return simulateAction(id, { status: "active" }); | ||
| } | ||
| async deleteRecurringInvoice(_id) { | ||
| return; | ||
| } | ||
| async runRecurringNow(templateId, options) { | ||
| return simulateAction(templateId, { generatedInvoiceId: demoId("demo_inv"), draftOnly: options?.draftOnly ?? true }); | ||
| } | ||
| // ---------------------------------------------------------------- Team management | ||
| async listTeamMembers(params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| async inviteTeamMember(data) { | ||
| return simulateWrite("demo_member", { email: data.email, role: data.role, ...(data.name ? { name: data.name } : {}) }, { status: "pending" }); | ||
| } | ||
| async updateTeamMemberRole(memberId, role) { | ||
| return simulateAction(memberId, { role }); | ||
| } | ||
| async removeTeamMember(_memberId) { | ||
| return; | ||
| } | ||
| // ---------------------------------------------------------------- Audit GL | ||
| async approveGLEntry(entryId, notes) { | ||
| return simulateAction(entryId, { status: "approved", ...(notes ? { notes } : {}) }); | ||
| } | ||
| async rejectGLEntry(entryId, reason) { | ||
| return simulateAction(entryId, { status: "rejected", reason }); | ||
| } | ||
| async getGLEntryAuditLog(entryId) { | ||
| return { entryId, log: [], ...READ_STAMP }; | ||
| } | ||
| // ---------------------------------------------------------------- White-label portal domain | ||
| async addCustomPortalDomain(data) { | ||
| return simulateWrite("demo_domain", { domain: data.domain }, { status: "pending_verification" }); | ||
| } | ||
| async verifyCustomPortalDomain(data) { | ||
| return { domain: data.domain, verified: true, ...FISCAL_STAMP }; | ||
| } | ||
| async removeCustomPortalDomain(data) { | ||
| return { domain: data.domain, removed: true, ...READ_STAMP }; | ||
| } | ||
| // ---------------------------------------------------------------- Self-onboard + VIES | ||
| async generatePortalOnboardLink(data) { | ||
| return { email: data.email, url: "https://app.frihet.io/demo/onboard/DEMO-TOKEN", expiresInHours: data.expiresInHours ?? 72, ...READ_STAMP }; | ||
| } | ||
| async lookupTaxIdViaVIES(data) { | ||
| return { vatNumber: data.vatNumber, countryCode: data.countryCode, valid: true, name: "Demo EU Company", ...FISCAL_STAMP }; | ||
| } | ||
| // ---------------------------------------------------------------- IGIC | ||
| async getIgicModeloSummary(modeloCode, params) { | ||
| return { model: modeloCode, year: params?.year ?? "2026", period: params?.period ?? "2T", readonly: true, ...FISCAL_STAMP }; | ||
| } | ||
| async calculateAiem(data) { | ||
| return { ncCode: data.ncCode, base: data.amount, aiemRate: 5, aiemAmount: Math.round(data.amount * 0.05 * 100) / 100, ...FISCAL_STAMP }; | ||
| } | ||
| // ---------------------------------------------------------------- Impuesto Sociedades | ||
| async getISSummary(modeloCode, params) { | ||
| return { model: modeloCode, year: params?.year ?? "2026", installment: params?.installment ?? "1P", readonly: true, ...FISCAL_STAMP }; | ||
| } | ||
| // ---------------------------------------------------------------- Bank rules | ||
| async listBankRules(params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| async createBankRule(data) { | ||
| return simulateWrite("demo_rule", { name: data.name, conditions: data.conditions, actions: data.actions }, { isActive: data.isActive ?? true }); | ||
| } | ||
| // ---------------------------------------------------------------- Gestoria | ||
| async sendGestoriaMessage(data) { | ||
| return simulateWrite("demo_gmsg", { parentType: data.parentType, parentId: data.parentId, body: data.body }); | ||
| } | ||
| async listGestoriaMessages(_params) { | ||
| return { messages: [], hasMore: false, ...READ_STAMP }; | ||
| } | ||
| async createGestoriaTemplate(data) { | ||
| return { templateId: demoId("demo_tpl"), ...FISCAL_STAMP }; | ||
| } | ||
| async bulkSendGestoriaTemplate(data) { | ||
| return { success: data.clientWorkspaceIds.length, failed: [], ...FISCAL_STAMP }; | ||
| } | ||
| async getGestoriaAgingConsolidated(_params) { | ||
| return { totals: { current: 0, "30_60": 0, "60_90": 0, "90_plus": 0 }, byWorkspace: [], topOverdue: [], generatedAt: DEMO_NOW, ...READ_STAMP }; | ||
| } | ||
| // ---------------------------------------------------------------- HR | ||
| async listLeaves(params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| async createLeaveRequest(data) { | ||
| return simulateWrite("demo_leave", { ...data }, { status: "pending" }); | ||
| } | ||
| async approveLeave(leaveId, data) { | ||
| return simulateAction(leaveId, { status: "approved", ...(data?.reason ? { decisionReason: data.reason } : {}) }); | ||
| } | ||
| async rejectLeave(leaveId, data) { | ||
| return simulateAction(leaveId, { status: "rejected", decisionReason: data.reason }); | ||
| } | ||
| async cancelLeave(leaveId) { | ||
| return simulateAction(leaveId, { status: "cancelled" }); | ||
| } | ||
| async attendanceClockIn(data) { | ||
| return simulateWrite("demo_att", { employeeId: data.employeeId, ...(data.mood ? { mood: data.mood } : {}), ...(data.location ? { location: data.location } : {}) }, { status: "open", clockInAt: DEMO_NOW }); | ||
| } | ||
| async attendanceClockOut(entryId) { | ||
| return simulateAction(entryId, { status: "closed", clockOutAt: DEMO_NOW }); | ||
| } | ||
| async getOvertimeReport(params) { | ||
| return { period: params.period, totalRegularHours: 0, totalOvertimeHours: 0, byEmployee: [], generatedAt: DEMO_NOW, ...READ_STAMP }; | ||
| } | ||
| async listAnomalies(params) { | ||
| return demoEmptyPage(params); | ||
| } | ||
| // ---------------------------------------------------------------- Webhook test | ||
| async testWebhook(id, data) { | ||
| return { webhookId: id, delivered: true, statusCode: 200, responseTimeMs: 42, eventType: data?.eventType ?? "ping", attemptedAt: DEMO_NOW, ...FISCAL_STAMP }; | ||
| } | ||
| // ---------------------------------------------------------------- Payroll (simulated fiscal) | ||
| async exportPayroll(params) { | ||
| return { format: params.format, month: params.month, fileUrl: "https://app.frihet.io/demo/payroll.txt", filename: "demo-payroll.txt", rowCount: 0, generatedAt: DEMO_NOW, ...FISCAL_STAMP }; | ||
| } | ||
| async getPayrollChecklist(params) { | ||
| return { month: params.month, totalEmployees: 0, readyEmployees: 0, missingEmployees: 0, employees: [], generatedAt: DEMO_NOW, ...FISCAL_STAMP }; | ||
| } | ||
| // ---------------------------------------------------------------- Onboarding | ||
| async getOnboardingStatus() { | ||
| return { workspaceId: "demo_ws_001", persona: "autonomo", completedSteps: ["profile"], pendingSteps: ["bank", "invoice"], percentComplete: 33, startedAt: DEMO_NOW, ...READ_STAMP }; | ||
| } | ||
| async setOnboardingPersona(data) { | ||
| return { workspaceId: "demo_ws_001", persona: data.persona, updatedAt: DEMO_NOW, ...READ_STAMP }; | ||
| } | ||
| // ---------------------------------------------------------------- Permissions | ||
| async getPermissionsMatrix() { | ||
| return { roles: [{ role: "owner", permissions: ["*"] }], resources: ["invoices", "expenses", "clients"], generatedAt: DEMO_NOW, ...READ_STAMP }; | ||
| } | ||
| async getMyPermissions() { | ||
| return { userId: "demo_user_001", role: "owner", permissions: ["*"], workspaceId: "demo_ws_001", ...READ_STAMP }; | ||
| } | ||
| // ---------------------------------------------------------------- Period close | ||
| async getCurrentPeriod(params) { | ||
| return { id: params?.periodId ?? "demo_period_2026_07", type: "monthly", status: "open", startDate: "2026-07-01", endDate: "2026-07-31", ...READ_STAMP }; | ||
| } | ||
| async closePeriod(data) { | ||
| return simulateWrite("demo_period", { type: data.type }, { status: "closed", closedAt: DEMO_NOW }); | ||
| } | ||
| async reopenPeriod(data) { | ||
| return simulateAction(data.periodId, { status: "reopened", reopenReason: data.reason }); | ||
| } | ||
| } | ||
| //# sourceMappingURL=demo-client.js.map |
| {"version":3,"file":"demo-client.js","sourceRoot":"","sources":["../src/demo-client.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Demo-mode fixtures for the Frihet MCP server (`FRIHET_DEMO=1`). | ||
| * | ||
| * These are the canned, PII-SAFE example datasets served by DemoFrihetClient | ||
| * when the server runs without an API key. NOTHING here is real customer data: | ||
| * - NIF/CIF are AEAT example patterns (B12345678, X9999999X). | ||
| * - IBAN is the ECBS/AEAT test IBAN (ES9121000418450200051332). | ||
| * - Every email is under @example.com (guarded by demo-mode.test.ts). | ||
| * - Business names are generic, invented ES/EU companies. | ||
| * | ||
| * Amounts follow the same field shape the real /v1 REST API returns (see | ||
| * src/tools/*.ts output schemas + src/client-interface.ts return types), so an | ||
| * agent evaluating the demo sees exactly the response shape it would get live. | ||
| */ | ||
| import type { PaginatedResponse } from "./types.js"; | ||
| /** Marker fields stamped on every demo response's top-level object. */ | ||
| export interface DemoStamp { | ||
| _demo: true; | ||
| _demoNotice: string; | ||
| } | ||
| /** Read/get/list responses. */ | ||
| export declare const READ_STAMP: DemoStamp; | ||
| /** Simulated writes (create/update/apply/mark/etc.). */ | ||
| export declare const WRITE_STAMP: DemoStamp; | ||
| /** Fiscal / e-invoice / email / payroll actions — NEVER a real submission. */ | ||
| export declare const FISCAL_STAMP: DemoStamp; | ||
| /** Empty surfaces (no dedicated fixtures yet) still carry a demo stamp. */ | ||
| export declare const EMPTY_STAMP: DemoStamp; | ||
| /** Frozen timestamp so demo responses are deterministic across calls. */ | ||
| export declare const DEMO_NOW = "2026-07-15T10:00:00.000Z"; | ||
| /** Test IBAN (ECBS/AEAT example — never a real account). */ | ||
| export declare const DEMO_TEST_IBAN = "ES9121000418450200051332"; | ||
| export type DemoPaginated = PaginatedResponse<Record<string, unknown>> & DemoStamp; | ||
| /** Wrap a fixture array in a stamped PaginatedResponse. */ | ||
| export declare function demoPage(data: Record<string, unknown>[], params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): DemoPaginated; | ||
| /** Empty stamped PaginatedResponse for surfaces without dedicated fixtures. */ | ||
| export declare function demoEmptyPage(params?: { | ||
| limit?: number; | ||
| offset?: number; | ||
| }): DemoPaginated; | ||
| export declare const demoClients: Record<string, unknown>[]; | ||
| export declare const demoProducts: Record<string, unknown>[]; | ||
| export declare const demoInvoices: Record<string, unknown>[]; | ||
| export declare const demoExpenses: Record<string, unknown>[]; | ||
| export declare const demoQuotes: Record<string, unknown>[]; | ||
| export declare const demoVendors: Record<string, unknown>[]; | ||
| export declare const demoBankAccounts: Record<string, unknown>[]; | ||
| export declare const demoTransactions: Record<string, unknown>[]; | ||
| /** Find a fixture by id, or synthesize a minimal stamped object with that id. */ | ||
| export declare function findOrStub(collection: Record<string, unknown>[], id: string): Record<string, unknown> & DemoStamp; | ||
| /** Deterministic-ish demo id (no network, no clock dependency). */ | ||
| export declare function demoId(prefix: string): string; | ||
| /** | ||
| * Simulate a create/update: echo the input, stamp a fabricated demo id + | ||
| * timestamps + the WRITE banner. Never persists, never touches the network. | ||
| */ | ||
| export declare function simulateWrite(idPrefix: string, input: Record<string, unknown>, extra?: Record<string, unknown>): Record<string, unknown> & DemoStamp; | ||
| /** Simulate an action on an existing entity (keeps the caller-supplied id). */ | ||
| export declare function simulateAction(id: string, fields?: Record<string, unknown>): Record<string, unknown> & DemoStamp; | ||
| //# sourceMappingURL=demo-fixtures.d.ts.map |
| {"version":3,"file":"demo-fixtures.d.ts","sourceRoot":"","sources":["../src/demo-fixtures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMpD,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,IAAI,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,+BAA+B;AAC/B,eAAO,MAAM,UAAU,EAAE,SAIf,CAAC;AAEX,wDAAwD;AACxD,eAAO,MAAM,WAAW,EAAE,SAIhB,CAAC;AAEX,8EAA8E;AAC9E,eAAO,MAAM,YAAY,EAAE,SAIjB,CAAC;AAEX,2EAA2E;AAC3E,eAAO,MAAM,WAAW,EAAE,SAIhB,CAAC;AAEX,yEAAyE;AACzE,eAAO,MAAM,QAAQ,6BAA6B,CAAC;AAEnD,4DAA4D;AAC5D,eAAO,MAAM,cAAc,6BAA6B,CAAC;AAMzD,MAAM,MAAM,aAAa,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;AAEnF,2DAA2D;AAC3D,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC/B,MAAM,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,aAAa,CAQf;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,CAQzF;AAMD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAmDhD,CAAC;AAMF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EASjD,CAAC;AAsDF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAUjD,CAAC;AAMF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAOjD,CAAC;AAMF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAgC/C,CAAC;AAMF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAGhD,CAAC;AAMF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAYrD,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAKrD,CAAC;AAMF,iFAAiF;AACjF,wBAAgB,UAAU,CACxB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACrC,EAAE,EAAE,MAAM,GACT,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAIrC;AAID,mEAAmE;AACnE,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CASrC;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAC5B,EAAE,EAAE,MAAM,EACV,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAErC"} |
| /** | ||
| * Demo-mode fixtures for the Frihet MCP server (`FRIHET_DEMO=1`). | ||
| * | ||
| * These are the canned, PII-SAFE example datasets served by DemoFrihetClient | ||
| * when the server runs without an API key. NOTHING here is real customer data: | ||
| * - NIF/CIF are AEAT example patterns (B12345678, X9999999X). | ||
| * - IBAN is the ECBS/AEAT test IBAN (ES9121000418450200051332). | ||
| * - Every email is under @example.com (guarded by demo-mode.test.ts). | ||
| * - Business names are generic, invented ES/EU companies. | ||
| * | ||
| * Amounts follow the same field shape the real /v1 REST API returns (see | ||
| * src/tools/*.ts output schemas + src/client-interface.ts return types), so an | ||
| * agent evaluating the demo sees exactly the response shape it would get live. | ||
| */ | ||
| /** Read/get/list responses. */ | ||
| export const READ_STAMP = { | ||
| _demo: true, | ||
| _demoNotice: "DEMO MODE — example data, nothing persisted. For real data: app.frihet.io → Settings → API keys.", | ||
| }; | ||
| /** Simulated writes (create/update/apply/mark/etc.). */ | ||
| export const WRITE_STAMP = { | ||
| _demo: true, | ||
| _demoNotice: "DEMO MODE — example data, nothing persisted. Simulated — not persisted.", | ||
| }; | ||
| /** Fiscal / e-invoice / email / payroll actions — NEVER a real submission. */ | ||
| export const FISCAL_STAMP = { | ||
| _demo: true, | ||
| _demoNotice: "Simulated fiscal action — no submission was made to any tax authority.", | ||
| }; | ||
| /** Empty surfaces (no dedicated fixtures yet) still carry a demo stamp. */ | ||
| export const EMPTY_STAMP = { | ||
| _demo: true, | ||
| _demoNotice: "DEMO MODE — no demo fixtures for this surface yet. For real data: app.frihet.io → Settings → API keys.", | ||
| }; | ||
| /** Frozen timestamp so demo responses are deterministic across calls. */ | ||
| export const DEMO_NOW = "2026-07-15T10:00:00.000Z"; | ||
| /** Test IBAN (ECBS/AEAT example — never a real account). */ | ||
| export const DEMO_TEST_IBAN = "ES9121000418450200051332"; | ||
| /** Wrap a fixture array in a stamped PaginatedResponse. */ | ||
| export function demoPage(data, params) { | ||
| return { | ||
| data, | ||
| total: data.length, | ||
| limit: params?.limit ?? 50, | ||
| offset: params?.offset ?? 0, | ||
| ...READ_STAMP, | ||
| }; | ||
| } | ||
| /** Empty stamped PaginatedResponse for surfaces without dedicated fixtures. */ | ||
| export function demoEmptyPage(params) { | ||
| return { | ||
| data: [], | ||
| total: 0, | ||
| limit: params?.limit ?? 50, | ||
| offset: params?.offset ?? 0, | ||
| ...EMPTY_STAMP, | ||
| }; | ||
| } | ||
| /* ------------------------------------------------------------------ */ | ||
| /* Clients (5) — mix of ES peninsula, Canarias (IGIC), autónomo, EU */ | ||
| /* ------------------------------------------------------------------ */ | ||
| export const demoClients = [ | ||
| { | ||
| id: "demo_cli_001", | ||
| name: "Panadería La Espiga SL", | ||
| email: "hola@example.com", | ||
| phone: "+34 600 000 001", | ||
| taxId: "B12345678", | ||
| address: { street: "Calle Mayor 12", city: "Madrid", state: "Madrid", postalCode: "28013", country: "ES" }, | ||
| createdAt: DEMO_NOW, | ||
| updatedAt: DEMO_NOW, | ||
| }, | ||
| { | ||
| id: "demo_cli_002", | ||
| name: "Estudio Nórdico Arquitectura SL", | ||
| email: "info@example.com", | ||
| phone: "+34 600 000 002", | ||
| taxId: "B87654321", | ||
| address: { street: "Passeig de Gràcia 45", city: "Barcelona", state: "Barcelona", postalCode: "08010", country: "ES" }, | ||
| createdAt: DEMO_NOW, | ||
| updatedAt: DEMO_NOW, | ||
| }, | ||
| { | ||
| id: "demo_cli_003", | ||
| name: "Servicios Insulares Canarias SL", | ||
| email: "contacto@example.com", | ||
| phone: "+34 600 000 003", | ||
| taxId: "B35700000", | ||
| address: { street: "Avenida de Anaga 8", city: "Santa Cruz de Tenerife", state: "Canarias", postalCode: "38001", country: "ES" }, | ||
| createdAt: DEMO_NOW, | ||
| updatedAt: DEMO_NOW, | ||
| }, | ||
| { | ||
| id: "demo_cli_004", | ||
| name: "Marina Delgado (autónoma)", | ||
| email: "marina@example.com", | ||
| phone: "+34 600 000 004", | ||
| taxId: "X9999999X", | ||
| address: { street: "Carrer de Colón 3", city: "Valencia", state: "Valencia", postalCode: "46004", country: "ES" }, | ||
| createdAt: DEMO_NOW, | ||
| updatedAt: DEMO_NOW, | ||
| }, | ||
| { | ||
| id: "demo_cli_005", | ||
| name: "TechFlow Solutions GmbH", | ||
| email: "billing@example.com", | ||
| phone: "+49 30 0000000", | ||
| taxId: "DE123456789", | ||
| address: { street: "Unter den Linden 10", city: "Berlin", state: "Berlin", postalCode: "10117", country: "DE" }, | ||
| createdAt: DEMO_NOW, | ||
| updatedAt: DEMO_NOW, | ||
| }, | ||
| ]; | ||
| /* ------------------------------------------------------------------ */ | ||
| /* Products (8) — IVA 21% / 10% / 4% */ | ||
| /* ------------------------------------------------------------------ */ | ||
| export const demoProducts = [ | ||
| { id: "demo_prd_001", name: "Consultoría estratégica (hora)", unitPrice: 90, taxRate: 21, description: "Sesión de consultoría por hora", createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| { id: "demo_prd_002", name: "Desarrollo web (jornada)", unitPrice: 480, taxRate: 21, description: "Jornada de desarrollo full-stack", createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| { id: "demo_prd_003", name: "Mantenimiento mensual", unitPrice: 150, taxRate: 21, description: "Soporte y mantenimiento mensual", createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| { id: "demo_prd_004", name: "Diseño de marca", unitPrice: 1200, taxRate: 21, description: "Identidad visual completa", createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| { id: "demo_prd_005", name: "Auditoría SEO", unitPrice: 600, taxRate: 21, description: "Auditoría técnica y de contenidos", createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| { id: "demo_prd_006", name: "Formación in-company (hora)", unitPrice: 75, taxRate: 21, description: "Formación presencial por hora", createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| { id: "demo_prd_007", name: "Menú catering (por persona)", unitPrice: 18, taxRate: 10, description: "Servicio de catering, IVA reducido hostelería", createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| { id: "demo_prd_008", name: "Libro técnico impreso", unitPrice: 24, taxRate: 4, description: "Publicación impresa, IVA superreducido", createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| ]; | ||
| function money(n) { | ||
| return Math.round(n * 100) / 100; | ||
| } | ||
| function invoice(opts) { | ||
| const subtotal = money(opts.items.reduce((s, i) => s + i.quantity * i.unitPrice, 0)); | ||
| const taxAmount = money(subtotal * (opts.taxRate / 100)); | ||
| const irpfAmount = opts.irpfRate ? money(subtotal * (opts.irpfRate / 100)) : 0; | ||
| const total = money(subtotal + taxAmount - irpfAmount); | ||
| return { | ||
| id: opts.id, | ||
| clientId: opts.clientId, | ||
| clientName: opts.clientName, | ||
| items: opts.items, | ||
| issueDate: opts.issueDate, | ||
| dueDate: opts.dueDate, | ||
| status: opts.status, | ||
| taxRate: opts.taxRate, | ||
| subtotal, | ||
| taxAmount, | ||
| ...(opts.irpfRate ? { irpfRate: opts.irpfRate, irpfAmount } : {}), | ||
| total, | ||
| currency: "EUR", | ||
| ...(opts.clientLocation ? { clientLocation: opts.clientLocation } : {}), | ||
| ...(opts.notes ? { notes: opts.notes } : {}), | ||
| createdAt: DEMO_NOW, | ||
| updatedAt: DEMO_NOW, | ||
| }; | ||
| } | ||
| export const demoInvoices = [ | ||
| invoice({ id: "demo_inv_001", clientId: "demo_cli_001", clientName: "Panadería La Espiga SL", items: [{ description: "Consultoría estratégica (hora)", quantity: 10, unitPrice: 90 }], taxRate: 21, status: "paid", issueDate: "2026-06-03", dueDate: "2026-07-03", clientLocation: "peninsula" }), | ||
| invoice({ id: "demo_inv_002", clientId: "demo_cli_002", clientName: "Estudio Nórdico Arquitectura SL", items: [{ description: "Desarrollo web (jornada)", quantity: 5, unitPrice: 480 }], taxRate: 21, status: "sent", issueDate: "2026-06-10", dueDate: "2026-07-10", clientLocation: "peninsula" }), | ||
| invoice({ id: "demo_inv_003", clientId: "demo_cli_003", clientName: "Servicios Insulares Canarias SL", items: [{ description: "Consultoría estratégica (hora)", quantity: 8, unitPrice: 90 }], taxRate: 7, status: "paid", issueDate: "2026-06-12", dueDate: "2026-07-12", notes: "IGIC 7% — cliente en Canarias", clientLocation: "canarias" }), | ||
| invoice({ id: "demo_inv_004", clientId: "demo_cli_004", clientName: "Marina Delgado (autónoma)", items: [{ description: "Formación in-company (hora)", quantity: 12, unitPrice: 75 }], taxRate: 21, status: "draft", issueDate: "2026-07-01", dueDate: "2026-07-31", clientLocation: "peninsula" }), | ||
| invoice({ id: "demo_inv_005", clientId: "demo_cli_001", clientName: "Panadería La Espiga SL", items: [{ description: "Menú catering (por persona)", quantity: 40, unitPrice: 18 }], taxRate: 10, status: "sent", issueDate: "2026-06-20", dueDate: "2026-07-20", notes: "IVA reducido 10% (hostelería)", clientLocation: "peninsula" }), | ||
| invoice({ id: "demo_inv_006", clientId: "demo_cli_002", clientName: "Estudio Nórdico Arquitectura SL", items: [{ description: "Libro técnico impreso", quantity: 50, unitPrice: 24 }], taxRate: 4, status: "paid", issueDate: "2026-05-28", dueDate: "2026-06-28", notes: "IVA superreducido 4% (libros)", clientLocation: "peninsula" }), | ||
| invoice({ id: "demo_inv_007", clientId: "demo_cli_005", clientName: "TechFlow Solutions GmbH", items: [{ description: "Consultoría estratégica (hora)", quantity: 20, unitPrice: 90 }], taxRate: 0, status: "sent", issueDate: "2026-06-15", dueDate: "2026-07-15", notes: "Inversión del sujeto pasivo (reverse charge, operación intracomunitaria B2B)", clientLocation: "eu" }), | ||
| invoice({ id: "demo_inv_008", clientId: "demo_cli_003", clientName: "Servicios Insulares Canarias SL", items: [{ description: "Mantenimiento mensual", quantity: 3, unitPrice: 150 }], taxRate: 7, status: "overdue", issueDate: "2026-04-05", dueDate: "2026-05-05", notes: "IGIC 7% — factura vencida", clientLocation: "canarias" }), | ||
| invoice({ id: "demo_inv_009", clientId: "demo_cli_004", clientName: "Marina Delgado (autónoma)", items: [{ description: "Diseño de marca", quantity: 1, unitPrice: 1200 }, { description: "Auditoría SEO", quantity: 1, unitPrice: 600 }], taxRate: 21, status: "draft", issueDate: "2026-07-08", dueDate: "2026-08-08", irpfRate: 15, notes: "Autónoma con retención IRPF 15%", clientLocation: "peninsula" }), | ||
| ]; | ||
| /* ------------------------------------------------------------------ */ | ||
| /* Expenses (6) — categorized */ | ||
| /* ------------------------------------------------------------------ */ | ||
| export const demoExpenses = [ | ||
| { id: "demo_exp_001", description: "Suscripción software de diseño", amount: 15.4, category: "software", date: "2026-07-01", vendor: "Herramientas Digitales SL", taxDeductible: true, createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| { id: "demo_exp_002", description: "Material de oficina", amount: 48.2, category: "office_supplies", date: "2026-06-18", vendor: "Papelería Central", taxDeductible: true, createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| { id: "demo_exp_003", description: "Comida de trabajo con cliente", amount: 62.0, category: "meals", date: "2026-06-22", vendor: "Restaurante El Puerto", taxDeductible: true, createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| { id: "demo_exp_004", description: "Combustible desplazamiento", amount: 70.0, category: "travel", date: "2026-06-25", vendor: "Estación de Servicio Norte", taxDeductible: true, createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| { id: "demo_exp_005", description: "Cuota gestoría mensual", amount: 90.0, category: "professional_services", date: "2026-07-01", vendor: "Gestoría Ramírez", taxDeductible: true, createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| { id: "demo_exp_006", description: "Hosting anual", amount: 120.0, category: "software", date: "2026-05-30", vendor: "Proveedor Cloud SL", taxDeductible: true, createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| ]; | ||
| /* ------------------------------------------------------------------ */ | ||
| /* Quotes (2) */ | ||
| /* ------------------------------------------------------------------ */ | ||
| export const demoQuotes = [ | ||
| { | ||
| id: "demo_quo_001", | ||
| clientId: "demo_cli_002", | ||
| clientName: "Estudio Nórdico Arquitectura SL", | ||
| items: [{ description: "Desarrollo web (jornada)", quantity: 10, unitPrice: 480 }], | ||
| taxRate: 21, | ||
| subtotal: 4800, | ||
| taxAmount: 1008, | ||
| total: 5808, | ||
| currency: "EUR", | ||
| status: "sent", | ||
| validUntil: "2026-08-15", | ||
| createdAt: DEMO_NOW, | ||
| updatedAt: DEMO_NOW, | ||
| }, | ||
| { | ||
| id: "demo_quo_002", | ||
| clientId: "demo_cli_005", | ||
| clientName: "TechFlow Solutions GmbH", | ||
| items: [{ description: "Consultoría estratégica (hora)", quantity: 30, unitPrice: 90 }], | ||
| taxRate: 0, | ||
| subtotal: 2700, | ||
| taxAmount: 0, | ||
| total: 2700, | ||
| currency: "EUR", | ||
| status: "draft", | ||
| validUntil: "2026-08-30", | ||
| notes: "Reverse charge (intracomunitario B2B)", | ||
| createdAt: DEMO_NOW, | ||
| updatedAt: DEMO_NOW, | ||
| }, | ||
| ]; | ||
| /* ------------------------------------------------------------------ */ | ||
| /* Vendors (2) */ | ||
| /* ------------------------------------------------------------------ */ | ||
| export const demoVendors = [ | ||
| { id: "demo_ven_001", name: "Gestoría Ramírez", email: "gestoria@example.com", phone: "+34 600 000 010", taxId: "B11111111", address: { city: "Madrid", postalCode: "28004", country: "ES" }, createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| { id: "demo_ven_002", name: "Proveedor Cloud SL", email: "facturacion@example.com", phone: "+34 600 000 011", taxId: "B22222222", address: { city: "Barcelona", postalCode: "08007", country: "ES" }, createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| ]; | ||
| /* ------------------------------------------------------------------ */ | ||
| /* Banking — 1 account + 4 transactions */ | ||
| /* ------------------------------------------------------------------ */ | ||
| export const demoBankAccounts = [ | ||
| { | ||
| id: "demo_bank_001", | ||
| alias: "Cuenta principal", | ||
| iban: DEMO_TEST_IBAN, | ||
| ibanLast4: "1332", | ||
| currency: "EUR", | ||
| balance: 12450.75, | ||
| lastSyncedAt: DEMO_NOW, | ||
| createdAt: DEMO_NOW, | ||
| updatedAt: DEMO_NOW, | ||
| }, | ||
| ]; | ||
| export const demoTransactions = [ | ||
| { id: "demo_txn_001", accountId: "demo_bank_001", amount: 1089.0, currency: "EUR", description: "Cobro factura demo_inv_001", postedAt: "2026-07-03", category: "sales_income", status: "posted", matchedDocId: "demo_inv_001", createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| { id: "demo_txn_002", accountId: "demo_bank_001", amount: -90.0, currency: "EUR", description: "Cuota gestoría mensual", postedAt: "2026-07-01", category: "professional_services", status: "posted", createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| { id: "demo_txn_003", accountId: "demo_bank_001", amount: -15.4, currency: "EUR", description: "Suscripción software de diseño", postedAt: "2026-07-01", category: "software", status: "posted", createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| { id: "demo_txn_004", accountId: "demo_bank_001", amount: 770.4, currency: "EUR", description: "Cobro factura demo_inv_003", postedAt: "2026-07-12", category: "sales_income", status: "posted", matchedDocId: "demo_inv_003", createdAt: DEMO_NOW, updatedAt: DEMO_NOW }, | ||
| ]; | ||
| /* ------------------------------------------------------------------ */ | ||
| /* Lookups + write simulation helpers */ | ||
| /* ------------------------------------------------------------------ */ | ||
| /** Find a fixture by id, or synthesize a minimal stamped object with that id. */ | ||
| export function findOrStub(collection, id) { | ||
| const found = collection.find((item) => item.id === id); | ||
| if (found) | ||
| return { ...found, ...READ_STAMP }; | ||
| return { id, ...READ_STAMP }; | ||
| } | ||
| let demoIdCounter = 0; | ||
| /** Deterministic-ish demo id (no network, no clock dependency). */ | ||
| export function demoId(prefix) { | ||
| demoIdCounter += 1; | ||
| return `${prefix}_${String(demoIdCounter).padStart(3, "0")}`; | ||
| } | ||
| /** | ||
| * Simulate a create/update: echo the input, stamp a fabricated demo id + | ||
| * timestamps + the WRITE banner. Never persists, never touches the network. | ||
| */ | ||
| export function simulateWrite(idPrefix, input, extra = {}) { | ||
| return { | ||
| id: demoId(idPrefix), | ||
| ...input, | ||
| ...extra, | ||
| createdAt: DEMO_NOW, | ||
| updatedAt: DEMO_NOW, | ||
| ...WRITE_STAMP, | ||
| }; | ||
| } | ||
| /** Simulate an action on an existing entity (keeps the caller-supplied id). */ | ||
| export function simulateAction(id, fields = {}) { | ||
| return { id, success: true, ...fields, updatedAt: DEMO_NOW, ...WRITE_STAMP }; | ||
| } | ||
| //# sourceMappingURL=demo-fixtures.js.map |
| {"version":3,"file":"demo-fixtures.js","sourceRoot":"","sources":["../src/demo-fixtures.ts"],"names":[],"mappings":"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"} |
+15
-3
@@ -17,2 +17,3 @@ #!/usr/bin/env node | ||
| import { FrihetClient } from "./client.js"; | ||
| import { DemoFrihetClient } from "./demo-client.js"; | ||
| // Single source of truth for the server version: package.json (read at runtime | ||
@@ -41,3 +42,8 @@ // from dist/../package.json). Hardcoding it here caused repeated version drift | ||
| const apiKey = process.env.FRIHET_API_KEY; | ||
| if (!apiKey) { | ||
| // Demo mode: FRIHET_DEMO=1|true serves fixture-backed example data with NO | ||
| // network calls and NO API key required. It's an explicit opt-in, so it wins | ||
| // even if a real key happens to be present. See demo-client.ts / demo-fixtures.ts. | ||
| const demoFlag = process.env.FRIHET_DEMO; | ||
| const demoMode = demoFlag === "1" || demoFlag === "true"; | ||
| if (!demoMode && !apiKey) { | ||
| console.error("Error: FRIHET_API_KEY environment variable is required.\n\n" + | ||
@@ -48,2 +54,3 @@ "Get your API key:\n" + | ||
| " 3. Create a key and add it to your MCP configuration\n\n" + | ||
| "Or try it instantly with no key: set FRIHET_DEMO=1 for example data.\n\n" + | ||
| "Documentation: https://docs.frihet.io/desarrolladores/mcp-server\n"); | ||
@@ -53,3 +60,3 @@ process.exit(1); | ||
| const baseUrl = process.env.FRIHET_API_URL; | ||
| if (baseUrl !== undefined) { | ||
| if (!demoMode && baseUrl !== undefined) { | ||
| let parsed; | ||
@@ -74,3 +81,8 @@ try { | ||
| } | ||
| const client = new FrihetClient(apiKey, baseUrl); | ||
| const client = demoMode | ||
| ? new DemoFrihetClient() | ||
| : new FrihetClient(apiKey, baseUrl); | ||
| if (demoMode) { | ||
| console.error("[frihet-mcp] DEMO MODE — serving example fixtures, no real data, nothing persisted"); | ||
| } | ||
| // Set trace context for Langfuse (reads LANGFUSE_* from process.env automatically). | ||
@@ -77,0 +89,0 @@ // clientName can be overridden via FRIHET_CLIENT_NAME env var by the MCP host. |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} |
@@ -51,2 +51,3 @@ /** | ||
| export declare const eInvoiceFormatSchema: z.ZodEnum<{ | ||
| facturae: "facturae"; | ||
| "xrechnung-cii": "xrechnung-cii"; | ||
@@ -62,3 +63,2 @@ "xrechnung-ubl": "xrechnung-ubl"; | ||
| "peppol-bis-3": "peppol-bis-3"; | ||
| facturae: "facturae"; | ||
| }>; | ||
@@ -65,0 +65,0 @@ export type EInvoiceFormat = z.infer<typeof eInvoiceFormatSchema>; |
@@ -236,5 +236,5 @@ /** | ||
| cancelled: "cancelled"; | ||
| completed: "completed"; | ||
| confirmed: "confirmed"; | ||
| pending: "pending"; | ||
| completed: "completed"; | ||
| no_show: "no_show"; | ||
@@ -330,4 +330,4 @@ }>; | ||
| cancelled: "cancelled"; | ||
| refunded: "refunded"; | ||
| pending: "pending"; | ||
| refunded: "refunded"; | ||
| partially_refunded: "partially_refunded"; | ||
@@ -403,4 +403,4 @@ }>>; | ||
| status: z.ZodOptional<z.ZodEnum<{ | ||
| posted: "posted"; | ||
| pending: "pending"; | ||
| posted: "posted"; | ||
| excluded: "excluded"; | ||
@@ -845,4 +845,4 @@ }>>; | ||
| closed: "closed"; | ||
| reopened: "reopened"; | ||
| closing: "closing"; | ||
| reopened: "reopened"; | ||
| }>>; | ||
@@ -849,0 +849,0 @@ startDate: z.ZodOptional<z.ZodString>; |
+2
-2
| { | ||
| "name": "@frihet/mcp-server", | ||
| "version": "1.15.2", | ||
| "version": "1.15.3", | ||
| "description": "AI-native MCP server for business management — invoices, expenses, deposits, clients, products, quotes, webhooks, CRM, e-invoicing (Facturae/XRechnung/Factur-X/FatturaPA/PEPPOL + FACe Spain B2G + TicketBAI Basque Country + KSeF Poland), vacation rentals, POS, banking, fiscal (Modelo 303/130/390/180/347/415/425/418, VeriFactu, TicketBAI, IS M200/M202), IGIC, AIEM, GL audit approval, white-label portal domain, VIES EU VAT lookup, bank rules, time tracking, recurring invoices, team management, gestoria. 157 tools. Remote endpoint at mcp.frihet.io (zero install). Works with Claude, Cursor, Windsurf, Cline.", | ||
@@ -12,3 +12,3 @@ "type": "module", | ||
| "build": "tsc", | ||
| "test": "npm run build && node --test dist/__tests__/openai-profile.test.js dist/__tests__/tool-exposure.test.js dist/__tests__/einvoice-tools.test.js dist/__tests__/einvoice-day4-tools.test.js dist/__tests__/stay-tools.test.js dist/__tests__/pos-tools.test.js dist/__tests__/kitchen-tools.test.js dist/__tests__/banking-tools.test.js dist/__tests__/banking-client-contract.test.js dist/__tests__/pagination-cursor-param.test.js dist/__tests__/fiscal-tools.test.js dist/__tests__/time-tools.test.js dist/__tests__/recurring-tools.test.js dist/__tests__/team-tools.test.js dist/__tests__/d4b-hr-payroll-onboarding-tools.test.js dist/__tests__/audit-server-version.test.js dist/__tests__/openai-grouped-compose.test.js dist/__tests__/contract.test.js dist/__tests__/observability-redaction.test.js dist/__tests__/intelligence-duplicate-invoice.test.js dist/__tests__/get-envelope-unwrap-regression.test.js dist/__tests__/mutation-unwrap-and-schema-regression.test.js dist/__tests__/schema-envelope-guard.test.js", | ||
| "test": "npm run build && node --test dist/__tests__/openai-profile.test.js dist/__tests__/tool-exposure.test.js dist/__tests__/einvoice-tools.test.js dist/__tests__/einvoice-day4-tools.test.js dist/__tests__/stay-tools.test.js dist/__tests__/pos-tools.test.js dist/__tests__/kitchen-tools.test.js dist/__tests__/banking-tools.test.js dist/__tests__/banking-client-contract.test.js dist/__tests__/pagination-cursor-param.test.js dist/__tests__/fiscal-tools.test.js dist/__tests__/time-tools.test.js dist/__tests__/recurring-tools.test.js dist/__tests__/team-tools.test.js dist/__tests__/d4b-hr-payroll-onboarding-tools.test.js dist/__tests__/audit-server-version.test.js dist/__tests__/openai-grouped-compose.test.js dist/__tests__/contract.test.js dist/__tests__/observability-redaction.test.js dist/__tests__/intelligence-duplicate-invoice.test.js dist/__tests__/get-envelope-unwrap-regression.test.js dist/__tests__/mutation-unwrap-and-schema-regression.test.js dist/__tests__/schema-envelope-guard.test.js dist/__tests__/demo-mode.test.js", | ||
| "start": "node dist/index.js", | ||
@@ -15,0 +15,0 @@ "postinstall": "node scripts/postinstall.js || true", |
+33
-1
@@ -42,3 +42,3 @@ <p align="center"> | ||
| > **Tool count:** npm `latest` (1.15.2) ships all 157 tools, same as the remote endpoint (`mcp.frihet.io`). | ||
| > **Tool count:** npm `latest` (1.15.3) ships all 157 tools, same as the remote endpoint (`mcp.frihet.io`). | ||
@@ -62,2 +62,16 @@ --- | ||
| ## Try it instantly (no signup) | ||
| Kick the tires with zero setup — no account, no API key: | ||
| ```bash | ||
| FRIHET_DEMO=1 npx -y @frihet/mcp-server | ||
| ``` | ||
| In demo mode the server answers from realistic **example fixtures** (Spanish invoices with IVA/IGIC, expenses, clients, products, a bank account, and more) — every record uses `demo_`-prefixed IDs and the server prints a `DEMO MODE` banner on startup. **Nothing is persisted** and no network call is ever made. Writes are simulated and fiscal actions (e-invoice, VeriFactu, TicketBAI, FACe, payroll) return a clearly-labeled simulation — never a real submission to any tax authority. | ||
| When you're ready for your real data, drop the flag and add your key ([app.frihet.io](https://app.frihet.io) → Settings → API keys). See [Install](#install) below. | ||
| --- | ||
| ## Install | ||
@@ -71,2 +85,20 @@ | ||
| ### Claude Code plugin (skill + MCP server in one install) | ||
| This repository is also a Claude Code plugin (`frihet-erp`): installing it wires up both the business-management skill and the MCP server. | ||
| ```bash | ||
| # Try it locally | ||
| claude --plugin-dir /path/to/frihet-mcp | ||
| ``` | ||
| Once available in the community marketplace: | ||
| ```text | ||
| /plugin marketplace add anthropics/claude-plugins-community | ||
| /plugin install frihet-erp@claude-community | ||
| ``` | ||
| Skill invocation: `/frihet-erp:frihet-mcp`. The bundled `.mcp.json` launches `@frihet/mcp-server` via `npx` — set `FRIHET_API_KEY` in your environment (get one at [app.frihet.io](https://app.frihet.io) → Settings → API keys). | ||
| ### Claude Code / Claude Desktop | ||
@@ -73,0 +105,0 @@ |
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
1800738
7.54%299
4.18%21735
7.44%808
4.12%28
3.7%