Référence

SDK JavaScript

Référence complète de @pacerelle/sdk — options du client, méthodes, types de messages et fonctions Agent Connect.

Terminal
npm install @pacerelle/sdk

Nécessite Node.js 20+. Le paquet est un module ES et fournit ses propres types TypeScript.

ImportContenu
@pacerelle/sdk/nodecreateNodeAgentGatewayClient, createNodeSignalSnapshotStore — le point de départ sous Node.js.
@pacerelle/sdkAgentGatewayClient, les types et les fonctions Agent Connect.
@pacerelle/sdk/permissionsPermissionPolicy — voir Autorisations.
@pacerelle/sdk/verificationcomputeAgentFingerprint — l'algorithme du code de vérification.
@pacerelle/sdk/historyFonctions bas niveau pour les archives de conversation chiffrées.

Le SDK est en alpha (0.1.0-alpha). Les API peuvent encore évoluer avant la 1.0.

createNodeAgentGatewayClient

Crée un client configuré pour Node.js (implémentation WebSocket et module de chiffrement inclus).

import {
  createNodeAgentGatewayClient,
  createNodeSignalSnapshotStore,
} from "@pacerelle/sdk/node";

const state = createNodeSignalSnapshotStore(process.env.PACERELLE_AGENT_ID);

const client = createNodeAgentGatewayClient({
  agentId: process.env.PACERELLE_AGENT_ID,
  token: process.env.PACERELLE_AGENT_TOKEN,
  e2ee: true,
  signalSnapshot: state.signalSnapshot,
  onSignalSnapshot: state.onSignalSnapshot,
});
agentIdstringrequis
L'identifiant de l'agent affiché dans l'application.
tokenstringrequis
Le jeton de l'agent, ou un jeton d'exécution Agent Connect.
e2eeboolean
Active le chiffrement de bout en bout. Vaut false par défaut — mettez toujours true hors débogage local.
signalSnapshotUint8Array
État de chiffrement enregistré, à restaurer au démarrage.
onSignalSnapshot(snapshot: Uint8Array) => void | Promise<void>
Appelé à chaque changement de l'état de chiffrement. Enregistrez-le durablement.
baseUrlstring
URL de l'API. Par défaut https://api.pacerelle.com.
wsUrlstring
URL WebSocket. Déduite de baseUrl par défaut.
onOpen() => void
La connexion est ouverte.
onClose(event: CloseEvent) => void
La connexion s'est fermée. Voir la reconnexion.
onError(error: unknown) => void
Une erreur de connexion ou de traitement s'est produite.

createNodeSignalSnapshotStore

createNodeSignalSnapshotStore(agentId: string, options?: { file?: string; dir?: string })

Renvoie { file, signalSnapshot, onSignalSnapshot }, adossé à un fichier écrit de façon atomique avec les permissions 0600. Le chemin par défaut est ~/.pacerelle/agents/<agentId>.signal.b64, modifiable avec options.file ou les variables d'environnement PACERELLE_AGENT_SIGNAL_STATE_FILE / PACERELLE_AGENT_SIGNAL_STATE_DIR.

Connexion

connect()

connect(): Promise<void>

Publie les clés publiques de l'agent (avec e2ee), ouvre le WebSocket et se résout une fois la connexion ouverte. Rejette si la connexion échoue avant l'ouverture. Le client ne se reconnecte pas de lui-même.

close()

close(): void

Ferme la connexion et libère le module de chiffrement.

getVerificationCode()

getVerificationCode(): Promise<string>

Renvoie l'empreinte de la clé d'identité publiée par l'agent, à comparer avec Vérifier dans l'application. Voir Vérifier votre agent.

Réception

onMessage(handler)

onMessage(handler: (message: AgentMessage, client: AgentGatewayClient) => void | Promise<void>): void

Enregistre la fonction de traitement. Les messages sont traités un par un, dans l'ordre. Quand la fonction se résout, le message est marqué traité et acquitté ; si elle lève une erreur, le message peut être relivré.

listConversationMessages(options)

listConversationMessages(options: {
  conversationId: string;
  limit?: number;          // 1–100, 50 par défaut
  before?: string | Date;
  beforeId?: string;
  skipUndecodable?: boolean;
}): Promise<AgentMessage[]>

Récupère et déchiffre les messages récents reçus par l'agent dans une conversation, y compris les votes collectifs des agents membres d'un groupe.

Envoi

reply(message, options)

reply(message: AgentMessage, options: { text: string; attachments?: AgentAttachment[] }): Promise<void>

