rozod 6.5.1 → 6.6.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.
@@ -404,7 +404,7 @@ const Roblox_Authentication_Api_Models_ReferralDataModel = z.object({
404
404
  });
405
405
  const Roblox_Authentication_Api_Models_Request_OtpSessionModel = z.object({
406
406
  otpSessionToken: z.string(),
407
- otpContactType: z.enum(["Unset", "Email", "Phone"]),
407
+ otpContactType: z.enum(["Unset", "Email"]),
408
408
  });
409
409
  const Roblox_Authentication_Api_Models_Request_AuditContentValue = z.object({
410
410
  translationKey: z.string(),
@@ -377,7 +377,7 @@ const Roblox_Authentication_Api_Models_ReferralDataModel = zod_1.z.object({
377
377
  });
378
378
  const Roblox_Authentication_Api_Models_Request_OtpSessionModel = zod_1.z.object({
379
379
  otpSessionToken: zod_1.z.string(),
380
- otpContactType: zod_1.z.enum(['Unset', 'Email', 'Phone']),
380
+ otpContactType: zod_1.z.enum(['Unset', 'Email']),
381
381
  });
382
382
  const Roblox_Authentication_Api_Models_Request_AuditContentValue = zod_1.z.object({
383
383
  translationKey: zod_1.z.string(),
@@ -238,7 +238,7 @@ const Roblox_Authentication_Api_Models_ReferralDataModel = z.object({
238
238
  });
239
239
  const Roblox_Authentication_Api_Models_Request_OtpSessionModel = z.object({
240
240
  otpSessionToken: z.string(),
241
- otpContactType: z.enum(["Unset", "Email", "Phone"]),
241
+ otpContactType: z.enum(["Unset", "Email"]),
242
242
  });
243
243
  const Roblox_Authentication_Api_Models_Request_AuditContentValue = z.object({
244
244
  translationKey: z.string(),
@@ -231,7 +231,7 @@ const Roblox_Authentication_Api_Models_ReferralDataModel = zod_1.z.object({
231
231
  });
232
232
  const Roblox_Authentication_Api_Models_Request_OtpSessionModel = zod_1.z.object({
233
233
  otpSessionToken: zod_1.z.string(),
234
- otpContactType: zod_1.z.enum(['Unset', 'Email', 'Phone']),
234
+ otpContactType: zod_1.z.enum(['Unset', 'Email']),
235
235
  });
236
236
  const Roblox_Authentication_Api_Models_Request_AuditContentValue = zod_1.z.object({
237
237
  translationKey: zod_1.z.string(),
@@ -217,6 +217,7 @@ const Roblox_Catalog_Api_CatalogSearchDetailedResponseItem = z.object({
217
217
  z.literal(88),
218
218
  z.literal(89),
219
219
  z.literal(90),
220
+ z.literal(91),
220
221
  ]),
221
222
  bundleType: z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]),
222
223
  isRecolorable: z.boolean(),
@@ -400,6 +401,7 @@ const Roblox_Catalog_Api_CatalogSearchDetailedResponseItemV2 = z.object({
400
401
  z.literal(88),
401
402
  z.literal(89),
402
403
  z.literal(90),
404
+ z.literal(91),
403
405
  ]),
404
406
  bundleType: z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]),
405
407
  isRecolorable: z.boolean(),
@@ -217,6 +217,7 @@ const Roblox_Catalog_Api_CatalogSearchDetailedResponseItem = zod_1.z.object({
217
217
  zod_1.z.literal(88),
218
218
  zod_1.z.literal(89),
219
219
  zod_1.z.literal(90),
220
+ zod_1.z.literal(91),
220
221
  ]),
221
222
  bundleType: zod_1.z.union([zod_1.z.literal(1), zod_1.z.literal(2), zod_1.z.literal(3), zod_1.z.literal(4)]),
222
223
  isRecolorable: zod_1.z.boolean(),
@@ -396,6 +397,7 @@ const Roblox_Catalog_Api_CatalogSearchDetailedResponseItemV2 = zod_1.z.object({
396
397
  zod_1.z.literal(88),
397
398
  zod_1.z.literal(89),
398
399
  zod_1.z.literal(90),
400
+ zod_1.z.literal(91),
399
401
  ]),
400
402
  bundleType: zod_1.z.union([zod_1.z.literal(1), zod_1.z.literal(2), zod_1.z.literal(3), zod_1.z.literal(4)]),
401
403
  isRecolorable: zod_1.z.boolean(),
@@ -118,6 +118,7 @@ const Roblox_Catalog_Api_CatalogSearchDetailedResponseItemV2 = z.object({
118
118
  z.literal(88),
119
119
  z.literal(89),
120
120
  z.literal(90),
121
+ z.literal(91),
121
122
  ]),
122
123
  bundleType: z.union([z.literal(1), z.literal(2), z.literal(3), z.literal(4)]),
123
124
  isRecolorable: z.boolean(),
@@ -120,6 +120,7 @@ const Roblox_Catalog_Api_CatalogSearchDetailedResponseItemV2 = zod_1.z.object({
120
120
  zod_1.z.literal(88),
121
121
  zod_1.z.literal(89),
122
122
  zod_1.z.literal(90),
123
+ zod_1.z.literal(91),
123
124
  ]),
124
125
  bundleType: zod_1.z.union([zod_1.z.literal(1), zod_1.z.literal(2), zod_1.z.literal(3), zod_1.z.literal(4)]),
125
126
  isRecolorable: zod_1.z.boolean(),
@@ -29,6 +29,7 @@ const Roblox_Friends_Api_FriendRequest = z.object({
29
29
  "ProfileShare",
30
30
  "PhoneContactImporter",
31
31
  "FriendRecommendations",
32
+ "UserCommunities",
32
33
  ]),
33
34
  contactName: z.string(),
34
35
  senderNickname: z.string(),
@@ -177,6 +178,7 @@ const Roblox_Friends_Api_FriendshipRequestModel = z.object({
177
178
  "ProfileShare",
178
179
  "PhoneContactImporter",
179
180
  "FriendRecommendations",
181
+ "UserCommunities",
180
182
  ]),
181
183
  senderNickname: z.string(),
182
184
  });
@@ -410,6 +412,23 @@ export const getMyNewFriendRequestsCount = endpoint({
410
412
  },
411
413
  ],
412
414
  });
415
+ /**
416
+ * @api GET https://friends.roblox.com/v1/my/trusted-friends/count
417
+ * @summary Get the number of trusted friends a user has
418
+ */
419
+ export const getMyTrustedFriendsCount = endpoint({
420
+ method: "GET",
421
+ path: "/v1/my/trusted-friends/count",
422
+ baseUrl: "https://friends.roblox.com",
423
+ requestFormat: "json",
424
+ response: z.object({ count: z.number().int() }),
425
+ errors: [
426
+ {
427
+ status: 401,
428
+ description: `0: Authorization has been denied for this request.`,
429
+ },
430
+ ],
431
+ });
413
432
  /**
414
433
  * @api POST https://friends.roblox.com/v1/user/:userId/multiget-are-friends
415
434
  * @summary Check if the requesting user is friends with the specified users.
@@ -1254,6 +1273,32 @@ export const getUsersUseridFriendsStatuses = endpoint({
1254
1273
  },
1255
1274
  ],
1256
1275
  });
1276
+ /**
1277
+ * @api GET https://friends.roblox.com/v1/users/:userId/trusted-friends/count
1278
+ * @summary Get the number of trusted friends a user has
1279
+ * @param userId
1280
+ */
1281
+ export const getUsersUseridTrustedFriendsCount = endpoint({
1282
+ method: "GET",
1283
+ path: "/v1/users/:userId/trusted-friends/count",
1284
+ baseUrl: "https://friends.roblox.com",
1285
+ requestFormat: "json",
1286
+ serializationMethod: {
1287
+ userId: {
1288
+ style: "simple",
1289
+ },
1290
+ },
1291
+ parameters: {
1292
+ userId: z.number().int(),
1293
+ },
1294
+ response: z.object({ count: z.number().int() }),
1295
+ errors: [
1296
+ {
1297
+ status: 401,
1298
+ description: `0: Authorization has been denied for this request.`,
1299
+ },
1300
+ ],
1301
+ });
1257
1302
 
1258
1303
  // Patched endpoints removed from Roblox API docs (v6.1.0 compat)
