@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.
- package/LICENSE +21 -0
- package/README.md +176 -0
- package/dist/cache/index.d.ts +12 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +44 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/connectors/ban.d.ts +15 -0
- package/dist/connectors/ban.d.ts.map +1 -0
- package/dist/connectors/ban.js +46 -0
- package/dist/connectors/ban.js.map +1 -0
- package/dist/connectors/base.d.ts +18 -0
- package/dist/connectors/base.d.ts.map +1 -0
- package/dist/connectors/base.js +10 -0
- package/dist/connectors/base.js.map +1 -0
- package/dist/connectors/bodacc.d.ts +11 -0
- package/dist/connectors/bodacc.d.ts.map +1 -0
- package/dist/connectors/bodacc.js +47 -0
- package/dist/connectors/bodacc.js.map +1 -0
- package/dist/connectors/companies-house.d.ts +13 -0
- package/dist/connectors/companies-house.d.ts.map +1 -0
- package/dist/connectors/companies-house.js +104 -0
- package/dist/connectors/companies-house.js.map +1 -0
- package/dist/connectors/dvf.d.ts +13 -0
- package/dist/connectors/dvf.d.ts.map +1 -0
- package/dist/connectors/dvf.js +51 -0
- package/dist/connectors/dvf.js.map +1 -0
- package/dist/connectors/epo-ops.d.ts +37 -0
- package/dist/connectors/epo-ops.d.ts.map +1 -0
- package/dist/connectors/epo-ops.js +100 -0
- package/dist/connectors/epo-ops.js.map +1 -0
- package/dist/connectors/france-travail.d.ts +47 -0
- package/dist/connectors/france-travail.d.ts.map +1 -0
- package/dist/connectors/france-travail.js +89 -0
- package/dist/connectors/france-travail.js.map +1 -0
- package/dist/connectors/georisques.d.ts +7 -0
- package/dist/connectors/georisques.d.ts.map +1 -0
- package/dist/connectors/georisques.js +68 -0
- package/dist/connectors/georisques.js.map +1 -0
- package/dist/connectors/gleif.d.ts +9 -0
- package/dist/connectors/gleif.d.ts.map +1 -0
- package/dist/connectors/gleif.js +63 -0
- package/dist/connectors/gleif.js.map +1 -0
- package/dist/connectors/index.d.ts +29 -0
- package/dist/connectors/index.d.ts.map +1 -0
- package/dist/connectors/index.js +28 -0
- package/dist/connectors/index.js.map +1 -0
- package/dist/connectors/inpi-rne.d.ts +19 -0
- package/dist/connectors/inpi-rne.d.ts.map +1 -0
- package/dist/connectors/inpi-rne.js +107 -0
- package/dist/connectors/inpi-rne.js.map +1 -0
- package/dist/connectors/insee-sirene.d.ts +12 -0
- package/dist/connectors/insee-sirene.d.ts.map +1 -0
- package/dist/connectors/insee-sirene.js +104 -0
- package/dist/connectors/insee-sirene.js.map +1 -0
- package/dist/connectors/recherche-entreprises.d.ts +20 -0
- package/dist/connectors/recherche-entreprises.d.ts.map +1 -0
- package/dist/connectors/recherche-entreprises.js +135 -0
- package/dist/connectors/recherche-entreprises.js.map +1 -0
- package/dist/connectors/vies.d.ts +10 -0
- package/dist/connectors/vies.d.ts.map +1 -0
- package/dist/connectors/vies.js +39 -0
- package/dist/connectors/vies.js.map +1 -0
- package/dist/http.d.ts +3 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +74 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/canonical.d.ts +1545 -0
- package/dist/schemas/canonical.d.ts.map +1 -0
- package/dist/schemas/canonical.js +120 -0
- package/dist/schemas/canonical.js.map +1 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +126 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/company-layer2.d.ts +3 -0
- package/dist/tools/company-layer2.d.ts.map +1 -0
- package/dist/tools/company-layer2.js +84 -0
- package/dist/tools/company-layer2.js.map +1 -0
- package/dist/tools/company.d.ts +3 -0
- package/dist/tools/company.d.ts.map +1 -0
- package/dist/tools/company.js +119 -0
- package/dist/tools/company.js.map +1 -0
- package/dist/tools/geo.d.ts +3 -0
- package/dist/tools/geo.d.ts.map +1 -0
- package/dist/tools/geo.js +59 -0
- package/dist/tools/geo.js.map +1 -0
- package/dist/tools/identity.d.ts +3 -0
- package/dist/tools/identity.d.ts.map +1 -0
- package/dist/tools/identity.js +60 -0
- package/dist/tools/identity.js.map +1 -0
- package/dist/tools/index.d.ts +14 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +22 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/jobs.d.ts +3 -0
- package/dist/tools/jobs.d.ts.map +1 -0
- package/dist/tools/jobs.js +63 -0
- package/dist/tools/jobs.js.map +1 -0
- package/dist/tools/legal.d.ts +3 -0
- package/dist/tools/legal.d.ts.map +1 -0
- package/dist/tools/legal.js +48 -0
- package/dist/tools/legal.js.map +1 -0
- package/dist/tools/patents.d.ts +3 -0
- package/dist/tools/patents.d.ts.map +1 -0
- package/dist/tools/patents.js +51 -0
- package/dist/tools/patents.js.map +1 -0
- package/dist/tools/realestate.d.ts +3 -0
- package/dist/tools/realestate.d.ts.map +1 -0
- package/dist/tools/realestate.js +30 -0
- package/dist/tools/realestate.js.map +1 -0
- package/dist/tools/sources.d.ts +3 -0
- package/dist/tools/sources.d.ts.map +1 -0
- package/dist/tools/sources.js +17 -0
- package/dist/tools/sources.js.map +1 -0
- package/dist/tools/types.d.ts +10 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +4 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/utils/env.d.ts +3 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +14 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/http.d.ts +17 -0
- package/dist/utils/http.d.ts.map +1 -0
- package/dist/utils/http.js +62 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/oauth.d.ts +11 -0
- package/dist/utils/oauth.d.ts.map +1 -0
- package/dist/utils/oauth.js +31 -0
- package/dist/utils/oauth.js.map +1 -0
- package/dist/worker.d.ts +16 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +185 -0
- package/dist/worker.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { fetchJson } from "../utils/http.js";
|
|
2
|
+
import { requireEnv } from "../utils/oauth.js";
|
|
3
|
+
import { Connector } from "./base.js";
|
|
4
|
+
const BASE_URL = "https://registre-national-entreprises.inpi.fr/api";
|
|
5
|
+
let jwtToken = null;
|
|
6
|
+
async function getInpiToken() {
|
|
7
|
+
if (jwtToken && jwtToken.expires_at > Date.now() + 60_000) {
|
|
8
|
+
return jwtToken.value;
|
|
9
|
+
}
|
|
10
|
+
const username = requireEnv("INPI_USERNAME");
|
|
11
|
+
const password = requireEnv("INPI_PASSWORD");
|
|
12
|
+
const res = await fetchJson(`${BASE_URL}/sso/login`, {
|
|
13
|
+
method: "POST",
|
|
14
|
+
headers: { "Content-Type": "application/json" },
|
|
15
|
+
body: JSON.stringify({ username, password }),
|
|
16
|
+
retries: 1,
|
|
17
|
+
});
|
|
18
|
+
jwtToken = {
|
|
19
|
+
value: res.token,
|
|
20
|
+
expires_at: Date.now() + 23 * 60 * 60 * 1000,
|
|
21
|
+
};
|
|
22
|
+
return res.token;
|
|
23
|
+
}
|
|
24
|
+
export class InpiRneConnector extends Connector {
|
|
25
|
+
metadata = {
|
|
26
|
+
id: "inpi-rne",
|
|
27
|
+
name: "INPI Registre National des Entreprises",
|
|
28
|
+
description: "Registre National des Entreprises INPI : statuts, actes, comptes annuels, bénéficiaires effectifs. Source officielle pour due diligence et KYC.",
|
|
29
|
+
source: "https://registre-national-entreprises.inpi.fr",
|
|
30
|
+
license: "Licence Ouverte 2.0 (Etalab)",
|
|
31
|
+
authRequired: true,
|
|
32
|
+
defaultTtlSeconds: 86400,
|
|
33
|
+
};
|
|
34
|
+
async getBySiren(siren) {
|
|
35
|
+
if (!/^\d{9}$/.test(siren))
|
|
36
|
+
throw new Error("SIREN invalide (9 chiffres requis)");
|
|
37
|
+
const token = await getInpiToken();
|
|
38
|
+
const url = `${BASE_URL}/companies/${siren}`;
|
|
39
|
+
const data = await this.getJson(url, {
|
|
40
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
41
|
+
});
|
|
42
|
+
return this.normalize(siren, data);
|
|
43
|
+
}
|
|
44
|
+
normalize(siren, data) {
|
|
45
|
+
const pm = data.formality?.content?.personneMorale;
|
|
46
|
+
const entreprise = pm?.identite?.entreprise;
|
|
47
|
+
const pouvoirs = pm?.composition?.pouvoirs ?? [];
|
|
48
|
+
const officers = pouvoirs.map((p) => {
|
|
49
|
+
const dp = p.individu?.descriptionPersonne;
|
|
50
|
+
return {
|
|
51
|
+
name: dp ? [dp.prenoms?.[0], dp.nom].filter(Boolean).join(" ") || "Inconnu" : "Inconnu",
|
|
52
|
+
role: p.type,
|
|
53
|
+
type: "person",
|
|
54
|
+
birth_date_partial: dp?.dateDeNaissance?.slice(0, 7),
|
|
55
|
+
nationality: dp?.nationalite,
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
const financials = (data.comptes ?? []).map((c) => ({
|
|
59
|
+
filed_at: c.dateDepot,
|
|
60
|
+
}));
|
|
61
|
+
const url = `${BASE_URL}/companies/${siren}`;
|
|
62
|
+
return {
|
|
63
|
+
siren,
|
|
64
|
+
legal_name: entreprise?.denomination,
|
|
65
|
+
trade_name: entreprise?.sigle,
|
|
66
|
+
legal_form: entreprise?.formeJuridique?.libelle,
|
|
67
|
+
legal_form_code: entreprise?.formeJuridique?.code,
|
|
68
|
+
created_at: entreprise?.dateImmat,
|
|
69
|
+
officers,
|
|
70
|
+
financials,
|
|
71
|
+
provenance: [this.makeProvenance(url)],
|
|
72
|
+
_raw: data,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
async getBeneficiairesEffectifs(siren) {
|
|
76
|
+
if (!/^\d{9}$/.test(siren))
|
|
77
|
+
throw new Error("SIREN invalide");
|
|
78
|
+
const token = await getInpiToken();
|
|
79
|
+
const url = `${BASE_URL}/companies/${siren}`;
|
|
80
|
+
const data = await this.getJson(url, {
|
|
81
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
82
|
+
});
|
|
83
|
+
const beneficiaires = (data.beneficiairesEffectifs ?? []).map((b) => {
|
|
84
|
+
const dp = b.beneficiaire?.descriptionPersonne;
|
|
85
|
+
return {
|
|
86
|
+
name: dp ? [dp.prenoms?.[0], dp.nom].filter(Boolean).join(" ") || "Inconnu" : "Inconnu",
|
|
87
|
+
birth_date_partial: dp?.dateDeNaissance?.slice(0, 7),
|
|
88
|
+
nationality: dp?.nationalite,
|
|
89
|
+
ownership_pct: b.beneficiaire?.details?.pourcentageDetentionDirecteIndirecte,
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
return {
|
|
93
|
+
siren,
|
|
94
|
+
beneficiaires,
|
|
95
|
+
provenance: [this.makeProvenance(url)],
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
makeProvenance(url) {
|
|
99
|
+
return {
|
|
100
|
+
source: this.metadata.id,
|
|
101
|
+
source_url: url,
|
|
102
|
+
fetched_at: new Date().toISOString(),
|
|
103
|
+
license: this.metadata.license,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=inpi-rne.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inpi-rne.js","sourceRoot":"","sources":["../../src/connectors/inpi-rne.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Company } from "../schemas/canonical.js";
|
|
2
|
+
import { Connector, type ConnectorMetadata } from "./base.js";
|
|
3
|
+
export declare class InseeSireneConnector extends Connector {
|
|
4
|
+
readonly metadata: ConnectorMetadata;
|
|
5
|
+
private getToken;
|
|
6
|
+
getBySiren(siren: string): Promise<Company | null>;
|
|
7
|
+
getBySiret(siret: string): Promise<Company | null>;
|
|
8
|
+
private normalize;
|
|
9
|
+
private normalizeEtablissement;
|
|
10
|
+
private makeProvenance;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=insee-sirene.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insee-sirene.d.ts","sourceRoot":"","sources":["../../src/connectors/insee-sirene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,OAAO,EAAkD,MAAM,yBAAyB,CAAC;AAEhH,OAAO,EAAE,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AA8D9D,qBAAa,oBAAqB,SAAQ,SAAS;IACjD,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CASlC;YAEY,QAAQ;IAShB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAUlD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAoBxD,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,sBAAsB;IAyB9B,OAAO,CAAC,cAAc;CAQvB"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { getOAuth2Token, requireEnv } from "../utils/oauth.js";
|
|
2
|
+
import { Connector } from "./base.js";
|
|
3
|
+
const BASE_URL = "https://api.insee.fr/entreprises/sirene/V3.11";
|
|
4
|
+
const TOKEN_URL = "https://api.insee.fr/token";
|
|
5
|
+
export class InseeSireneConnector extends Connector {
|
|
6
|
+
metadata = {
|
|
7
|
+
id: "insee-sirene",
|
|
8
|
+
name: "INSEE Sirene",
|
|
9
|
+
description: "Référentiel officiel INSEE des entreprises et établissements français. Mise à jour quotidienne. Accès complet SIREN/SIRET avec historique des changements.",
|
|
10
|
+
source: "https://api.insee.fr/entreprises/sirene/V3.11",
|
|
11
|
+
license: "Licence Ouverte 2.0 (Etalab)",
|
|
12
|
+
authRequired: true,
|
|
13
|
+
defaultTtlSeconds: 86400,
|
|
14
|
+
};
|
|
15
|
+
async getToken() {
|
|
16
|
+
return getOAuth2Token({
|
|
17
|
+
key: "insee-sirene",
|
|
18
|
+
tokenUrl: TOKEN_URL,
|
|
19
|
+
clientId: requireEnv("INSEE_CLIENT_ID"),
|
|
20
|
+
clientSecret: requireEnv("INSEE_CLIENT_SECRET"),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
async getBySiren(siren) {
|
|
24
|
+
if (!/^\d{9}$/.test(siren))
|
|
25
|
+
throw new Error("SIREN invalide (9 chiffres requis)");
|
|
26
|
+
const token = await this.getToken();
|
|
27
|
+
const url = `${BASE_URL}/siren/${siren}`;
|
|
28
|
+
const data = await this.getJson(url, {
|
|
29
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
30
|
+
});
|
|
31
|
+
return this.normalize(data.uniteLegale);
|
|
32
|
+
}
|
|
33
|
+
async getBySiret(siret) {
|
|
34
|
+
if (!/^\d{14}$/.test(siret))
|
|
35
|
+
throw new Error("SIRET invalide (14 chiffres requis)");
|
|
36
|
+
const token = await this.getToken();
|
|
37
|
+
const url = `${BASE_URL}/siret/${siret}`;
|
|
38
|
+
const data = await this.getJson(url, {
|
|
39
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
40
|
+
});
|
|
41
|
+
const etab = data.etablissement;
|
|
42
|
+
const ul = etab.uniteLegale;
|
|
43
|
+
const company = ul ? this.normalize({ ...ul, siren: etab.siren }) : {
|
|
44
|
+
siren: etab.siren,
|
|
45
|
+
active: etab.etatAdministratifEtablissement === "A",
|
|
46
|
+
provenance: [this.makeProvenance(url)],
|
|
47
|
+
};
|
|
48
|
+
company.headquarter = this.normalizeEtablissement(etab);
|
|
49
|
+
return company;
|
|
50
|
+
}
|
|
51
|
+
normalize(ul) {
|
|
52
|
+
const currentPeriod = ul.periodesUniteLegale?.[0];
|
|
53
|
+
const url = `${BASE_URL}/siren/${ul.siren}`;
|
|
54
|
+
const establishment = undefined;
|
|
55
|
+
const officers = [];
|
|
56
|
+
const financials = [];
|
|
57
|
+
return {
|
|
58
|
+
siren: ul.siren,
|
|
59
|
+
legal_name: ul.denominationUniteLegale ?? currentPeriod?.denominationUniteLegale,
|
|
60
|
+
trade_name: ul.denominationUsuelle1UniteLegale,
|
|
61
|
+
legal_form_code: ul.categorieJuridiqueUniteLegale ?? currentPeriod?.categorieJuridiqueUniteLegale,
|
|
62
|
+
active: (ul.etatAdministratifUniteLegale ?? currentPeriod?.etatAdministratifUniteLegale) === "A",
|
|
63
|
+
created_at: ul.dateCreationUniteLegale,
|
|
64
|
+
closed_at: ul.dateFin,
|
|
65
|
+
naf_code: ul.activitePrincipaleUniteLegale ?? currentPeriod?.activitePrincipaleUniteLegale,
|
|
66
|
+
officers,
|
|
67
|
+
financials,
|
|
68
|
+
provenance: [this.makeProvenance(url)],
|
|
69
|
+
_raw: ul,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
normalizeEtablissement(etab) {
|
|
73
|
+
const addr = etab.adresseEtablissement;
|
|
74
|
+
const address = addr
|
|
75
|
+
? {
|
|
76
|
+
street: [addr.numeroVoieEtablissement, addr.typeVoieEtablissement, addr.libelleVoieEtablissement]
|
|
77
|
+
.filter(Boolean)
|
|
78
|
+
.join(" ") || undefined,
|
|
79
|
+
postal_code: addr.codePostalEtablissement,
|
|
80
|
+
city: addr.libelleCommuneEtablissement,
|
|
81
|
+
insee_code: addr.codeCommuneEtablissement,
|
|
82
|
+
country: addr.codePaysEtrangerEtablissement ?? "FR",
|
|
83
|
+
}
|
|
84
|
+
: undefined;
|
|
85
|
+
return {
|
|
86
|
+
siret: etab.siret,
|
|
87
|
+
is_headquarters: etab.etablissementSiege,
|
|
88
|
+
active: etab.etatAdministratifEtablissement === "A",
|
|
89
|
+
naf_code: etab.activitePrincipaleEtablissement,
|
|
90
|
+
employee_range: etab.trancheEffectifsEtablissement,
|
|
91
|
+
created_at: etab.dateCreationEtablissement,
|
|
92
|
+
address,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
makeProvenance(url) {
|
|
96
|
+
return {
|
|
97
|
+
source: this.metadata.id,
|
|
98
|
+
source_url: url,
|
|
99
|
+
fetched_at: new Date().toISOString(),
|
|
100
|
+
license: this.metadata.license,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=insee-sirene.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insee-sirene.js","sourceRoot":"","sources":["../../src/connectors/insee-sirene.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Company, SearchResult } from "../schemas/canonical.js";
|
|
2
|
+
import { Connector, type ConnectorMetadata } from "./base.js";
|
|
3
|
+
export declare class RechercheEntreprisesConnector extends Connector {
|
|
4
|
+
readonly metadata: ConnectorMetadata;
|
|
5
|
+
search(params: {
|
|
6
|
+
query: string;
|
|
7
|
+
page?: number;
|
|
8
|
+
perPage?: number;
|
|
9
|
+
departement?: string;
|
|
10
|
+
naf?: string;
|
|
11
|
+
activeOnly?: boolean;
|
|
12
|
+
}): Promise<SearchResult>;
|
|
13
|
+
getBySiren(siren: string): Promise<Company | null>;
|
|
14
|
+
getBySiret(siret: string): Promise<Company | null>;
|
|
15
|
+
private normalize;
|
|
16
|
+
private normalizeEstablishment;
|
|
17
|
+
private normalizeOfficer;
|
|
18
|
+
private makeProvenance;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=recherche-entreprises.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recherche-entreprises.d.ts","sourceRoot":"","sources":["../../src/connectors/recherche-entreprises.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,OAAO,EAKP,YAAY,EACb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAsE9D,qBAAa,6BAA8B,SAAQ,SAAS;IAC1D,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CASlC;IAEI,MAAM,CAAC,MAAM,EAAE;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,GAAG,OAAO,CAAC,YAAY,CAAC;IAuBnB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAWlD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAWxD,OAAO,CAAC,SAAS;IAkCjB,OAAO,CAAC,sBAAsB;IAyB9B,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,cAAc;CAQvB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { Connector } from "./base.js";
|
|
2
|
+
const BASE_URL = "https://recherche-entreprises.api.gouv.fr";
|
|
3
|
+
export class RechercheEntreprisesConnector extends Connector {
|
|
4
|
+
metadata = {
|
|
5
|
+
id: "recherche-entreprises",
|
|
6
|
+
name: "Recherche d'entreprises (DINUM)",
|
|
7
|
+
description: "API officielle de recherche d'entreprises française agrégeant INSEE, INPI, RNE, BODACC.",
|
|
8
|
+
source: "https://recherche-entreprises.api.gouv.fr",
|
|
9
|
+
license: "Licence Ouverte 2.0 (Etalab)",
|
|
10
|
+
authRequired: false,
|
|
11
|
+
defaultTtlSeconds: 86400,
|
|
12
|
+
};
|
|
13
|
+
async search(params) {
|
|
14
|
+
const search = new URLSearchParams({
|
|
15
|
+
q: params.query,
|
|
16
|
+
page: String(params.page ?? 1),
|
|
17
|
+
per_page: String(params.perPage ?? 10),
|
|
18
|
+
});
|
|
19
|
+
if (params.departement)
|
|
20
|
+
search.set("departement", params.departement);
|
|
21
|
+
if (params.naf)
|
|
22
|
+
search.set("activite_principale", params.naf);
|
|
23
|
+
if (params.activeOnly)
|
|
24
|
+
search.set("etat_administratif", "A");
|
|
25
|
+
const url = `${BASE_URL}/search?${search.toString()}`;
|
|
26
|
+
const data = await this.getJson(url);
|
|
27
|
+
return {
|
|
28
|
+
query: params.query,
|
|
29
|
+
total: data.total_results,
|
|
30
|
+
page: data.page,
|
|
31
|
+
per_page: data.per_page,
|
|
32
|
+
results: data.results.map((c) => this.normalize(c)),
|
|
33
|
+
provenance: [this.makeProvenance(url)],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
async getBySiren(siren) {
|
|
37
|
+
if (!/^\d{9}$/.test(siren)) {
|
|
38
|
+
throw new Error("SIREN invalide (9 chiffres requis)");
|
|
39
|
+
}
|
|
40
|
+
const url = `${BASE_URL}/search?q=${siren}&per_page=1`;
|
|
41
|
+
const data = await this.getJson(url);
|
|
42
|
+
const first = data.results[0];
|
|
43
|
+
if (!first || first.siren !== siren)
|
|
44
|
+
return null;
|
|
45
|
+
return this.normalize(first);
|
|
46
|
+
}
|
|
47
|
+
async getBySiret(siret) {
|
|
48
|
+
if (!/^\d{14}$/.test(siret)) {
|
|
49
|
+
throw new Error("SIRET invalide (14 chiffres requis)");
|
|
50
|
+
}
|
|
51
|
+
const url = `${BASE_URL}/search?q=${siret}&per_page=1`;
|
|
52
|
+
const data = await this.getJson(url);
|
|
53
|
+
const first = data.results[0];
|
|
54
|
+
if (!first)
|
|
55
|
+
return null;
|
|
56
|
+
return this.normalize(first);
|
|
57
|
+
}
|
|
58
|
+
normalize(raw) {
|
|
59
|
+
const headquarter = raw.siege ? this.normalizeEstablishment(raw.siege) : undefined;
|
|
60
|
+
const establishments = (raw.matching_etablissements ?? []).map((e) => this.normalizeEstablishment(e));
|
|
61
|
+
const officers = (raw.dirigeants ?? []).map((d) => this.normalizeOfficer(d));
|
|
62
|
+
const financials = raw.finances
|
|
63
|
+
? Object.entries(raw.finances).map(([year, f]) => ({
|
|
64
|
+
fiscal_year: Number(year),
|
|
65
|
+
revenue_eur: f.ca,
|
|
66
|
+
net_income_eur: f.resultat_net,
|
|
67
|
+
}))
|
|
68
|
+
: [];
|
|
69
|
+
return {
|
|
70
|
+
siren: raw.siren,
|
|
71
|
+
legal_name: raw.nom_raison_sociale ?? raw.nom_complet,
|
|
72
|
+
trade_name: raw.sigle,
|
|
73
|
+
legal_form_code: raw.nature_juridique,
|
|
74
|
+
active: raw.etat_administratif === "A",
|
|
75
|
+
created_at: raw.date_creation,
|
|
76
|
+
closed_at: raw.date_fermeture,
|
|
77
|
+
naf_code: raw.activite_principale,
|
|
78
|
+
naf_label: raw.section_activite_principale,
|
|
79
|
+
registered_address: headquarter?.address,
|
|
80
|
+
headquarter,
|
|
81
|
+
establishments,
|
|
82
|
+
officers,
|
|
83
|
+
financials,
|
|
84
|
+
provenance: [this.makeProvenance(`${BASE_URL}/search?q=${raw.siren}`)],
|
|
85
|
+
_raw: raw,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
normalizeEstablishment(raw) {
|
|
89
|
+
const address = {
|
|
90
|
+
full: raw.adresse,
|
|
91
|
+
street: [raw.numero_voie, raw.type_voie, raw.libelle_voie]
|
|
92
|
+
.filter(Boolean)
|
|
93
|
+
.join(" ") || undefined,
|
|
94
|
+
postal_code: raw.code_postal,
|
|
95
|
+
city: raw.libelle_commune,
|
|
96
|
+
insee_code: raw.commune,
|
|
97
|
+
country: "FR",
|
|
98
|
+
latitude: raw.latitude !== undefined ? Number(raw.latitude) : undefined,
|
|
99
|
+
longitude: raw.longitude !== undefined ? Number(raw.longitude) : undefined,
|
|
100
|
+
};
|
|
101
|
+
return {
|
|
102
|
+
siret: raw.siret,
|
|
103
|
+
is_headquarters: raw.est_siege,
|
|
104
|
+
active: raw.etat_administratif === "A",
|
|
105
|
+
naf_code: raw.activite_principale,
|
|
106
|
+
naf_label: raw.libelle_activite_principale,
|
|
107
|
+
address,
|
|
108
|
+
employee_range: raw.tranche_effectif_salarie,
|
|
109
|
+
created_at: raw.date_creation,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
normalizeOfficer(raw) {
|
|
113
|
+
const isCompany = raw.type_dirigeant === "personne morale" || !!raw.denomination;
|
|
114
|
+
const name = isCompany
|
|
115
|
+
? raw.denomination ?? "Personne morale"
|
|
116
|
+
: [raw.prenoms, raw.nom].filter(Boolean).join(" ") || "Inconnu";
|
|
117
|
+
const birth = raw.date_de_naissance?.slice(0, 7);
|
|
118
|
+
return {
|
|
119
|
+
name,
|
|
120
|
+
role: raw.qualite,
|
|
121
|
+
type: isCompany ? "company" : "person",
|
|
122
|
+
birth_date_partial: birth,
|
|
123
|
+
nationality: raw.nationalite,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
makeProvenance(url) {
|
|
127
|
+
return {
|
|
128
|
+
source: this.metadata.id,
|
|
129
|
+
source_url: url,
|
|
130
|
+
fetched_at: new Date().toISOString(),
|
|
131
|
+
license: this.metadata.license,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=recherche-entreprises.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recherche-entreprises.js","sourceRoot":"","sources":["../../src/connectors/recherche-entreprises.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { VatValidation } from "../schemas/canonical.js";
|
|
2
|
+
import { Connector, type ConnectorMetadata } from "./base.js";
|
|
3
|
+
export declare class ViesConnector extends Connector {
|
|
4
|
+
readonly metadata: ConnectorMetadata;
|
|
5
|
+
validate(params: {
|
|
6
|
+
countryCode: string;
|
|
7
|
+
vatNumber: string;
|
|
8
|
+
}): Promise<VatValidation>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=vies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vies.d.ts","sourceRoot":"","sources":["../../src/connectors/vies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAc9D,qBAAa,aAAc,SAAQ,SAAS;IAC1C,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAQlC;IAEI,QAAQ,CAAC,MAAM,EAAE;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,aAAa,CAAC;CA2B3B"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Connector } from "./base.js";
|
|
2
|
+
const BASE_URL = "https://ec.europa.eu/taxation_customs/vies/rest-api";
|
|
3
|
+
export class ViesConnector extends Connector {
|
|
4
|
+
metadata = {
|
|
5
|
+
id: "vies",
|
|
6
|
+
name: "VIES (Commission européenne)",
|
|
7
|
+
description: "Validation des numéros de TVA intracommunautaire (27 États membres UE).",
|
|
8
|
+
source: "https://ec.europa.eu/taxation_customs/vies/",
|
|
9
|
+
license: "Données publiques - usage validation",
|
|
10
|
+
authRequired: false,
|
|
11
|
+
defaultTtlSeconds: 3600,
|
|
12
|
+
};
|
|
13
|
+
async validate(params) {
|
|
14
|
+
const cc = params.countryCode.toUpperCase();
|
|
15
|
+
const vat = params.vatNumber.replace(/^[A-Z]{2}/i, "").replace(/\s/g, "");
|
|
16
|
+
const url = `${BASE_URL}/check-vat-number`;
|
|
17
|
+
const provenance = {
|
|
18
|
+
source: this.metadata.id,
|
|
19
|
+
source_url: url,
|
|
20
|
+
fetched_at: new Date().toISOString(),
|
|
21
|
+
license: this.metadata.license,
|
|
22
|
+
};
|
|
23
|
+
const cacheKey = `vies:${cc}:${vat}`;
|
|
24
|
+
const data = await this.getJson(url, {
|
|
25
|
+
cacheKey,
|
|
26
|
+
headers: { "Content-Type": "application/json" },
|
|
27
|
+
});
|
|
28
|
+
return {
|
|
29
|
+
vat_number: `${cc}${vat}`,
|
|
30
|
+
country_code: cc,
|
|
31
|
+
valid: !!data.isValid,
|
|
32
|
+
legal_name: data.name?.trim() || undefined,
|
|
33
|
+
address: data.address?.trim() || undefined,
|
|
34
|
+
checked_at: data.requestDate ?? new Date().toISOString(),
|
|
35
|
+
provenance: [provenance],
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=vies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vies.js","sourceRoot":"","sources":["../../src/connectors/vies.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAA0B,MAAM,WAAW,CAAC;AAE9D,MAAM,QAAQ,GAAG,qDAAqD,CAAC;AAYvE,MAAM,OAAO,aAAc,SAAQ,SAAS;IACjC,QAAQ,GAAsB;QACrC,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,yEAAyE;QACtF,MAAM,EAAE,6CAA6C;QACrD,OAAO,EAAE,sCAAsC;QAC/C,YAAY,EAAE,KAAK;QACnB,iBAAiB,EAAE,IAAI;KACxB,CAAC;IAEF,KAAK,CAAC,QAAQ,CAAC,MAGd;QACC,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,GAAG,QAAQ,mBAAmB,CAAC;QAC3C,MAAM,UAAU,GAAe;YAC7B,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;YACxB,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;SAC/B,CAAC;QAEF,MAAM,QAAQ,GAAG,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAU,GAAG,EAAE;YAC5C,QAAQ;YACR,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAC;QAEH,OAAO;YACL,UAAU,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE;YACzB,YAAY,EAAE,EAAE;YAChB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,SAAS;YAC1C,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,SAAS;YAC1C,UAAU,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACxD,UAAU,EAAE,CAAC,UAAU,CAAC;SACzB,CAAC;IACJ,CAAC;CACF"}
|
package/dist/http.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":""}
|
package/dist/http.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Streamable HTTP transport entrypoint (multi-tenant hosted mode).
|
|
4
|
+
*
|
|
5
|
+
* Le transport SSE a été déprécié dans la révision MCP 2025-03-26 en faveur
|
|
6
|
+
* de Streamable HTTP : un seul endpoint /mcp qui gère POST (requêtes JSON-RPC)
|
|
7
|
+
* et GET (upgrade SSE pour les notifications serveur → client).
|
|
8
|
+
*
|
|
9
|
+
* Cette implémentation utilise le serveur HTTP natif de Node pour rester
|
|
10
|
+
* sans dépendance lourde. Pour la prod (Cloudflare Workers), voir docs/architecture.md.
|
|
11
|
+
*/
|
|
12
|
+
import { createServer as createHttpServer } from "node:http";
|
|
13
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
14
|
+
import { createServer } from "./server.js";
|
|
15
|
+
const PORT = Number.parseInt(process.env.PORT ?? "3000", 10);
|
|
16
|
+
const ENDPOINT = "/mcp";
|
|
17
|
+
async function main() {
|
|
18
|
+
const mcpServer = createServer();
|
|
19
|
+
const transport = new StreamableHTTPServerTransport({
|
|
20
|
+
sessionIdGenerator: () => crypto.randomUUID(),
|
|
21
|
+
});
|
|
22
|
+
await mcpServer.connect(transport);
|
|
23
|
+
const httpServer = createHttpServer(async (req, res) => {
|
|
24
|
+
if (!req.url?.startsWith(ENDPOINT)) {
|
|
25
|
+
res.statusCode = 404;
|
|
26
|
+
res.end("Not Found");
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
// CORS pour usage navigateur / inspector
|
|
30
|
+
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
31
|
+
res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
|
|
32
|
+
res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, Mcp-Session-Id");
|
|
33
|
+
res.setHeader("Access-Control-Expose-Headers", "Mcp-Session-Id");
|
|
34
|
+
if (req.method === "OPTIONS") {
|
|
35
|
+
res.statusCode = 204;
|
|
36
|
+
res.end();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
let body;
|
|
41
|
+
if (req.method === "POST") {
|
|
42
|
+
const chunks = [];
|
|
43
|
+
for await (const chunk of req)
|
|
44
|
+
chunks.push(chunk);
|
|
45
|
+
const raw = Buffer.concat(chunks).toString("utf8");
|
|
46
|
+
body = raw ? JSON.parse(raw) : undefined;
|
|
47
|
+
}
|
|
48
|
+
await transport.handleRequest(req, res, body);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
// eslint-disable-next-line no-console
|
|
52
|
+
console.error("[mcp-business-fr] request error:", err);
|
|
53
|
+
if (!res.headersSent) {
|
|
54
|
+
res.statusCode = 500;
|
|
55
|
+
res.setHeader("Content-Type", "application/json");
|
|
56
|
+
res.end(JSON.stringify({
|
|
57
|
+
jsonrpc: "2.0",
|
|
58
|
+
error: { code: -32603, message: "Internal error" },
|
|
59
|
+
id: null,
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
httpServer.listen(PORT, () => {
|
|
65
|
+
// eslint-disable-next-line no-console
|
|
66
|
+
console.error(`[mcp-business-fr] Streamable HTTP listening on http://localhost:${PORT}${ENDPOINT}`);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
main().catch((err) => {
|
|
70
|
+
// eslint-disable-next-line no-console
|
|
71
|
+
console.error("[mcp-business-fr] fatal:", err);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=http.js.map
|
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import { createServer } from "./server.js";
|
|
4
|
+
async function main() {
|
|
5
|
+
const server = createServer();
|
|
6
|
+
const transport = new StdioServerTransport();
|
|
7
|
+
await server.connect(transport);
|
|
8
|
+
// eslint-disable-next-line no-console
|
|
9
|
+
console.error("[mcp-business-fr] connected via stdio");
|
|
10
|
+
}
|
|
11
|
+
main().catch((err) => {
|
|
12
|
+
// eslint-disable-next-line no-console
|
|
13
|
+
console.error("[mcp-business-fr] fatal:", err);
|
|
14
|
+
process.exit(1);
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AACzD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|