Repository: dfinity/vetkd-devkit
Pull request #95: chore: adapt frontend library `package.json` to be better suitable for publishing
Author: login: altkdf
Created: 2025-05-13T14:46:38Z | Merged: 2025-05-14T16:08:38Z

- Changed the name of the package to `@dfinity/vetkeys`. (Having `ic_` prefix would be unexpected given that no other package in the `@dfinity` scope has such a prefix and they all are about IC.)
- Added some metadata like keywords, URLs, etc. to `package.json`.
- As a side-effect of looking at it, fixed the `coverage` script, since it requires canister deployment, and added an ignore to eslint for coverage.


Diff:
diff --git a/examples/basic_ibe/frontend/package.json b/examples/basic_ibe/frontend/package.json
index b0ee2446..25e17a91 100644
--- a/examples/basic_ibe/frontend/package.json
+++ b/examples/basic_ibe/frontend/package.json
@@ -11,9 +11,6 @@
     "preview": "vite preview",
     "lint": "eslint"
   },
-  "peerDependencies": {
-    "ic_vetkeys": "^0.1.0"
-  },
   "devDependencies": {
     "@eslint/js": "^9.24.0",
     "@rollup/plugin-typescript": "^12.1.2",
@@ -25,5 +22,8 @@
   "dependencies": {
     "@dfinity/auth-client": "^2.4.1",
     "@dfinity/principal": "^2.4.1"
+  },
+  "peerDependencies": {
+    "@dfinity/vetkeys": "^0.1.0"
   }
 }
diff --git a/examples/basic_ibe/frontend/src/main.ts b/examples/basic_ibe/frontend/src/main.ts
index 5a89dd56..8652106b 100644
--- a/examples/basic_ibe/frontend/src/main.ts
+++ b/examples/basic_ibe/frontend/src/main.ts
@@ -7,7 +7,7 @@ import {
   EncryptedVetKey,
   VetKey,
   IdentityBasedEncryptionCiphertext,
-} from "ic_vetkeys";
+} from "@dfinity/vetkeys";
 import {
   Inbox,
   _SERVICE,
diff --git a/examples/basic_timelock_ibe/frontend/package.json b/examples/basic_timelock_ibe/frontend/package.json
index 5a1f9016..2227236b 100644
--- a/examples/basic_timelock_ibe/frontend/package.json
+++ b/examples/basic_timelock_ibe/frontend/package.json
@@ -11,9 +11,6 @@
     "preview": "vite preview",
     "lint": "eslint"
   },
-  "peerDependencies": {
-    "ic_vetkeys": "^0.1.0"
-  },
   "devDependencies": {
     "@eslint/js": "^9.24.0",
     "@rollup/plugin-typescript": "^12.1.2",
@@ -25,5 +22,8 @@
   "dependencies": {
     "@dfinity/auth-client": "^2.4.1",
     "@dfinity/principal": "^2.4.1"
+  },
+  "peerDependencies": {
+    "@dfinity/vetkeys": "^0.1.0"
   }
 }
diff --git a/examples/basic_timelock_ibe/frontend/src/main.ts b/examples/basic_timelock_ibe/frontend/src/main.ts
index b897b366..5f797818 100644
--- a/examples/basic_timelock_ibe/frontend/src/main.ts
+++ b/examples/basic_timelock_ibe/frontend/src/main.ts
@@ -4,7 +4,7 @@ import { Principal } from "@dfinity/principal";
 import {
   DerivedPublicKey,
   IdentityBasedEncryptionCiphertext,
-} from "ic_vetkeys";
+} from "@dfinity/vetkeys";
 import {
   _SERVICE,
   LotInformation,
diff --git a/examples/password_manager/frontend/package.json b/examples/password_manager/frontend/package.json
index db4f5023..4e3e19bc 100644
--- a/examples/password_manager/frontend/package.json
+++ b/examples/password_manager/frontend/package.json
@@ -11,9 +11,6 @@
     "prettier-check": "prettier --check .",
     "preview": "vite preview"
   },
-  "peerDependencies": {
-    "ic_vetkeys": "^0.1.0"
-  },
   "devDependencies": {
     "@rollup/plugin-typescript": "^12.1.2",
     "@tsconfig/svelte": "^5.0.4",
@@ -40,5 +37,8 @@
     "svelte-spa-router": "^4.0.1",
     "tailwindcss": "^3.0.17",
     "typewriter-editor": "^0.9.4"
+  },
+  "peerDependencies": {
+    "@dfinity/vetkeys": "^0.1.0"
   }
 }
