@wavezfm/api 0.1.9 → 0.3.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 (38) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +34 -431
  3. package/dist/index.d.ts +217 -31
  4. package/dist/index.js.map +1 -1
  5. package/dist/realtime/roomBot.js +50 -0
  6. package/dist/realtime/roomBot.js.map +1 -1
  7. package/dist/resources/billing.d.ts +80 -1
  8. package/dist/resources/billing.js +32 -0
  9. package/dist/resources/billing.js.map +1 -1
  10. package/dist/resources/chat.d.ts +3 -1
  11. package/dist/resources/chat.js +19 -0
  12. package/dist/resources/chat.js.map +1 -1
  13. package/dist/resources/friend.d.ts +1 -12
  14. package/dist/resources/friend.js +3 -18
  15. package/dist/resources/friend.js.map +1 -1
  16. package/dist/resources/playlist.d.ts +33 -8
  17. package/dist/resources/playlist.js +29 -3
  18. package/dist/resources/playlist.js.map +1 -1
  19. package/dist/resources/room.d.ts +32 -3
  20. package/dist/resources/room.js +53 -6
  21. package/dist/resources/room.js.map +1 -1
  22. package/dist/resources/roomBot.d.ts +8 -3
  23. package/dist/resources/roomBot.js +7 -2
  24. package/dist/resources/roomBot.js.map +1 -1
  25. package/dist/resources/settings.d.ts +52 -2
  26. package/dist/resources/settings.js +32 -0
  27. package/dist/resources/settings.js.map +1 -1
  28. package/dist/resources/shop.d.ts +5 -0
  29. package/dist/resources/shop.js +3 -0
  30. package/dist/resources/shop.js.map +1 -1
  31. package/dist/resources/source.d.ts +6 -6
  32. package/dist/resources/source.js +6 -3
  33. package/dist/resources/source.js.map +1 -1
  34. package/dist/resources/system.d.ts +3 -1
  35. package/dist/resources/system.js +6 -0
  36. package/dist/resources/system.js.map +1 -1
  37. package/dist/types.d.ts +210 -3
  38. package/package.json +4 -2
package/dist/index.d.ts CHANGED
@@ -15,7 +15,7 @@ export { createRoomBotResource } from "./resources/roomBot.js";
15
15
  export { parseRoomQueueSnapshot } from "./utils/roomQueue.js";
16
16
  export { formatMentionText } from "./utils/chat.js";
17
17
  export { createRoomBotRealtimeClient } from "./realtime/roomBot.js";
