@agentlair/sdk 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.d.ts CHANGED
@@ -1,156 +1,318 @@
1
1
  /**
2
- * @agentlair/sdk — AgentLairClient
2
+ * @agentlair/sdk — AgentLair + AgentLairClient
3
3
  *
4
- * Official TypeScript/JavaScript SDK for AgentLair.
5
- * Zero dependencies. Works in Node 18, Bun, Deno, and modern browsers.
4
+ * `AgentLair` is the primary class. Accepts an API key string directly.
5
+ * `AgentLairClient` is the legacy class (accepts options object) still fully supported.
6
6
  *
7
- * @example
7
+ * @example Three-line onboarding
8
+ * const lair = new AgentLair(process.env.AGENTLAIR_API_KEY!);
9
+ * const inbox = await lair.email.claim('my-agent'); // auto-expands to my-agent@agentlair.dev
10
+ * const { messages } = await lair.email.inbox('my-agent@agentlair.dev');
11
+ *
12
+ * @example Full flow
8
13
  * // Create a new account (no API key needed)
9
- * const { api_key, account_id } = await AgentLairClient.createAccount({ name: 'my-agent' });
14
+ * const { api_key } = await AgentLair.createAccount({ name: 'my-agent' });
10
15
  *
11
- * @example
12
- * // Use an existing key
13
- * const client = new AgentLairClient({ apiKey: process.env.AGENTLAIR_API_KEY! });
14
- * await client.claimAddress({ address: 'my-agent@agentlair.dev' });
15
- * await client.sendEmail({ from: 'my-agent@agentlair.dev', to: 'user@example.com', subject: 'Hello', text: 'Hi!' });
16
- * const inbox = await client.getInbox({ address: 'my-agent@agentlair.dev' });
17
- */
18
- import type { AgentLairClientOptions, ClaimAddressOptions, ClaimAddressResult, CreateAccountOptions, CreateAccountResult, FullMessage, GetInboxOptions, GetInboxResult, ReadMessageOptions, SendEmailOptions, SendEmailResult, VaultDeleteOptions, VaultDeleteResult, VaultGetOptions, VaultGetResult, VaultListResult, VaultPutOptions, VaultPutResult } from './types.js';
19
- /**
20
- * vault.put / vault.get / vault.list / vault.delete
16
+ * const lair = new AgentLair(api_key);
17
+ * await lair.email.claim('my-agent');
18
+ * await lair.email.send({ from: 'my-agent@agentlair.dev', to: 'user@example.com', subject: 'Hello', text: 'Hi!' });
19
+ * const { messages } = await lair.email.inbox('my-agent@agentlair.dev');
21
20
  *
22
- * The AgentLair Vault is a zero-knowledge secret store.
23
- * The server stores opaque encrypted blobs — plaintext never leaves your client.
24
- * Use @agentlair/vault-crypto for client-side encryption helpers.
21
+ * // Vault: store secrets (zero-knowledge use @agentlair/vault-crypto to encrypt first)
22
+ * await lair.vault.put('openai-key', { ciphertext: encryptedBlob });
23
+ * const { ciphertext } = await lair.vault.get('openai-key');
25
24
  */
