@polytric/openws-spec 0.0.2 → 0.0.3
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 +117 -117
- package/dist/builder.js +0 -2
- package/dist/builder.js.map +1 -1
- package/dist/index.cjs +5 -953
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +25 -976
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-7D4SUZUM.js +0 -38
- package/dist/chunk-7D4SUZUM.js.map +0 -1
package/README.md
CHANGED
|
@@ -326,128 +326,128 @@ The following example is a minimal but complete OpenWS document modeling a chat
|
|
|
326
326
|
- connection hints via `endpoints`
|
|
327
327
|
- one extension field (`x-routingNotes`) to document intended flows
|
|
328
328
|
|
|
329
|
-
|
|
329
|
+
``` <!-- embed:./test/chat-spec.json:scope:{ -->
|
|
330
330
|
{
|
|
331
331
|
"openws": "0.0.2",
|
|
332
332
|
"title": "Example Chat Service",
|
|
333
333
|
"version": "1.0.0",
|
|
334
334
|
"description": "A minimal OpenWS document modeling a chat network.",
|
|
335
335
|
"networks": {
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
336
|
+
"chat": {
|
|
337
|
+
"description": "Realtime chat network.",
|
|
338
|
+
"roles": {
|
|
339
|
+
"server": {
|
|
340
|
+
"description": "Backend that hosts rooms and broadcasts messages.",
|
|
341
|
+
"endpoints": [
|
|
342
|
+
{
|
|
343
|
+
"scheme": "wss",
|
|
344
|
+
"host": "chat.example.com",
|
|
345
|
+
"port": 443,
|
|
346
|
+
"path": "/ws/chat"
|
|
347
|
+
}
|
|
348
|
+
],
|
|
349
|
+
"messages": {
|
|
350
|
+
"join": {
|
|
351
|
+
"description": "Request to join a room.",
|
|
352
|
+
"payload": {
|
|
353
|
+
"type": "object",
|
|
354
|
+
"additionalProperties": false,
|
|
355
|
+
"required": ["userId", "roomId"],
|
|
356
|
+
"properties": {
|
|
357
|
+
"userId": { "type": "string", "minLength": 1 },
|
|
358
|
+
"roomId": { "type": "string", "minLength": 1 }
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
},
|
|
362
|
+
"message": {
|
|
363
|
+
"description": "Send a chat message to a room.",
|
|
364
|
+
"payload": {
|
|
365
|
+
"type": "object",
|
|
366
|
+
"additionalProperties": false,
|
|
367
|
+
"required": ["userId", "roomId", "text"],
|
|
368
|
+
"properties": {
|
|
369
|
+
"userId": { "type": "string", "minLength": 1 },
|
|
370
|
+
"roomId": { "type": "string", "minLength": 1 },
|
|
371
|
+
"text": { "type": "string", "minLength": 1, "maxLength": 2048 }
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
},
|
|
375
|
+
"createRoom": {
|
|
376
|
+
"description": "Create a new room.",
|
|
377
|
+
"payload": {
|
|
378
|
+
"type": "object",
|
|
379
|
+
"additionalProperties": false,
|
|
380
|
+
"required": ["userId", "name"],
|
|
381
|
+
"properties": {
|
|
382
|
+
"userId": { "type": "string", "minLength": 1 },
|
|
383
|
+
"name": { "type": "string", "minLength": 1, "maxLength": 128 }
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
},
|
|
387
|
+
"requestStats": {
|
|
388
|
+
"description": "Request channel statistics.",
|
|
389
|
+
"payload": {
|
|
390
|
+
"type": "object",
|
|
391
|
+
"additionalProperties": false,
|
|
392
|
+
"required": ["roomId"],
|
|
393
|
+
"properties": {
|
|
394
|
+
"roomId": { "type": "string", "minLength": 1 }
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
"client": {
|
|
401
|
+
"description": "End-user client that receives events from the server.",
|
|
402
|
+
"messages": {
|
|
403
|
+
"roomJoined": {
|
|
404
|
+
"description": "Emitted after a join succeeds.",
|
|
405
|
+
"payload": {
|
|
406
|
+
"type": "object",
|
|
407
|
+
"additionalProperties": false,
|
|
408
|
+
"required": ["roomId"],
|
|
409
|
+
"properties": {
|
|
410
|
+
"roomId": { "type": "string", "minLength": 1 }
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
},
|
|
414
|
+
"messageReceived": {
|
|
415
|
+
"description": "Broadcast of a message to participants in a room.",
|
|
416
|
+
"payload": {
|
|
417
|
+
"type": "object",
|
|
418
|
+
"additionalProperties": false,
|
|
419
|
+
"required": ["roomId", "text", "senderId", "sentAt"],
|
|
420
|
+
"properties": {
|
|
421
|
+
"roomId": { "type": "string", "minLength": 1 },
|
|
422
|
+
"text": { "type": "string", "minLength": 1, "maxLength": 2048 },
|
|
423
|
+
"senderId": { "type": "string", "minLength": 1 },
|
|
424
|
+
"sentAt": { "type": "integer" }
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
},
|
|
430
|
+
"portal": {
|
|
431
|
+
"description": "Internal web portal that receives aggregated stats.",
|
|
432
|
+
"messages": {
|
|
433
|
+
"channelStats": {
|
|
434
|
+
"description": "Room-level metrics snapshot.",
|
|
435
|
+
"payload": {
|
|
436
|
+
"type": "object",
|
|
437
|
+
"additionalProperties": false,
|
|
438
|
+
"required": ["roomId", "members", "messagesLastMinute"],
|
|
439
|
+
"properties": {
|
|
440
|
+
"roomId": { "type": "string", "minLength": 1 },
|
|
441
|
+
"members": { "type": "integer", "minimum": 0 },
|
|
442
|
+
"messagesLastMinute": { "type": "integer", "minimum": 0 }
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
444
447
|
}
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
},
|
|
449
|
-
"x-routingNotes": "Clients send server.join/server.message. Server emits client.roomJoined/client.messageReceived and portal.channelStats."
|
|
450
|
-
}
|
|
448
|
+
},
|
|
449
|
+
"x-routingNotes": "Clients send server.join/server.message. Server emits client.roomJoined/client.messageReceived and portal.channelStats."
|
|
450
|
+
}
|
|
451
451
|
}
|
|
452
|
-
|
|
453
|
-
```
|
|
452
|
+
}
|
|
453
|
+
```
|
package/dist/builder.js
CHANGED
package/dist/builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/builder.ts"],"sourcesContent":["import type * as Types from './types'\n\nconst WELL_KNOWN_METADATA_KEYS = new Set<string>(['description', 'version', 'openws', 'name'])\n\nexport class Base {\n #metadata: Types.CommonMetadata\n\n constructor(name: string) {\n this.#metadata = { name }\n }\n\n #setMetadata(name: string, value: Types.JsonValue): this {\n this.#metadata[name] = value\n return this\n }\n\n #getMetadataKey(name: string): string {\n if (WELL_KNOWN_METADATA_KEYS.has(name)) {\n return name\n }\n if (!name.startsWith('x-')) {\n return `x-${name}`\n }\n return name\n }\n\n get name(): string {\n return this.#metadata['name'] as string\n }\n\n metadata(name: string, value: Types.JsonValue): this {\n return this.#setMetadata(this.#getMetadataKey(name), value)\n }\n\n getMetadata(name: string): Types.JsonValue | undefined {\n return this.#metadata[this.#getMetadataKey(name)] as Types.JsonValue | undefined\n }\n\n desc(description: string): this {\n return this.description(description)\n }\n\n description(description: string): this {\n return this.#setMetadata('description', description)\n }\n\n version(version: string): this {\n return this.#setMetadata('version', version)\n }\n\n title(title: string): this {\n return this.#setMetadata('title', title)\n }\n\n valueOf(): Types.CommonMetadata {\n return { ...this.#metadata }\n }\n\n toJson(): Types.CommonMetadata {\n return this.valueOf()\n }\n\n isValid(): boolean {\n return false\n }\n}\n\nexport class Message extends Base {\n get isPolytricMessage(): boolean {\n return true\n }\n #payload?: any\n #from?: string[]\n\n constructor(name: string) {\n super(name)\n }\n\n getPayload(): any | undefined {\n return this.#payload\n }\n\n payload(payload: any): this {\n this.#payload = payload.valueOf()\n return this\n }\n\n from(...from: string[]): this {\n this.#from ??= []\n this.#from.push(...from)\n return this\n }\n\n valueOf(): Types.Message {\n if (!this.#payload) {\n throw new Error('Payload is required')\n }\n const ret: Types.Message = {\n ...super.valueOf(),\n payload: this.#payload,\n }\n if (this.#from) {\n ret.from = this.#from\n }\n return ret\n }\n\n static fromJson(json: Types.Message): Message {\n const { payload, from, ...metadata } = json\n const ret = new Message(json.name as string)\n for (const [key, value] of Object.entries(metadata)) {\n ret.metadata(key, value)\n }\n ret.payload(payload)\n if (from) {\n ret.from(...from)\n }\n return ret\n }\n\n assertValid(): boolean {\n if (this.#payload === undefined) {\n throw new Error('Payload is required')\n }\n return true\n }\n}\n\nexport class Endpoint {\n #scheme: string = 'ws'\n #host: string\n #port: number = 433\n #path: string\n\n constructor(scheme: string, host: string, port: number, path: string) {\n this.#scheme = scheme\n this.#host = host\n this.#port = port\n this.#path = path\n }\n\n valueOf(): Types.Endpoint {\n return {\n scheme: this.#scheme,\n host: this.#host,\n port: this.#port,\n path: this.#path,\n }\n }\n\n toJson(): Types.Endpoint {\n return this.valueOf()\n }\n\n static fromJson(json: Types.Endpoint): Endpoint {\n return new Endpoint(json.scheme, json.host, json.port, json.path)\n }\n}\n\nexport class Role extends Base {\n get isPolytricRole(): boolean {\n return true\n }\n #messages: { [key: string]: Message } = {}\n #endpoints: Endpoint[] = []\n\n isHost: boolean = false\n\n asHost(): this {\n this.isHost = true\n return this\n }\n\n message(message: Message): this {\n this.#messages[message.name] = message\n return this\n }\n\n get messages(): Record<string, Message> {\n return this.#messages\n }\n\n endpoint(endpoint: Endpoint): this {\n this.#endpoints.push(endpoint)\n return this\n }\n\n valueOf(): Types.Role {\n const messages: { [key: string]: Types.Message } = {}\n for (const [name, message] of Object.entries(this.#messages)) {\n messages[name] = message.valueOf()\n }\n const ret: Types.Role = {\n ...super.valueOf(),\n messages,\n }\n if (this.#endpoints.length > 0) {\n ret.endpoints = this.#endpoints.map(endpoint => endpoint.valueOf())\n }\n return ret\n }\n\n static fromJson(json: Types.Role): Role {\n const { messages, endpoints, ...metadata } = json\n const ret = new Role(json.name)\n for (const [key, value] of Object.entries(metadata)) {\n ret.metadata(key, value)\n }\n for (const message of Object.values(messages)) {\n ret.message(Message.fromJson(message))\n }\n for (const endpoint of endpoints ?? []) {\n ret.endpoint(Endpoint.fromJson(endpoint))\n }\n return ret\n }\n\n assertValid(): boolean {\n for (const message of Object.values(this.#messages)) {\n message.assertValid()\n }\n return true\n }\n}\n\nexport class Network extends Base {\n get isPolytricNetwork(): boolean {\n return true\n }\n #roles: { [key: string]: Role } = {}\n\n role(role: Role): this {\n this.#roles[role.name] = role\n return this\n }\n\n get roles(): { [key: string]: Role } {\n return this.#roles\n }\n\n valueOf(): Types.Network {\n const roles: { [key: string]: Types.Role } = {}\n for (const [name, role] of Object.entries(this.#roles)) {\n roles[name] = role.valueOf()\n }\n return {\n ...super.valueOf(),\n roles,\n }\n }\n\n static fromJson(json: Types.Network): Network {\n const { roles, ...metadata } = json\n const ret = new Network(json.name as string)\n for (const [key, value] of Object.entries(metadata)) {\n ret.metadata(key, value)\n }\n for (const role of Object.values(roles)) {\n ret.role(Role.fromJson(role))\n }\n return ret\n }\n\n assertValid(): boolean {\n const hostRoles: Role[] = []\n const consumerRoles: Role[] = []\n for (const role of Object.values(this.#roles)) {\n role.assertValid()\n\n if (role.isHost) {\n hostRoles.push(role as Role)\n } else {\n consumerRoles.push(role as Role)\n }\n }\n if (consumerRoles.length === 0) {\n throw new Error('At least one consumer role must be defined')\n }\n const messages = new Set<string>()\n for (const role of Object.values(this.#roles)) {\n if (!role.isHost) {\n continue\n }\n for (const message of Object.values(role.messages)) {\n if (messages.has(message.name)) {\n throw new Error(\n `Message '${message.name}' is defined in multiple host roles: ${hostRoles.map(role => role.name).join(', ')}`\n )\n }\n messages.add(message.name)\n }\n }\n\n return true\n }\n}\n\nexport class Spec extends Base {\n get isPolytricSpec(): boolean {\n return true\n }\n #networks: { [key: string]: Network } = {}\n\n constructor(openws: string, name: string) {\n super(name)\n this.metadata('openws', openws)\n }\n\n network(network: Network): this {\n this.#networks[network.name] = network\n return this\n }\n\n get networks(): Record<string, Network> {\n return this.#networks\n }\n\n valueOf(): Types.Spec {\n const networks: { [key: string]: Types.Network } = {}\n for (const [name, network] of Object.entries(this.#networks)) {\n networks[name] = network.valueOf()\n }\n return {\n ...super.valueOf(),\n openws: this.getMetadata('openws') as string,\n networks,\n }\n }\n\n static fromJson(json: Types.Spec): Spec {\n const { networks, ...metadata } = json\n const ret = new Spec(json.openws as string, json.name as string)\n for (const [key, value] of Object.entries(metadata)) {\n ret.metadata(key, value)\n }\n for (const network of Object.values(networks)) {\n ret.network(Network.fromJson(network))\n }\n return ret\n }\n\n assertValid(): boolean {\n for (const network of Object.values(this.#networks)) {\n network.assertValid()\n }\n return true\n }\n}\n\nexport function spec(openws: string, name: string): Spec\nexport function spec(spec: Types.Spec): Spec\nexport function spec(openwsOrSpec: string | Types.Spec, name?: string): Spec {\n if (typeof openwsOrSpec === 'string') {\n return new Spec(openwsOrSpec, name!)\n } else {\n return Spec.fromJson(openwsOrSpec)\n }\n}\n\nexport function network(network: string | Types.Network): Network {\n if (typeof network === 'string') {\n return new Network(network)\n } else {\n return Network.fromJson(network)\n }\n}\n\nexport function role(role: string | Types.Role): Role {\n if (typeof role === 'string') {\n return new Role(role)\n } else {\n return Role.fromJson(role)\n }\n}\n\nexport function message(msg: string | Types.Message): Message {\n if (typeof msg === 'string') {\n return new Message(msg)\n } else {\n return Message.fromJson(msg)\n }\n}\n\nexport function endpoint(endpoint: Types.Endpoint): Endpoint\nexport function endpoint(scheme: string, host: string, port: number, path: string): Endpoint\nexport function endpoint(\n schemeOrEndpoint: string | Types.Endpoint,\n host?: string,\n port?: number,\n path?: string\n): Endpoint {\n if (typeof schemeOrEndpoint === 'string') {\n return new Endpoint(schemeOrEndpoint, host!, port!, path!)\n } else {\n return Endpoint.fromJson(schemeOrEndpoint)\n }\n}\n"],"mappings":"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","names":["message","endpoint","role","network"]}
|
|
1
|
+
{"version":3,"sources":["../src/builder.ts"],"sourcesContent":["import type * as Types from './types'\n\nconst WELL_KNOWN_METADATA_KEYS = new Set<string>(['description', 'version', 'openws', 'name'])\n\nexport class Base {\n #metadata: Types.CommonMetadata\n\n constructor(name: string) {\n this.#metadata = { name }\n }\n\n #setMetadata(name: string, value: Types.JsonValue): this {\n this.#metadata[name] = value\n return this\n }\n\n #getMetadataKey(name: string): string {\n if (WELL_KNOWN_METADATA_KEYS.has(name)) {\n return name\n }\n if (!name.startsWith('x-')) {\n return `x-${name}`\n }\n return name\n }\n\n get name(): string {\n return this.#metadata['name'] as string\n }\n\n metadata(name: string, value: Types.JsonValue): this {\n return this.#setMetadata(this.#getMetadataKey(name), value)\n }\n\n getMetadata(name: string): Types.JsonValue | undefined {\n return this.#metadata[this.#getMetadataKey(name)] as Types.JsonValue | undefined\n }\n\n desc(description: string): this {\n return this.description(description)\n }\n\n description(description: string): this {\n return this.#setMetadata('description', description)\n }\n\n version(version: string): this {\n return this.#setMetadata('version', version)\n }\n\n title(title: string): this {\n return this.#setMetadata('title', title)\n }\n\n valueOf(): Types.CommonMetadata {\n return { ...this.#metadata }\n }\n\n toJson(): Types.CommonMetadata {\n return this.valueOf()\n }\n\n isValid(): boolean {\n return false\n }\n}\n\nexport class Message extends Base {\n get isPolytricMessage(): boolean {\n return true\n }\n #payload?: any\n #from?: string[]\n\n constructor(name: string) {\n super(name)\n }\n\n getPayload(): any | undefined {\n return this.#payload\n }\n\n payload(payload: any): this {\n this.#payload = payload.valueOf()\n return this\n }\n\n from(...from: string[]): this {\n this.#from ??= []\n this.#from.push(...from)\n return this\n }\n\n valueOf(): Types.Message {\n if (!this.#payload) {\n throw new Error('Payload is required')\n }\n const ret: Types.Message = {\n ...super.valueOf(),\n payload: this.#payload,\n }\n if (this.#from) {\n ret.from = this.#from\n }\n return ret\n }\n\n static fromJson(json: Types.Message): Message {\n const { payload, from, ...metadata } = json\n const ret = new Message(json.name as string)\n for (const [key, value] of Object.entries(metadata)) {\n ret.metadata(key, value)\n }\n ret.payload(payload)\n if (from) {\n ret.from(...from)\n }\n return ret\n }\n\n assertValid(): boolean {\n if (this.#payload === undefined) {\n throw new Error('Payload is required')\n }\n return true\n }\n}\n\nexport class Endpoint {\n #scheme: string = 'ws'\n #host: string\n #port: number = 433\n #path: string\n\n constructor(scheme: string, host: string, port: number, path: string) {\n this.#scheme = scheme\n this.#host = host\n this.#port = port\n this.#path = path\n }\n\n valueOf(): Types.Endpoint {\n return {\n scheme: this.#scheme,\n host: this.#host,\n port: this.#port,\n path: this.#path,\n }\n }\n\n toJson(): Types.Endpoint {\n return this.valueOf()\n }\n\n static fromJson(json: Types.Endpoint): Endpoint {\n return new Endpoint(json.scheme, json.host, json.port, json.path)\n }\n}\n\nexport class Role extends Base {\n get isPolytricRole(): boolean {\n return true\n }\n #messages: { [key: string]: Message } = {}\n #endpoints: Endpoint[] = []\n\n isHost: boolean = false\n\n asHost(): this {\n this.isHost = true\n return this\n }\n\n message(message: Message): this {\n this.#messages[message.name] = message\n return this\n }\n\n get messages(): Record<string, Message> {\n return this.#messages\n }\n\n endpoint(endpoint: Endpoint): this {\n this.#endpoints.push(endpoint)\n return this\n }\n\n valueOf(): Types.Role {\n const messages: { [key: string]: Types.Message } = {}\n for (const [name, message] of Object.entries(this.#messages)) {\n messages[name] = message.valueOf()\n }\n const ret: Types.Role = {\n ...super.valueOf(),\n messages,\n }\n if (this.#endpoints.length > 0) {\n ret.endpoints = this.#endpoints.map(endpoint => endpoint.valueOf())\n }\n return ret\n }\n\n static fromJson(json: Types.Role): Role {\n const { messages, endpoints, ...metadata } = json\n const ret = new Role(json.name)\n for (const [key, value] of Object.entries(metadata)) {\n ret.metadata(key, value)\n }\n for (const message of Object.values(messages)) {\n ret.message(Message.fromJson(message))\n }\n for (const endpoint of endpoints ?? []) {\n ret.endpoint(Endpoint.fromJson(endpoint))\n }\n return ret\n }\n\n assertValid(): boolean {\n for (const message of Object.values(this.#messages)) {\n message.assertValid()\n }\n return true\n }\n}\n\nexport class Network extends Base {\n get isPolytricNetwork(): boolean {\n return true\n }\n #roles: { [key: string]: Role } = {}\n\n role(role: Role): this {\n this.#roles[role.name] = role\n return this\n }\n\n get roles(): { [key: string]: Role } {\n return this.#roles\n }\n\n valueOf(): Types.Network {\n const roles: { [key: string]: Types.Role } = {}\n for (const [name, role] of Object.entries(this.#roles)) {\n roles[name] = role.valueOf()\n }\n return {\n ...super.valueOf(),\n roles,\n }\n }\n\n static fromJson(json: Types.Network): Network {\n const { roles, ...metadata } = json\n const ret = new Network(json.name as string)\n for (const [key, value] of Object.entries(metadata)) {\n ret.metadata(key, value)\n }\n for (const role of Object.values(roles)) {\n ret.role(Role.fromJson(role))\n }\n return ret\n }\n\n assertValid(): boolean {\n const hostRoles: Role[] = []\n const consumerRoles: Role[] = []\n for (const role of Object.values(this.#roles)) {\n role.assertValid()\n\n if (role.isHost) {\n hostRoles.push(role as Role)\n } else {\n consumerRoles.push(role as Role)\n }\n }\n if (consumerRoles.length === 0) {\n throw new Error('At least one consumer role must be defined')\n }\n const messages = new Set<string>()\n for (const role of Object.values(this.#roles)) {\n if (!role.isHost) {\n continue\n }\n for (const message of Object.values(role.messages)) {\n if (messages.has(message.name)) {\n throw new Error(\n `Message '${message.name}' is defined in multiple host roles: ${hostRoles.map(role => role.name).join(', ')}`\n )\n }\n messages.add(message.name)\n }\n }\n\n return true\n }\n}\n\nexport class Spec extends Base {\n get isPolytricSpec(): boolean {\n return true\n }\n #networks: { [key: string]: Network } = {}\n\n constructor(openws: string, name: string) {\n super(name)\n this.metadata('openws', openws)\n }\n\n network(network: Network): this {\n this.#networks[network.name] = network\n return this\n }\n\n get networks(): Record<string, Network> {\n return this.#networks\n }\n\n valueOf(): Types.Spec {\n const networks: { [key: string]: Types.Network } = {}\n for (const [name, network] of Object.entries(this.#networks)) {\n networks[name] = network.valueOf()\n }\n return {\n ...super.valueOf(),\n openws: this.getMetadata('openws') as string,\n networks,\n }\n }\n\n static fromJson(json: Types.Spec): Spec {\n const { networks, ...metadata } = json\n const ret = new Spec(json.openws as string, json.name as string)\n for (const [key, value] of Object.entries(metadata)) {\n ret.metadata(key, value)\n }\n for (const network of Object.values(networks)) {\n ret.network(Network.fromJson(network))\n }\n return ret\n }\n\n assertValid(): boolean {\n for (const network of Object.values(this.#networks)) {\n network.assertValid()\n }\n return true\n }\n}\n\nexport function spec(openws: string, name: string): Spec\nexport function spec(spec: Types.Spec): Spec\nexport function spec(openwsOrSpec: string | Types.Spec, name?: string): Spec {\n if (typeof openwsOrSpec === 'string') {\n return new Spec(openwsOrSpec, name!)\n } else {\n return Spec.fromJson(openwsOrSpec)\n }\n}\n\nexport function network(network: string | Types.Network): Network {\n if (typeof network === 'string') {\n return new Network(network)\n } else {\n return Network.fromJson(network)\n }\n}\n\nexport function role(role: string | Types.Role): Role {\n if (typeof role === 'string') {\n return new Role(role)\n } else {\n return Role.fromJson(role)\n }\n}\n\nexport function message(msg: string | Types.Message): Message {\n if (typeof msg === 'string') {\n return new Message(msg)\n } else {\n return Message.fromJson(msg)\n }\n}\n\nexport function endpoint(endpoint: Types.Endpoint): Endpoint\nexport function endpoint(scheme: string, host: string, port: number, path: string): Endpoint\nexport function endpoint(\n schemeOrEndpoint: string | Types.Endpoint,\n host?: string,\n port?: number,\n path?: string\n): Endpoint {\n if (typeof schemeOrEndpoint === 'string') {\n return new Endpoint(schemeOrEndpoint, host!, port!, path!)\n } else {\n return Endpoint.fromJson(schemeOrEndpoint)\n }\n}\n"],"mappings":"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","names":["message","endpoint","role","network"]}
|