sales-frontend-utils 0.0.13 โ 0.0.14
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 +106 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +22 -1
- package/dist/index.d.ts +22 -1
- package/dist/index.js +101 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -122,6 +122,10 @@ var getDspExecutionEnvironment = () => {
|
|
|
122
122
|
}
|
|
123
123
|
return "web";
|
|
124
124
|
};
|
|
125
|
+
var isWebView = () => {
|
|
126
|
+
const environment = getDspExecutionEnvironment();
|
|
127
|
+
return environment === "android-webview" || environment === "ios-webview";
|
|
128
|
+
};
|
|
125
129
|
var checkUserAgentDspApp = (userAgent) => {
|
|
126
130
|
return userAgent.toLowerCase().includes("sspapp");
|
|
127
131
|
};
|
|
@@ -334,6 +338,66 @@ var getCurrentBrowserVersion = () => {
|
|
|
334
338
|
}
|
|
335
339
|
return getBrowserVersion(navigator.userAgent);
|
|
336
340
|
};
|
|
341
|
+
var getOrCreateDeviceId = () => {
|
|
342
|
+
if (typeof window === "undefined") {
|
|
343
|
+
return "";
|
|
344
|
+
}
|
|
345
|
+
const STORAGE_KEY = "dsp_device_id";
|
|
346
|
+
let deviceId = localStorage.getItem(STORAGE_KEY);
|
|
347
|
+
if (!deviceId) {
|
|
348
|
+
const timestamp = Date.now().toString(36);
|
|
349
|
+
const random = Math.random().toString(36).substring(2, 15);
|
|
350
|
+
deviceId = `dsp-web-${timestamp}-${random}`;
|
|
351
|
+
try {
|
|
352
|
+
localStorage.setItem(STORAGE_KEY, deviceId);
|
|
353
|
+
} catch (error) {
|
|
354
|
+
console.warn("[DeviceId] localStorage \uC800\uC7A5 \uC2E4\uD328:", error);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return deviceId;
|
|
358
|
+
};
|
|
359
|
+
var getDeviceModel = () => {
|
|
360
|
+
if (!isClient()) {
|
|
361
|
+
return "";
|
|
362
|
+
}
|
|
363
|
+
const ua = navigator.userAgent;
|
|
364
|
+
if (/iPad/.test(ua)) {
|
|
365
|
+
return "iPad";
|
|
366
|
+
}
|
|
367
|
+
if (/iPhone/.test(ua)) {
|
|
368
|
+
return "iPhone";
|
|
369
|
+
}
|
|
370
|
+
if (/iPod/.test(ua)) {
|
|
371
|
+
return "iPod Touch";
|
|
372
|
+
}
|
|
373
|
+
if (/SM-[A-Z0-9]+/.test(ua)) {
|
|
374
|
+
const match = ua.match(/SM-[A-Z0-9]+/);
|
|
375
|
+
return match ? `Samsung ${match[0]}` : "Samsung";
|
|
376
|
+
}
|
|
377
|
+
if (/Pixel/.test(ua)) {
|
|
378
|
+
const match = ua.match(/Pixel [0-9]+[a-zA-Z]*/);
|
|
379
|
+
return match ? `Google ${match[0]}` : "Google Pixel";
|
|
380
|
+
}
|
|
381
|
+
if (/Mi\s|Redmi|POCO/.test(ua)) {
|
|
382
|
+
return "Xiaomi";
|
|
383
|
+
}
|
|
384
|
+
if (/HUAWEI/.test(ua)) {
|
|
385
|
+
return "Huawei";
|
|
386
|
+
}
|
|
387
|
+
if (/OnePlus/.test(ua)) {
|
|
388
|
+
return "OnePlus";
|
|
389
|
+
}
|
|
390
|
+
if (/Windows/.test(ua)) {
|
|
391
|
+
return "Windows PC";
|
|
392
|
+
}
|
|
393
|
+
if (/Mac OS X/.test(ua)) {
|
|
394
|
+
return "Mac";
|
|
395
|
+
}
|
|
396
|
+
if (/Linux/.test(ua)) {
|
|
397
|
+
return "Linux PC";
|
|
398
|
+
}
|
|
399
|
+
return "Unknown";
|
|
400
|
+
};
|
|
337
401
|
|
|
338
402
|
// src/utils/event-handler-utils.ts
|
|
339
403
|
var _MessageEventManager = class _MessageEventManager {
|
|
@@ -410,23 +474,63 @@ var convertTextToImg = ({
|
|
|
410
474
|
return canvas.toDataURL();
|
|
411
475
|
};
|
|
412
476
|
|
|
477
|
+
// src/utils/cookie-utils.ts
|
|
478
|
+
var getCookie = (name) => {
|
|
479
|
+
if (typeof document === "undefined") {
|
|
480
|
+
return "";
|
|
481
|
+
}
|
|
482
|
+
const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));
|
|
483
|
+
return match ? decodeURIComponent(match[2] || "") : "";
|
|
484
|
+
};
|
|
485
|
+
var setCookie = (name, value, options = {}) => {
|
|
486
|
+
if (typeof document === "undefined") {
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
489
|
+
let cookieString = `${name}=${encodeURIComponent(value)}`;
|
|
490
|
+
if (options.expires) {
|
|
491
|
+
let expiresDate;
|
|
492
|
+
if (typeof options.expires === "number") {
|
|
493
|
+
expiresDate = /* @__PURE__ */ new Date();
|
|
494
|
+
expiresDate.setDate(expiresDate.getDate() + options.expires);
|
|
495
|
+
} else {
|
|
496
|
+
expiresDate = options.expires;
|
|
497
|
+
}
|
|
498
|
+
cookieString += `; expires=${expiresDate.toUTCString()}`;
|
|
499
|
+
}
|
|
500
|
+
cookieString += `; path=${options.path || "/"}`;
|
|
501
|
+
if (options.domain) {
|
|
502
|
+
cookieString += `; domain=${options.domain}`;
|
|
503
|
+
}
|
|
504
|
+
if (options.secure) {
|
|
505
|
+
cookieString += "; secure";
|
|
506
|
+
}
|
|
507
|
+
document.cookie = cookieString;
|
|
508
|
+
};
|
|
509
|
+
var deleteCookie = (name, options = {}) => {
|
|
510
|
+
setCookie(name, "", { ...options, expires: -1 });
|
|
511
|
+
};
|
|
512
|
+
|
|
413
513
|
exports.MessageEventManager = MessageEventManager;
|
|
414
514
|
exports.checkUserAgentDspApp = checkUserAgentDspApp;
|
|
415
515
|
exports.convertTextToImg = convertTextToImg;
|
|
416
516
|
exports.debounce = debounce;
|
|
517
|
+
exports.deleteCookie = deleteCookie;
|
|
417
518
|
exports.getApiHostNameFromEnvironment = getApiHostNameFromEnvironment;
|
|
418
519
|
exports.getBrowserName = getBrowserName;
|
|
419
520
|
exports.getBrowserVersion = getBrowserVersion;
|
|
420
521
|
exports.getCdnHostNameFromEnvironment = getCdnHostNameFromEnvironment;
|
|
522
|
+
exports.getCookie = getCookie;
|
|
421
523
|
exports.getCurrentBrowserName = getCurrentBrowserName;
|
|
422
524
|
exports.getCurrentBrowserVersion = getCurrentBrowserVersion;
|
|
423
525
|
exports.getCurrentOSName = getCurrentOSName;
|
|
424
526
|
exports.getCurrentOSVersion = getCurrentOSVersion;
|
|
527
|
+
exports.getDeviceModel = getDeviceModel;
|
|
425
528
|
exports.getDspExecutionEnvironment = getDspExecutionEnvironment;
|
|
426
529
|
exports.getEnvironmentFromHostname = getEnvironmentFromHostname;
|
|
427
530
|
exports.getFormFactorFromUserAgent = getFormFactorFromUserAgent;
|
|
428
531
|
exports.getOSName = getOSName;
|
|
429
532
|
exports.getOSVersion = getOSVersion;
|
|
533
|
+
exports.getOrCreateDeviceId = getOrCreateDeviceId;
|
|
430
534
|
exports.getSubdomain = getSubdomain;
|
|
431
535
|
exports.isClient = isClient;
|
|
432
536
|
exports.isDspApp = isDspApp;
|
|
@@ -436,6 +540,8 @@ exports.isPhone = isPhone;
|
|
|
436
540
|
exports.isSalesPortal = isSalesPortal;
|
|
437
541
|
exports.isStorybookEnv = isStorybookEnv;
|
|
438
542
|
exports.isTablet = isTablet;
|
|
543
|
+
exports.isWebView = isWebView;
|
|
544
|
+
exports.setCookie = setCookie;
|
|
439
545
|
exports.throttle = throttle;
|
|
440
546
|
//# sourceMappingURL=index.cjs.map
|
|
441
547
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/timing-utils.ts","../src/utils/environment-utils.ts","../src/utils/user-agent-utils.ts","../src/utils/event-handler-utils.ts","../src/utils/canvas-utils.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * ์ฐ๋กํ\n * @param func\n * @param delay\n * @returns\n */\nexport function throttle<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let lastCall = 0;\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n const now = Date.now();\n\n if (now - lastCall >= delay) {\n // ๋ง์ง๋ง ํธ์ถ๋ก๋ถํฐ delay ์๊ฐ์ด ์ง๋ฌ์ผ๋ฉด ์ฆ์ ์คํ\n lastCall = now;\n func(...args);\n } else if (!timeout) {\n // ๋๊ธฐ ์ค์ธ ํ์ด๋จธ๊ฐ ์์ผ๋ฉด ์๋ก์ด ํ์ด๋จธ ์ค์ \n timeout = setTimeout(\n () => {\n lastCall = Date.now();\n func(...args);\n timeout = null;\n },\n delay - (now - lastCall)\n );\n }\n };\n}\n\n/**\n * ๋๋ฐ์ด์ค\n * @param func\n * @param delay\n * @returns\n */\nexport function debounce<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n func(...args);\n timeout = null;\n }, delay);\n };\n}\n","/**\n * ํธ์คํธ๋ช
์์ ์๋ธ๋๋ฉ์ธ์ ์ถ์ถํฉ๋๋ค.\n * @param hostname ํธ์คํธ๋ช
\n * @returns ์๋ธ๋๋ฉ์ธ (์: nxl-dsp-dev)\n */\nexport const getSubdomain = (hostname: string): string => {\n if (!hostname || hostname === 'localhost' || hostname === '127.0.0.1') {\n return '';\n }\n\n const parts = hostname.split('.');\n\n // ์ต์ 3๊ฐ ๋ถ๋ถ์ด ์์ด์ผ ์๋ธ๋๋ฉ์ธ ์กด์ฌ (subdomain.domain.com)\n if (parts.length < 3) {\n return '';\n }\n\n // ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ด ์๋ธ๋๋ฉ์ธ\n return parts[0] ?? '';\n};\n\n/**\n * ํธ์คํธ๋ช
์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ฒฝ์ ํ๋จํฉ๋๋ค.\n * @param hostname ํธ์คํธ๋ช
\n * @returns ํ๊ฒฝ ๊ตฌ๋ถ ๋ฌธ์์ด ('local' | 'dev' | 'stg' | 'prd')\n */\nexport const getEnvironmentFromHostname = (hostname: string): 'local' | 'dev' | 'stg' | 'prd' => {\n const subDomain = getSubdomain(hostname);\n\n // localhost ํ๋จ\n if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname.startsWith('localhost:')) {\n return 'local';\n }\n\n // dev ํ๊ฒฝ ํ๋จ\n if (subDomain.includes(`dev`)) {\n return 'dev';\n }\n\n // stg ํ๊ฒฝ ํ๋จ\n if (subDomain.includes('stg')) {\n return 'stg';\n }\n\n // ๊ธฐ๋ณธ ์ด์\n return 'prd';\n};\n\n/**\n * ํ๊ฒฝ์ ๋ง๋ API ํธ์คํธ๋ช
์ ๋ฐํํฉ๋๋ค.\n * ํธ์คํธ๋ช
์ ๊ฐ์ ํ๊ณ ์ถ์ผ๋ฉด ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ์ธ์.\n * @param currentHostname\n * @param forceApiHostName\n * @returns\n */\nexport const getApiHostNameFromEnvironment = (currentHostname: string, forceApiHostName?: string) => {\n if (forceApiHostName) {\n return forceApiHostName;\n }\n\n const environment = getEnvironmentFromHostname(currentHostname);\n\n if (environment === 'dev') {\n return 'https://nxl-dsp-dev.hanwhalife.com';\n }\n\n if (environment === 'local' || environment === 'stg') {\n return 'https://nxl-dsp-stg.hanwhalife.com';\n }\n\n // ๊ธฐ๋ณธ ์ด์\n return 'https://nxl-dsp.hanwhalife.com';\n};\n\n/**\n * ํ๊ฒฝ์ ๋ง๋ CDN ํธ์คํธ๋ช
์ ๋ฐํํฉ๋๋ค.\n * ํธ์คํธ๋ช
์ ๊ฐ์ ํ๊ณ ์ถ์ผ๋ฉด ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ์ธ์.\n * @param currentHostname\n * @param forceApiHostName\n * @returns\n */\nexport const getCdnHostNameFromEnvironment = (currentHostname: string, forceApiHostName?: string) => {\n if (!isClient()) {\n return '';\n }\n\n if (forceApiHostName) {\n return forceApiHostName;\n }\n\n const environment = getEnvironmentFromHostname(currentHostname);\n\n if (environment === 'local' || environment === 'dev') {\n return 'https://dev-dsp-static.hanwhalife.com';\n }\n\n if (environment === 'stg') {\n return 'https://stg-dsp-static.hanwhalife.com';\n }\n\n // ๊ธฐ๋ณธ ์ด์\n return 'https://dsp-static.hanwhalife.com';\n};\n\n/**\n * @see https://github.com/storybookjs/storybook/issues/32028#issuecomment-3298982086\n * @note ์คํ ๋ฆฌ๋ถ์์ ๋ฒ๊ทธ๋ก์ธํด window๊ฐ์ฒด๋ฅผ ์ ์์ ์ผ๋ก ํ์งํ์ง ๋ชปํ๋ ์ด์์ฐํ\n */\nexport const isClient = () => {\n try {\n return !!window;\n } catch {\n return false;\n }\n};\n\n// window.isStorybookEnv ์ ๊ทผ์ ์ํ ํ์
์บ์คํ
\ndeclare const window: Window & { isStorybookEnv?: boolean };\n/**\n * ํ์ฌ ์คํ ํ๊ฒฝ์ด Storybook์ธ์ง ํ์ธํ๋ ํจ์\n *\n * ์ฌ์ฉ ์ , `viteFinal` ์ค์ ์์ `window.isStorybookEnv`๋ฅผ `true`๋ก ์ ์ํด์ผ ์ ์ ๋์ํฉ๋๋ค.\n *\n * ์์:\n * ```ts\n * const config: StorybookConfig = {\n * viteFinal: (config) => {\n * // window.isStorybookEnv๋ฅผ true๋ก ์ค์ (boolean ๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋จ)\n * config.define = {\n * ...config.define,\n * 'window.isStorybookEnv': 'true',\n * };\n *\n * return config;\n * },\n * };\n * ```\n */\nexport const isStorybookEnv = () => {\n try {\n return window.isStorybookEnv === true;\n } catch {\n // window๊ฐ ์กด์ฌํ์ง ์๋ ๋ฑ ์์ธ ์ํฉ์์๋ false ๋ฐํ\n return false;\n }\n};\n","import { ExecutionEnvironment, OSName, BrowserName } from '../types/common.types';\n\nimport { isClient } from './environment-utils';\n/**\n * ํํ์๋ช
์์
์ง์ ์น ์คํ ํ๊ฒฝ ํ์ง\n * @returns\n */\nexport const getDspExecutionEnvironment = (): ExecutionEnvironment => {\n if (!isClient()) {\n return 'unknown';\n }\n\n if (window.n2Bridge) {\n return 'android-webview';\n }\n\n if (window.webkit) {\n return 'ios-webview';\n }\n\n if (window.self !== window.top) {\n return 'iframe';\n }\n\n return 'web';\n};\n\n/**\n * UserAgent์ SspApp ์ด ์๋์ง ๊ฒ์ฌ\n * ์์ผ๋ฉด, DSP ์ฑ\n * @param userAgent\n * @returns\n */\nexport const checkUserAgentDspApp = (userAgent: string) => {\n return userAgent.toLowerCase().includes('sspapp');\n};\n\n/**\n * ํํ์๋ช
์์
์ง์ ์น๋ทฐ ํ๊ฒฝ ์ฌ๋ถ ํ๋จ\n * @returns ์น๋ทฐ(Android/iOS) ํ๊ฒฝ์ด๋ฉด true, ์๋๋ฉด false\n */\nexport const isDspApp = (): boolean => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return (\n checkUserAgentDspApp(navigator.userAgent) && (environment === 'android-webview' || environment === 'ios-webview')\n );\n};\n\n/**\n * FP ํ๋๋ ์น๋ทฐ ํ๊ฒฝ ์ฌ๋ถ ํ๋จ\n * @returns\n */\nexport const isFpPlannerApp = (): boolean => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return (\n checkUserAgentDspApp(navigator.userAgent) === false &&\n (environment === 'android-webview' || environment === 'ios-webview')\n );\n};\n\n/**\n * ์์
ํฌํธ ํ๊ฒฝ ์ฌ๋ถ ํ๋จ\n * @returns\n */\nexport const isSalesPortal = () => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return environment === 'iframe';\n};\n\n/**\n * ํ๋ธ๋ฆฟ ์ฌ๋ถ ํ๋จ\n * @param userAgent\n * @returns\n */\nexport const isTablet = (userAgent: string): boolean => {\n const ua = userAgent.toLowerCase();\n\n return (\n // Apple ํ๋ธ๋ฆฟ\n ua.includes('ipad') ||\n // Android ํ๋ธ๋ฆฟ (Mobile ํค์๋ ์์)\n (ua.includes('android') && !ua.includes('mobile')) ||\n // ๋ช
์์ ํ๋ธ๋ฆฟ ํค์๋\n ua.includes('tablet') ||\n // Amazon ํ๋ธ๋ฆฟ\n ua.includes('kindle') ||\n ua.includes('silk') ||\n /kf[a-z]{2}wi|kftt/.test(ua) ||\n // BlackBerry ํ๋ธ๋ฆฟ\n ua.includes('playbook') ||\n // ์ผ์ฑ ๊ฐค๋ญ์ ํญ (๊ฐ์ ๋ ์ ๊ท์)\n /gt-p\\d{4}|sm-[tp]\\d{3}/.test(ua) ||\n // ๊ตฌ๊ธ ๋ฅ์์ค/ํฝ์
ํ๋ธ๋ฆฟ\n /nexus (?:[789]|10)|pixel [cs]|pixel slate/.test(ua) ||\n // ๊ธฐํ ๋ธ๋๋ ํ๋ธ๋ฆฟ\n /xoom|transformer|mediapad|mipad|tab\\s/.test(ua) ||\n // Windows ํ๋ธ๋ฆฟ (๊ฐ์ ๋ ์กฐ๊ฑด)\n (ua.includes('windows') && (ua.includes('touch') || ua.includes('tablet'))) ||\n ua.includes('surface')\n );\n};\n\n/**\n * ์ค๋งํธํฐ ์ฌ๋ถ ํ๋จ\n * @param userAgent\n * @returns\n */\nexport const isPhone = (userAgent: string): boolean => {\n const ua = userAgent.toLowerCase();\n\n return (\n // Apple ๋ชจ๋ฐ์ผ\n ua.includes('iphone') ||\n ua.includes('ipod') ||\n // Android ์ค๋งํธํฐ (Mobile ํค์๋ ์์)\n (ua.includes('android') && ua.includes('mobile')) ||\n // BlackBerry\n ua.includes('blackberry') ||\n ua.includes('bb10') ||\n // Windows Mobile\n ua.includes('windows phone') ||\n ua.includes('windows mobile') ||\n ua.includes('iemobile') ||\n // Opera Mobile\n ua.includes('opera mini') ||\n ua.includes('opera mobi') ||\n // ๊ธฐํ ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ \n (ua.includes('mobile') &&\n (ua.includes('firefox') || ua.includes('chrome') || ua.includes('safari') || ua.includes('edge'))) ||\n // ๋ชจ๋ฐ์ผ ํค์๋ (ํ๋ธ๋ฆฟ ์ ์ธ)\n (ua.includes('mobile') && !ua.includes('tablet')) ||\n // ์ผ์ฑ ๊ฐค๋ญ์ ํฐ (๊ฐ์ )\n /sm-[a-z]\\d{3}[a-z]?|gt-[a-z]\\d{4}/.test(ua) ||\n // LG, HTC ํฐ\n /lg-[a-z]\\d{3,4}|htc[_\\s]/.test(ua) ||\n // ํ์จ์ด/์ค์ค๋ฏธ ๋ฑ (๊ฐ์ )\n /huawei|honor|redmi|mi[\\s\\d]|oneplus|oppo|vivo/.test(ua)\n );\n};\n\n/**\n * ๋ฐ์คํฌํฑ ์ฌ๋ถ ํ๋จ\n * @param userAgent\n * @returns\n */\nexport const isPc = (userAgent: string) => {\n const ua = userAgent.toLowerCase();\n\n return !isPhone(ua) && !isTablet(ua);\n};\n\n/**\n * UserAgent์์ ๊ธฐ๊ธฐ ํ์
๊ตฌ๋ถ\n * @param userAgent\n * @returns\n */\nexport const getFormFactorFromUserAgent = (userAgent: string) => {\n if (!userAgent) {\n return 'pc';\n }\n\n const ua = userAgent.toLowerCase();\n\n if (isTablet(ua)) {\n return 'tablet';\n }\n\n if (isPhone(ua)) {\n return 'phone';\n }\n\n return 'pc';\n};\n\n/**\n * UserAgent์์ ์ด์์ฒด์ ์ด๋ฆ์ ์ถ์ถ\n * @param userAgent - ๋ธ๋ผ์ฐ์ ์ userAgent ๋ฌธ์์ด\n * @returns ์ด์์ฒด์ ์ด๋ฆ\n */\nexport const getOSName = (userAgent: string): OSName => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // iOS ์ฒดํฌ (iPhone, iPad, iPod)\n if (/iphone|ipad|ipod/.test(ua)) {\n return 'ios';\n }\n\n // Android ์ฒดํฌ\n if (ua.includes('android')) {\n return 'android';\n }\n\n // Windows ์ฒดํฌ\n if (ua.includes('windows') || ua.includes('win32') || ua.includes('win64')) {\n return 'windows';\n }\n\n // macOS ์ฒดํฌ (Mac OS X, macOS)\n if (ua.includes('mac os x') || ua.includes('macos') || ua.includes('macintosh')) {\n return 'mac';\n }\n\n // Linux ์ฒดํฌ (Android ์ ์ธ)\n if (ua.includes('linux') && !ua.includes('android')) {\n return 'linux';\n }\n\n return 'unknown';\n};\n\n/**\n * ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์ด์์ฒด์ ์ด๋ฆ์ ๊ฐ์ ธ์ค๊ธฐ\n * @returns ํ์ฌ ํ๊ฒฝ์ ์ด์์ฒด์ ์ด๋ฆ\n */\nexport const getCurrentOSName = (): OSName => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getOSName(navigator.userAgent);\n};\n\n/**\n * UserAgent์์ OS ๋ฒ์ ์ ์ถ์ถ\n * @param userAgent - ๋ธ๋ผ์ฐ์ ์ userAgent ๋ฌธ์์ด\n * @returns OS ๋ฒ์ ๋ฌธ์์ด\n */\nexport const getOSVersion = (userAgent: string): string => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // iOS ๋ฒ์ (iPhone OS 15_0, iPad OS 15_0)\n const iosMatch = ua.match(/os (\\d+)_(\\d+)(?:_(\\d+))?/);\n if (iosMatch && iosMatch.length >= 3) {\n const major = iosMatch[1];\n const minor = iosMatch[2];\n const patch = iosMatch[3];\n\n return patch ? `${major}.${minor}.${patch}` : `${major}.${minor}`;\n }\n\n // Android ๋ฒ์ \n const androidMatch = ua.match(/android (\\d+(?:\\.\\d+)*)/);\n if (androidMatch && androidMatch[1]) {\n return androidMatch[1];\n }\n\n // Windows ๋ฒ์ \n const windowsMatch = ua.match(/windows nt (\\d+\\.\\d+)/);\n if (windowsMatch && windowsMatch[1]) {\n const version = windowsMatch[1];\n // Windows NT ๋ฒ์ ์ ์ค์ Windows ๋ฒ์ ์ผ๋ก ๋งคํ\n const windowsVersionMap: Record<string, string> = {\n '10.0': '10/11',\n '6.3': '8.1',\n '6.2': '8',\n '6.1': '7',\n '6.0': 'Vista',\n '5.1': 'XP'\n };\n\n return windowsVersionMap[version] || version;\n }\n\n // macOS ๋ฒ์ \n const macMatch = ua.match(/mac os x (\\d+)_(\\d+)(?:_(\\d+))?/);\n if (macMatch && macMatch.length >= 3) {\n const major = macMatch[1];\n const minor = macMatch[2];\n const patch = macMatch[3];\n\n return patch ? `${major}.${minor}.${patch}` : `${major}.${minor}`;\n }\n\n return 'unknown';\n};\n\n/**\n * UserAgent์์ ๋ธ๋ผ์ฐ์ ์ด๋ฆ์ ์ถ์ถ\n * @param userAgent - ๋ธ๋ผ์ฐ์ ์ userAgent ๋ฌธ์์ด\n * @returns ๋ธ๋ผ์ฐ์ ์ด๋ฆ\n */\nexport const getBrowserName = (userAgent: string): BrowserName => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // Edge (Chromium ๊ธฐ๋ฐ) - Chrome๋ณด๋ค ๋จผ์ ์ฒดํฌํด์ผ ํจ\n if (ua.includes('edg/') || ua.includes('edge/')) {\n return 'edge';\n }\n\n // Samsung Internet\n if (ua.includes('samsungbrowser')) {\n return 'samsung';\n }\n\n // Opera - Chrome๋ณด๋ค ๋จผ์ ์ฒดํฌํด์ผ ํจ\n if (ua.includes('opr/') || ua.includes('opera')) {\n return 'opera';\n }\n\n // Chrome (Chromium ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ ๋ค๋ณด๋ค ๋ฆ๊ฒ ์ฒดํฌ)\n if (ua.includes('chrome') && !ua.includes('edg')) {\n return 'chrome';\n }\n\n // Firefox\n if (ua.includes('firefox')) {\n return 'firefox';\n }\n\n // Safari (Chrome์ ๊ตฌ๋ถํ๊ธฐ ์ํด webkit ์ฒดํฌ)\n if (ua.includes('safari') && !ua.includes('chrome')) {\n return 'safari';\n }\n\n return 'unknown';\n};\n\n/**\n * UserAgent์์ ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ ์ถ์ถ\n * @param userAgent - ๋ธ๋ผ์ฐ์ ์ userAgent ๋ฌธ์์ด\n * @returns ๋ธ๋ผ์ฐ์ ๋ฒ์ \n */\nexport const getBrowserVersion = (userAgent: string): string => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // Edge (Chromium)\n const edgMatch = ua.match(/edg\\/(\\d+(?:\\.\\d+)*)/);\n if (edgMatch && edgMatch[1]) {\n return edgMatch[1];\n }\n\n // Samsung Internet\n const samsungMatch = ua.match(/samsungbrowser\\/(\\d+(?:\\.\\d+)*)/);\n if (samsungMatch && samsungMatch[1]) {\n return samsungMatch[1];\n }\n\n // Opera\n const operaMatch = ua.match(/(?:opr|opera)\\/(\\d+(?:\\.\\d+)*)/);\n if (operaMatch && operaMatch[1]) {\n return operaMatch[1];\n }\n\n // Chrome\n const chromeMatch = ua.match(/chrome\\/(\\d+(?:\\.\\d+)*)/);\n if (chromeMatch && chromeMatch[1] && !ua.includes('edg')) {\n return chromeMatch[1];\n }\n\n // Firefox\n const firefoxMatch = ua.match(/firefox\\/(\\d+(?:\\.\\d+)*)/);\n if (firefoxMatch && firefoxMatch[1]) {\n return firefoxMatch[1];\n }\n\n // Safari\n const safariMatch = ua.match(/version\\/(\\d+(?:\\.\\d+)*)/);\n if (safariMatch && safariMatch[1] && ua.includes('safari') && !ua.includes('chrome')) {\n return safariMatch[1];\n }\n\n return 'unknown';\n};\n/**\n * ํ์ฌ ๋ธ๋ผ์ฐ์ ์ OS ๋ฒ์ ์ ๊ฐ์ ธ์ค๊ธฐ\n * @returns ํ์ฌ ํ๊ฒฝ์ OS ๋ฒ์ \n */\nexport const getCurrentOSVersion = (): string => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getOSVersion(navigator.userAgent);\n};\n\n/**\n * ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์ด๋ฆ์ ๊ฐ์ ธ์ค๊ธฐ\n * @returns ํ์ฌ ํ๊ฒฝ์ ๋ธ๋ผ์ฐ์ ์ด๋ฆ\n */\nexport const getCurrentBrowserName = (): BrowserName => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getBrowserName(navigator.userAgent);\n};\n\n/**\n * ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ๋ฒ์ ์ ๊ฐ์ ธ์ค๊ธฐ\n * @returns ํ์ฌ ํ๊ฒฝ์ ๋ธ๋ผ์ฐ์ ๋ฒ์ \n */\nexport const getCurrentBrowserVersion = (): string => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getBrowserVersion(navigator.userAgent);\n};\n","/**\n * Message ์ด๋ฒคํธ ํจ๋ค๋ฌ๋ฅผ ๊ด๋ฆฌํ๋ ํด๋์ค์
๋๋ค. (์ฑ๊ธํด)\n * ๋ชจ๋ message ํธ๋ค๋ฌ๋ ์ฌ๊ธฐ๋ฅผ ํตํด ๋ฑ๋กํด์ผํฉ๋๋ค.\n * window.addEventListener('message') ์ ์ค๋ณต์ ๋ฐฉ์งํ๊ธฐ ์ํจ์
๋๋ค.\n */\nexport class MessageEventManager {\n private static instance: MessageEventManager;\n private handlers = new Map<string, (event: MessageEvent) => void>();\n\n static getInstance(): MessageEventManager {\n if (!MessageEventManager.instance) {\n MessageEventManager.instance = new MessageEventManager();\n }\n\n return MessageEventManager.instance;\n }\n\n private constructor() {\n window.addEventListener('message', this.handleMessage.bind(this));\n }\n\n /**\n *\n * @param event\n */\n private handleMessage(event: MessageEvent): void {\n // ๋ชจ๋ ๋ฑ๋ก๋ ํธ๋ค๋ฌ ์คํ\n for (const [key, handler] of this.handlers) {\n try {\n handler(event);\n } catch (error) {\n console.error(`Message handler ${key} error:`, error);\n }\n }\n }\n\n /**\n * ์ด๋ฒคํธ ํจ๋ค๋ฌ ํจ์๋ฅผ ๋ฑ๋กํฉ๋๋ค.\n * @param key\n * @param handler\n */\n registerHandler(key: string, handler: (event: MessageEvent) => void): void {\n this.handlers.set(key, handler);\n }\n\n /**\n * ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ ์ญ์ ํฉ๋๋ค.\n * @param key\n */\n unregisterHandler(key: string): void {\n this.handlers.delete(key);\n }\n}\n","interface ConvertTextToImgParams {\n /** ์ด๋ฏธ์ง๋ก ๋ณํํ ๋ฌธ์์ด */\n targetStr: string;\n /** ์บ๋ฒ์ค ๋๋น (์ง์ ํ์ง ์์ผ๋ฉด ํ
์คํธ ๊ธธ์ด์ ๋ฐ๋ผ ์๋ ๊ณ์ฐ) */\n canvasWidth?: number;\n /** ์บ๋ฒ์ค ๋์ด (์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ 150px) */\n canvasHeight?: number;\n /** ๋ฐฐ๊ฒฝ์ (์ง์ ํ์ง ์์ผ๋ฉด ํฌ๋ช
) */\n backgroundColor?: string;\n /** ํฐํธ ํฌ๊ธฐ (์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ 75px) */\n fontSize?: number;\n /** ํฐํธ ์์ (์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ ๊ฒ์ ์) */\n fontColor?: string;\n /** ํฐํธ ๋๊ป (์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ bold) */\n fontWeight?: string;\n}\n\n/**\n * ํ
์คํธ๋ฅผ ์ด๋ฏธ์ง(Base64)๋ก ๋ณํํ๋ ํจ์\n * @param params - ๋ณํ์ ํ์ํ ํ๋ผ๋ฏธํฐ ๊ฐ์ฒด\n * @returns Base64๋ก ์ธ์ฝ๋ฉ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ URL\n */\nexport const convertTextToImg = ({\n targetStr,\n canvasWidth,\n canvasHeight,\n backgroundColor,\n fontColor,\n fontSize,\n fontWeight\n}: ConvertTextToImgParams): string => {\n // 1. ๋ฉ๋ชจ๋ฆฌ์ ์บ๋ฒ์ค ์์ ์์ฑ\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n // ์บ๋ฒ์ค ์ปจํ
์คํธ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ ๊ฒฝ์ฐ ์๋ฌ ์ฒ๋ฆฌ\n throw new Error('Canvas context๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.');\n }\n\n // 2. ์บ๋ฒ์ค ํฌ๊ธฐ ์ค์ \n const defaultHeight = 150;\n const calculatedWidth = targetStr.length * 70; // ๊ธ์ ์ ๊ธฐ๋ฐ ๋๋น ๊ณ์ฐ\n\n canvas.width = canvasWidth ?? calculatedWidth;\n canvas.height = canvasHeight ?? defaultHeight;\n\n // 3. ๋ฐฐ๊ฒฝ์ ์ฒ๋ฆฌ\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n\n // 4. ํ
์คํธ ๊ทธ๋ฆฌ๊ธฐ\n ctx.fillStyle = fontColor ?? 'black';\n ctx.font = `${fontSize ?? 75}px ${fontWeight ?? 'bold'}`;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle'; // ํ
์คํธ๋ฅผ ์์ง ์ค์์ ๋ ์ ๋ง์ถ๊ธฐ ์ํด ์ถ๊ฐ\n\n // ํ
์คํธ๋ฅผ ์บ๋ฒ์ค ์ค์์ ๊ทธ๋ฆฝ๋๋ค.\n ctx.fillText(targetStr, canvas.width / 2, canvas.height / 2);\n\n // 5. Base64 ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ก ๋ณํํ์ฌ ๋ฐํ\n return canvas.toDataURL(); // ๊ธฐ๋ณธ์ ์ผ๋ก 'image/png'\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/timing-utils.ts","../src/utils/environment-utils.ts","../src/utils/user-agent-utils.ts","../src/utils/event-handler-utils.ts","../src/utils/canvas-utils.ts","../src/utils/cookie-utils.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * ์ฐ๋กํ\n * @param func\n * @param delay\n * @returns\n */\nexport function throttle<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let lastCall = 0;\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n const now = Date.now();\n\n if (now - lastCall >= delay) {\n // ๋ง์ง๋ง ํธ์ถ๋ก๋ถํฐ delay ์๊ฐ์ด ์ง๋ฌ์ผ๋ฉด ์ฆ์ ์คํ\n lastCall = now;\n func(...args);\n } else if (!timeout) {\n // ๋๊ธฐ ์ค์ธ ํ์ด๋จธ๊ฐ ์์ผ๋ฉด ์๋ก์ด ํ์ด๋จธ ์ค์ \n timeout = setTimeout(\n () => {\n lastCall = Date.now();\n func(...args);\n timeout = null;\n },\n delay - (now - lastCall)\n );\n }\n };\n}\n\n/**\n * ๋๋ฐ์ด์ค\n * @param func\n * @param delay\n * @returns\n */\nexport function debounce<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n func(...args);\n timeout = null;\n }, delay);\n };\n}\n","/**\n * ํธ์คํธ๋ช
์์ ์๋ธ๋๋ฉ์ธ์ ์ถ์ถํฉ๋๋ค.\n * @param hostname ํธ์คํธ๋ช
\n * @returns ์๋ธ๋๋ฉ์ธ (์: nxl-dsp-dev)\n */\nexport const getSubdomain = (hostname: string): string => {\n if (!hostname || hostname === 'localhost' || hostname === '127.0.0.1') {\n return '';\n }\n\n const parts = hostname.split('.');\n\n // ์ต์ 3๊ฐ ๋ถ๋ถ์ด ์์ด์ผ ์๋ธ๋๋ฉ์ธ ์กด์ฌ (subdomain.domain.com)\n if (parts.length < 3) {\n return '';\n }\n\n // ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ด ์๋ธ๋๋ฉ์ธ\n return parts[0] ?? '';\n};\n\n/**\n * ํธ์คํธ๋ช
์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ฒฝ์ ํ๋จํฉ๋๋ค.\n * @param hostname ํธ์คํธ๋ช
\n * @returns ํ๊ฒฝ ๊ตฌ๋ถ ๋ฌธ์์ด ('local' | 'dev' | 'stg' | 'prd')\n */\nexport const getEnvironmentFromHostname = (hostname: string): 'local' | 'dev' | 'stg' | 'prd' => {\n const subDomain = getSubdomain(hostname);\n\n // localhost ํ๋จ\n if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname.startsWith('localhost:')) {\n return 'local';\n }\n\n // dev ํ๊ฒฝ ํ๋จ\n if (subDomain.includes(`dev`)) {\n return 'dev';\n }\n\n // stg ํ๊ฒฝ ํ๋จ\n if (subDomain.includes('stg')) {\n return 'stg';\n }\n\n // ๊ธฐ๋ณธ ์ด์\n return 'prd';\n};\n\n/**\n * ํ๊ฒฝ์ ๋ง๋ API ํธ์คํธ๋ช
์ ๋ฐํํฉ๋๋ค.\n * ํธ์คํธ๋ช
์ ๊ฐ์ ํ๊ณ ์ถ์ผ๋ฉด ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ์ธ์.\n * @param currentHostname\n * @param forceApiHostName\n * @returns\n */\nexport const getApiHostNameFromEnvironment = (currentHostname: string, forceApiHostName?: string) => {\n if (forceApiHostName) {\n return forceApiHostName;\n }\n\n const environment = getEnvironmentFromHostname(currentHostname);\n\n if (environment === 'dev') {\n return 'https://nxl-dsp-dev.hanwhalife.com';\n }\n\n if (environment === 'local' || environment === 'stg') {\n return 'https://nxl-dsp-stg.hanwhalife.com';\n }\n\n // ๊ธฐ๋ณธ ์ด์\n return 'https://nxl-dsp.hanwhalife.com';\n};\n\n/**\n * ํ๊ฒฝ์ ๋ง๋ CDN ํธ์คํธ๋ช
์ ๋ฐํํฉ๋๋ค.\n * ํธ์คํธ๋ช
์ ๊ฐ์ ํ๊ณ ์ถ์ผ๋ฉด ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ์ธ์.\n * @param currentHostname\n * @param forceApiHostName\n * @returns\n */\nexport const getCdnHostNameFromEnvironment = (currentHostname: string, forceApiHostName?: string) => {\n if (!isClient()) {\n return '';\n }\n\n if (forceApiHostName) {\n return forceApiHostName;\n }\n\n const environment = getEnvironmentFromHostname(currentHostname);\n\n if (environment === 'local' || environment === 'dev') {\n return 'https://dev-dsp-static.hanwhalife.com';\n }\n\n if (environment === 'stg') {\n return 'https://stg-dsp-static.hanwhalife.com';\n }\n\n // ๊ธฐ๋ณธ ์ด์\n return 'https://dsp-static.hanwhalife.com';\n};\n\n/**\n * @see https://github.com/storybookjs/storybook/issues/32028#issuecomment-3298982086\n * @note ์คํ ๋ฆฌ๋ถ์์ ๋ฒ๊ทธ๋ก์ธํด window๊ฐ์ฒด๋ฅผ ์ ์์ ์ผ๋ก ํ์งํ์ง ๋ชปํ๋ ์ด์์ฐํ\n */\nexport const isClient = () => {\n try {\n return !!window;\n } catch {\n return false;\n }\n};\n\n// window.isStorybookEnv ์ ๊ทผ์ ์ํ ํ์
์บ์คํ
\ndeclare const window: Window & { isStorybookEnv?: boolean };\n/**\n * ํ์ฌ ์คํ ํ๊ฒฝ์ด Storybook์ธ์ง ํ์ธํ๋ ํจ์\n *\n * ์ฌ์ฉ ์ , `viteFinal` ์ค์ ์์ `window.isStorybookEnv`๋ฅผ `true`๋ก ์ ์ํด์ผ ์ ์ ๋์ํฉ๋๋ค.\n *\n * ์์:\n * ```ts\n * const config: StorybookConfig = {\n * viteFinal: (config) => {\n * // window.isStorybookEnv๋ฅผ true๋ก ์ค์ (boolean ๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋จ)\n * config.define = {\n * ...config.define,\n * 'window.isStorybookEnv': 'true',\n * };\n *\n * return config;\n * },\n * };\n * ```\n */\nexport const isStorybookEnv = () => {\n try {\n return window.isStorybookEnv === true;\n } catch {\n // window๊ฐ ์กด์ฌํ์ง ์๋ ๋ฑ ์์ธ ์ํฉ์์๋ false ๋ฐํ\n return false;\n }\n};\n","import { ExecutionEnvironment, OSName, BrowserName } from '../types/common.types';\n\nimport { isClient } from './environment-utils';\n/**\n * ํํ์๋ช
์์
์ง์ ์น ์คํ ํ๊ฒฝ ํ์ง\n * @returns\n */\nexport const getDspExecutionEnvironment = (): ExecutionEnvironment => {\n if (!isClient()) {\n return 'unknown';\n }\n\n if (window.n2Bridge) {\n return 'android-webview';\n }\n\n if (window.webkit) {\n return 'ios-webview';\n }\n\n if (window.self !== window.top) {\n return 'iframe';\n }\n\n return 'web';\n};\n\n// DSP, FP Planner\nexport const isWebView = () => {\n const environment = getDspExecutionEnvironment();\n\n return environment === 'android-webview' || environment === 'ios-webview';\n};\n\n/**\n * UserAgent์ SspApp ์ด ์๋์ง ๊ฒ์ฌ\n * ์์ผ๋ฉด, DSP ์ฑ\n * @param userAgent\n * @returns\n */\nexport const checkUserAgentDspApp = (userAgent: string) => {\n return userAgent.toLowerCase().includes('sspapp');\n};\n\n/**\n * ํํ์๋ช
์์
์ง์ ์น๋ทฐ ํ๊ฒฝ ์ฌ๋ถ ํ๋จ\n * @returns ์น๋ทฐ(Android/iOS) ํ๊ฒฝ์ด๋ฉด true, ์๋๋ฉด false\n */\nexport const isDspApp = (): boolean => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return (\n checkUserAgentDspApp(navigator.userAgent) && (environment === 'android-webview' || environment === 'ios-webview')\n );\n};\n\n/**\n * FP ํ๋๋ ์น๋ทฐ ํ๊ฒฝ ์ฌ๋ถ ํ๋จ\n * @returns\n */\nexport const isFpPlannerApp = (): boolean => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return (\n checkUserAgentDspApp(navigator.userAgent) === false &&\n (environment === 'android-webview' || environment === 'ios-webview')\n );\n};\n\n/**\n * ์์
ํฌํธ ํ๊ฒฝ ์ฌ๋ถ ํ๋จ\n * @returns\n */\nexport const isSalesPortal = () => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return environment === 'iframe';\n};\n\n/**\n * ํ๋ธ๋ฆฟ ์ฌ๋ถ ํ๋จ\n * @param userAgent\n * @returns\n */\nexport const isTablet = (userAgent: string): boolean => {\n const ua = userAgent.toLowerCase();\n\n return (\n // Apple ํ๋ธ๋ฆฟ\n ua.includes('ipad') ||\n // Android ํ๋ธ๋ฆฟ (Mobile ํค์๋ ์์)\n (ua.includes('android') && !ua.includes('mobile')) ||\n // ๋ช
์์ ํ๋ธ๋ฆฟ ํค์๋\n ua.includes('tablet') ||\n // Amazon ํ๋ธ๋ฆฟ\n ua.includes('kindle') ||\n ua.includes('silk') ||\n /kf[a-z]{2}wi|kftt/.test(ua) ||\n // BlackBerry ํ๋ธ๋ฆฟ\n ua.includes('playbook') ||\n // ์ผ์ฑ ๊ฐค๋ญ์ ํญ (๊ฐ์ ๋ ์ ๊ท์)\n /gt-p\\d{4}|sm-[tp]\\d{3}/.test(ua) ||\n // ๊ตฌ๊ธ ๋ฅ์์ค/ํฝ์
ํ๋ธ๋ฆฟ\n /nexus (?:[789]|10)|pixel [cs]|pixel slate/.test(ua) ||\n // ๊ธฐํ ๋ธ๋๋ ํ๋ธ๋ฆฟ\n /xoom|transformer|mediapad|mipad|tab\\s/.test(ua) ||\n // Windows ํ๋ธ๋ฆฟ (๊ฐ์ ๋ ์กฐ๊ฑด)\n (ua.includes('windows') && (ua.includes('touch') || ua.includes('tablet'))) ||\n ua.includes('surface')\n );\n};\n\n/**\n * ์ค๋งํธํฐ ์ฌ๋ถ ํ๋จ\n * @param userAgent\n * @returns\n */\nexport const isPhone = (userAgent: string): boolean => {\n const ua = userAgent.toLowerCase();\n\n return (\n // Apple ๋ชจ๋ฐ์ผ\n ua.includes('iphone') ||\n ua.includes('ipod') ||\n // Android ์ค๋งํธํฐ (Mobile ํค์๋ ์์)\n (ua.includes('android') && ua.includes('mobile')) ||\n // BlackBerry\n ua.includes('blackberry') ||\n ua.includes('bb10') ||\n // Windows Mobile\n ua.includes('windows phone') ||\n ua.includes('windows mobile') ||\n ua.includes('iemobile') ||\n // Opera Mobile\n ua.includes('opera mini') ||\n ua.includes('opera mobi') ||\n // ๊ธฐํ ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ \n (ua.includes('mobile') &&\n (ua.includes('firefox') || ua.includes('chrome') || ua.includes('safari') || ua.includes('edge'))) ||\n // ๋ชจ๋ฐ์ผ ํค์๋ (ํ๋ธ๋ฆฟ ์ ์ธ)\n (ua.includes('mobile') && !ua.includes('tablet')) ||\n // ์ผ์ฑ ๊ฐค๋ญ์ ํฐ (๊ฐ์ )\n /sm-[a-z]\\d{3}[a-z]?|gt-[a-z]\\d{4}/.test(ua) ||\n // LG, HTC ํฐ\n /lg-[a-z]\\d{3,4}|htc[_\\s]/.test(ua) ||\n // ํ์จ์ด/์ค์ค๋ฏธ ๋ฑ (๊ฐ์ )\n /huawei|honor|redmi|mi[\\s\\d]|oneplus|oppo|vivo/.test(ua)\n );\n};\n\n/**\n * ๋ฐ์คํฌํฑ ์ฌ๋ถ ํ๋จ\n * @param userAgent\n * @returns\n */\nexport const isPc = (userAgent: string) => {\n const ua = userAgent.toLowerCase();\n\n return !isPhone(ua) && !isTablet(ua);\n};\n\n/**\n * UserAgent์์ ๊ธฐ๊ธฐ ํ์
๊ตฌ๋ถ\n * @param userAgent\n * @returns\n */\nexport const getFormFactorFromUserAgent = (userAgent: string) => {\n if (!userAgent) {\n return 'pc';\n }\n\n const ua = userAgent.toLowerCase();\n\n if (isTablet(ua)) {\n return 'tablet';\n }\n\n if (isPhone(ua)) {\n return 'phone';\n }\n\n return 'pc';\n};\n\n/**\n * UserAgent์์ ์ด์์ฒด์ ์ด๋ฆ์ ์ถ์ถ\n * @param userAgent - ๋ธ๋ผ์ฐ์ ์ userAgent ๋ฌธ์์ด\n * @returns ์ด์์ฒด์ ์ด๋ฆ\n */\nexport const getOSName = (userAgent: string): OSName => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // iOS ์ฒดํฌ (iPhone, iPad, iPod)\n if (/iphone|ipad|ipod/.test(ua)) {\n return 'ios';\n }\n\n // Android ์ฒดํฌ\n if (ua.includes('android')) {\n return 'android';\n }\n\n // Windows ์ฒดํฌ\n if (ua.includes('windows') || ua.includes('win32') || ua.includes('win64')) {\n return 'windows';\n }\n\n // macOS ์ฒดํฌ (Mac OS X, macOS)\n if (ua.includes('mac os x') || ua.includes('macos') || ua.includes('macintosh')) {\n return 'mac';\n }\n\n // Linux ์ฒดํฌ (Android ์ ์ธ)\n if (ua.includes('linux') && !ua.includes('android')) {\n return 'linux';\n }\n\n return 'unknown';\n};\n\n/**\n * ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์ด์์ฒด์ ์ด๋ฆ์ ๊ฐ์ ธ์ค๊ธฐ\n * @returns ํ์ฌ ํ๊ฒฝ์ ์ด์์ฒด์ ์ด๋ฆ\n */\nexport const getCurrentOSName = (): OSName => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getOSName(navigator.userAgent);\n};\n\n/**\n * UserAgent์์ OS ๋ฒ์ ์ ์ถ์ถ\n * @param userAgent - ๋ธ๋ผ์ฐ์ ์ userAgent ๋ฌธ์์ด\n * @returns OS ๋ฒ์ ๋ฌธ์์ด\n */\nexport const getOSVersion = (userAgent: string): string => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // iOS ๋ฒ์ (iPhone OS 15_0, iPad OS 15_0)\n const iosMatch = ua.match(/os (\\d+)_(\\d+)(?:_(\\d+))?/);\n if (iosMatch && iosMatch.length >= 3) {\n const major = iosMatch[1];\n const minor = iosMatch[2];\n const patch = iosMatch[3];\n\n return patch ? `${major}.${minor}.${patch}` : `${major}.${minor}`;\n }\n\n // Android ๋ฒ์ \n const androidMatch = ua.match(/android (\\d+(?:\\.\\d+)*)/);\n if (androidMatch && androidMatch[1]) {\n return androidMatch[1];\n }\n\n // Windows ๋ฒ์ \n const windowsMatch = ua.match(/windows nt (\\d+\\.\\d+)/);\n if (windowsMatch && windowsMatch[1]) {\n const version = windowsMatch[1];\n // Windows NT ๋ฒ์ ์ ์ค์ Windows ๋ฒ์ ์ผ๋ก ๋งคํ\n const windowsVersionMap: Record<string, string> = {\n '10.0': '10/11',\n '6.3': '8.1',\n '6.2': '8',\n '6.1': '7',\n '6.0': 'Vista',\n '5.1': 'XP'\n };\n\n return windowsVersionMap[version] || version;\n }\n\n // macOS ๋ฒ์ \n const macMatch = ua.match(/mac os x (\\d+)_(\\d+)(?:_(\\d+))?/);\n if (macMatch && macMatch.length >= 3) {\n const major = macMatch[1];\n const minor = macMatch[2];\n const patch = macMatch[3];\n\n return patch ? `${major}.${minor}.${patch}` : `${major}.${minor}`;\n }\n\n return 'unknown';\n};\n\n/**\n * UserAgent์์ ๋ธ๋ผ์ฐ์ ์ด๋ฆ์ ์ถ์ถ\n * @param userAgent - ๋ธ๋ผ์ฐ์ ์ userAgent ๋ฌธ์์ด\n * @returns ๋ธ๋ผ์ฐ์ ์ด๋ฆ\n */\nexport const getBrowserName = (userAgent: string): BrowserName => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // Edge (Chromium ๊ธฐ๋ฐ) - Chrome๋ณด๋ค ๋จผ์ ์ฒดํฌํด์ผ ํจ\n if (ua.includes('edg/') || ua.includes('edge/')) {\n return 'edge';\n }\n\n // Samsung Internet\n if (ua.includes('samsungbrowser')) {\n return 'samsung';\n }\n\n // Opera - Chrome๋ณด๋ค ๋จผ์ ์ฒดํฌํด์ผ ํจ\n if (ua.includes('opr/') || ua.includes('opera')) {\n return 'opera';\n }\n\n // Chrome (Chromium ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ ๋ค๋ณด๋ค ๋ฆ๊ฒ ์ฒดํฌ)\n if (ua.includes('chrome') && !ua.includes('edg')) {\n return 'chrome';\n }\n\n // Firefox\n if (ua.includes('firefox')) {\n return 'firefox';\n }\n\n // Safari (Chrome์ ๊ตฌ๋ถํ๊ธฐ ์ํด webkit ์ฒดํฌ)\n if (ua.includes('safari') && !ua.includes('chrome')) {\n return 'safari';\n }\n\n return 'unknown';\n};\n\n/**\n * UserAgent์์ ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ ์ถ์ถ\n * @param userAgent - ๋ธ๋ผ์ฐ์ ์ userAgent ๋ฌธ์์ด\n * @returns ๋ธ๋ผ์ฐ์ ๋ฒ์ \n */\nexport const getBrowserVersion = (userAgent: string): string => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // Edge (Chromium)\n const edgMatch = ua.match(/edg\\/(\\d+(?:\\.\\d+)*)/);\n if (edgMatch && edgMatch[1]) {\n return edgMatch[1];\n }\n\n // Samsung Internet\n const samsungMatch = ua.match(/samsungbrowser\\/(\\d+(?:\\.\\d+)*)/);\n if (samsungMatch && samsungMatch[1]) {\n return samsungMatch[1];\n }\n\n // Opera\n const operaMatch = ua.match(/(?:opr|opera)\\/(\\d+(?:\\.\\d+)*)/);\n if (operaMatch && operaMatch[1]) {\n return operaMatch[1];\n }\n\n // Chrome\n const chromeMatch = ua.match(/chrome\\/(\\d+(?:\\.\\d+)*)/);\n if (chromeMatch && chromeMatch[1] && !ua.includes('edg')) {\n return chromeMatch[1];\n }\n\n // Firefox\n const firefoxMatch = ua.match(/firefox\\/(\\d+(?:\\.\\d+)*)/);\n if (firefoxMatch && firefoxMatch[1]) {\n return firefoxMatch[1];\n }\n\n // Safari\n const safariMatch = ua.match(/version\\/(\\d+(?:\\.\\d+)*)/);\n if (safariMatch && safariMatch[1] && ua.includes('safari') && !ua.includes('chrome')) {\n return safariMatch[1];\n }\n\n return 'unknown';\n};\n/**\n * ํ์ฌ ๋ธ๋ผ์ฐ์ ์ OS ๋ฒ์ ์ ๊ฐ์ ธ์ค๊ธฐ\n * @returns ํ์ฌ ํ๊ฒฝ์ OS ๋ฒ์ \n */\nexport const getCurrentOSVersion = (): string => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getOSVersion(navigator.userAgent);\n};\n\n/**\n * ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์ด๋ฆ์ ๊ฐ์ ธ์ค๊ธฐ\n * @returns ํ์ฌ ํ๊ฒฝ์ ๋ธ๋ผ์ฐ์ ์ด๋ฆ\n */\nexport const getCurrentBrowserName = (): BrowserName => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getBrowserName(navigator.userAgent);\n};\n\n/**\n * ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ๋ฒ์ ์ ๊ฐ์ ธ์ค๊ธฐ\n * @returns ํ์ฌ ํ๊ฒฝ์ ๋ธ๋ผ์ฐ์ ๋ฒ์ \n */\nexport const getCurrentBrowserVersion = (): string => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getBrowserVersion(navigator.userAgent);\n};\n\n/**\n * ํด๋ผ์ด์ธํธ์ฉ ๋๋ฐ์ด์ค ID ์์ฑ ๋ฐ ๊ด๋ฆฌ(์์๊ฐ)\n */\nexport const getOrCreateDeviceId = (): string => {\n if (typeof window === 'undefined') {\n return '';\n }\n\n const STORAGE_KEY = 'dsp_device_id';\n let deviceId = localStorage.getItem(STORAGE_KEY);\n\n if (!deviceId) {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 15);\n deviceId = `dsp-web-${timestamp}-${random}`;\n\n try {\n localStorage.setItem(STORAGE_KEY, deviceId);\n } catch (error) {\n console.warn('[DeviceId] localStorage ์ ์ฅ ์คํจ:', error);\n }\n }\n\n return deviceId;\n};\n\n/**\n * ๋๋ฐ์ด์ค ๋ชจ๋ธ ๊ฐ์ง\n */\nexport const getDeviceModel = (): string => {\n if (!isClient()) {\n return '';\n }\n\n const ua = navigator.userAgent;\n\n // iOS\n if (/iPad/.test(ua)) {\n return 'iPad';\n }\n if (/iPhone/.test(ua)) {\n return 'iPhone';\n }\n if (/iPod/.test(ua)) {\n return 'iPod Touch';\n }\n\n // Android - ์ฃผ์ ๋ธ๋๋\n if (/SM-[A-Z0-9]+/.test(ua)) {\n const match = ua.match(/SM-[A-Z0-9]+/);\n\n return match ? `Samsung ${match[0]}` : 'Samsung';\n }\n if (/Pixel/.test(ua)) {\n const match = ua.match(/Pixel [0-9]+[a-zA-Z]*/);\n\n return match ? `Google ${match[0]}` : 'Google Pixel';\n }\n if (/Mi\\s|Redmi|POCO/.test(ua)) {\n return 'Xiaomi';\n }\n if (/HUAWEI/.test(ua)) {\n return 'Huawei';\n }\n if (/OnePlus/.test(ua)) {\n return 'OnePlus';\n }\n\n // Desktop\n if (/Windows/.test(ua)) {\n return 'Windows PC';\n }\n if (/Mac OS X/.test(ua)) {\n return 'Mac';\n }\n if (/Linux/.test(ua)) {\n return 'Linux PC';\n }\n\n return 'Unknown';\n};\n","/**\n * Message ์ด๋ฒคํธ ํจ๋ค๋ฌ๋ฅผ ๊ด๋ฆฌํ๋ ํด๋์ค์
๋๋ค. (์ฑ๊ธํด)\n * ๋ชจ๋ message ํธ๋ค๋ฌ๋ ์ฌ๊ธฐ๋ฅผ ํตํด ๋ฑ๋กํด์ผํฉ๋๋ค.\n * window.addEventListener('message') ์ ์ค๋ณต์ ๋ฐฉ์งํ๊ธฐ ์ํจ์
๋๋ค.\n */\nexport class MessageEventManager {\n private static instance: MessageEventManager;\n private handlers = new Map<string, (event: MessageEvent) => void>();\n\n static getInstance(): MessageEventManager {\n if (!MessageEventManager.instance) {\n MessageEventManager.instance = new MessageEventManager();\n }\n\n return MessageEventManager.instance;\n }\n\n private constructor() {\n window.addEventListener('message', this.handleMessage.bind(this));\n }\n\n /**\n *\n * @param event\n */\n private handleMessage(event: MessageEvent): void {\n // ๋ชจ๋ ๋ฑ๋ก๋ ํธ๋ค๋ฌ ์คํ\n for (const [key, handler] of this.handlers) {\n try {\n handler(event);\n } catch (error) {\n console.error(`Message handler ${key} error:`, error);\n }\n }\n }\n\n /**\n * ์ด๋ฒคํธ ํจ๋ค๋ฌ ํจ์๋ฅผ ๋ฑ๋กํฉ๋๋ค.\n * @param key\n * @param handler\n */\n registerHandler(key: string, handler: (event: MessageEvent) => void): void {\n this.handlers.set(key, handler);\n }\n\n /**\n * ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ ์ญ์ ํฉ๋๋ค.\n * @param key\n */\n unregisterHandler(key: string): void {\n this.handlers.delete(key);\n }\n}\n","interface ConvertTextToImgParams {\n /** ์ด๋ฏธ์ง๋ก ๋ณํํ ๋ฌธ์์ด */\n targetStr: string;\n /** ์บ๋ฒ์ค ๋๋น (์ง์ ํ์ง ์์ผ๋ฉด ํ
์คํธ ๊ธธ์ด์ ๋ฐ๋ผ ์๋ ๊ณ์ฐ) */\n canvasWidth?: number;\n /** ์บ๋ฒ์ค ๋์ด (์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ 150px) */\n canvasHeight?: number;\n /** ๋ฐฐ๊ฒฝ์ (์ง์ ํ์ง ์์ผ๋ฉด ํฌ๋ช
) */\n backgroundColor?: string;\n /** ํฐํธ ํฌ๊ธฐ (์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ 75px) */\n fontSize?: number;\n /** ํฐํธ ์์ (์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ ๊ฒ์ ์) */\n fontColor?: string;\n /** ํฐํธ ๋๊ป (์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ bold) */\n fontWeight?: string;\n}\n\n/**\n * ํ
์คํธ๋ฅผ ์ด๋ฏธ์ง(Base64)๋ก ๋ณํํ๋ ํจ์\n * @param params - ๋ณํ์ ํ์ํ ํ๋ผ๋ฏธํฐ ๊ฐ์ฒด\n * @returns Base64๋ก ์ธ์ฝ๋ฉ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ URL\n */\nexport const convertTextToImg = ({\n targetStr,\n canvasWidth,\n canvasHeight,\n backgroundColor,\n fontColor,\n fontSize,\n fontWeight\n}: ConvertTextToImgParams): string => {\n // 1. ๋ฉ๋ชจ๋ฆฌ์ ์บ๋ฒ์ค ์์ ์์ฑ\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n // ์บ๋ฒ์ค ์ปจํ
์คํธ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ ๊ฒฝ์ฐ ์๋ฌ ์ฒ๋ฆฌ\n throw new Error('Canvas context๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.');\n }\n\n // 2. ์บ๋ฒ์ค ํฌ๊ธฐ ์ค์ \n const defaultHeight = 150;\n const calculatedWidth = targetStr.length * 70; // ๊ธ์ ์ ๊ธฐ๋ฐ ๋๋น ๊ณ์ฐ\n\n canvas.width = canvasWidth ?? calculatedWidth;\n canvas.height = canvasHeight ?? defaultHeight;\n\n // 3. ๋ฐฐ๊ฒฝ์ ์ฒ๋ฆฌ\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n\n // 4. ํ
์คํธ ๊ทธ๋ฆฌ๊ธฐ\n ctx.fillStyle = fontColor ?? 'black';\n ctx.font = `${fontSize ?? 75}px ${fontWeight ?? 'bold'}`;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle'; // ํ
์คํธ๋ฅผ ์์ง ์ค์์ ๋ ์ ๋ง์ถ๊ธฐ ์ํด ์ถ๊ฐ\n\n // ํ
์คํธ๋ฅผ ์บ๋ฒ์ค ์ค์์ ๊ทธ๋ฆฝ๋๋ค.\n ctx.fillText(targetStr, canvas.width / 2, canvas.height / 2);\n\n // 5. Base64 ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ก ๋ณํํ์ฌ ๋ฐํ\n return canvas.toDataURL(); // ๊ธฐ๋ณธ์ ์ผ๋ก 'image/png'\n};\n","export const getCookie = (name: string): string => {\n if (typeof document === 'undefined') {\n return '';\n }\n const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));\n\n return match ? decodeURIComponent(match[2] || '') : '';\n};\n\nexport const setCookie = (\n name: string,\n value: string,\n options: {\n expires?: number | Date; // number of days\n path?: string;\n domain?: string;\n secure?: boolean;\n } = {}\n): void => {\n if (typeof document === 'undefined') {\n return;\n }\n\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n if (options.expires) {\n let expiresDate: Date;\n if (typeof options.expires === 'number') {\n expiresDate = new Date();\n expiresDate.setDate(expiresDate.getDate() + options.expires);\n } else {\n expiresDate = options.expires;\n }\n cookieString += `; expires=${expiresDate.toUTCString()}`;\n }\n\n cookieString += `; path=${options.path || '/'}`;\n\n if (options.domain) {\n cookieString += `; domain=${options.domain}`;\n }\n\n if (options.secure) {\n cookieString += '; secure';\n }\n\n document.cookie = cookieString;\n};\n\nexport const deleteCookie = (name: string, options: { path?: string; domain?: string } = {}): void => {\n setCookie(name, '', { ...options, expires: -1 });\n};\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -28,6 +28,7 @@ type BrowserName = 'chrome' | 'firefox' | 'safari' | 'edge' | 'opera' | 'samsung
|
|
|
28
28
|
* @returns
|
|
29
29
|
*/
|
|
30
30
|
declare const getDspExecutionEnvironment: () => ExecutionEnvironment;
|
|
31
|
+
declare const isWebView: () => boolean;
|
|
31
32
|
/**
|
|
32
33
|
* UserAgent์ SspApp ์ด ์๋์ง ๊ฒ์ฌ
|
|
33
34
|
* ์์ผ๋ฉด, DSP ์ฑ
|
|
@@ -118,6 +119,14 @@ declare const getCurrentBrowserName: () => BrowserName;
|
|
|
118
119
|
* @returns ํ์ฌ ํ๊ฒฝ์ ๋ธ๋ผ์ฐ์ ๋ฒ์
|
|
119
120
|
*/
|
|
120
121
|
declare const getCurrentBrowserVersion: () => string;
|
|
122
|
+
/**
|
|
123
|
+
* ํด๋ผ์ด์ธํธ์ฉ ๋๋ฐ์ด์ค ID ์์ฑ ๋ฐ ๊ด๋ฆฌ(์์๊ฐ)
|
|
124
|
+
*/
|
|
125
|
+
declare const getOrCreateDeviceId: () => string;
|
|
126
|
+
/**
|
|
127
|
+
* ๋๋ฐ์ด์ค ๋ชจ๋ธ ๊ฐ์ง
|
|
128
|
+
*/
|
|
129
|
+
declare const getDeviceModel: () => string;
|
|
121
130
|
|
|
122
131
|
/**
|
|
123
132
|
* ํธ์คํธ๋ช
์์ ์๋ธ๋๋ฉ์ธ์ ์ถ์ถํฉ๋๋ค.
|
|
@@ -225,4 +234,16 @@ interface ConvertTextToImgParams {
|
|
|
225
234
|
*/
|
|
226
235
|
declare const convertTextToImg: ({ targetStr, canvasWidth, canvasHeight, backgroundColor, fontColor, fontSize, fontWeight }: ConvertTextToImgParams) => string;
|
|
227
236
|
|
|
228
|
-
|
|
237
|
+
declare const getCookie: (name: string) => string;
|
|
238
|
+
declare const setCookie: (name: string, value: string, options?: {
|
|
239
|
+
expires?: number | Date;
|
|
240
|
+
path?: string;
|
|
241
|
+
domain?: string;
|
|
242
|
+
secure?: boolean;
|
|
243
|
+
}) => void;
|
|
244
|
+
declare const deleteCookie: (name: string, options?: {
|
|
245
|
+
path?: string;
|
|
246
|
+
domain?: string;
|
|
247
|
+
}) => void;
|
|
248
|
+
|
|
249
|
+
export { type BrowserName, type ExecutionEnvironment, MessageEventManager, type OSName, checkUserAgentDspApp, convertTextToImg, debounce, deleteCookie, getApiHostNameFromEnvironment, getBrowserName, getBrowserVersion, getCdnHostNameFromEnvironment, getCookie, getCurrentBrowserName, getCurrentBrowserVersion, getCurrentOSName, getCurrentOSVersion, getDeviceModel, getDspExecutionEnvironment, getEnvironmentFromHostname, getFormFactorFromUserAgent, getOSName, getOSVersion, getOrCreateDeviceId, getSubdomain, isClient, isDspApp, isFpPlannerApp, isPc, isPhone, isSalesPortal, isStorybookEnv, isTablet, isWebView, setCookie, throttle };
|
package/dist/index.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ type BrowserName = 'chrome' | 'firefox' | 'safari' | 'edge' | 'opera' | 'samsung
|
|
|
28
28
|
* @returns
|
|
29
29
|
*/
|
|
30
30
|
declare const getDspExecutionEnvironment: () => ExecutionEnvironment;
|
|
31
|
+
declare const isWebView: () => boolean;
|
|
31
32
|
/**
|
|
32
33
|
* UserAgent์ SspApp ์ด ์๋์ง ๊ฒ์ฌ
|
|
33
34
|
* ์์ผ๋ฉด, DSP ์ฑ
|
|
@@ -118,6 +119,14 @@ declare const getCurrentBrowserName: () => BrowserName;
|
|
|
118
119
|
* @returns ํ์ฌ ํ๊ฒฝ์ ๋ธ๋ผ์ฐ์ ๋ฒ์
|
|
119
120
|
*/
|
|
120
121
|
declare const getCurrentBrowserVersion: () => string;
|
|
122
|
+
/**
|
|
123
|
+
* ํด๋ผ์ด์ธํธ์ฉ ๋๋ฐ์ด์ค ID ์์ฑ ๋ฐ ๊ด๋ฆฌ(์์๊ฐ)
|
|
124
|
+
*/
|
|
125
|
+
declare const getOrCreateDeviceId: () => string;
|
|
126
|
+
/**
|
|
127
|
+
* ๋๋ฐ์ด์ค ๋ชจ๋ธ ๊ฐ์ง
|
|
128
|
+
*/
|
|
129
|
+
declare const getDeviceModel: () => string;
|
|
121
130
|
|
|
122
131
|
/**
|
|
123
132
|
* ํธ์คํธ๋ช
์์ ์๋ธ๋๋ฉ์ธ์ ์ถ์ถํฉ๋๋ค.
|
|
@@ -225,4 +234,16 @@ interface ConvertTextToImgParams {
|
|
|
225
234
|
*/
|
|
226
235
|
declare const convertTextToImg: ({ targetStr, canvasWidth, canvasHeight, backgroundColor, fontColor, fontSize, fontWeight }: ConvertTextToImgParams) => string;
|
|
227
236
|
|
|
228
|
-
|
|
237
|
+
declare const getCookie: (name: string) => string;
|
|
238
|
+
declare const setCookie: (name: string, value: string, options?: {
|
|
239
|
+
expires?: number | Date;
|
|
240
|
+
path?: string;
|
|
241
|
+
domain?: string;
|
|
242
|
+
secure?: boolean;
|
|
243
|
+
}) => void;
|
|
244
|
+
declare const deleteCookie: (name: string, options?: {
|
|
245
|
+
path?: string;
|
|
246
|
+
domain?: string;
|
|
247
|
+
}) => void;
|
|
248
|
+
|
|
249
|
+
export { type BrowserName, type ExecutionEnvironment, MessageEventManager, type OSName, checkUserAgentDspApp, convertTextToImg, debounce, deleteCookie, getApiHostNameFromEnvironment, getBrowserName, getBrowserVersion, getCdnHostNameFromEnvironment, getCookie, getCurrentBrowserName, getCurrentBrowserVersion, getCurrentOSName, getCurrentOSVersion, getDeviceModel, getDspExecutionEnvironment, getEnvironmentFromHostname, getFormFactorFromUserAgent, getOSName, getOSVersion, getOrCreateDeviceId, getSubdomain, isClient, isDspApp, isFpPlannerApp, isPc, isPhone, isSalesPortal, isStorybookEnv, isTablet, isWebView, setCookie, throttle };
|
package/dist/index.js
CHANGED
|
@@ -120,6 +120,10 @@ var getDspExecutionEnvironment = () => {
|
|
|
120
120
|
}
|
|
121
121
|
return "web";
|
|
122
122
|
};
|
|
123
|
+
var isWebView = () => {
|
|
124
|
+
const environment = getDspExecutionEnvironment();
|
|
125
|
+
return environment === "android-webview" || environment === "ios-webview";
|
|
126
|
+
};
|
|
123
127
|
var checkUserAgentDspApp = (userAgent) => {
|
|
124
128
|
return userAgent.toLowerCase().includes("sspapp");
|
|
125
129
|
};
|
|
@@ -332,6 +336,66 @@ var getCurrentBrowserVersion = () => {
|
|
|
332
336
|
}
|
|
333
337
|
return getBrowserVersion(navigator.userAgent);
|
|
334
338
|
};
|
|
339
|
+
var getOrCreateDeviceId = () => {
|
|
340
|
+
if (typeof window === "undefined") {
|
|
341
|
+
return "";
|
|
342
|
+
}
|
|
343
|
+
const STORAGE_KEY = "dsp_device_id";
|
|
344
|
+
let deviceId = localStorage.getItem(STORAGE_KEY);
|
|
345
|
+
if (!deviceId) {
|
|
346
|
+
const timestamp = Date.now().toString(36);
|
|
347
|
+
const random = Math.random().toString(36).substring(2, 15);
|
|
348
|
+
deviceId = `dsp-web-${timestamp}-${random}`;
|
|
349
|
+
try {
|
|
350
|
+
localStorage.setItem(STORAGE_KEY, deviceId);
|
|
351
|
+
} catch (error) {
|
|
352
|
+
console.warn("[DeviceId] localStorage \uC800\uC7A5 \uC2E4\uD328:", error);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
return deviceId;
|
|
356
|
+
};
|
|
357
|
+
var getDeviceModel = () => {
|
|
358
|
+
if (!isClient()) {
|
|
359
|
+
return "";
|
|
360
|
+
}
|
|
361
|
+
const ua = navigator.userAgent;
|
|
362
|
+
if (/iPad/.test(ua)) {
|
|
363
|
+
return "iPad";
|
|
364
|
+
}
|
|
365
|
+
if (/iPhone/.test(ua)) {
|
|
366
|
+
return "iPhone";
|
|
367
|
+
}
|
|
368
|
+
if (/iPod/.test(ua)) {
|
|
369
|
+
return "iPod Touch";
|
|
370
|
+
}
|
|
371
|
+
if (/SM-[A-Z0-9]+/.test(ua)) {
|
|
372
|
+
const match = ua.match(/SM-[A-Z0-9]+/);
|
|
373
|
+
return match ? `Samsung ${match[0]}` : "Samsung";
|
|
374
|
+
}
|
|
375
|
+
if (/Pixel/.test(ua)) {
|
|
376
|
+
const match = ua.match(/Pixel [0-9]+[a-zA-Z]*/);
|
|
377
|
+
return match ? `Google ${match[0]}` : "Google Pixel";
|
|
378
|
+
}
|
|
379
|
+
if (/Mi\s|Redmi|POCO/.test(ua)) {
|
|
380
|
+
return "Xiaomi";
|
|
381
|
+
}
|
|
382
|
+
if (/HUAWEI/.test(ua)) {
|
|
383
|
+
return "Huawei";
|
|
384
|
+
}
|
|
385
|
+
if (/OnePlus/.test(ua)) {
|
|
386
|
+
return "OnePlus";
|
|
387
|
+
}
|
|
388
|
+
if (/Windows/.test(ua)) {
|
|
389
|
+
return "Windows PC";
|
|
390
|
+
}
|
|
391
|
+
if (/Mac OS X/.test(ua)) {
|
|
392
|
+
return "Mac";
|
|
393
|
+
}
|
|
394
|
+
if (/Linux/.test(ua)) {
|
|
395
|
+
return "Linux PC";
|
|
396
|
+
}
|
|
397
|
+
return "Unknown";
|
|
398
|
+
};
|
|
335
399
|
|
|
336
400
|
// src/utils/event-handler-utils.ts
|
|
337
401
|
var _MessageEventManager = class _MessageEventManager {
|
|
@@ -408,6 +472,42 @@ var convertTextToImg = ({
|
|
|
408
472
|
return canvas.toDataURL();
|
|
409
473
|
};
|
|
410
474
|
|
|
411
|
-
|
|
475
|
+
// src/utils/cookie-utils.ts
|
|
476
|
+
var getCookie = (name) => {
|
|
477
|
+
if (typeof document === "undefined") {
|
|
478
|
+
return "";
|
|
479
|
+
}
|
|
480
|
+
const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));
|
|
481
|
+
return match ? decodeURIComponent(match[2] || "") : "";
|
|
482
|
+
};
|
|
483
|
+
var setCookie = (name, value, options = {}) => {
|
|
484
|
+
if (typeof document === "undefined") {
|
|
485
|
+
return;
|
|
486
|
+
}
|
|
487
|
+
let cookieString = `${name}=${encodeURIComponent(value)}`;
|
|
488
|
+
if (options.expires) {
|
|
489
|
+
let expiresDate;
|
|
490
|
+
if (typeof options.expires === "number") {
|
|
491
|
+
expiresDate = /* @__PURE__ */ new Date();
|
|
492
|
+
expiresDate.setDate(expiresDate.getDate() + options.expires);
|
|
493
|
+
} else {
|
|
494
|
+
expiresDate = options.expires;
|
|
495
|
+
}
|
|
496
|
+
cookieString += `; expires=${expiresDate.toUTCString()}`;
|
|
497
|
+
}
|
|
498
|
+
cookieString += `; path=${options.path || "/"}`;
|
|
499
|
+
if (options.domain) {
|
|
500
|
+
cookieString += `; domain=${options.domain}`;
|
|
501
|
+
}
|
|
502
|
+
if (options.secure) {
|
|
503
|
+
cookieString += "; secure";
|
|
504
|
+
}
|
|
505
|
+
document.cookie = cookieString;
|
|
506
|
+
};
|
|
507
|
+
var deleteCookie = (name, options = {}) => {
|
|
508
|
+
setCookie(name, "", { ...options, expires: -1 });
|
|
509
|
+
};
|
|
510
|
+
|
|
511
|
+
export { MessageEventManager, checkUserAgentDspApp, convertTextToImg, debounce, deleteCookie, getApiHostNameFromEnvironment, getBrowserName, getBrowserVersion, getCdnHostNameFromEnvironment, getCookie, getCurrentBrowserName, getCurrentBrowserVersion, getCurrentOSName, getCurrentOSVersion, getDeviceModel, getDspExecutionEnvironment, getEnvironmentFromHostname, getFormFactorFromUserAgent, getOSName, getOSVersion, getOrCreateDeviceId, getSubdomain, isClient, isDspApp, isFpPlannerApp, isPc, isPhone, isSalesPortal, isStorybookEnv, isTablet, isWebView, setCookie, throttle };
|
|
412
512
|
//# sourceMappingURL=index.js.map
|
|
413
513
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/timing-utils.ts","../src/utils/environment-utils.ts","../src/utils/user-agent-utils.ts","../src/utils/event-handler-utils.ts","../src/utils/canvas-utils.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ์ฐ๋กํ\n * @param func\n * @param delay\n * @returns\n */\nexport function throttle<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let lastCall = 0;\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n const now = Date.now();\n\n if (now - lastCall >= delay) {\n // ๋ง์ง๋ง ํธ์ถ๋ก๋ถํฐ delay ์๊ฐ์ด ์ง๋ฌ์ผ๋ฉด ์ฆ์ ์คํ\n lastCall = now;\n func(...args);\n } else if (!timeout) {\n // ๋๊ธฐ ์ค์ธ ํ์ด๋จธ๊ฐ ์์ผ๋ฉด ์๋ก์ด ํ์ด๋จธ ์ค์ \n timeout = setTimeout(\n () => {\n lastCall = Date.now();\n func(...args);\n timeout = null;\n },\n delay - (now - lastCall)\n );\n }\n };\n}\n\n/**\n * ๋๋ฐ์ด์ค\n * @param func\n * @param delay\n * @returns\n */\nexport function debounce<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n func(...args);\n timeout = null;\n }, delay);\n };\n}\n","/**\n * ํธ์คํธ๋ช
์์ ์๋ธ๋๋ฉ์ธ์ ์ถ์ถํฉ๋๋ค.\n * @param hostname ํธ์คํธ๋ช
\n * @returns ์๋ธ๋๋ฉ์ธ (์: nxl-dsp-dev)\n */\nexport const getSubdomain = (hostname: string): string => {\n if (!hostname || hostname === 'localhost' || hostname === '127.0.0.1') {\n return '';\n }\n\n const parts = hostname.split('.');\n\n // ์ต์ 3๊ฐ ๋ถ๋ถ์ด ์์ด์ผ ์๋ธ๋๋ฉ์ธ ์กด์ฌ (subdomain.domain.com)\n if (parts.length < 3) {\n return '';\n }\n\n // ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ด ์๋ธ๋๋ฉ์ธ\n return parts[0] ?? '';\n};\n\n/**\n * ํธ์คํธ๋ช
์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ฒฝ์ ํ๋จํฉ๋๋ค.\n * @param hostname ํธ์คํธ๋ช
\n * @returns ํ๊ฒฝ ๊ตฌ๋ถ ๋ฌธ์์ด ('local' | 'dev' | 'stg' | 'prd')\n */\nexport const getEnvironmentFromHostname = (hostname: string): 'local' | 'dev' | 'stg' | 'prd' => {\n const subDomain = getSubdomain(hostname);\n\n // localhost ํ๋จ\n if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname.startsWith('localhost:')) {\n return 'local';\n }\n\n // dev ํ๊ฒฝ ํ๋จ\n if (subDomain.includes(`dev`)) {\n return 'dev';\n }\n\n // stg ํ๊ฒฝ ํ๋จ\n if (subDomain.includes('stg')) {\n return 'stg';\n }\n\n // ๊ธฐ๋ณธ ์ด์\n return 'prd';\n};\n\n/**\n * ํ๊ฒฝ์ ๋ง๋ API ํธ์คํธ๋ช
์ ๋ฐํํฉ๋๋ค.\n * ํธ์คํธ๋ช
์ ๊ฐ์ ํ๊ณ ์ถ์ผ๋ฉด ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ์ธ์.\n * @param currentHostname\n * @param forceApiHostName\n * @returns\n */\nexport const getApiHostNameFromEnvironment = (currentHostname: string, forceApiHostName?: string) => {\n if (forceApiHostName) {\n return forceApiHostName;\n }\n\n const environment = getEnvironmentFromHostname(currentHostname);\n\n if (environment === 'dev') {\n return 'https://nxl-dsp-dev.hanwhalife.com';\n }\n\n if (environment === 'local' || environment === 'stg') {\n return 'https://nxl-dsp-stg.hanwhalife.com';\n }\n\n // ๊ธฐ๋ณธ ์ด์\n return 'https://nxl-dsp.hanwhalife.com';\n};\n\n/**\n * ํ๊ฒฝ์ ๋ง๋ CDN ํธ์คํธ๋ช
์ ๋ฐํํฉ๋๋ค.\n * ํธ์คํธ๋ช
์ ๊ฐ์ ํ๊ณ ์ถ์ผ๋ฉด ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ์ธ์.\n * @param currentHostname\n * @param forceApiHostName\n * @returns\n */\nexport const getCdnHostNameFromEnvironment = (currentHostname: string, forceApiHostName?: string) => {\n if (!isClient()) {\n return '';\n }\n\n if (forceApiHostName) {\n return forceApiHostName;\n }\n\n const environment = getEnvironmentFromHostname(currentHostname);\n\n if (environment === 'local' || environment === 'dev') {\n return 'https://dev-dsp-static.hanwhalife.com';\n }\n\n if (environment === 'stg') {\n return 'https://stg-dsp-static.hanwhalife.com';\n }\n\n // ๊ธฐ๋ณธ ์ด์\n return 'https://dsp-static.hanwhalife.com';\n};\n\n/**\n * @see https://github.com/storybookjs/storybook/issues/32028#issuecomment-3298982086\n * @note ์คํ ๋ฆฌ๋ถ์์ ๋ฒ๊ทธ๋ก์ธํด window๊ฐ์ฒด๋ฅผ ์ ์์ ์ผ๋ก ํ์งํ์ง ๋ชปํ๋ ์ด์์ฐํ\n */\nexport const isClient = () => {\n try {\n return !!window;\n } catch {\n return false;\n }\n};\n\n// window.isStorybookEnv ์ ๊ทผ์ ์ํ ํ์
์บ์คํ
\ndeclare const window: Window & { isStorybookEnv?: boolean };\n/**\n * ํ์ฌ ์คํ ํ๊ฒฝ์ด Storybook์ธ์ง ํ์ธํ๋ ํจ์\n *\n * ์ฌ์ฉ ์ , `viteFinal` ์ค์ ์์ `window.isStorybookEnv`๋ฅผ `true`๋ก ์ ์ํด์ผ ์ ์ ๋์ํฉ๋๋ค.\n *\n * ์์:\n * ```ts\n * const config: StorybookConfig = {\n * viteFinal: (config) => {\n * // window.isStorybookEnv๋ฅผ true๋ก ์ค์ (boolean ๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋จ)\n * config.define = {\n * ...config.define,\n * 'window.isStorybookEnv': 'true',\n * };\n *\n * return config;\n * },\n * };\n * ```\n */\nexport const isStorybookEnv = () => {\n try {\n return window.isStorybookEnv === true;\n } catch {\n // window๊ฐ ์กด์ฌํ์ง ์๋ ๋ฑ ์์ธ ์ํฉ์์๋ false ๋ฐํ\n return false;\n }\n};\n","import { ExecutionEnvironment, OSName, BrowserName } from '../types/common.types';\n\nimport { isClient } from './environment-utils';\n/**\n * ํํ์๋ช
์์
์ง์ ์น ์คํ ํ๊ฒฝ ํ์ง\n * @returns\n */\nexport const getDspExecutionEnvironment = (): ExecutionEnvironment => {\n if (!isClient()) {\n return 'unknown';\n }\n\n if (window.n2Bridge) {\n return 'android-webview';\n }\n\n if (window.webkit) {\n return 'ios-webview';\n }\n\n if (window.self !== window.top) {\n return 'iframe';\n }\n\n return 'web';\n};\n\n/**\n * UserAgent์ SspApp ์ด ์๋์ง ๊ฒ์ฌ\n * ์์ผ๋ฉด, DSP ์ฑ\n * @param userAgent\n * @returns\n */\nexport const checkUserAgentDspApp = (userAgent: string) => {\n return userAgent.toLowerCase().includes('sspapp');\n};\n\n/**\n * ํํ์๋ช
์์
์ง์ ์น๋ทฐ ํ๊ฒฝ ์ฌ๋ถ ํ๋จ\n * @returns ์น๋ทฐ(Android/iOS) ํ๊ฒฝ์ด๋ฉด true, ์๋๋ฉด false\n */\nexport const isDspApp = (): boolean => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return (\n checkUserAgentDspApp(navigator.userAgent) && (environment === 'android-webview' || environment === 'ios-webview')\n );\n};\n\n/**\n * FP ํ๋๋ ์น๋ทฐ ํ๊ฒฝ ์ฌ๋ถ ํ๋จ\n * @returns\n */\nexport const isFpPlannerApp = (): boolean => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return (\n checkUserAgentDspApp(navigator.userAgent) === false &&\n (environment === 'android-webview' || environment === 'ios-webview')\n );\n};\n\n/**\n * ์์
ํฌํธ ํ๊ฒฝ ์ฌ๋ถ ํ๋จ\n * @returns\n */\nexport const isSalesPortal = () => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return environment === 'iframe';\n};\n\n/**\n * ํ๋ธ๋ฆฟ ์ฌ๋ถ ํ๋จ\n * @param userAgent\n * @returns\n */\nexport const isTablet = (userAgent: string): boolean => {\n const ua = userAgent.toLowerCase();\n\n return (\n // Apple ํ๋ธ๋ฆฟ\n ua.includes('ipad') ||\n // Android ํ๋ธ๋ฆฟ (Mobile ํค์๋ ์์)\n (ua.includes('android') && !ua.includes('mobile')) ||\n // ๋ช
์์ ํ๋ธ๋ฆฟ ํค์๋\n ua.includes('tablet') ||\n // Amazon ํ๋ธ๋ฆฟ\n ua.includes('kindle') ||\n ua.includes('silk') ||\n /kf[a-z]{2}wi|kftt/.test(ua) ||\n // BlackBerry ํ๋ธ๋ฆฟ\n ua.includes('playbook') ||\n // ์ผ์ฑ ๊ฐค๋ญ์ ํญ (๊ฐ์ ๋ ์ ๊ท์)\n /gt-p\\d{4}|sm-[tp]\\d{3}/.test(ua) ||\n // ๊ตฌ๊ธ ๋ฅ์์ค/ํฝ์
ํ๋ธ๋ฆฟ\n /nexus (?:[789]|10)|pixel [cs]|pixel slate/.test(ua) ||\n // ๊ธฐํ ๋ธ๋๋ ํ๋ธ๋ฆฟ\n /xoom|transformer|mediapad|mipad|tab\\s/.test(ua) ||\n // Windows ํ๋ธ๋ฆฟ (๊ฐ์ ๋ ์กฐ๊ฑด)\n (ua.includes('windows') && (ua.includes('touch') || ua.includes('tablet'))) ||\n ua.includes('surface')\n );\n};\n\n/**\n * ์ค๋งํธํฐ ์ฌ๋ถ ํ๋จ\n * @param userAgent\n * @returns\n */\nexport const isPhone = (userAgent: string): boolean => {\n const ua = userAgent.toLowerCase();\n\n return (\n // Apple ๋ชจ๋ฐ์ผ\n ua.includes('iphone') ||\n ua.includes('ipod') ||\n // Android ์ค๋งํธํฐ (Mobile ํค์๋ ์์)\n (ua.includes('android') && ua.includes('mobile')) ||\n // BlackBerry\n ua.includes('blackberry') ||\n ua.includes('bb10') ||\n // Windows Mobile\n ua.includes('windows phone') ||\n ua.includes('windows mobile') ||\n ua.includes('iemobile') ||\n // Opera Mobile\n ua.includes('opera mini') ||\n ua.includes('opera mobi') ||\n // ๊ธฐํ ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ \n (ua.includes('mobile') &&\n (ua.includes('firefox') || ua.includes('chrome') || ua.includes('safari') || ua.includes('edge'))) ||\n // ๋ชจ๋ฐ์ผ ํค์๋ (ํ๋ธ๋ฆฟ ์ ์ธ)\n (ua.includes('mobile') && !ua.includes('tablet')) ||\n // ์ผ์ฑ ๊ฐค๋ญ์ ํฐ (๊ฐ์ )\n /sm-[a-z]\\d{3}[a-z]?|gt-[a-z]\\d{4}/.test(ua) ||\n // LG, HTC ํฐ\n /lg-[a-z]\\d{3,4}|htc[_\\s]/.test(ua) ||\n // ํ์จ์ด/์ค์ค๋ฏธ ๋ฑ (๊ฐ์ )\n /huawei|honor|redmi|mi[\\s\\d]|oneplus|oppo|vivo/.test(ua)\n );\n};\n\n/**\n * ๋ฐ์คํฌํฑ ์ฌ๋ถ ํ๋จ\n * @param userAgent\n * @returns\n */\nexport const isPc = (userAgent: string) => {\n const ua = userAgent.toLowerCase();\n\n return !isPhone(ua) && !isTablet(ua);\n};\n\n/**\n * UserAgent์์ ๊ธฐ๊ธฐ ํ์
๊ตฌ๋ถ\n * @param userAgent\n * @returns\n */\nexport const getFormFactorFromUserAgent = (userAgent: string) => {\n if (!userAgent) {\n return 'pc';\n }\n\n const ua = userAgent.toLowerCase();\n\n if (isTablet(ua)) {\n return 'tablet';\n }\n\n if (isPhone(ua)) {\n return 'phone';\n }\n\n return 'pc';\n};\n\n/**\n * UserAgent์์ ์ด์์ฒด์ ์ด๋ฆ์ ์ถ์ถ\n * @param userAgent - ๋ธ๋ผ์ฐ์ ์ userAgent ๋ฌธ์์ด\n * @returns ์ด์์ฒด์ ์ด๋ฆ\n */\nexport const getOSName = (userAgent: string): OSName => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // iOS ์ฒดํฌ (iPhone, iPad, iPod)\n if (/iphone|ipad|ipod/.test(ua)) {\n return 'ios';\n }\n\n // Android ์ฒดํฌ\n if (ua.includes('android')) {\n return 'android';\n }\n\n // Windows ์ฒดํฌ\n if (ua.includes('windows') || ua.includes('win32') || ua.includes('win64')) {\n return 'windows';\n }\n\n // macOS ์ฒดํฌ (Mac OS X, macOS)\n if (ua.includes('mac os x') || ua.includes('macos') || ua.includes('macintosh')) {\n return 'mac';\n }\n\n // Linux ์ฒดํฌ (Android ์ ์ธ)\n if (ua.includes('linux') && !ua.includes('android')) {\n return 'linux';\n }\n\n return 'unknown';\n};\n\n/**\n * ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์ด์์ฒด์ ์ด๋ฆ์ ๊ฐ์ ธ์ค๊ธฐ\n * @returns ํ์ฌ ํ๊ฒฝ์ ์ด์์ฒด์ ์ด๋ฆ\n */\nexport const getCurrentOSName = (): OSName => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getOSName(navigator.userAgent);\n};\n\n/**\n * UserAgent์์ OS ๋ฒ์ ์ ์ถ์ถ\n * @param userAgent - ๋ธ๋ผ์ฐ์ ์ userAgent ๋ฌธ์์ด\n * @returns OS ๋ฒ์ ๋ฌธ์์ด\n */\nexport const getOSVersion = (userAgent: string): string => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // iOS ๋ฒ์ (iPhone OS 15_0, iPad OS 15_0)\n const iosMatch = ua.match(/os (\\d+)_(\\d+)(?:_(\\d+))?/);\n if (iosMatch && iosMatch.length >= 3) {\n const major = iosMatch[1];\n const minor = iosMatch[2];\n const patch = iosMatch[3];\n\n return patch ? `${major}.${minor}.${patch}` : `${major}.${minor}`;\n }\n\n // Android ๋ฒ์ \n const androidMatch = ua.match(/android (\\d+(?:\\.\\d+)*)/);\n if (androidMatch && androidMatch[1]) {\n return androidMatch[1];\n }\n\n // Windows ๋ฒ์ \n const windowsMatch = ua.match(/windows nt (\\d+\\.\\d+)/);\n if (windowsMatch && windowsMatch[1]) {\n const version = windowsMatch[1];\n // Windows NT ๋ฒ์ ์ ์ค์ Windows ๋ฒ์ ์ผ๋ก ๋งคํ\n const windowsVersionMap: Record<string, string> = {\n '10.0': '10/11',\n '6.3': '8.1',\n '6.2': '8',\n '6.1': '7',\n '6.0': 'Vista',\n '5.1': 'XP'\n };\n\n return windowsVersionMap[version] || version;\n }\n\n // macOS ๋ฒ์ \n const macMatch = ua.match(/mac os x (\\d+)_(\\d+)(?:_(\\d+))?/);\n if (macMatch && macMatch.length >= 3) {\n const major = macMatch[1];\n const minor = macMatch[2];\n const patch = macMatch[3];\n\n return patch ? `${major}.${minor}.${patch}` : `${major}.${minor}`;\n }\n\n return 'unknown';\n};\n\n/**\n * UserAgent์์ ๋ธ๋ผ์ฐ์ ์ด๋ฆ์ ์ถ์ถ\n * @param userAgent - ๋ธ๋ผ์ฐ์ ์ userAgent ๋ฌธ์์ด\n * @returns ๋ธ๋ผ์ฐ์ ์ด๋ฆ\n */\nexport const getBrowserName = (userAgent: string): BrowserName => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // Edge (Chromium ๊ธฐ๋ฐ) - Chrome๋ณด๋ค ๋จผ์ ์ฒดํฌํด์ผ ํจ\n if (ua.includes('edg/') || ua.includes('edge/')) {\n return 'edge';\n }\n\n // Samsung Internet\n if (ua.includes('samsungbrowser')) {\n return 'samsung';\n }\n\n // Opera - Chrome๋ณด๋ค ๋จผ์ ์ฒดํฌํด์ผ ํจ\n if (ua.includes('opr/') || ua.includes('opera')) {\n return 'opera';\n }\n\n // Chrome (Chromium ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ ๋ค๋ณด๋ค ๋ฆ๊ฒ ์ฒดํฌ)\n if (ua.includes('chrome') && !ua.includes('edg')) {\n return 'chrome';\n }\n\n // Firefox\n if (ua.includes('firefox')) {\n return 'firefox';\n }\n\n // Safari (Chrome์ ๊ตฌ๋ถํ๊ธฐ ์ํด webkit ์ฒดํฌ)\n if (ua.includes('safari') && !ua.includes('chrome')) {\n return 'safari';\n }\n\n return 'unknown';\n};\n\n/**\n * UserAgent์์ ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ ์ถ์ถ\n * @param userAgent - ๋ธ๋ผ์ฐ์ ์ userAgent ๋ฌธ์์ด\n * @returns ๋ธ๋ผ์ฐ์ ๋ฒ์ \n */\nexport const getBrowserVersion = (userAgent: string): string => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // Edge (Chromium)\n const edgMatch = ua.match(/edg\\/(\\d+(?:\\.\\d+)*)/);\n if (edgMatch && edgMatch[1]) {\n return edgMatch[1];\n }\n\n // Samsung Internet\n const samsungMatch = ua.match(/samsungbrowser\\/(\\d+(?:\\.\\d+)*)/);\n if (samsungMatch && samsungMatch[1]) {\n return samsungMatch[1];\n }\n\n // Opera\n const operaMatch = ua.match(/(?:opr|opera)\\/(\\d+(?:\\.\\d+)*)/);\n if (operaMatch && operaMatch[1]) {\n return operaMatch[1];\n }\n\n // Chrome\n const chromeMatch = ua.match(/chrome\\/(\\d+(?:\\.\\d+)*)/);\n if (chromeMatch && chromeMatch[1] && !ua.includes('edg')) {\n return chromeMatch[1];\n }\n\n // Firefox\n const firefoxMatch = ua.match(/firefox\\/(\\d+(?:\\.\\d+)*)/);\n if (firefoxMatch && firefoxMatch[1]) {\n return firefoxMatch[1];\n }\n\n // Safari\n const safariMatch = ua.match(/version\\/(\\d+(?:\\.\\d+)*)/);\n if (safariMatch && safariMatch[1] && ua.includes('safari') && !ua.includes('chrome')) {\n return safariMatch[1];\n }\n\n return 'unknown';\n};\n/**\n * ํ์ฌ ๋ธ๋ผ์ฐ์ ์ OS ๋ฒ์ ์ ๊ฐ์ ธ์ค๊ธฐ\n * @returns ํ์ฌ ํ๊ฒฝ์ OS ๋ฒ์ \n */\nexport const getCurrentOSVersion = (): string => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getOSVersion(navigator.userAgent);\n};\n\n/**\n * ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์ด๋ฆ์ ๊ฐ์ ธ์ค๊ธฐ\n * @returns ํ์ฌ ํ๊ฒฝ์ ๋ธ๋ผ์ฐ์ ์ด๋ฆ\n */\nexport const getCurrentBrowserName = (): BrowserName => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getBrowserName(navigator.userAgent);\n};\n\n/**\n * ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ๋ฒ์ ์ ๊ฐ์ ธ์ค๊ธฐ\n * @returns ํ์ฌ ํ๊ฒฝ์ ๋ธ๋ผ์ฐ์ ๋ฒ์ \n */\nexport const getCurrentBrowserVersion = (): string => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getBrowserVersion(navigator.userAgent);\n};\n","/**\n * Message ์ด๋ฒคํธ ํจ๋ค๋ฌ๋ฅผ ๊ด๋ฆฌํ๋ ํด๋์ค์
๋๋ค. (์ฑ๊ธํด)\n * ๋ชจ๋ message ํธ๋ค๋ฌ๋ ์ฌ๊ธฐ๋ฅผ ํตํด ๋ฑ๋กํด์ผํฉ๋๋ค.\n * window.addEventListener('message') ์ ์ค๋ณต์ ๋ฐฉ์งํ๊ธฐ ์ํจ์
๋๋ค.\n */\nexport class MessageEventManager {\n private static instance: MessageEventManager;\n private handlers = new Map<string, (event: MessageEvent) => void>();\n\n static getInstance(): MessageEventManager {\n if (!MessageEventManager.instance) {\n MessageEventManager.instance = new MessageEventManager();\n }\n\n return MessageEventManager.instance;\n }\n\n private constructor() {\n window.addEventListener('message', this.handleMessage.bind(this));\n }\n\n /**\n *\n * @param event\n */\n private handleMessage(event: MessageEvent): void {\n // ๋ชจ๋ ๋ฑ๋ก๋ ํธ๋ค๋ฌ ์คํ\n for (const [key, handler] of this.handlers) {\n try {\n handler(event);\n } catch (error) {\n console.error(`Message handler ${key} error:`, error);\n }\n }\n }\n\n /**\n * ์ด๋ฒคํธ ํจ๋ค๋ฌ ํจ์๋ฅผ ๋ฑ๋กํฉ๋๋ค.\n * @param key\n * @param handler\n */\n registerHandler(key: string, handler: (event: MessageEvent) => void): void {\n this.handlers.set(key, handler);\n }\n\n /**\n * ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ ์ญ์ ํฉ๋๋ค.\n * @param key\n */\n unregisterHandler(key: string): void {\n this.handlers.delete(key);\n }\n}\n","interface ConvertTextToImgParams {\n /** ์ด๋ฏธ์ง๋ก ๋ณํํ ๋ฌธ์์ด */\n targetStr: string;\n /** ์บ๋ฒ์ค ๋๋น (์ง์ ํ์ง ์์ผ๋ฉด ํ
์คํธ ๊ธธ์ด์ ๋ฐ๋ผ ์๋ ๊ณ์ฐ) */\n canvasWidth?: number;\n /** ์บ๋ฒ์ค ๋์ด (์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ 150px) */\n canvasHeight?: number;\n /** ๋ฐฐ๊ฒฝ์ (์ง์ ํ์ง ์์ผ๋ฉด ํฌ๋ช
) */\n backgroundColor?: string;\n /** ํฐํธ ํฌ๊ธฐ (์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ 75px) */\n fontSize?: number;\n /** ํฐํธ ์์ (์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ ๊ฒ์ ์) */\n fontColor?: string;\n /** ํฐํธ ๋๊ป (์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ bold) */\n fontWeight?: string;\n}\n\n/**\n * ํ
์คํธ๋ฅผ ์ด๋ฏธ์ง(Base64)๋ก ๋ณํํ๋ ํจ์\n * @param params - ๋ณํ์ ํ์ํ ํ๋ผ๋ฏธํฐ ๊ฐ์ฒด\n * @returns Base64๋ก ์ธ์ฝ๋ฉ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ URL\n */\nexport const convertTextToImg = ({\n targetStr,\n canvasWidth,\n canvasHeight,\n backgroundColor,\n fontColor,\n fontSize,\n fontWeight\n}: ConvertTextToImgParams): string => {\n // 1. ๋ฉ๋ชจ๋ฆฌ์ ์บ๋ฒ์ค ์์ ์์ฑ\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n // ์บ๋ฒ์ค ์ปจํ
์คํธ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ ๊ฒฝ์ฐ ์๋ฌ ์ฒ๋ฆฌ\n throw new Error('Canvas context๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.');\n }\n\n // 2. ์บ๋ฒ์ค ํฌ๊ธฐ ์ค์ \n const defaultHeight = 150;\n const calculatedWidth = targetStr.length * 70; // ๊ธ์ ์ ๊ธฐ๋ฐ ๋๋น ๊ณ์ฐ\n\n canvas.width = canvasWidth ?? calculatedWidth;\n canvas.height = canvasHeight ?? defaultHeight;\n\n // 3. ๋ฐฐ๊ฒฝ์ ์ฒ๋ฆฌ\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n\n // 4. ํ
์คํธ ๊ทธ๋ฆฌ๊ธฐ\n ctx.fillStyle = fontColor ?? 'black';\n ctx.font = `${fontSize ?? 75}px ${fontWeight ?? 'bold'}`;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle'; // ํ
์คํธ๋ฅผ ์์ง ์ค์์ ๋ ์ ๋ง์ถ๊ธฐ ์ํด ์ถ๊ฐ\n\n // ํ
์คํธ๋ฅผ ์บ๋ฒ์ค ์ค์์ ๊ทธ๋ฆฝ๋๋ค.\n ctx.fillText(targetStr, canvas.width / 2, canvas.height / 2);\n\n // 5. Base64 ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ก ๋ณํํ์ฌ ๋ฐํ\n return canvas.toDataURL(); // ๊ธฐ๋ณธ์ ์ผ๋ก 'image/png'\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/timing-utils.ts","../src/utils/environment-utils.ts","../src/utils/user-agent-utils.ts","../src/utils/event-handler-utils.ts","../src/utils/canvas-utils.ts","../src/utils/cookie-utils.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ์ฐ๋กํ\n * @param func\n * @param delay\n * @returns\n */\nexport function throttle<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let lastCall = 0;\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n const now = Date.now();\n\n if (now - lastCall >= delay) {\n // ๋ง์ง๋ง ํธ์ถ๋ก๋ถํฐ delay ์๊ฐ์ด ์ง๋ฌ์ผ๋ฉด ์ฆ์ ์คํ\n lastCall = now;\n func(...args);\n } else if (!timeout) {\n // ๋๊ธฐ ์ค์ธ ํ์ด๋จธ๊ฐ ์์ผ๋ฉด ์๋ก์ด ํ์ด๋จธ ์ค์ \n timeout = setTimeout(\n () => {\n lastCall = Date.now();\n func(...args);\n timeout = null;\n },\n delay - (now - lastCall)\n );\n }\n };\n}\n\n/**\n * ๋๋ฐ์ด์ค\n * @param func\n * @param delay\n * @returns\n */\nexport function debounce<T extends (...args: any[]) => void>(func: T, delay: number): (...args: Parameters<T>) => void {\n let timeout: NodeJS.Timeout | null = null;\n\n return (...args: Parameters<T>) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n func(...args);\n timeout = null;\n }, delay);\n };\n}\n","/**\n * ํธ์คํธ๋ช
์์ ์๋ธ๋๋ฉ์ธ์ ์ถ์ถํฉ๋๋ค.\n * @param hostname ํธ์คํธ๋ช
\n * @returns ์๋ธ๋๋ฉ์ธ (์: nxl-dsp-dev)\n */\nexport const getSubdomain = (hostname: string): string => {\n if (!hostname || hostname === 'localhost' || hostname === '127.0.0.1') {\n return '';\n }\n\n const parts = hostname.split('.');\n\n // ์ต์ 3๊ฐ ๋ถ๋ถ์ด ์์ด์ผ ์๋ธ๋๋ฉ์ธ ์กด์ฌ (subdomain.domain.com)\n if (parts.length < 3) {\n return '';\n }\n\n // ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ด ์๋ธ๋๋ฉ์ธ\n return parts[0] ?? '';\n};\n\n/**\n * ํธ์คํธ๋ช
์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ฒฝ์ ํ๋จํฉ๋๋ค.\n * @param hostname ํธ์คํธ๋ช
\n * @returns ํ๊ฒฝ ๊ตฌ๋ถ ๋ฌธ์์ด ('local' | 'dev' | 'stg' | 'prd')\n */\nexport const getEnvironmentFromHostname = (hostname: string): 'local' | 'dev' | 'stg' | 'prd' => {\n const subDomain = getSubdomain(hostname);\n\n // localhost ํ๋จ\n if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname.startsWith('localhost:')) {\n return 'local';\n }\n\n // dev ํ๊ฒฝ ํ๋จ\n if (subDomain.includes(`dev`)) {\n return 'dev';\n }\n\n // stg ํ๊ฒฝ ํ๋จ\n if (subDomain.includes('stg')) {\n return 'stg';\n }\n\n // ๊ธฐ๋ณธ ์ด์\n return 'prd';\n};\n\n/**\n * ํ๊ฒฝ์ ๋ง๋ API ํธ์คํธ๋ช
์ ๋ฐํํฉ๋๋ค.\n * ํธ์คํธ๋ช
์ ๊ฐ์ ํ๊ณ ์ถ์ผ๋ฉด ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ์ธ์.\n * @param currentHostname\n * @param forceApiHostName\n * @returns\n */\nexport const getApiHostNameFromEnvironment = (currentHostname: string, forceApiHostName?: string) => {\n if (forceApiHostName) {\n return forceApiHostName;\n }\n\n const environment = getEnvironmentFromHostname(currentHostname);\n\n if (environment === 'dev') {\n return 'https://nxl-dsp-dev.hanwhalife.com';\n }\n\n if (environment === 'local' || environment === 'stg') {\n return 'https://nxl-dsp-stg.hanwhalife.com';\n }\n\n // ๊ธฐ๋ณธ ์ด์\n return 'https://nxl-dsp.hanwhalife.com';\n};\n\n/**\n * ํ๊ฒฝ์ ๋ง๋ CDN ํธ์คํธ๋ช
์ ๋ฐํํฉ๋๋ค.\n * ํธ์คํธ๋ช
์ ๊ฐ์ ํ๊ณ ์ถ์ผ๋ฉด ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ์ธ์.\n * @param currentHostname\n * @param forceApiHostName\n * @returns\n */\nexport const getCdnHostNameFromEnvironment = (currentHostname: string, forceApiHostName?: string) => {\n if (!isClient()) {\n return '';\n }\n\n if (forceApiHostName) {\n return forceApiHostName;\n }\n\n const environment = getEnvironmentFromHostname(currentHostname);\n\n if (environment === 'local' || environment === 'dev') {\n return 'https://dev-dsp-static.hanwhalife.com';\n }\n\n if (environment === 'stg') {\n return 'https://stg-dsp-static.hanwhalife.com';\n }\n\n // ๊ธฐ๋ณธ ์ด์\n return 'https://dsp-static.hanwhalife.com';\n};\n\n/**\n * @see https://github.com/storybookjs/storybook/issues/32028#issuecomment-3298982086\n * @note ์คํ ๋ฆฌ๋ถ์์ ๋ฒ๊ทธ๋ก์ธํด window๊ฐ์ฒด๋ฅผ ์ ์์ ์ผ๋ก ํ์งํ์ง ๋ชปํ๋ ์ด์์ฐํ\n */\nexport const isClient = () => {\n try {\n return !!window;\n } catch {\n return false;\n }\n};\n\n// window.isStorybookEnv ์ ๊ทผ์ ์ํ ํ์
์บ์คํ
\ndeclare const window: Window & { isStorybookEnv?: boolean };\n/**\n * ํ์ฌ ์คํ ํ๊ฒฝ์ด Storybook์ธ์ง ํ์ธํ๋ ํจ์\n *\n * ์ฌ์ฉ ์ , `viteFinal` ์ค์ ์์ `window.isStorybookEnv`๋ฅผ `true`๋ก ์ ์ํด์ผ ์ ์ ๋์ํฉ๋๋ค.\n *\n * ์์:\n * ```ts\n * const config: StorybookConfig = {\n * viteFinal: (config) => {\n * // window.isStorybookEnv๋ฅผ true๋ก ์ค์ (boolean ๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋จ)\n * config.define = {\n * ...config.define,\n * 'window.isStorybookEnv': 'true',\n * };\n *\n * return config;\n * },\n * };\n * ```\n */\nexport const isStorybookEnv = () => {\n try {\n return window.isStorybookEnv === true;\n } catch {\n // window๊ฐ ์กด์ฌํ์ง ์๋ ๋ฑ ์์ธ ์ํฉ์์๋ false ๋ฐํ\n return false;\n }\n};\n","import { ExecutionEnvironment, OSName, BrowserName } from '../types/common.types';\n\nimport { isClient } from './environment-utils';\n/**\n * ํํ์๋ช
์์
์ง์ ์น ์คํ ํ๊ฒฝ ํ์ง\n * @returns\n */\nexport const getDspExecutionEnvironment = (): ExecutionEnvironment => {\n if (!isClient()) {\n return 'unknown';\n }\n\n if (window.n2Bridge) {\n return 'android-webview';\n }\n\n if (window.webkit) {\n return 'ios-webview';\n }\n\n if (window.self !== window.top) {\n return 'iframe';\n }\n\n return 'web';\n};\n\n// DSP, FP Planner\nexport const isWebView = () => {\n const environment = getDspExecutionEnvironment();\n\n return environment === 'android-webview' || environment === 'ios-webview';\n};\n\n/**\n * UserAgent์ SspApp ์ด ์๋์ง ๊ฒ์ฌ\n * ์์ผ๋ฉด, DSP ์ฑ\n * @param userAgent\n * @returns\n */\nexport const checkUserAgentDspApp = (userAgent: string) => {\n return userAgent.toLowerCase().includes('sspapp');\n};\n\n/**\n * ํํ์๋ช
์์
์ง์ ์น๋ทฐ ํ๊ฒฝ ์ฌ๋ถ ํ๋จ\n * @returns ์น๋ทฐ(Android/iOS) ํ๊ฒฝ์ด๋ฉด true, ์๋๋ฉด false\n */\nexport const isDspApp = (): boolean => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return (\n checkUserAgentDspApp(navigator.userAgent) && (environment === 'android-webview' || environment === 'ios-webview')\n );\n};\n\n/**\n * FP ํ๋๋ ์น๋ทฐ ํ๊ฒฝ ์ฌ๋ถ ํ๋จ\n * @returns\n */\nexport const isFpPlannerApp = (): boolean => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return (\n checkUserAgentDspApp(navigator.userAgent) === false &&\n (environment === 'android-webview' || environment === 'ios-webview')\n );\n};\n\n/**\n * ์์
ํฌํธ ํ๊ฒฝ ์ฌ๋ถ ํ๋จ\n * @returns\n */\nexport const isSalesPortal = () => {\n if (!isClient()) {\n return false;\n }\n\n const environment = getDspExecutionEnvironment();\n\n return environment === 'iframe';\n};\n\n/**\n * ํ๋ธ๋ฆฟ ์ฌ๋ถ ํ๋จ\n * @param userAgent\n * @returns\n */\nexport const isTablet = (userAgent: string): boolean => {\n const ua = userAgent.toLowerCase();\n\n return (\n // Apple ํ๋ธ๋ฆฟ\n ua.includes('ipad') ||\n // Android ํ๋ธ๋ฆฟ (Mobile ํค์๋ ์์)\n (ua.includes('android') && !ua.includes('mobile')) ||\n // ๋ช
์์ ํ๋ธ๋ฆฟ ํค์๋\n ua.includes('tablet') ||\n // Amazon ํ๋ธ๋ฆฟ\n ua.includes('kindle') ||\n ua.includes('silk') ||\n /kf[a-z]{2}wi|kftt/.test(ua) ||\n // BlackBerry ํ๋ธ๋ฆฟ\n ua.includes('playbook') ||\n // ์ผ์ฑ ๊ฐค๋ญ์ ํญ (๊ฐ์ ๋ ์ ๊ท์)\n /gt-p\\d{4}|sm-[tp]\\d{3}/.test(ua) ||\n // ๊ตฌ๊ธ ๋ฅ์์ค/ํฝ์
ํ๋ธ๋ฆฟ\n /nexus (?:[789]|10)|pixel [cs]|pixel slate/.test(ua) ||\n // ๊ธฐํ ๋ธ๋๋ ํ๋ธ๋ฆฟ\n /xoom|transformer|mediapad|mipad|tab\\s/.test(ua) ||\n // Windows ํ๋ธ๋ฆฟ (๊ฐ์ ๋ ์กฐ๊ฑด)\n (ua.includes('windows') && (ua.includes('touch') || ua.includes('tablet'))) ||\n ua.includes('surface')\n );\n};\n\n/**\n * ์ค๋งํธํฐ ์ฌ๋ถ ํ๋จ\n * @param userAgent\n * @returns\n */\nexport const isPhone = (userAgent: string): boolean => {\n const ua = userAgent.toLowerCase();\n\n return (\n // Apple ๋ชจ๋ฐ์ผ\n ua.includes('iphone') ||\n ua.includes('ipod') ||\n // Android ์ค๋งํธํฐ (Mobile ํค์๋ ์์)\n (ua.includes('android') && ua.includes('mobile')) ||\n // BlackBerry\n ua.includes('blackberry') ||\n ua.includes('bb10') ||\n // Windows Mobile\n ua.includes('windows phone') ||\n ua.includes('windows mobile') ||\n ua.includes('iemobile') ||\n // Opera Mobile\n ua.includes('opera mini') ||\n ua.includes('opera mobi') ||\n // ๊ธฐํ ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ \n (ua.includes('mobile') &&\n (ua.includes('firefox') || ua.includes('chrome') || ua.includes('safari') || ua.includes('edge'))) ||\n // ๋ชจ๋ฐ์ผ ํค์๋ (ํ๋ธ๋ฆฟ ์ ์ธ)\n (ua.includes('mobile') && !ua.includes('tablet')) ||\n // ์ผ์ฑ ๊ฐค๋ญ์ ํฐ (๊ฐ์ )\n /sm-[a-z]\\d{3}[a-z]?|gt-[a-z]\\d{4}/.test(ua) ||\n // LG, HTC ํฐ\n /lg-[a-z]\\d{3,4}|htc[_\\s]/.test(ua) ||\n // ํ์จ์ด/์ค์ค๋ฏธ ๋ฑ (๊ฐ์ )\n /huawei|honor|redmi|mi[\\s\\d]|oneplus|oppo|vivo/.test(ua)\n );\n};\n\n/**\n * ๋ฐ์คํฌํฑ ์ฌ๋ถ ํ๋จ\n * @param userAgent\n * @returns\n */\nexport const isPc = (userAgent: string) => {\n const ua = userAgent.toLowerCase();\n\n return !isPhone(ua) && !isTablet(ua);\n};\n\n/**\n * UserAgent์์ ๊ธฐ๊ธฐ ํ์
๊ตฌ๋ถ\n * @param userAgent\n * @returns\n */\nexport const getFormFactorFromUserAgent = (userAgent: string) => {\n if (!userAgent) {\n return 'pc';\n }\n\n const ua = userAgent.toLowerCase();\n\n if (isTablet(ua)) {\n return 'tablet';\n }\n\n if (isPhone(ua)) {\n return 'phone';\n }\n\n return 'pc';\n};\n\n/**\n * UserAgent์์ ์ด์์ฒด์ ์ด๋ฆ์ ์ถ์ถ\n * @param userAgent - ๋ธ๋ผ์ฐ์ ์ userAgent ๋ฌธ์์ด\n * @returns ์ด์์ฒด์ ์ด๋ฆ\n */\nexport const getOSName = (userAgent: string): OSName => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // iOS ์ฒดํฌ (iPhone, iPad, iPod)\n if (/iphone|ipad|ipod/.test(ua)) {\n return 'ios';\n }\n\n // Android ์ฒดํฌ\n if (ua.includes('android')) {\n return 'android';\n }\n\n // Windows ์ฒดํฌ\n if (ua.includes('windows') || ua.includes('win32') || ua.includes('win64')) {\n return 'windows';\n }\n\n // macOS ์ฒดํฌ (Mac OS X, macOS)\n if (ua.includes('mac os x') || ua.includes('macos') || ua.includes('macintosh')) {\n return 'mac';\n }\n\n // Linux ์ฒดํฌ (Android ์ ์ธ)\n if (ua.includes('linux') && !ua.includes('android')) {\n return 'linux';\n }\n\n return 'unknown';\n};\n\n/**\n * ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์ด์์ฒด์ ์ด๋ฆ์ ๊ฐ์ ธ์ค๊ธฐ\n * @returns ํ์ฌ ํ๊ฒฝ์ ์ด์์ฒด์ ์ด๋ฆ\n */\nexport const getCurrentOSName = (): OSName => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getOSName(navigator.userAgent);\n};\n\n/**\n * UserAgent์์ OS ๋ฒ์ ์ ์ถ์ถ\n * @param userAgent - ๋ธ๋ผ์ฐ์ ์ userAgent ๋ฌธ์์ด\n * @returns OS ๋ฒ์ ๋ฌธ์์ด\n */\nexport const getOSVersion = (userAgent: string): string => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // iOS ๋ฒ์ (iPhone OS 15_0, iPad OS 15_0)\n const iosMatch = ua.match(/os (\\d+)_(\\d+)(?:_(\\d+))?/);\n if (iosMatch && iosMatch.length >= 3) {\n const major = iosMatch[1];\n const minor = iosMatch[2];\n const patch = iosMatch[3];\n\n return patch ? `${major}.${minor}.${patch}` : `${major}.${minor}`;\n }\n\n // Android ๋ฒ์ \n const androidMatch = ua.match(/android (\\d+(?:\\.\\d+)*)/);\n if (androidMatch && androidMatch[1]) {\n return androidMatch[1];\n }\n\n // Windows ๋ฒ์ \n const windowsMatch = ua.match(/windows nt (\\d+\\.\\d+)/);\n if (windowsMatch && windowsMatch[1]) {\n const version = windowsMatch[1];\n // Windows NT ๋ฒ์ ์ ์ค์ Windows ๋ฒ์ ์ผ๋ก ๋งคํ\n const windowsVersionMap: Record<string, string> = {\n '10.0': '10/11',\n '6.3': '8.1',\n '6.2': '8',\n '6.1': '7',\n '6.0': 'Vista',\n '5.1': 'XP'\n };\n\n return windowsVersionMap[version] || version;\n }\n\n // macOS ๋ฒ์ \n const macMatch = ua.match(/mac os x (\\d+)_(\\d+)(?:_(\\d+))?/);\n if (macMatch && macMatch.length >= 3) {\n const major = macMatch[1];\n const minor = macMatch[2];\n const patch = macMatch[3];\n\n return patch ? `${major}.${minor}.${patch}` : `${major}.${minor}`;\n }\n\n return 'unknown';\n};\n\n/**\n * UserAgent์์ ๋ธ๋ผ์ฐ์ ์ด๋ฆ์ ์ถ์ถ\n * @param userAgent - ๋ธ๋ผ์ฐ์ ์ userAgent ๋ฌธ์์ด\n * @returns ๋ธ๋ผ์ฐ์ ์ด๋ฆ\n */\nexport const getBrowserName = (userAgent: string): BrowserName => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // Edge (Chromium ๊ธฐ๋ฐ) - Chrome๋ณด๋ค ๋จผ์ ์ฒดํฌํด์ผ ํจ\n if (ua.includes('edg/') || ua.includes('edge/')) {\n return 'edge';\n }\n\n // Samsung Internet\n if (ua.includes('samsungbrowser')) {\n return 'samsung';\n }\n\n // Opera - Chrome๋ณด๋ค ๋จผ์ ์ฒดํฌํด์ผ ํจ\n if (ua.includes('opr/') || ua.includes('opera')) {\n return 'opera';\n }\n\n // Chrome (Chromium ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ ๋ค๋ณด๋ค ๋ฆ๊ฒ ์ฒดํฌ)\n if (ua.includes('chrome') && !ua.includes('edg')) {\n return 'chrome';\n }\n\n // Firefox\n if (ua.includes('firefox')) {\n return 'firefox';\n }\n\n // Safari (Chrome์ ๊ตฌ๋ถํ๊ธฐ ์ํด webkit ์ฒดํฌ)\n if (ua.includes('safari') && !ua.includes('chrome')) {\n return 'safari';\n }\n\n return 'unknown';\n};\n\n/**\n * UserAgent์์ ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ ์ถ์ถ\n * @param userAgent - ๋ธ๋ผ์ฐ์ ์ userAgent ๋ฌธ์์ด\n * @returns ๋ธ๋ผ์ฐ์ ๋ฒ์ \n */\nexport const getBrowserVersion = (userAgent: string): string => {\n if (!userAgent) {\n return 'unknown';\n }\n\n const ua = userAgent.toLowerCase();\n\n // Edge (Chromium)\n const edgMatch = ua.match(/edg\\/(\\d+(?:\\.\\d+)*)/);\n if (edgMatch && edgMatch[1]) {\n return edgMatch[1];\n }\n\n // Samsung Internet\n const samsungMatch = ua.match(/samsungbrowser\\/(\\d+(?:\\.\\d+)*)/);\n if (samsungMatch && samsungMatch[1]) {\n return samsungMatch[1];\n }\n\n // Opera\n const operaMatch = ua.match(/(?:opr|opera)\\/(\\d+(?:\\.\\d+)*)/);\n if (operaMatch && operaMatch[1]) {\n return operaMatch[1];\n }\n\n // Chrome\n const chromeMatch = ua.match(/chrome\\/(\\d+(?:\\.\\d+)*)/);\n if (chromeMatch && chromeMatch[1] && !ua.includes('edg')) {\n return chromeMatch[1];\n }\n\n // Firefox\n const firefoxMatch = ua.match(/firefox\\/(\\d+(?:\\.\\d+)*)/);\n if (firefoxMatch && firefoxMatch[1]) {\n return firefoxMatch[1];\n }\n\n // Safari\n const safariMatch = ua.match(/version\\/(\\d+(?:\\.\\d+)*)/);\n if (safariMatch && safariMatch[1] && ua.includes('safari') && !ua.includes('chrome')) {\n return safariMatch[1];\n }\n\n return 'unknown';\n};\n/**\n * ํ์ฌ ๋ธ๋ผ์ฐ์ ์ OS ๋ฒ์ ์ ๊ฐ์ ธ์ค๊ธฐ\n * @returns ํ์ฌ ํ๊ฒฝ์ OS ๋ฒ์ \n */\nexport const getCurrentOSVersion = (): string => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getOSVersion(navigator.userAgent);\n};\n\n/**\n * ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์ด๋ฆ์ ๊ฐ์ ธ์ค๊ธฐ\n * @returns ํ์ฌ ํ๊ฒฝ์ ๋ธ๋ผ์ฐ์ ์ด๋ฆ\n */\nexport const getCurrentBrowserName = (): BrowserName => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getBrowserName(navigator.userAgent);\n};\n\n/**\n * ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ๋ฒ์ ์ ๊ฐ์ ธ์ค๊ธฐ\n * @returns ํ์ฌ ํ๊ฒฝ์ ๋ธ๋ผ์ฐ์ ๋ฒ์ \n */\nexport const getCurrentBrowserVersion = (): string => {\n if (!isClient() || typeof navigator === 'undefined') {\n return 'unknown';\n }\n\n return getBrowserVersion(navigator.userAgent);\n};\n\n/**\n * ํด๋ผ์ด์ธํธ์ฉ ๋๋ฐ์ด์ค ID ์์ฑ ๋ฐ ๊ด๋ฆฌ(์์๊ฐ)\n */\nexport const getOrCreateDeviceId = (): string => {\n if (typeof window === 'undefined') {\n return '';\n }\n\n const STORAGE_KEY = 'dsp_device_id';\n let deviceId = localStorage.getItem(STORAGE_KEY);\n\n if (!deviceId) {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 15);\n deviceId = `dsp-web-${timestamp}-${random}`;\n\n try {\n localStorage.setItem(STORAGE_KEY, deviceId);\n } catch (error) {\n console.warn('[DeviceId] localStorage ์ ์ฅ ์คํจ:', error);\n }\n }\n\n return deviceId;\n};\n\n/**\n * ๋๋ฐ์ด์ค ๋ชจ๋ธ ๊ฐ์ง\n */\nexport const getDeviceModel = (): string => {\n if (!isClient()) {\n return '';\n }\n\n const ua = navigator.userAgent;\n\n // iOS\n if (/iPad/.test(ua)) {\n return 'iPad';\n }\n if (/iPhone/.test(ua)) {\n return 'iPhone';\n }\n if (/iPod/.test(ua)) {\n return 'iPod Touch';\n }\n\n // Android - ์ฃผ์ ๋ธ๋๋\n if (/SM-[A-Z0-9]+/.test(ua)) {\n const match = ua.match(/SM-[A-Z0-9]+/);\n\n return match ? `Samsung ${match[0]}` : 'Samsung';\n }\n if (/Pixel/.test(ua)) {\n const match = ua.match(/Pixel [0-9]+[a-zA-Z]*/);\n\n return match ? `Google ${match[0]}` : 'Google Pixel';\n }\n if (/Mi\\s|Redmi|POCO/.test(ua)) {\n return 'Xiaomi';\n }\n if (/HUAWEI/.test(ua)) {\n return 'Huawei';\n }\n if (/OnePlus/.test(ua)) {\n return 'OnePlus';\n }\n\n // Desktop\n if (/Windows/.test(ua)) {\n return 'Windows PC';\n }\n if (/Mac OS X/.test(ua)) {\n return 'Mac';\n }\n if (/Linux/.test(ua)) {\n return 'Linux PC';\n }\n\n return 'Unknown';\n};\n","/**\n * Message ์ด๋ฒคํธ ํจ๋ค๋ฌ๋ฅผ ๊ด๋ฆฌํ๋ ํด๋์ค์
๋๋ค. (์ฑ๊ธํด)\n * ๋ชจ๋ message ํธ๋ค๋ฌ๋ ์ฌ๊ธฐ๋ฅผ ํตํด ๋ฑ๋กํด์ผํฉ๋๋ค.\n * window.addEventListener('message') ์ ์ค๋ณต์ ๋ฐฉ์งํ๊ธฐ ์ํจ์
๋๋ค.\n */\nexport class MessageEventManager {\n private static instance: MessageEventManager;\n private handlers = new Map<string, (event: MessageEvent) => void>();\n\n static getInstance(): MessageEventManager {\n if (!MessageEventManager.instance) {\n MessageEventManager.instance = new MessageEventManager();\n }\n\n return MessageEventManager.instance;\n }\n\n private constructor() {\n window.addEventListener('message', this.handleMessage.bind(this));\n }\n\n /**\n *\n * @param event\n */\n private handleMessage(event: MessageEvent): void {\n // ๋ชจ๋ ๋ฑ๋ก๋ ํธ๋ค๋ฌ ์คํ\n for (const [key, handler] of this.handlers) {\n try {\n handler(event);\n } catch (error) {\n console.error(`Message handler ${key} error:`, error);\n }\n }\n }\n\n /**\n * ์ด๋ฒคํธ ํจ๋ค๋ฌ ํจ์๋ฅผ ๋ฑ๋กํฉ๋๋ค.\n * @param key\n * @param handler\n */\n registerHandler(key: string, handler: (event: MessageEvent) => void): void {\n this.handlers.set(key, handler);\n }\n\n /**\n * ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ ์ญ์ ํฉ๋๋ค.\n * @param key\n */\n unregisterHandler(key: string): void {\n this.handlers.delete(key);\n }\n}\n","interface ConvertTextToImgParams {\n /** ์ด๋ฏธ์ง๋ก ๋ณํํ ๋ฌธ์์ด */\n targetStr: string;\n /** ์บ๋ฒ์ค ๋๋น (์ง์ ํ์ง ์์ผ๋ฉด ํ
์คํธ ๊ธธ์ด์ ๋ฐ๋ผ ์๋ ๊ณ์ฐ) */\n canvasWidth?: number;\n /** ์บ๋ฒ์ค ๋์ด (์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ 150px) */\n canvasHeight?: number;\n /** ๋ฐฐ๊ฒฝ์ (์ง์ ํ์ง ์์ผ๋ฉด ํฌ๋ช
) */\n backgroundColor?: string;\n /** ํฐํธ ํฌ๊ธฐ (์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ 75px) */\n fontSize?: number;\n /** ํฐํธ ์์ (์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ ๊ฒ์ ์) */\n fontColor?: string;\n /** ํฐํธ ๋๊ป (์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ bold) */\n fontWeight?: string;\n}\n\n/**\n * ํ
์คํธ๋ฅผ ์ด๋ฏธ์ง(Base64)๋ก ๋ณํํ๋ ํจ์\n * @param params - ๋ณํ์ ํ์ํ ํ๋ผ๋ฏธํฐ ๊ฐ์ฒด\n * @returns Base64๋ก ์ธ์ฝ๋ฉ๋ ์ด๋ฏธ์ง ๋ฐ์ดํฐ URL\n */\nexport const convertTextToImg = ({\n targetStr,\n canvasWidth,\n canvasHeight,\n backgroundColor,\n fontColor,\n fontSize,\n fontWeight\n}: ConvertTextToImgParams): string => {\n // 1. ๋ฉ๋ชจ๋ฆฌ์ ์บ๋ฒ์ค ์์ ์์ฑ\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n // ์บ๋ฒ์ค ์ปจํ
์คํธ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ ๊ฒฝ์ฐ ์๋ฌ ์ฒ๋ฆฌ\n throw new Error('Canvas context๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.');\n }\n\n // 2. ์บ๋ฒ์ค ํฌ๊ธฐ ์ค์ \n const defaultHeight = 150;\n const calculatedWidth = targetStr.length * 70; // ๊ธ์ ์ ๊ธฐ๋ฐ ๋๋น ๊ณ์ฐ\n\n canvas.width = canvasWidth ?? calculatedWidth;\n canvas.height = canvasHeight ?? defaultHeight;\n\n // 3. ๋ฐฐ๊ฒฝ์ ์ฒ๋ฆฌ\n if (backgroundColor) {\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n\n // 4. ํ
์คํธ ๊ทธ๋ฆฌ๊ธฐ\n ctx.fillStyle = fontColor ?? 'black';\n ctx.font = `${fontSize ?? 75}px ${fontWeight ?? 'bold'}`;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle'; // ํ
์คํธ๋ฅผ ์์ง ์ค์์ ๋ ์ ๋ง์ถ๊ธฐ ์ํด ์ถ๊ฐ\n\n // ํ
์คํธ๋ฅผ ์บ๋ฒ์ค ์ค์์ ๊ทธ๋ฆฝ๋๋ค.\n ctx.fillText(targetStr, canvas.width / 2, canvas.height / 2);\n\n // 5. Base64 ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ก ๋ณํํ์ฌ ๋ฐํ\n return canvas.toDataURL(); // ๊ธฐ๋ณธ์ ์ผ๋ก 'image/png'\n};\n","export const getCookie = (name: string): string => {\n if (typeof document === 'undefined') {\n return '';\n }\n const match = document.cookie.match(new RegExp(`(^|; *)${name}=([^;]*)`));\n\n return match ? decodeURIComponent(match[2] || '') : '';\n};\n\nexport const setCookie = (\n name: string,\n value: string,\n options: {\n expires?: number | Date; // number of days\n path?: string;\n domain?: string;\n secure?: boolean;\n } = {}\n): void => {\n if (typeof document === 'undefined') {\n return;\n }\n\n let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n if (options.expires) {\n let expiresDate: Date;\n if (typeof options.expires === 'number') {\n expiresDate = new Date();\n expiresDate.setDate(expiresDate.getDate() + options.expires);\n } else {\n expiresDate = options.expires;\n }\n cookieString += `; expires=${expiresDate.toUTCString()}`;\n }\n\n cookieString += `; path=${options.path || '/'}`;\n\n if (options.domain) {\n cookieString += `; domain=${options.domain}`;\n }\n\n if (options.secure) {\n cookieString += '; secure';\n }\n\n document.cookie = cookieString;\n};\n\nexport const deleteCookie = (name: string, options: { path?: string; domain?: string } = {}): void => {\n setCookie(name, '', { ...options, expires: -1 });\n};\n"]}
|