@kcuf/fetcher-interceptor-login 0.2.8 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cjs/const/index.js +8 -0
- package/dist/cjs/helper/index.js +13 -0
- package/dist/cjs/helper/message-listen-interceptor-login.js +29 -0
- package/dist/cjs/index.js +14 -1
- package/dist/cjs/util/create-interceptor-response-rejected.js +16 -34
- package/dist/cjs/util/singleton-promise.js +9 -0
- package/dist/esm/const/index.js +3 -0
- package/dist/esm/const/index.js.map +1 -0
- package/dist/esm/helper/index.js +2 -0
- package/dist/esm/helper/index.js.map +1 -0
- package/dist/esm/helper/message-listen-interceptor-login.js +23 -0
- package/dist/esm/helper/message-listen-interceptor-login.js.map +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/util/create-interceptor-response-rejected.js +16 -34
- package/dist/esm/util/create-interceptor-response-rejected.js.map +1 -1
- package/dist/esm/util/singleton-promise.js +9 -0
- package/dist/esm/util/singleton-promise.js.map +1 -1
- package/dist/types/const/index.d.ts +2 -0
- package/dist/types/helper/index.d.ts +1 -0
- package/dist/types/helper/message-listen-interceptor-login.d.ts +5 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/types/index.d.ts +1 -1
- package/package.json +15 -15
package/README.md
CHANGED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.MESSAGE_TYPE_LOGIN_SUCCESS = exports.MESSAGE_TYPE_LOGIN_ERROR = void 0;
|
|
7
|
+
var MESSAGE_TYPE_LOGIN_SUCCESS = exports.MESSAGE_TYPE_LOGIN_SUCCESS = 'fetcher-interceptor-login:success';
|
|
8
|
+
var MESSAGE_TYPE_LOGIN_ERROR = exports.MESSAGE_TYPE_LOGIN_ERROR = 'fetcher-interceptor-login:error';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
Object.defineProperty(exports, "messageListenInterceptorLogin", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function get() {
|
|
10
|
+
return _messageListenInterceptorLogin.default;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
var _messageListenInterceptorLogin = _interopRequireDefault(require("./message-listen-interceptor-login"));
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = messageListenInterceptorLogin;
|
|
8
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
9
|
+
var _const = require("../const");
|
|
10
|
+
/**
|
|
11
|
+
* 通常情况下,我们不需要这个,但如果一个应用里有两个不同实例的 fetcher,两个可能同时被调用,就有可能同时触发登录,
|
|
12
|
+
* 这时候就需要用它在登录动作中使用 messageListenInterceptorLogin 来自动触发登录的返回
|
|
13
|
+
*/
|
|
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);
|
|
26
|
+
return function () {
|
|
27
|
+
return window.removeEventListener('message', listener);
|
|
28
|
+
};
|
|
29
|
+
}
|
package/dist/cjs/index.js
CHANGED
|
@@ -4,10 +4,23 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
+
var _exportNames = {};
|
|
7
8
|
Object.defineProperty(exports, "default", {
|
|
8
9
|
enumerable: true,
|
|
9
10
|
get: function get() {
|
|
10
11
|
return _intercept.default;
|
|
11
12
|
}
|
|
12
13
|
});
|
|
13
|
-
var _intercept = _interopRequireDefault(require("./util/intercept"));
|
|
14
|
+
var _intercept = _interopRequireDefault(require("./util/intercept"));
|
|
15
|
+
var _helper = require("./helper");
|
|
16
|
+
Object.keys(_helper).forEach(function (key) {
|
|
17
|
+
if (key === "default" || key === "__esModule") return;
|
|
18
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
19
|
+
if (key in exports && exports[key] === _helper[key]) return;
|
|
20
|
+
Object.defineProperty(exports, key, {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
get: function get() {
|
|
23
|
+
return _helper[key];
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
});
|
|
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.default = createInterceptorResponseRejected;
|
|
8
|
-
var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
|
|
9
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
8
|
var _fetcher = require("@kcuf/fetcher");
|
|
11
9
|
var _singletonPromise = _interopRequireDefault(require("./singleton-promise"));
|
|
12
10
|
function createInterceptorResponseRejected(_ref) {
|
|
@@ -14,36 +12,20 @@ function createInterceptorResponseRejected(_ref) {
|
|
|
14
12
|
doLogin = _ref.doLogin,
|
|
15
13
|
headerKeys = _ref.headerKeys;
|
|
16
14
|
var singletonLogin = (0, _singletonPromise.default)(doLogin);
|
|
17
|
-
return
|
|
18
|
-
var
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return requestByInterceptor(fetcherConfig); // 登录完成,重新发起原请求
|
|
34
|
-
}, function () {
|
|
35
|
-
// 一般登录弹窗在登录成功之前是不应该被关闭或取消的,但若真允许取消,这里需要修改错误为「取消登录」
|
|
36
|
-
error.name = _fetcher.FetcherErrorName.LOGIN_CANCELLED;
|
|
37
|
-
throw error; // 以新的 name 继续抛错
|
|
38
|
-
}));
|
|
39
|
-
case 2:
|
|
40
|
-
case "end":
|
|
41
|
-
return _context.stop();
|
|
42
|
-
}
|
|
43
|
-
}, _callee);
|
|
44
|
-
}));
|
|
45
|
-
return function (_x, _x2, _x3, _x4) {
|
|
46
|
-
return _ref2.apply(this, arguments);
|
|
47
|
-
};
|
|
48
|
-
}();
|
|
15
|
+
return function (error, fetcherConfig, _, requestByInterceptor) {
|
|
16
|
+
var _error$code;
|
|
17
|
+
if (!needLogin((_error$code = error.code) !== null && _error$code !== void 0 ? _error$code : '', error)) {
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
return singletonLogin().then(function () {
|
|
21
|
+
if (headerKeys) {
|
|
22
|
+
(0, _fetcher.deleteConfigHeaders)(fetcherConfig, headerKeys);
|
|
23
|
+
}
|
|
24
|
+
return requestByInterceptor(fetcherConfig); // 登录完成,重新发起原请求
|
|
25
|
+
}, function () {
|
|
26
|
+
// 一般登录弹窗在登录成功之前是不应该被关闭或取消的,但若真允许取消,这里需要修改错误为「取消登录」
|
|
27
|
+
error.name = _fetcher.FetcherErrorName.LOGIN_CANCELLED;
|
|
28
|
+
throw error; // 以新的 name 继续抛错
|
|
29
|
+
});
|
|
30
|
+
};
|
|
49
31
|
}
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = singletonPromise;
|
|
7
7
|
var _fetcher = require("@kcuf/fetcher");
|
|
8
|
+
var _const = require("../const");
|
|
8
9
|
function singletonPromise(fn) {
|
|
9
10
|
var queue = null;
|
|
10
11
|
function resolveQueue(data) {
|
|
@@ -14,6 +15,10 @@ function singletonPromise(fn) {
|
|
|
14
15
|
});
|
|
15
16
|
queue = null;
|
|
16
17
|
}
|
|
18
|
+
window.postMessage({
|
|
19
|
+
type: _const.MESSAGE_TYPE_LOGIN_SUCCESS,
|
|
20
|
+
payload: data
|
|
21
|
+
}, location.origin);
|
|
17
22
|
}
|
|
18
23
|
function rejectQueue(err) {
|
|
19
24
|
if (queue) {
|
|
@@ -22,6 +27,10 @@ function singletonPromise(fn) {
|
|
|
22
27
|
});
|
|
23
28
|
queue = null;
|
|
24
29
|
}
|
|
30
|
+
window.postMessage({
|
|
31
|
+
type: _const.MESSAGE_TYPE_LOGIN_ERROR,
|
|
32
|
+
payload: err
|
|
33
|
+
}, location.origin);
|
|
25
34
|
}
|
|
26
35
|
return function () {
|
|
27
36
|
if (!queue) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["MESSAGE_TYPE_LOGIN_SUCCESS","MESSAGE_TYPE_LOGIN_ERROR"],"sources":["../../../src/const/index.ts"],"sourcesContent":["export const MESSAGE_TYPE_LOGIN_SUCCESS = 'fetcher-interceptor-login:success';\nexport const MESSAGE_TYPE_LOGIN_ERROR = 'fetcher-interceptor-login:error';\n"],"mappings":"AAAA,OAAO,IAAMA,0BAA0B,GAAG,mCAAmC;AAC7E,OAAO,IAAMC,wBAAwB,GAAG,iCAAiC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["default","messageListenInterceptorLogin"],"sources":["../../../src/helper/index.ts"],"sourcesContent":["export { default as messageListenInterceptorLogin } from './message-listen-interceptor-login';\n"],"mappings":"AAAA,SAASA,OAAO,IAAIC,6BAA6B,QAAQ,oCAAoC","ignoreList":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import _typeof from "@babel/runtime/helpers/typeof";
|
|
2
|
+
import { MESSAGE_TYPE_LOGIN_SUCCESS, MESSAGE_TYPE_LOGIN_ERROR } from '../const';
|
|
3
|
+
/**
|
|
4
|
+
* 通常情况下,我们不需要这个,但如果一个应用里有两个不同实例的 fetcher,两个可能同时被调用,就有可能同时触发登录,
|
|
5
|
+
* 这时候就需要用它在登录动作中使用 messageListenInterceptorLogin 来自动触发登录的返回
|
|
6
|
+
*/
|
|
7
|
+
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);
|
|
19
|
+
return function () {
|
|
20
|
+
return window.removeEventListener('message', listener);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=message-listen-interceptor-login.js.map
|
|
@@ -0,0 +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":[]}
|
package/dist/esm/index.js
CHANGED
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["default"],"sources":["../../src/index.ts"],"sourcesContent":["export { default } from './util/intercept';\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,kBAAkB","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["default"],"sources":["../../src/index.ts"],"sourcesContent":["export { default } from './util/intercept';\n\nexport * from './helper';\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,kBAAkB;AAE1C,cAAc,UAAU","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/types/index.ts"],"sourcesContent":["import {\n FetcherError\n} from '@kcuf/fetcher';\n\nexport interface ICreateInterceptorOptions {\n needLogin(code: string, err: FetcherError): boolean;\n doLogin(): Promise<
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/types/index.ts"],"sourcesContent":["import {\n FetcherError\n} from '@kcuf/fetcher';\n\nexport interface ICreateInterceptorOptions {\n needLogin(code: string, err: FetcherError): boolean;\n doLogin(): Promise<unknown>;\n headerKeys?: string[];\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import _regeneratorRuntime from "@babel/runtime/helpers/regeneratorRuntime";
|
|
2
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
1
|
import { FetcherErrorName, deleteConfigHeaders } from '@kcuf/fetcher';
|
|
4
2
|
import singletonPromise from './singleton-promise';
|
|
5
3
|
export default function createInterceptorResponseRejected(_ref) {
|
|
@@ -7,37 +5,21 @@ export default function createInterceptorResponseRejected(_ref) {
|
|
|
7
5
|
doLogin = _ref.doLogin,
|
|
8
6
|
headerKeys = _ref.headerKeys;
|
|
9
7
|
var singletonLogin = singletonPromise(doLogin);
|
|
10
|
-
return
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return requestByInterceptor(fetcherConfig); // 登录完成,重新发起原请求
|
|
27
|
-
}, function () {
|
|
28
|
-
// 一般登录弹窗在登录成功之前是不应该被关闭或取消的,但若真允许取消,这里需要修改错误为「取消登录」
|
|
29
|
-
error.name = FetcherErrorName.LOGIN_CANCELLED;
|
|
30
|
-
throw error; // 以新的 name 继续抛错
|
|
31
|
-
}));
|
|
32
|
-
case 2:
|
|
33
|
-
case "end":
|
|
34
|
-
return _context.stop();
|
|
35
|
-
}
|
|
36
|
-
}, _callee);
|
|
37
|
-
}));
|
|
38
|
-
return function (_x, _x2, _x3, _x4) {
|
|
39
|
-
return _ref2.apply(this, arguments);
|
|
40
|
-
};
|
|
41
|
-
}();
|
|
8
|
+
return function (error, fetcherConfig, _, requestByInterceptor) {
|
|
9
|
+
var _error$code;
|
|
10
|
+
if (!needLogin((_error$code = error.code) !== null && _error$code !== void 0 ? _error$code : '', error)) {
|
|
11
|
+
throw error;
|
|
12
|
+
}
|
|
13
|
+
return singletonLogin().then(function () {
|
|
14
|
+
if (headerKeys) {
|
|
15
|
+
deleteConfigHeaders(fetcherConfig, headerKeys);
|
|
16
|
+
}
|
|
17
|
+
return requestByInterceptor(fetcherConfig); // 登录完成,重新发起原请求
|
|
18
|
+
}, function () {
|
|
19
|
+
// 一般登录弹窗在登录成功之前是不应该被关闭或取消的,但若真允许取消,这里需要修改错误为「取消登录」
|
|
20
|
+
error.name = FetcherErrorName.LOGIN_CANCELLED;
|
|
21
|
+
throw error; // 以新的 name 继续抛错
|
|
22
|
+
});
|
|
23
|
+
};
|
|
42
24
|
}
|
|
43
25
|
//# sourceMappingURL=create-interceptor-response-rejected.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-interceptor-response-rejected.js","names":["FetcherErrorName","deleteConfigHeaders","singletonPromise","createInterceptorResponseRejected","_ref","needLogin","doLogin","headerKeys","singletonLogin","
|
|
1
|
+
{"version":3,"file":"create-interceptor-response-rejected.js","names":["FetcherErrorName","deleteConfigHeaders","singletonPromise","createInterceptorResponseRejected","_ref","needLogin","doLogin","headerKeys","singletonLogin","error","fetcherConfig","_","requestByInterceptor","_error$code","code","then","name","LOGIN_CANCELLED"],"sources":["../../../src/util/create-interceptor-response-rejected.ts"],"sourcesContent":["import {\n FetcherErrorName,\n FetcherConfig,\n FetcherError,\n FetcherResponse,\n FetcherCallRequest,\n FetcherInterceptResponseRejected,\n deleteConfigHeaders\n} from '@kcuf/fetcher';\n\nimport {\n ICreateInterceptorOptions\n} from '../types';\n\nimport singletonPromise from './singleton-promise';\n\nexport default function createInterceptorResponseRejected({\n needLogin,\n doLogin,\n headerKeys\n}: ICreateInterceptorOptions): FetcherInterceptResponseRejected {\n const singletonLogin = singletonPromise(doLogin);\n \n return (error: FetcherError, fetcherConfig: FetcherConfig, _: FetcherResponse | undefined, requestByInterceptor: FetcherCallRequest) => {\n if (!needLogin(error.code ?? '', error)) {\n throw error;\n }\n \n return singletonLogin().then(() => {\n if (headerKeys) {\n deleteConfigHeaders(fetcherConfig, headerKeys);\n }\n \n return requestByInterceptor(fetcherConfig); // 登录完成,重新发起原请求\n }, () => {\n // 一般登录弹窗在登录成功之前是不应该被关闭或取消的,但若真允许取消,这里需要修改错误为「取消登录」\n error.name = FetcherErrorName.LOGIN_CANCELLED;\n \n throw error; // 以新的 name 继续抛错\n });\n };\n}\n"],"mappings":"AAAA,SACEA,gBAAgB,EAMhBC,mBAAmB,QACd,eAAe;AAMtB,OAAOC,gBAAgB,MAAM,qBAAqB;AAElD,eAAe,SAASC,iCAAiCA,CAAAC,IAAA,EAIO;EAAA,IAH9DC,SAAS,GAAAD,IAAA,CAATC,SAAS;IACTC,OAAO,GAAAF,IAAA,CAAPE,OAAO;IACPC,UAAU,GAAAH,IAAA,CAAVG,UAAU;EAEV,IAAMC,cAAc,GAAGN,gBAAgB,CAACI,OAAO,CAAC;EAEhD,OAAO,UAACG,KAAmB,EAAEC,aAA4B,EAAEC,CAA8B,EAAEC,oBAAwC,EAAK;IAAA,IAAAC,WAAA;IACtI,IAAI,CAACR,SAAS,EAAAQ,WAAA,GAACJ,KAAK,CAACK,IAAI,cAAAD,WAAA,cAAAA,WAAA,GAAI,EAAE,EAAEJ,KAAK,CAAC,EAAE;MACvC,MAAMA,KAAK;IACb;IAEA,OAAOD,cAAc,CAAC,CAAC,CAACO,IAAI,CAAC,YAAM;MACjC,IAAIR,UAAU,EAAE;QACdN,mBAAmB,CAACS,aAAa,EAAEH,UAAU,CAAC;MAChD;MAEA,OAAOK,oBAAoB,CAACF,aAAa,CAAC,CAAC,CAAC;IAC9C,CAAC,EAAE,YAAM;MACP;MACAD,KAAK,CAACO,IAAI,GAAGhB,gBAAgB,CAACiB,eAAe;MAE7C,MAAMR,KAAK,CAAC,CAAC;IACf,CAAC,CAAC;EACJ,CAAC;AACH","ignoreList":[]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cloneResponseData } from '@kcuf/fetcher';
|
|
2
|
+
import { MESSAGE_TYPE_LOGIN_SUCCESS, MESSAGE_TYPE_LOGIN_ERROR } from '../const';
|
|
2
3
|
export default function singletonPromise(fn) {
|
|
3
4
|
var queue = null;
|
|
4
5
|
function resolveQueue(data) {
|
|
@@ -8,6 +9,10 @@ export default function singletonPromise(fn) {
|
|
|
8
9
|
});
|
|
9
10
|
queue = null;
|
|
10
11
|
}
|
|
12
|
+
window.postMessage({
|
|
13
|
+
type: MESSAGE_TYPE_LOGIN_SUCCESS,
|
|
14
|
+
payload: data
|
|
15
|
+
}, location.origin);
|
|
11
16
|
}
|
|
12
17
|
function rejectQueue(err) {
|
|
13
18
|
if (queue) {
|
|
@@ -16,6 +21,10 @@ export default function singletonPromise(fn) {
|
|
|
16
21
|
});
|
|
17
22
|
queue = null;
|
|
18
23
|
}
|
|
24
|
+
window.postMessage({
|
|
25
|
+
type: MESSAGE_TYPE_LOGIN_ERROR,
|
|
26
|
+
payload: err
|
|
27
|
+
}, location.origin);
|
|
19
28
|
}
|
|
20
29
|
return function () {
|
|
21
30
|
if (!queue) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singleton-promise.js","names":["cloneResponseData","singletonPromise","fn","queue","resolveQueue","data","forEach","v","resolve","rejectQueue","err","reject","promise","Promise","_queue","push","length","then"],"sources":["../../../src/util/singleton-promise.ts"],"sourcesContent":["import {\n cloneResponseData\n} from '@kcuf/fetcher';\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 \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 \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 => rejectQueue(err));\n }\n \n return promise;\n };\n}\n"],"mappings":"AAAA,SACEA,iBAAiB,QACZ,eAAe;
|
|
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":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as messageListenInterceptorLogin } from './message-listen-interceptor-login';
|
package/dist/types/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kcuf/fetcher-interceptor-login",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Fetcher interceptor seamless login and redo request.",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"license": "MIT",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"type": "git",
|
|
13
13
|
"url": "git+https://github.com/justnewbee/kcuf.git"
|
|
14
14
|
},
|
|
15
|
-
"homepage": "https://github.com/justnewbee/kcuf/tree/
|
|
15
|
+
"homepage": "https://github.com/justnewbee/kcuf/tree/main/packages-fetcher/fetcher-interceptor-login",
|
|
16
16
|
"bugs": "https://github.com/justnewbee/kcuf/issues",
|
|
17
17
|
"author": {
|
|
18
18
|
"name": "Jianchun Wang",
|
|
@@ -22,21 +22,21 @@
|
|
|
22
22
|
"access": "public"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@babel/cli": "^7.28.
|
|
26
|
-
"@babel/core": "^7.28.
|
|
27
|
-
"@babel/plugin-transform-runtime": "^7.28.
|
|
28
|
-
"@babel/preset-env": "^7.28.
|
|
29
|
-
"@babel/preset-typescript": "^7.
|
|
30
|
-
"@vitest/coverage-v8": "^
|
|
31
|
-
"fetch-mock": "^12.
|
|
32
|
-
"jsdom": "^
|
|
33
|
-
"rimraf": "^6.
|
|
34
|
-
"typescript": "^5.
|
|
35
|
-
"vitest": "^
|
|
36
|
-
"@kcuf/ts-config": "^0.0
|
|
25
|
+
"@babel/cli": "^7.28.6",
|
|
26
|
+
"@babel/core": "^7.28.6",
|
|
27
|
+
"@babel/plugin-transform-runtime": "^7.28.5",
|
|
28
|
+
"@babel/preset-env": "^7.28.6",
|
|
29
|
+
"@babel/preset-typescript": "^7.28.5",
|
|
30
|
+
"@vitest/coverage-v8": "^4.0.17",
|
|
31
|
+
"fetch-mock": "^12.6.0",
|
|
32
|
+
"jsdom": "^27.4.0",
|
|
33
|
+
"rimraf": "^6.1.2",
|
|
34
|
+
"typescript": "^5.9.3",
|
|
35
|
+
"vitest": "^4.0.17",
|
|
36
|
+
"@kcuf/ts-config": "^0.1.0"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
|
-
"@babel/runtime": "
|
|
39
|
+
"@babel/runtime": ">=7.0.0"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@kcuf/fetcher": "^0.2.9"
|