@quenty/userserviceutils 9.18.3-canary.550.afa1b3b.0 → 9.18.4-canary.11a5dcf.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.
- package/CHANGELOG.md +17 -1
- package/package.json +9 -9
- package/src/Shared/UserInfoAggregator.lua +26 -16
- package/src/Shared/UserInfoService.lua +18 -15
- package/src/Shared/UserServiceUtils.lua +25 -21
package/CHANGELOG.md
CHANGED
|
@@ -3,7 +3,23 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
-
## [9.18.
|
|
6
|
+
## [9.18.4-canary.11a5dcf.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/userserviceutils@9.18.3...@quenty/userserviceutils@9.18.4-canary.11a5dcf.0) (2025-05-10)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* Additional type checking updates ([05ba29a](https://github.com/Quenty/NevermoreEngine/commit/05ba29a03efc9f3feed74b34f1d9dfb237496214))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* Add even more types ([b31717d](https://github.com/Quenty/NevermoreEngine/commit/b31717d8c9f7620c457f5018a2affa760a65334a))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## [9.18.3](https://github.com/Quenty/NevermoreEngine/compare/@quenty/userserviceutils@9.18.2...@quenty/userserviceutils@9.18.3) (2025-04-10)
|
|
7
23
|
|
|
8
24
|
**Note:** Version bump only for package @quenty/userserviceutils
|
|
9
25
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quenty/userserviceutils",
|
|
3
|
-
"version": "9.18.
|
|
3
|
+
"version": "9.18.4-canary.11a5dcf.0",
|
|
4
4
|
"description": "Utilities involving UserService in Roblox",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Roblox",
|
|
@@ -25,17 +25,17 @@
|
|
|
25
25
|
"Quenty"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@quenty/aggregator": "1.4.
|
|
29
|
-
"@quenty/baseobject": "10.8.
|
|
30
|
-
"@quenty/loader": "10.8.
|
|
31
|
-
"@quenty/maid": "3.4.
|
|
28
|
+
"@quenty/aggregator": "1.4.4-canary.11a5dcf.0",
|
|
29
|
+
"@quenty/baseobject": "10.8.4-canary.11a5dcf.0",
|
|
30
|
+
"@quenty/loader": "10.8.4-canary.11a5dcf.0",
|
|
31
|
+
"@quenty/maid": "3.4.4-canary.11a5dcf.0",
|
|
32
32
|
"@quenty/math": "2.7.3",
|
|
33
|
-
"@quenty/promise": "10.10.
|
|
34
|
-
"@quenty/rx": "13.17.
|
|
35
|
-
"@quenty/servicebag": "11.11.
|
|
33
|
+
"@quenty/promise": "10.10.5-canary.11a5dcf.0",
|
|
34
|
+
"@quenty/rx": "13.17.4-canary.11a5dcf.0",
|
|
35
|
+
"@quenty/servicebag": "11.11.5-canary.11a5dcf.0"
|
|
36
36
|
},
|
|
37
37
|
"publishConfig": {
|
|
38
38
|
"access": "public"
|
|
39
39
|
},
|
|
40
|
-
"gitHead": "
|
|
40
|
+
"gitHead": "11a5dcf7d4c7a0bfbf3337e97d30e8346ea09d3f"
|
|
41
41
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
--!strict
|
|
1
2
|
--[=[
|
|
2
3
|
Aggregates all requests into one big send request to deduplicate the request
|
|
3
4
|
|
|
@@ -8,24 +9,33 @@ local require = require(script.Parent.loader).load(script)
|
|
|
8
9
|
|
|
9
10
|
local Aggregator = require("Aggregator")
|
|
10
11
|
local BaseObject = require("BaseObject")
|
|
12
|
+
local Observable = require("Observable")
|
|
13
|
+
local Promise = require("Promise")
|
|
14
|
+
local PromiseRetryUtils = require("PromiseRetryUtils")
|
|
11
15
|
local Rx = require("Rx")
|
|
12
16
|
local UserServiceUtils = require("UserServiceUtils")
|
|
13
|
-
local PromiseRetryUtils = require("PromiseRetryUtils")
|
|
14
17
|
|
|
15
18
|
local UserInfoAggregator = setmetatable({}, BaseObject)
|
|
16
19
|
UserInfoAggregator.ClassName = "UserInfoAggregator"
|
|
17
20
|
UserInfoAggregator.__index = UserInfoAggregator
|
|
18
21
|
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
export type UserInfoAggregator = typeof(setmetatable(
|
|
23
|
+
{} :: {
|
|
24
|
+
_aggregator: Aggregator.Aggregator<UserServiceUtils.UserInfo>,
|
|
25
|
+
},
|
|
26
|
+
{} :: typeof({ __index = UserInfoAggregator })
|
|
27
|
+
)) & BaseObject.BaseObject
|
|
28
|
+
|
|
29
|
+
function UserInfoAggregator.new(): UserInfoAggregator
|
|
30
|
+
local self: UserInfoAggregator = setmetatable(BaseObject.new() :: any, UserInfoAggregator)
|
|
21
31
|
|
|
22
32
|
self._aggregator = self._maid:Add(Aggregator.new("UserServiceUtils.promiseUserInfosByUserIds", function(userIdList)
|
|
23
33
|
return PromiseRetryUtils.retry(function()
|
|
24
34
|
return UserServiceUtils.promiseUserInfosByUserIds(userIdList)
|
|
25
35
|
end, {
|
|
26
|
-
initialWaitTime = 10
|
|
27
|
-
maxAttempts = 10
|
|
28
|
-
printWarning = true
|
|
36
|
+
initialWaitTime = 10,
|
|
37
|
+
maxAttempts = 10,
|
|
38
|
+
printWarning = true,
|
|
29
39
|
})
|
|
30
40
|
end))
|
|
31
41
|
|
|
@@ -39,7 +49,7 @@ end
|
|
|
39
49
|
@param userId number
|
|
40
50
|
@return Promise<UserInfo>
|
|
41
51
|
]=]
|
|
42
|
-
function UserInfoAggregator:PromiseUserInfo(userId: number)
|
|
52
|
+
function UserInfoAggregator:PromiseUserInfo(userId: number): Promise.Promise<UserServiceUtils.UserInfo>
|
|
43
53
|
assert(type(userId) == "number", "Bad userId")
|
|
44
54
|
|
|
45
55
|
return self._aggregator:Promise(userId)
|
|
@@ -51,7 +61,7 @@ end
|
|
|
51
61
|
@param userId number
|
|
52
62
|
@return Promise<string>
|
|
53
63
|
]=]
|
|
54
|
-
function UserInfoAggregator:PromiseDisplayName(userId: number)
|
|
64
|
+
function UserInfoAggregator:PromiseDisplayName(userId: number): Promise.Promise<string>
|
|
55
65
|
assert(type(userId) == "number", "Bad userId")
|
|
56
66
|
|
|
57
67
|
return self._aggregator:Promise(userId):Then(function(userInfo)
|
|
@@ -65,7 +75,7 @@ end
|
|
|
65
75
|
@param userId number
|
|
66
76
|
@return Promise<string>
|
|
67
77
|
]=]
|
|
68
|
-
function UserInfoAggregator:PromiseUsername(userId: number)
|
|
78
|
+
function UserInfoAggregator:PromiseUsername(userId: number): Promise.Promise<string>
|
|
69
79
|
assert(type(userId) == "number", "Bad userId")
|
|
70
80
|
|
|
71
81
|
return self._aggregator:Promise(userId):Then(function(userInfo)
|
|
@@ -79,7 +89,7 @@ end
|
|
|
79
89
|
@param userId number
|
|
80
90
|
@return Promise<boolean>
|
|
81
91
|
]=]
|
|
82
|
-
function UserInfoAggregator:PromiseHasVerifiedBadge(userId: number)
|
|
92
|
+
function UserInfoAggregator:PromiseHasVerifiedBadge(userId: number): Promise.Promise<boolean>
|
|
83
93
|
assert(type(userId) == "number", "Bad userId")
|
|
84
94
|
|
|
85
95
|
return self._aggregator:Promise(userId):Then(function(userInfo)
|
|
@@ -93,7 +103,7 @@ end
|
|
|
93
103
|
@param userId number
|
|
94
104
|
@return Observable<UserInfo>
|
|
95
105
|
]=]
|
|
96
|
-
function UserInfoAggregator:ObserveUserInfo(userId: number)
|
|
106
|
+
function UserInfoAggregator:ObserveUserInfo(userId: number): Observable.Observable<UserServiceUtils.UserInfo>
|
|
97
107
|
assert(type(userId) == "number", "Bad userId")
|
|
98
108
|
|
|
99
109
|
return self._aggregator:Observe(userId)
|
|
@@ -105,7 +115,7 @@ end
|
|
|
105
115
|
@param userId number
|
|
106
116
|
@return Observable<string>
|
|
107
117
|
]=]
|
|
108
|
-
function UserInfoAggregator:ObserveDisplayName(userId: number)
|
|
118
|
+
function UserInfoAggregator:ObserveDisplayName(userId: number): Observable.Observable<string>
|
|
109
119
|
assert(type(userId) == "number", "Bad userId")
|
|
110
120
|
|
|
111
121
|
return self._aggregator:Observe(userId):Pipe({
|
|
@@ -121,7 +131,7 @@ end
|
|
|
121
131
|
@param userId number
|
|
122
132
|
@return Observable<string>
|
|
123
133
|
]=]
|
|
124
|
-
function UserInfoAggregator:ObserveUsername(userId: number)
|
|
134
|
+
function UserInfoAggregator:ObserveUsername(userId: number): Observable.Observable<string>
|
|
125
135
|
assert(type(userId) == "number", "Bad userId")
|
|
126
136
|
|
|
127
137
|
return self._aggregator:Observe(userId):Pipe({
|
|
@@ -137,14 +147,14 @@ end
|
|
|
137
147
|
@param userId number
|
|
138
148
|
@return Observable<boolean>
|
|
139
149
|
]=]
|
|
140
|
-
function UserInfoAggregator:ObserveHasVerifiedBadge(userId: number)
|
|
150
|
+
function UserInfoAggregator:ObserveHasVerifiedBadge(userId: number): Observable.Observable<boolean>
|
|
141
151
|
assert(type(userId) == "number", "Bad userId")
|
|
142
152
|
|
|
143
153
|
return self._aggregator:Observe(userId):Pipe({
|
|
144
154
|
Rx.map(function(userInfo)
|
|
145
155
|
return userInfo.HasVerifiedBadge
|
|
146
|
-
end)
|
|
156
|
+
end),
|
|
147
157
|
})
|
|
148
158
|
end
|
|
149
159
|
|
|
150
|
-
return UserInfoAggregator
|
|
160
|
+
return UserInfoAggregator
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
--!strict
|
|
1
2
|
--[=[
|
|
2
3
|
Centralized provider for user info so we can coordinate web requests.
|
|
3
4
|
|
|
@@ -6,14 +7,17 @@
|
|
|
6
7
|
|
|
7
8
|
local require = require(script.Parent.loader).load(script)
|
|
8
9
|
|
|
9
|
-
local UserInfoAggregator = require("UserInfoAggregator")
|
|
10
10
|
local Maid = require("Maid")
|
|
11
|
-
local
|
|
11
|
+
local Observable = require("Observable")
|
|
12
|
+
local Promise = require("Promise")
|
|
13
|
+
local ServiceBag = require("ServiceBag")
|
|
14
|
+
local UserInfoAggregator = require("UserInfoAggregator")
|
|
15
|
+
local UserServiceUtils = require("UserServiceUtils")
|
|
12
16
|
|
|
13
17
|
local UserInfoService = {}
|
|
14
18
|
UserInfoService.ServiceName = "UserInfoService"
|
|
15
19
|
|
|
16
|
-
function UserInfoService:Init(serviceBag:
|
|
20
|
+
function UserInfoService:Init(serviceBag: ServiceBag.ServiceBag)
|
|
17
21
|
assert(not self._serviceBag, "Already initialized")
|
|
18
22
|
self._serviceBag = assert(serviceBag, "No serviceBag")
|
|
19
23
|
self._maid = Maid.new()
|
|
@@ -28,8 +32,8 @@ end
|
|
|
28
32
|
@param userId number
|
|
29
33
|
@return Promise<UserInfo>
|
|
30
34
|
]=]
|
|
31
|
-
function UserInfoService:PromiseUserInfo(userId: number)
|
|
32
|
-
|
|
35
|
+
function UserInfoService:PromiseUserInfo(userId: number): Promise.Promise<UserServiceUtils.UserInfo>
|
|
36
|
+
assert(type(userId) == "number", "Bad userId")
|
|
33
37
|
|
|
34
38
|
return self._aggregator:PromiseUserInfo(userId)
|
|
35
39
|
end
|
|
@@ -40,8 +44,8 @@ end
|
|
|
40
44
|
@param userId number
|
|
41
45
|
@return Observable<UserInfo>
|
|
42
46
|
]=]
|
|
43
|
-
function UserInfoService:ObserveUserInfo(userId: number)
|
|
44
|
-
|
|
47
|
+
function UserInfoService:ObserveUserInfo(userId: number): Observable.Observable<UserServiceUtils.UserInfo>
|
|
48
|
+
assert(type(userId) == "number", "Bad userId")
|
|
45
49
|
|
|
46
50
|
return self._aggregator:ObserveUserInfo(userId)
|
|
47
51
|
end
|
|
@@ -52,8 +56,8 @@ end
|
|
|
52
56
|
@param userId number
|
|
53
57
|
@return Promise<string>
|
|
54
58
|
]=]
|
|
55
|
-
function UserInfoService:PromiseDisplayName(userId: number)
|
|
56
|
-
|
|
59
|
+
function UserInfoService:PromiseDisplayName(userId: number): Promise.Promise<string>
|
|
60
|
+
assert(type(userId) == "number", "Bad userId")
|
|
57
61
|
|
|
58
62
|
return self._aggregator:PromiseDisplayName(userId)
|
|
59
63
|
end
|
|
@@ -64,8 +68,8 @@ end
|
|
|
64
68
|
@param userId number
|
|
65
69
|
@return Promise<string>
|
|
66
70
|
]=]
|
|
67
|
-
function UserInfoService:PromiseUsername(userId: number)
|
|
68
|
-
|
|
71
|
+
function UserInfoService:PromiseUsername(userId: number): Promise.Promise<string>
|
|
72
|
+
assert(type(userId) == "number", "Bad userId")
|
|
69
73
|
|
|
70
74
|
return self._aggregator:PromiseUsername(userId)
|
|
71
75
|
end
|
|
@@ -76,15 +80,14 @@ end
|
|
|
76
80
|
@param userId number
|
|
77
81
|
@return Observable<string>
|
|
78
82
|
]=]
|
|
79
|
-
function UserInfoService:ObserveDisplayName(userId: number)
|
|
80
|
-
|
|
83
|
+
function UserInfoService:ObserveDisplayName(userId: number): Observable.Observable<UserServiceUtils.UserInfo>
|
|
84
|
+
assert(type(userId) == "number", "Bad userId")
|
|
81
85
|
|
|
82
86
|
return self._aggregator:ObserveDisplayName(userId)
|
|
83
87
|
end
|
|
84
88
|
|
|
85
|
-
|
|
86
89
|
function UserInfoService:Destroy()
|
|
87
90
|
self._maid:DoCleaning()
|
|
88
91
|
end
|
|
89
92
|
|
|
90
|
-
return UserInfoService
|
|
93
|
+
return UserInfoService
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
--!strict
|
|
1
2
|
--[=[
|
|
2
3
|
Wraps [UserService] API calls with [Promise].
|
|
3
4
|
|
|
@@ -20,6 +21,12 @@ local UserServiceUtils = {}
|
|
|
20
21
|
.HasVerifiedBadge boolean -- The HasVerifiedBadge value associated with the user.
|
|
21
22
|
@within UserServiceUtils
|
|
22
23
|
]=]
|
|
24
|
+
export type UserInfo = {
|
|
25
|
+
Id: number,
|
|
26
|
+
Username: string,
|
|
27
|
+
DisplayName: string,
|
|
28
|
+
HasVerifiedBadge: boolean,
|
|
29
|
+
}
|
|
23
30
|
|
|
24
31
|
--[=[
|
|
25
32
|
Wraps UserService:GetUserInfosByUserIdsAsync(userIds)
|
|
@@ -31,7 +38,7 @@ local UserServiceUtils = {}
|
|
|
31
38
|
@param userIds { number }
|
|
32
39
|
@return Promise<{ UserInfo }>
|
|
33
40
|
]=]
|
|
34
|
-
function UserServiceUtils.promiseUserInfosByUserIds(userIds)
|
|
41
|
+
function UserServiceUtils.promiseUserInfosByUserIds(userIds: { number }): Promise.Promise<{ UserInfo }>
|
|
35
42
|
assert(type(userIds) == "table", "Bad userIds")
|
|
36
43
|
|
|
37
44
|
return Promise.spawn(function(resolve, reject)
|
|
@@ -61,19 +68,18 @@ end
|
|
|
61
68
|
@param userId number
|
|
62
69
|
@return Promise<UserInfo>
|
|
63
70
|
]=]
|
|
64
|
-
function UserServiceUtils.promiseUserInfo(userId)
|
|
71
|
+
function UserServiceUtils.promiseUserInfo(userId: number): Promise.Promise<UserInfo>
|
|
65
72
|
assert(type(userId) == "number", "Bad userId")
|
|
66
73
|
|
|
67
|
-
return UserServiceUtils.promiseUserInfosByUserIds({ userId })
|
|
68
|
-
|
|
69
|
-
local userInfo = infos[1]
|
|
74
|
+
return UserServiceUtils.promiseUserInfosByUserIds({ userId }):Then(function(infos)
|
|
75
|
+
local userInfo = infos[1]
|
|
70
76
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
77
|
+
if not userInfo then
|
|
78
|
+
return Promise.rejected("Failed to retrieve data for userId")
|
|
79
|
+
end
|
|
74
80
|
|
|
75
|
-
|
|
76
|
-
|
|
81
|
+
return userInfo
|
|
82
|
+
end)
|
|
77
83
|
end
|
|
78
84
|
|
|
79
85
|
--[=[
|
|
@@ -86,13 +92,12 @@ end
|
|
|
86
92
|
@param userId number
|
|
87
93
|
@return Promise<string>
|
|
88
94
|
]=]
|
|
89
|
-
function UserServiceUtils.promiseDisplayName(userId)
|
|
95
|
+
function UserServiceUtils.promiseDisplayName(userId: number): Promise.Promise<string>
|
|
90
96
|
assert(type(userId) == "number", "Bad userId")
|
|
91
97
|
|
|
92
|
-
return UserServiceUtils.promiseUserInfo(userId)
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
end)
|
|
98
|
+
return UserServiceUtils.promiseUserInfo(userId):Then(function(userInfo)
|
|
99
|
+
return userInfo.DisplayName
|
|
100
|
+
end)
|
|
96
101
|
end
|
|
97
102
|
|
|
98
103
|
--[=[
|
|
@@ -105,13 +110,12 @@ end
|
|
|
105
110
|
@param userId number
|
|
106
111
|
@return Promise<string>
|
|
107
112
|
]=]
|
|
108
|
-
function UserServiceUtils.promiseUserName(userId)
|
|
113
|
+
function UserServiceUtils.promiseUserName(userId: number): Promise.Promise<string>
|
|
109
114
|
assert(type(userId) == "number", "Bad userId")
|
|
110
115
|
|
|
111
|
-
return UserServiceUtils.promiseUserInfo(userId)
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
end)
|
|
116
|
+
return UserServiceUtils.promiseUserInfo(userId):Then(function(userInfo)
|
|
117
|
+
return userInfo.Username
|
|
118
|
+
end)
|
|
115
119
|
end
|
|
116
120
|
|
|
117
|
-
return UserServiceUtils
|
|
121
|
+
return UserServiceUtils
|