diff --git a/examples/password_manager/frontend/src/components/EditPassword.svelte b/examples/password_manager/frontend/src/components/EditPassword.svelte
index 38595ec6..5ec21882 100644
--- a/examples/password_manager/frontend/src/components/EditPassword.svelte
+++ b/examples/password_manager/frontend/src/components/EditPassword.svelte
@@ -16,7 +16,7 @@
     import Spinner from "./Spinner.svelte";
     import { onDestroy } from "svelte";
     import { Principal } from "@dfinity/principal";
-    import type { AccessRights } from "ic_vetkeys/tools";
+    import type { AccessRights } from "@dfinity/vetkeys/tools";
 
     export let currentRoute = "";
     const unsubscribe = location.subscribe((value) => {
diff --git a/examples/password_manager/frontend/src/components/SharingEditor.svelte b/examples/password_manager/frontend/src/components/SharingEditor.svelte
index 43385493..359dfded 100644
--- a/examples/password_manager/frontend/src/components/SharingEditor.svelte
+++ b/examples/password_manager/frontend/src/components/SharingEditor.svelte
@@ -9,7 +9,7 @@
     } from "../store/vaults";
     import { addNotification, showError } from "../store/notifications";
     import { Principal } from "@dfinity/principal";
-    import type { AccessRights } from "ic_vetkeys/tools";
+    import type { AccessRights } from "@dfinity/vetkeys/tools";
 
     export let editedVault: VaultModel;
     export let canManage = false;
diff --git a/examples/password_manager/frontend/src/components/Vault.svelte b/examples/password_manager/frontend/src/components/Vault.svelte
index fd9786b2..38a094d7 100644
--- a/examples/password_manager/frontend/src/components/Vault.svelte
+++ b/examples/password_manager/frontend/src/components/Vault.svelte
@@ -10,7 +10,7 @@
     import GiOpenTreasureChest from "svelte-icons/gi/GiOpenTreasureChest.svelte";
     import { auth } from "../store/auth";
     import SharingEditor from "./SharingEditor.svelte";
-    import type { AccessRights } from "ic_vetkeys/tools";
+    import type { AccessRights } from "@dfinity/vetkeys/tools";
 
     export let vault: VaultModel = {
         name: "",
diff --git a/examples/password_manager/frontend/src/lib/encrypted_maps.ts b/examples/password_manager/frontend/src/lib/encrypted_maps.ts
index 85436af3..cca28a7b 100644
--- a/examples/password_manager/frontend/src/lib/encrypted_maps.ts
+++ b/examples/password_manager/frontend/src/lib/encrypted_maps.ts
@@ -1,7 +1,7 @@
 import "./init.ts";
 import { HttpAgent, type HttpAgentOptions } from "@dfinity/agent";
-import { DefaultEncryptedMapsClient } from "ic_vetkeys/tools";
-import { EncryptedMaps } from "ic_vetkeys/tools";
+import { DefaultEncryptedMapsClient } from "@dfinity/vetkeys/tools";
+import { EncryptedMaps } from "@dfinity/vetkeys/tools";
 
 export async function createEncryptedMaps(
     agentOptions?: HttpAgentOptions,
diff --git a/examples/password_manager/frontend/src/lib/vault.ts b/examples/password_manager/frontend/src/lib/vault.ts
index 7dde86f5..191b15a8 100644
--- a/examples/password_manager/frontend/src/lib/vault.ts
+++ b/examples/password_manager/frontend/src/lib/vault.ts
@@ -1,6 +1,6 @@
 import type { Principal } from "@dfinity/principal";
 import type { PasswordModel } from "./password";
-import type { AccessRights } from "ic_vetkeys/tools";
+import type { AccessRights } from "@dfinity/vetkeys/tools";
 
 export interface VaultModel {
     owner: Principal;
diff --git a/examples/password_manager/frontend/src/store/auth.ts b/examples/password_manager/frontend/src/store/auth.ts
index 78bcff91..44caf1f9 100644
--- a/examples/password_manager/frontend/src/store/auth.ts
+++ b/examples/password_manager/frontend/src/store/auth.ts
@@ -4,7 +4,7 @@ import { AuthClient } from "@dfinity/auth-client";
 import type { JsonnableDelegationChain } from "@dfinity/identity/lib/cjs/identity/delegation";
 import { replace } from "svelte-spa-router";
 import { createEncryptedMaps } from "../lib/encrypted_maps.js";
-import { EncryptedMaps } from "ic_vetkeys/tools";
+import { EncryptedMaps } from "@dfinity/vetkeys/tools";
 
 export type AuthState =
     | {
diff --git a/examples/password_manager/frontend/src/store/vaults.ts b/examples/password_manager/frontend/src/store/vaults.ts
index d8924437..5bc1e11f 100644
--- a/examples/password_manager/frontend/src/store/vaults.ts
+++ b/examples/password_manager/frontend/src/store/vaults.ts
@@ -3,7 +3,7 @@ import { passwordFromContent, type PasswordModel } from "../lib/password";
 import { vaultFromContent, type VaultModel } from "../lib/vault";
 import { auth } from "./auth";
 import { showError } from "./notifications";
-import { type AccessRights, EncryptedMaps } from "ic_vetkeys/tools";
+import { type AccessRights, EncryptedMaps } from "@dfinity/vetkeys/tools";
 import type { Principal } from "@dfinity/principal";
 
 export const vaultsStore = writable<
diff --git a/examples/password_manager_with_metadata/frontend/package.json b/examples/password_manager_with_metadata/frontend/package.json
index 624af148..e0a6d18c 100644
--- a/examples/password_manager_with_metadata/frontend/package.json
+++ b/examples/password_manager_with_metadata/frontend/package.json
@@ -13,9 +13,6 @@
         "prettier-check": "prettier --check .",
         "preview": "vite preview"
     },
-    "peerDependencies": {
-        "ic_vetkeys": "^0.1.0"
-    },
     "devDependencies": {
         "@eslint/js": "^9.22.0",
         "@rollup/plugin-typescript": "^12.1.2",
@@ -52,5 +49,8 @@
         "svelte-spa-router": "^4.0.1",
         "tailwindcss": "^3.0.17",
         "typewriter-editor": "^0.9.4"
+    },
+    "peerDependencies": {
+        "@dfinity/vetkeys": "^0.1.0"
     }
 }
diff --git a/examples/password_manager_with_metadata/frontend/src/components/EditPassword.svelte b/examples/password_manager_with_metadata/frontend/src/components/EditPassword.svelte
index e06ae766..0cf788ec 100644
--- a/examples/password_manager_with_metadata/frontend/src/components/EditPassword.svelte
+++ b/examples/password_manager_with_metadata/frontend/src/components/EditPassword.svelte
@@ -12,7 +12,7 @@
     import Spinner from "./Spinner.svelte";
     import { onDestroy } from "svelte";
     import { Principal } from "@dfinity/principal";
-    import type { AccessRights } from "ic_vetkeys/tools";
+    import type { AccessRights } from "@dfinity/vetkeys/tools";
 
     export let currentRoute = "";
     const unsubscribe = location.subscribe((value) => {
diff --git a/examples/password_manager_with_metadata/frontend/src/components/SharingEditor.svelte b/examples/password_manager_with_metadata/frontend/src/components/SharingEditor.svelte
index 7560ff9e..ed9bec14 100644
--- a/examples/password_manager_with_metadata/frontend/src/components/SharingEditor.svelte
+++ b/examples/password_manager_with_metadata/frontend/src/components/SharingEditor.svelte
@@ -9,7 +9,7 @@
     } from "../store/vaults";
     import { addNotification, showError } from "../store/notifications";
     import { Principal } from "@dfinity/principal";
-    import type { AccessRights } from "ic_vetkeys/tools";
+    import type { AccessRights } from "@dfinity/vetkeys/tools";
 
     export let editedVault: VaultModel;
     export let canManage = false;
diff --git a/examples/password_manager_with_metadata/frontend/src/components/Vault.svelte b/examples/password_manager_with_metadata/frontend/src/components/Vault.svelte
index 14206247..c937c28e 100644
--- a/examples/password_manager_with_metadata/frontend/src/components/Vault.svelte
+++ b/examples/password_manager_with_metadata/frontend/src/components/Vault.svelte
@@ -10,7 +10,7 @@
     import GiOpenTreasureChest from "svelte-icons/gi/GiOpenTreasureChest.svelte";
     import { auth } from "../store/auth";
     import SharingEditor from "./SharingEditor.svelte";
-    import type { AccessRights } from "ic_vetkeys/tools";
+    import type { AccessRights } from "@dfinity/vetkeys/tools";
 
     export let vault: VaultModel = {
         name: "",
diff --git a/examples/password_manager_with_metadata/frontend/src/lib/encrypted_maps.ts b/examples/password_manager_with_metadata/frontend/src/lib/encrypted_maps.ts
index b17aab86..83ebfacc 100644
--- a/examples/password_manager_with_metadata/frontend/src/lib/encrypted_maps.ts
+++ b/examples/password_manager_with_metadata/frontend/src/lib/encrypted_maps.ts
@@ -1,7 +1,7 @@
 import "./init.ts";
 import { HttpAgent, type HttpAgentOptions } from "@dfinity/agent";
-import { DefaultEncryptedMapsClient } from "ic_vetkeys/tools";
-import { EncryptedMaps } from "ic_vetkeys/tools";
+import { DefaultEncryptedMapsClient } from "@dfinity/vetkeys/tools";
+import { EncryptedMaps } from "@dfinity/vetkeys/tools";
 
 export async function createEncryptedMaps(
     agentOptions: HttpAgentOptions,
diff --git a/examples/password_manager_with_metadata/frontend/src/lib/password_manager.ts b/examples/password_manager_with_metadata/frontend/src/lib/password_manager.ts
index 7eb49b3d..a1e17c38 100644
--- a/examples/password_manager_with_metadata/frontend/src/lib/password_manager.ts
+++ b/examples/password_manager_with_metadata/frontend/src/lib/password_manager.ts
@@ -1,6 +1,6 @@
 import "./init.ts";
 import { type ActorSubclass, type HttpAgentOptions } from "@dfinity/agent";
-import { EncryptedMaps } from "ic_vetkeys/tools";
+import { EncryptedMaps } from "@dfinity/vetkeys/tools";
 import { createEncryptedMaps } from "./encrypted_maps";
 import type { Principal } from "@dfinity/principal";
 import { createActor } from "../declarations/index";
diff --git a/examples/password_manager_with_metadata/frontend/src/lib/vault.ts b/examples/password_manager_with_metadata/frontend/src/lib/vault.ts
index a2303fe2..8b094b63 100644
--- a/examples/password_manager_with_metadata/frontend/src/lib/vault.ts
+++ b/examples/password_manager_with_metadata/frontend/src/lib/vault.ts
@@ -1,6 +1,6 @@
 import type { Principal } from "@dfinity/principal";
 import type { PasswordModel } from "./password";
-import type { AccessRights } from "ic_vetkeys/tools";
+import type { AccessRights } from "@dfinity/vetkeys/tools";
 
 export interface VaultModel {
     owner: Principal;
diff --git a/examples/password_manager_with_metadata/frontend/src/store/vaults.ts b/examples/password_manager_with_metadata/frontend/src/store/vaults.ts
index 6feb0902..bb9d4e89 100644
--- a/examples/password_manager_with_metadata/frontend/src/store/vaults.ts
+++ b/examples/password_manager_with_metadata/frontend/src/store/vaults.ts
@@ -3,7 +3,7 @@ import { type PasswordModel } from "../lib/password";
 import { type VaultModel } from "../lib/vault";
 import { auth, type AuthState } from "./auth";
 import { showError } from "./notifications";
-import { type AccessRights } from "ic_vetkeys/tools";
+import { type AccessRights } from "@dfinity/vetkeys/tools";
 import type { Principal } from "@dfinity/principal";
 import type { PasswordManager } from "../lib/password_manager";
 
diff --git a/frontend/ic_vetkeys/eslint.config.mjs b/frontend/ic_vetkeys/eslint.config.mjs
index 627b488c..034d1812 100644
--- a/frontend/ic_vetkeys/eslint.config.mjs
+++ b/frontend/ic_vetkeys/eslint.config.mjs
@@ -21,6 +21,7 @@ export default tseslint.config(
         ignores: [
             "dist/",
             "src/declarations",
+            "coverage/",
             "*.config.js",
             "*.config.cjs",
             "*.config.mjs",
diff --git a/frontend/ic_vetkeys/package.json b/frontend/ic_vetkeys/package.json
index 7250ab8e..15680c62 100644
--- a/frontend/ic_vetkeys/package.json
+++ b/frontend/ic_vetkeys/package.json
@@ -1,7 +1,42 @@
 {
-    "name": "ic_vetkeys",
+    "name": "@dfinity/vetkeys",
     "version": "0.1.0",
+    "author": "DFINITY Stiftung <sdk@dfinity.org>",
+    "description": "JavaScript and TypeScript library to use Internet Computer vetKeys",
+    "homepage": "https://internetcomputer.org/docs/building-apps/network-features/encryption/vetkeys",
     "license": "Apache-2.0",
+    "repository": {
+        "type": "git",
+        "url": "https://github.com/dfinity/vetkd-devkit.git",
+        "directory": "frontend/ic_vetkeys"
+    },
+    "bugs": {
+        "url": "https://github.com/dfinity/vetkd-devkit/issues"
+    },
+    "keywords": [
+        "internet computer",
+        "internet-computer",
+        "ic",
+        "icp",
+        "dfinity",
+        "vetkeys",
+        "encryption",
+        "decryption",
+        "threshold",
+        "motoko",
+        "rust",
+        "javascript",
+        "typescript",
+        "blockchain",
+        "crypto",
+        "distributed",
+        "api",
+        "bls",
+        "bls12-381",
+        "ibe",
+        "signature",
+        "signing"
+    ],
     "files": [
         "dist"
     ],
@@ -41,7 +76,7 @@
     },
     "scripts": {
         "build": "tsc && vite build",
-        "coverage": "vitest run --coverage",
+        "coverage": "npm run test:deploy_all && export $(cat .test1.env .test2.env | xargs) && vitest run --coverage",
         "lint": "eslint",
         "make:docs": "mkdir -p $(git rev-parse --show-toplevel)/docs/tools && typedoc --out $(git rev-parse --show-toplevel)/docs",
         "prettier": "prettier --write .",
diff --git a/frontend/ic_vetkeys/src/encrypted_maps/encrypted_maps.ts b/frontend/ic_vetkeys/src/encrypted_maps/encrypted_maps.ts
index e0305afc..632b2430 100644
--- a/frontend/ic_vetkeys/src/encrypted_maps/encrypted_maps.ts
+++ b/frontend/ic_vetkeys/src/encrypted_maps/encrypted_maps.ts
@@ -35,7 +35,7 @@ import {
  *
  * @example
  * ```ts
- * import { EncryptedMaps } from "ic_vetkeys/tools";
+ * import { EncryptedMaps } from "@dfinity/vetkeys/tools";
  *
  * // Initialize the EncryptedMaps Client
  * const encryptedMaps = new EncryptedMaps(encryptedMapsClientInstance);
@@ -76,7 +76,7 @@ export class EncryptedMaps {
      *
      * @example
      * ```ts
-     * import { EncryptedMaps } from "ic_vetkeys/tools";
+     * import { EncryptedMaps } from "@dfinity/vetkeys/tools";
      *
      * const encryptedMaps = new EncryptedMaps(encryptedMapsClientInstance);
      * ```
diff --git a/frontend/ic_vetkeys/src/key_manager/key_manager.ts b/frontend/ic_vetkeys/src/key_manager/key_manager.ts
index 5945f797..b737ae8a 100644
--- a/frontend/ic_vetkeys/src/key_manager/key_manager.ts
+++ b/frontend/ic_vetkeys/src/key_manager/key_manager.ts
@@ -32,7 +32,7 @@ import {
  *
  * @example
  * ```ts
- * import { KeyManager } from "ic_vetkeys/tools";
+ * import { KeyManager } from "@dfinity/vetkeys/tools";
  *
  * // Initialize the KeyManager
  * const keyManager = new KeyManager(keyManagerClientInstance);
@@ -62,7 +62,7 @@ export class KeyManager {
      *
      * @example
      * ```ts
-     * import { KeyManager } from "ic_vetkeys/tools";
+     * import { KeyManager } from "@dfinity/vetkeys/tools";
      *
      * const keyManager = new KeyManager(keyManagerClientInstance);
      * ```
diff --git a/package-lock.json b/package-lock.json
index 5e48b8af..a24eabdc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,7 +9,10 @@
                 "examples/basic_ibe/frontend",
                 "examples/password_manager/frontend",
                 "examples/password_manager_with_metadata/frontend"
-            ]
+            ],
+            "peerDependencies": {
+                "@dfinity/vetkeys": "^0.1.0"
+            }
         },
         "examples/basic_ibe/frontend": {
             "version": "0.0.0",
@@ -26,7 +29,7 @@
                 "vite-plugin-environment": "^1.1.3"
             },
             "peerDependencies": {
-                "ic_vetkeys": "^0.1.0"
+                "@dfinity/vetkeys": "^0.1.0"
             }
         },
         "examples/basic_ibe/frontend/node_modules/typescript": {
@@ -85,7 +88,7 @@
                 "vite-plugin-eslint": "^1.8.1"
             },
             "peerDependencies": {
-                "ic_vetkeys": "^0.1.0"
+                "@dfinity/vetkeys": "^0.1.0"
             }
         },
         "examples/password_manager_with_metadata/frontend/node_modules/@esbuild/aix-ppc64": {
@@ -722,7 +725,7 @@
                 "vite-plugin-environment": "^1.1.3"
             },
             "peerDependencies": {
-                "ic_vetkeys": "^0.1.0"
+                "@dfinity/vetkeys": "^0.1.0"
             }
         },
         "examples/password_manager/frontend/node_modules/@esbuild/aix-ppc64": {
@@ -1452,6 +1455,7 @@
             }
         },
         "frontend/ic_vetkeys": {
+            "name": "@dfinity/vetkeys",
             "version": "0.1.0",
             "license": "Apache-2.0",
             "dependencies": {
@@ -1793,6 +1797,10 @@
                 "@noble/hashes": "^1.3.1"
             }
         },
+        "node_modules/@dfinity/vetkeys": {
+            "resolved": "frontend/ic_vetkeys",
+            "link": true
+        },
         "node_modules/@esbuild/aix-ppc64": {
             "version": "0.25.2",
             "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz",
@@ -6387,10 +6395,6 @@
                 "node": ">= 14"
             }
         },
-        "node_modules/ic_vetkeys": {
-            "resolved": "frontend/ic_vetkeys",
-            "link": true
-        },
         "node_modules/iconv-lite": {
             "version": "0.6.3",
             "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",


Reviews:
user: login: fspreiss
body: Thanks, @altkdf! Before we publish, maybe we can quickly discuss the naming: currently the code lives in the "tools" folder. And there is also a "utils" folder. The two seem somewhat interchangable, and it would be good if we make a conscious decision on the team regarding this.
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-05-13T15:26:37Z
user: login: altkdf
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-14T13:23:38Z

Review comments:
diff_hunk: @@ -1,7 +1,42 @@
 {
-    "name": "ic_vetkeys",
+    "name": "@dfinity/vetkeys",
     "version": "0.1.0",
+    "author": "DFINITY Stiftung <sdk@dfinity.org>",
+    "description": "JavaScript and TypeScript library to interact with vetKeys on the Internet Computer",
path: frontend/ic_vetkeys/package.json
user: login: fspreiss
body: How about "...to _use_ vetKeys..."?
created_at: 2025-05-13T15:20:21Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,7 +1,42 @@
 {
-    "name": "ic_vetkeys",
+    "name": "@dfinity/vetkeys",
     "version": "0.1.0",
+    "author": "DFINITY Stiftung <sdk@dfinity.org>",
+    "description": "JavaScript and TypeScript library to interact with vetKeys on the Internet Computer",
path: frontend/ic_vetkeys/package.json
user: login: altkdf
body: Changed to `JavaScript and TypeScript library to use Internet Computer vetKeys`.
created_at: 2025-05-14T13:23:38Z
author_association: CONTRIBUTOR

PR comments:
user: login: altkdf
created_at: 2025-05-13T14:47:32Z
body: I used the [`package.json` of `@dfinity/agent`](https://github.com/dfinity/agent-js/blob/e7332d45dadab979f32efef5d11874b262321229/packages/agent/package.json) as inspiration.
author_association: CONTRIBUTOR
user: login: altkdf
created_at: 2025-05-13T14:48:11Z
body: What should be the contact email, if any? Currently I just added `sdk@dfinity.org` as a placeholder.
author_association: CONTRIBUTOR
user: login: fspreiss
created_at: 2025-05-13T15:25:17Z
body: > What should be the contact email, if any? Currently I just added sdk@dfinity.org as a placeholder.

Given that our team doesn't really have an email address, I'd just leave it out (at least for now). People can always create issues on Github.
author_association: CONTRIBUTOR
user: login: altkdf
created_at: 2025-05-14T16:08:13Z
body: > Thanks, @altkdf! Before we publish, maybe we can quickly discuss the naming: currently the code lives in the "tools" folder. And there is also a "utils" folder. The two seem somewhat interchangable, and it would be good if we make a conscious decision on the team regarding this.

This will be refactored in another PR.
author_association: CONTRIBUTOR