@adonis-agora/agent 0.76.2 → 0.77.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/CHANGELOG.md +26 -0
- package/dist/providers/agent_provider.d.ts.map +1 -1
- package/dist/providers/agent_provider.js +9 -0
- package/dist/providers/agent_provider.js.map +1 -1
- package/dist/providers/mcp_provider.d.ts.map +1 -1
- package/dist/providers/mcp_provider.js +46 -10
- package/dist/providers/mcp_provider.js.map +1 -1
- package/dist/providers/poppy_connections_provider.d.ts +17 -0
- package/dist/providers/poppy_connections_provider.d.ts.map +1 -0
- package/dist/providers/poppy_connections_provider.js +186 -0
- package/dist/providers/poppy_connections_provider.js.map +1 -0
- package/dist/providers/poppy_provider.d.ts +12 -0
- package/dist/providers/poppy_provider.d.ts.map +1 -0
- package/dist/providers/poppy_provider.js +159 -0
- package/dist/providers/poppy_provider.js.map +1 -0
- package/dist/src/a2a/handler.d.ts.map +1 -1
- package/dist/src/a2a/handler.js +4 -2
- package/dist/src/a2a/handler.js.map +1 -1
- package/dist/src/a2a/turn.d.ts +27 -4
- package/dist/src/a2a/turn.d.ts.map +1 -1
- package/dist/src/a2a/turn.js +66 -12
- package/dist/src/a2a/turn.js.map +1 -1
- package/dist/src/action-proposal-approval.d.ts.map +1 -1
- package/dist/src/action-proposal-approval.js +3 -3
- package/dist/src/action-proposal-approval.js.map +1 -1
- package/dist/src/action-proposal-listeners.d.ts +12 -0
- package/dist/src/action-proposal-listeners.d.ts.map +1 -0
- package/dist/src/action-proposal-listeners.js +27 -0
- package/dist/src/action-proposal-listeners.js.map +1 -0
- package/dist/src/action-proposal-receipt.d.ts +4 -0
- package/dist/src/action-proposal-receipt.d.ts.map +1 -1
- package/dist/src/action-proposal-receipt.js +3 -1
- package/dist/src/action-proposal-receipt.js.map +1 -1
- package/dist/src/action-proposal-worker.d.ts +6 -1
- package/dist/src/action-proposal-worker.d.ts.map +1 -1
- package/dist/src/action-proposal-worker.js +10 -1
- package/dist/src/action-proposal-worker.js.map +1 -1
- package/dist/src/agent-loop.d.ts.map +1 -1
- package/dist/src/agent-loop.js +8 -5
- package/dist/src/agent-loop.js.map +1 -1
- package/dist/src/channels/handler.d.ts +10 -0
- package/dist/src/channels/handler.d.ts.map +1 -1
- package/dist/src/channels/handler.js +44 -1
- package/dist/src/channels/handler.js.map +1 -1
- package/dist/src/channels/texts.d.ts +9 -0
- package/dist/src/channels/texts.d.ts.map +1 -1
- package/dist/src/channels/texts.js +4 -0
- package/dist/src/channels/texts.js.map +1 -1
- package/dist/src/client/sse.d.ts.map +1 -1
- package/dist/src/client/sse.js +3 -0
- package/dist/src/client/sse.js.map +1 -1
- package/dist/src/define_config.d.ts +3 -0
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/genui/kit/styles.d.ts.map +1 -1
- package/dist/src/genui/kit/styles.js +11 -2
- package/dist/src/genui/kit/styles.js.map +1 -1
- package/dist/src/genui/sandbox-styles.js +1 -1
- package/dist/src/genui/sandbox-styles.js.map +1 -1
- package/dist/src/genui/sandbox-theme.d.ts +6 -1
- package/dist/src/genui/sandbox-theme.d.ts.map +1 -1
- package/dist/src/genui/sandbox-theme.js +9 -5
- package/dist/src/genui/sandbox-theme.js.map +1 -1
- package/dist/src/genui/sandbox.d.ts.map +1 -1
- package/dist/src/genui/sandbox.js +1 -0
- package/dist/src/genui/sandbox.js.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/auth.d.ts +17 -0
- package/dist/src/mcp/auth.d.ts.map +1 -1
- package/dist/src/mcp/auth.js +56 -1
- package/dist/src/mcp/auth.js.map +1 -1
- package/dist/src/mcp/discovery.d.ts +13 -2
- package/dist/src/mcp/discovery.d.ts.map +1 -1
- package/dist/src/mcp/discovery.js +17 -2
- package/dist/src/mcp/discovery.js.map +1 -1
- package/dist/src/mcp/index.d.ts +1 -1
- package/dist/src/mcp/index.d.ts.map +1 -1
- package/dist/src/mcp/index.js.map +1 -1
- package/dist/src/mcp/scope.d.ts +13 -0
- package/dist/src/mcp/scope.d.ts.map +1 -0
- package/dist/src/mcp/scope.js +24 -0
- package/dist/src/mcp/scope.js.map +1 -0
- package/dist/src/mcp/server.d.ts +6 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +1 -1
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/poppy/auth.d.ts +77 -0
- package/dist/src/poppy/auth.d.ts.map +1 -0
- package/dist/src/poppy/auth.js +16 -0
- package/dist/src/poppy/auth.js.map +1 -0
- package/dist/src/poppy/conversations.d.ts +249 -0
- package/dist/src/poppy/conversations.d.ts.map +1 -0
- package/dist/src/poppy/conversations.js +1017 -0
- package/dist/src/poppy/conversations.js.map +1 -0
- package/dist/src/poppy/define_config.d.ts +98 -0
- package/dist/src/poppy/define_config.d.ts.map +1 -0
- package/dist/src/poppy/define_config.js +11 -0
- package/dist/src/poppy/define_config.js.map +1 -0
- package/dist/src/poppy/endpoints.d.ts +25 -0
- package/dist/src/poppy/endpoints.d.ts.map +1 -0
- package/dist/src/poppy/endpoints.js +31 -0
- package/dist/src/poppy/endpoints.js.map +1 -0
- package/dist/src/poppy/handler.d.ts +80 -0
- package/dist/src/poppy/handler.d.ts.map +1 -0
- package/dist/src/poppy/handler.js +362 -0
- package/dist/src/poppy/handler.js.map +1 -0
- package/dist/src/poppy/index.d.ts +17 -0
- package/dist/src/poppy/index.d.ts.map +1 -0
- package/dist/src/poppy/index.js +9 -0
- package/dist/src/poppy/index.js.map +1 -0
- package/dist/src/poppy/protocol.d.ts +132 -0
- package/dist/src/poppy/protocol.d.ts.map +1 -0
- package/dist/src/poppy/protocol.js +178 -0
- package/dist/src/poppy/protocol.js.map +1 -0
- package/dist/src/poppy/redis-store.d.ts +27 -0
- package/dist/src/poppy/redis-store.d.ts.map +1 -0
- package/dist/src/poppy/redis-store.js +148 -0
- package/dist/src/poppy/redis-store.js.map +1 -0
- package/dist/src/poppy/runtime.d.ts +6 -0
- package/dist/src/poppy/runtime.d.ts.map +1 -0
- package/dist/src/poppy/runtime.js +12 -0
- package/dist/src/poppy/runtime.js.map +1 -0
- package/dist/src/poppy/server_middleware.d.ts +11 -0
- package/dist/src/poppy/server_middleware.d.ts.map +1 -0
- package/dist/src/poppy/server_middleware.js +16 -0
- package/dist/src/poppy/server_middleware.js.map +1 -0
- package/dist/src/poppy/store.d.ts +207 -0
- package/dist/src/poppy/store.d.ts.map +1 -0
- package/dist/src/poppy/store.js +444 -0
- package/dist/src/poppy/store.js.map +1 -0
- package/dist/src/poppy-client/api.d.ts +36 -0
- package/dist/src/poppy-client/api.d.ts.map +1 -0
- package/dist/src/poppy-client/api.js +77 -0
- package/dist/src/poppy-client/api.js.map +1 -0
- package/dist/src/poppy-client/bin/poppy-agent.d.ts +3 -0
- package/dist/src/poppy-client/bin/poppy-agent.d.ts.map +1 -0
- package/dist/src/poppy-client/bin/poppy-agent.js +9 -0
- package/dist/src/poppy-client/bin/poppy-agent.js.map +1 -0
- package/dist/src/poppy-client/browser.d.ts +24 -0
- package/dist/src/poppy-client/browser.d.ts.map +1 -0
- package/dist/src/poppy-client/browser.js +83 -0
- package/dist/src/poppy-client/browser.js.map +1 -0
- package/dist/src/poppy-client/cli/main.d.ts +2 -0
- package/dist/src/poppy-client/cli/main.d.ts.map +1 -0
- package/dist/src/poppy-client/cli/main.js +776 -0
- package/dist/src/poppy-client/cli/main.js.map +1 -0
- package/dist/src/poppy-client/cli/prompt.d.ts +13 -0
- package/dist/src/poppy-client/cli/prompt.d.ts.map +1 -0
- package/dist/src/poppy-client/cli/prompt.js +50 -0
- package/dist/src/poppy-client/cli/prompt.js.map +1 -0
- package/dist/src/poppy-client/company.d.ts +87 -0
- package/dist/src/poppy-client/company.d.ts.map +1 -0
- package/dist/src/poppy-client/company.js +336 -0
- package/dist/src/poppy-client/company.js.map +1 -0
- package/dist/src/poppy-client/conversations.d.ts +89 -0
- package/dist/src/poppy-client/conversations.d.ts.map +1 -0
- package/dist/src/poppy-client/conversations.js +332 -0
- package/dist/src/poppy-client/conversations.js.map +1 -0
- package/dist/src/poppy-client/discovery.d.ts +41 -0
- package/dist/src/poppy-client/discovery.d.ts.map +1 -0
- package/dist/src/poppy-client/discovery.js +217 -0
- package/dist/src/poppy-client/discovery.js.map +1 -0
- package/dist/src/poppy-client/dpop.d.ts +19 -0
- package/dist/src/poppy-client/dpop.d.ts.map +1 -0
- package/dist/src/poppy-client/dpop.js +43 -0
- package/dist/src/poppy-client/dpop.js.map +1 -0
- package/dist/src/poppy-client/errors.d.ts +50 -0
- package/dist/src/poppy-client/errors.d.ts.map +1 -0
- package/dist/src/poppy-client/errors.js +55 -0
- package/dist/src/poppy-client/errors.js.map +1 -0
- package/dist/src/poppy-client/http.d.ts +40 -0
- package/dist/src/poppy-client/http.d.ts.map +1 -0
- package/dist/src/poppy-client/http.js +95 -0
- package/dist/src/poppy-client/http.js.map +1 -0
- package/dist/src/poppy-client/identity.d.ts +61 -0
- package/dist/src/poppy-client/identity.d.ts.map +1 -0
- package/dist/src/poppy-client/identity.js +111 -0
- package/dist/src/poppy-client/identity.js.map +1 -0
- package/dist/src/poppy-client/identity_server.d.ts +29 -0
- package/dist/src/poppy-client/identity_server.d.ts.map +1 -0
- package/dist/src/poppy-client/identity_server.js +84 -0
- package/dist/src/poppy-client/identity_server.js.map +1 -0
- package/dist/src/poppy-client/index.d.ts +19 -0
- package/dist/src/poppy-client/index.d.ts.map +1 -0
- package/dist/src/poppy-client/index.js +18 -0
- package/dist/src/poppy-client/index.js.map +1 -0
- package/dist/src/poppy-client/keys.d.ts +13 -0
- package/dist/src/poppy-client/keys.d.ts.map +1 -0
- package/dist/src/poppy-client/keys.js +31 -0
- package/dist/src/poppy-client/keys.js.map +1 -0
- package/dist/src/poppy-client/llm.d.ts +31 -0
- package/dist/src/poppy-client/llm.d.ts.map +1 -0
- package/dist/src/poppy-client/llm.js +230 -0
- package/dist/src/poppy-client/llm.js.map +1 -0
- package/dist/src/poppy-client/mcp.d.ts +16 -0
- package/dist/src/poppy-client/mcp.d.ts.map +1 -0
- package/dist/src/poppy-client/mcp.js +57 -0
- package/dist/src/poppy-client/mcp.js.map +1 -0
- package/dist/src/poppy-client/open_url.d.ts +3 -0
- package/dist/src/poppy-client/open_url.d.ts.map +1 -0
- package/dist/src/poppy-client/open_url.js +13 -0
- package/dist/src/poppy-client/open_url.js.map +1 -0
- package/dist/src/poppy-client/signin.d.ts +59 -0
- package/dist/src/poppy-client/signin.d.ts.map +1 -0
- package/dist/src/poppy-client/signin.js +210 -0
- package/dist/src/poppy-client/signin.js.map +1 -0
- package/dist/src/poppy-client/sse.d.ts +15 -0
- package/dist/src/poppy-client/sse.d.ts.map +1 -0
- package/dist/src/poppy-client/sse.js +74 -0
- package/dist/src/poppy-client/sse.js.map +1 -0
- package/dist/src/poppy-client/store.d.ts +89 -0
- package/dist/src/poppy-client/store.d.ts.map +1 -0
- package/dist/src/poppy-client/store.js +79 -0
- package/dist/src/poppy-client/store.js.map +1 -0
- package/dist/src/poppy-client/token_client.d.ts +69 -0
- package/dist/src/poppy-client/token_client.d.ts.map +1 -0
- package/dist/src/poppy-client/token_client.js +154 -0
- package/dist/src/poppy-client/token_client.js.map +1 -0
- package/dist/src/poppy-client/types.d.ts +184 -0
- package/dist/src/poppy-client/types.d.ts.map +1 -0
- package/dist/src/poppy-client/types.js +8 -0
- package/dist/src/poppy-client/types.js.map +1 -0
- package/dist/src/poppy-client/util.d.ts +42 -0
- package/dist/src/poppy-client/util.d.ts.map +1 -0
- package/dist/src/poppy-client/util.js +122 -0
- package/dist/src/poppy-client/util.js.map +1 -0
- package/dist/src/poppy-connections/config.d.ts +134 -0
- package/dist/src/poppy-connections/config.d.ts.map +1 -0
- package/dist/src/poppy-connections/config.js +44 -0
- package/dist/src/poppy-connections/config.js.map +1 -0
- package/dist/src/poppy-connections/crypto.d.ts +12 -0
- package/dist/src/poppy-connections/crypto.d.ts.map +1 -0
- package/dist/src/poppy-connections/crypto.js +36 -0
- package/dist/src/poppy-connections/crypto.js.map +1 -0
- package/dist/src/poppy-connections/http.d.ts +63 -0
- package/dist/src/poppy-connections/http.d.ts.map +1 -0
- package/dist/src/poppy-connections/http.js +217 -0
- package/dist/src/poppy-connections/http.js.map +1 -0
- package/dist/src/poppy-connections/index.d.ts +14 -0
- package/dist/src/poppy-connections/index.d.ts.map +1 -0
- package/dist/src/poppy-connections/index.js +17 -0
- package/dist/src/poppy-connections/index.js.map +1 -0
- package/dist/src/poppy-connections/resume.d.ts +46 -0
- package/dist/src/poppy-connections/resume.d.ts.map +1 -0
- package/dist/src/poppy-connections/resume.js +109 -0
- package/dist/src/poppy-connections/resume.js.map +1 -0
- package/dist/src/poppy-connections/runtime.d.ts +4 -0
- package/dist/src/poppy-connections/runtime.d.ts.map +1 -0
- package/dist/src/poppy-connections/runtime.js +9 -0
- package/dist/src/poppy-connections/runtime.js.map +1 -0
- package/dist/src/poppy-connections/server_middleware.d.ts +10 -0
- package/dist/src/poppy-connections/server_middleware.d.ts.map +1 -0
- package/dist/src/poppy-connections/server_middleware.js +14 -0
- package/dist/src/poppy-connections/server_middleware.js.map +1 -0
- package/dist/src/poppy-connections/service.d.ts +179 -0
- package/dist/src/poppy-connections/service.d.ts.map +1 -0
- package/dist/src/poppy-connections/service.js +648 -0
- package/dist/src/poppy-connections/service.js.map +1 -0
- package/dist/src/poppy-connections/store.d.ts +139 -0
- package/dist/src/poppy-connections/store.d.ts.map +1 -0
- package/dist/src/poppy-connections/store.js +260 -0
- package/dist/src/poppy-connections/store.js.map +1 -0
- package/dist/src/poppy-connections/tools.d.ts +65 -0
- package/dist/src/poppy-connections/tools.d.ts.map +1 -0
- package/dist/src/poppy-connections/tools.js +574 -0
- package/dist/src/poppy-connections/tools.js.map +1 -0
- package/dist/src/react/core/approvals/use-action-proposals.d.ts +6 -1
- package/dist/src/react/core/approvals/use-action-proposals.d.ts.map +1 -1
- package/dist/src/react/core/approvals/use-action-proposals.js +18 -3
- package/dist/src/react/core/approvals/use-action-proposals.js.map +1 -1
- package/dist/src/react/core/use-agent-chat.d.ts +6 -0
- package/dist/src/react/core/use-agent-chat.d.ts.map +1 -1
- package/dist/src/react/core/use-agent-chat.js +47 -1
- package/dist/src/react/core/use-agent-chat.js.map +1 -1
- package/dist/src/tool-presentation.d.ts +6 -0
- package/dist/src/tool-presentation.d.ts.map +1 -1
- package/dist/src/tool-presentation.js +1 -0
- package/dist/src/tool-presentation.js.map +1 -1
- package/dist/src/types.d.ts +6 -0
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +41 -2
- package/skills/agent-governance/SKILL.md +13 -2
- package/skills/agent-personas-agents/SKILL.md +1 -1
- package/skills/agent-tools/SKILL.md +20 -3
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { chmod, mkdir, readFile, rename, stat, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
export function defaultStatePath() {
|
|
6
|
+
if (process.env.POPPY_AGENT_STATE)
|
|
7
|
+
return process.env.POPPY_AGENT_STATE;
|
|
8
|
+
const base = process.env.XDG_CONFIG_HOME || join(homedir(), '.config');
|
|
9
|
+
return join(base, 'poppy-agent', 'state.json');
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The local state file. It holds private keys and Account Tokens, so it is written with mode
|
|
13
|
+
* 0600 (directory 0700) and atomically (temp file + rename).
|
|
14
|
+
*/
|
|
15
|
+
export class StateStore {
|
|
16
|
+
path;
|
|
17
|
+
data;
|
|
18
|
+
persist;
|
|
19
|
+
constructor(path, data, persist) {
|
|
20
|
+
this.path = path;
|
|
21
|
+
this.data = data;
|
|
22
|
+
this.persist = persist;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A state kept by the caller instead of a file — a server keeping each user's Companies in its
|
|
26
|
+
* own database. `persist` receives the whole state on every save (serialized, like the file).
|
|
27
|
+
*/
|
|
28
|
+
static memory(data = { version: 1, profiles: {} }, persist) {
|
|
29
|
+
data.profiles ??= {};
|
|
30
|
+
return new StateStore('', data, persist);
|
|
31
|
+
}
|
|
32
|
+
static async open(path = defaultStatePath()) {
|
|
33
|
+
await mkdir(dirname(path), { recursive: true, mode: 0o700 });
|
|
34
|
+
let data = { version: 1, profiles: {} };
|
|
35
|
+
try {
|
|
36
|
+
const raw = await readFile(path, 'utf8');
|
|
37
|
+
data = JSON.parse(raw);
|
|
38
|
+
const st = await stat(path);
|
|
39
|
+
if ((st.mode & 0o077) !== 0)
|
|
40
|
+
await chmod(path, 0o600);
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
if (e.code !== 'ENOENT')
|
|
44
|
+
throw e;
|
|
45
|
+
}
|
|
46
|
+
data.profiles ??= {};
|
|
47
|
+
return new StateStore(path, data);
|
|
48
|
+
}
|
|
49
|
+
/** Directory next to the state file, used for the Direct Sign-In callback relay. */
|
|
50
|
+
get dir() {
|
|
51
|
+
return dirname(this.path);
|
|
52
|
+
}
|
|
53
|
+
profile(name) {
|
|
54
|
+
this.data.profiles[name] ??= { companies: {} };
|
|
55
|
+
return this.data.profiles[name];
|
|
56
|
+
}
|
|
57
|
+
#saving = Promise.resolve();
|
|
58
|
+
/**
|
|
59
|
+
* Writes the state atomically (tmp file + rename). Saves are serialized: a conversation stream
|
|
60
|
+
* and the prompt can save at the same time, and two writes sharing one tmp file made the second
|
|
61
|
+
* `rename` fail with ENOENT.
|
|
62
|
+
*/
|
|
63
|
+
save() {
|
|
64
|
+
const run = this.#saving.then(() => this.#write());
|
|
65
|
+
this.#saving = run.catch(() => { });
|
|
66
|
+
return run;
|
|
67
|
+
}
|
|
68
|
+
async #write() {
|
|
69
|
+
if (this.path === '') {
|
|
70
|
+
await this.persist?.(this.data);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const tmp = `${this.path}.${process.pid}.${randomBytes(6).toString('hex')}.tmp`;
|
|
74
|
+
await writeFile(tmp, `${JSON.stringify(this.data, null, 2)}\n`, { mode: 0o600 });
|
|
75
|
+
await chmod(tmp, 0o600);
|
|
76
|
+
await rename(tmp, this.path);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/poppy-client/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { DpopKey } from './dpop.js';
|
|
2
|
+
import { type PoppyHttp } from './http.js';
|
|
3
|
+
import type { AgentIdentity } from './identity.js';
|
|
4
|
+
import type { AuthServerMetadata, DeviceAuthorizationResponse, TokenResponse } from './types.js';
|
|
5
|
+
export declare const GRANT_JWT_BEARER = "urn:ietf:params:oauth:grant-type:jwt-bearer";
|
|
6
|
+
export declare const GRANT_DEVICE_CODE = "urn:ietf:params:oauth:grant-type:device_code";
|
|
7
|
+
export declare const CLIENT_ASSERTION_TYPE = "urn:ietf:params:oauth:client-assertion-type:jwt-bearer";
|
|
8
|
+
export interface TokenClientOptions {
|
|
9
|
+
/**
|
|
10
|
+
* `aud` of the client assertion. RFC 7523 allows the token endpoint URL (the default here,
|
|
11
|
+
* matching the spec's examples) or the issuer identifier.
|
|
12
|
+
*/
|
|
13
|
+
clientAssertionAudience?: 'token_endpoint' | 'issuer' | undefined;
|
|
14
|
+
}
|
|
15
|
+
export interface NarrowingParams {
|
|
16
|
+
/** Ask for fewer scopes than the Session has (4.3 "Narrower tokens"). */
|
|
17
|
+
scope?: string | undefined;
|
|
18
|
+
/** RFC 8707 resource indicator. */
|
|
19
|
+
resource?: string | undefined;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* OAuth calls against the Company's authorization server (section 4): every request carries
|
|
23
|
+
* a `private_key_jwt` client assertion (4.1), and token requests carry a DPoP proof unless a
|
|
24
|
+
* Bearer token (MCP) is wanted (4.3).
|
|
25
|
+
*/
|
|
26
|
+
export declare class TokenClient {
|
|
27
|
+
private readonly identity;
|
|
28
|
+
readonly metadata: AuthServerMetadata;
|
|
29
|
+
private readonly http;
|
|
30
|
+
private readonly opts;
|
|
31
|
+
constructor(identity: AgentIdentity, metadata: AuthServerMetadata, http: PoppyHttp, opts?: TokenClientOptions);
|
|
32
|
+
private clientAuth;
|
|
33
|
+
/** POSTs a form; the builder runs per attempt so retries get fresh assertions. */
|
|
34
|
+
private post;
|
|
35
|
+
private toError;
|
|
36
|
+
/** Any token-endpoint grant. Validates the response shape of 4.2/4.4. */
|
|
37
|
+
token(params: () => Promise<Record<string, string | undefined>>, dpop?: DpopKey | undefined): Promise<TokenResponse>;
|
|
38
|
+
/** JWT bearer grant: starts a Session, or renews a signed-out one with `sessionId` (4.2). */
|
|
39
|
+
jwtBearer(input: {
|
|
40
|
+
userId: string;
|
|
41
|
+
sessionId?: string | undefined;
|
|
42
|
+
dpop?: DpopKey | undefined;
|
|
43
|
+
} & NarrowingParams): Promise<TokenResponse>;
|
|
44
|
+
/** Account Token grant (4.8): signs a Session in, or starts a new signed-in Session. */
|
|
45
|
+
refresh(input: {
|
|
46
|
+
refreshToken: string;
|
|
47
|
+
sessionId?: string | undefined;
|
|
48
|
+
dpop?: DpopKey | undefined;
|
|
49
|
+
} & NarrowingParams): Promise<TokenResponse>;
|
|
50
|
+
/** Direct Sign-In code exchange (4.5 step 4). */
|
|
51
|
+
authorizationCode(input: {
|
|
52
|
+
code: string;
|
|
53
|
+
redirectUri: string;
|
|
54
|
+
codeVerifier: string;
|
|
55
|
+
sessionId: string;
|
|
56
|
+
dpop: DpopKey;
|
|
57
|
+
}): Promise<TokenResponse>;
|
|
58
|
+
/** Device Sign-In step 1 (4.6). */
|
|
59
|
+
deviceAuthorization(scope: string): Promise<DeviceAuthorizationResponse>;
|
|
60
|
+
/** Device Sign-In polling (4.6 step 3). Throws `authorization_pending` / `slow_down` etc. */
|
|
61
|
+
deviceToken(input: {
|
|
62
|
+
deviceCode: string;
|
|
63
|
+
sessionId: string;
|
|
64
|
+
dpop: DpopKey;
|
|
65
|
+
}): Promise<TokenResponse>;
|
|
66
|
+
/** RFC 7009 revocation of an Account Token (4.9). */
|
|
67
|
+
revoke(token: string, hint?: 'refresh_token' | 'access_token'): Promise<void>;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=token_client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token_client.d.ts","sourceRoot":"","sources":["../../../src/poppy-client/token_client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,WAAW,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGjG,eAAO,MAAM,gBAAgB,gDAAgD,CAAC;AAC9E,eAAO,MAAM,iBAAiB,iDAAiD,CAAC;AAChF,eAAO,MAAM,qBAAqB,2DAA2D,CAAC;AAE9F,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,uBAAuB,CAAC,EAAE,gBAAgB,GAAG,QAAQ,GAAG,SAAS,CAAC;CACnE;AAED,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED;;;;GAIG;AACH,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB;IACrC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJvB,YACmB,QAAQ,EAAE,aAAa,EAC/B,QAAQ,EAAE,kBAAkB,EACpB,IAAI,EAAE,SAAS,EACf,IAAI,GAAE,kBAAuB,EAC5C;YAEU,UAAU;IAYxB,kFAAkF;YACpE,IAAI;IAuBlB,OAAO,CAAC,OAAO;IAef,yEAAyE;IACnE,KAAK,CACT,MAAM,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACzD,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GACzB,OAAO,CAAC,aAAa,CAAC,CAyBxB;IAED,6FAA6F;IAC7F,SAAS,CACP,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KAC5B,GAAG,eAAe,GAClB,OAAO,CAAC,aAAa,CAAC,CAWxB;IAED,wFAAwF;IACxF,OAAO,CACL,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;KAC5B,GAAG,eAAe,GAClB,OAAO,CAAC,aAAa,CAAC,CAWxB;IAED,iDAAiD;IACjD,iBAAiB,CAAC,KAAK,EAAE;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,OAAO,CAAC;KACf,GAAG,OAAO,CAAC,aAAa,CAAC,CAWzB;IAED,mCAAmC;IAC7B,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAa7E;IAED,6FAA6F;IAC7F,WAAW,CAAC,KAAK,EAAE;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,OAAO,CAAC;KACf,GAAG,OAAO,CAAC,aAAa,CAAC,CASzB;IAED,qDAAqD;IAC/C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,eAAe,GAAG,cAAgC,iBAMnF;CACF"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { OAuthError } from './errors.js';
|
|
2
|
+
import { readJson } from './http.js';
|
|
3
|
+
import { parseRetryAfter } from './util.js';
|
|
4
|
+
export const GRANT_JWT_BEARER = 'urn:ietf:params:oauth:grant-type:jwt-bearer';
|
|
5
|
+
export const GRANT_DEVICE_CODE = 'urn:ietf:params:oauth:grant-type:device_code';
|
|
6
|
+
export const CLIENT_ASSERTION_TYPE = 'urn:ietf:params:oauth:client-assertion-type:jwt-bearer';
|
|
7
|
+
/**
|
|
8
|
+
* OAuth calls against the Company's authorization server (section 4): every request carries
|
|
9
|
+
* a `private_key_jwt` client assertion (4.1), and token requests carry a DPoP proof unless a
|
|
10
|
+
* Bearer token (MCP) is wanted (4.3).
|
|
11
|
+
*/
|
|
12
|
+
export class TokenClient {
|
|
13
|
+
identity;
|
|
14
|
+
metadata;
|
|
15
|
+
http;
|
|
16
|
+
opts;
|
|
17
|
+
constructor(identity, metadata, http, opts = {}) {
|
|
18
|
+
this.identity = identity;
|
|
19
|
+
this.metadata = metadata;
|
|
20
|
+
this.http = http;
|
|
21
|
+
this.opts = opts;
|
|
22
|
+
}
|
|
23
|
+
async clientAuth() {
|
|
24
|
+
const aud = this.opts.clientAssertionAudience === 'issuer'
|
|
25
|
+
? this.metadata.issuer
|
|
26
|
+
: this.metadata.token_endpoint;
|
|
27
|
+
return {
|
|
28
|
+
client_id: this.identity.clientId,
|
|
29
|
+
client_assertion_type: CLIENT_ASSERTION_TYPE,
|
|
30
|
+
client_assertion: await this.identity.clientAssertion(aud),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** POSTs a form; the builder runs per attempt so retries get fresh assertions. */
|
|
34
|
+
async post(endpoint, build, dpop) {
|
|
35
|
+
const res = await this.http.request(endpoint, {
|
|
36
|
+
method: 'POST',
|
|
37
|
+
headers: {
|
|
38
|
+
'content-type': 'application/x-www-form-urlencoded',
|
|
39
|
+
accept: 'application/json',
|
|
40
|
+
},
|
|
41
|
+
dpop,
|
|
42
|
+
body: async () => {
|
|
43
|
+
const params = { ...(await build()), ...(await this.clientAuth()) };
|
|
44
|
+
const form = new URLSearchParams();
|
|
45
|
+
for (const [k, v] of Object.entries(params))
|
|
46
|
+
if (v !== undefined && v !== '')
|
|
47
|
+
form.set(k, v);
|
|
48
|
+
return form.toString();
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
return { status: res.status, body: await readJson(res), headers: res.headers };
|
|
52
|
+
}
|
|
53
|
+
toError(r) {
|
|
54
|
+
const code = typeof r.body?.error === 'string' ? r.body.error : `http_${r.status}`;
|
|
55
|
+
return new OAuthError(code, {
|
|
56
|
+
status: r.status,
|
|
57
|
+
description: typeof r.body?.error_description === 'string' ? r.body.error_description : undefined,
|
|
58
|
+
retryAfter: parseRetryAfter(r.headers.get('retry-after')),
|
|
59
|
+
details: r.body,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/** Any token-endpoint grant. Validates the response shape of 4.2/4.4. */
|
|
63
|
+
async token(params, dpop) {
|
|
64
|
+
const r = await this.post(this.metadata.token_endpoint, params, dpop);
|
|
65
|
+
if (r.status !== 200 || !r.body)
|
|
66
|
+
throw this.toError(r);
|
|
67
|
+
const t = r.body;
|
|
68
|
+
if (typeof t.access_token !== 'string' || !t.access_token) {
|
|
69
|
+
throw new OAuthError('invalid_response', {
|
|
70
|
+
description: 'no access_token in token response',
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (typeof t.expires_in !== 'number' || !(t.expires_in > 0)) {
|
|
74
|
+
throw new OAuthError('invalid_response', { description: 'expires_in must be > 0 (4.2)' });
|
|
75
|
+
}
|
|
76
|
+
if (typeof t.session_id !== 'string' || !t.session_id) {
|
|
77
|
+
throw new OAuthError('invalid_response', { description: 'no session_id in token response' });
|
|
78
|
+
}
|
|
79
|
+
const expected = dpop ? 'dpop' : 'bearer';
|
|
80
|
+
if (String(t.token_type).toLowerCase() !== expected) {
|
|
81
|
+
// RFC 9449 section 5: a client that sent a proof must not accept a downgraded token.
|
|
82
|
+
throw new OAuthError('invalid_response', {
|
|
83
|
+
description: `token_type is ${t.token_type}, expected ${dpop ? 'DPoP' : 'Bearer'}`,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
t.signed_in = t.signed_in === true;
|
|
87
|
+
t.scope = typeof t.scope === 'string' ? t.scope : '';
|
|
88
|
+
return t;
|
|
89
|
+
}
|
|
90
|
+
/** JWT bearer grant: starts a Session, or renews a signed-out one with `sessionId` (4.2). */
|
|
91
|
+
jwtBearer(input) {
|
|
92
|
+
return this.token(async () => ({
|
|
93
|
+
grant_type: GRANT_JWT_BEARER,
|
|
94
|
+
assertion: await this.identity.sessionAssertion(input.userId, this.metadata.token_endpoint),
|
|
95
|
+
session_id: input.sessionId,
|
|
96
|
+
scope: input.scope,
|
|
97
|
+
resource: input.resource,
|
|
98
|
+
}), input.dpop);
|
|
99
|
+
}
|
|
100
|
+
/** Account Token grant (4.8): signs a Session in, or starts a new signed-in Session. */
|
|
101
|
+
refresh(input) {
|
|
102
|
+
return this.token(async () => ({
|
|
103
|
+
grant_type: 'refresh_token',
|
|
104
|
+
refresh_token: input.refreshToken,
|
|
105
|
+
session_id: input.sessionId,
|
|
106
|
+
scope: input.scope,
|
|
107
|
+
resource: input.resource,
|
|
108
|
+
}), input.dpop);
|
|
109
|
+
}
|
|
110
|
+
/** Direct Sign-In code exchange (4.5 step 4). */
|
|
111
|
+
authorizationCode(input) {
|
|
112
|
+
return this.token(async () => ({
|
|
113
|
+
grant_type: 'authorization_code',
|
|
114
|
+
code: input.code,
|
|
115
|
+
redirect_uri: input.redirectUri,
|
|
116
|
+
code_verifier: input.codeVerifier,
|
|
117
|
+
session_id: input.sessionId,
|
|
118
|
+
}), input.dpop);
|
|
119
|
+
}
|
|
120
|
+
/** Device Sign-In step 1 (4.6). */
|
|
121
|
+
async deviceAuthorization(scope) {
|
|
122
|
+
const endpoint = this.metadata.device_authorization_endpoint;
|
|
123
|
+
if (!endpoint)
|
|
124
|
+
throw new OAuthError('unsupported', { description: 'no device_authorization_endpoint' });
|
|
125
|
+
const r = await this.post(endpoint, async () => ({ scope }));
|
|
126
|
+
if (r.status !== 200 || !r.body)
|
|
127
|
+
throw this.toError(r);
|
|
128
|
+
const d = r.body;
|
|
129
|
+
if (!d.device_code || !d.user_code || !d.verification_uri) {
|
|
130
|
+
throw new OAuthError('invalid_response', {
|
|
131
|
+
description: 'incomplete device authorization response',
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
return d;
|
|
135
|
+
}
|
|
136
|
+
/** Device Sign-In polling (4.6 step 3). Throws `authorization_pending` / `slow_down` etc. */
|
|
137
|
+
deviceToken(input) {
|
|
138
|
+
return this.token(async () => ({
|
|
139
|
+
grant_type: GRANT_DEVICE_CODE,
|
|
140
|
+
device_code: input.deviceCode,
|
|
141
|
+
session_id: input.sessionId,
|
|
142
|
+
}), input.dpop);
|
|
143
|
+
}
|
|
144
|
+
/** RFC 7009 revocation of an Account Token (4.9). */
|
|
145
|
+
async revoke(token, hint = 'refresh_token') {
|
|
146
|
+
const r = await this.post(this.metadata.revocation_endpoint, async () => ({
|
|
147
|
+
token,
|
|
148
|
+
token_type_hint: hint,
|
|
149
|
+
}));
|
|
150
|
+
if (r.status !== 200)
|
|
151
|
+
throw this.toError(r);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=token_client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token_client.js","sourceRoot":"","sources":["../../../src/poppy-client/token_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire types from the Personal Agent Protocol (Poppy) Draft 0.1.
|
|
3
|
+
*
|
|
4
|
+
* Every object is "open": the spec requires both sides to ignore fields they don't recognize
|
|
5
|
+
* (3.3), so these interfaces only name what this client reads, and keep an index signature.
|
|
6
|
+
*/
|
|
7
|
+
export interface PoppyDocument {
|
|
8
|
+
protocol_version: string;
|
|
9
|
+
organization: {
|
|
10
|
+
name: string;
|
|
11
|
+
domain: string;
|
|
12
|
+
[k: string]: unknown;
|
|
13
|
+
};
|
|
14
|
+
auth?: PoppyAuth | undefined;
|
|
15
|
+
agent?: {
|
|
16
|
+
protocols: PoppyProtocolEntry[];
|
|
17
|
+
[k: string]: unknown;
|
|
18
|
+
} | undefined;
|
|
19
|
+
web?: {
|
|
20
|
+
browser_session_endpoint?: string | undefined;
|
|
21
|
+
[k: string]: unknown;
|
|
22
|
+
};
|
|
23
|
+
apis?: PoppyApiEntry[] | undefined;
|
|
24
|
+
extensions?: Record<string, {
|
|
25
|
+
version: string;
|
|
26
|
+
[k: string]: unknown;
|
|
27
|
+
}> | undefined;
|
|
28
|
+
[k: string]: unknown;
|
|
29
|
+
}
|
|
30
|
+
export interface PoppyAuth {
|
|
31
|
+
issuer: string;
|
|
32
|
+
direct?: {
|
|
33
|
+
scopes: string[];
|
|
34
|
+
[k: string]: unknown;
|
|
35
|
+
} | undefined;
|
|
36
|
+
device?: {
|
|
37
|
+
scopes: string[];
|
|
38
|
+
[k: string]: unknown;
|
|
39
|
+
} | undefined;
|
|
40
|
+
mediated?: {
|
|
41
|
+
endpoint: string;
|
|
42
|
+
fields: MediatedField[];
|
|
43
|
+
scopes: string[];
|
|
44
|
+
[k: string]: unknown;
|
|
45
|
+
};
|
|
46
|
+
custom_scopes?: Record<string, string> | undefined;
|
|
47
|
+
[k: string]: unknown;
|
|
48
|
+
}
|
|
49
|
+
export interface MediatedField {
|
|
50
|
+
name: string;
|
|
51
|
+
label: string;
|
|
52
|
+
secret: boolean;
|
|
53
|
+
[k: string]: unknown;
|
|
54
|
+
}
|
|
55
|
+
export interface PoppyProtocolEntry {
|
|
56
|
+
type: string;
|
|
57
|
+
endpoint: string;
|
|
58
|
+
resource?: string | undefined;
|
|
59
|
+
[k: string]: unknown;
|
|
60
|
+
}
|
|
61
|
+
export interface PoppyApiEntry {
|
|
62
|
+
type: string;
|
|
63
|
+
url: string;
|
|
64
|
+
description?: string | undefined;
|
|
65
|
+
resource?: string | undefined;
|
|
66
|
+
[k: string]: unknown;
|
|
67
|
+
}
|
|
68
|
+
/** RFC 8414 metadata, plus the Poppy `poppy_domains` field (3.2). */
|
|
69
|
+
export interface AuthServerMetadata {
|
|
70
|
+
issuer: string;
|
|
71
|
+
token_endpoint: string;
|
|
72
|
+
revocation_endpoint: string;
|
|
73
|
+
authorization_endpoint?: string | undefined;
|
|
74
|
+
device_authorization_endpoint?: string | undefined;
|
|
75
|
+
poppy_domains: string[];
|
|
76
|
+
[k: string]: unknown;
|
|
77
|
+
}
|
|
78
|
+
/** Client ID Metadata Document published by the Personal Agent (4.1). */
|
|
79
|
+
export interface ClientMetadata {
|
|
80
|
+
client_id: string;
|
|
81
|
+
client_name: string;
|
|
82
|
+
logo_uri?: string | undefined;
|
|
83
|
+
jwks_uri: string;
|
|
84
|
+
redirect_uris: string[];
|
|
85
|
+
token_endpoint_auth_method: 'private_key_jwt';
|
|
86
|
+
extensions?: Record<string, {
|
|
87
|
+
version: string;
|
|
88
|
+
}> | undefined;
|
|
89
|
+
[k: string]: unknown;
|
|
90
|
+
}
|
|
91
|
+
/** Token endpoint success response (4.2, 4.4). */
|
|
92
|
+
export interface TokenResponse {
|
|
93
|
+
access_token: string;
|
|
94
|
+
token_type: string;
|
|
95
|
+
expires_in: number;
|
|
96
|
+
scope?: string | undefined;
|
|
97
|
+
session_id: string;
|
|
98
|
+
signed_in: boolean;
|
|
99
|
+
refresh_token?: string | undefined;
|
|
100
|
+
refresh_token_expires_in?: number | undefined;
|
|
101
|
+
[k: string]: unknown;
|
|
102
|
+
}
|
|
103
|
+
/** RFC 8628 device authorization response (4.6). */
|
|
104
|
+
export interface DeviceAuthorizationResponse {
|
|
105
|
+
device_code: string;
|
|
106
|
+
user_code: string;
|
|
107
|
+
verification_uri: string;
|
|
108
|
+
verification_uri_complete?: string | undefined;
|
|
109
|
+
expires_in: number;
|
|
110
|
+
interval?: number | undefined;
|
|
111
|
+
[k: string]: unknown;
|
|
112
|
+
}
|
|
113
|
+
export type MediatedStatus = 'complete' | 'code_required' | 'failed' | 'expired';
|
|
114
|
+
export interface MediatedResponse extends Partial<TokenResponse> {
|
|
115
|
+
status: MediatedStatus;
|
|
116
|
+
sign_in_id?: string | undefined;
|
|
117
|
+
code?: {
|
|
118
|
+
sent_to?: string | undefined;
|
|
119
|
+
[k: string]: unknown;
|
|
120
|
+
};
|
|
121
|
+
expires_at?: string | undefined;
|
|
122
|
+
}
|
|
123
|
+
export interface MessageContext {
|
|
124
|
+
locale?: string | undefined;
|
|
125
|
+
time_zone?: string | undefined;
|
|
126
|
+
user_available?: boolean | undefined;
|
|
127
|
+
[k: string]: unknown;
|
|
128
|
+
}
|
|
129
|
+
/** A message the Personal Agent sends (7.4). */
|
|
130
|
+
export interface OutgoingMessage {
|
|
131
|
+
id: string;
|
|
132
|
+
sender: 'agent' | 'human';
|
|
133
|
+
text?: string | undefined;
|
|
134
|
+
data?: Record<string, unknown> | undefined;
|
|
135
|
+
context?: MessageContext | undefined;
|
|
136
|
+
}
|
|
137
|
+
/** A message as it appears in a `message` event (7.5). */
|
|
138
|
+
export interface EventMessage {
|
|
139
|
+
id: string;
|
|
140
|
+
role?: 'user' | 'company' | undefined;
|
|
141
|
+
sender: 'agent' | 'human';
|
|
142
|
+
text?: string | undefined;
|
|
143
|
+
data?: Record<string, unknown> | undefined;
|
|
144
|
+
[k: string]: unknown;
|
|
145
|
+
}
|
|
146
|
+
export type ConversationStatus = 'working' | 'idle' | 'queued' | 'closed';
|
|
147
|
+
export type Responder = 'agent' | 'human';
|
|
148
|
+
export interface ConversationEvent {
|
|
149
|
+
id: string;
|
|
150
|
+
type: string;
|
|
151
|
+
created_at: string;
|
|
152
|
+
message?: EventMessage | undefined;
|
|
153
|
+
status?: ConversationStatus | undefined;
|
|
154
|
+
responder?: Responder | undefined;
|
|
155
|
+
error?: string | undefined;
|
|
156
|
+
scope?: string | undefined;
|
|
157
|
+
reason?: string | undefined;
|
|
158
|
+
conversation_id?: string | undefined;
|
|
159
|
+
[k: string]: unknown;
|
|
160
|
+
}
|
|
161
|
+
export interface ConversationState {
|
|
162
|
+
status: ConversationStatus;
|
|
163
|
+
responder: Responder;
|
|
164
|
+
}
|
|
165
|
+
export interface StartConversationResponse extends ConversationState {
|
|
166
|
+
conversation_id: string;
|
|
167
|
+
/** Present when the request carried `wait` (7.3). */
|
|
168
|
+
events?: ConversationEvent[] | undefined;
|
|
169
|
+
cursor?: string | undefined;
|
|
170
|
+
has_more?: boolean | undefined;
|
|
171
|
+
[k: string]: unknown;
|
|
172
|
+
}
|
|
173
|
+
export interface EventsPage extends ConversationState {
|
|
174
|
+
conversation_id: string;
|
|
175
|
+
events: ConversationEvent[];
|
|
176
|
+
cursor?: string | undefined;
|
|
177
|
+
has_more: boolean;
|
|
178
|
+
[k: string]: unknown;
|
|
179
|
+
}
|
|
180
|
+
export interface TextDelta {
|
|
181
|
+
message_id: string;
|
|
182
|
+
text: string;
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/poppy-client/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire types from the Personal Agent Protocol (Poppy) Draft 0.1.
|
|
3
|
+
*
|
|
4
|
+
* Every object is "open": the spec requires both sides to ignore fields they don't recognize
|
|
5
|
+
* (3.3), so these interfaces only name what this client reads, and keep an index signature.
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/poppy-client/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** A random URL-safe ID. 16 bytes = 128 random bits, the floor the spec sets for `jti` (4.2). */
|
|
2
|
+
export declare function randomId(prefix?: string, bytes?: number): string;
|
|
3
|
+
export declare function sha256b64url(input: string): string;
|
|
4
|
+
export declare function nowSeconds(): number;
|
|
5
|
+
export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
|
|
6
|
+
export type FetchLike = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
|
|
7
|
+
/** Hosts we treat as "local development" for messages and defaults. */
|
|
8
|
+
export declare function isLoopbackHost(hostname: string): boolean;
|
|
9
|
+
export interface SecurityOptions {
|
|
10
|
+
/**
|
|
11
|
+
* NON-SPEC. Lets `http:` URLs through every place the spec demands HTTPS (client_id,
|
|
12
|
+
* discovery, issuer, endpoints, redirects). Only for testing against a local dev server.
|
|
13
|
+
*/
|
|
14
|
+
insecureDev?: boolean | undefined;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Parses `value` as an absolute URL and enforces the spec's HTTPS requirement. With
|
|
18
|
+
* `insecureDev`, plain `http:` is tolerated too.
|
|
19
|
+
*/
|
|
20
|
+
export declare function requireSecureUrl(value: unknown, what: string, sec: SecurityOptions): URL;
|
|
21
|
+
/** Strip a single leading `www.` and lowercase, as the spec compares domains (3.1). */
|
|
22
|
+
export declare function normalizeDomain(domain: string): string;
|
|
23
|
+
/** `Retry-After` as seconds: either delta-seconds or an HTTP-date. */
|
|
24
|
+
export declare function parseRetryAfter(value: string | null): number | undefined;
|
|
25
|
+
export interface WwwAuthChallenge {
|
|
26
|
+
scheme: string;
|
|
27
|
+
params: Record<string, string>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Minimal `WWW-Authenticate` parser: enough for `DPoP error="...", scope="..."` and
|
|
31
|
+
* `Bearer error="..."` (RFC 6750 / RFC 9449). Handles several challenges in one header.
|
|
32
|
+
*/
|
|
33
|
+
export declare function parseWwwAuthenticate(header: string | null): WwwAuthChallenge[];
|
|
34
|
+
/** The first `error` found in any challenge of a `WWW-Authenticate` header. */
|
|
35
|
+
export declare function wwwAuthError(header: string | null): {
|
|
36
|
+
error?: string | undefined;
|
|
37
|
+
scope?: string | undefined;
|
|
38
|
+
description?: string | undefined;
|
|
39
|
+
};
|
|
40
|
+
/** A space-separated scope string as a set (OAuth scope syntax, RFC 6749 3.3). */
|
|
41
|
+
export declare function scopeSet(scope: string | undefined): Set<string>;
|
|
42
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/poppy-client/util.ts"],"names":[],"mappings":"AAEA,iGAAiG;AACjG,wBAAgB,QAAQ,CAAC,MAAM,SAAK,EAAE,KAAK,SAAK,GAAG,MAAM,CAExD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAarE;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEjG,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAKxD;AAED,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACnC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,GAAG,CAiBxF;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAOxE;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,gBAAgB,EAAE,CA2B9E;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG;IACnD,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,CAWA;AAED,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAE/D"}
|