noxctl 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/README.md +149 -6
  2. package/dist/auth.d.ts +7 -3
  3. package/dist/auth.d.ts.map +1 -1
  4. package/dist/auth.js +24 -7
  5. package/dist/auth.js.map +1 -1
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +1118 -95
  8. package/dist/cli.js.map +1 -1
  9. package/dist/completions.d.ts +13 -0
  10. package/dist/completions.d.ts.map +1 -0
  11. package/dist/completions.js +150 -0
  12. package/dist/completions.js.map +1 -0
  13. package/dist/credentials-store.d.ts.map +1 -1
  14. package/dist/credentials-store.js +45 -16
  15. package/dist/credentials-store.js.map +1 -1
  16. package/dist/date-periods.d.ts +14 -0
  17. package/dist/date-periods.d.ts.map +1 -0
  18. package/dist/date-periods.js +103 -0
  19. package/dist/date-periods.js.map +1 -0
  20. package/dist/formatter.d.ts +11 -2
  21. package/dist/formatter.d.ts.map +1 -1
  22. package/dist/formatter.js +27 -4
  23. package/dist/formatter.js.map +1 -1
  24. package/dist/fortnox-client.d.ts +1 -0
  25. package/dist/fortnox-client.d.ts.map +1 -1
  26. package/dist/fortnox-client.js +26 -3
  27. package/dist/fortnox-client.js.map +1 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +17 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/keychain-target.d.ts +32 -0
  32. package/dist/keychain-target.d.ts.map +1 -0
  33. package/dist/keychain-target.js +349 -0
  34. package/dist/keychain-target.js.map +1 -0
  35. package/dist/operations/absencetransactions.d.ts +21 -0
  36. package/dist/operations/absencetransactions.d.ts.map +1 -0
  37. package/dist/operations/absencetransactions.js +36 -0
  38. package/dist/operations/absencetransactions.js.map +1 -0
  39. package/dist/operations/analytics.d.ts +84 -0
  40. package/dist/operations/analytics.d.ts.map +1 -0
  41. package/dist/operations/analytics.js +154 -0
  42. package/dist/operations/analytics.js.map +1 -0
  43. package/dist/operations/attendancetransactions.d.ts +21 -0
  44. package/dist/operations/attendancetransactions.d.ts.map +1 -0
  45. package/dist/operations/attendancetransactions.js +40 -0
  46. package/dist/operations/attendancetransactions.js.map +1 -0
  47. package/dist/operations/contracts.d.ts +23 -0
  48. package/dist/operations/contracts.d.ts.map +1 -0
  49. package/dist/operations/contracts.js +52 -0
  50. package/dist/operations/contracts.js.map +1 -0
  51. package/dist/operations/customers.d.ts.map +1 -1
  52. package/dist/operations/customers.js +12 -2
  53. package/dist/operations/customers.js.map +1 -1
  54. package/dist/operations/employees.d.ts +19 -0
  55. package/dist/operations/employees.d.ts.map +1 -0
  56. package/dist/operations/employees.js +34 -0
  57. package/dist/operations/employees.js.map +1 -0
  58. package/dist/operations/financial-years.d.ts +16 -0
  59. package/dist/operations/financial-years.d.ts.map +1 -0
  60. package/dist/operations/financial-years.js +32 -0
  61. package/dist/operations/financial-years.js.map +1 -0
  62. package/dist/operations/salarytransactions.d.ts +21 -0
  63. package/dist/operations/salarytransactions.d.ts.map +1 -0
  64. package/dist/operations/salarytransactions.js +35 -0
  65. package/dist/operations/salarytransactions.js.map +1 -0
  66. package/dist/operations/scheduletimes.d.ts +4 -0
  67. package/dist/operations/scheduletimes.d.ts.map +1 -0
  68. package/dist/operations/scheduletimes.js +24 -0
  69. package/dist/operations/scheduletimes.js.map +1 -0
  70. package/dist/operations/vouchers.d.ts +15 -0
  71. package/dist/operations/vouchers.d.ts.map +1 -1
  72. package/dist/operations/vouchers.js +97 -0
  73. package/dist/operations/vouchers.js.map +1 -1
  74. package/dist/tools/absencetransactions.d.ts +3 -0
  75. package/dist/tools/absencetransactions.d.ts.map +1 -0
  76. package/dist/tools/absencetransactions.js +66 -0
  77. package/dist/tools/absencetransactions.js.map +1 -0
  78. package/dist/tools/analytics.d.ts +3 -0
  79. package/dist/tools/analytics.d.ts.map +1 -0
  80. package/dist/tools/analytics.js +52 -0
  81. package/dist/tools/analytics.js.map +1 -0
  82. package/dist/tools/attendancetransactions.d.ts +3 -0
  83. package/dist/tools/attendancetransactions.d.ts.map +1 -0
  84. package/dist/tools/attendancetransactions.js +63 -0
  85. package/dist/tools/attendancetransactions.js.map +1 -0
  86. package/dist/tools/bookkeeping.d.ts.map +1 -1
  87. package/dist/tools/bookkeeping.js +38 -2
  88. package/dist/tools/bookkeeping.js.map +1 -1
  89. package/dist/tools/contracts.d.ts +3 -0
  90. package/dist/tools/contracts.d.ts.map +1 -0
  91. package/dist/tools/contracts.js +136 -0
  92. package/dist/tools/contracts.js.map +1 -0
  93. package/dist/tools/employees.d.ts +3 -0
  94. package/dist/tools/employees.d.ts.map +1 -0
  95. package/dist/tools/employees.js +107 -0
  96. package/dist/tools/employees.js.map +1 -0
  97. package/dist/tools/financial-years.d.ts +3 -0
  98. package/dist/tools/financial-years.d.ts.map +1 -0
  99. package/dist/tools/financial-years.js +33 -0
  100. package/dist/tools/financial-years.js.map +1 -0
  101. package/dist/tools/salarytransactions.d.ts +3 -0
  102. package/dist/tools/salarytransactions.d.ts.map +1 -0
  103. package/dist/tools/salarytransactions.js +70 -0
  104. package/dist/tools/salarytransactions.js.map +1 -0
  105. package/dist/tools/scheduletimes.d.ts +3 -0
  106. package/dist/tools/scheduletimes.d.ts.map +1 -0
  107. package/dist/tools/scheduletimes.js +62 -0
  108. package/dist/tools/scheduletimes.js.map +1 -0
  109. package/dist/tools/status.d.ts.map +1 -1
  110. package/dist/tools/status.js +10 -3
  111. package/dist/tools/status.js.map +1 -1
  112. package/dist/views.d.ts +17 -0
  113. package/dist/views.d.ts.map +1 -1
  114. package/dist/views.js +154 -0
  115. package/dist/views.js.map +1 -1
  116. package/package.json +2 -1
