valkyries 0.6.1 → 0.7.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/README.md +39 -0
- package/dist/bloom-filter/batching.mjs.map +1 -1
- package/dist/bloom-filter/lookups.d.mts.map +1 -1
- package/dist/bloom-filter/lookups.mjs +11 -16
- package/dist/bloom-filter/lookups.mjs.map +1 -1
- package/dist/bloom-filter/rebuilds.d.mts.map +1 -1
- package/dist/bloom-filter/rebuilds.mjs +31 -13
- package/dist/bloom-filter/rebuilds.mjs.map +1 -1
- package/dist/bloom-filter/scripts.mjs.map +1 -1
- package/dist/bloom-filter/types.d.mts +2 -0
- package/dist/bloom-filter/types.d.mts.map +1 -1
- package/dist/bloom-filter/writes.d.mts.map +1 -1
- package/dist/bloom-filter/writes.mjs +20 -8
- package/dist/bloom-filter/writes.mjs.map +1 -1
- package/dist/bloom-filter.d.mts +2 -0
- package/dist/bloom-filter.d.mts.map +1 -1
- package/dist/bloom-filter.mjs +8 -1
- package/dist/bloom-filter.mjs.map +1 -1
- package/dist/cache/batch-read.d.mts.map +1 -1
- package/dist/cache/constants.mjs.map +1 -1
- package/dist/cache/core.d.mts.map +1 -1
- package/dist/cache/deletes.d.mts.map +1 -1
- package/dist/cache/mutations.d.mts.map +1 -1
- package/dist/cache/single-read.d.mts.map +1 -1
- package/dist/cache/stale-refresh.d.mts.map +1 -1
- package/dist/cache-utils.d.mts.map +1 -1
- package/dist/clients.d.mts +8 -8
- package/dist/conditional.mjs.map +1 -1
- package/dist/config.d.mts.map +1 -1
- package/dist/delete.d.mts +8 -0
- package/dist/delete.d.mts.map +1 -1
- package/dist/delete.mjs +30 -13
- package/dist/delete.mjs.map +1 -1
- package/dist/dynamic-config/storage.d.mts +7 -2
- package/dist/dynamic-config/storage.d.mts.map +1 -1
- package/dist/dynamic-config/storage.mjs +5 -4
- package/dist/dynamic-config/storage.mjs.map +1 -1
- package/dist/dynamic-config.d.mts +3 -0
- package/dist/dynamic-config.d.mts.map +1 -1
- package/dist/dynamic-config.mjs +24 -3
- package/dist/dynamic-config.mjs.map +1 -1
- package/dist/expiry.d.mts +10 -0
- package/dist/expiry.d.mts.map +1 -0
- package/dist/expiry.mjs +70 -0
- package/dist/expiry.mjs.map +1 -0
- package/dist/idempotency-key.mjs.map +1 -1
- package/dist/index.d.mts +3 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -1
- package/dist/rate-limiter.d.mts.map +1 -1
- package/dist/rate-limiter.mjs.map +1 -1
- package/dist/scan.d.mts +10 -0
- package/dist/scan.d.mts.map +1 -0
- package/dist/scan.mjs +24 -0
- package/dist/scan.mjs.map +1 -0
- package/dist/shutdown.d.mts +1 -1
- package/dist/shutdown.d.mts.map +1 -1
- package/dist/types.d.mts +59 -1
- package/dist/types.d.mts.map +1 -1
- package/docs/api.md +2 -0
- package/docs/bloom-filters.md +4 -0
- package/docs/dynamic-config.md +6 -0
- package/docs/utilities.md +48 -0
- package/package.json +4 -4
package/dist/types.d.mts
CHANGED
|
@@ -1,4 +1,40 @@
|
|
|
1
|
-
import type { GlideClient } from "@valkey/valkey-glide";
|
|
1
|
+
import type { GlideClient, GlideString } from "@valkey/valkey-glide";
|
|
2
|
+
export type ScanAndUnlinkKeysOptions = {
|
|
3
|
+
/** Stops before or after each SCAN and UNLINK command boundary. */
|
|
4
|
+
signal?: AbortSignal;
|
|
5
|
+
/** Selects scanned string or Buffer keys to unlink. Defaults to every scanned key. */
|
|
6
|
+
matches?: (key: GlideString) => boolean;
|
|
7
|
+
};
|
|
8
|
+
export type ScanAndUnlinkKeysResult = {
|
|
9
|
+
/** Number of keys returned by SCAN, including any duplicates from its non-snapshot iteration. */
|
|
10
|
+
scannedKeys: number;
|
|
11
|
+
/** Number of scanned keys accepted by matches. */
|
|
12
|
+
matchedKeys: number;
|
|
13
|
+
/** Number of keys confirmed by UNLINK as removed. */
|
|
14
|
+
unlinkedKeys: number;
|
|
15
|
+
};
|
|
16
|
+
export type ExpireKeysWithNoExpiryOptions = {
|
|
17
|
+
/** Valkey SCAN pattern for keys to evaluate. */
|
|
18
|
+
pattern: string;
|
|
19
|
+
/** TTL in seconds to apply only where the key has no expiry. */
|
|
20
|
+
ttl: number;
|
|
21
|
+
/** Selects scanned string or Buffer keys to expire. Defaults to every scanned key. */
|
|
22
|
+
shouldExpire?: (key: GlideString) => boolean;
|
|
23
|
+
/** Stops before or after each SCAN and EXPIRE-batch command boundary. */
|
|
24
|
+
signal?: AbortSignal;
|
|
25
|
+
/** SCAN COUNT hint. Defaults to 500. */
|
|
26
|
+
scanCount?: number;
|
|
27
|
+
/** Maximum number of EXPIRE commands in one non-atomic pipeline. Defaults to 500. */
|
|
28
|
+
batchSize?: number;
|
|
29
|
+
};
|
|
30
|
+
export type ExpireKeysWithNoExpiryResult = {
|
|
31
|
+
/** Number of keys returned by SCAN, including any duplicates from its non-snapshot iteration. */
|
|
32
|
+
scannedKeys: number;
|
|
33
|
+
/** Number of scanned keys accepted by shouldExpire. */
|
|
34
|
+
matchedKeys: number;
|
|
35
|
+
/** Number of keys confirmed by EXPIRE NX as newly given a TTL. */
|
|
36
|
+
expiredKeys: number;
|
|
37
|
+
};
|
|
2
38
|
export type ValkeyClientsOption = {
|
|
3
39
|
cacheClient?: GlideClient;
|
|
4
40
|
rateLimiterClient?: GlideClient;
|
|
@@ -135,6 +171,17 @@ export type DynamicConfigOptions = {
|
|
|
135
171
|
defaultFields: Record<string, DynamicConfigField>;
|
|
136
172
|
/** Optional Valkey client. Defaults to the package dynamic config client. */
|
|
137
173
|
client?: GlideClient;
|
|
174
|
+
/**
|
|
175
|
+
* Maximum number of retry attempts on inflight-saturation errors
|
|
176
|
+
* (default: VALKEY_INFLIGHT_RETRY_ATTEMPTS env or 3).
|
|
177
|
+
*/
|
|
178
|
+
inflightRetryAttempts?: number;
|
|
179
|
+
/**
|
|
180
|
+
* Minimum delay in milliseconds between saturation-retry attempts
|
|
181
|
+
* (default: VALKEY_INFLIGHT_RETRY_DELAY_MS env or 1000).
|
|
182
|
+
* Actual delay is jittered in [delayMs, delayMs * 5].
|
|
183
|
+
*/
|
|
184
|
+
inflightRetryDelayMs?: number;
|
|
138
185
|
};
|
|
139
186
|
export type ValkeyBloomFilterOptions = {
|
|
140
187
|
/** The name of the bloom filter (used for key prefixing) */
|
|
@@ -151,5 +198,16 @@ export type ValkeyBloomFilterOptions = {
|
|
|
151
198
|
expansionRate?: number;
|
|
152
199
|
/** Optional Valkey client. Defaults to the package cache client. */
|
|
153
200
|
client?: GlideClient;
|
|
201
|
+
/**
|
|
202
|
+
* Maximum number of retry attempts on inflight-saturation errors
|
|
203
|
+
* (default: VALKEY_INFLIGHT_RETRY_ATTEMPTS env or 3).
|
|
204
|
+
*/
|
|
205
|
+
inflightRetryAttempts?: number;
|
|
206
|
+
/**
|
|
207
|
+
* Minimum delay in milliseconds between saturation-retry attempts
|
|
208
|
+
* (default: VALKEY_INFLIGHT_RETRY_DELAY_MS env or 1000).
|
|
209
|
+
* Actual delay is jittered in [delayMs, delayMs * 5].
|
|
210
|
+
*/
|
|
211
|
+
inflightRetryDelayMs?: number;
|
|
154
212
|
};
|
|
155
213
|
//# sourceMappingURL=types.d.mts.map
|
package/dist/types.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../types.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../types.mts"],"names":[],"mappings":"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"}
|
package/docs/api.md
CHANGED
package/docs/bloom-filters.md
CHANGED
|
@@ -41,6 +41,8 @@ type ValkeyBloomFilterOptions = {
|
|
|
41
41
|
batchSize?: number;
|
|
42
42
|
concurrencyLimit?: number;
|
|
43
43
|
expansionRate?: number;
|
|
44
|
+
inflightRetryAttempts?: number;
|
|
45
|
+
inflightRetryDelayMs?: number;
|
|
44
46
|
client?: GlideClient;
|
|
45
47
|
};
|
|
46
48
|
```
|
|
@@ -51,6 +53,8 @@ type ValkeyBloomFilterOptions = {
|
|
|
51
53
|
- `batchSize`: write/read chunk size. Defaults to `10_000`; Lua paths clamp large chunks internally.
|
|
52
54
|
- `concurrencyLimit`: maximum number of write chunks in flight at once. Defaults to `16`.
|
|
53
55
|
- `expansionRate`: Bloom filter expansion rate. Defaults to `2`.
|
|
56
|
+
- `inflightRetryAttempts`: maximum attempts for a locally rejected, saturated Valkey request. Defaults to `VALKEY_INFLIGHT_RETRY_ATTEMPTS` or `3`.
|
|
57
|
+
- `inflightRetryDelayMs`: minimum delay between saturation retry attempts. Defaults to `VALKEY_INFLIGHT_RETRY_DELAY_MS` or `1000`; actual retry delays are jittered up to five times this value.
|
|
54
58
|
- `client`: optional `@valkey/valkey-glide` client. Defaults to the package cache client.
|
|
55
59
|
|
|
56
60
|
The constructor throws when `name` is empty, `capacity` is not positive, `errorRate` is not between `0` and `1`, `expansionRate` is not positive, `batchSize` is not positive, or `concurrencyLimit` is not positive.
|
package/docs/dynamic-config.md
CHANGED
|
@@ -41,6 +41,8 @@ type DynamicConfigOptions = {
|
|
|
41
41
|
fieldTypes: Record<string, "string" | "number" | "boolean">;
|
|
42
42
|
defaultFields: Record<string, string | number | boolean>;
|
|
43
43
|
client?: GlideClient;
|
|
44
|
+
inflightRetryAttempts?: number;
|
|
45
|
+
inflightRetryDelayMs?: number;
|
|
44
46
|
};
|
|
45
47
|
```
|
|
46
48
|
|
|
@@ -49,6 +51,10 @@ type DynamicConfigOptions = {
|
|
|
49
51
|
- `fieldTypes`: allowed fields and primitive types.
|
|
50
52
|
- `defaultFields`: default values written when fields are missing.
|
|
51
53
|
- `client`: optional `@valkey/valkey-glide` client. Defaults to the package dynamic-config client.
|
|
54
|
+
- `inflightRetryAttempts`: attempts for a locally rejected, inflight-saturated Valkey command. Defaults to `VALKEY_INFLIGHT_RETRY_ATTEMPTS` or `3`.
|
|
55
|
+
- `inflightRetryDelayMs`: minimum backoff between saturation retries. Defaults to `VALKEY_INFLIGHT_RETRY_DELAY_MS` or `1000`; retry delays are jittered up to five times this value.
|
|
56
|
+
|
|
57
|
+
Only Glide's local `Reached maximum inflight requests` rejection is retried. Other Valkey errors are returned immediately; a failed refresh remains eligible for the next refresh interval, and failed writes leave local fields unchanged.
|
|
52
58
|
|
|
53
59
|
The constructor starts initialization immediately. Call `waitForInitialization()` before reading fields during startup.
|
|
54
60
|
|
package/docs/utilities.md
CHANGED
|
@@ -2,6 +2,54 @@
|
|
|
2
2
|
|
|
3
3
|
These normalization helpers are exported from the package root.
|
|
4
4
|
|
|
5
|
+
## `scanAndUnlinkKeys(client, pattern, options)`
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
scanAndUnlinkKeys(
|
|
9
|
+
client: GlideClient,
|
|
10
|
+
pattern: string,
|
|
11
|
+
options?: {
|
|
12
|
+
signal?: AbortSignal;
|
|
13
|
+
matches?: (key: GlideString) => boolean;
|
|
14
|
+
},
|
|
15
|
+
): Promise<{ scannedKeys: number; matchedKeys: number; unlinkedKeys: number }>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Scans with `COUNT 500`, unlinks every scanned key accepted by `matches`, and returns the number of
|
|
19
|
+
keys scanned, predicate-matched, and confirmed removed by `UNLINK`. Keys are provided to `matches`
|
|
20
|
+
and `UNLINK` as their original string or `Buffer` `GlideString` values.
|
|
21
|
+
|
|
22
|
+
`SCAN` is non-snapshot: concurrent writes can make counts include duplicates, omit keys, or differ
|
|
23
|
+
from the keys that exist when the call returns. The optional `signal` is checked before and after
|
|
24
|
+
every SCAN and UNLINK boundary; its exact abort reason is rethrown without reporting it to the
|
|
25
|
+
configured Valkey error handler.
|
|
26
|
+
|
|
27
|
+
## `expireKeysWithNoExpiry(client, options)`
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
expireKeysWithNoExpiry(
|
|
31
|
+
client: GlideClient,
|
|
32
|
+
options: {
|
|
33
|
+
pattern: string;
|
|
34
|
+
ttl: number;
|
|
35
|
+
shouldExpire?: (key: GlideString) => boolean;
|
|
36
|
+
signal?: AbortSignal;
|
|
37
|
+
scanCount?: number;
|
|
38
|
+
batchSize?: number;
|
|
39
|
+
},
|
|
40
|
+
): Promise<{ scannedKeys: number; matchedKeys: number; expiredKeys: number }>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Scans matching keys and pipelines `EXPIRE NX` commands for every key accepted by `shouldExpire`.
|
|
44
|
+
`EXPIRE NX` atomically sets the TTL only when a key has no existing expiry, so a concurrent TTL
|
|
45
|
+
change is never overwritten. `scanCount` defaults to 500 as a SCAN hint. `batchSize` separately
|
|
46
|
+
defaults to 500 and bounds one non-atomic pipeline.
|
|
47
|
+
|
|
48
|
+
`SCAN` is non-snapshot: concurrent writes can make counts include duplicates, omit keys, or differ
|
|
49
|
+
from the keys that exist when the call returns. The optional `signal` is checked before and after
|
|
50
|
+
each SCAN and EXPIRE-batch boundary; its exact abort reason is rethrown without reporting it to the
|
|
51
|
+
configured Valkey error handler.
|
|
52
|
+
|
|
5
53
|
## `normalizeKey(key)`
|
|
6
54
|
|
|
7
55
|
```ts
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "valkyries",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Valkey utilities for caches, bloom filters, dynamic configuration, and rate limiting.",
|
|
5
5
|
"homepage": "https://github.com/jonathanong/valkyries#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -65,11 +65,11 @@
|
|
|
65
65
|
"@types/node": "^26.1.0",
|
|
66
66
|
"@vitest/coverage-v8": "^4.1.6",
|
|
67
67
|
"github-actionlint": "^1.7.12",
|
|
68
|
-
"oxfmt": "^0.
|
|
68
|
+
"oxfmt": "^0.63.0",
|
|
69
69
|
"oxlint": "^1.65.0",
|
|
70
|
-
"oxlint-tsgolint": "^0.
|
|
70
|
+
"oxlint-tsgolint": "^7.0.2001",
|
|
71
71
|
"tsx": "^4.22.1",
|
|
72
|
-
"typescript": "^
|
|
72
|
+
"typescript": "^7.0.2",
|
|
73
73
|
"vitest": "^4.1.6"
|
|
74
74
|
},
|
|
75
75
|
"engines": {
|