@0xobelisk/sui-client 1.0.8 → 1.0.10

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.
@@ -3,40 +3,34 @@ export interface OrderDirection {
3
3
  ASC: 'ASC';
4
4
  DESC: 'DESC';
5
5
  }
6
- export interface OrderBy {
7
- field: string;
8
- direction: OrderDirection['ASC'] | OrderDirection['DESC'];
9
- }
10
6
  export interface PageInfo {
11
7
  hasNextPage: boolean;
12
- hasPreviousPage: boolean;
13
- startCursor?: string;
14
8
  endCursor?: string;
15
9
  }
16
- export interface Transaction {
10
+ export interface IndexerTransaction {
17
11
  id: number;
18
12
  checkpoint: number;
19
13
  digest: string;
20
14
  created_at: string;
21
15
  }
22
- export interface Schema {
16
+ export interface IndexerSchema {
23
17
  id: number;
24
18
  name: string;
25
19
  key1?: string;
26
20
  key2?: string;
27
- value: string;
21
+ value: any;
28
22
  last_update_checkpoint: string;
29
23
  last_update_digest: string;
30
24
  is_removed: boolean;
31
25
  created_at: string;
32
26
  updated_at: string;
33
27
  }
34
- export interface Event {
28
+ export interface IndexerEvent {
35
29
  id: number;
36
30
  checkpoint: string;
37
31
  digest: string;
38
32
  name: string;
39
- value: string;
33
+ value: any;
40
34
  created_at: string;
41
35
  }
42
36
  export interface ConnectionResponse<T> {
@@ -45,6 +39,17 @@ export interface ConnectionResponse<T> {
45
39
  node: T;
46
40
  }>;
47
41
  pageInfo: PageInfo;
42
+ totalCount: number;
43
+ }
44
+ export interface StorageResponse<T> {
45
+ data: T[];
46
+ value: any[];
47
+ pageInfo: PageInfo;
48
+ totalCount: number;
49
+ }
50
+ export interface StorageItemResponse<T> {
51
+ data: T;
52
+ value: any;
48
53
  }
49
54
  export declare class SuiIndexerClient {
50
55
  private http;
@@ -53,43 +58,36 @@ export declare class SuiIndexerClient {
53
58
  getTransactions(params?: {
54
59
  first?: number;
55
60
  after?: string;
56
- last?: number;
57
- before?: string;
58
61
  checkpoint?: number;
59
- orderBy?: OrderBy;
60
- distinct?: boolean;
61
- }): Promise<ConnectionResponse<Transaction>>;
62
+ orderBy?: string[];
63
+ }): Promise<ConnectionResponse<IndexerTransaction>>;
62
64
  getSchemas(params?: {
63
65
  first?: number;
64
66
  after?: string;
65
- last?: number;
66
- before?: string;
67
67
  name?: string;
68
68
  key1?: string;
69
69
  key2?: string;
70
- orderBy?: OrderBy;
71
- distinct?: boolean;
72
- }): Promise<ConnectionResponse<Schema>>;
70
+ orderBy?: string[];
71
+ }): Promise<ConnectionResponse<IndexerSchema>>;
73
72
  getEvents(params?: {
74
73
  first?: number;
75
74
  after?: string;
76
- last?: number;
77
- before?: string;
78
75
  name?: string;
79
76
  checkpoint?: string;
80
- orderBy?: OrderBy;
81
- distinct?: boolean;
82
- }): Promise<ConnectionResponse<Event>>;
83
- getStorage({ name, key1, key2, first, after, last, before, orderBy, distinct, }: {
84
- name: string;
77
+ orderBy?: string[];
78
+ }): Promise<ConnectionResponse<IndexerEvent>>;
79
+ getStorage({ name, key1, key2, first, after, orderBy, }: {
80
+ name?: string;
85
81
  key1?: string;
86
82
  key2?: string;
87
83
  first?: number;
88
84
  after?: string;
89
- last?: number;
90
- before?: string;
91
- orderBy?: OrderBy;
92
- distinct?: boolean;
93
- }): Promise<ConnectionResponse<Schema>>;
85
+ orderBy?: string[];
86
+ }): Promise<StorageResponse<IndexerSchema>>;
87
+ getStorageItem({ name, key1, key2, }: {
88
+ name: string;
89
+ key1?: string;
90
+ key2?: string;
91
+ }): Promise<StorageItemResponse<IndexerSchema> | undefined>;
94
92
  subscribe(names: string[], handleData: (data: any) => void): Promise<WebSocket>;
