@typus/typus-perp-sdk 1.0.9 → 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.
- package/dist/src/api/sentio.d.ts +1 -0
- package/dist/src/api/sentio.js +73 -0
- package/dist/src/typus_perp/index.js +1 -1
- package/dist/src/user/history.d.ts +26 -1
- package/dist/src/user/history.js +272 -204
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getFromSentio(event: string, userAddress: string, startTimestamp: string): Promise<any[]>;
|
|
@@ -0,0 +1,73 @@
|
|
|
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
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.getFromSentio = getFromSentio;
|
|
40
|
+
var headers = {
|
|
41
|
+
"api-key": "tz3JJ6stG7Fux6ueRSRA5mdpC9U0lozI3",
|
|
42
|
+
"Content-Type": "application/json",
|
|
43
|
+
};
|
|
44
|
+
function getFromSentio(event, userAddress, startTimestamp) {
|
|
45
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
46
|
+
var apiUrl, requestData, jsonData, response, data;
|
|
47
|
+
return __generator(this, function (_a) {
|
|
48
|
+
switch (_a.label) {
|
|
49
|
+
case 0:
|
|
50
|
+
apiUrl = "https://app.sentio.xyz/api/v1/analytics/wayne/typus_perp/sql/execute";
|
|
51
|
+
requestData = {
|
|
52
|
+
sqlQuery: {
|
|
53
|
+
sql: "\n SELECT *\n FROM ".concat(event, "\n WHERE distinct_id = '").concat(userAddress, "' AND timestamp >= ").concat(startTimestamp, "\n ORDER BY timestamp DESC;\n "),
|
|
54
|
+
size: 1000,
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
jsonData = JSON.stringify(requestData);
|
|
58
|
+
return [4 /*yield*/, fetch(apiUrl, {
|
|
59
|
+
method: "POST",
|
|
60
|
+
headers: headers,
|
|
61
|
+
body: jsonData,
|
|
62
|
+
})];
|
|
63
|
+
case 1:
|
|
64
|
+
response = _a.sent();
|
|
65
|
+
return [4 /*yield*/, response.json()];
|
|
66
|
+
case 2:
|
|
67
|
+
data = _a.sent();
|
|
68
|
+
// console.log(data);
|
|
69
|
+
return [2 /*return*/, data.result.rows];
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
@@ -3,5 +3,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PKG_V1 = exports.PUBLISHED_AT = exports.PACKAGE_ID = void 0;
|
|
4
4
|
var index_1 = require("../index");
|
|
5
5
|
exports.PACKAGE_ID = index_1.NETWORK == "MAINNET" ? "" : "0x7c19f81d9d411e78305d7af8dad25317c56bb449fede8a78b6021232478f0509";
|
|
6
|
-
exports.PUBLISHED_AT = index_1.NETWORK == "MAINNET" ? "" : "
|
|
6
|
+
exports.PUBLISHED_AT = index_1.NETWORK == "MAINNET" ? "" : "0x16075533726388ef93a1d036fe192a9a367ce6f80e3cb4d462019a8b5c8bbe0e";
|
|
7
7
|
exports.PKG_V1 = index_1.NETWORK == "MAINNET" ? "" : "0x7c19f81d9d411e78305d7af8dad25317c56bb449fede8a78b6021232478f0509";
|
|
@@ -1,2 +1,27 @@
|
|
|
1
|
-
|
|
1
|
+
import { TOKEN } from "@typus/typus-sdk/dist/src/constants";
|
|
2
|
+
type actionType = "Place Order" | "Cancel Order" | "Order Filled (Open Position)" | "Order Filled (Close Position)" | "Realized PnL" | "Modify Collateral" | "Exercise Position" | "Liquidation" | "Force Close Position " | "Swap";
|
|
3
|
+
type sideType = "Long" | "Short";
|
|
4
|
+
type orderType = "Market" | "Limit" | "Take Profit" | "Stop Loss";
|
|
5
|
+
type statusType = "Open" | "Filled" | "Canceled";
|
|
6
|
+
interface Event {
|
|
7
|
+
action: actionType;
|
|
8
|
+
order_id: string | undefined;
|
|
9
|
+
position_id: string | undefined;
|
|
10
|
+
market: string;
|
|
11
|
+
side: sideType | undefined;
|
|
12
|
+
order_type: orderType | undefined;
|
|
13
|
+
status: statusType;
|
|
14
|
+
size: number | undefined;
|
|
15
|
+
base_token: TOKEN;
|
|
16
|
+
collateral: number | undefined;
|
|
17
|
+
collateral_token: TOKEN;
|
|
18
|
+
price: number | undefined;
|
|
19
|
+
realized_pnl: number | undefined;
|
|
20
|
+
timestamp: string;
|
|
21
|
+
tx_digest: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function parseUserHistory(raw_events: any): Promise<Event[]>;
|
|
2
24
|
export declare function getGraphQLEvents(module: string, sender: string, beforeCursor?: string | null): Promise<any>;
|
|
25
|
+
export declare function getLiquidateFromSentio(userAddress: string, startTimestamp: number): Promise<Event[]>;
|
|
26
|
+
export declare function getOrderMatchFromSentio(userAddress: string, startTimestamp: number): Promise<Event[]>;
|
|
27
|
+
export {};
|
package/dist/src/user/history.js
CHANGED
|
@@ -47,229 +47,228 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
47
47
|
}
|
|
48
48
|
};
|
|
49
49
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
-
exports.
|
|
50
|
+
exports.parseUserHistory = parseUserHistory;
|
|
51
51
|
exports.getGraphQLEvents = getGraphQLEvents;
|
|
52
|
+
exports.getLiquidateFromSentio = getLiquidateFromSentio;
|
|
53
|
+
exports.getOrderMatchFromSentio = getOrderMatchFromSentio;
|
|
52
54
|
var constants_1 = require("@typus/typus-sdk/dist/src/constants");
|
|
53
|
-
var index_1 = require("../typus_perp/index");
|
|
54
55
|
var structs_1 = require("../typus_perp/position/structs");
|
|
55
56
|
var structs_2 = require("../typus_perp/trading/structs");
|
|
56
57
|
var structs_3 = require("../../src/typus_perp/lp-pool/structs");
|
|
57
|
-
|
|
58
|
+
var sentio_1 = require("../../src/api/sentio");
|
|
59
|
+
function parseUserHistory(raw_events) {
|
|
58
60
|
return __awaiter(this, void 0, void 0, function () {
|
|
59
|
-
var
|
|
61
|
+
var events;
|
|
60
62
|
return __generator(this, function (_a) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
63
|
+
events = [];
|
|
64
|
+
raw_events.forEach(function (event) {
|
|
65
|
+
var _a, _b;
|
|
66
|
+
var type = event.contents.type.repr;
|
|
67
|
+
if (type.endsWith("PythPrice")) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
var json = event.contents.json;
|
|
71
|
+
var timestamp = event.timestamp;
|
|
72
|
+
var tx_digest = event.transactionBlock.digest;
|
|
73
|
+
// console.log(type);
|
|
74
|
+
// console.log(tx_digest);
|
|
75
|
+
// console.log(json);
|
|
76
|
+
// console.log(timestamp);
|
|
77
|
+
switch (type) {
|
|
78
|
+
case structs_2.CreateTradingOrderEvent.$typeName:
|
|
79
|
+
case structs_2.CreateTradingOrderWithBidReceiptsEvent.$typeName:
|
|
80
|
+
var base_token = (0, constants_1.typeArgToToken)(json.base_token.name);
|
|
81
|
+
var collateral_token = (0, constants_1.typeArgToToken)(json.collateral_token.name);
|
|
82
|
+
var market = "".concat(base_token, "/USD");
|
|
83
|
+
var size = Number(json.size) / Math.pow(10, (0, constants_1.assetToDecimal)(base_token));
|
|
84
|
+
var collateral;
|
|
85
|
+
if (json.collateral_amount) {
|
|
86
|
+
collateral = Number(json.collateral_amount) / Math.pow(10, (0, constants_1.assetToDecimal)(collateral_token));
|
|
73
87
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
var tx_digest = event.transactionBlock.digest;
|
|
77
|
-
// console.log(type);
|
|
78
|
-
// console.log(tx_digest);
|
|
79
|
-
// console.log(json);
|
|
80
|
-
// console.log(timestamp);
|
|
81
|
-
switch (type) {
|
|
82
|
-
case structs_2.CreateTradingOrderEvent.$typeName:
|
|
83
|
-
case structs_2.CreateTradingOrderWithBidReceiptsEvent.$typeName:
|
|
84
|
-
var base_token = (0, constants_1.typeArgToToken)(json.base_token.name);
|
|
85
|
-
var collateral_token = (0, constants_1.typeArgToToken)(json.collateral_token.name);
|
|
86
|
-
var market = "".concat(base_token, "/USD");
|
|
87
|
-
var size = Number(json.size) / Math.pow(10, (0, constants_1.assetToDecimal)(base_token));
|
|
88
|
-
var collateral;
|
|
89
|
-
if (json.collateral_amount) {
|
|
90
|
-
collateral = Number(json.collateral_amount) / Math.pow(10, (0, constants_1.assetToDecimal)(collateral_token));
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
collateral = Number(json.collateral_in_deposit_token) / Math.pow(10, (0, constants_1.assetToDecimal)(collateral_token));
|
|
94
|
-
}
|
|
95
|
-
var order_type = "Limit";
|
|
96
|
-
var price = json.trigger_price;
|
|
97
|
-
if (json.filled) {
|
|
98
|
-
order_type = "Market";
|
|
99
|
-
price = json.filled_price;
|
|
100
|
-
}
|
|
101
|
-
else if (json.reduce_only && !json.is_stop_order) {
|
|
102
|
-
order_type = "Take Profit";
|
|
103
|
-
}
|
|
104
|
-
else if (json.reduce_only && json.is_stop_order) {
|
|
105
|
-
order_type = "Stop Loss";
|
|
106
|
-
}
|
|
107
|
-
var e = {
|
|
108
|
-
action: "Place Order",
|
|
109
|
-
order_id: json.order_id,
|
|
110
|
-
position_id: json.linked_position_id,
|
|
111
|
-
market: market,
|
|
112
|
-
side: json.is_long ? "Long" : "Short",
|
|
113
|
-
order_type: order_type,
|
|
114
|
-
status: json.filled ? "Filled" : "Open",
|
|
115
|
-
size: size,
|
|
116
|
-
base_token: base_token,
|
|
117
|
-
collateral: collateral,
|
|
118
|
-
collateral_token: collateral_token,
|
|
119
|
-
price: Number(price) / Math.pow(10, 8), // WARNING: fixed decimal
|
|
120
|
-
realized_pnl: undefined,
|
|
121
|
-
timestamp: timestamp,
|
|
122
|
-
tx_digest: tx_digest,
|
|
123
|
-
};
|
|
124
|
-
events.push(e);
|
|
125
|
-
break;
|
|
126
|
-
case structs_1.OrderFilledEvent.$typeName:
|
|
127
|
-
var base_token = (0, constants_1.typeArgToToken)(json.symbol.base_token.name);
|
|
128
|
-
var collateral_token = (0, constants_1.typeArgToToken)(json.collateral_token.name);
|
|
129
|
-
var market = "".concat(base_token, "/USD");
|
|
130
|
-
var size = Number(json.filled_size) / Math.pow(10, (0, constants_1.assetToDecimal)(base_token));
|
|
131
|
-
var price = json.filled_price;
|
|
132
|
-
var action;
|
|
133
|
-
var related;
|
|
134
|
-
if (json.linked_position_id) {
|
|
135
|
-
action = "Order Filled (Close Position)";
|
|
136
|
-
related = events.findLast(function (e) { return e.position_id === json.linked_position_id && e.market === market; });
|
|
137
|
-
// the "Place Order" is emit after Order Filled if filled immediately
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
action = "Order Filled (Open Position)";
|
|
141
|
-
related = events.findLast(function (e) { return e.order_id === json.order_id && e.market === market; });
|
|
142
|
-
}
|
|
143
|
-
var realized_trading_fee = Number(json.realized_trading_fee) + Number(json.realized_borrow_fee);
|
|
144
|
-
var realized_fee_in_usd = Number(json.realized_fee_in_usd) / Math.pow(10, 9);
|
|
145
|
-
var realized_amount = json.realized_amount_sign ? Number(json.realized_amount) : -Number(json.realized_amount);
|
|
146
|
-
var realized_pnl = ((realized_amount - realized_trading_fee) * realized_fee_in_usd) / realized_trading_fee;
|
|
147
|
-
var e = {
|
|
148
|
-
action: action,
|
|
149
|
-
order_id: json.order_id,
|
|
150
|
-
position_id: (_a = json.linked_position_id) !== null && _a !== void 0 ? _a : json.new_position_id,
|
|
151
|
-
market: market,
|
|
152
|
-
side: json.position_side ? "Long" : "Short",
|
|
153
|
-
order_type: related === null || related === void 0 ? void 0 : related.order_type,
|
|
154
|
-
status: "Filled",
|
|
155
|
-
size: size,
|
|
156
|
-
base_token: base_token,
|
|
157
|
-
collateral: related === null || related === void 0 ? void 0 : related.collateral,
|
|
158
|
-
collateral_token: collateral_token,
|
|
159
|
-
price: Number(price) / Math.pow(10, 8), // WARNING: fixed decimal
|
|
160
|
-
realized_pnl: realized_pnl,
|
|
161
|
-
timestamp: timestamp,
|
|
162
|
-
tx_digest: tx_digest,
|
|
163
|
-
};
|
|
164
|
-
events.push(e);
|
|
165
|
-
break;
|
|
166
|
-
case structs_1.RealizeFundingEvent.$typeName:
|
|
167
|
-
// same tx with order filled
|
|
168
|
-
var index = events.findLastIndex(function (e) { return e.tx_digest == tx_digest; });
|
|
169
|
-
// console.log(index);
|
|
170
|
-
if (index !== -1) {
|
|
171
|
-
// true => user paid to pool
|
|
172
|
-
var x = json.realized_funding_sign ? json.realized_funding_fee_usd / Math.pow(10, 9) : -json.realized_funding_fee_usd / Math.pow(10, 9);
|
|
173
|
-
events[index] = __assign(__assign({}, events[index]), { realized_pnl: ((_b = events[index].realized_pnl) !== null && _b !== void 0 ? _b : 0) - x });
|
|
174
|
-
}
|
|
175
|
-
break;
|
|
176
|
-
case structs_2.CancelTradingOrderEvent.$typeName:
|
|
177
|
-
var base_token = (0, constants_1.typeArgToToken)(json.base_token.name);
|
|
178
|
-
var collateral_token = (0, constants_1.typeArgToToken)(json.collateral_token.name);
|
|
179
|
-
var market = "".concat(base_token, "/USD");
|
|
180
|
-
var related = events.findLast(function (e) { return e.order_id === json.order_id && e.market === market; });
|
|
181
|
-
var e = {
|
|
182
|
-
action: "Cancel Order",
|
|
183
|
-
order_id: json.order_id,
|
|
184
|
-
position_id: undefined,
|
|
185
|
-
market: market,
|
|
186
|
-
side: related === null || related === void 0 ? void 0 : related.side,
|
|
187
|
-
order_type: related === null || related === void 0 ? void 0 : related.order_type,
|
|
188
|
-
status: "Canceled",
|
|
189
|
-
size: related === null || related === void 0 ? void 0 : related.size,
|
|
190
|
-
base_token: base_token,
|
|
191
|
-
collateral: Number(json.released_collateral_amount) / Math.pow(10, (0, constants_1.assetToDecimal)(collateral_token)), // WARNING: fixed decimal
|
|
192
|
-
collateral_token: collateral_token,
|
|
193
|
-
price: Number(json.trigger_price) / Math.pow(10, 8), // WARNING: fixed decimal
|
|
194
|
-
realized_pnl: undefined,
|
|
195
|
-
timestamp: timestamp,
|
|
196
|
-
tx_digest: tx_digest,
|
|
197
|
-
};
|
|
198
|
-
events.push(e);
|
|
199
|
-
break;
|
|
200
|
-
case structs_2.IncreaseCollateralEvent.$typeName:
|
|
201
|
-
case structs_2.ReleaseCollateralEvent.$typeName:
|
|
202
|
-
var base_token = (0, constants_1.typeArgToToken)(json.base_token.name);
|
|
203
|
-
var collateral_token = (0, constants_1.typeArgToToken)(json.collateral_token.name);
|
|
204
|
-
var market = "".concat(base_token, "/USD");
|
|
205
|
-
var related = events.findLast(function (e) { return e.position_id === json.position_id && e.market === market; });
|
|
206
|
-
var collateral;
|
|
207
|
-
if (json.increased_collateral_amount) {
|
|
208
|
-
collateral = Number(json.increased_collateral_amount);
|
|
209
|
-
}
|
|
210
|
-
else {
|
|
211
|
-
collateral = Number(json.released_collateral_amount) * -1;
|
|
212
|
-
}
|
|
213
|
-
var e = {
|
|
214
|
-
action: "Modify Collateral",
|
|
215
|
-
order_id: undefined,
|
|
216
|
-
position_id: json.position_id,
|
|
217
|
-
market: market,
|
|
218
|
-
side: related === null || related === void 0 ? void 0 : related.side,
|
|
219
|
-
order_type: related === null || related === void 0 ? void 0 : related.order_type,
|
|
220
|
-
status: "Filled",
|
|
221
|
-
size: related === null || related === void 0 ? void 0 : related.size,
|
|
222
|
-
base_token: base_token,
|
|
223
|
-
collateral: collateral / Math.pow(10, (0, constants_1.assetToDecimal)(collateral_token)), // WARNING: fixed decimal
|
|
224
|
-
collateral_token: collateral_token,
|
|
225
|
-
price: related === null || related === void 0 ? void 0 : related.price,
|
|
226
|
-
realized_pnl: undefined,
|
|
227
|
-
timestamp: timestamp,
|
|
228
|
-
tx_digest: tx_digest,
|
|
229
|
-
};
|
|
230
|
-
events.push(e);
|
|
231
|
-
break;
|
|
232
|
-
case structs_3.SwapEvent.$typeName:
|
|
233
|
-
var from_token = (0, constants_1.typeArgToToken)(json.from_token_type.name);
|
|
234
|
-
var to_token = (0, constants_1.typeArgToToken)(json.to_token_type.name);
|
|
235
|
-
var from_price = Number(json.oracle_price_from_token);
|
|
236
|
-
var to_price = Number(json.oracle_price_to_token);
|
|
237
|
-
var e = {
|
|
238
|
-
action: "Swap",
|
|
239
|
-
order_id: undefined,
|
|
240
|
-
position_id: undefined,
|
|
241
|
-
market: "".concat(from_token, "/").concat(to_token),
|
|
242
|
-
side: undefined,
|
|
243
|
-
order_type: "Market",
|
|
244
|
-
status: "Filled",
|
|
245
|
-
size: Number(json.actual_to_amount) / Math.pow(10, (0, constants_1.assetToDecimal)(to_token)),
|
|
246
|
-
base_token: to_token,
|
|
247
|
-
collateral: Number(json.from_amount) / Math.pow(10, (0, constants_1.assetToDecimal)(from_token)),
|
|
248
|
-
collateral_token: from_token,
|
|
249
|
-
price: from_price / to_price,
|
|
250
|
-
realized_pnl: -Number(json.fee_amount_usd) / Math.pow(10, 6),
|
|
251
|
-
timestamp: timestamp,
|
|
252
|
-
tx_digest: tx_digest,
|
|
253
|
-
};
|
|
254
|
-
events.push(e);
|
|
255
|
-
break;
|
|
88
|
+
else {
|
|
89
|
+
collateral = Number(json.collateral_in_deposit_token) / Math.pow(10, (0, constants_1.assetToDecimal)(collateral_token));
|
|
256
90
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
91
|
+
var order_type = "Limit";
|
|
92
|
+
var price = json.trigger_price;
|
|
93
|
+
if (json.filled) {
|
|
94
|
+
order_type = "Market";
|
|
95
|
+
price = json.filled_price;
|
|
96
|
+
}
|
|
97
|
+
else if (json.reduce_only && !json.is_stop_order) {
|
|
98
|
+
order_type = "Take Profit";
|
|
99
|
+
}
|
|
100
|
+
else if (json.reduce_only && json.is_stop_order) {
|
|
101
|
+
order_type = "Stop Loss";
|
|
102
|
+
}
|
|
103
|
+
var e = {
|
|
104
|
+
action: "Place Order",
|
|
105
|
+
order_id: json.order_id,
|
|
106
|
+
position_id: json.linked_position_id,
|
|
107
|
+
market: market,
|
|
108
|
+
side: json.is_long ? "Long" : "Short",
|
|
109
|
+
order_type: order_type,
|
|
110
|
+
status: json.filled ? "Filled" : "Open",
|
|
111
|
+
size: size,
|
|
112
|
+
base_token: base_token,
|
|
113
|
+
collateral: collateral,
|
|
114
|
+
collateral_token: collateral_token,
|
|
115
|
+
price: Number(price) / Math.pow(10, 8), // WARNING: fixed decimal
|
|
116
|
+
realized_pnl: undefined,
|
|
117
|
+
timestamp: timestamp,
|
|
118
|
+
tx_digest: tx_digest,
|
|
119
|
+
};
|
|
120
|
+
events.push(e);
|
|
121
|
+
break;
|
|
122
|
+
case structs_1.OrderFilledEvent.$typeName:
|
|
123
|
+
var base_token = (0, constants_1.typeArgToToken)(json.symbol.base_token.name);
|
|
124
|
+
var collateral_token = (0, constants_1.typeArgToToken)(json.collateral_token.name);
|
|
125
|
+
var market = "".concat(base_token, "/USD");
|
|
126
|
+
var size = Number(json.filled_size) / Math.pow(10, (0, constants_1.assetToDecimal)(base_token));
|
|
127
|
+
var price = json.filled_price;
|
|
128
|
+
var action;
|
|
129
|
+
var related;
|
|
130
|
+
if (json.linked_position_id) {
|
|
131
|
+
action = "Order Filled (Close Position)";
|
|
132
|
+
related = events.findLast(function (e) { return e.position_id === json.linked_position_id && e.market === market; });
|
|
133
|
+
// the "Place Order" is emit after Order Filled if filled immediately
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
action = "Order Filled (Open Position)";
|
|
137
|
+
related = events.findLast(function (e) { return e.order_id === json.order_id && e.market === market; });
|
|
138
|
+
}
|
|
139
|
+
var realized_trading_fee = Number(json.realized_trading_fee) + Number(json.realized_borrow_fee);
|
|
140
|
+
var realized_fee_in_usd = Number(json.realized_fee_in_usd) / Math.pow(10, 9);
|
|
141
|
+
var realized_amount = json.realized_amount_sign ? Number(json.realized_amount) : -Number(json.realized_amount);
|
|
142
|
+
var realized_pnl = ((realized_amount - realized_trading_fee) * realized_fee_in_usd) / realized_trading_fee;
|
|
143
|
+
var e = {
|
|
144
|
+
action: action,
|
|
145
|
+
order_id: json.order_id,
|
|
146
|
+
position_id: (_a = json.linked_position_id) !== null && _a !== void 0 ? _a : json.new_position_id,
|
|
147
|
+
market: market,
|
|
148
|
+
side: json.position_side ? "Long" : "Short",
|
|
149
|
+
order_type: related === null || related === void 0 ? void 0 : related.order_type,
|
|
150
|
+
status: "Filled",
|
|
151
|
+
size: size,
|
|
152
|
+
base_token: base_token,
|
|
153
|
+
collateral: related === null || related === void 0 ? void 0 : related.collateral,
|
|
154
|
+
collateral_token: collateral_token,
|
|
155
|
+
price: Number(price) / Math.pow(10, 8), // WARNING: fixed decimal
|
|
156
|
+
realized_pnl: realized_pnl,
|
|
157
|
+
timestamp: timestamp,
|
|
158
|
+
tx_digest: tx_digest,
|
|
159
|
+
};
|
|
160
|
+
events.push(e);
|
|
161
|
+
break;
|
|
162
|
+
case structs_1.RealizeFundingEvent.$typeName:
|
|
163
|
+
// same tx with order filled
|
|
164
|
+
var index = events.findLastIndex(function (e) { return e.tx_digest == tx_digest; });
|
|
165
|
+
// console.log(index);
|
|
166
|
+
if (index !== -1) {
|
|
167
|
+
// true => user paid to pool
|
|
168
|
+
var x = json.realized_funding_sign ? json.realized_funding_fee_usd / Math.pow(10, 9) : -json.realized_funding_fee_usd / Math.pow(10, 9);
|
|
169
|
+
events[index] = __assign(__assign({}, events[index]), { realized_pnl: ((_b = events[index].realized_pnl) !== null && _b !== void 0 ? _b : 0) - x });
|
|
170
|
+
}
|
|
171
|
+
break;
|
|
172
|
+
case structs_2.CancelTradingOrderEvent.$typeName:
|
|
173
|
+
var base_token = (0, constants_1.typeArgToToken)(json.base_token.name);
|
|
174
|
+
var collateral_token = (0, constants_1.typeArgToToken)(json.collateral_token.name);
|
|
175
|
+
var market = "".concat(base_token, "/USD");
|
|
176
|
+
var related = events.findLast(function (e) { return e.order_id === json.order_id && e.market === market; });
|
|
177
|
+
var e = {
|
|
178
|
+
action: "Cancel Order",
|
|
179
|
+
order_id: json.order_id,
|
|
180
|
+
position_id: undefined,
|
|
181
|
+
market: market,
|
|
182
|
+
side: related === null || related === void 0 ? void 0 : related.side,
|
|
183
|
+
order_type: related === null || related === void 0 ? void 0 : related.order_type,
|
|
184
|
+
status: "Canceled",
|
|
185
|
+
size: related === null || related === void 0 ? void 0 : related.size,
|
|
186
|
+
base_token: base_token,
|
|
187
|
+
collateral: Number(json.released_collateral_amount) / Math.pow(10, (0, constants_1.assetToDecimal)(collateral_token)), // WARNING: fixed decimal
|
|
188
|
+
collateral_token: collateral_token,
|
|
189
|
+
price: Number(json.trigger_price) / Math.pow(10, 8), // WARNING: fixed decimal
|
|
190
|
+
realized_pnl: undefined,
|
|
191
|
+
timestamp: timestamp,
|
|
192
|
+
tx_digest: tx_digest,
|
|
193
|
+
};
|
|
194
|
+
events.push(e);
|
|
195
|
+
break;
|
|
196
|
+
case structs_2.IncreaseCollateralEvent.$typeName:
|
|
197
|
+
case structs_2.ReleaseCollateralEvent.$typeName:
|
|
198
|
+
var base_token = (0, constants_1.typeArgToToken)(json.base_token.name);
|
|
199
|
+
var collateral_token = (0, constants_1.typeArgToToken)(json.collateral_token.name);
|
|
200
|
+
var market = "".concat(base_token, "/USD");
|
|
201
|
+
var related = events.findLast(function (e) { return e.position_id === json.position_id && e.market === market; });
|
|
202
|
+
var collateral;
|
|
203
|
+
if (json.increased_collateral_amount) {
|
|
204
|
+
collateral = Number(json.increased_collateral_amount);
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
collateral = Number(json.released_collateral_amount) * -1;
|
|
208
|
+
}
|
|
209
|
+
var e = {
|
|
210
|
+
action: "Modify Collateral",
|
|
211
|
+
order_id: undefined,
|
|
212
|
+
position_id: json.position_id,
|
|
213
|
+
market: market,
|
|
214
|
+
side: related === null || related === void 0 ? void 0 : related.side,
|
|
215
|
+
order_type: related === null || related === void 0 ? void 0 : related.order_type,
|
|
216
|
+
status: "Filled",
|
|
217
|
+
size: related === null || related === void 0 ? void 0 : related.size,
|
|
218
|
+
base_token: base_token,
|
|
219
|
+
collateral: collateral / Math.pow(10, (0, constants_1.assetToDecimal)(collateral_token)), // WARNING: fixed decimal
|
|
220
|
+
collateral_token: collateral_token,
|
|
221
|
+
price: related === null || related === void 0 ? void 0 : related.price,
|
|
222
|
+
realized_pnl: undefined,
|
|
223
|
+
timestamp: timestamp,
|
|
224
|
+
tx_digest: tx_digest,
|
|
225
|
+
};
|
|
226
|
+
events.push(e);
|
|
227
|
+
break;
|
|
228
|
+
case structs_3.SwapEvent.$typeName:
|
|
229
|
+
var from_token = (0, constants_1.typeArgToToken)(json.from_token_type.name);
|
|
230
|
+
var to_token = (0, constants_1.typeArgToToken)(json.to_token_type.name);
|
|
231
|
+
var from_price = Number(json.oracle_price_from_token);
|
|
232
|
+
var to_price = Number(json.oracle_price_to_token);
|
|
233
|
+
var e = {
|
|
234
|
+
action: "Swap",
|
|
235
|
+
order_id: undefined,
|
|
236
|
+
position_id: undefined,
|
|
237
|
+
market: "".concat(from_token, "/").concat(to_token),
|
|
238
|
+
side: undefined,
|
|
239
|
+
order_type: "Market",
|
|
240
|
+
status: "Filled",
|
|
241
|
+
size: Number(json.actual_to_amount) / Math.pow(10, (0, constants_1.assetToDecimal)(to_token)),
|
|
242
|
+
base_token: to_token,
|
|
243
|
+
collateral: Number(json.from_amount) / Math.pow(10, (0, constants_1.assetToDecimal)(from_token)),
|
|
244
|
+
collateral_token: from_token,
|
|
245
|
+
price: from_price / to_price,
|
|
246
|
+
realized_pnl: -Number(json.fee_amount_usd) / Math.pow(10, 6),
|
|
247
|
+
timestamp: timestamp,
|
|
248
|
+
tx_digest: tx_digest,
|
|
249
|
+
};
|
|
250
|
+
events.push(e);
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
// console.log(events);
|
|
255
|
+
return [2 /*return*/, events];
|
|
261
256
|
});
|
|
262
257
|
});
|
|
263
258
|
}
|
|
264
259
|
function getGraphQLEvents(module_1, sender_1) {
|
|
265
260
|
return __awaiter(this, arguments, void 0, function (module, sender, beforeCursor) {
|
|
266
|
-
var graphql, response, data;
|
|
261
|
+
var before, graphql, response, data;
|
|
267
262
|
if (beforeCursor === void 0) { beforeCursor = null; }
|
|
268
263
|
return __generator(this, function (_a) {
|
|
269
264
|
switch (_a.label) {
|
|
270
265
|
case 0:
|
|
266
|
+
before = "";
|
|
267
|
+
if (beforeCursor) {
|
|
268
|
+
before = "before: \"".concat(beforeCursor, "\",");
|
|
269
|
+
}
|
|
271
270
|
graphql = JSON.stringify({
|
|
272
|
-
query: "\n {\n events(\n last: 50,\n
|
|
271
|
+
query: "\n {\n events(\n last: 50,\n ".concat(before, "\n filter: {\n eventType: \"").concat(module, "\",\n sender: \"").concat(sender, "\"\n }\n ) {\n pageInfo {\n hasPreviousPage\n hasNextPage\n startCursor\n endCursor\n }\n edges { cursor }\n nodes {\n transactionBlock { digest }\n sendingModule {\n name\n package { digest }\n }\n sender { address }\n timestamp\n contents {\n type { repr }\n json\n }\n }\n }}\n "),
|
|
273
272
|
});
|
|
274
273
|
return [4 /*yield*/, fetch("https://sui-testnet.mystenlabs.com/graphql", {
|
|
275
274
|
method: "POST",
|
|
@@ -289,3 +288,72 @@ function getGraphQLEvents(module_1, sender_1) {
|
|
|
289
288
|
});
|
|
290
289
|
});
|
|
291
290
|
}
|
|
291
|
+
function getLiquidateFromSentio(userAddress, startTimestamp) {
|
|
292
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
293
|
+
var datas;
|
|
294
|
+
return __generator(this, function (_a) {
|
|
295
|
+
switch (_a.label) {
|
|
296
|
+
case 0: return [4 /*yield*/, (0, sentio_1.getFromSentio)("Liquidate", userAddress, startTimestamp.toString())];
|
|
297
|
+
case 1:
|
|
298
|
+
datas = _a.sent();
|
|
299
|
+
// console.log(datas);
|
|
300
|
+
return [2 /*return*/, datas.map(function (x) {
|
|
301
|
+
var collateral = Number(x.liquidator_fee) + Number(x.value_for_lp_pool);
|
|
302
|
+
var txHistory = {
|
|
303
|
+
action: "Liquidation",
|
|
304
|
+
order_id: x.order_id,
|
|
305
|
+
position_id: x.position_id,
|
|
306
|
+
market: "".concat(x.trading_token, "/USD"),
|
|
307
|
+
side: undefined,
|
|
308
|
+
order_type: "Market",
|
|
309
|
+
status: "Filled",
|
|
310
|
+
size: undefined,
|
|
311
|
+
base_token: x.trading_token,
|
|
312
|
+
collateral: collateral,
|
|
313
|
+
collateral_token: x.collateral_token,
|
|
314
|
+
price: x.trading_price,
|
|
315
|
+
realized_pnl: collateral * Number(x.collateral_price),
|
|
316
|
+
timestamp: x.timestamp,
|
|
317
|
+
tx_digest: x.transaction_hash,
|
|
318
|
+
};
|
|
319
|
+
return txHistory;
|
|
320
|
+
})];
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
function getOrderMatchFromSentio(userAddress, startTimestamp) {
|
|
326
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
327
|
+
var datas;
|
|
328
|
+
return __generator(this, function (_a) {
|
|
329
|
+
switch (_a.label) {
|
|
330
|
+
case 0: return [4 /*yield*/, (0, sentio_1.getFromSentio)("OrderFilled", userAddress, startTimestamp.toString())];
|
|
331
|
+
case 1:
|
|
332
|
+
datas = _a.sent();
|
|
333
|
+
// console.log(datas);
|
|
334
|
+
return [2 /*return*/, datas.map(function (x) {
|
|
335
|
+
var realized_pnl = ((x.realized_amount - x.realized_trading_fee) * x.realized_fee_in_usd) / x.realized_trading_fee;
|
|
336
|
+
var txHistory = {
|
|
337
|
+
action: x.order_type == "Open" ? "Order Filled (Open Position)" : "Order Filled (Close Position)",
|
|
338
|
+
order_id: x.order_id,
|
|
339
|
+
position_id: x.position_id,
|
|
340
|
+
market: "".concat(x.trading_token, "/USD"),
|
|
341
|
+
side: x.side,
|
|
342
|
+
order_type: undefined,
|
|
343
|
+
status: "Filled",
|
|
344
|
+
size: x.filled_size,
|
|
345
|
+
base_token: x.trading_token,
|
|
346
|
+
collateral: undefined,
|
|
347
|
+
collateral_token: x.collateral_token,
|
|
348
|
+
price: x.filled_price,
|
|
349
|
+
realized_pnl: realized_pnl,
|
|
350
|
+
timestamp: x.timestamp,
|
|
351
|
+
tx_digest: x.transaction_hash,
|
|
352
|
+
};
|
|
353
|
+
return txHistory;
|
|
354
|
+
})];
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
// getOrderMatchFromSentio("0x95f26ce574fc9ace2608807648d99a4dce17f1be8964613d5b972edc82849e9e", 0);
|