@sogni-ai/sogni-client 1.0.2 → 1.1.0
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/CHANGELOG.md +8 -0
- package/README.md +126 -0
- package/dist/Account/CurrentAccount.d.ts +4 -5
- package/dist/Account/CurrentAccount.js +9 -29
- package/dist/Account/CurrentAccount.js.map +1 -1
- package/dist/Account/index.d.ts +5 -3
- package/dist/Account/index.js +20 -9
- package/dist/Account/index.js.map +1 -1
- package/dist/Account/types.d.ts +2 -0
- package/dist/ApiClient/WebSocketClient/index.d.ts +4 -4
- package/dist/ApiClient/WebSocketClient/index.js +33 -49
- package/dist/ApiClient/WebSocketClient/index.js.map +1 -1
- package/dist/ApiClient/WebSocketClient/messages.d.ts +7 -0
- package/dist/ApiClient/index.d.ts +4 -10
- package/dist/ApiClient/index.js +26 -17
- package/dist/ApiClient/index.js.map +1 -1
- package/dist/Projects/Project.d.ts +4 -0
- package/dist/Projects/Project.js +8 -0
- package/dist/Projects/Project.js.map +1 -1
- package/dist/Projects/createJobRequestMessage.js +12 -1
- package/dist/Projects/createJobRequestMessage.js.map +1 -1
- package/dist/Projects/index.d.ts +40 -2
- package/dist/Projects/index.js +146 -14
- package/dist/Projects/index.js.map +1 -1
- package/dist/Projects/types/index.d.ts +40 -0
- package/dist/lib/AuthManager.d.ts +51 -0
- package/dist/lib/AuthManager.js +157 -0
- package/dist/lib/AuthManager.js.map +1 -0
- package/dist/lib/Cache.d.ts +9 -0
- package/dist/lib/Cache.js +30 -0
- package/dist/lib/Cache.js.map +1 -0
- package/dist/lib/RestClient.d.ts +4 -7
- package/dist/lib/RestClient.js +7 -7
- package/dist/lib/RestClient.js.map +1 -1
- package/dist/lib/utils.d.ts +8 -0
- package/dist/lib/utils.js +20 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/src/Account/CurrentAccount.ts +12 -33
- package/src/Account/index.ts +18 -8
- package/src/Account/types.ts +2 -0
- package/src/ApiClient/WebSocketClient/index.ts +16 -25
- package/src/ApiClient/WebSocketClient/messages.ts +8 -0
- package/src/ApiClient/index.ts +19 -27
- package/src/Projects/Project.ts +7 -0
- package/src/Projects/createJobRequestMessage.ts +14 -1
- package/src/Projects/index.ts +150 -8
- package/src/Projects/types/index.ts +42 -0
- package/src/lib/AuthManager.ts +172 -0
- package/src/lib/Cache.ts +36 -0
- package/src/lib/RestClient.ts +8 -13
- package/src/lib/utils.ts +17 -0
- package/src/version.ts +1 -1
- package/dist/Projects/models.json +0 -8906
- package/src/Projects/models.json +0 -8906
|
@@ -1,9 +1,22 @@
|
|
|
1
1
|
import { SupernetType } from '../../ApiClient/WebSocketClient/types';
|
|
2
|
+
export interface SupportedModel {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
SID: number;
|
|
6
|
+
}
|
|
2
7
|
export interface AvailableModel {
|
|
3
8
|
id: string;
|
|
4
9
|
name: string;
|
|
5
10
|
workerCount: number;
|
|
6
11
|
}
|
|
12
|
+
export interface SizePreset {
|
|
13
|
+
label: string;
|
|
14
|
+
id: string;
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
ratio: string;
|
|
18
|
+
aspect: string;
|
|
19
|
+
}
|
|
7
20
|
export interface AiModel {
|
|
8
21
|
isSD3: boolean;
|
|
9
22
|
modelShortName: string;
|
|
@@ -98,6 +111,19 @@ export interface ProjectParams {
|
|
|
98
111
|
* Time step spacing method
|
|
99
112
|
*/
|
|
100
113
|
timeStepSpacing?: TimeStepSpacing;
|
|
114
|
+
/**
|
|
115
|
+
* Size preset ID to use. You can query available size presets
|
|
116
|
+
* from `client.projects.sizePresets(network, modelId)`
|
|
117
|
+
*/
|
|
118
|
+
sizePreset?: 'custom' | string;
|
|
119
|
+
/**
|
|
120
|
+
* Output image width. Only used if `sizePreset` is "custom"
|
|
121
|
+
*/
|
|
122
|
+
width?: number;
|
|
123
|
+
/**
|
|
124
|
+
* Output image height. Only used if `sizePreset` is "custom"
|
|
125
|
+
*/
|
|
126
|
+
height?: number;
|
|
101
127
|
}
|
|
102
128
|
export type ImageUrlParams = {
|
|
103
129
|
imageId: string;
|
|
@@ -134,4 +160,18 @@ export interface EstimateRequest {
|
|
|
134
160
|
* How strong effect of starting image should be. From 0 to 1, default 0.5
|
|
135
161
|
*/
|
|
136
162
|
startingImageStrength?: number;
|
|
163
|
+
/**
|
|
164
|
+
* Size preset ID
|
|
165
|
+
*/
|
|
166
|
+
sizePreset?: string;
|
|
167
|
+
/**
|
|
168
|
+
* Size preset image width, if not using size preset
|
|
169
|
+
* @internal
|
|
170
|
+
*/
|
|
171
|
+
width?: number;
|
|
172
|
+
/**
|
|
173
|
+
* Size preset image height, if not using size preset
|
|
174
|
+
* @internal
|
|
175
|
+
*/
|
|
176
|
+
height?: number;
|
|
137
177
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ApiErrorResponse } from '../ApiClient';
|
|
2
|
+
import { Logger } from './DefaultLogger';
|
|
3
|
+
import TypedEventEmitter from './TypedEventEmitter';
|
|
4
|
+
/**
|
|
5
|
+
* Tokens object, containing the token and refresh token
|
|
6
|
+
* @typedef {Object} Tokens
|
|
7
|
+
* @property {string} [token] - The JWT token. Optonal, if missing it will be retrieved from the server
|
|
8
|
+
* @property {string} refreshToken - The refresh token
|
|
9
|
+
*/
|
|
10
|
+
export interface Tokens {
|
|
11
|
+
token?: string;
|
|
12
|
+
refreshToken: string;
|
|
13
|
+
}
|
|
14
|
+
export type AuthUpdatedEvent = {
|
|
15
|
+
token: string;
|
|
16
|
+
refreshToken: string;
|
|
17
|
+
walletAddress: string;
|
|
18
|
+
} | {
|
|
19
|
+
token: null;
|
|
20
|
+
refreshToken: null;
|
|
21
|
+
walletAddress: null;
|
|
22
|
+
};
|
|
23
|
+
interface AuthManagerEvents {
|
|
24
|
+
updated: AuthUpdatedEvent;
|
|
25
|
+
refreshFailed: ApiErrorResponse;
|
|
26
|
+
}
|
|
27
|
+
declare class AuthManager extends TypedEventEmitter<AuthManagerEvents> {
|
|
28
|
+
private _token?;
|
|
29
|
+
private _tokenExpiresAt;
|
|
30
|
+
private _refreshToken?;
|
|
31
|
+
private _refreshTokenExpiresAt;
|
|
32
|
+
private _logger;
|
|
33
|
+
private _baseUrl;
|
|
34
|
+
private _walletAddress?;
|
|
35
|
+
private _renewTokenPromise?;
|
|
36
|
+
constructor(baseUrl: string, logger: Logger);
|
|
37
|
+
get refreshToken(): string | undefined;
|
|
38
|
+
get walletAddress(): string | undefined;
|
|
39
|
+
get isAuthenticated(): boolean;
|
|
40
|
+
private _updateCookies;
|
|
41
|
+
setTokens({ refreshToken, token }: {
|
|
42
|
+
refreshToken: string;
|
|
43
|
+
token?: string;
|
|
44
|
+
}): Promise<void>;
|
|
45
|
+
getToken(): Promise<string | undefined>;
|
|
46
|
+
renewToken(): Promise<string>;
|
|
47
|
+
clear(): void;
|
|
48
|
+
private _updateTokens;
|
|
49
|
+
private _renewToken;
|
|
50
|
+
}
|
|
51
|
+
export default AuthManager;
|
|
@@ -0,0 +1,157 @@
|
|
|
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 utils_1 = require("./utils");
|
|
16
|
+
const ApiClient_1 = require("../ApiClient");
|
|
17
|
+
const isNodejs_1 = __importDefault(require("./isNodejs"));
|
|
18
|
+
const js_cookie_1 = __importDefault(require("js-cookie"));
|
|
19
|
+
const TypedEventEmitter_1 = __importDefault(require("./TypedEventEmitter"));
|
|
20
|
+
class AuthManager extends TypedEventEmitter_1.default {
|
|
21
|
+
constructor(baseUrl, logger) {
|
|
22
|
+
super();
|
|
23
|
+
this._tokenExpiresAt = new Date(0);
|
|
24
|
+
this._refreshTokenExpiresAt = new Date(0);
|
|
25
|
+
this._logger = logger;
|
|
26
|
+
this._baseUrl = baseUrl;
|
|
27
|
+
}
|
|
28
|
+
get refreshToken() {
|
|
29
|
+
return this._refreshToken;
|
|
30
|
+
}
|
|
31
|
+
get walletAddress() {
|
|
32
|
+
return this._walletAddress;
|
|
33
|
+
}
|
|
34
|
+
get isAuthenticated() {
|
|
35
|
+
return !!this._refreshToken && this._refreshTokenExpiresAt > new Date();
|
|
36
|
+
}
|
|
37
|
+
_updateCookies() {
|
|
38
|
+
if (isNodejs_1.default) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const token = this._token;
|
|
42
|
+
if (token) {
|
|
43
|
+
js_cookie_1.default.set('authorization', token, {
|
|
44
|
+
domain: '.sogni.ai',
|
|
45
|
+
expires: 1
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
js_cookie_1.default.remove('authorization', {
|
|
50
|
+
domain: '.sogni.ai'
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
setTokens(_a) {
|
|
55
|
+
return __awaiter(this, arguments, void 0, function* ({ refreshToken, token }) {
|
|
56
|
+
if (token) {
|
|
57
|
+
this._updateTokens({ token, refreshToken });
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
this._refreshToken = refreshToken;
|
|
61
|
+
const { expiresAt: refreshExpiresAt } = (0, utils_1.decodeRefreshToken)(refreshToken);
|
|
62
|
+
this._refreshTokenExpiresAt = refreshExpiresAt;
|
|
63
|
+
yield this.renewToken();
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
getToken() {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
68
|
+
//If there is a token, and it is not expired, return it
|
|
69
|
+
if (this._token && this._tokenExpiresAt > new Date()) {
|
|
70
|
+
return this._token;
|
|
71
|
+
}
|
|
72
|
+
//If there is no refresh token, return undefined, to make unauthorized requests
|
|
73
|
+
if (!this._refreshToken) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
//If there is a refresh token, try to renew the token
|
|
77
|
+
return this.renewToken();
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
renewToken() {
|
|
81
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
82
|
+
if (this._renewTokenPromise) {
|
|
83
|
+
return this._renewTokenPromise;
|
|
84
|
+
}
|
|
85
|
+
this._renewTokenPromise = this._renewToken();
|
|
86
|
+
this._renewTokenPromise.finally(() => {
|
|
87
|
+
this._renewTokenPromise = undefined;
|
|
88
|
+
});
|
|
89
|
+
return this._renewTokenPromise;
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
clear() {
|
|
93
|
+
// Prevent duplicate events
|
|
94
|
+
if (!this._token && !this._refreshToken) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
this._refreshToken = undefined;
|
|
98
|
+
this._refreshTokenExpiresAt = new Date(0);
|
|
99
|
+
this._token = undefined;
|
|
100
|
+
this._tokenExpiresAt = new Date(0);
|
|
101
|
+
this._walletAddress = undefined;
|
|
102
|
+
this.emit('updated', { token: null, refreshToken: null, walletAddress: null });
|
|
103
|
+
}
|
|
104
|
+
_updateTokens({ token, refreshToken }) {
|
|
105
|
+
// Prevent duplicate events
|
|
106
|
+
if (this._token === token && this._refreshToken === refreshToken) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
this._token = token;
|
|
110
|
+
const { expiresAt, walletAddress } = (0, utils_1.decodeToken)(token);
|
|
111
|
+
this._walletAddress = walletAddress;
|
|
112
|
+
this._tokenExpiresAt = expiresAt;
|
|
113
|
+
this._refreshToken = refreshToken;
|
|
114
|
+
const { expiresAt: refreshExpiresAt } = (0, utils_1.decodeRefreshToken)(refreshToken);
|
|
115
|
+
this._refreshTokenExpiresAt = refreshExpiresAt;
|
|
116
|
+
this._updateCookies();
|
|
117
|
+
this.emit('updated', { token, refreshToken, walletAddress });
|
|
118
|
+
}
|
|
119
|
+
_renewToken() {
|
|
120
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
121
|
+
if (this._refreshTokenExpiresAt < new Date()) {
|
|
122
|
+
throw new Error('Refresh token expired');
|
|
123
|
+
}
|
|
124
|
+
const url = new URL('/v1/account/refresh-token', this._baseUrl).toString();
|
|
125
|
+
const response = yield fetch(url, {
|
|
126
|
+
method: 'POST',
|
|
127
|
+
headers: {
|
|
128
|
+
'Content-Type': 'application/json'
|
|
129
|
+
},
|
|
130
|
+
body: JSON.stringify({ refreshToken: this._refreshToken })
|
|
131
|
+
});
|
|
132
|
+
let responseData;
|
|
133
|
+
try {
|
|
134
|
+
responseData = yield response.json();
|
|
135
|
+
}
|
|
136
|
+
catch (e) {
|
|
137
|
+
this.emit('refreshFailed', {
|
|
138
|
+
status: 'error',
|
|
139
|
+
errorCode: 0,
|
|
140
|
+
message: 'Failed to parse response'
|
|
141
|
+
});
|
|
142
|
+
this._logger.error('Failed to parse response:', e);
|
|
143
|
+
throw new Error('Failed to parse response');
|
|
144
|
+
}
|
|
145
|
+
if (!response.ok) {
|
|
146
|
+
this.emit('refreshFailed', responseData);
|
|
147
|
+
this.clear();
|
|
148
|
+
throw new ApiClient_1.ApiError(response.status, responseData);
|
|
149
|
+
}
|
|
150
|
+
const { token, refreshToken } = responseData.data;
|
|
151
|
+
this._updateTokens({ token, refreshToken });
|
|
152
|
+
return this._token;
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.default = AuthManager;
|
|
157
|
+
//# sourceMappingURL=AuthManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthManager.js","sourceRoot":"","sources":["../../src/lib/AuthManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** A simple memory cache implementation. */
|
|
2
|
+
export default class Cache<V = any> {
|
|
3
|
+
readonly ttl: number;
|
|
4
|
+
private data;
|
|
5
|
+
constructor(defaultTTL: number);
|
|
6
|
+
write(key: string, value: V, ttl?: number): void;
|
|
7
|
+
read(key: string): V | undefined;
|
|
8
|
+
private cleanup;
|
|
9
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/** A simple memory cache implementation. */
|
|
4
|
+
class Cache {
|
|
5
|
+
constructor(defaultTTL) {
|
|
6
|
+
this.data = new Map();
|
|
7
|
+
this.ttl = defaultTTL;
|
|
8
|
+
setInterval(() => this.cleanup(), 10000);
|
|
9
|
+
}
|
|
10
|
+
write(key, value, ttl) {
|
|
11
|
+
this.data.set(key, {
|
|
12
|
+
exp: Date.now() + (ttl || this.ttl),
|
|
13
|
+
value
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
read(key) {
|
|
17
|
+
const record = this.data.get(key);
|
|
18
|
+
return record && record.exp > Date.now() ? record.value : undefined;
|
|
19
|
+
}
|
|
20
|
+
cleanup() {
|
|
21
|
+
const now = Date.now();
|
|
22
|
+
this.data.forEach((record, key) => {
|
|
23
|
+
if (record.exp < now) {
|
|
24
|
+
this.data.delete(key);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.default = Cache;
|
|
30
|
+
//# sourceMappingURL=Cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cache.js","sourceRoot":"","sources":["../../src/lib/Cache.ts"],"names":[],"mappings":";;AAKA,4CAA4C;AAC5C,MAAqB,KAAK;IAIxB,YAAY,UAAkB;QAFtB,SAAI,GAAgC,IAAI,GAAG,EAAE,CAAC;QAGpD,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC;QACtB,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,GAAW,EAAE,KAAQ,EAAE,GAAY;QACvC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;YACnC,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,GAAW;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,MAAM,IAAI,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACtE,CAAC;IAEO,OAAO;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAChC,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA7BD,wBA6BC"}
|
package/dist/lib/RestClient.d.ts
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
import TypedEventEmitter, { EventMap } from './TypedEventEmitter';
|
|
2
2
|
import { JSONValue } from '../types/json';
|
|
3
3
|
import { Logger } from './DefaultLogger';
|
|
4
|
-
|
|
5
|
-
token: string;
|
|
6
|
-
}
|
|
4
|
+
import AuthManager from './AuthManager';
|
|
7
5
|
declare class RestClient<E extends EventMap = never> extends TypedEventEmitter<E> {
|
|
8
6
|
readonly baseUrl: string;
|
|
9
|
-
protected _auth:
|
|
7
|
+
protected _auth: AuthManager;
|
|
10
8
|
protected _logger: Logger;
|
|
11
|
-
constructor(baseUrl: string, logger: Logger);
|
|
12
|
-
get auth():
|
|
13
|
-
set auth(auth: AuthData | null);
|
|
9
|
+
constructor(baseUrl: string, auth: AuthManager, logger: Logger);
|
|
10
|
+
get auth(): AuthManager;
|
|
14
11
|
private formatUrl;
|
|
15
12
|
private request;
|
|
16
13
|
private processResponse;
|
package/dist/lib/RestClient.js
CHANGED
|
@@ -15,18 +15,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
const ApiClient_1 = require("../ApiClient");
|
|
16
16
|
const TypedEventEmitter_1 = __importDefault(require("./TypedEventEmitter"));
|
|
17
17
|
class RestClient extends TypedEventEmitter_1.default {
|
|
18
|
-
constructor(baseUrl, logger) {
|
|
18
|
+
constructor(baseUrl, auth, logger) {
|
|
19
19
|
super();
|
|
20
|
-
this._auth = null;
|
|
21
20
|
this.baseUrl = baseUrl;
|
|
21
|
+
this._auth = auth;
|
|
22
22
|
this._logger = logger;
|
|
23
23
|
}
|
|
24
24
|
get auth() {
|
|
25
25
|
return this._auth;
|
|
26
26
|
}
|
|
27
|
-
set auth(auth) {
|
|
28
|
-
this._auth = auth;
|
|
29
|
-
}
|
|
30
27
|
formatUrl(relativeUrl, query = {}) {
|
|
31
28
|
const url = new URL(relativeUrl, this.baseUrl);
|
|
32
29
|
Object.keys(query).forEach((key) => {
|
|
@@ -34,8 +31,11 @@ class RestClient extends TypedEventEmitter_1.default {
|
|
|
34
31
|
});
|
|
35
32
|
return url.toString();
|
|
36
33
|
}
|
|
37
|
-
request(
|
|
38
|
-
return
|
|
34
|
+
request(url_1) {
|
|
35
|
+
return __awaiter(this, arguments, void 0, function* (url, options = {}) {
|
|
36
|
+
const token = yield this.auth.getToken();
|
|
37
|
+
return fetch(url, Object.assign(Object.assign({}, options), { headers: Object.assign(Object.assign({}, (options.headers || {})), (token ? { Authorization: token } : {})) })).then((r) => this.processResponse(r));
|
|
38
|
+
});
|
|
39
39
|
}
|
|
40
40
|
processResponse(response) {
|
|
41
41
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RestClient.js","sourceRoot":"","sources":["../../src/lib/RestClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,4CAA0D;AAC1D,4EAAkE;
|
|
1
|
+
{"version":3,"file":"RestClient.js","sourceRoot":"","sources":["../../src/lib/RestClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,4CAA0D;AAC1D,4EAAkE;AAKlE,MAAM,UAAuC,SAAQ,2BAAoB;IAKvE,YAAY,OAAe,EAAE,IAAiB,EAAE,MAAc;QAC5D,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEO,SAAS,CAAC,WAAmB,EAAE,QAAgC,EAAE;QACvE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACjC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAEa,OAAO;6DAAgB,GAAW,EAAE,UAAuB,EAAE;YACzE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzC,OAAO,KAAK,CAAC,GAAG,kCACX,OAAO,KACV,OAAO,kCACF,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,GACvB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAE5C,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAM,CAAC,CAAC;QAC/C,CAAC;KAAA;IAEa,eAAe,CAAC,QAAkB;;YAC9C,IAAI,YAAY,CAAC;YACjB,IAAI,CAAC;gBACH,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;gBACnD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,oBAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAgC,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,YAAyB,CAAC;QACnC,CAAC;KAAA;IAED,GAAG,CAAgB,IAAY,EAAE,QAA6B,EAAE;QAC9D,OAAO,IAAI,CAAC,OAAO,CAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAgB,IAAY,EAAE,OAAgC,EAAE;QAClE,OAAO,IAAI,CAAC,OAAO,CAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;CACF;AAED,kBAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decodeToken = decodeToken;
|
|
4
|
+
exports.decodeRefreshToken = decodeRefreshToken;
|
|
5
|
+
const jwt_decode_1 = require("jwt-decode");
|
|
6
|
+
function decodeToken(token) {
|
|
7
|
+
const data = (0, jwt_decode_1.jwtDecode)(token);
|
|
8
|
+
return {
|
|
9
|
+
walletAddress: data.addr,
|
|
10
|
+
expiresAt: new Date(data.exp * 1000)
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function decodeRefreshToken(token) {
|
|
14
|
+
const data = (0, jwt_decode_1.jwtDecode)(token);
|
|
15
|
+
return {
|
|
16
|
+
env: data.env,
|
|
17
|
+
expiresAt: new Date(data.exp * 1000)
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":";;AAEA,kCAMC;AAED,gDAMC;AAhBD,2CAAuC;AAEvC,SAAgB,WAAW,CAAC,KAAa;IACvC,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,SAAgB,kBAAkB,CAAC,KAAa;IAC9C,MAAM,IAAI,GAAG,IAAA,sBAAS,EAA0D,KAAK,CAAC,CAAC;IACvF,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;KACrC,CAAC;AACJ,CAAC"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const LIB_VERSION = "0.4
|
|
1
|
+
export declare const LIB_VERSION = "1.0.0-alpha.4";
|
package/dist/version.js
CHANGED
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG,eAAe,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import DataEntity from '../lib/DataEntity';
|
|
2
2
|
import { BalanceData } from './types';
|
|
3
|
-
import { jwtDecode } from 'jwt-decode';
|
|
4
3
|
import { SupernetType } from '../ApiClient/WebSocketClient/types';
|
|
5
4
|
/**
|
|
6
5
|
* @inline
|
|
7
6
|
*/
|
|
8
7
|
export interface AccountData {
|
|
9
|
-
token: string | null;
|
|
10
8
|
/**
|
|
11
9
|
* Current network status:\
|
|
12
10
|
* - `connected` - connected to the socket
|
|
@@ -21,13 +19,13 @@ export interface AccountData {
|
|
|
21
19
|
network: SupernetType | null;
|
|
22
20
|
balance: BalanceData;
|
|
23
21
|
walletAddress?: string;
|
|
24
|
-
expiresAt?: Date;
|
|
25
22
|
username?: string;
|
|
23
|
+
token?: string;
|
|
24
|
+
refreshToken?: string;
|
|
26
25
|
}
|
|
27
26
|
|
|
28
27
|
function getDefaults(): AccountData {
|
|
29
28
|
return {
|
|
30
|
-
token: null,
|
|
31
29
|
networkStatus: 'disconnected',
|
|
32
30
|
network: null,
|
|
33
31
|
balance: {
|
|
@@ -35,15 +33,11 @@ function getDefaults(): AccountData {
|
|
|
35
33
|
debit: '0',
|
|
36
34
|
net: '0',
|
|
37
35
|
settled: '0'
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const data = jwtDecode<{ addr: string; env: string; iat: number; exp: number }>(token);
|
|
44
|
-
return {
|
|
45
|
-
walletAddress: data.addr,
|
|
46
|
-
expiresAt: new Date(data.exp * 1000)
|
|
36
|
+
},
|
|
37
|
+
walletAddress: undefined,
|
|
38
|
+
username: undefined,
|
|
39
|
+
token: undefined,
|
|
40
|
+
refreshToken: undefined
|
|
47
41
|
};
|
|
48
42
|
}
|
|
49
43
|
|
|
@@ -56,27 +50,12 @@ class CurrentAccount extends DataEntity<AccountData> {
|
|
|
56
50
|
super(data || getDefaults());
|
|
57
51
|
}
|
|
58
52
|
|
|
59
|
-
_update<K extends keyof AccountData>(delta: Partial<AccountData>) {
|
|
60
|
-
this.data = { ...this.data, ...(delta as Partial<AccountData>) };
|
|
61
|
-
const keys = Object.keys(delta);
|
|
62
|
-
if (delta.hasOwnProperty('token')) {
|
|
63
|
-
if (delta.token) {
|
|
64
|
-
Object.assign(this.data, decodeToken(delta.token));
|
|
65
|
-
} else {
|
|
66
|
-
delete this.data.walletAddress;
|
|
67
|
-
delete this.data.expiresAt;
|
|
68
|
-
}
|
|
69
|
-
keys.push('walletAddress', 'expiresAt');
|
|
70
|
-
}
|
|
71
|
-
this.emit('updated', keys);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
53
|
_clear() {
|
|
75
54
|
this._update(getDefaults());
|
|
76
55
|
}
|
|
77
56
|
|
|
78
57
|
get isAuthenicated() {
|
|
79
|
-
return !!this.data.
|
|
58
|
+
return !!this.data.refreshToken;
|
|
80
59
|
}
|
|
81
60
|
|
|
82
61
|
get networkStatus() {
|
|
@@ -95,10 +74,6 @@ class CurrentAccount extends DataEntity<AccountData> {
|
|
|
95
74
|
return this.data.walletAddress;
|
|
96
75
|
}
|
|
97
76
|
|
|
98
|
-
get expiresAt() {
|
|
99
|
-
return this.data.expiresAt;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
77
|
get username() {
|
|
103
78
|
return this.data.username;
|
|
104
79
|
}
|
|
@@ -106,6 +81,10 @@ class CurrentAccount extends DataEntity<AccountData> {
|
|
|
106
81
|
get token() {
|
|
107
82
|
return this.data.token;
|
|
108
83
|
}
|
|
84
|
+
|
|
85
|
+
get refreshToken() {
|
|
86
|
+
return this.data.refreshToken;
|
|
87
|
+
}
|
|
109
88
|
}
|
|
110
89
|
|
|
111
90
|
export default CurrentAccount;
|
package/src/Account/index.ts
CHANGED
|
@@ -14,6 +14,7 @@ import { Wallet, pbkdf2, toUtf8Bytes, Signature, parseEther } from 'ethers';
|
|
|
14
14
|
import { ApiError, ApiReponse } from '../ApiClient';
|
|
15
15
|
import CurrentAccount from './CurrentAccount';
|
|
16
16
|
import { SupernetType } from '../ApiClient/WebSocketClient/types';
|
|
17
|
+
import { AuthUpdatedEvent, Tokens } from '../lib/AuthManager';
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* Account API methods that let you interact with the user's account.
|
|
@@ -34,6 +35,7 @@ class AccountApi extends ApiGroup {
|
|
|
34
35
|
this.client.socket.on('balanceUpdate', this.handleBalanceUpdate.bind(this));
|
|
35
36
|
this.client.on('connected', this.handleServerConnected.bind(this));
|
|
36
37
|
this.client.on('disconnected', this.handleServerDisconnected.bind(this));
|
|
38
|
+
this.client.auth.on('updated', this.handleAuthUpdated.bind(this));
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
private handleBalanceUpdate(data: BalanceData) {
|
|
@@ -51,6 +53,14 @@ class AccountApi extends ApiGroup {
|
|
|
51
53
|
this.currentAccount._clear();
|
|
52
54
|
}
|
|
53
55
|
|
|
56
|
+
private handleAuthUpdated({ refreshToken, token, walletAddress }: AuthUpdatedEvent) {
|
|
57
|
+
if (!refreshToken) {
|
|
58
|
+
this.currentAccount._clear();
|
|
59
|
+
} else {
|
|
60
|
+
this.currentAccount._update({ walletAddress, token, refreshToken });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
54
64
|
private async getNonce(walletAddress: string): Promise<string> {
|
|
55
65
|
const res = await this.client.rest.post<ApiReponse<Nonce>>('/v1/account/nonce', {
|
|
56
66
|
walletAddress
|
|
@@ -111,12 +121,12 @@ class AccountApi extends ApiGroup {
|
|
|
111
121
|
referralCode,
|
|
112
122
|
signature
|
|
113
123
|
});
|
|
114
|
-
this.setToken(username, res.data.token);
|
|
124
|
+
await this.setToken(username, { refreshToken: res.data.refreshToken, token: res.data.token });
|
|
115
125
|
return res.data;
|
|
116
126
|
}
|
|
117
127
|
|
|
118
128
|
/**
|
|
119
|
-
* Restore session with username and
|
|
129
|
+
* Restore session with username and refresh token.
|
|
120
130
|
*
|
|
121
131
|
* You can save access token that you get from the login method and restore the session with this method.
|
|
122
132
|
*
|
|
@@ -138,13 +148,13 @@ class AccountApi extends ApiGroup {
|
|
|
138
148
|
* ```
|
|
139
149
|
*
|
|
140
150
|
* @param username
|
|
141
|
-
* @param token
|
|
151
|
+
* @param tokens - Refresh token, access token pair { refreshToken: string, token: string }
|
|
142
152
|
*/
|
|
143
|
-
setToken(username: string,
|
|
144
|
-
this.client.authenticate(
|
|
153
|
+
async setToken(username: string, tokens: Tokens): Promise<void> {
|
|
154
|
+
await this.client.authenticate(tokens);
|
|
145
155
|
this.currentAccount._update({
|
|
146
|
-
|
|
147
|
-
|
|
156
|
+
username,
|
|
157
|
+
walletAddress: this.client.auth.walletAddress
|
|
148
158
|
});
|
|
149
159
|
}
|
|
150
160
|
|
|
@@ -171,7 +181,7 @@ class AccountApi extends ApiGroup {
|
|
|
171
181
|
walletAddress: wallet.address,
|
|
172
182
|
signature
|
|
173
183
|
});
|
|
174
|
-
this.setToken(username, res.data.token);
|
|
184
|
+
await this.setToken(username, { refreshToken: res.data.refreshToken, token: res.data.token });
|
|
175
185
|
return res.data;
|
|
176
186
|
}
|
|
177
187
|
|