@kcuf/fetcher-interceptor-login 0.3.0 → 0.3.1

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.
@@ -5,25 +5,21 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = messageListenInterceptorLogin;
8
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
8
+ var _messenger = _interopRequireDefault(require("@kcuf/messenger"));
9
9
  var _const = require("../const");
10
10
  /**
11
11
  * 通常情况下,我们不需要这个,但如果一个应用里有两个不同实例的 fetcher,两个可能同时被调用,就有可能同时触发登录,
12
12
  * 这时候就需要用它在登录动作中使用 messageListenInterceptorLogin 来自动触发登录的返回
13
13
  */
14
14
  function messageListenInterceptorLogin(callback) {
15
- function listener(e) {
16
- if (!e.data || (0, _typeof2.default)(e.data) !== 'object') {
17
- return;
18
- }
19
- if (e.data.type === _const.MESSAGE_TYPE_LOGIN_SUCCESS) {
20
- callback(true, e.data.payload);
21
- } else if (e.data.type === _const.MESSAGE_TYPE_LOGIN_ERROR) {
22
- callback(false, e.data.payload);
23
- }
24
- }
25
- window.addEventListener('message', listener);
15
+ var offSuccess = _messenger.default.on(_const.MESSAGE_TYPE_LOGIN_SUCCESS, function (payload) {
16
+ return callback(true, payload);
17
+ });
18
+ var offError = _messenger.default.on(_const.MESSAGE_TYPE_LOGIN_ERROR, function (payload) {
19
+ return callback(false, payload);
20
+ });
26
21
  return function () {
27
- return window.removeEventListener('message', listener);
22
+ offSuccess();
23
+ offError();
28
24
  };
29
25
  }
@@ -1,24 +1,23 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.default = singletonPromise;
7
8
  var _fetcher = require("@kcuf/fetcher");
9
+ var _messenger = _interopRequireDefault(require("@kcuf/messenger"));
8
10
  var _const = require("../const");
