@typus/typus-perp-sdk 1.0.9 → 1.0.11

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.
@@ -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" ? "" : "0xcab4ab2f01471de25e48b6677dda9aeb6ccce9a36a07e9f5f60ccf275baed3a8";
6
+ exports.PUBLISHED_AT = index_1.NETWORK == "MAINNET" ? "" : "0x16075533726388ef93a1d036fe192a9a367ce6f80e3cb4d462019a8b5c8bbe0e";
7
7
  exports.PKG_V1 = index_1.NETWORK == "MAINNET" ? "" : "0x7c19f81d9d411e78305d7af8dad25317c56bb449fede8a78b6021232478f0509";
@@ -1,2 +1,27 @@
1
- export declare function getUserHistory(sender: string): Promise<void>;
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 {};
@@ -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.getUserHistory = getUserHistory;
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
- function getUserHistory(sender) {
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 raw_events, pageInfo, events;
61
+ var events;
60
62
  return __generator(this, function (_a) {
61
- switch (_a.label) {
62
- case 0: return [4 /*yield*/, getGraphQLEvents(index_1.PKG_V1, sender)];
63
- case 1:
64
- raw_events = _a.sent();
65
- pageInfo = raw_events.pageInfo;
66
- console.log(pageInfo);
67
- events = [];
68
- raw_events.nodes.forEach(function (event) {
69
- var _a, _b;
70
- var type = event.contents.type.repr;
71
- if (type.endsWith("PythPrice")) {
72
- return;
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
- var json = event.contents.json;
75
- var timestamp = event.timestamp;
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
- console.log(events);
259
- return [2 /*return*/];
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 before: ".concat(beforeCursor ? "\"".concat(beforeCursor, "\"") : null, ",\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 "),
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);
@@ -64,31 +64,37 @@ var constants_1 = require("@typus/typus-sdk/dist/src/constants");
64
64
  function createTradingOrder(config, tx, pythClient, input) {
65
65
  return __awaiter(this, void 0, void 0, function () {
66
66
  var TOKEN, BASE_TOKEN, cToken, baseToken, coin, destination;
67
- var _a, _b, _c;
68
- return __generator(this, function (_d) {
69
- switch (_d.label) {
67
+ var _a, _b, _c, _d;
68
+ return __generator(this, function (_e) {
69
+ switch (_e.label) {
70
70
  case 0:
71
71
  TOKEN = input.cToken;
72
72
  BASE_TOKEN = input.tradingToken;
73
73
  return [4 /*yield*/, (0, utils_1.updatePyth)(pythClient, tx, [TOKEN, BASE_TOKEN])];
74
74
  case 1:
75
- _d.sent();
75
+ _e.sent();
76
76
  cToken = constants_1.tokenType[__1.NETWORK][TOKEN];
77
77
  baseToken = constants_1.tokenType[__1.NETWORK][BASE_TOKEN];
78
78
  if (TOKEN == "SUI") {
79
- _a = __read(tx.splitCoins(tx.gas, [input.amount]), 1), coin = _a[0];
79
+ if (input.coins.length == 0) {
80
+ // support zero coin input for closing position
81
+ _a = __read(zeroCoin(tx, [cToken]), 1), coin = _a[0];
82
+ }
83
+ else {
84
+ _b = __read(tx.splitCoins(tx.gas, [input.amount]), 1), coin = _b[0];
85
+ }
80
86
  }
81
87
  else {
82
88
  if (input.coins.length == 0) {
83
89
  // support zero coin input for closing position
84
- _b = __read(zeroCoin(tx, [cToken]), 1), coin = _b[0];
90
+ _c = __read(zeroCoin(tx, [cToken]), 1), coin = _c[0];
85
91
  }
86
92
  else {
87
93
  destination = input.coins.pop();
88
94
  if (input.coins.length > 0) {
89
95
  tx.mergeCoins(destination, input.coins);
90
96
  }
91
- _c = __read(tx.splitCoins(destination, [input.amount]), 1), coin = _c[0];
97
+ _d = __read(tx.splitCoins(destination, [input.amount]), 1), coin = _d[0];
92
98
  }
93
99
  }
94
100
  (0, functions_1.createTradingOrder)(tx, [cToken, baseToken], {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typus/typus-perp-sdk",
3
- "version": "1.0.9",
3
+ "version": "1.0.11",
4
4
  "repository": "https://github.com/Typus-Lab/typus-perp-sdk.git",
5
5
  "author": "Typus",
6
6
  "description": "typus perp sdk",