95
93
  }
@@ -0,0 +1,2 @@
1
+ export declare const parseData: (data: unknown) => unknown;
2
+ export declare const parseValue: (value: unknown) => unknown;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xobelisk/sui-client",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "description": "Tookit for interacting with move eps framework",
5
5
  "keywords": [
6
6
  "sui",
package/src/dubhe.ts CHANGED
@@ -50,9 +50,12 @@ import { bcs, fromHEX, toHEX } from '@mysten/bcs';
50
50
  import { ContractDataParsingError } from './errors';
51
51
  import {
52
52
  ConnectionResponse,
53
- OrderBy,
54
- Schema,
53
+ IndexerTransaction,
54
+ IndexerEvent,
55
+ IndexerSchema,
55
56
  SuiIndexerClient,
57
+ StorageResponse,
58
+ StorageItemResponse,
56
59
  } from './libs/suiIndexerClient';
57
60
  import { Http } from './libs/http';
58
61
 
@@ -1109,40 +1112,101 @@ export class Dubhe {
1109
1112
  });
1110
1113
  }
1111
1114
 
1115
+ async getTransactions({
1116
+ first,
1117
+ after,
1118
+ orderBy,
1119
+ }: {
1120
+ first?: number;
1121
+ after?: string;
1122
+ orderBy?: string[];
1123
+ }): Promise<ConnectionResponse<IndexerTransaction>> {
1124
+ return await this.suiIndexerClient.getTransactions({
1125
+ first,
1126
+ after,
1127
+ orderBy,
1128
+ });
1129
+ }
1130
+
1131
+ async getEvents({
1132
+ first,
1133
+ after,
1134
+ orderBy,
1135
+ }: {
1136
+ first?: number;
1137
+ after?: string;
1138
+ orderBy?: string[];
1139
+ }): Promise<ConnectionResponse<IndexerEvent>> {
1140
+ return await this.suiIndexerClient.getEvents({ first, after, orderBy });
1141
+ }
1142
+
1143
+ async getSchemas({
1144
+ name,
1145
+ key1,
1146
+ key2,
1147
+ first,
1148
+ after,
1149
+ orderBy,
1150
+ }: {
1151
+ name?: string;
1152
+ key1?: string;
1153
+ key2?: string;
1154
+ first?: number;
1155
+ after?: string;
1156
+ orderBy?: string[];
1157
+ }): Promise<ConnectionResponse<IndexerSchema>> {
1158
+ return await this.suiIndexerClient.getSchemas({
1159
+ name,
1160
+ key1,
1161
+ key2,
1162
+ first,
1163
+ after,
1164
+ orderBy,
1165
+ });
1166
+ }
1167
+
1112
1168
  async getStorage({
1113
1169
  name,
1114
1170
  key1,
1115
1171
  key2,
1116
1172
  first,
1117
1173
  after,
1118
- last,
1119
- before,
1120
1174
  orderBy,
1121
- distinct,
1122
1175
  }: {
1123
- name: string;
1176
+ name?: string;
1124
1177
  key1?: string;
1125
1178
  key2?: string;
1126
1179
  first?: number;
1127
1180
  after?: string;
1128
- last?: number;
1129
- before?: string;
1130
- orderBy?: OrderBy;
1131
- distinct?: boolean;
1132
- }): Promise<ConnectionResponse<Schema>> {
1181
+ orderBy?: string[];
1182
+ }): Promise<StorageResponse<IndexerSchema>> {
1133
1183
  return await this.suiIndexerClient.getStorage({
1134
1184
  name,
1135
1185
  key1,
1136
1186
  key2,
1137
1187
  first,
1138
1188
  after,
1139
- last,
1140
- before,
1141
1189
  orderBy,
1142
- distinct,
1143
1190
  });
1144
1191
  }
