rozod 6.4.2 → 6.5.1

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 (41) hide show
  1. package/README.md +35 -57
  2. package/lib/endpoints/authv1.d.ts +4 -1
  3. package/lib/endpoints/authv1.js +4 -1
  4. package/lib/endpoints/authv2.d.ts +3 -1
  5. package/lib/endpoints/authv2.js +3 -1
  6. package/lib/endpoints/catalogv1.d.ts +1 -0
  7. package/lib/endpoints/catalogv1.js +1 -0
  8. package/lib/endpoints/catalogv2.d.ts +1 -0
  9. package/lib/endpoints/catalogv2.js +1 -0
  10. package/lib/endpoints/friendsv1.d.ts +6 -1
  11. package/lib/endpoints/friendsv1.js +6 -1
  12. package/lib/endpoints/gameinternationalizationv1.d.ts +40 -0
  13. package/lib/endpoints/gameinternationalizationv1.js +42 -1
  14. package/lib/endpoints/gamesv1.d.ts +12 -0
  15. package/lib/endpoints/gamesv1.js +12 -0
  16. package/lib/endpoints/groupsv1.d.ts +8 -1
  17. package/lib/endpoints/groupsv1.js +8 -1
  18. package/lib/endpoints/groupsv2.d.ts +151 -0
  19. package/lib/endpoints/groupsv2.js +147 -1
  20. package/lib/endpoints/itemconfigurationv1.d.ts +6 -164
  21. package/lib/endpoints/itemconfigurationv1.js +7 -165
  22. package/lib/endpoints/twostepverificationv1.d.ts +2 -0
  23. package/lib/endpoints/twostepverificationv1.js +2 -0
  24. package/lib/index.js +1 -1
  25. package/lib/opencloud/v1/asset-permissions.d.ts +7 -7
  26. package/lib/opencloud/v1/asset-permissions.js +1 -1
  27. package/lib/opencloud/v1/assets.d.ts +3 -3
  28. package/lib/opencloud/v1/assets.js +1 -1
  29. package/lib/opencloud/v1/datastores-ordered.d.ts +1 -1
  30. package/lib/opencloud/v1/datastores-ordered.js +1 -1
  31. package/lib/opencloud/v1/developer-products.d.ts +7 -7
  32. package/lib/opencloud/v1/developer-products.js +1 -1
  33. package/lib/opencloud/v1/game-passes.d.ts +6 -6
  34. package/lib/opencloud/v1/game-passes.js +1 -1
  35. package/lib/opencloud/v1/messaging.d.ts +2 -0
  36. package/lib/opencloud/v1/messaging.js +2 -0
  37. package/lib/opencloud/v1/secrets-store.d.ts +6 -6
  38. package/lib/opencloud/v1/secrets-store.js +1 -1
  39. package/lib/opencloud/v2/cloud.d.ts +69 -74
  40. package/lib/opencloud/v2/cloud.js +11 -16
  41. package/package.json +4 -3
package/README.md CHANGED
@@ -25,7 +25,7 @@
25
25
 
26
26
  ## About
27
27
 
28
- `RoZod` makes working with Roblox APIs simple and type-safe in TypeScript. With **650+ classic Roblox web API endpoints** and **95+ OpenCloud endpoints** (all code-generated from official Roblox documentation), you get comprehensive coverage of virtually every available Roblox API with full type safety.
28
+ `RoZod` makes working with Roblox APIs simple and type-safe in TypeScript. With **695+ classic Roblox web API endpoints** and **115+ OpenCloud endpoints** (all code-generated from official Roblox documentation), you get comprehensive coverage of virtually every available Roblox API with full type safety.
29
29
 
