rozod 4.4.2 → 4.5.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.
@@ -32,7 +32,6 @@ const Roblox_AccountInformation_Api_Models_MetadataResponse = z
32
32
  isPasswordRequiredForAgingDown: z.boolean(),
33
33
  shouldUsePersonaForIdVerification: z.boolean(),
34
34
  shouldDisplaySessionManagement: z.boolean(),
35
- shouldUseSecurityReactUI: z.boolean(),
36
35
  })
37
36
  .passthrough();
38
37
  const Roblox_AccountInformation_Api_Models_PhoneResponse = z
@@ -16,7 +16,7 @@ const Roblox_Authentication_Api_Models_CanSendCredentialsVerificationMessageResp
16
16
  .passthrough();
17
17
  const Roblox_Authentication_Api_Models_SendCredentialsVerificationMessageRequest = z
18
18
  .object({
19
- credentialType: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]),
19
+ credentialType: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5)]),
20
20
  credentialValue: z.string(),
21
21
  password: z.string(),
22
22
  })
@@ -78,7 +78,7 @@ const Roblox_Web_Responses_Users_SkinnyUserResponse = z
78
78
  .passthrough();
79
79
  const Roblox_Authentication_Api_Models_TwoStepVerificationSentResponse = z
80
80
  .object({
81
- mediaType: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]),
81
+ mediaType: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5)]),
82
82
  ticket: z.string(),
83
83
  })
84
84
  .passthrough();
@@ -153,6 +153,27 @@ const Roblox_Authentication_Api_Models_Request_ExternalLoginRequest = z
153
153
  additionalInfoPayload: z.record(z.object({}).passthrough()),
154
154
  })
155
155
  .passthrough();
156
+ const Roblox_Authentication_Api_Models_Request_ExternalLoginAndLinkRequest = z
157
+ .object({
158
+ ctype: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5)]),
159
+ cvalue: z.string(),
160
+ password: z.string(),
161
+ authenticationProof: z.string(),
162
+ identityProvider: z.union([z.literal(0), z.literal(1), z.literal(2)]),
163
+ additionalInfoPayload: z.record(z.object({}).passthrough()),
164
+ })
165
+ .passthrough();
166
+ const Roblox_Authentication_Api_Models_Request_ExternalSignupRequest = z
167
+ .object({
168
+ username: z.string(),
169
+ password: z.string(),
170
+ birthday: z.string().datetime({ offset: true }),
171
+ locale: z.string(),
172
+ authenticationProof: z.string(),
173
+ identityProvider: z.union([z.literal(0), z.literal(1), z.literal(2)]),
174
+ additionalInfoPayload: z.record(z.object({}).passthrough()),
175
+ })
176
+ .passthrough();
156
177
  const Roblox_Authentication_Api_Models_Request_ExternalUnlinkRequest = z
157
178
  .object({
158
179
  identityProvider: z.union([z.literal(0), z.literal(1), z.literal(2)]),
@@ -172,7 +193,7 @@ const Roblox_Authentication_Api_Models_Request_SecureAuthenticationIntentModel =
172
193
  .passthrough();
173
194
  const Roblox_Authentication_Api_Models_LoginRequest = z
174
195
  .object({
175
- ctype: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]),
196
+ ctype: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5)]),
176
197
  cvalue: z.string(),
177
198
  password: z.string(),
178
199
  userId: z.number().int(),
@@ -186,6 +207,28 @@ const Roblox_Authentication_Api_Models_LoginRequest = z
186
207
  challengeId: z.string(),
187
208
  })
188
209
  .passthrough();
210
+ const Roblox_Authentication_Api_Models_Request_DeletePasskeysRequest = z
211
+ .object({ credentialNicknames: z.array(z.string()) })
212
+ .passthrough();
213
+ const Roblox_Authentication_Api_Models_Request_FinishPasskeyRegistrationRequest = z
214
+ .object({
215
+ sessionId: z.string(),
216
+ credentialNickname: z.string(),
217
+ attestationResponse: z.string(),
218
+ })
219
+ .passthrough();
220
+ const Roblox_Authentication_Api_Models_Response_PasskeyCredential = z.object({ nickname: z.string() }).passthrough();
221
+ const Roblox_Authentication_Api_Models_Response_ListPasskeyCredentialResponse = z
222
+ .object({
223
+ credentials: z.array(Roblox_Authentication_Api_Models_Response_PasskeyCredential),
224
+ })
225
+ .passthrough();
226
+ const Roblox_Authentication_Api_Models_Response_StartAuthenticationResponse = z
227
+ .object({ authenticationOptions: z.string(), sessionId: z.string() })
228
+ .passthrough();
229
+ const Roblox_Authentication_Api_Models_Response_StartPasskeyRegistrationResponse = z
230
+ .object({ creationOptions: z.string(), sessionId: z.string() })
231
+ .passthrough();
189
232
  const Roblox_Authentication_Api_Models_ReferralDataModel = z
190
233
  .object({
191
234
  acquisitionTime: z.string().datetime({ offset: true }),
@@ -335,10 +378,18 @@ const schemas = {
335
378
  Roblox_Authentication_Api_Models_AccountPinResponse,
336
379
  Roblox_Web_WebAPI_ApiEmptyResponseModel,
337
380
  Roblox_Authentication_Api_Models_Request_ExternalLoginRequest,
381
+ Roblox_Authentication_Api_Models_Request_ExternalLoginAndLinkRequest,
382
+ Roblox_Authentication_Api_Models_Request_ExternalSignupRequest,
338
383
  Roblox_Authentication_Api_Models_Request_ExternalUnlinkRequest,
339
384
  Roblox_Authentication_Api_Models_Request_IdentityVerificationLoginRequest,
340
385
  Roblox_Authentication_Api_Models_Request_SecureAuthenticationIntentModel,
341
386
  Roblox_Authentication_Api_Models_LoginRequest,
387
+ Roblox_Authentication_Api_Models_Request_DeletePasskeysRequest,
388
+ Roblox_Authentication_Api_Models_Request_FinishPasskeyRegistrationRequest,
389
+ Roblox_Authentication_Api_Models_Response_PasskeyCredential,
390
+ Roblox_Authentication_Api_Models_Response_ListPasskeyCredentialResponse,
391
+ Roblox_Authentication_Api_Models_Response_StartAuthenticationResponse,
392
+ Roblox_Authentication_Api_Models_Response_StartPasskeyRegistrationResponse,
342
393
  Roblox_Authentication_Api_Models_ReferralDataModel,
343
394
  Roblox_Authentication_Api_Models_Request_OtpSessionModel,
344
395
  Roblox_Authentication_Api_Models_SignupRequest,
@@ -540,7 +591,7 @@ export const getCredentialsVerification = endpoint({
540
591
  },
541
592
  },
542
593
  parameters: {
543
- CredentialType: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]),
594
+ CredentialType: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5)]),
544
595
  CredentialValue: z.string(),
545
596
  Password: z.string(),
546
597
  },
