boondmanager-mcp-server 1.3.9 → 1.5.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 +108 -5
- package/dist/index.js +27 -45
- package/dist/index.js.map +1 -1
- package/dist/schemas/index.d.ts +146 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +131 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/server.d.ts +6 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +57 -0
- package/dist/server.js.map +1 -0
- package/dist/services/boond-client.d.ts +3 -2
- package/dist/services/boond-client.d.ts.map +1 -1
- package/dist/services/boond-client.js +25 -3
- package/dist/services/boond-client.js.map +1 -1
- package/dist/tools/candidates.d.ts.map +1 -1
- package/dist/tools/candidates.js +20 -2
- package/dist/tools/candidates.js.map +1 -1
- package/dist/tools/companies.d.ts.map +1 -1
- package/dist/tools/companies.js +19 -2
- package/dist/tools/companies.js.map +1 -1
- package/dist/tools/contacts.d.ts.map +1 -1
- package/dist/tools/contacts.js +19 -2
- package/dist/tools/contacts.js.map +1 -1
- package/dist/tools/crud-factory.d.ts +6 -1
- package/dist/tools/crud-factory.d.ts.map +1 -1
- package/dist/tools/crud-factory.js +9 -6
- package/dist/tools/crud-factory.js.map +1 -1
- package/dist/tools/opportunities.d.ts.map +1 -1
- package/dist/tools/opportunities.js +18 -2
- package/dist/tools/opportunities.js.map +1 -1
- package/dist/tools/projects.d.ts.map +1 -1
- package/dist/tools/projects.js +18 -2
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/resources.d.ts.map +1 -1
- package/dist/tools/resources.js +21 -2
- package/dist/tools/resources.js.map +1 -1
- package/dist/transports/http.d.ts +20 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +152 -0
- package/dist/transports/http.js.map +1 -0
- package/manifest.json +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -268,6 +268,105 @@ export BOOND_BASE_URL="https://votre-instance.boondmanager.com/api"
|
|
|
268
268
|
|
|
269
269
|
Par defaut, l'URL est `https://ui.boondmanager.com/api`.
|
|
270
270
|
|
|
271
|
+
## Transports
|
|
272
|
+
|
|
273
|
+
Le serveur supporte deux transports MCP, selectionnables via la variable d'environnement `MCP_TRANSPORT`.
|
|
274
|
+
|
|
275
|
+
| Transport | Valeur | Cas d'usage |
|
|
276
|
+
|-----------|--------|-------------|
|
|
277
|
+
| **stdio** (defaut) | `stdio` ou non defini | Claude Desktop, Claude Code, integration locale |
|
|
278
|
+
| **Streamable HTTP** | `http` (alias : `streamable-http`) | Gateway MCP, deploiement distant, conteneurs |
|
|
279
|
+
|
|
280
|
+
### Streamable HTTP (pour les gateways MCP)
|
|
281
|
+
|
|
282
|
+
Depuis la v1.4.0, le serveur peut etre expose en HTTP (specification MCP Streamable HTTP 2025-03-26) afin d'etre branche derriere une passerelle MCP ou deploye comme service.
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
export MCP_TRANSPORT=http
|
|
286
|
+
export MCP_HTTP_HOST=0.0.0.0 # defaut: 127.0.0.1
|
|
287
|
+
export MCP_HTTP_PORT=3000 # defaut: 3000
|
|
288
|
+
export MCP_HTTP_PATH=/mcp # defaut: /mcp
|
|
289
|
+
export MCP_HTTP_BEARER_TOKEN=xxx # optionnel: protege l'endpoint
|
|
290
|
+
export BOOND_API_TOKEN=... # (credentials BoondManager, comme en stdio)
|
|
291
|
+
|
|
292
|
+
npx boondmanager-mcp-server
|
|
293
|
+
# 🚀 BoondManager MCP Server running (streamable HTTP transport)
|
|
294
|
+
# 📡 Endpoint: http://0.0.0.0:3000/mcp
|
|
295
|
+
# 🔑 Mode: stateless
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
**Variables d'environnement HTTP**
|
|
299
|
+
|
|
300
|
+
| Variable | Defaut | Description |
|
|
301
|
+
|----------|--------|-------------|
|
|
302
|
+
| `MCP_TRANSPORT` | `stdio` | `http` pour activer le transport HTTP |
|
|
303
|
+
| `MCP_HTTP_HOST` | `127.0.0.1` | Interface d'ecoute (`0.0.0.0` pour exposer) |
|
|
304
|
+
| `MCP_HTTP_PORT` | `3000` | Port TCP |
|
|
305
|
+
| `MCP_HTTP_PATH` | `/mcp` | Chemin HTTP de l'endpoint MCP |
|
|
306
|
+
| `MCP_HTTP_STATEFUL` | `false` | `true` pour activer le mode stateful (session `Mcp-Session-Id`) |
|
|
307
|
+
| `MCP_HTTP_BEARER_TOKEN` | _(vide)_ | Si defini, le serveur exige `Authorization: Bearer <token>` |
|
|
308
|
+
| `MCP_HTTP_JSON_RESPONSE` | `false` | `true` pour forcer des reponses JSON (sans SSE) |
|
|
309
|
+
|
|
310
|
+
**Stateless (defaut)** : chaque requete HTTP POST est independante, idealement adapte a un gateway qui multiplexe plusieurs serveurs MCP. Aucune session n'est conservee cote serveur.
|
|
311
|
+
|
|
312
|
+
**Stateful** : le serveur genere un `Mcp-Session-Id` a l'initialisation que le client doit renvoyer dans chaque requete suivante. Utile pour les clients MCP natifs qui beneficient du streaming SSE et des notifications serveur.
|
|
313
|
+
|
|
314
|
+
#### Exemple : verifier l'endpoint
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
curl -s -X POST http://localhost:3000/mcp \
|
|
318
|
+
-H 'Content-Type: application/json' \
|
|
319
|
+
-H 'Accept: application/json, text/event-stream' \
|
|
320
|
+
-d '{
|
|
321
|
+
"jsonrpc": "2.0",
|
|
322
|
+
"id": 1,
|
|
323
|
+
"method": "initialize",
|
|
324
|
+
"params": {
|
|
325
|
+
"protocolVersion": "2025-06-18",
|
|
326
|
+
"capabilities": {},
|
|
327
|
+
"clientInfo": { "name": "curl", "version": "1.0" }
|
|
328
|
+
}
|
|
329
|
+
}'
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
#### Exemple : Claude Code via HTTP
|
|
333
|
+
|
|
334
|
+
```bash
|
|
335
|
+
claude mcp add --transport http \
|
|
336
|
+
--header "Authorization: Bearer votre_token_local" \
|
|
337
|
+
boondmanager https://mcp.votre-domaine.com/mcp
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
#### Exemple : configuration `.mcp.json` HTTP
|
|
341
|
+
|
|
342
|
+
```json
|
|
343
|
+
{
|
|
344
|
+
"mcpServers": {
|
|
345
|
+
"boondmanager": {
|
|
346
|
+
"type": "http",
|
|
347
|
+
"url": "https://mcp.votre-domaine.com/mcp",
|
|
348
|
+
"headers": {
|
|
349
|
+
"Authorization": "Bearer ${MCP_HTTP_BEARER_TOKEN}"
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
#### Exemple : Docker
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
docker run --rm -p 3000:3000 \
|
|
360
|
+
-e MCP_TRANSPORT=http \
|
|
361
|
+
-e MCP_HTTP_HOST=0.0.0.0 \
|
|
362
|
+
-e MCP_HTTP_BEARER_TOKEN=$(openssl rand -hex 32) \
|
|
363
|
+
-e BOOND_API_TOKEN=$BOOND_API_TOKEN \
|
|
364
|
+
node:20-alpine \
|
|
365
|
+
npx -y boondmanager-mcp-server
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
> **Securite** : en HTTP, les credentials BoondManager restent cote serveur (variables d'environnement du conteneur). Seul le token MCP (`MCP_HTTP_BEARER_TOKEN`) circule entre le client et le serveur. Derriere un reverse proxy, ajoutez TLS (HTTPS) et limitez l'acces reseau au gateway.
|
|
369
|
+
|
|
271
370
|
## Exemples d'utilisation
|
|
272
371
|
|
|
273
372
|
Une fois configure, vous pouvez demander a Claude :
|
|
@@ -315,9 +414,12 @@ Une fois configure, vous pouvez demander a Claude :
|
|
|
315
414
|
```
|
|
316
415
|
boondmanager-mcp-server/
|
|
317
416
|
├── src/
|
|
318
|
-
│ ├── index.ts # Point d'entree MCP (
|
|
417
|
+
│ ├── index.ts # Point d'entree MCP (selection du transport)
|
|
418
|
+
│ ├── server.ts # Factory createMcpServer() + liste des domaines
|
|
319
419
|
│ ├── constants.ts # Configuration, API paths, onglets
|
|
320
420
|
│ ├── types.ts # Types TypeScript (JSON:API)
|
|
421
|
+
│ ├── transports/
|
|
422
|
+
│ │ └── http.ts # Transport Streamable HTTP (gateway/remote)
|
|
321
423
|
│ ├── services/
|
|
322
424
|
│ │ └── boond-client.ts # Client HTTP API BoondManager
|
|
323
425
|
│ ├── schemas/
|
|
@@ -372,11 +474,12 @@ boondmanager-mcp-server/
|
|
|
372
474
|
|
|
373
475
|
## Securite
|
|
374
476
|
|
|
375
|
-
- Les credentials ne transitent jamais via le
|
|
376
|
-
-
|
|
477
|
+
- Les credentials BoondManager (JWT ou BasicAuth) ne transitent jamais via le protocole MCP -- ils sont configures en variables d'environnement cote serveur uniquement
|
|
478
|
+
- En mode **stdio**, le serveur tourne en local, aucun port reseau n'est expose
|
|
479
|
+
- En mode **streamable HTTP**, protegez l'endpoint avec `MCP_HTTP_BEARER_TOKEN` + TLS (HTTPS via reverse proxy) et restreignez l'acces reseau a votre gateway
|
|
377
480
|
- Compatible avec les exigences ISO 27001
|
|
378
481
|
- L'API BoondManager est hebergee en France et conforme RGPD
|
|
379
|
-
- Authentification
|
|
482
|
+
- Authentification BoondManager : JWT (recommande), BasicAuth, ou JWT construit automatiquement a partir des composants
|
|
380
483
|
|
|
381
484
|
## Developpement
|
|
382
485
|
|
|
@@ -407,7 +510,7 @@ npm run typecheck
|
|
|
407
510
|
- **Validation** : Zod 4
|
|
408
511
|
- **Tests** : Vitest 4 + couverture V8
|
|
409
512
|
- **Lint** : ESLint 10 + typescript-eslint
|
|
410
|
-
- **
|
|
513
|
+
- **Transports** : stdio (defaut) + Streamable HTTP (MCP 2025-03-26)
|
|
411
514
|
|
|
412
515
|
## Ressources
|
|
413
516
|
|
package/dist/index.js
CHANGED
|
@@ -1,50 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
2
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
3
|
import { initClient } from "./services/boond-client.js";
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
registerContactTools(server);
|
|
14
|
-
registerCompanyTools(server);
|
|
15
|
-
registerOpportunityTools(server);
|
|
16
|
-
registerActionTools(server);
|
|
17
|
-
registerTimesheetTools(server);
|
|
18
|
-
registerProjectTools(server);
|
|
19
|
-
registerInvoiceTools(server);
|
|
20
|
-
registerOrderTools(server);
|
|
21
|
-
registerDeliveryTools(server);
|
|
22
|
-
registerAbsenceTools(server);
|
|
23
|
-
registerExpenseTools(server);
|
|
24
|
-
registerProductTools(server);
|
|
25
|
-
registerPositioningTools(server);
|
|
26
|
-
registerPaymentTools(server);
|
|
27
|
-
registerAdvantageTools(server);
|
|
28
|
-
registerApplicationTools(server);
|
|
29
|
-
registerContractTools(server);
|
|
30
|
-
registerPurchaseTools(server);
|
|
31
|
-
registerProviderInvoiceTools(server);
|
|
32
|
-
registerAccountTools(server);
|
|
33
|
-
registerAgencyTools(server);
|
|
34
|
-
registerBusinessUnitTools(server);
|
|
35
|
-
registerRoleTools(server);
|
|
36
|
-
registerLogTools(server);
|
|
37
|
-
registerNotificationTools(server);
|
|
38
|
-
registerThreadTools(server);
|
|
39
|
-
registerTodolistTools(server);
|
|
40
|
-
registerFlagTools(server);
|
|
41
|
-
registerCalendarTools(server);
|
|
42
|
-
registerWebhookTools(server);
|
|
43
|
-
registerValidationTools(server);
|
|
44
|
-
registerPoleTools(server);
|
|
45
|
-
registerReportingTools(server);
|
|
46
|
-
registerPlanningAbsenceTools(server);
|
|
47
|
-
// Initialize and run
|
|
4
|
+
import { createMcpServer, REGISTERED_DOMAINS } from "./server.js";
|
|
5
|
+
import { resolveHttpOptions, startHttpTransport } from "./transports/http.js";
|
|
6
|
+
function resolveTransport() {
|
|
7
|
+
const raw = (process.env["MCP_TRANSPORT"] ?? "").toLowerCase().trim();
|
|
8
|
+
if (raw === "http" || raw === "streamable-http" || raw === "streamablehttp")
|
|
9
|
+
return "http";
|
|
10
|
+
return "stdio";
|
|
11
|
+
}
|
|
48
12
|
async function main() {
|
|
49
13
|
try {
|
|
50
14
|
initClient();
|
|
@@ -53,10 +17,28 @@ async function main() {
|
|
|
53
17
|
console.error("⚠️ Configuration warning:", error.message);
|
|
54
18
|
console.error("The server will start but API calls will fail without proper credentials.");
|
|
55
19
|
}
|
|
20
|
+
const kind = resolveTransport();
|
|
21
|
+
if (kind === "http") {
|
|
22
|
+
const options = resolveHttpOptions();
|
|
23
|
+
const handle = await startHttpTransport(createMcpServer, options);
|
|
24
|
+
console.error("🚀 BoondManager MCP Server running (streamable HTTP transport)");
|
|
25
|
+
console.error(`📡 Endpoint: http://${handle.address.host}:${handle.address.port}${handle.address.path}`);
|
|
26
|
+
console.error(`🔑 Mode: ${options.stateless ? "stateless" : "stateful"}${options.bearerToken ? " (bearer auth)" : ""}`);
|
|
27
|
+
console.error(`📦 Domains: ${REGISTERED_DOMAINS.join(", ")}`);
|
|
28
|
+
const shutdown = async (signal) => {
|
|
29
|
+
console.error(`\n🛑 Received ${signal}, shutting down...`);
|
|
30
|
+
await handle.close();
|
|
31
|
+
process.exit(0);
|
|
32
|
+
};
|
|
33
|
+
process.on("SIGINT", () => void shutdown("SIGINT"));
|
|
34
|
+
process.on("SIGTERM", () => void shutdown("SIGTERM"));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const server = createMcpServer();
|
|
56
38
|
const transport = new StdioServerTransport();
|
|
57
39
|
await server.connect(transport);
|
|
58
40
|
console.error("🚀 BoondManager MCP Server running (stdio transport)");
|
|
59
|
-
console.error(
|
|
41
|
+
console.error(`📦 Domains: ${REGISTERED_DOMAINS.join(", ")}`);
|
|
60
42
|
}
|
|
61
43
|
main().catch((error) => {
|
|
62
44
|
console.error("Fatal error:", error);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/schemas/index.d.ts
CHANGED
|
@@ -4,6 +4,146 @@ export declare const SearchSchema: z.ZodObject<{
|
|
|
4
4
|
page: z.ZodDefault<z.ZodNumber>;
|
|
5
5
|
pageSize: z.ZodDefault<z.ZodNumber>;
|
|
6
6
|
}, z.core.$strict>;
|
|
7
|
+
export declare const ResourceSearchSchema: z.ZodObject<{
|
|
8
|
+
keywords: z.ZodOptional<z.ZodString>;
|
|
9
|
+
mainManagers: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
10
|
+
states: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
11
|
+
agencies: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
12
|
+
poles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
13
|
+
businessUnits: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
14
|
+
skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
15
|
+
tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
16
|
+
activityAreas: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
17
|
+
languages: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
18
|
+
typeOf: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
19
|
+
saved: z.ZodOptional<z.ZodString>;
|
|
20
|
+
sort: z.ZodOptional<z.ZodString>;
|
|
21
|
+
order: z.ZodOptional<z.ZodEnum<{
|
|
22
|
+
asc: "asc";
|
|
23
|
+
desc: "desc";
|
|
24
|
+
}>>;
|
|
25
|
+
page: z.ZodDefault<z.ZodNumber>;
|
|
26
|
+
pageSize: z.ZodDefault<z.ZodNumber>;
|
|
27
|
+
}, z.core.$strict>;
|
|
28
|
+
export declare const CandidateSearchSchema: z.ZodObject<{
|
|
29
|
+
keywords: z.ZodOptional<z.ZodString>;
|
|
30
|
+
mainManagers: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
31
|
+
states: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
32
|
+
agencies: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
33
|
+
poles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
34
|
+
businessUnits: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
35
|
+
skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
36
|
+
tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
37
|
+
activityAreas: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
38
|
+
languages: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
39
|
+
qualifications: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
40
|
+
mobilityAreas: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
41
|
+
typeOf: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
42
|
+
origins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
43
|
+
saved: z.ZodOptional<z.ZodString>;
|
|
44
|
+
sort: z.ZodOptional<z.ZodString>;
|
|
45
|
+
order: z.ZodOptional<z.ZodEnum<{
|
|
46
|
+
asc: "asc";
|
|
47
|
+
desc: "desc";
|
|
48
|
+
}>>;
|
|
49
|
+
page: z.ZodDefault<z.ZodNumber>;
|
|
50
|
+
pageSize: z.ZodDefault<z.ZodNumber>;
|
|
51
|
+
}, z.core.$strict>;
|
|
52
|
+
export declare const ContactSearchSchema: z.ZodObject<{
|
|
53
|
+
keywords: z.ZodOptional<z.ZodString>;
|
|
54
|
+
mainManagers: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
55
|
+
states: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
56
|
+
agencies: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
57
|
+
poles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
58
|
+
businessUnits: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
59
|
+
company: z.ZodOptional<z.ZodString>;
|
|
60
|
+
typeOf: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
61
|
+
origins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
62
|
+
activityAreas: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
63
|
+
saved: z.ZodOptional<z.ZodString>;
|
|
64
|
+
sort: z.ZodOptional<z.ZodString>;
|
|
65
|
+
order: z.ZodOptional<z.ZodEnum<{
|
|
66
|
+
asc: "asc";
|
|
67
|
+
desc: "desc";
|
|
68
|
+
}>>;
|
|
69
|
+
page: z.ZodDefault<z.ZodNumber>;
|
|
70
|
+
pageSize: z.ZodDefault<z.ZodNumber>;
|
|
71
|
+
}, z.core.$strict>;
|
|
72
|
+
export declare const CompanySearchSchema: z.ZodObject<{
|
|
73
|
+
keywords: z.ZodOptional<z.ZodString>;
|
|
74
|
+
mainManagers: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
75
|
+
states: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
76
|
+
agencies: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
77
|
+
poles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
78
|
+
businessUnits: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
79
|
+
typeOf: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
80
|
+
activityAreas: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
81
|
+
origins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
82
|
+
saved: z.ZodOptional<z.ZodString>;
|
|
83
|
+
sort: z.ZodOptional<z.ZodString>;
|
|
84
|
+
order: z.ZodOptional<z.ZodEnum<{
|
|
85
|
+
asc: "asc";
|
|
86
|
+
desc: "desc";
|
|
87
|
+
}>>;
|
|
88
|
+
page: z.ZodDefault<z.ZodNumber>;
|
|
89
|
+
pageSize: z.ZodDefault<z.ZodNumber>;
|
|
90
|
+
}, z.core.$strict>;
|
|
91
|
+
export declare const OpportunitySearchSchema: z.ZodObject<{
|
|
92
|
+
keywords: z.ZodOptional<z.ZodString>;
|
|
93
|
+
mainManagers: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
94
|
+
states: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
95
|
+
agencies: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
96
|
+
poles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
97
|
+
businessUnits: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
98
|
+
company: z.ZodOptional<z.ZodString>;
|
|
99
|
+
contact: z.ZodOptional<z.ZodString>;
|
|
100
|
+
activityAreas: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
101
|
+
origins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
102
|
+
period: z.ZodOptional<z.ZodEnum<{
|
|
103
|
+
creation: "creation";
|
|
104
|
+
update: "update";
|
|
105
|
+
startDate: "startDate";
|
|
106
|
+
endDate: "endDate";
|
|
107
|
+
}>>;
|
|
108
|
+
startDate: z.ZodOptional<z.ZodString>;
|
|
109
|
+
endDate: z.ZodOptional<z.ZodString>;
|
|
110
|
+
saved: z.ZodOptional<z.ZodString>;
|
|
111
|
+
sort: z.ZodOptional<z.ZodString>;
|
|
112
|
+
order: z.ZodOptional<z.ZodEnum<{
|
|
113
|
+
asc: "asc";
|
|
114
|
+
desc: "desc";
|
|
115
|
+
}>>;
|
|
116
|
+
page: z.ZodDefault<z.ZodNumber>;
|
|
117
|
+
pageSize: z.ZodDefault<z.ZodNumber>;
|
|
118
|
+
}, z.core.$strict>;
|
|
119
|
+
export declare const ProjectSearchSchema: z.ZodObject<{
|
|
120
|
+
keywords: z.ZodOptional<z.ZodString>;
|
|
121
|
+
mainManagers: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
122
|
+
states: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
123
|
+
agencies: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
124
|
+
poles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
125
|
+
businessUnits: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
126
|
+
company: z.ZodOptional<z.ZodString>;
|
|
127
|
+
contact: z.ZodOptional<z.ZodString>;
|
|
128
|
+
typeOf: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
129
|
+
activityAreas: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
130
|
+
period: z.ZodOptional<z.ZodEnum<{
|
|
131
|
+
creation: "creation";
|
|
132
|
+
update: "update";
|
|
133
|
+
startDate: "startDate";
|
|
134
|
+
endDate: "endDate";
|
|
135
|
+
}>>;
|
|
136
|
+
startDate: z.ZodOptional<z.ZodString>;
|
|
137
|
+
endDate: z.ZodOptional<z.ZodString>;
|
|
138
|
+
saved: z.ZodOptional<z.ZodString>;
|
|
139
|
+
sort: z.ZodOptional<z.ZodString>;
|
|
140
|
+
order: z.ZodOptional<z.ZodEnum<{
|
|
141
|
+
asc: "asc";
|
|
142
|
+
desc: "desc";
|
|
143
|
+
}>>;
|
|
144
|
+
page: z.ZodDefault<z.ZodNumber>;
|
|
145
|
+
pageSize: z.ZodDefault<z.ZodNumber>;
|
|
146
|
+
}, z.core.$strict>;
|
|
7
147
|
export declare const IdSchema: z.ZodObject<{
|
|
8
148
|
id: z.ZodString;
|
|
9
149
|
}, z.core.$strict>;
|
|
@@ -339,6 +479,12 @@ export declare const DictionaryGetSchema: z.ZodObject<{
|
|
|
339
479
|
dictionaryType: z.ZodString;
|
|
340
480
|
}, z.core.$strict>;
|
|
341
481
|
export type SearchInput = z.infer<typeof SearchSchema>;
|
|
482
|
+
export type ResourceSearchInput = z.infer<typeof ResourceSearchSchema>;
|
|
483
|
+
export type CandidateSearchInput = z.infer<typeof CandidateSearchSchema>;
|
|
484
|
+
export type ContactSearchInput = z.infer<typeof ContactSearchSchema>;
|
|
485
|
+
export type CompanySearchInput = z.infer<typeof CompanySearchSchema>;
|
|
486
|
+
export type OpportunitySearchInput = z.infer<typeof OpportunitySearchSchema>;
|
|
487
|
+
export type ProjectSearchInput = z.infer<typeof ProjectSearchSchema>;
|
|
342
488
|
export type IdInput = z.infer<typeof IdSchema>;
|
|
343
489
|
export type IdTabInput = z.infer<typeof IdTabSchema>;
|
|
344
490
|
export type ResourceTimesheetInput = z.infer<typeof ResourceTimesheetSchema>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"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"}
|
package/dist/schemas/index.js
CHANGED
|
@@ -7,6 +7,137 @@ export const SearchSchema = z.object({
|
|
|
7
7
|
pageSize: z.number().int().min(1).max(MAX_PAGE_SIZE).default(DEFAULT_PAGE_SIZE)
|
|
8
8
|
.describe(`Nombre de résultats par page (max: ${MAX_PAGE_SIZE}, défaut: ${DEFAULT_PAGE_SIZE})`),
|
|
9
9
|
}).strict();
|
|
10
|
+
// ---- Reusable filter field helpers ----
|
|
11
|
+
// Keep descriptions short here; the tool description guides the LLM on usage.
|
|
12
|
+
const pageField = z.number().int().min(1).default(1).describe("Numéro de page (défaut: 1)");
|
|
13
|
+
const pageSizeField = z.number().int().min(1).max(MAX_PAGE_SIZE).default(DEFAULT_PAGE_SIZE)
|
|
14
|
+
.describe(`Nombre de résultats par page (max: ${MAX_PAGE_SIZE}, défaut: ${DEFAULT_PAGE_SIZE})`);
|
|
15
|
+
const sortField = z.string().optional().describe("Champ de tri (ex: lastName, createdAt)");
|
|
16
|
+
const orderField = z.enum(["asc", "desc"]).optional().describe("Ordre de tri : 'asc' ou 'desc'");
|
|
17
|
+
const idArray = (doc) => z.array(z.string()).optional().describe(doc);
|
|
18
|
+
const intArray = (doc) => z.array(z.number().int()).optional().describe(doc);
|
|
19
|
+
const strArray = (doc) => z.array(z.string()).optional().describe(doc);
|
|
20
|
+
// ---- Resource search schema ----
|
|
21
|
+
// Filtres les plus utiles de /resources. Inclut mainManagers (clé pour hiérarchie N-1/N-2).
|
|
22
|
+
export const ResourceSearchSchema = z.object({
|
|
23
|
+
keywords: z.string().optional().describe("Mots-clés (nom, prénom, email, compétences libres)"),
|
|
24
|
+
mainManagers: idArray("ID(s) du/des managers principaux. Les ressources retournées ont ce(s) manager(s) comme N+1. CLÉ pour les requêtes hiérarchiques (mes N-1, N-2...)."),
|
|
25
|
+
states: intArray("États de ressource à inclure (voir dictionnaire 'states/resources')"),
|
|
26
|
+
agencies: idArray("IDs d'agences"),
|
|
27
|
+
poles: idArray("IDs de pôles"),
|
|
28
|
+
businessUnits: idArray("IDs de business units"),
|
|
29
|
+
skills: strArray("Compétences techniques (ex: ['Java', 'React'])"),
|
|
30
|
+
tools: strArray("Outils / technologies"),
|
|
31
|
+
activityAreas: strArray("Secteurs d'activité"),
|
|
32
|
+
languages: strArray("Langues"),
|
|
33
|
+
typeOf: strArray("Types de ressource (interne, sous-traitant...)"),
|
|
34
|
+
saved: z.string().optional().describe("ID d'une recherche enregistrée (remplace les autres filtres)"),
|
|
35
|
+
sort: sortField,
|
|
36
|
+
order: orderField,
|
|
37
|
+
page: pageField,
|
|
38
|
+
pageSize: pageSizeField,
|
|
39
|
+
}).strict();
|
|
40
|
+
// ---- Candidate search schema ----
|
|
41
|
+
export const CandidateSearchSchema = z.object({
|
|
42
|
+
keywords: z.string().optional().describe("Mots-clés (nom, prénom, email, compétences libres)"),
|
|
43
|
+
mainManagers: idArray("ID(s) du/des managers principaux (responsables des candidats)"),
|
|
44
|
+
states: intArray("États de candidat (voir dictionnaire 'states/candidates')"),
|
|
45
|
+
agencies: idArray("IDs d'agences"),
|
|
46
|
+
poles: idArray("IDs de pôles"),
|
|
47
|
+
businessUnits: idArray("IDs de business units"),
|
|
48
|
+
skills: strArray("Compétences techniques"),
|
|
49
|
+
tools: strArray("Outils / technologies"),
|
|
50
|
+
activityAreas: strArray("Secteurs d'activité"),
|
|
51
|
+
languages: strArray("Langues"),
|
|
52
|
+
qualifications: strArray("Qualifications / diplômes"),
|
|
53
|
+
mobilityAreas: strArray("Zones de mobilité"),
|
|
54
|
+
typeOf: strArray("Types de candidat"),
|
|
55
|
+
origins: idArray("IDs d'origines (source de recrutement)"),
|
|
56
|
+
saved: z.string().optional().describe("ID d'une recherche enregistrée"),
|
|
57
|
+
sort: sortField,
|
|
58
|
+
order: orderField,
|
|
59
|
+
page: pageField,
|
|
60
|
+
pageSize: pageSizeField,
|
|
61
|
+
}).strict();
|
|
62
|
+
// ---- Contact search schema ----
|
|
63
|
+
export const ContactSearchSchema = z.object({
|
|
64
|
+
keywords: z.string().optional().describe("Mots-clés (nom, email, société...)"),
|
|
65
|
+
mainManagers: idArray("ID(s) du/des managers principaux (responsables commerciaux des contacts)"),
|
|
66
|
+
states: intArray("États de contact"),
|
|
67
|
+
agencies: idArray("IDs d'agences"),
|
|
68
|
+
poles: idArray("IDs de pôles"),
|
|
69
|
+
businessUnits: idArray("IDs de business units"),
|
|
70
|
+
company: z.string().optional().describe("ID d'une société : filtre les contacts rattachés à cette société"),
|
|
71
|
+
typeOf: strArray("Types de contact"),
|
|
72
|
+
origins: idArray("IDs d'origines"),
|
|
73
|
+
activityAreas: strArray("Secteurs d'activité"),
|
|
74
|
+
saved: z.string().optional().describe("ID d'une recherche enregistrée"),
|
|
75
|
+
sort: sortField,
|
|
76
|
+
order: orderField,
|
|
77
|
+
page: pageField,
|
|
78
|
+
pageSize: pageSizeField,
|
|
79
|
+
}).strict();
|
|
80
|
+
// ---- Company search schema ----
|
|
81
|
+
export const CompanySearchSchema = z.object({
|
|
82
|
+
keywords: z.string().optional().describe("Mots-clés (nom, SIRET, email...)"),
|
|
83
|
+
mainManagers: idArray("ID(s) du/des managers principaux (responsables commerciaux)"),
|
|
84
|
+
states: intArray("États de société"),
|
|
85
|
+
agencies: idArray("IDs d'agences"),
|
|
86
|
+
poles: idArray("IDs de pôles"),
|
|
87
|
+
businessUnits: idArray("IDs de business units"),
|
|
88
|
+
typeOf: strArray("Types de société (client, prospect, fournisseur...)"),
|
|
89
|
+
activityAreas: strArray("Secteurs d'activité"),
|
|
90
|
+
origins: idArray("IDs d'origines"),
|
|
91
|
+
saved: z.string().optional().describe("ID d'une recherche enregistrée"),
|
|
92
|
+
sort: sortField,
|
|
93
|
+
order: orderField,
|
|
94
|
+
page: pageField,
|
|
95
|
+
pageSize: pageSizeField,
|
|
96
|
+
}).strict();
|
|
97
|
+
// ---- Opportunity search schema ----
|
|
98
|
+
export const OpportunitySearchSchema = z.object({
|
|
99
|
+
keywords: z.string().optional().describe("Mots-clés (titre, société, contact...)"),
|
|
100
|
+
mainManagers: idArray("ID(s) du/des managers principaux (commerciaux en charge)"),
|
|
101
|
+
states: intArray("États d'opportunité (voir dictionnaire 'states/opportunities')"),
|
|
102
|
+
agencies: idArray("IDs d'agences"),
|
|
103
|
+
poles: idArray("IDs de pôles"),
|
|
104
|
+
businessUnits: idArray("IDs de business units"),
|
|
105
|
+
company: z.string().optional().describe("ID d'une société cliente"),
|
|
106
|
+
contact: z.string().optional().describe("ID d'un contact"),
|
|
107
|
+
activityAreas: strArray("Secteurs d'activité"),
|
|
108
|
+
origins: idArray("IDs d'origines"),
|
|
109
|
+
period: z.enum(["creation", "update", "startDate", "endDate"]).optional()
|
|
110
|
+
.describe("Champ date sur lequel appliquer startDate/endDate"),
|
|
111
|
+
startDate: z.string().optional().describe("Début de période (YYYY-MM-DD), à utiliser avec `period`"),
|
|
112
|
+
endDate: z.string().optional().describe("Fin de période (YYYY-MM-DD), à utiliser avec `period`"),
|
|
113
|
+
saved: z.string().optional().describe("ID d'une recherche enregistrée"),
|
|
114
|
+
sort: sortField,
|
|
115
|
+
order: orderField,
|
|
116
|
+
page: pageField,
|
|
117
|
+
pageSize: pageSizeField,
|
|
118
|
+
}).strict();
|
|
119
|
+
// ---- Project search schema ----
|
|
120
|
+
export const ProjectSearchSchema = z.object({
|
|
121
|
+
keywords: z.string().optional().describe("Mots-clés (nom du projet, société, contact...)"),
|
|
122
|
+
mainManagers: idArray("ID(s) du/des managers principaux (responsables du projet)"),
|
|
123
|
+
states: intArray("États de projet (voir dictionnaire 'states/projects')"),
|
|
124
|
+
agencies: idArray("IDs d'agences"),
|
|
125
|
+
poles: idArray("IDs de pôles"),
|
|
126
|
+
businessUnits: idArray("IDs de business units"),
|
|
127
|
+
company: z.string().optional().describe("ID d'une société cliente"),
|
|
128
|
+
contact: z.string().optional().describe("ID d'un contact"),
|
|
129
|
+
typeOf: strArray("Types de projet (régie, forfait, produit...)"),
|
|
130
|
+
activityAreas: strArray("Secteurs d'activité"),
|
|
131
|
+
period: z.enum(["creation", "update", "startDate", "endDate"]).optional()
|
|
132
|
+
.describe("Champ date sur lequel appliquer startDate/endDate"),
|
|
133
|
+
startDate: z.string().optional().describe("Début de période (YYYY-MM-DD)"),
|
|
134
|
+
endDate: z.string().optional().describe("Fin de période (YYYY-MM-DD)"),
|
|
135
|
+
saved: z.string().optional().describe("ID d'une recherche enregistrée"),
|
|
136
|
+
sort: sortField,
|
|
137
|
+
order: orderField,
|
|
138
|
+
page: pageField,
|
|
139
|
+
pageSize: pageSizeField,
|
|
140
|
+
}).strict();
|
|
10
141
|
// ID param schema
|
|
11
142
|
export const IdSchema = z.object({
|
|
12
143
|
id: z.string().min(1).describe("Identifiant unique de l'entité BoondManager"),
|