Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
918ecc7
POC Websocket types
C0D3-M4513R Sep 16, 2026
14798d7
POC v2 Websocket types
C0D3-M4513R Sep 16, 2026
6e8c869
Notification types
C0D3-M4513R Sep 16, 2026
2ab1593
Friend types
C0D3-M4513R Sep 16, 2026
580740c
Rest of the types
C0D3-M4513R Sep 16, 2026
72bfcd3
ContentRefresh changes
C0D3-M4513R Sep 16, 2026
8d20454
The NotificationDetails are used in the WebsocketNotification now
C0D3-M4513R Sep 16, 2026
1954aed
Update Notification.yaml to clarify the double-json encoding properly…
C0D3-M4513R Sep 16, 2026
7cd2380
Constrain WebsocketClearNotification
C0D3-M4513R Sep 16, 2026
c320434
Fix wrong property name
C0D3-M4513R Sep 16, 2026
0f638f0
Misspelling of required as requires
C0D3-M4513R Sep 16, 2026
f22b66a
Fix wrong key in required
C0D3-M4513R Sep 16, 2026
288d677
See, Hide and Clear Notifications are not double json encoded
C0D3-M4513R Sep 16, 2026
4dce761
Clear Notifications got a wrong type reference
C0D3-M4513R Sep 16, 2026
7117789
Wrong name
C0D3-M4513R Sep 16, 2026
e1c684f
Lint
C0D3-M4513R Sep 16, 2026
58a1ac3
Lint2
C0D3-M4513R Sep 16, 2026
2aec470
Lint3
C0D3-M4513R Sep 16, 2026
d407210
Lint Warnings
C0D3-M4513R Sep 16, 2026
fa26bfa
Please generate proper code for double-json deserialization?
C0D3-M4513R Sep 16, 2026
381756a
Fix x-if?
C0D3-M4513R Sep 16, 2026
99d7906
Lint1
C0D3-M4513R Sep 16, 2026
a7b3f5e
Lint2
C0D3-M4513R Sep 16, 2026
9c65a9d
Lint3
C0D3-M4513R Sep 16, 2026
c2119ce
Remove probably? unused propertyBaseName
C0D3-M4513R Sep 16, 2026
6d9759c
Change how Websocket Message enums are decoded
C0D3-M4513R Sep 16, 2026
85aea0c
Fix Encoded Types
C0D3-M4513R Sep 16, 2026
a40d8b4
Address WebsocketNotification Error:
C0D3-M4513R Sep 17, 2026
28bef2d
Websocket Notification Types Done?
C0D3-M4513R Sep 22, 2026
d47fc13
More testing
C0D3-M4513R Sep 22, 2026
0f05910
Preliminary support for Double-Encoded Websocket messages
C0D3-M4513R Sep 23, 2026
ab8f0b5
Rename Vendor-specific tags
C0D3-M4513R Sep 23, 2026
3fa7d3f
Rename Vendor-specific tags
C0D3-M4513R Sep 23, 2026
7e89ccf
Remove x-if
C0D3-M4513R Sep 23, 2026
648c8eb
Fix linting
C0D3-M4513R Sep 23, 2026
c918532
Fix some more linting
C0D3-M4513R Sep 23, 2026
52177d5
"Fix" some more linting
C0D3-M4513R Sep 23, 2026
f9d37c0
Correct Notification discriminator mappings
C0D3-M4513R Sep 23, 2026
33472b6
Lint
C0D3-M4513R Sep 23, 2026
4f8bf53
Notification Detail mappings
C0D3-M4513R Sep 23, 2026
9d52b41
Lint
C0D3-M4513R Sep 23, 2026
1343c42
Lint
C0D3-M4513R Sep 23, 2026
21035fc
Remove duplicated type
C0D3-M4513R Sep 23, 2026
c2c29dd
Merge remote-tracking branch 'upstream/main' into feature/websocket
C0D3-M4513R Sep 23, 2026
edd9b7d
Merge remote-tracking branch 'upstream/main' into feature/websocket
C0D3-M4513R Sep 24, 2026
c357f09
Lint
C0D3-M4513R Sep 24, 2026
d710526
Merge remote-tracking branch 'upstream/main' into feature/websocket
C0D3-M4513R Sep 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 5 additions & 42 deletions openapi/components/schemas/Notification.yaml
Original file line number Diff line number Diff line change
@@ -1,43 +1,6 @@
title: Notification
type: object
properties:
created_at:
type: string
format: date-time
details:
type: string
description: "**NOTICE:** This is not a JSON object when received from the REST API, but it is when received from the Websocket API. When received from the REST API, this is a json **encoded** object, meaning you have to json-de-encode to get the NotificationDetail object depending on the NotificationType."
default: "{}"
examples:
- "OneOf: {}, NotificationDetailBoop, NotificationDetailInvite, NotificationDetailInviteResponse, NotificationDetailRequestInvite, NotificationDetailRequestInviteResponse, NotificationDetailVoteToKick"
id:
type: string
minLength: 1
message:
type: string
examples:
- This is a generated invite to VRChat Hub
receiverUserId:
$ref: ./UserID.yaml
description: Not included in notification objects received from the REST API
seen:
type: boolean
description: Not included in notification objects received from the Websocket API
default: false
senderUserId:
$ref: ./UserID.yaml
senderUsername:
type:
- string
- "null"
description: The name of the user who sent the notification.
minLength: 1
type:
$ref: ./NotificationType.yaml
required:
- created_at
- details
- id
- message
- senderUserId
- type
allOf:
- title: base
$ref: ./NotificationBase.yaml
- title: detail
$ref: ./NotificationDetailEncoded.yaml
36 changes: 36 additions & 0 deletions openapi/components/schemas/NotificationBase.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
title: NotificationBase
type: object
properties:
created_at:
type: string
format: date-time
id:
type: string
minLength: 1
message:
type: string
examples:
- This is a generated invite to VRChat Hub
receiverUserId:
$ref: ./UserID.yaml
description: Not included in notification objects received from the REST API
seen:
type: boolean
description: Not included in notification objects received from the Websocket API
default: false
senderUserId:
$ref: ./UserID.yaml
senderUsername:
type:
- string
- "null"
description: The name of the user who sent the notification.
minLength: 1
type:
$ref: ./NotificationType.yaml
required:
- created_at
- id
- message
- senderUserId
- type
12 changes: 12 additions & 0 deletions openapi/components/schemas/NotificationDetailBoopEncoded.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
title: NotificationDetailBoopEncoded
type: object
properties:
details:
type: string
contentMediaType: application/json
contentSchema:
$ref: ./NotificationDetailBoop.yaml
x-vrchat-double-encoding-type: NotificationDetailBoop
required:
- details
x-vrchat-double-encoding: true
26 changes: 26 additions & 0 deletions openapi/components/schemas/NotificationDetailEncoded.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
title: NotificationDetail
properties:
type:
$ref: ./NotificationType.yaml
required:
- type
discriminator:
mapping:
boop: ./NotificationDetailBoopEncoded.yaml
friendRequest: ./NotificationDetailFriendRequestEncoded.yaml
invite: ./NotificationDetailInviteEncoded.yaml
inviteResponse: ./NotificationDetailInviteResponseEncoded.yaml
message: ./NotificationDetailMessageEncoded.yaml
requestInvite: ./NotificationDetailRequestInviteEncoded.yaml
requestInviteResponse: ./NotificationDetailRequestInviteResponseEncoded.yaml
votetokick: ./NotificationDetailVoteToKickEncoded.yaml
propertyName: type
oneOf:
- $ref: ./NotificationDetailBoopEncoded.yaml
- $ref: ./NotificationDetailFriendRequestEncoded.yaml
- $ref: ./NotificationDetailInviteEncoded.yaml
- $ref: ./NotificationDetailInviteResponseEncoded.yaml
- $ref: ./NotificationDetailMessageEncoded.yaml
- $ref: ./NotificationDetailRequestInviteEncoded.yaml
- $ref: ./NotificationDetailRequestInviteResponseEncoded.yaml
- $ref: ./NotificationDetailVoteToKickEncoded.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
title: NotificationDetailFriendRequest
type: object
properties:
# This exists to force generators to generate this struct, since it's referenced "manually" via `x-vrchat-double-encoding-type`
dontDeletePls:
type: integer
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
title: NotificationDetailFriendRequestEncoded
type: object
properties:
details:
type: string
contentMediaType: application/json
contentSchema:
$ref: ./NotificationDetailFriendRequest.yaml
x-vrchat-double-encoding-type: NotificationDetailFriendRequest
required:
- details
x-vrchat-double-encoding: true
12 changes: 12 additions & 0 deletions openapi/components/schemas/NotificationDetailInviteEncoded.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
title: NotificationDetailInviteEncoded
type: object
properties:
details:
type: string
contentMediaType: application/json
contentSchema:
$ref: ./NotificationDetailInvite.yaml
x-vrchat-double-encoding-type: NotificationDetailInvite
required:
- details
x-vrchat-double-encoding: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
title: NotificationDetailInviteResponseEncoded
type: object
properties:
details:
type: string
contentMediaType: application/json
contentSchema:
$ref: ./NotificationDetailInviteResponse.yaml
x-vrchat-double-encoding-type: NotificationDetailInviteResponse
required:
- details
x-vrchat-double-encoding: true
6 changes: 6 additions & 0 deletions openapi/components/schemas/NotificationDetailMessage.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
title: NotificationDetailMessage
type: object
properties:
# This exists to force generators to generate this struct, since it's referenced "manually" via `x-vrchat-double-encoding-type`
dontDeletePls:
type: integer
12 changes: 12 additions & 0 deletions openapi/components/schemas/NotificationDetailMessageEncoded.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
title: NotificationDetailMessageEncoded
type: object
properties:
details:
type: string
contentMediaType: application/json
contentSchema:
$ref: ./NotificationDetailMessage.yaml
x-vrchat-double-encoding-type: NotificationDetailMessage
required:
- details
x-vrchat-double-encoding: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
title: NotificationDetailRequestInviteEncoded
type: object
properties:
details:
type: string
contentMediaType: application/json
contentSchema:
$ref: ./NotificationDetailRequestInvite.yaml
x-vrchat-double-encoding-type: NotificationDetailRequestInvite
required:
- details
x-vrchat-double-encoding: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
title: NotificationDetailRequestInviteResponseEncoded
type: object
properties:
details:
type: string
contentMediaType: application/json
contentSchema:
$ref: ./NotificationDetailRequestInviteResponse.yaml
x-vrchat-double-encoding-type: NotificationDetailRequestInviteResponse
required:
- details
x-vrchat-double-encoding: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
title: NotificationDetailVoteToKickEncoded
type: object
properties:
details:
type: string
contentMediaType: application/json
contentSchema:
$ref: ./NotificationDetailVoteToKick.yaml
x-vrchat-double-encoding-type: NotificationDetailVoteToKick
required:
- details
x-vrchat-double-encoding: true
4 changes: 4 additions & 0 deletions openapi/components/schemas/WebsocketClearNotification.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
title: WebsocketClearNotification
type: object
# Todo: is this correct, or is some special handling necessary in WebsocketMessageNormal?
additionalProperties: false
21 changes: 21 additions & 0 deletions openapi/components/schemas/WebsocketContentRefresh.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
title: WebsocketContentRefresh
type: object
properties:
actionType:
$ref: ./WebsocketContentRefreshActionType.yaml
contentType:
$ref: ./WebsocketContentRefreshContentType.yaml
fileId:
$ref: ./FileID.yaml
itemId:
# TODO: is this correct?
$ref: ./InventoryTemplateID.yaml
itemType:
# TODO: is this correct?
$ref: ./InventoryItemType.yaml
required:
- actionType
- contentType
- fileId
- itemId
- itemType
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
title: WebsocketContentRefreshActionType
type: string
enum:
- add
- created
- delete
- deleted
examples:
- created
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
title: WebsocketContentRefreshContentType
type: string
# Todo: How to type this, since this is technically a non-exhaustive enum?
12 changes: 12 additions & 0 deletions openapi/components/schemas/WebsocketContentRefreshEncoded.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
title: WebsocketContentRefreshEncoded
type: object
properties:
content:
type: string
contentMediaType: application/json
contentSchema:
$ref: ./WebsocketContentRefresh.yaml
x-vrchat-double-encoding-type: WebsocketContentRefresh
required:
- content
x-vrchat-double-encoding: true
13 changes: 13 additions & 0 deletions openapi/components/schemas/WebsocketFriendActive.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
title: WebsocketFriendActive
type: object
properties:
platform:
$ref: ./Platform.yaml
user:
$ref: ./User.yaml
userId:
$ref: ./UserID.yaml
required:
- platform
- user
- userId
12 changes: 12 additions & 0 deletions openapi/components/schemas/WebsocketFriendActiveEncoded.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
title: WebsocketFriendActiveEncoded
type: object
properties:
content:
type: string
contentMediaType: application/json
contentSchema:
$ref: ./WebsocketFriendActive.yaml
x-vrchat-double-encoding-type: WebsocketFriendActive
required:
- content
x-vrchat-double-encoding: true
10 changes: 10 additions & 0 deletions openapi/components/schemas/WebsocketFriendAdd.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
title: WebsocketFriendAdd
type: object
properties:
user:
$ref: ./User.yaml
userId:
$ref: ./UserID.yaml
required:
- user
- userId
12 changes: 12 additions & 0 deletions openapi/components/schemas/WebsocketFriendAddEncoded.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
title: WebsocketFriendAddEncoded
type: object
properties:
content:
type: string
contentMediaType: application/json
contentSchema:
$ref: ./WebsocketFriendAdd.yaml
x-vrchat-double-encoding-type: WebsocketFriendAdd
required:
- content
x-vrchat-double-encoding: true
7 changes: 7 additions & 0 deletions openapi/components/schemas/WebsocketFriendDelete.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
title: WebsocketFriendDelete
type: object
properties:
userId:
$ref: ./UserID.yaml
required:
- userId
12 changes: 12 additions & 0 deletions openapi/components/schemas/WebsocketFriendDeleteEncoded.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
title: WebsocketFriendDeleteEncoded
type: object
properties:
content:
type: string
contentMediaType: application/json
contentSchema:
$ref: ./WebsocketFriendDelete.yaml
x-vrchat-double-encoding-type: WebsocketFriendDelete
required:
- content
x-vrchat-double-encoding: true
22 changes: 22 additions & 0 deletions openapi/components/schemas/WebsocketFriendLocation.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
title: WebsocketFriendLocation
type: object
properties:
canRequestInvite:
type: boolean
location:
$ref: ./LocationID.yaml
travelingToLocation:
$ref: ./LocationID.yaml
user:
$ref: ./User.yaml
userId:
$ref: ./UserID.yaml
worldId:
$ref: ./WorldID.yaml
required:
- canRequestInvite
- location
- travelingToLocation
- user
- userId
- worldId
12 changes: 12 additions & 0 deletions openapi/components/schemas/WebsocketFriendLocationEncoded.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
title: WebsocketFriendLocationEncoded
type: object
properties:
content:
type: string
contentMediaType: application/json
contentSchema:
$ref: ./WebsocketFriendLocation.yaml
x-vrchat-double-encoding-type: WebsocketFriendLocation
required:
- content
x-vrchat-double-encoding: true
Loading
Loading