@voidly/agent-sdk 1.3.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -239,6 +239,11 @@ declare class VoidlyAgent {
239
239
  messages: any[];
240
240
  count: number;
241
241
  }>;
242
+ /**
243
+ * Deactivate this agent identity. Removes from channels, disables webhooks.
244
+ * This is a soft delete — messages expire per TTL. Re-register for a new identity.
245
+ */
246
+ deactivate(): Promise<void>;
242
247
  }
243
248
 
244
249
  export { type AgentIdentity, type AgentProfile, type DecryptedMessage, type SendResult, VoidlyAgent, type VoidlyAgentConfig };
package/dist/index.d.ts CHANGED
@@ -239,6 +239,11 @@ declare class VoidlyAgent {
239
239
  messages: any[];
240
240
  count: number;
241
241
  }>;
242
+ /**
243
+ * Deactivate this agent identity. Removes from channels, disables webhooks.
244
+ * This is a soft delete — messages expire per TTL. Re-register for a new identity.
245
+ */
246
+ deactivate(): Promise<void>;
242
247
  }
243
248
 
244
249
  export { type AgentIdentity, type AgentProfile, type DecryptedMessage, type SendResult, VoidlyAgent, type VoidlyAgentConfig };
package/dist/index.js CHANGED
@@ -2654,12 +2654,18 @@ var VoidlyAgent = class _VoidlyAgent {
2654
2654
  ["sign"]
2655
2655
  );
2656
2656
  const sig = await globalThis.crypto.subtle.sign("HMAC", key, encoder.encode(payload));
2657
- const expectedSig2 = `sha256=${Array.from(new Uint8Array(sig)).map((b) => b.toString(16).padStart(2, "0")).join("")}`;
2658
- return signature === expectedSig2;
2657
+ const expectedSig2 = `sha256=${Array.from(new Uint8Array(sig)).map((b2) => b2.toString(16).padStart(2, "0")).join("")}`;
2658
+ if (signature.length !== expectedSig2.length) return false;
2659
+ const a = encoder.encode(signature);
2660
+ const b = encoder.encode(expectedSig2);
2661
+ let diff = 0;
2662
+ for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];
2663
+ return diff === 0;
2659
2664
  }
2660
- const { createHmac } = await import("crypto");
2665
+ const { createHmac, timingSafeEqual } = await import("crypto");
2661
2666
  const expectedSig = `sha256=${createHmac("sha256", secret).update(payload).digest("hex")}`;
2662
- return signature === expectedSig;
2667
+ if (signature.length !== expectedSig.length) return false;
2668
+ return timingSafeEqual(Buffer.from(signature), Buffer.from(expectedSig));
2663
2669
  }
2664
2670
  // ─── Key Management ───────────────────────────────────────────────────────
2665
2671
  /**
@@ -2777,6 +2783,20 @@ var VoidlyAgent = class _VoidlyAgent {
2777
2783
  }
2778
2784
  return await res.json();
2779
2785
  }
2786
+ /**
2787
+ * Deactivate this agent identity. Removes from channels, disables webhooks.
2788
+ * This is a soft delete — messages expire per TTL. Re-register for a new identity.
2789
+ */
2790
+ async deactivate() {
2791
+ const res = await fetch(`${this.baseUrl}/v1/agent/deactivate`, {
2792
+ method: "DELETE",
2793
+ headers: { "X-Agent-Key": this.apiKey }
2794
+ });
2795
+ if (!res.ok) {
2796
+ const err = await res.json().catch(() => ({}));
2797
+ throw new Error(`Deactivate failed: ${err.error || res.statusText}`);
2798
+ }
2799
+ }
2780
2800
  };
2781
2801
  // Annotate the CommonJS export names for ESM import in node:
2782
2802
  0 && (module.exports = {
package/dist/index.mjs CHANGED
@@ -2644,12 +2644,18 @@ var VoidlyAgent = class _VoidlyAgent {
2644
2644
  ["sign"]
2645
2645
  );
2646
2646
  const sig = await globalThis.crypto.subtle.sign("HMAC", key, encoder.encode(payload));
2647
- const expectedSig2 = `sha256=${Array.from(new Uint8Array(sig)).map((b) => b.toString(16).padStart(2, "0")).join("")}`;
2648
- return signature === expectedSig2;
2647
+ const expectedSig2 = `sha256=${Array.from(new Uint8Array(sig)).map((b2) => b2.toString(16).padStart(2, "0")).join("")}`;
2648
+ if (signature.length !== expectedSig2.length) return false;
2649
+ const a = encoder.encode(signature);
2650
+ const b = encoder.encode(expectedSig2);
2651
+ let diff = 0;
2652
+ for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];
2653
+ return diff === 0;
2649
2654
  }
2650
- const { createHmac } = await import("crypto");
2655
+ const { createHmac, timingSafeEqual } = await import("crypto");
2651
2656
  const expectedSig = `sha256=${createHmac("sha256", secret).update(payload).digest("hex")}`;
2652
- return signature === expectedSig;
2657
+ if (signature.length !== expectedSig.length) return false;
2658
+ return timingSafeEqual(Buffer.from(signature), Buffer.from(expectedSig));
2653
2659
  }
2654
2660
  // ─── Key Management ───────────────────────────────────────────────────────
2655
2661
  /**
@@ -2767,6 +2773,20 @@ var VoidlyAgent = class _VoidlyAgent {
2767
2773
  }
2768
2774
  return await res.json();
2769
2775
  }
2776
+ /**
2777
+ * Deactivate this agent identity. Removes from channels, disables webhooks.
2778
+ * This is a soft delete — messages expire per TTL. Re-register for a new identity.
2779
+ */
2780
+ async deactivate() {
2781
+ const res = await fetch(`${this.baseUrl}/v1/agent/deactivate`, {
2782
+ method: "DELETE",
2783
+ headers: { "X-Agent-Key": this.apiKey }
2784
+ });
2785
+ if (!res.ok) {
2786
+ const err = await res.json().catch(() => ({}));
2787
+ throw new Error(`Deactivate failed: ${err.error || res.statusText}`);
2788
+ }
2789
+ }
2770
2790
  };
2771
2791
  var export_decodeBase64 = import_tweetnacl_util.decodeBase64;
2772
2792
  var export_decodeUTF8 = import_tweetnacl_util.decodeUTF8;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voidly/agent-sdk",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "description": "E2E encrypted agent-to-agent communication SDK — true client-side encryption",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",