Répond à un message dans sa conversation — ou son groupe — sur l'appareil qui l'a envoyé, en le liant au message d'origine. La façon recommandée de répondre.

sendMessage(options)

sendMessage(options: {
  conversationId: string;
  to: string;               // message.from, ou `group:<conversationId>`
  text: string;
  replyToMessageId?: string;
  toDeviceId?: string;
  attachments?: AgentAttachment[];
}): Promise<void>

Envoie un message. Se résout quand il est remis à la connexion ; lève une erreur si la connexion n'est pas ouverte.

sendTyping(options)

sendTyping(options: { conversationId: string; to: string }): void

Affiche un indicateur « en train d'écrire » dans l'application.

sendFile(options) · sendMedia(options)

sendFile(options: {
  conversationId: string;
  to: string;
  file: { name: string; mime?: string; data: Uint8Array | ArrayBuffer | Blob };
  text?: string;
  replyToMessageId?: string;
}): Promise<AgentAttachment>

Chiffre et envoie un fichier. sendMedia accepte les mêmes options plus width, height et durationMs. Voir Fichiers et médias.

uploadFile(file)

uploadFile(file: { name: string; mime?: string; data: Uint8Array | ArrayBuffer | Blob }): Promise<AgentAttachment>

Chiffre et téléverse un fichier sans envoyer de message — pour joindre plusieurs fichiers à un même sendMessage.

downloadAttachment(attachment)

downloadAttachment(attachment: AgentAttachment): Promise<Uint8Array>

Télécharge un fichier reçu dans un message et le déchiffre localement avec la clé transportée par le message chiffré de bout en bout. Fonctionne pour les conversations dont l'agent est membre. Voir Fichiers et médias.

Widgets

Chaque méthode de widget prend conversationId, to, title, et en option id, body et expiresAt. Chacune renvoie l'identifiant du widget. Voir Widgets interactifs.

MéthodeOptions spécifiques
sendConfirmWidgetdanger, labels: { yes, no }, responseMode
sendChoiceWidgetoptions: [{ id, label, danger? }], multi, responseMode
sendPermissionWidgetscopes: ("once" | "session")[]
sendFormWidgetfields: [{ name, label, type?, required?, placeholder?, min?, max? }], submitLabel
sendDateTimeWidgetmode: "date" | "time" | "datetime", min, max
sendFilePickerWidgetmultiple, accept, maxFiles
sendProgressWidgetvalue, max, cancellable
sendWidgetUpdateref, spec, expiresAt — met à jour un widget déjà envoyé

responseMode vaut "individual" ou "collective" — voir votes collectifs.

Types

AgentMessage

ChampTypeDescription
idstringIdentifiant du message.
conversationIdstringIdentifiant de la conversation.
fromstringIdentifiant de l'expéditeur.
fromDeviceIdstring?Appareil de l'expéditeur.
textstringTexte du message.
replyToMessageIdstring?Le message auquel celui-ci répond.
attachmentsAgentAttachment[]Fichiers joints.
widgetResponseAgentWidgetResponse?Réponse à un widget.
widgetUpdateAgentWidgetUpdate?Mise à jour d'un widget.
encryptedbooleanLe message était-il chiffré de bout en bout.

AgentWidgetResponse

ChampTypeDescription
refstringIdentifiant du widget auquel on répond.
valueunknownLa réponse — voir chaque widget.
cancelledbooleanL'utilisateur a fermé le widget.
idstringIdentifiant de la réponse elle-même.

AgentAttachment

ChampTypeDescription
idstringIdentifiant de la pièce jointe.
namestringNom du fichier.
mimestringType MIME.
sizenumberTaille en octets (avant chiffrement).
blobIdstringIdentifiant du fichier chiffré téléversé.
width, height, durationMsnumber?Indications média.
keyB64, ivB64string?Clé de déchiffrement du fichier — à garder privée.

Agent Connect

Fonctions serveur pour Agent Connect. Toutes acceptent un baseUrl facultatif (par défaut https://api.pacerelle.com).

FonctionRenvoie
beginAgentConnect({ connectKey, clientId, redirectUri, agentName, agentDescription?, state? }){ authorizationUrl, state, codeVerifier, requestId, expiresAt, expiresIn }
exchangeAgentConnectCode({ code, codeVerifier, clientId, redirectUri }){ installationToken, agentId, ownerId, conversationId, scope, tokenType }
requestAgentRuntimeToken({ installationToken }){ agentToken, agentId, ownerId, conversationId, expiresIn }