@datalayer/personal-agent-protocol 0.0.0-stage → 0.3.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/README.md +21 -2
- package/lib/auth.d.ts +44 -0
- package/lib/auth.d.ts.map +1 -0
- package/lib/auth.js +168 -0
- package/lib/auth.js.map +1 -0
- package/lib/crypto.d.ts +57 -0
- package/lib/crypto.d.ts.map +1 -0
- package/lib/crypto.js +188 -0
- package/lib/crypto.js.map +1 -0
- package/lib/discovery.d.ts +11 -0
- package/lib/discovery.d.ts.map +1 -0
- package/lib/discovery.js +100 -0
- package/lib/discovery.js.map +1 -0
- package/lib/errors.d.ts +41 -0
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +47 -0
- package/lib/errors.js.map +1 -0
- package/lib/index.d.ts +9 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +3778 -0
- package/lib/index.js.map +7 -0
- package/lib/json.d.ts +3 -0
- package/lib/json.d.ts.map +1 -0
- package/lib/json.js +157 -0
- package/lib/json.js.map +1 -0
- package/lib/models.d.ts +136 -0
- package/lib/models.d.ts.map +1 -0
- package/lib/models.js +418 -0
- package/lib/models.js.map +1 -0
- package/lib/reactor.d.ts +84 -0
- package/lib/reactor.d.ts.map +1 -0
- package/lib/reactor.js +95 -0
- package/lib/reactor.js.map +1 -0
- package/lib/sessions.d.ts +78 -0
- package/lib/sessions.d.ts.map +1 -0
- package/lib/sessions.js +311 -0
- package/lib/sessions.js.map +1 -0
- package/package.json +34 -4
package/lib/models.js
ADDED
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
import { ProtocolValidationError } from "./errors.js";
|
|
2
|
+
function record(value, label) {
|
|
3
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
4
|
+
throw new ProtocolValidationError("invalid_type", `${label} must be an object`);
|
|
5
|
+
}
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
function string(value, label) {
|
|
9
|
+
if (typeof value !== "string" || value.length === 0) {
|
|
10
|
+
throw new ProtocolValidationError("invalid_type", `${label} must be a non-empty string`);
|
|
11
|
+
}
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
function array(value, label) {
|
|
15
|
+
if (!Array.isArray(value)) {
|
|
16
|
+
throw new ProtocolValidationError("invalid_type", `${label} must be an array`);
|
|
17
|
+
}
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
function boolean(value, label) {
|
|
21
|
+
if (typeof value !== "boolean") {
|
|
22
|
+
throw new ProtocolValidationError("invalid_type", `${label} must be a boolean`);
|
|
23
|
+
}
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
function integer(value, label, minimum = 1) {
|
|
27
|
+
if (!Number.isInteger(value) || value < minimum) {
|
|
28
|
+
throw new ProtocolValidationError("invalid_type", `${label} must be an integer greater than or equal to ${minimum}`);
|
|
29
|
+
}
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
function identifier(value, label) {
|
|
33
|
+
const result = string(value, label);
|
|
34
|
+
if (!/^[A-Za-z0-9_-]{1,256}$/.test(result)) {
|
|
35
|
+
throw new ProtocolValidationError("invalid_identifier", `${label} must use the URL-safe base64 alphabet`);
|
|
36
|
+
}
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
function timestamp(value, label) {
|
|
40
|
+
const result = string(value, label);
|
|
41
|
+
if (!/(?:Z|[+-][0-9]{2}:[0-9]{2})$/u.test(result) || Number.isNaN(Date.parse(result))) {
|
|
42
|
+
throw new ProtocolValidationError("invalid_timestamp", `${label} must be an RFC 3339 timestamp with a timezone`);
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
function oneOf(value, values, label) {
|
|
47
|
+
if (typeof value !== "string" || !values.includes(value)) {
|
|
48
|
+
throw new ProtocolValidationError("invalid_value", `${label} must be one of ${values.join(", ")}`);
|
|
49
|
+
}
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
function optionalRecord(value, label) {
|
|
53
|
+
return value === undefined ? undefined : record(value, label);
|
|
54
|
+
}
|
|
55
|
+
function extensions(value, label) {
|
|
56
|
+
const source = record(value ?? {}, label);
|
|
57
|
+
return Object.fromEntries(Object.entries(source).map(([name, item]) => {
|
|
58
|
+
const extension = record(item, `${label}.${name}`);
|
|
59
|
+
const version = string(extension.version, `${label}.${name}.version`);
|
|
60
|
+
if (!/^(0|[1-9][0-9]*)$/.test(version)) {
|
|
61
|
+
throw new ProtocolValidationError("invalid_extension_version", `${label}.${name}.version must be a major version`);
|
|
62
|
+
}
|
|
63
|
+
return [name, { ...extension, version }];
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
function httpsUrl(value, label) {
|
|
67
|
+
const result = string(value, label);
|
|
68
|
+
let parsed;
|
|
69
|
+
try {
|
|
70
|
+
parsed = new URL(result);
|
|
71
|
+
}
|
|
72
|
+
catch (cause) {
|
|
73
|
+
throw new ProtocolValidationError("invalid_url", `${label} must be an HTTPS URL`, {
|
|
74
|
+
cause,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
if (parsed.protocol !== "https:" || parsed.username || parsed.password) {
|
|
78
|
+
throw new ProtocolValidationError("invalid_url", `${label} must be an HTTPS URL without user information`);
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
function domain(value, label) {
|
|
83
|
+
const result = string(value, label).replace(/\.$/, "").toLowerCase();
|
|
84
|
+
if (!/^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/.test(result)) {
|
|
85
|
+
throw new ProtocolValidationError("invalid_domain", `${label} must be a DNS domain`);
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
function scopes(value, label) {
|
|
90
|
+
const source = record(value, label);
|
|
91
|
+
return {
|
|
92
|
+
...source,
|
|
93
|
+
scopes: array(source.scopes ?? [], `${label}.scopes`).map((item) => string(item, "scope")),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function stringMap(value, label) {
|
|
97
|
+
const source = record(value, label);
|
|
98
|
+
return Object.fromEntries(Object.entries(source).map(([key, item]) => [key, string(item, `${label}.${key}`)]));
|
|
99
|
+
}
|
|
100
|
+
export function parseDiscoveryDocument(value) {
|
|
101
|
+
const source = record(value, "poppy.json");
|
|
102
|
+
const version = string(source.protocol_version, "protocol_version");
|
|
103
|
+
const versionMatch = /^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$/.exec(version);
|
|
104
|
+
if (!versionMatch || versionMatch[1] !== "0") {
|
|
105
|
+
throw new ProtocolValidationError("unsupported_protocol_version", "protocol_version must be a supported major.minor version");
|
|
106
|
+
}
|
|
107
|
+
const organizationSource = record(source.organization, "organization");
|
|
108
|
+
const organization = {
|
|
109
|
+
...organizationSource,
|
|
110
|
+
name: string(organizationSource.name, "organization.name"),
|
|
111
|
+
domain: domain(organizationSource.domain, "organization.domain"),
|
|
112
|
+
};
|
|
113
|
+
let auth;
|
|
114
|
+
if (source.auth !== undefined) {
|
|
115
|
+
const authSource = record(source.auth, "auth");
|
|
116
|
+
let mediated;
|
|
117
|
+
if (authSource.mediated !== undefined) {
|
|
118
|
+
const mediatedSource = record(authSource.mediated, "auth.mediated");
|
|
119
|
+
const fields = array(mediatedSource.fields, "auth.mediated.fields").map((item, index) => {
|
|
120
|
+
const field = record(item, `auth.mediated.fields[${index}]`);
|
|
121
|
+
return {
|
|
122
|
+
...field,
|
|
123
|
+
name: string(field.name, `auth.mediated.fields[${index}].name`),
|
|
124
|
+
label: string(field.label, `auth.mediated.fields[${index}].label`),
|
|
125
|
+
secret: boolean(field.secret, `auth.mediated.fields[${index}].secret`),
|
|
126
|
+
};
|
|
127
|
+
});
|
|
128
|
+
if (fields.length === 0) {
|
|
129
|
+
throw new ProtocolValidationError("invalid_mediated_sign_in", "auth.mediated.fields must not be empty");
|
|
130
|
+
}
|
|
131
|
+
mediated = {
|
|
132
|
+
...mediatedSource,
|
|
133
|
+
...scopes(mediatedSource, "auth.mediated"),
|
|
134
|
+
endpoint: httpsUrl(mediatedSource.endpoint, "auth.mediated.endpoint"),
|
|
135
|
+
fields,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
auth = {
|
|
139
|
+
...authSource,
|
|
140
|
+
issuer: httpsUrl(authSource.issuer, "auth.issuer").replace(/\/$/, ""),
|
|
141
|
+
...(authSource.direct === undefined
|
|
142
|
+
? {}
|
|
143
|
+
: { direct: scopes(authSource.direct, "auth.direct") }),
|
|
144
|
+
...(authSource.device === undefined
|
|
145
|
+
? {}
|
|
146
|
+
: { device: scopes(authSource.device, "auth.device") }),
|
|
147
|
+
...(mediated === undefined ? {} : { mediated }),
|
|
148
|
+
...(authSource.custom_scopes === undefined
|
|
149
|
+
? {}
|
|
150
|
+
: {
|
|
151
|
+
custom_scopes: stringMap(authSource.custom_scopes, "auth.custom_scopes"),
|
|
152
|
+
}),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
const apis = array(source.apis ?? [], "apis").map((item, index) => {
|
|
156
|
+
const api = record(item, `apis[${index}]`);
|
|
157
|
+
return {
|
|
158
|
+
...api,
|
|
159
|
+
type: string(api.type, `apis[${index}].type`),
|
|
160
|
+
url: httpsUrl(api.url, `apis[${index}].url`),
|
|
161
|
+
description: string(api.description, `apis[${index}].description`),
|
|
162
|
+
...(api.resource === undefined
|
|
163
|
+
? {}
|
|
164
|
+
: { resource: httpsUrl(api.resource, `apis[${index}].resource`) }),
|
|
165
|
+
};
|
|
166
|
+
});
|
|
167
|
+
let agent;
|
|
168
|
+
if (source.agent !== undefined) {
|
|
169
|
+
const agentSource = record(source.agent, "agent");
|
|
170
|
+
const protocols = array(agentSource.protocols, "agent.protocols").map((item, index) => {
|
|
171
|
+
const protocol = record(item, `agent.protocols[${index}]`);
|
|
172
|
+
return {
|
|
173
|
+
...protocol,
|
|
174
|
+
type: string(protocol.type, `agent.protocols[${index}].type`),
|
|
175
|
+
endpoint: httpsUrl(protocol.endpoint, `agent.protocols[${index}].endpoint`),
|
|
176
|
+
...(protocol.resource === undefined
|
|
177
|
+
? {}
|
|
178
|
+
: {
|
|
179
|
+
resource: httpsUrl(protocol.resource, `agent.protocols[${index}].resource`),
|
|
180
|
+
}),
|
|
181
|
+
};
|
|
182
|
+
});
|
|
183
|
+
if (protocols.length === 0) {
|
|
184
|
+
throw new ProtocolValidationError("invalid_agent", "agent.protocols must not be empty");
|
|
185
|
+
}
|
|
186
|
+
agent = { ...agentSource, protocols };
|
|
187
|
+
}
|
|
188
|
+
let web;
|
|
189
|
+
if (source.web !== undefined) {
|
|
190
|
+
const webSource = record(source.web, "web");
|
|
191
|
+
web = {
|
|
192
|
+
...webSource,
|
|
193
|
+
...(webSource.browser_session_endpoint === undefined
|
|
194
|
+
? {}
|
|
195
|
+
: {
|
|
196
|
+
browser_session_endpoint: httpsUrl(webSource.browser_session_endpoint, "web.browser_session_endpoint"),
|
|
197
|
+
}),
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
if (!agent && apis.length === 0 && !web) {
|
|
201
|
+
throw new ProtocolValidationError("missing_interface", "one of agent, apis, or web is required");
|
|
202
|
+
}
|
|
203
|
+
if ((agent || apis.length > 0 || web?.browser_session_endpoint) && !auth) {
|
|
204
|
+
throw new ProtocolValidationError("missing_auth", "auth is required for sessions, APIs, or conversations");
|
|
205
|
+
}
|
|
206
|
+
const parsedExtensions = extensions(source.extensions, "extensions");
|
|
207
|
+
return {
|
|
208
|
+
...source,
|
|
209
|
+
protocol_version: version,
|
|
210
|
+
organization,
|
|
211
|
+
...(auth ? { auth } : {}),
|
|
212
|
+
...(agent ? { agent } : {}),
|
|
213
|
+
...(web ? { web } : {}),
|
|
214
|
+
apis,
|
|
215
|
+
extensions: parsedExtensions,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
export function parseOAuthServerMetadata(value) {
|
|
219
|
+
const source = record(value, "OAuth metadata");
|
|
220
|
+
const poppyDomains = array(source.poppy_domains, "poppy_domains").map((item) => domain(item, "poppy_domains entry"));
|
|
221
|
+
if (poppyDomains.length === 0) {
|
|
222
|
+
throw new ProtocolValidationError("invalid_oauth_metadata", "poppy_domains must not be empty");
|
|
223
|
+
}
|
|
224
|
+
return {
|
|
225
|
+
...source,
|
|
226
|
+
issuer: httpsUrl(source.issuer, "issuer").replace(/\/$/, ""),
|
|
227
|
+
token_endpoint: httpsUrl(source.token_endpoint, "token_endpoint"),
|
|
228
|
+
revocation_endpoint: httpsUrl(source.revocation_endpoint, "revocation_endpoint"),
|
|
229
|
+
...(source.authorization_endpoint === undefined
|
|
230
|
+
? {}
|
|
231
|
+
: {
|
|
232
|
+
authorization_endpoint: httpsUrl(source.authorization_endpoint, "authorization_endpoint"),
|
|
233
|
+
}),
|
|
234
|
+
...(source.device_authorization_endpoint === undefined
|
|
235
|
+
? {}
|
|
236
|
+
: {
|
|
237
|
+
device_authorization_endpoint: httpsUrl(source.device_authorization_endpoint, "device_authorization_endpoint"),
|
|
238
|
+
}),
|
|
239
|
+
poppy_domains: poppyDomains,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
export function parseClientMetadata(value) {
|
|
243
|
+
const source = record(value, "client metadata");
|
|
244
|
+
const clientId = httpsUrl(source.client_id, "client_id");
|
|
245
|
+
const clientDomain = new URL(clientId).hostname;
|
|
246
|
+
const jwksUri = httpsUrl(source.jwks_uri, "jwks_uri");
|
|
247
|
+
const redirectUris = array(source.redirect_uris ?? [], "redirect_uris").map((item) => httpsUrl(item, "redirect URI"));
|
|
248
|
+
if (new URL(jwksUri).hostname !== clientDomain ||
|
|
249
|
+
redirectUris.some((uri) => new URL(uri).hostname !== clientDomain)) {
|
|
250
|
+
throw new ProtocolValidationError("client_domain_mismatch", "jwks_uri and redirect_uris must use the client_id domain");
|
|
251
|
+
}
|
|
252
|
+
const authMethod = source.token_endpoint_auth_method ?? "private_key_jwt";
|
|
253
|
+
if (authMethod !== "private_key_jwt") {
|
|
254
|
+
throw new ProtocolValidationError("invalid_client_auth_method", "token_endpoint_auth_method must be private_key_jwt");
|
|
255
|
+
}
|
|
256
|
+
return {
|
|
257
|
+
...source,
|
|
258
|
+
client_id: clientId,
|
|
259
|
+
client_name: string(source.client_name, "client_name"),
|
|
260
|
+
...(source.logo_uri === undefined
|
|
261
|
+
? {}
|
|
262
|
+
: { logo_uri: httpsUrl(source.logo_uri, "logo_uri") }),
|
|
263
|
+
jwks_uri: jwksUri,
|
|
264
|
+
redirect_uris: redirectUris,
|
|
265
|
+
token_endpoint_auth_method: authMethod,
|
|
266
|
+
extensions: extensions(source.extensions, "extensions"),
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
export function parseOperation(value) {
|
|
270
|
+
const source = record(value, "operation");
|
|
271
|
+
const state = oneOf(source.state, ["proposed", "in_progress", "succeeded", "failed", "cancelled", "expired"], "operation.state");
|
|
272
|
+
const revision = integer(source.revision, "operation.revision");
|
|
273
|
+
let confirmation = null;
|
|
274
|
+
if (source.confirmation !== undefined && source.confirmation !== null) {
|
|
275
|
+
const item = record(source.confirmation, "operation.confirmation");
|
|
276
|
+
confirmation = {
|
|
277
|
+
...item,
|
|
278
|
+
revision: integer(item.revision, "operation.confirmation.revision"),
|
|
279
|
+
approved_by: oneOf(item.approved_by, ["user", "standing_permission"], "operation.confirmation.approved_by"),
|
|
280
|
+
confirmed_at: timestamp(item.confirmed_at, "operation.confirmation.confirmed_at"),
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
let result = null;
|
|
284
|
+
if (source.result !== undefined && source.result !== null) {
|
|
285
|
+
const item = record(source.result, "operation.result");
|
|
286
|
+
result = {
|
|
287
|
+
...item,
|
|
288
|
+
summary: string(item.summary, "operation.result.summary"),
|
|
289
|
+
...(item.data === undefined
|
|
290
|
+
? {}
|
|
291
|
+
: { data: record(item.data, "operation.result.data") }),
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
const expiresAt = source.expires_at === undefined
|
|
295
|
+
? undefined
|
|
296
|
+
: timestamp(source.expires_at, "operation.expires_at");
|
|
297
|
+
if (state === "proposed" && expiresAt === undefined) {
|
|
298
|
+
throw new ProtocolValidationError("invalid_operation", "a proposed operation requires expires_at");
|
|
299
|
+
}
|
|
300
|
+
if (state === "proposed" && confirmation !== null) {
|
|
301
|
+
throw new ProtocolValidationError("invalid_operation", "a proposed operation cannot be confirmed");
|
|
302
|
+
}
|
|
303
|
+
if (confirmation !== null && confirmation.revision !== revision) {
|
|
304
|
+
throw new ProtocolValidationError("invalid_operation", "confirmation must name the current revision");
|
|
305
|
+
}
|
|
306
|
+
if (["succeeded", "failed", "cancelled", "expired"].includes(state) && result === null) {
|
|
307
|
+
throw new ProtocolValidationError("invalid_operation", "a final operation requires a result");
|
|
308
|
+
}
|
|
309
|
+
return {
|
|
310
|
+
...source,
|
|
311
|
+
operation_id: identifier(source.operation_id, "operation.operation_id"),
|
|
312
|
+
revision,
|
|
313
|
+
state,
|
|
314
|
+
summary: string(source.summary, "operation.summary"),
|
|
315
|
+
...(source.terms === undefined
|
|
316
|
+
? {}
|
|
317
|
+
: { terms: record(source.terms, "operation.terms") }),
|
|
318
|
+
...(expiresAt === undefined ? {} : { expires_at: expiresAt }),
|
|
319
|
+
user_approval_required: source.user_approval_required === undefined
|
|
320
|
+
? false
|
|
321
|
+
: boolean(source.user_approval_required, "operation.user_approval_required"),
|
|
322
|
+
...(source.url === undefined ? {} : { url: httpsUrl(source.url, "operation.url") }),
|
|
323
|
+
confirmation,
|
|
324
|
+
result,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
export function parseMessage(value) {
|
|
328
|
+
const source = record(value, "message");
|
|
329
|
+
const text = source.text === undefined ? undefined : string(source.text, "message.text");
|
|
330
|
+
const data = optionalRecord(source.data, "message.data");
|
|
331
|
+
const context = optionalRecord(source.context, "message.context");
|
|
332
|
+
const operation = source.operation === undefined ? undefined : parseOperation(source.operation);
|
|
333
|
+
if (text === undefined && data === undefined && context === undefined && operation === undefined) {
|
|
334
|
+
throw new ProtocolValidationError("invalid_message", "a message requires text, data, context, or operation");
|
|
335
|
+
}
|
|
336
|
+
return {
|
|
337
|
+
...source,
|
|
338
|
+
id: identifier(source.id, "message.id"),
|
|
339
|
+
sender: oneOf(source.sender, ["agent", "human"], "message.sender"),
|
|
340
|
+
...(source.role === undefined
|
|
341
|
+
? {}
|
|
342
|
+
: { role: oneOf(source.role, ["user", "company"], "message.role") }),
|
|
343
|
+
...(text === undefined ? {} : { text }),
|
|
344
|
+
...(data === undefined ? {} : { data }),
|
|
345
|
+
...(context === undefined ? {} : { context }),
|
|
346
|
+
...(operation === undefined ? {} : { operation }),
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
export function parseConversationEvent(value) {
|
|
350
|
+
const source = record(value, "conversation event");
|
|
351
|
+
const type = string(source.type, "conversation event.type");
|
|
352
|
+
const parsed = {
|
|
353
|
+
...source,
|
|
354
|
+
id: identifier(source.id, "conversation event.id"),
|
|
355
|
+
type,
|
|
356
|
+
created_at: timestamp(source.created_at, "conversation event.created_at"),
|
|
357
|
+
...(source.message === undefined ? {} : { message: parseMessage(source.message) }),
|
|
358
|
+
...(source.status === undefined
|
|
359
|
+
? {}
|
|
360
|
+
: {
|
|
361
|
+
status: oneOf(source.status, ["working", "idle", "queued", "closed"], "conversation event.status"),
|
|
362
|
+
}),
|
|
363
|
+
...(source.responder === undefined
|
|
364
|
+
? {}
|
|
365
|
+
: {
|
|
366
|
+
responder: oneOf(source.responder, ["agent", "human"], "conversation event.responder"),
|
|
367
|
+
}),
|
|
368
|
+
...(source.error === undefined
|
|
369
|
+
? {}
|
|
370
|
+
: {
|
|
371
|
+
error: oneOf(source.error, ["sign_in_required", "insufficient_scope"], "conversation event.error"),
|
|
372
|
+
}),
|
|
373
|
+
...(source.scope === undefined ? {} : { scope: string(source.scope, "conversation event.scope") }),
|
|
374
|
+
...(source.reason === undefined
|
|
375
|
+
? {}
|
|
376
|
+
: { reason: string(source.reason, "conversation event.reason") }),
|
|
377
|
+
...(source.conversation_id === undefined
|
|
378
|
+
? {}
|
|
379
|
+
: {
|
|
380
|
+
conversation_id: identifier(source.conversation_id, "conversation event.conversation_id"),
|
|
381
|
+
}),
|
|
382
|
+
};
|
|
383
|
+
if (type === "message" && parsed.message === undefined) {
|
|
384
|
+
throw new ProtocolValidationError("invalid_event", "a message event requires message");
|
|
385
|
+
}
|
|
386
|
+
if (type === "state" && (parsed.status === undefined || parsed.responder === undefined)) {
|
|
387
|
+
throw new ProtocolValidationError("invalid_event", "a state event requires status and responder");
|
|
388
|
+
}
|
|
389
|
+
if (type === "authorization") {
|
|
390
|
+
if (parsed.error === undefined) {
|
|
391
|
+
throw new ProtocolValidationError("invalid_event", "an authorization event requires error");
|
|
392
|
+
}
|
|
393
|
+
if (parsed.error === "insufficient_scope" && parsed.scope === undefined) {
|
|
394
|
+
throw new ProtocolValidationError("invalid_event", "insufficient_scope requires scope");
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
if (type === "user_requested" && parsed.reason === undefined) {
|
|
398
|
+
throw new ProtocolValidationError("invalid_event", "a user_requested event requires reason");
|
|
399
|
+
}
|
|
400
|
+
if ((type === "direct_opened" || type === "direct_closed") &&
|
|
401
|
+
parsed.conversation_id === undefined) {
|
|
402
|
+
throw new ProtocolValidationError("invalid_event", "a direct conversation event requires conversation_id");
|
|
403
|
+
}
|
|
404
|
+
return parsed;
|
|
405
|
+
}
|
|
406
|
+
export function parseConversationEventPage(value) {
|
|
407
|
+
const source = record(value, "conversation event page");
|
|
408
|
+
return {
|
|
409
|
+
...source,
|
|
410
|
+
conversation_id: identifier(source.conversation_id, "conversation_id"),
|
|
411
|
+
events: array(source.events, "events").map(parseConversationEvent),
|
|
412
|
+
cursor: identifier(source.cursor, "cursor"),
|
|
413
|
+
has_more: boolean(source.has_more, "has_more"),
|
|
414
|
+
status: oneOf(source.status, ["working", "idle", "queued", "closed"], "status"),
|
|
415
|
+
responder: oneOf(source.responder, ["agent", "human"], "responder"),
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
|
package/lib/reactor.d.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { type ReactorPlatform, type ReactorPlatformView, type ContributionPoint, type PlatformInput } from "@datalayer/reactor";
|
|
2
|
+
import type { SecretValue } from "./sessions.js";
|
|
3
|
+
export interface DiscoveryTransport {
|
|
4
|
+
fetch(input: URL, init: RequestInit): Promise<Response>;
|
|
5
|
+
}
|
|
6
|
+
export interface UrlSafetyPolicy {
|
|
7
|
+
assertSafe(url: URL): void | Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export interface ProtocolProfile {
|
|
10
|
+
readonly version: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ExtensionHandler {
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly majorVersion: number;
|
|
15
|
+
}
|
|
16
|
+
export interface Clock {
|
|
17
|
+
now(): Date;
|
|
18
|
+
}
|
|
19
|
+
export interface RandomSource {
|
|
20
|
+
bytes(length: number): Uint8Array;
|
|
21
|
+
}
|
|
22
|
+
export interface Signer {
|
|
23
|
+
sign(claims: Readonly<Record<string, unknown>>, options: {
|
|
24
|
+
readonly purpose: string;
|
|
25
|
+
}): Promise<SecretValue>;
|
|
26
|
+
}
|
|
27
|
+
export interface KeyReference {
|
|
28
|
+
readonly id: string;
|
|
29
|
+
readonly algorithm: string;
|
|
30
|
+
}
|
|
31
|
+
export interface KeyStore {
|
|
32
|
+
getOrCreate(options: {
|
|
33
|
+
readonly tenantId: string;
|
|
34
|
+
readonly subject: string;
|
|
35
|
+
readonly purpose: string;
|
|
36
|
+
}): Promise<KeyReference>;
|
|
37
|
+
}
|
|
38
|
+
export interface TokenStore {
|
|
39
|
+
put(reference: string, token: SecretValue): Promise<void>;
|
|
40
|
+
get(reference: string): Promise<SecretValue | undefined>;
|
|
41
|
+
delete(reference: string): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
export interface ProtocolCache {
|
|
44
|
+
put(key: string, value: unknown, options: {
|
|
45
|
+
readonly expiresAt: Date;
|
|
46
|
+
}): Promise<void>;
|
|
47
|
+
get(key: string): Promise<unknown | undefined>;
|
|
48
|
+
delete(key: string): Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
export interface BrowserHandoff {
|
|
51
|
+
open(authorizationUrl: SecretValue): Promise<void>;
|
|
52
|
+
}
|
|
53
|
+
export interface DpopProofRequest {
|
|
54
|
+
readonly method: string;
|
|
55
|
+
readonly url: string;
|
|
56
|
+
readonly tenantId: string;
|
|
57
|
+
readonly subject: string;
|
|
58
|
+
readonly issuer: string;
|
|
59
|
+
readonly accessToken?: SecretValue;
|
|
60
|
+
readonly nonce?: string;
|
|
61
|
+
}
|
|
62
|
+
export interface DpopProofProvider {
|
|
63
|
+
create(request: DpopProofRequest): Promise<SecretValue>;
|
|
64
|
+
}
|
|
65
|
+
export declare const DiscoveryTransports: ContributionPoint<DiscoveryTransport>;
|
|
66
|
+
export declare const UrlSafetyPolicies: ContributionPoint<UrlSafetyPolicy>;
|
|
67
|
+
export declare const ProtocolProfiles: ContributionPoint<ProtocolProfile>;
|
|
68
|
+
export declare const ExtensionHandlers: ContributionPoint<ExtensionHandler>;
|
|
69
|
+
export declare const Clocks: ContributionPoint<Clock>;
|
|
70
|
+
export declare const RandomSources: ContributionPoint<RandomSource>;
|
|
71
|
+
export declare const Signers: ContributionPoint<Signer>;
|
|
72
|
+
export declare const KeyStores: ContributionPoint<KeyStore>;
|
|
73
|
+
export declare const TokenStores: ContributionPoint<TokenStore>;
|
|
74
|
+
export declare const Caches: ContributionPoint<ProtocolCache>;
|
|
75
|
+
export declare const BrowserHandoffs: ContributionPoint<BrowserHandoff>;
|
|
76
|
+
export declare const DpopProofProviders: ContributionPoint<DpopProofProvider>;
|
|
77
|
+
export interface PapCoreOptions {
|
|
78
|
+
readonly fetch?: typeof globalThis.fetch;
|
|
79
|
+
readonly assertSafeUrl?: (url: URL) => void | Promise<void>;
|
|
80
|
+
}
|
|
81
|
+
export declare function createPapCorePlugin(options?: PapCoreOptions): import("@datalayer/reactor").ReactorPlugin<Record<string, never>, unknown, unknown>;
|
|
82
|
+
export declare function buildPapReactor(options?: PapCoreOptions, plugins?: PlatformInput[]): ReactorPlatform;
|
|
83
|
+
export declare function firstContribution<T>(reactor: ReactorPlatformView, point: ContributionPoint<T>, label: string): T;
|
|
84
|
+
//# sourceMappingURL=reactor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactor.d.ts","sourceRoot":"","sources":["../src/reactor.ts"],"names":[],"mappings":"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"}
|
package/lib/reactor.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { buildReactorFromPlugins, contribution, defineContributionPoint, definePlugin, } from "@datalayer/reactor";
|
|
2
|
+
import { DiscoveryError } from "./errors.js";
|
|
3
|
+
export const DiscoveryTransports = defineContributionPoint("pap.discoveryTransport");
|
|
4
|
+
export const UrlSafetyPolicies = defineContributionPoint("pap.urlSafetyPolicy");
|
|
5
|
+
export const ProtocolProfiles = defineContributionPoint("pap.protocolProfile");
|
|
6
|
+
export const ExtensionHandlers = defineContributionPoint("pap.extensionHandler");
|
|
7
|
+
export const Clocks = defineContributionPoint("pap.clock");
|
|
8
|
+
export const RandomSources = defineContributionPoint("pap.randomSource");
|
|
9
|
+
export const Signers = defineContributionPoint("pap.signer");
|
|
10
|
+
export const KeyStores = defineContributionPoint("pap.keyStore");
|
|
11
|
+
export const TokenStores = defineContributionPoint("pap.tokenStore");
|
|
12
|
+
export const Caches = defineContributionPoint("pap.cache");
|
|
13
|
+
export const BrowserHandoffs = defineContributionPoint("pap.browserHandoff");
|
|
14
|
+
export const DpopProofProviders = defineContributionPoint("pap.dpopProofProvider");
|
|
15
|
+
const systemClock = { now: () => new Date() };
|
|
16
|
+
const systemRandom = {
|
|
17
|
+
bytes(length) {
|
|
18
|
+
if (!Number.isInteger(length) || length <= 0) {
|
|
19
|
+
throw new RangeError("Random byte length must be a positive integer");
|
|
20
|
+
}
|
|
21
|
+
if (!globalThis.crypto) {
|
|
22
|
+
throw new Error("A cryptographically secure random source is required");
|
|
23
|
+
}
|
|
24
|
+
return globalThis.crypto.getRandomValues(new Uint8Array(length));
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
function assertObviouslyPublic(url) {
|
|
28
|
+
if (url.protocol !== "https:" || url.username || url.password) {
|
|
29
|
+
throw new DiscoveryError("unsafe_url", "Discovery and metadata URLs must use HTTPS");
|
|
30
|
+
}
|
|
31
|
+
const host = url.hostname.toLowerCase().replace(/[\[\]]/g, "");
|
|
32
|
+
if (host === "localhost" ||
|
|
33
|
+
host.endsWith(".localhost") ||
|
|
34
|
+
host === "::1" ||
|
|
35
|
+
/^127\./.test(host) ||
|
|
36
|
+
/^10\./.test(host) ||
|
|
37
|
+
/^192\.168\./.test(host) ||
|
|
38
|
+
/^169\.254\./.test(host) ||
|
|
39
|
+
/^172\.(1[6-9]|2[0-9]|3[01])\./.test(host)) {
|
|
40
|
+
throw new DiscoveryError("unsafe_address", "Discovery URL names a private address");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export function createPapCorePlugin(options = {}) {
|
|
44
|
+
const fetcher = options.fetch ?? globalThis.fetch;
|
|
45
|
+
if (!fetcher) {
|
|
46
|
+
throw new DiscoveryError("fetch_unavailable", "A fetch implementation is required");
|
|
47
|
+
}
|
|
48
|
+
return definePlugin({
|
|
49
|
+
name: "@datalayer/personal-agent-protocol-core",
|
|
50
|
+
version: "0.3.0",
|
|
51
|
+
contributionPoints: [
|
|
52
|
+
DiscoveryTransports,
|
|
53
|
+
UrlSafetyPolicies,
|
|
54
|
+
ProtocolProfiles,
|
|
55
|
+
ExtensionHandlers,
|
|
56
|
+
Clocks,
|
|
57
|
+
RandomSources,
|
|
58
|
+
Signers,
|
|
59
|
+
KeyStores,
|
|
60
|
+
TokenStores,
|
|
61
|
+
Caches,
|
|
62
|
+
BrowserHandoffs,
|
|
63
|
+
DpopProofProviders,
|
|
64
|
+
],
|
|
65
|
+
contributes: [
|
|
66
|
+
contribution(DiscoveryTransports, { fetch: (input, init) => fetcher(input, init) }, { id: "fetch", order: 100 }),
|
|
67
|
+
contribution(UrlSafetyPolicies, {
|
|
68
|
+
async assertSafe(url) {
|
|
69
|
+
assertObviouslyPublic(url);
|
|
70
|
+
await options.assertSafeUrl?.(url);
|
|
71
|
+
},
|
|
72
|
+
}, { id: "public", order: 100 }),
|
|
73
|
+
contribution(ProtocolProfiles, { version: "0.1" }, { id: "0.1", order: 100 }),
|
|
74
|
+
contribution(Clocks, systemClock, { id: "system", order: 100 }),
|
|
75
|
+
contribution(RandomSources, systemRandom, { id: "system", order: 100 }),
|
|
76
|
+
],
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
export function buildPapReactor(options = {}, plugins = []) {
|
|
80
|
+
const reactor = buildReactorFromPlugins([createPapCorePlugin(options), ...plugins]);
|
|
81
|
+
reactor.start();
|
|
82
|
+
return reactor;
|
|
83
|
+
}
|
|
84
|
+
export function firstContribution(reactor, point, label) {
|
|
85
|
+
const contributions = reactor.getContributions(point);
|
|
86
|
+
const selected = contributions[0];
|
|
87
|
+
if (!selected) {
|
|
88
|
+
throw new Error(`PAP Reactor has no active ${label} contribution`);
|
|
89
|
+
}
|
|
90
|
+
if (contributions[1]?.order === selected.order) {
|
|
91
|
+
throw new Error(`PAP Reactor has ambiguous ${label} contributions`);
|
|
92
|
+
}
|
|
93
|
+
return selected.value;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=reactor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactor.js","sourceRoot":"","sources":["../src/reactor.ts"],"names":[],"mappings":"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"}
|