@servicialo/mcp-server 0.7.0 → 0.9.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 (83) hide show
  1. package/README.en.md +392 -0
  2. package/README.md +336 -147
  3. package/dist/adapter-http.d.ts +51 -0
  4. package/dist/adapter-http.d.ts.map +1 -0
  5. package/dist/adapter-http.js +187 -0
  6. package/dist/adapter-http.js.map +1 -0
  7. package/dist/adapter.d.ts +42 -0
  8. package/dist/adapter.d.ts.map +1 -0
  9. package/dist/adapter.js +42 -0
  10. package/dist/adapter.js.map +1 -0
  11. package/dist/client.d.ts +5 -1
  12. package/dist/client.d.ts.map +1 -1
  13. package/dist/client.js +3 -0
  14. package/dist/client.js.map +1 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +63 -59
  17. package/dist/index.js.map +1 -1
  18. package/dist/mandate.d.ts +321 -0
  19. package/dist/mandate.d.ts.map +1 -0
  20. package/dist/mandate.js +349 -0
  21. package/dist/mandate.js.map +1 -0
  22. package/dist/provider-profile.d.ts +985 -0
  23. package/dist/provider-profile.d.ts.map +1 -0
  24. package/dist/provider-profile.js +210 -0
  25. package/dist/provider-profile.js.map +1 -0
  26. package/dist/tools/authenticated/cerrar.d.ts +5 -5
  27. package/dist/tools/authenticated/cerrar.d.ts.map +1 -1
  28. package/dist/tools/authenticated/cerrar.js.map +1 -1
  29. package/dist/tools/authenticated/comprometer.d.ts +4 -4
  30. package/dist/tools/authenticated/comprometer.d.ts.map +1 -1
  31. package/dist/tools/authenticated/comprometer.js.map +1 -1
  32. package/dist/tools/authenticated/delivery.d.ts +4 -4
  33. package/dist/tools/authenticated/delivery.d.ts.map +1 -1
  34. package/dist/tools/authenticated/delivery.js.map +1 -1
  35. package/dist/tools/authenticated/entender.d.ts +3 -3
  36. package/dist/tools/authenticated/entender.d.ts.map +1 -1
  37. package/dist/tools/authenticated/entender.js.map +1 -1
  38. package/dist/tools/authenticated/lifecycle.d.ts +5 -5
  39. package/dist/tools/authenticated/lifecycle.d.ts.map +1 -1
  40. package/dist/tools/authenticated/lifecycle.js.map +1 -1
  41. package/dist/tools/authenticated/resolve-auth.d.ts +118 -0
  42. package/dist/tools/authenticated/resolve-auth.d.ts.map +1 -0
  43. package/dist/tools/authenticated/resolve-auth.js +62 -0
  44. package/dist/tools/authenticated/resolve-auth.js.map +1 -0
  45. package/dist/tools/authenticated/resource.d.ts +295 -0
  46. package/dist/tools/authenticated/resource.d.ts.map +1 -0
  47. package/dist/tools/authenticated/resource.js +125 -0
  48. package/dist/tools/authenticated/resource.js.map +1 -0
  49. package/dist/tools/public/a2a.d.ts +18 -0
  50. package/dist/tools/public/a2a.d.ts.map +1 -0
  51. package/dist/tools/public/a2a.js +15 -0
  52. package/dist/tools/public/a2a.js.map +1 -0
  53. package/dist/tools/public/availability.d.ts +2 -2
  54. package/dist/tools/public/availability.d.ts.map +1 -1
  55. package/dist/tools/public/availability.js.map +1 -1
  56. package/dist/tools/public/registry.d.ts +8 -3
  57. package/dist/tools/public/registry.d.ts.map +1 -1
  58. package/dist/tools/public/registry.js +8 -0
  59. package/dist/tools/public/registry.js.map +1 -1
  60. package/dist/tools/public/resolve.d.ts +60 -0
  61. package/dist/tools/public/resolve.d.ts.map +1 -0
  62. package/dist/tools/public/resolve.js +60 -0
  63. package/dist/tools/public/resolve.js.map +1 -0
  64. package/dist/tools/public/services.d.ts +2 -2
  65. package/dist/tools/public/services.d.ts.map +1 -1
  66. package/dist/tools/public/services.js.map +1 -1
  67. package/package.json +4 -2
  68. package/dist/__tests__/client.test.d.ts +0 -2
  69. package/dist/__tests__/client.test.d.ts.map +0 -1
  70. package/dist/__tests__/client.test.js +0 -136
  71. package/dist/__tests__/client.test.js.map +0 -1
  72. package/dist/__tests__/mode.test.d.ts +0 -2
  73. package/dist/__tests__/mode.test.d.ts.map +0 -1
  74. package/dist/__tests__/mode.test.js +0 -25
  75. package/dist/__tests__/mode.test.js.map +0 -1
  76. package/dist/__tests__/schemas.test.d.ts +0 -2
  77. package/dist/__tests__/schemas.test.d.ts.map +0 -1
  78. package/dist/__tests__/schemas.test.js +0 -53
  79. package/dist/__tests__/schemas.test.js.map +0 -1
  80. package/dist/__tests__/tools.test.d.ts +0 -2
  81. package/dist/__tests__/tools.test.d.ts.map +0 -1
  82. package/dist/__tests__/tools.test.js +0 -241
  83. package/dist/__tests__/tools.test.js.map +0 -1
