@servicialo/mcp-server 0.5.2 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -8
- package/dist/__tests__/client.test.d.ts +2 -0
- package/dist/__tests__/client.test.d.ts.map +1 -0
- package/dist/__tests__/client.test.js +136 -0
- package/dist/__tests__/client.test.js.map +1 -0
- package/dist/__tests__/mode.test.d.ts +2 -0
- package/dist/__tests__/mode.test.d.ts.map +1 -0
- package/dist/__tests__/mode.test.js +25 -0
- package/dist/__tests__/mode.test.js.map +1 -0
- package/dist/__tests__/schemas.test.d.ts +2 -0
- package/dist/__tests__/schemas.test.d.ts.map +1 -0
- package/dist/__tests__/schemas.test.js +53 -0
- package/dist/__tests__/schemas.test.js.map +1 -0
- package/dist/__tests__/tools.test.d.ts +2 -0
- package/dist/__tests__/tools.test.d.ts.map +1 -0
- package/dist/__tests__/tools.test.js +241 -0
- package/dist/__tests__/tools.test.js.map +1 -0
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +12 -2
- package/dist/client.js.map +1 -1
- package/dist/index.js +4 -17
- package/dist/index.js.map +1 -1
- package/dist/tools/authenticated/comprometer.d.ts +6 -2
- package/dist/tools/authenticated/comprometer.d.ts.map +1 -1
- package/dist/tools/authenticated/comprometer.js +3 -1
- package/dist/tools/authenticated/comprometer.js.map +1 -1
- package/dist/tools/public/availability.d.ts +4 -0
- package/dist/tools/public/availability.d.ts.map +1 -1
- package/dist/tools/public/availability.js +4 -2
- package/dist/tools/public/availability.js.map +1 -1
- package/dist/tools/public/registry.d.ts +14 -2
- package/dist/tools/public/registry.d.ts.map +1 -1
- package/dist/tools/public/registry.js +10 -3
- package/dist/tools/public/registry.js.map +1 -1
- package/dist/tools/public/services.js +1 -1
- package/dist/tools/public/services.js.map +1 -1
- package/dist/tools/schemas.d.ts +93 -0
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +41 -0
- package/dist/tools/schemas.js.map +1 -1
- package/package.json +7 -4
package/README.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
MCP server for the [Servicialo](https://servicialo.com) protocol. Connects AI agents to professional services via any Servicialo-compatible platform.
|
|
4
4
|
|
|
5
|
-
**Protocol version:** 0.
|
|
5
|
+
**Protocol version:** 0.6 · **Package version:** 0.6.0
|
|
6
6
|
|
|
7
7
|
> **Status:** Early-stage protocol with a live reference implementation in healthcare (Chile). The protocol spec is stable. The MCP server implements discovery + scheduling + basic lifecycle. Advanced tools (delivery evidence, payments, documentation) are specified but not yet fully wired to backend endpoints. We're onboarding pilot implementations — [get in touch](https://servicialo.com) if you're building for professional services.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
20 tools organized by the 6 lifecycle phases of a service — not by database table.
|
|
10
10
|
|
|
11
11
|
## Two Modes of Operation
|
|
12
12
|
|
|
@@ -24,7 +24,7 @@ No credentials needed. 4 public tools for discovering organizations, services, a
|
|
|
24
24
|
SERVICIALO_API_KEY=your_key SERVICIALO_ORG_ID=your_org npx -y @servicialo/mcp-server
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
Requires `SERVICIALO_API_KEY` and `SERVICIALO_ORG_ID`. Enables all
|
|
27
|
+
Requires `SERVICIALO_API_KEY` and `SERVICIALO_ORG_ID`. Enables all 20 tools across the full service lifecycle.
|
|
28
28
|
|
|
29
29
|
### Claude Desktop Configuration
|
|
30
30
|
|
|
@@ -72,7 +72,7 @@ A well-designed agent follows this order. Each phase has its tools. The standard
|
|
|
72
72
|
|---|---|
|
|
73
73
|
| `registry.search` | Search organizations by vertical and location |
|
|
74
74
|
| `registry.get_organization` | Get public details of an organization |
|
|
75
|
-
| `scheduling.check_availability` | Check available slots without authentication |
|
|
75
|
+
| `scheduling.check_availability` | Check available slots without authentication. If the service has `resource_id` in its location, also verifies physical resource availability (3-variable scheduler: provider ∧ client ∧ resource) |
|
|
76
76
|
| `services.list` | List the public service catalog |
|
|
77
77
|
|
|
78
78
|
## Phase 2 — Entender (2 tools)
|
|
@@ -87,7 +87,7 @@ A well-designed agent follows this order. Each phase has its tools. The standard
|
|
|
87
87
|
| Tool | Description |
|
|
88
88
|
|---|---|
|
|
89
89
|
| `clients.get_or_create` | Find a client by email/phone or create if new. Single call to resolve client identity before booking |
|
|
90
|
-
| `scheduling.book` | Book a new session → state "Solicitado". Requires contract.get first |
|
|
90
|
+
| `scheduling.book` | Book a new session → state "Solicitado". Accepts optional `resource_id` to reserve a physical resource (3-variable scheduler). Requires contract.get first |
|
|
91
91
|
| `scheduling.confirm` | Confirm a booked session → state "Confirmado" |
|
|
92
92
|
|
|
93
93
|
## Phase 4 — Ciclo de Vida (4 tools)
|
|
@@ -166,9 +166,20 @@ lifecycle.transition({ session_id: "ses_001", to_state: "verified", actor: { typ
|
|
|
166
166
|
|
|
167
167
|
## Changelog
|
|
168
168
|
|
|
169
|
-
### Package 0.
|
|
169
|
+
### Package 0.6.0 (current)
|
|
170
170
|
|
|
171
|
-
|
|
171
|
+
Protocol v0.6.0 — Resource as first-class dimension (3.5b).
|
|
172
|
+
|
|
173
|
+
| Change | Detail |
|
|
174
|
+
|---|---|
|
|
175
|
+
| `scheduling.check_availability` | Now accepts optional `resource_id` — verifies physical resource availability alongside provider (3-variable scheduler: provider ∧ client ∧ resource) |
|
|
176
|
+
| `scheduling.book` | Now accepts optional `resource_id` — reserves physical resource alongside session |
|
|
177
|
+
| New types | `ResourceSchema`, `ResourceAvailabilitySchema`, `ServiceLocationSchema` with `resource_id` |
|
|
178
|
+
| New exception flow | 5.7 Resource Conflict — when a resource is double-booked or unavailable |
|
|
179
|
+
|
|
180
|
+
### Package 0.5.0
|
|
181
|
+
|
|
182
|
+
Consolidated from 38 tools to 20. Tools are now organized by lifecycle phase instead of database entity.
|
|
172
183
|
|
|
173
184
|
| Removed Tool | Replacement |
|
|
174
185
|
|---|---|
|
|
@@ -186,7 +197,11 @@ Consolidated from 38 tools to 23. Tools are now organized by lifecycle phase ins
|
|
|
186
197
|
| `providers.get_commission` | Removed (not part of service lifecycle) |
|
|
187
198
|
| `payroll.*` (5 tools) | Removed (not part of service lifecycle) |
|
|
188
199
|
|
|
189
|
-
### Protocol 0.
|
|
200
|
+
### Protocol 0.6 (current)
|
|
201
|
+
|
|
202
|
+
Resource as a first-class sub-dimension of Location (3.5b). `resource_id` optional in Location. New exception flow: Resource Conflict (5.7). Scheduler becomes 3-variable: provider ∧ client ∧ resource.
|
|
203
|
+
|
|
204
|
+
### Protocol 0.3
|
|
190
205
|
|
|
191
206
|
Lifecycle state order changed. Verified moved from position 6 to position 8 (final). Verification is the closure of the cycle — the client needs the full picture (documentation + charge) before confirming.
|
|
192
207
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/client.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { CoordinaloClient } from '../client.js';
|
|
3
|
+
describe('CoordinaloClient', () => {
|
|
4
|
+
describe('constructor', () => {
|
|
5
|
+
it('strips trailing slashes from baseUrl', () => {
|
|
6
|
+
const client = new CoordinaloClient({ baseUrl: 'https://example.com///' });
|
|
7
|
+
// Verify via isAuthenticated (which doesn't depend on URL)
|
|
8
|
+
expect(client.isAuthenticated).toBe(false);
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
describe('isAuthenticated', () => {
|
|
12
|
+
it('returns false when no credentials', () => {
|
|
13
|
+
const client = new CoordinaloClient({ baseUrl: 'https://example.com' });
|
|
14
|
+
expect(client.isAuthenticated).toBe(false);
|
|
15
|
+
});
|
|
16
|
+
it('returns false when only apiKey', () => {
|
|
17
|
+
const client = new CoordinaloClient({ baseUrl: 'https://example.com', apiKey: 'key' });
|
|
18
|
+
expect(client.isAuthenticated).toBe(false);
|
|
19
|
+
});
|
|
20
|
+
it('returns false when only orgId', () => {
|
|
21
|
+
const client = new CoordinaloClient({ baseUrl: 'https://example.com', orgId: 'org' });
|
|
22
|
+
expect(client.isAuthenticated).toBe(false);
|
|
23
|
+
});
|
|
24
|
+
it('returns true when both apiKey and orgId', () => {
|
|
25
|
+
const client = new CoordinaloClient({ baseUrl: 'https://example.com', apiKey: 'key', orgId: 'org' });
|
|
26
|
+
expect(client.isAuthenticated).toBe(true);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe('public GET', () => {
|
|
30
|
+
beforeEach(() => {
|
|
31
|
+
vi.restoreAllMocks();
|
|
32
|
+
});
|
|
33
|
+
it('calls correct URL with query params', async () => {
|
|
34
|
+
const mockResponse = { data: 'test' };
|
|
35
|
+
const fetchSpy = vi.spyOn(globalThis, 'fetch').mockResolvedValue(new Response(JSON.stringify(mockResponse), { status: 200 }));
|
|
36
|
+
const client = new CoordinaloClient({ baseUrl: 'https://api.example.com' });
|
|
37
|
+
const result = await client.pub.get('/api/servicialo/registry', {
|
|
38
|
+
vertical: 'kinesiologia',
|
|
39
|
+
location: 'Santiago',
|
|
40
|
+
limit: 5,
|
|
41
|
+
});
|
|
42
|
+
expect(result).toEqual(mockResponse);
|
|
43
|
+
expect(fetchSpy).toHaveBeenCalledOnce();
|
|
44
|
+
const calledUrl = new URL(fetchSpy.mock.calls[0][0]);
|
|
45
|
+
expect(calledUrl.origin).toBe('https://api.example.com');
|
|
46
|
+
expect(calledUrl.pathname).toBe('/api/servicialo/registry');
|
|
47
|
+
expect(calledUrl.searchParams.get('vertical')).toBe('kinesiologia');
|
|
48
|
+
expect(calledUrl.searchParams.get('location')).toBe('Santiago');
|
|
49
|
+
expect(calledUrl.searchParams.get('limit')).toBe('5');
|
|
50
|
+
});
|
|
51
|
+
it('omits undefined params', async () => {
|
|
52
|
+
const fetchSpy = vi.spyOn(globalThis, 'fetch').mockResolvedValue(new Response('{}', { status: 200 }));
|
|
53
|
+
const client = new CoordinaloClient({ baseUrl: 'https://api.example.com' });
|
|
54
|
+
await client.pub.get('/api/servicialo/registry', {
|
|
55
|
+
vertical: 'dental',
|
|
56
|
+
location: undefined,
|
|
57
|
+
});
|
|
58
|
+
const calledUrl = new URL(fetchSpy.mock.calls[0][0]);
|
|
59
|
+
expect(calledUrl.searchParams.has('vertical')).toBe(true);
|
|
60
|
+
expect(calledUrl.searchParams.has('location')).toBe(false);
|
|
61
|
+
});
|
|
62
|
+
it('retries with auth headers on 401 when apiKey is available', async () => {
|
|
63
|
+
const fetchSpy = vi.spyOn(globalThis, 'fetch')
|
|
64
|
+
.mockResolvedValueOnce(new Response('Unauthorized', { status: 401 }))
|
|
65
|
+
.mockResolvedValueOnce(new Response('{"ok":true}', { status: 200 }));
|
|
66
|
+
const client = new CoordinaloClient({
|
|
67
|
+
baseUrl: 'https://api.example.com',
|
|
68
|
+
apiKey: 'secret',
|
|
69
|
+
orgId: 'org1',
|
|
70
|
+
});
|
|
71
|
+
const result = await client.pub.get('/api/servicialo/registry');
|
|
72
|
+
expect(result).toEqual({ ok: true });
|
|
73
|
+
expect(fetchSpy).toHaveBeenCalledTimes(2);
|
|
74
|
+
// Second call should have auth header
|
|
75
|
+
const secondCallHeaders = fetchSpy.mock.calls[1][1]?.headers;
|
|
76
|
+
expect(secondCallHeaders['Authorization']).toBe('Bearer secret');
|
|
77
|
+
});
|
|
78
|
+
it('throws on 401 when no apiKey available', async () => {
|
|
79
|
+
vi.spyOn(globalThis, 'fetch').mockResolvedValue(new Response('Unauthorized', { status: 401 }));
|
|
80
|
+
const client = new CoordinaloClient({ baseUrl: 'https://api.example.com' });
|
|
81
|
+
await expect(client.pub.get('/api/servicialo/registry')).rejects.toThrow('401 Unauthorized');
|
|
82
|
+
});
|
|
83
|
+
it('throws on non-OK responses', async () => {
|
|
84
|
+
vi.spyOn(globalThis, 'fetch').mockResolvedValue(new Response('Not Found', { status: 404 }));
|
|
85
|
+
const client = new CoordinaloClient({ baseUrl: 'https://api.example.com' });
|
|
86
|
+
await expect(client.pub.get('/api/servicialo/missing')).rejects.toThrow('404');
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe('authenticated requests', () => {
|
|
90
|
+
beforeEach(() => {
|
|
91
|
+
vi.restoreAllMocks();
|
|
92
|
+
});
|
|
93
|
+
const makeClient = () => new CoordinaloClient({
|
|
94
|
+
baseUrl: 'https://api.example.com',
|
|
95
|
+
apiKey: 'test_key',
|
|
96
|
+
orgId: 'org_123',
|
|
97
|
+
});
|
|
98
|
+
it('GET builds org-scoped URL for relative paths', async () => {
|
|
99
|
+
const fetchSpy = vi.spyOn(globalThis, 'fetch').mockResolvedValue(new Response('{}', { status: 200 }));
|
|
100
|
+
await makeClient().get('/coordinalo/services/srv_1');
|
|
101
|
+
const calledUrl = fetchSpy.mock.calls[0][0];
|
|
102
|
+
expect(calledUrl).toContain('/api/organizations/org_123/coordinalo/services/srv_1');
|
|
103
|
+
});
|
|
104
|
+
it('GET uses absolute path when starting with /api/', async () => {
|
|
105
|
+
const fetchSpy = vi.spyOn(globalThis, 'fetch').mockResolvedValue(new Response('{}', { status: 200 }));
|
|
106
|
+
await makeClient().get('/api/servicialo/registry');
|
|
107
|
+
const calledUrl = fetchSpy.mock.calls[0][0];
|
|
108
|
+
expect(calledUrl).toBe('https://api.example.com/api/servicialo/registry');
|
|
109
|
+
});
|
|
110
|
+
it('POST sends JSON body with auth headers', async () => {
|
|
111
|
+
const fetchSpy = vi.spyOn(globalThis, 'fetch').mockResolvedValue(new Response('{"id":"ses_1"}', { status: 200 }));
|
|
112
|
+
const body = { serviceId: 'srv_1', clientId: 'cli_1' };
|
|
113
|
+
const result = await makeClient().post('/coordinalo/sessions', body);
|
|
114
|
+
expect(result).toEqual({ id: 'ses_1' });
|
|
115
|
+
const [url, options] = fetchSpy.mock.calls[0];
|
|
116
|
+
expect(url).toContain('/api/organizations/org_123/coordinalo/sessions');
|
|
117
|
+
expect(options?.method).toBe('POST');
|
|
118
|
+
expect(options?.body).toBe(JSON.stringify(body));
|
|
119
|
+
expect((options?.headers)['Authorization']).toBe('Bearer test_key');
|
|
120
|
+
});
|
|
121
|
+
it('PUT sends JSON body', async () => {
|
|
122
|
+
const fetchSpy = vi.spyOn(globalThis, 'fetch').mockResolvedValue(new Response('{}', { status: 200 }));
|
|
123
|
+
await makeClient().put('/coordinalo/sessions/ses_1', { startTime: '2026-03-01T10:00:00Z' });
|
|
124
|
+
expect(fetchSpy.mock.calls[0][1]?.method).toBe('PUT');
|
|
125
|
+
});
|
|
126
|
+
it('throws when calling authenticated endpoint without apiKey', async () => {
|
|
127
|
+
const client = new CoordinaloClient({ baseUrl: 'https://api.example.com', orgId: 'org_1' });
|
|
128
|
+
await expect(client.get('/coordinalo/services/srv_1')).rejects.toThrow('No SERVICIALO_API_KEY');
|
|
129
|
+
});
|
|
130
|
+
it('throws when calling org-scoped endpoint without orgId', async () => {
|
|
131
|
+
const client = new CoordinaloClient({ baseUrl: 'https://api.example.com', apiKey: 'key' });
|
|
132
|
+
await expect(client.get('/coordinalo/services/srv_1')).rejects.toThrow('No SERVICIALO_ORG_ID');
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=client.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/__tests__/client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/mode.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
+
import { detectMode } from '../mode.js';
|
|
3
|
+
describe('detectMode', () => {
|
|
4
|
+
beforeEach(() => {
|
|
5
|
+
delete process.env.SERVICIALO_API_KEY;
|
|
6
|
+
delete process.env.SERVICIALO_ORG_ID;
|
|
7
|
+
});
|
|
8
|
+
it('returns "discovery" when no credentials are set', () => {
|
|
9
|
+
expect(detectMode()).toBe('discovery');
|
|
10
|
+
});
|
|
11
|
+
it('returns "authenticated" when both API_KEY and ORG_ID are set', () => {
|
|
12
|
+
process.env.SERVICIALO_API_KEY = 'test_key';
|
|
13
|
+
process.env.SERVICIALO_ORG_ID = 'test_org';
|
|
14
|
+
expect(detectMode()).toBe('authenticated');
|
|
15
|
+
});
|
|
16
|
+
it('falls back to "discovery" when only API_KEY is set', () => {
|
|
17
|
+
process.env.SERVICIALO_API_KEY = 'test_key';
|
|
18
|
+
expect(detectMode()).toBe('discovery');
|
|
19
|
+
});
|
|
20
|
+
it('falls back to "discovery" when only ORG_ID is set', () => {
|
|
21
|
+
process.env.SERVICIALO_ORG_ID = 'test_org';
|
|
22
|
+
expect(detectMode()).toBe('discovery');
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=mode.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode.test.js","sourceRoot":"","sources":["../../src/__tests__/mode.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACtC,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,UAAU,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,UAAU,CAAC;QAC3C,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,UAAU,CAAC;QAC5C,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,UAAU,CAAC;QAC3C,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/schemas.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { ActorSchema, LocationSchema } from '../tools/schemas.js';
|
|
3
|
+
describe('ActorSchema', () => {
|
|
4
|
+
it('accepts valid actor with all fields', () => {
|
|
5
|
+
const result = ActorSchema.safeParse({
|
|
6
|
+
type: 'agent',
|
|
7
|
+
id: 'agent_claude',
|
|
8
|
+
on_behalf_of: { type: 'client', id: 'cli_1' },
|
|
9
|
+
});
|
|
10
|
+
expect(result.success).toBe(true);
|
|
11
|
+
});
|
|
12
|
+
it('accepts actor without on_behalf_of', () => {
|
|
13
|
+
const result = ActorSchema.safeParse({ type: 'provider', id: 'prov_1' });
|
|
14
|
+
expect(result.success).toBe(true);
|
|
15
|
+
});
|
|
16
|
+
it('accepts all valid actor types', () => {
|
|
17
|
+
for (const type of ['client', 'provider', 'organization', 'agent']) {
|
|
18
|
+
const result = ActorSchema.safeParse({ type, id: 'test' });
|
|
19
|
+
expect(result.success).toBe(true);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
it('rejects invalid actor type', () => {
|
|
23
|
+
const result = ActorSchema.safeParse({ type: 'admin', id: 'test' });
|
|
24
|
+
expect(result.success).toBe(false);
|
|
25
|
+
});
|
|
26
|
+
it('rejects missing id', () => {
|
|
27
|
+
const result = ActorSchema.safeParse({ type: 'client' });
|
|
28
|
+
expect(result.success).toBe(false);
|
|
29
|
+
});
|
|
30
|
+
it('rejects missing type', () => {
|
|
31
|
+
const result = ActorSchema.safeParse({ id: 'test' });
|
|
32
|
+
expect(result.success).toBe(false);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
describe('LocationSchema', () => {
|
|
36
|
+
it('accepts valid coordinates', () => {
|
|
37
|
+
const result = LocationSchema.safeParse({ lat: -33.4265, lng: -70.6155 });
|
|
38
|
+
expect(result.success).toBe(true);
|
|
39
|
+
});
|
|
40
|
+
it('rejects missing lat', () => {
|
|
41
|
+
const result = LocationSchema.safeParse({ lng: -70.6155 });
|
|
42
|
+
expect(result.success).toBe(false);
|
|
43
|
+
});
|
|
44
|
+
it('rejects missing lng', () => {
|
|
45
|
+
const result = LocationSchema.safeParse({ lat: -33.4265 });
|
|
46
|
+
expect(result.success).toBe(false);
|
|
47
|
+
});
|
|
48
|
+
it('rejects non-numeric values', () => {
|
|
49
|
+
const result = LocationSchema.safeParse({ lat: 'abc', lng: 'def' });
|
|
50
|
+
expect(result.success).toBe(false);
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=schemas.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.test.js","sourceRoot":"","sources":["../../src/__tests__/schemas.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tools.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { CoordinaloClient } from '../client.js';
|
|
3
|
+
import { registryTools } from '../tools/public/registry.js';
|
|
4
|
+
import { publicAvailabilityTools } from '../tools/public/availability.js';
|
|
5
|
+
import { publicServicesTools } from '../tools/public/services.js';
|
|
6
|
+
import { comprometerTools } from '../tools/authenticated/comprometer.js';
|
|
7
|
+
import { deliveryTools } from '../tools/authenticated/delivery.js';
|
|
8
|
+
import { cerrarTools } from '../tools/authenticated/cerrar.js';
|
|
9
|
+
// Helper: mock fetch to return JSON
|
|
10
|
+
function mockFetch(data = {}) {
|
|
11
|
+
return vi.spyOn(globalThis, 'fetch').mockResolvedValue(new Response(JSON.stringify(data), { status: 200 }));
|
|
12
|
+
}
|
|
13
|
+
function publicClient() {
|
|
14
|
+
return new CoordinaloClient({ baseUrl: 'https://api.test.com' });
|
|
15
|
+
}
|
|
16
|
+
function authClient() {
|
|
17
|
+
return new CoordinaloClient({
|
|
18
|
+
baseUrl: 'https://api.test.com',
|
|
19
|
+
apiKey: 'key_123',
|
|
20
|
+
orgId: 'org_456',
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
describe('Public tools', () => {
|
|
24
|
+
beforeEach(() => vi.restoreAllMocks());
|
|
25
|
+
describe('registry.search', () => {
|
|
26
|
+
it('has correct schema', () => {
|
|
27
|
+
const result = registryTools['registry.search'].schema.safeParse({
|
|
28
|
+
vertical: 'kinesiologia',
|
|
29
|
+
});
|
|
30
|
+
expect(result.success).toBe(true);
|
|
31
|
+
});
|
|
32
|
+
it('calls /api/servicialo/registry', async () => {
|
|
33
|
+
const spy = mockFetch({ organizations: [] });
|
|
34
|
+
await registryTools['registry.search'].handler(publicClient(), {
|
|
35
|
+
vertical: 'kinesiologia',
|
|
36
|
+
location: 'Santiago',
|
|
37
|
+
limit: 5,
|
|
38
|
+
});
|
|
39
|
+
const url = new URL(spy.mock.calls[0][0]);
|
|
40
|
+
expect(url.pathname).toBe('/api/servicialo/registry');
|
|
41
|
+
expect(url.searchParams.get('vertical')).toBe('kinesiologia');
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
describe('registry.get_organization', () => {
|
|
45
|
+
it('calls /api/servicialo/{slug}/services', async () => {
|
|
46
|
+
const spy = mockFetch({ services: [] });
|
|
47
|
+
await registryTools['registry.get_organization'].handler(publicClient(), {
|
|
48
|
+
org_slug: 'clinica-vital',
|
|
49
|
+
});
|
|
50
|
+
const url = spy.mock.calls[0][0];
|
|
51
|
+
expect(url).toContain('/api/servicialo/clinica-vital/services');
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe('scheduling.check_availability', () => {
|
|
55
|
+
it('validates required fields', () => {
|
|
56
|
+
const schema = publicAvailabilityTools['scheduling.check_availability'].schema;
|
|
57
|
+
expect(schema.safeParse({}).success).toBe(false);
|
|
58
|
+
expect(schema.safeParse({
|
|
59
|
+
org_slug: 'test',
|
|
60
|
+
date_from: '2026-03-01',
|
|
61
|
+
date_to: '2026-03-07',
|
|
62
|
+
}).success).toBe(true);
|
|
63
|
+
});
|
|
64
|
+
it('calls correct endpoint with query params', async () => {
|
|
65
|
+
const spy = mockFetch({ slots: [] });
|
|
66
|
+
await publicAvailabilityTools['scheduling.check_availability'].handler(publicClient(), {
|
|
67
|
+
org_slug: 'clinica-vital',
|
|
68
|
+
service_id: 'srv_1',
|
|
69
|
+
date_from: '2026-03-01',
|
|
70
|
+
date_to: '2026-03-07',
|
|
71
|
+
});
|
|
72
|
+
const url = new URL(spy.mock.calls[0][0]);
|
|
73
|
+
expect(url.pathname).toBe('/api/servicialo/clinica-vital/availability');
|
|
74
|
+
expect(url.searchParams.get('from')).toBe('2026-03-01');
|
|
75
|
+
expect(url.searchParams.get('to')).toBe('2026-03-07');
|
|
76
|
+
expect(url.searchParams.get('serviceId')).toBe('srv_1');
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
describe('services.list', () => {
|
|
80
|
+
it('calls correct endpoint', async () => {
|
|
81
|
+
const spy = mockFetch({ services: [] });
|
|
82
|
+
await publicServicesTools['services.list'].handler(publicClient(), {
|
|
83
|
+
org_slug: 'clinica-vital',
|
|
84
|
+
});
|
|
85
|
+
const url = spy.mock.calls[0][0];
|
|
86
|
+
expect(url).toContain('/api/servicialo/clinica-vital/services');
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
describe('Authenticated tools', () => {
|
|
91
|
+
beforeEach(() => vi.restoreAllMocks());
|
|
92
|
+
describe('clients.get_or_create', () => {
|
|
93
|
+
it('validates actor is required', () => {
|
|
94
|
+
const schema = comprometerTools['clients.get_or_create'].schema;
|
|
95
|
+
expect(schema.safeParse({ email: 'test@test.com' }).success).toBe(false);
|
|
96
|
+
expect(schema.safeParse({
|
|
97
|
+
email: 'test@test.com',
|
|
98
|
+
actor: { type: 'agent', id: 'a1' },
|
|
99
|
+
}).success).toBe(true);
|
|
100
|
+
});
|
|
101
|
+
it('POSTs to /relacionalo/clients/upsert with mapped fields', async () => {
|
|
102
|
+
const spy = mockFetch({ id: 'cli_1' });
|
|
103
|
+
await comprometerTools['clients.get_or_create'].handler(authClient(), {
|
|
104
|
+
email: 'maria@test.com',
|
|
105
|
+
name: 'María',
|
|
106
|
+
last_name: 'González',
|
|
107
|
+
actor: { type: 'agent', id: 'agent_1' },
|
|
108
|
+
});
|
|
109
|
+
const [url, options] = spy.mock.calls[0];
|
|
110
|
+
expect(url).toContain('/relacionalo/clients/upsert');
|
|
111
|
+
const body = JSON.parse(options?.body);
|
|
112
|
+
expect(body.email).toBe('maria@test.com');
|
|
113
|
+
expect(body.lastName).toBe('González'); // mapped from last_name
|
|
114
|
+
expect(body.actor.type).toBe('agent');
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
describe('scheduling.book', () => {
|
|
118
|
+
it('POSTs to /coordinalo/sessions with mapped fields', async () => {
|
|
119
|
+
const spy = mockFetch({ session_id: 'ses_1', state: 'requested' });
|
|
120
|
+
await comprometerTools['scheduling.book'].handler(authClient(), {
|
|
121
|
+
service_id: 'srv_1',
|
|
122
|
+
provider_id: 'prov_1',
|
|
123
|
+
client_id: 'cli_1',
|
|
124
|
+
starts_at: '2026-03-01T10:00:00Z',
|
|
125
|
+
actor: { type: 'agent', id: 'a1' },
|
|
126
|
+
});
|
|
127
|
+
const body = JSON.parse(spy.mock.calls[0][1]?.body);
|
|
128
|
+
expect(body.serviceId).toBe('srv_1'); // mapped from service_id
|
|
129
|
+
expect(body.providerId).toBe('prov_1'); // mapped from provider_id
|
|
130
|
+
expect(body.clientId).toBe('cli_1'); // mapped from client_id
|
|
131
|
+
expect(body.startTime).toBe('2026-03-01T10:00:00Z'); // mapped from starts_at
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
describe('scheduling.confirm', () => {
|
|
135
|
+
it('POSTs to /coordinalo/sessions/{id}/confirm', async () => {
|
|
136
|
+
const spy = mockFetch({ state: 'confirmed' });
|
|
137
|
+
await comprometerTools['scheduling.confirm'].handler(authClient(), {
|
|
138
|
+
session_id: 'ses_123',
|
|
139
|
+
actor: { type: 'client', id: 'cli_1' },
|
|
140
|
+
});
|
|
141
|
+
const url = spy.mock.calls[0][0];
|
|
142
|
+
expect(url).toContain('/coordinalo/sessions/ses_123/confirm');
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
describe('delivery.checkin', () => {
|
|
146
|
+
it('POSTs with location and timestamp', async () => {
|
|
147
|
+
const spy = mockFetch({ state: 'in_progress' });
|
|
148
|
+
await deliveryTools['delivery.checkin'].handler(authClient(), {
|
|
149
|
+
session_id: 'ses_1',
|
|
150
|
+
actor: { type: 'provider', id: 'prov_1' },
|
|
151
|
+
location: { lat: -33.42, lng: -70.61 },
|
|
152
|
+
timestamp: '2026-03-01T10:00:00Z',
|
|
153
|
+
});
|
|
154
|
+
const body = JSON.parse(spy.mock.calls[0][1]?.body);
|
|
155
|
+
expect(body.location).toEqual({ lat: -33.42, lng: -70.61 });
|
|
156
|
+
expect(body.timestamp).toBe('2026-03-01T10:00:00Z');
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
describe('delivery.checkout', () => {
|
|
160
|
+
it('POSTs to /coordinalo/sessions/{id}/checkout', async () => {
|
|
161
|
+
const spy = mockFetch({ state: 'delivered' });
|
|
162
|
+
await deliveryTools['delivery.checkout'].handler(authClient(), {
|
|
163
|
+
session_id: 'ses_1',
|
|
164
|
+
actor: { type: 'provider', id: 'prov_1' },
|
|
165
|
+
});
|
|
166
|
+
const url = spy.mock.calls[0][0];
|
|
167
|
+
expect(url).toContain('/coordinalo/sessions/ses_1/checkout');
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
describe('delivery.record_evidence', () => {
|
|
171
|
+
it('validates evidence_type enum', () => {
|
|
172
|
+
const schema = deliveryTools['delivery.record_evidence'].schema;
|
|
173
|
+
expect(schema.safeParse({
|
|
174
|
+
session_id: 's1',
|
|
175
|
+
evidence_type: 'photo',
|
|
176
|
+
data: { url: 'https://img.test/1.jpg' },
|
|
177
|
+
actor: { type: 'provider', id: 'p1' },
|
|
178
|
+
}).success).toBe(true);
|
|
179
|
+
expect(schema.safeParse({
|
|
180
|
+
session_id: 's1',
|
|
181
|
+
evidence_type: 'invalid_type',
|
|
182
|
+
data: {},
|
|
183
|
+
actor: { type: 'provider', id: 'p1' },
|
|
184
|
+
}).success).toBe(false);
|
|
185
|
+
});
|
|
186
|
+
it('POSTs with mapped evidenceType', async () => {
|
|
187
|
+
const spy = mockFetch({ evidence_id: 'evi_1' });
|
|
188
|
+
await deliveryTools['delivery.record_evidence'].handler(authClient(), {
|
|
189
|
+
session_id: 'ses_1',
|
|
190
|
+
evidence_type: 'document',
|
|
191
|
+
data: { type: 'clinical_record', signed: true },
|
|
192
|
+
actor: { type: 'provider', id: 'prov_1' },
|
|
193
|
+
});
|
|
194
|
+
const body = JSON.parse(spy.mock.calls[0][1]?.body);
|
|
195
|
+
expect(body.evidenceType).toBe('document'); // mapped from evidence_type
|
|
196
|
+
expect(body.data.signed).toBe(true);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
describe('payments.create_sale', () => {
|
|
200
|
+
it('POSTs to /planificalo/sales with mapped fields', async () => {
|
|
201
|
+
const spy = mockFetch({ sale_id: 'sale_1' });
|
|
202
|
+
await cerrarTools['payments.create_sale'].handler(authClient(), {
|
|
203
|
+
client_id: 'cli_1',
|
|
204
|
+
service_id: 'srv_1',
|
|
205
|
+
provider_id: 'prov_1',
|
|
206
|
+
unit_price: 35000,
|
|
207
|
+
});
|
|
208
|
+
const body = JSON.parse(spy.mock.calls[0][1]?.body);
|
|
209
|
+
expect(body.clientId).toBe('cli_1');
|
|
210
|
+
expect(body.unitPrice).toBe(35000);
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
describe('payments.record_payment', () => {
|
|
214
|
+
it('validates payment method enum', () => {
|
|
215
|
+
const schema = cerrarTools['payments.record_payment'].schema;
|
|
216
|
+
expect(schema.safeParse({
|
|
217
|
+
venta_id: 'v1',
|
|
218
|
+
amount: 35000,
|
|
219
|
+
method: 'transferencia',
|
|
220
|
+
}).success).toBe(true);
|
|
221
|
+
expect(schema.safeParse({
|
|
222
|
+
venta_id: 'v1',
|
|
223
|
+
amount: 35000,
|
|
224
|
+
method: 'bitcoin',
|
|
225
|
+
}).success).toBe(false);
|
|
226
|
+
});
|
|
227
|
+
it('POSTs to /planificalo/payments with mapped fields', async () => {
|
|
228
|
+
const spy = mockFetch({ payment_id: 'pay_1' });
|
|
229
|
+
await cerrarTools['payments.record_payment'].handler(authClient(), {
|
|
230
|
+
venta_id: 'sale_1',
|
|
231
|
+
amount: 35000,
|
|
232
|
+
method: 'transferencia',
|
|
233
|
+
reference: 'TRX-123',
|
|
234
|
+
});
|
|
235
|
+
const body = JSON.parse(spy.mock.calls[0][1]?.body);
|
|
236
|
+
expect(body.ventaId).toBe('sale_1');
|
|
237
|
+
expect(body.paymentMethod).toBe('transferencia');
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
//# sourceMappingURL=tools.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../../src/__tests__/tools.test.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* HTTP client for Coordinalo REST API.
|
|
3
3
|
*
|
|
4
4
|
* Supports two modes:
|
|
5
|
-
* - Public: calls to /api/
|
|
5
|
+
* - Public: calls to /api/servicialo/* without Authorization header
|
|
6
6
|
* - Authenticated: calls to /api/organizations/{orgSlug}/* with Bearer token
|
|
7
7
|
*/
|
|
8
8
|
export interface ClientConfig {
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,KAAK,CAAqB;gBAEtB,MAAM,EAAE,YAAY;IAMhC,sEAAsE;IACtE,IAAI,eAAe,IAAI,OAAO,CAE7B;IAID,6CAA6C;IAC7C,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,aAAa;IAMrB;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAOhB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAMtB,QAAQ,CAAC,GAAG;oBACQ,MAAM,WAAW,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,KAAG,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,KAAK,CAAqB;gBAEtB,MAAM,EAAE,YAAY;IAMhC,sEAAsE;IACtE,IAAI,eAAe,IAAI,OAAO,CAE7B;IAID,6CAA6C;IAC7C,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,aAAa;IAMrB;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAOhB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAMtB,QAAQ,CAAC,GAAG;oBACQ,MAAM,WAAW,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,KAAG,OAAO,CAAC,OAAO,CAAC;MAoCjG;IAII,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAuBzF,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAepD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAenD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAerD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAa7C"}
|