@voidly/agent-sdk 1.6.0 → 1.7.0

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
@@ -556,6 +556,114 @@ declare class VoidlyAgent {
556
556
  signature: string;
557
557
  timestamp: string;
558
558
  }, signingPublicKey: string): boolean;
559
+ /**
560
+ * Store an encrypted key-value pair in persistent memory.
561
+ * Values are encrypted with a key derived from your API key — only you can read them.
562
+ */
563
+ memorySet(namespace: string, key: string, value: unknown, options?: {
564
+ valueType?: string;
565
+ ttl?: number;
566
+ }): Promise<{
567
+ stored: boolean;
568
+ id: string;
569
+ size_bytes: number;
570
+ expires_at: string | null;
571
+ }>;
572
+ /**
573
+ * Retrieve a value from persistent memory.
574
+ * Decrypted server-side using your API key derivation.
575
+ */
576
+ memoryGet(namespace: string, key: string): Promise<{
577
+ namespace: string;
578
+ key: string;
579
+ value: unknown;
580
+ value_type: string;
581
+ size_bytes: number;
582
+ created_at: string;
583
+ updated_at: string;
584
+ expires_at: string | null;
585
+ } | null>;
586
+ /**
587
+ * Delete a key from persistent memory.
588
+ */
589
+ memoryDelete(namespace: string, key: string): Promise<{
590
+ deleted: boolean;
591
+ }>;
592
+ /**
593
+ * List all keys in a memory namespace.
594
+ */
595
+ memoryList(namespace?: string, options?: {
596
+ prefix?: string;
597
+ limit?: number;
598
+ }): Promise<{
599
+ namespace: string;
600
+ keys: Array<{
601
+ key: string;
602
+ value_type: string;
603
+ size_bytes: number;
604
+ updated_at: string;
605
+ }>;
606
+ total_keys: number;
607
+ total_bytes: number;
608
+ }>;
609
+ /**
610
+ * List all memory namespaces and quota usage.
611
+ */
612
+ memoryNamespaces(): Promise<{
613
+ namespaces: Array<{
614
+ namespace: string;
615
+ key_count: number;
616
+ total_bytes: number;
617
+ last_updated: string;
618
+ }>;
619
+ quota: {
620
+ used_bytes: number;
621
+ quota_bytes: number;
622
+ remaining_bytes: number;
623
+ };
624
+ }>;
625
+ /**
626
+ * Export all agent data as a portable JSON bundle.
627
+ * Includes identity, messages, channels, tasks, attestations, memory, and trust.
628
+ * Memory values remain encrypted — portable to another relay.
629
+ */
630
+ exportData(options?: {
631
+ includeMessages?: boolean;
632
+ includeChannels?: boolean;
633
+ includeTasks?: boolean;
634
+ includeAttestations?: boolean;
635
+ includeMemory?: boolean;
636
+ includeTrust?: boolean;
637
+ }): Promise<Record<string, unknown>>;
638
+ /**
639
+ * List past data export records.
640
+ */
641
+ listExports(): Promise<{
642
+ exports: Array<Record<string, unknown>>;
643
+ }>;
644
+ /**
645
+ * Get information about the relay this agent is connected to.
646
+ * Includes federation capabilities and known peers.
647
+ */
648
+ getRelayInfo(): Promise<Record<string, unknown>>;
649
+ /**
650
+ * List known federated relay peers.
651
+ */
652
+ getRelayPeers(): Promise<{
653
+ peers: Array<Record<string, unknown>>;
654
+ total: number;
655
+ }>;
656
+ /**
657
+ * Route a message through federation to an agent on a different relay.
658
+ * The relay will forward it to the recipient's home relay.
659
+ */
660
+ routeMessage(toDid: string, message: string, options?: {
661
+ contentType?: string;
662
+ threadId?: string;
663
+ }): Promise<{
664
+ routed: boolean;
665
+ destination: string;
666
+ }>;
559
667
  }
560
668
 
561
669
  export { type AgentIdentity, type AgentProfile, type DecryptedMessage, type SendResult, VoidlyAgent, type VoidlyAgentConfig };
