message-verify 1.0.1-beta.61 → 1.0.1-beta.62

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/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { VerifyModalConfig, LoginModalConfig } from './utils/type.js';
2
2
  export declare const initFingerprint: () => Promise<string>;
3
3
  export declare const createReLoginModal: (modalProps: LoginModalConfig) => void;
4
+ export declare const getResponse: (response: any) => any;
4
5
  export declare const VerifyHandler: ({ data, config, http, verifyPromise, sendApi, response }: VerifyModalConfig) => Promise<any>;
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@ import ReactDOM from 'react-dom/client';
3
3
  import VerifyModal from './modal/verify-modal.js';
4
4
  import Fingerprint2 from 'fingerprintjs2';
5
5
  import ReLoginModal from './modal/relogin-modal.js';
6
+ import eventEmitter from './utils/eventEmitter';
6
7
  let fingerprintPromise = null; // 用 Promise 本身作为缓存
7
8
  let modalRoot = null;
8
9
  export const initFingerprint = async () => {
@@ -54,60 +55,33 @@ export const createReLoginModal = (modalProps) => {
54
55
  const reLoginModalId = 'relogin-modal-container';
55
56
  creatModal(modalProps, reLoginModalId, ReLoginModal);
56
57
  };
57
- let cachedResolve = null;
58
- let cachedReject = null;
58
+ let fetchUrl = '';
59
+ export const getResponse = (response) => {
60
+ // if (fetchUrl === response.config.url) {
61
+ console.log('VerifyHandler getResponse =>', response, fetchUrl);
62
+ eventEmitter.emit('response', response?.data?.status?.code || -1);
63
+ return response;
64
+ // }
65
+ };
59
66
  export const VerifyHandler = ({ data, config, http, verifyPromise, sendApi, response }) => {
60
67
  console.log('VerifyHandler =>', response);
68
+ fetchUrl = config?.url || '';
61
69
  const toEmpty = () => {
62
70
  verifyPromise.current = null;
63
- cachedResolve = null;
64
- cachedReject = null;
65
71
  };
66
- // if (!verifyPromise.current) {
67
- // verifyPromise.current = new Promise((resolve, reject) => {
68
- // createMessageVerifyModal({
69
- // data,
70
- // config,
71
- // http,
72
- // apiResolve: resolve,
73
- // apiReject: reject,
74
- // apiPromiseToEmpty: toEmpty,
75
- // sendApi,
76
- // response
77
- // } as VerifyModalConfig);
78
- // }).finally(toEmpty);
79
- // }
80
72
  if (!verifyPromise.current) {
81
73
  verifyPromise.current = new Promise((resolve, reject) => {
82
- // 只缓存第一次的 resolve/reject
83
- if (!cachedResolve)
84
- cachedResolve = resolve;
85
- if (!cachedReject)
86
- cachedReject = reject;
87
74
  createMessageVerifyModal({
88
75
  data,
89
76
  config,
90
77
  http,
91
- apiResolve: cachedResolve,
92
- apiReject: cachedReject,
78
+ apiResolve: resolve,
79
+ apiReject: reject,
93
80
  apiPromiseToEmpty: toEmpty,
94
81
  sendApi,
95
82
  response
96
83
  });
97
84
  }).finally(toEmpty);
98
85
  }
99
- else {
100
- // 已有 modal,更新其余参数(假设 modal 支持 props 更新)
101
- createMessageVerifyModal({
102
- data,
103
- config,
104
- http,
105
- apiResolve: cachedResolve,
106
- apiReject: cachedReject,
107
- apiPromiseToEmpty: toEmpty,
108
- sendApi,
109
- response
110
- });
111
- }
112
86
  return verifyPromise.current;
113
87
  };
@@ -4,6 +4,7 @@ import { Modal, Input, Button, message } from '../compoments/index.js';
4
4
  import Api from '../utils/resource.js';
5
5
  import t from '../utils/i18n.js';
6
6
  import { axios } from '@yqg/resource';
7
+ import eventEmitter from '../utils/eventEmitter';
7
8
  const CreateMessageVerifyModal = ({ props }) => {
8
9
  const [visible, setVisible] = useState(true);
9
10
  const [countdown, setCountdown] = useState(60);
@@ -11,6 +12,7 @@ const CreateMessageVerifyModal = ({ props }) => {
11
12
  const [captchaImage, setCaptchaImage] = useState('');
12
13
  const [captchCode, setCaptchCode] = useState('');
13
14
  const [captchaKey, setCaptchaKey] = useState('');
15
+ const [resCode, setResCode] = useState(-1);
14
16
  const { data, http, lang, sendApi = '/admin/sms/send', config, apiResolve, apiPromiseToEmpty, onClose, response } = props || {};
15
17
  const dataObj = JSON.parse(data || '{}');
16
18
  const { mobile, verifyCodeKey } = dataObj || {};
@@ -46,6 +48,17 @@ const CreateMessageVerifyModal = ({ props }) => {
46
48
  clearInterval(timer);
47
49
  };
48
50
  }, [visible, countdown]);
51
+ useEffect(() => {
52
+ const handler = (data) => {
53
+ // 这里处理收到的数据
54
+ console.log('收到 response 事件:', data);
55
+ setResCode(data);
56
+ };
57
+ eventEmitter.on('response', handler);
58
+ return () => {
59
+ eventEmitter.off('response', handler);
60
+ };
61
+ }, []);
49
62
  const handleResend = async () => {
50
63
  const formData = new FormData();
51
64
  formData.append('captchaKey', captchaKey);
@@ -86,7 +99,7 @@ const CreateMessageVerifyModal = ({ props }) => {
86
99
  'Content-Type': config.headers['Content-Type'],
87
100
  }
88
101
  }).then(res => {
89
- console.log('VerifyHandler => then', response);
102
+ console.log('VerifyHandler => then', response, resCode);
90
103
  resolve(res);
91
104
  }).catch(err => {
92
105
  reject(err);
@@ -1 +1 @@
1
- {"root":["../src/index.tsx","../src/main.tsx","../src/vite-env.d.ts","../src/compoments/button.tsx","../src/compoments/index.ts","../src/compoments/input.tsx","../src/compoments/message.tsx","../src/compoments/modal.tsx","../src/locales/en.ts","../src/locales/id.ts","../src/locales/zh.ts","../src/modal/relogin-modal.tsx","../src/modal/verify-modal.tsx","../src/utils/i18n.ts","../src/utils/resource.ts","../src/utils/status.ts","../src/utils/type.ts"],"version":"5.7.3"}
1
+ {"root":["../src/index.tsx","../src/main.tsx","../src/vite-env.d.ts","../src/compoments/button.tsx","../src/compoments/index.ts","../src/compoments/input.tsx","../src/compoments/message.tsx","../src/compoments/modal.tsx","../src/locales/en.ts","../src/locales/id.ts","../src/locales/zh.ts","../src/modal/relogin-modal.tsx","../src/modal/verify-modal.tsx","../src/utils/eventemitter.ts","../src/utils/i18n.ts","../src/utils/resource.ts","../src/utils/status.ts","../src/utils/type.ts"],"version":"5.7.3"}
@@ -0,0 +1,10 @@
1
+ type Listener = (...args: any[]) => void;
2
+ declare class EventEmitter {
3
+ private events;
4
+ on(event: string, listener: Listener): void;
5
+ off(event: string, listener: Listener): void;
6
+ emit(event: string, ...args: any[]): void;
7
+ once(event: string, listener: Listener): void;
8
+ }
9
+ declare const eventEmitter: EventEmitter;
10
+ export default eventEmitter;
@@ -0,0 +1,28 @@
1
+ class EventEmitter {
2
+ events = {};
3
+ on(event, listener) {
4
+ if (!this.events[event]) {
5
+ this.events[event] = [];
6
+ }
7
+ this.events[event].push(listener);
8
+ }
9
+ off(event, listener) {
10
+ if (!this.events[event])
11
+ return;
12
+ this.events[event] = this.events[event].filter(l => l !== listener);
13
+ }
14
+ emit(event, ...args) {
15
+ if (!this.events[event])
16
+ return;
17
+ this.events[event].forEach(listener => listener(...args));
18
+ }
19
+ once(event, listener) {
20
+ const onceListener = (...args) => {
21
+ listener(...args);
22
+ this.off(event, onceListener);
23
+ };
24
+ this.on(event, onceListener);
25
+ }
26
+ }
27
+ const eventEmitter = new EventEmitter();
28
+ export default eventEmitter;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "message-verify",
3
- "version": "1.0.1-beta.61",
3
+ "version": "1.0.1-beta.62",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "dependencies": {
package/src/index.tsx CHANGED
@@ -3,6 +3,7 @@ import VerifyModal from './modal/verify-modal.js'
3
3
  import Fingerprint2 from 'fingerprintjs2';
4
4
  import ReLoginModal from './modal/relogin-modal.js';
5
5
  import { VerifyModalConfig, LoginModalConfig } from './utils/type.js';
6
+ import eventEmitter from './utils/eventEmitter';
6
7
 
7
8
  let fingerprintPromise: Promise<string> | null = null; // 用 Promise 本身作为缓存
8
9
  let modalRoot: ReactDOM.Root | null = null
@@ -63,57 +64,35 @@ export const createReLoginModal = (modalProps: LoginModalConfig) => {
63
64
  const reLoginModalId = 'relogin-modal-container';
64
65
  creatModal(modalProps, reLoginModalId, ReLoginModal);
65
66
  }
66
- let cachedResolve: ((value: any) => void) | null = null;
67
- let cachedReject: ((reason?: any) => void) | null = null;
67
+
68
+ let fetchUrl: string = '';
69
+ export const getResponse = (response: any) => {
70
+ // if (fetchUrl === response.config.url) {
71
+ console.log('VerifyHandler getResponse =>', response, fetchUrl);
72
+ eventEmitter.emit('response', response?.data?.status?.code || -1);
73
+ return response;
74
+ // }
75
+ }
76
+
68
77
  export const VerifyHandler = ({data, config, http, verifyPromise, sendApi, response}: VerifyModalConfig): Promise<any> => {
69
78
  console.log('VerifyHandler =>', response);
79
+ fetchUrl = config?.url as string || '';
70
80
  const toEmpty = () => {
71
81
  verifyPromise.current = null;
72
- cachedResolve = null;
73
- cachedReject = null;
74
82
  };
75
- // if (!verifyPromise.current) {
76
- // verifyPromise.current = new Promise((resolve, reject) => {
77
- // createMessageVerifyModal({
78
- // data,
79
- // config,
80
- // http,
81
- // apiResolve: resolve,
82
- // apiReject: reject,
83
- // apiPromiseToEmpty: toEmpty,
84
- // sendApi,
85
- // response
86
- // } as VerifyModalConfig);
87
- // }).finally(toEmpty);
88
- // }
89
83
  if (!verifyPromise.current) {
90
84
  verifyPromise.current = new Promise((resolve, reject) => {
91
- // 只缓存第一次的 resolve/reject
92
- if (!cachedResolve) cachedResolve = resolve;
93
- if (!cachedReject) cachedReject = reject;
94
- createMessageVerifyModal({
95
- data,
96
- config,
97
- http,
98
- apiResolve: cachedResolve,
99
- apiReject: cachedReject,
100
- apiPromiseToEmpty: toEmpty,
101
- sendApi,
102
- response
103
- } as VerifyModalConfig);
104
- }).finally(toEmpty);
105
- } else {
106
- // 已有 modal,更新其余参数(假设 modal 支持 props 更新)
107
85
  createMessageVerifyModal({
108
86
  data,
109
87
  config,
110
88
  http,
111
- apiResolve: cachedResolve!,
112
- apiReject: cachedReject!,
89
+ apiResolve: resolve,
90
+ apiReject: reject,
113
91
  apiPromiseToEmpty: toEmpty,
114
92
  sendApi,
115
93
  response
116
94
  } as VerifyModalConfig);
95
+ }).finally(toEmpty);
117
96
  }
118
97
  return verifyPromise.current;
119
98
  };
@@ -4,6 +4,7 @@ import Api from '../utils/resource.js'
4
4
  import t from '../utils/i18n.js'
5
5
  import { VerifyModalConfig } from '../utils/type.js';
6
6
  import { axios } from '@yqg/resource';
7
+ import eventEmitter from '../utils/eventEmitter';
7
8
 
8
9
  const CreateMessageVerifyModal = ({ props }: { props: VerifyModalConfig }) => {
9
10
  const [visible, setVisible] = useState(true);
@@ -12,6 +13,7 @@ const CreateMessageVerifyModal = ({ props }: { props: VerifyModalConfig }) => {
12
13
  const [captchaImage, setCaptchaImage] = useState<string>('');
13
14
  const [captchCode, setCaptchCode] = useState<string>('');
14
15
  const [captchaKey, setCaptchaKey] = useState<string>('');
16
+ const [resCode, setResCode] = useState<number>(-1);
15
17
  const { data, http, lang, sendApi = '/admin/sms/send', config, apiResolve, apiPromiseToEmpty, onClose, response } = props || {};
16
18
  const dataObj = JSON.parse(data || '{}');
17
19
  const { mobile, verifyCodeKey } = dataObj || {};
@@ -49,6 +51,19 @@ const CreateMessageVerifyModal = ({ props }: { props: VerifyModalConfig }) => {
49
51
  };
50
52
  }, [visible, countdown]);
51
53
 
54
+
55
+ useEffect(() => {
56
+ const handler = (data: any) => {
57
+ // 这里处理收到的数据
58
+ console.log('收到 response 事件:', data);
59
+ setResCode(data);
60
+ };
61
+ eventEmitter.on('response', handler);
62
+ return () => {
63
+ eventEmitter.off('response', handler);
64
+ };
65
+ }, [])
66
+
52
67
  const handleResend = async () => {
53
68
  const formData = new FormData();
54
69
  formData.append('captchaKey', captchaKey);
@@ -102,7 +117,7 @@ const CreateMessageVerifyModal = ({ props }: { props: VerifyModalConfig }) => {
102
117
  'Content-Type': config.headers['Content-Type'],
103
118
  }
104
119
  }).then(res => {
105
- console.log('VerifyHandler => then', response);
120
+ console.log('VerifyHandler => then', response, resCode);
106
121
  resolve(res);
107
122
  }).catch(err => {
108
123
  reject(err);
@@ -0,0 +1,33 @@
1
+ type Listener = (...args: any[]) => void;
2
+
3
+ class EventEmitter {
4
+ private events: Record<string, Listener[]> = {};
5
+
6
+ on(event: string, listener: Listener) {
7
+ if (!this.events[event]) {
8
+ this.events[event] = [];
9
+ }
10
+ this.events[event].push(listener);
11
+ }
12
+
13
+ off(event: string, listener: Listener) {
14
+ if (!this.events[event]) return;
15
+ this.events[event] = this.events[event].filter(l => l !== listener);
16
+ }
17
+
18
+ emit(event: string, ...args: any[]) {
19
+ if (!this.events[event]) return;
20
+ this.events[event].forEach(listener => listener(...args));
21
+ }
22
+
23
+ once(event: string, listener: Listener) {
24
+ const onceListener: Listener = (...args) => {
25
+ listener(...args);
26
+ this.off(event, onceListener);
27
+ };
28
+ this.on(event, onceListener);
29
+ }
30
+ }
31
+
32
+ const eventEmitter = new EventEmitter();
33
+ export default eventEmitter;