@keplr-wallet/stores 0.13.11 → 0.13.13
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/build/common/query/index.d.ts +1 -0
- package/build/common/query/index.js +1 -0
- package/build/common/query/index.js.map +1 -1
- package/build/common/query/json-rpc-batch.d.ts +20 -0
- package/build/common/query/json-rpc-batch.js +74 -0
- package/build/common/query/json-rpc-batch.js.map +1 -0
- package/package.json +11 -11
- package/src/common/query/index.ts +1 -0
- package/src/common/query/json-rpc-batch.ts +95 -0
|
@@ -17,5 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./query"), exports);
|
|
18
18
|
__exportStar(require("./post-query"), exports);
|
|
19
19
|
__exportStar(require("./json-rpc"), exports);
|
|
20
|
+
__exportStar(require("./json-rpc-batch"), exports);
|
|
20
21
|
__exportStar(require("./context"), exports);
|
|
21
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/query/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,+CAA6B;AAC7B,6CAA2B;AAC3B,4CAA0B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/query/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,+CAA6B;AAC7B,6CAA2B;AAC3B,mDAAiC;AACjC,4CAA0B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ObservableQuery, QueryOptions } from "./query";
|
|
2
|
+
import { QuerySharedContext } from "./context";
|
|
3
|
+
export interface JsonRpcBatchRequest {
|
|
4
|
+
method: string;
|
|
5
|
+
params: unknown;
|
|
6
|
+
id: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Observable query for batched JSON-RPC requests.
|
|
10
|
+
* Manages an array of `JsonRpcBatchRequest` and returns a map of results keyed by request ID.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ObservableJsonRpcBatchQuery<T = unknown> extends ObservableQuery<Record<string, T>> {
|
|
13
|
+
protected readonly requests: JsonRpcBatchRequest[];
|
|
14
|
+
constructor(sharedContext: QuerySharedContext, baseURL: string, url: string, requests: JsonRpcBatchRequest[], options?: Partial<QueryOptions>);
|
|
15
|
+
protected getCacheKey(): string;
|
|
16
|
+
protected fetchResponse(abortController: AbortController): Promise<{
|
|
17
|
+
headers: any;
|
|
18
|
+
data: Record<string, T>;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ObservableJsonRpcBatchQuery = void 0;
|
|
13
|
+
const query_1 = require("./query");
|
|
14
|
+
const simple_fetch_1 = require("@keplr-wallet/simple-fetch");
|
|
15
|
+
const crypto_1 = require("@keplr-wallet/crypto");
|
|
16
|
+
const buffer_1 = require("buffer/");
|
|
17
|
+
/**
|
|
18
|
+
* Observable query for batched JSON-RPC requests.
|
|
19
|
+
* Manages an array of `JsonRpcBatchRequest` and returns a map of results keyed by request ID.
|
|
20
|
+
*/
|
|
21
|
+
class ObservableJsonRpcBatchQuery extends query_1.ObservableQuery {
|
|
22
|
+
constructor(sharedContext, baseURL, url, requests, options = {}) {
|
|
23
|
+
super(sharedContext, baseURL, url, options);
|
|
24
|
+
this.requests = requests;
|
|
25
|
+
}
|
|
26
|
+
getCacheKey() {
|
|
27
|
+
const requestsHash = buffer_1.Buffer.from(crypto_1.Hash.sha256(buffer_1.Buffer.from(JSON.stringify(this.requests, (_, value) => {
|
|
28
|
+
if (typeof value === "bigint") {
|
|
29
|
+
return value.toString();
|
|
30
|
+
}
|
|
31
|
+
return value;
|
|
32
|
+
}))).slice(0, 8)).toString("hex");
|
|
33
|
+
return `${super.getCacheKey()}-${requestsHash}`;
|
|
34
|
+
}
|
|
35
|
+
fetchResponse(abortController) {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
const batchBody = this.requests.map((req) => ({
|
|
38
|
+
jsonrpc: "2.0",
|
|
39
|
+
method: req.method,
|
|
40
|
+
params: req.params,
|
|
41
|
+
id: req.id,
|
|
42
|
+
}));
|
|
43
|
+
const response = yield (0, simple_fetch_1.simpleFetch)(this.baseURL, this.url, {
|
|
44
|
+
method: "POST",
|
|
45
|
+
headers: {
|
|
46
|
+
"content-type": "application/json",
|
|
47
|
+
},
|
|
48
|
+
body: JSON.stringify(batchBody, (_, value) => {
|
|
49
|
+
if (typeof value === "bigint") {
|
|
50
|
+
return value.toString();
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}),
|
|
54
|
+
signal: abortController.signal,
|
|
55
|
+
});
|
|
56
|
+
if (!response.data || !Array.isArray(response.data)) {
|
|
57
|
+
throw new Error("Invalid batch response");
|
|
58
|
+
}
|
|
59
|
+
const data = {};
|
|
60
|
+
for (const res of response.data) {
|
|
61
|
+
if (res.error) {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
data[String(res.id)] = res.result;
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
headers: response.headers,
|
|
68
|
+
data,
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.ObservableJsonRpcBatchQuery = ObservableJsonRpcBatchQuery;
|
|
74
|
+
//# sourceMappingURL=json-rpc-batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-rpc-batch.js","sourceRoot":"","sources":["../../../src/common/query/json-rpc-batch.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAwD;AAExD,6DAAyD;AAEzD,iDAA4C;AAC5C,oCAAiC;AAQjC;;;GAGG;AACH,MAAa,2BAAyC,SAAQ,uBAE7D;IACC,YACE,aAAiC,EACjC,OAAe,EACf,GAAW,EACQ,QAA+B,EAClD,UAAiC,EAAE;QAEnC,KAAK,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAHzB,aAAQ,GAAR,QAAQ,CAAuB;IAIpD,CAAC;IAEkB,WAAW;QAC5B,MAAM,YAAY,GAAG,eAAM,CAAC,IAAI,CAC9B,aAAI,CAAC,MAAM,CACT,eAAM,CAAC,IAAI,CACT,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;YACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;aACzB;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CACH,CACF,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACd,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAElB,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,YAAY,EAAE,CAAC;IAClD,CAAC;IAEwB,aAAa,CACpC,eAAgC;;YAEhC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC5C,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,EAAE,EAAE,GAAG,CAAC,EAAE;aACX,CAAC,CAAC,CAAC;YAEJ,MAAM,QAAQ,GAAG,MAAM,IAAA,0BAAW,EAChC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,GAAG,EACR;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;oBAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;wBAC7B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;qBACzB;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC;gBACF,MAAM,EAAE,eAAe,CAAC,MAAM;aAC/B,CACF,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACnD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;aAC3C;YAED,MAAM,IAAI,GAAsB,EAAE,CAAC;YAEnC,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE;gBAC/B,IAAI,GAAG,CAAC,KAAK,EAAE;oBACb,SAAS;iBACV;gBAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAW,CAAC;aACxC;YAED,OAAO;gBACL,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,IAAI;aACL,CAAC;QACJ,CAAC;KAAA;CACF;AA7ED,kEA6EC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keplr-wallet/stores",
|
|
3
|
-
"version": "0.13.
|
|
3
|
+
"version": "0.13.13",
|
|
4
4
|
"main": "build/index.js",
|
|
5
5
|
"author": "chainapsis",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -21,17 +21,17 @@
|
|
|
21
21
|
"typecheck": "npx tsc -p tsconfig.check.json"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@keplr-wallet/provider-mock": "0.13.
|
|
24
|
+
"@keplr-wallet/provider-mock": "0.13.13"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@keplr-wallet/common": "0.13.
|
|
28
|
-
"@keplr-wallet/cosmos": "0.13.
|
|
29
|
-
"@keplr-wallet/crypto": "0.13.
|
|
30
|
-
"@keplr-wallet/mobx-utils": "0.13.
|
|
31
|
-
"@keplr-wallet/proto-types": "0.13.
|
|
32
|
-
"@keplr-wallet/simple-fetch": "0.13.
|
|
33
|
-
"@keplr-wallet/types": "0.13.
|
|
34
|
-
"@keplr-wallet/unit": "0.13.
|
|
27
|
+
"@keplr-wallet/common": "0.13.13",
|
|
28
|
+
"@keplr-wallet/cosmos": "0.13.13",
|
|
29
|
+
"@keplr-wallet/crypto": "0.13.13",
|
|
30
|
+
"@keplr-wallet/mobx-utils": "0.13.13",
|
|
31
|
+
"@keplr-wallet/proto-types": "0.13.13",
|
|
32
|
+
"@keplr-wallet/simple-fetch": "0.13.13",
|
|
33
|
+
"@keplr-wallet/types": "0.13.13",
|
|
34
|
+
"@keplr-wallet/unit": "0.13.13",
|
|
35
35
|
"buffer": "^6.0.3",
|
|
36
36
|
"deepmerge": "^4.2.2",
|
|
37
37
|
"eventemitter3": "^4.0.7",
|
|
@@ -43,5 +43,5 @@
|
|
|
43
43
|
"mobx": "^6",
|
|
44
44
|
"mobx-utils": "^6"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "d806e87af06491dd189d849f69614a8b06c627bc"
|
|
47
47
|
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { ObservableQuery, QueryOptions } from "./query";
|
|
2
|
+
import { QuerySharedContext } from "./context";
|
|
3
|
+
import { simpleFetch } from "@keplr-wallet/simple-fetch";
|
|
4
|
+
import { JsonRpcResponse } from "@keplr-wallet/types";
|
|
5
|
+
import { Hash } from "@keplr-wallet/crypto";
|
|
6
|
+
import { Buffer } from "buffer/";
|
|
7
|
+
|
|
8
|
+
export interface JsonRpcBatchRequest {
|
|
9
|
+
method: string;
|
|
10
|
+
params: unknown;
|
|
11
|
+
id: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Observable query for batched JSON-RPC requests.
|
|
16
|
+
* Manages an array of `JsonRpcBatchRequest` and returns a map of results keyed by request ID.
|
|
17
|
+
*/
|
|
18
|
+
export class ObservableJsonRpcBatchQuery<T = unknown> extends ObservableQuery<
|
|
19
|
+
Record<string, T>
|
|
20
|
+
> {
|
|
21
|
+
constructor(
|
|
22
|
+
sharedContext: QuerySharedContext,
|
|
23
|
+
baseURL: string,
|
|
24
|
+
url: string,
|
|
25
|
+
protected readonly requests: JsonRpcBatchRequest[],
|
|
26
|
+
options: Partial<QueryOptions> = {}
|
|
27
|
+
) {
|
|
28
|
+
super(sharedContext, baseURL, url, options);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
protected override getCacheKey(): string {
|
|
32
|
+
const requestsHash = Buffer.from(
|
|
33
|
+
Hash.sha256(
|
|
34
|
+
Buffer.from(
|
|
35
|
+
JSON.stringify(this.requests, (_, value) => {
|
|
36
|
+
if (typeof value === "bigint") {
|
|
37
|
+
return value.toString();
|
|
38
|
+
}
|
|
39
|
+
return value;
|
|
40
|
+
})
|
|
41
|
+
)
|
|
42
|
+
).slice(0, 8)
|
|
43
|
+
).toString("hex");
|
|
44
|
+
|
|
45
|
+
return `${super.getCacheKey()}-${requestsHash}`;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
protected override async fetchResponse(
|
|
49
|
+
abortController: AbortController
|
|
50
|
+
): Promise<{ headers: any; data: Record<string, T> }> {
|
|
51
|
+
const batchBody = this.requests.map((req) => ({
|
|
52
|
+
jsonrpc: "2.0",
|
|
53
|
+
method: req.method,
|
|
54
|
+
params: req.params,
|
|
55
|
+
id: req.id,
|
|
56
|
+
}));
|
|
57
|
+
|
|
58
|
+
const response = await simpleFetch<JsonRpcResponse<T>[]>(
|
|
59
|
+
this.baseURL,
|
|
60
|
+
this.url,
|
|
61
|
+
{
|
|
62
|
+
method: "POST",
|
|
63
|
+
headers: {
|
|
64
|
+
"content-type": "application/json",
|
|
65
|
+
},
|
|
66
|
+
body: JSON.stringify(batchBody, (_, value) => {
|
|
67
|
+
if (typeof value === "bigint") {
|
|
68
|
+
return value.toString();
|
|
69
|
+
}
|
|
70
|
+
return value;
|
|
71
|
+
}),
|
|
72
|
+
signal: abortController.signal,
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
if (!response.data || !Array.isArray(response.data)) {
|
|
77
|
+
throw new Error("Invalid batch response");
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const data: Record<string, T> = {};
|
|
81
|
+
|
|
82
|
+
for (const res of response.data) {
|
|
83
|
+
if (res.error) {
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
data[String(res.id)] = res.result as T;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return {
|
|
91
|
+
headers: response.headers,
|
|
92
|
+
data,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|