@clonegod/ttd-sui-common 1.0.0 → 1.0.3
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 +12 -0
- package/dist/grpc/grpc-connection.d.ts +13 -0
- package/dist/grpc/grpc-connection.js +99 -0
- package/dist/grpc/index.d.ts +5 -0
- package/dist/grpc/index.js +13 -0
- package/dist/grpc/ledger-service.d.ts +12 -0
- package/dist/grpc/ledger-service.js +159 -0
- package/dist/grpc/live-data-service.d.ts +10 -0
- package/dist/grpc/live-data-service.js +101 -0
- package/dist/grpc/subscription-service.d.ts +7 -0
- package/dist/grpc/subscription-service.js +63 -0
- package/dist/grpc/transaction-service.d.ts +7 -0
- package/dist/grpc/transaction-service.js +48 -0
- package/dist/index.js +1 -1
- package/dist/rpc/account-api.d.ts +14 -0
- package/dist/rpc/account-api.js +113 -0
- package/dist/rpc/coin-api.d.ts +0 -0
- package/dist/rpc/coin-api.js +0 -0
- package/dist/rpc/index.d.ts +5 -0
- package/dist/rpc/index.js +13 -0
- package/dist/rpc/rpc-connection.d.ts +8 -0
- package/dist/rpc/rpc-connection.js +54 -0
- package/dist/test/test.d.ts +1 -0
- package/dist/test/test.js +126 -0
- package/dist/test/test_grpc.d.ts +1 -0
- package/dist/test/test_grpc.js +93 -0
- package/dist/test/test_rpc.d.ts +1 -0
- package/dist/test/test_rpc.js +34 -0
- package/dist/transaction_28FaeTYoctpP1VdWCuyPxNEBeaMm3ebj27kdF5umi9YL.json +4754 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +43 -0
- package/package.json +21 -16
package/README.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
## sur grpc overview
|
|
2
|
+
|
|
3
|
+
https://github.com/MystenLabs/sui/blob/main/docs/content/concepts/grpc-overview.mdx
|
|
4
|
+
|
|
5
|
+
### grpc proto
|
|
6
|
+
|
|
7
|
+
https://github.com/MystenLabs/sui-rust-sdk/tree/master/crates/sui-rpc/vendored/proto/sui/rpc/v2beta2
|
|
8
|
+
|
|
9
|
+
https://github.com/MystenLabs/sui-apis/tree/main/proto
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as grpc from '@grpc/grpc-js';
|
|
2
|
+
export declare class GrpcConnection {
|
|
3
|
+
private static instance;
|
|
4
|
+
private channel;
|
|
5
|
+
private endpoint;
|
|
6
|
+
private metadata;
|
|
7
|
+
private constructor();
|
|
8
|
+
static getInstance(grpc_endpoint: string, grpc_token: string): GrpcConnection;
|
|
9
|
+
private getChannel;
|
|
10
|
+
createServiceClient<T>(protoFileName: string, serviceName: string): T;
|
|
11
|
+
getMetadata(): grpc.Metadata;
|
|
12
|
+
close(): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.GrpcConnection = void 0;
|
|
37
|
+
const grpc = __importStar(require("@grpc/grpc-js"));
|
|
38
|
+
const protoLoader = __importStar(require("@grpc/proto-loader"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
class GrpcConnection {
|
|
41
|
+
constructor(grpc_endpoint, grpc_token) {
|
|
42
|
+
this.channel = null;
|
|
43
|
+
this.endpoint = grpc_endpoint;
|
|
44
|
+
this.metadata = new grpc.Metadata();
|
|
45
|
+
this.metadata.add('x-token', grpc_token);
|
|
46
|
+
}
|
|
47
|
+
static getInstance(grpc_endpoint, grpc_token) {
|
|
48
|
+
if (!GrpcConnection.instance) {
|
|
49
|
+
GrpcConnection.instance = new GrpcConnection(grpc_endpoint, grpc_token);
|
|
50
|
+
}
|
|
51
|
+
return GrpcConnection.instance;
|
|
52
|
+
}
|
|
53
|
+
getChannel() {
|
|
54
|
+
if (!this.channel) {
|
|
55
|
+
this.channel = new grpc.Channel(this.endpoint, grpc.credentials.createSsl(), {
|
|
56
|
+
'grpc.keepalive_time_ms': 120000,
|
|
57
|
+
'grpc.keepalive_timeout_ms': 20000,
|
|
58
|
+
'grpc.keepalive_permit_without_calls': 0,
|
|
59
|
+
'grpc.http2.max_pings_without_data': 0,
|
|
60
|
+
'grpc.http2.min_time_between_pings_ms': 120000,
|
|
61
|
+
'grpc.http2.min_ping_interval_without_data_ms': 120000
|
|
62
|
+
});
|
|
63
|
+
console.log(`创建 gRPC 通道: ${this.endpoint}`);
|
|
64
|
+
}
|
|
65
|
+
return this.channel;
|
|
66
|
+
}
|
|
67
|
+
createServiceClient(protoFileName, serviceName) {
|
|
68
|
+
var _a, _b, _c;
|
|
69
|
+
const protoPath = path.join(__dirname, 'protos/sui/rpc/v2beta2', protoFileName);
|
|
70
|
+
const packageDefinition = protoLoader.loadSync(protoPath, {
|
|
71
|
+
keepCase: true,
|
|
72
|
+
longs: String,
|
|
73
|
+
enums: String,
|
|
74
|
+
defaults: true,
|
|
75
|
+
oneofs: true,
|
|
76
|
+
includeDirs: [path.join(__dirname, 'protos')]
|
|
77
|
+
});
|
|
78
|
+
const protoDescriptor = grpc.loadPackageDefinition(packageDefinition);
|
|
79
|
+
const service = (_c = (_b = (_a = protoDescriptor.sui) === null || _a === void 0 ? void 0 : _a.rpc) === null || _b === void 0 ? void 0 : _b.v2beta2) === null || _c === void 0 ? void 0 : _c[serviceName];
|
|
80
|
+
if (!service) {
|
|
81
|
+
throw new Error(`Service ${serviceName} not found in proto file`);
|
|
82
|
+
}
|
|
83
|
+
const channel = this.getChannel();
|
|
84
|
+
return new service(this.endpoint, grpc.credentials.createSsl(), {
|
|
85
|
+
channelOverride: channel
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
getMetadata() {
|
|
89
|
+
return this.metadata;
|
|
90
|
+
}
|
|
91
|
+
close() {
|
|
92
|
+
if (this.channel) {
|
|
93
|
+
this.channel.close();
|
|
94
|
+
this.channel = null;
|
|
95
|
+
console.log('gRPC 通道已关闭');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.GrpcConnection = GrpcConnection;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { GrpcConnection } from './grpc-connection';
|
|
2
|
+
export { LedgerService } from './ledger-service';
|
|
3
|
+
export { LiveDataService } from './live-data-service';
|
|
4
|
+
export { TransactionService } from './transaction-service';
|
|
5
|
+
export { SubscriptionService } from './subscription-service';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SubscriptionService = exports.TransactionService = exports.LiveDataService = exports.LedgerService = exports.GrpcConnection = void 0;
|
|
4
|
+
var grpc_connection_1 = require("./grpc-connection");
|
|
5
|
+
Object.defineProperty(exports, "GrpcConnection", { enumerable: true, get: function () { return grpc_connection_1.GrpcConnection; } });
|
|
6
|
+
var ledger_service_1 = require("./ledger-service");
|
|
7
|
+
Object.defineProperty(exports, "LedgerService", { enumerable: true, get: function () { return ledger_service_1.LedgerService; } });
|
|
8
|
+
var live_data_service_1 = require("./live-data-service");
|
|
9
|
+
Object.defineProperty(exports, "LiveDataService", { enumerable: true, get: function () { return live_data_service_1.LiveDataService; } });
|
|
10
|
+
var transaction_service_1 = require("./transaction-service");
|
|
11
|
+
Object.defineProperty(exports, "TransactionService", { enumerable: true, get: function () { return transaction_service_1.TransactionService; } });
|
|
12
|
+
var subscription_service_1 = require("./subscription-service");
|
|
13
|
+
Object.defineProperty(exports, "SubscriptionService", { enumerable: true, get: function () { return subscription_service_1.SubscriptionService; } });
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { GrpcConnection } from './grpc-connection';
|
|
2
|
+
export declare class LedgerService {
|
|
3
|
+
private ledgerClient;
|
|
4
|
+
private connection;
|
|
5
|
+
constructor(connection: GrpcConnection);
|
|
6
|
+
getServiceInfo(): Promise<unknown>;
|
|
7
|
+
getEpoch(epoch?: number, includeCommittee?: boolean): Promise<unknown>;
|
|
8
|
+
getCheckpoint(checkpointId?: string): Promise<any>;
|
|
9
|
+
getObject(objectId: string, readMask?: string[]): Promise<unknown>;
|
|
10
|
+
batchGetObjects(objectIds: string[], readMask?: string[]): Promise<unknown>;
|
|
11
|
+
getTransaction(digest: string, readMask?: string[]): Promise<unknown>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.LedgerService = void 0;
|
|
13
|
+
class LedgerService {
|
|
14
|
+
constructor(connection) {
|
|
15
|
+
this.connection = connection;
|
|
16
|
+
this.ledgerClient = connection.createServiceClient('ledger_service.proto', 'LedgerService');
|
|
17
|
+
}
|
|
18
|
+
getServiceInfo() {
|
|
19
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
const request = {};
|
|
22
|
+
this.ledgerClient.GetServiceInfo(request, this.connection.getMetadata(), (error, response) => {
|
|
23
|
+
if (error)
|
|
24
|
+
reject(error);
|
|
25
|
+
else
|
|
26
|
+
resolve(response);
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
getEpoch(epoch_1) {
|
|
32
|
+
return __awaiter(this, arguments, void 0, function* (epoch, includeCommittee = false) {
|
|
33
|
+
return new Promise((resolve, reject) => {
|
|
34
|
+
const request = {};
|
|
35
|
+
if (epoch)
|
|
36
|
+
request.epoch = epoch;
|
|
37
|
+
if (!includeCommittee) {
|
|
38
|
+
request.read_mask = {
|
|
39
|
+
paths: ['epoch']
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
this.ledgerClient.GetEpoch(request, this.connection.getMetadata(), (error, response) => {
|
|
43
|
+
if (error)
|
|
44
|
+
reject(error);
|
|
45
|
+
else
|
|
46
|
+
resolve(response);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
getCheckpoint(checkpointId) {
|
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
return new Promise((resolve, reject) => {
|
|
54
|
+
const request = checkpointId ? { digest: checkpointId } : {};
|
|
55
|
+
this.ledgerClient.GetCheckpoint(request, this.connection.getMetadata(), (error, response) => {
|
|
56
|
+
if (error)
|
|
57
|
+
reject(error);
|
|
58
|
+
else
|
|
59
|
+
resolve(response);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
getObject(objectId, readMask) {
|
|
65
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
const request = {
|
|
68
|
+
object_id: objectId
|
|
69
|
+
};
|
|
70
|
+
if (readMask && readMask.length > 0) {
|
|
71
|
+
request.read_mask = {
|
|
72
|
+
paths: readMask
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
request.read_mask = {
|
|
77
|
+
paths: [
|
|
78
|
+
"object_id",
|
|
79
|
+
"version",
|
|
80
|
+
"digest",
|
|
81
|
+
"owner",
|
|
82
|
+
"object_type",
|
|
83
|
+
"has_public_transfer",
|
|
84
|
+
"previous_transaction",
|
|
85
|
+
"storage_rebate",
|
|
86
|
+
"balance"
|
|
87
|
+
]
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
this.ledgerClient.GetObject(request, this.connection.getMetadata(), (error, response) => {
|
|
91
|
+
if (error)
|
|
92
|
+
reject(error);
|
|
93
|
+
else {
|
|
94
|
+
resolve(response);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
batchGetObjects(objectIds, readMask) {
|
|
101
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
+
return new Promise((resolve, reject) => {
|
|
103
|
+
const requests = objectIds.map(id => ({ object_id: id }));
|
|
104
|
+
const request = { requests };
|
|
105
|
+
if (readMask && readMask.length > 0) {
|
|
106
|
+
request.read_mask = {
|
|
107
|
+
paths: readMask
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
request.read_mask = {
|
|
112
|
+
paths: [
|
|
113
|
+
"object_id",
|
|
114
|
+
"version",
|
|
115
|
+
"digest",
|
|
116
|
+
"owner",
|
|
117
|
+
"object_type",
|
|
118
|
+
"has_public_transfer",
|
|
119
|
+
"previous_transaction",
|
|
120
|
+
"storage_rebate",
|
|
121
|
+
"balance"
|
|
122
|
+
]
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
this.ledgerClient.BatchGetObjects(request, this.connection.getMetadata(), (error, response) => {
|
|
126
|
+
if (error)
|
|
127
|
+
reject(error);
|
|
128
|
+
else {
|
|
129
|
+
resolve(response);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
getTransaction(digest, readMask) {
|
|
136
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
+
return new Promise((resolve, reject) => {
|
|
138
|
+
const request = { digest };
|
|
139
|
+
if (readMask && readMask.length > 0) {
|
|
140
|
+
request.read_mask = {
|
|
141
|
+
paths: readMask
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
request.read_mask = {
|
|
146
|
+
paths: ['digest', 'effects.gas_used', 'checkpoint', 'timestamp', 'balance_changes', 'input_objects', 'output_objects']
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
this.ledgerClient.GetTransaction(request, this.connection.getMetadata(), (error, response) => {
|
|
150
|
+
if (error)
|
|
151
|
+
reject(error);
|
|
152
|
+
else
|
|
153
|
+
resolve(response);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
exports.LedgerService = LedgerService;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { GrpcConnection } from './grpc-connection';
|
|
2
|
+
export declare class LiveDataService {
|
|
3
|
+
private liveDataClient;
|
|
4
|
+
private connection;
|
|
5
|
+
constructor(connection: GrpcConnection);
|
|
6
|
+
getBalance(owner: string, coinType: string): Promise<any>;
|
|
7
|
+
listBalances(owner: string): Promise<unknown>;
|
|
8
|
+
getCoinInfo(coinType: string): Promise<unknown>;
|
|
9
|
+
listOwnedObjects(owner: string, limit?: number, readMask?: string[]): Promise<unknown>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.LiveDataService = void 0;
|
|
13
|
+
const utils_1 = require("../utils");
|
|
14
|
+
class LiveDataService {
|
|
15
|
+
constructor(connection) {
|
|
16
|
+
this.connection = connection;
|
|
17
|
+
this.liveDataClient = connection.createServiceClient('live_data_service.proto', 'LiveDataService');
|
|
18
|
+
}
|
|
19
|
+
getBalance(owner, coinType) {
|
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
if (!owner) {
|
|
22
|
+
throw new Error('owner 参数是必需的');
|
|
23
|
+
}
|
|
24
|
+
if (!coinType) {
|
|
25
|
+
coinType = '0x2::sui::SUI';
|
|
26
|
+
}
|
|
27
|
+
return new Promise((resolve, reject) => {
|
|
28
|
+
const request = {
|
|
29
|
+
owner: owner,
|
|
30
|
+
coin_type: coinType
|
|
31
|
+
};
|
|
32
|
+
this.liveDataClient.GetBalance(request, this.connection.getMetadata(), (error, response) => {
|
|
33
|
+
if (error)
|
|
34
|
+
reject(error);
|
|
35
|
+
else
|
|
36
|
+
resolve(response);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
listBalances(owner) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
return new Promise((resolve, reject) => {
|
|
44
|
+
this.liveDataClient.ListBalances({ owner }, this.connection.getMetadata(), (error, response) => {
|
|
45
|
+
if (error)
|
|
46
|
+
reject(error);
|
|
47
|
+
else
|
|
48
|
+
resolve(response);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
getCoinInfo(coinType) {
|
|
54
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
55
|
+
return new Promise((resolve, reject) => {
|
|
56
|
+
this.liveDataClient.GetCoinInfo({ coin_type: coinType }, this.connection.getMetadata(), (error, response) => {
|
|
57
|
+
if (error)
|
|
58
|
+
reject(error);
|
|
59
|
+
else
|
|
60
|
+
resolve(response);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
listOwnedObjects(owner, limit, readMask) {
|
|
66
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
return new Promise((resolve, reject) => {
|
|
68
|
+
const request = { owner };
|
|
69
|
+
if (limit)
|
|
70
|
+
request.page_size = limit;
|
|
71
|
+
if (readMask && readMask.length > 0) {
|
|
72
|
+
request.read_mask = {
|
|
73
|
+
paths: readMask
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
request.read_mask = {
|
|
78
|
+
paths: [
|
|
79
|
+
"object_id",
|
|
80
|
+
"version",
|
|
81
|
+
"digest",
|
|
82
|
+
"owner",
|
|
83
|
+
"object_type",
|
|
84
|
+
"storage_rebate",
|
|
85
|
+
"balance"
|
|
86
|
+
]
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
this.liveDataClient.ListOwnedObjects(request, this.connection.getMetadata(), (error, response) => {
|
|
90
|
+
if (error)
|
|
91
|
+
reject(error);
|
|
92
|
+
else {
|
|
93
|
+
let res = (0, utils_1.decodeBytes)(response);
|
|
94
|
+
resolve(res);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.LiveDataService = LiveDataService;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { GrpcConnection } from './grpc-connection';
|
|
2
|
+
export declare class SubscriptionService {
|
|
3
|
+
private subscriptionClient;
|
|
4
|
+
private connection;
|
|
5
|
+
constructor(connection: GrpcConnection);
|
|
6
|
+
subscribeCheckpoints(onCheckpoint: (response: any) => void, onError: (error: any) => void, readMask?: string[]): any;
|
|
7
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SubscriptionService = void 0;
|
|
37
|
+
const dotenv = __importStar(require("dotenv"));
|
|
38
|
+
dotenv.config();
|
|
39
|
+
class SubscriptionService {
|
|
40
|
+
constructor(connection) {
|
|
41
|
+
this.connection = connection;
|
|
42
|
+
this.subscriptionClient = connection.createServiceClient('subscription_service.proto', 'SubscriptionService');
|
|
43
|
+
}
|
|
44
|
+
subscribeCheckpoints(onCheckpoint, onError, readMask) {
|
|
45
|
+
const request = {};
|
|
46
|
+
if (readMask && readMask.length > 0) {
|
|
47
|
+
request.read_mask = { paths: readMask };
|
|
48
|
+
}
|
|
49
|
+
const stream = this.subscriptionClient.SubscribeCheckpoints(request, this.connection.getMetadata());
|
|
50
|
+
stream.on('data', (response) => {
|
|
51
|
+
onCheckpoint(response);
|
|
52
|
+
});
|
|
53
|
+
stream.on('error', (error) => {
|
|
54
|
+
console.error('订阅检查点流错误:', error);
|
|
55
|
+
onError(error);
|
|
56
|
+
});
|
|
57
|
+
stream.on('end', () => {
|
|
58
|
+
console.log('检查点流订阅结束');
|
|
59
|
+
});
|
|
60
|
+
return stream;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.SubscriptionService = SubscriptionService;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { GrpcConnection } from './grpc-connection';
|
|
2
|
+
export declare class TransactionService {
|
|
3
|
+
private transactionClient;
|
|
4
|
+
private connection;
|
|
5
|
+
constructor(connection: GrpcConnection);
|
|
6
|
+
executeTransaction(serializedTransaction: string, signatureBytes: string, publickeyBytes: string, fields?: string[]): Promise<unknown>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.TransactionService = void 0;
|
|
13
|
+
class TransactionService {
|
|
14
|
+
constructor(connection) {
|
|
15
|
+
this.connection = connection;
|
|
16
|
+
this.transactionClient = connection.createServiceClient('transaction_execution_service.proto', 'TransactionExecutionService');
|
|
17
|
+
}
|
|
18
|
+
executeTransaction(serializedTransaction_1, signatureBytes_1, publickeyBytes_1) {
|
|
19
|
+
return __awaiter(this, arguments, void 0, function* (serializedTransaction, signatureBytes, publickeyBytes, fields = ['transaction', 'finality']) {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
const request = {
|
|
22
|
+
transaction: {
|
|
23
|
+
bcs: {
|
|
24
|
+
bytes: Buffer.from(serializedTransaction, 'base64')
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
signatures: [
|
|
28
|
+
{
|
|
29
|
+
scheme: 0,
|
|
30
|
+
signature: Buffer.from(signatureBytes, 'base64'),
|
|
31
|
+
public_key: Buffer.from(publickeyBytes, 'base64')
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
read_mask: {
|
|
35
|
+
paths: fields
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
this.transactionClient.ExecuteTransaction(request, this.connection.getMetadata(), (error, response) => {
|
|
39
|
+
if (error)
|
|
40
|
+
reject(error);
|
|
41
|
+
else
|
|
42
|
+
resolve(response);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.TransactionService = TransactionService;
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
console.log('
|
|
1
|
+
console.log('ttd-sui-common');
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { RpcConnection } from './rpc-connection';
|
|
2
|
+
export declare class AccountApi {
|
|
3
|
+
private connection;
|
|
4
|
+
constructor(connection: RpcConnection);
|
|
5
|
+
getBalance(owner: string, coinType?: string): Promise<any>;
|
|
6
|
+
getAllBalances(owner: string): Promise<any>;
|
|
7
|
+
getAllCoins(owner: string, cursor?: string, limit?: number): Promise<any>;
|
|
8
|
+
getAllCoinsComplete(owner: string, limit?: number): Promise<any[]>;
|
|
9
|
+
getCoins(owner: string, coinType: string, cursor?: string, limit?: number): Promise<any>;
|
|
10
|
+
getCoinsComplete(owner: string, coinType: string, limit?: number): Promise<any[]>;
|
|
11
|
+
getOwnedObjects(owner: string, filter?: any, cursor?: string, limit?: number): Promise<any>;
|
|
12
|
+
getAllOwnedObjects(owner: string, filter?: any, limit?: number): Promise<any[]>;
|
|
13
|
+
getCoinMetadata(coinType: string): Promise<any>;
|
|
14
|
+
}
|