@mapfarm/portal-sdk (0.1.1)

Published 2026-07-01 15:37:55 +00:00 by xavier

Installation

@mapfarm:registry=
npm install @mapfarm/portal-sdk@0.1.1
"@mapfarm/portal-sdk": "0.1.1"

About this package

@mapfarm/portal-sdk

SDK des portails MAPFARM (forge · harvest · console). Extrait l'« os commun » des portails scopés — le client d'accès (auth + isolation ADR-006) et quelques primitives UI — pour ne pas le réécrire à chaque portail (règle de trois, ADR-007).

Publié sur le registre npm privé de la forge (Gitea) : https://git.mapfarm.cloud/api/packages/mapfarm/npm/.

createClient — le client scopé (le cœur)

Abstrait les deux seuls axes qui diffèrent entre portails ; tout le reste (get/post/ upload/fileUrl, erreur typée ApiError) est commun.

import { createClient } from "@mapfarm/portal-sdk";

// forge — SSO Authelia (cookie) + tenant en en-tête, validé côté BFF
const client = createClient({
  base: "/api/factory/portal/v1",
  auth: { mode: "cookie" },
  scope: { carrier: "header", name: "X-Portal-Tenant", value: () => getTenant() },
});

// harvest — magic-link (bearer) + company_id en query
const client = createClient({
  base: "/api/producer",
  auth: { mode: "bearer", token: TOKEN },
  scope: { carrier: "query", name: "company_id", value: () => activeCompanyId() },
});

const me = await client.get("/me");
await client.post("/validate", { decision });
  • auth : { mode: "cookie" } (credentials include) | { mode: "bearer", token }.
  • scope : { carrier: "header" | "query", name, value }. value accepte une fonction () => string (scope dynamique, relu à chaque appel).
  • Le SDK transporte le scope ; il ne le décide pas. Le serveur le valide contre le périmètre autorisé (hors périmètre → 403). L'isolation reste serveur.
  • fileUrl(path, extra) : URL <img>/téléchargement (scope + token en query, où un en-tête est impossible).

Primitives UI

Badge · Kpi (layout="value-first" ou libellé d'abord) · Loading · Empty · Chip · SectionHead. Structure + noms de classes uniquement, aucun thème : chaque portail garde son styles.css (forge sombre, harvest clair+or) → zéro régression.

Lot 0 (v0.1.0) : le Shell partagé et un design-system complet sont volontairement différés au 3ᵉ portail (console) — les deux portails existants divergent trop de thème/mise en page pour une abstraction saine maintenant (R4, pas de généralisation prématurée).

Tests

npm test   # node test/client.test.mjs — contrat du client scopé (9 cas)

Dependencies

Peer Dependencies

ID Version
react >=18
Details
npm
2026-07-01 15:37:55 +00:00
2
4.5 KiB
Assets (1)
Versions (3) View all
0.1.2 2026-07-01
0.1.1 2026-07-01
0.1.0 2026-07-01