@@ -0,0 +1,60 @@
1
+ import { z } from 'zod';
2
+ import type { ServicialoAdapter } from '../../adapter.js';
3
+ export declare const resolveTools: {
4
+ 'resolve.lookup': {
5
+ description: string;
6
+ schema: z.ZodObject<{
7
+ org_slug: z.ZodString;
8
+ country: z.ZodDefault<z.ZodString>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ country: string;
11
+ org_slug: string;
12
+ }, {
13
+ org_slug: string;
14
+ country?: string | undefined;
15
+ }>;
16
+ handler: (client: ServicialoAdapter, args: {
17
+ org_slug: string;
18
+ country?: string;
19
+ }) => Promise<unknown>;
20
+ };
21
+ 'resolve.search': {
22
+ description: string;
23
+ schema: z.ZodObject<{
24
+ country: z.ZodDefault<z.ZodString>;
25
+ vertical: z.ZodOptional<z.ZodString>;
26
+ limit: z.ZodDefault<z.ZodNumber>;
27
+ }, "strip", z.ZodTypeAny, {
28
+ country: string;
29
+ limit: number;
30
+ vertical?: string | undefined;
31
+ }, {
32
+ vertical?: string | undefined;
33
+ country?: string | undefined;
34
+ limit?: number | undefined;
35
+ }>;
36
+ handler: (client: ServicialoAdapter, args: {
37
+ country?: string;
38
+ vertical?: string;
39
+ limit?: number;
40
+ }) => Promise<unknown>;
41
+ };
42
+ 'trust.get_score': {
43
+ description: string;
44
+ schema: z.ZodObject<{
45
+ org_slug: z.ZodString;
46
+ country: z.ZodDefault<z.ZodString>;
47
+ }, "strip", z.ZodTypeAny, {
48
+ country: string;
49
+ org_slug: string;
50
+ }, {
51
+ org_slug: string;
52
+ country?: string | undefined;
53
+ }>;
54
+ handler: (client: ServicialoAdapter, args: {
55
+ org_slug: string;
56
+ country?: string;
57
+ }) => Promise<unknown>;
58
+ };
59
+ };
60
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/tools/public/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,eAAO,MAAM,YAAY;;;;;;;;;;;;;0BAUG,iBAAiB,QAAQ;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;0BAgB/D,iBAAiB,QAAQ;YAAE,OAAO,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;0BAkBhF,iBAAiB,QAAQ;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE;;CAgB1F,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { z } from 'zod';
2
+ export const resolveTools = {
3
+ 'resolve.lookup': {
4
+ description: 'Resuelve un orgSlug a su endpoint MCP/REST, nivel de confianza e identidad. ' +
5
+ 'Es el equivalente a un DNS lookup: dado un nombre único global, devuelve dónde ' +
6
+ 'están los servicios de esa organización.',
7
+ schema: z.object({
8
+ org_slug: z.string().describe('Slug de la organización (ej: clinica-dental-sur)'),
9
+ country: z.string().default('cl').describe('País ISO 3166-1 alpha-2 (ej: cl, mx, ar). Default: cl'),
10
+ }),
11
+ handler: async (client, args) => {
12
+ const country = args.country ?? 'cl';
13
+ return client.pub.get(`/api/servicialo/resolve/${country}/${args.org_slug}`);
14
+ },
15
+ },
16
+ 'resolve.search': {
17
+ description: 'Busca organizaciones registradas en el resolver Servicialo por país y vertical. ' +
18
+ 'Devuelve una lista con slug, nombre, endpoints y nivel de confianza. ' +
19
+ 'Útil para descubrimiento: "¿qué clínicas dentales hay en Chile?"',
20
+ schema: z.object({
21
+ country: z.string().default('cl').describe('País ISO 3166-1 alpha-2 (ej: cl, mx, ar). Default: cl'),
22
+ vertical: z.string().optional().describe('Vertical del servicio (ej: salud, hogar, legal, educacion)'),
23
+ limit: z.number().default(20).describe('Cantidad máxima de resultados (1-100). Default: 20'),
24
+ }),
25
+ handler: async (client, args) => {
26
+ const country = args.country ?? 'cl';
27
+ const params = {};
28
+ if (args.vertical)
29
+ params.vertical = args.vertical;
30
+ if (args.limit)
31
+ params.limit = args.limit;
32
+ return client.pub.get(`/api/servicialo/resolve/${country}`, params);
33
+ },
34
+ },
35
+ 'trust.get_score': {
36
+ description: 'Obtiene el puntaje de confianza de una organización en el resolver Servicialo. ' +
37
+ 'Devuelve score (0-100), nivel (unverified/declared/vouched/verified), y última actividad. ' +
38
+ 'El trust es pasivo: se acumula con historial de servicios verificados.',
39
+ schema: z.object({
40
+ org_slug: z.string().describe('Slug de la organización (ej: clinica-dental-sur)'),
41
+ country: z.string().default('cl').describe('País ISO 3166-1 alpha-2. Default: cl'),
42
+ }),
43
+ handler: async (client, args) => {
44
+ const country = args.country ?? 'cl';
45
+ const result = await client.pub.get(`/api/servicialo/resolve/${country}/${args.org_slug}`);
46
+ // Extract trust portion from resolution record
47
+ const resolution = result?.resolution;
48
+ if (resolution?.trust) {
49
+ return {
50
+ org_slug: args.org_slug,
51
+ country,
52
+ trust: resolution.trust,
53
+ status: resolution.status,
54
+ };
55
+ }
56
+ return result;
57
+ },
58
+ },
59
+ };
60
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/tools/public/resolve.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import type { CoordinaloClient } from '../../client.js';
2
+ import type { ServicialoAdapter } from '../../adapter.js';
3
3
  export declare const publicServicesTools: {
4
4
  'services.list': {
5
5
  description: string;
@@ -10,7 +10,7 @@ export declare const publicServicesTools: {
10
10
  }, {
11
11
  org_slug: string;
12
12
  }>;
13
- handler: (client: CoordinaloClient, args: {
13
+ handler: (client: ServicialoAdapter, args: {
14
14
  org_slug: string;
15
15
  }) => Promise<unknown>;
16
16
  };
@@ -1 +1 @@
1
- {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../src/tools/public/services.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,eAAO,MAAM,mBAAmB;;;;;;;;;;0BAMJ,gBAAgB,QAAQ;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE;;CAIvE,CAAC"}
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../src/tools/public/services.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,eAAO,MAAM,mBAAmB;;;;;;;;;;0BAMJ,iBAAiB,QAAQ;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE;;CAIxE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/tools/public/services.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,eAAe,EAAE;QACf,WAAW,EAAE,4DAA4D;QACzE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;SACzD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAwB,EAAE,IAA0B,EAAE,EAAE;YACtE,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,QAAQ,WAAW,CAAC,CAAC;QACrE,CAAC;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/tools/public/services.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,eAAe,EAAE;QACf,WAAW,EAAE,4DAA4D;QACzE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;SACzD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,IAA0B,EAAE,EAAE;YACvE,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,QAAQ,WAAW,CAAC,CAAC;QACrE,CAAC;KACF;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicialo/mcp-server",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "mcpName": "com.servicialo/mcp-server",
5
5
  "description": "Open protocol for professional service delivery — connects AI agents with scheduling, verification and settlement of professional services",
6
6
  "license": "Apache-2.0",
@@ -15,7 +15,8 @@
15
15
  },
16
16
  "main": "./dist/index.js",
17
17
  "files": [
18
- "dist"
18
+ "dist",
19
+ "!dist/__tests__"
19
20
  ],
20
21
  "scripts": {
21
22
  "build": "tsc",
@@ -37,6 +38,7 @@
37
38
  "engines": {
38
39
  "node": ">=18"
39
40
  },
41
+ "deprecated_registry_entry": "io.github.danioni/servicialo was deprecated in March 2026. Use com.servicialo/mcp-server.",
40
42
  "keywords": [
41
43
  "mcp",
42
44
  "model-context-protocol",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=client.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/client.test.ts"],"names":[],"mappings":""}
@@ -1,136 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/__tests__/client.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=mode.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mode.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/mode.test.ts"],"names":[],"mappings":""}
@@ -1,25 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=schemas.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schemas.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/schemas.test.ts"],"names":[],"mappings":""}
@@ -1,53 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"schemas.test.js","sourceRoot":"","sources":["../../src/__tests__/schemas.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=tools.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tools.test.ts"],"names":[],"mappings":""}