@cloudbase/oauth 0.0.2-alpha.0 → 0.1.1-alpha
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 +30 -0
- package/README.md +137 -5
- package/app/index.d.ts +28 -0
- package/app/index.js +54 -0
- package/app/index.js.map +1 -0
- package/app/internal.d.ts +12 -0
- package/app/internal.js +25 -0
- package/app/internal.js.map +1 -0
- package/app/openuri.d.ts +20 -0
- package/app/openuri.js +104 -0
- package/app/openuri.js.map +1 -0
- package/app/request.d.ts +18 -0
- package/app/request.js +44 -0
- package/app/request.js.map +1 -0
- package/app/storage.d.ts +41 -0
- package/app/storage.js +35 -0
- package/app/storage.js.map +1 -0
- package/{dist/auth → auth}/consts.d.ts +21 -1
- package/auth/consts.js +57 -0
- package/auth/consts.js.map +1 -0
- package/auth/index.d.ts +193 -0
- package/auth/index.js +403 -0
- package/auth/index.js.map +1 -0
- package/{dist/auth → auth}/models.d.ts +35 -22
- package/auth/models.js +3 -0
- package/auth/models.js.map +1 -0
- package/captcha/index.d.ts +45 -0
- package/captcha/index.js +133 -0
- package/captcha/index.js.map +1 -0
- package/index.d.ts +8 -0
- package/index.js +17 -0
- package/index.js.map +1 -0
- package/{dist/oauth2client → oauthclient}/consts.d.ts +1 -22
- package/oauthclient/consts.js +53 -0
- package/oauthclient/consts.js.map +1 -0
- package/oauthclient/index.d.ts +18 -0
- package/oauthclient/index.js +21 -0
- package/oauthclient/index.js.map +1 -0
- package/oauthclient/interface.d.ts +25 -0
- package/oauthclient/interface.js +10 -0
- package/oauthclient/interface.js.map +1 -0
- package/{dist/oauth2client → oauthclient}/models.d.ts +5 -13
- package/oauthclient/models.js +3 -0
- package/oauthclient/models.js.map +1 -0
- package/oauthclient/oauthclient.d.ts +142 -0
- package/{src/oauth2client/oauth2client.ts → oauthclient/oauthclient.js} +113 -265
- package/oauthclient/oauthclient.js.map +1 -0
- package/package.json +20 -19
- package/utils/single-promise.d.ts +18 -0
- package/utils/single-promise.js +48 -0
- package/utils/single-promise.js.map +1 -0
- package/utils/uuid.d.ts +5 -0
- package/utils/uuid.js +16 -0
- package/utils/uuid.js.map +1 -0
- package/.eslintignore +0 -2
- package/.eslintrc +0 -26
- package/dist/auth/apis.d.ts +0 -40
- package/dist/auth/apis.js +0 -422
- package/dist/auth/consts.js +0 -35
- package/dist/auth/models.js +0 -3
- package/dist/captcha/captcha.d.ts +0 -35
- package/dist/captcha/captcha.js +0 -262
- package/dist/index.d.ts +0 -7
- package/dist/index.js +0 -38
- package/dist/oauth2client/consts.js +0 -73
- package/dist/oauth2client/interface.d.ts +0 -12
- package/dist/oauth2client/interface.js +0 -10
- package/dist/oauth2client/models.js +0 -3
- package/dist/oauth2client/oauth2client.d.ts +0 -64
- package/dist/oauth2client/oauth2client.js +0 -585
- package/dist/utils/function/single-promise.d.ts +0 -5
- package/dist/utils/function/single-promise.js +0 -89
- package/dist/utils/uuid.d.ts +0 -1
- package/dist/utils/uuid.js +0 -12
- package/src/auth/apis.ts +0 -484
- package/src/auth/consts.ts +0 -30
- package/src/auth/models.ts +0 -175
- package/src/captcha/captcha.ts +0 -217
- package/src/index.ts +0 -24
- package/src/oauth2client/consts.ts +0 -69
- package/src/oauth2client/interface.ts +0 -44
- package/src/oauth2client/models.ts +0 -61
- package/src/utils/function/single-promise.ts +0 -40
- package/src/utils/uuid.ts +0 -11
- package/tsconfig.json +0 -44
|
@@ -1,28 +1,26 @@
|
|
|
1
|
-
interface
|
|
2
|
-
client_id?: string;
|
|
3
|
-
}
|
|
4
|
-
export interface SignInRequest extends BaseRequest {
|
|
1
|
+
export interface SignInRequest {
|
|
5
2
|
username?: string;
|
|
6
3
|
password?: string;
|
|
7
|
-
verification_code?: string;
|
|
8
4
|
verification_token?: string;
|
|
9
5
|
}
|
|
10
|
-
export interface SignInWithProviderRequest
|
|
6
|
+
export interface SignInWithProviderRequest {
|
|
11
7
|
provider_token: string;
|
|
8
|
+
provider_id?: string;
|
|
12
9
|
}
|
|
13
|
-
export interface SignUpRequest
|
|
10
|
+
export interface SignUpRequest {
|
|
14
11
|
phone_number?: string;
|
|
15
12
|
email?: string;
|
|
16
13
|
verification_code?: string;
|
|
17
14
|
verification_token?: string;
|
|
18
15
|
provider_token?: string;
|
|
16
|
+
username?: string;
|
|
19
17
|
password?: string;
|
|
20
18
|
name?: string;
|
|
21
19
|
gender?: string;
|
|
22
20
|
picture?: string;
|
|
23
21
|
locale?: string;
|
|
24
22
|
}
|
|
25
|
-
export interface GetVerificationRequest
|
|
23
|
+
export interface GetVerificationRequest {
|
|
26
24
|
phone_number?: string;
|
|
27
25
|
email?: string;
|
|
28
26
|
target?: string | 'ANY';
|
|
@@ -35,14 +33,14 @@ export interface GetVerificationResponse {
|
|
|
35
33
|
export interface VerifyResponse {
|
|
36
34
|
verification_token?: string;
|
|
37
35
|
}
|
|
38
|
-
export interface VerifyRequest
|
|
36
|
+
export interface VerifyRequest {
|
|
39
37
|
verification_code: string;
|
|
40
38
|
verification_id?: string;
|
|
41
39
|
}
|
|
42
40
|
export interface ProviderBindRequest {
|
|
43
41
|
provider_token: string;
|
|
44
42
|
}
|
|
45
|
-
export interface GrantProviderTokenRequest
|
|
43
|
+
export interface GrantProviderTokenRequest {
|
|
46
44
|
provider_id: string;
|
|
47
45
|
provider_redirect_uri?: string;
|
|
48
46
|
provider_code?: string;
|
|
@@ -53,7 +51,7 @@ export interface GrantProviderTokenResponse {
|
|
|
53
51
|
provider_token: string;
|
|
54
52
|
expires_in: number;
|
|
55
53
|
}
|
|
56
|
-
export interface PatchProviderTokenRequest
|
|
54
|
+
export interface PatchProviderTokenRequest {
|
|
57
55
|
provider_token: string;
|
|
58
56
|
provider_params: {
|
|
59
57
|
encryptedData: string;
|
|
@@ -77,7 +75,7 @@ export interface GenProviderRedirectUriResponse {
|
|
|
77
75
|
uri: string;
|
|
78
76
|
signout_uri?: string;
|
|
79
77
|
}
|
|
80
|
-
export interface BindWithProviderRequest
|
|
78
|
+
export interface BindWithProviderRequest {
|
|
81
79
|
provider_token: string;
|
|
82
80
|
}
|
|
83
81
|
export interface BindWithProviderRequest {
|
|
@@ -102,7 +100,6 @@ export interface UserProfile {
|
|
|
102
100
|
locale?: string;
|
|
103
101
|
created_from?: string;
|
|
104
102
|
}
|
|
105
|
-
export declare type UserInfo = UserProfile;
|
|
106
103
|
export interface ProviderProfile {
|
|
107
104
|
provider_id: string;
|
|
108
105
|
phone_number?: string;
|
|
@@ -110,7 +107,7 @@ export interface ProviderProfile {
|
|
|
110
107
|
export interface TransByProviderRequest {
|
|
111
108
|
provider_token: string;
|
|
112
109
|
}
|
|
113
|
-
export interface GrantTokenRequest
|
|
110
|
+
export interface GrantTokenRequest {
|
|
114
111
|
client_secret?: string;
|
|
115
112
|
code?: string;
|
|
116
113
|
grant_type?: string;
|
|
@@ -119,27 +116,43 @@ export interface GrantTokenRequest extends BaseRequest {
|
|
|
119
116
|
refresh_token?: string;
|
|
120
117
|
scope?: string;
|
|
121
118
|
}
|
|
122
|
-
export interface UnbindProviderRequest
|
|
119
|
+
export interface UnbindProviderRequest {
|
|
123
120
|
provider_id: string;
|
|
124
121
|
}
|
|
125
|
-
export interface CheckPasswordrRequest
|
|
122
|
+
export interface CheckPasswordrRequest {
|
|
126
123
|
password: string;
|
|
127
124
|
}
|
|
128
|
-
export interface BindPhoneRequest
|
|
125
|
+
export interface BindPhoneRequest {
|
|
129
126
|
phone_number: string;
|
|
130
127
|
sudo_token: string;
|
|
131
128
|
verification_token: string;
|
|
132
129
|
}
|
|
133
|
-
export interface SetPasswordRequest
|
|
130
|
+
export interface SetPasswordRequest {
|
|
131
|
+
new_password: string;
|
|
132
|
+
sudo_token: string;
|
|
133
|
+
}
|
|
134
|
+
export interface SetPasswordRequest {
|
|
134
135
|
new_password: string;
|
|
135
136
|
sudo_token: string;
|
|
136
137
|
}
|
|
137
|
-
export interface
|
|
138
|
+
export interface UpdatePasswordRequest {
|
|
139
|
+
old_password: string;
|
|
140
|
+
new_password: string;
|
|
141
|
+
}
|
|
142
|
+
export interface SudoRequest {
|
|
143
|
+
password?: string;
|
|
144
|
+
verification_token?: string;
|
|
145
|
+
}
|
|
146
|
+
export interface SudoResponse {
|
|
147
|
+
sudo_token?: string;
|
|
148
|
+
}
|
|
149
|
+
export interface ChangeBoundProviderRequest {
|
|
138
150
|
trans_token: string;
|
|
139
151
|
provider_id: string;
|
|
140
152
|
}
|
|
141
|
-
export
|
|
142
|
-
|
|
153
|
+
export interface ChangeBoundProviderResponse {
|
|
154
|
+
client_id: string;
|
|
155
|
+
}
|
|
156
|
+
export interface QueryUserProfileReq {
|
|
143
157
|
appended_params: string;
|
|
144
158
|
}
|
|
145
|
-
export {};
|
package/auth/models.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/auth/models.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { App, RequestOptions, RequestFn, Storage, OpenURIWithCallback } from "../app";
|
|
2
|
+
export interface CaptchaOptions {
|
|
3
|
+
request: RequestFn;
|
|
4
|
+
storage: Storage;
|
|
5
|
+
openURIWithCallback: OpenURIWithCallback;
|
|
6
|
+
}
|
|
7
|
+
export interface CaptchaInitOptions {
|
|
8
|
+
request?: RequestFn;
|
|
9
|
+
}
|
|
10
|
+
export declare function getCaptcha(app: App, opts?: CaptchaInitOptions): Captcha;
|
|
11
|
+
export interface CaptchaToken {
|
|
12
|
+
captcha_token: string;
|
|
13
|
+
expires_in: number;
|
|
14
|
+
expires_at?: Date | null;
|
|
15
|
+
}
|
|
16
|
+
export interface CaptchaRequestOptions extends RequestOptions {
|
|
17
|
+
withCaptcha?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface GetCaptchaResponse {
|
|
20
|
+
captcha_token?: string;
|
|
21
|
+
expires_in?: number;
|
|
22
|
+
url?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare class Captcha {
|
|
25
|
+
private _config;
|
|
26
|
+
private _tokenSectionName;
|
|
27
|
+
/**
|
|
28
|
+
* constructor
|
|
29
|
+
* @param {CaptchaOptions} opts
|
|
30
|
+
*/
|
|
31
|
+
constructor(opts: CaptchaOptions);
|
|
32
|
+
/**
|
|
33
|
+
* request http like simple fetch api, exp:request('/v1/user/me', {withCredentials:true})
|
|
34
|
+
* @param {string} url
|
|
35
|
+
* @param {AuthClientRequestOptions} options
|
|
36
|
+
*/
|
|
37
|
+
request<T>(url: string, options?: CaptchaRequestOptions): Promise<T>;
|
|
38
|
+
/**
|
|
39
|
+
* _getCaptchaToken get captcha token
|
|
40
|
+
*/
|
|
41
|
+
private _getCaptchaToken;
|
|
42
|
+
private _appendCaptchaTokenToURL;
|
|
43
|
+
private _saveCaptchaToken;
|
|
44
|
+
private _findCaptchaToken;
|
|
45
|
+
}
|
package/captcha/index.js
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Captcha = exports.getCaptcha = void 0;
|
|
4
|
+
const internal_1 = require("../app/internal");
|
|
5
|
+
function getCaptcha(app, opts) {
|
|
6
|
+
return internal_1._getComponent(app, "captcha", () => {
|
|
7
|
+
const initOpts = {
|
|
8
|
+
request: app.options.request,
|
|
9
|
+
storage: app.options.storage,
|
|
10
|
+
openURIWithCallback: app.options.openURIWithCallback,
|
|
11
|
+
};
|
|
12
|
+
if (opts && opts.request) {
|
|
13
|
+
initOpts.request = opts.request;
|
|
14
|
+
}
|
|
15
|
+
return new Captcha(initOpts);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
exports.getCaptcha = getCaptcha;
|
|
19
|
+
const GET_CAPTCHA_URL = '/auth/v1/captcha/init';
|
|
20
|
+
class Captcha {
|
|
21
|
+
/**
|
|
22
|
+
* constructor
|
|
23
|
+
* @param {CaptchaOptions} opts
|
|
24
|
+
*/
|
|
25
|
+
constructor(opts) {
|
|
26
|
+
this._config = opts;
|
|
27
|
+
this._tokenSectionName = 'captcha_';
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* request http like simple fetch api, exp:request('/v1/user/me', {withCredentials:true})
|
|
31
|
+
* @param {string} url
|
|
32
|
+
* @param {AuthClientRequestOptions} options
|
|
33
|
+
*/
|
|
34
|
+
async request(url, options) {
|
|
35
|
+
if (!options) {
|
|
36
|
+
options = {};
|
|
37
|
+
}
|
|
38
|
+
if (!options.method) {
|
|
39
|
+
options.method = 'GET';
|
|
40
|
+
}
|
|
41
|
+
const state = options.method + ":" + url;
|
|
42
|
+
let reqURL = url;
|
|
43
|
+
if (options.withCaptcha) {
|
|
44
|
+
reqURL = await this._appendCaptchaTokenToURL(url, state, false);
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
return this._config.request(reqURL, options);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
if (err.error === 'captcha_required' || err.error === 'captcha_invalid') {
|
|
51
|
+
url = await this._appendCaptchaTokenToURL(url, state, err.error === 'captcha_invalid');
|
|
52
|
+
return this._config.request(url, options);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
return Promise.reject(err);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* _getCaptchaToken get captcha token
|
|
61
|
+
*/
|
|
62
|
+
async _getCaptchaToken(forceNewToken, state) {
|
|
63
|
+
if (!forceNewToken) {
|
|
64
|
+
// if local has captcha token then return
|
|
65
|
+
const captchaToken = await this._findCaptchaToken();
|
|
66
|
+
if (captchaToken) {
|
|
67
|
+
return captchaToken;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const redirectURL = window.location.origin + window.location.pathname;
|
|
71
|
+
const captchaTokenResp = await this._config.request(GET_CAPTCHA_URL, {
|
|
72
|
+
method: 'POST',
|
|
73
|
+
body: {
|
|
74
|
+
redirect_uri: redirectURL,
|
|
75
|
+
state: state
|
|
76
|
+
},
|
|
77
|
+
withBasicAuth: true,
|
|
78
|
+
});
|
|
79
|
+
if (captchaTokenResp.captcha_token) {
|
|
80
|
+
const captchaToken = {
|
|
81
|
+
captcha_token: captchaTokenResp.captcha_token,
|
|
82
|
+
expires_in: captchaTokenResp.expires_in,
|
|
83
|
+
};
|
|
84
|
+
await this._saveCaptchaToken(captchaToken);
|
|
85
|
+
return captchaTokenResp.captcha_token;
|
|
86
|
+
}
|
|
87
|
+
const callbackData = await this._config.openURIWithCallback(captchaTokenResp.url, { width: '355px', height: '355px' });
|
|
88
|
+
const captchaToken = {
|
|
89
|
+
captcha_token: callbackData.captcha_token,
|
|
90
|
+
expires_in: Number(callbackData.expires_in)
|
|
91
|
+
};
|
|
92
|
+
await this._saveCaptchaToken(captchaToken);
|
|
93
|
+
return captchaToken.captcha_token;
|
|
94
|
+
}
|
|
95
|
+
async _appendCaptchaTokenToURL(url, state, forceNewToken) {
|
|
96
|
+
const captchaToken = await this._getCaptchaToken(forceNewToken, state);
|
|
97
|
+
if (url.indexOf("?") > 0) {
|
|
98
|
+
url += "&captcha_token=" + captchaToken;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
url += "?captcha_token=" + captchaToken;
|
|
102
|
+
}
|
|
103
|
+
return url;
|
|
104
|
+
}
|
|
105
|
+
async _saveCaptchaToken(token) {
|
|
106
|
+
token.expires_at = new Date(Date.now() + (token.expires_in - 10) * 1000);
|
|
107
|
+
const tokenStr = JSON.stringify(token);
|
|
108
|
+
await this._config.storage.setItem(this._tokenSectionName, tokenStr);
|
|
109
|
+
}
|
|
110
|
+
async _findCaptchaToken() {
|
|
111
|
+
const tokenStr = await this._config.storage.getItem(this._tokenSectionName);
|
|
112
|
+
if (tokenStr !== undefined && tokenStr !== null) {
|
|
113
|
+
try {
|
|
114
|
+
const captchaToken = JSON.parse(tokenStr);
|
|
115
|
+
if (captchaToken && captchaToken.expires_at) {
|
|
116
|
+
captchaToken.expires_at = new Date(captchaToken.expires_at);
|
|
117
|
+
}
|
|
118
|
+
const isExpired = captchaToken.expires_at < new Date();
|
|
119
|
+
if (isExpired) {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
return captchaToken.captcha_token;
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
await this._config.storage.removeItem(this._tokenSectionName);
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
exports.Captcha = Captcha;
|
|
133
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/captcha/index.ts"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
package/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Client = exports.initializeClient = void 0;
|
|
4
|
+
const auth_1 = require("./auth");
|
|
5
|
+
const app_1 = require("./app");
|
|
6
|
+
function initializeClient(options) {
|
|
7
|
+
return new Client(options);
|
|
8
|
+
}
|
|
9
|
+
exports.initializeClient = initializeClient;
|
|
10
|
+
class Client {
|
|
11
|
+
constructor(initOptions) {
|
|
12
|
+
this.app = app_1.initializeApp(initOptions);
|
|
13
|
+
this.auth = auth_1.getAuth(this.app);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.Client = Client;
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iCAAqC;AACrC,+BAAkD;AAElD,SAAgB,gBAAgB,CAAC,OAAgB;IAC7C,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAFD,4CAEC;AAED,MAAa,MAAM;IAIf,YAAY,WAAoB;QAC5B,IAAI,CAAC,GAAG,GAAG,mBAAa,CAAC,WAAW,CAAC,CAAA;QACrC,IAAI,CAAC,IAAI,GAAG,cAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC;CACJ;AARD,wBAQC"}
|
|
@@ -36,32 +36,11 @@ export declare enum ErrorType {
|
|
|
36
36
|
INTERNAL = "internal",
|
|
37
37
|
UNAVAILABLE = "unavailable",
|
|
38
38
|
DATA_LOSS = "data_loss",
|
|
39
|
-
CAPTCHA_REQUIRED = "captcha_required",
|
|
40
|
-
CAPTCHA_INVALID = "captcha_invalid",
|
|
41
|
-
INVALID_PASSWORD = "invalid_password",
|
|
42
|
-
INVALID_STATUS = "invalid_status",
|
|
43
|
-
USER_PENDING = "user_pending",
|
|
44
|
-
USER_BLOCKED = "user_blocked",
|
|
45
|
-
INVALID_VERIFICATION_CODE = "invalid_verification_code",
|
|
46
|
-
TWO_FACTOR_REQUIRED = "two_factor_required",
|
|
47
|
-
INVALID_TWO_FACTOR = "invalid_two_factor",
|
|
48
|
-
INVALID_TWO_FACTOR_RECOVERY = "invalid_two_factor_recovery",
|
|
49
|
-
UNDER_REVIEW = "under_review",
|
|
50
|
-
INVALID_REQUEST = "invalid_request",
|
|
51
|
-
UNAUTHORIZED_CLIENT = "unauthorized_client",
|
|
52
39
|
ACCESS_DENIED = "access_denied",
|
|
53
40
|
UNSUPPORTED_RESPONSE_TYPE = "unsupported_response_type",
|
|
54
41
|
INVALID_SCOPE = "invalid_scope",
|
|
55
42
|
INVALID_GRANT = "invalid_grant",
|
|
56
43
|
SERVER_ERROR = "server_error",
|
|
57
44
|
TEMPORARILY_UNAVAILABLE = "temporarily_unavailable",
|
|
58
|
-
INTERACTION_REQUIRED = "interaction_required"
|
|
59
|
-
LOGIN_REQUIRED = "login_required",
|
|
60
|
-
ACCOUNT_SELECTION_REQUIRED = "account_selection_required",
|
|
61
|
-
CONSENT_REQUIRED = "consent_required",
|
|
62
|
-
INVALID_REQUEST_URI = "invalid_request_uri",
|
|
63
|
-
INVALID_REQUEST_OBJECT = "invalid_request_object",
|
|
64
|
-
REQUEST_NOT_SUPPORTED = "request_not_supported",
|
|
65
|
-
REQUEST_URI_NOT_SUPPORTED = "request_uri_not_supported",
|
|
66
|
-
REGISTRATION_NOT_SUPPORTED = "registration_not_supported"
|
|
45
|
+
INTERACTION_REQUIRED = "interaction_required"
|
|
67
46
|
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ErrorType = exports.Syntax = void 0;
|
|
4
|
+
var Syntax;
|
|
5
|
+
(function (Syntax) {
|
|
6
|
+
Syntax["CLIENT_ID"] = "client_id";
|
|
7
|
+
Syntax["CLIENT_SECRET"] = "client_secret";
|
|
8
|
+
Syntax["RESPONSE_TYPE"] = "response_type";
|
|
9
|
+
Syntax["SCOPE"] = "scope";
|
|
10
|
+
Syntax["STATE"] = "state";
|
|
11
|
+
Syntax["REDIRECT_URI"] = "redirect_uri";
|
|
12
|
+
Syntax["ERROR"] = "error";
|
|
13
|
+
Syntax["ERROR_DESCRIPTION"] = "error_description";
|
|
14
|
+
Syntax["ERROR_URI"] = "error_uri";
|
|
15
|
+
Syntax["GRANT_TYPE"] = "grant_type";
|
|
16
|
+
Syntax["CODE"] = "code";
|
|
17
|
+
Syntax["ACCESS_TOKEN"] = "access_token";
|
|
18
|
+
Syntax["TOKEN_TYPE"] = "token_type";
|
|
19
|
+
Syntax["EXPIRES_IN"] = "expires_in";
|
|
20
|
+
Syntax["USERNAME"] = "username";
|
|
21
|
+
Syntax["PASSWORD"] = "password";
|
|
22
|
+
Syntax["REFRESH_TOKEN"] = "refresh_token";
|
|
23
|
+
})(Syntax = exports.Syntax || (exports.Syntax = {}));
|
|
24
|
+
var ErrorType;
|
|
25
|
+
(function (ErrorType) {
|
|
26
|
+
ErrorType["UNREACHABLE"] = "unreachable";
|
|
27
|
+
ErrorType["LOCAL"] = "local";
|
|
28
|
+
ErrorType["CANCELLED"] = "cancelled";
|
|
29
|
+
ErrorType["UNKNOWN"] = "unknown";
|
|
30
|
+
ErrorType["INVALID_ARGUMENT"] = "invalid_argument";
|
|
31
|
+
ErrorType["DEADLINE_EXCEEDED"] = "deadline_exceeded";
|
|
32
|
+
ErrorType["NOT_FOUND"] = "not_found";
|
|
33
|
+
ErrorType["ALREADY_EXISTS"] = "already_exists";
|
|
34
|
+
ErrorType["PERMISSION_DENIED"] = "permission_denied";
|
|
35
|
+
ErrorType["UNAUTHENTICATED"] = "unauthenticated";
|
|
36
|
+
ErrorType["RESOURCE_EXHAUSTED"] = "resource_exhausted";
|
|
37
|
+
ErrorType["FAILED_PRECONDITION"] = "failed_precondition";
|
|
38
|
+
ErrorType["ABORTED"] = "aborted";
|
|
39
|
+
ErrorType["OUT_OF_RANGE"] = "out_of_range";
|
|
40
|
+
ErrorType["UNIMPLEMENTED"] = "unimplemented";
|
|
41
|
+
ErrorType["INTERNAL"] = "internal";
|
|
42
|
+
ErrorType["UNAVAILABLE"] = "unavailable";
|
|
43
|
+
ErrorType["DATA_LOSS"] = "data_loss";
|
|
44
|
+
// CommonError
|
|
45
|
+
ErrorType["ACCESS_DENIED"] = "access_denied";
|
|
46
|
+
ErrorType["UNSUPPORTED_RESPONSE_TYPE"] = "unsupported_response_type";
|
|
47
|
+
ErrorType["INVALID_SCOPE"] = "invalid_scope";
|
|
48
|
+
ErrorType["INVALID_GRANT"] = "invalid_grant";
|
|
49
|
+
ErrorType["SERVER_ERROR"] = "server_error";
|
|
50
|
+
ErrorType["TEMPORARILY_UNAVAILABLE"] = "temporarily_unavailable";
|
|
51
|
+
ErrorType["INTERACTION_REQUIRED"] = "interaction_required";
|
|
52
|
+
})(ErrorType = exports.ErrorType || (exports.ErrorType = {}));
|
|
53
|
+
//# sourceMappingURL=consts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/oauthclient/consts.ts"],"names":[],"mappings":";;;AAAA,IAAY,MAkBX;AAlBD,WAAY,MAAM;IACd,iCAAuB,CAAA;IACvB,yCAA+B,CAAA;IAC/B,yCAA+B,CAAA;IAC/B,yBAAe,CAAA;IACf,yBAAe,CAAA;IACf,uCAA6B,CAAA;IAC7B,yBAAe,CAAA;IACf,iDAAuC,CAAA;IACvC,iCAAuB,CAAA;IACvB,mCAAyB,CAAA;IACzB,uBAAa,CAAA;IACb,uCAA6B,CAAA;IAC7B,mCAAyB,CAAA;IACzB,mCAAyB,CAAA;IACzB,+BAAqB,CAAA;IACrB,+BAAqB,CAAA;IACrB,yCAA+B,CAAA;AACnC,CAAC,EAlBW,MAAM,GAAN,cAAM,KAAN,cAAM,QAkBjB;AAED,IAAY,SA2BX;AA3BD,WAAY,SAAS;IACjB,wCAA2B,CAAA;IAC3B,4BAAe,CAAA;IACf,oCAAuB,CAAA;IACvB,gCAAmB,CAAA;IACnB,kDAAqC,CAAA;IACrC,oDAAuC,CAAA;IACvC,oCAAuB,CAAA;IACvB,8CAAiC,CAAA;IACjC,oDAAuC,CAAA;IACvC,gDAAmC,CAAA;IACnC,sDAAyC,CAAA;IACzC,wDAA2C,CAAA;IAC3C,gCAAmB,CAAA;IACnB,0CAA6B,CAAA;IAC7B,4CAA+B,CAAA;IAC/B,kCAAqB,CAAA;IACrB,wCAA2B,CAAA;IAC3B,oCAAuB,CAAA;IACvB,cAAc;IACd,4CAA+B,CAAA;IAC/B,oEAAuD,CAAA;IACvD,4CAA+B,CAAA;IAC/B,4CAA+B,CAAA;IAC/B,0CAA6B,CAAA;IAC7B,gEAAmD,CAAA;IACnD,0DAA6C,CAAA;AACjD,CAAC,EA3BW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QA2BpB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { App } from "../app";
|
|
2
|
+
import { Credentials as credentials, ResponseError as responseError } from './models';
|
|
3
|
+
import { AuthClient as authClient, RequestFn as requestFn } from "./interface";
|
|
4
|
+
export { ErrorType } from './consts';
|
|
5
|
+
export interface InitOptions {
|
|
6
|
+
request?: RequestFn;
|
|
7
|
+
retry?: number;
|
|
8
|
+
refreshTokenFunc?: (refreshToken?: string) => Promise<Credentials>;
|
|
9
|
+
tokenInURL?: boolean;
|
|
10
|
+
headers?: {
|
|
11
|
+
[key: string]: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export declare function getOAuthClient(app: App, opts?: InitOptions): authClient;
|
|
15
|
+
export declare type Credentials = credentials;
|
|
16
|
+
export declare type AuthClient = authClient;
|
|
17
|
+
export declare type RequestFn = requestFn;
|
|
18
|
+
export declare type ResponseError = responseError;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getOAuthClient = void 0;
|
|
4
|
+
const internal_1 = require("../app/internal");
|
|
5
|
+
const oauthclient_1 = require("./oauthclient");
|
|
6
|
+
var consts_1 = require("./consts");
|
|
7
|
+
Object.defineProperty(exports, "ErrorType", { enumerable: true, get: function () { return consts_1.ErrorType; } });
|
|
8
|
+
function getOAuthClient(app, opts) {
|
|
9
|
+
return internal_1._getComponent(app, "oauthclient", () => {
|
|
10
|
+
const appOpts = app.options;
|
|
11
|
+
const oauthOpts = {
|
|
12
|
+
clientId: appOpts.clientId,
|
|
13
|
+
clientSecret: appOpts.clientSecret,
|
|
14
|
+
request: appOpts.request,
|
|
15
|
+
storage: appOpts.storage,
|
|
16
|
+
};
|
|
17
|
+
return (new oauthclient_1.OAuth2Client(oauthOpts));
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
exports.getOAuthClient = getOAuthClient;
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/oauthclient/index.ts"],"names":[],"mappings":";;;AACA,8CAA8C;AAC9C,+CAA2C;AAG3C,mCAAmC;AAA3B,mGAAA,SAAS,OAAA;AAUjB,SAAgB,cAAc,CAAC,GAAQ,EAAE,IAAkB;IACvD,OAAO,wBAAa,CAAa,GAAG,EAAE,aAAa,EAAE,GAAe,EAAE;QAClE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;QAC3B,MAAM,SAAS,GAAG;YACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;SAC3B,CAAA;QACD,OAAO,CAAC,IAAI,0BAAY,CAAC,SAAS,CAAC,CAAC,CAAA;IACxC,CAAC,CAAC,CAAC;AACP,CAAC;AAXD,wCAWC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Credentials, AuthClientRequestOptions } from './models';
|
|
2
|
+
/**
|
|
3
|
+
* the interface for the Oauth2Client
|
|
4
|
+
*/
|
|
5
|
+
export declare abstract class AuthClient {
|
|
6
|
+
/**
|
|
7
|
+
* Sets the auth credentials.
|
|
8
|
+
*/
|
|
9
|
+
abstract setCredentials(credentials?: Credentials): void;
|
|
10
|
+
/**
|
|
11
|
+
* Provides an alternative fetch api request implementation with auth credentials
|
|
12
|
+
* if options.withCredentials:true, the request will auto add Authorization: Bearer <AccessToken> in the request
|
|
13
|
+
* error:
|
|
14
|
+
* - unreachable, the network error or response is not json
|
|
15
|
+
* - unauthenticated: has no validate access token
|
|
16
|
+
*/
|
|
17
|
+
abstract request: RequestFn;
|
|
18
|
+
/**
|
|
19
|
+
* get the current accessToken from AuthClient, you can use this to detect login status
|
|
20
|
+
* error:
|
|
21
|
+
* - unauthenticated: has no validate access token
|
|
22
|
+
*/
|
|
23
|
+
abstract getAccessToken(): Promise<string>;
|
|
24
|
+
}
|
|
25
|
+
export declare type RequestFn = <T>(url: string, options?: AuthClientRequestOptions) => Promise<T>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/oauthclient/interface.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,MAAsB,UAAU;CAqB/B;AArBD,gCAqBC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RequestFn, RequestOptions, Storage } from "../app";
|
|
2
2
|
import { ErrorType } from './consts';
|
|
3
3
|
export interface Credentials {
|
|
4
4
|
token_type?: string | null;
|
|
@@ -15,30 +15,22 @@ export interface ResponseError {
|
|
|
15
15
|
error_uri?: string | null;
|
|
16
16
|
details?: any | null;
|
|
17
17
|
}
|
|
18
|
-
export interface RequestOptions {
|
|
19
|
-
body?: any | null;
|
|
20
|
-
headers?: any | null;
|
|
21
|
-
method?: string;
|
|
22
|
-
[key: string]: any;
|
|
23
|
-
}
|
|
24
|
-
export declare type RequestFunction = <T>(url: string, options?: RequestOptions) => Promise<T>;
|
|
25
18
|
export interface AuthClientRequestOptions extends RequestOptions {
|
|
26
19
|
headers?: {
|
|
27
20
|
'x-request-id'?: string;
|
|
28
21
|
[key: string]: any;
|
|
29
22
|
} | null;
|
|
30
23
|
withCredentials?: boolean;
|
|
24
|
+
withBasicAuth?: boolean;
|
|
31
25
|
retry?: number;
|
|
32
26
|
[key: string]: any;
|
|
33
27
|
}
|
|
34
28
|
export interface OAuth2ClientOptions {
|
|
35
|
-
devMode?: boolean;
|
|
36
|
-
apiOrigin: string;
|
|
37
29
|
clientId: string;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
storage?: SimpleStorage;
|
|
30
|
+
storage: Storage;
|
|
31
|
+
request: RequestFn;
|
|
41
32
|
clientSecret?: string;
|
|
33
|
+
retry?: number;
|
|
42
34
|
refreshTokenFunc?: (refreshToken?: string) => Promise<Credentials>;
|
|
43
35
|
tokenInURL?: boolean;
|
|
44
36
|
headers?: {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/oauthclient/models.ts"],"names":[],"mappings":""}
|