Plugin Node.js ts-immo-js
SDK TypeScript/JavaScript officiel pour intégrer l'API TS-Immo dans vos applications Node.js, Next.js ou tout runtime moderne.
Vue d'ensemble
ts-immo-js est le SDK officiel pour Node.js. Il offre un client fortement typé pour interagir avec l'API TS-Immo, avec support des Promises, de async/await et un typage TypeScript complet.
Prérequis: Node.js 18+, npm ou yarn
Installation
# npm
npm install ts-immo-js
# yarn
yarn add ts-immo-js
# pnpm
pnpm add ts-immo-jsDémarrage rapide
Créez un client et commencez à utiliser l'API en quelques lignes :
import { TsImmo } from 'ts-immo-js';
const client = new TsImmo({
apiKey: process.env.TS_IMMO_API_KEY,
baseUrl: 'https://api.ts-immo.org/v1',
locale: 'fr', // 'fr' | 'en' | 'de' | 'it'
});
// Récupérer les propriétés
const properties = await client.properties.list({
type: 'sale',
limit: 20,
page: 1,
});
console.log(properties.data); // Property[]Authentification
Configurez votre clé API via variables d'environnement (recommandé) ou directement dans le code :
// Via variables d'environnement (recommandé)
// .env
TS_IMMO_API_KEY=votre-cle-api
TS_IMMO_BASE_URL=https://api.ts-immo.org/v1
// Via configuration directe
const client = new TsImmo({
apiKey: 'votre-cle-api',
timeout: 10000, // ms, défaut: 30000
retries: 3, // tentatives, défaut: 3
locale: 'fr',
});Gestion des propriétés
CRUD complet sur les propriétés immobilières :
// Lister les propriétés avec filtres
const results = await client.properties.list({
type: 'sale', // 'sale' | 'rent' | 'seasonal'
status: 'active',
minPrice: 150000,
maxPrice: 500000,
bedrooms: 3,
city: 'Paris',
limit: 10,
page: 1,
});
// Récupérer une propriété par ID
const property = await client.properties.get('prop-123');
// Créer une propriété
const newProperty = await client.properties.create({
title: 'Appartement 3 pièces Paris 11e',
type: 'sale',
price: 350000,
surface: 68,
bedrooms: 2,
bathrooms: 1,
address: {
street: '12 rue de la Roquette',
city: 'Paris',
postalCode: '75011',
country: 'FR',
},
});
// Mettre à jour
const updated = await client.properties.update('prop-123', {
price: 340000,
status: 'sold',
});
// Supprimer
await client.properties.delete('prop-123');Médias
import { createReadStream } from 'fs';
// Upload d'images
const media = await client.media.upload('prop-123', {
file: createReadStream('./photo.jpg'),
type: 'image',
isPrimary: true,
});
// Lister les médias d'une propriété
const mediaList = await client.media.list('prop-123');
// Supprimer un média
await client.media.delete('prop-123', 'media-456');Synchronisation & Webhooks
Déclenchez des synchronisations et réagissez aux événements en temps réel :
// Synchronisation manuelle
const syncResult = await client.sync.run({
source: 'mls', // source externe
dryRun: false,
filters: { city: 'Paris' },
});
// Écouter les webhooks de sync
client.webhooks.on('property.created', (event) => {
console.log('Nouvelle propriété:', event.data.id);
});
client.webhooks.on('property.updated', (event) => {
console.log('Propriété mise à jour:', event.data.id);
});Support TypeScript
ts-immo-js est entièrement écrit en TypeScript et exporte tous les types nécessaires :
import type {
Property,
PropertyType,
PropertyStatus,
Address,
MediaItem,
SyncResult,
PaginatedResponse,
TsImmoConfig,
} from 'ts-immo-js';
// Typage complet
const fetchProperties = async (): Promise<PaginatedResponse<Property>> => {
return client.properties.list({ limit: 10 });
};Gestion des erreurs
import { TsImmoError, NotFoundError, AuthError } from 'ts-immo-js';
try {
const property = await client.properties.get('inexistant');
} catch (err) {
if (err instanceof NotFoundError) {
console.log('Propriété non trouvée');
} else if (err instanceof AuthError) {
console.log('Clé API invalide');
} else if (err instanceof TsImmoError) {
console.log('Erreur API:', err.message, err.code);
}
}Utilisez l'option retries lors de la création du client pour gérer automatiquement les erreurs réseau transitoires.