SDK & iframe

Un bouton d'upload et une visionneuse chiffrés de bout en bout, en quelques lignes. Moins de 3 Ko.

js
const dc = Drivecord.init({
  clientId: "app_…",
  redirectUri: location.origin + "/drivecord-callback",
});
await dc.signIn();                       // popup OAuth + PKCE

dc.mountUploader(document.getElementById("up"), {
  onUploaded: ({ fileId, size }) => save(fileId),
});
dc.mountViewer(document.getElementById("view"), { fileId });

const { files } = await dc.api("/files"); // API v2 avec le jeton de l'app

La page de redirection appelle simplement Drivecord.completeSignIn(). Le SDK n'a aucune dépendance ; il est publié avec une empreinte SRI.

Ce qui se passe dans l'iframe

  • Le fichier est chiffré dans l'iframe Drivecord : ton site ne voit ni clé, ni nom, ni contenu.
  • Seules les origines enregistrées pour ton application peuvent encadrer l'iframe (frame-ancestors).
  • Les messages sont versionnés et chaque côté vérifie l'origine et la fenêtre émettrice. uploaded ne contient que { fileId, size }.
  • La connexion passe par une fenêtre Drivecord (ticket à usage unique) ; le jeton de session reste en mémoire dans l'iframe, jamais dans un cookie.
Déverrouillage
Les navigateurs isolent le stockage des iframes tierces : selon le navigateur, l'utilisateur devra redonner sa clé de récupération ou sa phrase dans l'iframe.

Serveur : @drivecord/node

js
import { DrivecordNode } from "@drivecord/node";
const dc = new DrivecordNode({ token: process.env.DRIVECORD_TOKEN, driveKey });
const { fileId } = await dc.upload({ name: "rapport.pdf", type: "application/pdf", data });
const file = await dc.download(fileId);   // { name, type, data }

Le même code de chiffrement que l'application web est utilisé, donc les fichiers sont interchangeables.