package/dist/index.d.ts CHANGED
@@ -556,6 +556,114 @@ declare class VoidlyAgent {
556
556
  signature: string;
557
557
  timestamp: string;
558
558
  }, signingPublicKey: string): boolean;
559
+ /**
560
+ * Store an encrypted key-value pair in persistent memory.
561
+ * Values are encrypted with a key derived from your API key — only you can read them.
562
+ */
563
+ memorySet(namespace: string, key: string, value: unknown, options?: {
564
+ valueType?: string;
565
+ ttl?: number;
566
+ }): Promise<{
567
+ stored: boolean;
568
+ id: string;
569
+ size_bytes: number;
570
+ expires_at: string | null;
571
+ }>;
572
+ /**
573
+ * Retrieve a value from persistent memory.
574
+ * Decrypted server-side using your API key derivation.
575
+ */
576
+ memoryGet(namespace: string, key: string): Promise<{
577
+ namespace: string;
578
+ key: string;
579
+ value: unknown;
580
+ value_type: string;
581
+ size_bytes: number;
582
+ created_at: string;
583
+ updated_at: string;
584
+ expires_at: string | null;
585
+ } | null>;
586
+ /**
587
+ * Delete a key from persistent memory.
588
+ */
589
+ memoryDelete(namespace: string, key: string): Promise<{
590
+ deleted: boolean;
591
+ }>;
592
+ /**
593
+ * List all keys in a memory namespace.
594
+ */
595
+ memoryList(namespace?: string, options?: {
596
+ prefix?: string;
597
+ limit?: number;
598
+ }): Promise<{
599
+ namespace: string;
600
+ keys: Array<{
601
+ key: string;
602
+ value_type: string;
603
+ size_bytes: number;
604
+ updated_at: string;
605
+ }>;
606
+ total_keys: number;
607
+ total_bytes: number;
608
+ }>;
609
+ /**
610
+ * List all memory namespaces and quota usage.
611
+ */
612
+ memoryNamespaces(): Promise<{
613
+ namespaces: Array<{
614
+ namespace: string;
615
+ key_count: number;
616
+ total_bytes: number;
617
+ last_updated: string;
618
+ }>;
619
+ quota: {
620
+ used_bytes: number;
621
+ quota_bytes: number;
622
+ remaining_bytes: number;
623
+ };
624
+ }>;
625
+ /**
626
+ * Export all agent data as a portable JSON bundle.
627
+ * Includes identity, messages, channels, tasks, attestations, memory, and trust.
628
+ * Memory values remain encrypted — portable to another relay.
629
+ */
630
+ exportData(options?: {
631
+ includeMessages?: boolean;
632
+ includeChannels?: boolean;
633
+ includeTasks?: boolean;
634
+ includeAttestations?: boolean;
635
+ includeMemory?: boolean;
636
+ includeTrust?: boolean;
637
+ }): Promise<Record<string, unknown>>;
638
+ /**
639
+ * List past data export records.
640
+ */
641
+ listExports(): Promise<{
642
+ exports: Array<Record<string, unknown>>;
643
+ }>;
644
+ /**
645
+ * Get information about the relay this agent is connected to.
646
+ * Includes federation capabilities and known peers.
647
+ */
648
+ getRelayInfo(): Promise<Record<string, unknown>>;
649
+ /**
650
+ * List known federated relay peers.
651
+ */
652
+ getRelayPeers(): Promise<{
653
+ peers: Array<Record<string, unknown>>;
654
+ total: number;
655
+ }>;
656
+ /**
657
+ * Route a message through federation to an agent on a different relay.
658
+ * The relay will forward it to the recipient's home relay.
659
+ */
660
+ routeMessage(toDid: string, message: string, options?: {
661
+ contentType?: string;
662
+ threadId?: string;
663
+ }): Promise<{
664
+ routed: boolean;
665
+ destination: string;
666
+ }>;
559
667
  }
560
668
 
561
669
  export { type AgentIdentity, type AgentProfile, type DecryptedMessage, type SendResult, VoidlyAgent, type VoidlyAgentConfig };
package/dist/index.js CHANGED
@@ -3332,6 +3332,155 @@ var VoidlyAgent = class _VoidlyAgent {
3332
3332
  return false;
3333
3333
  }
3334
3334
  }
