@upstash/redis 0.0.0-ci.bafaa360-20230119 → 0.0.0-ci.bc4f4560-20231018
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 +1 -1
- package/esm/pkg/commands/command.js +12 -3
- package/esm/pkg/commands/geo_add.js +27 -0
- package/esm/pkg/commands/geo_hash.js +14 -0
- package/esm/pkg/commands/hgetall.js +9 -1
- package/esm/pkg/commands/json_arrappend.js +9 -0
- package/esm/pkg/commands/json_arrindex.js +9 -0
- package/esm/pkg/commands/json_arrinsert.js +9 -0
- package/esm/pkg/commands/json_arrlen.js +9 -0
- package/esm/pkg/commands/json_arrpop.js +9 -0
- package/esm/pkg/commands/json_arrtrim.js +12 -0
- package/esm/pkg/commands/json_clear.js +9 -0
- package/esm/pkg/commands/json_del.js +9 -0
- package/esm/pkg/commands/json_forget.js +9 -0
- package/esm/pkg/commands/json_get.js +30 -0
- package/esm/pkg/commands/json_mget.js +9 -0
- package/esm/pkg/commands/json_numincrby.js +9 -0
- package/esm/pkg/commands/json_nummultby.js +9 -0
- package/esm/pkg/commands/json_objkeys.js +9 -0
- package/esm/pkg/commands/json_objlen.js +9 -0
- package/esm/pkg/commands/json_resp.js +9 -0
- package/esm/pkg/commands/json_set.js +18 -0
- package/esm/pkg/commands/json_strappend.js +9 -0
- package/esm/pkg/commands/json_strlen.js +9 -0
- package/esm/pkg/commands/json_toggle.js +9 -0
- package/esm/pkg/commands/json_type.js +9 -0
- package/esm/pkg/commands/mod.js +27 -1
- package/esm/pkg/commands/set.js +1 -1
- package/esm/pkg/commands/xadd.js +26 -0
- package/esm/pkg/commands/xrange.js +36 -0
- package/esm/pkg/commands/zunion.js +30 -0
- package/esm/pkg/http.js +19 -19
- package/esm/pkg/pipeline.js +119 -7
- package/esm/pkg/redis.js +135 -1
- package/esm/platforms/cloudflare.js +6 -6
- package/esm/platforms/fastly.js +5 -0
- package/esm/platforms/node_with_fetch.js +10 -11
- package/esm/platforms/nodejs.js +13 -11
- package/esm/version.js +1 -1
- package/package.json +53 -20
- package/script/pkg/commands/command.js +12 -3
- package/script/pkg/commands/geo_add.js +31 -0
- package/script/pkg/commands/geo_hash.js +18 -0
- package/script/pkg/commands/hgetall.js +9 -1
- package/script/pkg/commands/json_arrappend.js +13 -0
- package/script/pkg/commands/json_arrindex.js +13 -0
- package/script/pkg/commands/json_arrinsert.js +13 -0
- package/script/pkg/commands/json_arrlen.js +13 -0
- package/script/pkg/commands/json_arrpop.js +13 -0
- package/script/pkg/commands/json_arrtrim.js +16 -0
- package/script/pkg/commands/json_clear.js +13 -0
- package/script/pkg/commands/json_del.js +13 -0
- package/script/pkg/commands/json_forget.js +13 -0
- package/script/pkg/commands/json_get.js +34 -0
- package/script/pkg/commands/json_mget.js +13 -0
- package/script/pkg/commands/json_numincrby.js +13 -0
- package/script/pkg/commands/json_nummultby.js +13 -0
- package/script/pkg/commands/json_objkeys.js +13 -0
- package/script/pkg/commands/json_objlen.js +13 -0
- package/script/pkg/commands/json_resp.js +13 -0
- package/script/pkg/commands/json_set.js +22 -0
- package/script/pkg/commands/json_strappend.js +13 -0
- package/script/pkg/commands/json_strlen.js +13 -0
- package/script/pkg/commands/json_toggle.js +13 -0
- package/script/pkg/commands/json_type.js +13 -0
- package/script/pkg/commands/mod.js +27 -1
- package/script/pkg/commands/set.js +1 -1
- package/script/pkg/commands/xadd.js +30 -0
- package/script/pkg/commands/xrange.js +40 -0
- package/script/pkg/commands/zunion.js +34 -0
- package/script/pkg/http.js +19 -19
- package/script/pkg/pipeline.js +118 -6
- package/script/pkg/redis.js +134 -0
- package/script/platforms/cloudflare.js +6 -6
- package/script/platforms/fastly.js +5 -0
- package/script/platforms/node_with_fetch.js +10 -11
- package/script/platforms/nodejs.js +13 -11
- package/script/version.js +1 -1
- package/types/pkg/commands/command.d.ts +5 -5
- package/types/pkg/commands/geo_add.d.ts +25 -0
- package/types/pkg/commands/geo_hash.d.ts +7 -0
- package/types/pkg/commands/hdel.d.ts +1 -1
- package/types/pkg/commands/json_arrappend.d.ts +7 -0
- package/types/pkg/commands/json_arrindex.d.ts +13 -0
- package/types/pkg/commands/json_arrinsert.d.ts +7 -0
- package/types/pkg/commands/json_arrlen.d.ts +7 -0
- package/types/pkg/commands/json_arrpop.d.ts +7 -0
- package/types/pkg/commands/json_arrtrim.d.ts +7 -0
- package/types/pkg/commands/json_clear.d.ts +7 -0
- package/types/pkg/commands/json_del.d.ts +7 -0
- package/types/pkg/commands/json_forget.d.ts +7 -0
- package/types/pkg/commands/json_get.d.ts +15 -0
- package/types/pkg/commands/json_mget.d.ts +7 -0
- package/types/pkg/commands/json_numincrby.d.ts +7 -0
- package/types/pkg/commands/json_nummultby.d.ts +7 -0
- package/types/pkg/commands/json_objkeys.d.ts +7 -0
- package/types/pkg/commands/json_objlen.d.ts +7 -0
- package/types/pkg/commands/json_resp.d.ts +7 -0
- package/types/pkg/commands/json_set.d.ts +18 -0
- package/types/pkg/commands/json_strappend.d.ts +7 -0
- package/types/pkg/commands/json_strlen.d.ts +7 -0
- package/types/pkg/commands/json_toggle.d.ts +7 -0
- package/types/pkg/commands/json_type.d.ts +7 -0
- package/types/pkg/commands/mod.d.ts +27 -1
- package/types/pkg/commands/scan.d.ts +1 -1
- package/types/pkg/commands/script_flush.d.ts +1 -1
- package/types/pkg/commands/set.d.ts +3 -3
- package/types/pkg/commands/type.d.ts +1 -1
- package/types/pkg/commands/xadd.d.ts +31 -0
- package/types/pkg/commands/xrange.d.ts +9 -0
- package/types/pkg/commands/zadd.d.ts +3 -3
- package/types/pkg/commands/zinterstore.d.ts +1 -1
- package/types/pkg/commands/zrange.d.ts +1 -1
- package/types/pkg/commands/zunion.d.ts +29 -0
- package/types/pkg/commands/zunionstore.d.ts +1 -1
- package/types/pkg/http.d.ts +14 -7
- package/types/pkg/pipeline.d.ts +242 -129
- package/types/pkg/redis.d.ts +138 -13
- package/types/pkg/types.d.ts +11 -2
- package/types/platforms/cloudflare.d.ts +2 -2
- package/types/platforms/fastly.d.ts +1 -1
- package/types/platforms/node_with_fetch.d.ts +1 -1
- package/types/platforms/nodejs.d.ts +1 -1
- package/types/version.d.ts +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { UpstashError } from "../error.js";
|
|
2
2
|
import { parseResponse } from "../util.js";
|
|
3
|
-
const defaultSerializer = (c) =>
|
|
3
|
+
const defaultSerializer = (c) => {
|
|
4
|
+
switch (typeof c) {
|
|
5
|
+
case "string":
|
|
6
|
+
case "number":
|
|
7
|
+
case "boolean":
|
|
8
|
+
return c;
|
|
9
|
+
default:
|
|
10
|
+
return JSON.stringify(c);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
4
13
|
/**
|
|
5
14
|
* Command offers default (de)serialization and the exec method to all commands.
|
|
6
15
|
*
|
|
@@ -37,7 +46,7 @@ export class Command {
|
|
|
37
46
|
opts.automaticDeserialization
|
|
38
47
|
? opts?.deserialize ?? parseResponse
|
|
39
48
|
: (x) => x;
|
|
40
|
-
this.command = command.map(this.serialize);
|
|
49
|
+
this.command = command.map((c) => this.serialize(c));
|
|
41
50
|
}
|
|
42
51
|
/**
|
|
43
52
|
* Execute the command using a client.
|
|
@@ -50,7 +59,7 @@ export class Command {
|
|
|
50
59
|
throw new UpstashError(error);
|
|
51
60
|
}
|
|
52
61
|
if (typeof result === "undefined") {
|
|
53
|
-
throw new Error(
|
|
62
|
+
throw new Error("Request did not return a result");
|
|
54
63
|
}
|
|
55
64
|
return this.deserialize(result);
|
|
56
65
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
/**
|
|
3
|
+
* @see https://redis.io/commands/geoadd
|
|
4
|
+
*/
|
|
5
|
+
export class GeoAddCommand extends Command {
|
|
6
|
+
constructor([key, arg1, ...arg2], opts) {
|
|
7
|
+
const command = ["geoadd", key];
|
|
8
|
+
if ("nx" in arg1 && arg1.nx) {
|
|
9
|
+
command.push("nx");
|
|
10
|
+
}
|
|
11
|
+
else if ("xx" in arg1 && arg1.xx) {
|
|
12
|
+
command.push("xx");
|
|
13
|
+
}
|
|
14
|
+
if ("ch" in arg1 && arg1.ch) {
|
|
15
|
+
command.push("ch");
|
|
16
|
+
}
|
|
17
|
+
if ("latitude" in arg1 && arg1.latitude) {
|
|
18
|
+
command.push(arg1.longitude, arg1.latitude, arg1.member);
|
|
19
|
+
}
|
|
20
|
+
command.push(...arg2.flatMap(({ latitude, longitude, member }) => [
|
|
21
|
+
longitude,
|
|
22
|
+
latitude,
|
|
23
|
+
member,
|
|
24
|
+
]));
|
|
25
|
+
super(command, opts);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
/**
|
|
3
|
+
* @see https://redis.io/commands/geohash
|
|
4
|
+
*/
|
|
5
|
+
export class GeoHashCommand extends Command {
|
|
6
|
+
constructor(cmd, opts) {
|
|
7
|
+
const [key] = cmd;
|
|
8
|
+
// Check if the second argument is an array of strings (members).
|
|
9
|
+
// If it is, use it directly; if not, it means the members were passed individually,
|
|
10
|
+
// so we slice the cmd from the second element onwards to get the members.
|
|
11
|
+
const members = Array.isArray(cmd[1]) ? cmd[1] : cmd.slice(1);
|
|
12
|
+
super(["GEOHASH", key, ...members], opts);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -8,7 +8,15 @@ function deserialize(result) {
|
|
|
8
8
|
const key = result.shift();
|
|
9
9
|
const value = result.shift();
|
|
10
10
|
try {
|
|
11
|
-
|
|
11
|
+
// handle unsafe integer
|
|
12
|
+
const valueIsNumberAndNotSafeInteger = !isNaN(Number(value)) &&
|
|
13
|
+
!Number.isSafeInteger(value);
|
|
14
|
+
if (valueIsNumberAndNotSafeInteger) {
|
|
15
|
+
obj[key] = value;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
obj[key] = JSON.parse(value);
|
|
19
|
+
}
|
|
12
20
|
}
|
|
13
21
|
catch {
|
|
14
22
|
obj[key] = value;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
/**
|
|
3
|
+
* @see https://redis.io/commands/json.arrtrim
|
|
4
|
+
*/
|
|
5
|
+
export class JsonArrTrimCommand extends Command {
|
|
6
|
+
constructor(cmd, opts) {
|
|
7
|
+
const path = cmd[1] ?? "$";
|
|
8
|
+
const start = cmd[2] ?? 0;
|
|
9
|
+
const stop = cmd[3] ?? 0;
|
|
10
|
+
super(["JSON.ARRTRIM", cmd[0], path, start, stop], opts);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
/**
|
|
3
|
+
* @see https://redis.io/commands/json.get
|
|
4
|
+
*/
|
|
5
|
+
export class JsonGetCommand extends Command {
|
|
6
|
+
constructor(cmd, opts) {
|
|
7
|
+
const command = ["JSON.GET"];
|
|
8
|
+
if (typeof cmd[1] === "string") {
|
|
9
|
+
// @ts-ignore - we know this is a string
|
|
10
|
+
command.push(...cmd);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
command.push(cmd[0]);
|
|
14
|
+
if (cmd[1]) {
|
|
15
|
+
if (cmd[1].indent) {
|
|
16
|
+
command.push("INDENT", cmd[1].indent);
|
|
17
|
+
}
|
|
18
|
+
if (cmd[1].newline) {
|
|
19
|
+
command.push("NEWLINE", cmd[1].newline);
|
|
20
|
+
}
|
|
21
|
+
if (cmd[1].space) {
|
|
22
|
+
command.push("SPACE", cmd[1].space);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// @ts-ignore - we know this is a string
|
|
26
|
+
command.push(...cmd.slice(2));
|
|
27
|
+
}
|
|
28
|
+
super(command, opts);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
/**
|
|
3
|
+
* @see https://redis.io/commands/json.set
|
|
4
|
+
*/
|
|
5
|
+
export class JsonSetCommand extends Command {
|
|
6
|
+
constructor(cmd, opts) {
|
|
7
|
+
const command = ["JSON.SET", cmd[0], cmd[1], cmd[2]];
|
|
8
|
+
if (cmd[3]) {
|
|
9
|
+
if (cmd[3].nx) {
|
|
10
|
+
command.push("NX");
|
|
11
|
+
}
|
|
12
|
+
else if (cmd[3].xx) {
|
|
13
|
+
command.push("XX");
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
super(command, opts);
|
|
17
|
+
}
|
|
18
|
+
}
|
package/esm/pkg/commands/mod.js
CHANGED
|
@@ -15,6 +15,8 @@ export * from "./expire.js";
|
|
|
15
15
|
export * from "./expireat.js";
|
|
16
16
|
export * from "./flushall.js";
|
|
17
17
|
export * from "./flushdb.js";
|
|
18
|
+
export * from "./geo_add.js";
|
|
19
|
+
export * from "./geo_hash.js";
|
|
18
20
|
export * from "./get.js";
|
|
19
21
|
export * from "./getbit.js";
|
|
20
22
|
export * from "./getdel.js";
|
|
@@ -23,7 +25,6 @@ export * from "./getset.js";
|
|
|
23
25
|
export * from "./hdel.js";
|
|
24
26
|
export * from "./hexists.js";
|
|
25
27
|
export * from "./hget.js";
|
|
26
|
-
export * from "./smismember.js";
|
|
27
28
|
export * from "./hgetall.js";
|
|
28
29
|
export * from "./hincrby.js";
|
|
29
30
|
export * from "./hincrbyfloat.js";
|
|
@@ -40,6 +41,27 @@ export * from "./hvals.js";
|
|
|
40
41
|
export * from "./incr.js";
|
|
41
42
|
export * from "./incrby.js";
|
|
42
43
|
export * from "./incrbyfloat.js";
|
|
44
|
+
export * from "./json_arrappend.js";
|
|
45
|
+
export * from "./json_arrindex.js";
|
|
46
|
+
export * from "./json_arrinsert.js";
|
|
47
|
+
export * from "./json_arrlen.js";
|
|
48
|
+
export * from "./json_arrpop.js";
|
|
49
|
+
export * from "./json_arrtrim.js";
|
|
50
|
+
export * from "./json_clear.js";
|
|
51
|
+
export * from "./json_del.js";
|
|
52
|
+
export * from "./json_forget.js";
|
|
53
|
+
export * from "./json_get.js";
|
|
54
|
+
export * from "./json_mget.js";
|
|
55
|
+
export * from "./json_numincrby.js";
|
|
56
|
+
export * from "./json_nummultby.js";
|
|
57
|
+
export * from "./json_objkeys.js";
|
|
58
|
+
export * from "./json_objlen.js";
|
|
59
|
+
export * from "./json_resp.js";
|
|
60
|
+
export * from "./json_set.js";
|
|
61
|
+
export * from "./json_strappend.js";
|
|
62
|
+
export * from "./json_strlen.js";
|
|
63
|
+
export * from "./json_toggle.js";
|
|
64
|
+
export * from "./json_type.js";
|
|
43
65
|
export * from "./keys.js";
|
|
44
66
|
export * from "./lindex.js";
|
|
45
67
|
export * from "./linsert.js";
|
|
@@ -86,6 +108,7 @@ export * from "./sinter.js";
|
|
|
86
108
|
export * from "./sinterstore.js";
|
|
87
109
|
export * from "./sismember.js";
|
|
88
110
|
export * from "./smembers.js";
|
|
111
|
+
export * from "./smismember.js";
|
|
89
112
|
export * from "./smove.js";
|
|
90
113
|
export * from "./spop.js";
|
|
91
114
|
export * from "./srandmember.js";
|
|
@@ -116,4 +139,7 @@ export * from "./zremrangebyscore.js";
|
|
|
116
139
|
export * from "./zrevrank.js";
|
|
117
140
|
export * from "./zscan.js";
|
|
118
141
|
export * from "./zscore.js";
|
|
142
|
+
export * from "./zunion.js";
|
|
119
143
|
export * from "./zunionstore.js";
|
|
144
|
+
export * from "./xadd.js";
|
|
145
|
+
export * from "./xrange.js";
|
package/esm/pkg/commands/set.js
CHANGED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
/**
|
|
3
|
+
* @see https://redis.io/commands/xadd
|
|
4
|
+
*/
|
|
5
|
+
export class XAddCommand extends Command {
|
|
6
|
+
constructor([key, id, entries, opts], commandOptions) {
|
|
7
|
+
const command = ["XADD", key];
|
|
8
|
+
if (opts) {
|
|
9
|
+
if (opts.nomkStream) {
|
|
10
|
+
command.push("NOMKSTREAM");
|
|
11
|
+
}
|
|
12
|
+
if (opts.trim) {
|
|
13
|
+
command.push(opts.trim.type, opts.trim.comparison, opts.trim.threshold);
|
|
14
|
+
if (typeof opts.trim.limit !== "undefined") {
|
|
15
|
+
command.push("LIMIT", opts.trim.limit);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
command.push(id);
|
|
20
|
+
// entries
|
|
21
|
+
Object.entries(entries).forEach(([k, v]) => {
|
|
22
|
+
command.push(k, v);
|
|
23
|
+
});
|
|
24
|
+
super(command, commandOptions);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
function deserialize(result) {
|
|
3
|
+
const obj = {};
|
|
4
|
+
for (const e of result) {
|
|
5
|
+
while (e.length >= 2) {
|
|
6
|
+
const streamId = e.shift();
|
|
7
|
+
const entries = e.shift();
|
|
8
|
+
if (!(streamId in obj)) {
|
|
9
|
+
obj[streamId] = {};
|
|
10
|
+
}
|
|
11
|
+
while (entries.length >= 2) {
|
|
12
|
+
const field = entries.shift();
|
|
13
|
+
const value = entries.shift();
|
|
14
|
+
try {
|
|
15
|
+
obj[streamId][field] = JSON.parse(value);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
obj[streamId][field] = value;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return obj;
|
|
24
|
+
}
|
|
25
|
+
export class XRangeCommand extends Command {
|
|
26
|
+
constructor([key, start, end, count], opts) {
|
|
27
|
+
const command = ["XRANGE", key, start, end];
|
|
28
|
+
if (typeof count === "number") {
|
|
29
|
+
command.push("COUNT", count);
|
|
30
|
+
}
|
|
31
|
+
super(command, {
|
|
32
|
+
deserialize: (result) => deserialize(result),
|
|
33
|
+
...opts,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
/**
|
|
3
|
+
* @see https://redis.io/commands/zunion
|
|
4
|
+
*/
|
|
5
|
+
export class ZUnionCommand extends Command {
|
|
6
|
+
constructor([numKeys, keyOrKeys, opts], cmdOpts) {
|
|
7
|
+
const command = ["zunion", numKeys];
|
|
8
|
+
if (Array.isArray(keyOrKeys)) {
|
|
9
|
+
command.push(...keyOrKeys);
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
command.push(keyOrKeys);
|
|
13
|
+
}
|
|
14
|
+
if (opts) {
|
|
15
|
+
if ("weights" in opts && opts.weights) {
|
|
16
|
+
command.push("weights", ...opts.weights);
|
|
17
|
+
}
|
|
18
|
+
else if ("weight" in opts && typeof opts.weight === "number") {
|
|
19
|
+
command.push("weights", opts.weight);
|
|
20
|
+
}
|
|
21
|
+
if ("aggregate" in opts) {
|
|
22
|
+
command.push("aggregate", opts.aggregate);
|
|
23
|
+
}
|
|
24
|
+
if (opts?.withScores) {
|
|
25
|
+
command.push("withscores");
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
super(command, cmdOpts);
|
|
29
|
+
}
|
|
30
|
+
}
|
package/esm/pkg/http.js
CHANGED
|
@@ -28,22 +28,14 @@ export class HttpClient {
|
|
|
28
28
|
this.options = {
|
|
29
29
|
backend: config.options?.backend,
|
|
30
30
|
agent: config.agent,
|
|
31
|
-
responseEncoding: config.responseEncoding ?? "base64",
|
|
31
|
+
responseEncoding: config.responseEncoding ?? "base64",
|
|
32
|
+
cache: config.cache,
|
|
32
33
|
};
|
|
33
34
|
this.baseUrl = config.baseUrl.replace(/\/$/, "");
|
|
34
35
|
this.headers = {
|
|
35
36
|
"Content-Type": "application/json",
|
|
36
37
|
...config.headers,
|
|
37
38
|
};
|
|
38
|
-
if (config.telemetry?.runtime) {
|
|
39
|
-
this.headers["Upstash-Telemetry-Runtime"] = config.telemetry.runtime;
|
|
40
|
-
}
|
|
41
|
-
if (config.telemetry?.platform) {
|
|
42
|
-
this.headers["Upstash-Telemetry-Platform"] = config.telemetry.platform;
|
|
43
|
-
}
|
|
44
|
-
if (config.telemetry?.sdk) {
|
|
45
|
-
this.headers["Upstash-Telemetry-Sdk"] = config.telemetry.sdk;
|
|
46
|
-
}
|
|
47
39
|
if (this.options.responseEncoding === "base64") {
|
|
48
40
|
this.headers["Upstash-Encoding"] = "base64";
|
|
49
41
|
}
|
|
@@ -80,6 +72,7 @@ export class HttpClient {
|
|
|
80
72
|
}
|
|
81
73
|
async request(req) {
|
|
82
74
|
const requestOptions = {
|
|
75
|
+
cache: this.options.cache,
|
|
83
76
|
method: "POST",
|
|
84
77
|
headers: this.headers,
|
|
85
78
|
body: JSON.stringify(req.body),
|
|
@@ -107,10 +100,17 @@ export class HttpClient {
|
|
|
107
100
|
}
|
|
108
101
|
const body = (await res.json());
|
|
109
102
|
if (!res.ok) {
|
|
110
|
-
throw new UpstashError(body.error);
|
|
103
|
+
throw new UpstashError(`${body.error}, command was: ${JSON.stringify(req.body)}`);
|
|
111
104
|
}
|
|
112
105
|
if (this.options?.responseEncoding === "base64") {
|
|
113
|
-
|
|
106
|
+
if (Array.isArray(body)) {
|
|
107
|
+
return body.map(({ result, error }) => ({
|
|
108
|
+
result: decode(result),
|
|
109
|
+
error,
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
const result = decode(body.result);
|
|
113
|
+
return { result, error: body.error };
|
|
114
114
|
}
|
|
115
115
|
return body;
|
|
116
116
|
}
|
|
@@ -141,19 +141,19 @@ function base64decode(b64) {
|
|
|
141
141
|
}
|
|
142
142
|
function decode(raw) {
|
|
143
143
|
let result = undefined;
|
|
144
|
-
switch (typeof raw
|
|
144
|
+
switch (typeof raw) {
|
|
145
145
|
case "undefined":
|
|
146
146
|
return raw;
|
|
147
147
|
case "number": {
|
|
148
|
-
result = raw
|
|
148
|
+
result = raw;
|
|
149
149
|
break;
|
|
150
150
|
}
|
|
151
151
|
case "object": {
|
|
152
|
-
if (Array.isArray(raw
|
|
153
|
-
result = raw.
|
|
152
|
+
if (Array.isArray(raw)) {
|
|
153
|
+
result = raw.map((v) => typeof v === "string"
|
|
154
154
|
? base64decode(v)
|
|
155
155
|
: Array.isArray(v)
|
|
156
|
-
? v.map(
|
|
156
|
+
? v.map(decode)
|
|
157
157
|
: v);
|
|
158
158
|
}
|
|
159
159
|
else {
|
|
@@ -164,11 +164,11 @@ function decode(raw) {
|
|
|
164
164
|
break;
|
|
165
165
|
}
|
|
166
166
|
case "string": {
|
|
167
|
-
result = raw
|
|
167
|
+
result = raw === "OK" ? "OK" : base64decode(raw);
|
|
168
168
|
break;
|
|
169
169
|
}
|
|
170
170
|
default:
|
|
171
171
|
break;
|
|
172
172
|
}
|
|
173
|
-
return
|
|
173
|
+
return result;
|
|
174
174
|
}
|