SDK & iframe
Un bouton d'upload et une visionneuse chiffrés de bout en bout, en quelques lignes. Moins de 3 Ko.
Navigateur : @drivecord/sdk
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'appLa 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.
uploadedne 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.