@sogni-ai/sogni-client 3.4.0-alpha.1 → 4.0.0-alpha.2
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 +27 -0
- package/dist/Account/CurrentAccount.d.ts +2 -4
- package/dist/Account/CurrentAccount.js +4 -9
- package/dist/Account/CurrentAccount.js.map +1 -1
- package/dist/Account/index.d.ts +2 -30
- package/dist/Account/index.js +36 -49
- package/dist/Account/index.js.map +1 -1
- package/dist/Account/types.d.ts +11 -0
- package/dist/ApiClient/WebSocketClient/index.d.ts +1 -1
- package/dist/ApiClient/WebSocketClient/index.js +1 -10
- package/dist/ApiClient/WebSocketClient/index.js.map +1 -1
- package/dist/ApiClient/index.d.ts +12 -5
- package/dist/ApiClient/index.js +17 -31
- package/dist/ApiClient/index.js.map +1 -1
- package/dist/index.d.ts +23 -0
- package/dist/index.js +48 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/AuthManager/AuthManagerBase.d.ts +25 -0
- package/dist/lib/AuthManager/AuthManagerBase.js +14 -0
- package/dist/lib/AuthManager/AuthManagerBase.js.map +1 -0
- package/dist/lib/AuthManager/CookieAuthManager.d.ts +15 -0
- package/dist/lib/AuthManager/CookieAuthManager.js +53 -0
- package/dist/lib/AuthManager/CookieAuthManager.js.map +1 -0
- package/dist/lib/AuthManager/TokenAuthManager.d.ts +41 -0
- package/dist/lib/{AuthManager.js → AuthManager/TokenAuthManager.js} +96 -60
- package/dist/lib/AuthManager/TokenAuthManager.js.map +1 -0
- package/dist/lib/AuthManager/index.d.ts +5 -0
- package/dist/lib/AuthManager/index.js +11 -0
- package/dist/lib/AuthManager/index.js.map +1 -0
- package/dist/lib/RestClient.d.ts +1 -1
- package/dist/lib/RestClient.js +6 -2
- package/dist/lib/RestClient.js.map +1 -1
- package/package.json +1 -1
- package/src/Account/CurrentAccount.ts +5 -12
- package/src/Account/index.ts +34 -48
- package/src/Account/types.ts +12 -0
- package/src/ApiClient/WebSocketClient/index.ts +2 -11
- package/src/ApiClient/index.ts +35 -31
- package/src/index.ts +63 -9
- package/src/lib/AuthManager/AuthManagerBase.ts +37 -0
- package/src/lib/AuthManager/CookieAuthManager.ts +40 -0
- package/src/lib/{AuthManager.ts → AuthManager/TokenAuthManager.ts} +97 -77
- package/src/lib/AuthManager/index.ts +8 -0
- package/src/lib/RestClient.ts +7 -10
- package/dist/lib/AuthManager.d.ts +0 -51
- package/dist/lib/AuthManager.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -54,6 +54,7 @@ const Project_1 = __importDefault(require("./Projects/Project"));
|
|
|
54
54
|
exports.Project = Project_1.default;
|
|
55
55
|
// Stats API
|
|
56
56
|
const Stats_1 = __importDefault(require("./Stats"));
|
|
57
|
+
const AuthManager_1 = require("./lib/AuthManager");
|
|
57
58
|
class SogniClient {
|
|
58
59
|
constructor(config) {
|
|
59
60
|
this.account = new Account_1.default(config);
|
|
@@ -64,6 +65,44 @@ class SogniClient {
|
|
|
64
65
|
get currentAccount() {
|
|
65
66
|
return this.account.currentAccount;
|
|
66
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* When using token authentication, this method can be used to set the tokens.
|
|
70
|
+
* This is useful when the tokens are stored in a secure location and you want to resume the session.
|
|
71
|
+
* @param tokens
|
|
72
|
+
*/
|
|
73
|
+
setTokens(tokens) {
|
|
74
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
75
|
+
const auth = this.apiClient.auth;
|
|
76
|
+
if (!(auth instanceof AuthManager_1.TokenAuthManager)) {
|
|
77
|
+
throw new Error('setTokens can only be used with token authentication');
|
|
78
|
+
}
|
|
79
|
+
yield auth.authenticate(tokens);
|
|
80
|
+
yield this.account.me();
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* When using cookie authentication, client has no way to detect if the user is authenticated or not.
|
|
85
|
+
* This method can be used to check if the user is authenticated and populate the currentAccount.
|
|
86
|
+
* @returns
|
|
87
|
+
*/
|
|
88
|
+
checkAuth() {
|
|
89
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
90
|
+
const auth = this.apiClient.auth;
|
|
91
|
+
if (!(auth instanceof AuthManager_1.CookieAuthManager)) {
|
|
92
|
+
throw Error('This method should only be called when using cookie auth');
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
yield this.apiClient.rest.get('/v1/account/me');
|
|
96
|
+
yield auth.authenticate();
|
|
97
|
+
yield this.account.me();
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
this.apiClient.logger.info('Client is not authenticated');
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
67
106
|
/**
|
|
68
107
|
* Create client instance, with default configuration
|
|
69
108
|
* @param config
|
|
@@ -75,7 +114,15 @@ class SogniClient {
|
|
|
75
114
|
const network = config.network || 'fast';
|
|
76
115
|
const logger = config.logger || new DefaultLogger_1.DefaultLogger(config.logLevel || 'warn');
|
|
77
116
|
const isTestnet = config.testnet !== undefined ? config.testnet : false;
|
|
78
|
-
const client = new ApiClient_1.default(
|
|
117
|
+
const client = new ApiClient_1.default({
|
|
118
|
+
baseUrl: restEndpoint,
|
|
119
|
+
socketUrl: socketEndpoint,
|
|
120
|
+
appId: config.appId,
|
|
121
|
+
networkType: network,
|
|
122
|
+
logger,
|
|
123
|
+
authType: config.authType || 'token',
|
|
124
|
+
disableSocket: config.disableSocket
|
|
125
|
+
});
|
|
79
126
|
const eip712 = new EIP712Helper_1.default({
|
|
80
127
|
name: isTestnet ? 'Sogni-testnet' : 'Sogni AI',
|
|
81
128
|
version: '1',
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,cAAc;AACd,wDAAmC;AACnC,8EAAsD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Logger } from '../DefaultLogger';
|
|
2
|
+
import TypedEventEmitter from '../TypedEventEmitter';
|
|
3
|
+
import { ClientOptions } from 'ws';
|
|
4
|
+
interface AuthManagerEvents {
|
|
5
|
+
updated: boolean;
|
|
6
|
+
}
|
|
7
|
+
declare abstract class AuthManagerBase<AuthData = never> extends TypedEventEmitter<AuthManagerEvents> {
|
|
8
|
+
protected _logger: Logger;
|
|
9
|
+
constructor(logger: Logger);
|
|
10
|
+
abstract get isAuthenticated(): boolean;
|
|
11
|
+
abstract authenticateRequest(option: RequestInit): Promise<RequestInit>;
|
|
12
|
+
abstract socketOptions(): Promise<ClientOptions | undefined>;
|
|
13
|
+
/**
|
|
14
|
+
* Get the current authentication data to persist it
|
|
15
|
+
* @returns
|
|
16
|
+
*/
|
|
17
|
+
abstract backup(): Promise<AuthData>;
|
|
18
|
+
/**
|
|
19
|
+
* Restore authentication from the data that was previously backed up
|
|
20
|
+
* @param data
|
|
21
|
+
*/
|
|
22
|
+
abstract authenticate(data: AuthData): Promise<void>;
|
|
23
|
+
abstract clear(): void;
|
|
24
|
+
}
|
|
25
|
+
export default AuthManagerBase;
|
|
@@ -0,0 +1,14 @@
|
|
|
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 TypedEventEmitter_1 = __importDefault(require("../TypedEventEmitter"));
|
|
7
|
+
class AuthManagerBase extends TypedEventEmitter_1.default {
|
|
8
|
+
constructor(logger) {
|
|
9
|
+
super();
|
|
10
|
+
this._logger = logger;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.default = AuthManagerBase;
|
|
14
|
+
//# sourceMappingURL=AuthManagerBase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthManagerBase.js","sourceRoot":"","sources":["../../../src/lib/AuthManager/AuthManagerBase.ts"],"names":[],"mappings":";;;;;AACA,6EAAqD;AAOrD,MAAe,eAAkC,SAAQ,2BAAoC;IAE3F,YAAY,MAAc;QACxB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;CAqBF;AAED,kBAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import AuthManagerBase from './AuthManagerBase';
|
|
2
|
+
declare class CookieAuthManager extends AuthManagerBase<undefined> {
|
|
3
|
+
private _isAuthenticated;
|
|
4
|
+
/**
|
|
5
|
+
* For cookie authentication, there is no way to detect if the user is authenticated or not,
|
|
6
|
+
* except when a call to API was successful. So the REST client will set this property to true.
|
|
7
|
+
*/
|
|
8
|
+
authenticate(): Promise<void>;
|
|
9
|
+
clear(): void;
|
|
10
|
+
get isAuthenticated(): boolean;
|
|
11
|
+
backup(): Promise<undefined>;
|
|
12
|
+
authenticateRequest(options: RequestInit): Promise<RequestInit>;
|
|
13
|
+
socketOptions(): Promise<undefined>;
|
|
14
|
+
}
|
|
15
|
+
export default CookieAuthManager;
|
|
@@ -0,0 +1,53 @@
|
|
|
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 AuthManagerBase_1 = __importDefault(require("./AuthManagerBase"));
|
|
16
|
+
class CookieAuthManager extends AuthManagerBase_1.default {
|
|
17
|
+
constructor() {
|
|
18
|
+
super(...arguments);
|
|
19
|
+
this._isAuthenticated = false;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* For cookie authentication, there is no way to detect if the user is authenticated or not,
|
|
23
|
+
* except when a call to API was successful. So the REST client will set this property to true.
|
|
24
|
+
*/
|
|
25
|
+
authenticate() {
|
|
26
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
27
|
+
this._isAuthenticated = true;
|
|
28
|
+
this.emit('updated', true);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
clear() {
|
|
32
|
+
this._isAuthenticated = false;
|
|
33
|
+
this.emit('updated', false);
|
|
34
|
+
}
|
|
35
|
+
get isAuthenticated() {
|
|
36
|
+
return this._isAuthenticated;
|
|
37
|
+
}
|
|
38
|
+
backup() {
|
|
39
|
+
throw new Error('Not supported with cookie authentication');
|
|
40
|
+
}
|
|
41
|
+
authenticateRequest(options) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
return Object.assign(Object.assign({}, options), { credentials: 'include' });
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
socketOptions() {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
return undefined;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.default = CookieAuthManager;
|
|
53
|
+
//# sourceMappingURL=CookieAuthManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CookieAuthManager.js","sourceRoot":"","sources":["../../../src/lib/AuthManager/CookieAuthManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,wEAAgD;AAEhD,MAAM,iBAAkB,SAAQ,yBAA0B;IAA1D;;QACU,qBAAgB,GAAG,KAAK,CAAC;IAkCnC,CAAC;IAhCC;;;OAGG;IACG,YAAY;;YAChB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC;KAAA;IAED,KAAK;QACH,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,MAAM;QACJ,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAEK,mBAAmB,CAAC,OAAoB;;YAC5C,uCACK,OAAO,KACV,WAAW,EAAE,SAAS,IACtB;QACJ,CAAC;KAAA;IAEK,aAAa;;YACjB,OAAO,SAAS,CAAC;QACnB,CAAC;KAAA;CACF;AAED,kBAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Logger } from '../DefaultLogger';
|
|
2
|
+
import AuthManagerBase from './AuthManagerBase';
|
|
3
|
+
import { ClientOptions } from 'ws';
|
|
4
|
+
/**
|
|
5
|
+
* Token object, containing the token and refresh token
|
|
6
|
+
* @property {string} token - The JWT token
|
|
7
|
+
* @property {string} refreshToken - The refresh token
|
|
8
|
+
*/
|
|
9
|
+
export interface TokenAuthData {
|
|
10
|
+
token: string;
|
|
11
|
+
refreshToken: string;
|
|
12
|
+
}
|
|
13
|
+
declare class TokenAuthManager extends AuthManagerBase<TokenAuthData | null> {
|
|
14
|
+
private _token?;
|
|
15
|
+
private _tokenExpiresAt;
|
|
16
|
+
private _refreshToken?;
|
|
17
|
+
private _refreshTokenExpiresAt;
|
|
18
|
+
private _baseUrl;
|
|
19
|
+
private _renewTokenPromise?;
|
|
20
|
+
constructor(baseUrl: string, logger: Logger);
|
|
21
|
+
get isAuthenticated(): boolean;
|
|
22
|
+
backup(): Promise<{
|
|
23
|
+
token: string;
|
|
24
|
+
refreshToken: string;
|
|
25
|
+
} | null>;
|
|
26
|
+
authenticate({ refreshToken, token }: TokenAuthData): Promise<void>;
|
|
27
|
+
clear(): void;
|
|
28
|
+
authenticateRequest(option: RequestInit): Promise<RequestInit>;
|
|
29
|
+
socketOptions(): Promise<ClientOptions | undefined>;
|
|
30
|
+
private _getToken;
|
|
31
|
+
private _renewTokenSafe;
|
|
32
|
+
private _updateTokens;
|
|
33
|
+
/**
|
|
34
|
+
* This is a fallback for browsers, where we can't set headers on WebSocket requests.
|
|
35
|
+
* Normally a browser should use CookieAuthManager
|
|
36
|
+
* @private
|
|
37
|
+
*/
|
|
38
|
+
private _updateCookies;
|
|
39
|
+
private _renewToken;
|
|
40
|
+
}
|
|
41
|
+
export default TokenAuthManager;
|
|
@@ -12,72 +12,104 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const utils_1 = require("
|
|
16
|
-
const ApiClient_1 = require("
|
|
17
|
-
const isNodejs_1 = __importDefault(require("
|
|
15
|
+
const utils_1 = require("../utils");
|
|
16
|
+
const ApiClient_1 = require("../../ApiClient");
|
|
17
|
+
const isNodejs_1 = __importDefault(require("../isNodejs"));
|
|
18
18
|
const js_cookie_1 = __importDefault(require("js-cookie"));
|
|
19
|
-
const
|
|
20
|
-
class
|
|
19
|
+
const AuthManagerBase_1 = __importDefault(require("./AuthManagerBase"));
|
|
20
|
+
class TokenAuthManager extends AuthManagerBase_1.default {
|
|
21
21
|
constructor(baseUrl, logger) {
|
|
22
|
-
super();
|
|
22
|
+
super(logger);
|
|
23
23
|
this._tokenExpiresAt = new Date(0);
|
|
24
24
|
this._refreshTokenExpiresAt = new Date(0);
|
|
25
|
-
this._logger = logger;
|
|
26
25
|
this._baseUrl = baseUrl;
|
|
27
26
|
}
|
|
28
|
-
get refreshToken() {
|
|
29
|
-
return this._refreshToken;
|
|
30
|
-
}
|
|
31
|
-
get walletAddress() {
|
|
32
|
-
return this._walletAddress;
|
|
33
|
-
}
|
|
34
27
|
get isAuthenticated() {
|
|
35
28
|
return !!this._refreshToken && this._refreshTokenExpiresAt > new Date();
|
|
36
29
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
domain: '.sogni.ai',
|
|
45
|
-
expires: 1
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
js_cookie_1.default.remove('authorization', {
|
|
50
|
-
domain: '.sogni.ai'
|
|
51
|
-
});
|
|
52
|
-
}
|
|
30
|
+
backup() {
|
|
31
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
if (this._token && this._refreshToken) {
|
|
33
|
+
return { token: this._token, refreshToken: this._refreshToken };
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
});
|
|
53
37
|
}
|
|
54
|
-
|
|
38
|
+
authenticate(_a) {
|
|
55
39
|
return __awaiter(this, arguments, void 0, function* ({ refreshToken, token }) {
|
|
40
|
+
// If there is a token, and it is not expired, authenticate with it
|
|
56
41
|
if (token) {
|
|
57
|
-
|
|
58
|
-
|
|
42
|
+
const { expiresAt } = (0, utils_1.decodeToken)(token);
|
|
43
|
+
if (expiresAt > new Date()) {
|
|
44
|
+
this._updateTokens({ token, refreshToken });
|
|
45
|
+
this.emit('updated', true);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
59
48
|
}
|
|
49
|
+
// If token is expired, try to renew it with the refresh token
|
|
60
50
|
this._refreshToken = refreshToken;
|
|
61
51
|
const { expiresAt: refreshExpiresAt } = (0, utils_1.decodeRefreshToken)(refreshToken);
|
|
62
52
|
this._refreshTokenExpiresAt = refreshExpiresAt;
|
|
63
|
-
yield this.
|
|
53
|
+
yield this._renewTokenSafe();
|
|
54
|
+
this.emit('updated', true);
|
|
64
55
|
});
|
|
65
56
|
}
|
|
66
|
-
|
|
57
|
+
clear() {
|
|
58
|
+
// Prevent duplicate events
|
|
59
|
+
if (!this._token && !this._refreshToken) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
this._refreshToken = undefined;
|
|
63
|
+
this._refreshTokenExpiresAt = new Date(0);
|
|
64
|
+
this._token = undefined;
|
|
65
|
+
this._tokenExpiresAt = new Date(0);
|
|
66
|
+
this.emit('updated', false);
|
|
67
|
+
}
|
|
68
|
+
authenticateRequest(option) {
|
|
67
69
|
return __awaiter(this, void 0, void 0, function* () {
|
|
68
70
|
//If there is a token, and it is not expired, return it
|
|
71
|
+
if (this._token && this._tokenExpiresAt > new Date()) {
|
|
72
|
+
return Object.assign(Object.assign({}, option), { headers: Object.assign(Object.assign({}, option.headers), { Authorization: this._token }) });
|
|
73
|
+
}
|
|
74
|
+
//If there is no refresh token, return undefined, to make unauthorized requests
|
|
75
|
+
if (!this._refreshToken) {
|
|
76
|
+
return option;
|
|
77
|
+
}
|
|
78
|
+
//If there is a refresh token, try to renew the token
|
|
79
|
+
const token = yield this._renewTokenSafe();
|
|
80
|
+
return Object.assign(Object.assign({}, option), { headers: Object.assign(Object.assign({}, option.headers), { Authorization: token }) });
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
socketOptions() {
|
|
84
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
85
|
+
if (!isNodejs_1.default) {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
const token = yield this._getToken();
|
|
89
|
+
if (!token) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
headers: {
|
|
94
|
+
Authorization: token
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
_getToken() {
|
|
100
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
101
|
if (this._token && this._tokenExpiresAt > new Date()) {
|
|
70
102
|
return this._token;
|
|
71
103
|
}
|
|
72
104
|
//If there is no refresh token, return undefined, to make unauthorized requests
|
|
73
105
|
if (!this._refreshToken) {
|
|
74
|
-
return;
|
|
106
|
+
return undefined;
|
|
75
107
|
}
|
|
76
108
|
//If there is a refresh token, try to renew the token
|
|
77
|
-
return this.
|
|
109
|
+
return this._renewTokenSafe();
|
|
78
110
|
});
|
|
79
111
|
}
|
|
80
|
-
|
|
112
|
+
_renewTokenSafe() {
|
|
81
113
|
return __awaiter(this, void 0, void 0, function* () {
|
|
82
114
|
if (this._renewTokenPromise) {
|
|
83
115
|
return this._renewTokenPromise;
|
|
@@ -89,32 +121,41 @@ class AuthManager extends TypedEventEmitter_1.default {
|
|
|
89
121
|
return this._renewTokenPromise;
|
|
90
122
|
});
|
|
91
123
|
}
|
|
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
124
|
_updateTokens({ token, refreshToken }) {
|
|
105
125
|
// Prevent duplicate events
|
|
106
126
|
if (this._token === token && this._refreshToken === refreshToken) {
|
|
107
127
|
return;
|
|
108
128
|
}
|
|
109
129
|
this._token = token;
|
|
110
|
-
const { expiresAt
|
|
111
|
-
this._walletAddress = walletAddress;
|
|
130
|
+
const { expiresAt } = (0, utils_1.decodeToken)(token);
|
|
112
131
|
this._tokenExpiresAt = expiresAt;
|
|
113
132
|
this._refreshToken = refreshToken;
|
|
114
133
|
const { expiresAt: refreshExpiresAt } = (0, utils_1.decodeRefreshToken)(refreshToken);
|
|
115
134
|
this._refreshTokenExpiresAt = refreshExpiresAt;
|
|
116
135
|
this._updateCookies();
|
|
117
|
-
this.emit('updated',
|
|
136
|
+
this.emit('updated', true);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* This is a fallback for browsers, where we can't set headers on WebSocket requests.
|
|
140
|
+
* Normally a browser should use CookieAuthManager
|
|
141
|
+
* @private
|
|
142
|
+
*/
|
|
143
|
+
_updateCookies() {
|
|
144
|
+
if (isNodejs_1.default) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const token = this._token;
|
|
148
|
+
if (token) {
|
|
149
|
+
js_cookie_1.default.set('authorization', token, {
|
|
150
|
+
domain: '.sogni.ai',
|
|
151
|
+
expires: 1
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
js_cookie_1.default.remove('authorization', {
|
|
156
|
+
domain: '.sogni.ai'
|
|
157
|
+
});
|
|
158
|
+
}
|
|
118
159
|
}
|
|
119
160
|
_renewToken() {
|
|
120
161
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -134,16 +175,11 @@ class AuthManager extends TypedEventEmitter_1.default {
|
|
|
134
175
|
responseData = yield response.json();
|
|
135
176
|
}
|
|
136
177
|
catch (e) {
|
|
137
|
-
this.
|
|
138
|
-
status: 'error',
|
|
139
|
-
errorCode: 0,
|
|
140
|
-
message: 'Failed to parse response'
|
|
141
|
-
});
|
|
178
|
+
this.clear();
|
|
142
179
|
this._logger.error('Failed to parse response:', e);
|
|
143
180
|
throw new Error('Failed to parse response');
|
|
144
181
|
}
|
|
145
182
|
if (!response.ok) {
|
|
146
|
-
this.emit('refreshFailed', responseData);
|
|
147
183
|
this.clear();
|
|
148
184
|
throw new ApiClient_1.ApiError(response.status, responseData);
|
|
149
185
|
}
|
|
@@ -153,5 +189,5 @@ class AuthManager extends TypedEventEmitter_1.default {
|
|
|
153
189
|
});
|
|
154
190
|
}
|
|
155
191
|
}
|
|
156
|
-
exports.default =
|
|
157
|
-
//# sourceMappingURL=
|
|
192
|
+
exports.default = TokenAuthManager;
|
|
193
|
+
//# sourceMappingURL=TokenAuthManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenAuthManager.js","sourceRoot":"","sources":["../../../src/lib/AuthManager/TokenAuthManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import CookieAuthManager from './CookieAuthManager';
|
|
2
|
+
import TokenAuthManager, { TokenAuthData } from './TokenAuthManager';
|
|
3
|
+
export type { TokenAuthData };
|
|
4
|
+
export { CookieAuthManager, TokenAuthManager };
|
|
5
|
+
export type AuthManager = CookieAuthManager | TokenAuthManager;
|
|
@@ -0,0 +1,11 @@
|
|
|
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.TokenAuthManager = exports.CookieAuthManager = void 0;
|
|
7
|
+
const CookieAuthManager_1 = __importDefault(require("./CookieAuthManager"));
|
|
8
|
+
exports.CookieAuthManager = CookieAuthManager_1.default;
|
|
9
|
+
const TokenAuthManager_1 = __importDefault(require("./TokenAuthManager"));
|
|
10
|
+
exports.TokenAuthManager = TokenAuthManager_1.default;
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/AuthManager/index.ts"],"names":[],"mappings":";;;;;;AAAA,4EAAoD;AAK3C,4BALF,2BAAiB,CAKE;AAJ1B,0EAAqE;AAIzC,2BAJrB,0BAAgB,CAIqB"}
|
package/dist/lib/RestClient.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import TypedEventEmitter, { EventMap } from './TypedEventEmitter';
|
|
2
2
|
import { JSONValue } from '../types/json';
|
|
3
3
|
import { Logger } from './DefaultLogger';
|
|
4
|
-
import AuthManager from './AuthManager';
|
|
4
|
+
import { AuthManager } from './AuthManager';
|
|
5
5
|
declare class RestClient<E extends EventMap = never> extends TypedEventEmitter<E> {
|
|
6
6
|
readonly baseUrl: string;
|
|
7
7
|
protected _auth: AuthManager;
|
package/dist/lib/RestClient.js
CHANGED
|
@@ -33,8 +33,8 @@ class RestClient extends TypedEventEmitter_1.default {
|
|
|
33
33
|
}
|
|
34
34
|
request(url_1) {
|
|
35
35
|
return __awaiter(this, arguments, void 0, function* (url, options = {}) {
|
|
36
|
-
const
|
|
37
|
-
return fetch(url,
|
|
36
|
+
const init = yield this.auth.authenticateRequest(options);
|
|
37
|
+
return fetch(url, init).then((r) => this.processResponse(r));
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
40
|
processResponse(response) {
|
|
@@ -47,6 +47,10 @@ class RestClient extends TypedEventEmitter_1.default {
|
|
|
47
47
|
this._logger.error('Failed to parse response:', e);
|
|
48
48
|
throw new Error('Failed to parse response');
|
|
49
49
|
}
|
|
50
|
+
// 401 means that the client instance is not authenticated, so we clear the authentication
|
|
51
|
+
if (response.status === 401 && this.auth.isAuthenticated) {
|
|
52
|
+
this.auth.clear();
|
|
53
|
+
}
|
|
50
54
|
if (!response.ok) {
|
|
51
55
|
throw new ApiClient_1.ApiError(response.status, responseData);
|
|
52
56
|
}
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAC1D,OAAO,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAM,CAAC,CAAC;QACpE,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,0FAA0F;YAC1F,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpB,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"}
|
package/package.json
CHANGED
|
@@ -19,8 +19,7 @@ export interface AccountData {
|
|
|
19
19
|
balance: Balances;
|
|
20
20
|
walletAddress?: string;
|
|
21
21
|
username?: string;
|
|
22
|
-
|
|
23
|
-
refreshToken?: string;
|
|
22
|
+
email?: string;
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
function getDefaults(): AccountData {
|
|
@@ -43,9 +42,7 @@ function getDefaults(): AccountData {
|
|
|
43
42
|
}
|
|
44
43
|
},
|
|
45
44
|
walletAddress: undefined,
|
|
46
|
-
username: undefined
|
|
47
|
-
token: undefined,
|
|
48
|
-
refreshToken: undefined
|
|
45
|
+
username: undefined
|
|
49
46
|
};
|
|
50
47
|
}
|
|
51
48
|
|
|
@@ -63,7 +60,7 @@ class CurrentAccount extends DataEntity<AccountData> {
|
|
|
63
60
|
}
|
|
64
61
|
|
|
65
62
|
get isAuthenicated() {
|
|
66
|
-
return !!this.data.
|
|
63
|
+
return !!this.data.walletAddress;
|
|
67
64
|
}
|
|
68
65
|
|
|
69
66
|
get networkStatus() {
|
|
@@ -86,12 +83,8 @@ class CurrentAccount extends DataEntity<AccountData> {
|
|
|
86
83
|
return this.data.username;
|
|
87
84
|
}
|
|
88
85
|
|
|
89
|
-
get
|
|
90
|
-
return this.data.
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
get refreshToken() {
|
|
94
|
-
return this.data.refreshToken;
|
|
86
|
+
get email() {
|
|
87
|
+
return this.data.email;
|
|
95
88
|
}
|
|
96
89
|
}
|
|
97
90
|
|