SDK

Le Djust Front SDK est un kit de développement JavaScript conçu pour simplifier et optimiser les appels API vers le backend Djust. Cette documentation explique comment initialiser et configurer le SDK dans une application Nuxt 3.

Architecture d'Initialisation

graph TB
    subgraph "Initialisation SDK"
        ENV[Variables d'Environnement]
        CONFIG[Configuration Runtime Nuxt]
        UTILS[djust-sdk.ts Utils]
        SDK[Instance SDK]
        COOKIES[Gestion Cookies]
    end

    ENV --> CONFIG
    CONFIG --> UTILS
    UTILS --> SDK
    COOKIES --> SDK

    style ENV fill:#e1f5fe
    style SDK fill:#f3e5f5
    style COOKIES fill:#fff3e0

Prérequis

1. Installation du Package

npm install @djust-b2b/djust-front-sdk

2. Clé API Djust

Vous devez disposer des informations d'authentification fournies par Djust :

  • Client ID : Identifiant client unique
  • API Key : Clé d'authentification
  • Store ID et Store View ID : Identifiants du magasin

Configuration des Variables d'Environnement

Fichier .env

Créez un fichier .env à la racine de votre projet avec les variables suivantes :

# === CONFIGURATION API DJUST === #
VITE_API_BASE_URL=https://api.djust.com
VITE_DJ_API_CLIENT=your_client_id_here
VITE_DJ_API_KEY=your_api_key_here

# === CONFIGURATION MAGASIN === #
STORE_ID=your_store_id_here
STORE_VIEW_ID=your_store_view_id_here

# === CONFIGURATION LOCALE === #
LOCALE=fr-FR
DEFAULTCURRENCY=EUR
CURRENCIES=EUR,USD,GBP

# === CONFIGURATION APPLICATION === #
CLIENT_NAME=MonApplication
APPLICATION_ENV=development
FRONT_MODE=private
MULTI_STORES=false

# === CONFIGURATION MONITORING === #
SENTRY_DSN=your_sentry_dsn_here

# === CONFIGURATION PAGINATION === #
DEFAULT_PAGINATION_SIZE=20
DEFAULT_ID_TYPE=EXTERNAL_ID

Variables Obligatoires

VariableDescriptionExempleObligatoire
VITE_API_BASE_URLURL de base de l'API Djusthttps://api.djust.com
VITE_DJ_API_CLIENTIdentifiant client Djustclient_123456
VITE_DJ_API_KEYClé API Djustapi_key_abcdef
STORE_IDIdentifiant du magasinstore_789
STORE_VIEW_IDIdentifiant de la vue magasinview_456

Variables Optionnelles

VariableDescriptionValeur par DéfautExemple
LOCALELangue par défautfr-FRen-GB, fr-FR
DEFAULTCURRENCYDevise par défautEURUSD, GBP
CLIENT_NAMENom de l'applicationDjustMonApp
APPLICATION_ENVEnvironnementdevelopmentproduction, staging
SENTRY_DSNURL Sentry pour monitoringSDK par défautURL Sentry personnalisée

Configuration Nuxt

nuxt.config.ts

Le SDK utilise la configuration runtime de Nuxt pour accéder aux variables d'environnement :

export default defineNuxtConfig({
  runtimeConfig: {
    // Côté serveur uniquement
    apiBaseUrl: process.env.VITE_API_BASE_URL,
    djApiClient: process.env.VITE_DJ_API_CLIENT,
    djApiKey: process.env.VITE_DJ_API_KEY,

    public: {
      // Disponible côté client et serveur
      apiBaseUrl: process.env.VITE_API_BASE_URL,
      djApiClient: process.env.VITE_DJ_API_CLIENT,
      djApiKey: process.env.VITE_DJ_API_KEY,
      djStoreId: process.env.STORE_ID,
      djStoreViewId: process.env.STORE_VIEW_ID,
      locale: process.env.LOCALE,
      currency: process.env.DEFAULTCURRENCY,
      currencies: process.env.CURRENCIES,
      clientName: process.env.CLIENT_NAME,
      applicationEnv: process.env.APPLICATION_ENV,
      sentryDsn: process.env.SENTRY_DSN,
      multiStores: process.env.MULTI_STORES === "true",
      frontMode: process.env.FRONT_MODE || "private",
      defaultPaginationSize: process.env.DEFAULT_PAGINATION_SIZE || "20",
    },
  },
});

Utilitaire d'Initialisation

Fichier server/utils/djust-sdk.ts

Créez un utilitaire pour gérer l'initialisation et la mise à jour du SDK :

import { DjustSDK } from "@djust-b2b/djust-front-sdk";
import { getCookie } from "h3";

let sdkInstance: typeof DjustSDK | null = null;

interface ClientConfig {
  baseUrl: string;
  clientId: string;
  apiKey: string;
  timeout?: number;
  locale?: string;
  headers?: Headers;
  accessToken?: string;
  storeId?: string;
  storeViewId?: string;
  customerAccountId?: string;
  clientName?: string;
  env?: string;
  dsn?: string;
}

const djustSDK = (event: any) => {
  // Initialisation unique du SDK
  if (!sdkInstance) {
    const {
      public: {
        apiBaseUrl,
        djApiClient,
        djApiKey,
        locale,
        djStoreId,
        djStoreViewId,
        clientName,
        applicationEnv,
        sentryDsn,
      },
    } = useRuntimeConfig();

    // Initialisation avec la configuration de base
    DjustSDK.initialize({
      baseUrl: apiBaseUrl,
      clientId: djApiClient,
      apiKey: djApiKey,
      storeId: djStoreId,
      storeViewId: djStoreViewId,
      locale,
      clientName: clientName,
      env: applicationEnv,
      dsn: sentryDsn,
    });

    sdkInstance = DjustSDK;
  }

  // Mise à jour dynamique avec les cookies
  const token = getCookie(event, "token");
  const customerAccountId = getCookie(event, "customer-account-id");
  const storeId = getCookie(event, "store-id");
  const storeViewId = getCookie(event, "store-view-id");

  const configUpdates: Partial<ClientConfig> = {};

  // Ajout du token d'authentification si disponible
  if (token) {
    configUpdates.accessToken = token;
    configUpdates.customerAccountId = customerAccountId;
  }

  // Mise à jour des identifiants de magasin si disponibles
  if (storeId && storeViewId) {
    configUpdates.storeId = storeId;
    configUpdates.storeViewId = storeViewId;
  }

  // Application des mises à jour si nécessaire
  if (Object.keys(configUpdates).length > 0) {
    DjustSDK.updateConfiguration(configUpdates);
    sdkInstance = DjustSDK;
  }

  return sdkInstance;
};

export default djustSDK;

Interface de Configuration

Type ClientConfig

interface ClientConfig {
  // === PARAMÈTRES OBLIGATOIRES === //
  baseUrl: string; // URL de base de l'API
  clientId: string; // Identifiant client
  apiKey: string; // Clé d'authentification

  // === PARAMÈTRES OPTIONNELS === //
  timeout?: number; // Timeout des requêtes (ms)
  locale?: string; // Langue (fr-FR, en-GB, etc.)
  headers?: Headers; // En-têtes HTTP personnalisés

  // === PARAMÈTRES D'AUTHENTIFICATION === //
  accessToken?: string; // Token JWT d'authentification
  customerAccountId?: string; // ID du compte client

  // === PARAMÈTRES DE MAGASIN === //
  storeId?: string; // Identifiant du magasin
  storeViewId?: string; // Identifiant de la vue magasin

  // === PARAMÈTRES APPLICATION === //
  clientName?: string; // Nom de l'application
  env?: string; // Environnement (development, production)
  dsn?: string; // URL Sentry pour monitoring
}

Utilisation dans les API Routes

Exemple d'utilisation

// server/api/products/index.get.ts
import initializeSDK from "~/server/utils/djust-sdk";

export default defineEventHandler(async (event) => {
  try {
    // Initialisation du SDK avec gestion automatique des cookies
    const sdk = initializeSDK(event);

    // Récupération des paramètres de requête
    const query = getQuery(event);
    const { locale, currency } = query;

    // Appel API via le SDK
    const products = await sdk.getProducts({
      locale: locale || "fr-FR",
      currency: currency || "EUR",
      size: 20,
      page: 0,
    });

    return {
      success: true,
      products,
    };
  } catch (error) {
    console.error("Erreur lors de la récupération des produits:", error);
    return {
      success: false,
      message: "Erreur lors de la récupération des produits",
    };
  }
});

Gestion Dynamique de la Configuration

Mise à Jour en Temps Réel

Le SDK peut être mis à jour dynamiquement pour gérer :

1. Authentification Utilisateur

// Après connexion utilisateur
sdk.updateConfiguration({
  accessToken: "jwt_token_here",
  customerAccountId: "customer_123",
});

2. Changement de Magasin

// Changement de magasin/vue
sdk.updateConfiguration({
  storeId: "new_store_456",
  storeViewId: "new_view_789",
});

3. Changement de Langue

// Changement de langue
sdk.updateConfiguration({
  locale: "en-GB",
});

Headers HTTP Automatiques

Le SDK ajoute automatiquement les en-têtes suivants aux requêtes :

En-têtes Obligatoires

{
  "dj-client": "your_client_id",           // Identifiant client
  "dj-api-key": "your_api_key",           // Clé API
  "Content-Type": "application/json"       // Type de contenu
}

En-têtes Conditionnels

{
  "Authorization": "Bearer jwt_token",          // Si token disponible
  "locale": "fr-FR",                           // Si locale configurée
  "customer-account-id": "customer_123",       // Si compte client
  "dj-store": "store_456",                     // Si magasin configuré
  "dj-store-view": "view_789"                  // Si vue magasin configurée
}

Gestion des Erreurs

Validation de l'Initialisation

// Le SDK vérifie automatiquement l'initialisation
if (!isClientInitialized(clientConfig)) {
  const error = new Error("[Djust SDK] SDK not initialized.");
  Sentry.captureException(error);
  throw error;
}

Gestion des Tokens

// Validation automatique des tokens
if (isTokenValid(accessToken)) {
  requestHeaders.append("Authorization", `Bearer ${accessToken}`);
}

Monitoring avec Sentry

Configuration Automatique

Le SDK configure automatiquement Sentry si un DSN est fourni :

Sentry.init({
  dsn: clientConfig.dsn,
  environment: `${clientConfig.clientName}-${clientConfig.env}`,
  integrations: [
    Sentry.browserTracingIntegration(),
    Sentry.replayIntegration(),
    Sentry.httpClientIntegration(),
    // ... autres intégrations
  ],
  tracesSampleRate: 1.0,
  replaysSessionSampleRate: 0.1,
  replaysOnErrorSampleRate: 1.0,
});

Logging Automatique

console.log(
  `[Djust SDK] Sentry initialized in ${clientConfig.clientName} environment: ${clientConfig.env}`
);

Bonnes Pratiques

1. Sécurité

  • Protégez vos clés API : Ne jamais exposer les clés côté client
  • Utilisez HTTPS : Toujours utiliser des connexions sécurisées
  • Validez les tokens : Vérifier la validité des tokens d'authentification

2. Performance

  • Instance unique : Le SDK utilise un pattern singleton
  • Mise à jour conditionnelle : Ne met à jour que si nécessaire
  • Gestion de cache : Réutilise l'instance configurée

3. Maintenance

  • Variables d'environnement : Centralisez la configuration
  • Logging : Activez les logs pour le debugging
  • Monitoring : Configurez Sentry pour le suivi d'erreurs

4. Développement

  • Validation locale : Testez avec différentes configurations
  • Gestion d'erreurs : Implémentez des fallbacks appropriés
  • Documentation : Documentez les configurations spécifiques

Exemple d'Environnements

Développement

VITE_API_BASE_URL=https://api-dev.djust.com
APPLICATION_ENV=development
CLIENT_NAME=MonApp-Dev
SENTRY_DSN=https://[email protected]/project

Production

VITE_API_BASE_URL=https://api.djust.com
APPLICATION_ENV=production
CLIENT_NAME=MonApp-Prod
SENTRY_DSN=https://[email protected]/project

Résolution des Problèmes

Erreurs Communes

ErreurCauseSolution
SDK not initializedConfiguration manquanteVérifier les variables d'environnement
Invalid API keyClé API incorrecteVérifier VITE_DJ_API_KEY
UnauthorizedToken invalideRenouveler le token d'authentification
Store not foundID magasin incorrectVérifier STORE_ID et STORE_VIEW_ID

Debugging

// Activer les logs détaillés
console.log("Configuration SDK:", {
  baseUrl: config.baseUrl,
  clientId: config.clientId,
  storeId: config.storeId,
  locale: config.locale,
});

Cette documentation couvre tous les aspects de l'initialisation et de la configuration du SDK Djust pour une intégration réussie dans votre application Nuxt 3.