agent-protocols 0.3.1 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,13 +1,15 @@
1
1
  # agent-protocols TypeScript SDK
2
2
 
3
- TypeScript SDK for the draft Agent Identity, Agent Profile, and Agent Discourse protocols.
3
+ TypeScript SDK for the draft Agent Identity, Agent Profile, Agent Delegation, and Agent Discourse protocols.
4
4
 
5
5
  ## Modules
6
6
 
7
7
  - `identity`: `did:agent:` encoding, JCS canonicalization, event hashes, Ed25519 signing and verification, live-write nonce checks, request JWT helpers.
8
- - `profile`: `profile.update` payloads, Profile documents, validation, materialization.
8
+ - `profile`: `profile.update` payloads, Profile documents, delegation discovery hints, validation, materialization.
9
+ - `delegation`: Agent Delegation principal documents, grant/revoke payloads, credential documents, status/query shapes, validation, and materialization.
9
10
  - `discourse`: ADP kernel payloads, the room type system (type definitions, pack imports, type registry, JSON Schema payload validation), join request types, roles, room states, protocol discovery, archive manifests, room-path checks, kind-based permission and state helpers.
10
- - `http-client`: fetch-based Profile and Discourse clients.
11
+ - `http-client`: fetch-based Profile, Delegation, and Discourse clients.
12
+ - `local-connector`: Local Agent Protocols MCP connector tool names, resource URIs, structured view types, and timeline/sync helpers.
11
13
 
12
14
  ## Example
13
15
 