@@ -0,0 +1,136 @@
1
+ import { z } from 'zod';
2
+ import { listContracts, getContract, createContract, updateContract, finishContract, createInvoiceFromContract, increaseInvoiceCount, } from '../operations/contracts.js';
3
+ import { contractListColumns, contractDetailColumns, invoiceDetailColumns } from '../views.js';
4
+ import { detailResponse, dryRunResponse, listResponse, requireConfirmation, } from '../tool-output.js';
5
+ const invoiceRowSchema = z
6
+ .object({
7
+ ArticleNumber: z.string().optional().describe('Artikelnummer'),
8
+ Description: z.string().optional().describe('Beskrivning av raden'),
9
+ DeliveredQuantity: z.number().optional().describe('Antal'),
10
+ Price: z.number().optional().describe('Pris per enhet'),
11
+ AccountNumber: z.number().optional().describe('Bokföringskonto'),
12
+ VAT: z.number().optional().describe('Momssats (%)'),
13
+ Discount: z.number().optional().describe('Rabatt'),
14
+ })
15
+ .passthrough();
16
+ export function registerContractTools(server) {
17
+ server.tool('fortnox_list_contracts', 'Lista avtal (återkommande fakturering) i Fortnox. Returnerar: DocumentNumber, CustomerName, PeriodStart, PeriodEnd, InvoiceInterval, Continuous, Total.', {
18
+ filter: z
19
+ .enum(['active', 'inactive', 'finished'])
20
+ .optional()
21
+ .describe('Filtrera på avtalsstatus'),
22
+ page: z.number().optional().describe('Sidnummer (default 1)'),
23
+ limit: z.number().optional().describe('Antal per sida (default 100, max 500)'),
24
+ all: z.boolean().optional().describe('Hämta alla sidor (ignorerar page/limit)'),
25
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
26
+ }, async ({ filter, page, limit, all, includeRaw }) => {
27
+ const data = await listContracts({ filter, page, limit, all });
28
+ return listResponse(data.Contracts ?? [], contractListColumns, data, data.MetaInformation, includeRaw);
29
+ });
30
+ server.tool('fortnox_get_contract', 'Hämta ett enskilt avtal från Fortnox, inklusive fakturarader.', {
31
+ documentNumber: z.string().describe('Avtalets dokumentnummer'),
32
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
33
+ }, async ({ documentNumber, includeRaw }) => {
34
+ const data = await getContract(documentNumber);
35
+ return detailResponse(data, contractDetailColumns, data, includeRaw);
36
+ });
37
+ server.tool('fortnox_create_contract', 'Skapa ett nytt avtal i Fortnox för återkommande fakturering. Fakturor skapas automatiskt enligt InvoiceInterval.', {
38
+ CustomerNumber: z.string().describe('Kundnummer'),
39
+ InvoiceRows: z.array(invoiceRowSchema).describe('Fakturarader'),
40
+ PeriodStart: z.string().optional().describe('Avtalsperiodens start (YYYY-MM-DD)'),
41
+ PeriodEnd: z.string().optional().describe('Avtalsperiodens slut (YYYY-MM-DD)'),
42
+ InvoiceInterval: z
43
+ .number()
44
+ .optional()
45
+ .describe('Faktureringsintervall i månader (1, 3, 6, 12)'),
46
+ ContractLength: z.number().optional().describe('Avtalslängd i månader'),
47
+ Continuous: z.boolean().optional().describe('Löpande avtal (utan slutdatum)'),
48
+ Comments: z.string().optional().describe('Kommentar'),
49
+ confirm: z.boolean().optional().describe('Bekräfta att avtalet ska skapas'),
50
+ dryRun: z.boolean().optional().describe('Visa vad som skulle skickas utan att skapa avtalet'),
51
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
52
+ }, async ({ confirm, dryRun, includeRaw, ...params }) => {
53
+ if (dryRun) {
54
+ return dryRunResponse(`create contract for customer ${params.CustomerNumber}`, {
55
+ Contract: params,
56
+ });
57
+ }
58
+ if (!confirm)
59
+ requireConfirmation(`create contract for customer ${params.CustomerNumber}`);
60
+ const data = await createContract(params);
61
+ return detailResponse(data, contractDetailColumns, data, includeRaw);
62
+ });
63
+ server.tool('fortnox_update_contract', 'Uppdatera ett befintligt avtal i Fortnox.', {
64
+ documentNumber: z.string().describe('Avtalets dokumentnummer'),
65
+ InvoiceRows: z
66
+ .array(invoiceRowSchema)
67
+ .optional()
68
+ .describe('Fakturarader (ersätter alla befintliga rader)'),
69
+ PeriodStart: z.string().optional().describe('Avtalsperiodens start (YYYY-MM-DD)'),
70
+ PeriodEnd: z.string().optional().describe('Avtalsperiodens slut (YYYY-MM-DD)'),
71
+ InvoiceInterval: z
72
+ .number()
73
+ .optional()
74
+ .describe('Faktureringsintervall i månader (1, 3, 6, 12)'),
75
+ ContractLength: z.number().optional().describe('Avtalslängd i månader'),
76
+ Continuous: z.boolean().optional().describe('Löpande avtal (utan slutdatum)'),
77
+ Comments: z.string().optional().describe('Kommentar'),
78
+ confirm: z.boolean().optional().describe('Bekräfta att avtalet ska uppdateras'),
79
+ dryRun: z
80
+ .boolean()
81
+ .optional()
82
+ .describe('Visa vad som skulle skickas utan att uppdatera avtalet'),
83
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
84
+ }, async ({ documentNumber, confirm, dryRun, includeRaw, ...fields }) => {
85
+ if (dryRun) {
86
+ return dryRunResponse(`update contract ${documentNumber}`, { Contract: fields });
87
+ }
88
+ if (!confirm)
89
+ requireConfirmation(`update contract ${documentNumber}`);
90
+ const data = await updateContract(documentNumber, fields);
91
+ return detailResponse(data, contractDetailColumns, data, includeRaw);
92
+ });
93
+ server.tool('fortnox_finish_contract', 'Avsluta ett avtal i Fortnox — inga fler fakturor skapas.', {
94
+ documentNumber: z.string().describe('Avtalets dokumentnummer'),
95
+ confirm: z.boolean().optional().describe('Bekräfta att avtalet ska avslutas'),
96
+ dryRun: z.boolean().optional().describe('Visa vad som skulle göras utan att avsluta avtalet'),
97
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
98
+ }, async ({ documentNumber, confirm, dryRun, includeRaw }) => {
99
+ if (dryRun) {
100
+ return dryRunResponse(`finish contract ${documentNumber}`);
101
+ }
102
+ if (!confirm)
103
+ requireConfirmation(`finish contract ${documentNumber}`);
104
+ const data = await finishContract(documentNumber);
105
+ return detailResponse(data, contractDetailColumns, data, includeRaw);
106
+ });
107
+ server.tool('fortnox_create_invoice_from_contract', 'Skapa nästa faktura från ett avtal direkt. Returnerar den skapade fakturan.', {
108
+ documentNumber: z.string().describe('Avtalets dokumentnummer'),
109
+ confirm: z.boolean().optional().describe('Bekräfta att fakturan ska skapas'),
110
+ dryRun: z.boolean().optional().describe('Visa vad som skulle göras utan att skapa fakturan'),
111
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
112
+ }, async ({ documentNumber, confirm, dryRun, includeRaw }) => {
113
+ if (dryRun) {
114
+ return dryRunResponse(`create invoice from contract ${documentNumber}`);
115
+ }
116
+ if (!confirm)
117
+ requireConfirmation(`create invoice from contract ${documentNumber}`);
118
+ const data = await createInvoiceFromContract(documentNumber);
119
+ return detailResponse(data, invoiceDetailColumns, data, includeRaw);
120
+ });
121
+ server.tool('fortnox_increase_contract_invoice_count', 'Utöka ett tidsbegränsat avtal med en faktura (ökar InvoicesRemaining).', {
122
+ documentNumber: z.string().describe('Avtalets dokumentnummer'),
123
+ confirm: z.boolean().optional().describe('Bekräfta utökningen'),
124
+ dryRun: z.boolean().optional().describe('Visa vad som skulle göras utan att utöka avtalet'),
125
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
126
+ }, async ({ documentNumber, confirm, dryRun, includeRaw }) => {
127
+ if (dryRun) {
128
+ return dryRunResponse(`increase invoice count for contract ${documentNumber}`);
129
+ }
130
+ if (!confirm)
131
+ requireConfirmation(`increase invoice count for contract ${documentNumber}`);
132
+ const data = await increaseInvoiceCount(documentNumber);
133
+ return detailResponse(data, contractDetailColumns, data, includeRaw);
134
+ });
135
+ }
136
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/tools/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerEmployeeTools(server: McpServer): void;
3
+ //# sourceMappingURL=employees.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"employees.d.ts","sourceRoot":"","sources":["../../src/tools/employees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4DpE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuF7D"}
@@ -0,0 +1,107 @@
1
+ import { z } from 'zod';
2
+ import { listEmployees, getEmployee, createEmployee, updateEmployee, } from '../operations/employees.js';
3
+ import { employeeListColumns, employeeDetailColumns } from '../views.js';
4
+ import { detailResponse, dryRunResponse, listResponse, requireConfirmation, } from '../tool-output.js';
5
+ // Writable Employee fields exposed to the MCP tool. The Fortnox Employee
6
+ // resource has ~100 fields, most of them read-only (vacation balances, computed
7
+ // totals). These are the ones a caller realistically sets; power users can set
8
+ // any field via the CLI `--input` JSON.
9
+ const employeeWritableFields = {
10
+ PersonalIdentityNumber: z.string().optional().describe('Personnummer (ÅÅMMDD-XXXX)'),
11
+ Address1: z.string().optional().describe('Adressrad 1'),
12
+ Address2: z.string().optional().describe('Adressrad 2'),
13
+ PostCode: z.string().optional().describe('Postnummer'),
14
+ City: z.string().optional().describe('Ort'),
15
+ Country: z.string().optional().describe('Land'),
16
+ Phone1: z.string().optional().describe('Telefon 1'),
17
+ Phone2: z.string().optional().describe('Telefon 2'),
18
+ JobTitle: z.string().optional().describe('Befattning (max 30 tecken)'),
19
+ CostCenter: z.string().optional().describe('Kostnadsställe'),
20
+ Project: z.string().optional().describe('Projekt'),
21
+ EmploymentDate: z.string().optional().describe('Anställningsdatum (YYYY-MM-DD)'),
22
+ EmployedTo: z.string().optional().describe('Anställd t.o.m. (YYYY-MM-DD)'),
23
+ EmploymentForm: z
24
+ .string()
25
+ .optional()
26
+ .describe('Anställningsform: TV, PRO, TID, SVT, VIK, PRJ, PRA, FER, SES, NEJ'),
27
+ PersonelType: z
28
+ .string()
29
+ .optional()
30
+ .describe('Personalkategori: TJM (tjänsteman) eller ARB (arbetare)'),
31
+ SalaryForm: z.string().optional().describe('Löneform: MAN (månadslön) eller TIM (timlön)'),
32
+ ScheduleId: z.string().optional().describe('Schema-ID'),
33
+ MonthlySalary: z
34
+ .string()
35
+ .optional()
36
+ .describe('Månadslön (ange antingen MonthlySalary eller HourlyPay)'),
37
+ HourlyPay: z.string().optional().describe('Timlön (ange antingen MonthlySalary eller HourlyPay)'),
38
+ TaxTable: z.string().optional().describe('Skattetabell'),
39
+ TaxColumn: z.number().optional().describe('Skattekolumn (1-6)'),
40
+ TaxAllowance: z.string().optional().describe('Skattereduktion: HUV, EXT, TMP, STU, EJ'),
41
+ NonRecurringTax: z.string().optional().describe('Engångsskatt (procent)'),
42
+ AutoNonRecurringTax: z.boolean().optional().describe('Automatisk engångsskatt'),
43
+ Inactive: z.boolean().optional().describe('Om den anställde är inaktiv'),
44
+ BankAccountNo: z.string().optional().describe('Bankkontonummer'),
45
+ ClearingNo: z.string().optional().describe('Clearingnummer'),
46
+ PayslipType: z.string().optional().describe('Lönebeskedstyp: pdf, digital eller kivra'),
47
+ };
48
+ export function registerEmployeeTools(server) {
49
+ server.tool('fortnox_list_employees', 'Lista anställda i Fortnox (kräver Lön-behörigheten). Returnerar: EmployeeId, FullName, JobTitle, Inactive.', {
50
+ page: z.number().optional().describe('Sidnummer (default 1)'),
51
+ limit: z.number().optional().describe('Antal per sida (default 100)'),
52
+ all: z.boolean().optional().describe('Hämta alla sidor (ignorerar page/limit)'),
53
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
54
+ }, async ({ page, limit, all, includeRaw }) => {
55
+ const data = await listEmployees({ page, limit, all });
56
+ return listResponse(data.Employees ?? [], employeeListColumns, data, data.MetaInformation, includeRaw);
57
+ });
58
+ server.tool('fortnox_get_employee', 'Hämta en enskild anställd från Fortnox (kräver Lön-behörigheten).', {
59
+ employeeId: z.string().describe('EmployeeId för den anställde'),
60
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
61
+ }, async ({ employeeId, includeRaw }) => {
62
+ const data = await getEmployee(employeeId);
63
+ return detailResponse(data, employeeDetailColumns, data, includeRaw);
64
+ });
65
+ server.tool('fortnox_create_employee', 'Skapa en ny anställd i Fortnox (kräver Lön-behörigheten). FirstName, LastName och Email krävs. Tips: ange även EmploymentForm, PersonelType och SalaryForm — annars kan Fortnox inte tilldela ett företagsavtal (felet "ftgavtalid").', {
66
+ EmployeeId: z
67
+ .string()
68
+ .optional()
69
+ .describe('EmployeeId (genereras automatiskt om det utelämnas)'),
70
+ FirstName: z.string().describe('Förnamn'),
71
+ LastName: z.string().describe('Efternamn'),
72
+ Email: z.string().describe('E-postadress'),
73
+ ...employeeWritableFields,
74
+ confirm: z.boolean().optional().describe('Bekräfta att den anställde ska skapas'),
75
+ dryRun: z.boolean().optional().describe('Visa vad som skulle skickas utan att skapa'),
76
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
77
+ }, async ({ confirm, dryRun, includeRaw, ...params }) => {
78
+ if (dryRun) {
79
+ return dryRunResponse(`create employee "${params.FirstName} ${params.LastName}"`, {
80
+ Employee: params,
81
+ });
82
+ }
83
+ if (!confirm)
84
+ requireConfirmation(`create employee "${params.FirstName} ${params.LastName}"`);
85
+ const data = await createEmployee(params);
86
+ return detailResponse(data, employeeDetailColumns, data, includeRaw);
87
+ });
88
+ server.tool('fortnox_update_employee', 'Uppdatera en befintlig anställd i Fortnox (kräver Lön-behörigheten).', {
89
+ employeeId: z.string().describe('EmployeeId för den anställde att uppdatera'),
90
+ FirstName: z.string().optional().describe('Förnamn'),
91
+ LastName: z.string().optional().describe('Efternamn'),
92
+ Email: z.string().optional().describe('E-postadress'),
93
+ ...employeeWritableFields,
94
+ confirm: z.boolean().optional().describe('Bekräfta att den anställde ska uppdateras'),
95
+ dryRun: z.boolean().optional().describe('Visa vad som skulle skickas utan att uppdatera'),
96
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
97
+ }, async ({ employeeId, confirm, dryRun, includeRaw, ...fields }) => {
98
+ if (dryRun) {
99
+ return dryRunResponse(`update employee ${employeeId}`, { Employee: fields });
100
+ }
101
+ if (!confirm)
102
+ requireConfirmation(`update employee ${employeeId}`);
103
+ const data = await updateEmployee(employeeId, fields);
104
+ return detailResponse(data, employeeDetailColumns, data, includeRaw);
105
+ });
106
+ }
107
+ //# sourceMappingURL=employees.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"employees.js","sourceRoot":"","sources":["../../src/tools/employees.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerFinancialYearTools(server: McpServer): void;
3
+ //# sourceMappingURL=financial-years.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"financial-years.d.ts","sourceRoot":"","sources":["../../src/tools/financial-years.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAcpE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkDlE"}
@@ -0,0 +1,33 @@
1
+ import { z } from 'zod';
2
+ import { listFinancialYears, getFinancialYear, getLockedPeriod, } from '../operations/financial-years.js';
3
+ import { financialYearListColumns, financialYearDetailColumns, lockedPeriodDetailColumns, } from '../views.js';
4
+ import { detailResponse, listResponse, textResponse } from '../tool-output.js';
5
+ export function registerFinancialYearTools(server) {
6
+ server.tool('fortnox_list_financialyears', 'Lista räkenskapsår i Fortnox. Returnerar: Id, FromDate, ToDate, AccountingMethod, AccountChartType. Kan filtreras till det räkenskapsår som innehåller ett visst datum.', {
7
+ date: z
8
+ .string()
9
+ .optional()
10
+ .describe('Hitta räkenskapsåret som innehåller detta datum (YYYY-MM-DD)'),
11
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
12
+ }, async ({ date, includeRaw }) => {
13
+ const data = await listFinancialYears({ date });
14
+ return listResponse(data.FinancialYears ?? [], financialYearListColumns, data, data.MetaInformation, includeRaw);
15
+ });
16
+ server.tool('fortnox_get_financialyear', 'Hämta ett enskilt räkenskapsår från Fortnox.', {
17
+ id: z.number().describe('Räkenskapsårets Id'),
18
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
19
+ }, async ({ id, includeRaw }) => {
20
+ const data = await getFinancialYear(id);
21
+ return detailResponse(data, financialYearDetailColumns, data, includeRaw);
22
+ });
23
+ server.tool('fortnox_get_lockedperiod', 'Hämta låst period från Fortnox (bokföringen är låst t.o.m. detta datum). Tomt svar betyder att ingen period är låst. Användbart innan verifikat/fakturor bokförs för att undvika fel om låst period.', {
24
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
25
+ }, async ({ includeRaw }) => {
26
+ const data = await getLockedPeriod();
27
+ if (!data.EndDate) {
28
+ return textResponse('Ingen period är låst.');
29
+ }
30
+ return detailResponse(data, lockedPeriodDetailColumns, data, includeRaw);
31
+ });
32
+ }
33
+ //# sourceMappingURL=financial-years.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"financial-years.js","sourceRoot":"","sources":["../../src/tools/financial-years.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE/E,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,IAAI,CACT,6BAA6B,EAC7B,yKAAyK,EACzK;QACE,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,8DAA8D,CAAC;QAC3E,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAC9E,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,OAAO,YAAY,CACjB,IAAI,CAAC,cAAc,IAAI,EAAE,EACzB,wBAAwB,EACxB,IAAI,EACJ,IAAI,CAAC,eAAe,EACpB,UAAU,CACX,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,8CAA8C,EAC9C;QACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC7C,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAC9E,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACxC,OAAO,cAAc,CAAC,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC5E,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,sMAAsM,EACtM;QACE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;KAC9E,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACvB,MAAM,IAAI,GAAG,MAAM,eAAe,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,YAAY,CAAC,uBAAuB,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,cAAc,CAAC,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC3E,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerSalaryTransactionTools(server: McpServer): void;
3
+ //# sourceMappingURL=salarytransactions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"salarytransactions.d.ts","sourceRoot":"","sources":["../../src/tools/salarytransactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiBpE,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8FtE"}
@@ -0,0 +1,70 @@
1
+ import { z } from 'zod';
2
+ import { listSalaryTransactions, getSalaryTransaction, createSalaryTransaction, deleteSalaryTransaction, } from '../operations/salarytransactions.js';
3
+ import { salaryTransactionListColumns, salaryTransactionDetailColumns } from '../views.js';
4
+ import { detailResponse, dryRunResponse, listResponse, requireConfirmation, textResponse, } from '../tool-output.js';
5
+ export function registerSalaryTransactionTools(server) {
6
+ server.tool('fortnox_list_salarytransactions', 'Lista lönetransaktioner i Fortnox (kräver Lön-behörigheten). Returnerar: SalaryRow, EmployeeId, SalaryCode, Date, Amount.', {
7
+ employeeId: z.string().optional().describe('Filtrera på EmployeeId'),
8
+ date: z.string().optional().describe('Filtrera på datum (YYYY-MM-DD)'),
9
+ page: z.number().optional().describe('Sidnummer (default 1)'),
10
+ limit: z.number().optional().describe('Antal per sida (default 100)'),
11
+ all: z.boolean().optional().describe('Hämta alla sidor (ignorerar page/limit)'),
12
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
13
+ }, async ({ employeeId, date, page, limit, all, includeRaw }) => {
14
+ const data = await listSalaryTransactions({ employeeId, date, page, limit, all });
15
+ return listResponse(data.SalaryTransactions ?? [], salaryTransactionListColumns, data, data.MetaInformation, includeRaw);
16
+ });
17
+ server.tool('fortnox_get_salarytransaction', 'Hämta en enskild lönetransaktion från Fortnox (kräver Lön-behörigheten).', {
18
+ salaryRow: z.string().describe('SalaryRow (radens ID)'),
19
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
20
+ }, async ({ salaryRow, includeRaw }) => {
21
+ const data = await getSalaryTransaction(salaryRow);
22
+ return detailResponse(data, salaryTransactionDetailColumns, data, includeRaw);
23
+ });
24
+ server.tool('fortnox_create_salarytransaction', 'Skapa en ny lönetransaktion i Fortnox (kräver Lön-behörigheten). EmployeeId, SalaryCode och Date krävs.', {
25
+ EmployeeId: z.string().describe('EmployeeId för den anställde'),
26
+ SalaryCode: z.string().describe('Lönekod'),
27
+ Date: z.string().describe('Datum (YYYY-MM-DD)'),
28
+ Amount: z.string().optional().describe('Antal/belopp'),
29
+ CostCenter: z.string().optional().describe('Kostnadsställe'),
30
+ Project: z.string().optional().describe('Projekt'),
31
+ Expense: z.string().optional().describe('Utlägg'),
32
+ Number: z.string().optional().describe('Nummer'),
33
+ TextRow: z.string().optional().describe('Textrad'),
34
+ Total: z.string().optional().describe('Summa'),
35
+ VAT: z.string().optional().describe('Moms'),
36
+ confirm: z.boolean().optional().describe('Bekräfta att lönetransaktionen ska skapas'),
37
+ dryRun: z
38
+ .boolean()
39
+ .optional()
40
+ .describe('Visa vad som skulle skickas utan att skapa lönetransaktionen'),
41
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
42
+ }, async ({ confirm, dryRun, includeRaw, ...params }) => {
43
+ if (dryRun) {
44
+ return dryRunResponse(`create salary transaction for employee ${params.EmployeeId}`, {
45
+ SalaryTransaction: params,
46
+ });
47
+ }
48
+ if (!confirm)
49
+ requireConfirmation(`create salary transaction for employee ${params.EmployeeId}`);
50
+ const data = await createSalaryTransaction(params);
51
+ return detailResponse(data, salaryTransactionDetailColumns, data, includeRaw);
52
+ });
53
+ server.tool('fortnox_delete_salarytransaction', 'Ta bort en lönetransaktion från Fortnox (kräver Lön-behörigheten).', {
54
+ salaryRow: z.string().describe('SalaryRow (radens ID) att ta bort'),
55
+ confirm: z.boolean().optional().describe('Bekräfta att lönetransaktionen ska tas bort'),
56
+ dryRun: z
57
+ .boolean()
58
+ .optional()
59
+ .describe('Visa vad som skulle göras utan att ta bort lönetransaktionen'),
60
+ }, async ({ salaryRow, confirm, dryRun }) => {
61
+ if (dryRun) {
62
+ return dryRunResponse(`delete salary transaction ${salaryRow}`);
63
+ }
64
+ if (!confirm)
65
+ requireConfirmation(`delete salary transaction ${salaryRow}`);
66
+ await deleteSalaryTransaction(salaryRow);
67
+ return textResponse(`Salary transaction ${salaryRow} deleted.`);
68
+ });
69
+ }
70
+ //# sourceMappingURL=salarytransactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"salarytransactions.js","sourceRoot":"","sources":["../../src/tools/salarytransactions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerScheduleTimeTools(server: McpServer): void;
3
+ //# sourceMappingURL=scheduletimes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduletimes.d.ts","sourceRoot":"","sources":["../../src/tools/scheduletimes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsBpE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8DjE"}
@@ -0,0 +1,62 @@
1
+ import { z } from 'zod';
2
+ import { getScheduleTime, updateScheduleTime, resetScheduleTimeDay, } from '../operations/scheduletimes.js';
3
+ import { scheduleTimeDetailColumns } from '../views.js';
4
+ import { detailResponse, dryRunResponse, requireConfirmation } from '../tool-output.js';
5
+ // Writable ScheduleTime fields exposed to the MCP tool. EmployeeId and Date are
6
+ // the composite path key and are never sent in the body.
7
+ const scheduleTimeWritableFields = {
8
+ Hours: z.string().optional().describe('Antal timmar'),
9
+ ScheduleId: z.string().optional().describe('Schema-ID'),
10
+ IWH1: z.string().optional().describe('OB-tid 1 (obekväm arbetstid)'),
11
+ IWH2: z.string().optional().describe('OB-tid 2 (obekväm arbetstid)'),
12
+ IWH3: z.string().optional().describe('OB-tid 3 (obekväm arbetstid)'),
13
+ IWH4: z.string().optional().describe('OB-tid 4 (obekväm arbetstid)'),
14
+ IWH5: z.string().optional().describe('OB-tid 5 (obekväm arbetstid)'),
15
+ };
16
+ export function registerScheduleTimeTools(server) {
17
+ server.tool('fortnox_get_scheduletime', 'Hämta en schematid för en anställd och ett datum från Fortnox (kräver Lön-behörigheten).', {
18
+ employeeId: z.string().describe('EmployeeId för den anställde'),
19
+ date: z.string().describe('Datum (YYYY-MM-DD)'),
20
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
21
+ }, async ({ employeeId, date, includeRaw }) => {
22
+ const data = await getScheduleTime(employeeId, date);
23
+ return detailResponse(data, scheduleTimeDetailColumns, data, includeRaw);
24
+ });
25
+ server.tool('fortnox_update_scheduletime', 'Uppdatera en schematid för en anställd och ett datum i Fortnox (kräver Lön-behörigheten).', {
26
+ employeeId: z.string().describe('EmployeeId för den anställde'),
27
+ date: z.string().describe('Datum (YYYY-MM-DD)'),
28
+ ...scheduleTimeWritableFields,
29
+ confirm: z.boolean().optional().describe('Bekräfta att schematiden ska uppdateras'),
30
+ dryRun: z.boolean().optional().describe('Visa vad som skulle skickas utan att uppdatera'),
31
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
32
+ }, async ({ employeeId, date, confirm, dryRun, includeRaw, ...fields }) => {
33
+ if (dryRun) {
34
+ return dryRunResponse(`update schedule time ${employeeId} ${date}`, {
35
+ ScheduleTime: fields,
36
+ });
37
+ }
38
+ if (!confirm)
39
+ requireConfirmation(`update schedule time ${employeeId} ${date}`);
40
+ const data = await updateScheduleTime(employeeId, date, fields);
41
+ return detailResponse(data, scheduleTimeDetailColumns, data, includeRaw);
42
+ });
43
+ server.tool('fortnox_reset_scheduletime_day', 'Uppdatera schematid och återställ dagen för en anställd och ett datum i Fortnox (kräver Lön-behörigheten).', {
44
+ employeeId: z.string().describe('EmployeeId för den anställde'),
45
+ date: z.string().describe('Datum (YYYY-MM-DD)'),
46
+ ...scheduleTimeWritableFields,
47
+ confirm: z.boolean().optional().describe('Bekräfta att dagen ska återställas'),
48
+ dryRun: z.boolean().optional().describe('Visa vad som skulle skickas utan att återställa'),
49
+ includeRaw: z.boolean().optional().describe('Inkludera rå JSON från Fortnox'),
50
+ }, async ({ employeeId, date, confirm, dryRun, includeRaw, ...fields }) => {
51
+ if (dryRun) {
52
+ return dryRunResponse(`reset schedule time day ${employeeId} ${date}`, {
53
+ ScheduleTime: fields,
54
+ });
55
+ }
56
+ if (!confirm)
57
+ requireConfirmation(`reset schedule time day ${employeeId} ${date}`);
58
+ const data = await resetScheduleTimeDay(employeeId, date, fields);
59
+ return detailResponse(data, scheduleTimeDetailColumns, data, includeRaw);
60
+ });
61
+ }
62
+ //# sourceMappingURL=scheduletimes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduletimes.js","sourceRoot":"","sources":["../../src/tools/scheduletimes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/tools/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuH3D"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/tools/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgI3D"}
@@ -68,19 +68,23 @@ export function registerStatusTools(server) {
68
68
  return textResponse(lines.join('\n'));
69
69
  }
