@altura_ma/onemcp 0.2.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 (139) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +176 -0
  3. package/dist/cache/index.d.ts +12 -0
  4. package/dist/cache/index.d.ts.map +1 -0
  5. package/dist/cache/index.js +44 -0
  6. package/dist/cache/index.js.map +1 -0
  7. package/dist/connectors/ban.d.ts +15 -0
  8. package/dist/connectors/ban.d.ts.map +1 -0
  9. package/dist/connectors/ban.js +46 -0
  10. package/dist/connectors/ban.js.map +1 -0
  11. package/dist/connectors/base.d.ts +18 -0
  12. package/dist/connectors/base.d.ts.map +1 -0
  13. package/dist/connectors/base.js +10 -0
  14. package/dist/connectors/base.js.map +1 -0
  15. package/dist/connectors/bodacc.d.ts +11 -0
  16. package/dist/connectors/bodacc.d.ts.map +1 -0
  17. package/dist/connectors/bodacc.js +47 -0
  18. package/dist/connectors/bodacc.js.map +1 -0
  19. package/dist/connectors/companies-house.d.ts +13 -0
  20. package/dist/connectors/companies-house.d.ts.map +1 -0
  21. package/dist/connectors/companies-house.js +104 -0
  22. package/dist/connectors/companies-house.js.map +1 -0
  23. package/dist/connectors/dvf.d.ts +13 -0
  24. package/dist/connectors/dvf.d.ts.map +1 -0
  25. package/dist/connectors/dvf.js +51 -0
  26. package/dist/connectors/dvf.js.map +1 -0
  27. package/dist/connectors/epo-ops.d.ts +37 -0
  28. package/dist/connectors/epo-ops.d.ts.map +1 -0
  29. package/dist/connectors/epo-ops.js +100 -0
  30. package/dist/connectors/epo-ops.js.map +1 -0
  31. package/dist/connectors/france-travail.d.ts +47 -0
  32. package/dist/connectors/france-travail.d.ts.map +1 -0
  33. package/dist/connectors/france-travail.js +89 -0
  34. package/dist/connectors/france-travail.js.map +1 -0
  35. package/dist/connectors/georisques.d.ts +7 -0
  36. package/dist/connectors/georisques.d.ts.map +1 -0
  37. package/dist/connectors/georisques.js +68 -0
  38. package/dist/connectors/georisques.js.map +1 -0
  39. package/dist/connectors/gleif.d.ts +9 -0
  40. package/dist/connectors/gleif.d.ts.map +1 -0
  41. package/dist/connectors/gleif.js +63 -0
  42. package/dist/connectors/gleif.js.map +1 -0
  43. package/dist/connectors/index.d.ts +29 -0
  44. package/dist/connectors/index.d.ts.map +1 -0
  45. package/dist/connectors/index.js +28 -0
  46. package/dist/connectors/index.js.map +1 -0
  47. package/dist/connectors/inpi-rne.d.ts +19 -0
  48. package/dist/connectors/inpi-rne.d.ts.map +1 -0
  49. package/dist/connectors/inpi-rne.js +107 -0
  50. package/dist/connectors/inpi-rne.js.map +1 -0
  51. package/dist/connectors/insee-sirene.d.ts +12 -0
  52. package/dist/connectors/insee-sirene.d.ts.map +1 -0
  53. package/dist/connectors/insee-sirene.js +104 -0
  54. package/dist/connectors/insee-sirene.js.map +1 -0
  55. package/dist/connectors/recherche-entreprises.d.ts +20 -0
  56. package/dist/connectors/recherche-entreprises.d.ts.map +1 -0
  57. package/dist/connectors/recherche-entreprises.js +135 -0
  58. package/dist/connectors/recherche-entreprises.js.map +1 -0
  59. package/dist/connectors/vies.d.ts +10 -0
  60. package/dist/connectors/vies.d.ts.map +1 -0
  61. package/dist/connectors/vies.js +39 -0
  62. package/dist/connectors/vies.js.map +1 -0
  63. package/dist/http.d.ts +3 -0
  64. package/dist/http.d.ts.map +1 -0
  65. package/dist/http.js +74 -0
  66. package/dist/http.js.map +1 -0
  67. package/dist/index.d.ts +3 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +16 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/schemas/canonical.d.ts +1545 -0
  72. package/dist/schemas/canonical.d.ts.map +1 -0
  73. package/dist/schemas/canonical.js +120 -0
  74. package/dist/schemas/canonical.js.map +1 -0
  75. package/dist/server.d.ts +6 -0
  76. package/dist/server.d.ts.map +1 -0
  77. package/dist/server.js +126 -0
  78. package/dist/server.js.map +1 -0
  79. package/dist/tools/company-layer2.d.ts +3 -0
  80. package/dist/tools/company-layer2.d.ts.map +1 -0
  81. package/dist/tools/company-layer2.js +84 -0
  82. package/dist/tools/company-layer2.js.map +1 -0
  83. package/dist/tools/company.d.ts +3 -0
  84. package/dist/tools/company.d.ts.map +1 -0
  85. package/dist/tools/company.js +119 -0
  86. package/dist/tools/company.js.map +1 -0
  87. package/dist/tools/geo.d.ts +3 -0
  88. package/dist/tools/geo.d.ts.map +1 -0
  89. package/dist/tools/geo.js +59 -0
  90. package/dist/tools/geo.js.map +1 -0
  91. package/dist/tools/identity.d.ts +3 -0
  92. package/dist/tools/identity.d.ts.map +1 -0
  93. package/dist/tools/identity.js +60 -0
  94. package/dist/tools/identity.js.map +1 -0
  95. package/dist/tools/index.d.ts +14 -0
  96. package/dist/tools/index.d.ts.map +1 -0
  97. package/dist/tools/index.js +22 -0
  98. package/dist/tools/index.js.map +1 -0
  99. package/dist/tools/jobs.d.ts +3 -0
  100. package/dist/tools/jobs.d.ts.map +1 -0
  101. package/dist/tools/jobs.js +63 -0
  102. package/dist/tools/jobs.js.map +1 -0
  103. package/dist/tools/legal.d.ts +3 -0
  104. package/dist/tools/legal.d.ts.map +1 -0
  105. package/dist/tools/legal.js +48 -0
  106. package/dist/tools/legal.js.map +1 -0
  107. package/dist/tools/patents.d.ts +3 -0
  108. package/dist/tools/patents.d.ts.map +1 -0
  109. package/dist/tools/patents.js +51 -0
  110. package/dist/tools/patents.js.map +1 -0
  111. package/dist/tools/realestate.d.ts +3 -0
  112. package/dist/tools/realestate.d.ts.map +1 -0
  113. package/dist/tools/realestate.js +30 -0
  114. package/dist/tools/realestate.js.map +1 -0
  115. package/dist/tools/sources.d.ts +3 -0
  116. package/dist/tools/sources.d.ts.map +1 -0
  117. package/dist/tools/sources.js +17 -0
  118. package/dist/tools/sources.js.map +1 -0
  119. package/dist/tools/types.d.ts +10 -0
  120. package/dist/tools/types.d.ts.map +1 -0
  121. package/dist/tools/types.js +4 -0
  122. package/dist/tools/types.js.map +1 -0
  123. package/dist/utils/env.d.ts +3 -0
  124. package/dist/utils/env.d.ts.map +1 -0
  125. package/dist/utils/env.js +14 -0
  126. package/dist/utils/env.js.map +1 -0
  127. package/dist/utils/http.d.ts +17 -0
  128. package/dist/utils/http.d.ts.map +1 -0
  129. package/dist/utils/http.js +62 -0
  130. package/dist/utils/http.js.map +1 -0
  131. package/dist/utils/oauth.d.ts +11 -0
  132. package/dist/utils/oauth.d.ts.map +1 -0
  133. package/dist/utils/oauth.js +31 -0
  134. package/dist/utils/oauth.js.map +1 -0
  135. package/dist/worker.d.ts +16 -0
  136. package/dist/worker.d.ts.map +1 -0
  137. package/dist/worker.js +185 -0
  138. package/dist/worker.js.map +1 -0
  139. package/package.json +60 -0