26
- declare class VaultNamespace {
27
- private readonly _request;
28
- constructor(_request: <T>(method: string, path: string, opts?: {
29
- body?: unknown;
30
- query?: Record<string, string>;
31
- }) => Promise<T>);
25
+ import type { AccountMeResult, AgentLairOptions, BillingResult, ClaimAddressOptions, ClaimAddressResult, CreateAccountOptions, CreateAccountResult, DeleteMessageResult, DeleteWebhookResult, FullMessage, GetInboxOptions, GetInboxResult, ListAddressesResult, ListWebhooksOptions, ListWebhooksResult, Observation, ObservationsTopicsResult, OutboxResult, ReadMessageOptions, ReadObservationsOptions, ReadObservationsResult, RegisterWebhookOptions, SendEmailOptions, SendEmailResult, Stack, CreateStackOptions, ListStacksResult, UpdateMessageOptions, UpdateMessageResult, UsageResult, VaultDeleteOptions, VaultDeleteResult, VaultGetOptions, VaultGetResult, VaultListResult, VaultPutOptions, VaultPutResult, WriteObservationOptions } from './types.js';
26
+ type RequestFn = <T>(method: string, path: string, opts?: {
27
+ body?: unknown;
28
+ query?: Record<string, string>;
29
+ }) => Promise<T>;
30
+ declare class WebhooksNamespace {
31
+ private readonly _req;
32
+ constructor(_req: RequestFn);
32
33
  /**
33
- * Store an encrypted blob in the Vault.
34
+ * Register a webhook URL to receive real-time `email.received` events.
34
35
  *
35
- * Each PUT creates a new version (append-only, versioned).
36
- * Free tier: up to 50 keys, 3 versions each.
36
+ * @example
37
+ * const hook = await lair.email.webhooks.create({
38
+ * address: 'my-agent@agentlair.dev',
39
+ * url: 'https://myserver.com/webhook',
40
+ * secret: 'my-secret',
41
+ * });
42
+ */
43
+ create(options: RegisterWebhookOptions): Promise<{
44
+ id: string;
45
+ address: string;
46
+ url: string;
47
+ created_at: string;
48
+ }>;
49
+ /**
50
+ * List registered webhooks, optionally filtered by address.
37
51
  *
38
52
  * @example
39
- * // With @agentlair/vault-crypto:
40
- * const vc = VaultCrypto.fromSeed(seed);
41
- * const ciphertext = await vc.encrypt('sk-openai-...', 'openai-key');
42
- * await client.vault.put('openai-key', { ciphertext });
53
+ * const { webhooks } = await lair.email.webhooks.list();
43
54
  */
44
- put(key: string, options: VaultPutOptions): Promise<VaultPutResult>;
55
+ list(options?: ListWebhooksOptions): Promise<ListWebhooksResult>;
56
+ /**
57
+ * Delete a webhook by ID.
58
+ *
59
+ * @example
60
+ * await lair.email.webhooks.delete('wh_abc123');
61
+ */
62
+ delete(id: string): Promise<DeleteWebhookResult>;
63
+ }
64
+ declare class EmailNamespace {
65
+ private readonly _req;
66
+ /** Webhook management: webhooks.create / webhooks.list / webhooks.delete */
67
+ readonly webhooks: WebhooksNamespace;
68
+ constructor(_req: RequestFn);
45
69
  /**
46
- * Retrieve an encrypted blob from the Vault.
70
+ * Claim an @agentlair.dev email address.
47
71
  *
48
- * Returns the latest version by default. Pass `version` for a specific one.
72
+ * Pass a short name (e.g. `"my-agent"`) and it auto-expands to `my-agent@agentlair.dev`.
49
73
  *
50
74
  * @example
51
- * const { ciphertext } = await client.vault.get('openai-key');
52
- * // With @agentlair/vault-crypto:
53
- * const plaintext = await vc.decrypt(ciphertext, 'openai-key');
75
+ * await lair.email.claim('my-agent'); // → my-agent@agentlair.dev
76
+ * await lair.email.claim('my-agent@agentlair.dev'); // also works
54
77
  */
55
- get(key: string, options?: VaultGetOptions): Promise<VaultGetResult>;
78
+ claim(address: string, options?: Omit<ClaimAddressOptions, 'address'>): Promise<ClaimAddressResult>;
56
79
  /**
57
- * List all Vault keys for this account (metadata only — no ciphertext).
80
+ * List all @agentlair.dev addresses claimed by this account.
58
81
  *
59
82
  * @example
60
- * const { keys, count, limit } = await client.vault.list();
83
+ * const { addresses } = await lair.email.addresses();
61
84
  */
62
- list(): Promise<VaultListResult>;
85
+ addresses(): Promise<ListAddressesResult>;
63
86
  /**
64
- * Delete a Vault key (all versions) or a specific version.
87
+ * Get inbox messages (previews no full body).
88
+ * Use `read()` for the full body of a specific message.
65
89
  *
66
- * Pass `version` to delete only that version. Omit to delete all versions.
90
+ * @example
91
+ * const { messages } = await lair.email.inbox('my-agent@agentlair.dev');
92
+ * const { messages } = await lair.email.inbox('my-agent', { limit: 5 });
93
+ */
94
+ inbox(address: string, options?: Omit<GetInboxOptions, 'address'>): Promise<GetInboxResult>;
95
+ /**
96
+ * Read the full body of a message. Marks as read.
67
97
  *
68
98
  * @example
69
- * await client.vault.delete('openai-key'); // delete all versions
70
- * await client.vault.delete('openai-key', { version: 2 }); // delete v2 only
99
+ * const msg = await lair.email.read(inboxMsg.message_id_url, 'my-agent@agentlair.dev');
100
+ * console.log(msg.body);
71
101
  */
72
- delete(key: string, options?: VaultDeleteOptions): Promise<VaultDeleteResult>;
73
- }
74
- export declare class AgentLairClient {
75
- private readonly _apiKey;
76
- private readonly _baseUrl;
102
+ read(messageId: string, address: string): Promise<FullMessage>;
77
103
  /**
78
- * Namespaced Vault operations: vault.put / vault.get / vault.list / vault.delete
104
+ * Delete a message.
105
+ *
106
+ * @example
107
+ * await lair.email.deleteMessage(inboxMsg.message_id_url, 'my-agent@agentlair.dev');
79
108
  */
80
- readonly vault: VaultNamespace;
81
- constructor(options: AgentLairClientOptions);
82
- private _request;
109
+ deleteMessage(messageId: string, address: string): Promise<DeleteMessageResult>;
83
110
  /**
84
- * Create a new AgentLair account and get an API key.
111
+ * Update message properties (mark read/unread).
85
112
  *
86
- * No existing account or API key needed — this is the bootstrapping method.
87
- * **Save the returned `api_key` immediately** it will not be shown again.
113
+ * @example
114
+ * await lair.email.update(msg.message_id_url, 'my-agent@agentlair.dev', { read: false });
115
+ */
116
+ update(messageId: string, address: string, options: UpdateMessageOptions): Promise<UpdateMessageResult>;
117
+ /**
118
+ * Send an email from an address you own.
88
119
  *
89
- * @param options Optional name and recovery email
90
- * @param baseUrl Override API base URL (default: https://agentlair.dev)
120
+ * @example
121
+ * await lair.email.send({
122
+ * from: 'my-agent@agentlair.dev',
123
+ * to: 'user@example.com',
124
+ * subject: 'Hello',
125
+ * text: 'Hi from an AI agent!',
126
+ * });
127
+ */
128
+ send(options: SendEmailOptions): Promise<SendEmailResult>;
129
+ /**
130
+ * List sent messages (outbox).
91
131
  *
92
132
  * @example
93
- * const { api_key, account_id } = await AgentLairClient.createAccount({ name: 'my-agent' });
94
- * // Store api_key securely — never log it
95
- * const client = new AgentLairClient({ apiKey: api_key });
133
+ * const { messages } = await lair.email.outbox({ limit: 5 });
96
134
  */
97
- static createAccount(options?: CreateAccountOptions, baseUrl?: string): Promise<CreateAccountResult>;
135
+ outbox(options?: {
136
+ limit?: number;
137
+ }): Promise<OutboxResult>;
138
+ }
139
+ /**
140
+ * Zero-knowledge secret store.
141
+ * Server stores opaque encrypted blobs — plaintext never leaves your client.
142
+ * Use @agentlair/vault-crypto for client-side encryption.
143
+ */
144
+ declare class VaultNamespace {
145
+ private readonly _req;
146
+ constructor(_req: RequestFn);
98
147
  /**
99
- * Claim an @agentlair.dev email address for this account.
148
+ * Store an encrypted blob (versioned, append-only).
100
149
  *
101
- * First-touch ownership model — the first agent to claim an address owns it.
102
- * DKIM, SPF, and DMARC are pre-configured. Ready to send in under 5 seconds.
150
+ * @example
151
+ * await lair.vault.put('openai-key', { ciphertext: encryptedBlob });
152
+ */
153
+ put(key: string, options: VaultPutOptions): Promise<VaultPutResult>;
154
+ /**
155
+ * Retrieve an encrypted blob. Returns latest version by default.
103
156
  *
104
- * Optionally provide a `public_key` (base64url X25519, 32 bytes) to enable
105
- * end-to-end encryption for inbound messages.
157
+ * @example
158
+ * const { ciphertext } = await lair.vault.get('openai-key');
159
+ * const old = await lair.vault.get('openai-key', { version: 1 });
160
+ */
161
+ get(key: string, options?: VaultGetOptions): Promise<VaultGetResult>;
162
+ /**
163
+ * List all Vault keys (metadata only).
106
164
  *
107
165
  * @example
108
- * await client.claimAddress({ address: 'my-agent@agentlair.dev' });
166
+ * const { keys, count, limit } = await lair.vault.list();
109
167
  */
110
- claimAddress(options: ClaimAddressOptions): Promise<ClaimAddressResult>;
168
+ list(): Promise<VaultListResult>;
169
+ /**
170
+ * Delete a key (all versions) or a specific version.
171
+ *
172
+ * @example
173
+ * await lair.vault.delete('openai-key');
174
+ * await lair.vault.delete('openai-key', { version: 2 });
175
+ */
176
+ delete(key: string, options?: VaultDeleteOptions): Promise<VaultDeleteResult>;
177
+ }
178
+ declare class StacksNamespace {
179
+ private readonly _req;
180
+ constructor(_req: RequestFn);
111
181
  /**
112
- * Send a DKIM-signed email from an @agentlair.dev address you own.
182
+ * Create a domain stack. Points nameservers to AgentLair DNS.
183
+ * Beta: DNS provisioning is stubbed. Full CF DNS integration coming Q2 2026.
113
184
  *
114
- * Supports plain text, HTML, or both. Supports threading via `in_reply_to`.
115
- * Free tier: 10 emails/day per address.
185
+ * @example
186
+ * const stack = await lair.stacks.create({ domain: 'myagent.dev' });
187
+ */
188
+ create(options: CreateStackOptions): Promise<Stack>;
189
+ /**
190
+ * List all domain stacks for this account.
116
191
  *
117
192
  * @example
118
- * await client.sendEmail({
119
- * from: 'my-agent@agentlair.dev',
120
- * to: 'user@example.com',
121
- * subject: 'Hello from AgentLair',
122
- * text: 'Hi! This email was sent by an AI agent.',
123
- * });
193
+ * const { stacks } = await lair.stacks.list();
124
194
  */
125
- sendEmail(options: SendEmailOptions): Promise<SendEmailResult>;
195
+ list(): Promise<ListStacksResult>;
196
+ }
197
+ declare class ObservationsNamespace {
198
+ private readonly _req;
199
+ constructor(_req: RequestFn);
126
200
  /**
127
- * Get the inbox for an @agentlair.dev address you own.
201
+ * Write a structured observation. Account-scoped by default.
202
+ * Set `shared: true` to make visible to all authenticated agents.
128
203
  *
129
- * Returns message previews (no full body). Use `readMessage()` for the full body.
204
+ * @example
205
+ * await lair.observations.write({ topic: 'market-signals', content: 'BTC up 5%' });
206
+ */
207
+ write(options: WriteObservationOptions): Promise<Observation>;
208
+ /**
209
+ * Read observations. Returns own + shared by default.
130
210
  *
131
211
  * @example
132
- * const { messages, count } = await client.getInbox({ address: 'my-agent@agentlair.dev' });
133
- * for (const msg of messages) {
134
- * console.log(msg.from, msg.subject, msg.snippet);
135
- * }
212
+ * const { observations } = await lair.observations.read({ topic: 'market-signals' });
213
+ * const shared = await lair.observations.read({ scope: 'shared' });
136
214
  */
137
- getInbox(options: GetInboxOptions): Promise<GetInboxResult>;
215
+ read(options?: ReadObservationsOptions): Promise<ReadObservationsResult>;
138
216
  /**
139
- * Read the full body of a specific message.
217
+ * List distinct topics with observation count.
140
218
  *
141
- * Marks the message as read. For E2E-encrypted messages, returns
142
- * `ciphertext` and `ephemeral_public_key` for client-side decryption.
219
+ * @example
220
+ * const { topics } = await lair.observations.topics();
221
+ */
222
+ topics(): Promise<ObservationsTopicsResult>;
223
+ }
224
+ declare class AccountNamespace {
225
+ private readonly _req;
226
+ constructor(_req: RequestFn);
227
+ /**
228
+ * Get the current account profile.
229
+ *
230
+ * @example
231
+ * const { account_id, tier } = await lair.account.me();
232
+ */
233
+ me(): Promise<AccountMeResult>;
234
+ /**
235
+ * Get current usage statistics.
143
236
  *
144
- * @param messageId Use `message_id_url` from inbox (URL-encoded) or raw `message_id`
145
- * @param address The @agentlair.dev address that received the message
237
+ * @example
238
+ * const { emails } = await lair.account.usage();
239
+ * console.log(emails.daily_remaining);
240
+ */
241
+ usage(): Promise<UsageResult>;
242
+ /**
243
+ * Get billing information.
146
244
  *
147
245
  * @example
148
- * const msg = await client.readMessage({
149
- * messageId: inboxMsg.message_id_url,
150
- * address: 'my-agent@agentlair.dev',
151
- * });
152
- * console.log(msg.body);
246
+ * const billing = await lair.account.billing();
153
247
  */
248
+ billing(): Promise<BillingResult>;
249
+ }
250
+ /**
251
+ * AgentLair — primary SDK class.
252
+ *
253
+ * Accepts an API key string directly (or an options object for advanced config).
254
+ *
255
+ * @example Three-line onboarding
256
+ * const lair = new AgentLair(process.env.AGENTLAIR_API_KEY!);
257
+ * const inbox = await lair.email.claim('my-agent');
258
+ * const { messages } = await lair.email.inbox('my-agent@agentlair.dev');
259
+ */
260
+ export declare class AgentLair {
261
+ private readonly _apiKey;
262
+ private readonly _baseUrl;
263
+ /** Email: claim / inbox / send / read / deleteMessage / update / outbox / addresses / webhooks */
264
+ readonly email: EmailNamespace;
265
+ /** Vault: put / get / list / delete */
266
+ readonly vault: VaultNamespace;
267
+ /** Stacks: create / list */
268
+ readonly stacks: StacksNamespace;
269
+ /** Observations: write / read / topics */
270
+ readonly observations: ObservationsNamespace;
271
+ /** Account: me / usage / billing */
272
+ readonly account: AccountNamespace;
273
+ /**
274
+ * @param apiKeyOrOptions API key string (e.g. "al_live_...") or options object
275
+ */
276
+ constructor(apiKeyOrOptions: string | AgentLairOptions);
277
+ private _request;
278
+ /**
279
+ * Create a new AgentLair account and get an API key.
280
+ * No existing account needed. **Save the returned `api_key` immediately** — not shown again.
281
+ *
282
+ * @example
283
+ * const { api_key } = await AgentLair.createAccount({ name: 'my-agent' });
284
+ * const lair = new AgentLair(api_key);
285
+ */
286
+ static createAccount(options?: CreateAccountOptions, baseUrl?: string): Promise<CreateAccountResult>;
287
+ }
288
+ /**
289
+ * @deprecated Use `AgentLair` instead — simpler string constructor, same namespaces.
290
+ * `AgentLairClient` is fully retained for backward compatibility.
291
+ */
292
+ export declare class AgentLairClient {
293
+ private readonly _apiKey;
294
+ private readonly _baseUrl;
295
+ /** Vault: put / get / list / delete */
296
+ readonly vault: VaultNamespace;
297
+ /** Email: claim / inbox / send / read / outbox / addresses / webhooks */
298
+ readonly email: EmailNamespace;
299
+ /** Stacks: create / list */
300
+ readonly stacks: StacksNamespace;
301
+ /** Observations: write / read / topics */
302
+ readonly observations: ObservationsNamespace;
303
+ /** Account: me / usage / billing */
304
+ readonly account: AccountNamespace;
305
+ constructor(options: AgentLairOptions);
306
+ private _request;
307
+ /** @deprecated Prefer `AgentLair.createAccount()` */
308
+ static createAccount(options?: CreateAccountOptions, baseUrl?: string): Promise<CreateAccountResult>;
309
+ /** @deprecated Use `client.email.claim(address)` */
310
+ claimAddress(options: ClaimAddressOptions): Promise<ClaimAddressResult>;
311
+ /** @deprecated Use `client.email.send(options)` */
312
+ sendEmail(options: SendEmailOptions): Promise<SendEmailResult>;
313
+ /** @deprecated Use `client.email.inbox(address, options)` */
314
+ getInbox(options: GetInboxOptions): Promise<GetInboxResult>;
315
+ /** @deprecated Use `client.email.read(messageId, address)` */
154
316
  readMessage(options: ReadMessageOptions): Promise<FullMessage>;
155
317
  }
156
318
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,EACf,MAAM,YAAY,CAAC;AAMpB;;;;;;GAMG;AACH,cAAM,cAAc;IAEhB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,CAAC,CAAC,EAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,KACtD,OAAO,CAAC,CAAC,CAAC;IAGjB;;;;;;;;;;;OAWG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAMzE;;;;;;;;;OASG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;IAM9E;;;;;OAKG;IACG,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;IAItC;;;;;;;;OAQG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAOxF;AAID,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;gBAEnB,OAAO,EAAE,sBAAsB;YAQ7B,QAAQ;IAiDtB;;;;;;;;;;;;;OAaG;WACU,aAAa,CACxB,OAAO,GAAE,oBAAyB,EAClC,OAAO,SAAmB,GACzB,OAAO,CAAC,mBAAmB,CAAC;IAoB/B;;;;;;;;;;;OAWG;IACG,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAM7E;;;;;;;;;;;;;OAaG;IACG,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAMpE;;;;;;;;;;OAUG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAQjE;;;;;;;;;;;;;;;OAeG;IACG,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC;CAOrE"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}