18
- export type { ApiClientConfig, ApiLike, ApiQuery, ApiQueryValue, ApiRequestOptions, ApiSuccessResponse, AuthMode, AuthUser, BadgeAssignment, ChatMessage, CheckoutSessionResponse, InventoryResponse, InventoryCatalogEntry, InventoryCatalogItem, MediaSearchResult, PlaylistSummary, PlaylistTrack, RoomBotPermission, RoomQueueEntry, RoomQueuePlayback, RoomQueueSnapshot, RoomQueueStatusResponse, RoomQueueUser, RoomQueueViewerStatus, RoomBotEditMessageInput, RoomBotMessageReplyInput, RoomBotEventsResponse, RoomPresenceEventFilterType, RoomBotQueueAddResponse, RoomBotRealtimeClient, RoomBotRealtimeOptions, RoomBotSendMessageInput, RoomBotState, RoomBotToken, RoomPresenceEvent, RoomPresenceEventType, RoomSummary, WavezApiLocale, WavezApiMessageKey, WavezApiMessages, WavezApiMessageValues, StoreCatalogResponse, StoreCatalogItem, StoreCatalogSection, SystemDonationGoal, SystemPublicStats, SystemStatus, TwoFactorStatus, UserSettings, UserProfile, WalletBalance, WebSocketLike, WsPacket, } from "./types.js";
18
+ export type { ApiClientConfig, ApiLike, ApiQuery, ApiQueryValue, ApiRequestOptions, ApiSuccessResponse, AuthMode, AuthUser, BadgeAssignment, ChatImageUploadResponse, ChatMediaPreviewResponse, ChatMessage, CheckoutSessionResponse, GifFavorite, InventoryResponse, InventoryCatalogEntry, InventoryCatalogItem, LastFmAccountProfile, LastFmLinkStatus, LastFmWriteResponse, MediaSearchResponse, MediaSearchResult, NotificationCenterClearResponse, NotificationCenterStatus, PlaylistJsonExport, PlaylistJsonImportResult, PlaylistJsonTrack, PlaylistSummary, PlaylistTrack, PlaylistTrackAvailabilityInput, PlaylistTrackAvailabilityResult, PlaylistTrackSearchResult, RoomBotPermission, RoomExternalMediaMetadataResponse, RoomExternalMediaProvider, RoomExternalMediaSubtitleTrack, RoomExternalMediaValidationResponse, RoomPlaybackHistoryEntry, RoomQueueEntry, RoomQueuePlayback, RoomQueueSnapshot, RoomQueueStatusResponse, RoomQueueUser, RoomQueueViewerStatus, RoomBotEditMessageInput, RoomBotMessageReplyInput, RoomBotEventsResponse, RoomPresenceEventFilterType, RoomBotQueueAddResponse, RoomBotRealtimeClient, RoomBotRealtimeOptions, RoomBotSendMessageInput, RoomBotSendMessageResponse, RoomBotState, RoomBotToken, RoomPresenceEvent, RoomPresenceEventType, RoomSummary, WavezApiLocale, WavezApiMessageKey, WavezApiMessages, WavezApiMessageValues, StoreCatalogResponse, StoreCatalogItem, StoreCatalogSection, MiscStoreItem, SystemDonationGoal, SystemPublicStats, SystemStatus, TwoFactorStatus, UserSettings, UserProfile, WalletBalance, WebSocketLike, WsPacket, } from "./types.js";
19
19
  import type { ApiClientConfig } from "./types.js";