1259
1304
 
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getUserUseridMultigetAreTrustedFriends = exports.getMyTrustedFriendsUseridStatus = exports.getUsersUseridFriendsStatuses = exports.getUsersUseridFriendsSearch = exports.getUsersUseridFriendsOnline = exports.getUsersUseridFriendsInactive = exports.getUsersUseridFriendsFind = exports.getUsersUseridFriendsCount = exports.getUsersUseridFriends = exports.postUsersTargetuseridUnfriend = exports.postUsersTargetuseridUnfollow = exports.postUsersTargetuseridRequestFriendship = exports.getUsersTargetuseridFollowingsCount = exports.getUsersTargetuseridFollowings = exports.getUsersTargetuseridFollowersCount = exports.getUsersTargetuseridFollowers = exports.postUsersTargetuseridFollow = exports.postUsersSenderuseridAcceptFriendRequestWithToken = exports.postUsersRequesteruseridDeclineFriendRequest = exports.postUsersRequesteruseridAcceptFriendRequest = exports.postUserFriendRequestsDeclineAll = exports.getUserFriendRequestsCount = exports.postUserFollowingExists = exports.postUserUseridMultigetAreFriends = exports.getMyNewFriendRequestsCount = exports.deleteMyNewFriendRequests = exports.getMyFriendsRequests = exports.postMyFriendsRefreshQrSession = exports.getMyFriendsCount = exports.getMyFriendsUseridCheckQrSession = exports.getMetadata = exports.postContactsTargetcontactidRequestFriendship = void 0;
3
+ exports.getUserUseridMultigetAreTrustedFriends = exports.getMyTrustedFriendsUseridStatus = exports.getUsersUseridTrustedFriendsCount = exports.getUsersUseridFriendsStatuses = exports.getUsersUseridFriendsSearch = exports.getUsersUseridFriendsOnline = exports.getUsersUseridFriendsInactive = exports.getUsersUseridFriendsFind = exports.getUsersUseridFriendsCount = exports.getUsersUseridFriends = exports.postUsersTargetuseridUnfriend = exports.postUsersTargetuseridUnfollow = exports.postUsersTargetuseridRequestFriendship = exports.getUsersTargetuseridFollowingsCount = exports.getUsersTargetuseridFollowings = exports.getUsersTargetuseridFollowersCount = exports.getUsersTargetuseridFollowers = exports.postUsersTargetuseridFollow = exports.postUsersSenderuseridAcceptFriendRequestWithToken = exports.postUsersRequesteruseridDeclineFriendRequest = exports.postUsersRequesteruseridAcceptFriendRequest = exports.postUserFriendRequestsDeclineAll = exports.getUserFriendRequestsCount = exports.postUserFollowingExists = exports.postUserUseridMultigetAreFriends = exports.getMyTrustedFriendsCount = exports.getMyNewFriendRequestsCount = exports.deleteMyNewFriendRequests = exports.getMyFriendsRequests = exports.postMyFriendsRefreshQrSession = exports.getMyFriendsCount = exports.getMyFriendsUseridCheckQrSession = exports.getMetadata = exports.postContactsTargetcontactidRequestFriendship = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const __1 = require("..");
6
6
  const Roblox_Friends_Api_Models_Response_FriendsPageMetadataResponse = zod_1.z.object({
@@ -29,6 +29,7 @@ const Roblox_Friends_Api_FriendRequest = zod_1.z.object({
29
29
  'ProfileShare',
30
30
  'PhoneContactImporter',
31
31
  'FriendRecommendations',
32
+ 'UserCommunities',
32
33
  ]),
33
34
  contactName: zod_1.z.string(),
34
35
  senderNickname: zod_1.z.string(),
@@ -164,6 +165,7 @@ const Roblox_Friends_Api_FriendshipRequestModel = zod_1.z.object({
164
165
  'ProfileShare',
165
166
  'PhoneContactImporter',
166
167
  'FriendRecommendations',
168
+ 'UserCommunities',
167
169
  ]),
168
170
  senderNickname: zod_1.z.string(),
169
171
  });
@@ -394,6 +396,23 @@ exports.getMyNewFriendRequestsCount = (0, __1.endpoint)({
394
396
  },
395
397
  ],
396
398
  });
399
+ /**
400
+ * @api GET https://friends.roblox.com/v1/my/trusted-friends/count
401
+ * @summary Get the number of trusted friends a user has
402
+ */
403
+ exports.getMyTrustedFriendsCount = (0, __1.endpoint)({
404
+ method: 'GET',
405
+ path: '/v1/my/trusted-friends/count',
406
+ baseUrl: 'https://friends.roblox.com',
407
+ requestFormat: 'json',
408
+ response: zod_1.z.object({ count: zod_1.z.number().int() }),
409
+ errors: [
410
+ {
411
+ status: 401,
412
+ description: `0: Authorization has been denied for this request.`,
413
+ },
414
+ ],
415
+ });
397
416
  /**
398
417
  * @api POST https://friends.roblox.com/v1/user/:userId/multiget-are-friends
399
418
  * @summary Check if the requesting user is friends with the specified users.
@@ -1218,6 +1237,32 @@ exports.getUsersUseridFriendsStatuses = (0, __1.endpoint)({
1218
1237
  },
1219
1238
  ],
1220
1239
  });
1240
+ /**
1241
+ * @api GET https://friends.roblox.com/v1/users/:userId/trusted-friends/count
1242
+ * @summary Get the number of trusted friends a user has
1243
+ * @param userId
1244
+ */
1245
+ exports.getUsersUseridTrustedFriendsCount = (0, __1.endpoint)({
1246
+ method: 'GET',
1247
+ path: '/v1/users/:userId/trusted-friends/count',
1248
+ baseUrl: 'https://friends.roblox.com',
1249
+ requestFormat: 'json',
1250
+ serializationMethod: {
1251
+ userId: {
1252
+ style: 'simple',
1253
+ },
1254
+ },
1255
+ parameters: {
1256
+ userId: zod_1.z.number().int(),
1257
+ },
1258
+ response: zod_1.z.object({ count: zod_1.z.number().int() }),
1259
+ errors: [
1260
+ {
1261
+ status: 401,
1262
+ description: `0: Authorization has been denied for this request.`,
1263
+ },
1264
+ ],
1265
+ });
1221
1266
  // Patched endpoints removed from Roblox API docs (v6.1.0 compat)
1222
1267
  const Patch_TrustedFriendStatusResponse = zod_1.z.object({
1223
1268
  status: zod_1.z.union([zod_1.z.literal(0), zod_1.z.literal(1), zod_1.z.literal(2), zod_1.z.literal(3), zod_1.z.literal(4), zod_1.z.literal(5), zod_1.z.literal(6)]),
@@ -357,6 +357,7 @@ const Roblox_GameLocalization_Client_UserUniverseLocalizationSettingValue =
357
357
  "SourceOrTranslation",
358
358
  ]),
359
359
  settingTargetId: z.number().int(),
360
+ settingTargetCode: z.string(),
360
361
  });
361
362
  const Roblox_GameInternationalization_Api_Models_Response_GetUserLocalizationSettingsForUniverseResponse =