@@ -0,0 +1,60 @@
1
+ import { z } from "zod";
2
+ import { connectors } from "../connectors/index.js";
3
+ import { defineTool } from "./types.js";
4
+ const vatValidate = defineTool({
5
+ name: "vat_validate",
6
+ description: "Valide un numéro de TVA intracommunautaire dans les 27 États membres de l'UE via VIES " +
7
+ "(service officiel de la Commission européenne). Retourne la validité, le nom légal et l'adresse.",
8
+ inputSchema: z.object({
9
+ vat_number: z
10
+ .string()
11
+ .min(8)
12
+ .describe("Numéro de TVA avec ou sans préfixe pays. Ex: FR12345678901, DE123456789, IT12345678901."),
13
+ country_code: z
14
+ .string()
15
+ .length(2)
16
+ .optional()
17
+ .describe("Code pays ISO 2 lettres si non inclus dans vat_number."),
18
+ }),
19
+ handler: async (input) => {
20
+ let cc = input.country_code?.toUpperCase();
21
+ let num = input.vat_number.replace(/\s/g, "");
22
+ if (!cc && /^[A-Z]{2}/i.test(num)) {
23
+ cc = num.slice(0, 2).toUpperCase();
24
+ num = num.slice(2);
25
+ }
26
+ if (!cc) {
27
+ throw new Error("country_code requis si non préfixé dans vat_number");
28
+ }
29
+ return connectors.vies.validate({ countryCode: cc, vatNumber: num });
30
+ },
31
+ });
32
+ const leiLookup = defineTool({
33
+ name: "lei_lookup",
34
+ description: "Récupère un enregistrement LEI (Legal Entity Identifier) mondial à partir du code LEI 20 caractères. " +
35
+ "Référence pour rapprochement multi-juridictionnel d'entités juridiques (finance, AML, KYC).",
36
+ inputSchema: z.object({
37
+ lei: z.string().length(20),
38
+ }),
39
+ handler: async (input) => {
40
+ const result = await connectors.gleif.getByLei(input.lei);
41
+ if (!result)
42
+ return { found: false, lei: input.lei };
43
+ return { found: true, ...result };
44
+ },
45
+ });
46
+ const leiSearch = defineTool({
47
+ name: "lei_search",
48
+ description: "Recherche des LEI par nom légal (correspondance exacte ou partielle). Pour rapprocher une " +
49
+ "raison sociale française avec son identifiant mondial (utile en finance/réglementaire).",
50
+ inputSchema: z.object({
51
+ legal_name: z.string().min(2),
52
+ per_page: z.number().int().min(1).max(50).default(10).optional(),
53
+ }),
54
+ handler: async (input) => {
55
+ const results = await connectors.gleif.search(input.legal_name, input.per_page ?? 10);
56
+ return { query: input.legal_name, count: results.length, results };
57
+ },
58
+ });
59
+ export const identityTools = [vatValidate, leiLookup, leiSearch];
60
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/tools/identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { companyLayer2Tools } from "./company-layer2.js";
2
+ import { companyTools } from "./company.js";
3
+ import { geoTools } from "./geo.js";
4
+ import { identityTools } from "./identity.js";
5
+ import { jobTools } from "./jobs.js";
6
+ import { legalTools } from "./legal.js";
7
+ import { patentTools } from "./patents.js";
8
+ import { realEstateTools } from "./realestate.js";
9
+ import { sourceTools } from "./sources.js";
10
+ import type { AnyTool } from "./types.js";
11
+ export declare const allTools: AnyTool[];
12
+ export { companyLayer2Tools, companyTools, geoTools, identityTools, jobTools, legalTools, patentTools, realEstateTools, sourceTools, };
13
+ export type { AnyTool, ToolDefinition } from "./types.js";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,QAAQ,EAAE,OAAO,EAU7B,CAAC;AAEF,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,UAAU,EACV,WAAW,EACX,eAAe,EACf,WAAW,GACZ,CAAC;AACF,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { companyLayer2Tools } from "./company-layer2.js";
2
+ import { companyTools } from "./company.js";
3
+ import { geoTools } from "./geo.js";
4
+ import { identityTools } from "./identity.js";
5
+ import { jobTools } from "./jobs.js";
6
+ import { legalTools } from "./legal.js";
7
+ import { patentTools } from "./patents.js";
8
+ import { realEstateTools } from "./realestate.js";
9
+ import { sourceTools } from "./sources.js";
10
+ export const allTools = [
11
+ ...companyTools,
12
+ ...companyLayer2Tools,
13
+ ...legalTools,
14
+ ...geoTools,
15
+ ...realEstateTools,
16
+ ...identityTools,
17
+ ...patentTools,
18
+ ...jobTools,
19
+ ...sourceTools,
20
+ ];
21
+ export { companyLayer2Tools, companyTools, geoTools, identityTools, jobTools, legalTools, patentTools, realEstateTools, sourceTools, };
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3C,MAAM,CAAC,MAAM,QAAQ,GAAc;IACjC,GAAG,YAAY;IACf,GAAG,kBAAkB;IACrB,GAAG,UAAU;IACb,GAAG,QAAQ;IACX,GAAG,eAAe;IAClB,GAAG,aAAa;IAChB,GAAG,WAAW;IACd,GAAG,QAAQ;IACX,GAAG,WAAW;CACf,CAAC;AAEF,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,UAAU,EACV,WAAW,EACX,eAAe,EACf,WAAW,GACZ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type AnyTool } from "./types.js";
2
+ export declare const jobTools: AnyTool[];
3
+ //# sourceMappingURL=jobs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../src/tools/jobs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAgEtD,eAAO,MAAM,QAAQ,EAAE,OAAO,EAA6B,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { z } from "zod";
2
+ import { connectors } from "../connectors/index.js";
3
+ import { defineTool } from "./types.js";
4
+ const jobsSearch = defineTool({
5
+ name: "jobs_search",
6
+ description: "Recherche d'offres d'emploi en France via France Travail (ex-Pôle Emploi). " +
7
+ "Filtres : mots-clés, code commune INSEE, département, code ROME, type de contrat (CDI/CDD/MIS). " +
8
+ "Usage : sourcing RH, analyse du marché emploi local, veille sectorielle. " +
9
+ "Requiert FRANCE_TRAVAIL_CLIENT_ID et FRANCE_TRAVAIL_CLIENT_SECRET (compte gratuit sur francetravail.io).",
10
+ inputSchema: z.object({
11
+ keywords: z
12
+ .string()
13
+ .optional()
14
+ .describe("Mots-clés : intitulé de poste, compétences (ex: 'développeur React', 'data scientist')."),
15
+ departement: z
16
+ .string()
17
+ .regex(/^\d{2,3}[A-Z]?$/)
18
+ .optional()
19
+ .describe("Code département (ex: 75, 69, 13, 974)."),
20
+ commune: z
21
+ .string()
22
+ .optional()
23
+ .describe("Code commune INSEE 5 chiffres (ex: 75056 pour Paris)."),
24
+ rome: z
25
+ .string()
26
+ .regex(/^[A-Z]\d{4}$/)
27
+ .optional()
28
+ .describe("Code ROME (ex: M1805 pour études et développement informatique)."),
29
+ contract_type: z
30
+ .enum(["CDI", "CDD", "MIS", "SAI", "CCE"])
31
+ .optional()
32
+ .describe("Type de contrat : CDI, CDD, MIS (intérim), SAI (saisonnier), CCE (cadre)."),
33
+ max_results: z.number().int().min(1).max(150).default(20).optional(),
34
+ }),
35
+ handler: async (input) => {
36
+ return connectors.franceTravail.searchJobs({
37
+ keywords: input.keywords,
38
+ departement: input.departement,
39
+ commune: input.commune,
40
+ rome: input.rome,
41
+ contractType: input.contract_type,
42
+ maxResults: input.max_results ?? 20,
43
+ });
44
+ },
45
+ });
46
+ const romeSearch = defineTool({
47
+ name: "rome_search",
48
+ description: "Recherche de codes ROME (Répertoire Opérationnel des Métiers et des Emplois) par libellé de métier. " +
49
+ "Utile pour obtenir le code ROME à passer dans jobs_search ou pour classifier les métiers. " +
50
+ "Requiert FRANCE_TRAVAIL_CLIENT_ID et FRANCE_TRAVAIL_CLIENT_SECRET.",
51
+ inputSchema: z.object({
52
+ keywords: z
53
+ .string()
54
+ .min(2)
55
+ .describe("Libellé de métier en texte libre (ex: 'développeur', 'comptable', 'infirmier')."),
56
+ }),
57
+ handler: async (input) => {
58
+ const results = await connectors.franceTravail.searchRome(input.keywords);
59
+ return { keywords: input.keywords, results };
60
+ },
61
+ });
62
+ export const jobTools = [jobsSearch, romeSearch];
63
+ //# sourceMappingURL=jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/tools/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAEtD,MAAM,UAAU,GAAG,UAAU,CAAC;IAC5B,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,6EAA6E;QAC7E,kGAAkG;QAClG,2EAA2E;QAC3E,0GAA0G;IAC5G,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,yFAAyF,CAAC;QACtG,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,KAAK,CAAC,iBAAiB,CAAC;aACxB,QAAQ,EAAE;aACV,QAAQ,CAAC,yCAAyC,CAAC;QACtD,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,uDAAuD,CAAC;QACpE,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,KAAK,CAAC,cAAc,CAAC;aACrB,QAAQ,EAAE;aACV,QAAQ,CAAC,kEAAkE,CAAC;QAC/E,aAAa,EAAE,CAAC;aACb,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;aACzC,QAAQ,EAAE;aACV,QAAQ,CAAC,2EAA2E,CAAC;QACxF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;KACrE,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACvB,OAAO,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC;YACzC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,YAAY,EAAE,KAAK,CAAC,aAAa;YACjC,UAAU,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;SACpC,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,UAAU,CAAC;IAC5B,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,sGAAsG;QACtG,4FAA4F;QAC5F,oEAAoE;IACtE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,iFAAiF,CAAC;KAC/F,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACvB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC1E,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC/C,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type AnyTool } from "./types.js";
2
+ export declare const legalTools: AnyTool[];
3
+ //# sourceMappingURL=legal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legal.d.ts","sourceRoot":"","sources":["../../src/tools/legal.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAuDtD,eAAO,MAAM,UAAU,EAAE,OAAO,EAAqD,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { z } from "zod";
2
+ import { connectors } from "../connectors/index.js";
3
+ import { defineTool } from "./types.js";
4
+ const legalAnnouncementsSearch = defineTool({
5
+ name: "legal_announcements_search",
6
+ description: "Recherche des annonces légales (BODACC) par SIREN ou nom d'entreprise : créations, ventes, " +
7
+ "modifications, dépôts de comptes, procédures collectives (sauvegarde, redressement, liquidation). " +
8
+ "Source officielle : Bulletin Officiel des Annonces Civiles et Commerciales.",
9
+ inputSchema: z
10
+ .object({
11
+ siren: z.string().regex(/^\d{9}$/).optional(),
12
+ company_name: z.string().min(2).optional(),
13
+ limit: z.number().int().min(1).max(100).default(20).optional(),
14
+ })
15
+ .refine((d) => d.siren || d.company_name, {
16
+ message: "Au moins un de siren ou company_name est requis.",
17
+ }),
18
+ handler: async (input) => {
19
+ if (input.siren) {
20
+ return {
21
+ announcements: await connectors.bodacc.searchBySiren(input.siren, input.limit ?? 20),
22
+ };
23
+ }
24
+ return {
25
+ announcements: await connectors.bodacc.searchByCompanyName(input.company_name, input.limit ?? 20),
26
+ };
27
+ },
28
+ });
29
+ const legalProceduresCheck = defineTool({
30
+ name: "legal_procedures_check",
31
+ description: "Vérifie si une entreprise a des procédures collectives en cours ou récentes (sauvegarde, " +
32
+ "redressement, liquidation judiciaire). Indispensable pour due diligence financière.",
33
+ inputSchema: z.object({
34
+ siren: z.string().regex(/^\d{9}$/),
35
+ limit: z.number().int().min(1).max(50).default(20).optional(),
36
+ }),
37
+ handler: async (input) => {
38
+ const procedures = await connectors.bodacc.searchProcedures(input.siren, input.limit ?? 20);
39
+ return {
40
+ siren: input.siren,
41
+ has_procedures: procedures.length > 0,
42
+ count: procedures.length,
43
+ procedures,
44
+ };
45
+ },
46
+ });
47
+ export const legalTools = [legalAnnouncementsSearch, legalProceduresCheck];
48
+ //# sourceMappingURL=legal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legal.js","sourceRoot":"","sources":["../../src/tools/legal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAEtD,MAAM,wBAAwB,GAAG,UAAU,CAAC;IAC1C,IAAI,EAAE,4BAA4B;IAClC,WAAW,EACT,6FAA6F;QAC7F,oGAAoG;QACpG,6EAA6E;IAC/E,WAAW,EAAE,CAAC;SACX,MAAM,CAAC;QACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;QAC7C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC/D,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,YAAY,EAAE;QACxC,OAAO,EAAE,kDAAkD;KAC5D,CAAC;IACJ,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACvB,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO;gBACL,aAAa,EAAE,MAAM,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;aACrF,CAAC;QACJ,CAAC;QACD,OAAO;YACL,aAAa,EAAE,MAAM,UAAU,CAAC,MAAM,CAAC,mBAAmB,CACxD,KAAK,CAAC,YAAa,EACnB,KAAK,CAAC,KAAK,IAAI,EAAE,CAClB;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,UAAU,CAAC;IACtC,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,2FAA2F;QAC3F,qFAAqF;IACvF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;QAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC9D,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACvB,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,gBAAgB,CACzD,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,KAAK,IAAI,EAAE,CAClB,CAAC;QACF,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,cAAc,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC;YACrC,KAAK,EAAE,UAAU,CAAC,MAAM;YACxB,UAAU;SACX,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAc,CAAC,wBAAwB,EAAE,oBAAoB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type AnyTool } from "./types.js";
2
+ export declare const patentTools: AnyTool[];
3
+ //# sourceMappingURL=patents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patents.d.ts","sourceRoot":"","sources":["../../src/tools/patents.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAqDtD,eAAO,MAAM,WAAW,EAAE,OAAO,EAA+B,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { z } from "zod";
2
+ import { connectors } from "../connectors/index.js";
3
+ import { defineTool } from "./types.js";
4
+ const patentsSearch = defineTool({
5
+ name: "patents_search",
6
+ description: "Recherche de brevets mondiaux via EPO Open Patent Services (Espacenet). " +
7
+ "Supporte la syntaxe CQL : ti=titre, ab=abstract, pa=titulaire, in=inventeur, cl=classification IPC. " +
8
+ "Exemples : 'ti=machine learning AND pa=Google', 'cl=A61K AND pa=Sanofi'. " +
9
+ "4 Go/semaine gratuit. Requiert EPO_CLIENT_KEY et EPO_CLIENT_SECRET (compte gratuit sur developers.epo.org).",
10
+ inputSchema: z.object({
11
+ query: z
12
+ .string()
13
+ .min(2)
14
+ .describe("Requête CQL : ti=titre, ab=abstract, pa=titulaire, in=inventeur, cl=classification IPC. Ex: 'ti=quantum computing AND pa=IBM'."),
15
+ range_begin: z.number().int().min(1).max(2000).default(1).optional(),
16
+ range_end: z.number().int().min(1).max(2000).default(10).optional(),
17
+ }),
18
+ handler: async (input) => {
19
+ return connectors.epoOps.search({
20
+ query: input.query,
21
+ rangeBegin: input.range_begin ?? 1,
22
+ rangeEnd: input.range_end ?? 10,
23
+ });
24
+ },
25
+ });
26
+ const patentGet = defineTool({
27
+ name: "patent_get",
28
+ description: "Récupère la fiche complète d'un brevet par numéro de publication EPO (country + doc-number + kind). " +
29
+ "Retourne titre, abstract, titulaires, inventeurs, classification IPC, date de publication. " +
30
+ "Requiert EPO_CLIENT_KEY et EPO_CLIENT_SECRET.",
31
+ inputSchema: z.object({
32
+ country: z
33
+ .string()
34
+ .length(2)
35
+ .describe("Code pays ISO 2 lettres (ex: EP, US, WO, FR, DE)."),
36
+ doc_number: z.string().describe("Numéro de document (ex: 3456789)."),
37
+ kind: z.string().default("A").optional().describe("Code kind (A, B, etc.). Défaut: A."),
38
+ }),
39
+ handler: async (input) => {
40
+ const result = await connectors.epoOps.getByNumber({
41
+ country: input.country,
42
+ docNumber: input.doc_number,
43
+ kind: input.kind ?? "A",
44
+ });
45
+ if (!result)
46
+ return { found: false, publication_number: `${input.country}${input.doc_number}` };
47
+ return { found: true, ...result };
48
+ },
49
+ });
50
+ export const patentTools = [patentsSearch, patentGet];
51
+ //# sourceMappingURL=patents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patents.js","sourceRoot":"","sources":["../../src/tools/patents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAEtD,MAAM,aAAa,GAAG,UAAU,CAAC;IAC/B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,0EAA0E;QAC1E,sGAAsG;QACtG,2EAA2E;QAC3E,6GAA6G;IAC/G,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CACP,gIAAgI,CACjI;QACH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACpE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;KACpE,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACvB,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,UAAU,EAAE,KAAK,CAAC,WAAW,IAAI,CAAC;YAClC,QAAQ,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;SAChC,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,UAAU,CAAC;IAC3B,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,sGAAsG;QACtG,6FAA6F;QAC7F,+CAA+C;IACjD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,MAAM,CAAC,CAAC,CAAC;aACT,QAAQ,CAAC,mDAAmD,CAAC;QAChE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACpE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KACxF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC;YACjD,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,KAAK,CAAC,UAAU;YAC3B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,GAAG;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;QAChG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;IACpC,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAc,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type AnyTool } from "./types.js";
2
+ export declare const realEstateTools: AnyTool[];
3
+ //# sourceMappingURL=realestate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realestate.d.ts","sourceRoot":"","sources":["../../src/tools/realestate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAgCtD,eAAO,MAAM,eAAe,EAAE,OAAO,EAA6B,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ import { connectors } from "../connectors/index.js";
3
+ import { defineTool } from "./types.js";
4
+ const realEstateTransactions = defineTool({
5
+ name: "realestate_transactions",
6
+ description: "Récupère les transactions immobilières des 5 dernières années en France " +
7
+ "(DVF - Demandes de Valeurs Foncières). Filtre par code INSEE commune ou code postal. " +
8
+ "Données officielles publiques avec prix, surface, type de bien.",
9
+ inputSchema: z
10
+ .object({
11
+ insee_code: z.string().regex(/^\d{5}$|^2[AB]\d{3}$/).optional(),
12
+ postal_code: z.string().regex(/^\d{5}$/).optional(),
13
+ limit: z.number().int().min(1).max(500).default(50).optional(),
14
+ })
15
+ .refine((d) => d.insee_code || d.postal_code, {
16
+ message: "Au moins un de insee_code ou postal_code est requis.",
17
+ }),
18
+ handler: async (input) => {
19
+ if (input.insee_code) {
20
+ return {
21
+ transactions: await connectors.dvf.searchByCommune(input.insee_code, input.limit ?? 50),
22
+ };
23
+ }
24
+ return {
25
+ transactions: await connectors.dvf.searchByPostalCode(input.postal_code, input.limit ?? 50),
26
+ };
27
+ },
28
+ });
29
+ export const realEstateTools = [realEstateTransactions];
30
+ //# sourceMappingURL=realestate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realestate.js","sourceRoot":"","sources":["../../src/tools/realestate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAEtD,MAAM,sBAAsB,GAAG,UAAU,CAAC;IACxC,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EACT,0EAA0E;QAC1E,uFAAuF;QACvF,iEAAiE;IACnE,WAAW,EAAE,CAAC;SACX,MAAM,CAAC;QACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;QAC/D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;QACnD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC/D,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,WAAW,EAAE;QAC5C,OAAO,EAAE,sDAAsD;KAChE,CAAC;IACJ,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACvB,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO;gBACL,YAAY,EAAE,MAAM,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;aACxF,CAAC;QACJ,CAAC;QACD,OAAO;YACL,YAAY,EAAE,MAAM,UAAU,CAAC,GAAG,CAAC,kBAAkB,CACnD,KAAK,CAAC,WAAY,EAClB,KAAK,CAAC,KAAK,IAAI,EAAE,CAClB;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAc,CAAC,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type AnyTool } from "./types.js";
2
+ export declare const sourceTools: AnyTool[];
3
+ //# sourceMappingURL=sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../src/tools/sources.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAgBtD,eAAO,MAAM,WAAW,EAAE,OAAO,EAAkB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ import { connectors } from "../connectors/index.js";
3
+ import { defineTool } from "./types.js";
4
+ const listSources = defineTool({
5
+ name: "sources_list",
6
+ description: "Liste toutes les sources de données publiques agrégées par ce serveur MCP avec leur licence, " +
7
+ "authentification requise et description. Utile pour découverte et mention de provenance.",
8
+ inputSchema: z.object({}),
9
+ handler: async () => {
10
+ return {
11
+ sources: Object.values(connectors).map((c) => c.metadata),
12
+ count: Object.keys(connectors).length,
13
+ };
14
+ },
15
+ });
16
+ export const sourceTools = [listSources];
17
+ //# sourceMappingURL=sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sources.js","sourceRoot":"","sources":["../../src/tools/sources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,GAAG,UAAU,CAAC;IAC7B,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,+FAA+F;QAC/F,0FAA0F;IAC5F,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACzB,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;YACzD,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM;SACtC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAc,CAAC,WAAW,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { z } from "zod";
2
+ export interface ToolDefinition<TInput extends z.ZodTypeAny = z.ZodType<any, any, any>> {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: TInput;
6
+ handler: (input: z.infer<TInput>) => Promise<unknown>;
7
+ }
8
+ export declare function defineTool<T extends z.ZodTypeAny>(def: ToolDefinition<T>): ToolDefinition<T>;
9
+ export type AnyTool = ToolDefinition<any>;
10
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,MAAM,WAAW,cAAc,CAAC,MAAM,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACvD;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAC/C,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,GACrB,cAAc,CAAC,CAAC,CAAC,CAEnB;AAGD,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export function defineTool(def) {
2
+ return def;
3
+ }
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,UAAU,CACxB,GAAsB;IAEtB,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function injectEnv(vars: Record<string, string | undefined>): void;
2
+ export declare function requireEnvVar(name: string): string;
3
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,CAIxE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIlD"}
@@ -0,0 +1,14 @@
1
+ const overrides = {};
2
+ export function injectEnv(vars) {
3
+ for (const [k, v] of Object.entries(vars)) {
4
+ if (v)
5
+ overrides[k] = v;
6
+ }
7
+ }
8
+ export function requireEnvVar(name) {
9
+ const val = overrides[name] ?? process.env[name];
10
+ if (!val)
11
+ throw new Error(`Missing env var: ${name}. Set it to use this connector.`);
12
+ return val;
13
+ }
14
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAA2B,EAAE,CAAC;AAE7C,MAAM,UAAU,SAAS,CAAC,IAAwC;IAChE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC;YAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,iCAAiC,CAAC,CAAC;IACrF,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,17 @@
1
+ interface FetchOptions {
2
+ method?: "GET" | "POST";
3
+ headers?: Record<string, string>;
4
+ body?: string | URLSearchParams;
5
+ timeoutMs?: number;
6
+ retries?: number;
7
+ }
8
+ export declare class HttpError extends Error {
9
+ readonly status: number;
10
+ readonly statusText: string;
11
+ readonly url: string;
12
+ readonly body?: string | undefined;
13
+ constructor(status: number, statusText: string, url: string, body?: string | undefined);
14
+ }
15
+ export declare function fetchJson<T = unknown>(url: string, options?: FetchOptions): Promise<T>;
16
+ export {};
17
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAAA,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,SAAU,SAAQ,KAAK;aAEhB,MAAM,EAAE,MAAM;aACd,UAAU,EAAE,MAAM;aAClB,GAAG,EAAE,MAAM;aACX,IAAI,CAAC,EAAE,MAAM;gBAHb,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,YAAA;CAKhC;AAED,wBAAsB,SAAS,CAAC,CAAC,GAAG,OAAO,EACzC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,CAAC,CAAC,CAsDZ"}
@@ -0,0 +1,62 @@
1
+ export class HttpError extends Error {
2
+ status;
3
+ statusText;
4
+ url;
5
+ body;
6
+ constructor(status, statusText, url, body) {
7
+ super(`HTTP ${status} ${statusText} on ${url}`);
8
+ this.status = status;
9
+ this.statusText = statusText;
10
+ this.url = url;
11
+ this.body = body;
12
+ this.name = "HttpError";
13
+ }
14
+ }
15
+ export async function fetchJson(url, options = {}) {
16
+ const { method = "GET", headers = {}, body, timeoutMs = 15000, retries = 2, } = options;
17
+ let lastError;
18
+ for (let attempt = 0; attempt <= retries; attempt++) {
19
+ const controller = new AbortController();
20
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
21
+ try {
22
+ const res = await fetch(url, {
23
+ method,
24
+ headers: {
25
+ Accept: "application/json",
26
+ "User-Agent": "money-maker-mcp/0.1.0",
27
+ ...headers,
28
+ },
29
+ body,
30
+ signal: controller.signal,
31
+ });
32
+ clearTimeout(timer);
33
+ if (!res.ok) {
34
+ const text = await res.text().catch(() => "");
35
+ if (res.status >= 500 && attempt < retries) {
36
+ await sleep(2 ** attempt * 500);
37
+ continue;
38
+ }
39
+ throw new HttpError(res.status, res.statusText, url, text);
40
+ }
41
+ const contentType = res.headers.get("content-type") ?? "";
42
+ if (contentType.includes("application/json")) {
43
+ return (await res.json());
44
+ }
45
+ return (await res.text());
46
+ }
47
+ catch (err) {
48
+ clearTimeout(timer);
49
+ lastError = err;
50
+ if (attempt < retries && !(err instanceof HttpError)) {
51
+ await sleep(2 ** attempt * 500);
52
+ continue;
53
+ }
54
+ throw err;
55
+ }
56
+ }
57
+ throw lastError ?? new Error("Unknown fetch error");
58
+ }
59
+ function sleep(ms) {
60
+ return new Promise((resolve) => setTimeout(resolve, ms));
61
+ }
62
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { requireEnvVar } from "./env.js";
2
+ export { requireEnvVar as requireEnv };
3
+ export declare function getOAuth2Token(params: {
4
+ key: string;
5
+ tokenUrl: string;
6
+ clientId: string;
7
+ clientSecret: string;
8
+ scope?: string;
9
+ grantType?: string;
10
+ }): Promise<string>;
11
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/utils/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,CAAC;AASvC,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BlB"}
@@ -0,0 +1,31 @@
1
+ import { requireEnvVar } from "./env.js";
2
+ import { fetchJson } from "./http.js";
3
+ export { requireEnvVar as requireEnv };
4
+ const tokenCache = new Map();
5
+ export async function getOAuth2Token(params) {
6
+ const cached = tokenCache.get(params.key);
7
+ if (cached && cached.expires_at > Date.now() + 10_000) {
8
+ return cached.access_token;
9
+ }
10
+ const body = new URLSearchParams({
11
+ grant_type: params.grantType ?? "client_credentials",
12
+ });
13
+ if (params.scope)
14
+ body.set("scope", params.scope);
15
+ const credentials = Buffer.from(`${params.clientId}:${params.clientSecret}`).toString("base64");
16
+ const res = await fetchJson(params.tokenUrl, {
17
+ method: "POST",
18
+ headers: {
19
+ "Content-Type": "application/x-www-form-urlencoded",
20
+ Authorization: `Basic ${credentials}`,
21
+ },
22
+ body: body.toString(),
23
+ retries: 1,
24
+ });
25
+ tokenCache.set(params.key, {
26
+ access_token: res.access_token,
27
+ expires_at: Date.now() + res.expires_in * 1000,
28
+ });
29
+ return res.access_token;
30
+ }
31
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/utils/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,CAAC;AAOvC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAiB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAOpC;IACC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QACtD,OAAO,MAAM,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC,SAAS,IAAI,oBAAoB;KACrD,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK;QAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEhG,MAAM,GAAG,GAAG,MAAM,SAAS,CAA+C,MAAM,CAAC,QAAQ,EAAE;QACzF,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,mCAAmC;YACnD,aAAa,EAAE,SAAS,WAAW,EAAE;SACtC;QACD,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;QACrB,OAAO,EAAE,CAAC;KACX,CAAC,CAAC;IAEH,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE;QACzB,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,UAAU,GAAG,IAAI;KAC/C,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC,YAAY,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,16 @@
1
+ interface WorkerEnv {
2
+ API_KEYS: KVNamespace;
3
+ USAGE: KVNamespace;
4
+ INSEE_CLIENT_ID?: string;
5
+ INSEE_CLIENT_SECRET?: string;
6
+ INPI_USERNAME?: string;
7
+ INPI_PASSWORD?: string;
8
+ COMPANIES_HOUSE_API_KEY?: string;
9
+ EPO_CLIENT_KEY?: string;
10
+ EPO_CLIENT_SECRET?: string;
11
+ FRANCE_TRAVAIL_CLIENT_ID?: string;
12
+ FRANCE_TRAVAIL_CLIENT_SECRET?: string;
13
+ }
14
+ declare const _default: ExportedHandler<WorkerEnv>;
15
+ export default _default;
16
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAOA,UAAU,SAAS;IACjB,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC;IAEnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACvC;;AA0BD,wBAsIuC"}