3335
+ // ─── Memory Store ──────────────────────────────────────────────────────────
3336
+ /**
3337
+ * Store an encrypted key-value pair in persistent memory.
3338
+ * Values are encrypted with a key derived from your API key — only you can read them.
3339
+ */
3340
+ async memorySet(namespace, key, value, options) {
3341
+ const res = await fetch(`${this.baseUrl}/v1/agent/memory/${encodeURIComponent(namespace)}/${encodeURIComponent(key)}`, {
3342
+ method: "PUT",
3343
+ headers: { "Content-Type": "application/json", "X-Agent-Key": this.apiKey },
3344
+ body: JSON.stringify({
3345
+ value,
3346
+ value_type: options?.valueType || (typeof value === "object" ? "json" : typeof value),
3347
+ ttl: options?.ttl
3348
+ })
3349
+ });
3350
+ if (!res.ok) throw new Error(`Memory set failed: ${res.status} ${await res.text()}`);
3351
+ return res.json();
3352
+ }
3353
+ /**
3354
+ * Retrieve a value from persistent memory.
3355
+ * Decrypted server-side using your API key derivation.
3356
+ */
3357
+ async memoryGet(namespace, key) {
3358
+ const res = await fetch(`${this.baseUrl}/v1/agent/memory/${encodeURIComponent(namespace)}/${encodeURIComponent(key)}`, {
3359
+ headers: { "X-Agent-Key": this.apiKey }
3360
+ });
3361
+ if (res.status === 404) return null;
3362
+ if (!res.ok) throw new Error(`Memory get failed: ${res.status} ${await res.text()}`);
3363
+ return res.json();
3364
+ }
3365
+ /**
3366
+ * Delete a key from persistent memory.
3367
+ */
3368
+ async memoryDelete(namespace, key) {
3369
+ const res = await fetch(`${this.baseUrl}/v1/agent/memory/${encodeURIComponent(namespace)}/${encodeURIComponent(key)}`, {
3370
+ method: "DELETE",
3371
+ headers: { "X-Agent-Key": this.apiKey }
3372
+ });
3373
+ if (!res.ok) throw new Error(`Memory delete failed: ${res.status} ${await res.text()}`);
3374
+ return res.json();
3375
+ }
3376
+ /**
3377
+ * List all keys in a memory namespace.
3378
+ */
3379
+ async memoryList(namespace, options) {
3380
+ const ns = namespace || "default";
3381
+ const params = new URLSearchParams();
3382
+ if (options?.prefix) params.set("prefix", options.prefix);
3383
+ if (options?.limit) params.set("limit", String(options.limit));
3384
+ const qs = params.toString() ? `?${params.toString()}` : "";
3385
+ const res = await fetch(`${this.baseUrl}/v1/agent/memory/${encodeURIComponent(ns)}${qs}`, {
3386
+ headers: { "X-Agent-Key": this.apiKey }
3387
+ });
3388
+ if (!res.ok) throw new Error(`Memory list failed: ${res.status} ${await res.text()}`);
3389
+ return res.json();
3390
+ }
3391
+ /**
3392
+ * List all memory namespaces and quota usage.
3393
+ */
3394
+ async memoryNamespaces() {
3395
+ const res = await fetch(`${this.baseUrl}/v1/agent/memory`, {
3396
+ headers: { "X-Agent-Key": this.apiKey }
3397
+ });
3398
+ if (!res.ok) throw new Error(`Memory namespaces failed: ${res.status} ${await res.text()}`);
3399
+ return res.json();
3400
+ }
3401
+ // ─── Data Export ───────────────────────────────────────────────────────────
3402
+ /**
3403
+ * Export all agent data as a portable JSON bundle.
3404
+ * Includes identity, messages, channels, tasks, attestations, memory, and trust.
3405
+ * Memory values remain encrypted — portable to another relay.
3406
+ */
3407
+ async exportData(options) {
3408
+ const res = await fetch(`${this.baseUrl}/v1/agent/export`, {
3409
+ method: "POST",
3410
+ headers: { "Content-Type": "application/json", "X-Agent-Key": this.apiKey },
3411
+ body: JSON.stringify({
3412
+ include_messages: options?.includeMessages,
3413
+ include_channels: options?.includeChannels,
3414
+ include_tasks: options?.includeTasks,
3415
+ include_attestations: options?.includeAttestations,
3416
+ include_memory: options?.includeMemory,
3417
+ include_trust: options?.includeTrust
3418
+ })
3419
+ });
3420
+ if (!res.ok) throw new Error(`Export failed: ${res.status} ${await res.text()}`);
3421
+ return res.json();
3422
+ }
3423
+ /**
3424
+ * List past data export records.
3425
+ */
3426
+ async listExports() {
3427
+ const res = await fetch(`${this.baseUrl}/v1/agent/exports`, {
3428
+ headers: { "X-Agent-Key": this.apiKey }
3429
+ });
3430
+ if (!res.ok) throw new Error(`List exports failed: ${res.status} ${await res.text()}`);
3431
+ return res.json();
3432
+ }
3433
+ // ─── Relay Federation ─────────────────────────────────────────────────────
3434
+ /**
3435
+ * Get information about the relay this agent is connected to.
3436
+ * Includes federation capabilities and known peers.
3437
+ */
3438
+ async getRelayInfo() {
3439
+ const res = await fetch(`${this.baseUrl}/v1/relay/info`);
3440
+ if (!res.ok) throw new Error(`Relay info failed: ${res.status} ${await res.text()}`);
3441
+ return res.json();
3442
+ }
3443
+ /**
3444
+ * List known federated relay peers.
3445
+ */
3446
+ async getRelayPeers() {
3447
+ const res = await fetch(`${this.baseUrl}/v1/relay/peers`);
3448
+ if (!res.ok) throw new Error(`Relay peers failed: ${res.status} ${await res.text()}`);
3449
+ return res.json();
3450
+ }
3451
+ /**
3452
+ * Route a message through federation to an agent on a different relay.
3453
+ * The relay will forward it to the recipient's home relay.
3454
+ */
3455
+ async routeMessage(toDid, message, options) {
3456
+ const profile = await this.getIdentity(toDid);
3457
+ if (!profile) throw new Error(`Recipient ${toDid} not found`);
3458
+ const recipientPub = (0, import_tweetnacl_util.decodeBase64)(profile.encryption_public_key);
3459
+ const nonce = import_tweetnacl.default.randomBytes(import_tweetnacl.default.box.nonceLength);
3460
+ const encrypted = import_tweetnacl.default.box((0, import_tweetnacl_util.decodeUTF8)(message), nonce, recipientPub, this.encryptionKeyPair.secretKey);
3461
+ if (!encrypted) throw new Error("Encryption failed");
3462
+ const signaturePayload = (0, import_tweetnacl_util.decodeUTF8)(JSON.stringify({
3463
+ from: this.did,
3464
+ to: toDid,
3465
+ nonce: (0, import_tweetnacl_util.encodeBase64)(nonce),
3466
+ ciphertext_hash: await sha256((0, import_tweetnacl_util.encodeBase64)(encrypted))
3467
+ }));
3468
+ const signature = import_tweetnacl.default.sign.detached(signaturePayload, this.signingKeyPair.secretKey);
3469
+ const res = await fetch(`${this.baseUrl}/v1/relay/route`, {
3470
+ method: "POST",
3471
+ headers: { "Content-Type": "application/json", "X-Agent-Key": this.apiKey },
3472
+ body: JSON.stringify({
3473
+ to: toDid,
3474
+ ciphertext: (0, import_tweetnacl_util.encodeBase64)(encrypted),
3475
+ nonce: (0, import_tweetnacl_util.encodeBase64)(nonce),
3476
+ signature: (0, import_tweetnacl_util.encodeBase64)(signature),
3477
+ content_type: options?.contentType || "text/plain",
3478
+ thread_id: options?.threadId
3479
+ })
3480
+ });
3481
+ if (!res.ok) throw new Error(`Route failed: ${res.status} ${await res.text()}`);
3482
+ return res.json();
3483
+ }
3335
3484
  };