1145
1192
 
1193
+ async getStorageItem({
1194
+ name,
1195
+ key1,
1196
+ key2,
1197
+ }: {
1198
+ name: string;
1199
+ key1?: string;
1200
+ key2?: string;
1201
+ }): Promise<StorageItemResponse<IndexerSchema> | undefined> {
1202
+ const response = await this.suiIndexerClient.getStorageItem({
1203
+ name,
1204
+ key1,
1205
+ key2,
1206
+ });
1207
+ return response;
1208
+ }
1209
+
1146
1210
  async subscribe(
1147
1211
  names: string[],
1148
1212
  handleData: (data: any) => void
@@ -1,35 +1,34 @@
1
1
  import { Http } from '../http';
2
+ import { parseValue } from './utils';
2
3
 
3
4
  export interface OrderDirection {
4
5
  ASC: 'ASC';
5
6
  DESC: 'DESC';
6
7
  }
7
8
 
8
- export interface OrderBy {
9
- field: string;
10
- direction: OrderDirection['ASC'] | OrderDirection['DESC'];
11
- }
9
+ // export interface OrderBy {
10
+ // field: string;
11
+ // direction: OrderDirection['ASC'] | OrderDirection['DESC'];
12
+ // }
12
13
 
13
14
  export interface PageInfo {
14
15
  hasNextPage: boolean;
15
- hasPreviousPage: boolean;
16
- startCursor?: string;
17
16
  endCursor?: string;
18
17
  }
19
18
 
20
- export interface Transaction {
19
+ export interface IndexerTransaction {
21
20
  id: number;
22
21
  checkpoint: number;
23
22
  digest: string;
24
23
  created_at: string;
25
24
  }
26
25
 
27
- export interface Schema {
26
+ export interface IndexerSchema {
28
27
  id: number;
29
28
  name: string;
30
29
  key1?: string;
31
30
  key2?: string;
32
- value: string;
31
+ value: any;
33
32
  last_update_checkpoint: string;
34
33
  last_update_digest: string;
35
34
  is_removed: boolean;
@@ -37,12 +36,12 @@ export interface Schema {
37
36
  updated_at: string;
38
37
  }
39
38
 
40
- export interface Event {
39
+ export interface IndexerEvent {
41
40
  id: number;
42
41
  checkpoint: string;
43
42
  digest: string;
44
43
  name: string;
45
- value: string;
44
+ value: any;
46
45
  created_at: string;
47
46
  }
48
47
 
@@ -52,6 +51,19 @@ export interface ConnectionResponse<T> {
52
51
  node: T;
53
52
  }>;
54
53
  pageInfo: PageInfo;
54
+ totalCount: number;
55
+ }
56
+
57
+ export interface StorageResponse<T> {
58
+ data: T[];
59
+ value: any[];
60
+ pageInfo: PageInfo;
61
+ totalCount: number;
62
+ }
63
+
64
+ export interface StorageItemResponse<T> {
65
+ data: T;
66
+ value: any;
55
67
  }
56
68
 
57
69
  export class SuiIndexerClient {
@@ -68,15 +80,12 @@ export class SuiIndexerClient {
68
80
  async getTransactions(params?: {
69
81
  first?: number;
70
82
  after?: string;
71
- last?: number;
72
- before?: string;
73
83
  checkpoint?: number;
74
- orderBy?: OrderBy;
75
- distinct?: boolean;
84
+ orderBy?: string[];
76
85
  }) {
77
86
  const query = `
78
- query GetTransactions($first: Int, $after: String, $last: Int, $before: String, $checkpoint: Int, $orderBy: TransactionOrderBy, $distinct: Boolean) {
79
- transactions(first: $first, after: $after, last: $last, before: $before, checkpoint: $checkpoint, orderBy: $orderBy, distinct: $distinct) {
87
+ query GetTransactions($first: Int, $after: String, $checkpoint: Int, $orderBy: [TransactionOrderField!]) {
88
+ transactions(first: $first, after: $after, checkpoint: $checkpoint, orderBy: $orderBy) {
80
89
  edges {
81
90
  cursor
82
91
  node {
@@ -88,16 +97,15 @@ export class SuiIndexerClient {
88
97
  }
89
98
  pageInfo {
90
99
  hasNextPage
91
- hasPreviousPage
92
- startCursor
93
100
  endCursor
94
101
  }
102
+ totalCount
95
103
  }
96
104
  }
97
105
  `;
98
106
 
99
107
  const response = await this.fetchGraphql<{
100
- transactions: ConnectionResponse<Transaction>;
108
+ transactions: ConnectionResponse<IndexerTransaction>;
101
109
  }>(query, params);
102
110
  return response.transactions;
103
111
  }
@@ -105,17 +113,14 @@ export class SuiIndexerClient {
105
113
  async getSchemas(params?: {
106
114
  first?: number;
107
115
  after?: string;
108
- last?: number;
109
- before?: string;
110
116
  name?: string;
111
117
  key1?: string;
112
118
  key2?: string;
113
- orderBy?: OrderBy;
114
- distinct?: boolean;
115
- }): Promise<ConnectionResponse<Schema>> {
119
+ orderBy?: string[];
120
+ }): Promise<ConnectionResponse<IndexerSchema>> {
116
121
  const query = `
117
- query GetSchemas($first: Int, $after: String, $last: Int, $before: String, $name: String, $key1: String, $key2: String, $orderBy: SchemaOrderBy, $distinct: Boolean) {
118
- schemas(first: $first, after: $after, last: $last, before: $before, name: $name, key1: $key1, key2: $key2, orderBy: $orderBy, distinct: $distinct) {
122
+ query GetSchemas($first: Int, $after: String, $name: String, $key1: String, $key2: String, $orderBy: [SchemaOrderField!]) {
123
+ schemas(first: $first, after: $after, name: $name, key1: $key1, key2: $key2, orderBy: $orderBy) {
119
124
  edges {
120
125
  cursor
121
126
  node {
@@ -133,16 +138,15 @@ export class SuiIndexerClient {
133
138
  }
134
139
  pageInfo {
135
140
  hasNextPage
136
- hasPreviousPage
137
- startCursor
138
141
  endCursor
139
142
  }
143
+ totalCount
140
144
  }
141
145
  }
142
146
  `;
143
147
 
144
148
  const response = await this.fetchGraphql<{
145
- schemas: ConnectionResponse<Schema>;
149
+ schemas: ConnectionResponse<IndexerSchema>;
146
150
  }>(query, params);
147
151
  return response.schemas;
148
152
  }
@@ -150,16 +154,13 @@ export class SuiIndexerClient {
150
154
  async getEvents(params?: {
151
155
  first?: number;
152
156
  after?: string;
153
- last?: number;
154
- before?: string;
155
157
  name?: string;
156
158
  checkpoint?: string;
157
- orderBy?: OrderBy;
158
- distinct?: boolean;
159
- }) {
159
+ orderBy?: string[];
160
+ }): Promise<ConnectionResponse<IndexerEvent>> {
160
161
  const query = `
161
- query GetEvents($first: Int, $after: String, $last: Int, $before: String, $name: String, $checkpoint: String, $orderBy: EventOrderBy, $distinct: Boolean) {
162
- events(first: $first, after: $after, last: $last, before: $before, name: $name, checkpoint: $checkpoint, orderBy: $orderBy, distinct: $distinct) {
162
+ query GetEvents($first: Int, $after: String, $name: String, $checkpoint: String, $orderBy: [EventOrderField!]) {
163
+ events(first: $first, after: $after, name: $name, checkpoint: $checkpoint, orderBy: $orderBy) {
163
164
  edges {
164
165
  cursor
165
166
  node {
@@ -173,16 +174,15 @@ export class SuiIndexerClient {
173
174
  }
174
175
  pageInfo {
175
176
  hasNextPage
176
- hasPreviousPage
177
- startCursor
178
177
  endCursor
179
178
  }
179
+ totalCount
180
180
  }
181
181
  }
182
182
  `;
183
183
 
184
184
  const response = await this.fetchGraphql<{
185
- events: ConnectionResponse<Event>;
185
+ events: ConnectionResponse<IndexerEvent>;
186
186
  }>(query, params);
187
187
  return response.events;
188
188
  }
@@ -193,34 +193,57 @@ export class SuiIndexerClient {
193
193
  key2,
194
194
  first,
195
195
  after,
196
- last,
197
- before,
198
196
  orderBy,
199
- distinct,
200
197
  }: {
201
- name: string;
198
+ name?: string;
202
199
  key1?: string;
203
200
  key2?: string;
204
201
  first?: number;
205
202
  after?: string;
206
- last?: number;
207
- before?: string;
208
- orderBy?: OrderBy;
209
- distinct?: boolean;
210
- }): Promise<ConnectionResponse<Schema>> {
203
+ orderBy?: string[];
204
+ }): Promise<StorageResponse<IndexerSchema>> {
211
205
  const schemas = await this.getSchemas({
212
206
  name,
213
207
  key1,
214
208
  key2,
215
209
  first,
216
210
  after,
217
- last,
218
- before,
219
211
  orderBy,
220
- distinct,
221
212
  });
213
+ const data = schemas.edges.map((edge) => edge.node);
214
+ const value = data.map((item) => parseValue(item.value));
215
+ return {
216
+ data,
217
+ value,
218
+ pageInfo: schemas.pageInfo,
219
+ totalCount: schemas.totalCount,
220
+ };
221
+ }
222
222
 
223
- return schemas;
223
+ async getStorageItem({
224
+ name,
225
+ key1,
226
+ key2,
227
+ }: {
228
+ name: string;
229
+ key1?: string;
230
+ key2?: string;
231
+ }): Promise<StorageItemResponse<IndexerSchema> | undefined> {
232
+ const schemas = await this.getSchemas({
233
+ name,
234
+ key1,
235
+ key2,
236
+ first: 1,
237
+ });
238
+ const data = schemas.edges[0]?.node;
239
+ if (!data) {
240
+ return undefined;
241
+ }
242
+ const value = parseValue(data.value);
243
+ return {
244
+ data,
245
+ value,
246
+ };
224
247
  }
225
248
 
226
249
  async subscribe(
@@ -0,0 +1,49 @@
1
+ export const parseData = (data: unknown): unknown => {
2
+ if (typeof data !== 'object' || data === null) {
3
+ return data;
4
+ }
5
+
6
+ if (Array.isArray(data)) {
7
+ return data.map((item) => parseData(item));
8
+ }
9
+
10
+ const parsedData: Record<string, unknown> = {};
11
+ for (const key in data as object) {
12
+ if (Object.prototype.hasOwnProperty.call(data, key)) {
13
+ const value = (data as Record<string, unknown>)[key];
14
+
15
+ if (typeof value === 'object' && value !== null) {
16
+ if ('variant' in value) {
17
+ parsedData[key] = value.variant;
18
+ } else if ('fields' in value) {
19
+ parsedData[key] = parseData(value.fields);
20
+ } else {
21
+ parsedData[key] = parseData(value);
22
+ }
23
+ } else {
24
+ parsedData[key] = value;
25
+ }
26
+ }
27
+ }
28
+ return parsedData;
29
+ };
30
+
31
+ export const parseValue = (value: unknown): unknown => {
32
+ if (typeof value !== 'object' || value === null) {
33
+ return value;
34
+ }
35
+
36
+ if (Array.isArray(value)) {
37
+ return value.map((item) => parseValue(item));
38
+ }
39
+
40
+ if ('variant' in value) {
41
+ return value.variant;
42
+ }
43
+
44
+ if ('fields' in value) {
45
+ return parseData(value.fields);
46
+ }
47
+
48
+ return parseData(value);
49
+ };