@ughuuu/game_server 1.0.1038 → 1.0.1040

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.
Files changed (182) hide show
  1. package/README.md +78 -12
  2. package/dist/ApiClient.js +2 -2
  3. package/dist/api/AchievementsApi.js +2 -2
  4. package/dist/api/AdminAchievementsApi.js +2 -2
  5. package/dist/api/AdminChatApi.js +2 -2
  6. package/dist/api/AdminGroupsApi.js +2 -2
  7. package/dist/api/AdminKVApi.js +2 -2
  8. package/dist/api/AdminLeaderboardsApi.js +2 -2
  9. package/dist/api/AdminLobbiesApi.js +2 -2
  10. package/dist/api/AdminMatchmakingApi.js +165 -0
  11. package/dist/api/AdminNotificationsApi.js +2 -2
  12. package/dist/api/AdminSessionsApi.js +2 -2
  13. package/dist/api/AdminTournamentsApi.js +374 -0
  14. package/dist/api/AdminUsersApi.js +2 -2
  15. package/dist/api/AuthenticationApi.js +2 -2
  16. package/dist/api/ChatApi.js +2 -2
  17. package/dist/api/FriendsApi.js +126 -2
  18. package/dist/api/GroupsApi.js +2 -2
  19. package/dist/api/HealthApi.js +2 -2
  20. package/dist/api/HooksApi.js +2 -2
  21. package/dist/api/KVApi.js +2 -2
  22. package/dist/api/LeaderboardsApi.js +2 -2
  23. package/dist/api/LobbiesApi.js +2 -2
  24. package/dist/api/MatchmakingApi.js +187 -0
  25. package/dist/api/NotificationsApi.js +2 -2
  26. package/dist/api/PartiesApi.js +2 -2
  27. package/dist/api/PaymentsApi.js +2 -2
  28. package/dist/api/TournamentsApi.js +394 -0
  29. package/dist/api/UsersApi.js +2 -2
  30. package/dist/gamend_proto.js +389 -0
  31. package/dist/gamend_realtime.pb.js +6473 -0
  32. package/dist/index.js +189 -7
  33. package/dist/model/AcceptPartyInvite200Response.js +2 -2
  34. package/dist/model/AcceptPartyInvite200ResponseMembersInner.js +2 -2
  35. package/dist/model/AcceptPartyInviteRequest.js +2 -2
  36. package/dist/model/AdminCancelMatchmakingTicket200Response.js +91 -0
  37. package/dist/model/AdminCreateAchievementRequest.js +2 -2
  38. package/dist/model/AdminCreateLeaderboard200Response.js +2 -2
  39. package/dist/model/AdminCreateLeaderboard200ResponseData.js +2 -2
  40. package/dist/model/AdminCreateLeaderboardRequest.js +2 -2
  41. package/dist/model/AdminCreateNotificationRequest.js +2 -2
  42. package/dist/model/AdminDeleteChatConversation200Response.js +2 -2
  43. package/dist/model/AdminDrawTournament200Response.js +91 -0
  44. package/dist/model/AdminDrawTournament200ResponseData.js +297 -0
  45. package/dist/model/AdminGrantAchievementRequest.js +2 -2
  46. package/dist/model/AdminIncrementAchievementRequest.js +2 -2
  47. package/dist/model/AdminListAchievements200Response.js +2 -2
  48. package/dist/model/AdminListAchievements200ResponseDataInner.js +2 -2
  49. package/dist/model/AdminListChatMessages200Response.js +2 -2
  50. package/dist/model/AdminListChatMessages200ResponseDataInner.js +2 -2
  51. package/dist/model/AdminListGroups200Response.js +2 -2
  52. package/dist/model/AdminListKvEntries200Response.js +2 -2
  53. package/dist/model/AdminListLobbies200Response.js +2 -2
  54. package/dist/model/AdminListLobbies200ResponseDataInner.js +2 -2
  55. package/dist/model/AdminListMatchmakingTickets200Response.js +124 -0
  56. package/dist/model/AdminListMatchmakingTickets200ResponseDataInner.js +196 -0
  57. package/dist/model/AdminListNotifications200Response.js +2 -2
  58. package/dist/model/AdminListNotifications200ResponseDataInner.js +2 -2
  59. package/dist/model/AdminListSessions200Response.js +2 -2
  60. package/dist/model/AdminListSessions200ResponseDataInner.js +2 -2
  61. package/dist/model/AdminMatchmakingStats200Response.js +91 -0
  62. package/dist/model/AdminMatchmakingStats200ResponseData.js +113 -0
  63. package/dist/model/AdminResolveTournamentMatchRequest.js +90 -0
  64. package/dist/model/AdminRevokeAchievementRequest.js +2 -2
  65. package/dist/model/AdminSubmitLeaderboardScoreRequest.js +2 -2
  66. package/dist/model/AdminUpdateAchievementRequest.js +2 -2
  67. package/dist/model/AdminUpdateGroup200Response.js +2 -2
  68. package/dist/model/AdminUpdateGroupRequest.js +2 -2
  69. package/dist/model/AdminUpdateKvEntryRequest.js +2 -2
  70. package/dist/model/AdminUpdateLeaderboardRecord200Response.js +2 -2
  71. package/dist/model/AdminUpdateLeaderboardRecord200ResponseData.js +2 -2
  72. package/dist/model/AdminUpdateLeaderboardRecordRequest.js +2 -2
  73. package/dist/model/AdminUpdateLeaderboardRequest.js +2 -2
  74. package/dist/model/AdminUpdateLobby200Response.js +2 -2
  75. package/dist/model/AdminUpdateTournamentRequest.js +253 -0
  76. package/dist/model/AdminUpdateUser200Response.js +2 -2
  77. package/dist/model/AdminUpdateUser200ResponseData.js +2 -2
  78. package/dist/model/AdminUpdateUserRequest.js +2 -2
  79. package/dist/model/AdminUpsertKv200Response.js +2 -2
  80. package/dist/model/AdminUpsertKv200ResponseData.js +2 -2
  81. package/dist/model/AdminUpsertKvRequest.js +2 -2
  82. package/dist/model/ApproveJoinRequest200Response.js +2 -2
  83. package/dist/model/CallHook200Response.js +2 -2
  84. package/dist/model/CallHookRequest.js +2 -2
  85. package/dist/model/CancelJoinRequest200Response.js +2 -2
  86. package/dist/model/ChatUnreadCount200Response.js +2 -2
  87. package/dist/model/CreateGroupRequest.js +2 -2
  88. package/dist/model/CreateLobbyRequest.js +2 -2
  89. package/dist/model/CreatePartyRequest.js +2 -2
  90. package/dist/model/DeclineGroupInvite200Response.js +2 -2
  91. package/dist/model/DeleteNotificationsRequest.js +2 -2
  92. package/dist/model/DeviceLoginRequest.js +2 -2
  93. package/dist/model/ErrorResponse.js +2 -2
  94. package/dist/model/GameServerWebApiV1TournamentControllerIndex200Response.js +110 -0
  95. package/dist/model/GameServerWebApiV1TournamentControllerIndex200ResponseDataInner.js +258 -0
  96. package/dist/model/GameServerWebApiV1TournamentControllerMyMatch200Response.js +173 -0
  97. package/dist/model/GetCurrentUser200Response.js +2 -2
  98. package/dist/model/GetCurrentUser200ResponseLinkedProviders.js +2 -2
  99. package/dist/model/GetKv200Response.js +2 -2
  100. package/dist/model/GetLobby200Response.js +2 -2
  101. package/dist/model/GetMyRecord200Response.js +2 -2
  102. package/dist/model/GetMyRecord200ResponseData.js +2 -2
  103. package/dist/model/HealthResponse.js +2 -2
  104. package/dist/model/InviteToPartyRequest.js +2 -2
  105. package/dist/model/ListBlacklistedUsers200Response.js +118 -0
  106. package/dist/model/ListBlacklistedUsers200ResponseDataInner.js +113 -0
  107. package/dist/model/ListBlockedFriends200Response.js +2 -2
  108. package/dist/model/ListBlockedFriends200ResponseDataInner.js +6 -6
  109. package/dist/model/ListChatMessages200Response.js +2 -2
  110. package/dist/model/ListChatMessages200ResponseDataInner.js +2 -2
  111. package/dist/model/ListFriendRequests200Response.js +2 -2
  112. package/dist/model/ListFriendRequests200ResponseIncomingInner.js +2 -2
  113. package/dist/model/ListFriendRequests200ResponseIncomingInnerRequester.js +2 -2
  114. package/dist/model/ListFriendRequests200ResponseMeta.js +2 -2
  115. package/dist/model/ListFriends200Response.js +2 -2
  116. package/dist/model/ListFriends200ResponseDataInner.js +2 -2
  117. package/dist/model/ListFriends200ResponseMeta.js +2 -2
  118. package/dist/model/ListGroupMembers200Response.js +2 -2
  119. package/dist/model/ListJoinRequests200Response.js +2 -2
  120. package/dist/model/ListLeaderboardRecords200Response.js +2 -2
  121. package/dist/model/ListLeaderboards200Response.js +2 -2
  122. package/dist/model/ListLobbies200Response.js +2 -2
  123. package/dist/model/ListLobbies200ResponseDataInner.js +2 -2
  124. package/dist/model/ListMyGroups200Response.js +2 -2
  125. package/dist/model/ListMyGroups200ResponseDataInner.js +2 -2
  126. package/dist/model/ListPartyInvitations200ResponseInner.js +2 -2
  127. package/dist/model/ListRecordsAroundUser200Response.js +2 -2
  128. package/dist/model/ListSentInvitations200Response.js +2 -2
  129. package/dist/model/ListSentInvitations200ResponseDataInner.js +2 -2
  130. package/dist/model/LoginRequest.js +2 -2
  131. package/dist/model/MarkChatReadRequest.js +2 -2
  132. package/dist/model/MatchmakingCancel200Response.js +85 -0
  133. package/dist/model/MatchmakingJoin201Response.js +91 -0
  134. package/dist/model/MatchmakingJoin201ResponseData.js +186 -0
  135. package/dist/model/MatchmakingJoinRequest.js +101 -0
  136. package/dist/model/MatchmakingMyTicket200Response.js +91 -0
  137. package/dist/model/MatchmakingMyTicket200ResponseData.js +186 -0
  138. package/dist/model/MatchmakingStats200Response.js +91 -0
  139. package/dist/model/MatchmakingStats200ResponseData.js +118 -0
  140. package/dist/model/MatchmakingStats200ResponseDataQueuesInner.js +93 -0
  141. package/dist/model/MyAchievements200Response.js +2 -2
  142. package/dist/model/MyAchievements200ResponseDataInner.js +2 -2
  143. package/dist/model/NotifyGroup200Response.js +2 -2
  144. package/dist/model/NotifyGroupRequest.js +2 -2
  145. package/dist/model/OAuthSessionData.js +2 -2
  146. package/dist/model/OAuthSessionDataDetails.js +2 -2
  147. package/dist/model/OAuthSessionStatus.js +2 -2
  148. package/dist/model/OauthApiCallback200Response.js +2 -2
  149. package/dist/model/OauthApiCallbackRequest.js +2 -2
  150. package/dist/model/OauthCallbackApiAppleIosRequest.js +2 -2
  151. package/dist/model/OauthGoogleIdTokenRequest.js +2 -2
  152. package/dist/model/OauthRequest200Response.js +2 -2
  153. package/dist/model/OauthSessionStatus404Response.js +2 -2
  154. package/dist/model/PartyCreateLobbyRequest.js +2 -2
  155. package/dist/model/PartyJoinLobbyRequest.js +2 -2
  156. package/dist/model/PaymentsEntitlements401Response.js +2 -2
  157. package/dist/model/PaymentsSteamCheckoutRequest.js +2 -2
  158. package/dist/model/PaymentsSteamFinalizeRequest.js +2 -2
  159. package/dist/model/PaymentsStripeCheckoutRequest.js +2 -2
  160. package/dist/model/QuickJoinRequest.js +2 -2
  161. package/dist/model/RefreshToken200Response.js +2 -2
  162. package/dist/model/RefreshToken200ResponseData.js +2 -2
  163. package/dist/model/RefreshTokenRequest.js +2 -2
  164. package/dist/model/ResolveLeaderboardSlugs200Response.js +2 -2
  165. package/dist/model/ResolveLeaderboardSlugs200ResponseDataValue.js +2 -2
  166. package/dist/model/ResolveLeaderboardSlugsRequest.js +2 -2
  167. package/dist/model/SearchUsers200Response.js +2 -2
  168. package/dist/model/SearchUsers200ResponseDataInner.js +2 -2
  169. package/dist/model/SendChatMessageRequest.js +2 -2
  170. package/dist/model/SendNotificationRequest.js +2 -2
  171. package/dist/model/UpdateChatMessageRequest.js +2 -2
  172. package/dist/model/UpdateCurrentUserDisplayName400Response.js +2 -2
  173. package/dist/model/UpdateCurrentUserDisplayNameRequest.js +2 -2
  174. package/dist/model/UpdateCurrentUserPasswordRequest.js +2 -2
  175. package/dist/model/UpdateCurrentUserUsernameRequest.js +2 -2
  176. package/dist/model/UpdateGroupRequest.js +2 -2
  177. package/dist/model/UpdateLobbyRequest.js +2 -2
  178. package/dist/model/UpdatePartyRequest.js +2 -2
  179. package/dist/realtime.js +75 -12
  180. package/dist/webrtc.js +187 -21
  181. package/package.json +2 -2
  182. package/dist/model/ListBlockedFriends200ResponseDataInnerRequester.js +0 -113
