@subwallet/subsquare-api-sdk 1.3.70-2
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 -0
- package/bundle.d.ts +4 -0
- package/bundle.js +7 -0
- package/cjs/bundle.js +25 -0
- package/cjs/detectOther.js +11 -0
- package/cjs/detectPackage.js +12 -0
- package/cjs/index.js +45 -0
- package/cjs/interface.js +41 -0
- package/cjs/package.json +3 -0
- package/cjs/packageInfo.js +18 -0
- package/cjs/subsquare-sdk.js +192 -0
- package/cjs/url.js +15 -0
- package/cjs/utils.js +85 -0
- package/detectOther.d.ts +2 -0
- package/detectOther.js +6 -0
- package/detectPackage.d.ts +1 -0
- package/detectPackage.js +9 -0
- package/index.d.ts +6 -0
- package/index.js +9 -0
- package/interface.d.ts +378 -0
- package/interface.js +33 -0
- package/package.json +80 -0
- package/packageInfo.d.ts +6 -0
- package/packageInfo.js +11 -0
- package/subsquare-sdk.d.ts +19 -0
- package/subsquare-sdk.js +184 -0
- package/url.d.ts +3 -0
- package/url.js +6 -0
- package/utils.d.ts +5 -0
- package/utils.js +75 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# subsquare-api-sdk
|
package/bundle.d.ts
ADDED
package/bundle.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Copyright 2019-2022 @polkadot/extension-base authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { SubsquareApiSdk } from "./subsquare-sdk.js";
|
|
5
|
+
export { packageInfo } from "./packageInfo.js";
|
|
6
|
+
export const getSubsquareApi = chain => SubsquareApiSdk.getInstance(chain);
|
|
7
|
+
export { SubsquareApiSdk } from "./subsquare-sdk.js";
|
package/cjs/bundle.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "SubsquareApiSdk", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _subsquareSdk.SubsquareApiSdk;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
exports.getSubsquareApi = void 0;
|
|
13
|
+
Object.defineProperty(exports, "packageInfo", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () {
|
|
16
|
+
return _packageInfo.packageInfo;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
var _subsquareSdk = require("./subsquare-sdk");
|
|
20
|
+
var _packageInfo = require("./packageInfo");
|
|
21
|
+
// Copyright 2019-2022 @polkadot/extension-base authors & contributors
|
|
22
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
23
|
+
|
|
24
|
+
const getSubsquareApi = chain => _subsquareSdk.SubsquareApiSdk.getInstance(chain);
|
|
25
|
+
exports.getSubsquareApi = getSubsquareApi;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
// Copyright 2019-2022 @subwallet/subsquare-api-sdk authors & contributors
|
|
8
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
// Empty template, auto-generated by @polkadot/dev
|
|
10
|
+
var _default = [];
|
|
11
|
+
exports.default = _default;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _util = require("@polkadot/util");
|
|
5
|
+
var _detectOther = _interopRequireDefault(require("./detectOther"));
|
|
6
|
+
var _packageInfo = require("./packageInfo");
|
|
7
|
+
// Copyright 2017-2022 @subwallet/subsquare-api-sdk authors & contributors
|
|
8
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
|
|
10
|
+
// Do not edit, auto-generated by @polkadot/dev
|
|
11
|
+
|
|
12
|
+
(0, _util.detectPackage)(_packageInfo.packageInfo, null, _detectOther.default);
|
package/cjs/index.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
ALL_TRACK_ID: true
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "ALL_TRACK_ID", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () {
|
|
12
|
+
return _utils.ALL_TRACK_ID;
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
exports.default = void 0;
|
|
16
|
+
require("./detectPackage");
|
|
17
|
+
var _bundle = require("./bundle");
|
|
18
|
+
Object.keys(_bundle).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
21
|
+
if (key in exports && exports[key] === _bundle[key]) return;
|
|
22
|
+
Object.defineProperty(exports, key, {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
get: function () {
|
|
25
|
+
return _bundle[key];
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
var _interface = require("./interface");
|
|
30
|
+
Object.keys(_interface).forEach(function (key) {
|
|
31
|
+
if (key === "default" || key === "__esModule") return;
|
|
32
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
33
|
+
if (key in exports && exports[key] === _interface[key]) return;
|
|
34
|
+
Object.defineProperty(exports, key, {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
get: function () {
|
|
37
|
+
return _interface[key];
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
var _utils = require("./utils");
|
|
42
|
+
// Copyright 2017-2022 @subwallet/subwallet-api-sdk authors & contributors
|
|
43
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
44
|
+
var _default = _bundle.getSubsquareApi;
|
|
45
|
+
exports.default = _default;
|
package/cjs/interface.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.GovStatusKey = exports.GOV_PREPARING_STATES = exports.GOV_ONGOING_STATES = exports.GOV_COMPLETED_SUCCESS_STATES = exports.GOV_COMPLETED_STATES = exports.GOV_COMPLETED_FAILED_STATES = void 0;
|
|
7
|
+
// Copyright 2019-2022 @subwallet/subsquare-api-sdk authors & contributors
|
|
8
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
/* ReferendumVote */
|
|
10
|
+
/* ReferendumVote */
|
|
11
|
+
/* Gov Status */
|
|
12
|
+
let GovStatusKey;
|
|
13
|
+
exports.GovStatusKey = GovStatusKey;
|
|
14
|
+
(function (GovStatusKey) {
|
|
15
|
+
GovStatusKey["ALL"] = "All";
|
|
16
|
+
GovStatusKey["PREPARING"] = "Preparing";
|
|
17
|
+
GovStatusKey["DECIDING"] = "Deciding";
|
|
18
|
+
GovStatusKey["CONFIRMING"] = "Confirming";
|
|
19
|
+
GovStatusKey["QUEUEING"] = "Queueing";
|
|
20
|
+
GovStatusKey["APPROVED"] = "Approved";
|
|
21
|
+
GovStatusKey["EXECUTED"] = "Executed";
|
|
22
|
+
GovStatusKey["REJECTED"] = "Rejected";
|
|
23
|
+
GovStatusKey["TIMEDOUT"] = "TimedOut";
|
|
24
|
+
GovStatusKey["CANCELLED"] = "Cancelled";
|
|
25
|
+
GovStatusKey["KILLED"] = "Killed";
|
|
26
|
+
GovStatusKey["STARTED"] = "Started";
|
|
27
|
+
GovStatusKey["PASSED"] = "Passed";
|
|
28
|
+
GovStatusKey["NOTPASSED"] = "NotPassed";
|
|
29
|
+
})(GovStatusKey || (exports.GovStatusKey = GovStatusKey = {}));
|
|
30
|
+
const GOV_PREPARING_STATES = [GovStatusKey.PREPARING, GovStatusKey.QUEUEING];
|
|
31
|
+
exports.GOV_PREPARING_STATES = GOV_PREPARING_STATES;
|
|
32
|
+
const GOV_ONGOING_STATES = [GovStatusKey.PREPARING, GovStatusKey.DECIDING, GovStatusKey.CONFIRMING, GovStatusKey.QUEUEING, GovStatusKey.STARTED];
|
|
33
|
+
exports.GOV_ONGOING_STATES = GOV_ONGOING_STATES;
|
|
34
|
+
const GOV_COMPLETED_STATES = [GovStatusKey.APPROVED, GovStatusKey.EXECUTED, GovStatusKey.REJECTED, GovStatusKey.TIMEDOUT, GovStatusKey.CANCELLED, GovStatusKey.KILLED, GovStatusKey.PASSED, GovStatusKey.NOTPASSED];
|
|
35
|
+
exports.GOV_COMPLETED_STATES = GOV_COMPLETED_STATES;
|
|
36
|
+
const GOV_COMPLETED_SUCCESS_STATES = [GovStatusKey.APPROVED, GovStatusKey.EXECUTED, GovStatusKey.PASSED];
|
|
37
|
+
exports.GOV_COMPLETED_SUCCESS_STATES = GOV_COMPLETED_SUCCESS_STATES;
|
|
38
|
+
const GOV_COMPLETED_FAILED_STATES = [GovStatusKey.REJECTED, GovStatusKey.TIMEDOUT, GovStatusKey.CANCELLED, GovStatusKey.KILLED, GovStatusKey.NOTPASSED];
|
|
39
|
+
|
|
40
|
+
/* Gov Status */
|
|
41
|
+
exports.GOV_COMPLETED_FAILED_STATES = GOV_COMPLETED_FAILED_STATES;
|
package/cjs/package.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.packageInfo = void 0;
|
|
7
|
+
// Copyright 2017-2022 @subwallet/subsquare-api-sdk authors & contributors
|
|
8
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
|
|
10
|
+
// Do not edit, auto-generated by @polkadot/dev
|
|
11
|
+
|
|
12
|
+
const packageInfo = {
|
|
13
|
+
name: '@subwallet/subsquare-api-sdk',
|
|
14
|
+
path: typeof __dirname === 'string' ? __dirname : 'auto',
|
|
15
|
+
type: 'cjs',
|
|
16
|
+
version: '1.3.70-2'
|
|
17
|
+
};
|
|
18
|
+
exports.packageInfo = packageInfo;
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.SubsquareApiSdk = void 0;
|
|
8
|
+
var _axios = _interopRequireDefault(require("axios"));
|
|
9
|
+
var _url = require("./url");
|
|
10
|
+
var _utils = require("./utils");
|
|
11
|
+
// Copyright 2019-2022 @subwallet/subsquare-api-sdk authors & contributors
|
|
12
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
13
|
+
|
|
14
|
+
const specialBaseUrls = {
|
|
15
|
+
vara: 'https://vara.subsquare.io/api',
|
|
16
|
+
acala: 'https://acala.subsquare.io/api',
|
|
17
|
+
centrifuge: 'https://centrifuge.subsquare.io/api',
|
|
18
|
+
laos: 'https://laos.subsquare.io/api/',
|
|
19
|
+
interlay: 'https://interlay.subsquare.io/api',
|
|
20
|
+
karura: 'https://karura.subsquare.io/api',
|
|
21
|
+
kintsugi: 'https://kintsugi.subsquare.io/api'
|
|
22
|
+
};
|
|
23
|
+
const LegacyGovChains = ['ajuna', 'astar', 'phala', 'heima', 'acala', 'centrifuge', 'interlay', 'laos', 'karura', 'kintsugi'];
|
|
24
|
+
class SubsquareApiSdk {
|
|
25
|
+
static instances = new Map();
|
|
26
|
+
isLegacyGov = false;
|
|
27
|
+
constructor(chain) {
|
|
28
|
+
const baseURL = specialBaseUrls[chain] || `https://${chain}-api.subsquare.io`;
|
|
29
|
+
this.isLegacyGov = LegacyGovChains.includes(chain);
|
|
30
|
+
this.client = _axios.default.create({
|
|
31
|
+
baseURL
|
|
32
|
+
});
|
|
33
|
+
this.chain = chain;
|
|
34
|
+
}
|
|
35
|
+
static getInstance(chain) {
|
|
36
|
+
if (!this.instances.has(chain)) {
|
|
37
|
+
this.instances.set(chain, new SubsquareApiSdk(chain));
|
|
38
|
+
}
|
|
39
|
+
return this.instances.get(chain);
|
|
40
|
+
}
|
|
41
|
+
async getMigrationBlockOffset(blockTime) {
|
|
42
|
+
try {
|
|
43
|
+
const urls = [`/stream/relay-chain-height?interval=${blockTime * 1000}`, `/stream/scan-height?interval=${blockTime * 1000}`];
|
|
44
|
+
const results = await Promise.allSettled(urls.map(async url => {
|
|
45
|
+
const res = await fetch(new URL(url, this.client.defaults.baseURL));
|
|
46
|
+
if (!res.body) {
|
|
47
|
+
throw new Error('Response body is null');
|
|
48
|
+
}
|
|
49
|
+
const reader = res.body.getReader();
|
|
50
|
+
const decoder = new TextDecoder();
|
|
51
|
+
|
|
52
|
+
// @ts-ignore
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
54
|
+
const readResult = await reader.read();
|
|
55
|
+
const {
|
|
56
|
+
done,
|
|
57
|
+
value
|
|
58
|
+
} = readResult;
|
|
59
|
+
if (done || !value) {
|
|
60
|
+
throw new Error('No data from stream');
|
|
61
|
+
}
|
|
62
|
+
const text = decoder.decode(value);
|
|
63
|
+
const data = JSON.parse(text);
|
|
64
|
+
return data.value;
|
|
65
|
+
}));
|
|
66
|
+
const [relayResult, scanResult] = results;
|
|
67
|
+
const relayHeight = relayResult.status === 'fulfilled' ? relayResult.value : null;
|
|
68
|
+
const scanHeight = scanResult.status === 'fulfilled' ? scanResult.value : null;
|
|
69
|
+
let offset;
|
|
70
|
+
if (relayHeight !== null && scanHeight !== null) {
|
|
71
|
+
offset = relayHeight - scanHeight > 0 ? relayHeight - scanHeight : 0;
|
|
72
|
+
} else {
|
|
73
|
+
offset = scanHeight !== null && scanHeight !== void 0 ? scanHeight : 0;
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
offset,
|
|
77
|
+
relayHeight,
|
|
78
|
+
scanHeight
|
|
79
|
+
};
|
|
80
|
+
} catch (err) {
|
|
81
|
+
console.error(`Failed to get migration block offset for ${this.chain}:`, err);
|
|
82
|
+
return {
|
|
83
|
+
offset: null,
|
|
84
|
+
relayHeight: null,
|
|
85
|
+
scanHeight: null
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async getReferenda(params) {
|
|
90
|
+
const api = this.isLegacyGov ? _url.gov1ReferendumsApi : _url.gov2ReferendumsApi;
|
|
91
|
+
const referendaRes = await this.client.get(api, {
|
|
92
|
+
params
|
|
93
|
+
});
|
|
94
|
+
const data = referendaRes.data;
|
|
95
|
+
if (this.isLegacyGov) {
|
|
96
|
+
return {
|
|
97
|
+
...data,
|
|
98
|
+
items: data.items.map(_utils.castDemocracyReferendumToReferendum)
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
...data,
|
|
103
|
+
items: data.items.map(ref => {
|
|
104
|
+
var _ref$trackInfo;
|
|
105
|
+
return {
|
|
106
|
+
...ref,
|
|
107
|
+
version: 2,
|
|
108
|
+
trackInfo: {
|
|
109
|
+
...ref.trackInfo,
|
|
110
|
+
name: (0, _utils.reformatTrackName)(((_ref$trackInfo = ref.trackInfo) === null || _ref$trackInfo === void 0 ? void 0 : _ref$trackInfo.name) || '')
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
})
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
async getReferendaDetails(id) {
|
|
117
|
+
const api = this.isLegacyGov ? _url.gov1ReferendumsApi : _url.gov2ReferendumsApi;
|
|
118
|
+
const referendaRes = await this.client.get(`${api}/${id}`);
|
|
119
|
+
let ref = referendaRes.data;
|
|
120
|
+
if (this.isLegacyGov) {
|
|
121
|
+
return (0, _utils.castDemocracyReferendumToReferendum)(ref);
|
|
122
|
+
}
|
|
123
|
+
ref = ref;
|
|
124
|
+
return {
|
|
125
|
+
...ref,
|
|
126
|
+
version: 2,
|
|
127
|
+
trackInfo: {
|
|
128
|
+
...ref.trackInfo,
|
|
129
|
+
name: (0, _utils.reformatTrackName)(ref.trackInfo.name)
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
async getTracks() {
|
|
134
|
+
const tracksRes = await this.client.get(_url.gov2TracksApi);
|
|
135
|
+
const formattedTracks = tracksRes.data.map(track => ({
|
|
136
|
+
...track,
|
|
137
|
+
name: (0, _utils.reformatTrackName)(track.name)
|
|
138
|
+
}));
|
|
139
|
+
return [_utils.ALL_TRACK, ...formattedTracks];
|
|
140
|
+
}
|
|
141
|
+
async getReferendaWithTrack(trackId, params) {
|
|
142
|
+
const referendaRes = await this.client.get(_url.gov2TracksApi + `/${trackId}/referendums`, {
|
|
143
|
+
params
|
|
144
|
+
});
|
|
145
|
+
return {
|
|
146
|
+
...referendaRes.data,
|
|
147
|
+
items: referendaRes.data.items.map(ref => {
|
|
148
|
+
if (ref.version === 1) {
|
|
149
|
+
return {
|
|
150
|
+
...ref
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
...ref,
|
|
155
|
+
trackInfo: {
|
|
156
|
+
...ref.trackInfo,
|
|
157
|
+
name: (0, _utils.reformatTrackName)(ref.trackInfo.name)
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
})
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
async getReferendaVotes(id) {
|
|
164
|
+
const api = this.isLegacyGov ? _url.gov1ReferendumsApi : _url.gov2ReferendumsApi;
|
|
165
|
+
const referendaVoteRes = await this.client.get(api + `/${id}/votes`);
|
|
166
|
+
return referendaVoteRes.data;
|
|
167
|
+
}
|
|
168
|
+
async getUserVotes(address, params) {
|
|
169
|
+
const userVoteRes = await this.client.get(`/users/${address}/votes`, {
|
|
170
|
+
params
|
|
171
|
+
});
|
|
172
|
+
return userVoteRes.data;
|
|
173
|
+
}
|
|
174
|
+
async findReferendumByValue(text) {
|
|
175
|
+
var _referendaRes$data, _referendaRes$data$de;
|
|
176
|
+
const referendaRes = await this.client.get('/search', {
|
|
177
|
+
params: {
|
|
178
|
+
text
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
if ((_referendaRes$data = referendaRes.data) !== null && _referendaRes$data !== void 0 && (_referendaRes$data$de = _referendaRes$data.democracyReferenda) !== null && _referendaRes$data$de !== void 0 && _referendaRes$data$de.length && this.isLegacyGov) {
|
|
182
|
+
const democracyReferenda = referendaRes.data.democracyReferenda.map(_utils.castDemocracyReferendumToReferendum);
|
|
183
|
+
return {
|
|
184
|
+
govReferenda: [...democracyReferenda]
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
govReferenda: referendaRes.data.openGovReferenda
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
exports.SubsquareApiSdk = SubsquareApiSdk;
|
package/cjs/url.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.gov2TracksApi = exports.gov2ReferendumsApi = exports.gov1ReferendumsApi = void 0;
|
|
7
|
+
// Copyright 2019-2022 @subwallet/subsquare-api-sdk authors & contributors
|
|
8
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
9
|
+
|
|
10
|
+
const gov2TracksApi = '/gov2/tracks';
|
|
11
|
+
exports.gov2TracksApi = gov2TracksApi;
|
|
12
|
+
const gov2ReferendumsApi = '/gov2/referendums';
|
|
13
|
+
exports.gov2ReferendumsApi = gov2ReferendumsApi;
|
|
14
|
+
const gov1ReferendumsApi = '/democracy/referendums';
|
|
15
|
+
exports.gov1ReferendumsApi = gov1ReferendumsApi;
|
package/cjs/utils.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.castDemocracyReferendumToReferendum = exports.ALL_TRACK_ID = exports.ALL_TRACK = void 0;
|
|
7
|
+
exports.reformatTrackName = reformatTrackName;
|
|
8
|
+
// Copyright 2019-2022 @subwallet/subsquare-api-sdk authors & contributors
|
|
9
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
10
|
+
|
|
11
|
+
const ALL_TRACK_ID = 'All';
|
|
12
|
+
exports.ALL_TRACK_ID = ALL_TRACK_ID;
|
|
13
|
+
const ALL_TRACK = {
|
|
14
|
+
id: ALL_TRACK_ID,
|
|
15
|
+
name: 'All tracks',
|
|
16
|
+
decisionPeriod: 0,
|
|
17
|
+
confirmPeriod: 0
|
|
18
|
+
};
|
|
19
|
+
exports.ALL_TRACK = ALL_TRACK;
|
|
20
|
+
function reformatTrackName(input) {
|
|
21
|
+
if (!input) {
|
|
22
|
+
return '';
|
|
23
|
+
}
|
|
24
|
+
let str = input.replace(/[_-]/g, ' ');
|
|
25
|
+
str = str.replace(/([a-z])([A-Z])/g, '$1 $2');
|
|
26
|
+
return str.split(' ').filter(Boolean).map(word => word[0].toUpperCase() + word.slice(1).toLowerCase()).join(' ');
|
|
27
|
+
}
|
|
28
|
+
const castDemocracyReferendumToReferendum = ref => {
|
|
29
|
+
const {
|
|
30
|
+
call,
|
|
31
|
+
hash,
|
|
32
|
+
info,
|
|
33
|
+
meta,
|
|
34
|
+
state
|
|
35
|
+
} = ref.onchainData;
|
|
36
|
+
const enactmentAfter = ((meta === null || meta === void 0 ? void 0 : meta.delay) || 0) + ((meta === null || meta === void 0 ? void 0 : meta.end) || 0);
|
|
37
|
+
const enactment = {
|
|
38
|
+
after: enactmentAfter.toString()
|
|
39
|
+
};
|
|
40
|
+
const proposal = ref.onchainData.preImage ? ref.onchainData.preImage : {
|
|
41
|
+
call
|
|
42
|
+
};
|
|
43
|
+
const onChainData = {
|
|
44
|
+
...ref.onchainData,
|
|
45
|
+
proposalHash: hash,
|
|
46
|
+
proposal,
|
|
47
|
+
meta,
|
|
48
|
+
info: {
|
|
49
|
+
decisionDeposit: {
|
|
50
|
+
who: '',
|
|
51
|
+
amount: '0'
|
|
52
|
+
},
|
|
53
|
+
submissionDeposit: {
|
|
54
|
+
who: '',
|
|
55
|
+
amount: '0'
|
|
56
|
+
},
|
|
57
|
+
enactment,
|
|
58
|
+
alarm: [],
|
|
59
|
+
submitted: 0,
|
|
60
|
+
democracy: info
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
return {
|
|
64
|
+
...ref,
|
|
65
|
+
version: 1,
|
|
66
|
+
trackInfo: {
|
|
67
|
+
id: '-1',
|
|
68
|
+
name: 'Democracy',
|
|
69
|
+
decisionPeriod: 0,
|
|
70
|
+
confirmPeriod: 0
|
|
71
|
+
},
|
|
72
|
+
decisionDeposit: {
|
|
73
|
+
who: ''
|
|
74
|
+
},
|
|
75
|
+
enactment,
|
|
76
|
+
proposalHash: hash,
|
|
77
|
+
proposalCall: proposal.call,
|
|
78
|
+
state: {
|
|
79
|
+
...state,
|
|
80
|
+
name: ref.state
|
|
81
|
+
},
|
|
82
|
+
onchainData: onChainData
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
exports.castDemocracyReferendumToReferendum = castDemocracyReferendumToReferendum;
|
package/detectOther.d.ts
ADDED
package/detectOther.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/detectPackage.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Copyright 2017-2022 @subwallet/subsquare-api-sdk authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
// Do not edit, auto-generated by @polkadot/dev
|
|
5
|
+
|
|
6
|
+
import { detectPackage } from '@polkadot/util';
|
|
7
|
+
import others from "./detectOther.js";
|
|
8
|
+
import { packageInfo } from "./packageInfo.js";
|
|
9
|
+
detectPackage(packageInfo, null, others);
|
package/index.d.ts
ADDED
package/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Copyright 2017-2022 @subwallet/subwallet-api-sdk authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import "./detectPackage.js";
|
|
5
|
+
import { getSubsquareApi } from "./bundle.js";
|
|
6
|
+
export * from "./bundle.js";
|
|
7
|
+
export default getSubsquareApi;
|
|
8
|
+
export * from "./interface.js";
|
|
9
|
+
export { ALL_TRACK_ID } from "./utils.js";
|
package/interface.d.ts
ADDED
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
export interface Referendum {
|
|
2
|
+
_id: string;
|
|
3
|
+
referendumIndex: number;
|
|
4
|
+
proposer: string;
|
|
5
|
+
title: string;
|
|
6
|
+
content: string;
|
|
7
|
+
version: number;
|
|
8
|
+
decisionDeposit: {
|
|
9
|
+
who: string;
|
|
10
|
+
};
|
|
11
|
+
trackInfo: TrackInfo;
|
|
12
|
+
enactment: {
|
|
13
|
+
after?: string;
|
|
14
|
+
at?: string;
|
|
15
|
+
};
|
|
16
|
+
proposalHash: string;
|
|
17
|
+
proposalCall: {
|
|
18
|
+
section: string;
|
|
19
|
+
method: string;
|
|
20
|
+
};
|
|
21
|
+
state: OnchainState;
|
|
22
|
+
allSpends?: SpendItem[];
|
|
23
|
+
onchainData: OnchainData;
|
|
24
|
+
}
|
|
25
|
+
export interface DemocracyReferendum {
|
|
26
|
+
_id: string;
|
|
27
|
+
referendumIndex: number;
|
|
28
|
+
indexer: Indexer;
|
|
29
|
+
contentType: string;
|
|
30
|
+
track: number;
|
|
31
|
+
createdAt: string;
|
|
32
|
+
updatedAt: string;
|
|
33
|
+
lastActivityAt: string;
|
|
34
|
+
edited: boolean;
|
|
35
|
+
stateSort: number;
|
|
36
|
+
polkassemblyCommentsCount: number;
|
|
37
|
+
polkassemblyId: number;
|
|
38
|
+
polkassemblyPostType: string;
|
|
39
|
+
contentHash: string;
|
|
40
|
+
dataSource: string;
|
|
41
|
+
polkassemblyContentHtml: string;
|
|
42
|
+
contentSummary: Record<string, unknown>;
|
|
43
|
+
isBoundDiscussion: boolean;
|
|
44
|
+
isFinal: boolean;
|
|
45
|
+
refToPost: Record<string, unknown>;
|
|
46
|
+
rootPost: Record<string, unknown>;
|
|
47
|
+
author: Record<string, unknown>;
|
|
48
|
+
commentsCount: number;
|
|
49
|
+
authors: string[];
|
|
50
|
+
reactions: unknown[];
|
|
51
|
+
proposer: string;
|
|
52
|
+
title: string;
|
|
53
|
+
content: string;
|
|
54
|
+
version: 1;
|
|
55
|
+
state: GovStatusKey;
|
|
56
|
+
onchainData: DemocracyOnchainData;
|
|
57
|
+
}
|
|
58
|
+
interface DemocracyMetadata {
|
|
59
|
+
end: number;
|
|
60
|
+
threshold: string;
|
|
61
|
+
delay: number;
|
|
62
|
+
}
|
|
63
|
+
export interface DemocracyOnChainInfo {
|
|
64
|
+
ongoing?: DemocracyReferendumOngoing;
|
|
65
|
+
finished?: DemocracyReferendumFinished;
|
|
66
|
+
}
|
|
67
|
+
export interface DemocracyReferendumOngoing {
|
|
68
|
+
end: number;
|
|
69
|
+
proposal: {
|
|
70
|
+
lookup: {
|
|
71
|
+
hash: string;
|
|
72
|
+
len: number;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
threshold: 'SuperMajorityApprove' | 'SuperMajorityAgainst' | 'SimpleMajority';
|
|
76
|
+
delay: number;
|
|
77
|
+
tally: Tally;
|
|
78
|
+
}
|
|
79
|
+
export interface DemocracyReferendumFinished {
|
|
80
|
+
approved: boolean;
|
|
81
|
+
end: number;
|
|
82
|
+
}
|
|
83
|
+
interface DemocracyOnchainData {
|
|
84
|
+
timeline: RefTimelineItem[];
|
|
85
|
+
proposer: string;
|
|
86
|
+
hash: string;
|
|
87
|
+
call: {
|
|
88
|
+
args: ProposalArg[];
|
|
89
|
+
callIndex: string;
|
|
90
|
+
method: string;
|
|
91
|
+
section: string;
|
|
92
|
+
};
|
|
93
|
+
info: DemocracyOnChainInfo;
|
|
94
|
+
meta: DemocracyMetadata;
|
|
95
|
+
status?: DemocracyMetadata;
|
|
96
|
+
tally: Tally;
|
|
97
|
+
state: OnchainState;
|
|
98
|
+
preImage: Proposal;
|
|
99
|
+
}
|
|
100
|
+
export interface ReferendumDetail {
|
|
101
|
+
version: number;
|
|
102
|
+
_id: string;
|
|
103
|
+
referendumIndex: number;
|
|
104
|
+
indexer: Indexer;
|
|
105
|
+
proposer: string;
|
|
106
|
+
title: string;
|
|
107
|
+
content: string;
|
|
108
|
+
contentType: string;
|
|
109
|
+
track: number;
|
|
110
|
+
createdAt: string;
|
|
111
|
+
updatedAt: string;
|
|
112
|
+
lastActivityAt: string;
|
|
113
|
+
edited: boolean;
|
|
114
|
+
state: OnchainState;
|
|
115
|
+
stateSort: number;
|
|
116
|
+
polkassemblyCommentsCount: number;
|
|
117
|
+
polkassemblyId: number;
|
|
118
|
+
polkassemblyPostType: string;
|
|
119
|
+
contentHash: string;
|
|
120
|
+
dataSource: string;
|
|
121
|
+
polkassemblyContentHtml: string;
|
|
122
|
+
contentSummary: Record<string, unknown>;
|
|
123
|
+
allSpends?: SpendItem[];
|
|
124
|
+
isBoundDiscussion: boolean;
|
|
125
|
+
isFinal: boolean;
|
|
126
|
+
isTreasuryProposal: boolean;
|
|
127
|
+
isTreasuryV1: boolean;
|
|
128
|
+
onchainData: OnchainData;
|
|
129
|
+
refToPost: Record<string, unknown>;
|
|
130
|
+
rootPost: Record<string, unknown>;
|
|
131
|
+
trackInfo: TrackInfo;
|
|
132
|
+
author: Record<string, unknown>;
|
|
133
|
+
commentsCount: number;
|
|
134
|
+
authors: string[];
|
|
135
|
+
reactions: unknown[];
|
|
136
|
+
}
|
|
137
|
+
interface BaseSpendItem {
|
|
138
|
+
isSpendLocal: boolean;
|
|
139
|
+
amount: string;
|
|
140
|
+
beneficiary: {
|
|
141
|
+
chain: string;
|
|
142
|
+
address: string;
|
|
143
|
+
pubKey: string;
|
|
144
|
+
};
|
|
145
|
+
beneficiaryLocation?: {
|
|
146
|
+
name: string;
|
|
147
|
+
type: string;
|
|
148
|
+
value: {
|
|
149
|
+
v3?: {
|
|
150
|
+
parents: number;
|
|
151
|
+
interior: Record<string, unknown>;
|
|
152
|
+
};
|
|
153
|
+
v4?: {
|
|
154
|
+
parents: number;
|
|
155
|
+
interior: Record<string, unknown>;
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
validFrom?: number | null;
|
|
160
|
+
after?: unknown;
|
|
161
|
+
}
|
|
162
|
+
interface LocalSpendItem extends BaseSpendItem {
|
|
163
|
+
isSpendLocal: true;
|
|
164
|
+
type: string;
|
|
165
|
+
symbol: string;
|
|
166
|
+
}
|
|
167
|
+
interface RemoteSpendItem extends BaseSpendItem {
|
|
168
|
+
isSpendLocal: false;
|
|
169
|
+
assetKind: {
|
|
170
|
+
chain: string;
|
|
171
|
+
type: string;
|
|
172
|
+
symbol: string;
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
export declare type SpendItem = LocalSpendItem | RemoteSpendItem;
|
|
176
|
+
export interface RefTimelineItem {
|
|
177
|
+
_id: string;
|
|
178
|
+
referendumIndex: number;
|
|
179
|
+
indexer: {
|
|
180
|
+
blockHeight: number;
|
|
181
|
+
blockHash: string;
|
|
182
|
+
blockTime: number;
|
|
183
|
+
extrinsicIndex?: number;
|
|
184
|
+
eventIndex: number;
|
|
185
|
+
};
|
|
186
|
+
name: string;
|
|
187
|
+
method: string;
|
|
188
|
+
args: Record<string, unknown>;
|
|
189
|
+
}
|
|
190
|
+
export interface Tally {
|
|
191
|
+
ayes: string;
|
|
192
|
+
nays: string;
|
|
193
|
+
electorate: string;
|
|
194
|
+
support: string;
|
|
195
|
+
turnout: string;
|
|
196
|
+
}
|
|
197
|
+
export interface Proposal {
|
|
198
|
+
call: {
|
|
199
|
+
args: ProposalArg[];
|
|
200
|
+
callIndex: string;
|
|
201
|
+
method: string;
|
|
202
|
+
section: string;
|
|
203
|
+
};
|
|
204
|
+
indexer: {
|
|
205
|
+
blockHeight: number;
|
|
206
|
+
blockHash: string;
|
|
207
|
+
blockTime: number;
|
|
208
|
+
extrinsicIndex?: number;
|
|
209
|
+
eventIndex: number;
|
|
210
|
+
};
|
|
211
|
+
shorten: boolean;
|
|
212
|
+
}
|
|
213
|
+
interface ProposalArg {
|
|
214
|
+
name: string;
|
|
215
|
+
type: string;
|
|
216
|
+
value: any;
|
|
217
|
+
}
|
|
218
|
+
interface Reciprocal {
|
|
219
|
+
factor: number;
|
|
220
|
+
xOffset: number;
|
|
221
|
+
yOffset: number;
|
|
222
|
+
}
|
|
223
|
+
interface LinearDecreasing {
|
|
224
|
+
ceil: number;
|
|
225
|
+
floor: number;
|
|
226
|
+
length: number;
|
|
227
|
+
}
|
|
228
|
+
interface MinApproval {
|
|
229
|
+
reciprocal?: Reciprocal;
|
|
230
|
+
linearDecreasing?: LinearDecreasing;
|
|
231
|
+
}
|
|
232
|
+
export interface TrackInfo {
|
|
233
|
+
decisionPeriod: number;
|
|
234
|
+
confirmPeriod: number;
|
|
235
|
+
name: string;
|
|
236
|
+
minApproval?: MinApproval;
|
|
237
|
+
id: string;
|
|
238
|
+
}
|
|
239
|
+
interface OnchainInfo {
|
|
240
|
+
decisionDeposit: {
|
|
241
|
+
amount: string;
|
|
242
|
+
who: string;
|
|
243
|
+
};
|
|
244
|
+
submissionDeposit: {
|
|
245
|
+
amount: string;
|
|
246
|
+
who: string;
|
|
247
|
+
};
|
|
248
|
+
enactment: {
|
|
249
|
+
after?: string;
|
|
250
|
+
at?: string;
|
|
251
|
+
};
|
|
252
|
+
deciding?: {
|
|
253
|
+
since: number;
|
|
254
|
+
};
|
|
255
|
+
state?: {
|
|
256
|
+
indexer?: {
|
|
257
|
+
blockHeight?: number;
|
|
258
|
+
};
|
|
259
|
+
};
|
|
260
|
+
alarm: number[];
|
|
261
|
+
submitted: number;
|
|
262
|
+
democracy?: DemocracyOnChainInfo;
|
|
263
|
+
}
|
|
264
|
+
interface Indexer {
|
|
265
|
+
blockHeight: number;
|
|
266
|
+
blockHash: string;
|
|
267
|
+
index: number;
|
|
268
|
+
blockTime: number;
|
|
269
|
+
}
|
|
270
|
+
export interface OnchainState {
|
|
271
|
+
indexer: Indexer;
|
|
272
|
+
name: GovStatusKey;
|
|
273
|
+
threshold?: string;
|
|
274
|
+
}
|
|
275
|
+
export interface OnchainData {
|
|
276
|
+
proposalHash: string;
|
|
277
|
+
timeline: RefTimelineItem[];
|
|
278
|
+
tally: Tally;
|
|
279
|
+
proposal: Proposal;
|
|
280
|
+
info: OnchainInfo;
|
|
281
|
+
state?: OnchainState;
|
|
282
|
+
meta?: DemocracyMetadata;
|
|
283
|
+
status?: DemocracyMetadata;
|
|
284
|
+
treasuryInfo?: {
|
|
285
|
+
amount: string;
|
|
286
|
+
beneficiary: string;
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
export interface ReferendaResponse {
|
|
290
|
+
items: Referendum[];
|
|
291
|
+
total: number;
|
|
292
|
+
page: number;
|
|
293
|
+
pageSize: number;
|
|
294
|
+
}
|
|
295
|
+
export interface DemocracyReferendaResponse {
|
|
296
|
+
items: DemocracyReferendum[];
|
|
297
|
+
total: number;
|
|
298
|
+
page: number;
|
|
299
|
+
pageSize: number;
|
|
300
|
+
}
|
|
301
|
+
export interface ReferendaQueryParams {
|
|
302
|
+
page?: number;
|
|
303
|
+
page_size?: number;
|
|
304
|
+
is_treasury?: boolean;
|
|
305
|
+
ongoing?: boolean;
|
|
306
|
+
status?: string;
|
|
307
|
+
simple?: boolean;
|
|
308
|
+
}
|
|
309
|
+
export interface ReferendaQueryParamsWithTrack {
|
|
310
|
+
page?: number;
|
|
311
|
+
page_size?: number;
|
|
312
|
+
ongoing?: boolean;
|
|
313
|
+
status?: string;
|
|
314
|
+
simple?: boolean;
|
|
315
|
+
}
|
|
316
|
+
export interface UserVotesParams {
|
|
317
|
+
page?: number;
|
|
318
|
+
page_size?: number;
|
|
319
|
+
includes_title?: number;
|
|
320
|
+
}
|
|
321
|
+
export interface ReferendumVoteDetail {
|
|
322
|
+
referendumIndex: number;
|
|
323
|
+
account: string;
|
|
324
|
+
target?: string;
|
|
325
|
+
isDelegating: boolean;
|
|
326
|
+
isStandard: boolean;
|
|
327
|
+
isSplit: boolean;
|
|
328
|
+
isSplitAbstain: boolean;
|
|
329
|
+
balance?: string;
|
|
330
|
+
aye?: boolean;
|
|
331
|
+
conviction: number;
|
|
332
|
+
votes?: string;
|
|
333
|
+
abstainBalance?: string;
|
|
334
|
+
abstainVotes?: string;
|
|
335
|
+
ayeBalance?: string;
|
|
336
|
+
ayeVotes?: string;
|
|
337
|
+
nayBalance?: string;
|
|
338
|
+
nayVotes?: string;
|
|
339
|
+
delegations?: {
|
|
340
|
+
votes: string;
|
|
341
|
+
capital: string;
|
|
342
|
+
};
|
|
343
|
+
queryAt: number;
|
|
344
|
+
}
|
|
345
|
+
export declare enum GovStatusKey {
|
|
346
|
+
ALL = "All",
|
|
347
|
+
PREPARING = "Preparing",
|
|
348
|
+
DECIDING = "Deciding",
|
|
349
|
+
CONFIRMING = "Confirming",
|
|
350
|
+
QUEUEING = "Queueing",
|
|
351
|
+
APPROVED = "Approved",
|
|
352
|
+
EXECUTED = "Executed",
|
|
353
|
+
REJECTED = "Rejected",
|
|
354
|
+
TIMEDOUT = "TimedOut",
|
|
355
|
+
CANCELLED = "Cancelled",
|
|
356
|
+
KILLED = "Killed",
|
|
357
|
+
STARTED = "Started",
|
|
358
|
+
PASSED = "Passed",
|
|
359
|
+
NOTPASSED = "NotPassed"
|
|
360
|
+
}
|
|
361
|
+
export declare const GOV_PREPARING_STATES: GovStatusKey[];
|
|
362
|
+
export declare const GOV_ONGOING_STATES: GovStatusKey[];
|
|
363
|
+
export declare const GOV_COMPLETED_STATES: GovStatusKey[];
|
|
364
|
+
export declare const GOV_COMPLETED_SUCCESS_STATES: GovStatusKey[];
|
|
365
|
+
export declare const GOV_COMPLETED_FAILED_STATES: GovStatusKey[];
|
|
366
|
+
export declare type ReadableStreamReadResult<T> = {
|
|
367
|
+
done: false;
|
|
368
|
+
value: T;
|
|
369
|
+
} | {
|
|
370
|
+
done: true;
|
|
371
|
+
value?: undefined;
|
|
372
|
+
};
|
|
373
|
+
export interface MigrationBlockOffset {
|
|
374
|
+
offset: number | null;
|
|
375
|
+
relayHeight: number | null;
|
|
376
|
+
scanHeight: number | null;
|
|
377
|
+
}
|
|
378
|
+
export {};
|
package/interface.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Copyright 2019-2022 @subwallet/subsquare-api-sdk authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
/* ReferendumVote */
|
|
5
|
+
|
|
6
|
+
/* ReferendumVote */
|
|
7
|
+
|
|
8
|
+
/* Gov Status */
|
|
9
|
+
|
|
10
|
+
export let GovStatusKey;
|
|
11
|
+
(function (GovStatusKey) {
|
|
12
|
+
GovStatusKey["ALL"] = "All";
|
|
13
|
+
GovStatusKey["PREPARING"] = "Preparing";
|
|
14
|
+
GovStatusKey["DECIDING"] = "Deciding";
|
|
15
|
+
GovStatusKey["CONFIRMING"] = "Confirming";
|
|
16
|
+
GovStatusKey["QUEUEING"] = "Queueing";
|
|
17
|
+
GovStatusKey["APPROVED"] = "Approved";
|
|
18
|
+
GovStatusKey["EXECUTED"] = "Executed";
|
|
19
|
+
GovStatusKey["REJECTED"] = "Rejected";
|
|
20
|
+
GovStatusKey["TIMEDOUT"] = "TimedOut";
|
|
21
|
+
GovStatusKey["CANCELLED"] = "Cancelled";
|
|
22
|
+
GovStatusKey["KILLED"] = "Killed";
|
|
23
|
+
GovStatusKey["STARTED"] = "Started";
|
|
24
|
+
GovStatusKey["PASSED"] = "Passed";
|
|
25
|
+
GovStatusKey["NOTPASSED"] = "NotPassed";
|
|
26
|
+
})(GovStatusKey || (GovStatusKey = {}));
|
|
27
|
+
export const GOV_PREPARING_STATES = [GovStatusKey.PREPARING, GovStatusKey.QUEUEING];
|
|
28
|
+
export const GOV_ONGOING_STATES = [GovStatusKey.PREPARING, GovStatusKey.DECIDING, GovStatusKey.CONFIRMING, GovStatusKey.QUEUEING, GovStatusKey.STARTED];
|
|
29
|
+
export const GOV_COMPLETED_STATES = [GovStatusKey.APPROVED, GovStatusKey.EXECUTED, GovStatusKey.REJECTED, GovStatusKey.TIMEDOUT, GovStatusKey.CANCELLED, GovStatusKey.KILLED, GovStatusKey.PASSED, GovStatusKey.NOTPASSED];
|
|
30
|
+
export const GOV_COMPLETED_SUCCESS_STATES = [GovStatusKey.APPROVED, GovStatusKey.EXECUTED, GovStatusKey.PASSED];
|
|
31
|
+
export const GOV_COMPLETED_FAILED_STATES = [GovStatusKey.REJECTED, GovStatusKey.TIMEDOUT, GovStatusKey.CANCELLED, GovStatusKey.KILLED, GovStatusKey.NOTPASSED];
|
|
32
|
+
|
|
33
|
+
/* Gov Status */
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"bugs": "https://github.com/Koniverse/Subwallet-V2/issues",
|
|
3
|
+
"description": "Subsquare API SDK for Subwallet",
|
|
4
|
+
"homepage": "https://github.com/Koniverse/Subwallet-V2/tree/master/packages/subsquare-api-sdk#readme",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"name": "@subwallet/subsquare-api-sdk",
|
|
7
|
+
"repository": {
|
|
8
|
+
"directory": "packages/subsquare-api-sdk",
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/Koniverse/Subwallet-V2.git"
|
|
11
|
+
},
|
|
12
|
+
"sideEffects": [
|
|
13
|
+
"./detectPackage.js",
|
|
14
|
+
"./cjs/detectPackage.js"
|
|
15
|
+
],
|
|
16
|
+
"version": "1.3.70-2",
|
|
17
|
+
"type": "module",
|
|
18
|
+
"main": "./cjs/build/index.js",
|
|
19
|
+
"module": "./build/index.js",
|
|
20
|
+
"types": "./build/index.d.ts",
|
|
21
|
+
"exports": {
|
|
22
|
+
"./cjs/package.json": "./cjs/package.json",
|
|
23
|
+
"./cjs/*": "./cjs/*.js",
|
|
24
|
+
".": {
|
|
25
|
+
"types": "./index.d.ts",
|
|
26
|
+
"require": "./cjs/index.js",
|
|
27
|
+
"default": "./index.js"
|
|
28
|
+
},
|
|
29
|
+
"./bundle": {
|
|
30
|
+
"types": "./bundle.d.ts",
|
|
31
|
+
"require": "./cjs/bundle.js",
|
|
32
|
+
"default": "./bundle.js"
|
|
33
|
+
},
|
|
34
|
+
"./detectOther": {
|
|
35
|
+
"types": "./detectOther.d.ts",
|
|
36
|
+
"require": "./cjs/detectOther.js",
|
|
37
|
+
"default": "./detectOther.js"
|
|
38
|
+
},
|
|
39
|
+
"./detectPackage": {
|
|
40
|
+
"types": "./detectPackage.d.ts",
|
|
41
|
+
"require": "./cjs/detectPackage.js",
|
|
42
|
+
"default": "./detectPackage.js"
|
|
43
|
+
},
|
|
44
|
+
"./interface": {
|
|
45
|
+
"types": "./interface.d.ts",
|
|
46
|
+
"require": "./cjs/interface.js",
|
|
47
|
+
"default": "./interface.js"
|
|
48
|
+
},
|
|
49
|
+
"./package.json": "./package.json",
|
|
50
|
+
"./packageInfo.js": {
|
|
51
|
+
"types": "./packageInfo.d.ts",
|
|
52
|
+
"require": "./cjs/packageInfo.js",
|
|
53
|
+
"default": "./packageInfo.js"
|
|
54
|
+
},
|
|
55
|
+
"./packageInfo": {
|
|
56
|
+
"types": "./packageInfo.d.ts",
|
|
57
|
+
"require": "./cjs/packageInfo.js",
|
|
58
|
+
"default": "./packageInfo.js"
|
|
59
|
+
},
|
|
60
|
+
"./subsquare-sdk": {
|
|
61
|
+
"types": "./subsquare-sdk.d.ts",
|
|
62
|
+
"require": "./cjs/subsquare-sdk.js",
|
|
63
|
+
"default": "./subsquare-sdk.js"
|
|
64
|
+
},
|
|
65
|
+
"./url": {
|
|
66
|
+
"types": "./url.d.ts",
|
|
67
|
+
"require": "./cjs/url.js",
|
|
68
|
+
"default": "./url.js"
|
|
69
|
+
},
|
|
70
|
+
"./utils": {
|
|
71
|
+
"types": "./utils.d.ts",
|
|
72
|
+
"require": "./cjs/utils.js",
|
|
73
|
+
"default": "./utils.js"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
"dependencies": {
|
|
77
|
+
"@polkadot/util": "^13.4.3",
|
|
78
|
+
"axios": "^1.11.0"
|
|
79
|
+
}
|
|
80
|
+
}
|
package/packageInfo.d.ts
ADDED
package/packageInfo.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Copyright 2017-2022 @subwallet/subsquare-api-sdk authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
// Do not edit, auto-generated by @polkadot/dev
|
|
5
|
+
|
|
6
|
+
export const packageInfo = {
|
|
7
|
+
name: '@subwallet/subsquare-api-sdk',
|
|
8
|
+
path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
|
|
9
|
+
type: 'esm',
|
|
10
|
+
version: '1.3.70-2'
|
|
11
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { MigrationBlockOffset, ReferendaQueryParams, ReferendaQueryParamsWithTrack, ReferendaResponse, Referendum, ReferendumDetail, ReferendumVoteDetail, TrackInfo, UserVotesParams } from './interface';
|
|
2
|
+
export declare class SubsquareApiSdk {
|
|
3
|
+
private client;
|
|
4
|
+
private static instances;
|
|
5
|
+
isLegacyGov: boolean;
|
|
6
|
+
private chain;
|
|
7
|
+
private constructor();
|
|
8
|
+
static getInstance(chain: string): SubsquareApiSdk;
|
|
9
|
+
getMigrationBlockOffset(blockTime: number): Promise<MigrationBlockOffset>;
|
|
10
|
+
getReferenda(params?: ReferendaQueryParams): Promise<ReferendaResponse>;
|
|
11
|
+
getReferendaDetails(id: string): Promise<ReferendumDetail>;
|
|
12
|
+
getTracks(): Promise<TrackInfo[]>;
|
|
13
|
+
getReferendaWithTrack(trackId: number, params?: ReferendaQueryParamsWithTrack): Promise<ReferendaResponse>;
|
|
14
|
+
getReferendaVotes(id: string): Promise<ReferendumVoteDetail[]>;
|
|
15
|
+
getUserVotes(address: string, params: UserVotesParams): Promise<ReferendumVoteDetail[]>;
|
|
16
|
+
findReferendumByValue(text: string): Promise<{
|
|
17
|
+
govReferenda: Referendum[];
|
|
18
|
+
}>;
|
|
19
|
+
}
|
package/subsquare-sdk.js
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
// Copyright 2019-2022 @subwallet/subsquare-api-sdk authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import axios from 'axios';
|
|
5
|
+
import { gov1ReferendumsApi, gov2ReferendumsApi, gov2TracksApi } from "./url.js";
|
|
6
|
+
import { ALL_TRACK, castDemocracyReferendumToReferendum, reformatTrackName } from "./utils.js";
|
|
7
|
+
const specialBaseUrls = {
|
|
8
|
+
vara: 'https://vara.subsquare.io/api',
|
|
9
|
+
acala: 'https://acala.subsquare.io/api',
|
|
10
|
+
centrifuge: 'https://centrifuge.subsquare.io/api',
|
|
11
|
+
laos: 'https://laos.subsquare.io/api/',
|
|
12
|
+
interlay: 'https://interlay.subsquare.io/api',
|
|
13
|
+
karura: 'https://karura.subsquare.io/api',
|
|
14
|
+
kintsugi: 'https://kintsugi.subsquare.io/api'
|
|
15
|
+
};
|
|
16
|
+
const LegacyGovChains = ['ajuna', 'astar', 'phala', 'heima', 'acala', 'centrifuge', 'interlay', 'laos', 'karura', 'kintsugi'];
|
|
17
|
+
export class SubsquareApiSdk {
|
|
18
|
+
static instances = new Map();
|
|
19
|
+
isLegacyGov = false;
|
|
20
|
+
constructor(chain) {
|
|
21
|
+
const baseURL = specialBaseUrls[chain] || `https://${chain}-api.subsquare.io`;
|
|
22
|
+
this.isLegacyGov = LegacyGovChains.includes(chain);
|
|
23
|
+
this.client = axios.create({
|
|
24
|
+
baseURL
|
|
25
|
+
});
|
|
26
|
+
this.chain = chain;
|
|
27
|
+
}
|
|
28
|
+
static getInstance(chain) {
|
|
29
|
+
if (!this.instances.has(chain)) {
|
|
30
|
+
this.instances.set(chain, new SubsquareApiSdk(chain));
|
|
31
|
+
}
|
|
32
|
+
return this.instances.get(chain);
|
|
33
|
+
}
|
|
34
|
+
async getMigrationBlockOffset(blockTime) {
|
|
35
|
+
try {
|
|
36
|
+
const urls = [`/stream/relay-chain-height?interval=${blockTime * 1000}`, `/stream/scan-height?interval=${blockTime * 1000}`];
|
|
37
|
+
const results = await Promise.allSettled(urls.map(async url => {
|
|
38
|
+
const res = await fetch(new URL(url, this.client.defaults.baseURL));
|
|
39
|
+
if (!res.body) {
|
|
40
|
+
throw new Error('Response body is null');
|
|
41
|
+
}
|
|
42
|
+
const reader = res.body.getReader();
|
|
43
|
+
const decoder = new TextDecoder();
|
|
44
|
+
|
|
45
|
+
// @ts-ignore
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
47
|
+
const readResult = await reader.read();
|
|
48
|
+
const {
|
|
49
|
+
done,
|
|
50
|
+
value
|
|
51
|
+
} = readResult;
|
|
52
|
+
if (done || !value) {
|
|
53
|
+
throw new Error('No data from stream');
|
|
54
|
+
}
|
|
55
|
+
const text = decoder.decode(value);
|
|
56
|
+
const data = JSON.parse(text);
|
|
57
|
+
return data.value;
|
|
58
|
+
}));
|
|
59
|
+
const [relayResult, scanResult] = results;
|
|
60
|
+
const relayHeight = relayResult.status === 'fulfilled' ? relayResult.value : null;
|
|
61
|
+
const scanHeight = scanResult.status === 'fulfilled' ? scanResult.value : null;
|
|
62
|
+
let offset;
|
|
63
|
+
if (relayHeight !== null && scanHeight !== null) {
|
|
64
|
+
offset = relayHeight - scanHeight > 0 ? relayHeight - scanHeight : 0;
|
|
65
|
+
} else {
|
|
66
|
+
offset = scanHeight !== null && scanHeight !== void 0 ? scanHeight : 0;
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
offset,
|
|
70
|
+
relayHeight,
|
|
71
|
+
scanHeight
|
|
72
|
+
};
|
|
73
|
+
} catch (err) {
|
|
74
|
+
console.error(`Failed to get migration block offset for ${this.chain}:`, err);
|
|
75
|
+
return {
|
|
76
|
+
offset: null,
|
|
77
|
+
relayHeight: null,
|
|
78
|
+
scanHeight: null
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async getReferenda(params) {
|
|
83
|
+
const api = this.isLegacyGov ? gov1ReferendumsApi : gov2ReferendumsApi;
|
|
84
|
+
const referendaRes = await this.client.get(api, {
|
|
85
|
+
params
|
|
86
|
+
});
|
|
87
|
+
const data = referendaRes.data;
|
|
88
|
+
if (this.isLegacyGov) {
|
|
89
|
+
return {
|
|
90
|
+
...data,
|
|
91
|
+
items: data.items.map(castDemocracyReferendumToReferendum)
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
...data,
|
|
96
|
+
items: data.items.map(ref => {
|
|
97
|
+
var _ref$trackInfo;
|
|
98
|
+
return {
|
|
99
|
+
...ref,
|
|
100
|
+
version: 2,
|
|
101
|
+
trackInfo: {
|
|
102
|
+
...ref.trackInfo,
|
|
103
|
+
name: reformatTrackName(((_ref$trackInfo = ref.trackInfo) === null || _ref$trackInfo === void 0 ? void 0 : _ref$trackInfo.name) || '')
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
})
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
async getReferendaDetails(id) {
|
|
110
|
+
const api = this.isLegacyGov ? gov1ReferendumsApi : gov2ReferendumsApi;
|
|
111
|
+
const referendaRes = await this.client.get(`${api}/${id}`);
|
|
112
|
+
let ref = referendaRes.data;
|
|
113
|
+
if (this.isLegacyGov) {
|
|
114
|
+
return castDemocracyReferendumToReferendum(ref);
|
|
115
|
+
}
|
|
116
|
+
ref = ref;
|
|
117
|
+
return {
|
|
118
|
+
...ref,
|
|
119
|
+
version: 2,
|
|
120
|
+
trackInfo: {
|
|
121
|
+
...ref.trackInfo,
|
|
122
|
+
name: reformatTrackName(ref.trackInfo.name)
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
async getTracks() {
|
|
127
|
+
const tracksRes = await this.client.get(gov2TracksApi);
|
|
128
|
+
const formattedTracks = tracksRes.data.map(track => ({
|
|
129
|
+
...track,
|
|
130
|
+
name: reformatTrackName(track.name)
|
|
131
|
+
}));
|
|
132
|
+
return [ALL_TRACK, ...formattedTracks];
|
|
133
|
+
}
|
|
134
|
+
async getReferendaWithTrack(trackId, params) {
|
|
135
|
+
const referendaRes = await this.client.get(gov2TracksApi + `/${trackId}/referendums`, {
|
|
136
|
+
params
|
|
137
|
+
});
|
|
138
|
+
return {
|
|
139
|
+
...referendaRes.data,
|
|
140
|
+
items: referendaRes.data.items.map(ref => {
|
|
141
|
+
if (ref.version === 1) {
|
|
142
|
+
return {
|
|
143
|
+
...ref
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
...ref,
|
|
148
|
+
trackInfo: {
|
|
149
|
+
...ref.trackInfo,
|
|
150
|
+
name: reformatTrackName(ref.trackInfo.name)
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
})
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
async getReferendaVotes(id) {
|
|
157
|
+
const api = this.isLegacyGov ? gov1ReferendumsApi : gov2ReferendumsApi;
|
|
158
|
+
const referendaVoteRes = await this.client.get(api + `/${id}/votes`);
|
|
159
|
+
return referendaVoteRes.data;
|
|
160
|
+
}
|
|
161
|
+
async getUserVotes(address, params) {
|
|
162
|
+
const userVoteRes = await this.client.get(`/users/${address}/votes`, {
|
|
163
|
+
params
|
|
164
|
+
});
|
|
165
|
+
return userVoteRes.data;
|
|
166
|
+
}
|
|
167
|
+
async findReferendumByValue(text) {
|
|
168
|
+
var _referendaRes$data, _referendaRes$data$de;
|
|
169
|
+
const referendaRes = await this.client.get('/search', {
|
|
170
|
+
params: {
|
|
171
|
+
text
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
if ((_referendaRes$data = referendaRes.data) !== null && _referendaRes$data !== void 0 && (_referendaRes$data$de = _referendaRes$data.democracyReferenda) !== null && _referendaRes$data$de !== void 0 && _referendaRes$data$de.length && this.isLegacyGov) {
|
|
175
|
+
const democracyReferenda = referendaRes.data.democracyReferenda.map(castDemocracyReferendumToReferendum);
|
|
176
|
+
return {
|
|
177
|
+
govReferenda: [...democracyReferenda]
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
govReferenda: referendaRes.data.openGovReferenda
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
package/url.d.ts
ADDED
package/url.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Copyright 2019-2022 @subwallet/subsquare-api-sdk authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
export const gov2TracksApi = '/gov2/tracks';
|
|
5
|
+
export const gov2ReferendumsApi = '/gov2/referendums';
|
|
6
|
+
export const gov1ReferendumsApi = '/democracy/referendums';
|
package/utils.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { DemocracyReferendum, Referendum, ReferendumDetail, TrackInfo } from './interface';
|
|
2
|
+
export declare const ALL_TRACK_ID = "All";
|
|
3
|
+
export declare const ALL_TRACK: TrackInfo;
|
|
4
|
+
export declare function reformatTrackName(input: string): string;
|
|
5
|
+
export declare const castDemocracyReferendumToReferendum: <T extends Referendum | ReferendumDetail>(ref: DemocracyReferendum) => T;
|
package/utils.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// Copyright 2019-2022 @subwallet/subsquare-api-sdk authors & contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
export const ALL_TRACK_ID = 'All';
|
|
5
|
+
export const ALL_TRACK = {
|
|
6
|
+
id: ALL_TRACK_ID,
|
|
7
|
+
name: 'All tracks',
|
|
8
|
+
decisionPeriod: 0,
|
|
9
|
+
confirmPeriod: 0
|
|
10
|
+
};
|
|
11
|
+
export function reformatTrackName(input) {
|
|
12
|
+
if (!input) {
|
|
13
|
+
return '';
|
|
14
|
+
}
|
|
15
|
+
let str = input.replace(/[_-]/g, ' ');
|
|
16
|
+
str = str.replace(/([a-z])([A-Z])/g, '$1 $2');
|
|
17
|
+
return str.split(' ').filter(Boolean).map(word => word[0].toUpperCase() + word.slice(1).toLowerCase()).join(' ');
|
|
18
|
+
}
|
|
19
|
+
export const castDemocracyReferendumToReferendum = ref => {
|
|
20
|
+
const {
|
|
21
|
+
call,
|
|
22
|
+
hash,
|
|
23
|
+
info,
|
|
24
|
+
meta,
|
|
25
|
+
state
|
|
26
|
+
} = ref.onchainData;
|
|
27
|
+
const enactmentAfter = ((meta === null || meta === void 0 ? void 0 : meta.delay) || 0) + ((meta === null || meta === void 0 ? void 0 : meta.end) || 0);
|
|
28
|
+
const enactment = {
|
|
29
|
+
after: enactmentAfter.toString()
|
|
30
|
+
};
|
|
31
|
+
const proposal = ref.onchainData.preImage ? ref.onchainData.preImage : {
|
|
32
|
+
call
|
|
33
|
+
};
|
|
34
|
+
const onChainData = {
|
|
35
|
+
...ref.onchainData,
|
|
36
|
+
proposalHash: hash,
|
|
37
|
+
proposal,
|
|
38
|
+
meta,
|
|
39
|
+
info: {
|
|
40
|
+
decisionDeposit: {
|
|
41
|
+
who: '',
|
|
42
|
+
amount: '0'
|
|
43
|
+
},
|
|
44
|
+
submissionDeposit: {
|
|
45
|
+
who: '',
|
|
46
|
+
amount: '0'
|
|
47
|
+
},
|
|
48
|
+
enactment,
|
|
49
|
+
alarm: [],
|
|
50
|
+
submitted: 0,
|
|
51
|
+
democracy: info
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
return {
|
|
55
|
+
...ref,
|
|
56
|
+
version: 1,
|
|
57
|
+
trackInfo: {
|
|
58
|
+
id: '-1',
|
|
59
|
+
name: 'Democracy',
|
|
60
|
+
decisionPeriod: 0,
|
|
61
|
+
confirmPeriod: 0
|
|
62
|
+
},
|
|
63
|
+
decisionDeposit: {
|
|
64
|
+
who: ''
|
|
65
|
+
},
|
|
66
|
+
enactment,
|
|
67
|
+
proposalHash: hash,
|
|
68
|
+
proposalCall: proposal.call,
|
|
69
|
+
state: {
|
|
70
|
+
...state,
|
|
71
|
+
name: ref.state
|
|
72
|
+
},
|
|
73
|
+
onchainData: onChainData
|
|
74
|
+
};
|
|
75
|
+
};
|