362
363
  z.object({
@@ -279,6 +279,7 @@ const Roblox_GameInternationalization_Api_Models_Response_GetPlayerChoiceUnivers
279
279
  const Roblox_GameLocalization_Client_UserUniverseLocalizationSettingValue = zod_1.z.object({
280
280
  settingType: zod_1.z.enum(['LanguageFamily', 'SupportedLocale', 'SourceOrTranslation']),
281
281
  settingTargetId: zod_1.z.number().int(),
282
+ settingTargetCode: zod_1.z.string(),
282
283
  });
283
284
  const Roblox_GameInternationalization_Api_Models_Response_GetUserLocalizationSettingsForUniverseResponse = zod_1.z.object({
284
285
  userUniverseLocalizationSettingValue: Roblox_GameLocalization_Client_UserUniverseLocalizationSettingValue,
@@ -45,6 +45,25 @@ const Roblox_Groups_Api_GroupRoleResponse = z.object({
45
45
  rank: z.number().int(),
46
46
  memberCount: z.number().int(),
47
47
  isBase: z.boolean(),
48
+ color: z.enum([
49
+ "Invalid",
50
+ "Blue",
51
+ "Green",
52
+ "Purple",
53
+ "Yellow",
54
+ "Orange",
55
+ "Red",
56
+ "Magenta",
57
+ "Teal",
58
+ "Turquoise",
59
+ "Rust",
60
+ "Pistachio",
61
+ "Midnight",
62
+ "Lavender",
63
+ "Pink",
64
+ "Crimson",
65
+ "Plum",
66
+ ]),
48
67
  });
49
68
  const Roblox_Groups_Api_UserGroupRoleResponse = z.object({
50
69
  user: Roblox_Groups_Api_Models_Response_UserModel,
@@ -115,6 +134,29 @@ const Roblox_Groups_Client_EmoteSetModel = z.object({
115
134
  const Roblox_Groups_Client_GetGroupEmoteSetsResponse = z.object({
116
135
  emoteSets: z.array(Roblox_Groups_Client_EmoteSetModel),
117
136
  });
137
+ const Roblox_Groups_Api_GroupFeatureResponse = z.object({
138
+ feature: z.enum([
139
+ "Payouts",
140
+ "ContentUpload",
141
+ "GroupOwnershipTransfer",
142
+ "GameOwnershipTransfer",
143
+ ]),
144
+ isFeatureBlocked: z.boolean(),
145
+ expiration: z.string().datetime({ offset: true }),
146
+ });
147
+ const Roblox_Groups_Api_GetGroupFeaturesResponse = z.object({
148
+ isLocked: z.boolean(),
149
+ features: z.array(Roblox_Groups_Api_GroupFeatureResponse),
150
+ });
151
+ const Roblox_Groups_Api_SetFeaturesRequestModel = z.object({
152
+ Features: z.object({}),
153
+ });
154
+ const Roblox_Groups_Api_SetFeaturesResponseModel = z.object({
155
+ Updated: z.boolean(),
156
+ });
157
+ const Roblox_Groups_Api_HasGroupFeaturesBlockedResponse = z.object({
158
+ hasFeaturesBlocked: z.boolean(),
159
+ });
118
160
  const Roblox_Groups_Api_GroupJoinRequestResponse = z.object({
119
161
  requester: Roblox_Groups_Api_Models_Response_UserModel,
120
162
  created: z.string().datetime({ offset: true }),
@@ -160,6 +202,7 @@ const Roblox_Groups_Api_GroupManagementPermissionsModel = z.object({
160
202
  manageClan: z.boolean(),
161
203
  viewAuditLogs: z.boolean(),
162
204
  bypassSlowmode: z.boolean(),
205
+ viewCommunityAnalytics: z.boolean(),
163
206
  });
164
207
  const Roblox_Groups_Api_GroupEconomyPermissionsModel = z.object({
165
208
  spendGroupFunds: z.boolean(),
@@ -488,6 +531,25 @@ const Roblox_Groups_Api_GroupRoleDetailResponse = z.object({
488
531
  rank: z.number().int(),
489
532
  memberCount: z.number().int(),
490
533
  isBase: z.boolean(),
534
+ color: z.enum([
535
+ "Invalid",
536
+ "Blue",
537
+ "Green",
538
+ "Purple",
539
+ "Yellow",
540
+ "Orange",
541
+ "Red",
542
+ "Magenta",
543
+ "Teal",
544
+ "Turquoise",
545
+ "Rust",
546
+ "Pistachio",
547
+ "Midnight",
548
+ "Lavender",
549
+ "Pink",
550
+ "Crimson",
551
+ "Plum",
552
+ ]),
491
553
  });
492
554
  const Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Groups_Api_GroupRoleDetailResponse_ =
493
555
  z.object({ data: z.array(Roblox_Groups_Api_GroupRoleDetailResponse) });
@@ -579,6 +641,7 @@ const Roblox_Groups_Api_Models_Request_UpdateRoleSetRequest = z.object({
579
641
  name: z.string(),
580
642
  description: z.string(),
581
643
  rank: z.number().int(),
644
+ color: z.number().int(),
582
645
  });
583
646
  const Roblox_Groups_Api_PostGroupStatusRequest = z.object({
584
647
  message: z.string(),
@@ -1456,6 +1519,117 @@ export const getGroupsGroupidEmotes = endpoint({
1456
1519
  response: Roblox_Groups_Client_GetGroupEmoteSetsResponse,
1457
1520
  errors: [],
1458
1521
  });
1522
+ /**
1523
+ * @api GET https://groups.roblox.com/v1/groups/:groupId/features
1524
+ * @summary Gets the freeze status of all features and the lock status for a group.
1525
+ * @param groupId
1526
+ */
1527
+ export const getGroupsGroupidFeatures = endpoint({
1528
+ method: "GET",
1529
+ path: "/v1/groups/:groupId/features",
1530
+ baseUrl: "https://groups.roblox.com",
1531
+ requestFormat: "json",
1532
+ serializationMethod: {
1533
+ groupId: {
1534
+ style: "simple",
1535
+ },
1536
+ },
1537
+ parameters: {
1538
+ groupId: z.number().int(),
1539
+ },
1540
+ response: Roblox_Groups_Api_GetGroupFeaturesResponse,
1541
+ errors: [
1542
+ {
1543
+ status: 400,
1544
+ description: `1: Group is invalid or does not exist.`,
1545
+ },
1546
+ {
1547
+ status: 401,
1548
+ description: `0: Authorization has been denied for this request.`,
1549
+ },
1550
+ {
1551
+ status: 403,
1552
+ description: `23: Insufficient permissions to complete the request.
1553
+ 49: User is invalid or does not exist`,
1554
+ },
1555
+ ],
1556
+ });
1557
+ /**
1558
+ * @api PATCH https://groups.roblox.com/v1/groups/:groupId/features
1559
+ * @summary Sets the desired status of group features.
1560
+ Currently only removes active freezes for features set to Roblox.Groups.Api.FeatureStatus.On.
1561
+ * @param body
1562
+ * @param groupId
1563
+ */
1564
+ export const patchGroupsGroupidFeatures = endpoint({
1565
+ method: "PATCH",
1566
+ path: "/v1/groups/:groupId/features",
1567
+ baseUrl: "https://groups.roblox.com",
1568
+ requestFormat: "json",
1569
+ serializationMethod: {
1570
+ body: {},
1571
+ groupId: {
1572
+ style: "simple",
1573
+ },
1574
+ },
1575
+ parameters: {
1576
+ groupId: z.number().int(),
1577
+ },
1578
+ body: z.object({ Features: z.object({}) }),
1579
+ response: z.object({ Updated: z.boolean() }),
1580
+ errors: [
1581
+ {
1582
+ status: 400,
1583
+ description: `1: Group is invalid or does not exist.`,
1584
+ },
1585
+ {
1586
+ status: 401,
1587
+ description: `0: Authorization has been denied for this request.`,
1588
+ },
1589
+ {
1590
+ status: 403,
1591
+ description: `0: Token Validation Failed
1592
+ 23: Insufficient permissions to complete the request.
1593
+ 49: User is invalid or does not exist`,
1594
+ },
1595
+ ],
1596
+ });
1597
+ /**
1598
+ * @api GET https://groups.roblox.com/v1/groups/:groupId/features/status
1599
+ * @summary Checks whether a group has ANY feature disabled (includes feature freezes and group lock).
1600
+ Used to display a banner on Creator Hub/Studio to inform group members that some features may not be available.
1601
+ * @param groupId
1602
+ */
1603
+ export const getGroupsGroupidFeaturesStatus = endpoint({
1604
+ method: "GET",
1605
+ path: "/v1/groups/:groupId/features/status",
1606
+ baseUrl: "https://groups.roblox.com",
1607
+ requestFormat: "json",
1608
+ serializationMethod: {
1609
+ groupId: {
1610
+ style: "simple",
1611
+ },
1612
+ },
1613
+ parameters: {
1614
+ groupId: z.number().int(),
1615
+ },
1616
+ response: z.object({ hasFeaturesBlocked: z.boolean() }),
1617
+ errors: [
1618
+ {
1619
+ status: 400,
1620
+ description: `1: Group is invalid or does not exist.`,
1621
+ },
1622
+ {
1623
+ status: 401,
1624
+ description: `0: Authorization has been denied for this request.`,
1625
+ },
1626
+ {
1627
+ status: 403,
1628
+ description: `23: Insufficient permissions to complete the request.
1629
+ 49: User is invalid or does not exist`,
1630
+ },
1631
+ ],
1632
+ });
1459
1633
  /**
1460
1634
  * @api GET https://groups.roblox.com/v1/groups/:groupId/join-requests
1461
1635
  * @summary Gets a page of Group Join Requests for a group.
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getGroupsGroupidSettings = exports.postGroupsGroupidRolesetsCreate = exports.patchGroupsGroupidRolesetsRolesetid = exports.deleteGroupsGroupidRolesetsRolesetid = exports.getGroupsGroupidRolesPermissions = exports.getGroupsGroupidRolesGuestPermissions = exports.getGroupsGroupidRolesRolesetidUsers = exports.patchGroupsGroupidRolesRolesetidPermissions = exports.getGroupsGroupidRolesRolesetidPermissions = exports.getGroupsGroupidRoles = exports.deleteGroupsGroupidRelationshipsGrouprelationshiptypeRequestsRelatedgroupid = exports.postGroupsGroupidRelationshipsGrouprelationshiptypeRequestsRelatedgroupid = exports.deleteGroupsGroupidRelationshipsGrouprelationshiptypeRequests = exports.postGroupsGroupidRelationshipsGrouprelationshiptypeRequests = exports.getGroupsGroupidRelationshipsGrouprelationshiptypeRequests = exports.deleteGroupsGroupidRelationshipsGrouprelationshiptypeRelatedgroupid = exports.postGroupsGroupidRelationshipsGrouprelationshiptypeRelatedgroupid = exports.getGroupsGroupidRelationshipsGrouprelationshiptype = exports.postGroupsGroupidPayoutsRecurring = exports.postGroupsGroupidPayouts = exports.getGroupsGroupidPayouts = exports.getGroupsGroupidPayoutRestriction = exports.patchGroupsGroupidNotificationPreference = exports.getGroupsGroupidNameHistory = exports.patchGroupsGroupidName = exports.getGroupsGroupidMembership = exports.deleteGroupsGroupidJoinRequestsUsersUserid = exports.postGroupsGroupidJoinRequestsUsersUserid = exports.getGroupsGroupidJoinRequestsUsersUserid = exports.deleteGroupsGroupidJoinRequests = exports.postGroupsGroupidJoinRequests = exports.getGroupsGroupidJoinRequests = exports.getGroupsGroupidEmotes = exports.patchGroupsGroupidDescription = exports.getGroupsGroupidConfiguration = exports.postGroupsGroupidClaimOwnership = exports.postGroupsGroupidChangeOwner = exports.patchGroupsGroupidBlockedKeywordsKeywordid = exports.deleteGroupsGroupidBlockedKeywordsKeywordid = exports.postGroupsGroupidBlockedKeywords = exports.getGroupsGroupidBlockedKeywords = exports.deleteGroupsGroupidBansUserid = exports.postGroupsGroupidBansUserid = exports.getGroupsGroupidBansUserid = exports.getGroupsGroupidBans = exports.getGroupsGroupidAuditLog = exports.getGroupsGroupid = exports.deleteFeaturedContentEvent = exports.postFeaturedContentEvent = exports.getFeaturedContentEvent = void 0;
4
- exports.getUsersUseridGroupsRoles = exports.getUsersUseridGroupsPrimaryRole = exports.getUsersUseridFriendsGroupsRoles = exports.deleteUserGroupsPrimary = exports.postUserGroupsPrimary = exports.getUserGroupsPending = exports.getRoles = exports.getGroupsSearchMetadata = exports.getGroupsSearchLookup = exports.getGroupsSearch = exports.postGroupsPolicies = exports.getGroupsMetadata = exports.patchGroupsIcon = exports.postGroupsCreate = exports.getGroupsConfigurationMetadata = exports.deleteGroupsGroupidWallUsersUseridPosts = exports.postGroupsGroupidWallSubscribe = exports.deleteGroupsGroupidWallPostsPostid = exports.postGroupsGroupidWallPosts = exports.getGroupsGroupidWallPosts = exports.getGroupsGroupidUsersUseridPermissions = exports.patchGroupsGroupidUsersUserid = exports.deleteGroupsGroupidUsersUserid = exports.postGroupsGroupidUsers = exports.getGroupsGroupidUsers = exports.patchGroupsGroupidStatus = exports.patchGroupsGroupidSocialLinksSociallinkid = exports.deleteGroupsGroupidSocialLinksSociallinkid = exports.postGroupsGroupidSocialLinks = exports.getGroupsGroupidSocialLinks = exports.patchGroupsGroupidSettings = void 0;
3
+ exports.deleteGroupsGroupidRolesetsRolesetid = exports.getGroupsGroupidRolesPermissions = exports.getGroupsGroupidRolesGuestPermissions = exports.getGroupsGroupidRolesRolesetidUsers = exports.patchGroupsGroupidRolesRolesetidPermissions = exports.getGroupsGroupidRolesRolesetidPermissions = exports.getGroupsGroupidRoles = exports.deleteGroupsGroupidRelationshipsGrouprelationshiptypeRequestsRelatedgroupid = exports.postGroupsGroupidRelationshipsGrouprelationshiptypeRequestsRelatedgroupid = exports.deleteGroupsGroupidRelationshipsGrouprelationshiptypeRequests = exports.postGroupsGroupidRelationshipsGrouprelationshiptypeRequests = exports.getGroupsGroupidRelationshipsGrouprelationshiptypeRequests = exports.deleteGroupsGroupidRelationshipsGrouprelationshiptypeRelatedgroupid = exports.postGroupsGroupidRelationshipsGrouprelationshiptypeRelatedgroupid = exports.getGroupsGroupidRelationshipsGrouprelationshiptype = exports.postGroupsGroupidPayoutsRecurring = exports.postGroupsGroupidPayouts = exports.getGroupsGroupidPayouts = exports.getGroupsGroupidPayoutRestriction = exports.patchGroupsGroupidNotificationPreference = exports.getGroupsGroupidNameHistory = exports.patchGroupsGroupidName = exports.getGroupsGroupidMembership = exports.deleteGroupsGroupidJoinRequestsUsersUserid = exports.postGroupsGroupidJoinRequestsUsersUserid = exports.getGroupsGroupidJoinRequestsUsersUserid = exports.deleteGroupsGroupidJoinRequests = exports.postGroupsGroupidJoinRequests = exports.getGroupsGroupidJoinRequests = exports.getGroupsGroupidFeaturesStatus = exports.patchGroupsGroupidFeatures = exports.getGroupsGroupidFeatures = exports.getGroupsGroupidEmotes = exports.patchGroupsGroupidDescription = exports.getGroupsGroupidConfiguration = exports.postGroupsGroupidClaimOwnership = exports.postGroupsGroupidChangeOwner = exports.patchGroupsGroupidBlockedKeywordsKeywordid = exports.deleteGroupsGroupidBlockedKeywordsKeywordid = exports.postGroupsGroupidBlockedKeywords = exports.getGroupsGroupidBlockedKeywords = exports.deleteGroupsGroupidBansUserid = exports.postGroupsGroupidBansUserid = exports.getGroupsGroupidBansUserid = exports.getGroupsGroupidBans = exports.getGroupsGroupidAuditLog = exports.getGroupsGroupid = exports.deleteFeaturedContentEvent = exports.postFeaturedContentEvent = exports.getFeaturedContentEvent = void 0;
4
+ exports.getUsersUseridGroupsRoles = exports.getUsersUseridGroupsPrimaryRole = exports.getUsersUseridFriendsGroupsRoles = exports.deleteUserGroupsPrimary = exports.postUserGroupsPrimary = exports.getUserGroupsPending = exports.getRoles = exports.getGroupsSearchMetadata = exports.getGroupsSearchLookup = exports.getGroupsSearch = exports.postGroupsPolicies = exports.getGroupsMetadata = exports.patchGroupsIcon = exports.postGroupsCreate = exports.getGroupsConfigurationMetadata = exports.deleteGroupsGroupidWallUsersUseridPosts = exports.postGroupsGroupidWallSubscribe = exports.deleteGroupsGroupidWallPostsPostid = exports.postGroupsGroupidWallPosts = exports.getGroupsGroupidWallPosts = exports.getGroupsGroupidUsersUseridPermissions = exports.patchGroupsGroupidUsersUserid = exports.deleteGroupsGroupidUsersUserid = exports.postGroupsGroupidUsers = exports.getGroupsGroupidUsers = exports.patchGroupsGroupidStatus = exports.patchGroupsGroupidSocialLinksSociallinkid = exports.deleteGroupsGroupidSocialLinksSociallinkid = exports.postGroupsGroupidSocialLinks = exports.getGroupsGroupidSocialLinks = exports.patchGroupsGroupidSettings = exports.getGroupsGroupidSettings = exports.postGroupsGroupidRolesetsCreate = exports.patchGroupsGroupidRolesetsRolesetid = void 0;
5
5
  const zod_1 = require("zod");
6
6
  const __1 = require("..");
7
7
  const Roblox_Groups_Client_GroupFeaturedContentResponse = zod_1.z.object({
@@ -42,6 +42,25 @@ const Roblox_Groups_Api_GroupRoleResponse = zod_1.z.object({
42
42
  rank: zod_1.z.number().int(),
43
43
  memberCount: zod_1.z.number().int(),
44
44
  isBase: zod_1.z.boolean(),
45
+ color: zod_1.z.enum([
46
+ 'Invalid',
47
+ 'Blue',
48
+ 'Green',
49
+ 'Purple',
50
+ 'Yellow',
51
+ 'Orange',
52
+ 'Red',
53
+ 'Magenta',
54
+ 'Teal',
55
+ 'Turquoise',
56
+ 'Rust',
57
+ 'Pistachio',
58
+ 'Midnight',
59
+ 'Lavender',
60
+ 'Pink',
61
+ 'Crimson',
62
+ 'Plum',
63
+ ]),
45
64
  });
46
65
  const Roblox_Groups_Api_UserGroupRoleResponse = zod_1.z.object({
47
66
  user: Roblox_Groups_Api_Models_Response_UserModel,
@@ -109,6 +128,24 @@ const Roblox_Groups_Client_EmoteSetModel = zod_1.z.object({
109
128
  const Roblox_Groups_Client_GetGroupEmoteSetsResponse = zod_1.z.object({
110
129
  emoteSets: zod_1.z.array(Roblox_Groups_Client_EmoteSetModel),
111
130
  });
131
+ const Roblox_Groups_Api_GroupFeatureResponse = zod_1.z.object({
132
+ feature: zod_1.z.enum(['Payouts', 'ContentUpload', 'GroupOwnershipTransfer', 'GameOwnershipTransfer']),
133
+ isFeatureBlocked: zod_1.z.boolean(),
134
+ expiration: zod_1.z.string().datetime({ offset: true }),
135
+ });
136
+ const Roblox_Groups_Api_GetGroupFeaturesResponse = zod_1.z.object({
137
+ isLocked: zod_1.z.boolean(),
138
+ features: zod_1.z.array(Roblox_Groups_Api_GroupFeatureResponse),
139
+ });
140
+ const Roblox_Groups_Api_SetFeaturesRequestModel = zod_1.z.object({
141
+ Features: zod_1.z.object({}),
142
+ });
143
+ const Roblox_Groups_Api_SetFeaturesResponseModel = zod_1.z.object({
144
+ Updated: zod_1.z.boolean(),
145
+ });
146
+ const Roblox_Groups_Api_HasGroupFeaturesBlockedResponse = zod_1.z.object({
147
+ hasFeaturesBlocked: zod_1.z.boolean(),
148
+ });
112
149
  const Roblox_Groups_Api_GroupJoinRequestResponse = zod_1.z.object({
113
150
  requester: Roblox_Groups_Api_Models_Response_UserModel,
114
151
  created: zod_1.z.string().datetime({ offset: true }),
@@ -153,6 +190,7 @@ const Roblox_Groups_Api_GroupManagementPermissionsModel = zod_1.z.object({
153
190
  manageClan: zod_1.z.boolean(),
154
191
  viewAuditLogs: zod_1.z.boolean(),
155
192
  bypassSlowmode: zod_1.z.boolean(),
193
+ viewCommunityAnalytics: zod_1.z.boolean(),
156
194
  });
157
195
  const Roblox_Groups_Api_GroupEconomyPermissionsModel = zod_1.z.object({
158
196
  spendGroupFunds: zod_1.z.boolean(),
@@ -459,6 +497,25 @@ const Roblox_Groups_Api_GroupRoleDetailResponse = zod_1.z.object({
459
497
  rank: zod_1.z.number().int(),
460
498
  memberCount: zod_1.z.number().int(),
461
499
  isBase: zod_1.z.boolean(),
500
+ color: zod_1.z.enum([
501
+ 'Invalid',
502
+ 'Blue',
503
+ 'Green',
504
+ 'Purple',
505
+ 'Yellow',
506
+ 'Orange',
507
+ 'Red',
508
+ 'Magenta',
509
+ 'Teal',
510
+ 'Turquoise',
511
+ 'Rust',
512
+ 'Pistachio',
513
+ 'Midnight',
514
+ 'Lavender',
515
+ 'Pink',
516
+ 'Crimson',
517
+ 'Plum',
518
+ ]),
462
519
  });
463
520
  const Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Groups_Api_GroupRoleDetailResponse_ = zod_1.z.object({
464
521
  data: zod_1.z.array(Roblox_Groups_Api_GroupRoleDetailResponse),
@@ -554,6 +611,7 @@ const Roblox_Groups_Api_Models_Request_UpdateRoleSetRequest = zod_1.z.object({
554
611
  name: zod_1.z.string(),
555
612
  description: zod_1.z.string(),
556
613
  rank: zod_1.z.number().int(),
614
+ color: zod_1.z.number().int(),
557
615
  });
558
616
  const Roblox_Groups_Api_PostGroupStatusRequest = zod_1.z.object({
559
617
  message: zod_1.z.string(),
@@ -1427,6 +1485,117 @@ exports.getGroupsGroupidEmotes = (0, __1.endpoint)({
1427
1485
  response: Roblox_Groups_Client_GetGroupEmoteSetsResponse,
1428
1486
  errors: [],
1429
1487
  });
1488
+ /**
1489
+ * @api GET https://groups.roblox.com/v1/groups/:groupId/features
1490
+ * @summary Gets the freeze status of all features and the lock status for a group.
1491
+ * @param groupId
1492
+ */
1493
+ exports.getGroupsGroupidFeatures = (0, __1.endpoint)({
1494
+ method: 'GET',
1495
+ path: '/v1/groups/:groupId/features',
1496
+ baseUrl: 'https://groups.roblox.com',
1497
+ requestFormat: 'json',
1498
+ serializationMethod: {
1499
+ groupId: {
1500
+ style: 'simple',
1501
+ },
1502
+ },
1503
+ parameters: {
1504
+ groupId: zod_1.z.number().int(),
1505
+ },
1506
+ response: Roblox_Groups_Api_GetGroupFeaturesResponse,
1507
+ errors: [
1508
+ {
1509
+ status: 400,
1510
+ description: `1: Group is invalid or does not exist.`,
1511
+ },
1512
+ {
1513
+ status: 401,
1514
+ description: `0: Authorization has been denied for this request.`,
1515
+ },
1516
+ {
1517
+ status: 403,
1518
+ description: `23: Insufficient permissions to complete the request.
1519
+ 49: User is invalid or does not exist`,
1520
+ },
1521
+ ],
1522
+ });
1523
+ /**
1524
+ * @api PATCH https://groups.roblox.com/v1/groups/:groupId/features
1525
+ * @summary Sets the desired status of group features.
1526
+ Currently only removes active freezes for features set to Roblox.Groups.Api.FeatureStatus.On.
1527
+ * @param body
1528
+ * @param groupId
1529
+ */
1530
+ exports.patchGroupsGroupidFeatures = (0, __1.endpoint)({
1531
+ method: 'PATCH',
1532
+ path: '/v1/groups/:groupId/features',
1533
+ baseUrl: 'https://groups.roblox.com',
1534
+ requestFormat: 'json',
1535
+ serializationMethod: {
1536
+ body: {},
1537
+ groupId: {
1538
+ style: 'simple',
1539
+ },
1540
+ },
1541
+ parameters: {
1542
+ groupId: zod_1.z.number().int(),
1543
+ },
1544
+ body: zod_1.z.object({ Features: zod_1.z.object({}) }),
1545
+ response: zod_1.z.object({ Updated: zod_1.z.boolean() }),
1546
+ errors: [
1547
+ {
1548
+ status: 400,
1549
+ description: `1: Group is invalid or does not exist.`,
1550
+ },
1551
+ {
1552
+ status: 401,
1553
+ description: `0: Authorization has been denied for this request.`,
1554
+ },
1555
+ {
1556
+ status: 403,
1557
+ description: `0: Token Validation Failed
1558
+ 23: Insufficient permissions to complete the request.
1559
+ 49: User is invalid or does not exist`,
1560
+ },
1561
+ ],
1562
+ });
1563
+ /**
1564
+ * @api GET https://groups.roblox.com/v1/groups/:groupId/features/status
1565
+ * @summary Checks whether a group has ANY feature disabled (includes feature freezes and group lock).
1566
+ Used to display a banner on Creator Hub/Studio to inform group members that some features may not be available.
1567
+ * @param groupId
1568
+ */
1569
+ exports.getGroupsGroupidFeaturesStatus = (0, __1.endpoint)({
1570
+ method: 'GET',
1571
+ path: '/v1/groups/:groupId/features/status',
1572
+ baseUrl: 'https://groups.roblox.com',
1573
+ requestFormat: 'json',
1574
+ serializationMethod: {
1575
+ groupId: {
1576
+ style: 'simple',
1577
+ },
1578
+ },
1579
+ parameters: {
1580
+ groupId: zod_1.z.number().int(),
1581
+ },
1582
+ response: zod_1.z.object({ hasFeaturesBlocked: zod_1.z.boolean() }),
1583
+ errors: [
1584
+ {
1585
+ status: 400,
1586
+ description: `1: Group is invalid or does not exist.`,
1587
+ },
1588
+ {
1589
+ status: 401,
1590
+ description: `0: Authorization has been denied for this request.`,
1591
+ },
1592
+ {
1593
+ status: 403,
1594
+ description: `23: Insufficient permissions to complete the request.
1595
+ 49: User is invalid or does not exist`,
1596
+ },
1597
+ ],
1598
+ });
1430
1599
  /**
1431
1600
  * @api GET https://groups.roblox.com/v1/groups/:groupId/join-requests
1432
1601
  * @summary Gets a page of Group Join Requests for a group.
@@ -108,6 +108,7 @@ const Roblox_Web_Responses_RelatedEntityTypeResponse_Roblox_Platform_Assets_Asse
108
108
  "FaceMakeup",
109
109
  "LipMakeup",
110
110
  "EyeMakeup",
111
+ "VoxelFragment",
111
112
  ]),
112
113
  name: z.string(),
113
114
  });
@@ -182,6 +183,25 @@ const Roblox_Groups_Api_GroupRoleResponse = z.object({
182
183
  rank: z.number().int(),
183
184
  memberCount: z.number().int(),
184
185
  isBase: z.boolean(),
186
+ color: z.enum([
187
+ "Invalid",
188
+ "Blue",
189
+ "Green",
190
+ "Purple",
191
+ "Yellow",
192
+ "Orange",
193
+ "Red",
194
+ "Magenta",
195
+ "Teal",
196
+ "Turquoise",
197
+ "Rust",
198
+ "Pistachio",
199
+ "Midnight",
200
+ "Lavender",
201
+ "Pink",
202
+ "Crimson",
203
+ "Plum",
204
+ ]),
185
205
  });
186
206
  const Roblox_Groups_Api_UserGroupRoleResponse = z.object({
187
207
  user: Roblox_Groups_Api_Models_Response_UserModel,
@@ -111,6 +111,7 @@ const Roblox_Web_Responses_RelatedEntityTypeResponse_Roblox_Platform_Assets_Asse
111
111
  'FaceMakeup',
112
112
  'LipMakeup',
113
113
  'EyeMakeup',
114
+ 'VoxelFragment',
114
115
  ]),
115
116
  name: zod_1.z.string(),
116
117
  });
@@ -172,6 +173,25 @@ const Roblox_Groups_Api_GroupRoleResponse = zod_1.z.object({
172
173
  rank: zod_1.z.number().int(),
173
174
  memberCount: zod_1.z.number().int(),
174
175
  isBase: zod_1.z.boolean(),
176
+ color: zod_1.z.enum([
177
+ 'Invalid',
178
+ 'Blue',
179
+ 'Green',
180
+ 'Purple',
181
+ 'Yellow',
182
+ 'Orange',
183
+ 'Red',
184
+ 'Magenta',
185
+ 'Teal',
186
+ 'Turquoise',
187
+ 'Rust',
188
+ 'Pistachio',
189
+ 'Midnight',
190
+ 'Lavender',
191
+ 'Pink',
192
+ 'Crimson',
193
+ 'Plum',
194
+ ]),
175
195
  });
176
196
  const Roblox_Groups_Api_UserGroupRoleResponse = zod_1.z.object({
177
197
  user: Roblox_Groups_Api_Models_Response_UserModel,
package/lib/index.js CHANGED
@@ -695,14 +695,38 @@ function changeHBAKeys(keys) {
695
695
  }
696
696
  async function handleRetryFetch(url, requestOptions, retries, retryDelay, body, method) {
697
697
  let response = undefined;
698
- while (response === undefined) {
698
+ while (true) {
699
699
  try {
700
700
  response = await fetch(url, {
701
701
  method,
702
702
  body,
703
703
  ...requestOptions,
704
704
  });
705
- break;
705
+ const retryable = response.status === 429 ||
706
+ response.status === 500 ||
707
+ response.status === 502 ||
708
+ response.status === 503 ||
709
+ response.status === 504;
710
+ if (retryable && retries > 0) {
711
+ retries--;
712
+ const retryAfterHeader = response.headers.get('retry-after');
713
+ let delay = retryDelay;
714
+ if (retryAfterHeader) {
715
+ const secs = Number(retryAfterHeader);
716
+ if (Number.isFinite(secs) && secs > 0) {
717
+ delay = secs * 1000;
718
+ }
719
+ else {
720
+ const dateMs = Date.parse(retryAfterHeader);
721
+ if (Number.isFinite(dateMs)) {
722
+ delay = Math.max(0, dateMs - Date.now());
723
+ }
724
+ }
725
+ }
726
+ await new Promise((resolve) => setTimeout(resolve, delay));
727
+ continue;
728
+ }
729
+ return response;
706
730
  }
707
731
  catch (error) {
708
732
  if (retries <= 0) {
@@ -712,7 +736,6 @@ async function handleRetryFetch(url, requestOptions, retries, retryDelay, body,
712
736
  await new Promise((resolve) => setTimeout(resolve, retryDelay));
713
737
  }
714
738
  }
715
- return response;
716
739
  }
717
740
  const localStorageCache = new cache_1.Cache(new cache_1.LocalStorageStore());
718
741
  const chromeStorageCache = new cache_1.Cache(new cache_1.ChromeStore());
@@ -478,13 +478,15 @@ export declare const getCloudV2GroupsGroupIdMemberships: import("../..").Endpoin
478
478
  updateTime: string;
479
479
  user: string;
480
480
  role: string;
481
+ roles: string[];
481
482
  }[];
482
483
  nextPageToken: string;
483
484
  }, undefined>;
484
485
  /**
485
486
  * `BETA`
486
487
  *
487
- * Updates the group membership for a particular group member. This action
488
+ * **Deprecated.** Use AssignGroupRole and UnassignGroupRole instead.
489
+ Updates the group membership for a particular group member. This action
488
490
  requires the requester to be able to manage lower ranked members. Guest or
489
491
  Owner ranks cannot be assigned, and a requester cannot change their own
490
492
  rank.
@@ -505,12 +507,66 @@ export declare const patchCloudV2GroupsGroupIdMembershipsMembershipId: import(".
505
507
  updateTime: string;
506
508
  user: string;
507
509
  role: string;
510
+ roles: string[];
508
511
  }, {
509
512
  path?: string | undefined;
510
513
  createTime?: string | undefined;
511
514
  updateTime?: string | undefined;
512
515
  user?: string | undefined;
513
516
  role?: string | undefined;
517
+ roles?: string[] | undefined;
518
+ }>;
519
+ /**
520
+ * `BETA`
521
+ *
522
+ * Assigns a specific role to a user within a group. If the user already
523
+ holds the specified role, no action is taken.
524
+ *
525
+ * **Scopes:** `group:write`
526
+ * **Engine:** Usable with HttpService
527
+ *
528
+ * @param body
529
+ * @param group_id The group ID.
530
+ * @param membership_id The membership ID.
531
+ */
532
+ export declare const postCloudV2GroupsGroupIdMembershipsMembershipIdAssignRole: import("../..").EndpointGeneric<{
533
+ group_id: string;
534
+ membership_id: string;
535
+ }, {
536
+ path: string;
537
+ createTime: string;
538
+ updateTime: string;
539
+ user: string;
540
+ role: string;
541
+ roles: string[];
542
+ }, {
543
+ role: string;
544
+ }>;
545
+ /**
546
+ * `BETA`
547
+ *
548
+ * Unassigns a specific role from a user within a group. If the user does
549
+ not hold the specified role, no action is taken.
550
+ *
551
+ * **Scopes:** `group:write`
552
+ * **Engine:** Usable with HttpService
553
+ *
554
+ * @param body
555
+ * @param group_id The group ID.
556
+ * @param membership_id The membership ID.
557
+ */
558
+ export declare const postCloudV2GroupsGroupIdMembershipsMembershipIdUnassignRole: import("../..").EndpointGeneric<{
559
+ group_id: string;
560
+ membership_id: string;
561
+ }, {
562
+ path: string;
563
+ createTime: string;
564
+ updateTime: string;
565
+ user: string;
566
+ role: string;
567
+ roles: string[];
568
+ }, {
569
+ role: string;
514
570
  }>;
515
571
  /**
516
572
  * `BETA`
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCloudV2UniversesUniverseIdOrderedDataStoresOrderedDataStoreIdScopesScopeIdEntries = exports.patchCloudV2UniversesUniverseIdMemoryStoreSortedMapsSortedMapIdItemsItemId = exports.deleteCloudV2UniversesUniverseIdMemoryStoreSortedMapsSortedMapIdItemsItemId = exports.getCloudV2UniversesUniverseIdMemoryStoreSortedMapsSortedMapIdItemsItemId = exports.postCloudV2UniversesUniverseIdMemoryStoreSortedMapsSortedMapIdItems = exports.getCloudV2UniversesUniverseIdMemoryStoreSortedMapsSortedMapIdItems = exports.getCloudV2UniversesUniverseIdMemoryStoreQueuesQueueIdItemsRead = exports.postCloudV2UniversesUniverseIdMemoryStoreQueuesQueueIdItemsDiscard = exports.postCloudV2UniversesUniverseIdMemoryStoreQueuesQueueIdItems = exports.postCloudV2UniversesUniverseIdMemoryStoreFlush = exports.postCloudV2UniversesUniverseIdLuauExecutionSessionTaskBinaryInputs = exports.getCloudV2UniversesUniverseIdDataStoresDataStoreIdScopesScopeIdEntriesEntryIdListRevisions = exports.postCloudV2UniversesUniverseIdDataStoresDataStoreIdScopesScopeIdEntriesEntryIdIncrement = exports.patchCloudV2UniversesUniverseIdDataStoresDataStoreIdScopesScopeIdEntriesEntryId = exports.deleteCloudV2UniversesUniverseIdDataStoresDataStoreIdScopesScopeIdEntriesEntryId = exports.getCloudV2UniversesUniverseIdDataStoresDataStoreIdScopesScopeIdEntriesEntryId = exports.postCloudV2UniversesUniverseIdDataStoresDataStoreIdScopesScopeIdEntries = exports.getCloudV2UniversesUniverseIdDataStoresDataStoreIdScopesScopeIdEntries = exports.getCloudV2UniversesUniverseIdDataStoresDataStoreIdEntriesEntryIdListRevisions = exports.postCloudV2UniversesUniverseIdDataStoresDataStoreIdEntriesEntryIdIncrement = exports.patchCloudV2UniversesUniverseIdDataStoresDataStoreIdEntriesEntryId = exports.deleteCloudV2UniversesUniverseIdDataStoresDataStoreIdEntriesEntryId = exports.getCloudV2UniversesUniverseIdDataStoresDataStoreIdEntriesEntryId = exports.postCloudV2UniversesUniverseIdDataStoresDataStoreIdEntries = exports.getCloudV2UniversesUniverseIdDataStoresDataStoreIdEntries = exports.postCloudV2UniversesUniverseIdDataStoresDataStoreIdUndelete = exports.deleteCloudV2UniversesUniverseIdDataStoresDataStoreId = exports.postCloudV2UniversesUniverseIdDataStoresSnapshot = exports.getCloudV2UniversesUniverseIdDataStores = exports.postCloudV2UniversesUniverseIdTranslateText = exports.postCloudV2UniversesUniverseIdRestartServers = exports.postCloudV2UniversesUniverseIdPublishMessage = exports.postCloudV2UniversesUniverseIdGenerateSpeechAsset = exports.patchCloudV2UniversesUniverseId = exports.getCloudV2UniversesUniverseId = exports.getCloudV2GroupsGroupIdShout = exports.getCloudV2GroupsGroupIdRolesRoleId = exports.getCloudV2GroupsGroupIdRoles = exports.patchCloudV2GroupsGroupIdMembershipsMembershipId = exports.getCloudV2GroupsGroupIdMemberships = exports.postCloudV2GroupsGroupIdJoinRequestsJoinRequestIdDecline = exports.postCloudV2GroupsGroupIdJoinRequestsJoinRequestIdAccept = exports.getCloudV2GroupsGroupIdJoinRequests = exports.getCloudV2GroupsGroupIdForumCategoriesForumCategoryIdPostsPostIdComments = exports.getCloudV2GroupsGroupIdForumCategoriesForumCategoryIdPosts = exports.getCloudV2GroupsGroupIdForumCategories = exports.getCloudV2GroupsGroupId = exports.patchCloudV2CreatorStoreProductsCreatorStoreProductId = exports.getCloudV2CreatorStoreProductsCreatorStoreProductId = exports.postCloudV2CreatorStoreProducts = void 0;
4
- exports.postCloudV2UsersUserIdNotifications = exports.getCloudV2UsersUserIdInventoryItems = exports.getCloudV2UsersUserIdAssetQuotas = exports.getCloudV2UsersUserIdGenerateThumbnail = exports.getCloudV2UsersUserId = exports.patchCloudV2UniversesUniverseIdUserRestrictionsUserRestrictionId = exports.getCloudV2UniversesUniverseIdUserRestrictionsUserRestrictionId = exports.getCloudV2UniversesUniverseIdUserRestrictionsListLogs = exports.getCloudV2UniversesUniverseIdUserRestrictions = exports.getCloudV2UniversesUniverseIdSubscriptionProductsSubscriptionProductIdSubscriptionsSubscriptionId = exports.getCloudV2UniversesUniverseIdPlacesPlaceIdVersionsVersionIdLuauExecutionSessionsLuauExecutionSessionIdTasksTaskIdLogs = exports.getCloudV2UniversesUniverseIdPlacesPlaceIdVersionsVersionIdLuauExecutionSessionsLuauExecutionSessionIdTasksTaskId = exports.postCloudV2UniversesUniverseIdPlacesPlaceIdVersionsVersionIdLuauExecutionSessionTasks = exports.patchCloudV2UniversesUniverseIdPlacesPlaceIdUserRestrictionsUserRestrictionId = exports.getCloudV2UniversesUniverseIdPlacesPlaceIdUserRestrictionsUserRestrictionId = exports.getCloudV2UniversesUniverseIdPlacesPlaceIdUserRestrictions = exports.postCloudV2UniversesUniverseIdPlacesPlaceIdLuauExecutionSessionTasks = exports.getCloudV2UniversesUniverseIdPlacesPlaceIdInstancesInstanceIdListChildren = exports.patchCloudV2UniversesUniverseIdPlacesPlaceIdInstancesInstanceId = exports.getCloudV2UniversesUniverseIdPlacesPlaceIdInstancesInstanceId = exports.patchCloudV2UniversesUniverseIdPlacesPlaceId = exports.getCloudV2UniversesUniverseIdPlacesPlaceId = exports.postCloudV2UniversesUniverseIdOrderedDataStoresOrderedDataStoreIdScopesScopeIdEntriesEntryIdIncrement = exports.patchCloudV2UniversesUniverseIdOrderedDataStoresOrderedDataStoreIdScopesScopeIdEntriesEntryId = exports.deleteCloudV2UniversesUniverseIdOrderedDataStoresOrderedDataStoreIdScopesScopeIdEntriesEntryId = exports.getCloudV2UniversesUniverseIdOrderedDataStoresOrderedDataStoreIdScopesScopeIdEntriesEntryId = exports.postCloudV2UniversesUniverseIdOrderedDataStoresOrderedDataStoreIdScopesScopeIdEntries = void 0;
3
+ exports.deleteCloudV2UniversesUniverseIdMemoryStoreSortedMapsSortedMapIdItemsItemId = exports.getCloudV2UniversesUniverseIdMemoryStoreSortedMapsSortedMapIdItemsItemId = exports.postCloudV2UniversesUniverseIdMemoryStoreSortedMapsSortedMapIdItems = exports.getCloudV2UniversesUniverseIdMemoryStoreSortedMapsSortedMapIdItems = exports.getCloudV2UniversesUniverseIdMemoryStoreQueuesQueueIdItemsRead = exports.postCloudV2UniversesUniverseIdMemoryStoreQueuesQueueIdItemsDiscard = exports.postCloudV2UniversesUniverseIdMemoryStoreQueuesQueueIdItems = exports.postCloudV2UniversesUniverseIdMemoryStoreFlush = exports.postCloudV2UniversesUniverseIdLuauExecutionSessionTaskBinaryInputs = exports.getCloudV2UniversesUniverseIdDataStoresDataStoreIdScopesScopeIdEntriesEntryIdListRevisions = exports.postCloudV2UniversesUniverseIdDataStoresDataStoreIdScopesScopeIdEntriesEntryIdIncrement = exports.patchCloudV2UniversesUniverseIdDataStoresDataStoreIdScopesScopeIdEntriesEntryId = exports.deleteCloudV2UniversesUniverseIdDataStoresDataStoreIdScopesScopeIdEntriesEntryId = exports.getCloudV2UniversesUniverseIdDataStoresDataStoreIdScopesScopeIdEntriesEntryId = exports.postCloudV2UniversesUniverseIdDataStoresDataStoreIdScopesScopeIdEntries = exports.getCloudV2UniversesUniverseIdDataStoresDataStoreIdScopesScopeIdEntries = exports.getCloudV2UniversesUniverseIdDataStoresDataStoreIdEntriesEntryIdListRevisions = exports.postCloudV2UniversesUniverseIdDataStoresDataStoreIdEntriesEntryIdIncrement = exports.patchCloudV2UniversesUniverseIdDataStoresDataStoreIdEntriesEntryId = exports.deleteCloudV2UniversesUniverseIdDataStoresDataStoreIdEntriesEntryId = exports.getCloudV2UniversesUniverseIdDataStoresDataStoreIdEntriesEntryId = exports.postCloudV2UniversesUniverseIdDataStoresDataStoreIdEntries = exports.getCloudV2UniversesUniverseIdDataStoresDataStoreIdEntries = exports.postCloudV2UniversesUniverseIdDataStoresDataStoreIdUndelete = exports.deleteCloudV2UniversesUniverseIdDataStoresDataStoreId = exports.postCloudV2UniversesUniverseIdDataStoresSnapshot = exports.getCloudV2UniversesUniverseIdDataStores = exports.postCloudV2UniversesUniverseIdTranslateText = exports.postCloudV2UniversesUniverseIdRestartServers = exports.postCloudV2UniversesUniverseIdPublishMessage = exports.postCloudV2UniversesUniverseIdGenerateSpeechAsset = exports.patchCloudV2UniversesUniverseId = exports.getCloudV2UniversesUniverseId = exports.getCloudV2GroupsGroupIdShout = exports.getCloudV2GroupsGroupIdRolesRoleId = exports.getCloudV2GroupsGroupIdRoles = exports.postCloudV2GroupsGroupIdMembershipsMembershipIdUnassignRole = exports.postCloudV2GroupsGroupIdMembershipsMembershipIdAssignRole = exports.patchCloudV2GroupsGroupIdMembershipsMembershipId = exports.getCloudV2GroupsGroupIdMemberships = exports.postCloudV2GroupsGroupIdJoinRequestsJoinRequestIdDecline = exports.postCloudV2GroupsGroupIdJoinRequestsJoinRequestIdAccept = exports.getCloudV2GroupsGroupIdJoinRequests = exports.getCloudV2GroupsGroupIdForumCategoriesForumCategoryIdPostsPostIdComments = exports.getCloudV2GroupsGroupIdForumCategoriesForumCategoryIdPosts = exports.getCloudV2GroupsGroupIdForumCategories = exports.getCloudV2GroupsGroupId = exports.patchCloudV2CreatorStoreProductsCreatorStoreProductId = exports.getCloudV2CreatorStoreProductsCreatorStoreProductId = exports.postCloudV2CreatorStoreProducts = void 0;
4
+ exports.postCloudV2UsersUserIdNotifications = exports.getCloudV2UsersUserIdInventoryItems = exports.getCloudV2UsersUserIdAssetQuotas = exports.getCloudV2UsersUserIdGenerateThumbnail = exports.getCloudV2UsersUserId = exports.patchCloudV2UniversesUniverseIdUserRestrictionsUserRestrictionId = exports.getCloudV2UniversesUniverseIdUserRestrictionsUserRestrictionId = exports.getCloudV2UniversesUniverseIdUserRestrictionsListLogs = exports.getCloudV2UniversesUniverseIdUserRestrictions = exports.getCloudV2UniversesUniverseIdSubscriptionProductsSubscriptionProductIdSubscriptionsSubscriptionId = exports.getCloudV2UniversesUniverseIdPlacesPlaceIdVersionsVersionIdLuauExecutionSessionsLuauExecutionSessionIdTasksTaskIdLogs = exports.getCloudV2UniversesUniverseIdPlacesPlaceIdVersionsVersionIdLuauExecutionSessionsLuauExecutionSessionIdTasksTaskId = exports.postCloudV2UniversesUniverseIdPlacesPlaceIdVersionsVersionIdLuauExecutionSessionTasks = exports.patchCloudV2UniversesUniverseIdPlacesPlaceIdUserRestrictionsUserRestrictionId = exports.getCloudV2UniversesUniverseIdPlacesPlaceIdUserRestrictionsUserRestrictionId = exports.getCloudV2UniversesUniverseIdPlacesPlaceIdUserRestrictions = exports.postCloudV2UniversesUniverseIdPlacesPlaceIdLuauExecutionSessionTasks = exports.getCloudV2UniversesUniverseIdPlacesPlaceIdInstancesInstanceIdListChildren = exports.patchCloudV2UniversesUniverseIdPlacesPlaceIdInstancesInstanceId = exports.getCloudV2UniversesUniverseIdPlacesPlaceIdInstancesInstanceId = exports.patchCloudV2UniversesUniverseIdPlacesPlaceId = exports.getCloudV2UniversesUniverseIdPlacesPlaceId = exports.postCloudV2UniversesUniverseIdOrderedDataStoresOrderedDataStoreIdScopesScopeIdEntriesEntryIdIncrement = exports.patchCloudV2UniversesUniverseIdOrderedDataStoresOrderedDataStoreIdScopesScopeIdEntriesEntryId = exports.deleteCloudV2UniversesUniverseIdOrderedDataStoresOrderedDataStoreIdScopesScopeIdEntriesEntryId = exports.getCloudV2UniversesUniverseIdOrderedDataStoresOrderedDataStoreIdScopesScopeIdEntriesEntryId = exports.postCloudV2UniversesUniverseIdOrderedDataStoresOrderedDataStoreIdScopesScopeIdEntries = exports.getCloudV2UniversesUniverseIdOrderedDataStoresOrderedDataStoreIdScopesScopeIdEntries = exports.patchCloudV2UniversesUniverseIdMemoryStoreSortedMapsSortedMapIdItemsItemId = void 0;
5
5
  const zod_1 = require("zod");
6
6
  const __1 = require("../..");
7
7
  const Decimal = zod_1.z.object({
@@ -114,11 +114,14 @@ const GroupMembership = zod_1.z.object({
114
114
  updateTime: zod_1.z.string().datetime({ offset: true }),
115
115
  user: zod_1.z.string(),
116
116
  role: zod_1.z.string(),
117
+ roles: zod_1.z.array(zod_1.z.string()),
117
118
  });
118
119
  const ListGroupMembershipsResponse = zod_1.z.object({
119
120
  groupMemberships: zod_1.z.array(GroupMembership),
120
121
  nextPageToken: zod_1.z.string(),
121
122
  });
123
+ const AssignRoleGroupMembershipRequest = zod_1.z.object({ role: zod_1.z.string() });
124
+ const UnassignRoleGroupMembershipRequest = zod_1.z.object({ role: zod_1.z.string() });
122
125
  const GroupRole_RolePermissions = zod_1.z.object({
123
126
  viewWallPosts: zod_1.z.boolean(),
124
127
  createWallPosts: zod_1.z.boolean(),
@@ -1127,7 +1130,8 @@ exports.getCloudV2GroupsGroupIdMemberships = (0, __1.endpoint)({
1127
1130
  /**
1128
1131
  * `BETA`
1129
1132
  *
1130
- * Updates the group membership for a particular group member. This action
1133
+ * **Deprecated.** Use AssignGroupRole and UnassignGroupRole instead.
1134
+ Updates the group membership for a particular group member. This action
1131
1135
  requires the requester to be able to manage lower ranked members. Guest or
1132
1136
  Owner ranks cannot be assigned, and a requester cannot change their own
1133
1137
  rank.
@@ -1158,6 +1162,70 @@ exports.patchCloudV2GroupsGroupIdMembershipsMembershipId = (0, __1.endpoint)({
1158
1162
  response: GroupMembership,
1159
1163
  errors: [],
1160
1164
  });
1165
+ /**
1166
+ * `BETA`
1167
+ *
1168
+ * Assigns a specific role to a user within a group. If the user already
1169
+ holds the specified role, no action is taken.
1170
+ *
1171
+ * **Scopes:** `group:write`
1172
+ * **Engine:** Usable with HttpService
1173
+ *
1174
+ * @param body
1175
+ * @param group_id The group ID.
1176
+ * @param membership_id The membership ID.
1177
+ */
1178
+ exports.postCloudV2GroupsGroupIdMembershipsMembershipIdAssignRole = (0, __1.endpoint)({
1179
+ method: 'POST',
1180
+ path: '/cloud/v2/groups/:group_id/memberships/:membership_id:assignRole',
1181
+ baseUrl: 'https://apis.roblox.com',
1182
+ scopes: ['group:write'],
1183
+ requestFormat: 'json',
1184
+ serializationMethod: {
1185
+ body: {},
1186
+ group_id: {},
1187
+ membership_id: {},
1188
+ },
1189
+ parameters: {
1190
+ group_id: zod_1.z.string(),
1191
+ membership_id: zod_1.z.string(),
1192
+ },
1193
+ body: zod_1.z.object({ role: zod_1.z.string() }),
1194
+ response: GroupMembership,
1195
+ errors: [],
1196
+ });
1197
+ /**
1198
+ * `BETA`
1199
+ *
1200
+ * Unassigns a specific role from a user within a group. If the user does
1201
+ not hold the specified role, no action is taken.
1202
+ *
1203
+ * **Scopes:** `group:write`
1204
+ * **Engine:** Usable with HttpService
1205
+ *
1206
+ * @param body
1207
+ * @param group_id The group ID.
1208
+ * @param membership_id The membership ID.
1209
+ */
1210
+ exports.postCloudV2GroupsGroupIdMembershipsMembershipIdUnassignRole = (0, __1.endpoint)({
1211
+ method: 'POST',
1212
+ path: '/cloud/v2/groups/:group_id/memberships/:membership_id:unassignRole',
1213
+ baseUrl: 'https://apis.roblox.com',
1214
+ scopes: ['group:write'],
1215
+ requestFormat: 'json',
1216
+ serializationMethod: {
1217
+ body: {},
1218
+ group_id: {},
1219
+ membership_id: {},
1220
+ },
1221
+ parameters: {
1222
+ group_id: zod_1.z.string(),
1223
+ membership_id: zod_1.z.string(),
1224
+ },
1225
+ body: zod_1.z.object({ role: zod_1.z.string() }),
1226
+ response: GroupMembership,
1227
+ errors: [],
1228
+ });
1161
1229
  /**
1162
1230
  * `BETA`
1163
1231
  *
package/package.json CHANGED
@@ -1,64 +1,64 @@
1
- {
2
- "name": "rozod",
3
- "version": "6.5.1",
4
- "description": "A TypeScript wrapper for the Roblox API",
5
- "main": "lib/index.js",
6
- "types": "lib/index.d.ts",
7
- "scripts": {
8
- "test": "jest --config jestconfig.json",
9
- "build": "tsc && tsc --project tsconfig.declarations.json",
10
- "format": "prettier --write \"src/**/*.ts\"",
11
- "prepare": "npm run build",
12
- "prepublishOnly": "npm test",
13
- "version": "npm run format && git add -A src",
14
- "generate": "node ./zodios_endpoints.js",
15
- "docs": "cd docs && node scripts/generate-reference.mjs && bunx astro build",
16
- "docs:dev": "cd docs && node scripts/generate-reference.mjs && bunx astro dev",
17
- "docs:preview": "cd docs && bunx astro preview"
18
- },
19
- "author": "AlroviOfficial",
20
- "license": "ISC",
21
- "dependencies": {
22
- "parse-roblox-errors": "^1.1.11",
23
- "roblox-bat": "^0.6.2",
24
- "zod": "^4.0.16"
25
- },
26
- "repository": {
27
- "url": "https://github.com/AlroviOfficial/RoZod"
28
- },
29
- "bugs": {
30
- "url": "https://github.com/AlroviOfficial/RoZod/issues"
31
- },
32
- "devDependencies": {
33
- "@alexop/openapi-zod-client": "^1.11.2",
34
- "@apidevtools/swagger-parser": "^10.1.0",
35
- "@types/jest": "^29.5.13",
36
- "@types/node": "^20.13.1",
37
- "@typescript-eslint/eslint-plugin": "^8.7.0",
38
- "@typescript-eslint/parser": "^8.7.0",
39
- "@zodios/plugins": "^10.6.0",
40
- "eslint": "^9.11.1",
41
- "eslint-config-prettier": "^9.1.0",
42
- "eslint-plugin-jsdoc": "^50.3.0",
43
- "eslint-plugin-prefer-arrow": "^1.2.3",
44
- "eslint-plugin-react": "^7.37.0",
45
- "handlebars": "^4.7.8",
46
- "jest": "^29.7.0",
47
- "p-limit": "^6.1.0",
48
- "prettier": "^3.3.3",
49
- "swagger2openapi": "^7.0.8",
50
- "ts-jest": "^29.2.5",
51
- "typescript": "^5.6.2"
52
- },
53
- "keywords": [
54
- "roblox",
55
- "bot",
56
- "api",
57
- "roblox-api",
58
- "zod",
59
- "typescript"
60
- ],
61
- "files": [
62
- "lib/**/*"
63
- ]
64
- }
1
+ {
2
+ "name": "rozod",
3
+ "version": "6.6.0",
4
+ "description": "A TypeScript wrapper for the Roblox API",
5
+ "main": "lib/index.js",
6
+ "types": "lib/index.d.ts",
7
+ "scripts": {
8
+ "test": "jest --config jestconfig.json",
9
+ "build": "tsc && tsc --project tsconfig.declarations.json",
10
+ "format": "prettier --write \"src/**/*.ts\"",
11
+ "prepare": "npm run build",
12
+ "prepublishOnly": "npm test",
13
+ "version": "npm run format && git add -A src",
14
+ "generate": "node ./zodios_endpoints.js",
15
+ "docs": "cd docs && node scripts/generate-reference.mjs && bunx astro build",
16
+ "docs:dev": "cd docs && node scripts/generate-reference.mjs && bunx astro dev",
17
+ "docs:preview": "cd docs && bunx astro preview"
18
+ },
19
+ "author": "AlroviOfficial",
20
+ "license": "ISC",
21
+ "dependencies": {
22
+ "parse-roblox-errors": "^1.1.13",
23
+ "roblox-bat": "^0.6.3",
24
+ "zod": "^4.3.6"
25
+ },
26
+ "repository": {
27
+ "url": "https://github.com/AlroviOfficial/RoZod"
28
+ },
29
+ "bugs": {
30
+ "url": "https://github.com/AlroviOfficial/RoZod/issues"
31
+ },
32
+ "devDependencies": {
33
+ "@alexop/openapi-zod-client": "^1.11.2",
34
+ "@apidevtools/swagger-parser": "^10.1.1",
35
+ "@types/jest": "^29.5.14",
36
+ "@types/node": "^20.19.39",
37
+ "@typescript-eslint/eslint-plugin": "^8.58.0",
38
+ "@typescript-eslint/parser": "^8.58.0",
39
+ "@zodios/plugins": "^10.6.0",
40
+ "eslint": "^9.39.4",
41
+ "eslint-config-prettier": "^9.1.2",
42
+ "eslint-plugin-jsdoc": "^50.8.0",
43
+ "eslint-plugin-prefer-arrow": "^1.2.3",
44
+ "eslint-plugin-react": "^7.37.5",
45
+ "handlebars": "^4.7.9",
46
+ "jest": "^29.7.0",
47
+ "p-limit": "^6.2.0",
48
+ "prettier": "^3.8.1",
49
+ "swagger2openapi": "^7.0.8",
50
+ "ts-jest": "^29.4.9",
51
+ "typescript": "^5.9.3"
52
+ },
53
+ "keywords": [
54
+ "roblox",
55
+ "bot",
56
+ "api",
57
+ "roblox-api",
58
+ "zod",
59
+ "typescript"
60
+ ],
61
+ "files": [
62
+ "lib/**/*"
63
+ ]
64
+ }