3336
3485
  // Annotate the CommonJS export names for ESM import in node:
3337
3486
  0 && (module.exports = {
package/dist/index.mjs CHANGED
@@ -3322,6 +3322,155 @@ var VoidlyAgent = class _VoidlyAgent {
3322
3322
  return false;
3323
3323
  }
3324
3324
  }
3325
+ // ─── Memory Store ──────────────────────────────────────────────────────────
3326
+ /**
3327
+ * Store an encrypted key-value pair in persistent memory.
3328
+ * Values are encrypted with a key derived from your API key — only you can read them.
3329
+ */
3330
+ async memorySet(namespace, key, value, options) {
3331
+ const res = await fetch(`${this.baseUrl}/v1/agent/memory/${encodeURIComponent(namespace)}/${encodeURIComponent(key)}`, {
3332
+ method: "PUT",
3333
+ headers: { "Content-Type": "application/json", "X-Agent-Key": this.apiKey },
3334
+ body: JSON.stringify({
3335
+ value,
3336
+ value_type: options?.valueType || (typeof value === "object" ? "json" : typeof value),
3337
+ ttl: options?.ttl
3338
+ })
3339
+ });
3340
+ if (!res.ok) throw new Error(`Memory set failed: ${res.status} ${await res.text()}`);
3341
+ return res.json();
3342
+ }
3343
+ /**
3344
+ * Retrieve a value from persistent memory.
3345
+ * Decrypted server-side using your API key derivation.
3346
+ */
3347
+ async memoryGet(namespace, key) {
3348
+ const res = await fetch(`${this.baseUrl}/v1/agent/memory/${encodeURIComponent(namespace)}/${encodeURIComponent(key)}`, {
3349
+ headers: { "X-Agent-Key": this.apiKey }
3350
+ });
3351
+ if (res.status === 404) return null;
3352
+ if (!res.ok) throw new Error(`Memory get failed: ${res.status} ${await res.text()}`);
3353
+ return res.json();
3354
+ }
3355
+ /**
3356
+ * Delete a key from persistent memory.
3357
+ */
3358
+ async memoryDelete(namespace, key) {
3359
+ const res = await fetch(`${this.baseUrl}/v1/agent/memory/${encodeURIComponent(namespace)}/${encodeURIComponent(key)}`, {
3360
+ method: "DELETE",
3361
+ headers: { "X-Agent-Key": this.apiKey }
3362
+ });
3363
+ if (!res.ok) throw new Error(`Memory delete failed: ${res.status} ${await res.text()}`);
3364
+ return res.json();
3365
+ }
3366
+ /**
3367
+ * List all keys in a memory namespace.
3368
+ */
3369
+ async memoryList(namespace, options) {
3370
+ const ns = namespace || "default";
3371
+ const params = new URLSearchParams();
3372
+ if (options?.prefix) params.set("prefix", options.prefix);
3373
+ if (options?.limit) params.set("limit", String(options.limit));
3374
+ const qs = params.toString() ? `?${params.toString()}` : "";
3375
+ const res = await fetch(`${this.baseUrl}/v1/agent/memory/${encodeURIComponent(ns)}${qs}`, {
3376
+ headers: { "X-Agent-Key": this.apiKey }
3377
+ });
3378
+ if (!res.ok) throw new Error(`Memory list failed: ${res.status} ${await res.text()}`);
3379
+ return res.json();
3380
+ }
3381
+ /**
3382
+ * List all memory namespaces and quota usage.
3383
+ */
3384
+ async memoryNamespaces() {
3385
+ const res = await fetch(`${this.baseUrl}/v1/agent/memory`, {
3386
+ headers: { "X-Agent-Key": this.apiKey }
3387
+ });
3388
+ if (!res.ok) throw new Error(`Memory namespaces failed: ${res.status} ${await res.text()}`);
3389
+ return res.json();
3390
+ }
3391
+ // ─── Data Export ───────────────────────────────────────────────────────────
3392
+ /**
3393
+ * Export all agent data as a portable JSON bundle.
3394
+ * Includes identity, messages, channels, tasks, attestations, memory, and trust.
3395
+ * Memory values remain encrypted — portable to another relay.
3396
+ */
3397
+ async exportData(options) {
3398
+ const res = await fetch(`${this.baseUrl}/v1/agent/export`, {
3399
+ method: "POST",
3400
+ headers: { "Content-Type": "application/json", "X-Agent-Key": this.apiKey },
3401
+ body: JSON.stringify({
3402
+ include_messages: options?.includeMessages,
3403
+ include_channels: options?.includeChannels,
3404
+ include_tasks: options?.includeTasks,
3405
+ include_attestations: options?.includeAttestations,
3406
+ include_memory: options?.includeMemory,
3407
+ include_trust: options?.includeTrust
3408
+ })
3409
+ });
3410
+ if (!res.ok) throw new Error(`Export failed: ${res.status} ${await res.text()}`);
3411
+ return res.json();
3412
+ }
3413
+ /**
3414
+ * List past data export records.
3415
+ */
3416
+ async listExports() {
3417
+ const res = await fetch(`${this.baseUrl}/v1/agent/exports`, {
3418
+ headers: { "X-Agent-Key": this.apiKey }
3419
+ });
3420
+ if (!res.ok) throw new Error(`List exports failed: ${res.status} ${await res.text()}`);
3421
+ return res.json();
3422
+ }
3423
+ // ─── Relay Federation ─────────────────────────────────────────────────────
3424
+ /**
3425
+ * Get information about the relay this agent is connected to.
3426
+ * Includes federation capabilities and known peers.
3427
+ */
3428
+ async getRelayInfo() {
3429
+ const res = await fetch(`${this.baseUrl}/v1/relay/info`);
3430
+ if (!res.ok) throw new Error(`Relay info failed: ${res.status} ${await res.text()}`);
3431
+ return res.json();
3432
+ }
3433
+ /**
3434
+ * List known federated relay peers.
3435
+ */
3436
+ async getRelayPeers() {
3437
+ const res = await fetch(`${this.baseUrl}/v1/relay/peers`);
3438
+ if (!res.ok) throw new Error(`Relay peers failed: ${res.status} ${await res.text()}`);
3439
+ return res.json();
3440
+ }
3441
+ /**
3442
+ * Route a message through federation to an agent on a different relay.
3443
+ * The relay will forward it to the recipient's home relay.
3444
+ */
3445
+ async routeMessage(toDid, message, options) {
3446
+ const profile = await this.getIdentity(toDid);
3447
+ if (!profile) throw new Error(`Recipient ${toDid} not found`);
3448
+ const recipientPub = (0, import_tweetnacl_util.decodeBase64)(profile.encryption_public_key);
3449
+ const nonce = import_tweetnacl.default.randomBytes(import_tweetnacl.default.box.nonceLength);
3450
+ const encrypted = import_tweetnacl.default.box((0, import_tweetnacl_util.decodeUTF8)(message), nonce, recipientPub, this.encryptionKeyPair.secretKey);
3451
+ if (!encrypted) throw new Error("Encryption failed");
3452
+ const signaturePayload = (0, import_tweetnacl_util.decodeUTF8)(JSON.stringify({
3453
+ from: this.did,
3454
+ to: toDid,
3455
+ nonce: (0, import_tweetnacl_util.encodeBase64)(nonce),
3456
+ ciphertext_hash: await sha256((0, import_tweetnacl_util.encodeBase64)(encrypted))
3457
+ }));
3458
+ const signature = import_tweetnacl.default.sign.detached(signaturePayload, this.signingKeyPair.secretKey);
3459
+ const res = await fetch(`${this.baseUrl}/v1/relay/route`, {
3460
+ method: "POST",
3461
+ headers: { "Content-Type": "application/json", "X-Agent-Key": this.apiKey },
3462
+ body: JSON.stringify({
3463
+ to: toDid,
3464
+ ciphertext: (0, import_tweetnacl_util.encodeBase64)(encrypted),
3465
+ nonce: (0, import_tweetnacl_util.encodeBase64)(nonce),
3466
+ signature: (0, import_tweetnacl_util.encodeBase64)(signature),
3467
+ content_type: options?.contentType || "text/plain",
3468
+ thread_id: options?.threadId
3469
+ })
3470
+ });
3471
+ if (!res.ok) throw new Error(`Route failed: ${res.status} ${await res.text()}`);
3472
+ return res.json();
3473
+ }
3325
3474
  };
3326
3475
  var export_decodeBase64 = import_tweetnacl_util.decodeBase64;
3327
3476
  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.6.0",
3
+ "version": "1.7.0",
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",