Documentation
SDK client
Transferts sans compte

Le cas des utilisateurs sans compte

Un transfert est conçu pour franchir la frontière de la base d'utilisateurs Secrecy. Ses deux extrémités — créer un lien et en lire un — sont disponibles sous forme de fonctions autonomes exportées par @secrecy/lib : elles fonctionnent sans secrecyClient et donc sans compte Secrecy.

Créer un lien sans compte

La fonction autonome createPublicDataLink prend les mêmes paramètres que son équivalent sur le client — dataId, name, expireAt et un slug optionnel — et utilise un client api invité lorsqu'aucun n'est fourni. Sa propriété apiClient permet de passer votre propre client si vous en avez déjà un.

share.ts
import { createPublicDataLink } from '@secrecy/lib';
 
const createLinkAsGuest = async ({
  dataId,
  name,
}: {
  dataId: string;
  name: string;
}) => {
  try {
    // No secrecyClient here, a guest api client is used under the hood
    const link = await createPublicDataLink({
      dataId,
      name,
      expireAt: null,
    });
 
    return link;
  } catch (error) {
    console.error(error);
    return null;
  }
};

Lire un lien sans compte

La fonction autonome downloadDataFromLink est celle qu'appelle le destinataire d'un lien. Elle a besoin du dataLinkSlug et des identifiants crypto transmis par un autre canal, et renvoie les octets déchiffrés. La propriété optionnelle dataUrl permet de viser un autre hôte de données que celui par défaut.

share.ts
import { downloadDataFromLink, fetchDataLinkMetadata } from '@secrecy/lib';
 
const readLinkAsGuest = async ({
  dataLinkSlug,
  key,
  password,
}: {
  dataLinkSlug: string;
  key: string;
  password: string;
}) => {
  try {
    // The public metadata tells the name and the size before downloading
    const metadata = await fetchDataLinkMetadata(dataLinkSlug);
 
    const bytes = await downloadDataFromLink({
      dataLinkSlug,
      crypto: { key, password },
    });
 
    return { metadata, bytes };
  } catch (error) {
    console.error(error);
    return null;
  }
};

Transmettre le secret

Le slug voyage dans l'URL, mais la clé et le mot de passe ne doivent jamais voyager avec lui : quiconque intercepterait les deux pourrait lire la donnée. Transmettez-les par un canal séparé. L'utilitaire generatePassword exporté par @secrecy/lib génère un mot de passe robuste lorsque vous en créez un vous-même plutôt que d'utiliser celui renvoyé par uploadData.