@sogni-ai/sogni-client 0.0.8 → 0.0.9
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/Account/CurrentAccount.d.ts +26 -0
- package/dist/Account/CurrentAccount.js +76 -0
- package/dist/Account/CurrentAccount.js.map +1 -0
- package/dist/Account/index.d.ts +31 -0
- package/dist/Account/index.js +172 -0
- package/dist/Account/index.js.map +1 -0
- package/dist/Account/types.d.ts +57 -0
- package/dist/Account/types.js +3 -0
- package/dist/Account/types.js.map +1 -0
- package/dist/ApiClient/ApiClient.d.ts +42 -0
- package/dist/ApiClient/ApiClient.js +79 -0
- package/dist/ApiClient/ApiClient.js.map +1 -0
- package/dist/ApiClient/WebSocketClient/ErrorCode.d.ts +7 -0
- package/dist/ApiClient/WebSocketClient/ErrorCode.js +18 -0
- package/dist/ApiClient/WebSocketClient/ErrorCode.js.map +1 -0
- package/dist/ApiClient/WebSocketClient/events.d.ts +83 -0
- package/dist/ApiClient/WebSocketClient/events.js +3 -0
- package/dist/ApiClient/WebSocketClient/events.js.map +1 -0
- package/dist/ApiClient/WebSocketClient/index.d.ts +28 -0
- package/dist/ApiClient/WebSocketClient/index.js +166 -0
- package/dist/ApiClient/WebSocketClient/index.js.map +1 -0
- package/dist/ApiClient/WebSocketClient/messages.d.ts +5 -0
- package/dist/ApiClient/WebSocketClient/messages.js +3 -0
- package/dist/ApiClient/WebSocketClient/messages.js.map +1 -0
- package/dist/ApiClient/WebSocketClient/types.d.ts +1 -0
- package/dist/ApiClient/WebSocketClient/types.js +3 -0
- package/dist/ApiClient/WebSocketClient/types.js.map +1 -0
- package/dist/ApiClient/events.d.ts +19 -0
- package/dist/ApiClient/events.js +3 -0
- package/dist/ApiClient/events.js.map +1 -0
- package/dist/ApiGroup.d.ts +16 -0
- package/dist/ApiGroup.js +16 -0
- package/dist/ApiGroup.js.map +1 -0
- package/dist/Projects/Job.d.ts +31 -0
- package/dist/Projects/Job.js +52 -0
- package/dist/Projects/Job.js.map +1 -0
- package/dist/Projects/Project.d.ts +50 -0
- package/dist/Projects/Project.js +94 -0
- package/dist/Projects/Project.js.map +1 -0
- package/dist/Projects/createJobRequestMessage.d.ts +63 -0
- package/dist/Projects/createJobRequestMessage.js +68 -0
- package/dist/Projects/createJobRequestMessage.js.map +1 -0
- package/dist/Projects/index.d.ts +41 -0
- package/dist/Projects/index.js +253 -0
- package/dist/Projects/index.js.map +1 -0
- package/dist/Projects/models.json +8906 -0
- package/dist/Projects/types/EstimationResponse.d.ts +40 -0
- package/dist/Projects/types/EstimationResponse.js +3 -0
- package/dist/Projects/types/EstimationResponse.js.map +1 -0
- package/dist/Projects/types/events.d.ts +51 -0
- package/dist/Projects/types/events.js +3 -0
- package/dist/Projects/types/events.js.map +1 -0
- package/dist/Projects/types/index.d.ts +58 -0
- package/dist/Projects/types/index.js +3 -0
- package/dist/Projects/types/index.js.map +1 -0
- package/dist/Stats/index.d.ts +6 -0
- package/dist/Stats/index.js +25 -0
- package/dist/Stats/index.js.map +1 -0
- package/dist/Stats/types.d.ts +19 -0
- package/dist/Stats/types.js +3 -0
- package/dist/Stats/types.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/DataEntity.d.ts +18 -0
- package/dist/lib/DataEntity.js +31 -0
- package/dist/lib/DataEntity.js.map +1 -0
- package/dist/lib/EIP712Helper.d.ts +13 -0
- package/dist/lib/EIP712Helper.js +39 -0
- package/dist/lib/EIP712Helper.js.map +1 -0
- package/dist/lib/RestClient.d.ts +18 -0
- package/dist/lib/RestClient.js +69 -0
- package/dist/lib/RestClient.js.map +1 -0
- package/dist/lib/TypedEventEmitter.d.ts +34 -0
- package/dist/lib/TypedEventEmitter.js +58 -0
- package/dist/lib/TypedEventEmitter.js.map +1 -0
- package/dist/lib/base64.d.ts +2 -0
- package/dist/lib/base64.js +15 -0
- package/dist/lib/base64.js.map +1 -0
- package/dist/lib/isNodejs.d.ts +2 -0
- package/dist/lib/isNodejs.js +5 -0
- package/dist/lib/isNodejs.js.map +1 -0
- package/dist/types/ErrorData.d.ts +5 -0
- package/dist/types/ErrorData.js +3 -0
- package/dist/types/ErrorData.js.map +1 -0
- package/dist/types/json.d.ts +5 -0
- package/dist/types/json.js +3 -0
- package/dist/types/json.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import DataEntity from '../lib/DataEntity';
|
|
2
|
+
import { BalanceData } from './types';
|
|
3
|
+
import { SupernetType } from '../ApiClient/WebSocketClient/types';
|
|
4
|
+
interface AccountData {
|
|
5
|
+
token: string | null;
|
|
6
|
+
networkStatus: 'connected' | 'disconnected' | 'connecting';
|
|
7
|
+
network: SupernetType | null;
|
|
8
|
+
balance: BalanceData;
|
|
9
|
+
walletAddress?: string;
|
|
10
|
+
expiresAt?: Date;
|
|
11
|
+
username?: string;
|
|
12
|
+
}
|
|
13
|
+
declare class CurrentAccount extends DataEntity<AccountData> {
|
|
14
|
+
constructor(data?: AccountData);
|
|
15
|
+
_update<K extends keyof AccountData>(delta: Partial<AccountData>): void;
|
|
16
|
+
_clear(): void;
|
|
17
|
+
get isAuthenicated(): boolean;
|
|
18
|
+
get networkStatus(): "connected" | "disconnected" | "connecting";
|
|
19
|
+
get network(): SupernetType | null;
|
|
20
|
+
get balance(): BalanceData;
|
|
21
|
+
get walletAddress(): string | undefined;
|
|
22
|
+
get expiresAt(): Date | undefined;
|
|
23
|
+
get username(): string | undefined;
|
|
24
|
+
get token(): string | null;
|
|
25
|
+
}
|
|
26
|
+
export default CurrentAccount;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const DataEntity_1 = __importDefault(require("../lib/DataEntity"));
|
|
7
|
+
const jwt_decode_1 = require("jwt-decode");
|
|
8
|
+
function getDefaults() {
|
|
9
|
+
return {
|
|
10
|
+
token: null,
|
|
11
|
+
networkStatus: 'disconnected',
|
|
12
|
+
network: null,
|
|
13
|
+
balance: {
|
|
14
|
+
credit: '0',
|
|
15
|
+
debit: '0',
|
|
16
|
+
net: '0',
|
|
17
|
+
settled: '0'
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function decodeToken(token) {
|
|
22
|
+
const data = (0, jwt_decode_1.jwtDecode)(token);
|
|
23
|
+
return {
|
|
24
|
+
walletAddress: data.addr,
|
|
25
|
+
expiresAt: new Date(data.exp * 1000)
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
class CurrentAccount extends DataEntity_1.default {
|
|
29
|
+
constructor(data) {
|
|
30
|
+
super(data || getDefaults());
|
|
31
|
+
}
|
|
32
|
+
_update(delta) {
|
|
33
|
+
this.data = Object.assign(Object.assign({}, this.data), delta);
|
|
34
|
+
const keys = Object.keys(delta);
|
|
35
|
+
if (delta.hasOwnProperty('token')) {
|
|
36
|
+
if (delta.token) {
|
|
37
|
+
Object.assign(this.data, decodeToken(delta.token));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
delete this.data.walletAddress;
|
|
41
|
+
delete this.data.expiresAt;
|
|
42
|
+
}
|
|
43
|
+
keys.push('walletAddress', 'expiresAt');
|
|
44
|
+
}
|
|
45
|
+
this.emit('updated', keys);
|
|
46
|
+
}
|
|
47
|
+
_clear() {
|
|
48
|
+
this._update(getDefaults());
|
|
49
|
+
}
|
|
50
|
+
get isAuthenicated() {
|
|
51
|
+
return !!this.data.token && !!this.data.expiresAt && this.data.expiresAt > new Date();
|
|
52
|
+
}
|
|
53
|
+
get networkStatus() {
|
|
54
|
+
return this.data.networkStatus;
|
|
55
|
+
}
|
|
56
|
+
get network() {
|
|
57
|
+
return this.data.network;
|
|
58
|
+
}
|
|
59
|
+
get balance() {
|
|
60
|
+
return this.data.balance;
|
|
61
|
+
}
|
|
62
|
+
get walletAddress() {
|
|
63
|
+
return this.data.walletAddress;
|
|
64
|
+
}
|
|
65
|
+
get expiresAt() {
|
|
66
|
+
return this.data.expiresAt;
|
|
67
|
+
}
|
|
68
|
+
get username() {
|
|
69
|
+
return this.data.username;
|
|
70
|
+
}
|
|
71
|
+
get token() {
|
|
72
|
+
return this.data.token;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.default = CurrentAccount;
|
|
76
|
+
//# sourceMappingURL=CurrentAccount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CurrentAccount.js","sourceRoot":"","sources":["../../src/Account/CurrentAccount.ts"],"names":[],"mappings":";;;;;AAAA,mEAA2C;AAE3C,2CAAuC;AAavC,SAAS,WAAW;IAClB,OAAO;QACL,KAAK,EAAE,IAAI;QACX,aAAa,EAAE,cAAc;QAC7B,OAAO,EAAE,IAAI;QACb,OAAO,EAAE;YACP,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,GAAG;YACV,GAAG,EAAE,GAAG;YACR,OAAO,EAAE,GAAG;SACb;KACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,IAAI,GAAG,IAAA,sBAAS,EAA0D,KAAK,CAAC,CAAC;IACvF,OAAO;QACL,aAAa,EAAE,IAAI,CAAC,IAAI;QACxB,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,MAAM,cAAe,SAAQ,oBAAuB;IAClD,YAAY,IAAkB;QAC5B,KAAK,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,CAA8B,KAA2B;QAC9D,IAAI,CAAC,IAAI,mCAAQ,IAAI,CAAC,IAAI,GAAM,KAA8B,CAAE,CAAC;QACjE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IACxF,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;IACjC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;IACjC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IAC7B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC;CACF;AAED,kBAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { AccountCreateData, BalanceData, LoginData, TxHistoryEntry, TxHistoryParams } from './types';
|
|
2
|
+
import ApiGroup, { ApiConfig } from '../ApiGroup';
|
|
3
|
+
import { Wallet } from 'ethers';
|
|
4
|
+
import { ApiReponse } from '../ApiClient/ApiClient';
|
|
5
|
+
import CurrentAccount from './CurrentAccount';
|
|
6
|
+
import { SupernetType } from '../ApiClient/WebSocketClient/types';
|
|
7
|
+
declare class AccountApi extends ApiGroup {
|
|
8
|
+
readonly currentAccount: CurrentAccount;
|
|
9
|
+
constructor(config: ApiConfig);
|
|
10
|
+
private handleBalanceUpdate;
|
|
11
|
+
private handleServerConnected;
|
|
12
|
+
private handleServerDisconnected;
|
|
13
|
+
getNonce(walletAddress: string): Promise<string>;
|
|
14
|
+
getWallet(username: string, password: string): Wallet;
|
|
15
|
+
create(username: string, email: string, password: string, subscribe?: boolean, referralCode?: string): Promise<AccountCreateData>;
|
|
16
|
+
setToken(username: string, token: string): void;
|
|
17
|
+
login(username: string, password: string): Promise<LoginData>;
|
|
18
|
+
logout(): Promise<void>;
|
|
19
|
+
refreshBalance(): Promise<BalanceData>;
|
|
20
|
+
walletBalance(walletAddress: string): Promise<{
|
|
21
|
+
token: string;
|
|
22
|
+
ether: string;
|
|
23
|
+
}>;
|
|
24
|
+
validateUsername(username: string): Promise<import("../ApiClient/ApiClient").ApiErrorResponse | ApiReponse<undefined>>;
|
|
25
|
+
switchNetwork(network: SupernetType): Promise<void>;
|
|
26
|
+
transactionHistory(params: TxHistoryParams): Promise<{
|
|
27
|
+
entries: TxHistoryEntry[];
|
|
28
|
+
next: TxHistoryParams;
|
|
29
|
+
}>;
|
|
30
|
+
}
|
|
31
|
+
export default AccountApi;
|
|
@@ -0,0 +1,172 @@
|
|
|
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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const ApiGroup_1 = __importDefault(require("../ApiGroup"));
|
|
16
|
+
const ethers_1 = require("ethers");
|
|
17
|
+
const ApiClient_1 = require("../ApiClient/ApiClient");
|
|
18
|
+
const CurrentAccount_1 = __importDefault(require("./CurrentAccount"));
|
|
19
|
+
class AccountApi extends ApiGroup_1.default {
|
|
20
|
+
constructor(config) {
|
|
21
|
+
super(config);
|
|
22
|
+
this.currentAccount = new CurrentAccount_1.default();
|
|
23
|
+
this.client.socket.on('balanceUpdate', this.handleBalanceUpdate.bind(this));
|
|
24
|
+
this.client.on('connected', this.handleServerConnected.bind(this));
|
|
25
|
+
this.client.on('disconnected', this.handleServerDisconnected.bind(this));
|
|
26
|
+
}
|
|
27
|
+
handleBalanceUpdate(data) {
|
|
28
|
+
this.currentAccount._update({ balance: data });
|
|
29
|
+
}
|
|
30
|
+
handleServerConnected({ network }) {
|
|
31
|
+
this.currentAccount._update({
|
|
32
|
+
networkStatus: 'connected',
|
|
33
|
+
network
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
handleServerDisconnected() {
|
|
37
|
+
this.currentAccount._clear();
|
|
38
|
+
}
|
|
39
|
+
getNonce(walletAddress) {
|
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
const res = yield this.client.rest.post('/v1/account/nonce', {
|
|
42
|
+
walletAddress
|
|
43
|
+
});
|
|
44
|
+
return res.data.nonce;
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
getWallet(username, password) {
|
|
48
|
+
const pwd = (0, ethers_1.toUtf8Bytes)(username.toLowerCase() + password);
|
|
49
|
+
const salt = (0, ethers_1.toUtf8Bytes)('sogni-salt-value');
|
|
50
|
+
const pkey = (0, ethers_1.pbkdf2)(pwd, salt, 10000, 32, 'sha256');
|
|
51
|
+
return new ethers_1.Wallet(pkey, this.provider);
|
|
52
|
+
}
|
|
53
|
+
create(username_1, email_1, password_1) {
|
|
54
|
+
return __awaiter(this, arguments, void 0, function* (username, email, password, subscribe = false, referralCode) {
|
|
55
|
+
const wallet = this.getWallet(username, password);
|
|
56
|
+
const nonce = yield this.getNonce(wallet.address);
|
|
57
|
+
const payload = {
|
|
58
|
+
appid: this.client.appId,
|
|
59
|
+
username,
|
|
60
|
+
email,
|
|
61
|
+
subscribe: subscribe ? 1 : 0,
|
|
62
|
+
walletAddress: wallet.address
|
|
63
|
+
};
|
|
64
|
+
const signature = yield this.eip712.signTypedData(wallet, 'signup', Object.assign(Object.assign({}, payload), { nonce }));
|
|
65
|
+
const res = yield this.client.rest.post('/v1/account/create', Object.assign(Object.assign({}, payload), { referralCode,
|
|
66
|
+
signature }));
|
|
67
|
+
this.setToken(username, res.data.token);
|
|
68
|
+
return res.data;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
setToken(username, token) {
|
|
72
|
+
this.client.authenticate(token);
|
|
73
|
+
this.currentAccount._update({
|
|
74
|
+
token,
|
|
75
|
+
username
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
login(username, password) {
|
|
79
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
80
|
+
const wallet = this.getWallet(username, password);
|
|
81
|
+
const nonce = yield this.getNonce(wallet.address);
|
|
82
|
+
const signature = yield this.eip712.signTypedData(wallet, 'authentication', {
|
|
83
|
+
walletAddress: wallet.address,
|
|
84
|
+
nonce
|
|
85
|
+
});
|
|
86
|
+
const res = yield this.client.rest.post('/v1/account/login', {
|
|
87
|
+
walletAddress: wallet.address,
|
|
88
|
+
signature
|
|
89
|
+
});
|
|
90
|
+
this.setToken(username, res.data.token);
|
|
91
|
+
return res.data;
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
logout() {
|
|
95
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
96
|
+
this.client.rest.post('/v1/account/logout').catch((e) => {
|
|
97
|
+
console.error('Failed to logout', e);
|
|
98
|
+
});
|
|
99
|
+
this.client.removeAuth();
|
|
100
|
+
this.currentAccount._clear();
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
refreshBalance() {
|
|
104
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
105
|
+
const res = yield this.client.rest.get('/v1/account/balance');
|
|
106
|
+
this.currentAccount._update({ balance: res.data });
|
|
107
|
+
return res.data;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
walletBalance(walletAddress) {
|
|
111
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
112
|
+
const res = yield this.client.rest.get('/v1/balance', {
|
|
113
|
+
walletAddress
|
|
114
|
+
});
|
|
115
|
+
return res.data;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
validateUsername(username) {
|
|
119
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
120
|
+
try {
|
|
121
|
+
return yield this.client.rest.post('/v1/account/username/validate', {
|
|
122
|
+
username
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
if (e instanceof ApiClient_1.ApiError) {
|
|
127
|
+
// Username is already taken
|
|
128
|
+
if (e.payload.errorCode === 108) {
|
|
129
|
+
return e.payload;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
throw e;
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
switchNetwork(network) {
|
|
137
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
138
|
+
this.currentAccount._update({
|
|
139
|
+
networkStatus: 'connecting',
|
|
140
|
+
network: null
|
|
141
|
+
});
|
|
142
|
+
this.client.socket.switchNetwork(network);
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
transactionHistory(params) {
|
|
146
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
+
const res = yield this.client.rest.get('/v1/transactions/list', {
|
|
148
|
+
status: params.status,
|
|
149
|
+
address: params.address,
|
|
150
|
+
limit: params.limit.toString()
|
|
151
|
+
});
|
|
152
|
+
return {
|
|
153
|
+
entries: res.data.transactions.map((tx) => ({
|
|
154
|
+
id: tx.id,
|
|
155
|
+
address: tx.address,
|
|
156
|
+
createTime: new Date(tx.createTime),
|
|
157
|
+
updateTime: new Date(tx.updateTime),
|
|
158
|
+
status: tx.status,
|
|
159
|
+
role: tx.role,
|
|
160
|
+
amount: tx.amount,
|
|
161
|
+
description: tx.description,
|
|
162
|
+
source: tx.source,
|
|
163
|
+
endTime: new Date(tx.endTime),
|
|
164
|
+
type: tx.type
|
|
165
|
+
})),
|
|
166
|
+
next: Object.assign(Object.assign({}, params), { offset: res.data.next })
|
|
167
|
+
};
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
exports.default = AccountApi;
|
|
172
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Account/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export interface Nonce {
|
|
2
|
+
nonce: string;
|
|
3
|
+
}
|
|
4
|
+
export interface AccountCreateData {
|
|
5
|
+
token: string;
|
|
6
|
+
}
|
|
7
|
+
export interface LoginData {
|
|
8
|
+
token: string;
|
|
9
|
+
username: string;
|
|
10
|
+
}
|
|
11
|
+
export interface BalanceData {
|
|
12
|
+
settled: string;
|
|
13
|
+
credit: string;
|
|
14
|
+
debit: string;
|
|
15
|
+
net: string;
|
|
16
|
+
}
|
|
17
|
+
export interface TxHistoryParams {
|
|
18
|
+
status: 'completed';
|
|
19
|
+
address: string;
|
|
20
|
+
limit: number;
|
|
21
|
+
offset?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface TxHistoryData {
|
|
24
|
+
transactions: TxRaw[];
|
|
25
|
+
next: number;
|
|
26
|
+
}
|
|
27
|
+
export interface TxRaw {
|
|
28
|
+
_id: string;
|
|
29
|
+
id: string;
|
|
30
|
+
SID: number;
|
|
31
|
+
address: string;
|
|
32
|
+
createTime: number;
|
|
33
|
+
updateTime: number;
|
|
34
|
+
status: 'completed';
|
|
35
|
+
role: 'artist' | 'worker';
|
|
36
|
+
clientSID: number;
|
|
37
|
+
addressSID: number;
|
|
38
|
+
amount: number;
|
|
39
|
+
description: string;
|
|
40
|
+
source: 'project' | string;
|
|
41
|
+
sourceSID: string;
|
|
42
|
+
endTime: number;
|
|
43
|
+
type: 'debit' | string;
|
|
44
|
+
}
|
|
45
|
+
export interface TxHistoryEntry {
|
|
46
|
+
id: string;
|
|
47
|
+
address: string;
|
|
48
|
+
createTime: Date;
|
|
49
|
+
updateTime: Date;
|
|
50
|
+
status: 'completed';
|
|
51
|
+
role: 'artist' | 'worker';
|
|
52
|
+
amount: number;
|
|
53
|
+
description: string;
|
|
54
|
+
source: 'project' | string;
|
|
55
|
+
endTime: Date;
|
|
56
|
+
type: 'debit' | string;
|
|
57
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/Account/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import RestClient from '../lib/RestClient';
|
|
2
|
+
import WebSocketClient from './WebSocketClient';
|
|
3
|
+
import TypedEventEmitter from '../lib/TypedEventEmitter';
|
|
4
|
+
import { ApiClientEvents } from './events';
|
|
5
|
+
import { ServerConnectData, ServerDisconnectData } from './WebSocketClient/events';
|
|
6
|
+
import { JSONValue } from '../types/json';
|
|
7
|
+
export interface ApiReponse<D = JSONValue> {
|
|
8
|
+
status: 'success';
|
|
9
|
+
data: D;
|
|
10
|
+
}
|
|
11
|
+
export interface ApiErrorResponse {
|
|
12
|
+
status: 'error';
|
|
13
|
+
message: string;
|
|
14
|
+
errorCode: number;
|
|
15
|
+
}
|
|
16
|
+
export declare class ApiError extends Error {
|
|
17
|
+
status: number;
|
|
18
|
+
payload: ApiErrorResponse;
|
|
19
|
+
constructor(status: number, payload: ApiErrorResponse);
|
|
20
|
+
}
|
|
21
|
+
interface AuthData {
|
|
22
|
+
token: string;
|
|
23
|
+
walletAddress: string;
|
|
24
|
+
expiresAt: Date;
|
|
25
|
+
}
|
|
26
|
+
declare class ApiClient extends TypedEventEmitter<ApiClientEvents> {
|
|
27
|
+
readonly appId: string;
|
|
28
|
+
private _rest;
|
|
29
|
+
private _socket;
|
|
30
|
+
private _auth;
|
|
31
|
+
private _reconnectAttempts;
|
|
32
|
+
constructor(baseUrl: string, socketUrl: string, appId: string);
|
|
33
|
+
get isAuthenticated(): boolean;
|
|
34
|
+
get auth(): AuthData | null;
|
|
35
|
+
get socket(): WebSocketClient;
|
|
36
|
+
get rest(): RestClient;
|
|
37
|
+
authenticate(token: string): void;
|
|
38
|
+
removeAuth(): void;
|
|
39
|
+
handleSocketConnect({ network }: ServerConnectData): void;
|
|
40
|
+
handleSocketDisconnect(data: ServerDisconnectData): void;
|
|
41
|
+
}
|
|
42
|
+
export default ApiClient;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ApiError = void 0;
|
|
7
|
+
const RestClient_1 = __importDefault(require("../lib/RestClient"));
|
|
8
|
+
const WebSocketClient_1 = __importDefault(require("./WebSocketClient"));
|
|
9
|
+
const jwt_decode_1 = require("jwt-decode");
|
|
10
|
+
const TypedEventEmitter_1 = __importDefault(require("../lib/TypedEventEmitter"));
|
|
11
|
+
const ErrorCode_1 = require("./WebSocketClient/ErrorCode");
|
|
12
|
+
const WS_RECONNECT_ATTEMPTS = 5;
|
|
13
|
+
class ApiError extends Error {
|
|
14
|
+
constructor(status, payload) {
|
|
15
|
+
super(payload.message);
|
|
16
|
+
this.status = status;
|
|
17
|
+
this.payload = payload;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.ApiError = ApiError;
|
|
21
|
+
class ApiClient extends TypedEventEmitter_1.default {
|
|
22
|
+
constructor(baseUrl, socketUrl, appId) {
|
|
23
|
+
super();
|
|
24
|
+
this._auth = null;
|
|
25
|
+
this._reconnectAttempts = WS_RECONNECT_ATTEMPTS;
|
|
26
|
+
this.appId = appId;
|
|
27
|
+
this._rest = new RestClient_1.default(baseUrl);
|
|
28
|
+
this._socket = new WebSocketClient_1.default(socketUrl, appId);
|
|
29
|
+
this._socket.on('connected', this.handleSocketConnect.bind(this));
|
|
30
|
+
this._socket.on('disconnected', this.handleSocketDisconnect.bind(this));
|
|
31
|
+
}
|
|
32
|
+
get isAuthenticated() {
|
|
33
|
+
return !!this._auth && this._auth.expiresAt > new Date();
|
|
34
|
+
}
|
|
35
|
+
get auth() {
|
|
36
|
+
return this._auth && this._auth.expiresAt > new Date() ? this._auth : null;
|
|
37
|
+
}
|
|
38
|
+
get socket() {
|
|
39
|
+
return this._socket;
|
|
40
|
+
}
|
|
41
|
+
get rest() {
|
|
42
|
+
return this._rest;
|
|
43
|
+
}
|
|
44
|
+
authenticate(token) {
|
|
45
|
+
const decoded = (0, jwt_decode_1.jwtDecode)(token);
|
|
46
|
+
this._auth = {
|
|
47
|
+
token,
|
|
48
|
+
walletAddress: decoded.addr,
|
|
49
|
+
expiresAt: new Date(decoded.exp * 1000)
|
|
50
|
+
};
|
|
51
|
+
this.rest.auth = { token };
|
|
52
|
+
this.socket.auth = { token };
|
|
53
|
+
this.socket.connect();
|
|
54
|
+
}
|
|
55
|
+
removeAuth() {
|
|
56
|
+
this._auth = null;
|
|
57
|
+
this.socket.disconnect();
|
|
58
|
+
}
|
|
59
|
+
handleSocketConnect({ network }) {
|
|
60
|
+
this._reconnectAttempts = WS_RECONNECT_ATTEMPTS;
|
|
61
|
+
this.emit('connected', { network });
|
|
62
|
+
}
|
|
63
|
+
handleSocketDisconnect(data) {
|
|
64
|
+
if (!data.code || (0, ErrorCode_1.isAuthProblem)(data.code)) {
|
|
65
|
+
this.removeAuth();
|
|
66
|
+
this.emit('disconnected', data);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (this._reconnectAttempts <= 0) {
|
|
70
|
+
this.emit('disconnected', data);
|
|
71
|
+
this._reconnectAttempts = WS_RECONNECT_ATTEMPTS;
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
this._reconnectAttempts--;
|
|
75
|
+
setTimeout(() => this.socket.connect(), 1000);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.default = ApiClient;
|
|
79
|
+
//# sourceMappingURL=ApiClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiClient.js","sourceRoot":"","sources":["../../src/ApiClient/ApiClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ErrorCode = void 0;
|
|
4
|
+
exports.isAuthProblem = isAuthProblem;
|
|
5
|
+
var ErrorCode;
|
|
6
|
+
(function (ErrorCode) {
|
|
7
|
+
// App ID is blocked from connecting
|
|
8
|
+
ErrorCode[ErrorCode["APP_ID_BLOCKED"] = 4010] = "APP_ID_BLOCKED";
|
|
9
|
+
// New connection from same app-id, server will switch to it
|
|
10
|
+
ErrorCode[ErrorCode["SWITCH_CONNECTION"] = 4015] = "SWITCH_CONNECTION";
|
|
11
|
+
// Authentication error happened
|
|
12
|
+
ErrorCode[ErrorCode["AUTH_ERROR"] = 4021] = "AUTH_ERROR";
|
|
13
|
+
})(ErrorCode || (exports.ErrorCode = ErrorCode = {}));
|
|
14
|
+
function isAuthProblem(code) {
|
|
15
|
+
return [ErrorCode.AUTH_ERROR, ErrorCode.SWITCH_CONNECTION, ErrorCode.APP_ID_BLOCKED].includes(code);
|
|
16
|
+
}
|
|
17
|
+
exports.default = ErrorCode;
|
|
18
|
+
//# sourceMappingURL=ErrorCode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorCode.js","sourceRoot":"","sources":["../../../src/ApiClient/WebSocketClient/ErrorCode.ts"],"names":[],"mappings":";;;AASA,sCAIC;AAbD,IAAY,SAOX;AAPD,WAAY,SAAS;IACnB,oCAAoC;IACpC,gEAAqB,CAAA;IACrB,6DAA6D;IAC7D,sEAAwB,CAAA;IACxB,gCAAgC;IAChC,wDAAiB,CAAA;AACnB,CAAC,EAPW,SAAS,yBAAT,SAAS,QAOpB;AAED,SAAgB,aAAa,CAAC,IAAe;IAC3C,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC,QAAQ,CAC3F,IAAI,CACL,CAAC;AACJ,CAAC;AAED,kBAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { SupernetType } from './types';
|
|
2
|
+
export type BalanceData = {
|
|
3
|
+
settled: string;
|
|
4
|
+
credit: string;
|
|
5
|
+
debit: string;
|
|
6
|
+
net: string;
|
|
7
|
+
};
|
|
8
|
+
export type JobErrorData = {
|
|
9
|
+
jobID: string;
|
|
10
|
+
imgID?: string;
|
|
11
|
+
isFromWorker: boolean;
|
|
12
|
+
error_message: string;
|
|
13
|
+
error: number;
|
|
14
|
+
};
|
|
15
|
+
export type JobProgressData = {
|
|
16
|
+
jobID: string;
|
|
17
|
+
imgID: string;
|
|
18
|
+
hasImage: boolean;
|
|
19
|
+
step: number;
|
|
20
|
+
stepCount: number;
|
|
21
|
+
};
|
|
22
|
+
export type JobResultData = {
|
|
23
|
+
jobID: string;
|
|
24
|
+
imgID: string;
|
|
25
|
+
performedStepCount: number;
|
|
26
|
+
lastSeed: string;
|
|
27
|
+
userCanceled: boolean;
|
|
28
|
+
triggeredNSFWFilter: boolean;
|
|
29
|
+
};
|
|
30
|
+
export type JobStateData = {
|
|
31
|
+
type: 'initiatingModel' | 'jobStarted';
|
|
32
|
+
jobID: string;
|
|
33
|
+
imgID: string;
|
|
34
|
+
workerName: string;
|
|
35
|
+
} | {
|
|
36
|
+
jobID: string;
|
|
37
|
+
type: 'queued';
|
|
38
|
+
queuePosition: number;
|
|
39
|
+
} | {
|
|
40
|
+
type: 'jobCompleted';
|
|
41
|
+
jobID: string;
|
|
42
|
+
};
|
|
43
|
+
export type ServerConnectData = {
|
|
44
|
+
network: SupernetType;
|
|
45
|
+
};
|
|
46
|
+
export type ServerDisconnectData = {
|
|
47
|
+
code: number;
|
|
48
|
+
reason: string;
|
|
49
|
+
};
|
|
50
|
+
export type SocketEventMap = {
|
|
51
|
+
/**
|
|
52
|
+
* @event WebSocketClient#balanceUpdate - Received balance update
|
|
53
|
+
*/
|
|
54
|
+
balanceUpdate: BalanceData;
|
|
55
|
+
/**
|
|
56
|
+
* @event WebSocketClient#jobError - Job error occurred
|
|
57
|
+
*/
|
|
58
|
+
jobError: JobErrorData;
|
|
59
|
+
/**
|
|
60
|
+
* @event WebSocketClient#jobProgress - Job progress update
|
|
61
|
+
*/
|
|
62
|
+
jobProgress: JobProgressData;
|
|
63
|
+
/**
|
|
64
|
+
* @event WebSocketClient#jobResult - Job result received
|
|
65
|
+
*/
|
|
66
|
+
jobResult: JobResultData;
|
|
67
|
+
/**
|
|
68
|
+
* @event WebSocketClient#jobState - Job state changed
|
|
69
|
+
*/
|
|
70
|
+
jobState: JobStateData;
|
|
71
|
+
/**
|
|
72
|
+
* @event WebSocketClient#swarmModels - Received swarm model count
|
|
73
|
+
*/
|
|
74
|
+
swarmModels: Record<string, number>;
|
|
75
|
+
/**
|
|
76
|
+
* @event WebSocketClient#connected - WebSocket connection opened
|
|
77
|
+
*/
|
|
78
|
+
connected: ServerConnectData;
|
|
79
|
+
/**
|
|
80
|
+
* @event WebSocketClient#disconnected - WebSocket connection was closed
|
|
81
|
+
*/
|
|
82
|
+
disconnected: ServerDisconnectData;
|
|
83
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/ApiClient/WebSocketClient/events.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { MessageType, SocketMessageMap } from './messages';
|
|
2
|
+
import { SocketEventMap } from './events';
|
|
3
|
+
import RestClient, { AuthData } from '../../lib/RestClient';
|
|
4
|
+
import { SupernetType } from './types';
|
|
5
|
+
declare class WebSocketClient extends RestClient<SocketEventMap> {
|
|
6
|
+
appId: string;
|
|
7
|
+
baseUrl: string;
|
|
8
|
+
private socket;
|
|
9
|
+
private _supernetType;
|
|
10
|
+
constructor(baseUrl: string, appId: string, supernetType?: SupernetType);
|
|
11
|
+
set auth(auth: AuthData | null);
|
|
12
|
+
get supernetType(): SupernetType;
|
|
13
|
+
get isConnected(): boolean;
|
|
14
|
+
connect(): void;
|
|
15
|
+
disconnect(): void;
|
|
16
|
+
switchNetwork(supernetType: SupernetType): void;
|
|
17
|
+
/**
|
|
18
|
+
* Ensure the WebSocket connection is open, waiting if necessary and throwing an error if it fails
|
|
19
|
+
* @private
|
|
20
|
+
*/
|
|
21
|
+
private waitForConnection;
|
|
22
|
+
private handleOpen;
|
|
23
|
+
private handleClose;
|
|
24
|
+
private handleError;
|
|
25
|
+
private handleMessage;
|
|
26
|
+
send<T extends MessageType>(messageType: T, data: SocketMessageMap[T]): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
export default WebSocketClient;
|