30
30
  Perfect for everything from small one-time NodeJS/Bun/Deno scripts to large-scale production applications. RoZod powers [RoGold](https://rogold.live), a browser extension with **800,000+ active users**, handling millions of API requests daily across both frontend extensions and backend workflows.
31
31
 
@@ -33,7 +33,7 @@ Perfect for everything from small one-time NodeJS/Bun/Deno scripts to large-scal
33
33
 
34
34
  - ✨ **Simple Interface** - Easy to understand API with minimal boilerplate
35
35
  - 🔒 **Type Safety** - Complete TypeScript type safety for requests and responses
36
- - 📚 **750+ Total Endpoints** - 650+ classic web APIs + 95+ OpenCloud APIs, all code-generated from official docs
36
+ - 📚 **810+ Total Endpoints** - 695+ classic web APIs + 115+ OpenCloud APIs, all code-generated from official docs
37
37
  - 🚀 **Production Ready** - Battle-tested in applications serving 800,000+ users
38
38
  - 🔄 **Pagination Helpers** - Easy tools for handling paginated responses
39
39
  - 🔁 **Batch Processing** - Split large requests automatically to avoid API limits
@@ -46,6 +46,8 @@ Perfect for everything from small one-time NodeJS/Bun/Deno scripts to large-scal
46
46
  ```bash
47
47
  npm install rozod
48
48
  # or
49
+ bun add rozod
50
+ # or
49
51
  yarn add rozod
50
52
  # or
51
53
  pnpm add rozod
@@ -54,15 +56,15 @@ pnpm add rozod
54
56
  ## Quick Start
55
57
 
56
58
  ```ts
57
- import { fetchApi } from 'rozod';
58
- import { getUsersUserdetails } from 'rozod/lib/endpoints/usersv1';
59
+ import { fetchApi, isAnyErrorResponse } from 'rozod';
60
+ import { getUsersUserid } from 'rozod/lib/endpoints/usersv1';
59
61
 
60
62
  // Fetch user details with full type safety
61
- const userInfo = await fetchApi(getUsersUserdetails, { userIds: [1, 123456] });
63
+ const userInfo = await fetchApi(getUsersUserid, { userId: 1 });
62
64
  if (isAnyErrorResponse(userInfo)) {
63
65
  return;
64
66
  }
65
- console.log(userInfo.data[0].displayName); // Properly typed!
67
+ console.log(userInfo.displayName); // Properly typed!
66
68
  ```
67
69
 
68
70
  ## Usage
@@ -70,33 +72,38 @@ console.log(userInfo.data[0].displayName); // Properly typed!
70
72
  ### Fetch a Single Request
71
73
 
72
74
  ```ts
73
- import { fetchApi } from 'rozod';
74
- import { getGamesIcons } from 'rozod/lib/endpoints/gamesv1';
75
+ import { fetchApi, isAnyErrorResponse } from 'rozod';
76
+ import { getGamesIcons } from 'rozod/lib/endpoints/thumbnailsv1';
75
77
 
76
78
  const response = await fetchApi(getGamesIcons, { universeIds: [1534453623, 65241] });
77
- console.log(response.data);
79
+ if (!isAnyErrorResponse(response)) {
80
+ console.log(response.data);
81
+ }
78
82
  ```
79
83
 
80
84
  ### Handle Paginated Responses
81
85
 
82
86
  ```ts
83
- import { fetchApiPages } from 'rozod';
87
+ import { fetchApiPages, isAnyErrorResponse } from 'rozod';
84
88
  import { getGroupsGroupidWallPosts } from 'rozod/lib/endpoints/groupsv2';
85
89
 
86
90
  // Automatically fetches all pages
87
- const allPosts = await fetchApiPages(getGroupsGroupidWallPosts, { groupId: 11479637 });
88
- console.log(`Found ${allPosts.length} wall posts`);
91
+ const pages = await fetchApiPages(getGroupsGroupidWallPosts, { groupId: 11479637 });
92
+ if (!isAnyErrorResponse(pages)) {
93
+ console.log(`Fetched ${pages.length} pages of wall posts`);
94
+ }
89
95
  ```
90
96
 
91
97
  ### Process Pages One at a Time
92
98
 
93
99
  ```ts
94
- import { fetchApiPagesGenerator } from 'rozod';
100
+ import { fetchApiPagesGenerator, isAnyErrorResponse } from 'rozod';
95
101
  import { getGroupsGroupidWallPosts } from 'rozod/lib/endpoints/groupsv2';
96
102
 
97
103
  // Process pages as they arrive
98
104
  const pages = fetchApiPagesGenerator(getGroupsGroupidWallPosts, { groupId: 11479637 });
99
105
  for await (const page of pages) {
106
+ if (isAnyErrorResponse(page)) break;
100
107
  console.log(`Processing page with ${page.data.length} posts`);
101
108
  // Do something with this page
102
109
  }
@@ -106,7 +113,7 @@ for await (const page of pages) {
106
113
 
107
114
  ```ts
108
115
  import { fetchApiSplit } from 'rozod';
109
- import { getGamesIcons } from 'rozod/lib/endpoints/gamesv1';
116
+ import { getGamesIcons } from 'rozod/lib/endpoints/thumbnailsv1';
110
117
 
111
118
  // Will automatically split into smaller batches of 100 universeIds per request
112
119
  const data = await fetchApiSplit(
@@ -123,7 +130,7 @@ By default, requests return either the success type or a simple `AnyError`. Use
123
130
 
124
131
  ```ts
125
132
  import { fetchApi, isAnyErrorResponse } from 'rozod';
126
- import { getGamesIcons } from 'rozod/lib/endpoints/gamesv1';
133
+ import { getGamesIcons } from 'rozod/lib/endpoints/thumbnailsv1';
127
134
 
128
135
  const res = await fetchApi(getGamesIcons, { universeIds: [1534453623] });
129
136
  if (isAnyErrorResponse(res)) {
@@ -156,7 +163,7 @@ const json = await resp.json();
156
163
  RoZod supports Roblox's newer OpenCloud APIs with the same easy interface:
157
164
 
158
165
  ```ts
159
- import { fetchApi } from 'rozod';
166
+ import { fetchApi, isAnyErrorResponse } from 'rozod';
160
167
  import { v2 } from 'rozod/lib/opencloud';
161
168
 
162
169
  // Get universe details through OpenCloud
@@ -164,9 +171,11 @@ const universeInfo = await fetchApi(v2.getCloudV2UniversesUniverseId, {
164
171
  universe_id: '123456789',
165
172
  });
166
173
 
167
- // Access typed properties
168
- console.log(universeInfo.displayName);
169
- console.log(universeInfo.description);
174
+ if (!isAnyErrorResponse(universeInfo)) {
175
+ // Access typed properties
176
+ console.log(universeInfo.displayName);
177
+ console.log(universeInfo.description);
178
+ }
170
179
  ```
171
180
 
172
181
  ### Access DataStores via OpenCloud
@@ -192,10 +201,10 @@ In browsers, authentication works automatically when users are logged into Roblo
192
201
 
193
202
  ```ts
194
203
  import { fetchApi } from 'rozod';
195
- import { getUsersUserdetails } from 'rozod/lib/endpoints/usersv1';
204
+ import { getUsersUserid } from 'rozod/lib/endpoints/usersv1';
196
205
 
197
206
  // Cookies are sent automatically - no setup required!
198
- const userInfo = await fetchApi(getUsersUserdetails, { userIds: [123456] });
207
+ const userInfo = await fetchApi(getUsersUserid, { userId: 123456 });
199
208
  ```
200
209
 
201
210
  ### Server Environments (Node.js/Bun/Deno)
@@ -204,13 +213,13 @@ For server environments, use `configureServer()` to set up authentication once:
204
213
 
205
214
  ```ts
206
215
  import { configureServer, fetchApi } from 'rozod';
207
- import { getUsersUserdetails } from 'rozod/lib/endpoints/usersv1';
216
+ import { getUsersUserid } from 'rozod/lib/endpoints/usersv1';
208
217
 
209
218
  // Configure once at startup
210
219
  configureServer({ cookies: 'your_roblosecurity_cookie_here' });
211
220
 
212
221
  // All subsequent requests automatically include the cookie
213
- const userInfo = await fetchApi(getUsersUserdetails, { userIds: [123456] });
222
+ const userInfo = await fetchApi(getUsersUserid, { userId: 123456 });
214
223
  ```
215
224
 
216
225
  #### Multiple Accounts (Cookie Pool)
@@ -273,7 +282,7 @@ configureServer({ cookies: '...', userAgents: [] });
273
282
  For OpenCloud endpoints (`apis.roblox.com`), set your API key once:
274
283
 
275
284
  ```ts
276
- import { configureServer } from 'rozod';
285
+ import { configureServer, fetchApi } from 'rozod';
277
286
  import { v2 } from 'rozod/lib/opencloud';
278
287
 
279
288
  // Configure OpenCloud API key
@@ -315,8 +324,8 @@ You can still pass headers manually per-request if needed:
315
324
 
316
325
  ```ts
317
326
  const userInfo = await fetchApi(
318
- getUsersUserdetails,
319
- { userIds: [123456] },
327
+ getUsersUserid,
328
+ { userId: 123456 },
320
329
  {
321
330
  headers: {
322
331
  'Cookie': '.ROBLOSECURITY=your_cookie_here'
@@ -408,37 +417,6 @@ const keyPair = await crypto.subtle.generateKey(
408
417
  changeHBAKeys(keyPair);
409
418
  ```
410
419
 
411
- ### OpenCloud Authentication
412
-
413
- OpenCloud APIs require API keys. Use `configureServer()` for automatic injection:
414
-
415
- ```ts
416
- import { configureServer, fetchApi } from 'rozod';
417
- import { v2 } from 'rozod/lib/opencloud';
418
-
419
- // Configure once at startup
420
- configureServer({ cloudKey: 'your_opencloud_api_key_here' });
421
-
422
- // All OpenCloud requests automatically include x-api-key
423
- const universeInfo = await fetchApi(v2.getCloudV2UniversesUniverseId, {
424
- universe_id: '123456789',
425
- });
426
- ```
427
-
428
- Or pass headers manually per-request:
429
-
430
- ```ts
431
- const universeInfo = await fetchApi(
432
- v2.getCloudV2UniversesUniverseId,
433
- { universe_id: '123456789' },
434
- {
435
- headers: {
436
- 'x-api-key': 'your_opencloud_api_key_here'
437
- }
438
- }
439
- );
440
- ```
441
-
442
420
  ## Custom Endpoints
443
421
 
444
422
  You can define custom endpoints for your specific needs:
@@ -100,6 +100,8 @@ const Roblox_Authentication_Api_Models_LoginResponse = z.object({
100
100
  recoveryEmail: z.string(),
101
101
  passkeyRegistrationSucceeded: z.boolean(),
102
102
  shouldAutoLoginFromRecovery: z.boolean(),
103
+ shouldPrompt2svRemoval: z.boolean(),
104
+ shouldPromptPasskeyAddition: z.boolean(),
103
105
  });
104
106
  const Roblox_Authentication_Api_Models_ProviderInfoModel = z.object({
105
107
  provider: z.string(),
@@ -337,6 +339,7 @@ const Roblox_Authentication_Api_Models_Request_FinishARPreAuthPasskeyRegistratio
337
339
  passkeySessionId: z.string(),
338
340
  passkeyRegistrationResponse: z.string(),
339
341
  userId: z.number().int(),
342
+ isPostRecovery: z.boolean(),
340
343
  });
341
344
  const Roblox_Authentication_Api_Models_Request_FinishPasskeyPreauthRegistrationRequest =
342
345
  z.object({ sessionId: z.string(), registrationResponse: z.string() });
@@ -401,7 +404,7 @@ const Roblox_Authentication_Api_Models_ReferralDataModel = z.object({
401
404
  });
402
405
  const Roblox_Authentication_Api_Models_Request_OtpSessionModel = z.object({
403
406
  otpSessionToken: z.string(),
404
- otpContactType: z.enum(["Unset", "Email"]),
407
+ otpContactType: z.enum(["Unset", "Email", "Phone"]),
405
408
  });
406
409
  const Roblox_Authentication_Api_Models_Request_AuditContentValue = z.object({
407
410
  translationKey: z.string(),
@@ -100,6 +100,8 @@ const Roblox_Authentication_Api_Models_LoginResponse = zod_1.z.object({
100
100
  recoveryEmail: zod_1.z.string(),
101
101
  passkeyRegistrationSucceeded: zod_1.z.boolean(),
102
102
  shouldAutoLoginFromRecovery: zod_1.z.boolean(),
103
+ shouldPrompt2svRemoval: zod_1.z.boolean(),
104
+ shouldPromptPasskeyAddition: zod_1.z.boolean(),
103
105
  });
104
106
  const Roblox_Authentication_Api_Models_ProviderInfoModel = zod_1.z.object({
105
107
  provider: zod_1.z.string(),
@@ -303,6 +305,7 @@ const Roblox_Authentication_Api_Models_Request_FinishARPreAuthPasskeyRegistratio
303
305
  passkeySessionId: zod_1.z.string(),
304
306
  passkeyRegistrationResponse: zod_1.z.string(),
305
307
  userId: zod_1.z.number().int(),
308
+ isPostRecovery: zod_1.z.boolean(),
306
309
  });
307
310
  const Roblox_Authentication_Api_Models_Request_FinishPasskeyPreauthRegistrationRequest = zod_1.z.object({
308
311
  sessionId: zod_1.z.string(),
@@ -374,7 +377,7 @@ const Roblox_Authentication_Api_Models_ReferralDataModel = zod_1.z.object({
374
377
  });
375
378
  const Roblox_Authentication_Api_Models_Request_OtpSessionModel = zod_1.z.object({
376
379
  otpSessionToken: zod_1.z.string(),
377
- otpContactType: zod_1.z.enum(['Unset', 'Email']),
380
+ otpContactType: zod_1.z.enum(['Unset', 'Email', 'Phone']),
378
381
  });
379
382
  const Roblox_Authentication_Api_Models_Request_AuditContentValue = zod_1.z.object({
380
383
  translationKey: zod_1.z.string(),
@@ -80,6 +80,8 @@ const Roblox_Authentication_Api_Models_LoginResponse = z.object({
80
80
  recoveryEmail: z.string(),
81
81
  passkeyRegistrationSucceeded: z.boolean(),
82
82
  shouldAutoLoginFromRecovery: z.boolean(),
83
+ shouldPrompt2svRemoval: z.boolean(),
84
+ shouldPromptPasskeyAddition: z.boolean(),
83
85
  });
84
86
  const Roblox_Authentication_Api_Models_PasswordValidationResponse = z.object({
85
87
  code: z.enum([
@@ -236,7 +238,7 @@ const Roblox_Authentication_Api_Models_ReferralDataModel = z.object({
236
238
  });
237
239
  const Roblox_Authentication_Api_Models_Request_OtpSessionModel = z.object({
238
240
  otpSessionToken: z.string(),
239
- otpContactType: z.enum(["Unset", "Email"]),
241
+ otpContactType: z.enum(["Unset", "Email", "Phone"]),
240
242
  });
241
243
  const Roblox_Authentication_Api_Models_Request_AuditContentValue = z.object({
242
244
  translationKey: z.string(),
@@ -78,6 +78,8 @@ const Roblox_Authentication_Api_Models_LoginResponse = zod_1.z.object({
78
78
  recoveryEmail: zod_1.z.string(),
79
79
  passkeyRegistrationSucceeded: zod_1.z.boolean(),
80
80
  shouldAutoLoginFromRecovery: zod_1.z.boolean(),
81
+ shouldPrompt2svRemoval: zod_1.z.boolean(),
82
+ shouldPromptPasskeyAddition: zod_1.z.boolean(),
81
83
  });
82
84
  const Roblox_Authentication_Api_Models_PasswordValidationResponse = zod_1.z.object({
83
85
  code: zod_1.z.enum([
@@ -229,7 +231,7 @@ const Roblox_Authentication_Api_Models_ReferralDataModel = zod_1.z.object({
229
231
  });
230
232
  const Roblox_Authentication_Api_Models_Request_OtpSessionModel = zod_1.z.object({
231
233
  otpSessionToken: zod_1.z.string(),
232
- otpContactType: zod_1.z.enum(['Unset', 'Email']),
234
+ otpContactType: zod_1.z.enum(['Unset', 'Email', 'Phone']),
233
235
  });
234
236
  const Roblox_Authentication_Api_Models_Request_AuditContentValue = zod_1.z.object({
235
237
  translationKey: zod_1.z.string(),
@@ -313,6 +313,7 @@ const Roblox_Catalog_Api_TaxonomyModel = z.object({
313
313
  const Roblox_Catalog_Api_CatalogSearchDetailedResponseItemV2 = z.object({
314
314
  bundledItems: z.array(Roblox_Catalog_Api_BundleItemDetailModelV2),
315
315
  taxonomy: z.array(Roblox_Catalog_Api_TaxonomyModel),
316
+ itemCreatedUtc: z.string().datetime({ offset: true }),
316
317
  id: z.number().int(),
317
318
  itemType: z.enum(["Asset", "Bundle"]),
318
319
  assetType: z.union([
@@ -309,6 +309,7 @@ const Roblox_Catalog_Api_TaxonomyModel = zod_1.z.object({
309
309
  const Roblox_Catalog_Api_CatalogSearchDetailedResponseItemV2 = zod_1.z.object({
310
310
  bundledItems: zod_1.z.array(Roblox_Catalog_Api_BundleItemDetailModelV2),
311
311
  taxonomy: zod_1.z.array(Roblox_Catalog_Api_TaxonomyModel),
312
+ itemCreatedUtc: zod_1.z.string().datetime({ offset: true }),
312
313
  id: zod_1.z.number().int(),
313
314
  itemType: zod_1.z.enum(['Asset', 'Bundle']),
314
315
  assetType: zod_1.z.union([
@@ -31,6 +31,7 @@ const Roblox_Catalog_Api_TimedOption = z.object({
31
31
  const Roblox_Catalog_Api_CatalogSearchDetailedResponseItemV2 = z.object({
32
32
  bundledItems: z.array(Roblox_Catalog_Api_BundleItemDetailModelV2),
33
33
  taxonomy: z.array(Roblox_Catalog_Api_TaxonomyModel),
34
+ itemCreatedUtc: z.string().datetime({ offset: true }),
34
35
  id: z.number().int(),
35
36
  itemType: z.enum(["Asset", "Bundle"]),
36
37
  assetType: z.union([
@@ -33,6 +33,7 @@ const Roblox_Catalog_Api_TimedOption = zod_1.z.object({
33
33
  const Roblox_Catalog_Api_CatalogSearchDetailedResponseItemV2 = zod_1.z.object({
34
34
  bundledItems: zod_1.z.array(Roblox_Catalog_Api_BundleItemDetailModelV2),
35
35
  taxonomy: zod_1.z.array(Roblox_Catalog_Api_TaxonomyModel),
36
+ itemCreatedUtc: zod_1.z.string().datetime({ offset: true }),
36
37
  id: zod_1.z.number().int(),
37
38
  itemType: zod_1.z.enum(['Asset', 'Bundle']),
38
39
  assetType: zod_1.z.union([
@@ -112,7 +112,6 @@ const Roblox_Friends_Api_Models_Response_UserPresenceResponseModel = z.object({
112
112
  const Roblox_Friends_Api_Models_Response_UserPresenceResponse = z.object({
113
113
  userPresence: Roblox_Friends_Api_Models_Response_UserPresenceResponseModel,
114
114
  sortScore: z.number(),
115
- loggingJoinKey: z.string(),
116
115
  id: z.number().int(),
117
116
  name: z.string(),
118
117
  displayName: z.string(),
@@ -317,6 +316,7 @@ export const postMyFriendsRefreshQrSession = endpoint({
317
316
  * @summary Get all users that friend requests with targetUserId using exclusive start paging
318
317
  * @param limit The number of results per request.
319
318
  * @param cursor The paging cursor for the previous or next page.
319
+ * @param sessionId Optional session identifier.
320
320
  * @param friendRequestSort
321
321
  */
322
322
  export const getMyFriendsRequests = endpoint({
@@ -333,6 +333,10 @@ export const getMyFriendsRequests = endpoint({
333
333
  style: "form",
334
334
  explode: true,
335
335
  },
336
+ sessionId: {
337
+ style: "form",
338
+ explode: true,
339
+ },
336
340
  friendRequestSort: {
337
341
  style: "form",
338
342
  explode: true,
@@ -341,6 +345,7 @@ export const getMyFriendsRequests = endpoint({
341
345
  parameters: {
342
346
  limit: z.number().int().optional().default(10),
343
347
  cursor: z.string().optional(),
348
+ sessionId: z.string().optional(),
344
349
  friendRequestSort: z
345
350
  .union([z.literal(0), z.literal(1), z.literal(2)])
346
351
  .optional()
@@ -103,7 +103,6 @@ const Roblox_Friends_Api_Models_Response_UserPresenceResponseModel = zod_1.z.obj
103
103
  const Roblox_Friends_Api_Models_Response_UserPresenceResponse = zod_1.z.object({
104
104
  userPresence: Roblox_Friends_Api_Models_Response_UserPresenceResponseModel,
105
105
  sortScore: zod_1.z.number(),
106
- loggingJoinKey: zod_1.z.string(),
107
106
  id: zod_1.z.number().int(),
108
107
  name: zod_1.z.string(),
109
108
  displayName: zod_1.z.string(),
@@ -302,6 +301,7 @@ exports.postMyFriendsRefreshQrSession = (0, __1.endpoint)({
302
301
  * @summary Get all users that friend requests with targetUserId using exclusive start paging
303
302
  * @param limit The number of results per request.
304
303
  * @param cursor The paging cursor for the previous or next page.
304
+ * @param sessionId Optional session identifier.
305
305
  * @param friendRequestSort
306
306
  */
307
307
  exports.getMyFriendsRequests = (0, __1.endpoint)({
@@ -318,6 +318,10 @@ exports.getMyFriendsRequests = (0, __1.endpoint)({
318
318
  style: 'form',
319
319
  explode: true,
320
320
  },
321
+ sessionId: {
322
+ style: 'form',
323
+ explode: true,
324
+ },
321
325
  friendRequestSort: {
322
326
  style: 'form',
323
327
  explode: true,
@@ -326,6 +330,7 @@ exports.getMyFriendsRequests = (0, __1.endpoint)({
326
330
  parameters: {
327
331
  limit: zod_1.z.number().int().optional().default(10),
328
332
  cursor: zod_1.z.string().optional(),
333
+ sessionId: zod_1.z.string().optional(),
329
334
  friendRequestSort: zod_1.z
330
335
  .union([zod_1.z.literal(0), zod_1.z.literal(1), zod_1.z.literal(2)])
331
336
  .optional()
@@ -347,6 +347,8 @@ const Roblox_GameInternationalization_Api_GetUiConfigurationsResponse =
347
347
  isGamePassEnabled: z.boolean(),
348
348
  isDeveloperProductEnabled: z.boolean(),
349
349
  });
350
+ const Roblox_GameInternationalization_Api_Models_Response_GetPlayerChoiceUniverseSettingsResponse =
351
+ z.object({ IsPlayerChoiceEnabled: z.boolean() });
350
352
  const Roblox_GameLocalization_Client_UserUniverseLocalizationSettingValue =
351
353
  z.object({
352
354
  settingType: z.enum([
@@ -3279,6 +3281,44 @@ export const getUiConfigurations = endpoint({
3279
3281
  },
3280
3282
  ],
3281
3283
  });
3284
+ /**
3285
+ * @api GET https://gameinternationalization.roblox.com/v1/user-localization-settings/player-choice/:universeId
3286
+ * @summary Get user player choice settings for universe.
3287
+ * @param universeId The universe's ID.
3288
+ */
3289
+ export const getUserLocalizationSettingsPlayerChoiceUniverseid = endpoint({
3290
+ method: "GET",
3291
+ path: "/v1/user-localization-settings/player-choice/:universeId",
3292
+ baseUrl: "https://gameinternationalization.roblox.com",
3293
+ requestFormat: "json",
3294
+ serializationMethod: {
3295
+ universeId: {
3296
+ style: "simple",
3297
+ },
3298
+ },
3299
+ parameters: {
3300
+ universeId: z.number().int(),
3301
+ },
3302
+ response: z.object({ IsPlayerChoiceEnabled: z.boolean() }),
3303
+ errors: [
3304
+ {
3305
+ status: 400,
3306
+ description: `14: Invalid game id`,
3307
+ },
3308
+ {
3309
+ status: 401,
3310
+ description: `0: Authorization has been denied for this request.`,
3311
+ },
3312
+ {
3313
+ status: 500,
3314
+ description: `0: An unknown error occurred.`,
3315
+ },
3316
+ {
3317
+ status: 503,
3318
+ description: `17: Feature is disabled`,
3319
+ },
3320
+ ],
3321
+ });
3282
3322
  /**
3283
3323
  * @api GET https://gameinternationalization.roblox.com/v1/user-localization-settings/universe/:universeId
3284
3324
  * @summary Get user localization settings for universe.
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getSupportedLanguagesGamesGameid = exports.getSourceLanguageGamesGameidLanguageWithLocales = exports.patchSourceLanguageGamesGameid = exports.getSourceLanguageGamesGameid = exports.getNameDescriptionMetadata = exports.postNameDescriptionGamesTranslationHistory = exports.patchNameDescriptionGamesGameid = exports.getNameDescriptionGamesGameid = exports.patchLocalizationtableGametablesGameid = exports.postGameThumbnailsGamesGameidLanguageCodesLanguagecodeImagesOrder = exports.deleteGameThumbnailsGamesGameidLanguageCodesLanguagecodeImagesImageid = exports.postGameThumbnailsGamesGameidLanguageCodesLanguagecodeImage = exports.postGameThumbnailsGamesGameidLanguageCodesLanguagecodeAltText = exports.getGameThumbnailsGamesGameidImages = exports.patchGamePassesGamepassidNameLanguageCodesLanguagecode = exports.patchGamePassesGamepassidNameDescriptionLanguageCodesLanguagecode = exports.deleteGamePassesGamepassidNameDescriptionLanguageCodesLanguagecode = exports.getGamePassesGamepassidNameDescription = exports.deleteGamePassesGamepassidIconsLanguageCodesLanguagecode = exports.postGamePassesGamepassidIconsLanguageCodesLanguagecode = exports.getGamePassesGamepassidIcons = exports.patchGamePassesGamepassidDescriptionLanguageCodesLanguagecode = exports.getGameLocalizationStatusTranslationCountsForLanguageOrLocale = exports.getGameLocalizationStatusGameidTranslationCounts = exports.deleteGameIconGamesGameidLanguageCodesLanguagecode = exports.postGameIconGamesGameidLanguageCodesLanguagecode = exports.getGameIconGamesGameid = exports.patchDeveloperProductsDeveloperproductidNameLanguageCodesLanguagecode = exports.patchDeveloperProductsDeveloperproductidNameDescriptionLanguageCodesLanguagecode = exports.deleteDeveloperProductsDeveloperproductidNameDescriptionLanguageCodesLanguagecode = exports.getDeveloperProductsDeveloperproductidNameDescription = exports.deleteDeveloperProductsDeveloperproductidIconsLanguageCodesLanguagecode = exports.postDeveloperProductsDeveloperproductidIconsLanguageCodesLanguagecode = exports.getDeveloperProductsDeveloperproductidIcons = exports.patchDeveloperProductsDeveloperproductidDescriptionLanguageCodesLanguagecode = exports.patchBadgesBadgeidNameLanguageCodesLanguagecode = exports.patchBadgesBadgeidNameDescriptionLanguageCodesLanguagecode = exports.deleteBadgesBadgeidNameDescriptionLanguageCodesLanguagecode = exports.getBadgesBadgeidNameDescription = exports.deleteBadgesBadgeidIconsLanguageCodesLanguagecode = exports.postBadgesBadgeidIconsLanguageCodesLanguagecode = exports.getBadgesBadgeidIcons = exports.patchBadgesBadgeidDescriptionLanguageCodesLanguagecode = exports.getAutomaticTranslationLanguagesLanguagecodeTargetLanguages = exports.getAutomaticTranslationGamesGameidQuota = exports.getAutomaticTranslationGamesGameidFeatureStatus = exports.getAutolocalizationMetadata = exports.patchAutolocalizationGamesGameidSettings = exports.patchAutolocalizationGamesGameidAutolocalizationtable = exports.postAutolocalizationGamesGameidAutolocalizationtable = void 0;
4
- exports.postUserLocalizationSettingsUniverseUniverseid = exports.getUserLocalizationSettingsUniverseUniverseid = exports.getUiConfigurations = exports.getTranslationAnalyticsMetadata = exports.postTranslationAnalyticsGamesGameidRequestTranslationAnalyticsReport = exports.getTranslationAnalyticsGamesGameidDownloadTranslationAnalyticsReport = exports.getSupportedLanguagesMetadata = exports.getSupportedLanguagesGamesGameidUniverseDisplayInfoAutomaticTranslationSettings = exports.patchSupportedLanguagesGamesGameidLanguagesLanguagecodeUniverseDisplayInfoAutomaticTranslationSettings = exports.patchSupportedLanguagesGamesGameidLanguagesLanguagecodeAutomaticTranslationStatus = exports.getSupportedLanguagesGamesGameidInExperienceLanguageSelection = exports.getSupportedLanguagesGamesGameidAutomaticTranslationStatus = exports.patchSupportedLanguagesGamesGameid = void 0;
4
+ exports.postUserLocalizationSettingsUniverseUniverseid = exports.getUserLocalizationSettingsUniverseUniverseid = exports.getUserLocalizationSettingsPlayerChoiceUniverseid = exports.getUiConfigurations = exports.getTranslationAnalyticsMetadata = exports.postTranslationAnalyticsGamesGameidRequestTranslationAnalyticsReport = exports.getTranslationAnalyticsGamesGameidDownloadTranslationAnalyticsReport = exports.getSupportedLanguagesMetadata = exports.getSupportedLanguagesGamesGameidUniverseDisplayInfoAutomaticTranslationSettings = exports.patchSupportedLanguagesGamesGameidLanguagesLanguagecodeUniverseDisplayInfoAutomaticTranslationSettings = exports.patchSupportedLanguagesGamesGameidLanguagesLanguagecodeAutomaticTranslationStatus = exports.getSupportedLanguagesGamesGameidInExperienceLanguageSelection = exports.getSupportedLanguagesGamesGameidAutomaticTranslationStatus = exports.patchSupportedLanguagesGamesGameid = void 0;
5
5
  const zod_1 = require("zod");
6
6
  const __1 = require("..");
7
7
  const Roblox_GameInternationalization_Api_AutoLocalizationMetadataResponse = zod_1.z.object({
@@ -273,6 +273,9 @@ const Roblox_GameInternationalization_Api_GetUiConfigurationsResponse = zod_1.z.
273
273
  isGamePassEnabled: zod_1.z.boolean(),
274
274
  isDeveloperProductEnabled: zod_1.z.boolean(),
275
275
  });
276
+ const Roblox_GameInternationalization_Api_Models_Response_GetPlayerChoiceUniverseSettingsResponse = zod_1.z.object({
277
+ IsPlayerChoiceEnabled: zod_1.z.boolean(),
278
+ });
276
279
  const Roblox_GameLocalization_Client_UserUniverseLocalizationSettingValue = zod_1.z.object({
277
280
  settingType: zod_1.z.enum(['LanguageFamily', 'SupportedLocale', 'SourceOrTranslation']),
278
281
  settingTargetId: zod_1.z.number().int(),
@@ -3142,6 +3145,44 @@ exports.getUiConfigurations = (0, __1.endpoint)({
3142
3145
  },
3143
3146
  ],
3144
3147
  });
3148
+ /**
3149
+ * @api GET https://gameinternationalization.roblox.com/v1/user-localization-settings/player-choice/:universeId
3150
+ * @summary Get user player choice settings for universe.
3151
+ * @param universeId The universe's ID.
3152
+ */
3153
+ exports.getUserLocalizationSettingsPlayerChoiceUniverseid = (0, __1.endpoint)({
3154
+ method: 'GET',
3155
+ path: '/v1/user-localization-settings/player-choice/:universeId',
3156
+ baseUrl: 'https://gameinternationalization.roblox.com',
3157
+ requestFormat: 'json',
3158
+ serializationMethod: {
3159
+ universeId: {
3160
+ style: 'simple',
3161
+ },
3162
+ },
3163
+ parameters: {
3164
+ universeId: zod_1.z.number().int(),
3165
+ },
3166
+ response: zod_1.z.object({ IsPlayerChoiceEnabled: zod_1.z.boolean() }),
3167
+ errors: [
3168
+ {
3169
+ status: 400,
3170
+ description: `14: Invalid game id`,
3171
+ },
3172
+ {
3173
+ status: 401,
3174
+ description: `0: Authorization has been denied for this request.`,
3175
+ },
3176
+ {
3177
+ status: 500,
3178
+ description: `0: An unknown error occurred.`,
3179
+ },
3180
+ {
3181
+ status: 503,
3182
+ description: `17: Feature is disabled`,
3183
+ },
3184
+ ],
3185
+ });
3145
3186
  /**
3146
3187
  * @api GET https://gameinternationalization.roblox.com/v1/user-localization-settings/universe/:universeId
3147
3188
  * @summary Get user localization settings for universe.
@@ -144,6 +144,16 @@ const Roblox_Games_Api_Models_Response_PlaceDetails = z.object({
144
144
  imageToken: z.string(),
145
145
  fiatPurchaseData: Roblox_Games_Api_Models_Response_PurchaseData,
146
146
  });
147
+ const Roblox_Games_Api_Models_Response_PlayableUxTreatmentData = z.object({
148
+ titleText: z.string(),
149
+ bodyText: z.string(),
150
+ primaryActionText: z.string(),
151
+ secondaryActionText: z.string(),
152
+ });
153
+ const Roblox_Games_Api_Models_Response_PlayableUxTreatment = z.object({
154
+ treatment: z.string(),
155
+ data: Roblox_Games_Api_Models_Response_PlayableUxTreatmentData,
156
+ });
147
157
  const Roblox_Games_Api_Models_Response_PlayabilityStatusResponse = z.object({
148
158
  playabilityStatus: z.enum([
149
159
  "UnplayableOtherReason",
@@ -176,6 +186,7 @@ const Roblox_Games_Api_Models_Response_PlayabilityStatusResponse = z.object({
176
186
  isPlayable: z.boolean(),
177
187
  universeId: z.number().int(),
178
188
  unplayableDisplayText: z.string(),
189
+ playableUxTreatment: Roblox_Games_Api_Models_Response_PlayableUxTreatment,
179
190
  });
180
191
  const Roblox_Games_Api_Models_Response_GameResponseModel = z.object({
181
192
  creatorId: z.number().int(),
@@ -198,6 +209,7 @@ const Roblox_Games_Api_Models_Response_GameResponseModel = z.object({
198
209
  genre: z.string(),
199
210
  minimumAge: z.number().int(),
200
211
  ageRecommendationDisplayName: z.string(),
212
+ canonicalUrlPath: z.string(),
201
213
  });
202
214
  const Roblox_Games_Api_Models_Response_GameRecommendationsResponse = z.object({
203
215
  games: z.array(Roblox_Games_Api_Models_Response_GameResponseModel),
@@ -144,6 +144,16 @@ const Roblox_Games_Api_Models_Response_PlaceDetails = zod_1.z.object({
144
144
  imageToken: zod_1.z.string(),
145
145
  fiatPurchaseData: Roblox_Games_Api_Models_Response_PurchaseData,
146
146
  });
147
+ const Roblox_Games_Api_Models_Response_PlayableUxTreatmentData = zod_1.z.object({
148
+ titleText: zod_1.z.string(),
149
+ bodyText: zod_1.z.string(),
150
+ primaryActionText: zod_1.z.string(),
151
+ secondaryActionText: zod_1.z.string(),
152
+ });
153
+ const Roblox_Games_Api_Models_Response_PlayableUxTreatment = zod_1.z.object({
154
+ treatment: zod_1.z.string(),
155
+ data: Roblox_Games_Api_Models_Response_PlayableUxTreatmentData,
156
+ });
147
157
  const Roblox_Games_Api_Models_Response_PlayabilityStatusResponse = zod_1.z.object({
148
158
  playabilityStatus: zod_1.z.enum([
149
159
  'UnplayableOtherReason',
@@ -176,6 +186,7 @@ const Roblox_Games_Api_Models_Response_PlayabilityStatusResponse = zod_1.z.objec
176
186
  isPlayable: zod_1.z.boolean(),
177
187
  universeId: zod_1.z.number().int(),
178
188
  unplayableDisplayText: zod_1.z.string(),
189
+ playableUxTreatment: Roblox_Games_Api_Models_Response_PlayableUxTreatment,
179
190
  });
180
191
  const Roblox_Games_Api_Models_Response_GameResponseModel = zod_1.z.object({
181
192
  creatorId: zod_1.z.number().int(),
@@ -198,6 +209,7 @@ const Roblox_Games_Api_Models_Response_GameResponseModel = zod_1.z.object({
198
209
  genre: zod_1.z.string(),
199
210
  minimumAge: zod_1.z.number().int(),
200
211
  ageRecommendationDisplayName: zod_1.z.string(),
212
+ canonicalUrlPath: zod_1.z.string(),
201
213
  });
202
214
  const Roblox_Games_Api_Models_Response_GameRecommendationsResponse = zod_1.z.object({
203
215
  games: zod_1.z.array(Roblox_Games_Api_Models_Response_GameResponseModel),
@@ -44,6 +44,7 @@ const Roblox_Groups_Api_GroupRoleResponse = z.object({
44
44
  description: z.string(),
45
45
  rank: z.number().int(),
46
46
  memberCount: z.number().int(),
47
+ isBase: z.boolean(),
47
48
  });
48
49
  const Roblox_Groups_Api_UserGroupRoleResponse = z.object({
49
50
  user: Roblox_Groups_Api_Models_Response_UserModel,
@@ -249,6 +250,9 @@ const Roblox_Groups_Api_PayoutRequest = z.object({
249
250
  Recipients: z.array(Roblox_Groups_Api_PayoutRecipientRequest),
250
251
  IdempotencyKey: z.string(),
251
252
  });
253
+ const Roblox_Groups_Api_OneTimePayoutResponse = z.object({
254
+ status: z.enum(["NotHeld", "Held"]),
255
+ });
252
256
  const Roblox_Groups_Api_GroupRelationshipsResponse = z.object({
253
257
  groupId: z.number().int(),
254
258
  relationshipType: z.enum(["Allies", "Enemies"]),
@@ -483,6 +487,7 @@ const Roblox_Groups_Api_GroupRoleDetailResponse = z.object({
483
487
  description: z.string(),
484
488
  rank: z.number().int(),
485
489
  memberCount: z.number().int(),
490
+ isBase: z.boolean(),
486
491
  });
487
492
  const Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Groups_Api_GroupRoleDetailResponse_ =
488
493
  z.object({ data: z.array(Roblox_Groups_Api_GroupRoleDetailResponse) });
@@ -813,6 +818,8 @@ export const getGroupsGroupidAuditLog = endpoint({
813
818
  "LeaveGroup",
814
819
  "UpdateGroupIcon",
815
820
  "UpdateGroupCoverPhoto",
821
+ "AssignRole",
822
+ "UnassignRole",
816
823
  ])
817
824
  .optional(),
818
825
  userId: z.number().int().optional(),
@@ -1989,7 +1996,7 @@ export const postGroupsGroupidPayouts = endpoint({
1989
1996
  groupId: z.number().int(),
1990
1997
  },
1991
1998
  body: Roblox_Groups_Api_PayoutRequest,
1992
- response: z.object({}),
1999
+ response: Roblox_Groups_Api_OneTimePayoutResponse,
1993
2000
  errors: [
1994
2001
  {
1995
2002
  status: 400,