@@ -673,13 +724,19 @@ export const postExternalLogin = endpoint({
673
724
  /**
674
725
  * @api POST https://auth.roblox.com/v1/external/loginAndLink
675
726
  * @summary Logins in a user to Roblox, then links the Roblox account to the external provider ID
727
+ * @param body
676
728
  */
677
729
  export const postExternalLoginandlink = endpoint({
678
730
  method: 'post' as const,
679
731
  path: '/v1/external/loginAndLink',
680
732
  baseUrl: 'https://auth.roblox.com',
681
733
  requestFormat: 'json' as const,
682
- response: z.void(),
734
+ serializationMethod: {
735
+ body: {},
736
+ },
737
+ parameters: {},
738
+ body: Roblox_Authentication_Api_Models_Request_ExternalLoginAndLinkRequest,
739
+ response: Roblox_Authentication_Api_Models_LoginResponse,
683
740
  errors: [
684
741
  {
685
742
  status: 403,
@@ -690,12 +747,18 @@ export const postExternalLoginandlink = endpoint({
690
747
  /**
691
748
  * @api POST https://auth.roblox.com/v1/external/signup
692
749
  * @summary Signs a user up for Roblox and links the account to the authenticated external provider ID
750
+ * @param body
693
751
  */
694
752
  export const postExternalSignup = endpoint({
695
753
  method: 'post' as const,
696
754
  path: '/v1/external/signup',
697
755
  baseUrl: 'https://auth.roblox.com',
698
756
  requestFormat: 'json' as const,
757
+ serializationMethod: {
758
+ body: {},
759
+ },
760
+ parameters: {},
761
+ body: Roblox_Authentication_Api_Models_Request_ExternalSignupRequest,
699
762
  response: z.void(),
700
763
  errors: [
701
764
  {
@@ -855,6 +918,150 @@ export const getMetadata = endpoint({
855
918
  response: Roblox_Authentication_Api_Models_MetadataResponse,
856
919
  errors: [],
857
920
  });
921
+ /**
922
+ * @api POST https://auth.roblox.com/v1/passkey/DeleteCredentialBatch
923
+ * @summary Disables a batch of credentials for the specified user.
924
+ * @param body The request body!:DisableTwoStepVerificationRequest.
925
+ */
926
+ export const postPasskeyDeletecredentialbatch = endpoint({
927
+ method: 'post' as const,
928
+ path: '/v1/passkey/DeleteCredentialBatch',
929
+ baseUrl: 'https://auth.roblox.com',
930
+ requestFormat: 'json' as const,
931
+ serializationMethod: {
932
+ body: {},
933
+ },
934
+ parameters: {},
935
+ body: Roblox_Authentication_Api_Models_Request_DeletePasskeysRequest,
936
+ response: z.object({}).passthrough(),
937
+ errors: [
938
+ {
939
+ status: 401,
940
+ description: `0: Authorization has been denied for this request.
941
+ 0: An unknown error occurred with the request.`,
942
+ },
943
+ {
944
+ status: 403,
945
+ description: `0: Token Validation Failed`,
946
+ },
947
+ {
948
+ status: 503,
949
+ description: `2: Feature disabled.`,
950
+ },
951
+ ],
952
+ });
953
+ /**
954
+ * @api POST https://auth.roblox.com/v1/passkey/FinishRegistration
955
+ * @summary Complete Passkey registration by providing credential creation options.
956
+ * @param body The request body.Roblox.Authentication.Api.Models.Request.FinishPasskeyRegistrationRequest.
957
+ */
958
+ export const postPasskeyFinishregistration = endpoint({
959
+ method: 'post' as const,
960
+ path: '/v1/passkey/FinishRegistration',
961
+ baseUrl: 'https://auth.roblox.com',
962
+ requestFormat: 'json' as const,
963
+ serializationMethod: {
964
+ body: {},
965
+ },
966
+ parameters: {},
967
+ body: Roblox_Authentication_Api_Models_Request_FinishPasskeyRegistrationRequest,
968
+ response: z.object({}).passthrough(),
969
+ errors: [
970
+ {
971
+ status: 400,
972
+ description: `0: An unknown error occurred with the request.
973
+ 3: Invalid security key nickname.`,
974
+ },
975
+ {
976
+ status: 401,
977
+ description: `0: Authorization has been denied for this request.
978
+ 0: An unknown error occurred with the request.`,
979
+ },
980
+ {
981
+ status: 403,
982
+ description: `0: Token Validation Failed
983
+ 3: Invalid security key nickname.`,
984
+ },
985
+ {
986
+ status: 503,
987
+ description: `2: Feature disabled.`,
988
+ },
989
+ ],
990
+ });
991
+ /**
992
+ * @api POST https://auth.roblox.com/v1/passkey/ListCredentials
993
+ * @summary List a user's registered Passkeys.
994
+ */
995
+ export const postPasskeyListcredentials = endpoint({
996
+ method: 'post' as const,
997
+ path: '/v1/passkey/ListCredentials',
998
+ baseUrl: 'https://auth.roblox.com',
999
+ requestFormat: 'json' as const,
1000
+ response: Roblox_Authentication_Api_Models_Response_ListPasskeyCredentialResponse,
1001
+ errors: [
1002
+ {
1003
+ status: 401,
1004
+ description: `0: Authorization has been denied for this request.
1005
+ 0: An unknown error occurred with the request.`,
1006
+ },
1007
+ {
1008
+ status: 403,
1009
+ description: `0: Token Validation Failed`,
1010
+ },
1011
+ {
1012
+ status: 503,
1013
+ description: `2: Feature disabled.`,
1014
+ },
1015
+ ],
1016
+ });
1017
+ /**
1018
+ * @api POST https://auth.roblox.com/v1/passkey/StartAuthentication
1019
+ * @summary Provides a challenge for the Passkey to authenticate.
1020
+ */
1021
+ export const postPasskeyStartauthentication = endpoint({
1022
+ method: 'post' as const,
1023
+ path: '/v1/passkey/StartAuthentication',
1024
+ baseUrl: 'https://auth.roblox.com',
1025
+ requestFormat: 'json' as const,
1026
+ response: Roblox_Authentication_Api_Models_Response_StartAuthenticationResponse,
1027
+ errors: [
1028
+ {
1029
+ status: 403,
1030
+ description: `0: Token Validation Failed`,
1031
+ },
1032
+ {
1033
+ status: 503,
1034
+ description: `2: Feature disabled.`,
1035
+ },
1036
+ ],
1037
+ });
1038
+ /**
1039
+ * @api POST https://auth.roblox.com/v1/passkey/StartRegistration
1040
+ * @summary Initiates Passkey registration by providing credential creation options.
1041
+ */
1042
+ export const postPasskeyStartregistration = endpoint({
1043
+ method: 'post' as const,
1044
+ path: '/v1/passkey/StartRegistration',
1045
+ baseUrl: 'https://auth.roblox.com',
1046
+ requestFormat: 'json' as const,
1047
+ response: Roblox_Authentication_Api_Models_Response_StartPasskeyRegistrationResponse,
1048
+ errors: [
1049
+ {
1050
+ status: 401,
1051
+ description: `0: Authorization has been denied for this request.
1052
+ 0: An unknown error occurred with the request.`,
1053
+ },
1054
+ {
1055
+ status: 403,
1056
+ description: `0: Token Validation Failed
1057
+ 1: Reached limit of pass keys registered.`,
1058
+ },
1059
+ {
1060
+ status: 503,
1061
+ description: `2: Feature disabled.`,
1062
+ },
1063
+ ],
1064
+ });
858
1065
  /**
859
1066
  * @api GET https://auth.roblox.com/v1/passwords/validate
860
1067
  * @summary Endpoint for checking if a password is valid.
@@ -1019,7 +1226,8 @@ export const postSignup = endpoint({
1019
1226
  {
1020
1227
  status: 400,
1021
1228
  description: `Bad request
1022
- 16: User agreement ids are null.`,
1229
+ 16: User agreement ids are null.
1230
+ 21: Empty account switch blob required`,
1023
1231
  },
1024
1232
  {
1025
1233
  status: 403,
@@ -1034,7 +1242,8 @@ export const postSignup = endpoint({
1034
1242
  10: Email is invalid.
1035
1243
  11: Asset is invalid.
1036
1244
  12: Too many attempts. Please wait a bit.
1037
- 17: One time Passcode session was not valid`,
1245
+ 17: One time Passcode session was not valid
1246
+ 22: Maximum logged in accounts limit reached.`,
1038
1247
  },
1039
1248
  {
1040
1249
  status: 429,
@@ -34,6 +34,7 @@ const Roblox_Authentication_Api_Models_MetadataResponse = zod_1.z
34
34
  IsUserAgreementsSignupIntegrationEnabled: zod_1.z.boolean(),
35
35
  IsKoreaIdVerificationEnabled: zod_1.z.boolean(),
36
36
  IsPasswordRequiredForUsernameChange: zod_1.z.boolean(),
37
+ IsPasskeyFeatureEnabled: zod_1.z.boolean(),
37
38
  })
38
39
  .passthrough();
39
40
  const Roblox_Authentication_Api_Models_PasswordValidationResponse = zod_1.z
@@ -210,7 +211,7 @@ const Roblox_Authentication_Api_Models_LoginRequest = zod_1.z
210
211
  })
211
212
  .passthrough();
212
213
  const Roblox_Authentication_Api_Models_Request_DeletePasskeysRequest = zod_1.z
213
- .object({ passkeysNicknames: zod_1.z.array(zod_1.z.string()) })
214
+ .object({ credentialNicknames: zod_1.z.array(zod_1.z.string()) })
214
215
  .passthrough();
215
216
  const Roblox_Authentication_Api_Models_Request_FinishPasskeyRegistrationRequest = zod_1.z
216
217
  .object({
@@ -229,7 +230,7 @@ const Roblox_Authentication_Api_Models_Response_StartAuthenticationResponse = zo
229
230
  .object({ authenticationOptions: zod_1.z.string(), sessionId: zod_1.z.string() })
230
231
  .passthrough();
231
232
  const Roblox_Authentication_Api_Models_Response_StartPasskeyRegistrationResponse = zod_1.z
232
- .object({ CreationOptions: zod_1.z.string(), SessionId: zod_1.z.string() })
233
+ .object({ creationOptions: zod_1.z.string(), sessionId: zod_1.z.string() })
233
234
  .passthrough();
234
235
  const Roblox_Authentication_Api_Models_ReferralDataModel = zod_1.z
235
236
  .object({
@@ -9,7 +9,7 @@ const Roblox_Authentication_Api_Models_CanSendCredentialsVerificationMessageResp
9
9
  .passthrough();
10
10
  const Roblox_Authentication_Api_Models_SendCredentialsVerificationMessageRequest = z
11
11
  .object({
12
- credentialType: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]),
12
+ credentialType: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5)]),
13
13
  credentialValue: z.string(),
14
14
  password: z.string(),
15
15
  })
@@ -47,6 +47,7 @@ const Roblox_Authentication_Api_Models_PasswordResetModel = z
47
47
  passwordRepeated: z.string(),
48
48
  twoStepVerificationChallengeId: z.string(),
49
49
  twoStepVerificationToken: z.string(),
50
+ accountBlob: z.string(),
50
51
  })
51
52
  .passthrough();
52
53
  const Roblox_Web_Responses_Users_SkinnyUserResponse = z
@@ -54,7 +55,7 @@ const Roblox_Web_Responses_Users_SkinnyUserResponse = z
54
55
  .passthrough();
55
56
  const Roblox_Authentication_Api_Models_TwoStepVerificationSentResponse = z
56
57
  .object({
57
- mediaType: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]),
58
+ mediaType: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5)]),
58
59
  ticket: z.string(),
59
60
  })
60
61
  .passthrough();
@@ -152,7 +153,7 @@ const Roblox_Authentication_Api_Models_Request_SecureAuthenticationIntentModel =
152
153
  .passthrough();
153
154
  const Roblox_Authentication_Api_Models_LoginRequest = z
154
155
  .object({
155
- ctype: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]),
156
+ ctype: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5)]),
156
157
  cvalue: z.string(),
157
158
  password: z.string(),
158
159
  userId: z.number().int(),
@@ -391,7 +392,7 @@ export const getCredentialsVerification = endpoint({
391
392
  },
392
393
  },
393
394
  parameters: {
394
- CredentialType: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]),
395
+ CredentialType: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4), z.literal(5)]),
395
396
  CredentialValue: z.string(),
396
397
  Password: z.string(),
397
398
  },
@@ -982,7 +983,8 @@ export const postSignup = endpoint({
982
983
  {
983
984
  status: 400,
984
985
  description: `Bad request
985
- 16: User agreement ids are null.`,
986
+ 16: User agreement ids are null.
987
+ 21: Empty account switch blob required`,
986
988
  },
987
989
  {
988
990
  status: 403,
@@ -997,7 +999,8 @@ export const postSignup = endpoint({
997
999
  10: Email is invalid.
998
1000
  11: Asset is invalid.
999
1001
  12: Too many attempts. Please wait a bit.
1000
- 17: One time Passcode session was not valid`,
1002
+ 17: One time Passcode session was not valid
1003
+ 22: Maximum logged in accounts limit reached.`,
1001
1004
  },
1002
1005
  {
1003
1006
  status: 429,
@@ -27,6 +27,7 @@ const Roblox_Authentication_Api_Models_MetadataResponse = zod_1.z
27
27
  IsUserAgreementsSignupIntegrationEnabled: zod_1.z.boolean(),
28
28
  IsKoreaIdVerificationEnabled: zod_1.z.boolean(),
29
29
  IsPasswordRequiredForUsernameChange: zod_1.z.boolean(),
30
+ IsPasskeyFeatureEnabled: zod_1.z.boolean(),
30
31
  })
31
32
  .passthrough();
32
33
  const Roblox_Authentication_Api_Models_PasswordStatusResponse = zod_1.z.object({ valid: zod_1.z.boolean() }).passthrough();
@@ -1,11 +1,20 @@
1
1
  import { z } from 'zod';
2
2
  import { endpoint } from '..';
3
3
 
4
+ const Roblox_Authentication_Api_Models_Request_SecureAuthenticationIntentModel = z
5
+ .object({
6
+ clientPublicKey: z.string(),
7
+ clientEpochTimestamp: z.number().int(),
8
+ saiSignature: z.string(),
9
+ serverNonce: z.string(),
10
+ })
11
+ .passthrough();
4
12
  const Roblox_Authentication_Api_TwoStepVerificationLoginRequest = z
5
13
  .object({
6
14
  challengeId: z.string(),
7
15
  verificationToken: z.string(),
8
16
  rememberDevice: z.boolean(),
17
+ secureAuthenticationIntent: Roblox_Authentication_Api_Models_Request_SecureAuthenticationIntentModel,
9
18
  accountBlob: z.string(),
10
19
  })
11
20
  .passthrough();
@@ -17,6 +26,7 @@ const Roblox_Authentication_Api_Models_TwoStepVerificationV3LoginResponse = z
17
26
  .passthrough();
18
27
 
19
28
  const schemas = {
29
+ Roblox_Authentication_Api_Models_Request_SecureAuthenticationIntentModel,
20
30
  Roblox_Authentication_Api_TwoStepVerificationLoginRequest,
21
31
  Roblox_Authentication_Api_Models_TwoStepVerificationV3LoginResponse,
22
32
  };
@@ -52,7 +62,8 @@ export const postUsersUseridTwoStepVerificationLogin = endpoint({
52
62
  },
53
63
  {
54
64
  status: 403,
55
- description: `0: Token Validation Failed`,
65
+ description: `0: Token Validation Failed
66
+ 11: Maxium logged in accounts limit reached.`,
56
67
  },
57
68
  ],
58
69
  });
@@ -138,6 +138,7 @@ const Roblox_Api_Avatar_Models_GameStartInfoResponse = z
138
138
  const Roblox_Api_Avatar_Models_OutfitDetailsModel = z
139
139
  .object({
140
140
  id: z.number().int(),
141
+ universeId: z.number().int(),
141
142
  name: z.string(),
142
143
  assets: z.array(Roblox_Api_Avatar_Models_AssetModelV2),
143
144
  bodyColors: Roblox_Api_Avatar_Models_BodyColorsModel,
@@ -145,6 +146,7 @@ const Roblox_Api_Avatar_Models_OutfitDetailsModel = z
145
146
  playerAvatarType: z.string(),
146
147
  outfitType: z.string(),
147
148
  isEditable: z.boolean(),
149
+ moderationStatus: z.string(),
148
150
  })
149
151
  .passthrough();
150
152
  const Roblox_Api_Avatar_Models_RecentItemModel = z
@@ -192,7 +194,7 @@ const Roblox_Api_Avatar_Models_OutfitUpdateModelV1 = z
192
194
  assetIds: z.array(z.number()),
193
195
  scale: Roblox_Web_Responses_Avatar_ScaleModel,
194
196
  playerAvatarType: z.string(),
195
- outfitType: z.union([z.literal(0), z.literal(1), z.literal(2)]),
197
+ outfitType: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3)]),
196
198
  })
197
199
  .passthrough();
198
200
 
@@ -100,7 +100,7 @@ const Roblox_Api_Avatar_Models_OutfitUpdateModelV2 = z
100
100
  assets: z.array(Roblox_Api_Avatar_Models_AssetWearModel),
101
101
  scale: Roblox_Web_Responses_Avatar_ScaleModel,
102
102
  playerAvatarType: z.string(),
103
- outfitType: z.union([z.literal(0), z.literal(1), z.literal(2)]),
103
+ outfitType: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3)]),
104
104
  })
105
105
  .passthrough();
106
106
  const Roblox_Web_WebAPI_ApiEmptyResponseModel = z.object({}).passthrough();
@@ -73,7 +73,7 @@ const Roblox_Api_Avatar_Models_OutfitUpdateModelV3 = z
73
73
  assets: z.array(Roblox_Api_Avatar_Models_AssetWearModel),
74
74
  scale: Roblox_Web_Responses_Avatar_ScaleModel,
75
75
  playerAvatarType: z.string(),
76
- outfitType: z.union([z.literal(0), z.literal(1), z.literal(2)]),
76
+ outfitType: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3)]),
77
77
  })
78
78
  .passthrough();
79
79
  const Roblox_Web_WebAPI_ApiEmptyResponseModel = z.object({}).passthrough();
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.postUpdateUserTypingStatus = exports.postStartOneToOneConversation = exports.postStartGroupConversation = exports.postStartCloudEditConversation = exports.postSetConversationUniverse = exports.postSendMessage = exports.postSendGameLinkMessage = exports.postResetConversationUniverse = exports.postRenameGroupConversation = exports.postRemoveFromConversation = exports.getMultiGetLatestMessages = exports.getMetadata = exports.postMarkAsSeen = exports.postMarkAsRead = exports.getGetUserConversations = exports.getGetUnreadMessages = exports.getGetUnreadConversations = exports.getGetUnreadConversationCount = exports.getGetRolloutSettings = exports.getGetMessages = exports.getGetConversations = exports.getChatSettings = exports.postAddToConversation = void 0;
3
+ exports.postUpdateUserTypingStatus = exports.postStartOneToOneConversation = exports.postStartGroupConversation = exports.postStartCloudEditConversation = exports.postSendMessage = exports.postSendGameLinkMessage = exports.postRenameGroupConversation = exports.postRemoveFromConversation = exports.getMultiGetLatestMessages = exports.getMetadata = exports.postMarkAsSeen = exports.postMarkAsRead = exports.getGetUserConversations = exports.getGetUnreadMessages = exports.getGetUnreadConversations = exports.getGetUnreadConversationCount = exports.getGetRolloutSettings = exports.getGetMessages = exports.getGetConversations = exports.getChatSettings = exports.postAddToConversation = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const __1 = require("..");
6
6
  const Roblox_Chat_Api_Models_ChatSettingsResponse = zod_1.z
@@ -164,10 +164,6 @@ const Roblox_Chat_Api_Models_RenameConversationResponse = zod_1.z
164
164
  statusMessage: zod_1.z.string(),
165
165
  })
166
166
  .passthrough();
167
- const Roblox_Chat_Api_Models_ResetConversationUniverseRequest = zod_1.z
168
- .object({ conversationId: zod_1.z.number().int() })
169
- .passthrough();
170
- const Roblox_Chat_Api_Models_UserVisibleStatusResponse = zod_1.z.object({ statusMessage: zod_1.z.string() }).passthrough();
171
167
  const Roblox_Chat_Api_Models_SendGameLinkChatMessageRequest = zod_1.z
172
168
  .object({
173
169
  universeId: zod_1.z.number().int(),
@@ -208,9 +204,6 @@ const Roblox_Chat_Api_Models_SendPlainTextChatMessageResponse = zod_1.z
208
204
  statusMessage: zod_1.z.string(),
209
205
  })
210
206
  .passthrough();
211
- const Roblox_Chat_Api_Models_SetConversationUniverseRequest = zod_1.z
212
- .object({ conversationId: zod_1.z.number().int(), universeId: zod_1.z.number().int() })
213
- .passthrough();
214
207
  const Roblox_Chat_Api_Models_CreateCloudEditConversationRequest = zod_1.z.object({ placeId: zod_1.z.number().int() }).passthrough();
215
208
  const Roblox_Chat_Api_Models_StartNewConversationResponse = zod_1.z
216
209
  .object({
@@ -229,6 +222,7 @@ const Roblox_Chat_Api_Models_CreateOneToOneConversationRequest = zod_1.z
229
222
  const Roblox_Chat_Api_Models_UpdateUserTypingStatusRequest = zod_1.z
230
223
  .object({ conversationId: zod_1.z.number().int(), isTyping: zod_1.z.boolean() })
231
224
  .passthrough();
225
+ const Roblox_Chat_Api_Models_UserVisibleStatusResponse = zod_1.z.object({ statusMessage: zod_1.z.string() }).passthrough();
232
226
  const schemas = {
233
227
  Roblox_Chat_Api_Models_ChatSettingsResponse,
234
228
  Roblox_Chat_Api_Models_ChatParticipant,
@@ -256,18 +250,16 @@ const schemas = {
256
250
  Roblox_Chat_Api_Models_RemoveUserFromConversationResponse,
257
251
  Roblox_Chat_Api_Models_RenameGroupConversationRequest,
258
252
  Roblox_Chat_Api_Models_RenameConversationResponse,
259
- Roblox_Chat_Api_Models_ResetConversationUniverseRequest,
260
- Roblox_Chat_Api_Models_UserVisibleStatusResponse,
261
253
  Roblox_Chat_Api_Models_SendGameLinkChatMessageRequest,
262
254
  Roblox_Chat_Api_Models_SendLinkChatResponse,
263
255
  Roblox_Chat_Api_Models_SendPlainTextChatMessageRequest,
264
256
  Roblox_Chat_Api_Models_SendPlainTextChatMessageResponse,
265
- Roblox_Chat_Api_Models_SetConversationUniverseRequest,
266
257
  Roblox_Chat_Api_Models_CreateCloudEditConversationRequest,
267
258
  Roblox_Chat_Api_Models_StartNewConversationResponse,
268
259
  Roblox_Chat_Api_Models_CreateGroupConversationRequest,
269
260
  Roblox_Chat_Api_Models_CreateOneToOneConversationRequest,
270
261
  Roblox_Chat_Api_Models_UpdateUserTypingStatusRequest,
262
+ Roblox_Chat_Api_Models_UserVisibleStatusResponse,
271
263
  };
272
264
  /**
273
265
  * @api POST https://chat.roblox.com/v2/add-to-conversation
@@ -680,33 +672,6 @@ exports.postRenameGroupConversation = (0, __1.endpoint)({
680
672
  },
681
673
  ],
682
674
  });
683
- /**
684
- * @api POST https://chat.roblox.com/v2/reset-conversation-universe
685
- * @summary Removes universe associated with a conversation
686
- * @param body
687
- */
688
- exports.postResetConversationUniverse = (0, __1.endpoint)({
689
- method: 'post',
690
- path: '/v2/reset-conversation-universe',
691
- baseUrl: 'https://chat.roblox.com',
692
- requestFormat: 'json',
693
- serializationMethod: {
694
- body: {},
695
- },
696
- parameters: {},
697
- body: zod_1.z.object({ conversationId: zod_1.z.number().int() }).passthrough(),
698
- response: zod_1.z.object({ statusMessage: zod_1.z.string() }).passthrough(),
699
- errors: [
700
- {
701
- status: 401,
702
- description: `0: Authorization has been denied for this request.`,
703
- },
704
- {
705
- status: 403,
706
- description: `0: Token Validation Failed`,
707
- },
708
- ],
709
- });
710
675
  /**
711
676
  * @api POST https://chat.roblox.com/v2/send-game-link-message
712
677
  * @param body
@@ -760,33 +725,6 @@ exports.postSendMessage = (0, __1.endpoint)({
760
725
  },
761
726
  ],
762
727
  });
763
- /**
764
- * @api POST https://chat.roblox.com/v2/set-conversation-universe
765
- * @summary Adds or updates universe associated with a conversation
766
- * @param body
767
- */
768
- exports.postSetConversationUniverse = (0, __1.endpoint)({
769
- method: 'post',
770
- path: '/v2/set-conversation-universe',
771
- baseUrl: 'https://chat.roblox.com',
772
- requestFormat: 'json',
773
- serializationMethod: {
774
- body: {},
775
- },
776
- parameters: {},
777
- body: Roblox_Chat_Api_Models_SetConversationUniverseRequest,
778
- response: zod_1.z.object({ statusMessage: zod_1.z.string() }).passthrough(),
779
- errors: [
780
- {
781
- status: 401,
782
- description: `0: Authorization has been denied for this request.`,
783
- },
784
- {
785
- status: 403,
786
- description: `0: Token Validation Failed`,
787
- },
788
- ],
789
- });
790
728
  /**
791
729
  * @api POST https://chat.roblox.com/v2/start-cloud-edit-conversation
792
730
  * @summary Creates a new cloud edit conversation
@@ -389,8 +389,7 @@ exports.patchUniversesUniverseidConfiguration = (0, __1.endpoint)({
389
389
  22: Invalid asset type.
390
390
  23: Invalid value, the min must be less than or equal to the max
391
391
  24: Invalid scale value
392
- 28: OptIn/Out Regions Not Supported.
393
- 29: Luobu app terms of service user agreement is missing.`,
392
+ 28: OptIn/Out Regions Not Supported.`,
394
393
  },
395
394
  {
396
395
  status: 401,
@@ -401,6 +400,7 @@ exports.patchUniversesUniverseidConfiguration = (0, __1.endpoint)({
401
400
  description: `0: Token Validation Failed
402
401
  2: You are not authorized to configure this universe.
403
402
  14: You are not authorized to sell games.
403
+ 29: Luobu app terms of service user agreement is missing.
404
404
  30: Unknown error while updating Opt in out region.`,
405
405
  },
406
406
  {
@@ -95,6 +95,16 @@ const Roblox_Friends_Api_FollowCountResponse = z.object({ count: z.number().int(
95
95
  const Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Friends_Api_Models_Response_UserResponse_ = z
96
96
  .object({ data: z.array(Roblox_Friends_Api_Models_Response_UserResponse) })
97
97
  .passthrough();
98
+ const Roblox_Friends_Api_Models_Response_FriendResponse = z
99
+ .object({ id: z.number().int(), hasVerifiedBadge: z.boolean() })
100
+ .passthrough();
101
+ const Roblox_Paging_CursoredPagedResult_Roblox_Friends_Api_Models_Response_FriendResponse_ = z
102
+ .object({
103
+ PreviousCursor: z.string(),
104
+ PageItems: z.array(Roblox_Friends_Api_Models_Response_FriendResponse),
105
+ NextCursor: z.string(),
106
+ })
107
+ .passthrough();
98
108
  const Roblox_Friends_Api_Models_Response_UserPresenceResponseModel = z
99
109
  .object({
100
110
  UserPresenceType: z.string(),
@@ -194,6 +204,8 @@ const schemas = {
194
204
  Roblox_Web_WebAPI_Models_ApiPageResponse_Roblox_Friends_Api_Models_Response_UserResponse_,
195
205
  Roblox_Friends_Api_FollowCountResponse,
196
206
  Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Friends_Api_Models_Response_UserResponse_,
207
+ Roblox_Friends_Api_Models_Response_FriendResponse,
208
+ Roblox_Paging_CursoredPagedResult_Roblox_Friends_Api_Models_Response_FriendResponse_,
197
209
  Roblox_Friends_Api_Models_Response_UserPresenceResponseModel,
198
210
  Roblox_Friends_Api_Models_Response_UserPresenceResponse,
199
211
  Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Friends_Api_Models_Response_UserPresenceResponse_,
@@ -956,7 +968,7 @@ export const getUsersUseridFriends = endpoint({
956
968
  },
957
969
  parameters: {
958
970
  userId: z.number().int(),
959
- userSort: z.union([z.literal(0), z.literal(1), z.literal(2)]).optional(),
971
+ userSort: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3)]).optional(),
960
972
  },
961
973
  response: Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Friends_Api_Models_Response_UserResponse_,
962
974
  errors: [
@@ -992,6 +1004,55 @@ export const getUsersUseridFriendsCount = endpoint({
992
1004
  },
993
1005
  ],
994
1006
  });
1007
+ /**
1008
+ * @api GET https://friends.roblox.com/v1/users/:userId/friends/find
1009
+ * @summary Get a paginated list of all friends for the specified user.
1010
+ * @param userId The user Id to get the friends for.
1011
+ * @param userSort Specifies how to sort the returned friends.
1012
+ * @param cursor The paging cursor for the previous or next page.
1013
+ * @param limit The number of results per request.
1014
+ */
1015
+ export const getUsersUseridFriendsFind = endpoint({
1016
+ method: 'get' as const,
1017
+ path: '/v1/users/:userId/friends/find',
1018
+ baseUrl: 'https://friends.roblox.com',
1019
+ requestFormat: 'json' as const,
1020
+ serializationMethod: {
1021
+ userId: {
1022
+ style: 'simple',
1023
+ },
1024
+ userSort: {
1025
+ style: 'form',
1026
+ explode: true,
1027
+ },
1028
+ cursor: {
1029
+ style: 'form',
1030
+ explode: true,
1031
+ },
1032
+ limit: {
1033
+ style: 'form',
1034
+ explode: true,
1035
+ },
1036
+ },
1037
+ parameters: {
1038
+ userId: z.number().int(),
1039
+ userSort: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3)]).optional(),
1040
+ cursor: z.string().optional(),
1041
+ limit: z.number().int().optional().default(50),
1042
+ },
1043
+ response: Roblox_Paging_CursoredPagedResult_Roblox_Friends_Api_Models_Response_FriendResponse_,
1044
+ errors: [
1045
+ {
1046
+ status: 400,
1047
+ description: `1: The target user is invalid or does not exist.
1048
+ 6: Invalid parameters.`,
1049
+ },
1050
+ {
1051
+ status: 401,
1052
+ description: `0: Authorization has been denied for this request.`,
1053
+ },
1054
+ ],
1055
+ });
995
1056
  /**
996
1057
  * @api GET https://friends.roblox.com/v1/users/:userId/friends/inactive
997
1058
  * @summary Get list of inactive friends for the specified user.
@@ -1054,6 +1115,61 @@ export const getUsersUseridFriendsOnline = endpoint({
1054
1115
  },
1055
1116
  ],
1056
1117
  });
1118
+ /**
1119
+ * @api GET https://friends.roblox.com/v1/users/:userId/friends/search
1120
+ * @summary Search for friends by name using a text query.
1121
+ * @param userId The user Id to get the friends for.
1122
+ * @param query The string to search names of friends for.
1123
+ * @param userSort Specifies how to sort the returned friends.
1124
+ * @param cursor The paging cursor for the previous or next page.
1125
+ * @param limit The number of results per request.
1126
+ */
1127
+ export const getUsersUseridFriendsSearch = endpoint({
1128
+ method: 'get' as const,
1129
+ path: '/v1/users/:userId/friends/search',
1130
+ baseUrl: 'https://friends.roblox.com',
1131
+ requestFormat: 'json' as const,
1132
+ serializationMethod: {
1133
+ userId: {
1134
+ style: 'simple',
1135
+ },
1136
+ query: {
1137
+ style: 'form',
1138
+ explode: true,
1139
+ },
1140
+ userSort: {
1141
+ style: 'form',
1142
+ explode: true,
1143
+ },
1144
+ cursor: {
1145
+ style: 'form',
1146
+ explode: true,
1147
+ },
1148
+ limit: {
1149
+ style: 'form',
1150
+ explode: true,
1151
+ },
1152
+ },
1153
+ parameters: {
1154
+ userId: z.number().int(),
1155
+ query: z.string().optional(),
1156
+ userSort: z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3)]).optional(),
1157
+ cursor: z.string().optional(),
1158
+ limit: z.number().int().optional().default(20),
1159
+ },
1160
+ response: Roblox_Paging_CursoredPagedResult_Roblox_Friends_Api_Models_Response_FriendResponse_,
1161
+ errors: [
1162
+ {
1163
+ status: 400,
1164
+ description: `1: The target user is invalid or does not exist.
1165
+ 6: Invalid parameters.`,
1166
+ },
1167
+ {
1168
+ status: 401,
1169
+ description: `0: Authorization has been denied for this request.`,
1170
+ },
1171
+ ],
1172
+ });
1057
1173
  /**
1058
1174
  * @api GET https://friends.roblox.com/v1/users/:userId/friends/statuses
1059
1175
  * @summary Gets a list of friend statuses of specified users against the specified user.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getUsersUseridFriendsStatuses = exports.getUsersUseridFriendsOnline = exports.getUsersUseridFriendsInactive = exports.getUsersUseridFriendsCount = exports.getUsersUseridFriends = exports.postUsersTargetuseridUnfriend = exports.postUsersTargetuseridUnfollow = exports.postUsersTargetuseridRequestFriendship = exports.postUsersTargetuseridFollowingsRecount = exports.getUsersTargetuseridFollowingsCount = exports.getUsersTargetuseridFollowings = exports.getUsersTargetuseridFollowersCount = exports.getUsersTargetuseridFollowers = exports.postUsersTargetuseridFollow = exports.postUsersSenderuseridAcceptFriendRequestWithToken = exports.postUsersRequesteruseridDeclineFriendRequest = exports.postUsersRequesteruseridAcceptFriendRequest = exports.postUserFriendRequestsDeclineAll = exports.getUserFriendRequestsCount = exports.postUserFollowingExists = exports.getRecommendedUsers = exports.getMyFriendsRequests = exports.getMyFriendsCount = exports.getMetadata = exports.postContactsTargetcontactidRequestFriendship = void 0;
3
+ exports.getUsersUseridFriendsStatuses = exports.getUsersUseridFriendsSearch = exports.getUsersUseridFriendsOnline = exports.getUsersUseridFriendsInactive = exports.getUsersUseridFriendsFind = exports.getUsersUseridFriendsCount = exports.getUsersUseridFriends = exports.postUsersTargetuseridUnfriend = exports.postUsersTargetuseridUnfollow = exports.postUsersTargetuseridRequestFriendship = exports.postUsersTargetuseridFollowingsRecount = exports.getUsersTargetuseridFollowingsCount = exports.getUsersTargetuseridFollowings = exports.getUsersTargetuseridFollowersCount = exports.getUsersTargetuseridFollowers = exports.postUsersTargetuseridFollow = exports.postUsersSenderuseridAcceptFriendRequestWithToken = exports.postUsersRequesteruseridDeclineFriendRequest = exports.postUsersRequesteruseridAcceptFriendRequest = exports.postUserFriendRequestsDeclineAll = exports.getUserFriendRequestsCount = exports.postUserFollowingExists = exports.getRecommendedUsers = exports.getMyFriendsRequests = exports.getMyFriendsCount = 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
@@ -97,6 +97,16 @@ const Roblox_Friends_Api_FollowCountResponse = zod_1.z.object({ count: zod_1.z.n
97
97
  const Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Friends_Api_Models_Response_UserResponse_ = zod_1.z
98
98
  .object({ data: zod_1.z.array(Roblox_Friends_Api_Models_Response_UserResponse) })
99
99
  .passthrough();
100
+ const Roblox_Friends_Api_Models_Response_FriendResponse = zod_1.z
101
+ .object({ id: zod_1.z.number().int(), hasVerifiedBadge: zod_1.z.boolean() })
102
+ .passthrough();
103
+ const Roblox_Paging_CursoredPagedResult_Roblox_Friends_Api_Models_Response_FriendResponse_ = zod_1.z
104
+ .object({
105
+ PreviousCursor: zod_1.z.string(),
106
+ PageItems: zod_1.z.array(Roblox_Friends_Api_Models_Response_FriendResponse),
107
+ NextCursor: zod_1.z.string(),
108
+ })
109
+ .passthrough();
100
110
  const Roblox_Friends_Api_Models_Response_UserPresenceResponseModel = zod_1.z
101
111
  .object({
102
112
  UserPresenceType: zod_1.z.string(),
@@ -195,6 +205,8 @@ const schemas = {
195
205
  Roblox_Web_WebAPI_Models_ApiPageResponse_Roblox_Friends_Api_Models_Response_UserResponse_,
196
206
  Roblox_Friends_Api_FollowCountResponse,
197
207
  Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Friends_Api_Models_Response_UserResponse_,
208
+ Roblox_Friends_Api_Models_Response_FriendResponse,
209
+ Roblox_Paging_CursoredPagedResult_Roblox_Friends_Api_Models_Response_FriendResponse_,
198
210
  Roblox_Friends_Api_Models_Response_UserPresenceResponseModel,
199
211
  Roblox_Friends_Api_Models_Response_UserPresenceResponse,
200
212
  Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Friends_Api_Models_Response_UserPresenceResponse_,
@@ -992,6 +1004,55 @@ exports.getUsersUseridFriendsCount = (0, __1.endpoint)({
992
1004
  },
993
1005
  ],
994
1006
  });
1007
+ /**
1008
+ * @api GET https://friends.roblox.com/v1/users/:userId/friends/find
1009
+ * @summary Get a paginated list of all friends for the specified user.
1010
+ * @param userId The user Id to get the friends for.
1011
+ * @param userSort Specifies how to sort the returned friends.
1012
+ * @param cursor The paging cursor for the previous or next page.
1013
+ * @param limit The number of results per request.
1014
+ */
1015
+ exports.getUsersUseridFriendsFind = (0, __1.endpoint)({
1016
+ method: 'get',
1017
+ path: '/v1/users/:userId/friends/find',
1018
+ baseUrl: 'https://friends.roblox.com',
1019
+ requestFormat: 'json',
1020
+ serializationMethod: {
1021
+ userId: {
1022
+ style: 'simple',
1023
+ },
1024
+ userSort: {
1025
+ style: 'form',
1026
+ explode: true,
1027
+ },
1028
+ cursor: {
1029
+ style: 'form',
1030
+ explode: true,
1031
+ },
1032
+ limit: {
1033
+ style: 'form',
1034
+ explode: true,
1035
+ },
1036
+ },
1037
+ parameters: {
1038
+ userId: zod_1.z.number().int(),
1039
+ userSort: zod_1.z.literal(0).optional(),
1040
+ cursor: zod_1.z.string().optional(),
1041
+ limit: zod_1.z.number().int().optional().default(50),
1042
+ },
1043
+ response: Roblox_Paging_CursoredPagedResult_Roblox_Friends_Api_Models_Response_FriendResponse_,
1044
+ errors: [
1045
+ {
1046
+ status: 400,
1047
+ description: `1: The target user is invalid or does not exist.
1048
+ 6: Invalid parameters.`,
1049
+ },
1050
+ {
1051
+ status: 401,
1052
+ description: `0: Authorization has been denied for this request.`,
1053
+ },
1054
+ ],
1055
+ });
995
1056
  /**
996
1057
  * @api GET https://friends.roblox.com/v1/users/:userId/friends/inactive
997
1058
  * @summary Get list of inactive friends for the specified user.
@@ -1054,6 +1115,61 @@ exports.getUsersUseridFriendsOnline = (0, __1.endpoint)({
1054
1115
  },
1055
1116
  ],
1056
1117
  });
1118
+ /**
1119
+ * @api GET https://friends.roblox.com/v1/users/:userId/friends/search
1120
+ * @summary Search for friends by name using a text query.
1121
+ * @param userId The user Id to get the friends for.
1122
+ * @param query The string to search names of friends for.
1123
+ * @param userSort Specifies how to sort the returned friends.
1124
+ * @param cursor The paging cursor for the previous or next page.
1125
+ * @param limit The number of results per request.
1126
+ */
1127
+ exports.getUsersUseridFriendsSearch = (0, __1.endpoint)({
1128
+ method: 'get',
1129
+ path: '/v1/users/:userId/friends/search',
1130
+ baseUrl: 'https://friends.roblox.com',
1131
+ requestFormat: 'json',
1132
+ serializationMethod: {
1133
+ userId: {
1134
+ style: 'simple',
1135
+ },
1136
+ query: {
1137
+ style: 'form',
1138
+ explode: true,
1139
+ },
1140
+ userSort: {
1141
+ style: 'form',
1142
+ explode: true,
1143
+ },
1144
+ cursor: {
1145
+ style: 'form',
1146
+ explode: true,
1147
+ },
1148
+ limit: {
1149
+ style: 'form',
1150
+ explode: true,
1151
+ },
1152
+ },
1153
+ parameters: {
1154
+ userId: zod_1.z.number().int(),
1155
+ query: zod_1.z.string().optional(),
1156
+ userSort: zod_1.z.literal(0).optional(),
1157
+ cursor: zod_1.z.string().optional(),
1158
+ limit: zod_1.z.number().int().optional().default(20),
1159
+ },
1160
+ response: Roblox_Paging_CursoredPagedResult_Roblox_Friends_Api_Models_Response_FriendResponse_,
1161
+ errors: [
1162
+ {
1163
+ status: 400,
1164
+ description: `1: The target user is invalid or does not exist.
1165
+ 6: Invalid parameters.`,
1166
+ },
1167
+ {
1168
+ status: 401,
1169
+ description: `0: Authorization has been denied for this request.`,
1170
+ },
1171
+ ],
1172
+ });
1057
1173
  /**
1058
1174
  * @api GET https://friends.roblox.com/v1/users/:userId/friends/statuses
1059
1175
  * @summary Gets a list of friend statuses of specified users against the specified user.
@@ -6,6 +6,7 @@ const Roblox_Web_Responses_Thumbnails_ThumbnailResponse = z
6
6
  targetId: z.number().int(),
7
7
  state: z.enum(['Error', 'Completed', 'InReview', 'Pending', 'Blocked', 'TemporarilyUnavailable']),
8
8
  imageUrl: z.string(),
9
+ version: z.string(),
9
10
  })
10
11
  .passthrough();
11
12
  const Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Web_Responses_Thumbnails_ThumbnailResponse_ = z
@@ -34,12 +35,6 @@ const Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Thumbnails_Api_Models_Uni
34
35
  data: z.array(Roblox_Thumbnails_Api_Models_UniverseThumbnailsResponse),
35
36
  })
36
37
  .passthrough();
37
- const Roblox_Thumbnails_Api_Models_ThumbnailMetaDataResponse = z
38
- .object({
39
- isWebappUseCacheEnabled: z.boolean(),
40
- webappCacheExpirationTimspan: z.string(),
41
- })
42
- .passthrough();
43
38
  const Roblox_Thumbnails_Apis_Models_ThumbnailBatchRequest = z
44
39
  .object({
45
40
  requestId: z.string(),
@@ -63,6 +58,7 @@ const Roblox_Thumbnails_Apis_Models_ThumbnailBatchRequest = z
63
58
  'PlaceIcon',
64
59
  'AutoGeneratedGameIcon',
65
60
  'ForceAutoGeneratedGameIcon',
61
+ 'Look',
66
62
  ]),
67
63
  size: z.string(),
68
64
  format: z.string(),
@@ -77,6 +73,7 @@ const Roblox_Web_Responses_Thumbnails_ThumbnailBatchResponse = z
77
73
  targetId: z.number().int(),
78
74
  state: z.enum(['Error', 'Completed', 'InReview', 'Pending', 'Blocked', 'TemporarilyUnavailable']),
79
75
  imageUrl: z.string(),
76
+ version: z.string(),
80
77
  })
81
78
  .passthrough();
82
79
  const Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Web_Responses_Thumbnails_ThumbnailBatchResponse_ = z
@@ -91,7 +88,6 @@ const schemas = {
91
88
  Roblox_Web_WebAPI_Models_ApiErrorModel,
92
89
  Roblox_Thumbnails_Api_Models_UniverseThumbnailsResponse,
93
90
  Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Thumbnails_Api_Models_UniverseThumbnailsResponse_,
94
- Roblox_Thumbnails_Api_Models_ThumbnailMetaDataResponse,
95
91
  Roblox_Thumbnails_Apis_Models_ThumbnailBatchRequest,
96
92
  Roblox_Web_Responses_Thumbnails_ThumbnailBatchResponse,
97
93
  Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Web_Responses_Thumbnails_ThumbnailBatchResponse_,
@@ -306,6 +302,7 @@ export const getBadgesIcons = endpoint({
306
302
  14. PlaceIcon
307
303
  15. AutoGeneratedGameIcon
308
304
  16. ForceAutoGeneratedGameIcon
305
+ 17. Look
309
306
  */
310
307
  export const postBatch = endpoint({
311
308
  method: 'post' as const,
@@ -701,18 +698,6 @@ export const getGroupsIcons = endpoint({
701
698
  },
702
699
  ],
703
700
  });
704
- /**
705
- * @api GET https://thumbnails.roblox.com/v1/metadata
706
- * @summary Return list of thumbnail meta data.
707
- */
708
- export const getMetadata = endpoint({
709
- method: 'get' as const,
710
- path: '/v1/metadata',
711
- baseUrl: 'https://thumbnails.roblox.com',
712
- requestFormat: 'json' as const,
713
- response: Roblox_Thumbnails_Api_Models_ThumbnailMetaDataResponse,
714
- errors: [],
715
- });
716
701
  /**
717
702
  * @api GET https://thumbnails.roblox.com/v1/places/gameicons
718
703
  * @summary Fetches game icon URLs for a list of places. Ids that do not correspond to a valid place will be filtered out.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getUsersOutfits = exports.getUsersOutfit3d = exports.getUsersAvatarHeadshot = exports.getUsersAvatarBust = exports.getUsersAvatar3d = exports.getUsersAvatar = exports.getPlacesGameicons = exports.getMetadata = exports.getGroupsIcons = exports.getGamesMultigetThumbnails = exports.getGamesIcons = exports.getGamesUniverseidThumbnails = exports.getGamePasses = exports.getDeveloperProductsIcons = exports.getBundlesThumbnails = exports.postBatch = exports.getBadgesIcons = exports.getAssetsThumbnail3d = exports.getAssets = exports.getAssetThumbnailAnimated = void 0;
3
+ exports.getUsersOutfits = exports.getUsersOutfit3d = exports.getUsersAvatarHeadshot = exports.getUsersAvatarBust = exports.getUsersAvatar3d = exports.getUsersAvatar = exports.getPlacesGameicons = exports.getGroupsIcons = exports.getGamesMultigetThumbnails = exports.getGamesIcons = exports.getGamesUniverseidThumbnails = exports.getGamePasses = exports.getDeveloperProductsIcons = exports.getBundlesThumbnails = exports.postBatch = exports.getBadgesIcons = exports.getAssetsThumbnail3d = exports.getAssets = exports.getAssetThumbnailAnimated = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const __1 = require("..");
6
6
  const Roblox_Web_Responses_Thumbnails_ThumbnailResponse = zod_1.z
@@ -8,6 +8,7 @@ const Roblox_Web_Responses_Thumbnails_ThumbnailResponse = zod_1.z
8
8
  targetId: zod_1.z.number().int(),
9
9
  state: zod_1.z.enum(['Error', 'Completed', 'InReview', 'Pending', 'Blocked', 'TemporarilyUnavailable']),
10
10
  imageUrl: zod_1.z.string(),
11
+ version: zod_1.z.string(),
11
12
  })
12
13
  .passthrough();
13
14
  const Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Web_Responses_Thumbnails_ThumbnailResponse_ = zod_1.z
@@ -36,12 +37,6 @@ const Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Thumbnails_Api_Models_Uni
36
37
  data: zod_1.z.array(Roblox_Thumbnails_Api_Models_UniverseThumbnailsResponse),
37
38
  })
38
39
  .passthrough();
39
- const Roblox_Thumbnails_Api_Models_ThumbnailMetaDataResponse = zod_1.z
40
- .object({
41
- isWebappUseCacheEnabled: zod_1.z.boolean(),
42
- webappCacheExpirationTimspan: zod_1.z.string(),
43
- })
44
- .passthrough();
45
40
  const Roblox_Thumbnails_Apis_Models_ThumbnailBatchRequest = zod_1.z
46
41
  .object({
47
42
  requestId: zod_1.z.string(),
@@ -80,6 +75,7 @@ const Roblox_Web_Responses_Thumbnails_ThumbnailBatchResponse = zod_1.z
80
75
  targetId: zod_1.z.number().int(),
81
76
  state: zod_1.z.enum(['Error', 'Completed', 'InReview', 'Pending', 'Blocked', 'TemporarilyUnavailable']),
82
77
  imageUrl: zod_1.z.string(),
78
+ version: zod_1.z.string(),
83
79
  })
84
80
  .passthrough();
85
81
  const Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Web_Responses_Thumbnails_ThumbnailBatchResponse_ = zod_1.z
@@ -93,7 +89,6 @@ const schemas = {
93
89
  Roblox_Web_WebAPI_Models_ApiErrorModel,
94
90
  Roblox_Thumbnails_Api_Models_UniverseThumbnailsResponse,
95
91
  Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Thumbnails_Api_Models_UniverseThumbnailsResponse_,
96
- Roblox_Thumbnails_Api_Models_ThumbnailMetaDataResponse,
97
92
  Roblox_Thumbnails_Apis_Models_ThumbnailBatchRequest,
98
93
  Roblox_Web_Responses_Thumbnails_ThumbnailBatchResponse,
99
94
  Roblox_Web_WebAPI_Models_ApiArrayResponse_Roblox_Web_Responses_Thumbnails_ThumbnailBatchResponse_,
@@ -703,18 +698,6 @@ exports.getGroupsIcons = (0, __1.endpoint)({
703
698
  },
704
699
  ],
705
700
  });
706
- /**
707
- * @api GET https://thumbnails.roblox.com/v1/metadata
708
- * @summary Return list of thumbnail meta data.
709
- */
710
- exports.getMetadata = (0, __1.endpoint)({
711
- method: 'get',
712
- path: '/v1/metadata',
713
- baseUrl: 'https://thumbnails.roblox.com',
714
- requestFormat: 'json',
715
- response: Roblox_Thumbnails_Api_Models_ThumbnailMetaDataResponse,
716
- errors: [],
717
- });
718
701
  /**
719
702
  * @api GET https://thumbnails.roblox.com/v1/places/gameicons
720
703
  * @summary Fetches game icon URLs for a list of places. Ids that do not correspond to a valid place will be filtered out.
@@ -627,6 +627,7 @@ export const getUsersAuthenticatedRoles = endpoint({
627
627
  * @api GET https://users.roblox.com/v1/users/search
628
628
  * @summary Searches for users by keyword.
629
629
  * @param keyword The search keyword.
630
+ * @param sessionId
630
631
  * @param limit The number of results per request.
631
632
  * @param cursor The paging cursor for the previous or next page.
632
633
  */
@@ -640,6 +641,10 @@ export const getUsersSearch = endpoint({
640
641
  style: 'form',
641
642
  explode: true,
642
643
  },
644
+ sessionId: {
645
+ style: 'form',
646
+ explode: true,
647
+ },
643
648
  limit: {
644
649
  style: 'form',
645
650
  explode: true,
@@ -651,6 +656,7 @@ export const getUsersSearch = endpoint({
651
656
  },
652
657
  parameters: {
653
658
  keyword: z.string(),
659
+ sessionId: z.string().optional(),
654
660
  limit: z
655
661
  .union([z.literal(10), z.literal(25), z.literal(50), z.literal(100)])
656
662
  .optional()
@@ -627,6 +627,7 @@ exports.getUsersAuthenticatedRoles = (0, __1.endpoint)({
627
627
  * @api GET https://users.roblox.com/v1/users/search
628
628
  * @summary Searches for users by keyword.
629
629
  * @param keyword The search keyword.
630
+ * @param sessionId
630
631
  * @param limit The number of results per request.
631
632
  * @param cursor The paging cursor for the previous or next page.
632
633
  */
@@ -640,6 +641,10 @@ exports.getUsersSearch = (0, __1.endpoint)({
640
641
  style: 'form',
641
642
  explode: true,
642
643
  },
644
+ sessionId: {
645
+ style: 'form',
646
+ explode: true,
647
+ },
643
648
  limit: {
644
649
  style: 'form',
645
650
  explode: true,
@@ -651,6 +656,7 @@ exports.getUsersSearch = (0, __1.endpoint)({
651
656
  },
652
657
  parameters: {
653
658
  keyword: zod_1.z.string(),
659
+ sessionId: zod_1.z.string().optional(),
654
660
  limit: zod_1.z
655
661
  .union([zod_1.z.literal(10), zod_1.z.literal(25), zod_1.z.literal(50), zod_1.z.literal(100)])
656
662
  .optional()
package/lib/index.js CHANGED
@@ -72,8 +72,9 @@ function prepareRequestBody(method, requestFormat, body, headers) {
72
72
  }
73
73
  return body;
74
74
  }
75
+ const onRobloxSite = 'document' in globalThis && globalThis.location.href.includes('.roblox.com');
75
76
  exports.hbaClient = new roblox_bat_1.HBAClient({
76
- onSite: 'document' in globalThis && globalThis.location.href.includes('.roblox.com'),
77
+ onSite: onRobloxSite,
77
78
  });
78
79
  const getSHA256Hash = async (input) => {
79
80
  const textAsBuffer = new TextEncoder().encode(input);
@@ -95,7 +96,10 @@ exports.setHandleGenericChallenge = setHandleGenericChallenge;
95
96
  const csrfTokenMap = {};
96
97
  async function fetch(url, info, challengeData) {
97
98
  const headers = new Headers(info?.headers);
98
- const setHeaders = await exports.hbaClient.generateBaseHeaders(url, info?.body);
99
+ if (!onRobloxSite) {
100
+ exports.hbaClient.isAuthenticated = headers.get('cookie')?.includes('.ROBLOSECURITY');
101
+ }
102
+ const setHeaders = await exports.hbaClient.generateBaseHeaders(url, info?.credentials === 'include', info?.body);
99
103
  for (const key in setHeaders) {
100
104
  headers.set(key, setHeaders[key]);
101
105
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rozod",
3
- "version": "4.4.2",
3
+ "version": "4.5.0",
4
4
  "description": "A TypeScript wrapper for the Roblox API",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -9,7 +9,7 @@
9
9
  "dependencies": {
10
10
  "p-limit": "^3.0.0",
11
11
  "parse-roblox-errors": "^1.1.7",
12
- "roblox-bat": "^0.1.3",
12
+ "roblox-bat": "^0.3.3",
13
13
  "zod": "^3.21.4"
14
14
  },
15
15
  "repository": {