@ts-core/oauth 3.0.23 → 3.0.25

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.
Files changed (47) hide show
  1. package/cjs/OAuthBase.d.ts +11 -10
  2. package/cjs/OAuthBase.js +8 -17
  3. package/cjs/external/browser.d.ts +2 -0
  4. package/cjs/external/browser.js +29 -0
  5. package/cjs/external/cordovaInAppBrowserPlugin.d.ts +3 -0
  6. package/cjs/external/{backend.js → cordovaInAppBrowserPlugin.js} +19 -4
  7. package/cjs/external/cordovaOAuthPlugin.d.ts +2 -0
  8. package/cjs/external/cordovaOAuthPlugin.js +28 -0
  9. package/cjs/external/index.d.ts +3 -0
  10. package/cjs/external/index.js +19 -0
  11. package/cjs/go/GoAuth.d.ts +1 -1
  12. package/cjs/go/GoAuth.js +1 -1
  13. package/cjs/ma/MaAuth.d.ts +1 -1
  14. package/cjs/ma/MaAuth.js +1 -1
  15. package/cjs/public-api.d.ts +3 -2
  16. package/cjs/public-api.js +3 -2
  17. package/cjs/vk/VkAuth.d.ts +1 -1
  18. package/cjs/vk/VkAuth.js +1 -1
  19. package/cjs/ya/YaAuth.d.ts +1 -1
  20. package/cjs/ya/YaAuth.js +1 -1
  21. package/esm/OAuthBase.d.ts +11 -10
  22. package/esm/OAuthBase.js +8 -17
  23. package/esm/external/browser.d.ts +2 -0
  24. package/esm/external/browser.js +25 -0
  25. package/esm/external/cordovaInAppBrowserPlugin.d.ts +3 -0
  26. package/esm/external/{backend.js → cordovaInAppBrowserPlugin.js} +17 -2
  27. package/esm/external/cordovaOAuthPlugin.d.ts +2 -0
  28. package/esm/external/cordovaOAuthPlugin.js +24 -0
  29. package/esm/external/index.d.ts +3 -0
  30. package/esm/external/index.js +3 -0
  31. package/esm/go/GoAuth.d.ts +1 -1
  32. package/esm/go/GoAuth.js +1 -1
  33. package/esm/ma/MaAuth.d.ts +1 -1
  34. package/esm/ma/MaAuth.js +1 -1
  35. package/esm/public-api.d.ts +3 -2
  36. package/esm/public-api.js +3 -2
  37. package/esm/vk/VkAuth.d.ts +1 -1
  38. package/esm/vk/VkAuth.js +1 -1
  39. package/esm/ya/YaAuth.d.ts +1 -1
  40. package/esm/ya/YaAuth.js +1 -1
  41. package/package.json +2 -2
  42. package/cjs/external/backend.d.ts +0 -3
  43. package/cjs/external/cordova.d.ts +0 -2
  44. package/cjs/external/cordova.js +0 -17
  45. package/esm/external/backend.d.ts +0 -3
  46. package/esm/external/cordova.d.ts +0 -2
  47. package/esm/external/cordova.js +0 -13
