@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 ADDED
@@ -0,0 +1 @@
1
+ # subsquare-api-sdk
package/bundle.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import { SubsquareApiSdk } from './subsquare-sdk';
2
+ export { packageInfo } from './packageInfo';
3
+ export declare const getSubsquareApi: (chain: string) => SubsquareApiSdk;
4
+ export { SubsquareApiSdk } from './subsquare-sdk';
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;
@@ -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;
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
@@ -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;
@@ -0,0 +1,2 @@
1
+ declare const _default: never[];
2
+ export default _default;
package/detectOther.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
+ // Empty template, auto-generated by @polkadot/dev
5
+
6
+ export default [];
@@ -0,0 +1 @@
1
+ export {};
@@ -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
@@ -0,0 +1,6 @@
1
+ import './detectPackage';
2
+ import { getSubsquareApi } from './bundle';
3
+ export * from './bundle';
4
+ export default getSubsquareApi;
5
+ export * from './interface';
6
+ export { ALL_TRACK_ID } from './utils';
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
+ }
@@ -0,0 +1,6 @@
1
+ export declare const packageInfo: {
2
+ name: string;
3
+ path: string;
4
+ type: string;
5
+ version: string;
6
+ };
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
+ }
@@ -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
@@ -0,0 +1,3 @@
1
+ export declare const gov2TracksApi = "/gov2/tracks";
2
+ export declare const gov2ReferendumsApi = "/gov2/referendums";
3
+ export declare const gov1ReferendumsApi = "/democracy/referendums";
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
+ };