sales-frontend-solution 0.0.14 → 0.0.16
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.cjs +90 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -2
- package/dist/index.d.ts +11 -2
- package/dist/index.js +77 -6
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var React2 = require('react');
|
|
4
4
|
var salesFrontendUtils = require('sales-frontend-utils');
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
|
|
7
7
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var React2__default = /*#__PURE__*/_interopDefault(React2);
|
|
10
10
|
|
|
11
|
-
// src/
|
|
11
|
+
// src/v3-provider.tsx
|
|
12
12
|
|
|
13
13
|
// src/utils/load-script.ts
|
|
14
14
|
async function loadScript(url2) {
|
|
@@ -29,8 +29,79 @@ async function loadScript(url2) {
|
|
|
29
29
|
document.body.appendChild(script);
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
|
+
var getServiceUrl = (serviceName) => {
|
|
33
|
+
if (!salesFrontendUtils.isClient()) {
|
|
34
|
+
return "";
|
|
35
|
+
}
|
|
36
|
+
const env = salesFrontendUtils.getEnvironmentFromHostname(location.hostname);
|
|
37
|
+
switch (env) {
|
|
38
|
+
case "local":
|
|
39
|
+
return `${salesFrontendUtils.getServiceCode()}/api/${serviceName}`;
|
|
40
|
+
case "dev":
|
|
41
|
+
return `https://nxl-${serviceName}-dev.hanwhalife.com/api`;
|
|
42
|
+
case "stg":
|
|
43
|
+
return `https://nxl-${serviceName}-stg.hanwhalife.com/api`;
|
|
44
|
+
case "prd":
|
|
45
|
+
return `https://nxl-${serviceName}.hanwhalife.com/api`;
|
|
46
|
+
default:
|
|
47
|
+
return ``;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
({
|
|
51
|
+
INPUT_PREFILL_USER: `${getServiceUrl("nlc")}/user-ctfn/ncsr-info-inpt/post`
|
|
52
|
+
});
|
|
32
53
|
|
|
33
|
-
// src/
|
|
54
|
+
// src/v3.ts
|
|
55
|
+
var isAndroid = () => {
|
|
56
|
+
return /android/i.test(navigator.userAgent) && !/edge/i.test(navigator.userAgent);
|
|
57
|
+
};
|
|
58
|
+
var loadV3 = () => {
|
|
59
|
+
console.log("load v3");
|
|
60
|
+
const mtk = sessionStorage.getItem("mtk") || window.mpl_token?.();
|
|
61
|
+
const mcd = sessionStorage.getItem("mcd") || window.mpl_enc_param?.();
|
|
62
|
+
if (mtk && mcd && window.mpl_load && mtk !== "undefined" && mcd !== "undefined") {
|
|
63
|
+
window.mpl_load(mtk, mcd);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
var checkV3Status = async (type) => {
|
|
67
|
+
console.log("check v3 status");
|
|
68
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
69
|
+
if (!isAndroid() || !window.mpl_status) {
|
|
70
|
+
console.log("not android or no mpl_status");
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
if (window.mpl_status() === "ALIVE") {
|
|
74
|
+
console.log("mpl status is alive");
|
|
75
|
+
loadV3();
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
console.log("v3 not alive");
|
|
79
|
+
return false;
|
|
80
|
+
};
|
|
81
|
+
var launchV3 = async () => {
|
|
82
|
+
loadV3();
|
|
83
|
+
return await checkV3Status();
|
|
84
|
+
};
|
|
85
|
+
var V3Context = React2.createContext(void 0);
|
|
86
|
+
var AhnlabV3JsUrl = "https://mpl.ahnlab.com/js/mpl_webview_cm.js";
|
|
87
|
+
var V3Provider = ({ children }) => {
|
|
88
|
+
const [isLoaded, setIsLoaded] = React2.useState(false);
|
|
89
|
+
React2.useEffect(() => {
|
|
90
|
+
const initialize = async () => {
|
|
91
|
+
await loadScript(AhnlabV3JsUrl);
|
|
92
|
+
setIsLoaded(true);
|
|
93
|
+
};
|
|
94
|
+
initialize();
|
|
95
|
+
}, []);
|
|
96
|
+
return /* @__PURE__ */ jsxRuntime.jsx(V3Context.Provider, { value: { isLoaded, launch: launchV3 }, children });
|
|
97
|
+
};
|
|
98
|
+
var useV3 = () => {
|
|
99
|
+
const context = React2.useContext(V3Context);
|
|
100
|
+
if (!context) {
|
|
101
|
+
throw new Error("V3Provider\uB97C \uC815\uC758\uD574\uC8FC\uC138\uC694.");
|
|
102
|
+
}
|
|
103
|
+
return context;
|
|
104
|
+
};
|
|
34
105
|
var getPath = (service, env) => `https://nxl-${`${service}-${env}` }.hanwhalife.com`;
|
|
35
106
|
var getEnv = () => {
|
|
36
107
|
return "stg";
|
|
@@ -136,8 +207,8 @@ var uuidv4 = () => {
|
|
|
136
207
|
|
|
137
208
|
// src/hooks/use-keypad.ts
|
|
138
209
|
function useKeypad() {
|
|
139
|
-
const [isShow, setIsShow] =
|
|
140
|
-
const show =
|
|
210
|
+
const [isShow, setIsShow] = React2.useState(false);
|
|
211
|
+
const show = React2.useCallback(
|
|
141
212
|
(inputRef, onInputChange, onKeypadClose, keyType = keypad_mode_enum_default.QWERTY_SMART, maxLength, numberKeyRowCount) => {
|
|
142
213
|
const name = uuidv4();
|
|
143
214
|
if (!XKeyboardMobileInstance) {
|
|
@@ -276,7 +347,7 @@ function useKeypad() {
|
|
|
276
347
|
targetKeypad.refresh();
|
|
277
348
|
}
|
|
278
349
|
};
|
|
279
|
-
|
|
350
|
+
React2.useEffect(() => {
|
|
280
351
|
const handleMouseDown = (event) => {
|
|
281
352
|
if (!XKeyboardMobileInstance) {
|
|
282
353
|
return;
|
|
@@ -306,15 +377,15 @@ function useKeypad() {
|
|
|
306
377
|
}
|
|
307
378
|
function Keypad({ value, onChange, mode, maxLength, inputElement }) {
|
|
308
379
|
const { show} = useKeypad();
|
|
309
|
-
const inputRef =
|
|
310
|
-
const [maskedValue, setMaskedValue] =
|
|
311
|
-
const onCloseBack =
|
|
380
|
+
const inputRef = React2.useRef(null);
|
|
381
|
+
const [maskedValue, setMaskedValue] = React2.useState("");
|
|
382
|
+
const onCloseBack = React2.useCallback(
|
|
312
383
|
(res) => {
|
|
313
384
|
onChange(res.sessionInfo);
|
|
314
385
|
},
|
|
315
386
|
[onChange]
|
|
316
387
|
);
|
|
317
|
-
const onChangeBack =
|
|
388
|
+
const onChangeBack = React2.useCallback(
|
|
318
389
|
(length) => {
|
|
319
390
|
if (length === 0) {
|
|
320
391
|
onChange(null);
|
|
@@ -323,7 +394,7 @@ function Keypad({ value, onChange, mode, maxLength, inputElement }) {
|
|
|
323
394
|
},
|
|
324
395
|
[onChange, setMaskedValue]
|
|
325
396
|
);
|
|
326
|
-
const handleKeypad =
|
|
397
|
+
const handleKeypad = React2.useCallback(() => {
|
|
327
398
|
show(inputRef.current, onChangeBack, onCloseBack, mode, maxLength, 3);
|
|
328
399
|
}, [show, inputRef, onChangeBack, onCloseBack, mode, maxLength]);
|
|
329
400
|
const enhancedOnClick = (existingClickHandler, newClickHandler) => {
|
|
@@ -334,17 +405,17 @@ function Keypad({ value, onChange, mode, maxLength, inputElement }) {
|
|
|
334
405
|
newClickHandler();
|
|
335
406
|
};
|
|
336
407
|
};
|
|
337
|
-
const cloneElement =
|
|
408
|
+
const cloneElement = React2__default.default.cloneElement(inputElement, {
|
|
338
409
|
ref: inputRef,
|
|
339
410
|
value: maskedValue,
|
|
340
411
|
onClick: enhancedOnClick(inputElement.props.onClick, handleKeypad)
|
|
341
412
|
// iskeypadactive: isShow
|
|
342
413
|
});
|
|
343
|
-
|
|
414
|
+
React2.useEffect(() => {
|
|
344
415
|
const length = value?.input && value.input.length > 0 ? value.input.split(",").length : 0;
|
|
345
416
|
setMaskedValue("".padStart(length, "*"));
|
|
346
417
|
}, [value]);
|
|
347
|
-
|
|
418
|
+
React2.useEffect(() => {
|
|
348
419
|
if (inputRef.current && !(inputRef.current instanceof HTMLInputElement)) {
|
|
349
420
|
throw new Error("Input \uD0DC\uADF8\uAC00 \uC815\uC758\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.");
|
|
350
421
|
}
|
|
@@ -363,7 +434,7 @@ var url = (() => {
|
|
|
363
434
|
})();
|
|
364
435
|
function useNxlOne({ bizCode, tmplCode, ncsrInfoUuid, nlcCtfnId, t, env }) {
|
|
365
436
|
const baseUrl = env === "prod" ? "https://nxl-nlc.hanwhalife.com" : env === "stg" ? "https://nxl-nlc-stg.hanwhalife.com" : env === "dev" ? "https://nxl-nlc-dev.hanwhalife.com" : void 0;
|
|
366
|
-
const buildUrl =
|
|
437
|
+
const buildUrl = React2.useCallback(() => {
|
|
367
438
|
const targetUrl = new URL("/auth/v1", baseUrl || url);
|
|
368
439
|
targetUrl.searchParams.set("bizCode", bizCode);
|
|
369
440
|
targetUrl.searchParams.set("tmplCode", tmplCode);
|
|
@@ -426,7 +497,7 @@ function useNxlOne({ bizCode, tmplCode, ncsrInfoUuid, nlcCtfnId, t, env }) {
|
|
|
426
497
|
strictOrigin = true
|
|
427
498
|
}) {
|
|
428
499
|
const targetUrl = buildUrl();
|
|
429
|
-
|
|
500
|
+
React2.useEffect(() => {
|
|
430
501
|
if (!onSuccess && !onError) {
|
|
431
502
|
return;
|
|
432
503
|
}
|
|
@@ -475,6 +546,8 @@ function useNxlOne({ bizCode, tmplCode, ncsrInfoUuid, nlcCtfnId, t, env }) {
|
|
|
475
546
|
|
|
476
547
|
exports.Keypad = Keypad;
|
|
477
548
|
exports.KeypadModeEnum = keypad_mode_enum_default;
|
|
549
|
+
exports.V3Provider = V3Provider;
|
|
478
550
|
exports.useNxlOne = useNxlOne;
|
|
551
|
+
exports.useV3 = useV3;
|
|
479
552
|
//# sourceMappingURL=index.cjs.map
|
|
480
553
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/load-script.ts","../src/libs/xkeyboard.ts","../src/types/keypad-message.enum.ts","../src/types/keypad-mode.enum.ts","../src/utils/uuid.ts","../src/hooks/use-keypad.ts","../src/components/Keypad.tsx","../src/hooks/use-nxl-one.tsx"],"names":["url","isClient","KeypadMessageTypeEnum","KeypadModeEnum","useState","useCallback","useEffect","useRef","React","jsx"],"mappings":";;;;;;;;;;;;;AAAA,eAAsB,WAAWA,IAAa,EAAA;AAC5C,EAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACrC,IAAM,MAAA,MAAA,GAAS,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,GAAMA,GAAAA,IAAAA;AACb,IAAA,MAAA,CAAO,KAAQ,GAAA,IAAA;AACf,IAAO,MAAA,CAAA,gBAAA,CAAiB,QAAQ,MAAM;AACpC,MAAA,OAAA,CAAQ,EAAE,MAAA,EAAQ,IAAM,EAAA,KAAA,EAAO,OAAO,CAAA;AAAA,KACvC,CAAA;AAED,IAAO,MAAA,CAAA,gBAAA,CAAiB,SAAS,MAAM;AACrC,MAAO,MAAA,CAAA;AAAA,QACL,MAAQ,EAAA,KAAA;AAAA,QACR,KAAO,EAAA,IAAA;AAAA,QACP,OAAS,EAAA;AAAA,OACV,CAAA;AAAA,KACF,CAAA;AAED,IAAS,QAAA,CAAA,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,GACjC,CAAA;AACH;;;ACZA,IAAM,OAAU,GAAA,CAAC,OAAiB,EAAA,GAAA,KAChC,CAAe,YAAA,EAAiB,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,CAAY,CAAA,eAAA,CAAA;AAE/D,IAAM,SAAoB,MAAM;AAW9B,EAAO,OAAA,KAAA;AACT,CAAA;AAoBO,IAAM,2BAA2B,MAAM;AAC5C,EAAI,IAAA,CAACC,6BAAY,EAAA;AACf,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,MAAM,MAAM,MAAO,EAAA;AAEnB,EAAA,MAAM,iBAAoB,GAAA,CAAA,EAAG,OAAQ,CAAA,KAAA,EAAO,GAAG,CAAC,CAAA,oBAAA,CAAA;AAChD,EAAA,MAAM,kBAAqB,GAAA,CAAA,EAAG,OAAQ,CAAA,KAAA,EAAO,GAAG,CAAC,CAAA,qBAAA,CAAA;AAGjD,EAAC,OAAe,cAAiB,GAAA;AAAA,IAC/B,OAAS,EAAA,SAAA;AAAA,IACT,MAAQ,EAAA,iBAAA;AAAA,IACR,WAAA,EAAa,GAAG,kBAAkB,CAAA,GAAA,CAAA;AAAA,IAClC,OAAA,EAAS,GAAG,kBAAkB,CAAA,mBAAA,CAAA;AAAA,IAC9B,WAAA,EAAa,GAAG,kBAAkB,CAAA,aAAA,CAAA;AAAA,IAClC,0BAA4B,EAAA,SAAA;AAAA,IAC5B,sBAAwB,EAAA,mBAAA;AAAA,IACxB,0BAA4B,EAAA,+KAAA;AAAA,IAC5B,yBAA2B,EAAA,IAAA;AAAA,IAC3B,mBAAqB,EAAA,IAAA;AAAA,IACrB,cAAgB,EAAA,KAAA;AAAA,IAChB,sBAAwB,EAAA,MAAA;AAAA,IACxB,YAAc,EAAA,EAAA;AAAA,IACd,aAAe,EAAA,CAAA;AAAA,IACf,WAAa,EAAA;AAAA,GACf;AAEA,EAAA,QAAA,CAAS,gBAAgB,MAAM,KAAA;AAC/B,EAAA,QAAA,CAAS,cAAc,MAAM,KAAA;AAC7B,EAAA,QAAA,CAAS,gBAAgB,MAAM,KAAA;AAE/B,EAAA,MAAM,UAAU,QAAS,CAAA,IAAA;AACzB,EAAM,MAAA,aAAA,GAAgB,CAAC,mBAAmB,CAAA;AAE1C,EAAA,MAAM,OAAO,aAAc,CAAA,GAAA;AAAA;AAAA,IAEzB,CAAC,CAAM,KAAA,CAAA,EAAI,OAAe,cAAe,CAAA,WAAW,IAAI,CAAC,CAAA;AAAA,GAC3D;AAEA,EAAQ,OAAA,CAAA,GAAA,CAAI,IAAK,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,UAAW,CAAA,CAAC,CAAC,CAAC,CAAE,CAAA,IAAA,CAAK,MAAM;AACrD,IAAM,MAAA,YAAA,GAAe,QAAS,CAAA,cAAA,CAAe,SAAS,CAAA;AAEtD,IAAA,IAAI,cAAc,UAAY,EAAA;AAC5B,MAAa,YAAA,CAAA,UAAA,CAAW,YAAY,YAAY,CAAA;AAAA;AAGlD,IAAM,MAAA,WAAA,GAAc,QAAS,CAAA,aAAA,CAAc,MAAM,CAAA;AACjD,IAAA,WAAA,CAAY,EAAK,GAAA,SAAA;AACjB,IAAA,WAAA,CAAY,GAAM,GAAA,YAAA;AAClB,IAAA,WAAA,CAAY,IAAO,GAAA,UAAA;AAEnB,IAAY,WAAA,CAAA,IAAA,GAAQ,OAAe,cAAe,CAAA,OAAA;AAElD,IAAA,OAAA,CAAQ,YAAY,WAAW,CAAA;AAAA,GAChC,CAAA;AAED,EAAA,MAAM,UAA2D,EAAC;AAElE,EAAA,MAAM,SAAY,GAAA,CAAC,IAAiB,KAAA,OAAA,CAAQ,IAAI,CAAA;AAEhD,EAAM,MAAA,SAAA,GAAY,CAAC,IAAA,EAAc,MAA6B,KAAA;AAC5D,IAAA,OAAA,CAAQ,IAAI,CAAI,GAAA,MAAA;AAEhB,IAAO,OAAA,MAAA;AAAA,GACT;AAEA,EAAM,MAAA,YAAA,GAAe,CAAC,IAAiB,KAAA;AACrC,IAAA,OAAO,QAAQ,IAAI,CAAA;AAAA,GACrB;AAEA,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,MAAA,CAAO,IAAK,CAAA,OAAO,CAAE,CAAA,OAAA,CAAQ,CAAC,EAAO,KAAA;AACnC,MAAM,MAAA,MAAA,GAAS,QAAQ,EAAE,CAAA;AACzB,MAAI,IAAA,MAAA,IAAU,MAAO,CAAA,MAAA,EAAU,EAAA;AAC7B,QAAA,MAAA,CAAO,KAAM,EAAA;AAAA;AACf,KACD,CAAA;AAAA,GACH;AAEA,EAAM,MAAA,SAAA,GAAY,CAAC,IAAiB,KAAA;AAElC,IAAA,OAAO,SAAU,CAAA,IAAA,EAAM,IAAK,MAAA,CAAe,UAAU,CAAA;AAAA,GACvD;AAEA,EAAO,OAAA;AAAA,IACL,OAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF,CAAG,GAAA;;;ACxIH,IAAK,qBAAA,qBAAAC,sBAAL,KAAA;AACE,EAAAA,sBAAAA,CAAAA,sBAAAA,CAAA,sBAAmB,EAAnB,CAAA,GAAA,kBAAA;AACA,EAAAA,sBAAAA,CAAAA,sBAAAA,CAAA,aAAU,EAAV,CAAA,GAAA,SAAA;AAFG,EAAAA,OAAAA,sBAAAA;AAAA,CAAA,EAAA,qBAAA,IAAA,EAAA,CAAA;AAKL,IAAO,2BAAQ,GAAA,qBAAA;;;ACLf,IAAK,cAAA,qBAAAC,eAAL,KAAA;AACE,EAAAA,gBAAA,cAAe,CAAA,GAAA,aAAA;AACf,EAAAA,gBAAA,QAAS,CAAA,GAAA,QAAA;AAFN,EAAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA,CAAA;AAKL,IAAO,wBAAQ,GAAA;;;ACLR,IAAM,SAAS,MAAc;AAClC,EAAA,OAAO,sCAAuC,CAAA,OAAA,CAAQ,OAAS,EAAA,CAAC,CAAM,KAAA;AACpE,IAAM,MAAA,CAAA,GAAI,IAAK,CAAA,MAAA,EAAW,GAAA,EAAA,IAAM,CAC9B,EAAA,CAAA,GAAI,CAAM,KAAA,GAAA,GAAM,CAAK,GAAA,CAAA,IAAK,CAAQ,IAAA,CAAA;AAEpC,IAAO,OAAA,CAAA,CAAE,SAAS,EAAE,CAAA;AAAA,GACrB,CAAA;AACH,CAAA;;;ACCe,SAAR,SAA6B,GAAA;AAClC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,eAAkB,KAAK,CAAA;AAEnD,EAAA,MAAM,IAAO,GAAAC,iBAAA;AAAA,IACX,CACE,UACA,aACA,EAAA,aAAA,EACA,UAA0B,wBAAe,CAAA,YAAA,EACzC,WACA,iBACG,KAAA;AACH,MAAA,MAAM,OAAO,MAAO,EAAA;AAEpB,MAAA,IAAI,CAAC,uBAAyB,EAAA;AAC5B,QAAA;AAAA;AAGF,MAAI,IAAA,MAAA,GAAS,uBAAwB,CAAA,SAAA,CAAU,IAAI,CAAA;AACnD,MAAA,IAAI,CAAC,MAAQ,EAAA;AACX,QAAS,MAAA,GAAA,uBAAA,CAAwB,UAAU,IAAI,CAAA;AAAA,OAC1C,MAAA;AACL,QAAA,MAAA,CAAO,OAAQ,EAAA;AAAA;AAGjB,MAAI,IAAA,aAAA,IAAiB,OAAO,aAAA,KAAkB,UAAY,EAAA;AACxD,QAAA,aAAA,CAAc,CAAC,CAAA;AAAA;AAGjB,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,IAAA,EAAM,UAAU,IAAI,CAAA,CAAA;AAAA,QACpB,OAAS,EAAA,QAAA;AAAA,QACT,OAAA;AAAA,QACA,KAAO,EAAA,GAAA;AAAA,QACP,QAAU,EAAA,EAAE,GAAK,EAAA,EAAA,EAAI,MAAM,IAAK,EAAA;AAAA,QAChC,QAAU,EAAA,MAAA;AAAA,QACV,UAAY,EAAA,CAAA;AAAA,QACZ,aAAe,EAAA,IAAA;AAAA,QACf,KAAO,EAAA,IAAA;AAAA,QACP,UAAY,EAAA,KAAA;AAAA,QACZ,cAAgB,EAAA,IAAA;AAAA,QAChB,SAAA;AAAA,QACA,iBAAA;AAAA,QACA,aAAA,EAAe,CAAC,SAAsB,KAAA;AACpC,UAAI,IAAA,aAAA,IAAiB,OAAO,aAAA,KAAkB,UAAY,EAAA;AACxD,YAAA,aAAA,CAAc,SAAS,CAAA;AAAA;AAIzB,UAAA,IAAI,CAAC,MAAQ,EAAA;AACX,YAAA;AAAA;AAIF,UACE,IAAA,WAAA,CAAY,SACZ,IAAA,WAAA,CAAY,SAAY,GAAA,CAAA,IACxB,aAAa,WAAY,CAAA,SAAA,IACzB,MAAO,CAAA,OAAA,EACP,EAAA;AACA,YAAA,MAAA,CAAO,KAAM,EAAA;AACb,YAAA,SAAA,CAAU,KAAK,CAAA;AAEf,YAAA;AAAA;AACF,SACF;AAAA,QACA,eAAe,MAAM;AACnB,UAAA,IAAI,CAAC,MAAQ,EAAA;AACX,YAAA;AAAA;AAGF,UAAA,IAAI,CAAC,uBAAyB,EAAA;AAC5B,YAAA;AAAA;AAGF,UAAI,IAAA,aAAA,IAAiB,OAAO,aAAA,KAAkB,UAAY,EAAA;AACxD,YAAM,MAAA,WAAA,GAAc,OAAO,eAAgB,EAAA;AAC3C,YAAA,IAAI,MAAS,GAAA,CAAA;AACb,YAAA,IAAI,YAAY,KAAS,IAAA,WAAA,CAAY,MAAM,OAAQ,CAAA,GAAG,KAAK,CAAG,EAAA;AAC5D,cAAA,MAAA,GAAS,WAAY,CAAA,KAAA,CAAM,KAAM,CAAA,GAAG,CAAE,CAAA,MAAA;AAAA;AAGxC,YAAA,MAAM,GAAM,GAAA;AAAA,cACV,MAAA;AAAA,cACA,OAAS,EAAA,QAAA;AAAA,cACT,WAAa,EAAA;AAAA,gBACX,OAAO,WAAY,CAAA,KAAA;AAAA,gBACnB,WAAW,WAAY,CAAA,SAAA;AAAA,gBACvB,UAAU,WAAY,CAAA;AAAA,eACxB;AAAA,cACA,OAAA;AAAA,cACA;AAAA,aACF;AAEA,YAAA,SAAA,CAAU,KAAK,CAAA;AACf,YAAA,aAAA,CAAc,GAAG,CAAA;AAAA;AAGnB,UAAA,uBAAA,CAAwB,aAAa,IAAI,CAAA;AAEzC,UAAA,IAAI,CAAC,aAAe,EAAA;AAClB,YAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAG3C,UAAI,IAAA,OAAO,kBAAkB,UAAY,EAAA;AACvC,YAAM,MAAA,IAAI,MAAM,yBAAyB,CAAA;AAAA;AAC3C;AACF,OACF;AAEA,MAAM,MAAA,IAAA,GAAO,MAAO,CAAA,UAAA,CAAW,WAAW,CAAA;AAE1C,MAAI,IAAA,IAAA,KAAS,4BAAsB,gBAAkB,EAAA;AAEnD,QAAA,KAAA,CAAM,wEAAiB,CAAA;AAEvB,QAAA;AAAA,OACF,MAAA,IAAW,IAAS,KAAA,2BAAA,CAAsB,OAAS,EAAA;AAEjD,QAAA;AAAA;AAGF,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,KAChB;AAAA,IACA;AAAC,GACH;AAEA,EAAM,MAAA,QAAA,GAAW,CAAC,IAAiB,KAAA;AACjC,IAAA,IAAI,CAAC,uBAAyB,EAAA;AAC5B,MAAA;AAAA;AAGF,IAAM,MAAA,YAAA,GAAe,uBAAwB,CAAA,OAAA,CAAQ,IAAI,CAAA;AAEzD,IAAA,IAAI,CAAC,YAAc,EAAA;AACjB,MAAO,OAAA,IAAA;AAAA;AAGT,IAAA,OAAO,aAAa,eAAgB,EAAA;AAAA,GACtC;AAMA,EAAM,MAAA,IAAA,GAAO,CAAC,IAAkB,KAAA;AAC9B,IAAA,IAAI,CAAC,uBAAyB,EAAA;AAC5B,MAAA;AAAA;AAGF,IAAA,IAAI,IAAM,EAAA;AACR,MAAO,OAAA,uBAAA,CAAwB,QAAQ,IAAI,CAAA;AAAA,KACtC,MAAA;AAEL,MAAA,MAAM,SAAY,GAAA,MAAA,CAAO,IAAK,CAAA,uBAAA,CAAwB,OAAO,CAAA;AAE7D,MAAA,KAAA,MAAW,YAAY,SAAW,EAAA;AAChC,QAAM,MAAA,YAAA,GAAe,uBAAwB,CAAA,OAAA,CAAQ,QAAQ,CAAA;AAE7D,QAAI,IAAA,YAAA,IAAgB,YAAa,CAAA,MAAA,EAAU,EAAA;AACzC,UAAO,OAAA,YAAA;AAAA;AACT;AACF;AACF,GACF;AAEA,EAAM,MAAA,MAAA,GAAS,CAAC,IAAkB,KAAA;AAChC,IAAM,MAAA,YAAA,GAAe,KAAK,IAAI,CAAA;AAE9B,IAAA,OAAO,CAAC,CAAC,YAAA;AAAA,GACX;AAEA,EAAM,MAAA,KAAA,GAAQ,CAAC,IAAkB,KAAA;AAC/B,IAAM,MAAA,YAAA,GAAe,KAAK,IAAI,CAAA;AAC9B,IAAA,IAAI,YAAc,EAAA;AAChB,MAAA,YAAA,CAAa,KAAM,EAAA;AACnB,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA;AACjB,GACF;AAEA,EAAM,MAAA,KAAA,GAAQ,CAAC,IAAkB,KAAA;AAC/B,IAAM,MAAA,SAAA,GAAY,KAAK,IAAI,CAAA;AAC3B,IAAA,IAAI,SAAW,EAAA;AACb,MAAA,SAAA,CAAU,KAAM,EAAA;AAChB,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA;AACjB,GACF;AAEA,EAAM,MAAA,OAAA,GAAU,CAAC,IAAkB,KAAA;AACjC,IAAM,MAAA,YAAA,GAAe,KAAK,IAAI,CAAA;AAC9B,IAAA,IAAI,YAAc,EAAA;AAChB,MAAA,YAAA,CAAa,OAAQ,EAAA;AAAA;AACvB,GACF;AAEA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAM,MAAA,eAAA,GAAkB,CAAC,KAAsB,KAAA;AAC7C,MAAA,IAAI,CAAC,uBAAyB,EAAA;AAC5B,QAAA;AAAA;AAGF,MAAM,MAAA,iBAAA,GAAoB,QAAS,CAAA,aAAA,CAAc,UAAU,CAAA;AAE3D,MAAA,MAAM,eAAe,iBAAmB,EAAA,aAAA;AACxC,MAAA,IAAI,gBAAgB,CAAC,YAAA,CAAa,QAAS,CAAA,KAAA,CAAM,MAAc,CAAG,EAAA;AAChE,QAAA,uBAAA,CAAwB,QAAS,EAAA;AACjC,QAAA,SAAA,CAAU,KAAK,CAAA;AAAA;AACjB,KACF;AACA,IAAS,QAAA,CAAA,gBAAA,CAAiB,aAAa,eAAe,CAAA;AAEtD,IAAA,OAAO,MAAM;AACX,MAAS,QAAA,CAAA,mBAAA,CAAoB,aAAa,eAAe,CAAA;AAAA,KAC3D;AAAA,GACF,EAAG,EAAE,CAAA;AAEL,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF;AACF;AC1Ne,SAAR,OAAwB,EAAE,KAAA,EAAO,UAAU,IAAM,EAAA,SAAA,EAAW,cAAuB,EAAA;AACxF,EAAA,MAAM,EAAE,IAAa,CAAA,GAAI,SAAW,EAAA;AAEpC,EAAM,MAAA,QAAA,GAAWC,aAAyB,IAAI,CAAA;AAE9C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIH,eAAiB,EAAE,CAAA;AAEzD,EAAA,MAAM,WAAcC,GAAAA,iBAAAA;AAAA,IAClB,CAAC,GAA4B,KAAA;AAC3B,MAAA,QAAA,CAAS,IAAI,WAAW,CAAA;AAAA,KAC1B;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,MAAM,YAAeA,GAAAA,iBAAAA;AAAA,IACnB,CAAC,MAAmB,KAAA;AAClB,MAAA,IAAI,WAAW,CAAG,EAAA;AAChB,QAAA,QAAA,CAAS,IAAI,CAAA;AAAA;AAEf,MAAA,cAAA,CAAe,EAAG,CAAA,QAAA,CAAS,MAAQ,EAAA,GAAG,CAAC,CAAA;AAAA,KACzC;AAAA,IACA,CAAC,UAAU,cAAc;AAAA,GAC3B;AAEA,EAAM,MAAA,YAAA,GAAeA,kBAAY,MAAM;AACrC,IAAA,IAAA,CAAK,SAAS,OAA6B,EAAA,YAAA,EAAc,WAAa,EAAA,IAAA,EAAM,WAAW,CAAC,CAAA;AAAA,GAC1F,EAAG,CAAC,IAAM,EAAA,QAAA,EAAU,cAAc,WAAa,EAAA,IAAA,EAAM,SAAS,CAAC,CAAA;AAE/D,EAAM,MAAA,eAAA,GAAkB,CAAC,oBAAA,EAAkC,eAAgC,KAAA;AACzF,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,oBAAsB,EAAA;AACxB,QAAqB,oBAAA,EAAA;AAAA;AAEvB,MAAgB,eAAA,EAAA;AAAA,KAClB;AAAA,GACF;AAEA,EAAM,MAAA,YAAA,GAAeG,sBAAM,CAAA,YAAA,CAAa,YAAc,EAAA;AAAA,IACpD,GAAK,EAAA,QAAA;AAAA,IACL,KAAO,EAAA,WAAA;AAAA,IACP,OAAS,EAAA,eAAA,CAAgB,YAAa,CAAA,KAAA,CAAM,SAAS,YAAY;AAAA;AAAA,GAElE,CAAA;AAED,EAAAF,gBAAU,MAAM;AACd,IAAA,MAAM,MAAS,GAAA,KAAA,EAAO,KAAS,IAAA,KAAA,CAAM,KAAM,CAAA,MAAA,GAAS,CAAI,GAAA,KAAA,CAAM,KAAM,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,MAAS,GAAA,CAAA;AACxF,IAAA,cAAA,CAAe,EAAG,CAAA,QAAA,CAAS,MAAQ,EAAA,GAAG,CAAC,CAAA;AAAA,GACzC,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAAA,gBAAU,MAAM;AACd,IAAA,IAAI,QAAS,CAAA,OAAA,IAAW,EAAE,QAAA,CAAS,mBAAmB,gBAAmB,CAAA,EAAA;AACvE,MAAM,MAAA,IAAI,MAAM,mFAAuB,CAAA;AAAA;AACzC,GACF,EAAG,EAAE,CAAA;AAEL,EAAA,6DAAU,QAAa,EAAA,YAAA,EAAA,CAAA;AACzB;ACvDA,IAAM,OAAO,MAAM;AACjB,EAAA,MAAMN,OAAM,OAAO,MAAA,KAAW,WAAc,GAAA,MAAA,CAAO,SAAS,IAAO,GAAA,EAAA;AAEnE,EAAA,IAAIA,KAAI,QAAS,CAAA,WAAW,KAAKA,IAAI,CAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AACpD,IAAO,OAAA,oCAAA;AAAA,GACEA,MAAAA,IAAAA,IAAAA,CAAI,QAAS,CAAA,KAAK,CAAG,EAAA;AAC9B,IAAO,OAAA,oCAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,gCAAA;AAAA;AAEX,CAAG,GAAA;AAUY,SAAR,SAAA,CAA2B,EAAE,OAAS,EAAA,QAAA,EAAU,cAAc,SAAW,EAAA,CAAA,EAAG,KAAoB,EAAA;AACrG,EAAM,MAAA,OAAA,GACJ,QAAQ,MACJ,GAAA,gCAAA,GACA,QAAQ,KACN,GAAA,oCAAA,GACA,GAAQ,KAAA,KAAA,GACN,oCACA,GAAA,MAAA;AAEV,EAAM,MAAA,QAAA,GAAWK,kBAAY,MAAM;AACjC,IAAA,MAAM,SAAY,GAAA,IAAI,GAAI,CAAA,UAAA,EAAY,WAAW,GAAG,CAAA;AACpD,IAAU,SAAA,CAAA,YAAA,CAAa,GAAI,CAAA,SAAA,EAAW,OAAO,CAAA;AAC7C,IAAU,SAAA,CAAA,YAAA,CAAa,GAAI,CAAA,UAAA,EAAY,QAAQ,CAAA;AAE/C,IAAA,IAAI,SAAW,EAAA;AACb,MAAU,SAAA,CAAA,YAAA,CAAa,GAAI,CAAA,WAAA,EAAa,SAAS,CAAA;AAAA;AAGnD,IAAA,IAAI,CAAG,EAAA;AACL,MAAU,SAAA,CAAA,YAAA,CAAa,GAAI,CAAA,GAAA,EAAK,CAAC,CAAA;AAAA;AAGnC,IAAA,IAAI,YAAc,EAAA;AAChB,MAAU,SAAA,CAAA,YAAA,CAAa,GAAI,CAAA,cAAA,EAAgB,YAAY,CAAA;AAAA;AAGzD,IAAA,OAAO,UAAU,QAAS,EAAA;AAAA,GAC5B,EAAG,CAAC,OAAS,EAAA,QAAA,EAAU,GAAG,YAAc,EAAA,SAAA,EAAW,OAAO,CAAC,CAAA;AAM3D,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,MAAM,YAAY,QAAS,EAAA;AAE3B,IAAA,QAAA,CAAS,IAAO,GAAA,SAAA;AAAA,GAClB;AAqBA,EAAM,MAAA,IAAA,GAAO,OAAO,OAA6B,KAAA;AAC/C,IAAA,OAAO,IAAI,OAAA,CAAwB,CAAC,OAAA,EAAS,MAAW,KAAA;AACtD,MAAA,MAAM,YAAY,QAAS,EAAA;AAE3B,MAAM,MAAA,KAAA,GAAS,OAAW,IAAA,OAAA,CAAQ,UAAe,IAAA,GAAA;AACjD,MAAM,MAAA,MAAA,GAAU,OAAW,IAAA,OAAA,CAAQ,WAAgB,IAAA,GAAA;AAEnD,MAAM,MAAA,IAAA,GAAQ,WAAW,OAAQ,CAAA,SAAA,IAAc,OAAO,OAAW,GAAA,CAAA,MAAA,CAAO,aAAa,KAAS,IAAA,CAAA;AAC9F,MAAM,MAAA,GAAA,GAAO,WAAW,OAAQ,CAAA,QAAA,IAAa,OAAO,OAAW,GAAA,CAAA,MAAA,CAAO,aAAa,KAAS,IAAA,CAAA;AAE5F,MAAM,MAAA,aAAA,GAAgB,SAAS,KAAK,CAAA,QAAA,EAAW,MAAM,CAAS,MAAA,EAAA,IAAI,QAAQ,GAAG,CAAA,CAAA;AAC7E,MAAM,MAAA,KAAA,GAAQ,OAAO,IAAK,CAAA,SAAA,EAAY,WAAW,OAAQ,CAAA,UAAA,IAAe,aAAa,aAAa,CAAA;AAElG,MAAA,IAAI,CAAC,KAAO,EAAA;AACV,QAAO,MAAA,CAAA,IAAI,KAAM,CAAA,mFAAkB,CAAC,CAAA;AAEpC,QAAA;AAAA;AAGF,MAAA,IAAI,SAAY,GAAA,KAAA;AAEhB,MAAM,MAAA,aAAA,GAAgB,CAAC,KAAwB,KAAA;AAC7C,QAAA,IAAI,MAAM,MAAW,KAAA,IAAI,GAAI,CAAA,SAAS,EAAE,MAAQ,EAAA;AAC9C,UAAA;AAAA;AAGF,QAAA,IAAI,CAAC,SAAW,EAAA;AACd,UAAY,SAAA,GAAA,IAAA;AAEZ,UAAA,IAAI,MAAM,IAAM,EAAA;AACd,YAAA,OAAA,CAAQ,MAAM,IAAI,CAAA;AAAA,WACb,MAAA;AACL,YAAA,MAAA,CAAO,yFAAmB,CAAA;AAAA;AAG5B,UAAA,KAAA,EAAO,KAAM,EAAA;AACb,UAAO,MAAA,CAAA,mBAAA,CAAoB,WAAW,aAAa,CAAA;AAAA;AACrD,OACF;AAEA,MAAO,MAAA,CAAA,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAAA,KACjD,CAAA;AAAA,GACH;AAEA,EAAA,MAAM,SAAS,SAAU;AAAA,IACvB,MAAS,GAAA,GAAA;AAAA,IACT,SAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAU,GAAA,6CAAA;AAAA,IACV,SAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAe,GAAA;AAAA,GAWd,EAAA;AACD,IAAA,MAAM,YAAY,QAAS,EAAA;AAE3B,IAAAC,gBAAU,MAAM;AACd,MAAI,IAAA,CAAC,SAAa,IAAA,CAAC,OAAS,EAAA;AAC1B,QAAA;AAAA;AAGF,MAAM,MAAA,OAAA,GAAU,CAAC,CAAoB,KAAA;AACnC,QAAI,IAAA,YAAA,IAAgB,CAAE,CAAA,MAAA,KAAW,GAAK,EAAA;AACpC,UAAA;AAAA;AAGF,QAAA,MAAM,IAAI,CAAE,CAAA,IAAA;AACZ,QAAA,IAAI,CAAG,EAAA;AACL,UAAI,IAAA,CAAA,CAAE,WAAW,OAAS,EAAA;AACxB,YAAA,OAAA,CAAQ,CAAC,CAAA;AAET,YAAA;AAAA,WACS,MAAA,IAAA,OAAA,IAAW,CAAE,CAAA,MAAA,KAAW,OAAS,EAAA;AAC1C,YAAA,OAAA,CAAQ,CAAC,CAAA;AAET,YAAA;AAAA,WACS,MAAA,IAAA,SAAA,IAAa,CAAE,CAAA,MAAA,KAAW,UAAY,EAAA;AAC/C,YAAA,SAAA,CAAU,CAAC,CAAA;AAEX,YAAA;AAAA;AACF,mBACS,OAAS,EAAA;AAClB,UAAQ,OAAA,CAAA;AAAA,YACN,MAAQ,EAAA,OAAA;AAAA,YACR,SAAW,EAAA,EAAA;AAAA,YACX,WAAa,EAAA;AAAA,WACd,CAAA;AAAA;AACH,OACF;AAEA,MAAO,MAAA,CAAA,gBAAA,CAAiB,WAAW,OAAwB,CAAA;AAE3D,MAAA,OAAO,MAAM,MAAA,CAAO,mBAAoB,CAAA,SAAA,EAAW,OAAwB,CAAA;AAAA,OAC1E,CAAC,OAAA,EAAS,OAAS,EAAA,SAAA,EAAW,YAAY,CAAC,CAAA;AAE9C,IAAA,uBACEG,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAK,EAAA,SAAA;AAAA,QACL,KAAM,EAAA,MAAA;AAAA,QACN,QAAQ,OAAO,MAAA,KAAW,QAAW,GAAA,CAAA,EAAG,MAAM,CAAO,EAAA,CAAA,GAAA,MAAA;AAAA,QACrD,KAAO,EAAA,EAAE,MAAQ,EAAA,CAAA,EAAG,GAAG,KAAM,EAAA;AAAA,QAC7B,SAAA;AAAA,QACA,OAAA;AAAA,QACC,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU;AAAC;AAAA,KAC5B;AAAA,GAEJ;AAEA,EAAO,OAAA,EAAE,QAAU,EAAA,IAAA,EAAM,MAAO,EAAA;AAClC","file":"index.cjs","sourcesContent":["export async function loadScript(url: string) {\r\n await new Promise((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.async = true;\r\n script.addEventListener('load', () => {\r\n resolve({ loaded: true, error: false });\r\n });\r\n\r\n script.addEventListener('error', () => {\r\n reject({\r\n loaded: false,\r\n error: true,\r\n message: '파일 로드에 실패하였습니다.'\r\n });\r\n });\r\n\r\n document.body.appendChild(script);\r\n });\r\n}\r\n","import { isClient } from 'sales-frontend-utils';\r\n\r\nimport { KeypadActionType } from '../types/keypad-action.type';\r\nimport { loadScript } from '../utils/load-script';\r\n\r\ntype ENV = 'dev' | 'stg' | 'prod';\r\n\r\nconst getPath = (service: string, env: ENV) =>\r\n `https://nxl-${env !== 'prod' ? `${service}-${env}` : service}.hanwhalife.com`;\r\n\r\nconst getEnv: () => ENV = () => {\r\n const host = window.location.hostname;\r\n\r\n // if (host.includes('-dev.') || host.includes('localhost')) {\r\n // return 'dev';\r\n // } else if (host.includes('-stg.')) {\r\n // return 'stg';\r\n // } else {\r\n // return 'prod';\r\n // }\r\n\r\n return 'stg';\r\n};\r\n\r\ninterface KeypadConfig {\r\n version: string;\r\n server: string;\r\n contextRoot: string;\r\n cssPath: string;\r\n logoImgPath: string;\r\n inputObjectBackgroundColor: string;\r\n inputObjectBorderStyle: string;\r\n invalidSessionErrorMessage: string;\r\n invalidSessionAutoRefresh: boolean;\r\n enableAccessibility: boolean;\r\n useCustomAlert: boolean;\r\n functionKeyButtonStyle: string;\r\n maxInputSize: number;\r\n textInputView: number;\r\n touchOption: number;\r\n}\r\n\r\nexport const XKeyboardMobileInstance = (() => {\r\n if (!isClient()) {\r\n return null;\r\n }\r\n\r\n const env = getEnv();\r\n\r\n const keypadServicePath = `${getPath('xkp', env)}/xkp/xkscriptservice`;\r\n const keypadContentsPath = `${getPath('nlc', env)}/cnts-files/xkeyboard`;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (window as any).XKConfigMobile = {\r\n version: '1.0.5.1',\r\n server: keypadServicePath,\r\n contextRoot: `${keypadContentsPath}/js`,\r\n cssPath: `${keypadContentsPath}/css/xkp_mobile.css`,\r\n logoImgPath: `${keypadContentsPath}/img/logo.png`,\r\n inputObjectBackgroundColor: '#E4E4E4',\r\n inputObjectBorderStyle: '1px solid #9E9E9E',\r\n invalidSessionErrorMessage: \"보안세션이 만료되었습니다.\\n'확인'을 누르면 키패드가 갱신 됩니다.\",\r\n invalidSessionAutoRefresh: true,\r\n enableAccessibility: true,\r\n useCustomAlert: false,\r\n functionKeyButtonStyle: 'text',\r\n maxInputSize: 56,\r\n textInputView: 0,\r\n touchOption: 0\r\n } as KeypadConfig;\r\n\r\n document.oncontextmenu = () => false;\r\n document.ondragstart = () => false;\r\n document.onselectstart = () => false;\r\n\r\n const headTag = document.head;\r\n const scriptsToLoad = ['xkeypad_mobile.js'];\r\n\r\n const urls = scriptsToLoad.map(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (x) => `${(window as any).XKConfigMobile.contextRoot}/${x}`\r\n );\r\n\r\n Promise.all(urls.map((x) => loadScript(x))).then(() => {\r\n const existingLink = document.getElementById('xkStyle');\r\n\r\n if (existingLink?.parentNode) {\r\n existingLink.parentNode.removeChild(existingLink);\r\n }\r\n\r\n const linkElement = document.createElement('link');\r\n linkElement.id = 'xkStyle';\r\n linkElement.rel = 'stylesheet';\r\n linkElement.type = 'text/css';\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n linkElement.href = (window as any).XKConfigMobile.cssPath;\r\n\r\n headTag.appendChild(linkElement);\r\n });\r\n\r\n const keypads: { [key: string]: KeypadActionType | undefined } = {};\r\n\r\n const getKeypad = (name: string) => keypads[name];\r\n\r\n const setKeypad = (name: string, keypad: KeypadActionType) => {\r\n keypads[name] = keypad;\r\n\r\n return keypad;\r\n };\r\n\r\n const removeKeypad = (name: string) => {\r\n delete keypads[name];\r\n };\r\n\r\n const closeAll = () => {\r\n Object.keys(keypads).forEach((id) => {\r\n const keypad = keypads[id];\r\n if (keypad && keypad.isOpen()) {\r\n keypad.close();\r\n }\r\n });\r\n };\r\n\r\n const newKeypad = (name: string) => {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return setKeypad(name, new (window as any).XKModule());\r\n };\r\n\r\n return {\r\n keypads,\r\n getKeypad,\r\n setKeypad,\r\n newKeypad,\r\n removeKeypad,\r\n closeAll\r\n };\r\n})();\r\n","enum KeypadMessageTypeEnum {\r\n NotSupportDevice = -1,\r\n Already = -2\r\n}\r\n\r\nexport default KeypadMessageTypeEnum;\r\n","enum KeypadModeEnum {\r\n QWERTY_SMART = 'qwertysmart',\r\n NUMBER = 'number'\r\n}\r\n\r\nexport default KeypadModeEnum;","export const uuidv4 = (): string => {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = Math.random() * 16 || 0,\r\n v = c === 'x' ? r : (r && 0x3) || 0x8;\r\n\r\n return v.toString(16);\r\n });\r\n};\r\n","import { useCallback, useEffect, useState } from 'react';\r\n\r\nimport { XKeyboardMobileInstance } from '../libs/xkeyboard';\r\nimport KeypadMessageTypeEnum from '../types/keypad-message.enum';\r\nimport KeypadModeEnum from '../types/keypad-mode.enum';\r\nimport KeypadResponseType from '../types/keypad-response.type';\r\nimport { uuidv4 } from '../utils/uuid';\r\n\r\nexport default function useKeypad() {\r\n const [isShow, setIsShow] = useState<boolean>(false);\r\n\r\n const show = useCallback(\r\n (\r\n inputRef: HTMLInputElement,\r\n onInputChange: (length: number) => void,\r\n onKeypadClose: (res: KeypadResponseType) => void,\r\n keyType: KeypadModeEnum = KeypadModeEnum.QWERTY_SMART,\r\n maxLength: number,\r\n numberKeyRowCount: number\r\n ) => {\r\n const name = uuidv4();\r\n\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n let keypad = XKeyboardMobileInstance.getKeypad(name);\r\n if (!keypad) {\r\n keypad = XKeyboardMobileInstance.newKeypad(name);\r\n } else {\r\n keypad.refresh();\r\n }\r\n\r\n if (onInputChange && typeof onInputChange === 'function') {\r\n onInputChange(0);\r\n }\r\n\r\n const keyPadParam = {\r\n name: `xk-pad-${name}`,\r\n editBox: inputRef,\r\n keyType,\r\n width: 100,\r\n position: { top: 10, left: null },\r\n viewType: 'half',\r\n closeDelay: 0,\r\n autoKeyResize: true,\r\n isE2E: true,\r\n onlyMobile: false,\r\n hasPressEffect: true,\r\n maxLength,\r\n numberKeyRowCount,\r\n onInputChange: (newLength: number) => {\r\n if (onInputChange && typeof onInputChange === 'function') {\r\n onInputChange(newLength);\r\n }\r\n\r\n // 키패드가 존재하지 않을 경우, 종료\r\n if (!keypad) {\r\n return;\r\n }\r\n\r\n //키패드 입력 길이가 최대 입력 길이가 됐을 때 키패드 닫기\r\n if (\r\n keyPadParam.maxLength &&\r\n keyPadParam.maxLength > 0 &&\r\n newLength >= keyPadParam.maxLength &&\r\n keypad.isOpend()\r\n ) {\r\n keypad.close();\r\n setIsShow(false);\r\n\r\n return;\r\n }\r\n },\r\n onKeypadClose: () => {\r\n if (!keypad) {\r\n return;\r\n }\r\n\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n if (onKeypadClose && typeof onKeypadClose === 'function') {\r\n const sessionInfo = keypad.get_sessionInfo();\r\n let length = 0;\r\n if (sessionInfo.input && sessionInfo.input.indexOf(',') >= 0) {\r\n length = sessionInfo.input.split(',').length;\r\n }\r\n\r\n const res = {\r\n length,\r\n element: inputRef,\r\n sessionInfo: {\r\n input: sessionInfo.input,\r\n sessionId: sessionInfo.sessionId,\r\n secToken: sessionInfo.secToken\r\n },\r\n keyType,\r\n name\r\n };\r\n\r\n setIsShow(false);\r\n onKeypadClose(res);\r\n }\r\n\r\n XKeyboardMobileInstance.removeKeypad(name);\r\n\r\n if (!onKeypadClose) {\r\n throw new Error('not found onKeypadClose');\r\n }\r\n\r\n if (typeof onKeypadClose !== 'function') {\r\n throw new Error('not found onKeypadClose');\r\n }\r\n }\r\n };\r\n\r\n const aRet = keypad.initialize(keyPadParam);\r\n\r\n if (aRet === KeypadMessageTypeEnum.NotSupportDevice) {\r\n // 안내 메세지 세팅\r\n alert('지원하지 않는 기기 입니다.');\r\n\r\n return;\r\n } else if (aRet === KeypadMessageTypeEnum.Already) {\r\n // alert('이미 키패드가 실행 중입니다.');\r\n return;\r\n }\r\n\r\n setIsShow(true);\r\n },\r\n []\r\n );\r\n\r\n const getValue = (name: string) => {\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n const targetKeypad = XKeyboardMobileInstance.keypads[name];\r\n\r\n if (!targetKeypad) {\r\n return null;\r\n }\r\n\r\n return targetKeypad.get_sessionInfo();\r\n };\r\n\r\n /**\r\n * 활성화 되어있는 키패드 찾는다\r\n * @returns\r\n */\r\n const find = (name?: string) => {\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n if (name) {\r\n return XKeyboardMobileInstance.keypads[name];\r\n } else {\r\n // 키패드가 출력되어있으면, 확인하여 키패드를 닫는다.\r\n const keypadIds = Object.keys(XKeyboardMobileInstance.keypads);\r\n\r\n for (const keypadId of keypadIds) {\r\n const targetKeypad = XKeyboardMobileInstance.keypads[keypadId];\r\n\r\n if (targetKeypad && targetKeypad.isOpen()) {\r\n return targetKeypad;\r\n }\r\n }\r\n }\r\n };\r\n\r\n const isOpen = (name?: string) => {\r\n const targetKeypad = find(name);\r\n\r\n return !!targetKeypad;\r\n };\r\n\r\n const close = (name?: string) => {\r\n const targetKeypad = find(name);\r\n if (targetKeypad) {\r\n targetKeypad.close();\r\n setIsShow(false);\r\n }\r\n };\r\n\r\n const clear = (name?: string) => {\r\n const _xkmodule = find(name);\r\n if (_xkmodule) {\r\n _xkmodule.clear();\r\n setIsShow(false);\r\n }\r\n };\r\n\r\n const refresh = (name?: string) => {\r\n const targetKeypad = find(name);\r\n if (targetKeypad) {\r\n targetKeypad.refresh();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const handleMouseDown = (event: MouseEvent) => {\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n const keypadAlertDivTag = document.querySelector('#xkalert');\r\n\r\n const keypadDivTag = keypadAlertDivTag?.parentElement;\r\n if (keypadDivTag && !keypadDivTag.contains(event.target as Node)) {\r\n XKeyboardMobileInstance.closeAll();\r\n setIsShow(false);\r\n }\r\n };\r\n document.addEventListener('mousedown', handleMouseDown);\r\n\r\n return () => {\r\n document.removeEventListener('mousedown', handleMouseDown);\r\n };\r\n }, []);\r\n\r\n return {\r\n show,\r\n close,\r\n clear,\r\n refresh,\r\n getValue,\r\n isOpen,\r\n find,\r\n isShow\r\n };\r\n}\r\n","import React, { useEffect, useRef, useState, useCallback } from 'react';\r\n\r\nimport useXKeypad from '../hooks/use-keypad';\r\nimport KeypadModeEnum from '../types/keypad-mode.enum';\r\nimport KeypadResponseType from '../types/keypad-response.type';\r\nimport KeypadSessionType from '../types/keypad-session.type';\r\nimport KeypadType from '../types/keypad.type';\r\n\r\ntype Props = {\r\n value: KeypadSessionType | null;\r\n inputElement: KeypadType;\r\n mode: KeypadModeEnum;\r\n onChange: (value: KeypadSessionType | null) => void;\r\n maxLength: number;\r\n};\r\n\r\nexport default function Keypad({ value, onChange, mode, maxLength, inputElement }: Props) {\r\n const { show, isShow } = useXKeypad();\r\n\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n const [maskedValue, setMaskedValue] = useState<string>('');\r\n\r\n const onCloseBack = useCallback(\r\n (res: KeypadResponseType) => {\r\n onChange(res.sessionInfo);\r\n },\r\n [onChange]\r\n );\r\n\r\n const onChangeBack = useCallback(\r\n (length: number) => {\r\n if (length === 0) {\r\n onChange(null);\r\n }\r\n setMaskedValue(''.padStart(length, '*'));\r\n },\r\n [onChange, setMaskedValue]\r\n );\r\n\r\n const handleKeypad = useCallback(() => {\r\n show(inputRef.current as HTMLInputElement, onChangeBack, onCloseBack, mode, maxLength, 3);\r\n }, [show, inputRef, onChangeBack, onCloseBack, mode, maxLength]);\r\n\r\n const enhancedOnClick = (existingClickHandler: () => void, newClickHandler: () => void) => {\r\n return () => {\r\n if (existingClickHandler) {\r\n existingClickHandler();\r\n }\r\n newClickHandler();\r\n };\r\n };\r\n\r\n const cloneElement = React.cloneElement(inputElement, {\r\n ref: inputRef,\r\n value: maskedValue,\r\n onClick: enhancedOnClick(inputElement.props.onClick, handleKeypad)\r\n // iskeypadactive: isShow\r\n });\r\n\r\n useEffect(() => {\r\n const length = value?.input && value.input.length > 0 ? value.input.split(',').length : 0;\r\n setMaskedValue(''.padStart(length, '*'));\r\n }, [value]);\r\n\r\n useEffect(() => {\r\n if (inputRef.current && !(inputRef.current instanceof HTMLInputElement)) {\r\n throw new Error('Input 태그가 정의되지 않았습니다.');\r\n }\r\n }, []);\r\n\r\n return <>{cloneElement}</>;\r\n}\r\n","import { useCallback, useEffect } from 'react';\r\nexport type NxlOneProps = {\r\n bizCode: string;\r\n tmplCode: string;\r\n ncsrInfoUuid?: string;\r\n nlcCtfnId?: string;\r\n // TYPE\r\n t?: string;\r\n env?: 'dev' | 'stg' | 'prod';\r\n};\r\n\r\nexport type NxlOneResponse = {\r\n action?: 'error' | 'close' | 'complete';\r\n redirectUrl?: string;\r\n nlcCtfnId?: string;\r\n};\r\n\r\nconst url = (() => {\r\n const url = typeof window !== 'undefined' ? window.location.href : '';\r\n\r\n if (url.includes('localhost') || url.includes('dev')) {\r\n return 'https://nxl-nlc-dev.hanwhalife.com';\r\n } else if (url.includes('stg')) {\r\n return 'https://nxl-nlc-stg.hanwhalife.com';\r\n } else {\r\n return 'https://nxl-nlc.hanwhalife.com';\r\n }\r\n})();\r\n\r\ntype OpenOptionType = {\r\n popupWidth?: number;\r\n popupHeight?: number;\r\n popupLeft?: number;\r\n popupTop?: number;\r\n windowName?: string;\r\n};\r\n\r\nexport default function useNxlOne({ bizCode, tmplCode, ncsrInfoUuid, nlcCtfnId, t, env }: NxlOneProps) {\r\n const baseUrl =\r\n env === 'prod'\r\n ? 'https://nxl-nlc.hanwhalife.com'\r\n : env === 'stg'\r\n ? 'https://nxl-nlc-stg.hanwhalife.com'\r\n : env === 'dev'\r\n ? 'https://nxl-nlc-dev.hanwhalife.com'\r\n : undefined;\r\n\r\n const buildUrl = useCallback(() => {\r\n const targetUrl = new URL('/auth/v1', baseUrl || url);\r\n targetUrl.searchParams.set('bizCode', bizCode);\r\n targetUrl.searchParams.set('tmplCode', tmplCode);\r\n\r\n if (nlcCtfnId) {\r\n targetUrl.searchParams.set('nlcCtfnId', nlcCtfnId);\r\n }\r\n\r\n if (t) {\r\n targetUrl.searchParams.set('t', t);\r\n }\r\n\r\n if (ncsrInfoUuid) {\r\n targetUrl.searchParams.set('ncsrInfoUuid', ncsrInfoUuid);\r\n }\r\n\r\n return targetUrl.toString();\r\n }, [bizCode, tmplCode, t, ncsrInfoUuid, nlcCtfnId, baseUrl]);\r\n\r\n /**\r\n * NEXTLAB ONE 인증 페이지로 이동합니다.\r\n * 인증이 완료 후, 관리자 페이지에서 정의한 프로세스 완료 URL로 이동합니다.\r\n */\r\n const redirect = () => {\r\n const targetUrl = buildUrl();\r\n\r\n location.href = targetUrl;\r\n };\r\n\r\n /**\r\n * NEXTLAB ONE 인증 페이지를 팝업으로 엽니다.\r\n * @param options 팝업의 크기, 위치, 창 이름을 정의합니다.\r\n * @returns 완료 URL에 인증 ID가 Query String 이 함께 정의된 형태로 반환됩니다.\r\n *\r\n * @example\r\n * const { open } = useNxlOne();\r\n *\r\n * const handleClick = async () => {\r\n * try {\r\n * const result = await open({ popupWidth: 500, popupHeight: 500 });\r\n * console.log('이동 시킬 URL : ' + result);\r\n * } catch (e) {\r\n * console.error('팝업 프로세스 실패');\r\n * }\r\n * }\r\n *\r\n * @note 팝업은 반드시 사용자 이벤트 핸들러 내에서 직접 호출해야 브라우저 차단을 피할 수 있습니다.\r\n */\r\n const open = async (options?: OpenOptionType) => {\r\n return new Promise<NxlOneResponse>((resolve, reject) => {\r\n const targetUrl = buildUrl();\r\n\r\n const width = (options && options.popupWidth) || 744;\r\n const height = (options && options.popupHeight) || 720;\r\n\r\n const left = (options && options.popupLeft) || window.screenX + (window.outerWidth - width) / 2;\r\n const top = (options && options.popupTop) || window.screenX + (window.outerWidth - width) / 2;\r\n\r\n const popupFeatures = `width=${width},height=${height},left=${left},top=${top}`;\r\n const popup = window.open(targetUrl, (options && options.windowName) || 'self_cert', popupFeatures);\r\n\r\n if (!popup) {\r\n reject(new Error('차단되거나 열리지 않았습니다.'));\r\n\r\n return;\r\n }\r\n\r\n let isSettled = false;\r\n\r\n const handleMessage = (event: MessageEvent) => {\r\n if (event.origin !== new URL(targetUrl).origin) {\r\n return;\r\n }\r\n\r\n if (!isSettled) {\r\n isSettled = true;\r\n\r\n if (event.data) {\r\n resolve(event.data);\r\n } else {\r\n reject('인증이 취소되거나 실패했습니다.');\r\n }\r\n\r\n popup?.close();\r\n window.removeEventListener('message', handleMessage);\r\n }\r\n };\r\n\r\n window.addEventListener('message', handleMessage);\r\n });\r\n };\r\n\r\n const Iframe = function ({\r\n height = 720,\r\n className,\r\n style,\r\n allow,\r\n sandbox = 'allow-scripts allow-forms allow-same-origin',\r\n onSuccess,\r\n onError,\r\n onClose,\r\n strictOrigin = true\r\n }: {\r\n height?: number | string;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n allow?: string;\r\n sandbox?: string;\r\n onSuccess?: (response: NxlOneResponse) => void;\r\n onError?: (response: NxlOneResponse) => void;\r\n onClose: (response: NxlOneResponse) => void;\r\n strictOrigin?: boolean;\r\n }) {\r\n const targetUrl = buildUrl();\r\n\r\n useEffect(() => {\r\n if (!onSuccess && !onError) {\r\n return;\r\n }\r\n\r\n const handler = (e: MessageEvent) => {\r\n if (strictOrigin && e.origin !== url) {\r\n return;\r\n }\r\n\r\n const d = e.data as NxlOneResponse;\r\n if (d) {\r\n if (d.action === 'close') {\r\n onClose(d);\r\n\r\n return;\r\n } else if (onError && d.action === 'error') {\r\n onError(d);\r\n\r\n return;\r\n } else if (onSuccess && d.action === 'complete') {\r\n onSuccess(d);\r\n\r\n return;\r\n }\r\n } else if (onError) {\r\n onError({\r\n action: 'error',\r\n nlcCtfnId: '',\r\n redirectUrl: ''\r\n });\r\n }\r\n };\r\n\r\n window.addEventListener('message', handler as EventListener);\r\n\r\n return () => window.removeEventListener('message', handler as EventListener);\r\n }, [onClose, onError, onSuccess, strictOrigin]);\r\n\r\n return (\r\n <iframe\r\n src={targetUrl}\r\n width=\"100%\"\r\n height={typeof height === 'number' ? `${height}px` : height}\r\n style={{ border: 0, ...style }}\r\n className={className}\r\n sandbox={sandbox}\r\n {...(allow ? { allow } : {})}\r\n />\r\n );\r\n };\r\n\r\n return { redirect, open, Iframe };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/load-script.ts","../src/api/endpoint.ts","../src/v3.ts","../src/v3-provider.tsx","../src/libs/xkeyboard.ts","../src/types/keypad-message.enum.ts","../src/types/keypad-mode.enum.ts","../src/utils/uuid.ts","../src/hooks/use-keypad.ts","../src/components/Keypad.tsx","../src/hooks/use-nxl-one.tsx"],"names":["url","isClient","getEnvironmentFromHostname","getServiceCode","createContext","useState","useEffect","jsx","useContext","KeypadMessageTypeEnum","KeypadModeEnum","useCallback","useRef","React","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["export async function loadScript(url: string) {\r\n await new Promise((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.async = true;\r\n script.addEventListener('load', () => {\r\n resolve({ loaded: true, error: false });\r\n });\r\n\r\n script.addEventListener('error', () => {\r\n reject({\r\n loaded: false,\r\n error: true,\r\n message: '파일 로드에 실패하였습니다.'\r\n });\r\n });\r\n\r\n document.body.appendChild(script);\r\n });\r\n}\r\n","import { getEnvironmentFromHostname, getServiceCode, isClient } from 'sales-frontend-utils';\n\nexport const getServiceUrl = (serviceName: string) => {\n if (!isClient()) {\n return '';\n }\n\n const env = getEnvironmentFromHostname(location.hostname);\n\n switch (env) {\n case 'local':\n return `${getServiceCode()}/api/${serviceName}`;\n case 'dev':\n return `https://nxl-${serviceName}-dev.hanwhalife.com/api`;\n case 'stg':\n return `https://nxl-${serviceName}-stg.hanwhalife.com/api`;\n case 'prd':\n return `https://nxl-${serviceName}.hanwhalife.com/api`;\n default:\n return ``;\n }\n\n // return `https://nxl-${env !== 'prd' ? `${serviceName}-${env}` : serviceName}.hanwhalife.com`;\n};\n\nexport const API_ENDPOINTS = {\n GET_NXL_CODES: (codeId: string) => `${getServiceUrl('nlc')}/code/code-list/get?codeId=${codeId}&intgYn=N`,\n GET_NOTICE_SYSTEM: (code: string) => `${getServiceUrl('nlc')}/notice/system/${code}/get`,\n GET_NOTICE_INTEGRATED: (code: string) => `${getServiceUrl('nlc')}/notice/integrated/${code}/get`,\n GET_V3_LICENSE: (date: Date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const dateStr = `${year}-${month}-${day} ${hours}:${minutes}`;\n\n return `${getServiceUrl('nlm')}/v3/init?time=${dateStr}`;\n },\n INPUT_PREFILL_USER: `${getServiceUrl('nlc')}/user-ctfn/ncsr-info-inpt/post`\n} as const;\n","// import { getV3License } from '@nxl-kit/api';\r\nimport { getV3License } from './api/get-v3-license';\r\n\r\ndeclare global {\r\n interface Window {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n mpl_start?: (license?: any, time?: any, cryptoKeyVersion?: any, RootCheckTimeOut?: any) => void;\r\n\r\n /**\r\n * MPL의 상태를 반환하는 API\r\n * @returns\r\n * INITIAL - 동작중이지 않음\r\n * ALIVE - 동작중임\r\n * Undefined 네트워크 연결 문제\r\n */\r\n mpl_status?: () => 'INITAL' | 'ALIVE' | 'Undefined';\r\n\r\n mpl_load?: (tk?: string, cd?: string) => void;\r\n mpl_token?: () => string;\r\n mpl_enc_param?: () => string;\r\n mpl_stop?: () => void;\r\n }\r\n}\r\n\r\nconst isAndroid = (): boolean => {\r\n return /android/i.test(navigator.userAgent) && !/edge/i.test(navigator.userAgent);\r\n};\r\n\r\nconst startV3 = async () => {\r\n console.log('start v3');\r\n if (!isAndroid() || !window.mpl_start) {\r\n return;\r\n }\r\n\r\n window.mpl_stop?.();\r\n sessionStorage.removeItem('mtk');\r\n sessionStorage.removeItem('mcd');\r\n\r\n const v3Response = await getV3License({\r\n date: new Date()\r\n });\r\n\r\n console.log('getV3 License', v3Response);\r\n if (!v3Response) {\r\n return;\r\n }\r\n\r\n window.mpl_start(v3Response.data?.encLicense, v3Response.data?.time);\r\n\r\n setTimeout(() => {\r\n const mtk = window.mpl_token?.();\r\n const mcd = window.mpl_enc_param?.();\r\n\r\n if (mtk) {\r\n sessionStorage.setItem('mtk', mtk);\r\n }\r\n if (mcd) {\r\n sessionStorage.setItem('mcd', mcd);\r\n }\r\n }, 500);\r\n};\r\n\r\nconst loadV3 = () => {\r\n console.log('load v3');\r\n const mtk = sessionStorage.getItem('mtk') || window.mpl_token?.();\r\n const mcd = sessionStorage.getItem('mcd') || window.mpl_enc_param?.();\r\n\r\n if (mtk && mcd && window.mpl_load && mtk !== 'undefined' && mcd !== 'undefined') {\r\n window.mpl_load(mtk, mcd);\r\n }\r\n};\r\n\r\nconst checkV3Status = async (type: string) => {\r\n console.log('check v3 status');\r\n await new Promise((resolve) => setTimeout(resolve, 500));\r\n\r\n if (!isAndroid() || !window.mpl_status) {\r\n console.log('not android or no mpl_status');\r\n\r\n return true;\r\n }\r\n\r\n if (window.mpl_status() === 'ALIVE') {\r\n console.log('mpl status is alive');\r\n loadV3();\r\n\r\n return true;\r\n }\r\n\r\n console.log('v3 not alive');\r\n\r\n if (type === 'modal') {\r\n console.log('modal start v3');\r\n await startV3();\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const launchV3 = async () => {\r\n loadV3();\r\n\r\n return await checkV3Status('loader');\r\n};\r\n","import React, { createContext, useContext, useEffect, useState } from 'react';\r\n\r\nimport { loadScript } from './utils/load-script';\r\nimport { launchV3 } from './v3';\r\n\r\ninterface V3ContextType {\r\n isLoaded: boolean;\r\n launch: () => void;\r\n}\r\n\r\nconst V3Context = createContext<V3ContextType | undefined>(undefined);\r\n\r\nconst AhnlabV3JsUrl = 'https://mpl.ahnlab.com/js/mpl_webview_cm.js';\r\n\r\nexport const V3Provider = ({ children }: { children: React.ReactNode }) => {\r\n const [isLoaded, setIsLoaded] = useState<boolean>(false);\r\n\r\n useEffect(() => {\r\n const initialize = async () => {\r\n await loadScript(AhnlabV3JsUrl);\r\n setIsLoaded(true);\r\n };\r\n\r\n initialize();\r\n }, []);\r\n\r\n return <V3Context.Provider value={{ isLoaded, launch: launchV3 }}>{children}</V3Context.Provider>;\r\n};\r\n\r\nexport const useV3 = () => {\r\n const context = useContext(V3Context);\r\n\r\n if (!context) {\r\n throw new Error('V3Provider를 정의해주세요.');\r\n }\r\n\r\n return context;\r\n};\r\n","import { isClient } from 'sales-frontend-utils';\r\n\r\nimport { KeypadActionType } from '../types/keypad-action.type';\r\nimport { loadScript } from '../utils/load-script';\r\n\r\ntype ENV = 'dev' | 'stg' | 'prod';\r\n\r\nconst getPath = (service: string, env: ENV) =>\r\n `https://nxl-${env !== 'prod' ? `${service}-${env}` : service}.hanwhalife.com`;\r\n\r\nconst getEnv: () => ENV = () => {\r\n const host = window.location.hostname;\r\n\r\n // if (host.includes('-dev.') || host.includes('localhost')) {\r\n // return 'dev';\r\n // } else if (host.includes('-stg.')) {\r\n // return 'stg';\r\n // } else {\r\n // return 'prod';\r\n // }\r\n\r\n return 'stg';\r\n};\r\n\r\ninterface KeypadConfig {\r\n version: string;\r\n server: string;\r\n contextRoot: string;\r\n cssPath: string;\r\n logoImgPath: string;\r\n inputObjectBackgroundColor: string;\r\n inputObjectBorderStyle: string;\r\n invalidSessionErrorMessage: string;\r\n invalidSessionAutoRefresh: boolean;\r\n enableAccessibility: boolean;\r\n useCustomAlert: boolean;\r\n functionKeyButtonStyle: string;\r\n maxInputSize: number;\r\n textInputView: number;\r\n touchOption: number;\r\n}\r\n\r\nexport const XKeyboardMobileInstance = (() => {\r\n if (!isClient()) {\r\n return null;\r\n }\r\n\r\n const env = getEnv();\r\n\r\n const keypadServicePath = `${getPath('xkp', env)}/xkp/xkscriptservice`;\r\n const keypadContentsPath = `${getPath('nlc', env)}/cnts-files/xkeyboard`;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (window as any).XKConfigMobile = {\r\n version: '1.0.5.1',\r\n server: keypadServicePath,\r\n contextRoot: `${keypadContentsPath}/js`,\r\n cssPath: `${keypadContentsPath}/css/xkp_mobile.css`,\r\n logoImgPath: `${keypadContentsPath}/img/logo.png`,\r\n inputObjectBackgroundColor: '#E4E4E4',\r\n inputObjectBorderStyle: '1px solid #9E9E9E',\r\n invalidSessionErrorMessage: \"보안세션이 만료되었습니다.\\n'확인'을 누르면 키패드가 갱신 됩니다.\",\r\n invalidSessionAutoRefresh: true,\r\n enableAccessibility: true,\r\n useCustomAlert: false,\r\n functionKeyButtonStyle: 'text',\r\n maxInputSize: 56,\r\n textInputView: 0,\r\n touchOption: 0\r\n } as KeypadConfig;\r\n\r\n document.oncontextmenu = () => false;\r\n document.ondragstart = () => false;\r\n document.onselectstart = () => false;\r\n\r\n const headTag = document.head;\r\n const scriptsToLoad = ['xkeypad_mobile.js'];\r\n\r\n const urls = scriptsToLoad.map(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (x) => `${(window as any).XKConfigMobile.contextRoot}/${x}`\r\n );\r\n\r\n Promise.all(urls.map((x) => loadScript(x))).then(() => {\r\n const existingLink = document.getElementById('xkStyle');\r\n\r\n if (existingLink?.parentNode) {\r\n existingLink.parentNode.removeChild(existingLink);\r\n }\r\n\r\n const linkElement = document.createElement('link');\r\n linkElement.id = 'xkStyle';\r\n linkElement.rel = 'stylesheet';\r\n linkElement.type = 'text/css';\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n linkElement.href = (window as any).XKConfigMobile.cssPath;\r\n\r\n headTag.appendChild(linkElement);\r\n });\r\n\r\n const keypads: { [key: string]: KeypadActionType | undefined } = {};\r\n\r\n const getKeypad = (name: string) => keypads[name];\r\n\r\n const setKeypad = (name: string, keypad: KeypadActionType) => {\r\n keypads[name] = keypad;\r\n\r\n return keypad;\r\n };\r\n\r\n const removeKeypad = (name: string) => {\r\n delete keypads[name];\r\n };\r\n\r\n const closeAll = () => {\r\n Object.keys(keypads).forEach((id) => {\r\n const keypad = keypads[id];\r\n if (keypad && keypad.isOpen()) {\r\n keypad.close();\r\n }\r\n });\r\n };\r\n\r\n const newKeypad = (name: string) => {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return setKeypad(name, new (window as any).XKModule());\r\n };\r\n\r\n return {\r\n keypads,\r\n getKeypad,\r\n setKeypad,\r\n newKeypad,\r\n removeKeypad,\r\n closeAll\r\n };\r\n})();\r\n","enum KeypadMessageTypeEnum {\r\n NotSupportDevice = -1,\r\n Already = -2\r\n}\r\n\r\nexport default KeypadMessageTypeEnum;\r\n","enum KeypadModeEnum {\r\n QWERTY_SMART = 'qwertysmart',\r\n NUMBER = 'number'\r\n}\r\n\r\nexport default KeypadModeEnum;","export const uuidv4 = (): string => {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = Math.random() * 16 || 0,\r\n v = c === 'x' ? r : (r && 0x3) || 0x8;\r\n\r\n return v.toString(16);\r\n });\r\n};\r\n","import { useCallback, useEffect, useState } from 'react';\r\n\r\nimport { XKeyboardMobileInstance } from '../libs/xkeyboard';\r\nimport KeypadMessageTypeEnum from '../types/keypad-message.enum';\r\nimport KeypadModeEnum from '../types/keypad-mode.enum';\r\nimport KeypadResponseType from '../types/keypad-response.type';\r\nimport { uuidv4 } from '../utils/uuid';\r\n\r\nexport default function useKeypad() {\r\n const [isShow, setIsShow] = useState<boolean>(false);\r\n\r\n const show = useCallback(\r\n (\r\n inputRef: HTMLInputElement,\r\n onInputChange: (length: number) => void,\r\n onKeypadClose: (res: KeypadResponseType) => void,\r\n keyType: KeypadModeEnum = KeypadModeEnum.QWERTY_SMART,\r\n maxLength: number,\r\n numberKeyRowCount: number\r\n ) => {\r\n const name = uuidv4();\r\n\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n let keypad = XKeyboardMobileInstance.getKeypad(name);\r\n if (!keypad) {\r\n keypad = XKeyboardMobileInstance.newKeypad(name);\r\n } else {\r\n keypad.refresh();\r\n }\r\n\r\n if (onInputChange && typeof onInputChange === 'function') {\r\n onInputChange(0);\r\n }\r\n\r\n const keyPadParam = {\r\n name: `xk-pad-${name}`,\r\n editBox: inputRef,\r\n keyType,\r\n width: 100,\r\n position: { top: 10, left: null },\r\n viewType: 'half',\r\n closeDelay: 0,\r\n autoKeyResize: true,\r\n isE2E: true,\r\n onlyMobile: false,\r\n hasPressEffect: true,\r\n maxLength,\r\n numberKeyRowCount,\r\n onInputChange: (newLength: number) => {\r\n if (onInputChange && typeof onInputChange === 'function') {\r\n onInputChange(newLength);\r\n }\r\n\r\n // 키패드가 존재하지 않을 경우, 종료\r\n if (!keypad) {\r\n return;\r\n }\r\n\r\n //키패드 입력 길이가 최대 입력 길이가 됐을 때 키패드 닫기\r\n if (\r\n keyPadParam.maxLength &&\r\n keyPadParam.maxLength > 0 &&\r\n newLength >= keyPadParam.maxLength &&\r\n keypad.isOpend()\r\n ) {\r\n keypad.close();\r\n setIsShow(false);\r\n\r\n return;\r\n }\r\n },\r\n onKeypadClose: () => {\r\n if (!keypad) {\r\n return;\r\n }\r\n\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n if (onKeypadClose && typeof onKeypadClose === 'function') {\r\n const sessionInfo = keypad.get_sessionInfo();\r\n let length = 0;\r\n if (sessionInfo.input && sessionInfo.input.indexOf(',') >= 0) {\r\n length = sessionInfo.input.split(',').length;\r\n }\r\n\r\n const res = {\r\n length,\r\n element: inputRef,\r\n sessionInfo: {\r\n input: sessionInfo.input,\r\n sessionId: sessionInfo.sessionId,\r\n secToken: sessionInfo.secToken\r\n },\r\n keyType,\r\n name\r\n };\r\n\r\n setIsShow(false);\r\n onKeypadClose(res);\r\n }\r\n\r\n XKeyboardMobileInstance.removeKeypad(name);\r\n\r\n if (!onKeypadClose) {\r\n throw new Error('not found onKeypadClose');\r\n }\r\n\r\n if (typeof onKeypadClose !== 'function') {\r\n throw new Error('not found onKeypadClose');\r\n }\r\n }\r\n };\r\n\r\n const aRet = keypad.initialize(keyPadParam);\r\n\r\n if (aRet === KeypadMessageTypeEnum.NotSupportDevice) {\r\n // 안내 메세지 세팅\r\n alert('지원하지 않는 기기 입니다.');\r\n\r\n return;\r\n } else if (aRet === KeypadMessageTypeEnum.Already) {\r\n // alert('이미 키패드가 실행 중입니다.');\r\n return;\r\n }\r\n\r\n setIsShow(true);\r\n },\r\n []\r\n );\r\n\r\n const getValue = (name: string) => {\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n const targetKeypad = XKeyboardMobileInstance.keypads[name];\r\n\r\n if (!targetKeypad) {\r\n return null;\r\n }\r\n\r\n return targetKeypad.get_sessionInfo();\r\n };\r\n\r\n /**\r\n * 활성화 되어있는 키패드 찾는다\r\n * @returns\r\n */\r\n const find = (name?: string) => {\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n if (name) {\r\n return XKeyboardMobileInstance.keypads[name];\r\n } else {\r\n // 키패드가 출력되어있으면, 확인하여 키패드를 닫는다.\r\n const keypadIds = Object.keys(XKeyboardMobileInstance.keypads);\r\n\r\n for (const keypadId of keypadIds) {\r\n const targetKeypad = XKeyboardMobileInstance.keypads[keypadId];\r\n\r\n if (targetKeypad && targetKeypad.isOpen()) {\r\n return targetKeypad;\r\n }\r\n }\r\n }\r\n };\r\n\r\n const isOpen = (name?: string) => {\r\n const targetKeypad = find(name);\r\n\r\n return !!targetKeypad;\r\n };\r\n\r\n const close = (name?: string) => {\r\n const targetKeypad = find(name);\r\n if (targetKeypad) {\r\n targetKeypad.close();\r\n setIsShow(false);\r\n }\r\n };\r\n\r\n const clear = (name?: string) => {\r\n const _xkmodule = find(name);\r\n if (_xkmodule) {\r\n _xkmodule.clear();\r\n setIsShow(false);\r\n }\r\n };\r\n\r\n const refresh = (name?: string) => {\r\n const targetKeypad = find(name);\r\n if (targetKeypad) {\r\n targetKeypad.refresh();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const handleMouseDown = (event: MouseEvent) => {\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n const keypadAlertDivTag = document.querySelector('#xkalert');\r\n\r\n const keypadDivTag = keypadAlertDivTag?.parentElement;\r\n if (keypadDivTag && !keypadDivTag.contains(event.target as Node)) {\r\n XKeyboardMobileInstance.closeAll();\r\n setIsShow(false);\r\n }\r\n };\r\n document.addEventListener('mousedown', handleMouseDown);\r\n\r\n return () => {\r\n document.removeEventListener('mousedown', handleMouseDown);\r\n };\r\n }, []);\r\n\r\n return {\r\n show,\r\n close,\r\n clear,\r\n refresh,\r\n getValue,\r\n isOpen,\r\n find,\r\n isShow\r\n };\r\n}\r\n","import React, { useEffect, useRef, useState, useCallback } from 'react';\r\n\r\nimport useXKeypad from '../hooks/use-keypad';\r\nimport KeypadModeEnum from '../types/keypad-mode.enum';\r\nimport KeypadResponseType from '../types/keypad-response.type';\r\nimport KeypadSessionType from '../types/keypad-session.type';\r\nimport KeypadType from '../types/keypad.type';\r\n\r\ntype Props = {\r\n value: KeypadSessionType | null;\r\n inputElement: KeypadType;\r\n mode: KeypadModeEnum;\r\n onChange: (value: KeypadSessionType | null) => void;\r\n maxLength: number;\r\n};\r\n\r\nexport default function Keypad({ value, onChange, mode, maxLength, inputElement }: Props) {\r\n const { show, isShow } = useXKeypad();\r\n\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n const [maskedValue, setMaskedValue] = useState<string>('');\r\n\r\n const onCloseBack = useCallback(\r\n (res: KeypadResponseType) => {\r\n onChange(res.sessionInfo);\r\n },\r\n [onChange]\r\n );\r\n\r\n const onChangeBack = useCallback(\r\n (length: number) => {\r\n if (length === 0) {\r\n onChange(null);\r\n }\r\n setMaskedValue(''.padStart(length, '*'));\r\n },\r\n [onChange, setMaskedValue]\r\n );\r\n\r\n const handleKeypad = useCallback(() => {\r\n show(inputRef.current as HTMLInputElement, onChangeBack, onCloseBack, mode, maxLength, 3);\r\n }, [show, inputRef, onChangeBack, onCloseBack, mode, maxLength]);\r\n\r\n const enhancedOnClick = (existingClickHandler: () => void, newClickHandler: () => void) => {\r\n return () => {\r\n if (existingClickHandler) {\r\n existingClickHandler();\r\n }\r\n newClickHandler();\r\n };\r\n };\r\n\r\n const cloneElement = React.cloneElement(inputElement, {\r\n ref: inputRef,\r\n value: maskedValue,\r\n onClick: enhancedOnClick(inputElement.props.onClick, handleKeypad)\r\n // iskeypadactive: isShow\r\n });\r\n\r\n useEffect(() => {\r\n const length = value?.input && value.input.length > 0 ? value.input.split(',').length : 0;\r\n setMaskedValue(''.padStart(length, '*'));\r\n }, [value]);\r\n\r\n useEffect(() => {\r\n if (inputRef.current && !(inputRef.current instanceof HTMLInputElement)) {\r\n throw new Error('Input 태그가 정의되지 않았습니다.');\r\n }\r\n }, []);\r\n\r\n return <>{cloneElement}</>;\r\n}\r\n","import { useCallback, useEffect } from 'react';\r\nexport type NxlOneProps = {\r\n bizCode: string;\r\n tmplCode: string;\r\n ncsrInfoUuid?: string;\r\n nlcCtfnId?: string;\r\n // TYPE\r\n t?: string;\r\n env?: 'dev' | 'stg' | 'prod';\r\n};\r\n\r\nexport type NxlOneResponse = {\r\n action?: 'error' | 'close' | 'complete';\r\n redirectUrl?: string;\r\n nlcCtfnId?: string;\r\n};\r\n\r\nconst url = (() => {\r\n const url = typeof window !== 'undefined' ? window.location.href : '';\r\n\r\n if (url.includes('localhost') || url.includes('dev')) {\r\n return 'https://nxl-nlc-dev.hanwhalife.com';\r\n } else if (url.includes('stg')) {\r\n return 'https://nxl-nlc-stg.hanwhalife.com';\r\n } else {\r\n return 'https://nxl-nlc.hanwhalife.com';\r\n }\r\n})();\r\n\r\ntype OpenOptionType = {\r\n popupWidth?: number;\r\n popupHeight?: number;\r\n popupLeft?: number;\r\n popupTop?: number;\r\n windowName?: string;\r\n};\r\n\r\nexport default function useNxlOne({ bizCode, tmplCode, ncsrInfoUuid, nlcCtfnId, t, env }: NxlOneProps) {\r\n const baseUrl =\r\n env === 'prod'\r\n ? 'https://nxl-nlc.hanwhalife.com'\r\n : env === 'stg'\r\n ? 'https://nxl-nlc-stg.hanwhalife.com'\r\n : env === 'dev'\r\n ? 'https://nxl-nlc-dev.hanwhalife.com'\r\n : undefined;\r\n\r\n const buildUrl = useCallback(() => {\r\n const targetUrl = new URL('/auth/v1', baseUrl || url);\r\n targetUrl.searchParams.set('bizCode', bizCode);\r\n targetUrl.searchParams.set('tmplCode', tmplCode);\r\n\r\n if (nlcCtfnId) {\r\n targetUrl.searchParams.set('nlcCtfnId', nlcCtfnId);\r\n }\r\n\r\n if (t) {\r\n targetUrl.searchParams.set('t', t);\r\n }\r\n\r\n if (ncsrInfoUuid) {\r\n targetUrl.searchParams.set('ncsrInfoUuid', ncsrInfoUuid);\r\n }\r\n\r\n return targetUrl.toString();\r\n }, [bizCode, tmplCode, t, ncsrInfoUuid, nlcCtfnId, baseUrl]);\r\n\r\n /**\r\n * NEXTLAB ONE 인증 페이지로 이동합니다.\r\n * 인증이 완료 후, 관리자 페이지에서 정의한 프로세스 완료 URL로 이동합니다.\r\n */\r\n const redirect = () => {\r\n const targetUrl = buildUrl();\r\n\r\n location.href = targetUrl;\r\n };\r\n\r\n /**\r\n * NEXTLAB ONE 인증 페이지를 팝업으로 엽니다.\r\n * @param options 팝업의 크기, 위치, 창 이름을 정의합니다.\r\n * @returns 완료 URL에 인증 ID가 Query String 이 함께 정의된 형태로 반환됩니다.\r\n *\r\n * @example\r\n * const { open } = useNxlOne();\r\n *\r\n * const handleClick = async () => {\r\n * try {\r\n * const result = await open({ popupWidth: 500, popupHeight: 500 });\r\n * console.log('이동 시킬 URL : ' + result);\r\n * } catch (e) {\r\n * console.error('팝업 프로세스 실패');\r\n * }\r\n * }\r\n *\r\n * @note 팝업은 반드시 사용자 이벤트 핸들러 내에서 직접 호출해야 브라우저 차단을 피할 수 있습니다.\r\n */\r\n const open = async (options?: OpenOptionType) => {\r\n return new Promise<NxlOneResponse>((resolve, reject) => {\r\n const targetUrl = buildUrl();\r\n\r\n const width = (options && options.popupWidth) || 744;\r\n const height = (options && options.popupHeight) || 720;\r\n\r\n const left = (options && options.popupLeft) || window.screenX + (window.outerWidth - width) / 2;\r\n const top = (options && options.popupTop) || window.screenX + (window.outerWidth - width) / 2;\r\n\r\n const popupFeatures = `width=${width},height=${height},left=${left},top=${top}`;\r\n const popup = window.open(targetUrl, (options && options.windowName) || 'self_cert', popupFeatures);\r\n\r\n if (!popup) {\r\n reject(new Error('차단되거나 열리지 않았습니다.'));\r\n\r\n return;\r\n }\r\n\r\n let isSettled = false;\r\n\r\n const handleMessage = (event: MessageEvent) => {\r\n if (event.origin !== new URL(targetUrl).origin) {\r\n return;\r\n }\r\n\r\n if (!isSettled) {\r\n isSettled = true;\r\n\r\n if (event.data) {\r\n resolve(event.data);\r\n } else {\r\n reject('인증이 취소되거나 실패했습니다.');\r\n }\r\n\r\n popup?.close();\r\n window.removeEventListener('message', handleMessage);\r\n }\r\n };\r\n\r\n window.addEventListener('message', handleMessage);\r\n });\r\n };\r\n\r\n const Iframe = function ({\r\n height = 720,\r\n className,\r\n style,\r\n allow,\r\n sandbox = 'allow-scripts allow-forms allow-same-origin',\r\n onSuccess,\r\n onError,\r\n onClose,\r\n strictOrigin = true\r\n }: {\r\n height?: number | string;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n allow?: string;\r\n sandbox?: string;\r\n onSuccess?: (response: NxlOneResponse) => void;\r\n onError?: (response: NxlOneResponse) => void;\r\n onClose: (response: NxlOneResponse) => void;\r\n strictOrigin?: boolean;\r\n }) {\r\n const targetUrl = buildUrl();\r\n\r\n useEffect(() => {\r\n if (!onSuccess && !onError) {\r\n return;\r\n }\r\n\r\n const handler = (e: MessageEvent) => {\r\n if (strictOrigin && e.origin !== url) {\r\n return;\r\n }\r\n\r\n const d = e.data as NxlOneResponse;\r\n if (d) {\r\n if (d.action === 'close') {\r\n onClose(d);\r\n\r\n return;\r\n } else if (onError && d.action === 'error') {\r\n onError(d);\r\n\r\n return;\r\n } else if (onSuccess && d.action === 'complete') {\r\n onSuccess(d);\r\n\r\n return;\r\n }\r\n } else if (onError) {\r\n onError({\r\n action: 'error',\r\n nlcCtfnId: '',\r\n redirectUrl: ''\r\n });\r\n }\r\n };\r\n\r\n window.addEventListener('message', handler as EventListener);\r\n\r\n return () => window.removeEventListener('message', handler as EventListener);\r\n }, [onClose, onError, onSuccess, strictOrigin]);\r\n\r\n return (\r\n <iframe\r\n src={targetUrl}\r\n width=\"100%\"\r\n height={typeof height === 'number' ? `${height}px` : height}\r\n style={{ border: 0, ...style }}\r\n className={className}\r\n sandbox={sandbox}\r\n {...(allow ? { allow } : {})}\r\n />\r\n );\r\n };\r\n\r\n return { redirect, open, Iframe };\r\n}\r\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { ReactElement } from 'react';
|
|
2
|
+
import React$1, { ReactElement } from 'react';
|
|
3
|
+
|
|
4
|
+
interface V3ContextType {
|
|
5
|
+
isLoaded: boolean;
|
|
6
|
+
launch: () => void;
|
|
7
|
+
}
|
|
8
|
+
declare const V3Provider: ({ children }: {
|
|
9
|
+
children: React$1.ReactNode;
|
|
10
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
11
|
+
declare const useV3: () => V3ContextType;
|
|
3
12
|
|
|
4
13
|
declare enum KeypadModeEnum {
|
|
5
14
|
QWERTY_SMART = "qwertysmart",
|
|
@@ -74,4 +83,4 @@ declare function useNxlOne({ bizCode, tmplCode, ncsrInfoUuid, nlcCtfnId, t, env
|
|
|
74
83
|
}) => react_jsx_runtime.JSX.Element;
|
|
75
84
|
};
|
|
76
85
|
|
|
77
|
-
export { Keypad, type KeypadFieldType, KeypadModeEnum, type KeypadResponseType, type KeypadSessionType, type KeypadType, type NxlOneProps, type NxlOneResponse, useNxlOne };
|
|
86
|
+
export { Keypad, type KeypadFieldType, KeypadModeEnum, type KeypadResponseType, type KeypadSessionType, type KeypadType, type NxlOneProps, type NxlOneResponse, V3Provider, useNxlOne, useV3 };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { ReactElement } from 'react';
|
|
2
|
+
import React$1, { ReactElement } from 'react';
|
|
3
|
+
|
|
4
|
+
interface V3ContextType {
|
|
5
|
+
isLoaded: boolean;
|
|
6
|
+
launch: () => void;
|
|
7
|
+
}
|
|
8
|
+
declare const V3Provider: ({ children }: {
|
|
9
|
+
children: React$1.ReactNode;
|
|
10
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
11
|
+
declare const useV3: () => V3ContextType;
|
|
3
12
|
|
|
4
13
|
declare enum KeypadModeEnum {
|
|
5
14
|
QWERTY_SMART = "qwertysmart",
|
|
@@ -74,4 +83,4 @@ declare function useNxlOne({ bizCode, tmplCode, ncsrInfoUuid, nlcCtfnId, t, env
|
|
|
74
83
|
}) => react_jsx_runtime.JSX.Element;
|
|
75
84
|
};
|
|
76
85
|
|
|
77
|
-
export { Keypad, type KeypadFieldType, KeypadModeEnum, type KeypadResponseType, type KeypadSessionType, type KeypadType, type NxlOneProps, type NxlOneResponse, useNxlOne };
|
|
86
|
+
export { Keypad, type KeypadFieldType, KeypadModeEnum, type KeypadResponseType, type KeypadSessionType, type KeypadType, type NxlOneProps, type NxlOneResponse, V3Provider, useNxlOne, useV3 };
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { isClient } from 'sales-frontend-utils';
|
|
1
|
+
import React2, { createContext, useState, useEffect, useContext, useRef, useCallback } from 'react';
|
|
2
|
+
import { isClient, getEnvironmentFromHostname, getServiceCode } from 'sales-frontend-utils';
|
|
3
3
|
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
4
4
|
|
|
5
|
-
// src/
|
|
5
|
+
// src/v3-provider.tsx
|
|
6
6
|
|
|
7
7
|
// src/utils/load-script.ts
|
|
8
8
|
async function loadScript(url2) {
|
|
@@ -23,8 +23,79 @@ async function loadScript(url2) {
|
|
|
23
23
|
document.body.appendChild(script);
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
|
+
var getServiceUrl = (serviceName) => {
|
|
27
|
+
if (!isClient()) {
|
|
28
|
+
return "";
|
|
29
|
+
}
|
|
30
|
+
const env = getEnvironmentFromHostname(location.hostname);
|
|
31
|
+
switch (env) {
|
|
32
|
+
case "local":
|
|
33
|
+
return `${getServiceCode()}/api/${serviceName}`;
|
|
34
|
+
case "dev":
|
|
35
|
+
return `https://nxl-${serviceName}-dev.hanwhalife.com/api`;
|
|
36
|
+
case "stg":
|
|
37
|
+
return `https://nxl-${serviceName}-stg.hanwhalife.com/api`;
|
|
38
|
+
case "prd":
|
|
39
|
+
return `https://nxl-${serviceName}.hanwhalife.com/api`;
|
|
40
|
+
default:
|
|
41
|
+
return ``;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
({
|
|
45
|
+
INPUT_PREFILL_USER: `${getServiceUrl("nlc")}/user-ctfn/ncsr-info-inpt/post`
|
|
46
|
+
});
|
|
26
47
|
|
|
27
|
-
// src/
|
|
48
|
+
// src/v3.ts
|
|
49
|
+
var isAndroid = () => {
|
|
50
|
+
return /android/i.test(navigator.userAgent) && !/edge/i.test(navigator.userAgent);
|
|
51
|
+
};
|
|
52
|
+
var loadV3 = () => {
|
|
53
|
+
console.log("load v3");
|
|
54
|
+
const mtk = sessionStorage.getItem("mtk") || window.mpl_token?.();
|
|
55
|
+
const mcd = sessionStorage.getItem("mcd") || window.mpl_enc_param?.();
|
|
56
|
+
if (mtk && mcd && window.mpl_load && mtk !== "undefined" && mcd !== "undefined") {
|
|
57
|
+
window.mpl_load(mtk, mcd);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
var checkV3Status = async (type) => {
|
|
61
|
+
console.log("check v3 status");
|
|
62
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
63
|
+
if (!isAndroid() || !window.mpl_status) {
|
|
64
|
+
console.log("not android or no mpl_status");
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
if (window.mpl_status() === "ALIVE") {
|
|
68
|
+
console.log("mpl status is alive");
|
|
69
|
+
loadV3();
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
console.log("v3 not alive");
|
|
73
|
+
return false;
|
|
74
|
+
};
|
|
75
|
+
var launchV3 = async () => {
|
|
76
|
+
loadV3();
|
|
77
|
+
return await checkV3Status();
|
|
78
|
+
};
|
|
79
|
+
var V3Context = createContext(void 0);
|
|
80
|
+
var AhnlabV3JsUrl = "https://mpl.ahnlab.com/js/mpl_webview_cm.js";
|
|
81
|
+
var V3Provider = ({ children }) => {
|
|
82
|
+
const [isLoaded, setIsLoaded] = useState(false);
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
const initialize = async () => {
|
|
85
|
+
await loadScript(AhnlabV3JsUrl);
|
|
86
|
+
setIsLoaded(true);
|
|
87
|
+
};
|
|
88
|
+
initialize();
|
|
89
|
+
}, []);
|
|
90
|
+
return /* @__PURE__ */ jsx(V3Context.Provider, { value: { isLoaded, launch: launchV3 }, children });
|
|
91
|
+
};
|
|
92
|
+
var useV3 = () => {
|
|
93
|
+
const context = useContext(V3Context);
|
|
94
|
+
if (!context) {
|
|
95
|
+
throw new Error("V3Provider\uB97C \uC815\uC758\uD574\uC8FC\uC138\uC694.");
|
|
96
|
+
}
|
|
97
|
+
return context;
|
|
98
|
+
};
|
|
28
99
|
var getPath = (service, env) => `https://nxl-${`${service}-${env}` }.hanwhalife.com`;
|
|
29
100
|
var getEnv = () => {
|
|
30
101
|
return "stg";
|
|
@@ -328,7 +399,7 @@ function Keypad({ value, onChange, mode, maxLength, inputElement }) {
|
|
|
328
399
|
newClickHandler();
|
|
329
400
|
};
|
|
330
401
|
};
|
|
331
|
-
const cloneElement =
|
|
402
|
+
const cloneElement = React2.cloneElement(inputElement, {
|
|
332
403
|
ref: inputRef,
|
|
333
404
|
value: maskedValue,
|
|
334
405
|
onClick: enhancedOnClick(inputElement.props.onClick, handleKeypad)
|
|
@@ -467,6 +538,6 @@ function useNxlOne({ bizCode, tmplCode, ncsrInfoUuid, nlcCtfnId, t, env }) {
|
|
|
467
538
|
return { redirect, open, Iframe };
|
|
468
539
|
}
|
|
469
540
|
|
|
470
|
-
export { Keypad, keypad_mode_enum_default as KeypadModeEnum, useNxlOne };
|
|
541
|
+
export { Keypad, keypad_mode_enum_default as KeypadModeEnum, V3Provider, useNxlOne, useV3 };
|
|
471
542
|
//# sourceMappingURL=index.js.map
|
|
472
543
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/load-script.ts","../src/libs/xkeyboard.ts","../src/types/keypad-message.enum.ts","../src/types/keypad-mode.enum.ts","../src/utils/uuid.ts","../src/hooks/use-keypad.ts","../src/components/Keypad.tsx","../src/hooks/use-nxl-one.tsx"],"names":["url","KeypadMessageTypeEnum","KeypadModeEnum","useState","useCallback","useEffect","jsx"],"mappings":"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","file":"index.js","sourcesContent":["export async function loadScript(url: string) {\r\n await new Promise((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.async = true;\r\n script.addEventListener('load', () => {\r\n resolve({ loaded: true, error: false });\r\n });\r\n\r\n script.addEventListener('error', () => {\r\n reject({\r\n loaded: false,\r\n error: true,\r\n message: '파일 로드에 실패하였습니다.'\r\n });\r\n });\r\n\r\n document.body.appendChild(script);\r\n });\r\n}\r\n","import { isClient } from 'sales-frontend-utils';\r\n\r\nimport { KeypadActionType } from '../types/keypad-action.type';\r\nimport { loadScript } from '../utils/load-script';\r\n\r\ntype ENV = 'dev' | 'stg' | 'prod';\r\n\r\nconst getPath = (service: string, env: ENV) =>\r\n `https://nxl-${env !== 'prod' ? `${service}-${env}` : service}.hanwhalife.com`;\r\n\r\nconst getEnv: () => ENV = () => {\r\n const host = window.location.hostname;\r\n\r\n // if (host.includes('-dev.') || host.includes('localhost')) {\r\n // return 'dev';\r\n // } else if (host.includes('-stg.')) {\r\n // return 'stg';\r\n // } else {\r\n // return 'prod';\r\n // }\r\n\r\n return 'stg';\r\n};\r\n\r\ninterface KeypadConfig {\r\n version: string;\r\n server: string;\r\n contextRoot: string;\r\n cssPath: string;\r\n logoImgPath: string;\r\n inputObjectBackgroundColor: string;\r\n inputObjectBorderStyle: string;\r\n invalidSessionErrorMessage: string;\r\n invalidSessionAutoRefresh: boolean;\r\n enableAccessibility: boolean;\r\n useCustomAlert: boolean;\r\n functionKeyButtonStyle: string;\r\n maxInputSize: number;\r\n textInputView: number;\r\n touchOption: number;\r\n}\r\n\r\nexport const XKeyboardMobileInstance = (() => {\r\n if (!isClient()) {\r\n return null;\r\n }\r\n\r\n const env = getEnv();\r\n\r\n const keypadServicePath = `${getPath('xkp', env)}/xkp/xkscriptservice`;\r\n const keypadContentsPath = `${getPath('nlc', env)}/cnts-files/xkeyboard`;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (window as any).XKConfigMobile = {\r\n version: '1.0.5.1',\r\n server: keypadServicePath,\r\n contextRoot: `${keypadContentsPath}/js`,\r\n cssPath: `${keypadContentsPath}/css/xkp_mobile.css`,\r\n logoImgPath: `${keypadContentsPath}/img/logo.png`,\r\n inputObjectBackgroundColor: '#E4E4E4',\r\n inputObjectBorderStyle: '1px solid #9E9E9E',\r\n invalidSessionErrorMessage: \"보안세션이 만료되었습니다.\\n'확인'을 누르면 키패드가 갱신 됩니다.\",\r\n invalidSessionAutoRefresh: true,\r\n enableAccessibility: true,\r\n useCustomAlert: false,\r\n functionKeyButtonStyle: 'text',\r\n maxInputSize: 56,\r\n textInputView: 0,\r\n touchOption: 0\r\n } as KeypadConfig;\r\n\r\n document.oncontextmenu = () => false;\r\n document.ondragstart = () => false;\r\n document.onselectstart = () => false;\r\n\r\n const headTag = document.head;\r\n const scriptsToLoad = ['xkeypad_mobile.js'];\r\n\r\n const urls = scriptsToLoad.map(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (x) => `${(window as any).XKConfigMobile.contextRoot}/${x}`\r\n );\r\n\r\n Promise.all(urls.map((x) => loadScript(x))).then(() => {\r\n const existingLink = document.getElementById('xkStyle');\r\n\r\n if (existingLink?.parentNode) {\r\n existingLink.parentNode.removeChild(existingLink);\r\n }\r\n\r\n const linkElement = document.createElement('link');\r\n linkElement.id = 'xkStyle';\r\n linkElement.rel = 'stylesheet';\r\n linkElement.type = 'text/css';\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n linkElement.href = (window as any).XKConfigMobile.cssPath;\r\n\r\n headTag.appendChild(linkElement);\r\n });\r\n\r\n const keypads: { [key: string]: KeypadActionType | undefined } = {};\r\n\r\n const getKeypad = (name: string) => keypads[name];\r\n\r\n const setKeypad = (name: string, keypad: KeypadActionType) => {\r\n keypads[name] = keypad;\r\n\r\n return keypad;\r\n };\r\n\r\n const removeKeypad = (name: string) => {\r\n delete keypads[name];\r\n };\r\n\r\n const closeAll = () => {\r\n Object.keys(keypads).forEach((id) => {\r\n const keypad = keypads[id];\r\n if (keypad && keypad.isOpen()) {\r\n keypad.close();\r\n }\r\n });\r\n };\r\n\r\n const newKeypad = (name: string) => {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return setKeypad(name, new (window as any).XKModule());\r\n };\r\n\r\n return {\r\n keypads,\r\n getKeypad,\r\n setKeypad,\r\n newKeypad,\r\n removeKeypad,\r\n closeAll\r\n };\r\n})();\r\n","enum KeypadMessageTypeEnum {\r\n NotSupportDevice = -1,\r\n Already = -2\r\n}\r\n\r\nexport default KeypadMessageTypeEnum;\r\n","enum KeypadModeEnum {\r\n QWERTY_SMART = 'qwertysmart',\r\n NUMBER = 'number'\r\n}\r\n\r\nexport default KeypadModeEnum;","export const uuidv4 = (): string => {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = Math.random() * 16 || 0,\r\n v = c === 'x' ? r : (r && 0x3) || 0x8;\r\n\r\n return v.toString(16);\r\n });\r\n};\r\n","import { useCallback, useEffect, useState } from 'react';\r\n\r\nimport { XKeyboardMobileInstance } from '../libs/xkeyboard';\r\nimport KeypadMessageTypeEnum from '../types/keypad-message.enum';\r\nimport KeypadModeEnum from '../types/keypad-mode.enum';\r\nimport KeypadResponseType from '../types/keypad-response.type';\r\nimport { uuidv4 } from '../utils/uuid';\r\n\r\nexport default function useKeypad() {\r\n const [isShow, setIsShow] = useState<boolean>(false);\r\n\r\n const show = useCallback(\r\n (\r\n inputRef: HTMLInputElement,\r\n onInputChange: (length: number) => void,\r\n onKeypadClose: (res: KeypadResponseType) => void,\r\n keyType: KeypadModeEnum = KeypadModeEnum.QWERTY_SMART,\r\n maxLength: number,\r\n numberKeyRowCount: number\r\n ) => {\r\n const name = uuidv4();\r\n\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n let keypad = XKeyboardMobileInstance.getKeypad(name);\r\n if (!keypad) {\r\n keypad = XKeyboardMobileInstance.newKeypad(name);\r\n } else {\r\n keypad.refresh();\r\n }\r\n\r\n if (onInputChange && typeof onInputChange === 'function') {\r\n onInputChange(0);\r\n }\r\n\r\n const keyPadParam = {\r\n name: `xk-pad-${name}`,\r\n editBox: inputRef,\r\n keyType,\r\n width: 100,\r\n position: { top: 10, left: null },\r\n viewType: 'half',\r\n closeDelay: 0,\r\n autoKeyResize: true,\r\n isE2E: true,\r\n onlyMobile: false,\r\n hasPressEffect: true,\r\n maxLength,\r\n numberKeyRowCount,\r\n onInputChange: (newLength: number) => {\r\n if (onInputChange && typeof onInputChange === 'function') {\r\n onInputChange(newLength);\r\n }\r\n\r\n // 키패드가 존재하지 않을 경우, 종료\r\n if (!keypad) {\r\n return;\r\n }\r\n\r\n //키패드 입력 길이가 최대 입력 길이가 됐을 때 키패드 닫기\r\n if (\r\n keyPadParam.maxLength &&\r\n keyPadParam.maxLength > 0 &&\r\n newLength >= keyPadParam.maxLength &&\r\n keypad.isOpend()\r\n ) {\r\n keypad.close();\r\n setIsShow(false);\r\n\r\n return;\r\n }\r\n },\r\n onKeypadClose: () => {\r\n if (!keypad) {\r\n return;\r\n }\r\n\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n if (onKeypadClose && typeof onKeypadClose === 'function') {\r\n const sessionInfo = keypad.get_sessionInfo();\r\n let length = 0;\r\n if (sessionInfo.input && sessionInfo.input.indexOf(',') >= 0) {\r\n length = sessionInfo.input.split(',').length;\r\n }\r\n\r\n const res = {\r\n length,\r\n element: inputRef,\r\n sessionInfo: {\r\n input: sessionInfo.input,\r\n sessionId: sessionInfo.sessionId,\r\n secToken: sessionInfo.secToken\r\n },\r\n keyType,\r\n name\r\n };\r\n\r\n setIsShow(false);\r\n onKeypadClose(res);\r\n }\r\n\r\n XKeyboardMobileInstance.removeKeypad(name);\r\n\r\n if (!onKeypadClose) {\r\n throw new Error('not found onKeypadClose');\r\n }\r\n\r\n if (typeof onKeypadClose !== 'function') {\r\n throw new Error('not found onKeypadClose');\r\n }\r\n }\r\n };\r\n\r\n const aRet = keypad.initialize(keyPadParam);\r\n\r\n if (aRet === KeypadMessageTypeEnum.NotSupportDevice) {\r\n // 안내 메세지 세팅\r\n alert('지원하지 않는 기기 입니다.');\r\n\r\n return;\r\n } else if (aRet === KeypadMessageTypeEnum.Already) {\r\n // alert('이미 키패드가 실행 중입니다.');\r\n return;\r\n }\r\n\r\n setIsShow(true);\r\n },\r\n []\r\n );\r\n\r\n const getValue = (name: string) => {\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n const targetKeypad = XKeyboardMobileInstance.keypads[name];\r\n\r\n if (!targetKeypad) {\r\n return null;\r\n }\r\n\r\n return targetKeypad.get_sessionInfo();\r\n };\r\n\r\n /**\r\n * 활성화 되어있는 키패드 찾는다\r\n * @returns\r\n */\r\n const find = (name?: string) => {\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n if (name) {\r\n return XKeyboardMobileInstance.keypads[name];\r\n } else {\r\n // 키패드가 출력되어있으면, 확인하여 키패드를 닫는다.\r\n const keypadIds = Object.keys(XKeyboardMobileInstance.keypads);\r\n\r\n for (const keypadId of keypadIds) {\r\n const targetKeypad = XKeyboardMobileInstance.keypads[keypadId];\r\n\r\n if (targetKeypad && targetKeypad.isOpen()) {\r\n return targetKeypad;\r\n }\r\n }\r\n }\r\n };\r\n\r\n const isOpen = (name?: string) => {\r\n const targetKeypad = find(name);\r\n\r\n return !!targetKeypad;\r\n };\r\n\r\n const close = (name?: string) => {\r\n const targetKeypad = find(name);\r\n if (targetKeypad) {\r\n targetKeypad.close();\r\n setIsShow(false);\r\n }\r\n };\r\n\r\n const clear = (name?: string) => {\r\n const _xkmodule = find(name);\r\n if (_xkmodule) {\r\n _xkmodule.clear();\r\n setIsShow(false);\r\n }\r\n };\r\n\r\n const refresh = (name?: string) => {\r\n const targetKeypad = find(name);\r\n if (targetKeypad) {\r\n targetKeypad.refresh();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const handleMouseDown = (event: MouseEvent) => {\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n const keypadAlertDivTag = document.querySelector('#xkalert');\r\n\r\n const keypadDivTag = keypadAlertDivTag?.parentElement;\r\n if (keypadDivTag && !keypadDivTag.contains(event.target as Node)) {\r\n XKeyboardMobileInstance.closeAll();\r\n setIsShow(false);\r\n }\r\n };\r\n document.addEventListener('mousedown', handleMouseDown);\r\n\r\n return () => {\r\n document.removeEventListener('mousedown', handleMouseDown);\r\n };\r\n }, []);\r\n\r\n return {\r\n show,\r\n close,\r\n clear,\r\n refresh,\r\n getValue,\r\n isOpen,\r\n find,\r\n isShow\r\n };\r\n}\r\n","import React, { useEffect, useRef, useState, useCallback } from 'react';\r\n\r\nimport useXKeypad from '../hooks/use-keypad';\r\nimport KeypadModeEnum from '../types/keypad-mode.enum';\r\nimport KeypadResponseType from '../types/keypad-response.type';\r\nimport KeypadSessionType from '../types/keypad-session.type';\r\nimport KeypadType from '../types/keypad.type';\r\n\r\ntype Props = {\r\n value: KeypadSessionType | null;\r\n inputElement: KeypadType;\r\n mode: KeypadModeEnum;\r\n onChange: (value: KeypadSessionType | null) => void;\r\n maxLength: number;\r\n};\r\n\r\nexport default function Keypad({ value, onChange, mode, maxLength, inputElement }: Props) {\r\n const { show, isShow } = useXKeypad();\r\n\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n const [maskedValue, setMaskedValue] = useState<string>('');\r\n\r\n const onCloseBack = useCallback(\r\n (res: KeypadResponseType) => {\r\n onChange(res.sessionInfo);\r\n },\r\n [onChange]\r\n );\r\n\r\n const onChangeBack = useCallback(\r\n (length: number) => {\r\n if (length === 0) {\r\n onChange(null);\r\n }\r\n setMaskedValue(''.padStart(length, '*'));\r\n },\r\n [onChange, setMaskedValue]\r\n );\r\n\r\n const handleKeypad = useCallback(() => {\r\n show(inputRef.current as HTMLInputElement, onChangeBack, onCloseBack, mode, maxLength, 3);\r\n }, [show, inputRef, onChangeBack, onCloseBack, mode, maxLength]);\r\n\r\n const enhancedOnClick = (existingClickHandler: () => void, newClickHandler: () => void) => {\r\n return () => {\r\n if (existingClickHandler) {\r\n existingClickHandler();\r\n }\r\n newClickHandler();\r\n };\r\n };\r\n\r\n const cloneElement = React.cloneElement(inputElement, {\r\n ref: inputRef,\r\n value: maskedValue,\r\n onClick: enhancedOnClick(inputElement.props.onClick, handleKeypad)\r\n // iskeypadactive: isShow\r\n });\r\n\r\n useEffect(() => {\r\n const length = value?.input && value.input.length > 0 ? value.input.split(',').length : 0;\r\n setMaskedValue(''.padStart(length, '*'));\r\n }, [value]);\r\n\r\n useEffect(() => {\r\n if (inputRef.current && !(inputRef.current instanceof HTMLInputElement)) {\r\n throw new Error('Input 태그가 정의되지 않았습니다.');\r\n }\r\n }, []);\r\n\r\n return <>{cloneElement}</>;\r\n}\r\n","import { useCallback, useEffect } from 'react';\r\nexport type NxlOneProps = {\r\n bizCode: string;\r\n tmplCode: string;\r\n ncsrInfoUuid?: string;\r\n nlcCtfnId?: string;\r\n // TYPE\r\n t?: string;\r\n env?: 'dev' | 'stg' | 'prod';\r\n};\r\n\r\nexport type NxlOneResponse = {\r\n action?: 'error' | 'close' | 'complete';\r\n redirectUrl?: string;\r\n nlcCtfnId?: string;\r\n};\r\n\r\nconst url = (() => {\r\n const url = typeof window !== 'undefined' ? window.location.href : '';\r\n\r\n if (url.includes('localhost') || url.includes('dev')) {\r\n return 'https://nxl-nlc-dev.hanwhalife.com';\r\n } else if (url.includes('stg')) {\r\n return 'https://nxl-nlc-stg.hanwhalife.com';\r\n } else {\r\n return 'https://nxl-nlc.hanwhalife.com';\r\n }\r\n})();\r\n\r\ntype OpenOptionType = {\r\n popupWidth?: number;\r\n popupHeight?: number;\r\n popupLeft?: number;\r\n popupTop?: number;\r\n windowName?: string;\r\n};\r\n\r\nexport default function useNxlOne({ bizCode, tmplCode, ncsrInfoUuid, nlcCtfnId, t, env }: NxlOneProps) {\r\n const baseUrl =\r\n env === 'prod'\r\n ? 'https://nxl-nlc.hanwhalife.com'\r\n : env === 'stg'\r\n ? 'https://nxl-nlc-stg.hanwhalife.com'\r\n : env === 'dev'\r\n ? 'https://nxl-nlc-dev.hanwhalife.com'\r\n : undefined;\r\n\r\n const buildUrl = useCallback(() => {\r\n const targetUrl = new URL('/auth/v1', baseUrl || url);\r\n targetUrl.searchParams.set('bizCode', bizCode);\r\n targetUrl.searchParams.set('tmplCode', tmplCode);\r\n\r\n if (nlcCtfnId) {\r\n targetUrl.searchParams.set('nlcCtfnId', nlcCtfnId);\r\n }\r\n\r\n if (t) {\r\n targetUrl.searchParams.set('t', t);\r\n }\r\n\r\n if (ncsrInfoUuid) {\r\n targetUrl.searchParams.set('ncsrInfoUuid', ncsrInfoUuid);\r\n }\r\n\r\n return targetUrl.toString();\r\n }, [bizCode, tmplCode, t, ncsrInfoUuid, nlcCtfnId, baseUrl]);\r\n\r\n /**\r\n * NEXTLAB ONE 인증 페이지로 이동합니다.\r\n * 인증이 완료 후, 관리자 페이지에서 정의한 프로세스 완료 URL로 이동합니다.\r\n */\r\n const redirect = () => {\r\n const targetUrl = buildUrl();\r\n\r\n location.href = targetUrl;\r\n };\r\n\r\n /**\r\n * NEXTLAB ONE 인증 페이지를 팝업으로 엽니다.\r\n * @param options 팝업의 크기, 위치, 창 이름을 정의합니다.\r\n * @returns 완료 URL에 인증 ID가 Query String 이 함께 정의된 형태로 반환됩니다.\r\n *\r\n * @example\r\n * const { open } = useNxlOne();\r\n *\r\n * const handleClick = async () => {\r\n * try {\r\n * const result = await open({ popupWidth: 500, popupHeight: 500 });\r\n * console.log('이동 시킬 URL : ' + result);\r\n * } catch (e) {\r\n * console.error('팝업 프로세스 실패');\r\n * }\r\n * }\r\n *\r\n * @note 팝업은 반드시 사용자 이벤트 핸들러 내에서 직접 호출해야 브라우저 차단을 피할 수 있습니다.\r\n */\r\n const open = async (options?: OpenOptionType) => {\r\n return new Promise<NxlOneResponse>((resolve, reject) => {\r\n const targetUrl = buildUrl();\r\n\r\n const width = (options && options.popupWidth) || 744;\r\n const height = (options && options.popupHeight) || 720;\r\n\r\n const left = (options && options.popupLeft) || window.screenX + (window.outerWidth - width) / 2;\r\n const top = (options && options.popupTop) || window.screenX + (window.outerWidth - width) / 2;\r\n\r\n const popupFeatures = `width=${width},height=${height},left=${left},top=${top}`;\r\n const popup = window.open(targetUrl, (options && options.windowName) || 'self_cert', popupFeatures);\r\n\r\n if (!popup) {\r\n reject(new Error('차단되거나 열리지 않았습니다.'));\r\n\r\n return;\r\n }\r\n\r\n let isSettled = false;\r\n\r\n const handleMessage = (event: MessageEvent) => {\r\n if (event.origin !== new URL(targetUrl).origin) {\r\n return;\r\n }\r\n\r\n if (!isSettled) {\r\n isSettled = true;\r\n\r\n if (event.data) {\r\n resolve(event.data);\r\n } else {\r\n reject('인증이 취소되거나 실패했습니다.');\r\n }\r\n\r\n popup?.close();\r\n window.removeEventListener('message', handleMessage);\r\n }\r\n };\r\n\r\n window.addEventListener('message', handleMessage);\r\n });\r\n };\r\n\r\n const Iframe = function ({\r\n height = 720,\r\n className,\r\n style,\r\n allow,\r\n sandbox = 'allow-scripts allow-forms allow-same-origin',\r\n onSuccess,\r\n onError,\r\n onClose,\r\n strictOrigin = true\r\n }: {\r\n height?: number | string;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n allow?: string;\r\n sandbox?: string;\r\n onSuccess?: (response: NxlOneResponse) => void;\r\n onError?: (response: NxlOneResponse) => void;\r\n onClose: (response: NxlOneResponse) => void;\r\n strictOrigin?: boolean;\r\n }) {\r\n const targetUrl = buildUrl();\r\n\r\n useEffect(() => {\r\n if (!onSuccess && !onError) {\r\n return;\r\n }\r\n\r\n const handler = (e: MessageEvent) => {\r\n if (strictOrigin && e.origin !== url) {\r\n return;\r\n }\r\n\r\n const d = e.data as NxlOneResponse;\r\n if (d) {\r\n if (d.action === 'close') {\r\n onClose(d);\r\n\r\n return;\r\n } else if (onError && d.action === 'error') {\r\n onError(d);\r\n\r\n return;\r\n } else if (onSuccess && d.action === 'complete') {\r\n onSuccess(d);\r\n\r\n return;\r\n }\r\n } else if (onError) {\r\n onError({\r\n action: 'error',\r\n nlcCtfnId: '',\r\n redirectUrl: ''\r\n });\r\n }\r\n };\r\n\r\n window.addEventListener('message', handler as EventListener);\r\n\r\n return () => window.removeEventListener('message', handler as EventListener);\r\n }, [onClose, onError, onSuccess, strictOrigin]);\r\n\r\n return (\r\n <iframe\r\n src={targetUrl}\r\n width=\"100%\"\r\n height={typeof height === 'number' ? `${height}px` : height}\r\n style={{ border: 0, ...style }}\r\n className={className}\r\n sandbox={sandbox}\r\n {...(allow ? { allow } : {})}\r\n />\r\n );\r\n };\r\n\r\n return { redirect, open, Iframe };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/load-script.ts","../src/api/endpoint.ts","../src/v3.ts","../src/v3-provider.tsx","../src/libs/xkeyboard.ts","../src/types/keypad-message.enum.ts","../src/types/keypad-mode.enum.ts","../src/utils/uuid.ts","../src/hooks/use-keypad.ts","../src/components/Keypad.tsx","../src/hooks/use-nxl-one.tsx"],"names":["url","isClient","KeypadMessageTypeEnum","KeypadModeEnum","useState","useEffect","useCallback","React","jsx"],"mappings":"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","file":"index.js","sourcesContent":["export async function loadScript(url: string) {\r\n await new Promise((resolve, reject) => {\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.async = true;\r\n script.addEventListener('load', () => {\r\n resolve({ loaded: true, error: false });\r\n });\r\n\r\n script.addEventListener('error', () => {\r\n reject({\r\n loaded: false,\r\n error: true,\r\n message: '파일 로드에 실패하였습니다.'\r\n });\r\n });\r\n\r\n document.body.appendChild(script);\r\n });\r\n}\r\n","import { getEnvironmentFromHostname, getServiceCode, isClient } from 'sales-frontend-utils';\n\nexport const getServiceUrl = (serviceName: string) => {\n if (!isClient()) {\n return '';\n }\n\n const env = getEnvironmentFromHostname(location.hostname);\n\n switch (env) {\n case 'local':\n return `${getServiceCode()}/api/${serviceName}`;\n case 'dev':\n return `https://nxl-${serviceName}-dev.hanwhalife.com/api`;\n case 'stg':\n return `https://nxl-${serviceName}-stg.hanwhalife.com/api`;\n case 'prd':\n return `https://nxl-${serviceName}.hanwhalife.com/api`;\n default:\n return ``;\n }\n\n // return `https://nxl-${env !== 'prd' ? `${serviceName}-${env}` : serviceName}.hanwhalife.com`;\n};\n\nexport const API_ENDPOINTS = {\n GET_NXL_CODES: (codeId: string) => `${getServiceUrl('nlc')}/code/code-list/get?codeId=${codeId}&intgYn=N`,\n GET_NOTICE_SYSTEM: (code: string) => `${getServiceUrl('nlc')}/notice/system/${code}/get`,\n GET_NOTICE_INTEGRATED: (code: string) => `${getServiceUrl('nlc')}/notice/integrated/${code}/get`,\n GET_V3_LICENSE: (date: Date) => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const dateStr = `${year}-${month}-${day} ${hours}:${minutes}`;\n\n return `${getServiceUrl('nlm')}/v3/init?time=${dateStr}`;\n },\n INPUT_PREFILL_USER: `${getServiceUrl('nlc')}/user-ctfn/ncsr-info-inpt/post`\n} as const;\n","// import { getV3License } from '@nxl-kit/api';\r\nimport { getV3License } from './api/get-v3-license';\r\n\r\ndeclare global {\r\n interface Window {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n mpl_start?: (license?: any, time?: any, cryptoKeyVersion?: any, RootCheckTimeOut?: any) => void;\r\n\r\n /**\r\n * MPL의 상태를 반환하는 API\r\n * @returns\r\n * INITIAL - 동작중이지 않음\r\n * ALIVE - 동작중임\r\n * Undefined 네트워크 연결 문제\r\n */\r\n mpl_status?: () => 'INITAL' | 'ALIVE' | 'Undefined';\r\n\r\n mpl_load?: (tk?: string, cd?: string) => void;\r\n mpl_token?: () => string;\r\n mpl_enc_param?: () => string;\r\n mpl_stop?: () => void;\r\n }\r\n}\r\n\r\nconst isAndroid = (): boolean => {\r\n return /android/i.test(navigator.userAgent) && !/edge/i.test(navigator.userAgent);\r\n};\r\n\r\nconst startV3 = async () => {\r\n console.log('start v3');\r\n if (!isAndroid() || !window.mpl_start) {\r\n return;\r\n }\r\n\r\n window.mpl_stop?.();\r\n sessionStorage.removeItem('mtk');\r\n sessionStorage.removeItem('mcd');\r\n\r\n const v3Response = await getV3License({\r\n date: new Date()\r\n });\r\n\r\n console.log('getV3 License', v3Response);\r\n if (!v3Response) {\r\n return;\r\n }\r\n\r\n window.mpl_start(v3Response.data?.encLicense, v3Response.data?.time);\r\n\r\n setTimeout(() => {\r\n const mtk = window.mpl_token?.();\r\n const mcd = window.mpl_enc_param?.();\r\n\r\n if (mtk) {\r\n sessionStorage.setItem('mtk', mtk);\r\n }\r\n if (mcd) {\r\n sessionStorage.setItem('mcd', mcd);\r\n }\r\n }, 500);\r\n};\r\n\r\nconst loadV3 = () => {\r\n console.log('load v3');\r\n const mtk = sessionStorage.getItem('mtk') || window.mpl_token?.();\r\n const mcd = sessionStorage.getItem('mcd') || window.mpl_enc_param?.();\r\n\r\n if (mtk && mcd && window.mpl_load && mtk !== 'undefined' && mcd !== 'undefined') {\r\n window.mpl_load(mtk, mcd);\r\n }\r\n};\r\n\r\nconst checkV3Status = async (type: string) => {\r\n console.log('check v3 status');\r\n await new Promise((resolve) => setTimeout(resolve, 500));\r\n\r\n if (!isAndroid() || !window.mpl_status) {\r\n console.log('not android or no mpl_status');\r\n\r\n return true;\r\n }\r\n\r\n if (window.mpl_status() === 'ALIVE') {\r\n console.log('mpl status is alive');\r\n loadV3();\r\n\r\n return true;\r\n }\r\n\r\n console.log('v3 not alive');\r\n\r\n if (type === 'modal') {\r\n console.log('modal start v3');\r\n await startV3();\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const launchV3 = async () => {\r\n loadV3();\r\n\r\n return await checkV3Status('loader');\r\n};\r\n","import React, { createContext, useContext, useEffect, useState } from 'react';\r\n\r\nimport { loadScript } from './utils/load-script';\r\nimport { launchV3 } from './v3';\r\n\r\ninterface V3ContextType {\r\n isLoaded: boolean;\r\n launch: () => void;\r\n}\r\n\r\nconst V3Context = createContext<V3ContextType | undefined>(undefined);\r\n\r\nconst AhnlabV3JsUrl = 'https://mpl.ahnlab.com/js/mpl_webview_cm.js';\r\n\r\nexport const V3Provider = ({ children }: { children: React.ReactNode }) => {\r\n const [isLoaded, setIsLoaded] = useState<boolean>(false);\r\n\r\n useEffect(() => {\r\n const initialize = async () => {\r\n await loadScript(AhnlabV3JsUrl);\r\n setIsLoaded(true);\r\n };\r\n\r\n initialize();\r\n }, []);\r\n\r\n return <V3Context.Provider value={{ isLoaded, launch: launchV3 }}>{children}</V3Context.Provider>;\r\n};\r\n\r\nexport const useV3 = () => {\r\n const context = useContext(V3Context);\r\n\r\n if (!context) {\r\n throw new Error('V3Provider를 정의해주세요.');\r\n }\r\n\r\n return context;\r\n};\r\n","import { isClient } from 'sales-frontend-utils';\r\n\r\nimport { KeypadActionType } from '../types/keypad-action.type';\r\nimport { loadScript } from '../utils/load-script';\r\n\r\ntype ENV = 'dev' | 'stg' | 'prod';\r\n\r\nconst getPath = (service: string, env: ENV) =>\r\n `https://nxl-${env !== 'prod' ? `${service}-${env}` : service}.hanwhalife.com`;\r\n\r\nconst getEnv: () => ENV = () => {\r\n const host = window.location.hostname;\r\n\r\n // if (host.includes('-dev.') || host.includes('localhost')) {\r\n // return 'dev';\r\n // } else if (host.includes('-stg.')) {\r\n // return 'stg';\r\n // } else {\r\n // return 'prod';\r\n // }\r\n\r\n return 'stg';\r\n};\r\n\r\ninterface KeypadConfig {\r\n version: string;\r\n server: string;\r\n contextRoot: string;\r\n cssPath: string;\r\n logoImgPath: string;\r\n inputObjectBackgroundColor: string;\r\n inputObjectBorderStyle: string;\r\n invalidSessionErrorMessage: string;\r\n invalidSessionAutoRefresh: boolean;\r\n enableAccessibility: boolean;\r\n useCustomAlert: boolean;\r\n functionKeyButtonStyle: string;\r\n maxInputSize: number;\r\n textInputView: number;\r\n touchOption: number;\r\n}\r\n\r\nexport const XKeyboardMobileInstance = (() => {\r\n if (!isClient()) {\r\n return null;\r\n }\r\n\r\n const env = getEnv();\r\n\r\n const keypadServicePath = `${getPath('xkp', env)}/xkp/xkscriptservice`;\r\n const keypadContentsPath = `${getPath('nlc', env)}/cnts-files/xkeyboard`;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (window as any).XKConfigMobile = {\r\n version: '1.0.5.1',\r\n server: keypadServicePath,\r\n contextRoot: `${keypadContentsPath}/js`,\r\n cssPath: `${keypadContentsPath}/css/xkp_mobile.css`,\r\n logoImgPath: `${keypadContentsPath}/img/logo.png`,\r\n inputObjectBackgroundColor: '#E4E4E4',\r\n inputObjectBorderStyle: '1px solid #9E9E9E',\r\n invalidSessionErrorMessage: \"보안세션이 만료되었습니다.\\n'확인'을 누르면 키패드가 갱신 됩니다.\",\r\n invalidSessionAutoRefresh: true,\r\n enableAccessibility: true,\r\n useCustomAlert: false,\r\n functionKeyButtonStyle: 'text',\r\n maxInputSize: 56,\r\n textInputView: 0,\r\n touchOption: 0\r\n } as KeypadConfig;\r\n\r\n document.oncontextmenu = () => false;\r\n document.ondragstart = () => false;\r\n document.onselectstart = () => false;\r\n\r\n const headTag = document.head;\r\n const scriptsToLoad = ['xkeypad_mobile.js'];\r\n\r\n const urls = scriptsToLoad.map(\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (x) => `${(window as any).XKConfigMobile.contextRoot}/${x}`\r\n );\r\n\r\n Promise.all(urls.map((x) => loadScript(x))).then(() => {\r\n const existingLink = document.getElementById('xkStyle');\r\n\r\n if (existingLink?.parentNode) {\r\n existingLink.parentNode.removeChild(existingLink);\r\n }\r\n\r\n const linkElement = document.createElement('link');\r\n linkElement.id = 'xkStyle';\r\n linkElement.rel = 'stylesheet';\r\n linkElement.type = 'text/css';\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n linkElement.href = (window as any).XKConfigMobile.cssPath;\r\n\r\n headTag.appendChild(linkElement);\r\n });\r\n\r\n const keypads: { [key: string]: KeypadActionType | undefined } = {};\r\n\r\n const getKeypad = (name: string) => keypads[name];\r\n\r\n const setKeypad = (name: string, keypad: KeypadActionType) => {\r\n keypads[name] = keypad;\r\n\r\n return keypad;\r\n };\r\n\r\n const removeKeypad = (name: string) => {\r\n delete keypads[name];\r\n };\r\n\r\n const closeAll = () => {\r\n Object.keys(keypads).forEach((id) => {\r\n const keypad = keypads[id];\r\n if (keypad && keypad.isOpen()) {\r\n keypad.close();\r\n }\r\n });\r\n };\r\n\r\n const newKeypad = (name: string) => {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return setKeypad(name, new (window as any).XKModule());\r\n };\r\n\r\n return {\r\n keypads,\r\n getKeypad,\r\n setKeypad,\r\n newKeypad,\r\n removeKeypad,\r\n closeAll\r\n };\r\n})();\r\n","enum KeypadMessageTypeEnum {\r\n NotSupportDevice = -1,\r\n Already = -2\r\n}\r\n\r\nexport default KeypadMessageTypeEnum;\r\n","enum KeypadModeEnum {\r\n QWERTY_SMART = 'qwertysmart',\r\n NUMBER = 'number'\r\n}\r\n\r\nexport default KeypadModeEnum;","export const uuidv4 = (): string => {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = Math.random() * 16 || 0,\r\n v = c === 'x' ? r : (r && 0x3) || 0x8;\r\n\r\n return v.toString(16);\r\n });\r\n};\r\n","import { useCallback, useEffect, useState } from 'react';\r\n\r\nimport { XKeyboardMobileInstance } from '../libs/xkeyboard';\r\nimport KeypadMessageTypeEnum from '../types/keypad-message.enum';\r\nimport KeypadModeEnum from '../types/keypad-mode.enum';\r\nimport KeypadResponseType from '../types/keypad-response.type';\r\nimport { uuidv4 } from '../utils/uuid';\r\n\r\nexport default function useKeypad() {\r\n const [isShow, setIsShow] = useState<boolean>(false);\r\n\r\n const show = useCallback(\r\n (\r\n inputRef: HTMLInputElement,\r\n onInputChange: (length: number) => void,\r\n onKeypadClose: (res: KeypadResponseType) => void,\r\n keyType: KeypadModeEnum = KeypadModeEnum.QWERTY_SMART,\r\n maxLength: number,\r\n numberKeyRowCount: number\r\n ) => {\r\n const name = uuidv4();\r\n\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n let keypad = XKeyboardMobileInstance.getKeypad(name);\r\n if (!keypad) {\r\n keypad = XKeyboardMobileInstance.newKeypad(name);\r\n } else {\r\n keypad.refresh();\r\n }\r\n\r\n if (onInputChange && typeof onInputChange === 'function') {\r\n onInputChange(0);\r\n }\r\n\r\n const keyPadParam = {\r\n name: `xk-pad-${name}`,\r\n editBox: inputRef,\r\n keyType,\r\n width: 100,\r\n position: { top: 10, left: null },\r\n viewType: 'half',\r\n closeDelay: 0,\r\n autoKeyResize: true,\r\n isE2E: true,\r\n onlyMobile: false,\r\n hasPressEffect: true,\r\n maxLength,\r\n numberKeyRowCount,\r\n onInputChange: (newLength: number) => {\r\n if (onInputChange && typeof onInputChange === 'function') {\r\n onInputChange(newLength);\r\n }\r\n\r\n // 키패드가 존재하지 않을 경우, 종료\r\n if (!keypad) {\r\n return;\r\n }\r\n\r\n //키패드 입력 길이가 최대 입력 길이가 됐을 때 키패드 닫기\r\n if (\r\n keyPadParam.maxLength &&\r\n keyPadParam.maxLength > 0 &&\r\n newLength >= keyPadParam.maxLength &&\r\n keypad.isOpend()\r\n ) {\r\n keypad.close();\r\n setIsShow(false);\r\n\r\n return;\r\n }\r\n },\r\n onKeypadClose: () => {\r\n if (!keypad) {\r\n return;\r\n }\r\n\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n if (onKeypadClose && typeof onKeypadClose === 'function') {\r\n const sessionInfo = keypad.get_sessionInfo();\r\n let length = 0;\r\n if (sessionInfo.input && sessionInfo.input.indexOf(',') >= 0) {\r\n length = sessionInfo.input.split(',').length;\r\n }\r\n\r\n const res = {\r\n length,\r\n element: inputRef,\r\n sessionInfo: {\r\n input: sessionInfo.input,\r\n sessionId: sessionInfo.sessionId,\r\n secToken: sessionInfo.secToken\r\n },\r\n keyType,\r\n name\r\n };\r\n\r\n setIsShow(false);\r\n onKeypadClose(res);\r\n }\r\n\r\n XKeyboardMobileInstance.removeKeypad(name);\r\n\r\n if (!onKeypadClose) {\r\n throw new Error('not found onKeypadClose');\r\n }\r\n\r\n if (typeof onKeypadClose !== 'function') {\r\n throw new Error('not found onKeypadClose');\r\n }\r\n }\r\n };\r\n\r\n const aRet = keypad.initialize(keyPadParam);\r\n\r\n if (aRet === KeypadMessageTypeEnum.NotSupportDevice) {\r\n // 안내 메세지 세팅\r\n alert('지원하지 않는 기기 입니다.');\r\n\r\n return;\r\n } else if (aRet === KeypadMessageTypeEnum.Already) {\r\n // alert('이미 키패드가 실행 중입니다.');\r\n return;\r\n }\r\n\r\n setIsShow(true);\r\n },\r\n []\r\n );\r\n\r\n const getValue = (name: string) => {\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n const targetKeypad = XKeyboardMobileInstance.keypads[name];\r\n\r\n if (!targetKeypad) {\r\n return null;\r\n }\r\n\r\n return targetKeypad.get_sessionInfo();\r\n };\r\n\r\n /**\r\n * 활성화 되어있는 키패드 찾는다\r\n * @returns\r\n */\r\n const find = (name?: string) => {\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n if (name) {\r\n return XKeyboardMobileInstance.keypads[name];\r\n } else {\r\n // 키패드가 출력되어있으면, 확인하여 키패드를 닫는다.\r\n const keypadIds = Object.keys(XKeyboardMobileInstance.keypads);\r\n\r\n for (const keypadId of keypadIds) {\r\n const targetKeypad = XKeyboardMobileInstance.keypads[keypadId];\r\n\r\n if (targetKeypad && targetKeypad.isOpen()) {\r\n return targetKeypad;\r\n }\r\n }\r\n }\r\n };\r\n\r\n const isOpen = (name?: string) => {\r\n const targetKeypad = find(name);\r\n\r\n return !!targetKeypad;\r\n };\r\n\r\n const close = (name?: string) => {\r\n const targetKeypad = find(name);\r\n if (targetKeypad) {\r\n targetKeypad.close();\r\n setIsShow(false);\r\n }\r\n };\r\n\r\n const clear = (name?: string) => {\r\n const _xkmodule = find(name);\r\n if (_xkmodule) {\r\n _xkmodule.clear();\r\n setIsShow(false);\r\n }\r\n };\r\n\r\n const refresh = (name?: string) => {\r\n const targetKeypad = find(name);\r\n if (targetKeypad) {\r\n targetKeypad.refresh();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const handleMouseDown = (event: MouseEvent) => {\r\n if (!XKeyboardMobileInstance) {\r\n return;\r\n }\r\n\r\n const keypadAlertDivTag = document.querySelector('#xkalert');\r\n\r\n const keypadDivTag = keypadAlertDivTag?.parentElement;\r\n if (keypadDivTag && !keypadDivTag.contains(event.target as Node)) {\r\n XKeyboardMobileInstance.closeAll();\r\n setIsShow(false);\r\n }\r\n };\r\n document.addEventListener('mousedown', handleMouseDown);\r\n\r\n return () => {\r\n document.removeEventListener('mousedown', handleMouseDown);\r\n };\r\n }, []);\r\n\r\n return {\r\n show,\r\n close,\r\n clear,\r\n refresh,\r\n getValue,\r\n isOpen,\r\n find,\r\n isShow\r\n };\r\n}\r\n","import React, { useEffect, useRef, useState, useCallback } from 'react';\r\n\r\nimport useXKeypad from '../hooks/use-keypad';\r\nimport KeypadModeEnum from '../types/keypad-mode.enum';\r\nimport KeypadResponseType from '../types/keypad-response.type';\r\nimport KeypadSessionType from '../types/keypad-session.type';\r\nimport KeypadType from '../types/keypad.type';\r\n\r\ntype Props = {\r\n value: KeypadSessionType | null;\r\n inputElement: KeypadType;\r\n mode: KeypadModeEnum;\r\n onChange: (value: KeypadSessionType | null) => void;\r\n maxLength: number;\r\n};\r\n\r\nexport default function Keypad({ value, onChange, mode, maxLength, inputElement }: Props) {\r\n const { show, isShow } = useXKeypad();\r\n\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n const [maskedValue, setMaskedValue] = useState<string>('');\r\n\r\n const onCloseBack = useCallback(\r\n (res: KeypadResponseType) => {\r\n onChange(res.sessionInfo);\r\n },\r\n [onChange]\r\n );\r\n\r\n const onChangeBack = useCallback(\r\n (length: number) => {\r\n if (length === 0) {\r\n onChange(null);\r\n }\r\n setMaskedValue(''.padStart(length, '*'));\r\n },\r\n [onChange, setMaskedValue]\r\n );\r\n\r\n const handleKeypad = useCallback(() => {\r\n show(inputRef.current as HTMLInputElement, onChangeBack, onCloseBack, mode, maxLength, 3);\r\n }, [show, inputRef, onChangeBack, onCloseBack, mode, maxLength]);\r\n\r\n const enhancedOnClick = (existingClickHandler: () => void, newClickHandler: () => void) => {\r\n return () => {\r\n if (existingClickHandler) {\r\n existingClickHandler();\r\n }\r\n newClickHandler();\r\n };\r\n };\r\n\r\n const cloneElement = React.cloneElement(inputElement, {\r\n ref: inputRef,\r\n value: maskedValue,\r\n onClick: enhancedOnClick(inputElement.props.onClick, handleKeypad)\r\n // iskeypadactive: isShow\r\n });\r\n\r\n useEffect(() => {\r\n const length = value?.input && value.input.length > 0 ? value.input.split(',').length : 0;\r\n setMaskedValue(''.padStart(length, '*'));\r\n }, [value]);\r\n\r\n useEffect(() => {\r\n if (inputRef.current && !(inputRef.current instanceof HTMLInputElement)) {\r\n throw new Error('Input 태그가 정의되지 않았습니다.');\r\n }\r\n }, []);\r\n\r\n return <>{cloneElement}</>;\r\n}\r\n","import { useCallback, useEffect } from 'react';\r\nexport type NxlOneProps = {\r\n bizCode: string;\r\n tmplCode: string;\r\n ncsrInfoUuid?: string;\r\n nlcCtfnId?: string;\r\n // TYPE\r\n t?: string;\r\n env?: 'dev' | 'stg' | 'prod';\r\n};\r\n\r\nexport type NxlOneResponse = {\r\n action?: 'error' | 'close' | 'complete';\r\n redirectUrl?: string;\r\n nlcCtfnId?: string;\r\n};\r\n\r\nconst url = (() => {\r\n const url = typeof window !== 'undefined' ? window.location.href : '';\r\n\r\n if (url.includes('localhost') || url.includes('dev')) {\r\n return 'https://nxl-nlc-dev.hanwhalife.com';\r\n } else if (url.includes('stg')) {\r\n return 'https://nxl-nlc-stg.hanwhalife.com';\r\n } else {\r\n return 'https://nxl-nlc.hanwhalife.com';\r\n }\r\n})();\r\n\r\ntype OpenOptionType = {\r\n popupWidth?: number;\r\n popupHeight?: number;\r\n popupLeft?: number;\r\n popupTop?: number;\r\n windowName?: string;\r\n};\r\n\r\nexport default function useNxlOne({ bizCode, tmplCode, ncsrInfoUuid, nlcCtfnId, t, env }: NxlOneProps) {\r\n const baseUrl =\r\n env === 'prod'\r\n ? 'https://nxl-nlc.hanwhalife.com'\r\n : env === 'stg'\r\n ? 'https://nxl-nlc-stg.hanwhalife.com'\r\n : env === 'dev'\r\n ? 'https://nxl-nlc-dev.hanwhalife.com'\r\n : undefined;\r\n\r\n const buildUrl = useCallback(() => {\r\n const targetUrl = new URL('/auth/v1', baseUrl || url);\r\n targetUrl.searchParams.set('bizCode', bizCode);\r\n targetUrl.searchParams.set('tmplCode', tmplCode);\r\n\r\n if (nlcCtfnId) {\r\n targetUrl.searchParams.set('nlcCtfnId', nlcCtfnId);\r\n }\r\n\r\n if (t) {\r\n targetUrl.searchParams.set('t', t);\r\n }\r\n\r\n if (ncsrInfoUuid) {\r\n targetUrl.searchParams.set('ncsrInfoUuid', ncsrInfoUuid);\r\n }\r\n\r\n return targetUrl.toString();\r\n }, [bizCode, tmplCode, t, ncsrInfoUuid, nlcCtfnId, baseUrl]);\r\n\r\n /**\r\n * NEXTLAB ONE 인증 페이지로 이동합니다.\r\n * 인증이 완료 후, 관리자 페이지에서 정의한 프로세스 완료 URL로 이동합니다.\r\n */\r\n const redirect = () => {\r\n const targetUrl = buildUrl();\r\n\r\n location.href = targetUrl;\r\n };\r\n\r\n /**\r\n * NEXTLAB ONE 인증 페이지를 팝업으로 엽니다.\r\n * @param options 팝업의 크기, 위치, 창 이름을 정의합니다.\r\n * @returns 완료 URL에 인증 ID가 Query String 이 함께 정의된 형태로 반환됩니다.\r\n *\r\n * @example\r\n * const { open } = useNxlOne();\r\n *\r\n * const handleClick = async () => {\r\n * try {\r\n * const result = await open({ popupWidth: 500, popupHeight: 500 });\r\n * console.log('이동 시킬 URL : ' + result);\r\n * } catch (e) {\r\n * console.error('팝업 프로세스 실패');\r\n * }\r\n * }\r\n *\r\n * @note 팝업은 반드시 사용자 이벤트 핸들러 내에서 직접 호출해야 브라우저 차단을 피할 수 있습니다.\r\n */\r\n const open = async (options?: OpenOptionType) => {\r\n return new Promise<NxlOneResponse>((resolve, reject) => {\r\n const targetUrl = buildUrl();\r\n\r\n const width = (options && options.popupWidth) || 744;\r\n const height = (options && options.popupHeight) || 720;\r\n\r\n const left = (options && options.popupLeft) || window.screenX + (window.outerWidth - width) / 2;\r\n const top = (options && options.popupTop) || window.screenX + (window.outerWidth - width) / 2;\r\n\r\n const popupFeatures = `width=${width},height=${height},left=${left},top=${top}`;\r\n const popup = window.open(targetUrl, (options && options.windowName) || 'self_cert', popupFeatures);\r\n\r\n if (!popup) {\r\n reject(new Error('차단되거나 열리지 않았습니다.'));\r\n\r\n return;\r\n }\r\n\r\n let isSettled = false;\r\n\r\n const handleMessage = (event: MessageEvent) => {\r\n if (event.origin !== new URL(targetUrl).origin) {\r\n return;\r\n }\r\n\r\n if (!isSettled) {\r\n isSettled = true;\r\n\r\n if (event.data) {\r\n resolve(event.data);\r\n } else {\r\n reject('인증이 취소되거나 실패했습니다.');\r\n }\r\n\r\n popup?.close();\r\n window.removeEventListener('message', handleMessage);\r\n }\r\n };\r\n\r\n window.addEventListener('message', handleMessage);\r\n });\r\n };\r\n\r\n const Iframe = function ({\r\n height = 720,\r\n className,\r\n style,\r\n allow,\r\n sandbox = 'allow-scripts allow-forms allow-same-origin',\r\n onSuccess,\r\n onError,\r\n onClose,\r\n strictOrigin = true\r\n }: {\r\n height?: number | string;\r\n className?: string;\r\n style?: React.CSSProperties;\r\n allow?: string;\r\n sandbox?: string;\r\n onSuccess?: (response: NxlOneResponse) => void;\r\n onError?: (response: NxlOneResponse) => void;\r\n onClose: (response: NxlOneResponse) => void;\r\n strictOrigin?: boolean;\r\n }) {\r\n const targetUrl = buildUrl();\r\n\r\n useEffect(() => {\r\n if (!onSuccess && !onError) {\r\n return;\r\n }\r\n\r\n const handler = (e: MessageEvent) => {\r\n if (strictOrigin && e.origin !== url) {\r\n return;\r\n }\r\n\r\n const d = e.data as NxlOneResponse;\r\n if (d) {\r\n if (d.action === 'close') {\r\n onClose(d);\r\n\r\n return;\r\n } else if (onError && d.action === 'error') {\r\n onError(d);\r\n\r\n return;\r\n } else if (onSuccess && d.action === 'complete') {\r\n onSuccess(d);\r\n\r\n return;\r\n }\r\n } else if (onError) {\r\n onError({\r\n action: 'error',\r\n nlcCtfnId: '',\r\n redirectUrl: ''\r\n });\r\n }\r\n };\r\n\r\n window.addEventListener('message', handler as EventListener);\r\n\r\n return () => window.removeEventListener('message', handler as EventListener);\r\n }, [onClose, onError, onSuccess, strictOrigin]);\r\n\r\n return (\r\n <iframe\r\n src={targetUrl}\r\n width=\"100%\"\r\n height={typeof height === 'number' ? `${height}px` : height}\r\n style={{ border: 0, ...style }}\r\n className={className}\r\n sandbox={sandbox}\r\n {...(allow ? { allow } : {})}\r\n />\r\n );\r\n };\r\n\r\n return { redirect, open, Iframe };\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sales-frontend-solution",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.16",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"react-dom": ">=18.0.0"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"sales-frontend-utils": "0.0.
|
|
28
|
+
"sales-frontend-utils": "0.0.33"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/node": "^22.14.0",
|