@@ -7,7 +7,8 @@ export declare abstract class OAuthBase<T = any> extends LoggerWrapper {
7
7
  popUpWidth: number;
8
8
  popUpHeight: number;
9
9
  popUpTarget: string;
10
- popUpMessageParser: IOAuthPopUpParser;
10
+ popUpOpener: IOAuthPopUpOpener;
11
+ popUpMessageParser: IOAuthPopUpMessageParser;
11
12
  redirectUri: string;
12
13
  isRejectWhenPopUpClosed: boolean;
13
14
  protected http: TransportHttp;
@@ -19,18 +20,17 @@ export declare abstract class OAuthBase<T = any> extends LoggerWrapper {
19
20
  protected _popUpCheckCloseTimer: any;
20
21
  constructor(logger: ILogger, applicationId: string, window?: Window);
21
22
  protected open(): Promise<IOAuthDto>;
22
- protected popUpOpen(): Window;
23
23
  protected popUpFocus(): void;
24
24
  protected popUpCheckClose: () => void;
25
25
  protected getUrlParams(): URLSearchParams;
26
- protected abstract getUrl(): string;
27
- protected messageHandler: (event: MessageEvent) => void;
28
- protected browserInternalMessageHandler: IOAuthPopUpParser;
29
- protected getOriginUrl(): string;
30
- protected getRedirectUri(): string;
26
+ protected popUpOpenHandler: () => Window;
27
+ protected popUpMessageHandler: (event: MessageEvent) => void;
28
+ abstract getPopUpUrl(): string;
29
+ getOriginUrl(): string;
30
+ getRedirectUri(): string;
31
31
  abstract getProfile(token: string, ...params: any[]): Promise<T>;
32
32
  abstract getTokenByCode(dto: IOAuthDto, secret: string): Promise<IOAuthToken>;
33
- parsePopUpResult(data: IOAuthPopUpDto): void;
33
+ parseResponse(data: IOAuthPopUpDto): void;
34
34
  getCode(): Promise<IOAuthDto>;
35
35
  getToken(): Promise<IOAuthDto>;
36
36
  close(): void;
@@ -49,8 +49,8 @@ export interface IOAuthDto {
49
49
  redirectUri: string;
50
50
  }
51
51
  export interface IOAuthPopUpDto {
52
- oAuthCodeOrToken: string;
53
52
  oAuthError: string;
53
+ oAuthCodeOrToken: string;
54
54
  }
55
55
  export interface IOAuthToken {
56
56
  state?: string;
@@ -66,4 +66,5 @@ export declare enum OAuthEvent {
66
66
  POPUP_OPENED = "POPUP_OPENED",
67
67
  POPUP_CLOSED = "POPUP_CLOSED"
68
68
  }
69
- export type IOAuthPopUpParser = (...params: any[]) => IOAuthPopUpDto;
69
+ export type IOAuthPopUpOpener = <T extends OAuthBase>(item: T, window: Window) => Window;
70
+ export type IOAuthPopUpMessageParser = <T extends OAuthBase>(item: T, event: MessageEvent) => IOAuthPopUpDto;
package/cjs/OAuthBase.js CHANGED
@@ -13,6 +13,7 @@ exports.OAuthEvent = exports.OAuthBase = void 0;
13
13
  const common_1 = require("@ts-core/common");
14
14
  const _ = require("lodash");
15
15
  const rxjs_1 = require("rxjs");
16
+ const external_1 = require("./external");
16
17
  class OAuthBase extends common_1.LoggerWrapper {
17
18
  constructor(logger, applicationId, window) {
18
19
  super(logger);
@@ -23,20 +24,17 @@ class OAuthBase extends common_1.LoggerWrapper {
23
24
  this.close();
24
25
  }
25
26
  };
26
- this.messageHandler = (event) => this.parsePopUpResult(this.popUpMessageParser(event));
27
- this.browserInternalMessageHandler = (event) => {
28
- return event.origin === this.getOriginUrl() && _.isObject(event.data) ? event.data : null;
29
- };
27
+ this.popUpOpenHandler = () => this.popUpOpener(this, this.window);
28
+ this.popUpMessageHandler = (event) => this.parseResponse(this.popUpMessageParser(this, event));
30
29
  this.http = new common_1.TransportHttp(logger, { method: 'get' });
31
30
  this.subject = new rxjs_1.Subject();
32
31
  this.popUpWidth = 430;
33
32
  this.popUpHeight = 520;
34
33
  this.popUpTarget = '_blank';
35
- this.popUpMessageParser = this.browserInternalMessageHandler;
36
- this.isRejectWhenPopUpClosed = true;
37
34
  this._urlParams = new Map();
38
35
  this.urlParams.set('state', common_1.RandomUtil.randomString());
39
36
  this.urlParams.set('display', 'popup');
37
+ (0, external_1.OAuthBrowserPropertiesSet)(this);
40
38
  }
41
39
  open() {
42
40
  return __awaiter(this, void 0, void 0, function* () {
@@ -45,21 +43,14 @@ class OAuthBase extends common_1.LoggerWrapper {
45
43
  return this.promise.promise;
46
44
  }
47
45
  this.promise = common_1.PromiseHandler.create();
48
- this.popUp = this.popUpOpen();
46
+ this.popUp = this.popUpOpenHandler();
49
47
  this.popUpFocus();
50
- this.window.addEventListener('message', this.messageHandler, false);
48
+ this.window.addEventListener('message', this.popUpMessageHandler, false);
51
49
  this.subject.next(new common_1.ObservableData(OAuthEvent.POPUP_OPENED, this.popUp));
52
50
  this.popUpCheckCloseTimer = setInterval(this.popUpCheckClose, common_1.DateUtil.MILLISECONDS_SECOND / 5);
53
51
  return this.promise.promise;
54
52
  });
55
53
  }
56
- popUpOpen() {
57
- let window = this.window;
58
- let top = (window.screen.height - this.popUpHeight) / 2;
59
- let left = (window.screen.width - this.popUpWidth) / 2;
60
- let item = window.open(this.getUrl(), this.popUpTarget, `scrollbars=yes,width=${this.popUpWidth},height=${this.popUpHeight},top=${top},left=${left}`);
61
- return item;
62
- }
63
54
  popUpFocus() {
64
55
  if (this.isPopUpOpened) {
65
56
  this.popUp.focus();
@@ -79,7 +70,7 @@ class OAuthBase extends common_1.LoggerWrapper {
79
70
  getRedirectUri() {
80
71
  return !_.isNil(this.redirectUri) ? this.redirectUri : `${this.getOriginUrl()}/oauth`;
81
72
  }
82
- parsePopUpResult(data) {
73
+ parseResponse(data) {
83
74
  if (_.isNil(data)) {
84
75
  return;
85
76
  }
@@ -106,7 +97,7 @@ class OAuthBase extends common_1.LoggerWrapper {
106
97
  });
107
98
  }
108
99
  close() {
109
- this.window.removeEventListener('message', this.messageHandler, false);
100
+ this.window.removeEventListener('message', this.popUpMessageHandler, false);
110
101
  this.popUpCheckCloseTimer = null;
111
102
  if (_.isNil(this.popUp)) {
112
103
  return;
@@ -0,0 +1,2 @@
1
+ import { OAuthBase } from '../OAuthBase';
2
+ export declare const OAuthBrowserPropertiesSet: (item: OAuthBase) => void;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OAuthBrowserPropertiesSet = void 0;
4
+ const _ = require("lodash");
5
+ const common_1 = require("@ts-core/common");
6
+ const OAuthBrowserPropertiesSet = (item) => {
7
+ item.popUpOpener = popUpOpener;
8
+ item.popUpMessageParser = popUpMessageParser;
9
+ item.isRejectWhenPopUpClosed = true;
10
+ };
11
+ exports.OAuthBrowserPropertiesSet = OAuthBrowserPropertiesSet;
12
+ function popUpOpener(item, window) {
13
+ let top = (window.screen.height - item.popUpHeight) / 2;
14
+ let left = (window.screen.width - item.popUpWidth) / 2;
15
+ return window.open(item.getPopUpUrl(), item.popUpTarget, `scrollbars=yes,width=${this.popUpWidth},height=${this.popUpHeight},top=${top},left=${left}`);
16
+ }
17
+ function popUpMessageParser(item, event) {
18
+ if (event.origin !== item.getOriginUrl()) {
19
+ return null;
20
+ }
21
+ let data = event.data;
22
+ if (!_.isObject(data)) {
23
+ return null;
24
+ }
25
+ if (!common_1.ObjectUtil.hasOwnProperty(data, 'oAuthCodeOrToken') && !common_1.ObjectUtil.hasOwnProperty(data, 'oAuthError')) {
26
+ return null;
27
+ }
28
+ return data;
29
+ }
@@ -0,0 +1,3 @@
1
+ import { IOAuthPopUpDto, OAuthBase } from '../OAuthBase';
2
+ export declare const OAuthCordovaInAppBrowserPluginPropertiesSet: (item: OAuthBase, redirectUri: string, method: IOAuthBackendMethod, timeout?: number) => void;
3
+ export type IOAuthBackendMethod = (state: string) => Promise<IOAuthPopUpDto>;
@@ -9,12 +9,27 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.OAuthBackendPropertiesSet = void 0;
12
+ exports.OAuthCordovaInAppBrowserPluginPropertiesSet = void 0;
13
+ const OAuthBase_1 = require("../OAuthBase");
13
14
  const common_1 = require("@ts-core/common");
14
15
  const rxjs_1 = require("rxjs");
15
- const OAuthBackendPropertiesSet = (item, redirectUri, method, timeout = common_1.DateUtil.MILLISECONDS_SECOND) => {
16
+ const _ = require("lodash");
17
+ const OAuthCordovaInAppBrowserPluginPropertiesSet = (item, redirectUri, method, timeout = common_1.DateUtil.MILLISECONDS_SECOND) => {
18
+ item.popUpOpener = popUpOpener;
16
19
  item.redirectUri = redirectUri;
17
20
  item.isRejectWhenPopUpClosed = false;
18
- item.popUpClosed.pipe((0, rxjs_1.delay)(timeout), (0, rxjs_1.takeUntil)(item.destroyed)).subscribe(() => __awaiter(void 0, void 0, void 0, function* () { return item.parsePopUpResult(yield method(item.state)); }));
21
+ item.popUpClosed.pipe((0, rxjs_1.delay)(timeout), (0, rxjs_1.takeUntil)(item.destroyed)).subscribe(() => __awaiter(void 0, void 0, void 0, function* () {
22
+ let data = yield method(item.state);
23
+ if (_.isEmpty(data)) {
24
+ data = { oAuthError: OAuthBase_1.OAuthBase.ERROR_WINDOW_CLOSED, oAuthCodeOrToken: null };
25
+ }
26
+ item.parseResponse(data);
27
+ }));
19
28
  };
20
- exports.OAuthBackendPropertiesSet = OAuthBackendPropertiesSet;
29
+ exports.OAuthCordovaInAppBrowserPluginPropertiesSet = OAuthCordovaInAppBrowserPluginPropertiesSet;
30
+ function popUpOpener(item, window) {
31
+ let top = (window.screen.height - item.popUpHeight) / 2;
32
+ let left = (window.screen.width - item.popUpWidth) / 2;
33
+ let popUp = window.open(this.getUrl(), item.popUpTarget, `scrollbars=yes,width=${this.popUpWidth},height=${this.popUpHeight},top=${top},left=${left}`);
34
+ return popUp;
35
+ }
@@ -0,0 +1,2 @@
1
+ import { OAuthBase } from '../OAuthBase';
2
+ export declare const OAuthCordovaOAuthPluginPropertiesSet: (item: OAuthBase, packageName: string) => void;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OAuthCordovaOAuthPluginPropertiesSet = void 0;
4
+ const OAuthParser_1 = require("../OAuthParser");
5
+ const _ = require("lodash");
6
+ const OAuthCordovaOAuthPluginPropertiesSet = (item, packageName) => {
7
+ item.popUpTarget = 'oauth:cordova';
8
+ item.popUpOpener = popUpOpener;
9
+ item.popUpMessageParser = popUpMessageParser;
10
+ item.redirectUri = `${packageName}://oauth_callback`;
11
+ item.isRejectWhenPopUpClosed = false;
12
+ };
13
+ exports.OAuthCordovaOAuthPluginPropertiesSet = OAuthCordovaOAuthPluginPropertiesSet;
14
+ function popUpOpener(item, window) {
15
+ let top = (window.screen.height - item.popUpHeight) / 2;
16
+ let left = (window.screen.width - item.popUpWidth) / 2;
17
+ let popUp = window.open(this.getUrl(), item.popUpTarget, `scrollbars=yes,width=${this.popUpWidth},height=${this.popUpHeight},top=${top},left=${left}`);
18
+ if (!_.isNil(popUp)) {
19
+ return popUp;
20
+ }
21
+ let fake = { focus: () => { }, close: () => { fake.closed = true; }, closed: false };
22
+ return fake;
23
+ }
24
+ function popUpMessageParser(item, event) {
25
+ let data = event.data;
26
+ let prefix = 'oauth::';
27
+ return _.isString(data) && data.includes(prefix) ? OAuthParser_1.OAuthParser.parse(JSON.parse(data.substring(prefix.length)), '') : null;
28
+ }
@@ -0,0 +1,3 @@
1
+ export * from './browser';
2
+ export * from './cordovaOAuthPlugin';
3
+ export * from './cordovaInAppBrowserPlugin';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./browser"), exports);
18
+ __exportStar(require("./cordovaOAuthPlugin"), exports);
19
+ __exportStar(require("./cordovaInAppBrowserPlugin"), exports);
@@ -3,7 +3,7 @@ import { IOAuthDto, IOAuthToken, OAuthBase } from '../OAuthBase';
3
3
  import { ILogger } from '@ts-core/common';
4
4
  export declare class GoAuth<T extends GoUser = GoUser> extends OAuthBase<T> {
5
5
  constructor(logger: ILogger, applicationId: string, window?: Window);
6
- protected getUrl(): string;
6
+ getPopUpUrl(): string;
7
7
  getProfile(token: string): Promise<T>;
8
8
  getTokenByCode(dto: IOAuthDto, secret: string): Promise<IOAuthToken>;
9
9
  }
package/cjs/go/GoAuth.js CHANGED
@@ -17,7 +17,7 @@ class GoAuth extends OAuthBase_1.OAuthBase {
17
17
  super(logger, applicationId, window);
18
18
  this.urlParams.set('scope', 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email');
19
19
  }
20
- getUrl() {
20
+ getPopUpUrl() {
21
21
  return `https://accounts.google.com/o/oauth2/v2/auth?${this.getUrlParams().toString()}`;
22
22
  }
23
23
  getProfile(token) {
@@ -4,7 +4,7 @@ import { MaUser } from "./MaUser";
4
4
  export declare class MaAuth<T extends MaUser = MaUser> extends OAuthBase<T> {
5
5
  constructor(logger: ILogger, applicationId: string, window?: Window);
6
6
  protected getUrlParams(): URLSearchParams;
7
- protected getUrl(): string;
7
+ getPopUpUrl(): string;
8
8
  getProfile(token: string): Promise<T>;
9
9
  getTokenByCode(dto: IOAuthDto, secret: string): Promise<IOAuthToken>;
10
10
  }
package/cjs/ma/MaAuth.js CHANGED
@@ -24,7 +24,7 @@ class MaAuth extends OAuthBase_1.OAuthBase {
24
24
  item.append('state', common_1.RandomUtil.randomString(43));
25
25
  return item;
26
26
  }
27
- getUrl() {
27
+ getPopUpUrl() {
28
28
  return `https://oauth.mail.ru/login?${this.getUrlParams().toString()}`;
29
29
  }
30
30
  getProfile(token) {
@@ -9,5 +9,6 @@ export * from './ya/YaUser';
9
9
  export * from './ya/YaAuth';
10
10
  export * from './ma/MaAuth';
11
11
  export * from './ma/MaUser';
12
- export * from './external/backend';
13
- export * from './external/cordova';
12
+ export * from './external/browser';
13
+ export * from './external/cordovaOAuthPlugin';
14
+ export * from './external/cordovaInAppBrowserPlugin';
package/cjs/public-api.js CHANGED
@@ -25,5 +25,6 @@ __exportStar(require("./ya/YaUser"), exports);
25
25
  __exportStar(require("./ya/YaAuth"), exports);
26
26
  __exportStar(require("./ma/MaAuth"), exports);
27
27
  __exportStar(require("./ma/MaUser"), exports);
28
- __exportStar(require("./external/backend"), exports);
29
- __exportStar(require("./external/cordova"), exports);
28
+ __exportStar(require("./external/browser"), exports);
29
+ __exportStar(require("./external/cordovaOAuthPlugin"), exports);
30
+ __exportStar(require("./external/cordovaInAppBrowserPlugin"), exports);
@@ -5,7 +5,7 @@ export declare class VkAuth<T extends VkUser = VkUser> extends OAuthBase<T> {
5
5
  v: string;
6
6
  private email;
7
7
  constructor(logger: ILogger, applicationId: string, window?: Window);
8
- protected getUrl(): string;
8
+ getPopUpUrl(): string;
9
9
  getProfile(token: string, fields?: string): Promise<T>;
10
10
  getTokenByCode(dto: IOAuthDto, secret: string): Promise<IOAuthToken>;
11
11
  }
package/cjs/vk/VkAuth.js CHANGED
@@ -20,7 +20,7 @@ class VkAuth extends OAuthBase_1.OAuthBase {
20
20
  this.v = '5.131';
21
21
  this.urlParams.set('scope', 'status,email');
22
22
  }
23
- getUrl() {
23
+ getPopUpUrl() {
24
24
  return `https://oauth.vk.com/authorize?${this.getUrlParams().toString()}`;
25
25
  }
26
26
  getProfile(token, fields) {
@@ -1,7 +1,7 @@
1
1
  import { IOAuthDto, IOAuthToken, OAuthBase } from "../OAuthBase";
2
2
  import { YaUser } from "./YaUser";
3
3
  export declare class YaAuth<T extends YaUser = YaUser> extends OAuthBase<T> {
4
- protected getUrl(): string;
4
+ getPopUpUrl(): string;
5
5
  getProfile(token: string): Promise<T>;
6
6
  getTokenByCode(dto: IOAuthDto, secret: string): Promise<IOAuthToken>;
7
7
  }
package/cjs/ya/YaAuth.js CHANGED
@@ -15,7 +15,7 @@ const OAuthBase_1 = require("../OAuthBase");
15
15
  const YaUser_1 = require("./YaUser");
16
16
  const _ = require("lodash");
17
17
  class YaAuth extends OAuthBase_1.OAuthBase {
18
- getUrl() {
18
+ getPopUpUrl() {
19
19
  return `https://oauth.yandex.ru/authorize?${this.getUrlParams().toString()}`;
20
20
  }
21
21
  getProfile(token) {
@@ -7,7 +7,8 @@ export declare abstract class OAuthBase<T = any> extends LoggerWrapper {
7
7
  popUpWidth: number;
8
8
  popUpHeight: number;
9
9
  popUpTarget: string;
10
- popUpMessageParser: IOAuthPopUpParser;
10
+ popUpOpener: IOAuthPopUpOpener;
11
+ popUpMessageParser: IOAuthPopUpMessageParser;
11
12
  redirectUri: string;
12
13
  isRejectWhenPopUpClosed: boolean;
13
14
  protected http: TransportHttp;
@@ -19,18 +20,17 @@ export declare abstract class OAuthBase<T = any> extends LoggerWrapper {
19
20
  protected _popUpCheckCloseTimer: any;
20
21
  constructor(logger: ILogger, applicationId: string, window?: Window);
21
22
  protected open(): Promise<IOAuthDto>;
22
- protected popUpOpen(): Window;
23
23
  protected popUpFocus(): void;
24
24
  protected popUpCheckClose: () => void;
25
25
  protected getUrlParams(): URLSearchParams;
26
- protected abstract getUrl(): string;
27
- protected messageHandler: (event: MessageEvent) => void;
28
- protected browserInternalMessageHandler: IOAuthPopUpParser;
29
- protected getOriginUrl(): string;
30
- protected getRedirectUri(): string;
26
+ protected popUpOpenHandler: () => Window;
27
+ protected popUpMessageHandler: (event: MessageEvent) => void;
28
+ abstract getPopUpUrl(): string;
29
+ getOriginUrl(): string;
30
+ getRedirectUri(): string;
31
31
  abstract getProfile(token: string, ...params: any[]): Promise<T>;
32
32
  abstract getTokenByCode(dto: IOAuthDto, secret: string): Promise<IOAuthToken>;
33
- parsePopUpResult(data: IOAuthPopUpDto): void;
33
+ parseResponse(data: IOAuthPopUpDto): void;
34
34
  getCode(): Promise<IOAuthDto>;
35
35
  getToken(): Promise<IOAuthDto>;
36
36
  close(): void;
@@ -49,8 +49,8 @@ export interface IOAuthDto {
49
49
  redirectUri: string;
50
50
  }
51
51
  export interface IOAuthPopUpDto {
52
- oAuthCodeOrToken: string;
53
52
  oAuthError: string;
53
+ oAuthCodeOrToken: string;
54
54
  }
55
55
  export interface IOAuthToken {
56
56
  state?: string;
@@ -66,4 +66,5 @@ export declare enum OAuthEvent {
66
66
  POPUP_OPENED = "POPUP_OPENED",
67
67
  POPUP_CLOSED = "POPUP_CLOSED"
68
68
  }
69
- export type IOAuthPopUpParser = (...params: any[]) => IOAuthPopUpDto;
69
+ export type IOAuthPopUpOpener = <T extends OAuthBase>(item: T, window: Window) => Window;
70
+ export type IOAuthPopUpMessageParser = <T extends OAuthBase>(item: T, event: MessageEvent) => IOAuthPopUpDto;
package/esm/OAuthBase.js CHANGED
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import { PromiseHandler, DateUtil, ObservableData, LoggerWrapper, TransportHttp, RandomUtil } from "@ts-core/common";
11
11
  import * as _ from 'lodash';
12
12
  import { filter, map, Subject } from "rxjs";
13
+ import { OAuthBrowserPropertiesSet } from "./external";
13
14
  export class OAuthBase extends LoggerWrapper {
14
15
  constructor(logger, applicationId, window) {
15
16
  super(logger);
@@ -20,20 +21,17 @@ export class OAuthBase extends LoggerWrapper {
20
21
  this.close();
21
22
  }
22
23
  };
23
- this.messageHandler = (event) => this.parsePopUpResult(this.popUpMessageParser(event));
24
- this.browserInternalMessageHandler = (event) => {
25
- return event.origin === this.getOriginUrl() && _.isObject(event.data) ? event.data : null;
26
- };
24
+ this.popUpOpenHandler = () => this.popUpOpener(this, this.window);
25
+ this.popUpMessageHandler = (event) => this.parseResponse(this.popUpMessageParser(this, event));
27
26
  this.http = new TransportHttp(logger, { method: 'get' });
28
27
  this.subject = new Subject();
29
28
  this.popUpWidth = 430;
30
29
  this.popUpHeight = 520;
31
30
  this.popUpTarget = '_blank';
32
- this.popUpMessageParser = this.browserInternalMessageHandler;
33
- this.isRejectWhenPopUpClosed = true;
34
31
  this._urlParams = new Map();
35
32
  this.urlParams.set('state', RandomUtil.randomString());
36
33
  this.urlParams.set('display', 'popup');
34
+ OAuthBrowserPropertiesSet(this);
37
35
  }
38
36
  open() {
39
37
  return __awaiter(this, void 0, void 0, function* () {
@@ -42,21 +40,14 @@ export class OAuthBase extends LoggerWrapper {
42
40
  return this.promise.promise;
43
41
  }
44
42
  this.promise = PromiseHandler.create();
45
- this.popUp = this.popUpOpen();
43
+ this.popUp = this.popUpOpenHandler();
46
44
  this.popUpFocus();
47
- this.window.addEventListener('message', this.messageHandler, false);
45
+ this.window.addEventListener('message', this.popUpMessageHandler, false);
48
46
  this.subject.next(new ObservableData(OAuthEvent.POPUP_OPENED, this.popUp));
49
47
  this.popUpCheckCloseTimer = setInterval(this.popUpCheckClose, DateUtil.MILLISECONDS_SECOND / 5);
50
48
  return this.promise.promise;
51
49
  });
52
50
  }
53
- popUpOpen() {
54
- let window = this.window;
55
- let top = (window.screen.height - this.popUpHeight) / 2;
56
- let left = (window.screen.width - this.popUpWidth) / 2;
57
- let item = window.open(this.getUrl(), this.popUpTarget, `scrollbars=yes,width=${this.popUpWidth},height=${this.popUpHeight},top=${top},left=${left}`);
58
- return item;
59
- }
60
51
  popUpFocus() {
61
52
  if (this.isPopUpOpened) {
62
53
  this.popUp.focus();
@@ -76,7 +67,7 @@ export class OAuthBase extends LoggerWrapper {
76
67
  getRedirectUri() {
77
68
  return !_.isNil(this.redirectUri) ? this.redirectUri : `${this.getOriginUrl()}/oauth`;
78
69
  }
79
- parsePopUpResult(data) {
70
+ parseResponse(data) {
80
71
  if (_.isNil(data)) {
81
72
  return;
82
73
  }
@@ -103,7 +94,7 @@ export class OAuthBase extends LoggerWrapper {
103
94
  });
104
95
  }
105
96
  close() {
106
- this.window.removeEventListener('message', this.messageHandler, false);
97
+ this.window.removeEventListener('message', this.popUpMessageHandler, false);
107
98
  this.popUpCheckCloseTimer = null;
108
99
  if (_.isNil(this.popUp)) {
109
100
  return;
@@ -0,0 +1,2 @@
1
+ import { OAuthBase } from '../OAuthBase';
2
+ export declare const OAuthBrowserPropertiesSet: (item: OAuthBase) => void;
@@ -0,0 +1,25 @@
1
+ import * as _ from 'lodash';
2
+ import { ObjectUtil } from '@ts-core/common';
3
+ export const OAuthBrowserPropertiesSet = (item) => {
4
+ item.popUpOpener = popUpOpener;
5
+ item.popUpMessageParser = popUpMessageParser;
6
+ item.isRejectWhenPopUpClosed = true;
7
+ };
8
+ function popUpOpener(item, window) {
9
+ let top = (window.screen.height - item.popUpHeight) / 2;
10
+ let left = (window.screen.width - item.popUpWidth) / 2;
11
+ return window.open(item.getPopUpUrl(), item.popUpTarget, `scrollbars=yes,width=${this.popUpWidth},height=${this.popUpHeight},top=${top},left=${left}`);
12
+ }
13
+ function popUpMessageParser(item, event) {
14
+ if (event.origin !== item.getOriginUrl()) {
15
+ return null;
16
+ }
17
+ let data = event.data;
18
+ if (!_.isObject(data)) {
19
+ return null;
20
+ }
21
+ if (!ObjectUtil.hasOwnProperty(data, 'oAuthCodeOrToken') && !ObjectUtil.hasOwnProperty(data, 'oAuthError')) {
22
+ return null;
23
+ }
24
+ return data;
25
+ }
@@ -0,0 +1,3 @@
1
+ import { IOAuthPopUpDto, OAuthBase } from '../OAuthBase';
2
+ export declare const OAuthCordovaInAppBrowserPluginPropertiesSet: (item: OAuthBase, redirectUri: string, method: IOAuthBackendMethod, timeout?: number) => void;
3
+ export type IOAuthBackendMethod = (state: string) => Promise<IOAuthPopUpDto>;
@@ -7,10 +7,25 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
+ import { OAuthBase } from '../OAuthBase';
10
11
  import { DateUtil } from '@ts-core/common';
11
12
  import { delay, takeUntil } from 'rxjs';
12
- export const OAuthBackendPropertiesSet = (item, redirectUri, method, timeout = DateUtil.MILLISECONDS_SECOND) => {
13
+ import * as _ from 'lodash';
14
+ export const OAuthCordovaInAppBrowserPluginPropertiesSet = (item, redirectUri, method, timeout = DateUtil.MILLISECONDS_SECOND) => {
15
+ item.popUpOpener = popUpOpener;
13
16
  item.redirectUri = redirectUri;
14
17
  item.isRejectWhenPopUpClosed = false;
15
- item.popUpClosed.pipe(delay(timeout), takeUntil(item.destroyed)).subscribe(() => __awaiter(void 0, void 0, void 0, function* () { return item.parsePopUpResult(yield method(item.state)); }));
18
+ item.popUpClosed.pipe(delay(timeout), takeUntil(item.destroyed)).subscribe(() => __awaiter(void 0, void 0, void 0, function* () {
19
+ let data = yield method(item.state);
20
+ if (_.isEmpty(data)) {
21
+ data = { oAuthError: OAuthBase.ERROR_WINDOW_CLOSED, oAuthCodeOrToken: null };
22
+ }
23
+ item.parseResponse(data);
24
+ }));
16
25
  };
26
+ function popUpOpener(item, window) {
27
+ let top = (window.screen.height - item.popUpHeight) / 2;
28
+ let left = (window.screen.width - item.popUpWidth) / 2;
29
+ let popUp = window.open(this.getUrl(), item.popUpTarget, `scrollbars=yes,width=${this.popUpWidth},height=${this.popUpHeight},top=${top},left=${left}`);
30
+ return popUp;
31
+ }
@@ -0,0 +1,2 @@
1
+ import { OAuthBase } from '../OAuthBase';
2
+ export declare const OAuthCordovaOAuthPluginPropertiesSet: (item: OAuthBase, packageName: string) => void;
@@ -0,0 +1,24 @@
1
+ import { OAuthParser } from '../OAuthParser';
2
+ import * as _ from 'lodash';
3
+ export const OAuthCordovaOAuthPluginPropertiesSet = (item, packageName) => {
4
+ item.popUpTarget = 'oauth:cordova';
5
+ item.popUpOpener = popUpOpener;
6
+ item.popUpMessageParser = popUpMessageParser;
7
+ item.redirectUri = `${packageName}://oauth_callback`;
8
+ item.isRejectWhenPopUpClosed = false;
9
+ };
10
+ function popUpOpener(item, window) {
11
+ let top = (window.screen.height - item.popUpHeight) / 2;
12
+ let left = (window.screen.width - item.popUpWidth) / 2;
13
+ let popUp = window.open(this.getUrl(), item.popUpTarget, `scrollbars=yes,width=${this.popUpWidth},height=${this.popUpHeight},top=${top},left=${left}`);
14
+ if (!_.isNil(popUp)) {
15
+ return popUp;
16
+ }
17
+ let fake = { focus: () => { }, close: () => { fake.closed = true; }, closed: false };
18
+ return fake;
19
+ }
20
+ function popUpMessageParser(item, event) {
21
+ let data = event.data;
22
+ let prefix = 'oauth::';
23
+ return _.isString(data) && data.includes(prefix) ? OAuthParser.parse(JSON.parse(data.substring(prefix.length)), '') : null;
24
+ }
@@ -0,0 +1,3 @@
1
+ export * from './browser';
2
+ export * from './cordovaOAuthPlugin';
3
+ export * from './cordovaInAppBrowserPlugin';
@@ -0,0 +1,3 @@
1
+ export * from './browser';
2
+ export * from './cordovaOAuthPlugin';
3
+ export * from './cordovaInAppBrowserPlugin';
@@ -3,7 +3,7 @@ import { IOAuthDto, IOAuthToken, OAuthBase } from '../OAuthBase';
3
3
  import { ILogger } from '@ts-core/common';
4
4
  export declare class GoAuth<T extends GoUser = GoUser> extends OAuthBase<T> {
5
5
  constructor(logger: ILogger, applicationId: string, window?: Window);
6
- protected getUrl(): string;
6
+ getPopUpUrl(): string;
7
7
  getProfile(token: string): Promise<T>;
8
8
  getTokenByCode(dto: IOAuthDto, secret: string): Promise<IOAuthToken>;
9
9
  }
package/esm/go/GoAuth.js CHANGED
@@ -14,7 +14,7 @@ export class GoAuth extends OAuthBase {
14
14
  super(logger, applicationId, window);
15
15
  this.urlParams.set('scope', 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email');
16
16
  }
17
- getUrl() {
17
+ getPopUpUrl() {
18
18
  return `https://accounts.google.com/o/oauth2/v2/auth?${this.getUrlParams().toString()}`;
19
19
  }
20
20
  getProfile(token) {
@@ -4,7 +4,7 @@ import { MaUser } from "./MaUser";
4
4
  export declare class MaAuth<T extends MaUser = MaUser> extends OAuthBase<T> {
5
5
  constructor(logger: ILogger, applicationId: string, window?: Window);
6
6
  protected getUrlParams(): URLSearchParams;
7
- protected getUrl(): string;
7
+ getPopUpUrl(): string;
8
8
  getProfile(token: string): Promise<T>;
9
9
  getTokenByCode(dto: IOAuthDto, secret: string): Promise<IOAuthToken>;
10
10
  }
package/esm/ma/MaAuth.js CHANGED
@@ -21,7 +21,7 @@ export class MaAuth extends OAuthBase {
21
21
  item.append('state', RandomUtil.randomString(43));
22
22
  return item;
23
23
  }
24
- getUrl() {
24
+ getPopUpUrl() {
25
25
  return `https://oauth.mail.ru/login?${this.getUrlParams().toString()}`;
26
26
  }
27
27
  getProfile(token) {
@@ -9,5 +9,6 @@ export * from './ya/YaUser';
9
9
  export * from './ya/YaAuth';
10
10
  export * from './ma/MaAuth';
11
11
  export * from './ma/MaUser';
12
- export * from './external/backend';
13
- export * from './external/cordova';
12
+ export * from './external/browser';
13
+ export * from './external/cordovaOAuthPlugin';
14
+ export * from './external/cordovaInAppBrowserPlugin';
package/esm/public-api.js CHANGED
@@ -9,5 +9,6 @@ export * from './ya/YaUser';
9
9
  export * from './ya/YaAuth';
10
10
  export * from './ma/MaAuth';
11
11
  export * from './ma/MaUser';
12
- export * from './external/backend';
13
- export * from './external/cordova';
12
+ export * from './external/browser';
13
+ export * from './external/cordovaOAuthPlugin';
14
+ export * from './external/cordovaInAppBrowserPlugin';
@@ -5,7 +5,7 @@ export declare class VkAuth<T extends VkUser = VkUser> extends OAuthBase<T> {
5
5
  v: string;
6
6
  private email;
7
7
  constructor(logger: ILogger, applicationId: string, window?: Window);
8
- protected getUrl(): string;
8
+ getPopUpUrl(): string;
9
9
  getProfile(token: string, fields?: string): Promise<T>;
10
10
  getTokenByCode(dto: IOAuthDto, secret: string): Promise<IOAuthToken>;
11
11
  }
package/esm/vk/VkAuth.js CHANGED
@@ -17,7 +17,7 @@ export class VkAuth extends OAuthBase {
17
17
  this.v = '5.131';
18
18
  this.urlParams.set('scope', 'status,email');
19
19
  }
20
- getUrl() {
20
+ getPopUpUrl() {
21
21
  return `https://oauth.vk.com/authorize?${this.getUrlParams().toString()}`;
22
22
  }
23
23
  getProfile(token, fields) {
@@ -1,7 +1,7 @@
1
1
  import { IOAuthDto, IOAuthToken, OAuthBase } from "../OAuthBase";
2
2
  import { YaUser } from "./YaUser";
3
3
  export declare class YaAuth<T extends YaUser = YaUser> extends OAuthBase<T> {
4
- protected getUrl(): string;
4
+ getPopUpUrl(): string;
5
5
  getProfile(token: string): Promise<T>;
6
6
  getTokenByCode(dto: IOAuthDto, secret: string): Promise<IOAuthToken>;
7
7
  }
package/esm/ya/YaAuth.js CHANGED
@@ -12,7 +12,7 @@ import { OAuthBase } from "../OAuthBase";
12
12
  import { YaUser } from "./YaUser";
13
13
  import * as _ from 'lodash';
14
14
  export class YaAuth extends OAuthBase {
15
- getUrl() {
15
+ getPopUpUrl() {
16
16
  return `https://oauth.yandex.ru/authorize?${this.getUrlParams().toString()}`;
17
17
  }
18
18
  getProfile(token) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ts-core/oauth",
3
- "version": "3.0.23",
3
+ "version": "3.0.25",
4
4
  "description": "Classes and utils for oauth",
5
5
  "main": "./cjs/public-api.js",
6
6
  "module": "./esm/public-api.js",
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "license": "ISC",
19
19
  "dependencies": {
20
- "@ts-core/common": "^3.0.8"
20
+ "@ts-core/common": "~3.0.14"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@types/node": "^14.14.31",
@@ -1,3 +0,0 @@
1
- import { IOAuthPopUpDto, OAuthBase } from '../OAuthBase';
2
- export declare const OAuthBackendPropertiesSet: (item: OAuthBase, redirectUri: string, method: IOAuthBackendMethod, timeout?: number) => void;
3
- export type IOAuthBackendMethod = (state: string) => Promise<IOAuthPopUpDto>;
@@ -1,2 +0,0 @@
1
- import { OAuthBase } from '../OAuthBase';
2
- export declare const OAuthCordovaPropertiesSet: (item: OAuthBase, packageName: string) => void;
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OAuthCordovaPropertiesSet = void 0;
4
- const OAuthParser_1 = require("../OAuthParser");
5
- const _ = require("lodash");
6
- const OAuthCordovaPropertiesSet = (item, packageName) => {
7
- item.redirectUri = `${packageName}://oauth_callback`;
8
- item.isRejectWhenPopUpClosed = false;
9
- item.popUpTarget = 'oauth:cordova';
10
- item.popUpMessageParser = cordovaPopUpMessageParser;
11
- };
12
- exports.OAuthCordovaPropertiesSet = OAuthCordovaPropertiesSet;
13
- function cordovaPopUpMessageParser(event) {
14
- let data = event.data;
15
- let prefix = 'oauth::';
16
- return _.isString(data) && data.includes(prefix) ? OAuthParser_1.OAuthParser.parse(JSON.parse(data.substring(prefix.length)), '') : null;
17
- }
@@ -1,3 +0,0 @@
1
- import { IOAuthPopUpDto, OAuthBase } from '../OAuthBase';
2
- export declare const OAuthBackendPropertiesSet: (item: OAuthBase, redirectUri: string, method: IOAuthBackendMethod, timeout?: number) => void;
3
- export type IOAuthBackendMethod = (state: string) => Promise<IOAuthPopUpDto>;
@@ -1,2 +0,0 @@
1
- import { OAuthBase } from '../OAuthBase';
2
- export declare const OAuthCordovaPropertiesSet: (item: OAuthBase, packageName: string) => void;
@@ -1,13 +0,0 @@
1
- import { OAuthParser } from '../OAuthParser';
2
- import * as _ from 'lodash';
3
- export const OAuthCordovaPropertiesSet = (item, packageName) => {
4
- item.redirectUri = `${packageName}://oauth_callback`;
5
- item.isRejectWhenPopUpClosed = false;
6
- item.popUpTarget = 'oauth:cordova';
7
- item.popUpMessageParser = cordovaPopUpMessageParser;
8
- };
9
- function cordovaPopUpMessageParser(event) {
10
- let data = event.data;
11
- let prefix = 'oauth::';
12
- return _.isString(data) && data.includes(prefix) ? OAuthParser.parse(JSON.parse(data.substring(prefix.length)), '') : null;
13
- }