-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest-developer-api-keys.js
More file actions
73 lines (64 loc) · 2.35 KB
/
Copy pathtest-developer-api-keys.js
File metadata and controls
73 lines (64 loc) · 2.35 KB
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/env node
'use strict';
const devKeys = require('./lib/developer-api-keys');
const devAuth = require('./lib/developer-api-auth');
let passed = 0;
let failed = 0;
function ok(name, cond) {
if (cond) {
passed += 1;
console.log('ok —', name);
} else {
failed += 1;
console.error('FAIL —', name);
}
}
ok('generate prefix', devAuth.generateApiKey().raw.startsWith('umb_live_'));
const rows = [];
const mockPool = {
async query(sql, params) {
if (sql.includes('INSERT INTO developer_api_keys')) {
const row = {
id: '00000000-0000-4000-8000-000000000001',
key_prefix: params[0],
label: params[2],
owner_contact: params[3],
scopes: params[4],
tier: params[5],
rate_limit_per_min: params[6],
created_at: new Date(),
};
rows.push({ ...row, key_hash: params[1], revoked_at: null });
return { rowCount: 1, rows: [row] };
}
if (sql.includes('FROM developer_api_keys') && sql.includes('ORDER BY')) {
return { rowCount: rows.length, rows };
}
if (sql.includes('UPDATE developer_api_keys') && sql.includes('revoked_at')) {
const id = params[0];
const row = rows.find((r) => r.id === id);
if (!row || row.revoked_at) return { rowCount: 0, rows: [] };
row.revoked_at = new Date();
return { rowCount: 1, rows: [{ id: row.id, key_prefix: row.key_prefix, revoked_at: row.revoked_at }] };
}
return { rowCount: 0, rows: [] };
},
};
(async () => {
const created = await devKeys.createKey(mockPool, {
label: 'test-partner',
tier: 'pro',
scopes: ['agents:read'],
});
ok('create returns api_key', created.api_key && created.api_key.startsWith('umb_live_'));
ok('pro rate default', created.rate_limit_per_min === devKeys.TIER_DEFAULTS.pro);
const list = await devKeys.listKeys(mockPool);
ok('list length', list.length === 1);
const revoked = await devKeys.revokeKey(mockPool, created.id);
ok('revoke ok', revoked && revoked.id === created.id);
console.log(`\n${passed} passed, ${failed} failed`);
process.exit(failed ? 1 : 0);
})().catch((e) => {
console.error(e);
process.exit(1);
});