Skip to content

Commit d2c3196

Browse files
aleksxorAVVS
authored andcommitted
feat(create): extend 429 creation error with token ttl
1 parent 2855ece commit d2c3196

File tree

4 files changed

+28
-79
lines changed

4 files changed

+28
-79
lines changed

src/backends/redis/lua/msTokenCreate.lua

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@ end
3535

3636
-- we check if value exists before attempting to capture lock
3737
-- because script execution is atomic, we do not need to make sure that we've captured the lock
38-
if isempty(redis.call("GET", throttleKey)) ~= true then
39-
return redis.error_reply("429");
38+
local throttleTtl = redis.call("TTL", throttleKey)
39+
if throttleTtl ~= -2 then
40+
return redis.error_reply("429\n" .. cjson.encode({ttl=throttleTtl}))
4041
end
4142

4243
-- make sure that we own the "lock"

src/backends/redis/redis.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,21 @@ class RedisBackend {
9090
.msTokenCreate(
9191
4, idKey, uidKey, secretKey, throttleKey,
9292
id, action, uid, ttl, throttle, created, secret, secretSettings, serializedMetadata
93-
);
93+
)
94+
.catch((err) => {
95+
if (err.message.startsWith('429')) {
96+
let reason = {};
97+
98+
try {
99+
reason = JSON.parse(err.message.substring(4));
100+
} finally {
101+
err.message = '429';
102+
err.reason = reason;
103+
}
104+
}
105+
106+
throw err;
107+
});
94108
}
95109

