sales-frontend-bridge 0.0.3 → 0.0.4

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/bridge/utils/platform-detector-utils.ts","../src/bridge/core/core.ts","../src/bridge/common-bridge.ts","../src/bridge/native-bridge.ts","../src/bridge/portal-bridge.ts","../src/bridge/factory/bridge-factory.ts","../src/bridge/bridge.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import { Platform } from '../types/common.types';\n\nexport const platformDetectorUtils = {\n getPlatform(): Platform {\n // TODO: platform 탐지는 좀 더 세밀하게 할 수 있도록 네이티브에 요청\n if (window.n2bridge) {\n return 'android';\n }\n\n if (window.webkit) {\n return 'ios';\n }\n\n if (window.self !== window.top) {\n return 'portal';\n }\n\n return 'web';\n }\n};\n","import { platformDetectorUtils } from '../utils/platform-detector-utils';\nimport { IBridgeCommand, IBridgeOptions, IBridgePromise } from '../types/core.types';\nimport { BridgeAction } from '../types/bridge-types';\n\n/**\n * Bridge 통신 위한 핵심 클래스\n */\nexport class Core {\n constructor() {\n this.initializeWindowBridge();\n }\n\n /**\n * Promise를 처리하기 위한 고유 ID 생성\n * @returns\n */\n private generatePromiseId(): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).slice(2, 11);\n\n return `${timestamp}_${random}`;\n }\n\n /**\n * 네이티브 통신을 위해 window.n2bridge 객체 초기화\n */\n private initializeWindowBridge(): void {\n // 예외 체크\n if (!window.n2bridge) {\n window.n2bridge = {\n promises: {},\n resolvePromise: () => {},\n finallyResolvePromise: () => {},\n callFromNative: () => {}\n };\n }\n\n // 항상 최신 함수로 업데이트\n window.n2bridge.resolvePromise = this.createResolvePromiseHandler();\n window.n2bridge.finallyResolvePromise = this.createFinallyResolvePromiseHandler();\n window.n2bridge.callFromNative = this.createCallFromNativeHandler();\n }\n\n /**\n * Promise 처리 함수(Native에서 호출)\n * @returns\n */\n private createResolvePromiseHandler() {\n return (promiseId: string, data?: any, error?: any) => {\n console.log('[resolvePromise]::', promiseId, data, error);\n\n const promise: IBridgePromise | undefined = window.n2bridge.promises[promiseId];\n if (!promise) {\n console.error('[resolvePromise] Promise not found::', promiseId);\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n return;\n }\n\n promise.resolve(data);\n this.cleanupPromise(promiseId);\n } catch (err) {\n console.error('[resolvePromise] Error handling promise::', err);\n this.cleanupPromise(promiseId);\n }\n };\n }\n\n /**\n * Promise 최종 처리 함수\n * @returns\n */\n private createFinallyResolvePromiseHandler() {\n return (promiseId: string, data?: any, error?: any) => {\n const promise: IBridgePromise | undefined = window.n2bridge.promises[promiseId];\n if (!promise) {\n console.error('[resolvePromise] Promise not found::', promiseId);\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n return;\n }\n\n promise.resolve(data);\n this.cleanupPromise(promiseId);\n } catch (err) {\n console.error('[resolvePromise] Error handling promise::', err);\n this.cleanupPromise(promiseId);\n }\n };\n }\n\n /**\n * Native 에서 웹으로 호출하는 함수\n * TODO: 필요시 추가 코딩\n * @returns\n */\n private createCallFromNativeHandler() {\n return (jsonStr: string) => {\n try {\n const command = JSON.parse(jsonStr);\n console.log('[callFromNative]::', command);\n } catch (error) {\n console.error('[callFromNative] parse error::', error);\n }\n };\n }\n\n /**\n * 부모 통신\n * @param service\n * @param action\n * @param option\n * @returns\n */\n async callToNative<T = any>(action: BridgeAction, options?: IBridgeOptions): Promise<T> {\n const { retainCallback: retain, ...commandOptions } = options || {};\n\n return new Promise<T>((resolve, reject) => {\n const promiseId = `${action}_${this.generatePromiseId()}`;\n console.log('[callToNative] promiseId::', promiseId);\n\n // 바로 window.n2bridge.promises에 저장\n window.n2bridge.promises[promiseId] = { resolve, reject, retain };\n\n try {\n const command: IBridgeCommand = {\n action,\n eventName: action,\n promiseId,\n option: commandOptions\n };\n\n console.log('[callToNative] command::', command);\n\n const platform = platformDetectorUtils.getPlatform();\n\n if (platform === 'android') {\n window.n2bridge?.callFromWeb?.(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'ios') {\n window.webkit?.messageHandlers?.n2bridge?.postMessage(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'portal') {\n window.parent.postMessage(command, '*');\n\n return;\n }\n\n // 지원하지 않는 플랫폼\n console.warn(`[callToNative] 현재 플랫폼(${platform})에서는 지원하지 않는 서비스(${action})입니다.`);\n this.cleanupPromise(promiseId);\n reject(new Error(`Unsupported platform: ${platform}`));\n } catch (error) {\n console.error('[callToNative] error::', error);\n this.cleanupPromise(promiseId);\n reject(error);\n }\n });\n }\n\n /**\n * promiseId를 초기화 해줍니다.\n * @param promiseId\n */\n private cleanupPromise(promiseId: string): void {\n delete window.n2bridge.promises[promiseId];\n }\n}\n","import { ICommonBridge } from './types/common.types';\nimport { Core } from './core/core';\nimport { Platform } from './types/common.types';\nimport { platformDetectorUtils } from './utils/platform-detector-utils';\nimport { ILoginOptions } from './types/bridge-types';\n\n/**\n * App, 영업포털과 동일하게 사용가능한 기능 정의 클래스\n */\nexport class CommonBridge implements ICommonBridge {\n protected platform: Platform;\n protected core: Core;\n\n constructor() {\n this.platform = platformDetectorUtils.getPlatform();\n this.core = new Core();\n }\n\n // 공통 기능 구현\n //! 분기가 생기면 각 클래스에서 Override\n async logout(options: ILoginOptions): Promise<void> {\n return this.core.callToNative('logout', options);\n }\n}\n","import { INativeBridge } from './types/common.types';\nimport { CommonBridge } from './common-bridge';\nimport { IShowWebPopupOptions } from './types/bridge-types';\n\nexport class NativeBridge extends CommonBridge implements INativeBridge {\n /**\n *\n * @param options\n * @returns\n */\n async showWebPopup<T = any>(options: IShowWebPopupOptions): Promise<T> {\n return this.core.callToNative<T>('showWebPopup', options);\n }\n}\n","import { CommonBridge } from './common-bridge';\nimport { IPortalBridge } from './types/common.types';\n\n/**\n * 영업포탈 전용 Bridge\n */\nexport class PortalBridge extends CommonBridge implements IPortalBridge {\n /**\n * 영업포탈 tab open\n * @param options\n * @returns\n */\n async openUrlWindow<T = any>(options: any): Promise<T> {\n return this.core.callToNative<T>('openMdi', options);\n }\n}\n","import { platformDetectorUtils } from '../utils/platform-detector-utils';\nimport { NativeBridge } from '../native-bridge';\nimport { PortalBridge } from '../portal-bridge';\nimport { CommonBridge } from '../common-bridge';\n\n/**\n * 브릿지 객체 생성 전용 클래스\n */\nexport class BridgeFactory {\n static create(): NativeBridge | PortalBridge | CommonBridge {\n const platform = platformDetectorUtils.getPlatform();\n\n switch (platform) {\n case 'android':\n case 'ios':\n return new NativeBridge();\n\n case 'portal':\n return new PortalBridge();\n\n case 'web':\n default:\n console.warn(`[BridgeFactory] 현재 플랫폼(${platform})에서는 Bridge 객체를 생성할 수 없습니다.`);\n\n return new CommonBridge();\n }\n }\n}\n","import { NativeBridge } from './native-bridge';\nimport { PortalBridge } from './portal-bridge';\nimport { CommonBridge } from './common-bridge';\nimport { BridgeFactory } from './factory/bridge-factory';\n\nexport class Bridge {\n private static instance: NativeBridge | PortalBridge | CommonBridge;\n\n static getInstance() {\n if (!this.instance) {\n this.instance = BridgeFactory.create();\n }\n return this.instance;\n }\n\n // 플랫폼별 접근자들만 제공\n static getCommonBridge(): CommonBridge {\n return this.getInstance();\n }\n\n static getNativeBridge(): NativeBridge | null {\n const instance = this.getInstance();\n return instance instanceof NativeBridge ? instance : null;\n }\n\n static getPortalBridge(): PortalBridge | null {\n const instance = this.getInstance();\n return instance instanceof PortalBridge ? instance : null;\n }\n\n // 플랫폼 체크\n static isNativePlatform(): boolean {\n return this.getInstance() instanceof NativeBridge;\n }\n\n static isPortalPlatform(): boolean {\n return this.getInstance() instanceof PortalBridge;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/bridge/utils/platform-detector-utils.ts","../src/bridge/core/core.ts","../src/bridge/common-bridge.ts","../src/bridge/native-bridge.ts","../src/bridge/portal-bridge.ts","../src/bridge/factory/bridge-factory.ts","../src/bridge/bridge.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import { Platform } from '../types/common.types';\n\nexport const platformDetectorUtils = {\n getPlatform(): Platform {\n // TODO: platform 탐지는 좀 더 세밀하게 할 수 있도록 네이티브에 요청\n if (window.n2bridge) {\n return 'android';\n }\n\n if (window.webkit) {\n return 'ios';\n }\n\n if (window.self !== window.top) {\n return 'portal';\n }\n\n return 'web';\n }\n};\n","import { platformDetectorUtils } from '../utils/platform-detector-utils';\nimport { BridgeCommand, BridgeOptions, BridgePromise } from '../types/core.types';\nimport { BridgeAction } from '../types/bridge-types';\n\n/**\n * Bridge 통신 위한 핵심 클래스\n */\nexport class Core {\n constructor() {\n this.initializeWindowBridge();\n }\n\n /**\n * Promise를 처리하기 위한 고유 ID 생성\n * @returns\n */\n private generatePromiseId(): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).slice(2, 11);\n\n return `${timestamp}_${random}`;\n }\n\n /**\n * 네이티브 통신을 위해 window.n2bridge 객체 초기화\n */\n private initializeWindowBridge(): void {\n // 예외 체크\n if (!window.n2bridge) {\n window.n2bridge = {\n promises: {},\n resolvePromise: () => {},\n finallyResolvePromise: () => {},\n callFromNative: () => {}\n };\n }\n\n // 항상 최신 함수로 업데이트\n window.n2bridge.resolvePromise = this.createResolvePromiseHandler();\n window.n2bridge.finallyResolvePromise = this.createFinallyResolvePromiseHandler();\n window.n2bridge.callFromNative = this.createCallFromNativeHandler();\n }\n\n /**\n * Promise 처리 함수(Native에서 호출)\n * @returns\n */\n private createResolvePromiseHandler() {\n return (promiseId: string, data?: any, error?: any) => {\n console.log('[resolvePromise]::', promiseId, data, error);\n\n const promise: BridgePromise | undefined = window.n2bridge.promises[promiseId];\n if (!promise) {\n console.error('[resolvePromise] Promise not found::', promiseId);\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n return;\n }\n\n promise.resolve(data);\n this.cleanupPromise(promiseId);\n } catch (err) {\n console.error('[resolvePromise] Error handling promise::', err);\n this.cleanupPromise(promiseId);\n }\n };\n }\n\n /**\n * Promise 최종 처리 함수\n * @returns\n */\n private createFinallyResolvePromiseHandler() {\n return (promiseId: string, data?: any, error?: any) => {\n const promise: BridgePromise | undefined = window.n2bridge.promises[promiseId];\n if (!promise) {\n console.error('[resolvePromise] Promise not found::', promiseId);\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n return;\n }\n\n promise.resolve(data);\n this.cleanupPromise(promiseId);\n } catch (err) {\n console.error('[resolvePromise] Error handling promise::', err);\n this.cleanupPromise(promiseId);\n }\n };\n }\n\n /**\n * Native 에서 웹으로 호출하는 함수\n * TODO: 필요시 추가 코딩\n * @returns\n */\n private createCallFromNativeHandler() {\n return (jsonStr: string) => {\n try {\n const command = JSON.parse(jsonStr);\n console.log('[callFromNative]::', command);\n } catch (error) {\n console.error('[callFromNative] parse error::', error);\n }\n };\n }\n\n /**\n * 부모 통신\n * @param service\n * @param action\n * @param option\n * @returns\n */\n async callToNative<T = any>(action: BridgeAction, options?: BridgeOptions): Promise<T> {\n const { retainCallback: retain, ...commandOptions } = options || {};\n\n return new Promise<T>((resolve, reject) => {\n const promiseId = `${action}_${this.generatePromiseId()}`;\n console.log('[callToNative] promiseId::', promiseId);\n\n // 바로 window.n2bridge.promises에 저장\n window.n2bridge.promises[promiseId] = { resolve, reject, retain };\n\n try {\n const command: BridgeCommand = {\n action,\n eventName: action,\n promiseId,\n option: commandOptions\n };\n\n console.log('[callToNative] command::', command);\n\n const platform = platformDetectorUtils.getPlatform();\n\n if (platform === 'android') {\n window.n2bridge?.callFromWeb?.(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'ios') {\n window.webkit?.messageHandlers?.n2bridge?.postMessage(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'portal') {\n window.parent.postMessage(command, '*');\n\n return;\n }\n\n // 지원하지 않는 플랫폼\n console.warn(`[callToNative] 현재 플랫폼(${platform})에서는 지원하지 않는 서비스(${action})입니다.`);\n this.cleanupPromise(promiseId);\n reject(new Error(`Unsupported platform: ${platform}`));\n } catch (error) {\n console.error('[callToNative] error::', error);\n this.cleanupPromise(promiseId);\n reject(error);\n }\n });\n }\n\n /**\n * promiseId를 초기화 해줍니다.\n * @param promiseId\n */\n private cleanupPromise(promiseId: string): void {\n delete window.n2bridge.promises[promiseId];\n }\n}\n","import { ICommonBridge } from './types/common.types';\nimport { Core } from './core/core';\nimport { Platform } from './types/common.types';\nimport { platformDetectorUtils } from './utils/platform-detector-utils';\nimport { LoginOptions } from './types/bridge-types';\n\n/**\n * App, 영업포털과 동일하게 사용가능한 기능 정의 클래스\n */\nexport class CommonBridge implements ICommonBridge {\n protected platform: Platform;\n protected core: Core;\n\n constructor() {\n this.platform = platformDetectorUtils.getPlatform();\n this.core = new Core();\n }\n\n // 공통 기능 구현\n //! 분기가 생기면 각 클래스에서 Override\n async logout(options: LoginOptions): Promise<void> {\n return this.core.callToNative('logout', options);\n }\n}\n","import { INativeBridge } from './types/common.types';\nimport { CommonBridge } from './common-bridge';\nimport { ShowWebPopupOptions } from './types/bridge-types';\n\nexport class NativeBridge extends CommonBridge implements INativeBridge {\n /**\n *\n * @param options\n * @returns\n */\n async showWebPopup<T = any>(options: ShowWebPopupOptions): Promise<T> {\n return this.core.callToNative<T>('showWebPopup', options);\n }\n}\n","import { CommonBridge } from './common-bridge';\nimport { IPortalBridge } from './types/common.types';\n\n/**\n * 영업포탈 전용 Bridge\n */\nexport class PortalBridge extends CommonBridge implements IPortalBridge {\n /**\n * 영업포탈 tab open\n * @param options\n * @returns\n */\n async openUrlWindow<T = any>(options: any): Promise<T> {\n return this.core.callToNative<T>('openMdi', options);\n }\n}\n","import { platformDetectorUtils } from '../utils/platform-detector-utils';\nimport { NativeBridge } from '../native-bridge';\nimport { PortalBridge } from '../portal-bridge';\nimport { CommonBridge } from '../common-bridge';\n\n/**\n * 브릿지 객체 생성 전용 클래스\n */\nexport class BridgeFactory {\n static create(): NativeBridge | PortalBridge | CommonBridge {\n const platform = platformDetectorUtils.getPlatform();\n\n switch (platform) {\n case 'android':\n case 'ios':\n return new NativeBridge();\n\n case 'portal':\n return new PortalBridge();\n\n case 'web':\n default:\n console.warn(`[BridgeFactory] 현재 플랫폼(${platform})에서는 Bridge 객체를 생성할 수 없습니다.`);\n\n return new CommonBridge();\n }\n }\n}\n","import { NativeBridge } from './native-bridge';\nimport { PortalBridge } from './portal-bridge';\nimport { CommonBridge } from './common-bridge';\nimport { BridgeFactory } from './factory/bridge-factory';\n\nexport class Bridge {\n private static instance: NativeBridge | PortalBridge | CommonBridge;\n\n static getInstance() {\n if (!this.instance) {\n this.instance = BridgeFactory.create();\n }\n return this.instance;\n }\n\n // 플랫폼별 접근자들만 제공\n static getCommonBridge(): CommonBridge {\n return this.getInstance();\n }\n\n static getNativeBridge(): NativeBridge | null {\n const instance = this.getInstance();\n return instance instanceof NativeBridge ? instance : null;\n }\n\n static getPortalBridge(): PortalBridge | null {\n const instance = this.getInstance();\n return instance instanceof PortalBridge ? instance : null;\n }\n\n // 플랫폼 체크\n static isNativePlatform(): boolean {\n return this.getInstance() instanceof NativeBridge;\n }\n\n static isPortalPlatform(): boolean {\n return this.getInstance() instanceof PortalBridge;\n }\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -9,13 +9,13 @@ type BridgeAction = NativeAction | PortalAction;
9
9
  /**
10
10
  * Params
11
11
  */
12
- interface IOpenUrlWindowParams {
12
+ interface OpenUrlWindowParams {
13
13
  }
14
- interface ILogoutParams {
14
+ interface LogoutParams {
15
15
  }
16
- interface ILoginOptions {
16
+ interface LoginOptions {
17
17
  }
18
- interface IShowWebPopupOptions {
18
+ interface ShowWebPopupOptions {
19
19
  /** 0: fullscreen, 1: title bar, 2: size 지정 가능 팝업, 3: wk webview */
20
20
  popupType: 0 | 1 | 2 | 3;
21
21
  /** tㅏ이즈 */
@@ -31,24 +31,24 @@ interface IShowWebPopupOptions {
31
31
 
32
32
  type Platform = 'web' | 'android' | 'ios' | 'portal';
33
33
  interface ICommonBridge {
34
- logout(options: ILogoutParams): Promise<any>;
34
+ logout(options: LogoutParams): Promise<any>;
35
35
  }
36
- interface INativeOnlyBridge {
37
- showWebPopup<T>(options: IShowWebPopupOptions): Promise<T>;
36
+ interface NativeOnlyBridge {
37
+ showWebPopup<T>(options: ShowWebPopupOptions): Promise<T>;
38
38
  }
39
- interface IPortalOnlyBridge {
40
- openUrlWindow(options: IOpenUrlWindowParams): Promise<void>;
39
+ interface PortalOnlyBridge {
40
+ openUrlWindow(options: OpenUrlWindowParams): Promise<void>;
41
41
  }
42
- interface INativeBridge extends ICommonBridge, INativeOnlyBridge {
42
+ interface INativeBridge extends ICommonBridge, NativeOnlyBridge {
43
43
  }
44
- interface IPortalBridge extends ICommonBridge, IPortalOnlyBridge {
44
+ interface IPortalBridge extends ICommonBridge, PortalOnlyBridge {
45
45
  }
46
46
 
47
47
  type RetainCallback<T = any> = (params: T) => void;
48
48
  /**
49
49
  * Command의 옵션
50
50
  */
51
- interface IBridgeOptions {
51
+ interface BridgeOptions {
52
52
  retainCallback?: RetainCallback;
53
53
  [key: string]: any;
54
54
  }
@@ -90,7 +90,7 @@ declare class Core {
90
90
  * @param option
91
91
  * @returns
92
92
  */
93
- callToNative<T = any>(action: BridgeAction, options?: IBridgeOptions): Promise<T>;
93
+ callToNative<T = any>(action: BridgeAction, options?: BridgeOptions): Promise<T>;
94
94
  /**
95
95
  * promiseId를 초기화 해줍니다.
96
96
  * @param promiseId
@@ -105,7 +105,7 @@ declare class CommonBridge implements ICommonBridge {
105
105
  protected platform: Platform;
106
106
  protected core: Core;
107
107
  constructor();
108
- logout(options: ILoginOptions): Promise<void>;
108
+ logout(options: LoginOptions): Promise<void>;
109
109
  }
110
110
 
111
111
  declare class NativeBridge extends CommonBridge implements INativeBridge {
@@ -114,7 +114,7 @@ declare class NativeBridge extends CommonBridge implements INativeBridge {
114
114
  * @param options
115
115
  * @returns
116
116
  */
117
- showWebPopup<T = any>(options: IShowWebPopupOptions): Promise<T>;
117
+ showWebPopup<T = any>(options: ShowWebPopupOptions): Promise<T>;
118
118
  }
119
119
 
120
120
  /**
package/dist/index.d.ts CHANGED
@@ -9,13 +9,13 @@ type BridgeAction = NativeAction | PortalAction;
9
9
  /**
10
10
  * Params
11
11
  */
12
- interface IOpenUrlWindowParams {
12
+ interface OpenUrlWindowParams {
13
13
  }
14
- interface ILogoutParams {
14
+ interface LogoutParams {
15
15
  }
16
- interface ILoginOptions {
16
+ interface LoginOptions {
17
17
  }
18
- interface IShowWebPopupOptions {
18
+ interface ShowWebPopupOptions {
19
19
  /** 0: fullscreen, 1: title bar, 2: size 지정 가능 팝업, 3: wk webview */
20
20
  popupType: 0 | 1 | 2 | 3;
21
21
  /** tㅏ이즈 */
@@ -31,24 +31,24 @@ interface IShowWebPopupOptions {
31
31
 
32
32
  type Platform = 'web' | 'android' | 'ios' | 'portal';
33
33
  interface ICommonBridge {
34
- logout(options: ILogoutParams): Promise<any>;
34
+ logout(options: LogoutParams): Promise<any>;
35
35
  }
36
- interface INativeOnlyBridge {
37
- showWebPopup<T>(options: IShowWebPopupOptions): Promise<T>;
36
+ interface NativeOnlyBridge {
37
+ showWebPopup<T>(options: ShowWebPopupOptions): Promise<T>;
38
38
  }
39
- interface IPortalOnlyBridge {
40
- openUrlWindow(options: IOpenUrlWindowParams): Promise<void>;
39
+ interface PortalOnlyBridge {
40
+ openUrlWindow(options: OpenUrlWindowParams): Promise<void>;
41
41
  }
42
- interface INativeBridge extends ICommonBridge, INativeOnlyBridge {
42
+ interface INativeBridge extends ICommonBridge, NativeOnlyBridge {
43
43
  }
44
- interface IPortalBridge extends ICommonBridge, IPortalOnlyBridge {
44
+ interface IPortalBridge extends ICommonBridge, PortalOnlyBridge {
45
45
  }
46
46
 
47
47
  type RetainCallback<T = any> = (params: T) => void;
48
48
  /**
49
49
  * Command의 옵션
50
50
  */
51
- interface IBridgeOptions {
51
+ interface BridgeOptions {
52
52
  retainCallback?: RetainCallback;
53
53
  [key: string]: any;
54
54
  }
@@ -90,7 +90,7 @@ declare class Core {
90
90
  * @param option
91
91
  * @returns
92
92
  */
93
- callToNative<T = any>(action: BridgeAction, options?: IBridgeOptions): Promise<T>;
93
+ callToNative<T = any>(action: BridgeAction, options?: BridgeOptions): Promise<T>;
94
94
  /**
95
95
  * promiseId를 초기화 해줍니다.
96
96
  * @param promiseId
@@ -105,7 +105,7 @@ declare class CommonBridge implements ICommonBridge {
105
105
  protected platform: Platform;
106
106
  protected core: Core;
107
107
  constructor();
108
- logout(options: ILoginOptions): Promise<void>;
108
+ logout(options: LoginOptions): Promise<void>;
109
109
  }
110
110
 
111
111
  declare class NativeBridge extends CommonBridge implements INativeBridge {
@@ -114,7 +114,7 @@ declare class NativeBridge extends CommonBridge implements INativeBridge {
114
114
  * @param options
115
115
  * @returns
116
116
  */
117
- showWebPopup<T = any>(options: IShowWebPopupOptions): Promise<T>;
117
+ showWebPopup<T = any>(options: ShowWebPopupOptions): Promise<T>;
118
118
  }
119
119
 
120
120
  /**
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/bridge/utils/platform-detector-utils.ts","../src/bridge/core/core.ts","../src/bridge/common-bridge.ts","../src/bridge/native-bridge.ts","../src/bridge/portal-bridge.ts","../src/bridge/factory/bridge-factory.ts","../src/bridge/bridge.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { Platform } from '../types/common.types';\n\nexport const platformDetectorUtils = {\n getPlatform(): Platform {\n // TODO: platform 탐지는 좀 더 세밀하게 할 수 있도록 네이티브에 요청\n if (window.n2bridge) {\n return 'android';\n }\n\n if (window.webkit) {\n return 'ios';\n }\n\n if (window.self !== window.top) {\n return 'portal';\n }\n\n return 'web';\n }\n};\n","import { platformDetectorUtils } from '../utils/platform-detector-utils';\nimport { IBridgeCommand, IBridgeOptions, IBridgePromise } from '../types/core.types';\nimport { BridgeAction } from '../types/bridge-types';\n\n/**\n * Bridge 통신 위한 핵심 클래스\n */\nexport class Core {\n constructor() {\n this.initializeWindowBridge();\n }\n\n /**\n * Promise를 처리하기 위한 고유 ID 생성\n * @returns\n */\n private generatePromiseId(): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).slice(2, 11);\n\n return `${timestamp}_${random}`;\n }\n\n /**\n * 네이티브 통신을 위해 window.n2bridge 객체 초기화\n */\n private initializeWindowBridge(): void {\n // 예외 체크\n if (!window.n2bridge) {\n window.n2bridge = {\n promises: {},\n resolvePromise: () => {},\n finallyResolvePromise: () => {},\n callFromNative: () => {}\n };\n }\n\n // 항상 최신 함수로 업데이트\n window.n2bridge.resolvePromise = this.createResolvePromiseHandler();\n window.n2bridge.finallyResolvePromise = this.createFinallyResolvePromiseHandler();\n window.n2bridge.callFromNative = this.createCallFromNativeHandler();\n }\n\n /**\n * Promise 처리 함수(Native에서 호출)\n * @returns\n */\n private createResolvePromiseHandler() {\n return (promiseId: string, data?: any, error?: any) => {\n console.log('[resolvePromise]::', promiseId, data, error);\n\n const promise: IBridgePromise | undefined = window.n2bridge.promises[promiseId];\n if (!promise) {\n console.error('[resolvePromise] Promise not found::', promiseId);\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n return;\n }\n\n promise.resolve(data);\n this.cleanupPromise(promiseId);\n } catch (err) {\n console.error('[resolvePromise] Error handling promise::', err);\n this.cleanupPromise(promiseId);\n }\n };\n }\n\n /**\n * Promise 최종 처리 함수\n * @returns\n */\n private createFinallyResolvePromiseHandler() {\n return (promiseId: string, data?: any, error?: any) => {\n const promise: IBridgePromise | undefined = window.n2bridge.promises[promiseId];\n if (!promise) {\n console.error('[resolvePromise] Promise not found::', promiseId);\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n return;\n }\n\n promise.resolve(data);\n this.cleanupPromise(promiseId);\n } catch (err) {\n console.error('[resolvePromise] Error handling promise::', err);\n this.cleanupPromise(promiseId);\n }\n };\n }\n\n /**\n * Native 에서 웹으로 호출하는 함수\n * TODO: 필요시 추가 코딩\n * @returns\n */\n private createCallFromNativeHandler() {\n return (jsonStr: string) => {\n try {\n const command = JSON.parse(jsonStr);\n console.log('[callFromNative]::', command);\n } catch (error) {\n console.error('[callFromNative] parse error::', error);\n }\n };\n }\n\n /**\n * 부모 통신\n * @param service\n * @param action\n * @param option\n * @returns\n */\n async callToNative<T = any>(action: BridgeAction, options?: IBridgeOptions): Promise<T> {\n const { retainCallback: retain, ...commandOptions } = options || {};\n\n return new Promise<T>((resolve, reject) => {\n const promiseId = `${action}_${this.generatePromiseId()}`;\n console.log('[callToNative] promiseId::', promiseId);\n\n // 바로 window.n2bridge.promises에 저장\n window.n2bridge.promises[promiseId] = { resolve, reject, retain };\n\n try {\n const command: IBridgeCommand = {\n action,\n eventName: action,\n promiseId,\n option: commandOptions\n };\n\n console.log('[callToNative] command::', command);\n\n const platform = platformDetectorUtils.getPlatform();\n\n if (platform === 'android') {\n window.n2bridge?.callFromWeb?.(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'ios') {\n window.webkit?.messageHandlers?.n2bridge?.postMessage(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'portal') {\n window.parent.postMessage(command, '*');\n\n return;\n }\n\n // 지원하지 않는 플랫폼\n console.warn(`[callToNative] 현재 플랫폼(${platform})에서는 지원하지 않는 서비스(${action})입니다.`);\n this.cleanupPromise(promiseId);\n reject(new Error(`Unsupported platform: ${platform}`));\n } catch (error) {\n console.error('[callToNative] error::', error);\n this.cleanupPromise(promiseId);\n reject(error);\n }\n });\n }\n\n /**\n * promiseId를 초기화 해줍니다.\n * @param promiseId\n */\n private cleanupPromise(promiseId: string): void {\n delete window.n2bridge.promises[promiseId];\n }\n}\n","import { ICommonBridge } from './types/common.types';\nimport { Core } from './core/core';\nimport { Platform } from './types/common.types';\nimport { platformDetectorUtils } from './utils/platform-detector-utils';\nimport { ILoginOptions } from './types/bridge-types';\n\n/**\n * App, 영업포털과 동일하게 사용가능한 기능 정의 클래스\n */\nexport class CommonBridge implements ICommonBridge {\n protected platform: Platform;\n protected core: Core;\n\n constructor() {\n this.platform = platformDetectorUtils.getPlatform();\n this.core = new Core();\n }\n\n // 공통 기능 구현\n //! 분기가 생기면 각 클래스에서 Override\n async logout(options: ILoginOptions): Promise<void> {\n return this.core.callToNative('logout', options);\n }\n}\n","import { INativeBridge } from './types/common.types';\nimport { CommonBridge } from './common-bridge';\nimport { IShowWebPopupOptions } from './types/bridge-types';\n\nexport class NativeBridge extends CommonBridge implements INativeBridge {\n /**\n *\n * @param options\n * @returns\n */\n async showWebPopup<T = any>(options: IShowWebPopupOptions): Promise<T> {\n return this.core.callToNative<T>('showWebPopup', options);\n }\n}\n","import { CommonBridge } from './common-bridge';\nimport { IPortalBridge } from './types/common.types';\n\n/**\n * 영업포탈 전용 Bridge\n */\nexport class PortalBridge extends CommonBridge implements IPortalBridge {\n /**\n * 영업포탈 tab open\n * @param options\n * @returns\n */\n async openUrlWindow<T = any>(options: any): Promise<T> {\n return this.core.callToNative<T>('openMdi', options);\n }\n}\n","import { platformDetectorUtils } from '../utils/platform-detector-utils';\nimport { NativeBridge } from '../native-bridge';\nimport { PortalBridge } from '../portal-bridge';\nimport { CommonBridge } from '../common-bridge';\n\n/**\n * 브릿지 객체 생성 전용 클래스\n */\nexport class BridgeFactory {\n static create(): NativeBridge | PortalBridge | CommonBridge {\n const platform = platformDetectorUtils.getPlatform();\n\n switch (platform) {\n case 'android':\n case 'ios':\n return new NativeBridge();\n\n case 'portal':\n return new PortalBridge();\n\n case 'web':\n default:\n console.warn(`[BridgeFactory] 현재 플랫폼(${platform})에서는 Bridge 객체를 생성할 수 없습니다.`);\n\n return new CommonBridge();\n }\n }\n}\n","import { NativeBridge } from './native-bridge';\nimport { PortalBridge } from './portal-bridge';\nimport { CommonBridge } from './common-bridge';\nimport { BridgeFactory } from './factory/bridge-factory';\n\nexport class Bridge {\n private static instance: NativeBridge | PortalBridge | CommonBridge;\n\n static getInstance() {\n if (!this.instance) {\n this.instance = BridgeFactory.create();\n }\n return this.instance;\n }\n\n // 플랫폼별 접근자들만 제공\n static getCommonBridge(): CommonBridge {\n return this.getInstance();\n }\n\n static getNativeBridge(): NativeBridge | null {\n const instance = this.getInstance();\n return instance instanceof NativeBridge ? instance : null;\n }\n\n static getPortalBridge(): PortalBridge | null {\n const instance = this.getInstance();\n return instance instanceof PortalBridge ? instance : null;\n }\n\n // 플랫폼 체크\n static isNativePlatform(): boolean {\n return this.getInstance() instanceof NativeBridge;\n }\n\n static isPortalPlatform(): boolean {\n return this.getInstance() instanceof PortalBridge;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/bridge/utils/platform-detector-utils.ts","../src/bridge/core/core.ts","../src/bridge/common-bridge.ts","../src/bridge/native-bridge.ts","../src/bridge/portal-bridge.ts","../src/bridge/factory/bridge-factory.ts","../src/bridge/bridge.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { Platform } from '../types/common.types';\n\nexport const platformDetectorUtils = {\n getPlatform(): Platform {\n // TODO: platform 탐지는 좀 더 세밀하게 할 수 있도록 네이티브에 요청\n if (window.n2bridge) {\n return 'android';\n }\n\n if (window.webkit) {\n return 'ios';\n }\n\n if (window.self !== window.top) {\n return 'portal';\n }\n\n return 'web';\n }\n};\n","import { platformDetectorUtils } from '../utils/platform-detector-utils';\nimport { BridgeCommand, BridgeOptions, BridgePromise } from '../types/core.types';\nimport { BridgeAction } from '../types/bridge-types';\n\n/**\n * Bridge 통신 위한 핵심 클래스\n */\nexport class Core {\n constructor() {\n this.initializeWindowBridge();\n }\n\n /**\n * Promise를 처리하기 위한 고유 ID 생성\n * @returns\n */\n private generatePromiseId(): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).slice(2, 11);\n\n return `${timestamp}_${random}`;\n }\n\n /**\n * 네이티브 통신을 위해 window.n2bridge 객체 초기화\n */\n private initializeWindowBridge(): void {\n // 예외 체크\n if (!window.n2bridge) {\n window.n2bridge = {\n promises: {},\n resolvePromise: () => {},\n finallyResolvePromise: () => {},\n callFromNative: () => {}\n };\n }\n\n // 항상 최신 함수로 업데이트\n window.n2bridge.resolvePromise = this.createResolvePromiseHandler();\n window.n2bridge.finallyResolvePromise = this.createFinallyResolvePromiseHandler();\n window.n2bridge.callFromNative = this.createCallFromNativeHandler();\n }\n\n /**\n * Promise 처리 함수(Native에서 호출)\n * @returns\n */\n private createResolvePromiseHandler() {\n return (promiseId: string, data?: any, error?: any) => {\n console.log('[resolvePromise]::', promiseId, data, error);\n\n const promise: BridgePromise | undefined = window.n2bridge.promises[promiseId];\n if (!promise) {\n console.error('[resolvePromise] Promise not found::', promiseId);\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n return;\n }\n\n promise.resolve(data);\n this.cleanupPromise(promiseId);\n } catch (err) {\n console.error('[resolvePromise] Error handling promise::', err);\n this.cleanupPromise(promiseId);\n }\n };\n }\n\n /**\n * Promise 최종 처리 함수\n * @returns\n */\n private createFinallyResolvePromiseHandler() {\n return (promiseId: string, data?: any, error?: any) => {\n const promise: BridgePromise | undefined = window.n2bridge.promises[promiseId];\n if (!promise) {\n console.error('[resolvePromise] Promise not found::', promiseId);\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n return;\n }\n\n promise.resolve(data);\n this.cleanupPromise(promiseId);\n } catch (err) {\n console.error('[resolvePromise] Error handling promise::', err);\n this.cleanupPromise(promiseId);\n }\n };\n }\n\n /**\n * Native 에서 웹으로 호출하는 함수\n * TODO: 필요시 추가 코딩\n * @returns\n */\n private createCallFromNativeHandler() {\n return (jsonStr: string) => {\n try {\n const command = JSON.parse(jsonStr);\n console.log('[callFromNative]::', command);\n } catch (error) {\n console.error('[callFromNative] parse error::', error);\n }\n };\n }\n\n /**\n * 부모 통신\n * @param service\n * @param action\n * @param option\n * @returns\n */\n async callToNative<T = any>(action: BridgeAction, options?: BridgeOptions): Promise<T> {\n const { retainCallback: retain, ...commandOptions } = options || {};\n\n return new Promise<T>((resolve, reject) => {\n const promiseId = `${action}_${this.generatePromiseId()}`;\n console.log('[callToNative] promiseId::', promiseId);\n\n // 바로 window.n2bridge.promises에 저장\n window.n2bridge.promises[promiseId] = { resolve, reject, retain };\n\n try {\n const command: BridgeCommand = {\n action,\n eventName: action,\n promiseId,\n option: commandOptions\n };\n\n console.log('[callToNative] command::', command);\n\n const platform = platformDetectorUtils.getPlatform();\n\n if (platform === 'android') {\n window.n2bridge?.callFromWeb?.(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'ios') {\n window.webkit?.messageHandlers?.n2bridge?.postMessage(JSON.stringify(command));\n\n return;\n }\n\n if (platform === 'portal') {\n window.parent.postMessage(command, '*');\n\n return;\n }\n\n // 지원하지 않는 플랫폼\n console.warn(`[callToNative] 현재 플랫폼(${platform})에서는 지원하지 않는 서비스(${action})입니다.`);\n this.cleanupPromise(promiseId);\n reject(new Error(`Unsupported platform: ${platform}`));\n } catch (error) {\n console.error('[callToNative] error::', error);\n this.cleanupPromise(promiseId);\n reject(error);\n }\n });\n }\n\n /**\n * promiseId를 초기화 해줍니다.\n * @param promiseId\n */\n private cleanupPromise(promiseId: string): void {\n delete window.n2bridge.promises[promiseId];\n }\n}\n","import { ICommonBridge } from './types/common.types';\nimport { Core } from './core/core';\nimport { Platform } from './types/common.types';\nimport { platformDetectorUtils } from './utils/platform-detector-utils';\nimport { LoginOptions } from './types/bridge-types';\n\n/**\n * App, 영업포털과 동일하게 사용가능한 기능 정의 클래스\n */\nexport class CommonBridge implements ICommonBridge {\n protected platform: Platform;\n protected core: Core;\n\n constructor() {\n this.platform = platformDetectorUtils.getPlatform();\n this.core = new Core();\n }\n\n // 공통 기능 구현\n //! 분기가 생기면 각 클래스에서 Override\n async logout(options: LoginOptions): Promise<void> {\n return this.core.callToNative('logout', options);\n }\n}\n","import { INativeBridge } from './types/common.types';\nimport { CommonBridge } from './common-bridge';\nimport { ShowWebPopupOptions } from './types/bridge-types';\n\nexport class NativeBridge extends CommonBridge implements INativeBridge {\n /**\n *\n * @param options\n * @returns\n */\n async showWebPopup<T = any>(options: ShowWebPopupOptions): Promise<T> {\n return this.core.callToNative<T>('showWebPopup', options);\n }\n}\n","import { CommonBridge } from './common-bridge';\nimport { IPortalBridge } from './types/common.types';\n\n/**\n * 영업포탈 전용 Bridge\n */\nexport class PortalBridge extends CommonBridge implements IPortalBridge {\n /**\n * 영업포탈 tab open\n * @param options\n * @returns\n */\n async openUrlWindow<T = any>(options: any): Promise<T> {\n return this.core.callToNative<T>('openMdi', options);\n }\n}\n","import { platformDetectorUtils } from '../utils/platform-detector-utils';\nimport { NativeBridge } from '../native-bridge';\nimport { PortalBridge } from '../portal-bridge';\nimport { CommonBridge } from '../common-bridge';\n\n/**\n * 브릿지 객체 생성 전용 클래스\n */\nexport class BridgeFactory {\n static create(): NativeBridge | PortalBridge | CommonBridge {\n const platform = platformDetectorUtils.getPlatform();\n\n switch (platform) {\n case 'android':\n case 'ios':\n return new NativeBridge();\n\n case 'portal':\n return new PortalBridge();\n\n case 'web':\n default:\n console.warn(`[BridgeFactory] 현재 플랫폼(${platform})에서는 Bridge 객체를 생성할 수 없습니다.`);\n\n return new CommonBridge();\n }\n }\n}\n","import { NativeBridge } from './native-bridge';\nimport { PortalBridge } from './portal-bridge';\nimport { CommonBridge } from './common-bridge';\nimport { BridgeFactory } from './factory/bridge-factory';\n\nexport class Bridge {\n private static instance: NativeBridge | PortalBridge | CommonBridge;\n\n static getInstance() {\n if (!this.instance) {\n this.instance = BridgeFactory.create();\n }\n return this.instance;\n }\n\n // 플랫폼별 접근자들만 제공\n static getCommonBridge(): CommonBridge {\n return this.getInstance();\n }\n\n static getNativeBridge(): NativeBridge | null {\n const instance = this.getInstance();\n return instance instanceof NativeBridge ? instance : null;\n }\n\n static getPortalBridge(): PortalBridge | null {\n const instance = this.getInstance();\n return instance instanceof PortalBridge ? instance : null;\n }\n\n // 플랫폼 체크\n static isNativePlatform(): boolean {\n return this.getInstance() instanceof NativeBridge;\n }\n\n static isPortalPlatform(): boolean {\n return this.getInstance() instanceof PortalBridge;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sales-frontend-bridge",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -24,8 +24,8 @@
24
24
  "@types/node": "^22.14.0",
25
25
  "tsup": "^8.4.0",
26
26
  "typescript": "5.8.2",
27
- "sales-frontend-typescript-config": "0.0.2",
28
- "eslint-config-sales-frontend-eslint-config-v8": "^0.0.5"
27
+ "eslint-config-sales-frontend-eslint-config-v8": "^0.0.5",
28
+ "sales-frontend-typescript-config": "0.0.2"
29
29
  },
30
30
  "scripts": {
31
31
  "lint": "eslint . --max-warnings 0",