@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.
- package/README.en.md +392 -0
- package/README.md +336 -147
- package/dist/adapter-http.d.ts +51 -0
- package/dist/adapter-http.d.ts.map +1 -0
- package/dist/adapter-http.js +187 -0
- package/dist/adapter-http.js.map +1 -0
- package/dist/adapter.d.ts +42 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +42 -0
- package/dist/adapter.js.map +1 -0
- package/dist/client.d.ts +5 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +3 -0
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +63 -59
- package/dist/index.js.map +1 -1
- package/dist/mandate.d.ts +321 -0
- package/dist/mandate.d.ts.map +1 -0
- package/dist/mandate.js +349 -0
- package/dist/mandate.js.map +1 -0
- package/dist/provider-profile.d.ts +985 -0
- package/dist/provider-profile.d.ts.map +1 -0
- package/dist/provider-profile.js +210 -0
- package/dist/provider-profile.js.map +1 -0
- package/dist/tools/authenticated/cerrar.d.ts +5 -5
- package/dist/tools/authenticated/cerrar.d.ts.map +1 -1
- package/dist/tools/authenticated/cerrar.js.map +1 -1
- package/dist/tools/authenticated/comprometer.d.ts +4 -4
- package/dist/tools/authenticated/comprometer.d.ts.map +1 -1
- package/dist/tools/authenticated/comprometer.js.map +1 -1
- package/dist/tools/authenticated/delivery.d.ts +4 -4
- package/dist/tools/authenticated/delivery.d.ts.map +1 -1
- package/dist/tools/authenticated/delivery.js.map +1 -1
- package/dist/tools/authenticated/entender.d.ts +3 -3
- package/dist/tools/authenticated/entender.d.ts.map +1 -1
- package/dist/tools/authenticated/entender.js.map +1 -1
- package/dist/tools/authenticated/lifecycle.d.ts +5 -5
- package/dist/tools/authenticated/lifecycle.d.ts.map +1 -1
- package/dist/tools/authenticated/lifecycle.js.map +1 -1
- package/dist/tools/authenticated/resolve-auth.d.ts +118 -0
- package/dist/tools/authenticated/resolve-auth.d.ts.map +1 -0
- package/dist/tools/authenticated/resolve-auth.js +62 -0
- package/dist/tools/authenticated/resolve-auth.js.map +1 -0
- package/dist/tools/authenticated/resource.d.ts +295 -0
- package/dist/tools/authenticated/resource.d.ts.map +1 -0
- package/dist/tools/authenticated/resource.js +125 -0
- package/dist/tools/authenticated/resource.js.map +1 -0
- package/dist/tools/public/a2a.d.ts +18 -0
- package/dist/tools/public/a2a.d.ts.map +1 -0
- package/dist/tools/public/a2a.js +15 -0
- package/dist/tools/public/a2a.js.map +1 -0
- package/dist/tools/public/availability.d.ts +2 -2
- package/dist/tools/public/availability.d.ts.map +1 -1
- package/dist/tools/public/availability.js.map +1 -1
- package/dist/tools/public/registry.d.ts +8 -3
- package/dist/tools/public/registry.d.ts.map +1 -1
- package/dist/tools/public/registry.js +8 -0
- package/dist/tools/public/registry.js.map +1 -1
- package/dist/tools/public/resolve.d.ts +60 -0
- package/dist/tools/public/resolve.d.ts.map +1 -0
- package/dist/tools/public/resolve.js +60 -0
- package/dist/tools/public/resolve.js.map +1 -0
- package/dist/tools/public/services.d.ts +2 -2
- package/dist/tools/public/services.d.ts.map +1 -1
- package/dist/tools/public/services.js.map +1 -1
- package/package.json +4 -2
- package/dist/__tests__/client.test.d.ts +0 -2
- package/dist/__tests__/client.test.d.ts.map +0 -1
- package/dist/__tests__/client.test.js +0 -136
- package/dist/__tests__/client.test.js.map +0 -1
- package/dist/__tests__/mode.test.d.ts +0 -2
- package/dist/__tests__/mode.test.d.ts.map +0 -1
- package/dist/__tests__/mode.test.js +0 -25
- package/dist/__tests__/mode.test.js.map +0 -1
- package/dist/__tests__/schemas.test.d.ts +0 -2
- package/dist/__tests__/schemas.test.d.ts.map +0 -1
- package/dist/__tests__/schemas.test.js +0 -53
- package/dist/__tests__/schemas.test.js.map +0 -1
- package/dist/__tests__/tools.test.d.ts +0 -2
- package/dist/__tests__/tools.test.d.ts.map +0 -1
- package/dist/__tests__/tools.test.js +0 -241
- 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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,gBAAgB,EAAE;QAChB,WAAW,EACT,8EAA8E;YAC9E,iFAAiF;YACjF,0CAA0C;QAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;YACjF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,uDAAuD,CAAC;SACpG,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,IAA4C,EAAE,EAAE;YACzF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;YACrC,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,2BAA2B,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/E,CAAC;KACF;IAED,gBAAgB,EAAE;QAChB,WAAW,EACT,kFAAkF;YAClF,uEAAuE;YACvE,kEAAkE;QACpE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,uDAAuD,CAAC;YACnG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;YACtG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,oDAAoD,CAAC;SAC7F,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,IAA6D,EAAE,EAAE;YAC1G,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;YACrC,MAAM,MAAM,GAAgD,EAAE,CAAC;YAC/D,IAAI,IAAI,CAAC,QAAQ;gBAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YACnD,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAC1C,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,2BAA2B,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;QACtE,CAAC;KACF;IAED,iBAAiB,EAAE;QACjB,WAAW,EACT,iFAAiF;YACjF,4FAA4F;YAC5F,wEAAwE;QAC1E,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;YACjF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;SACnF,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,IAA4C,EAAE,EAAE;YACzF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,2BAA2B,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3F,+CAA+C;YAC/C,MAAM,UAAU,GAAI,MAAkC,EAAE,UAAiD,CAAC;YAC1G,IAAI,UAAU,EAAE,KAAK,EAAE,CAAC;gBACtB,OAAO;oBACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,OAAO;oBACP,KAAK,EAAE,UAAU,CAAC,KAAK;oBACvB,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;KACF;CACF,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import type {
|
|
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:
|
|
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,
|
|
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,
|
|
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.
|
|
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 +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 +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 +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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tools.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tools.test.ts"],"names":[],"mappings":""}
|