9
11
  function singletonPromise(fn) {
10
12
  var queue = null;
11
- function resolveQueue(data) {
13
+ function resolveQueue(responseData) {
12
14
  if (queue) {
13
15
  queue.forEach(function (v) {
14
- v.resolve((0, _fetcher.cloneResponseData)(data));
16
+ v.resolve((0, _fetcher.cloneResponseData)(responseData));
15
17
  });
16
18
  queue = null;
17
19
  }
18
- window.postMessage({
19
- type: _const.MESSAGE_TYPE_LOGIN_SUCCESS,
20
- payload: data
21
- }, location.origin);
20
+ _messenger.default.emit(_const.MESSAGE_TYPE_LOGIN_SUCCESS, responseData);
22
21
  }
23
22
  function rejectQueue(err) {
24
23
  if (queue) {
@@ -27,10 +26,7 @@ function singletonPromise(fn) {
27
26
  });
28
27
  queue = null;
29
28
  }
30
- window.postMessage({
31
- type: _const.MESSAGE_TYPE_LOGIN_ERROR,
32
- payload: err
33
- }, location.origin);
29
+ _messenger.default.emit(_const.MESSAGE_TYPE_LOGIN_ERROR, err);
34
30
  }
35
31
  return function () {
36
32
  if (!queue) {
@@ -1,23 +1,20 @@
1
- import _typeof from "@babel/runtime/helpers/typeof";
1
+ import messenger from '@kcuf/messenger';
2
2
  import { MESSAGE_TYPE_LOGIN_SUCCESS, MESSAGE_TYPE_LOGIN_ERROR } from '../const';
3
+
3
4
  /**
4
5
  * 通常情况下,我们不需要这个,但如果一个应用里有两个不同实例的 fetcher,两个可能同时被调用,就有可能同时触发登录,
5
6
  * 这时候就需要用它在登录动作中使用 messageListenInterceptorLogin 来自动触发登录的返回
6
7
  */
7
8
  export default function messageListenInterceptorLogin(callback) {
8
- function listener(e) {
9
- if (!e.data || _typeof(e.data) !== 'object') {
10
- return;
11
- }
12
- if (e.data.type === MESSAGE_TYPE_LOGIN_SUCCESS) {
13
- callback(true, e.data.payload);
14
- } else if (e.data.type === MESSAGE_TYPE_LOGIN_ERROR) {
15
- callback(false, e.data.payload);
16
- }
17
- }
18
- window.addEventListener('message', listener);
9
+ var offSuccess = messenger.on(MESSAGE_TYPE_LOGIN_SUCCESS, function (payload) {
10
+ return callback(true, payload);
11
+ });
12
+ var offError = messenger.on(MESSAGE_TYPE_LOGIN_ERROR, function (payload) {
13
+ return callback(false, payload);
14
+ });
19
15
  return function () {
20
- return window.removeEventListener('message', listener);
16
+ offSuccess();
17
+ offError();
21
18
  };
22
19
  }
23
20
  //# sourceMappingURL=message-listen-interceptor-login.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-listen-interceptor-login.js","names":["MESSAGE_TYPE_LOGIN_SUCCESS","MESSAGE_TYPE_LOGIN_ERROR","messageListenInterceptorLogin","callback","listener","e","data","_typeof","type","payload","window","addEventListener","removeEventListener"],"sources":["../../../src/helper/message-listen-interceptor-login.ts"],"sourcesContent":["import {\n MESSAGE_TYPE_LOGIN_SUCCESS,\n MESSAGE_TYPE_LOGIN_ERROR\n} from '../const';\n\ninterface IMessageEventData {\n source?: string;\n type?: string;\n payload: unknown;\n}\n\n/**\n * 通常情况下,我们不需要这个,但如果一个应用里有两个不同实例的 fetcher,两个可能同时被调用,就有可能同时触发登录,\n * 这时候就需要用它在登录动作中使用 messageListenInterceptorLogin 来自动触发登录的返回\n */\nexport default function messageListenInterceptorLogin(callback: (logged: boolean, info?: unknown) => void): () => void {\n function listener(e: MessageEvent<IMessageEventData | undefined>): void {\n if (!e.data || typeof e.data !== 'object') {\n return;\n }\n \n if (e.data.type === MESSAGE_TYPE_LOGIN_SUCCESS) {\n callback(true, e.data.payload);\n } else if (e.data.type === MESSAGE_TYPE_LOGIN_ERROR) {\n callback(false, e.data.payload);\n }\n }\n \n window.addEventListener('message', listener);\n \n return () => window.removeEventListener('message', listener);\n}\n"],"mappings":";AAAA,SACEA,0BAA0B,EAC1BC,wBAAwB,QACnB,UAAU;AAQjB;AACA;AACA;AACA;AACA,eAAe,SAASC,6BAA6BA,CAACC,QAAmD,EAAc;EACrH,SAASC,QAAQA,CAACC,CAA8C,EAAQ;IACtE,IAAI,CAACA,CAAC,CAACC,IAAI,IAAIC,OAAA,CAAOF,CAAC,CAACC,IAAI,MAAK,QAAQ,EAAE;MACzC;IACF;IAEA,IAAID,CAAC,CAACC,IAAI,CAACE,IAAI,KAAKR,0BAA0B,EAAE;MAC9CG,QAAQ,CAAC,IAAI,EAAEE,CAAC,CAACC,IAAI,CAACG,OAAO,CAAC;IAChC,CAAC,MAAM,IAAIJ,CAAC,CAACC,IAAI,CAACE,IAAI,KAAKP,wBAAwB,EAAE;MACnDE,QAAQ,CAAC,KAAK,EAAEE,CAAC,CAACC,IAAI,CAACG,OAAO,CAAC;IACjC;EACF;EAEAC,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAEP,QAAQ,CAAC;EAE5C,OAAO;IAAA,OAAMM,MAAM,CAACE,mBAAmB,CAAC,SAAS,EAAER,QAAQ,CAAC;EAAA;AAC9D","ignoreList":[]}
1
+ {"version":3,"file":"message-listen-interceptor-login.js","names":["messenger","MESSAGE_TYPE_LOGIN_SUCCESS","MESSAGE_TYPE_LOGIN_ERROR","messageListenInterceptorLogin","callback","offSuccess","on","payload","offError"],"sources":["../../../src/helper/message-listen-interceptor-login.ts"],"sourcesContent":["import messenger from '@kcuf/messenger';\n\nimport {\n MESSAGE_TYPE_LOGIN_SUCCESS,\n MESSAGE_TYPE_LOGIN_ERROR\n} from '../const';\n\n/**\n * 通常情况下,我们不需要这个,但如果一个应用里有两个不同实例的 fetcher,两个可能同时被调用,就有可能同时触发登录,\n * 这时候就需要用它在登录动作中使用 messageListenInterceptorLogin 来自动触发登录的返回\n */\nexport default function messageListenInterceptorLogin(callback: (logged: boolean, payload?: unknown) => void): () => void {\n const offSuccess = messenger.on(MESSAGE_TYPE_LOGIN_SUCCESS, payload => callback(true, payload));\n const offError = messenger.on(MESSAGE_TYPE_LOGIN_ERROR, payload => callback(false, payload));\n \n return () => {\n offSuccess();\n offError();\n };\n}\n"],"mappings":"AAAA,OAAOA,SAAS,MAAM,iBAAiB;AAEvC,SACEC,0BAA0B,EAC1BC,wBAAwB,QACnB,UAAU;;AAEjB;AACA;AACA;AACA;AACA,eAAe,SAASC,6BAA6BA,CAACC,QAAsD,EAAc;EACxH,IAAMC,UAAU,GAAGL,SAAS,CAACM,EAAE,CAACL,0BAA0B,EAAE,UAAAM,OAAO;IAAA,OAAIH,QAAQ,CAAC,IAAI,EAAEG,OAAO,CAAC;EAAA,EAAC;EAC/F,IAAMC,QAAQ,GAAGR,SAAS,CAACM,EAAE,CAACJ,wBAAwB,EAAE,UAAAK,OAAO;IAAA,OAAIH,QAAQ,CAAC,KAAK,EAAEG,OAAO,CAAC;EAAA,EAAC;EAE5F,OAAO,YAAM;IACXF,UAAU,CAAC,CAAC;IACZG,QAAQ,CAAC,CAAC;EACZ,CAAC;AACH","ignoreList":[]}
@@ -1,18 +1,16 @@
1
1
  import { cloneResponseData } from '@kcuf/fetcher';
2
+ import messenger from '@kcuf/messenger';
2
3
  import { MESSAGE_TYPE_LOGIN_SUCCESS, MESSAGE_TYPE_LOGIN_ERROR } from '../const';
3
4
  export default function singletonPromise(fn) {
4
5
  var queue = null;
5
- function resolveQueue(data) {
6
+ function resolveQueue(responseData) {
6
7
  if (queue) {
7
8
  queue.forEach(function (v) {
8
- v.resolve(cloneResponseData(data));
9
+ v.resolve(cloneResponseData(responseData));
9
10
  });
10
11
  queue = null;
11
12
  }
12
- window.postMessage({
13
- type: MESSAGE_TYPE_LOGIN_SUCCESS,
14
- payload: data
15
- }, location.origin);
13
+ messenger.emit(MESSAGE_TYPE_LOGIN_SUCCESS, responseData);
16
14
  }
17
15
  function rejectQueue(err) {
18
16
  if (queue) {
@@ -21,10 +19,7 @@ export default function singletonPromise(fn) {
21
19
  });
22
20
  queue = null;
23
21
  }
24
- window.postMessage({
25
- type: MESSAGE_TYPE_LOGIN_ERROR,
26
- payload: err
27
- }, location.origin);
22
+ messenger.emit(MESSAGE_TYPE_LOGIN_ERROR, err);
28
23
  }
29
24
  return function () {
30
25
  if (!queue) {
@@ -1 +1 @@
1
- {"version":3,"file":"singleton-promise.js","names":["cloneResponseData","MESSAGE_TYPE_LOGIN_SUCCESS","MESSAGE_TYPE_LOGIN_ERROR","singletonPromise","fn","queue","resolveQueue","data","forEach","v","resolve","window","postMessage","type","payload","location","origin","rejectQueue","err","reject","promise","Promise","_queue","push","length","then"],"sources":["../../../src/util/singleton-promise.ts"],"sourcesContent":["import {\n cloneResponseData\n} from '@kcuf/fetcher';\n\nimport {\n MESSAGE_TYPE_LOGIN_SUCCESS,\n MESSAGE_TYPE_LOGIN_ERROR\n} from '../const';\n\ninterface IPromiseQueueItem<T = void, E extends Error = Error> {\n resolve(data: T): void;\n reject(err: E): void;\n}\n\nexport default function singletonPromise<T>(fn: () => Promise<T>): () => Promise<T> {\n let queue: IPromiseQueueItem<T>[] | null = null;\n \n function resolveQueue(data: T): void {\n if (queue) {\n queue.forEach(v => {\n v.resolve(cloneResponseData(data));\n });\n \n queue = null;\n }\n \n window.postMessage({\n type: MESSAGE_TYPE_LOGIN_SUCCESS,\n payload: data\n }, location.origin);\n }\n \n function rejectQueue(err: Error): void {\n if (queue) {\n queue.forEach(v => {\n v.reject(err);\n });\n \n queue = null;\n }\n \n window.postMessage({\n type: MESSAGE_TYPE_LOGIN_ERROR,\n payload: err\n }, location.origin);\n }\n \n return (): Promise<T> => {\n if (!queue) {\n queue = [];\n }\n \n const promise = new Promise<T>((resolve, reject) => {\n queue?.push({\n resolve,\n reject\n });\n });\n \n if (queue.length === 1) {\n fn().then(data => resolveQueue(data), (err: unknown) => rejectQueue(err as Error));\n }\n \n return promise;\n };\n}\n"],"mappings":"AAAA,SACEA,iBAAiB,QACZ,eAAe;AAEtB,SACEC,0BAA0B,EAC1BC,wBAAwB,QACnB,UAAU;AAOjB,eAAe,SAASC,gBAAgBA,CAAIC,EAAoB,EAAoB;EAClF,IAAIC,KAAoC,GAAG,IAAI;EAE/C,SAASC,YAAYA,CAACC,IAAO,EAAQ;IACnC,IAAIF,KAAK,EAAE;MACTA,KAAK,CAACG,OAAO,CAAC,UAAAC,CAAC,EAAI;QACjBA,CAAC,CAACC,OAAO,CAACV,iBAAiB,CAACO,IAAI,CAAC,CAAC;MACpC,CAAC,CAAC;MAEFF,KAAK,GAAG,IAAI;IACd;IAEAM,MAAM,CAACC,WAAW,CAAC;MACjBC,IAAI,EAAEZ,0BAA0B;MAChCa,OAAO,EAAEP;IACX,CAAC,EAAEQ,QAAQ,CAACC,MAAM,CAAC;EACrB;EAEA,SAASC,WAAWA,CAACC,GAAU,EAAQ;IACrC,IAAIb,KAAK,EAAE;MACTA,KAAK,CAACG,OAAO,CAAC,UAAAC,CAAC,EAAI;QACjBA,CAAC,CAACU,MAAM,CAACD,GAAG,CAAC;MACf,CAAC,CAAC;MAEFb,KAAK,GAAG,IAAI;IACd;IAEAM,MAAM,CAACC,WAAW,CAAC;MACjBC,IAAI,EAAEX,wBAAwB;MAC9BY,OAAO,EAAEI;IACX,CAAC,EAAEH,QAAQ,CAACC,MAAM,CAAC;EACrB;EAEA,OAAO,YAAkB;IACvB,IAAI,CAACX,KAAK,EAAE;MACVA,KAAK,GAAG,EAAE;IACZ;IAEA,IAAMe,OAAO,GAAG,IAAIC,OAAO,CAAI,UAACX,OAAO,EAAES,MAAM,EAAK;MAAA,IAAAG,MAAA;MAClD,CAAAA,MAAA,GAAAjB,KAAK,cAAAiB,MAAA,eAALA,MAAA,CAAOC,IAAI,CAAC;QACVb,OAAO,EAAPA,OAAO;QACPS,MAAM,EAANA;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,IAAId,KAAK,CAACmB,MAAM,KAAK,CAAC,EAAE;MACtBpB,EAAE,CAAC,CAAC,CAACqB,IAAI,CAAC,UAAAlB,IAAI;QAAA,OAAID,YAAY,CAACC,IAAI,CAAC;MAAA,GAAE,UAACW,GAAY;QAAA,OAAKD,WAAW,CAACC,GAAY,CAAC;MAAA,EAAC;IACpF;IAEA,OAAOE,OAAO;EAChB,CAAC;AACH","ignoreList":[]}
1
+ {"version":3,"file":"singleton-promise.js","names":["cloneResponseData","messenger","MESSAGE_TYPE_LOGIN_SUCCESS","MESSAGE_TYPE_LOGIN_ERROR","singletonPromise","fn","queue","resolveQueue","responseData","forEach","v","resolve","emit","rejectQueue","err","reject","promise","Promise","_queue","push","length","then","data"],"sources":["../../../src/util/singleton-promise.ts"],"sourcesContent":["import {\n cloneResponseData\n} from '@kcuf/fetcher';\nimport messenger from '@kcuf/messenger';\n\nimport {\n MESSAGE_TYPE_LOGIN_SUCCESS,\n MESSAGE_TYPE_LOGIN_ERROR\n} from '../const';\n\ninterface IPromiseQueueItem<T = void, E extends Error = Error> {\n resolve(data: T): void;\n reject(err: E): void;\n}\n\nexport default function singletonPromise<T>(fn: () => Promise<T>): () => Promise<T> {\n let queue: IPromiseQueueItem<T>[] | null = null;\n \n function resolveQueue(responseData: T): void {\n if (queue) {\n queue.forEach(v => {\n v.resolve(cloneResponseData(responseData));\n });\n \n queue = null;\n }\n \n messenger.emit(MESSAGE_TYPE_LOGIN_SUCCESS, responseData);\n }\n \n function rejectQueue(err: Error): void {\n if (queue) {\n queue.forEach(v => {\n v.reject(err);\n });\n \n queue = null;\n }\n \n messenger.emit(MESSAGE_TYPE_LOGIN_ERROR, err);\n }\n \n return (): Promise<T> => {\n if (!queue) {\n queue = [];\n }\n \n const promise = new Promise<T>((resolve, reject) => {\n queue?.push({\n resolve,\n reject\n });\n });\n \n if (queue.length === 1) {\n fn().then(data => resolveQueue(data), (err: unknown) => rejectQueue(err as Error));\n }\n \n return promise;\n };\n}\n"],"mappings":"AAAA,SACEA,iBAAiB,QACZ,eAAe;AACtB,OAAOC,SAAS,MAAM,iBAAiB;AAEvC,SACEC,0BAA0B,EAC1BC,wBAAwB,QACnB,UAAU;AAOjB,eAAe,SAASC,gBAAgBA,CAAIC,EAAoB,EAAoB;EAClF,IAAIC,KAAoC,GAAG,IAAI;EAE/C,SAASC,YAAYA,CAACC,YAAe,EAAQ;IAC3C,IAAIF,KAAK,EAAE;MACTA,KAAK,CAACG,OAAO,CAAC,UAAAC,CAAC,EAAI;QACjBA,CAAC,CAACC,OAAO,CAACX,iBAAiB,CAACQ,YAAY,CAAC,CAAC;MAC5C,CAAC,CAAC;MAEFF,KAAK,GAAG,IAAI;IACd;IAEAL,SAAS,CAACW,IAAI,CAACV,0BAA0B,EAAEM,YAAY,CAAC;EAC1D;EAEA,SAASK,WAAWA,CAACC,GAAU,EAAQ;IACrC,IAAIR,KAAK,EAAE;MACTA,KAAK,CAACG,OAAO,CAAC,UAAAC,CAAC,EAAI;QACjBA,CAAC,CAACK,MAAM,CAACD,GAAG,CAAC;MACf,CAAC,CAAC;MAEFR,KAAK,GAAG,IAAI;IACd;IAEAL,SAAS,CAACW,IAAI,CAACT,wBAAwB,EAAEW,GAAG,CAAC;EAC/C;EAEA,OAAO,YAAkB;IACvB,IAAI,CAACR,KAAK,EAAE;MACVA,KAAK,GAAG,EAAE;IACZ;IAEA,IAAMU,OAAO,GAAG,IAAIC,OAAO,CAAI,UAACN,OAAO,EAAEI,MAAM,EAAK;MAAA,IAAAG,MAAA;MAClD,CAAAA,MAAA,GAAAZ,KAAK,cAAAY,MAAA,eAALA,MAAA,CAAOC,IAAI,CAAC;QACVR,OAAO,EAAPA,OAAO;QACPI,MAAM,EAANA;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,IAAIT,KAAK,CAACc,MAAM,KAAK,CAAC,EAAE;MACtBf,EAAE,CAAC,CAAC,CAACgB,IAAI,CAAC,UAAAC,IAAI;QAAA,OAAIf,YAAY,CAACe,IAAI,CAAC;MAAA,GAAE,UAACR,GAAY;QAAA,OAAKD,WAAW,CAACC,GAAY,CAAC;MAAA,EAAC;IACpF;IAEA,OAAOE,OAAO;EAChB,CAAC;AACH","ignoreList":[]}
@@ -2,4 +2,4 @@
2
2
  * 通常情况下,我们不需要这个,但如果一个应用里有两个不同实例的 fetcher,两个可能同时被调用,就有可能同时触发登录,
3
3
  * 这时候就需要用它在登录动作中使用 messageListenInterceptorLogin 来自动触发登录的返回
4
4
  */
5
- export default function messageListenInterceptorLogin(callback: (logged: boolean, info?: unknown) => void): () => void;
5
+ export default function messageListenInterceptorLogin(callback: (logged: boolean, payload?: unknown) => void): () => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kcuf/fetcher-interceptor-login",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Fetcher interceptor seamless login and redo request.",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -27,19 +27,20 @@
27
27
  "@babel/plugin-transform-runtime": "^7.28.5",
28
28
  "@babel/preset-env": "^7.28.6",
29
29
  "@babel/preset-typescript": "^7.28.5",
30
- "@vitest/coverage-v8": "^4.0.17",
30
+ "@vitest/coverage-v8": "^4.0.18",
31
31
  "fetch-mock": "^12.6.0",
32
32
  "jsdom": "^27.4.0",
33
33
  "rimraf": "^6.1.2",
34
34
  "typescript": "^5.9.3",
35
- "vitest": "^4.0.17",
35
+ "vitest": "^4.0.18",
36
36
  "@kcuf/ts-config": "^0.1.0"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "@babel/runtime": ">=7.0.0"
40
40
  },
41
41
  "dependencies": {
42
- "@kcuf/fetcher": "^0.2.9"
42
+ "@kcuf/fetcher": "^0.2.9",
43
+ "@kcuf/messenger": "^0.0.2"
43
44
  },
44
45
  "scripts": {
45
46
  "build:clean": "rimraf dist",