1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import assert from "node:assert/strict";
import { test } from "node:test";
import { abiTest, did, loadModule } from "../../test/check.mjs";
const keys = await loadModule("cocore-keys");
const CONSOLE = "did:web:cocore.dev#cocore_console";
abiTest(test, keys);
const answer = (output) => async (entry, input) => {
const calls = [];
const ran = await keys.handle(entry, input, { respond: (call) => (calls.push(call), { ok: true, output }) });
return { ran, calls: calls.map(({ nsid, params, input, proxy }) => ({ nsid, params, input, proxy })) };
};
test("each action is one console call through the PDS (service auth)", async () => {
const key = { id: "k1", did, name: "ci", prefix: "cocore-AbCd", createdAt: "2026-11-10T00:00:00.000Z" };
const list = await answer({ keys: [key] })("list_keys", {});
assert.deepEqual(list.calls, [{ nsid: "dev.cocore.account.listApiKeys", params: {}, input: undefined, proxy: CONSOLE }]);
assert.deepEqual(list.ran.result, { keys: [key] });
const create = await answer({ key, secret: "cocore-secret" })("create_key", { name: " ci ", expiresAt: "2027-01-01T00:00:00Z" });
assert.deepEqual(create.calls[0].input, { name: "ci", expiresAt: "2027-01-01T00:00:00Z" });
assert.equal(create.ran.result.secret, "cocore-secret");
for (const [entry, nsid, output] of [["revoke_key", "revokeApiKey", { revoked: true }], ["delete_key", "deleteApiKey", { deleted: true }]]) {
const ran = await answer(output)(entry, { id: "k1" });
assert.deepEqual(ran.calls, [{ nsid: `dev.cocore.account.${nsid}`, params: undefined, input: { id: "k1" }, proxy: CONSOLE }]);
assert.deepEqual(ran.ran.result, output);
}
});
test("create needs a name, revoke and delete an id", () => {
const start = (entry, fields = {}) => keys.run(entry, { did, ...fields, state: null, event: { type: "start" } });
assert.match(start("create_key").error, /name is required/);
assert.match(start("revoke_key").error, /id is required/);
assert.match(start("delete_key", { id: " " }).error, /id is required/);
});