{"_id":"@aismarttalk/legifrance-sdk","_rev":"3-7285a3045e2f006a563e53b6daed4eea","name":"@aismarttalk/legifrance-sdk","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@aismarttalk/legifrance-sdk","version":"1.0.0","keywords":["legifrance","api","sdk","typescript","french-law","legal","jurisprudence","loda","juri","codes","france","legislation","droit"],"author":{"url":"https://aismarttalk.tech","name":"AI Smarttalk","email":"contact@aismarttalk.tech"},"license":"MIT","_id":"@aismarttalk/legifrance-sdk@1.0.0","maintainers":[{"name":"odran","email":"odran@webforger.fr"},{"name":"caillaudpa","email":"pierre-antoine@aismarttalk.tech"}],"homepage":"https://github.com/aismarttalk/legifrance-sdk#readme","bugs":{"url":"https://github.com/aismarttalk/legifrance-sdk/issues"},"dist":{"shasum":"856bbf9d9f0b7fe0f11af123baae3c04cd71172c","tarball":"https://registry.npmjs.org/@aismarttalk/legifrance-sdk/-/legifrance-sdk-1.0.0.tgz","fileCount":32,"integrity":"sha512-Qkh6lYPbKPFqGqTmitPhxMUIw2s9Y8c18cYmqlvDY+vKfs1sQB6rpBTI5vrwPhuoyY/gG+s0C1OKA/DWR9Bapg==","signatures":[{"sig":"MEQCICAsqqffUb0keI3LLDE4L4R21DU/ReBjAqRqhwtimw0QAiAdtSuguf1NOHyVXEBZLrPvFD5BH+yA0xFhAcQ9emtCbw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":422884},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"1d3700963deeee6d632a9f1b5d07b226bd2081a1","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"odran","email":"odran@webforger.fr"},"repository":{"url":"git+https://github.com/aismarttalk/legifrance-sdk.git","type":"git"},"_npmVersion":"10.8.1","description":"TypeScript SDK for the Legifrance API - Access French legal texts, jurisprudence, and codes with full type safety","directories":{},"_nodeVersion":"22.4.1","dependencies":{"axios":"^1.6.2","dotenv":"^17.2.3"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.3.3","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/legifrance-sdk_1.0.0_1762364752779_0.4786708008356775","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aismarttalk/legifrance-sdk","version":"1.0.1","keywords":["legifrance","api","sdk","typescript","french-law","legal","jurisprudence","loda","juri","codes","france","legislation","droit"],"author":{"url":"https://aismarttalk.tech","name":"AI Smarttalk","email":"contact@aismarttalk.tech"},"license":"MIT","_id":"@aismarttalk/legifrance-sdk@1.0.1","maintainers":[{"name":"odran","email":"odran@webforger.fr"},{"name":"caillaudpa","email":"pierre-antoine@aismarttalk.tech"}],"homepage":"https://github.com/AI-SmartTalk/legifrance-sdk#readme","bugs":{"url":"https://github.com/AI-SmartTalk/legifrance-sdk/issues"},"dist":{"shasum":"812fa43a8c118787acea39355483dee9f4c735bd","tarball":"https://registry.npmjs.org/@aismarttalk/legifrance-sdk/-/legifrance-sdk-1.0.1.tgz","fileCount":32,"integrity":"sha512-LbG4Bh76RMCgiBfrqilj4ePzv08PzmkUcAlec+OpFPJ/K++4WaGtmgEgdCnJqcq9JayW6e4Sdm6dHL+wTC4ZuA==","signatures":[{"sig":"MEYCIQDjVVIDAHucV1+mHwODRHI2pwm2QtqxNUAPGLPxpBC46gIhAKhQvL/MnpBUQgOOtD9ggx/n208beDnUGk7+myxSzFJW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":422936},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"56b67feab2848dfa1a580e717e3bb79386b1aa8b","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"odran","email":"odran@webforger.fr"},"repository":{"url":"git+https://github.com/AI-SmartTalk/legifrance-sdk.git","type":"git"},"_npmVersion":"10.8.1","description":"TypeScript SDK for the Legifrance API - Access French legal texts, jurisprudence, and codes with full type safety","directories":{},"_nodeVersion":"22.4.1","dependencies":{"axios":"^1.6.2","dotenv":"^17.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.3.3","@types/node":"^20.10.0"},"_npmOperationalInternal":{"tmp":"tmp/legifrance-sdk_1.0.1_1762364883183_0.8443333733840341","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aismarttalk/legifrance-sdk","version":"1.0.2","description":"TypeScript SDK for the Legifrance API - Access French legal texts, jurisprudence, and codes with full type safety","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"keywords":["legifrance","api","sdk","typescript","french-law","legal","jurisprudence","loda","juri","codes","france","legislation","droit"],"author":{"name":"AI Smarttalk","email":"contact@aismarttalk.tech","url":"https://aismarttalk.tech"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/AI-SmartTalk/legifrance-sdk.git"},"homepage":"https://github.com/AI-SmartTalk/legifrance-sdk#readme","bugs":{"url":"https://github.com/AI-SmartTalk/legifrance-sdk/issues"},"engines":{"node":">=16.0.0"},"devDependencies":{"@types/node":"^20.10.0","ts-node":"^10.9.2","typescript":"^5.3.3"},"dependencies":{"axios":"^1.6.2","dotenv":"^17.2.3"},"publishConfig":{"access":"public"},"_id":"@aismarttalk/legifrance-sdk@1.0.2","gitHead":"48e3f4851323163720731203a759634cd6012b93","_nodeVersion":"22.4.1","_npmVersion":"10.8.1","dist":{"integrity":"sha512-hJ8A8EvuKsl9Bw1TQaUzyXvvu8qryWhFkAJcD7ezsKz2Hyh1clcKz2UZAga0+pbzOrF01HzAjRowPpA0hsN5iw==","shasum":"fde07df40efac82faa28aa3caabf975d3fc87e04","tarball":"https://registry.npmjs.org/@aismarttalk/legifrance-sdk/-/legifrance-sdk-1.0.2.tgz","fileCount":32,"unpackedSize":422936,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICKzcikeN+lDAoBsfLz+293I3xcR9ox5cdlol8QZtGrmAiAWN8NFyntqrpKlBy6MuhxeBypXBiPIfTH53N77Xhpc6g=="}]},"_npmUser":{"name":"odran","email":"odran@webforger.fr"},"directories":{},"maintainers":[{"name":"odran","email":"odran@webforger.fr"},{"name":"caillaudpa","email":"pierre-antoine@aismarttalk.tech"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/legifrance-sdk_1.0.2_1762364949660_0.07449500133980069"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-05T17:45:52.680Z","modified":"2025-11-05T17:49:10.122Z","1.0.0":"2025-11-05T17:45:52.990Z","1.0.1":"2025-11-05T17:48:03.352Z","1.0.2":"2025-11-05T17:49:09.886Z"},"bugs":{"url":"https://github.com/AI-SmartTalk/legifrance-sdk/issues"},"author":{"name":"AI Smarttalk","email":"contact@aismarttalk.tech","url":"https://aismarttalk.tech"},"license":"MIT","homepage":"https://github.com/AI-SmartTalk/legifrance-sdk#readme","keywords":["legifrance","api","sdk","typescript","french-law","legal","jurisprudence","loda","juri","codes","france","legislation","droit"],"repository":{"type":"git","url":"git+https://github.com/AI-SmartTalk/legifrance-sdk.git"},"description":"TypeScript SDK for the Legifrance API - Access French legal texts, jurisprudence, and codes with full type safety","maintainers":[{"name":"odran","email":"odran@webforger.fr"},{"name":"caillaudpa","email":"pierre-antoine@aismarttalk.tech"}],"readme":"# 📚 Legifrance SDK\n\n<div align=\"center\">\n\n**TypeScript SDK for the Legifrance API**\n\nMade with ❤️ by [**AI Smarttalk**](https://aismarttalk.tech)\n\n[![npm version](https://badge.fury.io/js/@aismarttalk%2Flegifrance-sdk.svg)](https://www.npmjs.com/package/@aismarttalk/legifrance-sdk)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.3-blue.svg)](https://www.typescriptlang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![npm downloads](https://img.shields.io/npm/dm/@aismarttalk/legifrance-sdk.svg)](https://www.npmjs.com/package/@aismarttalk/legifrance-sdk)\n\n</div>\n\n## 🚀 Features\n\n- ✅ **Full TypeScript support** with autocomplete\n- ✅ **OAuth2 authentication** handled automatically\n- ✅ **Sandbox & Production** environments\n- ✅ **Complete LODA search** with all filters (dates, natures, legal status)\n- ✅ **Clean & simple API**\n\n## 📦 Installation\n\n```bash\nnpm install @aismarttalk/legifrance-sdk\n```\n\nor with yarn:\n\n```bash\nyarn add @aismarttalk/legifrance-sdk\n```\n\n## 🔧 Quick Start\n\n```typescript\nimport { LegifranceClient, Nature } from '@aismarttalk/legifrance-sdk';\n\nconst client = new LegifranceClient({\n  clientId: 'YOUR_CLIENT_ID',\n  clientSecret: 'YOUR_CLIENT_SECRET',\n  environment: 'sandbox', // or 'production'\n});\n\nawait client.initialize();\n\n// Search in LODA\nconst result = await client.searchLoda('environnement', {\n  pageSize: 10,\n  natures: [Nature.DECRET, Nature.ARRETE],\n  datePublication: { start: '2025-01-01', end: '2025-12-31' },\n});\n\nconsole.log(`Found ${result.totalResultNumber} results`);\n```\n\n## 📋 Covered Endpoints\n\n| Endpoint | Method | Description | Status |\n|----------|--------|-------------|--------|\n| `/consult/ping` | `ping()` | Test API connectivity | ✅ Working |\n| `/list/loda` | `listLoda()` | List LODA texts | ✅ Working |\n| `/search` (LODA) | `searchLoda()` | Search LODA with filters | ✅ Working |\n| `/search` (JURI) | `searchJuri()` | Search jurisprudence with filters | ✅ Working |\n| `/consult/loda` | `consultLoda()` | Consult a LODA text | ✅ Working |\n| `/consult/loda/version` | `consultLodaVersion()` | Consult specific version | ✅ Working |\n| `/consult/loda/versions` | `listLodaVersions()` | List text versions | ✅ Working |\n\n## 🔍 Search Parameters\n\n### LODA Search (LOI, ORDONNANCE, DECRET, ARRETE)\n\nThe `searchLoda()` method supports all parameters from the official Python wrapper:\n\n```typescript\nawait client.searchLoda('query text', {\n  // Pagination\n  pageSize: 10,\n  pageNumber: 1,\n  \n  // Search parameters\n  textId: 'LEGITEXT000006074220',\n  champ: 'ALL', // 'ALL' | 'TEXTE' | 'TITLE' | 'NUM'\n  typeRecherche: 'TOUS_LES_MOTS_DANS_UN_CHAMP', // Search type\n  \n  // Filters\n  fond: 'LODA_DATE', // 'LODA_DATE' | 'LODA_ETAT'\n  natures: [Nature.LOI, Nature.DECRET, Nature.ARRETE],\n  \n  // Date filters\n  dateSignature: '2024-01-01', // or { start: '...', end: '...' }\n  datePublication: { start: '2025-01-01', end: '2025-12-31' },\n});\n```\n\n### JURI Search (Jurisprudence)\n\nThe `searchJuri()` method supports comprehensive jurisprudence search with filters:\n\n```typescript\nawait client.searchJuri('contrat de travail', {\n  // Pagination\n  pageSize: 5,\n  pageNumber: 1,\n  \n  // Publication filter\n  publicationBulletin: [PublicationStatus.PUBLIER], // or NON_PUBLIER, PUBLIER_EXTRAIT\n  \n  // Juridiction filter\n  juridictionJudiciaire: ['Cour de cassation'], // or \"Juridictions d'appel\", etc.\n  \n  // Date filter\n  dateStart: '2024-01-01',\n  dateEnd: '2024-12-31',\n  dateFacet: 'DATE_DECISION', // or 'DATE_PUBLI'\n  \n  // Formation filter (for Cour de cassation)\n  formation: ['Chambre sociale'], // or 'Chambre commerciale', 'Première chambre civile', etc.\n  \n  // Court of appeal location (only for \"Juridictions d'appel\")\n  courAppel: ['Paris'],\n  \n  // Search configuration\n  field: 'ALL', // 'ALL' | 'TEXTE' | 'TITLE'\n  searchType: 'UN_DES_MOTS', // or 'TOUS_LES_MOTS_DANS_UN_CHAMP', 'EXACTE'\n  sort: SortJuri.PERTINENCE, // or DATE_DESC, DATE_ASC\n});\n```\n\n**Return type:** Fully typed `JuriSearchResponse` with `JuriSearchResult[]` - no `any` types! ✨\n\n## 📖 Available Constants\n\n```typescript\nimport { \n  // Common\n  Nature,              // LOI, DECRET, ARRETE, ORDONNANCE, etc.\n  Fond,                // LODA_DATE, LODA_ETAT, CODE_DATE, JURI, etc.\n  TypeChamp,           // ALL, TEXTE, TITLE, NUM, etc.\n  Operateur,           // ET, OU, SAUF, NEAR, etc.\n  Facette,             // DATE_VERSION, TEXT_LEGAL_STATUS, etc.\n  Sort,                // PUBLICATION_DATE_DESC, SIGNATURE_DATE_ASC, etc.\n  \n  // LODA-specific\n  LodaSearchRequest,   // Typed request\n  LodaSearchResponse,  // Typed response\n  LodaSearchResult,    // Typed result\n  \n  // JURI-specific\n  SortJuri,            // PERTINENCE, DATE_DESC, DATE_ASC\n  PublicationStatus,   // PUBLIER, NON_PUBLIER, PUBLIER_EXTRAIT\n  FacettesJuri,        // CASSATION_TYPE_PUBLICATION_BULLETIN, JURIDICTION_JUDICIAIRE, etc.\n  JuriSearchResponse,  // Typed response\n  JuriSearchResult,    // Typed result\n} from 'legifrance-sdk';\n```\n\n## 🛠️ Environment Configuration\n\nCreate a `.env` file:\n\n```env\nCLIENT_ID=your_client_id\nCLIENT_SECRET=your_client_secret\n```\n\nThen use:\n\n```typescript\nimport 'dotenv/config';\n\nconst client = new LegifranceClient({\n  clientId: process.env.CLIENT_ID!,\n  clientSecret: process.env.CLIENT_SECRET!,\n  environment: 'sandbox',\n});\n```\n\n## 📚 Code Examples\n\nCheck the [`examples/`](./examples) folder for complete working examples:\n\n- **`basic.ts`** - Simple ping and list example\n- **`loda-search.ts`** - Complete LODA search with all filters\n- **`juri-search.ts`** - Complete jurisprudence search examples\n- **`complete.ts`** - Combined LODA + JURI example\n\n### List LODA Texts\n\n```typescript\nconst result = await client.listLoda({\n  pageSize: 10,\n  pageNumber: 1,\n});\n\nconsole.log(`Total: ${result.totalResultNumber}`);\nresult.results.forEach(item => {\n  console.log(`${item.title} (${item.cid})`);\n});\n```\n\n### Search with Date Filters\n\n```typescript\nconst result = await client.searchLoda('décret', {\n  pageSize: 5,\n  datePublication: { \n    start: '2025-01-01', \n    end: '2025-12-31' \n  },\n});\n```\n\n### Search by Nature\n\n```typescript\nimport { LodaSearchResult } from 'legifrance-sdk';\n\nconst result = await client.searchLoda('travail', {\n  natures: [Nature.LOI, Nature.ORDONNANCE],\n  pageSize: 10,\n});\n\n// Fully typed results!\nresult.results.forEach((item: LodaSearchResult) => {\n  console.log(item.titles[0]?.title);\n});\n```\n\n### Search Jurisprudence\n\n```typescript\nconst result = await client.searchJuri('contrat de travail', {\n  pageSize: 10,\n  juridictionJudiciaire: ['Cour de cassation'],\n  formation: ['Chambre sociale'],\n  dateStart: '2024-01-01',\n  dateEnd: '2024-12-31',\n});\n\n// Fully typed results!\nresult.results?.forEach((item: JuriSearchResult) => {\n  console.log(item.titles?.[0]?.title);\n  console.log(`Nature: ${item.nature}`);\n});\n```\n\n### Consult a Text\n\n```typescript\nconst text = await client.consultLoda({\n  textId: 'LEGITEXT000006074220',\n  date: '2024-01-01',\n});\n\nconsole.log(text.title);\n```\n\n## 🏗️ Build\n\n```bash\nnpm run build\n```\n\n## 🧪 Examples\n\nRun examples from the `examples/` folder:\n\n```bash\n# Basic example (ping, list)\nnpx ts-node examples/basic.ts\n\n# LODA search examples\nnpx ts-node examples/loda-search.ts\n\n# JURI search examples\nnpx ts-node examples/juri-search.ts\n\n# Complete example (LODA + JURI)\nnpx ts-node examples/complete.ts\n```\n\n## 📄 License\n\nMIT\n\n## 🤝 Contributing\n\nMade by [AI Smarttalk](https://aismarttalk.tech) - We build AI-powered solutions.\n\nFor issues or feature requests, please open an issue on GitHub.\n\n### Updating types\nUpdate swagger files and run the following command \n```bash \nnpx swagger-typescript-api generate -p legifrance.swagger.json -o ./src/generated -n api-types.ts --no-client\n```\n\n---\n\n<div align=\"center\">\n  <strong>Powered by AI Smarttalk</strong><br>\n  <a href=\"https://aismarttalk.tech\">aismarttalk.tech</a>\n</div>\n\n","readmeFilename":"README.md"}