@@ -0,0 +1,389 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PB = void 0;
7
+ exports.decodeEvent = decodeEvent;
8
+ exports.registerKvSchema = registerKvSchema;
9
+ exports.registerMetaSchema = registerMetaSchema;
10
+ var _gamend_realtimePb = require("./gamend_realtime.pb.js");
11
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
12
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
13
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
14
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
15
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
16
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
17
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } /**
18
+ * GamendProto — protobuf event decoding for game_server realtime transports.
19
+ *
20
+ * Mirrors the server's `GameServerWeb.EventCodec` mapping (single wire
21
+ * contract: proto/gamend_realtime.proto). Used by GameRealtime when
22
+ * constructed with `format: 'protobuf'` and by GameWebRTC DataChannels
23
+ * negotiated with `protocol: 'protobuf'`.
24
+ *
25
+ * Decoded payloads differ from JSON payloads in two documented ways:
26
+ * - timestamps are unix-millisecond numbers (`*_ms` suffixed fields)
27
+ * - arbitrary JSON values (metadata, KV data) are already parsed from
28
+ * their bytes form back into JS values
29
+ */
30
+ var PB = exports.PB = _gamend_realtimePb.gamend.realtime.v1;
31
+ var td = new TextDecoder();
32
+
33
+ // Game-registered metadata schemas: entity ('user'|'lobby'|'group'|'party')
34
+ // -> protobufjs message class (or a custom (bytes) => value decoder).
35
+ var metaSchemas = {};
36
+
37
+ /**
38
+ * Registers the game's metadata schema for an entity so decoded events expose
39
+ * `metadata` as a plain object (mirrors the plugin-side UserMeta/LobbyMeta/...
40
+ * registration). Without a registration, binary metadata is left on the
41
+ * payload as raw `metadata_pb` bytes.
42
+ *
43
+ * @param {string} entity - 'user' | 'lobby' | 'group' | 'party'
44
+ * @param {Object|Function} schema - protobufjs class, or (Uint8Array) => value
45
+ */
46
+ function registerMetaSchema(entity, schema) {
47
+ metaSchemas[entity] = schema;
48
+ }
49
+
50
+ // Game-registered KV data schemas: exact key or '*'-suffixed prefix pattern
51
+ // -> protobufjs class (or a custom (bytes) => value decoder). Mirrors the
52
+ // plugin's kv_schemas/0 registration.
53
+ var kvSchemas = {
54
+ exact: {},
55
+ prefixes: []
56
+ };
57
+
58
+ /**
59
+ * Registers the game's KV data schema for a key or key-prefix pattern
60
+ * (e.g. 'loadout' or 'match:*'). Exact keys win; longest prefix wins.
61
+ * @param {string} pattern
62
+ * @param {Object|Function} schema - protobufjs class, or (Uint8Array) => value
63
+ */
64
+ function registerKvSchema(pattern, schema) {
65
+ if (pattern.endsWith('*')) {
66
+ kvSchemas.prefixes.push([pattern.slice(0, -1), schema]);
67
+ kvSchemas.prefixes.sort(function (a, b) {
68
+ return b[0].length - a[0].length;
69
+ });
70
+ } else {
71
+ kvSchemas.exact[pattern] = schema;
72
+ }
73
+ }
74
+ function kvSchemaFor(key) {
75
+ if (kvSchemas.exact[key]) return kvSchemas.exact[key];
76
+ var hit = kvSchemas.prefixes.find(function (_ref) {
77
+ var _ref2 = _slicedToArray(_ref, 1),
78
+ prefix = _ref2[0];
79
+ return key.startsWith(prefix);
80
+ });
81
+ return hit ? hit[1] : null;
82
+ }
83
+ function withMeta(obj, entity) {
84
+ if (obj.metadata_pb != null && obj.metadata_pb.length) {
85
+ var schema = metaSchemas[entity];
86
+ if (schema) {
87
+ obj.metadata = typeof schema === 'function' ? schema(obj.metadata_pb) : schema.toObject(schema.decode(obj.metadata_pb), {
88
+ defaults: true,
89
+ longs: Number
90
+ });
91
+ delete obj.metadata_pb;
92
+ }
93
+ }
94
+ return obj;
95
+ }
96
+
97
+ /** Parses a bytes-JSON field; empty/absent bytes decode to defaultValue. */
98
+ function fromJsonBytes(bytes) {
99
+ var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
100
+ if (!bytes || bytes.length === 0) return defaultValue;
101
+ return JSON.parse(td.decode(bytes));
102
+ }
103
+
104
+ /** Parses JSON-bytes fields into their JSON-mode field names. */
105
+ function withParsedJson(obj, fields) {
106
+ var _iterator = _createForOfIteratorHelper(fields),
107
+ _step;
108
+ try {
109
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
110
+ var _step$value = _slicedToArray(_step.value, 2),
111
+ src = _step$value[0],
112
+ dest = _step$value[1];
113
+ if (obj[src] !== undefined && obj[src] !== null) {
114
+ obj[dest] = fromJsonBytes(obj[src], {});
115
+ if (src !== dest) delete obj[src];
116
+ }
117
+ }
118
+ } catch (err) {
119
+ _iterator.e(err);
120
+ } finally {
121
+ _iterator.f();
122
+ }
123
+ return obj;
124
+ }
125
+ function decodeUser(bin) {
126
+ var u = PB.User.decode(bin);
127
+ var out = PB.User.toObject(u, {
128
+ defaults: false,
129
+ longs: Number
130
+ });
131
+ return withMeta(withParsedJson(out, [['metadata_json', 'metadata']]), 'user');
132
+ }
133
+ var decoders = {
134
+ user: {
135
+ updated: decodeUser,
136
+ friend_updated: function friend_updated(bin) {
137
+ var msg = PB.FriendUpdate.decode(bin);
138
+ var friends = {};
139
+ for (var _i = 0, _Object$entries = Object.entries(msg.friends); _i < _Object$entries.length; _i++) {
140
+ var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),
141
+ id = _Object$entries$_i[0],
142
+ user = _Object$entries$_i[1];
143
+ friends[id] = withMeta(withParsedJson(PB.User.toObject(user, {
144
+ defaults: false,
145
+ longs: Number
146
+ }), [['metadata_json', 'metadata']]), 'user');
147
+ }
148
+ return {
149
+ friends: friends
150
+ };
151
+ },
152
+ group_invite_accepted: function group_invite_accepted(bin) {
153
+ return PB.GroupInviteEvent.toObject(PB.GroupInviteEvent.decode(bin));
154
+ },
155
+ group_invite_cancelled: function group_invite_cancelled(bin) {
156
+ return PB.GroupInviteEvent.toObject(PB.GroupInviteEvent.decode(bin));
157
+ },
158
+ group_join_approved: function group_join_approved(bin) {
159
+ return PB.GroupInviteEvent.toObject(PB.GroupInviteEvent.decode(bin));
160
+ },
161
+ group_join_rejected: function group_join_rejected(bin) {
162
+ return PB.GroupInviteEvent.toObject(PB.GroupInviteEvent.decode(bin));
163
+ },
164
+ party_invite_accepted: function party_invite_accepted(bin) {
165
+ return PB.PartyInviteEvent.toObject(PB.PartyInviteEvent.decode(bin));
166
+ },
167
+ party_invite_declined: function party_invite_declined(bin) {
168
+ return PB.PartyInviteEvent.toObject(PB.PartyInviteEvent.decode(bin));
169
+ },
170
+ party_invite_cancelled: function party_invite_cancelled(bin) {
171
+ return PB.PartyInviteEvent.toObject(PB.PartyInviteEvent.decode(bin));
172
+ }
173
+ },
174
+ lobby: {
175
+ updated: function updated(bin) {
176
+ return decodeLobby(bin);
177
+ },
178
+ user_joined: function user_joined(bin) {
179
+ return decodeMember(bin);
180
+ },
181
+ user_left: function user_left(bin) {
182
+ return decodeMember(bin);
183
+ },
184
+ user_kicked: function user_kicked(bin) {
185
+ return decodeMember(bin);
186
+ },
187
+ host_changed: function host_changed(bin) {
188
+ return PB.HostChanged.toObject(PB.HostChanged.decode(bin));
189
+ },
190
+ member_online: function member_online(bin) {
191
+ return decodeMember(bin);
192
+ },
193
+ member_offline: function member_offline(bin) {
194
+ return decodeMember(bin);
195
+ },
196
+ member_updated: function member_updated(bin) {
197
+ return decodeBrief(bin);
198
+ }
199
+ },
200
+ lobbies: {
201
+ lobby_created: function lobby_created(bin) {
202
+ return decodeLobby(bin);
203
+ },
204
+ lobby_updated: function lobby_updated(bin) {
205
+ return decodeLobby(bin);
206
+ },
207
+ lobby_deleted: function lobby_deleted(bin) {
208
+ return PB.EntityId.toObject(PB.EntityId.decode(bin));
209
+ },
210
+ lobby_membership_changed: function lobby_membership_changed(bin) {
211
+ return PB.EntityId.toObject(PB.EntityId.decode(bin));
212
+ }
213
+ },
214
+ group: {
215
+ updated: function updated(bin) {
216
+ return decodeGroup(bin);
217
+ },
218
+ member_joined: function member_joined(bin) {
219
+ return decodeMember(bin);
220
+ },
221
+ member_left: function member_left(bin) {
222
+ return decodeMember(bin);
223
+ },
224
+ member_kicked: function member_kicked(bin) {
225
+ return decodeMember(bin);
226
+ },
227
+ member_promoted: function member_promoted(bin) {
228
+ return decodeMember(bin);
229
+ },
230
+ member_demoted: function member_demoted(bin) {
231
+ return decodeMember(bin);
232
+ },
233
+ join_request_approved: function join_request_approved(bin) {
234
+ return decodeMember(bin);
235
+ },
236
+ join_request_rejected: function join_request_rejected(bin) {
237
+ return decodeMember(bin);
238
+ },
239
+ member_online: function member_online(bin) {
240
+ return decodeMember(bin);
241
+ },
242
+ member_offline: function member_offline(bin) {
243
+ return decodeMember(bin);
244
+ },
245
+ member_updated: function member_updated(bin) {
246
+ return decodeBrief(bin);
247
+ }
248
+ },
249
+ groups: {
250
+ group_created: function group_created(bin) {
251
+ return decodeGroup(bin);
252
+ },
253
+ group_updated: function group_updated(bin) {
254
+ return decodeGroup(bin);
255
+ },
256
+ group_deleted: function group_deleted(bin) {
257
+ return PB.EntityId.toObject(PB.EntityId.decode(bin));
258
+ }
259
+ },
260
+ party: {
261
+ updated: function updated(bin) {
262
+ return withMeta(withParsedJson(PB.Party.toObject(PB.Party.decode(bin), {
263
+ defaults: false,
264
+ longs: Number
265
+ }), [['metadata_json', 'metadata']]), 'party');
266
+ },
267
+ member_joined: function member_joined(bin) {
268
+ return decodeMember(bin);
269
+ },
270
+ member_left: function member_left(bin) {
271
+ return decodeMember(bin);
272
+ },
273
+ member_online: function member_online(bin) {
274
+ return decodeMember(bin);
275
+ },
276
+ member_offline: function member_offline(bin) {
277
+ return decodeMember(bin);
278
+ },
279
+ member_updated: function member_updated(bin) {
280
+ return decodeBrief(bin);
281
+ },
282
+ disbanded: function disbanded(bin) {
283
+ return PB.PartyRef.toObject(PB.PartyRef.decode(bin));
284
+ }
285
+ }
286
+ };
287
+ function decodeLobby(bin) {
288
+ return withMeta(withParsedJson(PB.Lobby.toObject(PB.Lobby.decode(bin), {
289
+ defaults: false,
290
+ longs: Number
291
+ }), [['metadata_json', 'metadata']]), 'lobby');
292
+ }
293
+ function decodeGroup(bin) {
294
+ return withMeta(withParsedJson(PB.Group.toObject(PB.Group.decode(bin), {
295
+ defaults: false,
296
+ longs: Number
297
+ }), [['metadata_json', 'metadata']]), 'group');
298
+ }
299
+ function decodeMember(bin) {
300
+ return withMeta(withParsedJson(PB.MemberEvent.toObject(PB.MemberEvent.decode(bin), {
301
+ defaults: false,
302
+ longs: Number
303
+ }), [['metadata_json', 'metadata']]), 'user');
304
+ }
305
+ function decodeBrief(bin) {
306
+ return withMeta(withParsedJson(PB.UserBrief.toObject(PB.UserBrief.decode(bin), {
307
+ defaults: false,
308
+ longs: Number
309
+ }), [['metadata_json', 'metadata']]), 'user');
310
+ }
311
+
312
+ // Events with the same shape on every topic.
313
+ var anyTopic = {
314
+ kv_updated: function kv_updated(bin) {
315
+ return decodeKv(bin);
316
+ },
317
+ kv_deleted: function kv_deleted(bin) {
318
+ return decodeKv(bin);
319
+ },
320
+ notification: function notification(bin) {
321
+ return withParsedJson(PB.Notification.toObject(PB.Notification.decode(bin), {
322
+ defaults: true,
323
+ longs: Number
324
+ }), [['metadata_json', 'metadata']]);
325
+ },
326
+ new_chat_message: function new_chat_message(bin) {
327
+ return decodeChat(bin);
328
+ },
329
+ chat_message_updated: function chat_message_updated(bin) {
330
+ return decodeChat(bin);
331
+ },
332
+ chat_message_deleted: function chat_message_deleted(bin) {
333
+ return PB.EntityId.toObject(PB.EntityId.decode(bin));
334
+ },
335
+ achievement_unlocked: function achievement_unlocked(bin) {
336
+ return withParsedJson(PB.UserAchievement.toObject(PB.UserAchievement.decode(bin), {
337
+ defaults: true,
338
+ longs: Number
339
+ }), [['metadata_json', 'metadata']]);
340
+ }
341
+ };
342
+ function decodeKv(bin) {
343
+ var msg = PB.KvEntry.decode(bin);
344
+ var kv = PB.KvEntry.toObject(msg, {
345
+ defaults: false
346
+ });
347
+ if (msg.data_json && msg.data_json.length) kv.data = fromJsonBytes(msg.data_json);
348
+ if (msg.metadata_json && msg.metadata_json.length) kv.metadata = fromJsonBytes(msg.metadata_json, {});
349
+ if (msg.data_pb && msg.data_pb.length) {
350
+ var schema = kvSchemaFor(msg.key);
351
+ if (schema) {
352
+ kv.data = typeof schema === 'function' ? schema(msg.data_pb) : schema.toObject(schema.decode(msg.data_pb), {
353
+ defaults: true,
354
+ longs: Number
355
+ });
356
+ delete kv.data_pb;
357
+ }
358
+ // unregistered: raw bytes stay on kv.data_pb
359
+ } else {
360
+ delete kv.data_pb;
361
+ }
362
+ delete kv.data_json;
363
+ delete kv.metadata_json;
364
+ return kv;
365
+ }
366
+ function decodeChat(bin) {
367
+ return withParsedJson(PB.ChatMessage.toObject(PB.ChatMessage.decode(bin), {
368
+ defaults: true,
369
+ longs: Number
370
+ }), [['metadata_json', 'metadata']]);
371
+ }
372
+
373
+ /**
374
+ * Decodes a binary event payload received on `topic` for `event`.
375
+ * Returns the decoded object, or null when the event has no protobuf
376
+ * mapping (callers should treat the frame as opaque).
377
+ *
378
+ * @param {string} topic - Phoenix topic, e.g. "user:<id>" or "lobby:<id>"
379
+ * @param {string} event - event name, e.g. "updated"
380
+ * @param {ArrayBuffer|Uint8Array} data
381
+ */
382
+ function decodeEvent(topic, event, data) {
383
+ var kind = topic.split(':', 1)[0];
384
+ var bin = data instanceof Uint8Array ? data : new Uint8Array(data);
385
+ var decoder = decoders[kind] && decoders[kind][event] || anyTopic[event];
386
+ return decoder ? decoder(bin) : null;
387
+ }
388
+
389
+ /** Raw generated messages, for advanced use (RtcEnvelope etc.). */