@quenty/secrets 7.50.1 → 7.51.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
CHANGED
|
@@ -3,6 +3,20 @@
|
|
|
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
|
+
# [7.51.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/secrets@7.50.2...@quenty/secrets@7.51.0) (2026-07-14)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **lint:** resolve selene unused-self and Rx shadowing from --!strict conversions ([3f4a085](https://github.com/Quenty/NevermoreEngine/commit/3f4a085911808146f10a2435efbe9e89dff8edff))
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
- **secrets:** convert package to --!strict ([d0771a1](https://github.com/Quenty/NevermoreEngine/commit/d0771a1e22b964bb9b06a072e3d43ff5e1443923))
|
|
15
|
+
|
|
16
|
+
## [7.50.2](https://github.com/Quenty/NevermoreEngine/compare/@quenty/secrets@7.50.1...@quenty/secrets@7.50.2) (2026-06-03)
|
|
17
|
+
|
|
18
|
+
**Note:** Version bump only for package @quenty/secrets
|
|
19
|
+
|
|
6
20
|
## [7.50.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/secrets@7.50.0...@quenty/secrets@7.50.1) (2026-05-30)
|
|
7
21
|
|
|
8
22
|
**Note:** Version bump only for package @quenty/secrets
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quenty/secrets",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.51.0",
|
|
4
4
|
"description": "Secrets storage system and API surface",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Roblox",
|
|
@@ -28,13 +28,13 @@
|
|
|
28
28
|
"Quenty"
|
|
29
29
|
],
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@quenty/cmdrservice": "13.
|
|
32
|
-
"@quenty/datastore": "13.
|
|
33
|
-
"@quenty/ellipticcurvecryptography": "1.
|
|
31
|
+
"@quenty/cmdrservice": "13.46.0",
|
|
32
|
+
"@quenty/datastore": "13.40.0",
|
|
33
|
+
"@quenty/ellipticcurvecryptography": "1.13.0",
|
|
34
34
|
"@quenty/loader": "10.11.0",
|
|
35
35
|
"@quenty/maid": "3.9.0",
|
|
36
36
|
"@quenty/nevermore-test-runner": "1.4.0",
|
|
37
|
-
"@quenty/permissionprovider": "14.
|
|
37
|
+
"@quenty/permissionprovider": "14.39.0",
|
|
38
38
|
"@quenty/promise": "10.18.1",
|
|
39
39
|
"@quenty/remotefunctionutils": "10.18.1",
|
|
40
40
|
"@quenty/remoting": "12.32.1",
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"publishConfig": {
|
|
47
47
|
"access": "public"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "13f0162f4971a77378e55e9b7236aea94f0dd3a8"
|
|
50
50
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
--!
|
|
1
|
+
--!strict
|
|
2
2
|
--[=[
|
|
3
3
|
@class SecretsServiceClient
|
|
4
4
|
]=]
|
|
@@ -16,8 +16,19 @@ local ServiceBag = require("ServiceBag")
|
|
|
16
16
|
local SecretsServiceClient = {}
|
|
17
17
|
SecretsServiceClient.ServiceName = "SecretsServiceClient"
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
export type SecretsServiceClient = typeof(setmetatable(
|
|
20
|
+
{} :: {
|
|
21
|
+
_serviceBag: ServiceBag.ServiceBag,
|
|
22
|
+
_maid: Maid.Maid,
|
|
23
|
+
_cmdrService: any,
|
|
24
|
+
_permissionsService: any,
|
|
25
|
+
_remoteFunctionPromise: Promise.Promise<any>?,
|
|
26
|
+
},
|
|
27
|
+
{} :: typeof({ __index = SecretsServiceClient })
|
|
28
|
+
))
|
|
29
|
+
|
|
30
|
+
function SecretsServiceClient.Init(self: SecretsServiceClient, serviceBag: ServiceBag.ServiceBag): ()
|
|
31
|
+
assert(not (self :: any)._serviceBag, "Already initialized")
|
|
21
32
|
self._serviceBag = assert(serviceBag, "No serviceBag")
|
|
22
33
|
self._maid = Maid.new()
|
|
23
34
|
|
|
@@ -26,46 +37,49 @@ function SecretsServiceClient:Init(serviceBag: ServiceBag.ServiceBag)
|
|
|
26
37
|
self._permissionsService = self._serviceBag:GetService(require("PermissionServiceClient"))
|
|
27
38
|
end
|
|
28
39
|
|
|
29
|
-
function SecretsServiceClient
|
|
40
|
+
function SecretsServiceClient.Start(self: SecretsServiceClient): ()
|
|
30
41
|
self:_registerCmdrTypes()
|
|
31
42
|
end
|
|
32
43
|
|
|
33
|
-
function SecretsServiceClient
|
|
34
|
-
return
|
|
35
|
-
:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
44
|
+
function SecretsServiceClient.PromiseSecretKeyNamesList(self: SecretsServiceClient): Promise.Promise<{ string }>
|
|
45
|
+
return (
|
|
46
|
+
self:_promiseRemoteFunction()
|
|
47
|
+
:Then(function(remoteFunction)
|
|
48
|
+
return self._maid:GivePromise(
|
|
49
|
+
RemoteFunctionUtils.promiseInvokeServer(
|
|
50
|
+
remoteFunction,
|
|
51
|
+
SecretsServiceConstants.REQUEST_SECRET_KEY_NAMES_LIST
|
|
52
|
+
)
|
|
40
53
|
)
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
end
|
|
49
|
-
|
|
54
|
+
end)
|
|
55
|
+
:Then(function(ok, list)
|
|
56
|
+
if not ok then
|
|
57
|
+
return Promise.rejected(list or "Failed to get list")
|
|
58
|
+
else
|
|
59
|
+
return Promise.resolved(list)
|
|
60
|
+
end
|
|
61
|
+
end) :: any
|
|
62
|
+
) :: Promise.Promise<{ string }>
|
|
50
63
|
end
|
|
51
64
|
|
|
52
|
-
function SecretsServiceClient
|
|
65
|
+
function SecretsServiceClient._registerCmdrTypes(self: SecretsServiceClient): ()
|
|
53
66
|
self._maid:GivePromise(self._cmdrService:PromiseCmdr()):Then(function(cmdr)
|
|
54
67
|
SecretsCmdrTypeUtils.registerSecretKeyTypes(cmdr, self)
|
|
55
68
|
end)
|
|
56
69
|
end
|
|
57
70
|
|
|
58
|
-
function SecretsServiceClient
|
|
71
|
+
function SecretsServiceClient._promiseRemoteFunction(self: SecretsServiceClient): Promise.Promise<any>
|
|
59
72
|
if self._remoteFunctionPromise then
|
|
60
73
|
return self._remoteFunctionPromise
|
|
61
74
|
end
|
|
62
75
|
|
|
63
|
-
|
|
76
|
+
local remoteFunctionPromise =
|
|
64
77
|
self._maid:GivePromise(PromiseGetRemoteFunction(SecretsServiceConstants.REMOTE_FUNCTION_NAME))
|
|
65
|
-
|
|
78
|
+
self._remoteFunctionPromise = remoteFunctionPromise
|
|
79
|
+
return remoteFunctionPromise
|
|
66
80
|
end
|
|
67
81
|
|
|
68
|
-
function SecretsServiceClient
|
|
82
|
+
function SecretsServiceClient.Destroy(self: SecretsServiceClient): ()
|
|
69
83
|
self._maid:DoCleaning()
|
|
70
84
|
end
|
|
71
85
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
--!
|
|
1
|
+
--!strict
|
|
2
2
|
--[=[
|
|
3
3
|
@class SecretsCommandService
|
|
4
4
|
]=]
|
|
@@ -12,8 +12,18 @@ local ServiceBag = require("ServiceBag")
|
|
|
12
12
|
local SecretsCommandService = {}
|
|
13
13
|
SecretsCommandService.ServiceName = "SecretsCommandService"
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
export type SecretsCommandService = typeof(setmetatable(
|
|
16
|
+
{} :: {
|
|
17
|
+
_serviceBag: ServiceBag.ServiceBag,
|
|
18
|
+
_maid: Maid.Maid,
|
|
19
|
+
_cmdrService: any,
|
|
20
|
+
_secretsService: any,
|
|
21
|
+
},
|
|
22
|
+
{} :: typeof({ __index = SecretsCommandService })
|
|
23
|
+
))
|
|
24
|
+
|
|
25
|
+
function SecretsCommandService.Init(self: SecretsCommandService, serviceBag: ServiceBag.ServiceBag): ()
|
|
26
|
+
assert(not (self :: any)._serviceBag, "Already initialized")
|
|
17
27
|
self._serviceBag = assert(serviceBag, "No serviceBag")
|
|
18
28
|
self._maid = Maid.new()
|
|
19
29
|
|
|
@@ -21,11 +31,11 @@ function SecretsCommandService:Init(serviceBag: ServiceBag.ServiceBag)
|
|
|
21
31
|
self._secretsService = self._serviceBag:GetService((require :: any)("SecretsService"))
|
|
22
32
|
end
|
|
23
33
|
|
|
24
|
-
function SecretsCommandService
|
|
34
|
+
function SecretsCommandService.Start(self: SecretsCommandService): ()
|
|
25
35
|
self:_registerCommands()
|
|
26
36
|
end
|
|
27
37
|
|
|
28
|
-
function SecretsCommandService
|
|
38
|
+
function SecretsCommandService._registerCommands(self: SecretsCommandService): ()
|
|
29
39
|
self._maid:GivePromise(self._cmdrService:PromiseCmdr()):Then(function(cmdr)
|
|
30
40
|
SecretsCmdrTypeUtils.registerSecretKeyTypes(cmdr, self._secretsService)
|
|
31
41
|
end)
|
|
@@ -153,7 +163,7 @@ function SecretsCommandService:_registerCommands()
|
|
|
153
163
|
end)
|
|
154
164
|
end
|
|
155
165
|
|
|
156
|
-
function SecretsCommandService
|
|
166
|
+
function SecretsCommandService.Destroy(self: SecretsCommandService): ()
|
|
157
167
|
self._maid:DoCleaning()
|
|
158
168
|
end
|
|
159
169
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
--!
|
|
1
|
+
--!strict
|
|
2
2
|
--[=[
|
|
3
3
|
@class SecretsService
|
|
4
4
|
]=]
|
|
@@ -18,8 +18,28 @@ local ServiceBag = require("ServiceBag")
|
|
|
18
18
|
local SecretsService = {}
|
|
19
19
|
SecretsService.ServiceName = "SecretsService"
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
export type SecretsData = {
|
|
22
|
+
encrypted: { number },
|
|
23
|
+
signature: { number },
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type SecretsService = typeof(setmetatable(
|
|
27
|
+
{} :: {
|
|
28
|
+
_serviceBag: ServiceBag.ServiceBag,
|
|
29
|
+
_maid: Maid.Maid,
|
|
30
|
+
_gameDataStoreService: any,
|
|
31
|
+
_permissionsService: any,
|
|
32
|
+
_publicKey: any,
|
|
33
|
+
_privateKey: any,
|
|
34
|
+
_warningRequired: boolean,
|
|
35
|
+
_remoteFunction: RemoteFunction,
|
|
36
|
+
_substorePromise: any,
|
|
37
|
+
},
|
|
38
|
+
{} :: typeof({ __index = SecretsService })
|
|
39
|
+
))
|
|
40
|
+
|
|
41
|
+
function SecretsService.Init(self: SecretsService, serviceBag: ServiceBag.ServiceBag): ()
|
|
42
|
+
assert(not (self :: any)._serviceBag, "Already initialized")
|
|
23
43
|
self._serviceBag = assert(serviceBag, "No serviceBag")
|
|
24
44
|
self._maid = Maid.new()
|
|
25
45
|
|
|
@@ -43,7 +63,7 @@ end
|
|
|
43
63
|
|
|
44
64
|
@param seed number
|
|
45
65
|
]=]
|
|
46
|
-
function SecretsService
|
|
66
|
+
function SecretsService.SetPublicKeySeed(self: SecretsService, seed: number): ()
|
|
47
67
|
assert(type(seed) == "number", "Bad seed")
|
|
48
68
|
|
|
49
69
|
local private, public = EllipticCurveCryptography.keypair(seed or EllipticCurveCryptography.random.random())
|
|
@@ -55,7 +75,7 @@ end
|
|
|
55
75
|
--[=[
|
|
56
76
|
Starts the secret service. Should be done via [ServiceBag].
|
|
57
77
|
]=]
|
|
58
|
-
function SecretsService
|
|
78
|
+
function SecretsService.Start(self: SecretsService): ()
|
|
59
79
|
self._remoteFunction = GetRemoteFunction(SecretsServiceConstants.REMOTE_FUNCTION_NAME)
|
|
60
80
|
self._remoteFunction.OnServerInvoke = function(...)
|
|
61
81
|
return self:_handleServerInvoke(...)
|
|
@@ -68,7 +88,7 @@ end
|
|
|
68
88
|
@param secretKey string
|
|
69
89
|
@return Promise<string>
|
|
70
90
|
]=]
|
|
71
|
-
function SecretsService
|
|
91
|
+
function SecretsService.PromiseSecret(self: SecretsService, secretKey: string): Promise.Promise<string | Secret>
|
|
72
92
|
assert(type(secretKey) == "string", "Bad secretKey")
|
|
73
93
|
|
|
74
94
|
local found
|
|
@@ -79,14 +99,14 @@ function SecretsService:PromiseSecret(secretKey: string): Promise.Promise<string
|
|
|
79
99
|
return Promise.resolved(found)
|
|
80
100
|
end
|
|
81
101
|
|
|
82
|
-
return self:_promiseSubstore():Then(function(substore)
|
|
83
|
-
return self._maid:GivePromise(substore:Load(secretKey)):Then(function(data)
|
|
102
|
+
return (self :: any):_promiseSubstore():Then(function(substore)
|
|
103
|
+
return (self._maid :: any):GivePromise(substore:Load(secretKey)):Then(function(data)
|
|
84
104
|
if type(data) ~= "table" then
|
|
85
105
|
return Promise.resolved(nil)
|
|
86
106
|
else
|
|
87
107
|
local ok, value = self:_decrypt(data)
|
|
88
108
|
if ok then
|
|
89
|
-
return value
|
|
109
|
+
return value :: any
|
|
90
110
|
else
|
|
91
111
|
return Promise.rejected(value or "Failed to decrypt result")
|
|
92
112
|
end
|
|
@@ -100,9 +120,9 @@ end
|
|
|
100
120
|
|
|
101
121
|
@return @return Promise<{string}>
|
|
102
122
|
]=]
|
|
103
|
-
function SecretsService
|
|
104
|
-
return self:_promiseSubstore():Then(function(substore)
|
|
105
|
-
return self._maid:GivePromise(substore:LoadAll()):Then(function(secretsList)
|
|
123
|
+
function SecretsService.PromiseAllSecrets(self: SecretsService): Promise.Promise<{ string }>
|
|
124
|
+
return (self :: any):_promiseSubstore():Then(function(substore)
|
|
125
|
+
return (self._maid :: any):GivePromise(substore:LoadAll()):Then(function(secretsList)
|
|
106
126
|
local secretMap = {}
|
|
107
127
|
|
|
108
128
|
for key, secretData in secretsList do
|
|
@@ -125,13 +145,13 @@ end
|
|
|
125
145
|
@param secretKey string
|
|
126
146
|
@return Observable<string>
|
|
127
147
|
]=]
|
|
128
|
-
function SecretsService
|
|
148
|
+
function SecretsService.ObserveSecret(self: SecretsService, secretKey: string): Observable.Observable<string>
|
|
129
149
|
assert(type(secretKey) == "string", "Bad secretKey")
|
|
130
150
|
|
|
131
|
-
return Observable.new(function(sub)
|
|
132
|
-
local maid = Maid.new()
|
|
151
|
+
return Observable.new(function(sub: any)
|
|
152
|
+
local maid: any = Maid.new()
|
|
133
153
|
|
|
134
|
-
maid:GivePromise(self:_promiseSubstore():Then(function(substore)
|
|
154
|
+
maid:GivePromise((self :: any):_promiseSubstore():Then(function(substore)
|
|
135
155
|
maid:GivePromise(
|
|
136
156
|
substore:Observe(secretKey):Subscribe(function(data)
|
|
137
157
|
if type(data) ~= "table" then
|
|
@@ -153,7 +173,7 @@ function SecretsService:ObserveSecret(secretKey: string): Observable.Observable<
|
|
|
153
173
|
end))
|
|
154
174
|
|
|
155
175
|
return maid
|
|
156
|
-
end)
|
|
176
|
+
end) :: any
|
|
157
177
|
end
|
|
158
178
|
|
|
159
179
|
--[=[
|
|
@@ -161,10 +181,10 @@ end
|
|
|
161
181
|
|
|
162
182
|
@param secretKey string
|
|
163
183
|
]=]
|
|
164
|
-
function SecretsService
|
|
184
|
+
function SecretsService.DeleteSecret(self: SecretsService, secretKey: string): Promise.Promise<()>
|
|
165
185
|
assert(type(secretKey) == "string", "Bad secretKey")
|
|
166
186
|
|
|
167
|
-
return self:_promiseSubstore():Then(function(substore)
|
|
187
|
+
return (self :: any):_promiseSubstore():Then(function(substore)
|
|
168
188
|
substore:Delete(secretKey)
|
|
169
189
|
end)
|
|
170
190
|
end
|
|
@@ -175,20 +195,19 @@ end
|
|
|
175
195
|
@param secretKey string
|
|
176
196
|
@param value string
|
|
177
197
|
]=]
|
|
178
|
-
function SecretsService
|
|
198
|
+
function SecretsService.StoreSecret(self: SecretsService, secretKey: string, value: string): ()
|
|
179
199
|
assert(type(secretKey) == "string", "Bad secretKey")
|
|
180
200
|
assert(type(value) == "string", "Bad value")
|
|
181
201
|
|
|
182
|
-
self:_warnAboutNoPublicKeyStoredInSourceCode()
|
|
183
|
-
|
|
184
|
-
self:_promiseSubstore():Then(function(substore)
|
|
202
|
+
self:_warnAboutNoPublicKeyStoredInSourceCode();
|
|
203
|
+
(self :: any):_promiseSubstore():Then(function(substore)
|
|
185
204
|
local encrypted = EllipticCurveCryptography.encrypt(value, self._privateKey)
|
|
186
205
|
local signature = EllipticCurveCryptography.sign(self._privateKey, value)
|
|
187
206
|
|
|
188
207
|
-- TODO: Encode byte array in more efficient structure for JSON
|
|
189
208
|
local toStore = {
|
|
190
|
-
encrypted = setmetatable(table.clone(encrypted), nil), -- remove metatable
|
|
191
|
-
signature = setmetatable(table.clone(signature), nil), -- remove metatable
|
|
209
|
+
encrypted = setmetatable(table.clone(encrypted) :: any, nil), -- remove metatable
|
|
210
|
+
signature = setmetatable(table.clone(signature) :: any, nil), -- remove metatable
|
|
192
211
|
}
|
|
193
212
|
|
|
194
213
|
substore:Store(secretKey, toStore)
|
|
@@ -200,8 +219,8 @@ end
|
|
|
200
219
|
|
|
201
220
|
@return Promise<()>
|
|
202
221
|
]=]
|
|
203
|
-
function SecretsService
|
|
204
|
-
return self:_promiseSubstore():Then(function(substore)
|
|
222
|
+
function SecretsService.ClearAllSecrets(self: SecretsService): Promise.Promise<()>
|
|
223
|
+
return (self :: any):_promiseSubstore():Then(function(substore)
|
|
205
224
|
return substore:Wipe()
|
|
206
225
|
end)
|
|
207
226
|
end
|
|
@@ -211,20 +230,20 @@ end
|
|
|
211
230
|
|
|
212
231
|
@return Promise<{ string }>
|
|
213
232
|
]=]
|
|
214
|
-
function SecretsService
|
|
215
|
-
return self:_promiseSubstore():Then(function(substore)
|
|
233
|
+
function SecretsService.PromiseSecretKeyNamesList(self: SecretsService): Promise.Promise<{ string }>
|
|
234
|
+
return (self :: any):_promiseSubstore():Then(function(substore)
|
|
216
235
|
return substore:PromiseKeyList()
|
|
217
236
|
end)
|
|
218
237
|
end
|
|
219
238
|
|
|
220
|
-
function SecretsService
|
|
239
|
+
function SecretsService._warnAboutNoPublicKeyStoredInSourceCode(self: SecretsService): ()
|
|
221
240
|
if self._warningRequired then
|
|
222
241
|
self._warningRequired = false
|
|
223
242
|
warn(self:_getInstructions())
|
|
224
243
|
end
|
|
225
244
|
end
|
|
226
245
|
|
|
227
|
-
function SecretsService
|
|
246
|
+
function SecretsService._getInstructions(_self: SecretsService): string
|
|
228
247
|
local instructions =
|
|
229
248
|
"[SecretsService.StoreSecret] - Security - Current private key seed is GameId, which is guessable."
|
|
230
249
|
instructions = instructions .. "\n\tTIP: This is only applicable if we're storing API keys for use in here."
|
|
@@ -236,12 +255,7 @@ function SecretsService:_getInstructions(): string
|
|
|
236
255
|
return instructions
|
|
237
256
|
end
|
|
238
257
|
|
|
239
|
-
|
|
240
|
-
encrypted: { number },
|
|
241
|
-
signature: { number },
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
function SecretsService:_decrypt(data: SecretsData): (boolean?, string)
|
|
258
|
+
function SecretsService._decrypt(self: SecretsService, data: SecretsData): (boolean?, string)
|
|
245
259
|
assert(type(data) == "table", "Bad data")
|
|
246
260
|
assert(data.encrypted ~= nil, "Bad data.encrypted")
|
|
247
261
|
assert(data.signature ~= nil, "Bad data.signature")
|
|
@@ -259,15 +273,15 @@ function SecretsService:_decrypt(data: SecretsData): (boolean?, string)
|
|
|
259
273
|
return true, tostring(decrypted)
|
|
260
274
|
end
|
|
261
275
|
|
|
262
|
-
function SecretsService
|
|
276
|
+
function SecretsService._handleServerInvoke(self: SecretsService, player: Player, request: any): any
|
|
263
277
|
if request == SecretsServiceConstants.REQUEST_SECRET_KEY_NAMES_LIST then
|
|
264
|
-
return self:_promiseHandleList(player):Yield()
|
|
278
|
+
return (self :: any):_promiseHandleList(player):Yield()
|
|
265
279
|
else
|
|
266
280
|
error(string.format("Bad request %q", tostring(request)))
|
|
267
281
|
end
|
|
268
282
|
end
|
|
269
283
|
|
|
270
|
-
function SecretsService
|
|
284
|
+
function SecretsService._promiseHandleList(self: SecretsService, player: Player): any
|
|
271
285
|
return self._permissionsService
|
|
272
286
|
:PromisePermissionProvider()
|
|
273
287
|
:Then(function(provider)
|
|
@@ -282,7 +296,7 @@ function SecretsService:_promiseHandleList(player: Player)
|
|
|
282
296
|
end)
|
|
283
297
|
end
|
|
284
298
|
|
|
285
|
-
function SecretsService
|
|
299
|
+
function SecretsService._promiseSubstore(self: SecretsService): any
|
|
286
300
|
if self._substorePromise then
|
|
287
301
|
return self._substorePromise
|
|
288
302
|
end
|
|
@@ -296,7 +310,7 @@ function SecretsService:_promiseSubstore()
|
|
|
296
310
|
return self._substorePromise
|
|
297
311
|
end
|
|
298
312
|
|
|
299
|
-
function SecretsService
|
|
313
|
+
function SecretsService.Destroy(self: SecretsService): ()
|
|
300
314
|
self._maid:DoCleaning()
|
|
301
315
|
end
|
|
302
316
|
|