@wavezfm/api 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.md +338 -0
  2. package/dist/core/ApiError.d.ts +14 -0
  3. package/dist/core/ApiError.js +20 -0
  4. package/dist/core/ApiError.js.map +1 -0
  5. package/dist/core/api.d.ts +27 -0
  6. package/dist/core/api.js +327 -0
  7. package/dist/core/api.js.map +1 -0
  8. package/dist/core/i18n.d.ts +3 -0
  9. package/dist/core/i18n.js +97 -0
  10. package/dist/core/i18n.js.map +1 -0
  11. package/dist/index.d.ts +379 -0
  12. package/dist/index.js +47 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/realtime/roomBot.d.ts +2 -0
  15. package/dist/realtime/roomBot.js +215 -0
  16. package/dist/realtime/roomBot.js.map +1 -0
  17. package/dist/resources/auth.d.ts +35 -0
  18. package/dist/resources/auth.js +30 -0
  19. package/dist/resources/auth.js.map +1 -0
  20. package/dist/resources/billing.d.ts +45 -0
  21. package/dist/resources/billing.js +29 -0
  22. package/dist/resources/billing.js.map +1 -0
  23. package/dist/resources/chat.d.ts +27 -0
  24. package/dist/resources/chat.js +38 -0
  25. package/dist/resources/chat.js.map +1 -0
  26. package/dist/resources/friend.d.ts +23 -0
  27. package/dist/resources/friend.js +35 -0
  28. package/dist/resources/friend.js.map +1 -0
  29. package/dist/resources/playlist.d.ts +64 -0
  30. package/dist/resources/playlist.js +61 -0
  31. package/dist/resources/playlist.js.map +1 -0
  32. package/dist/resources/room.d.ts +50 -0
  33. package/dist/resources/room.js +152 -0
  34. package/dist/resources/room.js.map +1 -0
  35. package/dist/resources/roomBot.d.ts +45 -0
  36. package/dist/resources/roomBot.js +75 -0
  37. package/dist/resources/roomBot.js.map +1 -0
  38. package/dist/resources/settings.d.ts +43 -0
  39. package/dist/resources/settings.js +38 -0
  40. package/dist/resources/settings.js.map +1 -0
  41. package/dist/resources/shop.d.ts +11 -0
  42. package/dist/resources/shop.js +22 -0
  43. package/dist/resources/shop.js.map +1 -0
  44. package/dist/resources/source.d.ts +14 -0
  45. package/dist/resources/source.js +50 -0
  46. package/dist/resources/source.js.map +1 -0
  47. package/dist/resources/system.d.ts +6 -0
  48. package/dist/resources/system.js +20 -0
  49. package/dist/resources/system.js.map +1 -0
  50. package/dist/resources/user.d.ts +7 -0
  51. package/dist/resources/user.js +19 -0
  52. package/dist/resources/user.js.map +1 -0
  53. package/dist/types.d.ts +374 -0
  54. package/dist/types.js +2 -0
  55. package/dist/types.js.map +1 -0
  56. package/package.json +97 -0
@@ -0,0 +1,379 @@
1
+ export { ApiError } from "./core/ApiError";
2
+ export { createApi, WavezApi } from "./core/api";
3
+ export { createAuthResource } from "./resources/auth";
4
+ export { createSettingsResource } from "./resources/settings";
5
+ export { createUserResource } from "./resources/user";
6
+ export { createRoomResource } from "./resources/room";
7
+ export { createPlaylistResource } from "./resources/playlist";
8
+ export { createSourceResource } from "./resources/source";
9
+ export { createChatResource } from "./resources/chat";
10
+ export { createFriendResource } from "./resources/friend";
11
+ export { createShopResource } from "./resources/shop";
12
+ export { createBillingResource } from "./resources/billing";
13
+ export { createSystemResource } from "./resources/system";
14
+ export { createRoomBotResource } from "./resources/roomBot";
15
+ export { createRoomBotRealtimeClient } from "./realtime/roomBot";
16
+ export type { ApiClientConfig, ApiLike, ApiQuery, ApiQueryValue, ApiRequestOptions, ApiSuccessResponse, AuthMode, AuthUser, BadgeAssignment, ChatMessage, CheckoutSessionResponse, InventoryResponse, InventoryCatalogEntry, InventoryCatalogItem, MediaSearchResult, PlaylistSummary, PlaylistTrack, RoomBotPermission, RoomBotRealtimeClient, RoomBotRealtimeOptions, RoomBotState, RoomBotToken, RoomSummary, WavezApiLocale, WavezApiMessageKey, WavezApiMessages, WavezApiMessageValues, StoreCatalogResponse, StoreCatalogItem, StoreCatalogSection, SystemDonationGoal, SystemPublicStats, SystemStatus, TwoFactorStatus, UserSettings, UserProfile, WalletBalance, WebSocketLike, WsPacket, } from "./types";
17
+ import type { ApiClientConfig } from "./types";
18
+ export declare function createApiClient(config: ApiClientConfig): {
19
+ api: import(".").WavezApi;
20
+ auth: {
21
+ login(input: {
22
+ email: string;
23
+ password: string;
24
+ }): Promise<import("./types").ApiSuccessResponse<{
25
+ [key: string]: unknown;
26
+ user?: import("./types").AuthUser;
27
+ }>>;
28
+ register(input: {
29
+ email: string;
30
+ password: string;
31
+ name: string;
32
+ username?: string;
33
+ }): Promise<import("./types").ApiSuccessResponse<{
34
+ [key: string]: unknown;
35
+ user?: import("./types").AuthUser;
36
+ }>>;
37
+ me(): Promise<{
38
+ data: import("./types").AuthUser | null;
39
+ status: number;
40
+ headers: Headers;
41
+ }>;
42
+ getPendingTwoFactor(): Promise<import("./types").ApiSuccessResponse<{
43
+ [key: string]: unknown;
44
+ pending: boolean;
45
+ method?: string | null;
46
+ maskedDestination?: string | null;
47
+ }>>;
48
+ sendPendingTwoFactorCode(input?: Record<string, unknown>): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
49
+ verifyPendingTwoFactor(input: {
50
+ code: string;
51
+ }): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
52
+ getTwoFactorStatus(): Promise<import("./types").ApiSuccessResponse<import("./types").TwoFactorStatus>>;
53
+ };
54
+ settings: {
55
+ get(): Promise<import("./types").ApiSuccessResponse<import("./types").UserSettings>>;
56
+ update(input: {
57
+ bio?: string;
58
+ timeFormat?: "12h" | "24h";
59
+ notifyChatMentions?: boolean;
60
+ playMentionSound?: boolean;
61
+ presenceStatus?: "online" | "busy" | "away";
62
+ selectedBadgeIds?: string[];
63
+ showChatBadge?: boolean;
64
+ }): Promise<import("./types").ApiSuccessResponse<import("./types").UserSettings>>;
65
+ getTwoFactor(): Promise<import("./types").ApiSuccessResponse<import("./types").TwoFactorStatus>>;
66
+ sendPhoneVerification(input: {
67
+ phoneNumber: string;
68
+ password: string;
69
+ }): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
70
+ verifyPhoneNumber(input: {
71
+ phoneNumber: string;
72
+ otp: string;
73
+ password: string;
74
+ }): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
75
+ startEmailTwoFactor(input: {
76
+ password: string;
77
+ }): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
78
+ startSmsTwoFactor(input: {
79
+ password: string;
80
+ }): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
81
+ verifyOtpTwoFactor(input: {
82
+ code: string;
83
+ password: string;
84
+ }): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
85
+ startAuthenticatorTwoFactor(input: {
86
+ password: string;
87
+ }): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
88
+ verifyAuthenticatorTwoFactor(input: {
89
+ code: string;
90
+ password: string;
91
+ }): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
92
+ disableTwoFactor(input: {
93
+ password: string;
94
+ }): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
95
+ };
96
+ user: {
97
+ getById(userId: string): Promise<import("./types").ApiSuccessResponse<import("./types").UserProfile>>;
98
+ getByUsername(username: string): Promise<import("./types").ApiSuccessResponse<import("./types").UserProfile>>;
99
+ getBadges(userId: string): Promise<import("./types").ApiSuccessResponse<import("./types").BadgeAssignment[]>>;
100
+ listAllBadges(): Promise<import("./types").ApiSuccessResponse<import("./types").BadgeAssignment[]>>;
101
+ };
102
+ room: {
103
+ list(): Promise<import("./types").ApiSuccessResponse<import("./types").RoomSummary[]>>;
104
+ featured(): Promise<{
105
+ data: import("./types").RoomSummary[];
106
+ status: number;
107
+ headers: Headers;
108
+ }>;
109
+ getBySlug(slug: string): Promise<import("./types").ApiSuccessResponse<import("./types").RoomSummary>>;
110
+ getJoinPreview(slug: string): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
111
+ getWaitlist(slug: string): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
112
+ create(input: {
113
+ name: string;
114
+ slug: string;
115
+ description?: string;
116
+ capacity?: number;
117
+ isPrivate?: boolean;
118
+ }): Promise<import("./types").ApiSuccessResponse<import("./types").RoomSummary>>;
119
+ join(roomIdOrSlug: string): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
120
+ favorite(roomId: string): Promise<import("./types").ApiSuccessResponse<void>>;
121
+ unfavorite(roomId: string): Promise<import("./types").ApiSuccessResponse<void>>;
122
+ getManagement(roomId: string): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
123
+ createBotToken(roomId: string, input: {
124
+ botName: string;
125
+ botAvatarUrl?: string;
126
+ commandPrefix?: string;
127
+ permissions?: import("./types").RoomBotPermission[];
128
+ expiresInHours?: number;
129
+ }): Promise<import("./types").ApiSuccessResponse<import("./types").RoomBotToken>>;
130
+ listEmojis(roomId: string): Promise<import("./types").ApiSuccessResponse<unknown[]>>;
131
+ listAuditLogs(roomId: string, limit?: number): Promise<import("./types").ApiSuccessResponse<{
132
+ logs: unknown[];
133
+ }>>;
134
+ updateSettings(roomId: string, input: Record<string, unknown>): Promise<import("./types").ApiSuccessResponse<{
135
+ room: Record<string, unknown>;
136
+ }>>;
137
+ updateLinkFilters(roomId: string, input: {
138
+ blockAllLinks: boolean;
139
+ blockedLinkPatterns: string[];
140
+ commandAnnouncement?: Record<string, unknown>;
141
+ }): Promise<import("./types").ApiSuccessResponse<{
142
+ room: Record<string, unknown>;
143
+ }>>;
144
+ setRole(roomId: string, userId: string, role: string): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
145
+ setQueueAccess(roomId: string, userId: string, blocked: boolean): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
146
+ unban(roomId: string, userId: string): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
147
+ createEmoji(roomId: string, input: Record<string, unknown>): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
148
+ updateEmoji(roomId: string, emojiId: string, input: Record<string, unknown>): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
149
+ deleteEmoji(roomId: string, emojiId: string): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
150
+ };
151
+ playlist: {
152
+ list(): Promise<import("./types").ApiSuccessResponse<import("./types").PlaylistSummary[]>>;
153
+ create(input: {
154
+ name: string;
155
+ } | string): Promise<import("./types").ApiSuccessResponse<import("./types").PlaylistSummary>>;
156
+ update(playlistId: string, input: {
157
+ name?: string;
158
+ isActive?: boolean;
159
+ }): Promise<import("./types").ApiSuccessResponse<{
160
+ success: true;
161
+ }>>;
162
+ remove(playlistId: string): Promise<import("./types").ApiSuccessResponse<{
163
+ success: true;
164
+ }>>;
165
+ getTracks(playlistId: string): Promise<import("./types").ApiSuccessResponse<import("./types").PlaylistTrack[]>>;
166
+ previewUrl(url: string): Promise<import("./types").ApiSuccessResponse<{
167
+ kind: "track";
168
+ sourceId: string;
169
+ source: string;
170
+ title: string;
171
+ artist?: string;
172
+ thumbnailUrl?: string | null;
173
+ } | {
174
+ kind: "playlist";
175
+ importSource: string;
176
+ sourceUrl: string;
177
+ title: string;
178
+ totalTracks: number;
179
+ thumbnailUrl?: string | null;
180
+ truncated?: boolean;
181
+ }>>;
182
+ addTrack(playlistId: string, input: {
183
+ url?: string;
184
+ sourceId?: string;
185
+ source?: string;
186
+ title?: string;
187
+ artist?: string;
188
+ durationMs?: number;
189
+ thumbnailUrl?: string | null;
190
+ }): Promise<import("./types").ApiSuccessResponse<import("./types").PlaylistTrack>>;
191
+ reorderTracks(playlistId: string, trackIds: string[]): Promise<import("./types").ApiSuccessResponse<{
192
+ success: true;
193
+ }>>;
194
+ removeTrack(playlistId: string, trackId: string): Promise<import("./types").ApiSuccessResponse<{
195
+ success: true;
196
+ }>>;
197
+ listImports(): Promise<import("./types").ApiSuccessResponse<unknown[]>>;
198
+ getImport(jobId: string): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
199
+ startSpotifyImport(input: {
200
+ playlistId: string;
201
+ url: string;
202
+ }): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
203
+ importYouTubePlaylist(input: {
204
+ playlistId: string;
205
+ url: string;
206
+ }): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
207
+ importSoundCloudPlaylist(input: {
208
+ playlistId: string;
209
+ url: string;
210
+ }): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
211
+ cancelImport(jobId: string): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
212
+ searchPreview(query: string, source?: string, limit?: number): Promise<import("./types").ApiSuccessResponse<import("./types").MediaSearchResult[]>>;
213
+ };
214
+ source: {
215
+ search(source: string, query: string, limit?: number): Promise<import("./types").ApiSuccessResponse<import("./types").MediaSearchResult[]>>;
216
+ searchYouTube(query: string, limit?: number): Promise<import("./types").ApiSuccessResponse<import("./types").MediaSearchResult[]>>;
217
+ searchSoundCloud(query: string, limit?: number): Promise<import("./types").ApiSuccessResponse<import("./types").MediaSearchResult[]>>;
218
+ searchAll(query: string, limit?: number): Promise<{
219
+ data: {
220
+ youtube: import("./types").MediaSearchResult[];
221
+ soundcloud: import("./types").MediaSearchResult[];
222
+ };
223
+ status: number;
224
+ headers: Headers;
225
+ }>;
226
+ };
227
+ chat: {
228
+ getMessages(roomId: string, offset?: number, limit?: number): Promise<import("./types").ApiSuccessResponse<{
229
+ history: boolean;
230
+ pinnedMessage?: Record<string, unknown> | null;
231
+ messages: import("./types").ChatMessage[];
232
+ }>>;
233
+ getMessagesBySlug(slug: string, offset?: number, limit?: number): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
234
+ deleteMessage(roomId: string, messageId: string, message?: Record<string, unknown>): Promise<import("./types").ApiSuccessResponse<{
235
+ success: true;
236
+ }>>;
237
+ updateMessage(roomId: string, messageId: string, input: {
238
+ content: string;
239
+ message?: Record<string, unknown>;
240
+ }): Promise<import("./types").ApiSuccessResponse<{
241
+ message: import("./types").ChatMessage | null;
242
+ }>>;
243
+ pinMessage(roomId: string, messageId: string, message?: Record<string, unknown>): Promise<import("./types").ApiSuccessResponse<{
244
+ success: true;
245
+ }>>;
246
+ clearPinnedMessage(roomId: string): Promise<import("./types").ApiSuccessResponse<{
247
+ success: true;
248
+ }>>;
249
+ clearChat(roomId: string): Promise<import("./types").ApiSuccessResponse<{
250
+ success: true;
251
+ }>>;
252
+ };
253
+ friend: {
254
+ list(): Promise<import("./types").ApiSuccessResponse<import("./types").UserProfile[]>>;
255
+ pending(): Promise<import("./types").ApiSuccessResponse<import("./types").UserProfile[]>>;
256
+ sendRequest(userId: string): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
257
+ acceptRequest(requestId: string): Promise<import("./types").ApiSuccessResponse<{
258
+ success: true;
259
+ }>>;
260
+ rejectRequest(requestId: string): Promise<import("./types").ApiSuccessResponse<{
261
+ success: true;
262
+ }>>;
263
+ remove(friendshipId: string): Promise<import("./types").ApiSuccessResponse<{
264
+ success: true;
265
+ }>>;
266
+ follow(userId: string): Promise<import("./types").ApiSuccessResponse<{
267
+ success: true;
268
+ }>>;
269
+ unfollow(userId: string): Promise<import("./types").ApiSuccessResponse<{
270
+ success: true;
271
+ }>>;
272
+ followers(): Promise<import("./types").ApiSuccessResponse<import("./types").UserProfile[]>>;
273
+ following(): Promise<import("./types").ApiSuccessResponse<import("./types").UserProfile[]>>;
274
+ };
275
+ shop: {
276
+ getCatalog(): Promise<import("./types").ApiSuccessResponse<import("./types").StoreCatalogResponse>>;
277
+ getWallet(): Promise<import("./types").ApiSuccessResponse<import("./types").WalletBalance>>;
278
+ purchase(input: {
279
+ itemId: string;
280
+ idempotencyKey?: string;
281
+ }): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
282
+ equip(itemId: string): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
283
+ getInventory(): Promise<import("./types").ApiSuccessResponse<import("./types").InventoryResponse>>;
284
+ };
285
+ billing: {
286
+ createSubscriptionCheckout(input?: {
287
+ cycle?: string | null;
288
+ currency?: string | null;
289
+ returnPath?: string | null;
290
+ }): Promise<import("./types").ApiSuccessResponse<import("./types").CheckoutSessionResponse>>;
291
+ createDiamondCheckout(input?: {
292
+ quantity?: number;
293
+ currency?: string | null;
294
+ returnPath?: string | null;
295
+ }): Promise<import("./types").ApiSuccessResponse<import("./types").CheckoutSessionResponse>>;
296
+ createRoomDonationCheckout(roomId: string, input?: {
297
+ amountCents?: number;
298
+ locale?: string | null;
299
+ returnPath?: string | null;
300
+ }): Promise<import("./types").ApiSuccessResponse<import("./types").CheckoutSessionResponse>>;
301
+ createGlobalDonationCheckout(input?: {
302
+ amountCents?: number;
303
+ locale?: string | null;
304
+ returnPath?: string | null;
305
+ }): Promise<import("./types").ApiSuccessResponse<import("./types").CheckoutSessionResponse>>;
306
+ createDiamondGiftCheckout(input: {
307
+ recipientUsername: string;
308
+ quantity?: number;
309
+ currency?: string | null;
310
+ returnPath?: string | null;
311
+ message?: string | null;
312
+ anonymous?: boolean;
313
+ announceInRoom?: boolean;
314
+ announceRoomSlug?: string | null;
315
+ }): Promise<import("./types").ApiSuccessResponse<import("./types").CheckoutSessionResponse>>;
316
+ createSubscriptionGiftCheckout(input: {
317
+ recipientUsername: string;
318
+ cycle?: string | null;
319
+ currency?: string | null;
320
+ returnPath?: string | null;
321
+ message?: string | null;
322
+ anonymous?: boolean;
323
+ announceInRoom?: boolean;
324
+ announceRoomSlug?: string | null;
325
+ }): Promise<import("./types").ApiSuccessResponse<import("./types").CheckoutSessionResponse>>;
326
+ listPendingGifts(): Promise<import("./types").ApiSuccessResponse<unknown[]>>;
327
+ markGiftSeen(giftId: string): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
328
+ };
329
+ system: {
330
+ status(): Promise<import("./types").ApiSuccessResponse<import("./types").SystemStatus>>;
331
+ publicStats(): Promise<import("./types").ApiSuccessResponse<import("./types").SystemPublicStats>>;
332
+ health(): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
333
+ };
334
+ roomBot: {
335
+ getState(roomId: string): Promise<import("./types").ApiSuccessResponse<import("./types").RoomBotState>>;
336
+ getMessages(roomId: string, limit?: number, offset?: number): Promise<import("./types").ApiSuccessResponse<{
337
+ bot: Record<string, unknown>;
338
+ history: boolean;
339
+ messages: unknown[];
340
+ }>>;
341
+ sendMessage(roomId: string, input: {
342
+ content: string;
343
+ }): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
344
+ deleteMessage(roomId: string, messageId: string, message?: Record<string, unknown>): Promise<import("./types").ApiSuccessResponse<{
345
+ success: true;
346
+ }>>;
347
+ pinMessage(roomId: string, messageId: string, message?: Record<string, unknown>): Promise<import("./types").ApiSuccessResponse<{
348
+ success: true;
349
+ }>>;
350
+ clearPinnedMessage(roomId: string): Promise<import("./types").ApiSuccessResponse<{
351
+ success: true;
352
+ }>>;
353
+ clearChat(roomId: string): Promise<import("./types").ApiSuccessResponse<{
354
+ success: true;
355
+ }>>;
356
+ getManagement(roomId: string): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
357
+ listEmojis(roomId: string): Promise<import("./types").ApiSuccessResponse<unknown[]>>;
358
+ listAuditLogs(roomId: string, limit?: number): Promise<import("./types").ApiSuccessResponse<{
359
+ logs: unknown[];
360
+ }>>;
361
+ updateSettings(roomId: string, input: Record<string, unknown>): Promise<import("./types").ApiSuccessResponse<{
362
+ room: Record<string, unknown>;
363
+ }>>;
364
+ updateLinkFilters(roomId: string, input: {
365
+ blockAllLinks: boolean;
366
+ blockedLinkPatterns: string[];
367
+ commandAnnouncement?: Record<string, unknown>;
368
+ }): Promise<import("./types").ApiSuccessResponse<{
369
+ room: Record<string, unknown>;
370
+ }>>;
371
+ setRole(roomId: string, userId: string, role: string): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
372
+ setQueueAccess(roomId: string, userId: string, blocked: boolean): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
373
+ unban(roomId: string, userId: string): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
374
+ createEmoji(roomId: string, input: Record<string, unknown>): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
375
+ updateEmoji(roomId: string, emojiId: string, input: Record<string, unknown>): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
376
+ deleteEmoji(roomId: string, emojiId: string): Promise<import("./types").ApiSuccessResponse<Record<string, unknown>>>;
377
+ };
378
+ };
379
+ export type WavezApiClient = ReturnType<typeof createApiClient>;
package/dist/index.js ADDED
@@ -0,0 +1,47 @@
1
+ export { ApiError } from "./core/ApiError";
2
+ export { createApi, WavezApi } from "./core/api";
3
+ export { createAuthResource } from "./resources/auth";
4
+ export { createSettingsResource } from "./resources/settings";
5
+ export { createUserResource } from "./resources/user";
6
+ export { createRoomResource } from "./resources/room";
7
+ export { createPlaylistResource } from "./resources/playlist";
8
+ export { createSourceResource } from "./resources/source";
9
+ export { createChatResource } from "./resources/chat";
10
+ export { createFriendResource } from "./resources/friend";
11
+ export { createShopResource } from "./resources/shop";
12
+ export { createBillingResource } from "./resources/billing";
13
+ export { createSystemResource } from "./resources/system";
14
+ export { createRoomBotResource } from "./resources/roomBot";
15
+ export { createRoomBotRealtimeClient } from "./realtime/roomBot";
16
+ import { createApi } from "./core/api";
17
+ import { createAuthResource } from "./resources/auth";
18
+ import { createSettingsResource } from "./resources/settings";
19
+ import { createUserResource } from "./resources/user";
20
+ import { createRoomResource } from "./resources/room";
21
+ import { createPlaylistResource } from "./resources/playlist";
22
+ import { createSourceResource } from "./resources/source";
23
+ import { createChatResource } from "./resources/chat";
24
+ import { createFriendResource } from "./resources/friend";
25
+ import { createShopResource } from "./resources/shop";
26
+ import { createBillingResource } from "./resources/billing";
27
+ import { createSystemResource } from "./resources/system";
28
+ import { createRoomBotResource } from "./resources/roomBot";
29
+ export function createApiClient(config) {
30
+ const api = createApi(config);
31
+ return {
32
+ api,
33
+ auth: createAuthResource(api),
34
+ settings: createSettingsResource(api),
35
+ user: createUserResource(api),
36
+ room: createRoomResource(api),
37
+ playlist: createPlaylistResource(api),
38
+ source: createSourceResource(api),
39
+ chat: createChatResource(api),
40
+ friend: createFriendResource(api),
41
+ shop: createShopResource(api),
42
+ billing: createBillingResource(api),
43
+ system: createSystemResource(api),
44
+ roomBot: createRoomBotResource(api),
45
+ };
46
+ }
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AA4CjE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,UAAU,eAAe,CAAC,MAAuB;IACnD,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAE9B,OAAO;QACH,GAAG;QACH,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC;QAC7B,QAAQ,EAAE,sBAAsB,CAAC,GAAG,CAAC;QACrC,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC;QAC7B,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC;QAC7B,QAAQ,EAAE,sBAAsB,CAAC,GAAG,CAAC;QACrC,MAAM,EAAE,oBAAoB,CAAC,GAAG,CAAC;QACjC,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC;QAC7B,MAAM,EAAE,oBAAoB,CAAC,GAAG,CAAC;QACjC,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC;QAC7B,OAAO,EAAE,qBAAqB,CAAC,GAAG,CAAC;QACnC,MAAM,EAAE,oBAAoB,CAAC,GAAG,CAAC;QACjC,OAAO,EAAE,qBAAqB,CAAC,GAAG,CAAC;KACtC,CAAC;AACN,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { RoomBotRealtimeClient, RoomBotRealtimeOptions } from "../types";
2
+ export declare function createRoomBotRealtimeClient(options: RoomBotRealtimeOptions): RoomBotRealtimeClient;
@@ -0,0 +1,215 @@
1
+ import { createSdkMessageFormatter } from "../core/i18n";
2
+ function createRequestId() {
3
+ return `req_${Date.now().toString(36)}_${Math.random()
4
+ .toString(36)
5
+ .slice(2, 10)}`;
6
+ }
7
+ function createTimestamp() {
8
+ return new Date().toISOString();
9
+ }
10
+ function normalizeWsBaseURL(baseURL) {
11
+ const url = new URL(baseURL);
12
+ url.protocol = url.protocol === "https:" ? "wss:" : "ws:";
13
+ url.pathname = "/ws";
14
+ url.search = "";
15
+ url.hash = "";
16
+ return url.toString();
17
+ }
18
+ function resolveSocketFactory(factory, formatMessage) {
19
+ if (factory) {
20
+ return factory;
21
+ }
22
+ if (typeof WebSocket !== "undefined") {
23
+ return (url, protocols) => new WebSocket(url, protocols);
24
+ }
25
+ throw new Error(formatMessage?.("roomBotWebsocketFactoryRequired") ??
26
+ "WebSocket is unavailable. Provide `websocketFactory` when creating the realtime client.");
27
+ }
28
+ function addSocketListener(socket, event, handler, formatMessage) {
29
+ if (typeof socket.addEventListener === "function") {
30
+ socket.addEventListener(event, handler);
31
+ return () => {
32
+ socket.removeEventListener?.(event, handler);
33
+ };
34
+ }
35
+ if (typeof socket.on === "function") {
36
+ socket.on(event, handler);
37
+ return () => {
38
+ socket.off?.(event, handler);
39
+ };
40
+ }
41
+ throw new Error(formatMessage?.("roomBotWebsocketListenerUnsupported") ??
42
+ "The provided WebSocket implementation does not support listeners.");
43
+ }
44
+ export function createRoomBotRealtimeClient(options) {
45
+ const listeners = new Map();
46
+ const formatMessage = createSdkMessageFormatter(options.locale, options.messages);
47
+ const socketFactory = resolveSocketFactory(options.websocketFactory, formatMessage);
48
+ const autoJoinRoom = options.autoJoinRoom ?? true;
49
+ const wsUrl = new URL(normalizeWsBaseURL(options.baseURL));
50
+ wsUrl.searchParams.set("botToken", options.botToken);
51
+ let socket = null;
52
+ let detachListeners = [];
53
+ const emit = (event, packet) => {
54
+ const handlers = listeners.get(event);
55
+ if (!handlers || handlers.size === 0) {
56
+ return;
57
+ }
58
+ for (const handler of handlers) {
59
+ handler(packet);
60
+ }
61
+ };
62
+ const sendPacket = (event, payload = {}, requestId = createRequestId()) => {
63
+ if (!socket || socket.readyState !== 1) {
64
+ throw new Error(formatMessage("roomBotWebsocketNotConnected"));
65
+ }
66
+ const packet = {
67
+ type: "command",
68
+ event,
69
+ requestId,
70
+ version: "v1",
71
+ timestamp: createTimestamp(),
72
+ payload,
73
+ };
74
+ if (options.logging) {
75
+ console.info("[Wavez Room Bot WS] ->", packet.event, packet.payload);
76
+ }
77
+ socket.send(JSON.stringify(packet));
78
+ };
79
+ const disconnect = (code, reason) => {
80
+ for (const detach of detachListeners) {
81
+ detach();
82
+ }
83
+ detachListeners = [];
84
+ socket?.close(code, reason);
85
+ socket = null;
86
+ };
87
+ const handleMessage = (event) => {
88
+ const rawData = event &&
89
+ typeof event === "object" &&
90
+ "data" in event
91
+ ? event.data
92
+ : event;
93
+ const payload = typeof rawData === "string"
94
+ ? rawData
95
+ : rawData instanceof ArrayBuffer
96
+ ? new TextDecoder().decode(rawData)
97
+ : null;
98
+ if (!payload) {
99
+ return;
100
+ }
101
+ let packet;
102
+ try {
103
+ packet = JSON.parse(payload);
104
+ }
105
+ catch {
106
+ return;
107
+ }
108
+ if (options.logging) {
109
+ console.info("[Wavez Room Bot WS] <-", packet.event, packet.payload);
110
+ }
111
+ emit("packet", packet);
112
+ emit(packet.event, packet);
113
+ if (packet.type === "ack" && packet.event === "connected" && autoJoinRoom) {
114
+ sendPacket("join_room", { roomId: options.roomId }, "join_room");
115
+ }
116
+ };
117
+ return {
118
+ async connect() {
119
+ if (socket && socket.readyState === 1) {
120
+ return;
121
+ }
122
+ if (socket) {
123
+ disconnect();
124
+ }
125
+ socket = socketFactory(wsUrl.toString(), options.protocols);
126
+ await new Promise((resolve, reject) => {
127
+ if (!socket) {
128
+ reject(new Error(formatMessage("roomBotWebsocketCreateFailed")));
129
+ return;
130
+ }
131
+ const openHandler = (event) => {
132
+ emit("open", {
133
+ type: "ack",
134
+ event: "open",
135
+ version: "v1",
136
+ timestamp: createTimestamp(),
137
+ payload: { event },
138
+ });
139
+ resolve();
140
+ };
141
+ const errorHandler = (event) => {
142
+ emit("socket_error", {
143
+ type: "error",
144
+ event: "socket_error",
145
+ version: "v1",
146
+ timestamp: createTimestamp(),
147
+ payload: { event },
148
+ });
149
+ reject(event instanceof Error
150
+ ? event
151
+ : new Error(formatMessage("roomBotWebsocketConnectFailed")));
152
+ };
153
+ detachListeners = [
154
+ addSocketListener(socket, "open", openHandler, formatMessage),
155
+ addSocketListener(socket, "message", handleMessage, formatMessage),
156
+ addSocketListener(socket, "close", (event) => {
157
+ emit("close", {
158
+ type: "event",
159
+ event: "close",
160
+ version: "v1",
161
+ timestamp: createTimestamp(),
162
+ payload: { event },
163
+ });
164
+ }, formatMessage),
165
+ addSocketListener(socket, "error", errorHandler, formatMessage),
166
+ ];
167
+ });
168
+ },
169
+ disconnect,
170
+ send(event, payload, requestId = createRequestId()) {
171
+ sendPacket(event, (payload ?? {}), requestId);
172
+ },
173
+ joinRoom(roomId = options.roomId) {
174
+ sendPacket("join_room", { roomId });
175
+ },
176
+ leaveRoom(roomId = options.roomId) {
177
+ sendPacket("leave_room", { roomId });
178
+ },
179
+ ping() {
180
+ sendPacket("ping", {});
181
+ },
182
+ on(event, handler) {
183
+ const handlers = listeners.get(event) ?? new Set();
184
+ handlers.add(handler);
185
+ listeners.set(event, handlers);
186
+ return () => {
187
+ handlers.delete(handler);
188
+ if (handlers.size === 0) {
189
+ listeners.delete(event);
190
+ }
191
+ };
192
+ },
193
+ off(event, handler) {
194
+ const handlers = listeners.get(event);
195
+ if (!handlers) {
196
+ return;
197
+ }
198
+ handlers.delete(handler);
199
+ if (handlers.size === 0) {
200
+ listeners.delete(event);
201
+ }
202
+ },
203
+ once(event, handler) {
204
+ const unsubscribe = this.on(event, (packet) => {
205
+ unsubscribe();
206
+ handler(packet);
207
+ });
208
+ return unsubscribe;
209
+ },
210
+ getSocket() {
211
+ return socket;
212
+ },
213
+ };
214
+ }
215
+ //# sourceMappingURL=roomBot.js.map