@frihet/mcp-server 1.15.1 → 1.15.3
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 +33 -1
- package/dist/__tests__/demo-mode.test.d.ts +11 -0
- package/dist/__tests__/demo-mode.test.d.ts.map +1 -0
- package/dist/__tests__/demo-mode.test.js +119 -0
- package/dist/__tests__/demo-mode.test.js.map +1 -0
- package/dist/__tests__/pagination-cursor-param.test.d.ts +27 -0
- package/dist/__tests__/pagination-cursor-param.test.d.ts.map +1 -0
- package/dist/__tests__/pagination-cursor-param.test.js +96 -0
- package/dist/__tests__/pagination-cursor-param.test.js.map +1 -0
- package/dist/client.d.ts +8 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +24 -16
- package/dist/client.js.map +1 -1
- package/dist/demo-client.d.ts +468 -0
- package/dist/demo-client.d.ts.map +1 -0
- package/dist/demo-client.js +554 -0
- package/dist/demo-client.js.map +1 -0
- package/dist/demo-fixtures.d.ts +63 -0
- package/dist/demo-fixtures.d.ts.map +1 -0
- package/dist/demo-fixtures.js +276 -0
- package/dist/demo-fixtures.js.map +1 -0
- package/dist/index.js +15 -3
- package/dist/index.js.map +1 -1
- package/dist/tools/einvoice.d.ts +1 -1
- package/dist/tools/shared.d.ts +4 -4
- package/package.json +2 -2
- package/scripts/no-public-leak.sh +16 -1
- package/scripts/test-openai-grouped-compose.mjs +1 -1
|
@@ -0,0 +1,554 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DemoFrihetClient — the `FRIHET_DEMO=1` seam.
|
|
3
|
+
*
|
|
4
|
+
* A drop-in IFrihetClient that makes ZERO network calls: it serves the canned
|
|
5
|
+
* PII-safe fixtures in demo-fixtures.ts. index.ts swaps this in for FrihetClient
|
|
6
|
+
* when demo mode is on, so tools (which stringify the client's return value)
|
|
7
|
+
* automatically propagate the `_demo`/`_demoNotice` banner without any change
|
|
8
|
+
* under src/tools/.
|
|
9
|
+
*
|
|
10
|
+
* Response contract (see SPEC-mcp-demo-mode.md option B/C):
|
|
11
|
+
* - reads/lists → fixture data stamped `_demo:true` (READ notice).
|
|
12
|
+
* - lists without fixtures → EMPTY PaginatedResponse, still stamped.
|
|
13
|
+
* - writes → plausible fixture-shaped object with a `demo_`-prefixed id
|
|
14
|
+
* (WRITE notice "…Simulated — not persisted.").
|
|
15
|
+
* - fiscal / e-invoice / email / payroll → SIMULATED labeled response, NEVER
|
|
16
|
+
* a real submission (FISCAL notice).
|
|
17
|
+
* - delete / remove methods → resolve void (interface return type forbids a
|
|
18
|
+
* stamp; this is the one accepted, documented gap).
|
|
19
|
+
*/
|
|
20
|
+
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";
|
|
21
|
+
export class DemoFrihetClient {
|
|
22
|
+
// ---------------------------------------------------------------- Invoices
|
|
23
|
+
async listInvoices(params) {
|
|
24
|
+
return demoPage(demoInvoices, params);
|
|
25
|
+
}
|
|
26
|
+
async getInvoice(id) {
|
|
27
|
+
return findOrStub(demoInvoices, id);
|
|
28
|
+
}
|
|
29
|
+
async createInvoice(data) {
|
|
30
|
+
const items = Array.isArray(data.items) ? data.items : [];
|
|
31
|
+
const subtotal = Math.round(items.reduce((s, i) => s + (i.quantity || 0) * (i.unitPrice || 0), 0) * 100) / 100;
|
|
32
|
+
const taxRate = typeof data.taxRate === "number" ? data.taxRate : 21;
|
|
33
|
+
const taxAmount = Math.round(subtotal * (taxRate / 100) * 100) / 100;
|
|
34
|
+
return simulateWrite("demo_inv", data, {
|
|
35
|
+
status: data.status ?? "draft",
|
|
36
|
+
subtotal,
|
|
37
|
+
taxAmount,
|
|
38
|
+
total: Math.round((subtotal + taxAmount) * 100) / 100,
|
|
39
|
+
currency: "EUR",
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
async updateInvoice(id, data) {
|
|
43
|
+
return simulateAction(id, { ...data });
|
|
44
|
+
}
|
|
45
|
+
async deleteInvoice(_id) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
async searchInvoices(query, params) {
|
|
49
|
+
const q = query.toLowerCase();
|
|
50
|
+
const matched = demoInvoices.filter((inv) => JSON.stringify(inv).toLowerCase().includes(q));
|
|
51
|
+
return demoPage(matched, params);
|
|
52
|
+
}
|
|
53
|
+
// ---------------------------------------------------------------- Expenses
|
|
54
|
+
async listExpenses(params) {
|
|
55
|
+
return demoPage(demoExpenses, params);
|
|
56
|
+
}
|
|
57
|
+
async getExpense(id) {
|
|
58
|
+
return findOrStub(demoExpenses, id);
|
|
59
|
+
}
|
|
60
|
+
async createExpense(data) {
|
|
61
|
+
return simulateWrite("demo_exp", data, { taxDeductible: data.taxDeductible ?? true });
|
|
62
|
+
}
|
|
63
|
+
async updateExpense(id, data) {
|
|
64
|
+
return simulateAction(id, { ...data });
|
|
65
|
+
}
|
|
66
|
+
async deleteExpense(_id) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// ---------------------------------------------------------------- Clients
|
|
70
|
+
async listClients(params) {
|
|
71
|
+
return demoPage(demoClients, params);
|
|
72
|
+
}
|
|
73
|
+
async getClient(id) {
|
|
74
|
+
return findOrStub(demoClients, id);
|
|
75
|
+
}
|
|
76
|
+
async createClient(data) {
|
|
77
|
+
return simulateWrite("demo_cli", data);
|
|
78
|
+
}
|
|
79
|
+
async updateClient(id, data) {
|
|
80
|
+
return simulateAction(id, { ...data });
|
|
81
|
+
}
|
|
82
|
+
async deleteClient(_id) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
// ---------------------------------------------------------------- Products
|
|
86
|
+
async listProducts(params) {
|
|
87
|
+
return demoPage(demoProducts, params);
|
|
88
|
+
}
|
|
89
|
+
async getProduct(id) {
|
|
90
|
+
return findOrStub(demoProducts, id);
|
|
91
|
+
}
|
|
92
|
+
async createProduct(data) {
|
|
93
|
+
return simulateWrite("demo_prd", data);
|
|
94
|
+
}
|
|
95
|
+
async updateProduct(id, data) {
|
|
96
|
+
return simulateAction(id, { ...data });
|
|
97
|
+
}
|
|
98
|
+
async deleteProduct(_id) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// ---------------------------------------------------------------- Quotes
|
|
102
|
+
async listQuotes(params) {
|
|
103
|
+
return demoPage(demoQuotes, params);
|
|
104
|
+
}
|
|
105
|
+
async getQuote(id) {
|
|
106
|
+
return findOrStub(demoQuotes, id);
|
|
107
|
+
}
|
|
108
|
+
async createQuote(data) {
|
|
109
|
+
return simulateWrite("demo_quo", data, { status: data.status ?? "draft" });
|
|
110
|
+
}
|
|
111
|
+
async updateQuote(id, data) {
|
|
112
|
+
return simulateAction(id, { ...data });
|
|
113
|
+
}
|
|
114
|
+
async deleteQuote(_id) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// ---------------------------------------------------------------- Vendors
|
|
118
|
+
async listVendors(params) {
|
|
119
|
+
return demoPage(demoVendors, params);
|
|
120
|
+
}
|
|
121
|
+
async getVendor(id) {
|
|
122
|
+
return findOrStub(demoVendors, id);
|
|
123
|
+
}
|
|
124
|
+
async createVendor(data) {
|
|
125
|
+
return simulateWrite("demo_ven", data);
|
|
126
|
+
}
|
|
127
|
+
async updateVendor(id, data) {
|
|
128
|
+
return simulateAction(id, { ...data });
|
|
129
|
+
}
|
|
130
|
+
async deleteVendor(_id) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
// ---------------------------------------------------------------- Invoice actions
|
|
134
|
+
async sendInvoice(id, to) {
|
|
135
|
+
// Email dispatch — simulated, no email is actually sent.
|
|
136
|
+
return { id, status: "sent", sentAt: DEMO_NOW, ...(to ? { to } : {}), ...FISCAL_STAMP };
|
|
137
|
+
}
|
|
138
|
+
async markInvoicePaid(id, paidDate) {
|
|
139
|
+
return simulateAction(id, { status: "paid", paidAt: paidDate ?? DEMO_NOW });
|
|
140
|
+
}
|
|
141
|
+
async getInvoicePdf(id) {
|
|
142
|
+
return { id, url: "https://app.frihet.io/demo/invoice.pdf", contentType: "application/pdf", ...READ_STAMP };
|
|
143
|
+
}
|
|
144
|
+
async getInvoiceEInvoice(invoiceId) {
|
|
145
|
+
return {
|
|
146
|
+
xml: `<?xml version="1.0" encoding="UTF-8"?>\n<Invoice><!-- DEMO example e-invoice for ${invoiceId} --></Invoice>`,
|
|
147
|
+
filename: `${invoiceId}.xml`,
|
|
148
|
+
format: "facturae",
|
|
149
|
+
...FISCAL_STAMP,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
async createCreditNote(invoiceId, data) {
|
|
153
|
+
return {
|
|
154
|
+
success: true,
|
|
155
|
+
creditNote: {
|
|
156
|
+
id: demoId("demo_cn"),
|
|
157
|
+
documentNumber: "R4-DEMO-001",
|
|
158
|
+
originalInvoiceId: invoiceId,
|
|
159
|
+
reason: data.reason,
|
|
160
|
+
fullCredit: data.fullCredit ?? true,
|
|
161
|
+
},
|
|
162
|
+
...FISCAL_STAMP,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
async applyLateFee(invoiceId, data) {
|
|
166
|
+
return simulateAction(invoiceId, { lateFeeApplied: true, amount: data?.amount ?? 45.0, daysOverdue: data?.daysOverdue ?? 30 });
|
|
167
|
+
}
|
|
168
|
+
// ---------------------------------------------------------------- Quote actions
|
|
169
|
+
async sendQuote(id, to) {
|
|
170
|
+
return { id, status: "sent", sentAt: DEMO_NOW, ...(to ? { to } : {}), ...FISCAL_STAMP };
|
|
171
|
+
}
|
|
172
|
+
// ---------------------------------------------------------------- Webhooks
|
|
173
|
+
async listWebhooks(params) {
|
|
174
|
+
return demoEmptyPage(params);
|
|
175
|
+
}
|
|
176
|
+
async getWebhook(id) {
|
|
177
|
+
return { id, ...READ_STAMP };
|
|
178
|
+
}
|
|
179
|
+
async createWebhook(data) {
|
|
180
|
+
return simulateWrite("demo_wh", data, { active: data.active ?? true });
|
|
181
|
+
}
|
|
182
|
+
async updateWebhook(id, data) {
|
|
183
|
+
return simulateAction(id, { ...data });
|
|
184
|
+
}
|
|
185
|
+
async deleteWebhook(_id) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
// ---------------------------------------------------------------- CRM: Contacts
|
|
189
|
+
async listClientContacts(_clientId, params) {
|
|
190
|
+
return demoEmptyPage(params);
|
|
191
|
+
}
|
|
192
|
+
async createClientContact(clientId, data) {
|
|
193
|
+
return simulateWrite("demo_contact", data, { clientId });
|
|
194
|
+
}
|
|
195
|
+
async deleteClientContact(_clientId, _contactId) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
// ---------------------------------------------------------------- CRM: Activities
|
|
199
|
+
async listClientActivities(_clientId, params) {
|
|
200
|
+
return demoEmptyPage(params);
|
|
201
|
+
}
|
|
202
|
+
async logClientActivity(clientId, data) {
|
|
203
|
+
return simulateWrite("demo_act", data, { clientId });
|
|
204
|
+
}
|
|
205
|
+
// ---------------------------------------------------------------- CRM: Notes
|
|
206
|
+
async listClientNotes(_clientId, params) {
|
|
207
|
+
return demoEmptyPage(params);
|
|
208
|
+
}
|
|
209
|
+
async createClientNote(clientId, data) {
|
|
210
|
+
return simulateWrite("demo_note", data, { clientId });
|
|
211
|
+
}
|
|
212
|
+
async deleteClientNote(_clientId, _noteId) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
// ---------------------------------------------------------------- Deposits
|
|
216
|
+
async listDeposits(params) {
|
|
217
|
+
return demoEmptyPage(params);
|
|
218
|
+
}
|
|
219
|
+
async getDeposit(id) {
|
|
220
|
+
return { id, ...READ_STAMP };
|
|
221
|
+
}
|
|
222
|
+
async createDeposit(data) {
|
|
223
|
+
return simulateWrite("demo_dep", data, { status: data.status ?? "held" });
|
|
224
|
+
}
|
|
225
|
+
async updateDeposit(id, data) {
|
|
226
|
+
return simulateAction(id, { ...data });
|
|
227
|
+
}
|
|
228
|
+
async deleteDeposit(_id) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
async applyDeposit(id, data) {
|
|
232
|
+
return simulateAction(id, { ...(data ?? {}), status: "applied" });
|
|
233
|
+
}
|
|
234
|
+
async refundDeposit(id, data) {
|
|
235
|
+
return simulateAction(id, { ...(data ?? {}), status: "refunded" });
|
|
236
|
+
}
|
|
237
|
+
// ---------------------------------------------------------------- Intelligence
|
|
238
|
+
async getBusinessContext() {
|
|
239
|
+
return {
|
|
240
|
+
businessName: "Demo Studio SL",
|
|
241
|
+
fiscalRegime: "autonomo",
|
|
242
|
+
currency: "EUR",
|
|
243
|
+
country: "ES",
|
|
244
|
+
metrics: { openInvoices: 4, overdueInvoices: 1, totalClients: demoClients.length, totalProducts: demoProducts.length },
|
|
245
|
+
...READ_STAMP,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
async getMonthlySummary(month) {
|
|
249
|
+
return {
|
|
250
|
+
month: month ?? "2026-07",
|
|
251
|
+
revenue: 3960.4,
|
|
252
|
+
expenses: 405.6,
|
|
253
|
+
net: 3554.8,
|
|
254
|
+
invoiceCount: 5,
|
|
255
|
+
expenseCount: demoExpenses.length,
|
|
256
|
+
currency: "EUR",
|
|
257
|
+
...READ_STAMP,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
async getQuarterlyTaxes(quarter) {
|
|
261
|
+
return {
|
|
262
|
+
quarter: quarter ?? "2026-Q2",
|
|
263
|
+
modelo303: { cuotaRepercutida: 1620.0, cuotaDeducible: 85.15, resultado: 1534.85 },
|
|
264
|
+
modelo130: { rendimientoNeto: 8200.0, pagoFraccionado: 1640.0 },
|
|
265
|
+
currency: "EUR",
|
|
266
|
+
readonly: true,
|
|
267
|
+
...READ_STAMP,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
// ---------------------------------------------------------------- E-Invoicing (simulated fiscal)
|
|
271
|
+
async sendEInvoice(_params) {
|
|
272
|
+
return { workflowRunId: demoId("demo_wf"), status: "queued", estimatedCompletionSec: 8, ...FISCAL_STAMP };
|
|
273
|
+
}
|
|
274
|
+
async getEInvoiceStatus(_workflowRunId) {
|
|
275
|
+
return { status: "succeeded", step: "completed", ackId: "DEMO-ACK-001", ...FISCAL_STAMP };
|
|
276
|
+
}
|
|
277
|
+
async validateEInvoiceXml(_params) {
|
|
278
|
+
return { valid: true, errors: [], validator: "xsd", durationMs: 12, ...FISCAL_STAMP };
|
|
279
|
+
}
|
|
280
|
+
async exportDatev(params) {
|
|
281
|
+
return { fileUrl: "https://app.frihet.io/demo/datev.csv", filename: "demo-datev.csv", rowCount: 24, fiscalPeriod: `${params.periodStart}..${params.periodEnd}`, encoding: "cp1252", ...FISCAL_STAMP };
|
|
282
|
+
}
|
|
283
|
+
async exportEInvoice(params) {
|
|
284
|
+
return { xmlUrl: "https://app.frihet.io/demo/einvoice.xml", filename: `${params.invoiceId}.xml`, format: params.format, signed: params.signed ?? false, ...FISCAL_STAMP };
|
|
285
|
+
}
|
|
286
|
+
async faceSubmit(params) {
|
|
287
|
+
return { registroFACe: "DEMO-FACE-0001", status: "submitted", submittedAt: DEMO_NOW, mode: params.mode, ...FISCAL_STAMP };
|
|
288
|
+
}
|
|
289
|
+
async faceStatus(_params) {
|
|
290
|
+
return { registroFACe: "DEMO-FACE-0001", statusCode: "1200", statusDescription: "Registrada (demo)", ...FISCAL_STAMP };
|
|
291
|
+
}
|
|
292
|
+
async ticketbaiSubmit(params) {
|
|
293
|
+
return { tbaiId: "DEMO-TBAI-0001", territory: "bizkaia", status: "submitted", sandbox: params.sandbox, qrUrl: "https://app.frihet.io/demo/tbai-qr.png", ...FISCAL_STAMP };
|
|
294
|
+
}
|
|
295
|
+
async ticketbaiStatus(_params) {
|
|
296
|
+
return { tbaiId: "DEMO-TBAI-0001", territory: "bizkaia", status: "accepted", ...FISCAL_STAMP };
|
|
297
|
+
}
|
|
298
|
+
// ---------------------------------------------------------------- Stay
|
|
299
|
+
async listReservations(params) {
|
|
300
|
+
return demoEmptyPage(params);
|
|
301
|
+
}
|
|
302
|
+
async getReservation(id) {
|
|
303
|
+
return { id, ...READ_STAMP };
|
|
304
|
+
}
|
|
305
|
+
async createReservation(data) {
|
|
306
|
+
return simulateWrite("demo_res", data, { status: data.status ?? "confirmed" });
|
|
307
|
+
}
|
|
308
|
+
async listProperties(params) {
|
|
309
|
+
return demoEmptyPage(params);
|
|
310
|
+
}
|
|
311
|
+
async syncChannel(channelId, direction) {
|
|
312
|
+
return simulateAction(channelId, { direction, synced: 0 });
|
|
313
|
+
}
|
|
314
|
+
// ---------------------------------------------------------------- POS
|
|
315
|
+
async listTerminals(params) {
|
|
316
|
+
return demoEmptyPage(params);
|
|
317
|
+
}
|
|
318
|
+
async getSale(id) {
|
|
319
|
+
return { id, ...READ_STAMP };
|
|
320
|
+
}
|
|
321
|
+
async listSales(params) {
|
|
322
|
+
return demoEmptyPage(params);
|
|
323
|
+
}
|
|
324
|
+
async refundSale(id, data) {
|
|
325
|
+
return simulateAction(id, { status: "refunded", refundedAmountCents: data?.amountCents ?? 0 });
|
|
326
|
+
}
|
|
327
|
+
// ---------------------------------------------------------------- Kitchen
|
|
328
|
+
async listKitchenTickets(params) {
|
|
329
|
+
return demoEmptyPage(params);
|
|
330
|
+
}
|
|
331
|
+
async getKitchenTicket(id) {
|
|
332
|
+
return { id, ...READ_STAMP };
|
|
333
|
+
}
|
|
334
|
+
async updateKitchenTicket(id, data) {
|
|
335
|
+
return simulateAction(id, { ...data });
|
|
336
|
+
}
|
|
337
|
+
async listKitchenStations(params) {
|
|
338
|
+
return demoEmptyPage(params);
|
|
339
|
+
}
|
|
340
|
+
async listMenuItems(params) {
|
|
341
|
+
return demoEmptyPage(params);
|
|
342
|
+
}
|
|
343
|
+
// ---------------------------------------------------------------- Banking
|
|
344
|
+
async listBankAccounts(params) {
|
|
345
|
+
return demoPage(demoBankAccounts, params);
|
|
346
|
+
}
|
|
347
|
+
async getBankAccount(id) {
|
|
348
|
+
return findOrStub(demoBankAccounts, id);
|
|
349
|
+
}
|
|
350
|
+
async listTransactions(params) {
|
|
351
|
+
return demoPage(demoTransactions, params);
|
|
352
|
+
}
|
|
353
|
+
async categorizeTransaction(id, data) {
|
|
354
|
+
return simulateAction(id, { category: data.category, ...(data.notes ? { notes: data.notes } : {}) });
|
|
355
|
+
}
|
|
356
|
+
async matchTransactionToDocument(transactionId, data) {
|
|
357
|
+
return simulateAction(transactionId, { matchedDocId: data.documentId, documentType: data.documentType });
|
|
358
|
+
}
|
|
359
|
+
// ---------------------------------------------------------------- Fiscal (simulated / read summaries)
|
|
360
|
+
async getFiscalModeloSummary(modeloCode, period) {
|
|
361
|
+
return { model: modeloCode, period: period ?? "2026-Q2", readonly: true, summary: { totalRevenue: 3960.4, totalExpenses: 405.6 }, ...FISCAL_STAMP };
|
|
362
|
+
}
|
|
363
|
+
async getVerifactuStatus(invoiceId) {
|
|
364
|
+
return { invoiceId, status: "accepted", accepted: true, submittedAt: DEMO_NOW, ...FISCAL_STAMP };
|
|
365
|
+
}
|
|
366
|
+
async resubmitVerifactu(invoiceId) {
|
|
367
|
+
return { invoiceId, status: "queued", ...FISCAL_STAMP };
|
|
368
|
+
}
|
|
369
|
+
async getTicketbaiStatus(invoiceId) {
|
|
370
|
+
return { invoiceId, status: "success", province: "bizkaia", ...FISCAL_STAMP };
|
|
371
|
+
}
|
|
372
|
+
// ---------------------------------------------------------------- Time tracking
|
|
373
|
+
async listTimeEntries(params) {
|
|
374
|
+
return demoEmptyPage(params);
|
|
375
|
+
}
|
|
376
|
+
async getTimeEntry(id) {
|
|
377
|
+
return { id, ...READ_STAMP };
|
|
378
|
+
}
|
|
379
|
+
async createTimeEntry(data) {
|
|
380
|
+
return simulateWrite("demo_time", data);
|
|
381
|
+
}
|
|
382
|
+
async updateTimeEntry(id, data) {
|
|
383
|
+
return simulateAction(id, { ...data });
|
|
384
|
+
}
|
|
385
|
+
async deleteTimeEntry(_id) {
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
async getTimeSummary(params) {
|
|
389
|
+
return { from: params.from, to: params.to, totalHours: 0, billableHours: 0, nonBillableHours: 0, groups: [], ...READ_STAMP };
|
|
390
|
+
}
|
|
391
|
+
// ---------------------------------------------------------------- Recurring invoices
|
|
392
|
+
async listRecurringInvoices(params) {
|
|
393
|
+
return demoEmptyPage(params);
|
|
394
|
+
}
|
|
395
|
+
async getRecurringInvoice(id) {
|
|
396
|
+
return { id, ...READ_STAMP };
|
|
397
|
+
}
|
|
398
|
+
async createRecurringInvoice(data) {
|
|
399
|
+
return simulateWrite("demo_rec", data, { status: "active" });
|
|
400
|
+
}
|
|
401
|
+
async updateRecurringInvoice(id, data) {
|
|
402
|
+
return simulateAction(id, { ...data });
|
|
403
|
+
}
|
|
404
|
+
async pauseRecurringInvoice(id) {
|
|
405
|
+
return simulateAction(id, { status: "paused" });
|
|
406
|
+
}
|
|
407
|
+
async resumeRecurringInvoice(id) {
|
|
408
|
+
return simulateAction(id, { status: "active" });
|
|
409
|
+
}
|
|
410
|
+
async deleteRecurringInvoice(_id) {
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
async runRecurringNow(templateId, options) {
|
|
414
|
+
return simulateAction(templateId, { generatedInvoiceId: demoId("demo_inv"), draftOnly: options?.draftOnly ?? true });
|
|
415
|
+
}
|
|
416
|
+
// ---------------------------------------------------------------- Team management
|
|
417
|
+
async listTeamMembers(params) {
|
|
418
|
+
return demoEmptyPage(params);
|
|
419
|
+
}
|
|
420
|
+
async inviteTeamMember(data) {
|
|
421
|
+
return simulateWrite("demo_member", { email: data.email, role: data.role, ...(data.name ? { name: data.name } : {}) }, { status: "pending" });
|
|
422
|
+
}
|
|
423
|
+
async updateTeamMemberRole(memberId, role) {
|
|
424
|
+
return simulateAction(memberId, { role });
|
|
425
|
+
}
|
|
426
|
+
async removeTeamMember(_memberId) {
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
// ---------------------------------------------------------------- Audit GL
|
|
430
|
+
async approveGLEntry(entryId, notes) {
|
|
431
|
+
return simulateAction(entryId, { status: "approved", ...(notes ? { notes } : {}) });
|
|
432
|
+
}
|
|
433
|
+
async rejectGLEntry(entryId, reason) {
|
|
434
|
+
return simulateAction(entryId, { status: "rejected", reason });
|
|
435
|
+
}
|
|
436
|
+
async getGLEntryAuditLog(entryId) {
|
|
437
|
+
return { entryId, log: [], ...READ_STAMP };
|
|
438
|
+
}
|
|
439
|
+
// ---------------------------------------------------------------- White-label portal domain
|
|
440
|
+
async addCustomPortalDomain(data) {
|
|
441
|
+
return simulateWrite("demo_domain", { domain: data.domain }, { status: "pending_verification" });
|
|
442
|
+
}
|
|
443
|
+
async verifyCustomPortalDomain(data) {
|
|
444
|
+
return { domain: data.domain, verified: true, ...FISCAL_STAMP };
|
|
445
|
+
}
|
|
446
|
+
async removeCustomPortalDomain(data) {
|
|
447
|
+
return { domain: data.domain, removed: true, ...READ_STAMP };
|
|
448
|
+
}
|
|
449
|
+
// ---------------------------------------------------------------- Self-onboard + VIES
|
|
450
|
+
async generatePortalOnboardLink(data) {
|
|
451
|
+
return { email: data.email, url: "https://app.frihet.io/demo/onboard/DEMO-TOKEN", expiresInHours: data.expiresInHours ?? 72, ...READ_STAMP };
|
|
452
|
+
}
|
|
453
|
+
async lookupTaxIdViaVIES(data) {
|
|
454
|
+
return { vatNumber: data.vatNumber, countryCode: data.countryCode, valid: true, name: "Demo EU Company", ...FISCAL_STAMP };
|
|
455
|
+
}
|
|
456
|
+
// ---------------------------------------------------------------- IGIC
|
|
457
|
+
async getIgicModeloSummary(modeloCode, params) {
|
|
458
|
+
return { model: modeloCode, year: params?.year ?? "2026", period: params?.period ?? "2T", readonly: true, ...FISCAL_STAMP };
|
|
459
|
+
}
|
|
460
|
+
async calculateAiem(data) {
|
|
461
|
+
return { ncCode: data.ncCode, base: data.amount, aiemRate: 5, aiemAmount: Math.round(data.amount * 0.05 * 100) / 100, ...FISCAL_STAMP };
|
|
462
|
+
}
|
|
463
|
+
// ---------------------------------------------------------------- Impuesto Sociedades
|
|
464
|
+
async getISSummary(modeloCode, params) {
|
|
465
|
+
return { model: modeloCode, year: params?.year ?? "2026", installment: params?.installment ?? "1P", readonly: true, ...FISCAL_STAMP };
|
|
466
|
+
}
|
|
467
|
+
// ---------------------------------------------------------------- Bank rules
|
|
468
|
+
async listBankRules(params) {
|
|
469
|
+
return demoEmptyPage(params);
|
|
470
|
+
}
|
|
471
|
+
async createBankRule(data) {
|
|
472
|
+
return simulateWrite("demo_rule", { name: data.name, conditions: data.conditions, actions: data.actions }, { isActive: data.isActive ?? true });
|
|
473
|
+
}
|
|
474
|
+
// ---------------------------------------------------------------- Gestoria
|
|
475
|
+
async sendGestoriaMessage(data) {
|
|
476
|
+
return simulateWrite("demo_gmsg", { parentType: data.parentType, parentId: data.parentId, body: data.body });
|
|
477
|
+
}
|
|
478
|
+
async listGestoriaMessages(_params) {
|
|
479
|
+
return { messages: [], hasMore: false, ...READ_STAMP };
|
|
480
|
+
}
|
|
481
|
+
async createGestoriaTemplate(data) {
|
|
482
|
+
return { templateId: demoId("demo_tpl"), ...FISCAL_STAMP };
|
|
483
|
+
}
|
|
484
|
+
async bulkSendGestoriaTemplate(data) {
|
|
485
|
+
return { success: data.clientWorkspaceIds.length, failed: [], ...FISCAL_STAMP };
|
|
486
|
+
}
|
|
487
|
+
async getGestoriaAgingConsolidated(_params) {
|
|
488
|
+
return { totals: { current: 0, "30_60": 0, "60_90": 0, "90_plus": 0 }, byWorkspace: [], topOverdue: [], generatedAt: DEMO_NOW, ...READ_STAMP };
|
|
489
|
+
}
|
|
490
|
+
// ---------------------------------------------------------------- HR
|
|
491
|
+
async listLeaves(params) {
|
|
492
|
+
return demoEmptyPage(params);
|
|
493
|
+
}
|
|
494
|
+
async createLeaveRequest(data) {
|
|
495
|
+
return simulateWrite("demo_leave", { ...data }, { status: "pending" });
|
|
496
|
+
}
|
|
497
|
+
async approveLeave(leaveId, data) {
|
|
498
|
+
return simulateAction(leaveId, { status: "approved", ...(data?.reason ? { decisionReason: data.reason } : {}) });
|
|
499
|
+
}
|
|
500
|
+
async rejectLeave(leaveId, data) {
|
|
501
|
+
return simulateAction(leaveId, { status: "rejected", decisionReason: data.reason });
|
|
502
|
+
}
|
|
503
|
+
async cancelLeave(leaveId) {
|
|
504
|
+
return simulateAction(leaveId, { status: "cancelled" });
|
|
505
|
+
}
|
|
506
|
+
async attendanceClockIn(data) {
|
|
507
|
+
return simulateWrite("demo_att", { employeeId: data.employeeId, ...(data.mood ? { mood: data.mood } : {}), ...(data.location ? { location: data.location } : {}) }, { status: "open", clockInAt: DEMO_NOW });
|
|
508
|
+
}
|
|
509
|
+
async attendanceClockOut(entryId) {
|
|
510
|
+
return simulateAction(entryId, { status: "closed", clockOutAt: DEMO_NOW });
|
|
511
|
+
}
|
|
512
|
+
async getOvertimeReport(params) {
|
|
513
|
+
return { period: params.period, totalRegularHours: 0, totalOvertimeHours: 0, byEmployee: [], generatedAt: DEMO_NOW, ...READ_STAMP };
|
|
514
|
+
}
|
|
515
|
+
async listAnomalies(params) {
|
|
516
|
+
return demoEmptyPage(params);
|
|
517
|
+
}
|
|
518
|
+
// ---------------------------------------------------------------- Webhook test
|
|
519
|
+
async testWebhook(id, data) {
|
|
520
|
+
return { webhookId: id, delivered: true, statusCode: 200, responseTimeMs: 42, eventType: data?.eventType ?? "ping", attemptedAt: DEMO_NOW, ...FISCAL_STAMP };
|
|
521
|
+
}
|
|
522
|
+
// ---------------------------------------------------------------- Payroll (simulated fiscal)
|
|
523
|
+
async exportPayroll(params) {
|
|
524
|
+
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 };
|
|
525
|
+
}
|
|
526
|
+
async getPayrollChecklist(params) {
|
|
527
|
+
return { month: params.month, totalEmployees: 0, readyEmployees: 0, missingEmployees: 0, employees: [], generatedAt: DEMO_NOW, ...FISCAL_STAMP };
|
|
528
|
+
}
|
|
529
|
+
// ---------------------------------------------------------------- Onboarding
|
|
530
|
+
async getOnboardingStatus() {
|
|
531
|
+
return { workspaceId: "demo_ws_001", persona: "autonomo", completedSteps: ["profile"], pendingSteps: ["bank", "invoice"], percentComplete: 33, startedAt: DEMO_NOW, ...READ_STAMP };
|
|
532
|
+
}
|
|
533
|
+
async setOnboardingPersona(data) {
|
|
534
|
+
return { workspaceId: "demo_ws_001", persona: data.persona, updatedAt: DEMO_NOW, ...READ_STAMP };
|
|
535
|
+
}
|
|
536
|
+
// ---------------------------------------------------------------- Permissions
|
|
537
|
+
async getPermissionsMatrix() {
|
|
538
|
+
return { roles: [{ role: "owner", permissions: ["*"] }], resources: ["invoices", "expenses", "clients"], generatedAt: DEMO_NOW, ...READ_STAMP };
|
|
539
|
+
}
|
|
540
|
+
async getMyPermissions() {
|
|
541
|
+
return { userId: "demo_user_001", role: "owner", permissions: ["*"], workspaceId: "demo_ws_001", ...READ_STAMP };
|
|
542
|
+
}
|
|
543
|
+
// ---------------------------------------------------------------- Period close
|
|
544
|
+
async getCurrentPeriod(params) {
|
|
545
|
+
return { id: params?.periodId ?? "demo_period_2026_07", type: "monthly", status: "open", startDate: "2026-07-01", endDate: "2026-07-31", ...READ_STAMP };
|
|
546
|
+
}
|
|
547
|
+
async closePeriod(data) {
|
|
548
|
+
return simulateWrite("demo_period", { type: data.type }, { status: "closed", closedAt: DEMO_NOW });
|
|
549
|
+
}
|
|
550
|
+
async reopenPeriod(data) {
|
|
551
|
+
return simulateAction(data.periodId, { status: "reopened", reopenReason: data.reason });
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
//# sourceMappingURL=demo-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo-client.js","sourceRoot":"","sources":["../src/demo-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Demo-mode fixtures for the Frihet MCP server (`FRIHET_DEMO=1`).
|
|
3
|
+
*
|
|
4
|
+
* These are the canned, PII-SAFE example datasets served by DemoFrihetClient
|
|
5
|
+
* when the server runs without an API key. NOTHING here is real customer data:
|
|
6
|
+
* - NIF/CIF are AEAT example patterns (B12345678, X9999999X).
|
|
7
|
+
* - IBAN is the ECBS/AEAT test IBAN (ES9121000418450200051332).
|
|
8
|
+
* - Every email is under @example.com (guarded by demo-mode.test.ts).
|
|
9
|
+
* - Business names are generic, invented ES/EU companies.
|
|
10
|
+
*
|
|
11
|
+
* Amounts follow the same field shape the real /v1 REST API returns (see
|
|
12
|
+
* src/tools/*.ts output schemas + src/client-interface.ts return types), so an
|
|
13
|
+
* agent evaluating the demo sees exactly the response shape it would get live.
|
|
14
|
+
*/
|
|
15
|
+
import type { PaginatedResponse } from "./types.js";
|
|
16
|
+
/** Marker fields stamped on every demo response's top-level object. */
|
|
17
|
+
export interface DemoStamp {
|
|
18
|
+
_demo: true;
|
|
19
|
+
_demoNotice: string;
|
|
20
|
+
}
|
|
21
|
+
/** Read/get/list responses. */
|
|
22
|
+
export declare const READ_STAMP: DemoStamp;
|
|
23
|
+
/** Simulated writes (create/update/apply/mark/etc.). */
|
|
24
|
+
export declare const WRITE_STAMP: DemoStamp;
|
|
25
|
+
/** Fiscal / e-invoice / email / payroll actions — NEVER a real submission. */
|
|
26
|
+
export declare const FISCAL_STAMP: DemoStamp;
|
|
27
|
+
/** Empty surfaces (no dedicated fixtures yet) still carry a demo stamp. */
|
|
28
|
+
export declare const EMPTY_STAMP: DemoStamp;
|
|
29
|
+
/** Frozen timestamp so demo responses are deterministic across calls. */
|
|
30
|
+
export declare const DEMO_NOW = "2026-07-15T10:00:00.000Z";
|
|
31
|
+
/** Test IBAN (ECBS/AEAT example — never a real account). */
|
|
32
|
+
export declare const DEMO_TEST_IBAN = "ES9121000418450200051332";
|
|
33
|
+
export type DemoPaginated = PaginatedResponse<Record<string, unknown>> & DemoStamp;
|
|
34
|
+
/** Wrap a fixture array in a stamped PaginatedResponse. */
|
|
35
|
+
export declare function demoPage(data: Record<string, unknown>[], params?: {
|
|
36
|
+
limit?: number;
|
|
37
|
+
offset?: number;
|
|
38
|
+
}): DemoPaginated;
|
|
39
|
+
/** Empty stamped PaginatedResponse for surfaces without dedicated fixtures. */
|
|
40
|
+
export declare function demoEmptyPage(params?: {
|
|
41
|
+
limit?: number;
|
|
42
|
+
offset?: number;
|
|
43
|
+
}): DemoPaginated;
|
|
44
|
+
export declare const demoClients: Record<string, unknown>[];
|
|
45
|
+
export declare const demoProducts: Record<string, unknown>[];
|
|
46
|
+
export declare const demoInvoices: Record<string, unknown>[];
|
|
47
|
+
export declare const demoExpenses: Record<string, unknown>[];
|
|
48
|
+
export declare const demoQuotes: Record<string, unknown>[];
|
|
49
|
+
export declare const demoVendors: Record<string, unknown>[];
|
|
50
|
+
export declare const demoBankAccounts: Record<string, unknown>[];
|
|
51
|
+
export declare const demoTransactions: Record<string, unknown>[];
|
|
52
|
+
/** Find a fixture by id, or synthesize a minimal stamped object with that id. */
|
|
53
|
+
export declare function findOrStub(collection: Record<string, unknown>[], id: string): Record<string, unknown> & DemoStamp;
|
|
54
|
+
/** Deterministic-ish demo id (no network, no clock dependency). */
|
|
55
|
+
export declare function demoId(prefix: string): string;
|
|
56
|
+
/**
|
|
57
|
+
* Simulate a create/update: echo the input, stamp a fabricated demo id +
|
|
58
|
+
* timestamps + the WRITE banner. Never persists, never touches the network.
|
|
59
|
+
*/
|
|
60
|
+
export declare function simulateWrite(idPrefix: string, input: Record<string, unknown>, extra?: Record<string, unknown>): Record<string, unknown> & DemoStamp;
|
|
61
|
+
/** Simulate an action on an existing entity (keeps the caller-supplied id). */
|
|
62
|
+
export declare function simulateAction(id: string, fields?: Record<string, unknown>): Record<string, unknown> & DemoStamp;
|
|
63
|
+
//# sourceMappingURL=demo-fixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"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"}
|