20
20
  export declare function createApiClient(config: ApiClientConfig): {
21
21
  api: import("./core/api.js").WavezApi;
@@ -57,14 +57,64 @@ export declare function createApiClient(config: ApiClientConfig): {
57
57
  get(): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").UserSettings>>;
58
58
  update(input: {
59
59
  bio?: string;
60
+ countryCode?: string;
61
+ colorTheme?: "wavezfm" | "wavezfm-black";
60
62
  timeFormat?: "12h" | "24h";
61
63
  notifyChatMentions?: boolean;
64
+ notifyFanToasts?: boolean;
62
65
  playMentionSound?: boolean;
66
+ playWhisperSound?: boolean;
63
67
  lastFmScrobblingEnabled?: boolean;
64
- presenceStatus?: "online" | "busy" | "away";
68
+ presenceStatus?: "online" | "busy" | "away" | "invisible";
65
69
  selectedBadgeIds?: string[];
66
70
  showChatBadge?: boolean;
71
+ showFanRelationsOnProfile?: boolean;
72
+ showSuperfansOnProfile?: boolean;
73
+ showOnlineRoomOnProfile?: boolean;
74
+ showLastSeenOnProfile?: boolean;
75
+ blockUnknownWhispers?: boolean;
76
+ autoOpenIncomingWhispers?: boolean;
77
+ sfwMode?: boolean;
78
+ sfwModeAudioEnabled?: boolean;
67
79
  }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").UserSettings>>;
80
+ getGifFavorites(): Promise<import("./types.js").ApiSuccessResponse<{
81
+ favorites: import("./types.js").GifFavorite[];
82
+ }>>;
83
+ replaceGifFavorites(favorites: import("./types.js").GifFavorite[]): Promise<import("./types.js").ApiSuccessResponse<{
84
+ favorites: import("./types.js").GifFavorite[];
85
+ }>>;
86
+ getLastFmConnectUrl(options?: {
87
+ successCallbackURL?: string;
88
+ errorCallbackURL?: string;
89
+ }): Promise<import("./types.js").ApiSuccessResponse<{
90
+ url: string;
91
+ }>>;
92
+ getLastFmLinkStatus(): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").LastFmLinkStatus>>;
93
+ getLastFmAccount(): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").LastFmAccountProfile>>;
94
+ disconnectLastFm(): Promise<import("./types.js").ApiSuccessResponse<{
95
+ success: true;
96
+ }>>;
97
+ submitLastFmNowPlaying(input: {
98
+ artist: string;
99
+ track: string;
100
+ durationSeconds?: number | null;
101
+ }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").LastFmWriteResponse>>;
102
+ submitLastFmScrobble(input: {
103
+ artist: string;
104
+ track: string;
105
+ durationSeconds?: number | null;
106
+ timestamp?: number | null;
107
+ }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").LastFmWriteResponse>>;
108
+ syncDiscordSubscriptionRole(): Promise<import("./types.js").ApiSuccessResponse<{
109
+ success: true;
110
+ }>>;
111
+ updateSocialImage(input: {
112
+ provider: "discord";
113
+ imageUrl: string;
114
+ }): Promise<import("./types.js").ApiSuccessResponse<{
115
+ updated: boolean;
116
+ applied: boolean;
117
+ }>>;
68
118
  getTwoFactor(): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").TwoFactorStatus>>;
69
119
  sendPhoneVerification(input: {
70
120
  phoneNumber: string;
@@ -109,9 +159,24 @@ export declare function createApiClient(config: ApiClientConfig): {
109
159
  status: number;
110
160
  headers: Headers;
111
161
  }>;
112
- getBySlug(slug: string): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").RoomSummary>>;
162
+ getBySlug(slug: string): Promise<{
163
+ data: import("./types.js").RoomSummary;
164
+ status: number;
165
+ headers: Headers;
166
+ }>;
113
167
  getJoinPreview(slug: string): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
114
168
  getWaitlist(slug: string): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").RoomQueueStatusResponse>>;
169
+ getExternalMediaMetadata(url: string): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").RoomExternalMediaMetadataResponse>>;
170
+ validateExternalMedia(url: string): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").RoomExternalMediaValidationResponse>>;
171
+ getGoogleDriveSubtitle(input: {
172
+ id?: string;
173
+ url?: string;
174
+ format?: "srt" | "vtt";
175
+ }): Promise<import("./types.js").ApiSuccessResponse<string>>;
176
+ getGoogleDriveStreamUrl(input: {
177
+ id?: string;
178
+ url?: string;
179
+ }): string;
115
180
  getQueueStatus(slug: string, options?: {
116
181
  viewerUserId?: string | null;
117
182
  viewerPublicId?: number | null;
@@ -125,9 +190,17 @@ export declare function createApiClient(config: ApiClientConfig): {
125
190
  isPrivate?: boolean;
126
191
  }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").RoomSummary>>;
127
192
  join(roomIdOrSlug: string): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
193
+ leave(roomId: string): Promise<import("./types.js").ApiSuccessResponse<void>>;
128
194
  favorite(roomId: string): Promise<import("./types.js").ApiSuccessResponse<void>>;
129
195
  unfavorite(roomId: string): Promise<import("./types.js").ApiSuccessResponse<void>>;
130
196
  getManagement(roomId: string): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
197
+ getPlaybackHistory(roomId: string, limit?: number): Promise<import("./types.js").ApiSuccessResponse<{
198
+ history: import("./types.js").RoomPlaybackHistoryEntry[];
199
+ }>>;
200
+ delete(roomId: string): Promise<import("./types.js").ApiSuccessResponse<{
201
+ success: true;
202
+ room: Record<string, unknown>;
203
+ }>>;
131
204
  createBotToken(roomId: string, input: {
132
205
  botName: string;
133
206
  botAvatarUrl?: string;
@@ -136,9 +209,10 @@ export declare function createApiClient(config: ApiClientConfig): {
136
209
  expiresInHours?: number;
137
210
  }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").RoomBotToken>>;
138
211
  listEmojis(roomId: string): Promise<import("./types.js").ApiSuccessResponse<unknown[]>>;
139
- listAuditLogs(roomId: string, limit?: number): Promise<import("./types.js").ApiSuccessResponse<{
212
+ listAuditLogs(roomId: string, limit?: number, page?: number): Promise<import("./types.js").ApiSuccessResponse<{
140
213
  logs: unknown[];
141
214
  }>>;
215
+ clearAuditLogs(roomId: string): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
142
216
  updateSettings(roomId: string, input: Record<string, unknown>): Promise<import("./types.js").ApiSuccessResponse<{
143
217
  room: Record<string, unknown>;
144
218
  }>>;
@@ -149,6 +223,11 @@ export declare function createApiClient(config: ApiClientConfig): {
149
223
  }): Promise<import("./types.js").ApiSuccessResponse<{
150
224
  room: Record<string, unknown>;
151
225
  }>>;
226
+ updateWordFilters(roomId: string, input: {
227
+ blockedWordPatterns: string[];
228
+ }): Promise<import("./types.js").ApiSuccessResponse<{
229
+ room: Record<string, unknown>;
230
+ }>>;
152
231
  setRole(roomId: string, userId: string, role: string): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
153
232
  setQueueAccess(roomId: string, userId: string, blocked: boolean): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
154
233
  unban(roomId: string, userId: string): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
@@ -158,19 +237,24 @@ export declare function createApiClient(config: ApiClientConfig): {
158
237
  };
159
238
  playlist: {
160
239
  list(): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").PlaylistSummary[]>>;
240
+ searchTracks(query: string, limit?: number): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").PlaylistTrackSearchResult[]>>;
161
241
  create(input: {
162
242
  name: string;
163
243
  } | string): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").PlaylistSummary>>;
164
244
  update(playlistId: string, input: {
165
245
  name?: string;
166
246
  isActive?: boolean;
167
- }): Promise<import("./types.js").ApiSuccessResponse<{
168
- success: true;
169
- }>>;
247
+ }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").PlaylistSummary>>;
248
+ reorder(playlistIds: string[]): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").PlaylistSummary[]>>;
170
249
  remove(playlistId: string): Promise<import("./types.js").ApiSuccessResponse<{
171
250
  success: true;
172
251
  }>>;
173
- getTracks(playlistId: string): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").PlaylistTrack[]>>;
252
+ getTracks(playlistId: string, options?: {
253
+ roomId?: string | null;
254
+ recentWindowMinutes?: number | null;
255
+ }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").PlaylistTrack[]>>;
256
+ exportJson(playlistId: string): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").PlaylistJsonExport>>;
257
+ checkTrackAvailability(items: import("./types.js").PlaylistTrackAvailabilityInput[]): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").PlaylistTrackAvailabilityResult[]>>;
174
258
  previewUrl(url: string): Promise<import("./types.js").ApiSuccessResponse<{
175
259
  kind: "track";
176
260
  sourceId: string;
@@ -178,6 +262,7 @@ export declare function createApiClient(config: ApiClientConfig): {
178
262
  title: string;
179
263
  artist?: string;
180
264
  thumbnailUrl?: string | null;
265
+ isLive?: boolean;
181
266
  } | {
182
267
  kind: "playlist";
183
268
  importSource: string;
@@ -185,6 +270,8 @@ export declare function createApiClient(config: ApiClientConfig): {
185
270
  title: string;
186
271
  totalTracks: number;
187
272
  thumbnailUrl?: string | null;
273
+ totalDurationMs?: number | null;
274
+ tracks?: import("./types.js").PlaylistTrack[];
188
275
  truncated?: boolean;
189
276
  }>>;
190
277
  addTrack(playlistId: string, input: {
@@ -193,12 +280,25 @@ export declare function createApiClient(config: ApiClientConfig): {
193
280
  source?: string;
194
281
  title?: string;
195
282
  artist?: string;
196
- durationMs?: number;
283
+ durationMs?: number | null;
197
284
  thumbnailUrl?: string | null;
198
- }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").PlaylistTrack>>;
285
+ isLive?: boolean | null;
286
+ clipStartMs?: number | null;
287
+ clipEndMs?: number | null;
288
+ insertAtTop?: boolean;
289
+ }): Promise<import("./types.js").ApiSuccessResponse<{
290
+ track: import("./types.js").PlaylistTrack;
291
+ progression: Record<string, unknown> | null;
292
+ }>>;
199
293
  reorderTracks(playlistId: string, trackIds: string[]): Promise<import("./types.js").ApiSuccessResponse<{
200
294
  success: true;
201
295
  }>>;
296
+ updateTrackClip(playlistId: string, trackId: string, input: {
297
+ clipStartMs?: number | null;
298
+ clipEndMs?: number | null;
299
+ }): Promise<import("./types.js").ApiSuccessResponse<{
300
+ track: import("./types.js").PlaylistTrack;
301
+ }>>;
202
302
  removeTrack(playlistId: string, trackId: string): Promise<import("./types.js").ApiSuccessResponse<{
203
303
  success: true;
204
304
  }>>;
@@ -216,23 +316,29 @@ export declare function createApiClient(config: ApiClientConfig): {
216
316
  playlistId: string;
217
317
  url: string;
218
318
  }): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
319
+ importJson(input: {
320
+ playlistId?: string | null;
321
+ data: unknown;
322
+ }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").PlaylistJsonImportResult>>;
219
323
  cancelImport(jobId: string): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
220
- searchPreview(query: string, source?: string, limit?: number): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").MediaSearchResult[]>>;
324
+ searchPreview(query: string, source?: string, limit?: number, pageToken?: string | null): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").MediaSearchResponse>>;
221
325
  };
222
326
  source: {
223
- search(source: string, query: string, limit?: number): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").MediaSearchResult[]>>;
224
- searchYouTube(query: string, limit?: number): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").MediaSearchResult[]>>;
225
- searchSoundCloud(query: string, limit?: number): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").MediaSearchResult[]>>;
327
+ search(source: string, query: string, limit?: number, pageToken?: string | null): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").MediaSearchResponse>>;
328
+ searchYouTube(query: string, limit?: number, pageToken?: string | null): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").MediaSearchResponse>>;
329
+ searchSoundCloud(query: string, limit?: number, pageToken?: string | null): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").MediaSearchResponse>>;
226
330
  searchAll(query: string, limit?: number): Promise<{
227
331
  data: {
228
- youtube: import("./types.js").MediaSearchResult[];
229
- soundcloud: import("./types.js").MediaSearchResult[];
332
+ youtube: import("./types.js").MediaSearchResponse;
333
+ soundcloud: import("./types.js").MediaSearchResponse;
230
334
  };
231
335
  status: number;
232
336
  headers: Headers;
233
337
  }>;
234
338
  };
235
339
  chat: {
340
+ previewMedia(url: string): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").ChatMediaPreviewResponse>>;
341
+ uploadImage(image: Blob | FormData, fileName?: string): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").ChatImageUploadResponse>>;
236
342
  getMessages(roomId: string, offset?: number, limit?: number): Promise<import("./types.js").ApiSuccessResponse<{
237
343
  history: boolean;
238
344
  pinnedMessage?: Record<string, unknown> | null;
@@ -259,18 +365,6 @@ export declare function createApiClient(config: ApiClientConfig): {
259
365
  }>>;
260
366
  };
261
367
  friend: {
262
- list(): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").UserProfile[]>>;
263
- pending(): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").UserProfile[]>>;
264
- sendRequest(userId: string): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
265
- acceptRequest(requestId: string): Promise<import("./types.js").ApiSuccessResponse<{
266
- success: true;
267
- }>>;
268
- rejectRequest(requestId: string): Promise<import("./types.js").ApiSuccessResponse<{
269
- success: true;
270
- }>>;
271
- remove(friendshipId: string): Promise<import("./types.js").ApiSuccessResponse<{
272
- success: true;
273
- }>>;
274
368
  follow(userId: string): Promise<import("./types.js").ApiSuccessResponse<{
275
369
  success: true;
276
370
  }>>;
@@ -279,6 +373,7 @@ export declare function createApiClient(config: ApiClientConfig): {
279
373
  }>>;
280
374
  followers(): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").UserProfile[]>>;
281
375
  following(): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").UserProfile[]>>;
376
+ superfans(): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").UserProfile[]>>;
282
377
  };
283
378
  shop: {
284
379
  getCatalog(): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").StoreCatalogResponse>>;
@@ -287,56 +382,142 @@ export declare function createApiClient(config: ApiClientConfig): {
287
382
  itemId: string;
288
383
  idempotencyKey?: string;
289
384
  }): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
385
+ purchaseMisc(input: {
386
+ itemId: string;
387
+ idempotencyKey?: string;
388
+ displayUsername?: string | null;
389
+ }): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
290
390
  equip(itemId: string): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
291
391
  getInventory(): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").InventoryResponse>>;
292
392
  };
293
393
  billing: {
394
+ getCheckoutSessionStatus(sessionId: string): Promise<import("./types.js").ApiSuccessResponse<{
395
+ sessionId: string;
396
+ status: string | null;
397
+ paymentStatus: string | null;
398
+ kind: string | null;
399
+ cycle: "monthly" | "annual" | null;
400
+ }>>;
401
+ cancelSubscription(): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
402
+ resumeSubscription(): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
403
+ upgradeSubscription(input?: {
404
+ locale?: string | null;
405
+ }): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
406
+ listSubscriptionPaymentHistory(): Promise<import("./types.js").ApiSuccessResponse<unknown[]>>;
294
407
  createSubscriptionCheckout(input?: {
295
408
  cycle?: string | null;
296
409
  currency?: string | null;
410
+ locale?: string | null;
297
411
  returnPath?: string | null;
412
+ uiMode?: string | null;
413
+ provider?: string | null;
298
414
  }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").CheckoutSessionResponse>>;
299
415
  createDiamondCheckout(input?: {
300
416
  quantity?: number;
301
417
  currency?: string | null;
418
+ locale?: string | null;
302
419
  returnPath?: string | null;
420
+ uiMode?: string | null;
421
+ provider?: string | null;
422
+ }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").CheckoutSessionResponse>>;
423
+ createMiscShopCheckout(input: {
424
+ itemId: string;
425
+ roomSlug?: string | null;
426
+ username?: string | null;
427
+ displayUsername?: string | null;
428
+ locale?: string | null;
429
+ returnPath?: string | null;
430
+ uiMode?: string | null;
431
+ provider?: string | null;
303
432
  }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").CheckoutSessionResponse>>;
304
433
  createRoomDonationCheckout(roomId: string, input?: {
305
434
  amountCents?: number;
435
+ currency?: string | null;
306
436
  locale?: string | null;
307
437
  returnPath?: string | null;
438
+ uiMode?: string | null;
439
+ provider?: string | null;
308
440
  }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").CheckoutSessionResponse>>;
309
441
  createGlobalDonationCheckout(input?: {
310
442
  amountCents?: number;
443
+ currency?: string | null;
311
444
  locale?: string | null;
312
445
  returnPath?: string | null;
446
+ uiMode?: string | null;
447
+ provider?: string | null;
313
448
  }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").CheckoutSessionResponse>>;
314
449
  createDiamondGiftCheckout(input: {
315
450
  recipientUsername: string;
316
451
  quantity?: number;
317
452
  currency?: string | null;
453
+ locale?: string | null;
318
454
  returnPath?: string | null;
319
455
  message?: string | null;
320
456
  anonymous?: boolean;
321
457
  announceInRoom?: boolean;
322
458
  announceRoomSlug?: string | null;
459
+ uiMode?: string | null;
323
460
  }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").CheckoutSessionResponse>>;
324
461
  createSubscriptionGiftCheckout(input: {
325
- recipientUsername: string;
462
+ recipientUsername?: string | null;
463
+ recipientUserId?: string | null;
326
464
  cycle?: string | null;
327
465
  currency?: string | null;
466
+ locale?: string | null;
328
467
  returnPath?: string | null;
329
468
  message?: string | null;
330
469
  anonymous?: boolean;
331
470
  announceInRoom?: boolean;
332
471
  announceRoomSlug?: string | null;
472
+ uiMode?: string | null;
473
+ provider?: string | null;
333
474
  }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").CheckoutSessionResponse>>;
475
+ createSubscriptionRoomGiftCheckout(input: {
476
+ roomSlug: string;
477
+ count?: number;
478
+ currency?: string | null;
479
+ locale?: string | null;
480
+ returnPath?: string | null;
481
+ message?: string | null;
482
+ anonymous?: boolean;
483
+ announceInRoom?: boolean;
484
+ uiMode?: string | null;
485
+ }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").CheckoutSessionResponse>>;
486
+ createMercadoPagoPayment(input: {
487
+ kind: string;
488
+ cycle?: string | null;
489
+ quantity?: number;
490
+ amountCents?: number;
491
+ itemId?: string | null;
492
+ roomSlug?: string | null;
493
+ username?: string | null;
494
+ displayUsername?: string | null;
495
+ roomId?: string | null;
496
+ recipientUserId?: string | null;
497
+ currency?: string | null;
498
+ locale?: string | null;
499
+ returnPath?: string | null;
500
+ message?: string | null;
501
+ anonymous?: boolean;
502
+ announceInRoom?: boolean;
503
+ announceRoomSlug?: string | null;
504
+ formData?: Record<string, unknown> | null;
505
+ }): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
506
+ getMercadoPagoPaymentStatus(paymentId: string): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
507
+ createMercadoPagoSubscription(input?: {
508
+ cycle?: string | null;
509
+ locale?: string | null;
510
+ returnPath?: string | null;
511
+ formData?: Record<string, unknown> | null;
512
+ }): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
334
513
  listPendingGifts(): Promise<import("./types.js").ApiSuccessResponse<unknown[]>>;
335
514
  markGiftSeen(giftId: string): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
336
515
  };
337
516
  system: {
338
517
  status(): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").SystemStatus>>;
339
518
  publicStats(): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").SystemPublicStats>>;
519
+ getNotificationCenterStatus(): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").NotificationCenterStatus>>;
520
+ clearNotificationCenter(): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").NotificationCenterClearResponse>>;
340
521
  health(): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
341
522
  };
342
523
  roomBot: {
@@ -355,7 +536,7 @@ export declare function createApiClient(config: ApiClientConfig): {
355
536
  since?: string | null;
356
537
  types?: import("./types.js").RoomPresenceEventFilterType[];
357
538
  }): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").RoomBotEventsResponse>>;
358
- sendMessage(roomId: string, input: import("./types.js").RoomBotSendMessageInput): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
539
+ sendMessage(roomId: string, input: import("./types.js").RoomBotSendMessageInput): Promise<import("./types.js").ApiSuccessResponse<import("./types.js").RoomBotSendMessageResponse>>;
359
540
  editMessage(roomId: string, messageId: string, input: import("./types.js").RoomBotEditMessageInput): Promise<import("./types.js").ApiSuccessResponse<{
360
541
  message: import("./types.js").ChatMessage | null;
361
542
  }>>;
@@ -374,7 +555,7 @@ export declare function createApiClient(config: ApiClientConfig): {
374
555
  }>>;
375
556
  getManagement(roomId: string): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
376
557
  listEmojis(roomId: string): Promise<import("./types.js").ApiSuccessResponse<unknown[]>>;
377
- listAuditLogs(roomId: string, limit?: number): Promise<import("./types.js").ApiSuccessResponse<{
558
+ listAuditLogs(roomId: string, limit?: number, page?: number): Promise<import("./types.js").ApiSuccessResponse<{
378
559
  logs: unknown[];
379
560
  }>>;
380
561
  updateSettings(roomId: string, input: Record<string, unknown>): Promise<import("./types.js").ApiSuccessResponse<{
@@ -387,6 +568,11 @@ export declare function createApiClient(config: ApiClientConfig): {
387
568
  }): Promise<import("./types.js").ApiSuccessResponse<{
388
569
  room: Record<string, unknown>;
389
570
  }>>;
571
+ updateWordFilters(roomId: string, input: {
572
+ blockedWordPatterns: string[];
573
+ }): Promise<import("./types.js").ApiSuccessResponse<{
574
+ room: Record<string, unknown>;
575
+ }>>;
390
576
  setRole(roomId: string, userId: string, role: string): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
391
577
  setQueueAccess(roomId: string, userId: string, blocked: boolean): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
392
578
  unban(roomId: string, userId: string): Promise<import("./types.js").ApiSuccessResponse<Record<string, unknown>>>;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AA0DpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAgFpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,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"}
@@ -13,6 +13,8 @@ const ROOM_BOT_NON_RECONNECTABLE_CLOSE_CODES = new Set([
13
13
  ]);
14
14
  const DEFAULT_RECONNECT_DELAY_MS = 1_500;
15
15
  const DEFAULT_RECONNECT_MAX_DELAY_MS = 12_000;
16
+ const DEFAULT_HEARTBEAT_INTERVAL_MS = 15_000;
17
+ const DEFAULT_HEARTBEAT_TIMEOUT_MS = 45_000;
16
18
  const RECONNECT_BACKOFF_FACTOR = 1.8;
17
19
  function createRequestId() {
18
20
  return `req_${Date.now().toString(36)}_${Math.random()
@@ -84,6 +86,8 @@ export function createRoomBotRealtimeClient(options) {
84
86
  let socket = null;
85
87
  let detachListeners = [];
86
88
  let reconnectTimeout = null;
89
+ let heartbeatInterval = null;
90
+ let lastPacketAt = 0;
87
91
  let reconnectAttempt = 0;
88
92
  let manualDisconnect = false;
89
93
  let connectPromise = null;
@@ -124,12 +128,45 @@ export function createRoomBotRealtimeClient(options) {
124
128
  if (targetSocket && socket && targetSocket !== socket) {
125
129
  return;
126
130
  }
131
+ if (heartbeatInterval !== null) {
132
+ clearInterval(heartbeatInterval);
133
+ heartbeatInterval = null;
134
+ }
127
135
  for (const detach of detachListeners) {
128
136
  detach();
129
137
  }
130
138
  detachListeners = [];
131
139
  socket = null;
132
140
  };
141
+ const startHeartbeatWatchdog = () => {
142
+ if (heartbeatInterval !== null) {
143
+ clearInterval(heartbeatInterval);
144
+ }
145
+ lastPacketAt = Date.now();
146
+ const intervalMs = Math.max(5_000, options.heartbeatIntervalMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS);
147
+ const timeoutMs = Math.max(intervalMs * 2, options.heartbeatTimeoutMs ?? DEFAULT_HEARTBEAT_TIMEOUT_MS);
148
+ heartbeatInterval = setInterval(() => {
149
+ const activeSocket = socket;
150
+ if (!activeSocket || activeSocket.readyState !== 1) {
151
+ return;
152
+ }
153
+ if (Date.now() - lastPacketAt > timeoutMs) {
154
+ if (options.logging) {
155
+ console.warn("[WavezFM Room Bot WS] heartbeat timeout", {
156
+ timeoutMs,
157
+ });
158
+ }
159
+ activeSocket.close(4000, "Heartbeat timeout.");
160
+ return;
161
+ }
162
+ try {
163
+ sendPacket("ping", {}, "heartbeat");
164
+ }
165
+ catch {
166
+ activeSocket.close(4000, "Heartbeat send failed.");
167
+ }
168
+ }, intervalMs);
169
+ };
133
170
  const shouldReconnect = (closeCode) => (options.autoReconnect ?? true) &&
134
171
  !manualDisconnect &&
135
172
  !ROOM_BOT_NON_RECONNECTABLE_CLOSE_CODES.has(closeCode ?? -1);
@@ -165,6 +202,7 @@ export function createRoomBotRealtimeClient(options) {
165
202
  activeSocket?.close(code, reason);
166
203
  };
167
204
  const handleMessage = (event) => {
205
+ lastPacketAt = Date.now();
168
206
  const rawData = event &&
169
207
  typeof event === "object" &&
170
208
  "data" in event
@@ -232,6 +270,7 @@ export function createRoomBotRealtimeClient(options) {
232
270
  reject(error);
233
271
  };
234
272
  const openHandler = (event) => {
273
+ startHeartbeatWatchdog();
235
274
  emit("open", {
236
275
  type: "ack",
237
276
  event: "open",
@@ -307,6 +346,17 @@ export function createRoomBotRealtimeClient(options) {
307
346
  },
308
347
  }
309
348
  : {}),
349
+ ...(input.ephemeral === true
350
+ ? {
351
+ ephemeral: true,
352
+ ...(input.targetUserId
353
+ ? { targetUserId: input.targetUserId }
354
+ : {}),
355
+ ...(input.targetUserIds
356
+ ? { targetUserIds: input.targetUserIds }
357
+ : {}),
358
+ }
359
+ : {}),
310
360
  }, requestId);
311
361
  },
312
362
  on(event, handler) {
@@ -1 +1 @@
1
- {"version":3,"file":"roomBot.js","sourceRoot":"","sources":["../../src/realtime/roomBot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"roomBot.js","sourceRoot":"","sources":["../../src/realtime/roomBot.ts"],"names":[],"mappings":"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"}