@@ -25,3 +27,5 @@ const profile = materializeProfile(envelope);
25
27
  ```
26
28
 
27
29
  `username` is provider-confirmed and appears on Profile documents returned by a profile service. Do not put it in agent-submitted `profile.update` payloads.
30
+
31
+ ADP room writes are signed against the current room head. Use `discourseEvent` or `typeDefineEvent` with `baseSeq` and `baseHash`, or let a local connector derive them from `SyncState`. Mentions are represented by the event-level `mentions` field, not by `payload.extra`.
@@ -0,0 +1,106 @@
1
+ import { AgentId, Envelope, Event } from "./identity.js";
2
+ export declare const DELEGATION_PROTOCOL = "agent-delegation/1.0";
3
+ export declare const DELEGATION_GRANT = "delegation.grant";
4
+ export declare const DELEGATION_REVOKE = "delegation.revoke";
5
+ export type DelegationEventType = typeof DELEGATION_GRANT | typeof DELEGATION_REVOKE;
6
+ export type DelegationStatus = "active" | "suspended" | "expired" | "revoked";
7
+ export interface PrincipalLink {
8
+ name: string;
9
+ url: string;
10
+ rel: string;
11
+ }
12
+ export interface PrincipalDescriptor {
13
+ id: string;
14
+ type?: string;
15
+ name?: string;
16
+ }
17
+ export interface PrincipalDocument extends PrincipalDescriptor {
18
+ description?: string;
19
+ avatar_url?: string;
20
+ links?: PrincipalLink[];
21
+ controllers: AgentId[];
22
+ delegations_url?: string;
23
+ updated_at?: number;
24
+ extra?: Record<string, unknown>;
25
+ }
26
+ export interface DelegationGrantPayload {
27
+ id: string;
28
+ principal: PrincipalDescriptor;
29
+ subject: AgentId;
30
+ relationship?: string;
31
+ scopes: string[];
32
+ constraints?: Record<string, unknown>;
33
+ not_before?: number;
34
+ expires_at?: number;
35
+ }
36
+ export interface DelegationRevokePayload {
37
+ id: string;
38
+ principal_id: string;
39
+ reason?: string;
40
+ }
41
+ export type DelegationPayload = DelegationGrantPayload | DelegationRevokePayload;
42
+ export interface DelegationCredential {
43
+ id: string;
44
+ protocol: typeof DELEGATION_PROTOCOL;
45
+ principal: PrincipalDescriptor;
46
+ controller: AgentId;
47
+ subject: AgentId;
48
+ relationship?: string;
49
+ scopes: string[];
50
+ constraints?: Record<string, unknown>;
51
+ not_before?: number;
52
+ expires_at?: number;
53
+ status: DelegationStatus;
54
+ status_url?: string;
55
+ updated_at: number;
56
+ event_id: string;
57
+ }
58
+ export interface DelegationStatusDocument {
59
+ id: string;
60
+ status: DelegationStatus;
61
+ checked_at: number;
62
+ expires_at?: number;
63
+ event_id: string;
64
+ }
65
+ export interface DelegationServiceEndpoints {
66
+ delegations: string;
67
+ query?: string;
68
+ }
69
+ export interface DelegationServiceDiscovery {
70
+ protocol: typeof DELEGATION_PROTOCOL;
71
+ service: string;
72
+ endpoints: DelegationServiceEndpoints;
73
+ features?: string[];
74
+ }
75
+ export interface DelegationQueryRequest {
76
+ subject?: AgentId;
77
+ principal_id?: string;
78
+ status?: DelegationStatus;
79
+ limit?: number;
80
+ }
81
+ export interface DelegationSummary {
82
+ id: string;
83
+ subject: AgentId;
84
+ principal: PrincipalDescriptor;
85
+ scopes?: string[];
86
+ status: DelegationStatus;
87
+ status_url?: string;
88
+ }
89
+ export interface DelegationQueryResponse {
90
+ result: DelegationSummary[];
91
+ }
92
+ export interface DelegationEventsResponse {
93
+ result: Envelope<DelegationPayload>[];
94
+ }
95
+ export declare function delegationGrantEvent(actor: AgentId, createdAt: number, nonce: number, payload: DelegationGrantPayload): Event<DelegationGrantPayload>;
96
+ export declare function delegationRevokeEvent(actor: AgentId, createdAt: number, nonce: number, payload: DelegationRevokePayload): Event<DelegationRevokePayload>;
97
+ export declare function validatePrincipalDocument(document: PrincipalDocument): void;
98
+ export declare function validateDelegationGrantPayload(payload: DelegationGrantPayload, createdAt?: number): void;
99
+ export declare function validateDelegationRevokePayload(payload: DelegationRevokePayload): void;
100
+ export declare function validateDelegationEnvelope(envelope: Envelope<DelegationPayload>): void;
101
+ export declare function materializeDelegationCredential(envelope: Envelope<DelegationGrantPayload>, options?: {
102
+ status?: DelegationStatus;
103
+ statusUrl?: string;
104
+ updatedAt?: number;
105
+ }): DelegationCredential;
106
+ //# sourceMappingURL=delegation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation.d.ts","sourceRoot":"","sources":["../src/delegation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ import { protocolError } from "./errors.js";
2
+ import { createEvent, validateAgentId, verifyEnvelope, } from "./identity.js";
3
+ export const DELEGATION_PROTOCOL = "agent-delegation/1.0";
4
+ export const DELEGATION_GRANT = "delegation.grant";
5
+ export const DELEGATION_REVOKE = "delegation.revoke";
6
+ export function delegationGrantEvent(actor, createdAt, nonce, payload) {
7
+ return createEvent(DELEGATION_PROTOCOL, DELEGATION_GRANT, actor, createdAt, nonce, payload);
8
+ }
9
+ export function delegationRevokeEvent(actor, createdAt, nonce, payload) {
10
+ return createEvent(DELEGATION_PROTOCOL, DELEGATION_REVOKE, actor, createdAt, nonce, payload);
11
+ }
12
+ export function validatePrincipalDocument(document) {
13
+ validateHttpsUrl(document.id, "principal.id");
14
+ if (!Array.isArray(document.controllers) || document.controllers.length === 0) {
15
+ throw protocolError("invalid_principal", "principal document controllers must be non-empty");
16
+ }
17
+ for (const controller of document.controllers)
18
+ validateAgentId(controller);
19
+ if (document.delegations_url !== undefined) {
20
+ validateHttpsUrl(document.delegations_url, "delegations_url");
21
+ }
22
+ }
23
+ export function validateDelegationGrantPayload(payload, createdAt) {
24
+ validateNonEmpty(payload.id, "payload.id");
25
+ validatePrincipalDescriptor(payload.principal);
26
+ validateAgentId(payload.subject);
27
+ if (!Array.isArray(payload.scopes) || payload.scopes.length === 0) {
28
+ throw protocolError("invalid_delegation", "delegation scopes must be non-empty");
29
+ }
30
+ for (const scope of payload.scopes)
31
+ validateNonEmpty(scope, "scope");
32
+ if (payload.constraints !== undefined && !isRecord(payload.constraints)) {
33
+ throw protocolError("invalid_delegation", "constraints must be an object");
34
+ }
35
+ if (payload.expires_at !== undefined) {
36
+ const notBefore = payload.not_before ?? createdAt;
37
+ if (notBefore !== undefined && payload.expires_at <= notBefore) {
38
+ throw protocolError("invalid_delegation", "expires_at must be greater than not_before or created_at");
39
+ }
40
+ }
41
+ }
42
+ export function validateDelegationRevokePayload(payload) {
43
+ validateNonEmpty(payload.id, "payload.id");
44
+ validateHttpsUrl(payload.principal_id, "principal_id");
45
+ }
46
+ export function validateDelegationEnvelope(envelope) {
47
+ verifyEnvelope(envelope);
48
+ if (envelope.event.protocol !== DELEGATION_PROTOCOL) {
49
+ throw protocolError("invalid_event_protocol", `expected ${DELEGATION_PROTOCOL}, got ${envelope.event.protocol}`);
50
+ }
51
+ if (envelope.event.type === DELEGATION_GRANT) {
52
+ validateDelegationGrantPayload(envelope.event.payload, envelope.event.created_at);
53
+ }
54
+ else if (envelope.event.type === DELEGATION_REVOKE) {
55
+ validateDelegationRevokePayload(envelope.event.payload);
56
+ }
57
+ else {
58
+ throw protocolError("invalid_event_type", `expected ${DELEGATION_GRANT} or ${DELEGATION_REVOKE}, got ${envelope.event.type}`);
59
+ }
60
+ }
61
+ export function materializeDelegationCredential(envelope, options = {}) {
62
+ validateDelegationEnvelope(envelope);
63
+ if (envelope.event.type !== DELEGATION_GRANT) {
64
+ throw protocolError("invalid_event_type", "delegation credential materialization requires a grant event");
65
+ }
66
+ const payload = envelope.event.payload;
67
+ return {
68
+ id: payload.id,
69
+ protocol: DELEGATION_PROTOCOL,
70
+ principal: payload.principal,
71
+ controller: envelope.event.actor,
72
+ subject: payload.subject,
73
+ relationship: payload.relationship,
74
+ scopes: payload.scopes,
75
+ constraints: payload.constraints,
76
+ not_before: payload.not_before,
77
+ expires_at: payload.expires_at,
78
+ status: options.status ?? "active",
79
+ status_url: options.statusUrl,
80
+ updated_at: options.updatedAt ?? envelope.event.created_at,
81
+ event_id: envelope.hash,
82
+ };
83
+ }
84
+ function validatePrincipalDescriptor(principal) {
85
+ if (!isRecord(principal)) {
86
+ throw protocolError("invalid_principal", "principal must be an object");
87
+ }
88
+ validateHttpsUrl(principal.id, "principal.id");
89
+ }
90
+ function validateHttpsUrl(value, field) {
91
+ if (typeof value !== "string") {
92
+ throw protocolError("invalid_url", `${field} must be an HTTPS URL`);
93
+ }
94
+ try {
95
+ const url = new URL(value);
96
+ if (url.protocol !== "https:")
97
+ throw new Error("not https");
98
+ }
99
+ catch {
100
+ throw protocolError("invalid_url", `${field} must be an HTTPS URL`);
101
+ }
102
+ }
103
+ function validateNonEmpty(value, field) {
104
+ if (typeof value !== "string" || value.trim() === "") {
105
+ throw protocolError("invalid_delegation", `${field} must not be empty`);
106
+ }
107
+ }
108
+ function isRecord(value) {
109
+ return typeof value === "object" && value !== null && !Array.isArray(value);
110
+ }
111
+ //# sourceMappingURL=delegation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation.js","sourceRoot":"","sources":["../src/delegation.ts"],"names":[],"mappings":"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"}
@@ -106,10 +106,13 @@ export interface RoomResponse {
106
106
  status: RoomState;
107
107
  url: string;
108
108
  topic?: string;
109
+ agenda?: string;
109
110
  guidance?: string;
110
111
  visibility?: Visibility;
111
112
  start_time?: number;
112
113
  end_time?: number;
114
+ tags?: string[];
115
+ language?: string;
113
116
  policy?: RoomPolicy;
114
117
  /** Materialized type registry served by the host. */
115
118
  types?: TypeDef[];
@@ -117,11 +120,18 @@ export interface RoomResponse {
117
120
  pre_hash: string | null;
118
121
  hash: string;
119
122
  received_at: number;
123
+ /** Latest accepted non-signal record. Falls back to `seq`/`hash` on older hosts. */
124
+ head?: RoomHead;
120
125
  envelope?: Envelope<RoomCreatePayload>;
121
126
  }
127
+ export interface RoomHead {
128
+ seq: number;
129
+ hash: string;
130
+ }
122
131
  export interface RoomJoinPayload {
123
- request_id: string;
132
+ request_id?: string;
124
133
  role: Role;
134
+ perspective?: string;
125
135
  }
126
136
  export interface RoomJoinRequestInput {
127
137
  role: Role;
@@ -148,6 +158,35 @@ export interface RoomJoinRequestStatus {
148
158
  reviewed_by?: AgentId | null;
149
159
  reviewed_at?: number | null;
150
160
  }
161
+ export interface AgentStatusInput {
162
+ state: string;
163
+ summary?: string;
164
+ seen_seq?: number;
165
+ seen_hash?: string;
166
+ claim_id?: string;
167
+ activity?: string;
168
+ expires_at: number;
169
+ extra?: Record<string, unknown>;
170
+ }
171
+ export interface AgentStatus {
172
+ room_id: string;
173
+ agent_id: AgentId;
174
+ state: string;
175
+ summary?: string;
176
+ seen_seq?: number;
177
+ seen_hash?: string;
178
+ claim_id?: string;
179
+ activity?: string;
180
+ expires_at: number;
181
+ updated_at: number;
182
+ extra?: Record<string, unknown>;
183
+ }
184
+ export interface AgentStatusListResponse {
185
+ statuses: AgentStatus[];
186
+ }
187
+ export interface AgentStatusGetResponse {
188
+ status: AgentStatus;
189
+ }
151
190
  export interface RoomJoinReviewPayload {
152
191
  request: RoomJoinRequest;
153
192
  decision: JoinDecision;
@@ -224,15 +263,17 @@ export interface ArchiveManifest {
224
263
  export interface PermissionContext {
225
264
  role?: Role;
226
265
  isCreator?: boolean;
266
+ publicJoinAllowed?: boolean;
227
267
  joinRequestApproved?: boolean;
228
268
  }
229
269
  export declare function roomCreateEvent(actor: AgentId, createdAt: number, nonce: number, payload: RoomCreatePayload): Event<RoomCreatePayload>;
230
- export declare function typeDefineEvent(actor: AgentId, createdAt: number, nonce: number, roomId: string, declaration: TypeDeclaration): Event<TypeDeclaration>;
231
- export declare function discourseEvent<P>(type: string, actor: AgentId, createdAt: number, nonce: number, roomId: string, payload: P): Event<P>;
270
+ export declare function typeDefineEvent(actor: AgentId, createdAt: number, nonce: number, roomId: string, baseSeq: number, baseHash: string, declaration: TypeDeclaration): Event<TypeDeclaration>;
271
+ export declare function discourseEvent<P>(type: string, actor: AgentId, createdAt: number, nonce: number, roomId: string, baseSeq: number, baseHash: string, payload: P): Event<P>;
232
272
  export declare function isBuiltinEventType(type: string): boolean;
233
273
  export declare function eventRequiresRoomId(type: string): boolean;
234
274
  export declare function validateDiscourseEnvelope(envelope: Envelope<unknown>): void;
235
275
  export declare function validateRoomPath(envelope: Envelope<unknown>, pathRoomId: string): void;
276
+ export declare function validateRoomHeadPrecondition(event: Event<unknown>): void;
236
277
  /**
237
278
  * Checks the shape of a custom event type name: lowercase dot-separated, at
238
279
  * least two segments, not built-in, not under a reserved prefix.
@@ -245,6 +286,7 @@ export declare function validatePackImport(declaration: PackImport): void;
245
286
  export declare function validateTypeDeclaration(declaration: TypeDeclaration): void;
246
287
  export declare function validateRoomCreatePayload(payload: RoomCreatePayload): void;
247
288
  export declare function validateMessageCreatePayload(payload: MessageCreatePayload): void;
289
+ export declare function validateRoomJoinPayload(payload: RoomJoinPayload): void;
248
290
  /** The effective set of type definitions active in a room. */
249
291
  export declare class TypeRegistry {
250
292
  private readonly types;
@@ -1 +1 @@
1
- {"version":3,"file":"discourse.d.ts","sourceRoot":"","sources":["../src/discourse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discourse.d.ts","sourceRoot":"","sources":["../src/discourse.ts"],"names":[],"mappings":"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"}
package/dist/discourse.js CHANGED
@@ -11,7 +11,7 @@ import { Validator } from "@cfworker/json-schema";
11
11
  import canonicalize from "canonicalize";
12
12
  import { createHash } from "node:crypto";
13
13
  import { protocolError } from "./errors.js";
14
- import { createEvent, verifyEnvelope, withRoomId, } from "./identity.js";
14
+ import { MAX_SAFE_NONCE, createEvent, validateAgentId, verifyEnvelope, withRoomHead, withRoomId, } from "./identity.js";
15
15
  export const DISCOURSE_PROTOCOL = "agent-discourse/1.0";
16
16
  /** The nine built-in event types. All other types are room-defined. */
17
17
  export const eventType = {
@@ -37,6 +37,9 @@ export const packId = {
37
37
  REALTIME: "adp:realtime/1.0",
38
38
  };
39
39
  export const REGISTERED_PACK_IDS = Object.values(packId);
40
+ const ROLES = ["moderator", "speaker", "observer"];
41
+ const TYPE_KINDS = ["message", "signal", "control"];
42
+ const TYPE_STATUSES = ["active", "deprecated", "disabled"];
40
43
  /** Indexes the packs of a document by pack id for registry materialization. */
41
44
  export function packMap(document) {
42
45
  const packs = {};
@@ -47,11 +50,11 @@ export function packMap(document) {
47
50
  export function roomCreateEvent(actor, createdAt, nonce, payload) {
48
51
  return createEvent(DISCOURSE_PROTOCOL, eventType.ROOM_CREATE, actor, createdAt, nonce, payload);
49
52
  }
50
- export function typeDefineEvent(actor, createdAt, nonce, roomId, declaration) {
51
- return withRoomId(createEvent(DISCOURSE_PROTOCOL, eventType.TYPE_DEFINE, actor, createdAt, nonce, declaration), roomId);
53
+ export function typeDefineEvent(actor, createdAt, nonce, roomId, baseSeq, baseHash, declaration) {
54
+ return withRoomHead(withRoomId(createEvent(DISCOURSE_PROTOCOL, eventType.TYPE_DEFINE, actor, createdAt, nonce, declaration), roomId), baseSeq, baseHash);
52
55
  }
53
- export function discourseEvent(type, actor, createdAt, nonce, roomId, payload) {
54
- return withRoomId(createEvent(DISCOURSE_PROTOCOL, type, actor, createdAt, nonce, payload), roomId);
56
+ export function discourseEvent(type, actor, createdAt, nonce, roomId, baseSeq, baseHash, payload) {
57
+ return withRoomHead(withRoomId(createEvent(DISCOURSE_PROTOCOL, type, actor, createdAt, nonce, payload), roomId), baseSeq, baseHash);
55
58
  }
56
59
  export function isBuiltinEventType(type) {
57
60
  return BUILTIN_EVENT_TYPES.includes(type);
@@ -66,27 +69,58 @@ export function validateDiscourseEnvelope(envelope) {
66
69
  throw protocolError("invalid_event_protocol", `expected ${DISCOURSE_PROTOCOL}, got ${protocol}`);
67
70
  }
68
71
  if (envelope.event.type === eventType.ROOM_CREATE) {
69
- if (envelope.event.room_id !== undefined) {
70
- throw protocolError("invalid_event", "room.create must not include room_id");
71
- }
72
+ validateRoomCreateEventFields(envelope.event);
72
73
  }
73
- else if (envelope.event.room_id === undefined) {
74
- throw protocolError("missing_room_id", "event requires a room_id");
74
+ else {
75
+ if (envelope.event.room_id === undefined) {
76
+ throw protocolError("missing_room_id", "event requires a room_id");
77
+ }
78
+ validateRoomHeadPrecondition(envelope.event);
79
+ validateMentions(envelope.event.mentions);
75
80
  }
76
81
  }
77
82
  export function validateRoomPath(envelope, pathRoomId) {
78
83
  const actual = envelope.event.room_id;
79
84
  if (envelope.event.type === eventType.ROOM_CREATE) {
80
- if (actual !== undefined) {
81
- throw protocolError("invalid_event", "room.create must not include room_id");
82
- }
85
+ validateRoomCreateEventFields(envelope.event);
83
86
  return;
84
87
  }
88
+ validateRoomHeadPrecondition(envelope.event);
89
+ validateMentions(envelope.event.mentions);
85
90
  if (actual === undefined)
86
91
  throw protocolError("missing_room_id", "event requires a room_id");
87
92
  if (actual !== pathRoomId)
88
93
  throw protocolError("room_id_mismatch", `expected ${pathRoomId}, got ${actual}`);
89
94
  }
95
+ function validateRoomCreateEventFields(event) {
96
+ if (event.room_id !== undefined ||
97
+ event.base_seq !== undefined ||
98
+ event.base_hash !== undefined ||
99
+ Object.prototype.hasOwnProperty.call(event, "mentions")) {
100
+ throw protocolError("invalid_event", "room.create must not include room_id, base_seq, base_hash, or mentions");
101
+ }
102
+ }
103
+ export function validateRoomHeadPrecondition(event) {
104
+ const baseSeq = event.base_seq;
105
+ const baseHash = event.base_hash;
106
+ if (!Number.isSafeInteger(baseSeq) ||
107
+ baseSeq < 1 ||
108
+ baseSeq > MAX_SAFE_NONCE) {
109
+ throw protocolError("invalid_event", "base_seq must be a positive safe JSON integer");
110
+ }
111
+ if (typeof baseHash !== "string" || baseHash.trim() === "") {
112
+ throw protocolError("invalid_event", "base_hash must not be empty");
113
+ }
114
+ }
115
+ function validateMentions(mentions) {
116
+ if (mentions === undefined)
117
+ return;
118
+ if (!Array.isArray(mentions)) {
119
+ throw protocolError("invalid_event", "mentions must be an Agent ID array");
120
+ }
121
+ for (const mention of mentions)
122
+ validateAgentId(mention);
123
+ }
90
124
  /**
91
125
  * Checks the shape of a custom event type name: lowercase dot-separated, at
92
126
  * least two segments, not built-in, not under a reserved prefix.
@@ -118,7 +152,7 @@ export function isTypeDef(declaration) {
118
152
  }
119
153
  export function validateTypeDef(def) {
120
154
  validateCustomEventTypeName(def.type);
121
- if (!["message", "signal", "control"].includes(def.kind)) {
155
+ if (!includes(TYPE_KINDS, def.kind)) {
122
156
  throw protocolError("invalid_event", `invalid type kind: ${def.kind}`);
123
157
  }
124
158
  if (typeof def.title !== "string" || def.title.trim() === "") {
@@ -130,8 +164,15 @@ export function validateTypeDef(def) {
130
164
  throw protocolError("invalid_event", "type definition schema must be a JSON Schema object");
131
165
  }
132
166
  compileSchema(def.schema);
133
- if (def.roles !== undefined && def.roles.length === 0) {
134
- throw protocolError("invalid_event", "type definition roles must not be empty");
167
+ if (def.roles !== undefined) {
168
+ if (!Array.isArray(def.roles) ||
169
+ def.roles.length === 0 ||
170
+ def.roles.some((role) => !includes(ROLES, role))) {
171
+ throw protocolError("invalid_event", "type definition roles must be a non-empty role list");
172
+ }
173
+ }
174
+ if (def.status !== undefined && !includes(TYPE_STATUSES, def.status)) {
175
+ throw protocolError("invalid_event", `invalid type status: ${def.status}`);
135
176
  }
136
177
  for (const hint of [def.rate_hint, def.max_payload_hint]) {
137
178
  if (hint !== undefined && (!Number.isInteger(hint) || hint < 1)) {
@@ -139,6 +180,9 @@ export function validateTypeDef(def) {
139
180
  }
140
181
  }
141
182
  }
183
+ function includes(values, value) {
184
+ return values.includes(value);
185
+ }
142
186
  export function validatePackImport(declaration) {
143
187
  const hasUse = declaration.use !== undefined;
144
188
  const hasExternal = declaration.pack !== undefined && declaration.digest !== undefined;
@@ -197,6 +241,17 @@ export function validateMessageCreatePayload(payload) {
197
241
  throw protocolError("invalid_event", "content_type must not be empty");
198
242
  }
199
243
  }
244
+ export function validateRoomJoinPayload(payload) {
245
+ if (!includes(ROLES, payload.role)) {
246
+ throw protocolError("invalid_event", `invalid room role: ${payload.role}`);
247
+ }
248
+ if (payload.request_id !== undefined && payload.request_id.trim() === "") {
249
+ throw protocolError("invalid_event", "request_id must not be empty");
250
+ }
251
+ if (payload.request_id !== undefined && payload.perspective !== undefined) {
252
+ throw protocolError("invalid_event", "room.join payload cannot include both request_id and perspective");
253
+ }
254
+ }
200
255
  /** The effective set of type definitions active in a room. */
201
256
  export class TypeRegistry {
202
257
  types = new Map();
@@ -400,7 +455,7 @@ export function canSubmitEvent(type, context, registry = new TypeRegistry()) {
400
455
  case eventType.ROOM_CREATE:
401
456
  return true;
402
457
  case eventType.ROOM_JOIN:
403
- return Boolean(context.joinRequestApproved);
458
+ return Boolean(context.publicJoinAllowed || context.joinRequestApproved);
404
459
  case eventType.ROOM_LEAVE:
405
460
  return Boolean(context.isCreator) || context.role !== undefined;
406
461
  case eventType.ROOM_JOIN_REVIEW: