@agentimprint/sdk 0.1.0 → 0.1.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/README.md +44 -18
- package/dist/index.cjs +33 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -3
- package/dist/index.d.ts +7 -3
- package/dist/index.js +33 -13
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -13,31 +13,45 @@ npm install @agentimprint/sdk
|
|
|
13
13
|
```typescript
|
|
14
14
|
import { ImprintClient } from '@agentimprint/sdk';
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
// baseUrl defaults to https://api.agentimprint.io.
|
|
17
|
+
// Override it for self-hosting, but do NOT include /api/v1 — the SDK appends it.
|
|
18
|
+
const client = new ImprintClient({ apiKey: process.env.IMPRINT_API_KEY! });
|
|
19
|
+
|
|
20
|
+
// Register an agent (required before you can create a vault)
|
|
21
|
+
const agent = await client.agents.create({
|
|
22
|
+
name: 'my-assistant',
|
|
23
|
+
model_family: 'claude',
|
|
24
|
+
core_purpose: 'Personal task management assistant',
|
|
25
|
+
creator_identifier: 'you@example.com',
|
|
19
26
|
});
|
|
20
27
|
|
|
21
|
-
// Create a vault
|
|
28
|
+
// Create a vault for that agent
|
|
22
29
|
const vault = await client.vaults.create({
|
|
23
30
|
name: 'my-agent-memory',
|
|
31
|
+
agent_uuid: agent.uuid,
|
|
24
32
|
description: 'Persistent memory for my AI agent',
|
|
25
33
|
});
|
|
26
34
|
|
|
27
|
-
// Store a memory
|
|
28
|
-
await client.entries.create(vault.
|
|
29
|
-
|
|
30
|
-
content:
|
|
35
|
+
// Store a memory — `content` is a typed object whose fields depend on entry_type
|
|
36
|
+
await client.entries.create(vault.uuid, {
|
|
37
|
+
entry_type: 'lesson',
|
|
38
|
+
content: {
|
|
39
|
+
summary: 'User prefers concise responses over verbose explanations',
|
|
40
|
+
context: 'Said "keep it short" repeatedly',
|
|
41
|
+
learned_from: 'direct feedback',
|
|
42
|
+
},
|
|
31
43
|
confidence: 0.9,
|
|
32
44
|
tags: ['preferences', 'communication'],
|
|
33
45
|
});
|
|
34
46
|
|
|
35
|
-
// Search memories
|
|
36
|
-
const
|
|
37
|
-
query: 'user preferences',
|
|
38
|
-
});
|
|
47
|
+
// Search / list memories (filter by type, tag, or free-text q)
|
|
48
|
+
const { entries } = await client.entries.list(vault.uuid, { q: 'user preferences' });
|
|
39
49
|
```
|
|
40
50
|
|
|
51
|
+
> Each `entry_type` has its own required `content` fields (e.g. `lesson` ⇒
|
|
52
|
+
> `summary` / `context` / `learned_from`, `fact` ⇒ `statement` / `source` / `verified`).
|
|
53
|
+
> See the [ImprintML spec](https://agentimprint.ai/docs) for the full per-type schema.
|
|
54
|
+
|
|
41
55
|
## Features
|
|
42
56
|
|
|
43
57
|
- **Vault Management** — Create, read, update encrypted memory vaults
|
|
@@ -65,15 +79,27 @@ ImprintML supports these memory types:
|
|
|
65
79
|
|
|
66
80
|
## Encryption
|
|
67
81
|
|
|
68
|
-
|
|
82
|
+
Encrypt sensitive entries client-side — the server only ever sees ciphertext.
|
|
83
|
+
The crypto helpers are standalone functions (no class). `generateKey()` is
|
|
84
|
+
synchronous and returns a hex string; `encrypt`/`decrypt` operate on objects:
|
|
69
85
|
|
|
70
86
|
```typescript
|
|
71
|
-
import {
|
|
87
|
+
import { generateKey, deriveVaultKey, encrypt, decrypt } from '@agentimprint/sdk';
|
|
88
|
+
|
|
89
|
+
const masterKey = generateKey(); // hex string — store securely
|
|
90
|
+
const vaultKey = await deriveVaultKey(masterKey, vault.uuid); // HKDF, per-vault
|
|
91
|
+
|
|
92
|
+
// Encrypt an object and store it as an encrypted entry
|
|
93
|
+
const payload = await encrypt(vaultKey, { ssn: '***-**-1234' });
|
|
94
|
+
const entry = await client.entries.create(vault.uuid, {
|
|
95
|
+
entry_type: 'fact',
|
|
96
|
+
content: payload,
|
|
97
|
+
is_encrypted: true,
|
|
98
|
+
});
|
|
72
99
|
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
const
|
|
76
|
-
const decrypted = await crypto.decrypt(key, encrypted);
|
|
100
|
+
// Later: fetch and decrypt back into the original object
|
|
101
|
+
const fetched = await client.entries.get(vault.uuid, entry.uuid);
|
|
102
|
+
const data = await decrypt(vaultKey, fetched.content); // -> { ssn: '***-**-1234' }
|
|
77
103
|
```
|
|
78
104
|
|
|
79
105
|
## Documentation
|
package/dist/index.cjs
CHANGED
|
@@ -174,11 +174,13 @@ var EntriesResource = class {
|
|
|
174
174
|
return response.data;
|
|
175
175
|
}
|
|
176
176
|
async createBulk(vaultUuid, entries) {
|
|
177
|
-
const response = await this.http.post(
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
177
|
+
const response = await this.http.post(`/api/v1/vaults/${vaultUuid}/entries/bulk`, { entries });
|
|
178
|
+
const d = response.data;
|
|
179
|
+
return {
|
|
180
|
+
imported: d.created.map((e) => e.uuid),
|
|
181
|
+
failed: d.failed,
|
|
182
|
+
summary: { total: d.summary.total, imported: d.summary.created, failed: d.summary.failed }
|
|
183
|
+
};
|
|
182
184
|
}
|
|
183
185
|
async get(vaultUuid, entryUuid) {
|
|
184
186
|
const response = await this.http.get(
|
|
@@ -209,7 +211,8 @@ var OrganizationsResource = class {
|
|
|
209
211
|
{ name },
|
|
210
212
|
false
|
|
211
213
|
);
|
|
212
|
-
|
|
214
|
+
const { api_key, ...organization } = response.data;
|
|
215
|
+
return { ...organization, apiKey: api_key };
|
|
213
216
|
}
|
|
214
217
|
async get(uuid) {
|
|
215
218
|
const response = await this.http.get(`/api/v1/organizations/${uuid}`);
|
|
@@ -218,6 +221,16 @@ var OrganizationsResource = class {
|
|
|
218
221
|
};
|
|
219
222
|
|
|
220
223
|
// src/resources/vaults.ts
|
|
224
|
+
function mapSnapshot(s, vaultUuid) {
|
|
225
|
+
return {
|
|
226
|
+
uuid: s.snapshot_uuid ?? s.uuid ?? "",
|
|
227
|
+
vault_uuid: vaultUuid,
|
|
228
|
+
root_hash: s.merkle_root ?? s.root_hash ?? "",
|
|
229
|
+
entry_count: s.entry_count ?? 0,
|
|
230
|
+
storage_bytes: s.storage_bytes ?? 0,
|
|
231
|
+
created_at: s.created_at ?? ""
|
|
232
|
+
};
|
|
233
|
+
}
|
|
221
234
|
var VaultsResource = class {
|
|
222
235
|
constructor(http) {
|
|
223
236
|
this.http = http;
|
|
@@ -254,20 +267,27 @@ var VaultsResource = class {
|
|
|
254
267
|
return response.data;
|
|
255
268
|
}
|
|
256
269
|
async verify(uuid) {
|
|
257
|
-
const response = await this.http.post(
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
270
|
+
const response = await this.http.post(`/api/v1/vaults/${uuid}/verify`);
|
|
271
|
+
const d = response.data;
|
|
272
|
+
return {
|
|
273
|
+
valid: d.is_valid,
|
|
274
|
+
vault_uuid: d.vault_uuid,
|
|
275
|
+
root_hash: d.computed_root,
|
|
276
|
+
stored_root: d.stored_root,
|
|
277
|
+
entry_count: d.entry_count
|
|
278
|
+
};
|
|
261
279
|
}
|
|
262
280
|
async snapshot(uuid) {
|
|
263
281
|
const response = await this.http.post(
|
|
264
282
|
`/api/v1/vaults/${uuid}/snapshot`
|
|
265
283
|
);
|
|
266
|
-
return response.data;
|
|
284
|
+
return mapSnapshot(response.data, uuid);
|
|
267
285
|
}
|
|
268
286
|
async snapshots(uuid) {
|
|
269
|
-
const response = await this.http.get(
|
|
270
|
-
|
|
287
|
+
const response = await this.http.get(
|
|
288
|
+
`/api/v1/vaults/${uuid}/snapshots`
|
|
289
|
+
);
|
|
290
|
+
return (response.data ?? []).map((s) => mapSnapshot(s, uuid));
|
|
271
291
|
}
|
|
272
292
|
};
|
|
273
293
|
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/resources/agents.ts","../src/resources/entries.ts","../src/resources/organizations.ts","../src/resources/vaults.ts","../src/client.ts","../src/fingerprint.ts","../src/crypto.ts"],"names":["getCrypto"],"mappings":";;;AAIO,IAAM,eAAA,GAAN,MAAM,gBAAA,SAAwB,KAAA,CAAM;AAAA,EAKzC,WAAA,CACE,OAAA,EACA,MAAA,EACA,IAAA,EACA,IAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,gBAAA,CAAgB,SAAS,CAAA;AAAA,EACvD;AACF;AAEO,IAAM,sBAAA,GAAN,MAAM,uBAAA,SAA+B,eAAA,CAAgB;AAAA,EAG1D,WAAA,CACE,OAAA,EACA,MAAA,EACA,IAAA,EACA;AACA,IAAA,KAAA,CAAM,OAAA,EAAS,GAAA,EAAK,IAAA,EAAM,kBAAkB,CAAA;AAC5C,IAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,uBAAA,CAAuB,SAAS,CAAA;AAAA,EAC9D;AACF;AAEO,IAAM,gBAAA,GAAN,MAAM,iBAAA,SAAyB,eAAA,CAAgB;AAAA,EACpD,WAAA,CAAY,OAAA,GAAkB,wCAAA,EAAqC,IAAA,EAAgB;AACjF,IAAA,KAAA,CAAM,OAAA,EAAS,GAAA,EAAK,IAAA,EAAM,YAAY,CAAA;AACtC,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,iBAAA,CAAiB,SAAS,CAAA;AAAA,EACxD;AACF;AAEO,IAAM,oBAAA,GAAN,MAAM,qBAAA,SAA6B,eAAA,CAAgB;AAAA,EACxD,WAAA,CAAY,OAAA,GAAkB,oBAAA,EAAsB,IAAA,EAAgB;AAClE,IAAA,KAAA,CAAM,OAAA,EAAS,GAAA,EAAK,IAAA,EAAM,WAAW,CAAA;AACrC,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,qBAAA,CAAqB,SAAS,CAAA;AAAA,EAC5D;AACF;;;AC1CO,IAAM,aAAN,MAAiB;AAAA,EAItB,WAAA,CAAY,QAAgB,OAAA,EAAiB;AAC3C,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAAA,EAC1C;AAAA,EAEQ,QAAA,CAAS,MAAc,MAAA,EAAwE;AACrG,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,CAAA,EAAG,KAAK,OAAO,CAAA,EAAG,IAAI,CAAA,CAAE,CAAA;AAC5C,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,QAAA,IAAI,UAAU,MAAA,EAAW;AACvB,UAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AACA,IAAA,OAAO,IAAI,QAAA,EAAS;AAAA,EACtB;AAAA,EAEA,MAAc,OAAA,CACZ,MAAA,EACA,IAAA,EACA,OAAA,GAII,EAAC,EACO;AACZ,IAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,YAAA,GAAe,MAAK,GAAI,OAAA;AAC9C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,MAAM,CAAA;AAEtC,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,cAAA,EAAgB,kBAAA;AAAA,MAChB,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,OAAA,CAAQ,WAAW,IAAI,IAAA,CAAK,MAAA;AAAA,IAC9B;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,MAChC,MAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAM,IAAA,KAAS,MAAA,GAAY,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI;AAAA,KACnD,CAAA;AAED,IAAA,IAAI,YAAA;AACJ,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,EAAA;AAC5D,IAAA,IAAI,WAAA,CAAY,QAAA,CAAS,kBAAkB,CAAA,EAAG;AAC5C,MAAA,YAAA,GAAe,MAAM,SAAS,IAAA,EAAK;AAAA,IACrC,CAAA,MAAO;AACL,MAAA,YAAA,GAAe,MAAM,SAAS,IAAA,EAAK;AAAA,IACrC;AAEA,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,MAAA,EAAQ,YAAY,CAAA;AAAA,IACrD;AAEA,IAAA,OAAO,YAAA;AAAA,EACT;AAAA,EAEA,MAAc,UAAA,CAAW,MAAA,EAAgB,IAAA,EAA+B;AACtE,IAAA,MAAM,UAAU,OAAO,IAAA,KAAS,YAAY,IAAA,KAAS,IAAA,GAAO,OAAkC,EAAC;AAC/F,IAAA,MAAM,OAAA,GAAU,OAAO,OAAA,CAAQ,SAAS,CAAA,KAAM,WAAW,OAAA,CAAQ,SAAS,CAAA,GAAI,CAAA,KAAA,EAAQ,MAAM,CAAA,CAAA;AAE5F,IAAA,QAAQ,MAAA;AAAQ,MACd,KAAK,GAAA;AACH,QAAA,MAAM,IAAI,gBAAA,CAAiB,OAAA,EAAS,IAAI,CAAA;AAAA,MAC1C,KAAK,GAAA;AACH,QAAA,MAAM,IAAI,oBAAA,CAAqB,OAAA,EAAS,IAAI,CAAA;AAAA,MAC9C,KAAK,GAAA,EAAK;AACR,QAAA,MAAM,MAAA,GAAU,OAAA,CAAQ,QAAQ,CAAA,IAAkC,EAAC;AACnE,QAAA,MAAM,IAAI,sBAAA,CAAuB,OAAA,EAAS,MAAA,EAAQ,IAAI,CAAA;AAAA,MACxD;AAAA,MACA;AACE,QAAA,MAAM,IAAI,eAAA,CAAgB,OAAA,EAAS,MAAA,EAAQ,IAAI,CAAA;AAAA;AACnD,EACF;AAAA,EAEA,MAAM,GAAA,CAAO,IAAA,EAAc,MAAA,EAAgE,eAAe,IAAA,EAAkB;AAC1H,IAAA,OAAO,KAAK,OAAA,CAAW,KAAA,EAAO,MAAM,EAAE,MAAA,EAAQ,cAAc,CAAA;AAAA,EAC9D;AAAA,EAEA,MAAM,IAAA,CAAQ,IAAA,EAAc,IAAA,EAAgB,eAAe,IAAA,EAAkB;AAC3E,IAAA,OAAO,KAAK,OAAA,CAAW,MAAA,EAAQ,MAAM,EAAE,IAAA,EAAM,cAAc,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAM,GAAA,CAAO,IAAA,EAAc,IAAA,EAA4B;AACrD,IAAA,OAAO,KAAK,OAAA,CAAW,KAAA,EAAO,IAAA,EAAM,EAAE,MAAM,CAAA;AAAA,EAC9C;AAAA,EAEA,MAAM,OAAU,IAAA,EAA0B;AACxC,IAAA,OAAO,IAAA,CAAK,OAAA,CAAW,QAAA,EAAU,IAAI,CAAA;AAAA,EACvC;AACF,CAAA;;;AChGO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EAEhD,MAAM,OAAO,MAAA,EAA2C;AACtD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAsB,kBAAkB,MAAM,CAAA;AAC/E,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,IAAA,GAAyB;AAC7B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAuB,gBAAgB,CAAA;AACxE,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,IAAI,IAAA,EAA8B;AACtC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,GAAA,CAAqB,CAAA,eAAA,EAAkB,IAAI,CAAA,CAAE,CAAA;AAC9E,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,SAAS,WAAA,EAA8C;AAC3D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,2BAA2B,WAAW,CAAA;AAAA,KACxC;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,YAAY,IAAA,EAA0C;AAC1D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,kBAAkB,IAAI,CAAA,cAAA;AAAA,KACxB;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,QAAA,CAAS,IAAA,EAAc,MAAA,EAAiD;AAC5E,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,kBAAkB,IAAI,CAAA,WAAA,CAAA;AAAA,MACtB;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,UAAA,CAAW,IAAA,EAAc,MAAA,EAA6C;AAC1E,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,kBAAkB,IAAI,CAAA,aAAA,CAAA;AAAA,MACtB,EAAE,MAAA;AAAO,KACX;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;AChDO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EAEhD,MAAM,IAAA,CAAK,SAAA,EAAmB,MAAA,EAAuD;AACnF,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,kBAAkB,SAAS,CAAA,QAAA,CAAA;AAAA,MAC3B;AAAA,KACF;AACA,IAAA,MAAM,UAAA,GAAc,QAAA,CAAS,IAAA,EAAM,UAAA,IAAc,EAAC;AAClD,IAAA,OAAO,EAAE,OAAA,EAAS,QAAA,CAAS,IAAA,EAAM,UAAA,EAAW;AAAA,EAC9C;AAAA,EAEA,MAAM,MAAA,CAAO,SAAA,EAAmB,KAAA,EAA0C;AACxE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,kBAAkB,SAAS,CAAA,QAAA,CAAA;AAAA,MAC3B;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,UAAA,CAAW,SAAA,EAAmB,OAAA,EAAmD;AACrF,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,kBAAkB,SAAS,CAAA,aAAA,CAAA;AAAA,MAC3B,EAAE,OAAA;AAAQ,KACZ;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,GAAA,CAAI,SAAA,EAAmB,SAAA,EAAmC;AAC9D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,CAAA,eAAA,EAAkB,SAAS,CAAA,SAAA,EAAY,SAAS,CAAA;AAAA,KAClD;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CAAO,SAAA,EAAmB,SAAA,EAAmB,IAAA,EAAyC;AAC1F,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,CAAA,eAAA,EAAkB,SAAS,CAAA,SAAA,EAAY,SAAS,CAAA,CAAA;AAAA,MAChD;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CAAO,SAAA,EAAmB,SAAA,EAAkC;AAChE,IAAA,MAAM,KAAK,IAAA,CAAK,MAAA,CAAa,kBAAkB,SAAS,CAAA,SAAA,EAAY,SAAS,CAAA,CAAE,CAAA;AAAA,EACjF;AACF,CAAA;;;ACrDO,IAAM,wBAAN,MAA4B;AAAA,EACjC,YAA6B,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EAEhD,MAAM,OAAO,IAAA,EAA4C;AACvD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,uBAAA;AAAA,MACA,EAAE,IAAA,EAAK;AAAA,MACP;AAAA,KACF;AACA,IAAA,OAAO,EAAE,GAAG,QAAA,CAAS,IAAA,EAAM,MAAA,EAAQ,SAAS,OAAA,EAAQ;AAAA,EACtD;AAAA,EAEA,MAAM,IAAI,IAAA,EAAqC;AAC7C,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,GAAA,CAA4B,CAAA,sBAAA,EAAyB,IAAI,CAAA,CAAE,CAAA;AAC5F,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;ACPO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,IAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAmB;AAAA,EAEhD,MAAM,OAAO,MAAA,EAA2C;AACtD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAsB,kBAAkB,MAAM,CAAA;AAC/E,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,IAAA,GAAyB;AAC7B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAuB,gBAAgB,CAAA;AACxE,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,IAAI,IAAA,EAA8B;AACtC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,GAAA,CAAqB,CAAA,eAAA,EAAkB,IAAI,CAAA,CAAE,CAAA;AAC9E,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAM,IAAA,EAAmC;AAC7C,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,GAAA,CAA0B,CAAA,eAAA,EAAkB,IAAI,CAAA,MAAA,CAAQ,CAAA;AACzF,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,IAAA,EAAoC;AAC/C,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,GAAA,CAA2B,CAAA,eAAA,EAAkB,IAAI,CAAA,OAAA,CAAS,CAAA;AAC3F,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CAAO,IAAA,EAAc,IAAA,EAA0C;AACnE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,kBAAkB,IAAI,CAAA,OAAA,CAAA;AAAA,MACtB;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,IAAA,EAAmC;AAC9C,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,GAAA,CAA0B,CAAA,eAAA,EAAkB,IAAI,CAAA,OAAA,CAAS,CAAA;AAC1F,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,IAAA,EAAqC;AAChD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,kBAAkB,IAAI,CAAA,OAAA;AAAA,KACxB;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,SAAS,IAAA,EAAiC;AAC9C,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,kBAAkB,IAAI,CAAA,SAAA;AAAA,KACxB;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,UAAU,IAAA,EAAmC;AACjD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,GAAA,CAA0B,CAAA,eAAA,EAAkB,IAAI,CAAA,UAAA,CAAY,CAAA;AAC7F,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;AC5DO,IAAM,gBAAA,GAAmB;AAWzB,IAAM,gBAAN,MAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,EAYzB,aAAa,KAAA,CAAM,WAAA,EAAqB,OAAA,EAAgD;AACtF,IAAA,MAAM,GAAA,GAAA,CAAO,OAAA,IAAW,gBAAA,IAAoB,mBAAA,GAAsB,mBAAmB,WAAW,CAAA;AAChG,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAG,CAAA;AAChC,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,KAAA,CAAM,0BAAA,GAA6B,QAAA,CAAS,MAAM,CAAA;AAAA,IAC9D;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAEA,YAAY,MAAA,EAA6B;AACvC,IAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AAClB,MAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,IACrD;AAEA,IAAA,MAAM,OAAA,GAAU,OAAO,OAAA,IAAW,gBAAA;AAClC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,UAAA,CAAW,MAAA,CAAO,QAAQ,OAAO,CAAA;AAEjD,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,qBAAA,CAAsB,IAAA,CAAK,IAAI,CAAA;AACxD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AAC1C,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AAC1C,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AAAA,EAC9C;AACF;;;ACjDA,SAAS,SAAA,GAAoB;AAC3B,EAAA,IAAI,OAAO,UAAA,KAAe,WAAA,IAAe,UAAA,CAAW,MAAA,EAAQ;AAC1D,IAAA,OAAO,UAAA,CAAW,MAAA;AAAA,EACpB;AACA,EAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AACpE;AAEA,eAAe,UAAU,KAAA,EAAgC;AACvD,EAAA,MAAM,IAAA,GAAO,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAC3C,EAAA,MAAM,aAAa,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,WAAW,IAAI,CAAA;AAClE,EAAA,MAAM,SAAA,GAAY,IAAI,UAAA,CAAW,UAAU,CAAA;AAC3C,EAAA,OAAO,MAAM,IAAA,CAAK,SAAS,CAAA,CACxB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,EAAE,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAC1C,KAAK,EAAE,CAAA;AACZ;AAOA,eAAsB,mBAAmB,MAAA,EAAgD;AACvF,EAAA,MAAM,EAAE,YAAA,EAAc,YAAA,EAAc,kBAAA,EAAmB,GAAI,MAAA;AAC3D,EAAA,MAAM,WAAA,GAAc,MAAM,SAAA,CAAU,YAAY,CAAA;AAChD,EAAA,MAAM,WAAW,CAAA,EAAG,YAAY,CAAA,EAAG,WAAW,GAAG,kBAAkB,CAAA,CAAA;AACnE,EAAA,OAAO,UAAU,QAAQ,CAAA;AAC3B;;;AC3BA,IAAM,SAAA,GAAY,SAAA;AAClB,IAAM,UAAA,GAAa,GAAA;AACnB,IAAM,SAAA,GAAY,EAAA;AAIlB,SAAS,WAAW,GAAA,EAAyB;AAC3C,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,GAAA,CAAI,SAAS,CAAC,CAAA;AAC3C,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,KAAK,CAAA,EAAG;AACtC,IAAA,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA,EAAG,EAAE,CAAA;AAAA,EACjD;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,cAAc,KAAA,EAAgC;AACrD,EAAA,OAAO,KAAA,CAAM,OAAO,KAAA,CAAM,KAAA,CAAM,YAAY,KAAA,CAAM,UAAA,GAAa,MAAM,UAAU,CAAA;AACjF;AAEA,SAAS,WAAW,KAAA,EAA2B;AAC7C,EAAA,OAAO,MAAM,IAAA,CAAK,KAAK,CAAA,CACpB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,EAAE,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAC1C,KAAK,EAAE,CAAA;AACZ;AAEA,SAASA,UAAAA,GAAoB;AAC3B,EAAA,IAAI,OAAO,UAAA,KAAe,WAAA,IAAe,UAAA,CAAW,MAAA,EAAQ;AAC1D,IAAA,OAAO,UAAA,CAAW,MAAA;AAAA,EACpB;AACA,EAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AACpE;AAEA,eAAe,YAAA,CAAa,QAAgB,MAAA,EAAwC;AAClF,EAAA,MAAM,QAAA,GAAW,WAAW,MAAM,CAAA;AAClC,EAAA,OAAOA,UAAAA,EAAU,CAAE,MAAA,CAAO,SAAA,CAAU,KAAA,EAAO,aAAA,CAAc,QAAQ,CAAA,EAAG,EAAE,IAAA,EAAM,SAAA,EAAU,EAAG,OAAO,MAAM,CAAA;AACxG;AAIA,eAAe,UAAA,CAAW,cAAsB,IAAA,EAA+B;AAC7E,EAAA,MAAM,SAASA,UAAAA,EAAU;AACzB,EAAA,MAAM,cAAA,GAAiB,WAAW,YAAY,CAAA;AAE9C,EAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,MAAA,CAAO,SAAA;AAAA,IAClC,KAAA;AAAA,IACA,cAAc,cAAc,CAAA;AAAA,IAC5B,EAAE,MAAM,MAAA,EAAO;AAAA,IACf,KAAA;AAAA,IACA,CAAC,WAAW;AAAA,GACd;AAEA,EAAA,MAAM,SAAA,GAAY,IAAI,WAAA,EAAY,CAAE,OAAO,IAAI,CAAA;AAC/C,EAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,MAAA,CAAO,SAAA;AAAA,IACrC;AAAA,MACE,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM,IAAI,UAAA,CAAW,EAAE,CAAA;AAAA,MACvB,IAAA,EAAM;AAAA,KACR;AAAA,IACA,OAAA;AAAA,IACA,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAW;AAAA,IACtC,IAAA;AAAA,IACA,CAAC,WAAW,SAAS;AAAA,GACvB;AAEA,EAAA,MAAM,WAAW,MAAM,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,OAAO,UAAU,CAAA;AAChE,EAAA,OAAO,UAAA,CAAW,IAAI,UAAA,CAAW,QAAQ,CAAC,CAAA;AAC5C;AAOO,SAAS,WAAA,GAAsB;AACpC,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,EAAE,CAAA;AAC/B,EAAAA,UAAAA,EAAU,CAAE,eAAA,CAAgB,KAAK,CAAA;AACjC,EAAA,OAAO,WAAW,KAAK,CAAA;AACzB;AAKA,eAAsB,cAAA,CAAe,WAAmB,SAAA,EAAoC;AAC1F,EAAA,OAAO,UAAA,CAAW,SAAA,EAAW,CAAA,MAAA,EAAS,SAAS,CAAA,CAAE,CAAA;AACnD;AAKA,eAAsB,cAAA,CAAe,UAAkB,SAAA,EAAoC;AACzF,EAAA,OAAO,UAAA,CAAW,QAAA,EAAU,CAAA,MAAA,EAAS,SAAS,CAAA,CAAE,CAAA;AAClD;AAMA,eAAsB,OAAA,CAAQ,QAAgB,IAAA,EAAyC;AACrF,EAAA,MAAM,SAASA,UAAAA,EAAU;AACzB,EAAA,MAAM,YAAY,MAAM,YAAA,CAAa,MAAA,EAAQ,CAAC,SAAS,CAAC,CAAA;AACxD,EAAA,MAAM,KAAK,MAAA,CAAO,eAAA,CAAgB,IAAI,UAAA,CAAW,SAAS,CAAC,CAAA;AAC3D,EAAA,MAAM,SAAA,GAAY,IAAI,WAAA,EAAY,CAAE,OAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAE/D,EAAA,MAAM,iBAAA,GAAoB,MAAM,MAAA,CAAO,MAAA,CAAO,OAAA;AAAA,IAC5C,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,aAAA,CAAc,EAAE,CAAA,EAAE;AAAA,IACzC,SAAA;AAAA,IACA,cAAc,SAAS;AAAA,GACzB;AAGA,EAAA,MAAM,sBAAA,GAAyB,IAAI,UAAA,CAAW,iBAAiB,CAAA;AAC/D,EAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AACtD,EAAA,MAAM,GAAA,GAAM,sBAAA,CAAuB,KAAA,CAAM,GAAG,CAAA;AAE5C,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,WAAW,UAAU,CAAA;AAAA,IACjC,EAAA,EAAI,WAAW,EAAE,CAAA;AAAA,IACjB,GAAA,EAAK,WAAW,GAAG,CAAA;AAAA,IACnB,SAAA,EAAW;AAAA,GACb;AACF;AAKA,eAAsB,OAAA,CAAQ,QAAgB,OAAA,EAA4C;AACxF,EAAA,MAAM,YAAY,MAAM,YAAA,CAAa,MAAA,EAAQ,CAAC,SAAS,CAAC,CAAA;AACxD,EAAA,MAAM,EAAA,GAAK,UAAA,CAAW,OAAA,CAAQ,EAAE,CAAA;AAChC,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,OAAA,CAAQ,UAAU,CAAA;AAChD,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AAGlC,EAAA,MAAM,WAAW,IAAI,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,IAAI,MAAM,CAAA;AAC9D,EAAA,QAAA,CAAS,IAAI,UAAU,CAAA;AACvB,EAAA,QAAA,CAAS,GAAA,CAAI,GAAA,EAAK,UAAA,CAAW,MAAM,CAAA;AAEnC,EAAA,MAAM,SAAA,GAAY,MAAMA,UAAAA,EAAU,CAAE,MAAA,CAAO,OAAA;AAAA,IACzC,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,aAAA,CAAc,EAAE,CAAA,EAAE;AAAA,IACzC,SAAA;AAAA,IACA,cAAc,QAAQ;AAAA,GACxB;AAEA,EAAA,OAAO,KAAK,KAAA,CAAM,IAAI,aAAY,CAAE,MAAA,CAAO,SAAS,CAAC,CAAA;AACvD","file":"index.cjs","sourcesContent":["// ============================================================\n// Agent Imprint SDK — Typed Errors\n// ============================================================\n\nexport class ImprintApiError extends Error {\n public readonly status: number;\n public readonly code: string | undefined;\n public readonly body: unknown;\n\n constructor(\n message: string,\n status: number,\n body?: unknown,\n code?: string,\n ) {\n super(message);\n this.name = 'ImprintApiError';\n this.status = status;\n this.code = code;\n this.body = body;\n Object.setPrototypeOf(this, ImprintApiError.prototype);\n }\n}\n\nexport class ImprintValidationError extends ImprintApiError {\n public readonly errors: Record<string, string[]>;\n\n constructor(\n message: string,\n errors: Record<string, string[]>,\n body?: unknown,\n ) {\n super(message, 422, body, 'VALIDATION_ERROR');\n this.name = 'ImprintValidationError';\n this.errors = errors;\n Object.setPrototypeOf(this, ImprintValidationError.prototype);\n }\n}\n\nexport class ImprintAuthError extends ImprintApiError {\n constructor(message: string = 'Unauthorized — check your API key', body?: unknown) {\n super(message, 401, body, 'AUTH_ERROR');\n this.name = 'ImprintAuthError';\n Object.setPrototypeOf(this, ImprintAuthError.prototype);\n }\n}\n\nexport class ImprintNotFoundError extends ImprintApiError {\n constructor(message: string = 'Resource not found', body?: unknown) {\n super(message, 404, body, 'NOT_FOUND');\n this.name = 'ImprintNotFoundError';\n Object.setPrototypeOf(this, ImprintNotFoundError.prototype);\n }\n}\n","// ============================================================\n// Agent Imprint SDK — HTTP Transport\n// ============================================================\n\nimport {\n ImprintApiError,\n ImprintAuthError,\n ImprintNotFoundError,\n ImprintValidationError,\n} from './errors.js';\n\nexport class HttpClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n\n constructor(apiKey: string, baseUrl: string) {\n this.apiKey = apiKey;\n this.baseUrl = baseUrl.replace(/\\/$/, '');\n }\n\n private buildUrl(path: string, params?: Record<string, string | number | boolean | undefined>): string {\n const url = new URL(`${this.baseUrl}${path}`);\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n\n private async request<T>(\n method: string,\n path: string,\n options: {\n body?: unknown;\n params?: Record<string, string | number | boolean | undefined>;\n requiresAuth?: boolean;\n } = {},\n ): Promise<T> {\n const { body, params, requiresAuth = true } = options;\n const url = this.buildUrl(path, params);\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n };\n\n if (requiresAuth) {\n headers['X-API-Key'] = this.apiKey;\n }\n\n const response = await fetch(url, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n\n let responseBody: unknown;\n const contentType = response.headers.get('content-type') ?? '';\n if (contentType.includes('application/json')) {\n responseBody = await response.json();\n } else {\n responseBody = await response.text();\n }\n\n if (!response.ok) {\n await this.throwError(response.status, responseBody);\n }\n\n return responseBody as T;\n }\n\n private async throwError(status: number, body: unknown): Promise<never> {\n const bodyObj = typeof body === 'object' && body !== null ? body as Record<string, unknown> : {};\n const message = typeof bodyObj['message'] === 'string' ? bodyObj['message'] : `HTTP ${status}`;\n\n switch (status) {\n case 401:\n throw new ImprintAuthError(message, body);\n case 404:\n throw new ImprintNotFoundError(message, body);\n case 422: {\n const errors = (bodyObj['errors'] as Record<string, string[]>) ?? {};\n throw new ImprintValidationError(message, errors, body);\n }\n default:\n throw new ImprintApiError(message, status, body);\n }\n }\n\n async get<T>(path: string, params?: Record<string, string | number | boolean | undefined>, requiresAuth = true): Promise<T> {\n return this.request<T>('GET', path, { params, requiresAuth });\n }\n\n async post<T>(path: string, body?: unknown, requiresAuth = true): Promise<T> {\n return this.request<T>('POST', path, { body, requiresAuth });\n }\n\n async put<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>('PUT', path, { body });\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>('DELETE', path);\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type {\n Agent,\n CreateAgentParams,\n DiscoverResult,\n GenerateKeyResult,\n RecoverKeyResult,\n SplitKeyParams,\n SplitKeyResult,\n} from '../types.js';\n\nexport class AgentsResource {\n constructor(private readonly http: HttpClient) {}\n\n async create(params: CreateAgentParams): Promise<Agent> {\n const response = await this.http.post<{ data: Agent }>('/api/v1/agents', params);\n return response.data;\n }\n\n async list(): Promise<Agent[]> {\n const response = await this.http.get<{ data: Agent[] }>('/api/v1/agents');\n return response.data;\n }\n\n async get(uuid: string): Promise<Agent> {\n const response = await this.http.get<{ data: Agent }>(`/api/v1/agents/${uuid}`);\n return response.data;\n }\n\n async discover(fingerprint: string): Promise<DiscoverResult> {\n const response = await this.http.get<{ data: DiscoverResult }>(\n `/api/v1/agents/discover/${fingerprint}`,\n );\n return response.data;\n }\n\n async generateKey(uuid: string): Promise<GenerateKeyResult> {\n const response = await this.http.post<{ data: GenerateKeyResult }>(\n `/api/v1/agents/${uuid}/keys/generate`,\n );\n return response.data;\n }\n\n async splitKey(uuid: string, params: SplitKeyParams): Promise<SplitKeyResult> {\n const response = await this.http.post<{ data: SplitKeyResult }>(\n `/api/v1/agents/${uuid}/keys/split`,\n params,\n );\n return response.data;\n }\n\n async recoverKey(uuid: string, shares: string[]): Promise<RecoverKeyResult> {\n const response = await this.http.post<{ data: RecoverKeyResult }>(\n `/api/v1/agents/${uuid}/keys/recover`,\n { shares },\n );\n return response.data;\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type {\n BulkResult,\n CreateEntryParams,\n Entry,\n ListEntriesParams,\n PaginatedEntries,\n UpdateEntryParams,\n} from '../types.js';\n\nexport class EntriesResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(vaultUuid: string, params?: ListEntriesParams): Promise<PaginatedEntries> {\n const response = await this.http.get<{ data: Entry[]; meta: Record<string, unknown> }>(\n `/api/v1/vaults/${vaultUuid}/entries`,\n params as Record<string, string | number | boolean | undefined>,\n );\n const pagination = (response.meta?.pagination ?? {}) as PaginatedEntries['pagination'];\n return { entries: response.data, pagination };\n }\n\n async create(vaultUuid: string, entry: CreateEntryParams): Promise<Entry> {\n const response = await this.http.post<{ data: Entry }>(\n `/api/v1/vaults/${vaultUuid}/entries`,\n entry,\n );\n return response.data;\n }\n\n async createBulk(vaultUuid: string, entries: CreateEntryParams[]): Promise<BulkResult> {\n const response = await this.http.post<{ data: BulkResult }>(\n `/api/v1/vaults/${vaultUuid}/entries/bulk`,\n { entries },\n );\n return response.data;\n }\n\n async get(vaultUuid: string, entryUuid: string): Promise<Entry> {\n const response = await this.http.get<{ data: Entry }>(\n `/api/v1/vaults/${vaultUuid}/entries/${entryUuid}`,\n );\n return response.data;\n }\n\n async update(vaultUuid: string, entryUuid: string, data: UpdateEntryParams): Promise<Entry> {\n const response = await this.http.put<{ data: Entry }>(\n `/api/v1/vaults/${vaultUuid}/entries/${entryUuid}`,\n data,\n );\n return response.data;\n }\n\n async delete(vaultUuid: string, entryUuid: string): Promise<void> {\n await this.http.delete<void>(`/api/v1/vaults/${vaultUuid}/entries/${entryUuid}`);\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type { Organization, OrganizationWithKey } from '../types.js';\n\nexport class OrganizationsResource {\n constructor(private readonly http: HttpClient) {}\n\n async create(name: string): Promise<OrganizationWithKey> {\n const response = await this.http.post<{ data: Organization; api_key: string }>(\n '/api/v1/organizations',\n { name },\n false,\n );\n return { ...response.data, apiKey: response.api_key };\n }\n\n async get(uuid: string): Promise<Organization> {\n const response = await this.http.get<{ data: Organization }>(`/api/v1/organizations/${uuid}`);\n return response.data;\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type {\n CreateVaultParams,\n ImportResult,\n MerkleInfo,\n Snapshot,\n Vault,\n VaultExport,\n VaultStats,\n VerifyResult,\n} from '../types.js';\n\nexport class VaultsResource {\n constructor(private readonly http: HttpClient) {}\n\n async create(params: CreateVaultParams): Promise<Vault> {\n const response = await this.http.post<{ data: Vault }>('/api/v1/vaults', params);\n return response.data;\n }\n\n async list(): Promise<Vault[]> {\n const response = await this.http.get<{ data: Vault[] }>('/api/v1/vaults');\n return response.data;\n }\n\n async get(uuid: string): Promise<Vault> {\n const response = await this.http.get<{ data: Vault }>(`/api/v1/vaults/${uuid}`);\n return response.data;\n }\n\n async stats(uuid: string): Promise<VaultStats> {\n const response = await this.http.get<{ data: VaultStats }>(`/api/v1/vaults/${uuid}/stats`);\n return response.data;\n }\n\n async export(uuid: string): Promise<VaultExport> {\n const response = await this.http.get<{ data: VaultExport }>(`/api/v1/vaults/${uuid}/export`);\n return response.data;\n }\n\n async import(uuid: string, data: VaultExport): Promise<ImportResult> {\n const response = await this.http.post<{ data: ImportResult }>(\n `/api/v1/vaults/${uuid}/import`,\n data,\n );\n return response.data;\n }\n\n async merkle(uuid: string): Promise<MerkleInfo> {\n const response = await this.http.get<{ data: MerkleInfo }>(`/api/v1/vaults/${uuid}/merkle`);\n return response.data;\n }\n\n async verify(uuid: string): Promise<VerifyResult> {\n const response = await this.http.post<{ data: VerifyResult }>(\n `/api/v1/vaults/${uuid}/verify`,\n );\n return response.data;\n }\n\n async snapshot(uuid: string): Promise<Snapshot> {\n const response = await this.http.post<{ data: Snapshot }>(\n `/api/v1/vaults/${uuid}/snapshot`,\n );\n return response.data;\n }\n\n async snapshots(uuid: string): Promise<Snapshot[]> {\n const response = await this.http.get<{ data: Snapshot[] }>(`/api/v1/vaults/${uuid}/snapshots`);\n return response.data;\n }\n}\n","// ============================================================\n// Agent Imprint SDK — Main Client\n// ============================================================\n\nimport { HttpClient } from './http.js';\nimport { AgentsResource } from './resources/agents.js';\nimport { EntriesResource } from './resources/entries.js';\nimport { OrganizationsResource } from './resources/organizations.js';\nimport { VaultsResource } from './resources/vaults.js';\nimport type { ImprintClientConfig } from './types.js';\n\nexport const DEFAULT_BASE_URL = 'https://api.agentimprint.io';\n\n/**\n * ImprintClient — main entry point for the Agent Imprint SDK.\n *\n * @example\n * ```ts\n * const client = new ImprintClient({ apiKey: 'your-api-key' });\n * const agents = await client.agents.list();\n * ```\n */\nexport class ImprintClient {\n public readonly organizations: OrganizationsResource;\n public readonly agents: AgentsResource;\n public readonly vaults: VaultsResource;\n public readonly entries: EntriesResource;\n\n private readonly http: HttpClient;\n\n /**\n * Public discovery — check if an agent fingerprint exists (no auth required).\n * Uses the unauthenticated /api/v1/discover endpoint.\n */\n static async probe(fingerprint: string, baseUrl?: string): Promise<{ exists: boolean }> {\n const url = (baseUrl ?? DEFAULT_BASE_URL) + '/api/v1/discover/' + encodeURIComponent(fingerprint);\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('Discovery probe failed: ' + response.status);\n }\n const json = await response.json() as { data: { exists: boolean } };\n return json.data;\n }\n\n constructor(config: ImprintClientConfig) {\n if (!config.apiKey) {\n throw new Error('ImprintClient: apiKey is required');\n }\n\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n this.http = new HttpClient(config.apiKey, baseUrl);\n\n this.organizations = new OrganizationsResource(this.http);\n this.agents = new AgentsResource(this.http);\n this.vaults = new VaultsResource(this.http);\n this.entries = new EntriesResource(this.http);\n }\n}\n","// ============================================================\n// Agent Imprint SDK — Fingerprint Helper\n// Matches server-side algorithm:\n// sha256(model_family + sha256(core_purpose) + creator_identifier)\n// ============================================================\n\nimport type { FingerprintComponents } from './types.js';\n\nfunction getCrypto(): Crypto {\n if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n return globalThis.crypto;\n }\n throw new Error('Web Crypto API not available in this environment');\n}\n\nasync function sha256Hex(input: string): Promise<string> {\n const data = new TextEncoder().encode(input);\n const hashBuffer = await getCrypto().subtle.digest('SHA-256', data);\n const hashArray = new Uint8Array(hashBuffer);\n return Array.from(hashArray)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\n/**\n * Compute a deterministic agent fingerprint that matches the server-side algorithm.\n *\n * Algorithm: sha256(model_family + sha256(core_purpose) + creator_identifier)\n */\nexport async function computeFingerprint(params: FingerprintComponents): Promise<string> {\n const { model_family, core_purpose, creator_identifier } = params;\n const purposeHash = await sha256Hex(core_purpose);\n const combined = `${model_family}${purposeHash}${creator_identifier}`;\n return sha256Hex(combined);\n}\n","// ============================================================\n// Agent Imprint SDK — Encryption Helpers (Web Crypto API)\n// Works in Node.js 18+ (globalThis.crypto) and browsers\n// ============================================================\n\nimport type { EncryptedPayload } from './types.js';\n\nconst ALGORITHM = 'AES-GCM';\nconst KEY_LENGTH = 256;\nconst IV_LENGTH = 12; // 96-bit IV for AES-GCM\n\n// ─── Utility ───────────────────────────────────────────────\n\nfunction hexToBytes(hex: string): Uint8Array {\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16);\n }\n return bytes;\n}\n\nfunction toArrayBuffer(bytes: Uint8Array): ArrayBuffer {\n return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength) as ArrayBuffer;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nfunction getCrypto(): Crypto {\n if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n return globalThis.crypto;\n }\n throw new Error('Web Crypto API not available in this environment');\n}\n\nasync function importAesKey(keyHex: string, usages: KeyUsage[]): Promise<CryptoKey> {\n const keyBytes = hexToBytes(keyHex);\n return getCrypto().subtle.importKey('raw', toArrayBuffer(keyBytes), { name: ALGORITHM }, false, usages);\n}\n\n// ─── HKDF Key Derivation ───────────────────────────────────\n\nasync function hkdfDerive(masterKeyHex: string, info: string): Promise<string> {\n const crypto = getCrypto();\n const masterKeyBytes = hexToBytes(masterKeyHex);\n\n const baseKey = await crypto.subtle.importKey(\n 'raw',\n toArrayBuffer(masterKeyBytes),\n { name: 'HKDF' },\n false,\n ['deriveKey'],\n );\n\n const infoBytes = new TextEncoder().encode(info);\n const derivedKey = await crypto.subtle.deriveKey(\n {\n name: 'HKDF',\n hash: 'SHA-256',\n salt: new Uint8Array(32),\n info: infoBytes,\n },\n baseKey,\n { name: ALGORITHM, length: KEY_LENGTH },\n true,\n ['encrypt', 'decrypt'],\n );\n\n const exported = await crypto.subtle.exportKey('raw', derivedKey);\n return bytesToHex(new Uint8Array(exported));\n}\n\n// ─── Public API ────────────────────────────────────────────\n\n/**\n * Generate a cryptographically secure random 256-bit key (64 hex chars).\n */\nexport function generateKey(): string {\n const bytes = new Uint8Array(32);\n getCrypto().getRandomValues(bytes);\n return bytesToHex(bytes);\n}\n\n/**\n * Derive a vault-specific key from a master key and vault UUID.\n */\nexport async function deriveVaultKey(masterKey: string, vaultUuid: string): Promise<string> {\n return hkdfDerive(masterKey, `vault:${vaultUuid}`);\n}\n\n/**\n * Derive an entry-specific key from a vault key and entry UUID.\n */\nexport async function deriveEntryKey(vaultKey: string, entryUuid: string): Promise<string> {\n return hkdfDerive(vaultKey, `entry:${entryUuid}`);\n}\n\n/**\n * Encrypt a JSON-serializable object with AES-256-GCM.\n * Returns an EncryptedPayload with ciphertext, iv, and tag (all hex-encoded).\n */\nexport async function encrypt(keyHex: string, data: object): Promise<EncryptedPayload> {\n const crypto = getCrypto();\n const cryptoKey = await importAesKey(keyHex, ['encrypt']);\n const iv = crypto.getRandomValues(new Uint8Array(IV_LENGTH));\n const plaintext = new TextEncoder().encode(JSON.stringify(data));\n\n const ciphertextWithTag = await crypto.subtle.encrypt(\n { name: ALGORITHM, iv: toArrayBuffer(iv) },\n cryptoKey,\n toArrayBuffer(plaintext),\n );\n\n // AES-GCM appends the 16-byte auth tag at the end\n const ciphertextWithTagBytes = new Uint8Array(ciphertextWithTag);\n const ciphertext = ciphertextWithTagBytes.slice(0, -16);\n const tag = ciphertextWithTagBytes.slice(-16);\n\n return {\n ciphertext: bytesToHex(ciphertext),\n iv: bytesToHex(iv),\n tag: bytesToHex(tag),\n algorithm: 'AES-256-GCM',\n };\n}\n\n/**\n * Decrypt an EncryptedPayload back to the original object.\n */\nexport async function decrypt(keyHex: string, payload: EncryptedPayload): Promise<object> {\n const cryptoKey = await importAesKey(keyHex, ['decrypt']);\n const iv = hexToBytes(payload.iv);\n const ciphertext = hexToBytes(payload.ciphertext);\n const tag = hexToBytes(payload.tag);\n\n // Reassemble ciphertext + tag for AES-GCM\n const combined = new Uint8Array(ciphertext.length + tag.length);\n combined.set(ciphertext);\n combined.set(tag, ciphertext.length);\n\n const plaintext = await getCrypto().subtle.decrypt(\n { name: ALGORITHM, iv: toArrayBuffer(iv) },\n cryptoKey,\n toArrayBuffer(combined),\n );\n\n return JSON.parse(new TextDecoder().decode(plaintext)) as object;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/resources/agents.ts","../src/resources/entries.ts","../src/resources/organizations.ts","../src/resources/vaults.ts","../src/client.ts","../src/fingerprint.ts","../src/crypto.ts"],"names":["getCrypto"],"mappings":"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","file":"index.cjs","sourcesContent":["// ============================================================\n// Agent Imprint SDK — Typed Errors\n// ============================================================\n\nexport class ImprintApiError extends Error {\n public readonly status: number;\n public readonly code: string | undefined;\n public readonly body: unknown;\n\n constructor(\n message: string,\n status: number,\n body?: unknown,\n code?: string,\n ) {\n super(message);\n this.name = 'ImprintApiError';\n this.status = status;\n this.code = code;\n this.body = body;\n Object.setPrototypeOf(this, ImprintApiError.prototype);\n }\n}\n\nexport class ImprintValidationError extends ImprintApiError {\n public readonly errors: Record<string, string[]>;\n\n constructor(\n message: string,\n errors: Record<string, string[]>,\n body?: unknown,\n ) {\n super(message, 422, body, 'VALIDATION_ERROR');\n this.name = 'ImprintValidationError';\n this.errors = errors;\n Object.setPrototypeOf(this, ImprintValidationError.prototype);\n }\n}\n\nexport class ImprintAuthError extends ImprintApiError {\n constructor(message: string = 'Unauthorized — check your API key', body?: unknown) {\n super(message, 401, body, 'AUTH_ERROR');\n this.name = 'ImprintAuthError';\n Object.setPrototypeOf(this, ImprintAuthError.prototype);\n }\n}\n\nexport class ImprintNotFoundError extends ImprintApiError {\n constructor(message: string = 'Resource not found', body?: unknown) {\n super(message, 404, body, 'NOT_FOUND');\n this.name = 'ImprintNotFoundError';\n Object.setPrototypeOf(this, ImprintNotFoundError.prototype);\n }\n}\n","// ============================================================\n// Agent Imprint SDK — HTTP Transport\n// ============================================================\n\nimport {\n ImprintApiError,\n ImprintAuthError,\n ImprintNotFoundError,\n ImprintValidationError,\n} from './errors.js';\n\nexport class HttpClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n\n constructor(apiKey: string, baseUrl: string) {\n this.apiKey = apiKey;\n this.baseUrl = baseUrl.replace(/\\/$/, '');\n }\n\n private buildUrl(path: string, params?: Record<string, string | number | boolean | undefined>): string {\n const url = new URL(`${this.baseUrl}${path}`);\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n\n private async request<T>(\n method: string,\n path: string,\n options: {\n body?: unknown;\n params?: Record<string, string | number | boolean | undefined>;\n requiresAuth?: boolean;\n } = {},\n ): Promise<T> {\n const { body, params, requiresAuth = true } = options;\n const url = this.buildUrl(path, params);\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n };\n\n if (requiresAuth) {\n headers['X-API-Key'] = this.apiKey;\n }\n\n const response = await fetch(url, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n\n let responseBody: unknown;\n const contentType = response.headers.get('content-type') ?? '';\n if (contentType.includes('application/json')) {\n responseBody = await response.json();\n } else {\n responseBody = await response.text();\n }\n\n if (!response.ok) {\n await this.throwError(response.status, responseBody);\n }\n\n return responseBody as T;\n }\n\n private async throwError(status: number, body: unknown): Promise<never> {\n const bodyObj = typeof body === 'object' && body !== null ? body as Record<string, unknown> : {};\n const message = typeof bodyObj['message'] === 'string' ? bodyObj['message'] : `HTTP ${status}`;\n\n switch (status) {\n case 401:\n throw new ImprintAuthError(message, body);\n case 404:\n throw new ImprintNotFoundError(message, body);\n case 422: {\n const errors = (bodyObj['errors'] as Record<string, string[]>) ?? {};\n throw new ImprintValidationError(message, errors, body);\n }\n default:\n throw new ImprintApiError(message, status, body);\n }\n }\n\n async get<T>(path: string, params?: Record<string, string | number | boolean | undefined>, requiresAuth = true): Promise<T> {\n return this.request<T>('GET', path, { params, requiresAuth });\n }\n\n async post<T>(path: string, body?: unknown, requiresAuth = true): Promise<T> {\n return this.request<T>('POST', path, { body, requiresAuth });\n }\n\n async put<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>('PUT', path, { body });\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>('DELETE', path);\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type {\n Agent,\n CreateAgentParams,\n DiscoverResult,\n GenerateKeyResult,\n RecoverKeyResult,\n SplitKeyParams,\n SplitKeyResult,\n} from '../types.js';\n\nexport class AgentsResource {\n constructor(private readonly http: HttpClient) {}\n\n async create(params: CreateAgentParams): Promise<Agent> {\n const response = await this.http.post<{ data: Agent }>('/api/v1/agents', params);\n return response.data;\n }\n\n async list(): Promise<Agent[]> {\n const response = await this.http.get<{ data: Agent[] }>('/api/v1/agents');\n return response.data;\n }\n\n async get(uuid: string): Promise<Agent> {\n const response = await this.http.get<{ data: Agent }>(`/api/v1/agents/${uuid}`);\n return response.data;\n }\n\n async discover(fingerprint: string): Promise<DiscoverResult> {\n const response = await this.http.get<{ data: DiscoverResult }>(\n `/api/v1/agents/discover/${fingerprint}`,\n );\n return response.data;\n }\n\n async generateKey(uuid: string): Promise<GenerateKeyResult> {\n const response = await this.http.post<{ data: GenerateKeyResult }>(\n `/api/v1/agents/${uuid}/keys/generate`,\n );\n return response.data;\n }\n\n async splitKey(uuid: string, params: SplitKeyParams): Promise<SplitKeyResult> {\n const response = await this.http.post<{ data: SplitKeyResult }>(\n `/api/v1/agents/${uuid}/keys/split`,\n params,\n );\n return response.data;\n }\n\n async recoverKey(uuid: string, shares: string[]): Promise<RecoverKeyResult> {\n const response = await this.http.post<{ data: RecoverKeyResult }>(\n `/api/v1/agents/${uuid}/keys/recover`,\n { shares },\n );\n return response.data;\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type {\n BulkResult,\n CreateEntryParams,\n Entry,\n ListEntriesParams,\n PaginatedEntries,\n UpdateEntryParams,\n} from '../types.js';\n\nexport class EntriesResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(vaultUuid: string, params?: ListEntriesParams): Promise<PaginatedEntries> {\n const response = await this.http.get<{ data: Entry[]; meta: Record<string, unknown> }>(\n `/api/v1/vaults/${vaultUuid}/entries`,\n params as Record<string, string | number | boolean | undefined>,\n );\n const pagination = (response.meta?.pagination ?? {}) as PaginatedEntries['pagination'];\n return { entries: response.data, pagination };\n }\n\n async create(vaultUuid: string, entry: CreateEntryParams): Promise<Entry> {\n const response = await this.http.post<{ data: Entry }>(\n `/api/v1/vaults/${vaultUuid}/entries`,\n entry,\n );\n return response.data;\n }\n\n async createBulk(vaultUuid: string, entries: CreateEntryParams[]): Promise<BulkResult> {\n const response = await this.http.post<{\n data: {\n created: Array<{ uuid: string }>;\n failed: BulkResult['failed'];\n summary: { total: number; created: number; failed: number };\n };\n }>(`/api/v1/vaults/${vaultUuid}/entries/bulk`, { entries });\n const d = response.data;\n return {\n imported: d.created.map((e) => e.uuid),\n failed: d.failed,\n summary: { total: d.summary.total, imported: d.summary.created, failed: d.summary.failed },\n };\n }\n\n async get(vaultUuid: string, entryUuid: string): Promise<Entry> {\n const response = await this.http.get<{ data: Entry }>(\n `/api/v1/vaults/${vaultUuid}/entries/${entryUuid}`,\n );\n return response.data;\n }\n\n async update(vaultUuid: string, entryUuid: string, data: UpdateEntryParams): Promise<Entry> {\n const response = await this.http.put<{ data: Entry }>(\n `/api/v1/vaults/${vaultUuid}/entries/${entryUuid}`,\n data,\n );\n return response.data;\n }\n\n async delete(vaultUuid: string, entryUuid: string): Promise<void> {\n await this.http.delete<void>(`/api/v1/vaults/${vaultUuid}/entries/${entryUuid}`);\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type { Organization, OrganizationWithKey } from '../types.js';\n\nexport class OrganizationsResource {\n constructor(private readonly http: HttpClient) {}\n\n async create(name: string): Promise<OrganizationWithKey> {\n const response = await this.http.post<{ data: Organization & { api_key: string } }>(\n '/api/v1/organizations',\n { name },\n false,\n );\n const { api_key, ...organization } = response.data;\n return { ...organization, apiKey: api_key };\n }\n\n async get(uuid: string): Promise<Organization> {\n const response = await this.http.get<{ data: Organization }>(`/api/v1/organizations/${uuid}`);\n return response.data;\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type {\n CreateVaultParams,\n ImportResult,\n MerkleInfo,\n Snapshot,\n Vault,\n VaultExport,\n VaultStats,\n VerifyResult,\n} from '../types.js';\n\n/** Raw snapshot record as returned by the API (field names differ from the public Snapshot type). */\ninterface RawSnapshot {\n snapshot_uuid?: string;\n uuid?: string;\n merkle_root?: string;\n root_hash?: string;\n entry_count?: number;\n storage_bytes?: number;\n created_at?: string;\n}\n\nfunction mapSnapshot(s: RawSnapshot, vaultUuid: string): Snapshot {\n return {\n uuid: (s.snapshot_uuid ?? s.uuid ?? '') as string,\n vault_uuid: vaultUuid,\n root_hash: (s.merkle_root ?? s.root_hash ?? '') as string,\n entry_count: s.entry_count ?? 0,\n storage_bytes: s.storage_bytes ?? 0,\n created_at: s.created_at ?? '',\n };\n}\n\nexport class VaultsResource {\n constructor(private readonly http: HttpClient) {}\n\n async create(params: CreateVaultParams): Promise<Vault> {\n const response = await this.http.post<{ data: Vault }>('/api/v1/vaults', params);\n return response.data;\n }\n\n async list(): Promise<Vault[]> {\n const response = await this.http.get<{ data: Vault[] }>('/api/v1/vaults');\n return response.data;\n }\n\n async get(uuid: string): Promise<Vault> {\n const response = await this.http.get<{ data: Vault }>(`/api/v1/vaults/${uuid}`);\n return response.data;\n }\n\n async stats(uuid: string): Promise<VaultStats> {\n const response = await this.http.get<{ data: VaultStats }>(`/api/v1/vaults/${uuid}/stats`);\n return response.data;\n }\n\n async export(uuid: string): Promise<VaultExport> {\n const response = await this.http.get<{ data: VaultExport }>(`/api/v1/vaults/${uuid}/export`);\n return response.data;\n }\n\n async import(uuid: string, data: VaultExport): Promise<ImportResult> {\n const response = await this.http.post<{ data: ImportResult }>(\n `/api/v1/vaults/${uuid}/import`,\n data,\n );\n return response.data;\n }\n\n async merkle(uuid: string): Promise<MerkleInfo> {\n const response = await this.http.get<{ data: MerkleInfo }>(`/api/v1/vaults/${uuid}/merkle`);\n return response.data;\n }\n\n async verify(uuid: string): Promise<VerifyResult> {\n const response = await this.http.post<{\n data: {\n vault_uuid: string;\n computed_root: string;\n stored_root: string | null;\n is_valid: boolean;\n entry_count: number;\n };\n }>(`/api/v1/vaults/${uuid}/verify`);\n const d = response.data;\n return {\n valid: d.is_valid,\n vault_uuid: d.vault_uuid,\n root_hash: d.computed_root,\n stored_root: d.stored_root,\n entry_count: d.entry_count,\n };\n }\n\n async snapshot(uuid: string): Promise<Snapshot> {\n const response = await this.http.post<{ data: RawSnapshot }>(\n `/api/v1/vaults/${uuid}/snapshot`,\n );\n return mapSnapshot(response.data, uuid);\n }\n\n async snapshots(uuid: string): Promise<Snapshot[]> {\n const response = await this.http.get<{ data: RawSnapshot[] }>(\n `/api/v1/vaults/${uuid}/snapshots`,\n );\n return (response.data ?? []).map((s) => mapSnapshot(s, uuid));\n }\n}\n","// ============================================================\n// Agent Imprint SDK — Main Client\n// ============================================================\n\nimport { HttpClient } from './http.js';\nimport { AgentsResource } from './resources/agents.js';\nimport { EntriesResource } from './resources/entries.js';\nimport { OrganizationsResource } from './resources/organizations.js';\nimport { VaultsResource } from './resources/vaults.js';\nimport type { ImprintClientConfig } from './types.js';\n\nexport const DEFAULT_BASE_URL = 'https://api.agentimprint.io';\n\n/**\n * ImprintClient — main entry point for the Agent Imprint SDK.\n *\n * @example\n * ```ts\n * const client = new ImprintClient({ apiKey: 'your-api-key' });\n * const agents = await client.agents.list();\n * ```\n */\nexport class ImprintClient {\n public readonly organizations: OrganizationsResource;\n public readonly agents: AgentsResource;\n public readonly vaults: VaultsResource;\n public readonly entries: EntriesResource;\n\n private readonly http: HttpClient;\n\n /**\n * Public discovery — check if an agent fingerprint exists (no auth required).\n * Uses the unauthenticated /api/v1/discover endpoint.\n */\n static async probe(fingerprint: string, baseUrl?: string): Promise<{ exists: boolean }> {\n const url = (baseUrl ?? DEFAULT_BASE_URL) + '/api/v1/discover/' + encodeURIComponent(fingerprint);\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('Discovery probe failed: ' + response.status);\n }\n const json = await response.json() as { data: { exists: boolean } };\n return json.data;\n }\n\n constructor(config: ImprintClientConfig) {\n if (!config.apiKey) {\n throw new Error('ImprintClient: apiKey is required');\n }\n\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n this.http = new HttpClient(config.apiKey, baseUrl);\n\n this.organizations = new OrganizationsResource(this.http);\n this.agents = new AgentsResource(this.http);\n this.vaults = new VaultsResource(this.http);\n this.entries = new EntriesResource(this.http);\n }\n}\n","// ============================================================\n// Agent Imprint SDK — Fingerprint Helper\n// Matches server-side algorithm:\n// sha256(model_family + sha256(core_purpose) + creator_identifier)\n// ============================================================\n\nimport type { FingerprintComponents } from './types.js';\n\nfunction getCrypto(): Crypto {\n if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n return globalThis.crypto;\n }\n throw new Error('Web Crypto API not available in this environment');\n}\n\nasync function sha256Hex(input: string): Promise<string> {\n const data = new TextEncoder().encode(input);\n const hashBuffer = await getCrypto().subtle.digest('SHA-256', data);\n const hashArray = new Uint8Array(hashBuffer);\n return Array.from(hashArray)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\n/**\n * Compute a deterministic agent fingerprint that matches the server-side algorithm.\n *\n * Algorithm: sha256(model_family + sha256(core_purpose) + creator_identifier)\n */\nexport async function computeFingerprint(params: FingerprintComponents): Promise<string> {\n const { model_family, core_purpose, creator_identifier } = params;\n const purposeHash = await sha256Hex(core_purpose);\n const combined = `${model_family}${purposeHash}${creator_identifier}`;\n return sha256Hex(combined);\n}\n","// ============================================================\n// Agent Imprint SDK — Encryption Helpers (Web Crypto API)\n// Works in Node.js 18+ (globalThis.crypto) and browsers\n// ============================================================\n\nimport type { EncryptedPayload } from './types.js';\n\nconst ALGORITHM = 'AES-GCM';\nconst KEY_LENGTH = 256;\nconst IV_LENGTH = 12; // 96-bit IV for AES-GCM\n\n// ─── Utility ───────────────────────────────────────────────\n\nfunction hexToBytes(hex: string): Uint8Array {\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16);\n }\n return bytes;\n}\n\nfunction toArrayBuffer(bytes: Uint8Array): ArrayBuffer {\n return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength) as ArrayBuffer;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nfunction getCrypto(): Crypto {\n if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n return globalThis.crypto;\n }\n throw new Error('Web Crypto API not available in this environment');\n}\n\nasync function importAesKey(keyHex: string, usages: KeyUsage[]): Promise<CryptoKey> {\n const keyBytes = hexToBytes(keyHex);\n return getCrypto().subtle.importKey('raw', toArrayBuffer(keyBytes), { name: ALGORITHM }, false, usages);\n}\n\n// ─── HKDF Key Derivation ───────────────────────────────────\n\nasync function hkdfDerive(masterKeyHex: string, info: string): Promise<string> {\n const crypto = getCrypto();\n const masterKeyBytes = hexToBytes(masterKeyHex);\n\n const baseKey = await crypto.subtle.importKey(\n 'raw',\n toArrayBuffer(masterKeyBytes),\n { name: 'HKDF' },\n false,\n ['deriveKey'],\n );\n\n const infoBytes = new TextEncoder().encode(info);\n const derivedKey = await crypto.subtle.deriveKey(\n {\n name: 'HKDF',\n hash: 'SHA-256',\n salt: new Uint8Array(32),\n info: infoBytes,\n },\n baseKey,\n { name: ALGORITHM, length: KEY_LENGTH },\n true,\n ['encrypt', 'decrypt'],\n );\n\n const exported = await crypto.subtle.exportKey('raw', derivedKey);\n return bytesToHex(new Uint8Array(exported));\n}\n\n// ─── Public API ────────────────────────────────────────────\n\n/**\n * Generate a cryptographically secure random 256-bit key (64 hex chars).\n */\nexport function generateKey(): string {\n const bytes = new Uint8Array(32);\n getCrypto().getRandomValues(bytes);\n return bytesToHex(bytes);\n}\n\n/**\n * Derive a vault-specific key from a master key and vault UUID.\n */\nexport async function deriveVaultKey(masterKey: string, vaultUuid: string): Promise<string> {\n return hkdfDerive(masterKey, `vault:${vaultUuid}`);\n}\n\n/**\n * Derive an entry-specific key from a vault key and entry UUID.\n */\nexport async function deriveEntryKey(vaultKey: string, entryUuid: string): Promise<string> {\n return hkdfDerive(vaultKey, `entry:${entryUuid}`);\n}\n\n/**\n * Encrypt a JSON-serializable object with AES-256-GCM.\n * Returns an EncryptedPayload with ciphertext, iv, and tag (all hex-encoded).\n */\nexport async function encrypt(keyHex: string, data: object): Promise<EncryptedPayload> {\n const crypto = getCrypto();\n const cryptoKey = await importAesKey(keyHex, ['encrypt']);\n const iv = crypto.getRandomValues(new Uint8Array(IV_LENGTH));\n const plaintext = new TextEncoder().encode(JSON.stringify(data));\n\n const ciphertextWithTag = await crypto.subtle.encrypt(\n { name: ALGORITHM, iv: toArrayBuffer(iv) },\n cryptoKey,\n toArrayBuffer(plaintext),\n );\n\n // AES-GCM appends the 16-byte auth tag at the end\n const ciphertextWithTagBytes = new Uint8Array(ciphertextWithTag);\n const ciphertext = ciphertextWithTagBytes.slice(0, -16);\n const tag = ciphertextWithTagBytes.slice(-16);\n\n return {\n ciphertext: bytesToHex(ciphertext),\n iv: bytesToHex(iv),\n tag: bytesToHex(tag),\n algorithm: 'AES-256-GCM',\n };\n}\n\n/**\n * Decrypt an EncryptedPayload back to the original object.\n */\nexport async function decrypt(keyHex: string, payload: EncryptedPayload): Promise<object> {\n const cryptoKey = await importAesKey(keyHex, ['decrypt']);\n const iv = hexToBytes(payload.iv);\n const ciphertext = hexToBytes(payload.ciphertext);\n const tag = hexToBytes(payload.tag);\n\n // Reassemble ciphertext + tag for AES-GCM\n const combined = new Uint8Array(ciphertext.length + tag.length);\n combined.set(ciphertext);\n combined.set(tag, ciphertext.length);\n\n const plaintext = await getCrypto().subtle.decrypt(\n { name: ALGORITHM, iv: toArrayBuffer(iv) },\n cryptoKey,\n toArrayBuffer(combined),\n );\n\n return JSON.parse(new TextDecoder().decode(plaintext)) as object;\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -117,16 +117,20 @@ interface MerkleInfo {
|
|
|
117
117
|
interface VerifyResult {
|
|
118
118
|
valid: boolean;
|
|
119
119
|
vault_uuid: string;
|
|
120
|
+
/** The freshly computed Merkle root (server: `computed_root`). */
|
|
120
121
|
root_hash: string;
|
|
121
|
-
|
|
122
|
-
|
|
122
|
+
/** The last stored Merkle root, or null if none has been persisted yet. */
|
|
123
|
+
stored_root: string | null;
|
|
124
|
+
entry_count: number;
|
|
123
125
|
}
|
|
124
126
|
interface Snapshot {
|
|
127
|
+
/** Snapshot id (server: `snapshot_uuid`). */
|
|
125
128
|
uuid: string;
|
|
126
129
|
vault_uuid: string;
|
|
130
|
+
/** Merkle root captured at snapshot time (server: `merkle_root`). */
|
|
127
131
|
root_hash: string;
|
|
128
132
|
entry_count: number;
|
|
129
|
-
|
|
133
|
+
storage_bytes: number;
|
|
130
134
|
created_at: string;
|
|
131
135
|
}
|
|
132
136
|
type EntryType = 'lesson' | 'heuristic' | 'fact' | 'preference' | 'pattern' | 'relationship' | 'negative' | 'procedural';
|
package/dist/index.d.ts
CHANGED
|
@@ -117,16 +117,20 @@ interface MerkleInfo {
|
|
|
117
117
|
interface VerifyResult {
|
|
118
118
|
valid: boolean;
|
|
119
119
|
vault_uuid: string;
|
|
120
|
+
/** The freshly computed Merkle root (server: `computed_root`). */
|
|
120
121
|
root_hash: string;
|
|
121
|
-
|
|
122
|
-
|
|
122
|
+
/** The last stored Merkle root, or null if none has been persisted yet. */
|
|
123
|
+
stored_root: string | null;
|
|
124
|
+
entry_count: number;
|
|
123
125
|
}
|
|
124
126
|
interface Snapshot {
|
|
127
|
+
/** Snapshot id (server: `snapshot_uuid`). */
|
|
125
128
|
uuid: string;
|
|
126
129
|
vault_uuid: string;
|
|
130
|
+
/** Merkle root captured at snapshot time (server: `merkle_root`). */
|
|
127
131
|
root_hash: string;
|
|
128
132
|
entry_count: number;
|
|
129
|
-
|
|
133
|
+
storage_bytes: number;
|
|
130
134
|
created_at: string;
|
|
131
135
|
}
|
|
132
136
|
type EntryType = 'lesson' | 'heuristic' | 'fact' | 'preference' | 'pattern' | 'relationship' | 'negative' | 'procedural';
|
package/dist/index.js
CHANGED
|
@@ -172,11 +172,13 @@ var EntriesResource = class {
|
|
|
172
172
|
return response.data;
|
|
173
173
|
}
|
|
174
174
|
async createBulk(vaultUuid, entries) {
|
|
175
|
-
const response = await this.http.post(
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
175
|
+
const response = await this.http.post(`/api/v1/vaults/${vaultUuid}/entries/bulk`, { entries });
|
|
176
|
+
const d = response.data;
|
|
177
|
+
return {
|
|
178
|
+
imported: d.created.map((e) => e.uuid),
|
|
179
|
+
failed: d.failed,
|
|
180
|
+
summary: { total: d.summary.total, imported: d.summary.created, failed: d.summary.failed }
|
|
181
|
+
};
|
|
180
182
|
}
|
|
181
183
|
async get(vaultUuid, entryUuid) {
|
|
182
184
|
const response = await this.http.get(
|
|
@@ -207,7 +209,8 @@ var OrganizationsResource = class {
|
|
|
207
209
|
{ name },
|
|
208
210
|
false
|
|
209
211
|
);
|
|
210
|
-
|
|
212
|
+
const { api_key, ...organization } = response.data;
|
|
213
|
+
return { ...organization, apiKey: api_key };
|
|
211
214
|
}
|
|
212
215
|
async get(uuid) {
|
|
213
216
|
const response = await this.http.get(`/api/v1/organizations/${uuid}`);
|
|
@@ -216,6 +219,16 @@ var OrganizationsResource = class {
|
|
|
216
219
|
};
|
|
217
220
|
|
|
218
221
|
// src/resources/vaults.ts
|
|
222
|
+
function mapSnapshot(s, vaultUuid) {
|
|
223
|
+
return {
|
|
224
|
+
uuid: s.snapshot_uuid ?? s.uuid ?? "",
|
|
225
|
+
vault_uuid: vaultUuid,
|
|
226
|
+
root_hash: s.merkle_root ?? s.root_hash ?? "",
|
|
227
|
+
entry_count: s.entry_count ?? 0,
|
|
228
|
+
storage_bytes: s.storage_bytes ?? 0,
|
|
229
|
+
created_at: s.created_at ?? ""
|
|
230
|
+
};
|
|
231
|
+
}
|
|
219
232
|
var VaultsResource = class {
|
|
220
233
|
constructor(http) {
|
|
221
234
|
this.http = http;
|
|
@@ -252,20 +265,27 @@ var VaultsResource = class {
|
|
|
252
265
|
return response.data;
|
|
253
266
|
}
|
|
254
267
|
async verify(uuid) {
|
|
255
|
-
const response = await this.http.post(
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
268
|
+
const response = await this.http.post(`/api/v1/vaults/${uuid}/verify`);
|
|
269
|
+
const d = response.data;
|
|
270
|
+
return {
|
|
271
|
+
valid: d.is_valid,
|
|
272
|
+
vault_uuid: d.vault_uuid,
|
|
273
|
+
root_hash: d.computed_root,
|
|
274
|
+
stored_root: d.stored_root,
|
|
275
|
+
entry_count: d.entry_count
|
|
276
|
+
};
|
|
259
277
|
}
|
|
260
278
|
async snapshot(uuid) {
|
|
261
279
|
const response = await this.http.post(
|
|
262
280
|
`/api/v1/vaults/${uuid}/snapshot`
|
|
263
281
|
);
|
|
264
|
-
return response.data;
|
|
282
|
+
return mapSnapshot(response.data, uuid);
|
|
265
283
|
}
|
|
266
284
|
async snapshots(uuid) {
|
|
267
|
-
const response = await this.http.get(
|
|
268
|
-
|
|
285
|
+
const response = await this.http.get(
|
|
286
|
+
`/api/v1/vaults/${uuid}/snapshots`
|
|
287
|
+
);
|
|
288
|
+
return (response.data ?? []).map((s) => mapSnapshot(s, uuid));
|
|
269
289
|
}
|
|
270
290
|
};
|
|
271
291
|
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/resources/agents.ts","../src/resources/entries.ts","../src/resources/organizations.ts","../src/resources/vaults.ts","../src/client.ts","../src/fingerprint.ts","../src/crypto.ts"],"names":["getCrypto"],"mappings":"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","file":"index.js","sourcesContent":["// ============================================================\n// Agent Imprint SDK — Typed Errors\n// ============================================================\n\nexport class ImprintApiError extends Error {\n public readonly status: number;\n public readonly code: string | undefined;\n public readonly body: unknown;\n\n constructor(\n message: string,\n status: number,\n body?: unknown,\n code?: string,\n ) {\n super(message);\n this.name = 'ImprintApiError';\n this.status = status;\n this.code = code;\n this.body = body;\n Object.setPrototypeOf(this, ImprintApiError.prototype);\n }\n}\n\nexport class ImprintValidationError extends ImprintApiError {\n public readonly errors: Record<string, string[]>;\n\n constructor(\n message: string,\n errors: Record<string, string[]>,\n body?: unknown,\n ) {\n super(message, 422, body, 'VALIDATION_ERROR');\n this.name = 'ImprintValidationError';\n this.errors = errors;\n Object.setPrototypeOf(this, ImprintValidationError.prototype);\n }\n}\n\nexport class ImprintAuthError extends ImprintApiError {\n constructor(message: string = 'Unauthorized — check your API key', body?: unknown) {\n super(message, 401, body, 'AUTH_ERROR');\n this.name = 'ImprintAuthError';\n Object.setPrototypeOf(this, ImprintAuthError.prototype);\n }\n}\n\nexport class ImprintNotFoundError extends ImprintApiError {\n constructor(message: string = 'Resource not found', body?: unknown) {\n super(message, 404, body, 'NOT_FOUND');\n this.name = 'ImprintNotFoundError';\n Object.setPrototypeOf(this, ImprintNotFoundError.prototype);\n }\n}\n","// ============================================================\n// Agent Imprint SDK — HTTP Transport\n// ============================================================\n\nimport {\n ImprintApiError,\n ImprintAuthError,\n ImprintNotFoundError,\n ImprintValidationError,\n} from './errors.js';\n\nexport class HttpClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n\n constructor(apiKey: string, baseUrl: string) {\n this.apiKey = apiKey;\n this.baseUrl = baseUrl.replace(/\\/$/, '');\n }\n\n private buildUrl(path: string, params?: Record<string, string | number | boolean | undefined>): string {\n const url = new URL(`${this.baseUrl}${path}`);\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n\n private async request<T>(\n method: string,\n path: string,\n options: {\n body?: unknown;\n params?: Record<string, string | number | boolean | undefined>;\n requiresAuth?: boolean;\n } = {},\n ): Promise<T> {\n const { body, params, requiresAuth = true } = options;\n const url = this.buildUrl(path, params);\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n };\n\n if (requiresAuth) {\n headers['X-API-Key'] = this.apiKey;\n }\n\n const response = await fetch(url, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n\n let responseBody: unknown;\n const contentType = response.headers.get('content-type') ?? '';\n if (contentType.includes('application/json')) {\n responseBody = await response.json();\n } else {\n responseBody = await response.text();\n }\n\n if (!response.ok) {\n await this.throwError(response.status, responseBody);\n }\n\n return responseBody as T;\n }\n\n private async throwError(status: number, body: unknown): Promise<never> {\n const bodyObj = typeof body === 'object' && body !== null ? body as Record<string, unknown> : {};\n const message = typeof bodyObj['message'] === 'string' ? bodyObj['message'] : `HTTP ${status}`;\n\n switch (status) {\n case 401:\n throw new ImprintAuthError(message, body);\n case 404:\n throw new ImprintNotFoundError(message, body);\n case 422: {\n const errors = (bodyObj['errors'] as Record<string, string[]>) ?? {};\n throw new ImprintValidationError(message, errors, body);\n }\n default:\n throw new ImprintApiError(message, status, body);\n }\n }\n\n async get<T>(path: string, params?: Record<string, string | number | boolean | undefined>, requiresAuth = true): Promise<T> {\n return this.request<T>('GET', path, { params, requiresAuth });\n }\n\n async post<T>(path: string, body?: unknown, requiresAuth = true): Promise<T> {\n return this.request<T>('POST', path, { body, requiresAuth });\n }\n\n async put<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>('PUT', path, { body });\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>('DELETE', path);\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type {\n Agent,\n CreateAgentParams,\n DiscoverResult,\n GenerateKeyResult,\n RecoverKeyResult,\n SplitKeyParams,\n SplitKeyResult,\n} from '../types.js';\n\nexport class AgentsResource {\n constructor(private readonly http: HttpClient) {}\n\n async create(params: CreateAgentParams): Promise<Agent> {\n const response = await this.http.post<{ data: Agent }>('/api/v1/agents', params);\n return response.data;\n }\n\n async list(): Promise<Agent[]> {\n const response = await this.http.get<{ data: Agent[] }>('/api/v1/agents');\n return response.data;\n }\n\n async get(uuid: string): Promise<Agent> {\n const response = await this.http.get<{ data: Agent }>(`/api/v1/agents/${uuid}`);\n return response.data;\n }\n\n async discover(fingerprint: string): Promise<DiscoverResult> {\n const response = await this.http.get<{ data: DiscoverResult }>(\n `/api/v1/agents/discover/${fingerprint}`,\n );\n return response.data;\n }\n\n async generateKey(uuid: string): Promise<GenerateKeyResult> {\n const response = await this.http.post<{ data: GenerateKeyResult }>(\n `/api/v1/agents/${uuid}/keys/generate`,\n );\n return response.data;\n }\n\n async splitKey(uuid: string, params: SplitKeyParams): Promise<SplitKeyResult> {\n const response = await this.http.post<{ data: SplitKeyResult }>(\n `/api/v1/agents/${uuid}/keys/split`,\n params,\n );\n return response.data;\n }\n\n async recoverKey(uuid: string, shares: string[]): Promise<RecoverKeyResult> {\n const response = await this.http.post<{ data: RecoverKeyResult }>(\n `/api/v1/agents/${uuid}/keys/recover`,\n { shares },\n );\n return response.data;\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type {\n BulkResult,\n CreateEntryParams,\n Entry,\n ListEntriesParams,\n PaginatedEntries,\n UpdateEntryParams,\n} from '../types.js';\n\nexport class EntriesResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(vaultUuid: string, params?: ListEntriesParams): Promise<PaginatedEntries> {\n const response = await this.http.get<{ data: Entry[]; meta: Record<string, unknown> }>(\n `/api/v1/vaults/${vaultUuid}/entries`,\n params as Record<string, string | number | boolean | undefined>,\n );\n const pagination = (response.meta?.pagination ?? {}) as PaginatedEntries['pagination'];\n return { entries: response.data, pagination };\n }\n\n async create(vaultUuid: string, entry: CreateEntryParams): Promise<Entry> {\n const response = await this.http.post<{ data: Entry }>(\n `/api/v1/vaults/${vaultUuid}/entries`,\n entry,\n );\n return response.data;\n }\n\n async createBulk(vaultUuid: string, entries: CreateEntryParams[]): Promise<BulkResult> {\n const response = await this.http.post<{ data: BulkResult }>(\n `/api/v1/vaults/${vaultUuid}/entries/bulk`,\n { entries },\n );\n return response.data;\n }\n\n async get(vaultUuid: string, entryUuid: string): Promise<Entry> {\n const response = await this.http.get<{ data: Entry }>(\n `/api/v1/vaults/${vaultUuid}/entries/${entryUuid}`,\n );\n return response.data;\n }\n\n async update(vaultUuid: string, entryUuid: string, data: UpdateEntryParams): Promise<Entry> {\n const response = await this.http.put<{ data: Entry }>(\n `/api/v1/vaults/${vaultUuid}/entries/${entryUuid}`,\n data,\n );\n return response.data;\n }\n\n async delete(vaultUuid: string, entryUuid: string): Promise<void> {\n await this.http.delete<void>(`/api/v1/vaults/${vaultUuid}/entries/${entryUuid}`);\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type { Organization, OrganizationWithKey } from '../types.js';\n\nexport class OrganizationsResource {\n constructor(private readonly http: HttpClient) {}\n\n async create(name: string): Promise<OrganizationWithKey> {\n const response = await this.http.post<{ data: Organization; api_key: string }>(\n '/api/v1/organizations',\n { name },\n false,\n );\n return { ...response.data, apiKey: response.api_key };\n }\n\n async get(uuid: string): Promise<Organization> {\n const response = await this.http.get<{ data: Organization }>(`/api/v1/organizations/${uuid}`);\n return response.data;\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type {\n CreateVaultParams,\n ImportResult,\n MerkleInfo,\n Snapshot,\n Vault,\n VaultExport,\n VaultStats,\n VerifyResult,\n} from '../types.js';\n\nexport class VaultsResource {\n constructor(private readonly http: HttpClient) {}\n\n async create(params: CreateVaultParams): Promise<Vault> {\n const response = await this.http.post<{ data: Vault }>('/api/v1/vaults', params);\n return response.data;\n }\n\n async list(): Promise<Vault[]> {\n const response = await this.http.get<{ data: Vault[] }>('/api/v1/vaults');\n return response.data;\n }\n\n async get(uuid: string): Promise<Vault> {\n const response = await this.http.get<{ data: Vault }>(`/api/v1/vaults/${uuid}`);\n return response.data;\n }\n\n async stats(uuid: string): Promise<VaultStats> {\n const response = await this.http.get<{ data: VaultStats }>(`/api/v1/vaults/${uuid}/stats`);\n return response.data;\n }\n\n async export(uuid: string): Promise<VaultExport> {\n const response = await this.http.get<{ data: VaultExport }>(`/api/v1/vaults/${uuid}/export`);\n return response.data;\n }\n\n async import(uuid: string, data: VaultExport): Promise<ImportResult> {\n const response = await this.http.post<{ data: ImportResult }>(\n `/api/v1/vaults/${uuid}/import`,\n data,\n );\n return response.data;\n }\n\n async merkle(uuid: string): Promise<MerkleInfo> {\n const response = await this.http.get<{ data: MerkleInfo }>(`/api/v1/vaults/${uuid}/merkle`);\n return response.data;\n }\n\n async verify(uuid: string): Promise<VerifyResult> {\n const response = await this.http.post<{ data: VerifyResult }>(\n `/api/v1/vaults/${uuid}/verify`,\n );\n return response.data;\n }\n\n async snapshot(uuid: string): Promise<Snapshot> {\n const response = await this.http.post<{ data: Snapshot }>(\n `/api/v1/vaults/${uuid}/snapshot`,\n );\n return response.data;\n }\n\n async snapshots(uuid: string): Promise<Snapshot[]> {\n const response = await this.http.get<{ data: Snapshot[] }>(`/api/v1/vaults/${uuid}/snapshots`);\n return response.data;\n }\n}\n","// ============================================================\n// Agent Imprint SDK — Main Client\n// ============================================================\n\nimport { HttpClient } from './http.js';\nimport { AgentsResource } from './resources/agents.js';\nimport { EntriesResource } from './resources/entries.js';\nimport { OrganizationsResource } from './resources/organizations.js';\nimport { VaultsResource } from './resources/vaults.js';\nimport type { ImprintClientConfig } from './types.js';\n\nexport const DEFAULT_BASE_URL = 'https://api.agentimprint.io';\n\n/**\n * ImprintClient — main entry point for the Agent Imprint SDK.\n *\n * @example\n * ```ts\n * const client = new ImprintClient({ apiKey: 'your-api-key' });\n * const agents = await client.agents.list();\n * ```\n */\nexport class ImprintClient {\n public readonly organizations: OrganizationsResource;\n public readonly agents: AgentsResource;\n public readonly vaults: VaultsResource;\n public readonly entries: EntriesResource;\n\n private readonly http: HttpClient;\n\n /**\n * Public discovery — check if an agent fingerprint exists (no auth required).\n * Uses the unauthenticated /api/v1/discover endpoint.\n */\n static async probe(fingerprint: string, baseUrl?: string): Promise<{ exists: boolean }> {\n const url = (baseUrl ?? DEFAULT_BASE_URL) + '/api/v1/discover/' + encodeURIComponent(fingerprint);\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('Discovery probe failed: ' + response.status);\n }\n const json = await response.json() as { data: { exists: boolean } };\n return json.data;\n }\n\n constructor(config: ImprintClientConfig) {\n if (!config.apiKey) {\n throw new Error('ImprintClient: apiKey is required');\n }\n\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n this.http = new HttpClient(config.apiKey, baseUrl);\n\n this.organizations = new OrganizationsResource(this.http);\n this.agents = new AgentsResource(this.http);\n this.vaults = new VaultsResource(this.http);\n this.entries = new EntriesResource(this.http);\n }\n}\n","// ============================================================\n// Agent Imprint SDK — Fingerprint Helper\n// Matches server-side algorithm:\n// sha256(model_family + sha256(core_purpose) + creator_identifier)\n// ============================================================\n\nimport type { FingerprintComponents } from './types.js';\n\nfunction getCrypto(): Crypto {\n if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n return globalThis.crypto;\n }\n throw new Error('Web Crypto API not available in this environment');\n}\n\nasync function sha256Hex(input: string): Promise<string> {\n const data = new TextEncoder().encode(input);\n const hashBuffer = await getCrypto().subtle.digest('SHA-256', data);\n const hashArray = new Uint8Array(hashBuffer);\n return Array.from(hashArray)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\n/**\n * Compute a deterministic agent fingerprint that matches the server-side algorithm.\n *\n * Algorithm: sha256(model_family + sha256(core_purpose) + creator_identifier)\n */\nexport async function computeFingerprint(params: FingerprintComponents): Promise<string> {\n const { model_family, core_purpose, creator_identifier } = params;\n const purposeHash = await sha256Hex(core_purpose);\n const combined = `${model_family}${purposeHash}${creator_identifier}`;\n return sha256Hex(combined);\n}\n","// ============================================================\n// Agent Imprint SDK — Encryption Helpers (Web Crypto API)\n// Works in Node.js 18+ (globalThis.crypto) and browsers\n// ============================================================\n\nimport type { EncryptedPayload } from './types.js';\n\nconst ALGORITHM = 'AES-GCM';\nconst KEY_LENGTH = 256;\nconst IV_LENGTH = 12; // 96-bit IV for AES-GCM\n\n// ─── Utility ───────────────────────────────────────────────\n\nfunction hexToBytes(hex: string): Uint8Array {\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16);\n }\n return bytes;\n}\n\nfunction toArrayBuffer(bytes: Uint8Array): ArrayBuffer {\n return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength) as ArrayBuffer;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nfunction getCrypto(): Crypto {\n if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n return globalThis.crypto;\n }\n throw new Error('Web Crypto API not available in this environment');\n}\n\nasync function importAesKey(keyHex: string, usages: KeyUsage[]): Promise<CryptoKey> {\n const keyBytes = hexToBytes(keyHex);\n return getCrypto().subtle.importKey('raw', toArrayBuffer(keyBytes), { name: ALGORITHM }, false, usages);\n}\n\n// ─── HKDF Key Derivation ───────────────────────────────────\n\nasync function hkdfDerive(masterKeyHex: string, info: string): Promise<string> {\n const crypto = getCrypto();\n const masterKeyBytes = hexToBytes(masterKeyHex);\n\n const baseKey = await crypto.subtle.importKey(\n 'raw',\n toArrayBuffer(masterKeyBytes),\n { name: 'HKDF' },\n false,\n ['deriveKey'],\n );\n\n const infoBytes = new TextEncoder().encode(info);\n const derivedKey = await crypto.subtle.deriveKey(\n {\n name: 'HKDF',\n hash: 'SHA-256',\n salt: new Uint8Array(32),\n info: infoBytes,\n },\n baseKey,\n { name: ALGORITHM, length: KEY_LENGTH },\n true,\n ['encrypt', 'decrypt'],\n );\n\n const exported = await crypto.subtle.exportKey('raw', derivedKey);\n return bytesToHex(new Uint8Array(exported));\n}\n\n// ─── Public API ────────────────────────────────────────────\n\n/**\n * Generate a cryptographically secure random 256-bit key (64 hex chars).\n */\nexport function generateKey(): string {\n const bytes = new Uint8Array(32);\n getCrypto().getRandomValues(bytes);\n return bytesToHex(bytes);\n}\n\n/**\n * Derive a vault-specific key from a master key and vault UUID.\n */\nexport async function deriveVaultKey(masterKey: string, vaultUuid: string): Promise<string> {\n return hkdfDerive(masterKey, `vault:${vaultUuid}`);\n}\n\n/**\n * Derive an entry-specific key from a vault key and entry UUID.\n */\nexport async function deriveEntryKey(vaultKey: string, entryUuid: string): Promise<string> {\n return hkdfDerive(vaultKey, `entry:${entryUuid}`);\n}\n\n/**\n * Encrypt a JSON-serializable object with AES-256-GCM.\n * Returns an EncryptedPayload with ciphertext, iv, and tag (all hex-encoded).\n */\nexport async function encrypt(keyHex: string, data: object): Promise<EncryptedPayload> {\n const crypto = getCrypto();\n const cryptoKey = await importAesKey(keyHex, ['encrypt']);\n const iv = crypto.getRandomValues(new Uint8Array(IV_LENGTH));\n const plaintext = new TextEncoder().encode(JSON.stringify(data));\n\n const ciphertextWithTag = await crypto.subtle.encrypt(\n { name: ALGORITHM, iv: toArrayBuffer(iv) },\n cryptoKey,\n toArrayBuffer(plaintext),\n );\n\n // AES-GCM appends the 16-byte auth tag at the end\n const ciphertextWithTagBytes = new Uint8Array(ciphertextWithTag);\n const ciphertext = ciphertextWithTagBytes.slice(0, -16);\n const tag = ciphertextWithTagBytes.slice(-16);\n\n return {\n ciphertext: bytesToHex(ciphertext),\n iv: bytesToHex(iv),\n tag: bytesToHex(tag),\n algorithm: 'AES-256-GCM',\n };\n}\n\n/**\n * Decrypt an EncryptedPayload back to the original object.\n */\nexport async function decrypt(keyHex: string, payload: EncryptedPayload): Promise<object> {\n const cryptoKey = await importAesKey(keyHex, ['decrypt']);\n const iv = hexToBytes(payload.iv);\n const ciphertext = hexToBytes(payload.ciphertext);\n const tag = hexToBytes(payload.tag);\n\n // Reassemble ciphertext + tag for AES-GCM\n const combined = new Uint8Array(ciphertext.length + tag.length);\n combined.set(ciphertext);\n combined.set(tag, ciphertext.length);\n\n const plaintext = await getCrypto().subtle.decrypt(\n { name: ALGORITHM, iv: toArrayBuffer(iv) },\n cryptoKey,\n toArrayBuffer(combined),\n );\n\n return JSON.parse(new TextDecoder().decode(plaintext)) as object;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/resources/agents.ts","../src/resources/entries.ts","../src/resources/organizations.ts","../src/resources/vaults.ts","../src/client.ts","../src/fingerprint.ts","../src/crypto.ts"],"names":["getCrypto"],"mappings":"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","file":"index.js","sourcesContent":["// ============================================================\n// Agent Imprint SDK — Typed Errors\n// ============================================================\n\nexport class ImprintApiError extends Error {\n public readonly status: number;\n public readonly code: string | undefined;\n public readonly body: unknown;\n\n constructor(\n message: string,\n status: number,\n body?: unknown,\n code?: string,\n ) {\n super(message);\n this.name = 'ImprintApiError';\n this.status = status;\n this.code = code;\n this.body = body;\n Object.setPrototypeOf(this, ImprintApiError.prototype);\n }\n}\n\nexport class ImprintValidationError extends ImprintApiError {\n public readonly errors: Record<string, string[]>;\n\n constructor(\n message: string,\n errors: Record<string, string[]>,\n body?: unknown,\n ) {\n super(message, 422, body, 'VALIDATION_ERROR');\n this.name = 'ImprintValidationError';\n this.errors = errors;\n Object.setPrototypeOf(this, ImprintValidationError.prototype);\n }\n}\n\nexport class ImprintAuthError extends ImprintApiError {\n constructor(message: string = 'Unauthorized — check your API key', body?: unknown) {\n super(message, 401, body, 'AUTH_ERROR');\n this.name = 'ImprintAuthError';\n Object.setPrototypeOf(this, ImprintAuthError.prototype);\n }\n}\n\nexport class ImprintNotFoundError extends ImprintApiError {\n constructor(message: string = 'Resource not found', body?: unknown) {\n super(message, 404, body, 'NOT_FOUND');\n this.name = 'ImprintNotFoundError';\n Object.setPrototypeOf(this, ImprintNotFoundError.prototype);\n }\n}\n","// ============================================================\n// Agent Imprint SDK — HTTP Transport\n// ============================================================\n\nimport {\n ImprintApiError,\n ImprintAuthError,\n ImprintNotFoundError,\n ImprintValidationError,\n} from './errors.js';\n\nexport class HttpClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n\n constructor(apiKey: string, baseUrl: string) {\n this.apiKey = apiKey;\n this.baseUrl = baseUrl.replace(/\\/$/, '');\n }\n\n private buildUrl(path: string, params?: Record<string, string | number | boolean | undefined>): string {\n const url = new URL(`${this.baseUrl}${path}`);\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n\n private async request<T>(\n method: string,\n path: string,\n options: {\n body?: unknown;\n params?: Record<string, string | number | boolean | undefined>;\n requiresAuth?: boolean;\n } = {},\n ): Promise<T> {\n const { body, params, requiresAuth = true } = options;\n const url = this.buildUrl(path, params);\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n };\n\n if (requiresAuth) {\n headers['X-API-Key'] = this.apiKey;\n }\n\n const response = await fetch(url, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n\n let responseBody: unknown;\n const contentType = response.headers.get('content-type') ?? '';\n if (contentType.includes('application/json')) {\n responseBody = await response.json();\n } else {\n responseBody = await response.text();\n }\n\n if (!response.ok) {\n await this.throwError(response.status, responseBody);\n }\n\n return responseBody as T;\n }\n\n private async throwError(status: number, body: unknown): Promise<never> {\n const bodyObj = typeof body === 'object' && body !== null ? body as Record<string, unknown> : {};\n const message = typeof bodyObj['message'] === 'string' ? bodyObj['message'] : `HTTP ${status}`;\n\n switch (status) {\n case 401:\n throw new ImprintAuthError(message, body);\n case 404:\n throw new ImprintNotFoundError(message, body);\n case 422: {\n const errors = (bodyObj['errors'] as Record<string, string[]>) ?? {};\n throw new ImprintValidationError(message, errors, body);\n }\n default:\n throw new ImprintApiError(message, status, body);\n }\n }\n\n async get<T>(path: string, params?: Record<string, string | number | boolean | undefined>, requiresAuth = true): Promise<T> {\n return this.request<T>('GET', path, { params, requiresAuth });\n }\n\n async post<T>(path: string, body?: unknown, requiresAuth = true): Promise<T> {\n return this.request<T>('POST', path, { body, requiresAuth });\n }\n\n async put<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>('PUT', path, { body });\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>('DELETE', path);\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type {\n Agent,\n CreateAgentParams,\n DiscoverResult,\n GenerateKeyResult,\n RecoverKeyResult,\n SplitKeyParams,\n SplitKeyResult,\n} from '../types.js';\n\nexport class AgentsResource {\n constructor(private readonly http: HttpClient) {}\n\n async create(params: CreateAgentParams): Promise<Agent> {\n const response = await this.http.post<{ data: Agent }>('/api/v1/agents', params);\n return response.data;\n }\n\n async list(): Promise<Agent[]> {\n const response = await this.http.get<{ data: Agent[] }>('/api/v1/agents');\n return response.data;\n }\n\n async get(uuid: string): Promise<Agent> {\n const response = await this.http.get<{ data: Agent }>(`/api/v1/agents/${uuid}`);\n return response.data;\n }\n\n async discover(fingerprint: string): Promise<DiscoverResult> {\n const response = await this.http.get<{ data: DiscoverResult }>(\n `/api/v1/agents/discover/${fingerprint}`,\n );\n return response.data;\n }\n\n async generateKey(uuid: string): Promise<GenerateKeyResult> {\n const response = await this.http.post<{ data: GenerateKeyResult }>(\n `/api/v1/agents/${uuid}/keys/generate`,\n );\n return response.data;\n }\n\n async splitKey(uuid: string, params: SplitKeyParams): Promise<SplitKeyResult> {\n const response = await this.http.post<{ data: SplitKeyResult }>(\n `/api/v1/agents/${uuid}/keys/split`,\n params,\n );\n return response.data;\n }\n\n async recoverKey(uuid: string, shares: string[]): Promise<RecoverKeyResult> {\n const response = await this.http.post<{ data: RecoverKeyResult }>(\n `/api/v1/agents/${uuid}/keys/recover`,\n { shares },\n );\n return response.data;\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type {\n BulkResult,\n CreateEntryParams,\n Entry,\n ListEntriesParams,\n PaginatedEntries,\n UpdateEntryParams,\n} from '../types.js';\n\nexport class EntriesResource {\n constructor(private readonly http: HttpClient) {}\n\n async list(vaultUuid: string, params?: ListEntriesParams): Promise<PaginatedEntries> {\n const response = await this.http.get<{ data: Entry[]; meta: Record<string, unknown> }>(\n `/api/v1/vaults/${vaultUuid}/entries`,\n params as Record<string, string | number | boolean | undefined>,\n );\n const pagination = (response.meta?.pagination ?? {}) as PaginatedEntries['pagination'];\n return { entries: response.data, pagination };\n }\n\n async create(vaultUuid: string, entry: CreateEntryParams): Promise<Entry> {\n const response = await this.http.post<{ data: Entry }>(\n `/api/v1/vaults/${vaultUuid}/entries`,\n entry,\n );\n return response.data;\n }\n\n async createBulk(vaultUuid: string, entries: CreateEntryParams[]): Promise<BulkResult> {\n const response = await this.http.post<{\n data: {\n created: Array<{ uuid: string }>;\n failed: BulkResult['failed'];\n summary: { total: number; created: number; failed: number };\n };\n }>(`/api/v1/vaults/${vaultUuid}/entries/bulk`, { entries });\n const d = response.data;\n return {\n imported: d.created.map((e) => e.uuid),\n failed: d.failed,\n summary: { total: d.summary.total, imported: d.summary.created, failed: d.summary.failed },\n };\n }\n\n async get(vaultUuid: string, entryUuid: string): Promise<Entry> {\n const response = await this.http.get<{ data: Entry }>(\n `/api/v1/vaults/${vaultUuid}/entries/${entryUuid}`,\n );\n return response.data;\n }\n\n async update(vaultUuid: string, entryUuid: string, data: UpdateEntryParams): Promise<Entry> {\n const response = await this.http.put<{ data: Entry }>(\n `/api/v1/vaults/${vaultUuid}/entries/${entryUuid}`,\n data,\n );\n return response.data;\n }\n\n async delete(vaultUuid: string, entryUuid: string): Promise<void> {\n await this.http.delete<void>(`/api/v1/vaults/${vaultUuid}/entries/${entryUuid}`);\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type { Organization, OrganizationWithKey } from '../types.js';\n\nexport class OrganizationsResource {\n constructor(private readonly http: HttpClient) {}\n\n async create(name: string): Promise<OrganizationWithKey> {\n const response = await this.http.post<{ data: Organization & { api_key: string } }>(\n '/api/v1/organizations',\n { name },\n false,\n );\n const { api_key, ...organization } = response.data;\n return { ...organization, apiKey: api_key };\n }\n\n async get(uuid: string): Promise<Organization> {\n const response = await this.http.get<{ data: Organization }>(`/api/v1/organizations/${uuid}`);\n return response.data;\n }\n}\n","import type { HttpClient } from '../http.js';\nimport type {\n CreateVaultParams,\n ImportResult,\n MerkleInfo,\n Snapshot,\n Vault,\n VaultExport,\n VaultStats,\n VerifyResult,\n} from '../types.js';\n\n/** Raw snapshot record as returned by the API (field names differ from the public Snapshot type). */\ninterface RawSnapshot {\n snapshot_uuid?: string;\n uuid?: string;\n merkle_root?: string;\n root_hash?: string;\n entry_count?: number;\n storage_bytes?: number;\n created_at?: string;\n}\n\nfunction mapSnapshot(s: RawSnapshot, vaultUuid: string): Snapshot {\n return {\n uuid: (s.snapshot_uuid ?? s.uuid ?? '') as string,\n vault_uuid: vaultUuid,\n root_hash: (s.merkle_root ?? s.root_hash ?? '') as string,\n entry_count: s.entry_count ?? 0,\n storage_bytes: s.storage_bytes ?? 0,\n created_at: s.created_at ?? '',\n };\n}\n\nexport class VaultsResource {\n constructor(private readonly http: HttpClient) {}\n\n async create(params: CreateVaultParams): Promise<Vault> {\n const response = await this.http.post<{ data: Vault }>('/api/v1/vaults', params);\n return response.data;\n }\n\n async list(): Promise<Vault[]> {\n const response = await this.http.get<{ data: Vault[] }>('/api/v1/vaults');\n return response.data;\n }\n\n async get(uuid: string): Promise<Vault> {\n const response = await this.http.get<{ data: Vault }>(`/api/v1/vaults/${uuid}`);\n return response.data;\n }\n\n async stats(uuid: string): Promise<VaultStats> {\n const response = await this.http.get<{ data: VaultStats }>(`/api/v1/vaults/${uuid}/stats`);\n return response.data;\n }\n\n async export(uuid: string): Promise<VaultExport> {\n const response = await this.http.get<{ data: VaultExport }>(`/api/v1/vaults/${uuid}/export`);\n return response.data;\n }\n\n async import(uuid: string, data: VaultExport): Promise<ImportResult> {\n const response = await this.http.post<{ data: ImportResult }>(\n `/api/v1/vaults/${uuid}/import`,\n data,\n );\n return response.data;\n }\n\n async merkle(uuid: string): Promise<MerkleInfo> {\n const response = await this.http.get<{ data: MerkleInfo }>(`/api/v1/vaults/${uuid}/merkle`);\n return response.data;\n }\n\n async verify(uuid: string): Promise<VerifyResult> {\n const response = await this.http.post<{\n data: {\n vault_uuid: string;\n computed_root: string;\n stored_root: string | null;\n is_valid: boolean;\n entry_count: number;\n };\n }>(`/api/v1/vaults/${uuid}/verify`);\n const d = response.data;\n return {\n valid: d.is_valid,\n vault_uuid: d.vault_uuid,\n root_hash: d.computed_root,\n stored_root: d.stored_root,\n entry_count: d.entry_count,\n };\n }\n\n async snapshot(uuid: string): Promise<Snapshot> {\n const response = await this.http.post<{ data: RawSnapshot }>(\n `/api/v1/vaults/${uuid}/snapshot`,\n );\n return mapSnapshot(response.data, uuid);\n }\n\n async snapshots(uuid: string): Promise<Snapshot[]> {\n const response = await this.http.get<{ data: RawSnapshot[] }>(\n `/api/v1/vaults/${uuid}/snapshots`,\n );\n return (response.data ?? []).map((s) => mapSnapshot(s, uuid));\n }\n}\n","// ============================================================\n// Agent Imprint SDK — Main Client\n// ============================================================\n\nimport { HttpClient } from './http.js';\nimport { AgentsResource } from './resources/agents.js';\nimport { EntriesResource } from './resources/entries.js';\nimport { OrganizationsResource } from './resources/organizations.js';\nimport { VaultsResource } from './resources/vaults.js';\nimport type { ImprintClientConfig } from './types.js';\n\nexport const DEFAULT_BASE_URL = 'https://api.agentimprint.io';\n\n/**\n * ImprintClient — main entry point for the Agent Imprint SDK.\n *\n * @example\n * ```ts\n * const client = new ImprintClient({ apiKey: 'your-api-key' });\n * const agents = await client.agents.list();\n * ```\n */\nexport class ImprintClient {\n public readonly organizations: OrganizationsResource;\n public readonly agents: AgentsResource;\n public readonly vaults: VaultsResource;\n public readonly entries: EntriesResource;\n\n private readonly http: HttpClient;\n\n /**\n * Public discovery — check if an agent fingerprint exists (no auth required).\n * Uses the unauthenticated /api/v1/discover endpoint.\n */\n static async probe(fingerprint: string, baseUrl?: string): Promise<{ exists: boolean }> {\n const url = (baseUrl ?? DEFAULT_BASE_URL) + '/api/v1/discover/' + encodeURIComponent(fingerprint);\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('Discovery probe failed: ' + response.status);\n }\n const json = await response.json() as { data: { exists: boolean } };\n return json.data;\n }\n\n constructor(config: ImprintClientConfig) {\n if (!config.apiKey) {\n throw new Error('ImprintClient: apiKey is required');\n }\n\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n this.http = new HttpClient(config.apiKey, baseUrl);\n\n this.organizations = new OrganizationsResource(this.http);\n this.agents = new AgentsResource(this.http);\n this.vaults = new VaultsResource(this.http);\n this.entries = new EntriesResource(this.http);\n }\n}\n","// ============================================================\n// Agent Imprint SDK — Fingerprint Helper\n// Matches server-side algorithm:\n// sha256(model_family + sha256(core_purpose) + creator_identifier)\n// ============================================================\n\nimport type { FingerprintComponents } from './types.js';\n\nfunction getCrypto(): Crypto {\n if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n return globalThis.crypto;\n }\n throw new Error('Web Crypto API not available in this environment');\n}\n\nasync function sha256Hex(input: string): Promise<string> {\n const data = new TextEncoder().encode(input);\n const hashBuffer = await getCrypto().subtle.digest('SHA-256', data);\n const hashArray = new Uint8Array(hashBuffer);\n return Array.from(hashArray)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\n/**\n * Compute a deterministic agent fingerprint that matches the server-side algorithm.\n *\n * Algorithm: sha256(model_family + sha256(core_purpose) + creator_identifier)\n */\nexport async function computeFingerprint(params: FingerprintComponents): Promise<string> {\n const { model_family, core_purpose, creator_identifier } = params;\n const purposeHash = await sha256Hex(core_purpose);\n const combined = `${model_family}${purposeHash}${creator_identifier}`;\n return sha256Hex(combined);\n}\n","// ============================================================\n// Agent Imprint SDK — Encryption Helpers (Web Crypto API)\n// Works in Node.js 18+ (globalThis.crypto) and browsers\n// ============================================================\n\nimport type { EncryptedPayload } from './types.js';\n\nconst ALGORITHM = 'AES-GCM';\nconst KEY_LENGTH = 256;\nconst IV_LENGTH = 12; // 96-bit IV for AES-GCM\n\n// ─── Utility ───────────────────────────────────────────────\n\nfunction hexToBytes(hex: string): Uint8Array {\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = parseInt(hex.slice(i, i + 2), 16);\n }\n return bytes;\n}\n\nfunction toArrayBuffer(bytes: Uint8Array): ArrayBuffer {\n return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength) as ArrayBuffer;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nfunction getCrypto(): Crypto {\n if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n return globalThis.crypto;\n }\n throw new Error('Web Crypto API not available in this environment');\n}\n\nasync function importAesKey(keyHex: string, usages: KeyUsage[]): Promise<CryptoKey> {\n const keyBytes = hexToBytes(keyHex);\n return getCrypto().subtle.importKey('raw', toArrayBuffer(keyBytes), { name: ALGORITHM }, false, usages);\n}\n\n// ─── HKDF Key Derivation ───────────────────────────────────\n\nasync function hkdfDerive(masterKeyHex: string, info: string): Promise<string> {\n const crypto = getCrypto();\n const masterKeyBytes = hexToBytes(masterKeyHex);\n\n const baseKey = await crypto.subtle.importKey(\n 'raw',\n toArrayBuffer(masterKeyBytes),\n { name: 'HKDF' },\n false,\n ['deriveKey'],\n );\n\n const infoBytes = new TextEncoder().encode(info);\n const derivedKey = await crypto.subtle.deriveKey(\n {\n name: 'HKDF',\n hash: 'SHA-256',\n salt: new Uint8Array(32),\n info: infoBytes,\n },\n baseKey,\n { name: ALGORITHM, length: KEY_LENGTH },\n true,\n ['encrypt', 'decrypt'],\n );\n\n const exported = await crypto.subtle.exportKey('raw', derivedKey);\n return bytesToHex(new Uint8Array(exported));\n}\n\n// ─── Public API ────────────────────────────────────────────\n\n/**\n * Generate a cryptographically secure random 256-bit key (64 hex chars).\n */\nexport function generateKey(): string {\n const bytes = new Uint8Array(32);\n getCrypto().getRandomValues(bytes);\n return bytesToHex(bytes);\n}\n\n/**\n * Derive a vault-specific key from a master key and vault UUID.\n */\nexport async function deriveVaultKey(masterKey: string, vaultUuid: string): Promise<string> {\n return hkdfDerive(masterKey, `vault:${vaultUuid}`);\n}\n\n/**\n * Derive an entry-specific key from a vault key and entry UUID.\n */\nexport async function deriveEntryKey(vaultKey: string, entryUuid: string): Promise<string> {\n return hkdfDerive(vaultKey, `entry:${entryUuid}`);\n}\n\n/**\n * Encrypt a JSON-serializable object with AES-256-GCM.\n * Returns an EncryptedPayload with ciphertext, iv, and tag (all hex-encoded).\n */\nexport async function encrypt(keyHex: string, data: object): Promise<EncryptedPayload> {\n const crypto = getCrypto();\n const cryptoKey = await importAesKey(keyHex, ['encrypt']);\n const iv = crypto.getRandomValues(new Uint8Array(IV_LENGTH));\n const plaintext = new TextEncoder().encode(JSON.stringify(data));\n\n const ciphertextWithTag = await crypto.subtle.encrypt(\n { name: ALGORITHM, iv: toArrayBuffer(iv) },\n cryptoKey,\n toArrayBuffer(plaintext),\n );\n\n // AES-GCM appends the 16-byte auth tag at the end\n const ciphertextWithTagBytes = new Uint8Array(ciphertextWithTag);\n const ciphertext = ciphertextWithTagBytes.slice(0, -16);\n const tag = ciphertextWithTagBytes.slice(-16);\n\n return {\n ciphertext: bytesToHex(ciphertext),\n iv: bytesToHex(iv),\n tag: bytesToHex(tag),\n algorithm: 'AES-256-GCM',\n };\n}\n\n/**\n * Decrypt an EncryptedPayload back to the original object.\n */\nexport async function decrypt(keyHex: string, payload: EncryptedPayload): Promise<object> {\n const cryptoKey = await importAesKey(keyHex, ['decrypt']);\n const iv = hexToBytes(payload.iv);\n const ciphertext = hexToBytes(payload.ciphertext);\n const tag = hexToBytes(payload.tag);\n\n // Reassemble ciphertext + tag for AES-GCM\n const combined = new Uint8Array(ciphertext.length + tag.length);\n combined.set(ciphertext);\n combined.set(tag, ciphertext.length);\n\n const plaintext = await getCrypto().subtle.decrypt(\n { name: ALGORITHM, iv: toArrayBuffer(iv) },\n cryptoKey,\n toArrayBuffer(combined),\n );\n\n return JSON.parse(new TextDecoder().decode(plaintext)) as object;\n}\n"]}
|