70
70
  // 7. Scope validation
71
- const { SCOPES } = await import('../auth.js');
71
+ const { effectiveScopes } = await import('../auth.js');
72
72
  const { fortnoxRequest, FortnoxApiError } = await import('../fortnox-client.js');
73
73
  const scopeEndpoints = {
74
74
  article: 'articles?limit=1',
75
75
  customer: 'customers?limit=1',
76
76
  invoice: 'invoices?limit=1',
77
+ payment: 'invoicepayments?limit=1',
77
78
  supplier: 'suppliers?limit=1',
78
79
  supplierinvoice: 'supplierinvoices?limit=1',
79
80
  bookkeeping: 'vouchers?limit=1',
80
81
  companyinformation: 'companyinformation',
81
82
  settings: 'settings/company',
83
+ inbox: 'inbox',
84
+ connectfile: 'voucherfileconnections?limit=1',
85
+ salary: 'employees?limit=1',
82
86
  };
83
- const required = SCOPES.split(' ');
87
+ const required = effectiveScopes(creds).split(' ');
84
88
  const missing = [];
85
89
  for (const scope of required) {
86
90
  const endpoint = scopeEndpoints[scope];
@@ -90,7 +94,10 @@ export function registerStatusTools(server) {
90
94
  await fortnoxRequest(endpoint);
91
95
  }
92
96
  catch (err) {
93
- if (err instanceof FortnoxApiError && err.statusCode === 403) {
97
+ // Missing scope = 403, or a 400 whose message names the scope
98
+ // (archive/inbox family). Other errors aren't scope problems.
99
+ if (err instanceof FortnoxApiError &&
100
+ (err.statusCode === 403 || /scope/i.test(err.fortnoxMessage ?? ''))) {
94
101
  missing.push(scope);
95
102
  }
96
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/tools/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/tools/status.ts"],"names":[],"mappings":"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"}
package/dist/views.d.ts CHANGED
@@ -36,4 +36,21 @@ export declare const priceListColumns: Column[];
36
36
  export declare const priceDetailColumns: Column[];
37
37
  export declare const accountListColumns: Column[];
38
38
  export declare const companyDetailColumns: Column[];
39
+ export declare const financialYearListColumns: Column[];
40
+ export declare const financialYearDetailColumns: Column[];
41
+ export declare const lockedPeriodDetailColumns: Column[];
42
+ export declare const contractListColumns: Column[];
43
+ export declare const contractDetailColumns: Column[];
44
+ export declare const topCustomerColumns: Column[];
45
+ export declare const monthlyRevenueColumns: Column[];
46
+ export declare const voucherAttachmentColumns: Column[];
47
+ export declare const employeeListColumns: Column[];
48
+ export declare const employeeDetailColumns: Column[];
49
+ export declare const salaryTransactionListColumns: Column[];
50
+ export declare const salaryTransactionDetailColumns: Column[];
51
+ export declare const attendanceTransactionListColumns: Column[];
52
+ export declare const attendanceTransactionDetailColumns: Column[];
53
+ export declare const absenceTransactionListColumns: Column[];
54
+ export declare const absenceTransactionDetailColumns: Column[];
55
+ export declare const scheduleTimeDetailColumns: Column[];
39
56
  //# sourceMappingURL=views.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../src/views.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAO7C,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAOtC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,EAaxC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,EAOzC,CAAC;AAKF,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAMvC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,EAWzC,CAAC;AAKF,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAKtC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,EAKxC,CAAC;AAGF,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAKrC,CAAC;AAKF,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAMtC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,EASxC,CAAC;AAKF,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAMvC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,EAYzC,CAAC;AAKF,eAAO,MAAM,0BAA0B,EAAE,MAAM,EAO9C,CAAC;AAEF,eAAO,MAAM,4BAA4B,EAAE,MAAM,EAahD,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,MAAM,EAKjD,CAAC;AAKF,eAAO,MAAM,yBAAyB,EAAE,MAAM,EAO7C,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,MAAM,EAQ/C,CAAC;AAIF,eAAO,MAAM,iCAAiC,EAAE,MAAM,EAOrD,CAAC;AAEF,eAAO,MAAM,mCAAmC,EAAE,MAAM,EAQvD,CAAC;AAKF,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAOpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAYtC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAKvC,CAAC;AAKF,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAOpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAYtC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,EAKvC,CAAC;AAKF,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAMtC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,EASxC,CAAC;AAKF,eAAO,MAAM,qBAAqB,EAAE,MAAM,EAIzC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,MAAM,EAK3C,CAAC;AAKF,eAAO,MAAM,uBAAuB,EAAE,MAAM,EAO3C,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,MAAM,EAS7C,CAAC;AAKF,eAAO,MAAM,oBAAoB,EAAE,MAAM,EAKxC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,MAAM,EAK1C,CAAC;AAKF,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAMpC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAMtC,CAAC;AAKF,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAItC,CAAC;AAIF,eAAO,MAAM,oBAAoB,EAAE,MAAM,EASxC,CAAC"}
1
+ {"version":3,"file":"views.d.ts","sourceRoot":"","sources":["../src/views.ts"],"names":[],"mappings":"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"}