96110
async regenerate(opts, updateSecret) {

test/integration.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ describe('TokenManager', () => {
134134

135135
await assert.rejects(manager.create({ id: ID, action: ACTION }), (error) => {
136136
assert.equal(error.message, '429');
137+
assert.equal(error.reason.ttl > 0, true);
137138
return true;
138139
});
139140
});

yarn.lock

Lines changed: 9 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1862,7 +1862,7 @@ [email protected]:
18621862
dependencies:
18631863
ms "2.0.0"
18641864

1865-
[email protected], debug@^3.1.0, debug@^3.2.6:
1865+
[email protected], debug@^3.1.0:
18661866
version "3.2.6"
18671867
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
18681868
integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
@@ -1883,7 +1883,7 @@ debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
18831883
dependencies:
18841884
ms "2.0.0"
18851885

1886-
debuglog@*, debuglog@^1.0.1:
1886+
debuglog@^1.0.1:
18871887
version "1.0.1"
18881888
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
18891889
integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=
@@ -1984,11 +1984,6 @@ detect-indent@~5.0.0:
19841984
resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d"
19851985
integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50=
19861986

1987-
detect-libc@^1.0.2:
1988-
version "1.0.3"
1989-
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
1990-
integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
1991-
19921987
detect-newline@^2.1.0:
19931988
version "2.1.0"
19941989
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
@@ -3322,7 +3317,7 @@ hyperid@^2.0.3:
33223317
uuid "^3.4.0"
33233318
uuid-parse "^1.1.0"
33243319

3325-
iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
3320+
iconv-lite@^0.4.24, iconv-lite@~0.4.13:
33263321
version "0.4.24"
33273322
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
33283323
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -3389,7 +3384,7 @@ import-modules@^2.0.0:
33893384
resolved "https://registry.yarnpkg.com/import-modules/-/import-modules-2.0.0.tgz#9c1e13b4e7a15682f70a6e3fa29534e4540cfc5d"
33903385
integrity sha512-iczM/v9drffdNnABOKwj0f9G3cFDon99VcG1mxeBsdqnbd+vnQ5c2uAiCHNQITqFTOPaEvwg3VjoWCur0uHLEw==
33913386

3392-
imurmurhash@*, imurmurhash@^0.1.4:
3387+
imurmurhash@^0.1.4:
33933388
version "0.1.4"
33943389
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
33953390
integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
@@ -4263,11 +4258,6 @@ lockfile@^1.0.4:
42634258
dependencies:
42644259
signal-exit "^3.0.2"
42654260

4266-
lodash._baseindexof@*:
4267-
version "3.1.0"
4268-
resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c"
4269-
integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw=
4270-
42714261
lodash._baseuniq@~4.6.0:
42724262
version "4.6.0"
42734263
resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8"
@@ -4276,33 +4266,11 @@ lodash._baseuniq@~4.6.0:
42764266
lodash._createset "~4.0.0"
42774267
lodash._root "~3.0.0"
42784268

4279-
lodash._bindcallback@*:
4280-
version "3.0.1"
4281-
resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
4282-
integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4=
4283-
4284-
lodash._cacheindexof@*:
4285-
version "3.0.2"
4286-
resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92"
4287-
integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI=
4288-
4289-
lodash._createcache@*:
4290-
version "3.1.2"
4291-
resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093"
4292-
integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM=
4293-
dependencies:
4294-
lodash._getnative "^3.0.0"
4295-
42964269
lodash._createset@~4.0.0:
42974270
version "4.0.3"
42984271
resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26"
42994272
integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY=
43004273

4301-
lodash._getnative@*, lodash._getnative@^3.0.0:
4302-
version "3.9.1"
4303-
resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
4304-
integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=
4305-
43064274
lodash._reinterpolate@^3.0.0:
43074275
version "3.0.0"
43084276
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
@@ -4403,11 +4371,6 @@ lodash.reduce@^4.6.0:
44034371
resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b"
44044372
integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=
44054373

4406-
lodash.restparam@*:
4407-
version "3.6.1"
4408-
resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
4409-
integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=
4410-
44114374
lodash.set@^4.3.2:
44124375
version "4.3.2"
44134376
resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23"
@@ -4908,15 +4871,6 @@ nconf@^0.10.0:
49084871
secure-keys "^1.0.0"
49094872
yargs "^3.19.0"
49104873

4911-
needle@^2.2.1:
4912-
version "2.4.0"
4913-
resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c"
4914-
integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==
4915-
dependencies:
4916-
debug "^3.2.6"
4917-
iconv-lite "^0.4.4"
4918-
sax "^1.2.4"
4919-
49204874
neo-async@^2.6.0:
49214875
version "2.6.1"
49224876
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
@@ -4983,22 +4937,6 @@ node-modules-regexp@^1.0.0:
49834937
resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
49844938
integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
49854939

4986-
node-pre-gyp@*:
4987-
version "0.14.0"
4988-
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83"
4989-
integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==
4990-
dependencies:
4991-
detect-libc "^1.0.2"
4992-
mkdirp "^0.5.1"
4993-
needle "^2.2.1"
4994-
nopt "^4.0.1"
4995-
npm-packlist "^1.1.6"
4996-
npmlog "^4.0.2"
4997-
rc "^1.2.7"
4998-
rimraf "^2.6.1"
4999-
semver "^5.3.0"
5000-
tar "^4.4.2"
5001-
50024940
node-preload@^0.2.0:
50034941
version "0.2.1"
50044942
resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301"
@@ -5102,7 +5040,7 @@ npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1:
51025040
semver "^5.6.0"
51035041
validate-npm-package-name "^3.0.0"
51045042

5105-
npm-packlist@^1.1.12, npm-packlist@^1.1.6, npm-packlist@^1.4.7:
5043+
npm-packlist@^1.1.12, npm-packlist@^1.4.7:
51065044
version "1.4.8"
51075045
resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
51085046
integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
@@ -5289,7 +5227,7 @@ npm@^6.10.3:
52895227
worker-farm "^1.7.0"
52905228
write-file-atomic "^2.4.3"
52915229

5292-
npmlog@^4.0.2, npmlog@^4.1.2, npmlog@~4.1.2:
5230+
npmlog@^4.1.2, npmlog@~4.1.2:
52935231
version "4.1.2"
52945232
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
52955233
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
@@ -6023,7 +5961,7 @@ ramda@^0.26.1:
60235961
resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06"
60245962
integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==
60255963

6026-
rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8:
5964+
rc@^1.0.1, rc@^1.1.6, rc@^1.2.8:
60275965
version "1.2.8"
60285966
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
60295967
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
@@ -6506,11 +6444,6 @@ safe-regex@^2.0.2, safe-regex@^2.1.1:
65066444
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
65076445
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
65086446

6509-
sax@^1.2.4:
6510-
version "1.2.4"
6511-
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
6512-
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
6513-
65146447
secure-keys@^1.0.0:
65156448
version "1.0.0"
65166449
resolved "https://registry.yarnpkg.com/secure-keys/-/secure-keys-1.0.0.tgz#f0c82d98a3b139a8776a8808050b824431087fca"
@@ -6574,7 +6507,7 @@ semver-regex@^2.0.0:
65746507
resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338"
65756508
integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==
65766509

6577-
"semver@2 || 3 || 4 || 5", "[email protected] || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
6510+
"semver@2 || 3 || 4 || 5", "[email protected] || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
65786511
version "5.7.1"
65796512
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
65806513
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@@ -7114,7 +7047,7 @@ table@^5.2.3:
71147047
slice-ansi "^2.1.0"
71157048
string-width "^3.0.0"
71167049

7117-
tar@^4.4.10, tar@^4.4.12, tar@^4.4.13, tar@^4.4.2:
7050+
tar@^4.4.10, tar@^4.4.12, tar@^4.4.13:
71187051
version "4.4.13"
71197052
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
71207053
integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==

0 commit comments

Comments
 (0)