sales-frontend-bridge 0.0.11 → 0.0.13

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 CHANGED
@@ -220,9 +220,143 @@ var NativeBridge = class extends CommonBridge {
220
220
  async jumpSafari(options) {
221
221
  return this.core.callToNative("jumpSafari", options);
222
222
  }
223
+ /**
224
+ * ### Bridge for Oz
225
+ * 설정한 뷰어 파라미터를 기준으로 뷰어에 새로운 보고서를 바인딩합니다.
226
+ * @example
227
+ * ```tsx
228
+ * // 사용 예시
229
+ * await Bridge.native.createReport({ param: "connection.openfile=sample.ozd" });
230
+ * ```
231
+ */
223
232
  async createReport(options) {
224
233
  return this.core.callToNative("createReport", options);
225
234
  }
235
+ /** @deprecated 샘플 테스트용 브릿지 */
236
+ async createReport_Sample() {
237
+ return this.core.callToNative("createReport_Sample");
238
+ }
239
+ /**
240
+ * ### Bridge for Oz
241
+ * 오즈 뷰어의 정보를 가져옵니다
242
+ * @example
243
+ * ```tsx
244
+ * // 사용 예시
245
+ * await Bridge.native.getInformation({ command: "INPUT_JSON" });
246
+ * ```
247
+ */
248
+ async getInformation(options) {
249
+ return this.core.callToNative("getInformation", options);
250
+ }
251
+ /**
252
+ * ### Bridge for Oz
253
+ * 전역 변수 값을 가져옵니다.
254
+ * @example
255
+ * ```tsx
256
+ * // 사용 예시
257
+ * await Bridge.native.getGlobal({ key: "AAA" })
258
+ * ```
259
+ */
260
+ async getGlobal(options) {
261
+ return this.core.callToNative("getGlobal", Object.assign({ docIndex: 0 }, options));
262
+ }
263
+ /**
264
+ * ### Bridge for Oz
265
+ * 전역 변수 값을 설정합니다.
266
+ * @example
267
+ * ```tsx
268
+ * // 사용 예시
269
+ * await Bridge.native.setGlobal({ key: "AAA", value: JSON.stringify({ aaa: 111 }) });
270
+ * ```
271
+ */
272
+ async setGlobal(options) {
273
+ return this.core.callToNative("setGlobal", Object.assign({ docIndex: 0 }, options));
274
+ }
275
+ /**
276
+ * ### Bridge for Oz
277
+ * 오즈 뷰어의 기능을 제어합니다.
278
+ * @example
279
+ * ```tsx
280
+ * // 사용 예시
281
+ * const command = `movepage=2`;
282
+ * await Bridge.native.script({ command });
283
+ * ```
284
+ */
285
+ async script(options) {
286
+ return this.core.callToNative("script", options);
287
+ }
288
+ /**
289
+ * ### Bridge for Oz
290
+ * 오즈 뷰어의 기능을 제어합니다.
291
+ * - `param`을 통해 오즈 뷰어의 parameter를 변경할수 있습니다
292
+ * @example
293
+ * ```tsx
294
+ * // 사용 예시
295
+ * const command = `movepage=2`;
296
+ * const param1 = `eform.show_prev_next_input=true`;
297
+ * const param2 = `eform.signpad_iconposition=sign_bottom`;
298
+ * // param이 여러개인경우 \n으로 묶는다
299
+ * const param = `${param1}\n${param2}`;
300
+ * await Bridge.native.scriptEX({ command, param });
301
+ * ```
302
+ */
303
+ async scriptEX(options) {
304
+ return this.core.callToNative("scriptEX", Object.assign({ delimiter: "\n" }, options));
305
+ }
306
+ /**
307
+ * ### Bridge for Oz
308
+ * 현재 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.
309
+ * @example
310
+ * ```tsx
311
+ * // 사용 예시
312
+ * await Bridge.native.triggerExternalEvent({ param1: 'signer' });
313
+ * ```
314
+ */
315
+ async triggerExternalEvent(options) {
316
+ return this.core.callToNative(
317
+ "triggerExternalEventByDocIndex",
318
+ Object.assign({ param1: "", param2: "", param3: "", param4: "" }, options)
319
+ );
320
+ }
321
+ /**
322
+ * ### Bridge for Oz
323
+ * 지정한 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.
324
+ * @example
325
+ * ```tsx
326
+ * // 사용 예시
327
+ * await Bridge.native.triggerExternalEventByDocIndex({ docIndex: 0, param1: 'signer' });
328
+ * ```
329
+ */
330
+ async triggerExternalEventByDocIndex(options) {
331
+ return this.core.callToNative(
332
+ "triggerExternalEventByDocIndex",
333
+ Object.assign({ param1: "", param2: "", param3: "", param4: "" }, options)
334
+ );
335
+ }
336
+ /**
337
+ * ### Bridge for Oz
338
+ * 앱 파일시스템의 RootPath를 조회하는 기능입니다
339
+ * @example
340
+ * ```tsx
341
+ * // 사용 예시
342
+ * await Bridge.native.getFileRootPath()
343
+ * ```
344
+ */
345
+ async getFileRootPath() {
346
+ return this.core.callToNative("getFileRootPath");
347
+ }
348
+ /**
349
+ * ### Bridge for Oz
350
+ * 앱 파일시스템의 DocumentPath 조회하는 기능입니다
351
+ * @example
352
+ * ```tsx
353
+ * // 사용 예시
354
+ * await Bridge.native.getFileDocumentPath()
355
+ * ```
356
+ */
357
+ async getFileDocumentPath() {
358
+ return this.core.callToNative("getFileDocumentPath");
359
+ }
226
360
  // TODO: 필요 플러그인들 추가
227
361
  };
228
362
 
@@ -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/bridge.ts","../src/bridge/oz/oz-event.types.ts"],"names":["OZViewerEvent"],"mappings":";;;;;;;AAEO,IAAM,qBAAwB,GAAA;AAAA,EACnC,WAAwB,GAAA;AACtB,IAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AACvC,MAAO,OAAA,KAAA;AAAA;AAGH,IAAA,IAAI,OAAO,QAAU,EAAA;AACnB,MAAO,OAAA,SAAA;AAAA;AAGT,IAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,MAAO,OAAA,KAAA;AAAA;AAGT,IAAI,IAAA,MAAA,CAAO,IAAS,KAAA,MAAA,CAAO,GAAK,EAAA;AAC9B,MAAO,OAAA,QAAA;AAAA;AAGT,IAAO,OAAA,KAAA;AAAA;AAEX,CAAA;;;ACdO,IAAM,OAAN,MAAW;AAAA,EAChB,WAAc,GAAA;AACZ,IAAA,IAAA,CAAK,sBAAuB,EAAA;AAAA;AAC9B;AAAA;AAAA;AAAA;AAAA,EAMQ,iBAA4B,GAAA;AAClC,IAAM,MAAA,SAAA,GAAY,KAAK,GAAI,EAAA;AAC3B,IAAM,MAAA,MAAA,GAAS,KAAK,MAAO,EAAA,CAAE,SAAS,EAAE,CAAA,CAAE,KAAM,CAAA,CAAA,EAAG,EAAE,CAAA;AAErD,IAAO,OAAA,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA;AAC/B;AAAA;AAAA;AAAA,EAKQ,sBAA+B,GAAA;AACrC,IAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AACvC,MAAA;AAAA;AAEI,IAAI,IAAA,CAAC,OAAO,QAAU,EAAA;AACpB,MAAA,MAAA,CAAO,QAAW,GAAA;AAAA,QAChB,UAAU,EAAC;AAAA,QACX,gBAAgB,MAAM;AAAA,SAAC;AAAA,QACvB,uBAAuB,MAAM;AAAA,SAAC;AAAA,QAC9B,gBAAgB,MAAM;AAAA;AAAC,OACzB;AAAA;AAIF,IAAO,MAAA,CAAA,QAAA,CAAS,cAAiB,GAAA,IAAA,CAAK,2BAA4B,EAAA;AAClE,IAAO,MAAA,CAAA,QAAA,CAAS,qBAAwB,GAAA,IAAA,CAAK,kCAAmC,EAAA;AAChF,IAAO,MAAA,CAAA,QAAA,CAAS,cAAiB,GAAA,IAAA,CAAK,2BAA4B,EAAA;AAAA;AACpE;AAAA;AAAA;AAAA;AAAA,EAMQ,2BAA8B,GAAA;AACpC,IAAO,OAAA,CAAC,SAAmB,EAAA,IAAA,EAAY,KAAgB,KAAA;AACrD,MAAA,OAAA,CAAQ,GAAI,CAAA,oBAAA,EAAsB,SAAW,EAAA,IAAA,EAAM,KAAK,CAAA;AAExD,MAAA,MAAM,OAAqC,GAAA,MAAA,CAAO,QAAS,CAAA,QAAA,CAAS,SAAS,CAAA;AAC7E,MAAA,IAAI,CAAC,OAAS,EAAA;AACZ,QAAQ,OAAA,CAAA,KAAA,CAAM,wCAAwC,SAAS,CAAA;AAE/D,QAAA;AAAA;AAGF,MAAI,IAAA;AACF,QAAA,IAAI,KAAO,EAAA;AACT,UAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AACpB,UAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAE7B,UAAA;AAAA;AAGF,QAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,UAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAEnB,UAAA;AAAA;AAGF,QAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA;AACpB,QAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAAA,eACtB,GAAK,EAAA;AACZ,QAAQ,OAAA,CAAA,KAAA,CAAM,6CAA6C,GAAG,CAAA;AAC9D,QAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAAA;AAC/B,KACF;AAAA;AACF;AAAA;AAAA;AAAA;AAAA,EAMQ,kCAAqC,GAAA;AAC3C,IAAO,OAAA,CAAC,SAAmB,EAAA,IAAA,EAAY,KAAgB,KAAA;AACrD,MAAA,MAAM,OAAqC,GAAA,MAAA,CAAO,QAAS,CAAA,QAAA,CAAS,SAAS,CAAA;AAC7E,MAAA,IAAI,CAAC,OAAS,EAAA;AACZ,QAAQ,OAAA,CAAA,KAAA,CAAM,wCAAwC,SAAS,CAAA;AAE/D,QAAA;AAAA;AAGF,MAAI,IAAA;AACF,QAAA,IAAI,KAAO,EAAA;AACT,UAAA,OAAA,CAAQ,OAAO,KAAK,CAAA;AACpB,UAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAE7B,UAAA;AAAA;AAGF,QAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,UAAA,OAAA,CAAQ,OAAO,IAAI,CAAA;AAEnB,UAAA;AAAA;AAGF,QAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA;AACpB,QAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAAA,eACtB,GAAK,EAAA;AACZ,QAAQ,OAAA,CAAA,KAAA,CAAM,6CAA6C,GAAG,CAAA;AAC9D,QAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAAA;AAC/B,KACF;AAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,2BAA8B,GAAA;AACpC,IAAA,OAAO,CAAC,OAAoB,KAAA;AAC1B,MAAI,IAAA;AACF,QAAM,MAAA,OAAA,GAAU,IAAK,CAAA,KAAA,CAAM,OAAO,CAAA;AAClC,QAAQ,OAAA,CAAA,GAAA,CAAI,sBAAsB,OAAO,CAAA;AAAA,eAClC,KAAO,EAAA;AACd,QAAQ,OAAA,CAAA,KAAA,CAAM,kCAAkC,KAAK,CAAA;AAAA;AACvD,KACF;AAAA;AACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,YAAsB,CAAA,MAAA,EAAsB,OAAqC,EAAA;AACrF,IAAA,MAAM,EAAE,cAAgB,EAAA,MAAA,EAAQ,GAAG,cAAe,EAAA,GAAI,WAAW,EAAC;AAElE,IAAA,OAAO,IAAI,OAAA,CAAW,CAAC,OAAA,EAAS,MAAW,KAAA;AACzC,MAAA,MAAM,YAAY,CAAG,EAAA,MAAM,CAAI,CAAA,EAAA,IAAA,CAAK,mBAAmB,CAAA,CAAA;AACvD,MAAQ,OAAA,CAAA,GAAA,CAAI,8BAA8B,SAAS,CAAA;AAGnD,MAAO,MAAA,CAAA,QAAA,CAAS,QAAS,CAAA,SAAS,CAAI,GAAA;AAAA,QACpC,OAAA,EAAS,CAAC,KAAa,KAAA;AACrB,UAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,SACf;AAAA,QACA,MAAA,EAAQ,CAAC,MAAiB,KAAA;AACxB,UAAA,MAAA,CAAO,MAAM,CAAA;AAAA,SACf;AAAA,QACA;AAAA,OACF;AAEA,MAAI,IAAA;AACF,QAAA,MAAM,OAAyB,GAAA;AAAA,UAC7B,MAAA;AAAA,UACA,SAAW,EAAA,MAAA;AAAA,UACX,SAAA;AAAA,UACA,MAAQ,EAAA;AAAA,SACV;AAEA,QAAQ,OAAA,CAAA,GAAA,CAAI,4BAA4B,OAAO,CAAA;AAE/C,QAAM,MAAA,QAAA,GAAW,sBAAsB,WAAY,EAAA;AAEnD,QAAA,IAAI,aAAa,SAAW,EAAA;AAC1B,UAAA,MAAA,CAAO,QAAU,EAAA,WAAA,GAAc,IAAK,CAAA,SAAA,CAAU,OAAO,CAAC,CAAA;AAEtD,UAAA;AAAA;AAGF,QAAA,IAAI,aAAa,KAAO,EAAA;AACtB,UAAA,MAAA,CAAO,QAAQ,eAAiB,EAAA,QAAA,EAAU,YAAY,IAAK,CAAA,SAAA,CAAU,OAAO,CAAC,CAAA;AAE7E,UAAA;AAAA;AAGF,QAAA,IAAI,aAAa,QAAU,EAAA;AACzB,UAAO,MAAA,CAAA,MAAA,CAAO,WAAY,CAAA,OAAA,EAAS,GAAG,CAAA;AAEtC,UAAA;AAAA;AAIF,QAAA,OAAA,CAAQ,IAAK,CAAA,CAAA,+CAAA,EAAyB,QAAQ,CAAA,6EAAA,EAAoB,MAAM,CAAO,oBAAA,CAAA,CAAA;AAC/E,QAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAC7B,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAyB,sBAAA,EAAA,QAAQ,EAAE,CAAC,CAAA;AAAA,eAC9C,KAAO,EAAA;AACd,QAAQ,OAAA,CAAA,KAAA,CAAM,0BAA0B,KAAK,CAAA;AAC7C,QAAA,IAAA,CAAK,eAAe,SAAS,CAAA;AAC7B,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA;AACd,KACD,CAAA;AAAA;AACH;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAe,SAAyB,EAAA;AAC9C,IAAO,OAAA,MAAA,CAAO,QAAS,CAAA,QAAA,CAAS,SAAS,CAAA;AAAA;AAE7C,CAAA;;;AC7MO,IAAM,eAAN,MAAmB;AAAA,EAGxB,WAAc,GAAA;AAFd,IAAU,aAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAGR,IAAK,IAAA,CAAA,IAAA,GAAO,IAAI,IAAK,EAAA;AAAA;AAEzB,CAAA;;;ACHO,IAAM,YAAA,GAAN,cAA2B,YAAsC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMtE,MAAM,aAAsB,OAA0C,EAAA;AACpE,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,YAAgB,CAAA,cAAA,EAAgB,OAAO,CAAA;AAAA;AAC1D;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,WAAoB,OAA0C,EAAA;AAClE,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,YAAgB,CAAA,YAAA,EAAc,OAAO,CAAA;AAAA;AACxD,EAEA,MAAM,aAAsB,OAA2C,EAAA;AACrE,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,YAAgB,CAAA,cAAA,EAAgB,OAAO,CAAA;AAAA;AAC1D;AAGF,CAAA;;;AC1BO,IAAM,YAAA,GAAN,cAA2B,YAAsC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMtE,MAAM,cAAuB,OAA0B,EAAA;AACrD,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,YAAgB,CAAA,eAAA,EAAiB,OAAO,CAAA;AAAA;AAC3D;AAGF,CAAA;;;ACbO,IAAM,MAAS,GAAA;AAAA,EACpB,MAAA,EAAQ,IAAI,YAAa,EAAA;AAAA,EACzB,MAAA,EAAQ,IAAI,YAAa,EAAA;AAAA,EACzB,IAAA,EAAM,IAAI,IAAK;AACjB;;;ACLY,IAAA,aAAA,qBAAAA,cAAL,KAAA;AAOH,EAAAA,eAAA,mBAAoB,CAAA,GAAA,mBAAA;AAMpB,EAAAA,eAAA,gBAAiB,CAAA,GAAA,gBAAA;AAMjB,EAAAA,eAAA,qBAAsB,CAAA,GAAA,qBAAA;AAMtB,EAAAA,eAAA,uBAAwB,CAAA,GAAA,uBAAA;AAKxB,EAAAA,eAAA,aAAc,CAAA,GAAA,aAAA;AAOd,EAAAA,eAAA,mBAAoB,CAAA,GAAA,mBAAA;AArCZ,EAAAA,OAAAA,cAAAA;AAAA,CAAA,EAAA,aAAA,IAAA,EAAA","file":"index.cjs","sourcesContent":["import { Platform } from '../types/common.types';\n\nexport const platformDetectorUtils = {\n getPlatform(): Platform {\n if (typeof window === 'undefined') {\nreturn 'web';\n} // SSR 환경에서는 기본값 반환\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 { BridgeAction } from '../types/common.types';\nimport { platformDetectorUtils } from '../utils/platform-detector-utils';\n\nimport { BridgeCommand, BridgeOptions, BridgePromise } from './core.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 if (typeof window === 'undefined') {\nreturn;\n} // SSR 환경에서는 아무것도 하지 않음\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\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n\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\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n\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] = {\n resolve: (value: T) => {\n resolve(value);\n },\n reject: (reason?: any) => {\n reject(reason);\n },\n retain\n };\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 { Core } from './core/core';\n\n/**\n * App, 영업포털과 동일하게 사용가능한 기능 정의 클래스\n */\nexport class CommonBridge {\n protected core: Core;\n\n constructor() {\n this.core = new Core();\n }\n}\n","import { CommonBridge } from './common-bridge';\n\nimport type { INativeBridge } from './types/native/native-bridge.types';\nimport type { ShowWebPopupOptions, CreateReportOptions } from './types/native/native-options.types';\n\n/**\n * App - Web Bridge\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 /**\n *\n * @param options\n * @returns\n */\n async jumpSafari<T = any>(options: ShowWebPopupOptions): Promise<T> {\n return this.core.callToNative<T>('jumpSafari', options);\n }\n\n async createReport<T = any>(options?: CreateReportOptions): Promise<T> {\n return this.core.callToNative<T>('createReport', options);\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { CommonBridge } from './common-bridge';\nimport { IPortalBridge } from './types/portal/portal-bridge.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>('openUrlWindow', options);\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { Core } from './core/core';\nimport { NativeBridge } from './native-bridge';\nimport { PortalBridge } from './portal-bridge';\n\nexport const Bridge = {\n native: new NativeBridge(),\n portal: new PortalBridge(),\n core: new Core()\n};\n","/**\n * OZ 뷰어에 관련된 이벤트 목록\n */\nexport enum OZViewerEvent {\n /**\n * 보고서 생성 단계별로 발생하는 이벤트\n * - `OZViewerProgressEvent` 이벤트와 매칭된다\n * - `viewer.progresscommand=true` 설정이 필요하다\n * - `OZViewerProgressEvent`와 매칭된다\n */\n OZProgressCommand = \"OZProgressCommand\",\n /**\n * 에러 발생 시 발생하는 이벤트\n * - `viewer.errorcommand=true` 설정이 필요하다\n * - `OZViewerErrorEvent`와 매칭된다\n */\n OZErrorCommand = \"OZErrorCommand\",\n /**\n * 화면에 표시되는 페이지가 변경된 후 발생하는 이벤트\n * - `viewer.pagechangecommand=true` 설정이 필요하다\n * - `OZViewerChangeEvent`와 매칭된다\n */\n OZPageChangeCommand = \"OZPageChangeCommand\",\n /**\n * 화면에 표시되는 보고서가 변경된 후 발생하는 이벤트\n * - `viewer.reportchangecommand=true` 설정이 필요하다\n * - `OZViewerChangeEvent`와 매칭된다\n */\n OZReportChangeCommand = \"OZReportChangeCommand\",\n /**\n * `OZUserEvent` _TriggerOCXUserEvent 함수 실행 시 발생하는 이벤트\n * - `OZViewerUserEvent`와 매칭된다\n */\n OZUserEvent = \"OZUserEvent\",\n /**\n * `OZPageBindCommand` 페이지가 바인딩된 후 발생하는 이벤트\n * - `viewer.pagebindcommandinterval` 파라미터에서 설정한 주기별로 동작\n * - ex) `viewer.pagebindcommandinterval=500`\n * - `OZViewerPageBindEvent`와 매칭된다\n */\n OZPageBindCommand = \"OZPageBindCommand\"\n}\n\n/**\n * `OZViewerEvent.OZProgressCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZProgressCommand, (e) => { console.log(e.detail); });\n * ```\n * \n * `step과` `state`는 step => state 방식으로 진행된다\n * \n * 예시\n * ```bash\n * # step0 뷰어실행\n * [step=0][state=0] # 뷰어 실행 시작\n * [step=0][state=1] # 뷰어 실행 완료\n * # step2 보고서 템플릿 생성\n * [step=1][state=0] # 보고서 템플릿 생성 시작\n * [step=1][state=1] # 보고서 템플릿 생성 완료\n * ```\n */\nexport type OZViewerProgressEvent = {\n /**\n * 보고서 생성 단계\n * - 0 : 뷰어 실행 옵션 설정\n * - 1 : 보고서 파일 다운로드\n * - 2 : 보고서 템플릿 생성\n * - 3 : 데이터 다운로드\n * - 4 : 보고서 바인딩\n */\n step: \"0\" | \"1\" | \"2\" | \"3\" | \"4\";\n /**\n * 보고서 생성 상태\n * - 1 : 시작\n * - 2 : 완료\n */\n state: \"1\" | \"2\";\n /** 보고서 이름 */\n reportname: string\n}\n\n/**\n * `OZViewerEvent.OZErrorCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZErrorCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerErrorEvent = {\n /** 에러 메시지 코드 */\n code: string;\n /** 에러 기본 메시지 */\n message: string;\n /** 에러 상세 메시지 */\n detailmessage: string;\n /** 보고서 이름 */\n reportname: string;\n}\n\n\n/**\n * 두 이벤트의 공용 타입 \n * - `OZViewerEvent.OZPageChangeCommand` 이벤트의 `e.detail` 타입 정의\n * - `OZViewerEvent.OZReportChangeCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZPageChangeCommand, (e) => { console.log(e.detail); });\n * window.addEventListener(OZViewerEvent.OZViewerChangeCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerChangeEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: number\n}\n\n/**\n * `OZViewerEvent.OZUserEvent` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZUserEvent, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerUserEvent = {\n /** _TriggerOCXUserEvent 함수에서 전달한 첫 번째 값 */\n param1: string;\n /** _TriggerOCXUserEvent 함수에서 전달한 두 번째 값 */\n param2: string;\n /** _TriggerOCXUserEvent 함수에서 전달한 세 번째 값 */\n param3: string;\n /** 보고서 인덱스(zero-based index) */\n docindex: string\n}\n\n\n/**\n * `OZViewerEvent.OZPageBindCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZPageBindCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerPageBindEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n /** 바인딩된 페이지 번호 */\n pagecount: string;\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/bridge.ts","../src/bridge/oz/oz-event.types.ts"],"names":["OZViewerEvent"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Platform } from '../types/common.types';\n\nexport const platformDetectorUtils = {\n getPlatform(): Platform {\n if (typeof window === 'undefined') {\n return 'web';\n } // SSR 환경에서는 기본값 반환\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 { BridgeAction } from '../types/common.types';\nimport { platformDetectorUtils } from '../utils/platform-detector-utils';\n\nimport { BridgeCommand, BridgeOptions, BridgePromise } from './core.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 if (typeof window === 'undefined') {\n return;\n } // SSR 환경에서는 아무것도 하지 않음\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\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n\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\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n\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] = {\n resolve: (value: T) => {\n resolve(value);\n },\n reject: (reason?: any) => {\n reject(reason);\n },\n retain\n };\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 { Core } from './core/core';\n\n/**\n * App, 영업포털과 동일하게 사용가능한 기능 정의 클래스\n */\nexport class CommonBridge {\n protected core: Core;\n\n constructor() {\n this.core = new Core();\n }\n}\n","import { CommonBridge } from './common-bridge';\n\nimport type { INativeBridge } from './types/native/native-bridge.types';\nimport type {\n ShowWebPopupOptions,\n CreateReportOptions,\n GetInformationOptions,\n GetGlobalOptions,\n SetGlobalOptions,\n ScriptExOptions,\n ScriptOptions,\n TriggerExternalEventByDocIndexOptions,\n TriggerExternalEventOptions\n} from './types/native/native-options.types';\n\n/**\n * App - Web Bridge\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 /**\n *\n * @param options\n * @returns\n */\n async jumpSafari<T = any>(options: ShowWebPopupOptions): Promise<T> {\n return this.core.callToNative<T>('jumpSafari', options);\n }\n\n /**\n * ### Bridge for Oz\n * 설정한 뷰어 파라미터를 기준으로 뷰어에 새로운 보고서를 바인딩합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.createReport({ param: \"connection.openfile=sample.ozd\" });\n * ```\n */\n async createReport<T = { response: string }>(options: CreateReportOptions): Promise<T> {\n return this.core.callToNative<T>('createReport', options);\n }\n\n /** @deprecated 샘플 테스트용 브릿지 */\n async createReport_Sample<T = { response: string }>(): Promise<T> {\n return this.core.callToNative<T>('createReport_Sample');\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 정보를 가져옵니다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getInformation({ command: \"INPUT_JSON\" });\n * ```\n */\n async getInformation<T = { response: string }>(options: GetInformationOptions): Promise<T> {\n return this.core.callToNative<T>('getInformation', options);\n }\n\n /**\n * ### Bridge for Oz\n * 전역 변수 값을 가져옵니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getGlobal({ key: \"AAA\" })\n * ```\n */\n async getGlobal<T = { response: string }>(options: GetGlobalOptions): Promise<T> {\n return this.core.callToNative<T>('getGlobal', Object.assign({ docIndex: 0 }, options));\n }\n\n /**\n * ### Bridge for Oz\n * 전역 변수 값을 설정합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.setGlobal({ key: \"AAA\", value: JSON.stringify({ aaa: 111 }) });\n * ```\n */\n async setGlobal<T = { response: string }>(options: SetGlobalOptions): Promise<T> {\n return this.core.callToNative<T>('setGlobal', Object.assign({ docIndex: 0 }, options));\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 기능을 제어합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * const command = `movepage=2`;\n * await Bridge.native.script({ command });\n * ```\n */\n async script<T = { response: string }>(options: ScriptOptions): Promise<T> {\n return this.core.callToNative<T>('script', options);\n }\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 기능을 제어합니다.\n * - `param`을 통해 오즈 뷰어의 parameter를 변경할수 있습니다\n * @example\n * ```tsx\n * // 사용 예시\n * const command = `movepage=2`;\n * const param1 = `eform.show_prev_next_input=true`;\n * const param2 = `eform.signpad_iconposition=sign_bottom`;\n * // param이 여러개인경우 \\n으로 묶는다\n * const param = `${param1}\\n${param2}`;\n * await Bridge.native.scriptEX({ command, param });\n * ```\n */\n async scriptEX<T = { response: string }>(options: ScriptExOptions): Promise<T> {\n return this.core.callToNative<T>('scriptEX', Object.assign({ delimiter: '\\n' }, options));\n }\n\n /**\n * ### Bridge for Oz\n * 현재 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.triggerExternalEvent({ param1: 'signer' });\n * ```\n */\n async triggerExternalEvent<T = { response: string }>(options: TriggerExternalEventOptions): Promise<T> {\n return this.core.callToNative<T>(\n 'triggerExternalEventByDocIndex',\n Object.assign({ param1: '', param2: '', param3: '', param4: '' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * 지정한 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.triggerExternalEventByDocIndex({ docIndex: 0, param1: 'signer' });\n * ```\n */\n async triggerExternalEventByDocIndex<T = { response: string }>(\n options: TriggerExternalEventByDocIndexOptions\n ): Promise<T> {\n return this.core.callToNative<T>(\n 'triggerExternalEventByDocIndex',\n Object.assign({ param1: '', param2: '', param3: '', param4: '' }, options)\n );\n }\n /**\n * ### Bridge for Oz\n * 앱 파일시스템의 RootPath를 조회하는 기능입니다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getFileRootPath()\n * ```\n */\n async getFileRootPath<T = { response: string }>(): Promise<T> {\n return this.core.callToNative<T>('getFileRootPath');\n }\n\n /**\n * ### Bridge for Oz\n * 앱 파일시스템의 DocumentPath 조회하는 기능입니다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getFileDocumentPath()\n * ```\n */\n async getFileDocumentPath<T = { response: string }>(): Promise<T> {\n return this.core.callToNative<T>('getFileDocumentPath');\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { CommonBridge } from './common-bridge';\nimport { IPortalBridge } from './types/portal/portal-bridge.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>('openUrlWindow', options);\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { Core } from './core/core';\nimport { NativeBridge } from './native-bridge';\nimport { PortalBridge } from './portal-bridge';\n\nexport const Bridge = {\n native: new NativeBridge(),\n portal: new PortalBridge(),\n core: new Core()\n};\n","/**\n * OZ 뷰어에 관련된 이벤트 목록\n */\nexport enum OZViewerEvent {\n /**\n * 보고서 생성 단계별로 발생하는 이벤트\n * - `OZViewerProgressEvent` 이벤트와 매칭된다\n * - `viewer.progresscommand=true` 설정이 필요하다\n * - `OZViewerProgressEvent`와 매칭된다\n */\n OZProgressCommand = 'OZProgressCommand',\n /**\n * 에러 발생 시 발생하는 이벤트\n * - `viewer.errorcommand=true` 설정이 필요하다\n * - `OZViewerErrorEvent`와 매칭된다\n */\n OZErrorCommand = 'OZErrorCommand',\n /**\n * 화면에 표시되는 페이지가 변경된 후 발생하는 이벤트\n * - `viewer.pagechangecommand=true` 설정이 필요하다\n * - `OZViewerChangeEvent`와 매칭된다\n */\n OZPageChangeCommand = 'OZPageChangeCommand',\n /**\n * 화면에 표시되는 보고서가 변경된 후 발생하는 이벤트\n * - `viewer.reportchangecommand=true` 설정이 필요하다\n * - `OZViewerChangeEvent`와 매칭된다\n */\n OZReportChangeCommand = 'OZReportChangeCommand',\n /**\n * `OZUserEvent` _TriggerOCXUserEvent 함수 실행 시 발생하는 이벤트\n * - `OZViewerUserEvent`와 매칭된다\n */\n OZUserEvent = 'OZUserEvent',\n /**\n * `OZPageBindCommand` 페이지가 바인딩된 후 발생하는 이벤트\n * - `viewer.pagebindcommandinterval` 파라미터에서 설정한 주기별로 동작\n * - ex) `viewer.pagebindcommandinterval=500`\n * - `OZViewerPageBindEvent`와 매칭된다\n */\n OZPageBindCommand = 'OZPageBindCommand'\n}\n\n/**\n * `OZViewerEvent.OZProgressCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZProgressCommand, (e) => { console.log(e.detail); });\n * ```\n *\n * `step과` `state`는 step => state 방식으로 진행된다\n *\n * 예시\n * ```bash\n * # step0 뷰어실행\n * [step=0][state=0] # 뷰어 실행 시작\n * [step=0][state=1] # 뷰어 실행 완료\n * # step2 보고서 템플릿 생성\n * [step=1][state=0] # 보고서 템플릿 생성 시작\n * [step=1][state=1] # 보고서 템플릿 생성 완료\n * ```\n */\nexport type OZViewerProgressEvent = {\n /**\n * 보고서 생성 단계\n * - 0 : 뷰어 실행 옵션 설정\n * - 1 : 보고서 파일 다운로드\n * - 2 : 보고서 템플릿 생성\n * - 3 : 데이터 다운로드\n * - 4 : 보고서 바인딩\n */\n step: '0' | '1' | '2' | '3' | '4';\n /**\n * 보고서 생성 상태\n * - 1 : 시작\n * - 2 : 완료\n */\n state: '1' | '2';\n /** 보고서 이름 */\n reportname: string;\n};\n\n/**\n * `OZViewerEvent.OZErrorCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZErrorCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerErrorEvent = {\n /** 에러 메시지 코드 */\n code: string;\n /** 에러 기본 메시지 */\n message: string;\n /** 에러 상세 메시지 */\n detailmessage: string;\n /** 보고서 이름 */\n reportname: string;\n};\n\n/**\n * 두 이벤트의 공용 타입\n * - `OZViewerEvent.OZPageChangeCommand` 이벤트의 `e.detail` 타입 정의\n * - `OZViewerEvent.OZReportChangeCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZPageChangeCommand, (e) => { console.log(e.detail); });\n * window.addEventListener(OZViewerEvent.OZViewerChangeCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerChangeEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: number;\n};\n\n/**\n * `OZViewerEvent.OZUserEvent` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZUserEvent, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerUserEvent = {\n /** _TriggerOCXUserEvent 함수에서 전달한 첫 번째 값 */\n param1: string;\n /** _TriggerOCXUserEvent 함수에서 전달한 두 번째 값 */\n param2: string;\n /** _TriggerOCXUserEvent 함수에서 전달한 세 번째 값 */\n param3: string;\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n};\n\n/**\n * `OZViewerEvent.OZPageBindCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZPageBindCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerPageBindEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n /** 바인딩된 페이지 번호 */\n pagecount: string;\n};\n"]}
package/dist/index.d.cts CHANGED
@@ -22,11 +22,96 @@ interface CreateReportOptions {
22
22
  */
23
23
  param: string;
24
24
  }
25
+ /**
26
+ * 오즈 뷰어 함수 `CreateReport`를 호출할 때 사용하는 브릿지용 입력 옵션
27
+ */
28
+ interface GetInformationOptions {
29
+ /**
30
+ * 오즈 뷰어의 정보를 가져오는 명령어
31
+ * - `INPUT_JSON` 현재 보고서의 입력 값을 JSON 형식의 텍스트로 가져옴
32
+ * - `INPUT_JSON_ALL` 전체 보고서의 입력 값을 합쳐서 하나의 JSON 형식 텍스트로 가져옴
33
+ * - `CURRENT_PAGE` 현재 보고서의 페이지 번호. 페이지 번호는 one-based index로 리턴됨
34
+ * - `TOTAL_PAGE_OF_REPORT_FILE_AT=${number}` 보고서 파일별로 전체 페이지 수를 가져옴
35
+ */
36
+ command: string;
37
+ }
38
+ /**
39
+ * 오즈 뷰어 함수 `GetGlobal`을 호출할 때 사용하는 브릿지용 입력 옵션
40
+ */
41
+ interface GetGlobalOptions {
42
+ /** 전역변수 key */
43
+ key: string;
44
+ /** 보고서 인덱스. Zero-based index. 생략 가능 (기본 값 : 0) */
45
+ docIndex?: number;
46
+ }
47
+ /**
48
+ * 오즈 뷰어 함수 `SetGlobal`을 호출할 때 사용하는 브릿지용 입력 옵션
49
+ */
50
+ interface SetGlobalOptions extends GetGlobalOptions {
51
+ /** 전역변수 값 */
52
+ value: string;
53
+ }
54
+ /**
55
+ * 오즈 뷰어 함수 `Script`를 호출할 때 사용하는 브릿지용 입력 옵션
56
+ */
57
+ interface ScriptOptions {
58
+ /**
59
+ * 오즈 뷰어의 기능을 제어하는 명령어
60
+ * - `movepage=${number}` 지정된 페이지 번호로 이동
61
+ */
62
+ command: string;
63
+ }
64
+ /**
65
+ * 오즈 뷰어 함수 `ScriptEx`를 호출할 때 사용하는 브릿지용 입력 옵션
66
+ */
67
+ interface ScriptExOptions extends ScriptOptions {
68
+ /**
69
+ * 오즈 뷰어 파라미터와 파라미터 값.
70
+ * - "`파라미터이름1=파라미터값1delimiter`...delimiter`파라미터이름n=파라미터값n`" 형태로 설정
71
+ */
72
+ param: string;
73
+ /**
74
+ * 파라미터이름=파라미터값을 구분하는 구분자. 생략 가능
75
+ * - (기본 값 : `\n`)
76
+ */
77
+ delimiter?: string;
78
+ }
79
+ /**
80
+ * 오즈 뷰어 함수 `TriggerExternalEvent`를 호출할 때 사용하는 브릿지용 입력 옵션
81
+ */
82
+ interface TriggerExternalEventOptions {
83
+ /** OnExternalEvent로 전달할 첫 번째 값. 생략 가능 (기본 값 : "") */
84
+ param1?: string;
85
+ /** OnExternalEvent로 전달할 두 번째 값. 생략 가능 (기본 값 : "") */
86
+ param2?: string;
87
+ /** OnExternalEvent로 전달할 세 번째 값. 생략 가능 (기본 값 : "") */
88
+ param3?: string;
89
+ /** OnExternalEvent로 전달할 네 번째 값. 생략 가능 (기본 값 : "") */
90
+ param4?: string;
91
+ }
92
+ /**
93
+ * 오즈 뷰어 함수 `TriggerExternalEventByDocIndex`를 호출할 때 사용하는 브릿지용 입력 옵션
94
+ */
95
+ interface TriggerExternalEventByDocIndexOptions extends TriggerExternalEventOptions {
96
+ /** 보고서 인덱스. Zero-based index */
97
+ docIndex: number;
98
+ }
25
99
 
26
100
  interface INativeBridge {
27
101
  showWebPopup<T>(options: ShowWebPopupOptions): Promise<T>;
28
102
  jumpSafari<T>(options: ShowWebPopupOptions): Promise<T>;
29
- createReport<T>(options?: CreateReportOptions): Promise<T>;
103
+ createReport<T>(options: CreateReportOptions): Promise<T>;
104
+ /** @deprecated 샘플 테스트용 브릿지 */
105
+ createReport_Sample<T>(): Promise<T>;
106
+ getInformation<T>(options: GetInformationOptions): Promise<T>;
107
+ getGlobal<T>(options: GetGlobalOptions): Promise<T>;
108
+ setGlobal<T>(options: SetGlobalOptions): Promise<T>;
109
+ script<T>(options: ScriptOptions): Promise<T>;
110
+ scriptEX<T>(options: ScriptExOptions): Promise<T>;
111
+ triggerExternalEvent<T>(options: TriggerExternalEventOptions): Promise<T>;
112
+ triggerExternalEventByDocIndex<T>(options: TriggerExternalEventByDocIndexOptions): Promise<T>;
113
+ getFileRootPath<T>(): Promise<T>;
114
+ getFileDocumentPath<T>(): Promise<T>;
30
115
  }
31
116
 
32
117
  type NativeAction = keyof INativeBridge;
@@ -121,7 +206,137 @@ declare class NativeBridge extends CommonBridge implements INativeBridge {
121
206
  * @returns
122
207
  */
123
208
  jumpSafari<T = any>(options: ShowWebPopupOptions): Promise<T>;
124
- createReport<T = any>(options?: CreateReportOptions): Promise<T>;
209
+ /**
210
+ * ### Bridge for Oz
211
+ * 설정한 뷰어 파라미터를 기준으로 뷰어에 새로운 보고서를 바인딩합니다.
212
+ * @example
213
+ * ```tsx
214
+ * // 사용 예시
215
+ * await Bridge.native.createReport({ param: "connection.openfile=sample.ozd" });
216
+ * ```
217
+ */
218
+ createReport<T = {
219
+ response: string;
220
+ }>(options: CreateReportOptions): Promise<T>;
221
+ /** @deprecated 샘플 테스트용 브릿지 */
222
+ createReport_Sample<T = {
223
+ response: string;
224
+ }>(): Promise<T>;
225
+ /**
226
+ * ### Bridge for Oz
227
+ * 오즈 뷰어의 정보를 가져옵니다
228
+ * @example
229
+ * ```tsx
230
+ * // 사용 예시
231
+ * await Bridge.native.getInformation({ command: "INPUT_JSON" });
232
+ * ```
233
+ */
234
+ getInformation<T = {
235
+ response: string;
236
+ }>(options: GetInformationOptions): Promise<T>;
237
+ /**
238
+ * ### Bridge for Oz
239
+ * 전역 변수 값을 가져옵니다.
240
+ * @example
241
+ * ```tsx
242
+ * // 사용 예시
243
+ * await Bridge.native.getGlobal({ key: "AAA" })
244
+ * ```
245
+ */
246
+ getGlobal<T = {
247
+ response: string;
248
+ }>(options: GetGlobalOptions): Promise<T>;
249
+ /**
250
+ * ### Bridge for Oz
251
+ * 전역 변수 값을 설정합니다.
252
+ * @example
253
+ * ```tsx
254
+ * // 사용 예시
255
+ * await Bridge.native.setGlobal({ key: "AAA", value: JSON.stringify({ aaa: 111 }) });
256
+ * ```
257
+ */
258
+ setGlobal<T = {
259
+ response: string;
260
+ }>(options: SetGlobalOptions): Promise<T>;
261
+ /**
262
+ * ### Bridge for Oz
263
+ * 오즈 뷰어의 기능을 제어합니다.
264
+ * @example
265
+ * ```tsx
266
+ * // 사용 예시
267
+ * const command = `movepage=2`;
268
+ * await Bridge.native.script({ command });
269
+ * ```
270
+ */
271
+ script<T = {
272
+ response: string;
273
+ }>(options: ScriptOptions): Promise<T>;
274
+ /**
275
+ * ### Bridge for Oz
276
+ * 오즈 뷰어의 기능을 제어합니다.
277
+ * - `param`을 통해 오즈 뷰어의 parameter를 변경할수 있습니다
278
+ * @example
279
+ * ```tsx
280
+ * // 사용 예시
281
+ * const command = `movepage=2`;
282
+ * const param1 = `eform.show_prev_next_input=true`;
283
+ * const param2 = `eform.signpad_iconposition=sign_bottom`;
284
+ * // param이 여러개인경우 \n으로 묶는다
285
+ * const param = `${param1}\n${param2}`;
286
+ * await Bridge.native.scriptEX({ command, param });
287
+ * ```
288
+ */
289
+ scriptEX<T = {
290
+ response: string;
291
+ }>(options: ScriptExOptions): Promise<T>;
292
+ /**
293
+ * ### Bridge for Oz
294
+ * 현재 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.
295
+ * @example
296
+ * ```tsx
297
+ * // 사용 예시
298
+ * await Bridge.native.triggerExternalEvent({ param1: 'signer' });
299
+ * ```
300
+ */
301
+ triggerExternalEvent<T = {
302
+ response: string;
303
+ }>(options: TriggerExternalEventOptions): Promise<T>;
304
+ /**
305
+ * ### Bridge for Oz
306
+ * 지정한 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.
307
+ * @example
308
+ * ```tsx
309
+ * // 사용 예시
310
+ * await Bridge.native.triggerExternalEventByDocIndex({ docIndex: 0, param1: 'signer' });
311
+ * ```
312
+ */
313
+ triggerExternalEventByDocIndex<T = {
314
+ response: string;
315
+ }>(options: TriggerExternalEventByDocIndexOptions): Promise<T>;
316
+ /**
317
+ * ### Bridge for Oz
318
+ * 앱 파일시스템의 RootPath를 조회하는 기능입니다
319
+ * @example
320
+ * ```tsx
321
+ * // 사용 예시
322
+ * await Bridge.native.getFileRootPath()
323
+ * ```
324
+ */
325
+ getFileRootPath<T = {
326
+ response: string;
327
+ }>(): Promise<T>;
328
+ /**
329
+ * ### Bridge for Oz
330
+ * 앱 파일시스템의 DocumentPath 조회하는 기능입니다
331
+ * @example
332
+ * ```tsx
333
+ * // 사용 예시
334
+ * await Bridge.native.getFileDocumentPath()
335
+ * ```
336
+ */
337
+ getFileDocumentPath<T = {
338
+ response: string;
339
+ }>(): Promise<T>;
125
340
  }
126
341
 
127
342
  /**
@@ -212,13 +427,13 @@ type OZViewerProgressEvent = {
212
427
  * - 3 : 데이터 다운로드
213
428
  * - 4 : 보고서 바인딩
214
429
  */
215
- step: "0" | "1" | "2" | "3" | "4";
430
+ step: '0' | '1' | '2' | '3' | '4';
216
431
  /**
217
432
  * 보고서 생성 상태
218
433
  * - 1 : 시작
219
434
  * - 2 : 완료
220
435
  */
221
- state: "1" | "2";
436
+ state: '1' | '2';
222
437
  /** 보고서 이름 */
223
438
  reportname: string;
224
439
  };
package/dist/index.d.ts CHANGED
@@ -22,11 +22,96 @@ interface CreateReportOptions {
22
22
  */
23
23
  param: string;
24
24
  }
25
+ /**
26
+ * 오즈 뷰어 함수 `CreateReport`를 호출할 때 사용하는 브릿지용 입력 옵션
27
+ */
28
+ interface GetInformationOptions {
29
+ /**
30
+ * 오즈 뷰어의 정보를 가져오는 명령어
31
+ * - `INPUT_JSON` 현재 보고서의 입력 값을 JSON 형식의 텍스트로 가져옴
32
+ * - `INPUT_JSON_ALL` 전체 보고서의 입력 값을 합쳐서 하나의 JSON 형식 텍스트로 가져옴
33
+ * - `CURRENT_PAGE` 현재 보고서의 페이지 번호. 페이지 번호는 one-based index로 리턴됨
34
+ * - `TOTAL_PAGE_OF_REPORT_FILE_AT=${number}` 보고서 파일별로 전체 페이지 수를 가져옴
35
+ */
36
+ command: string;
37
+ }
38
+ /**
39
+ * 오즈 뷰어 함수 `GetGlobal`을 호출할 때 사용하는 브릿지용 입력 옵션
40
+ */
41
+ interface GetGlobalOptions {
42
+ /** 전역변수 key */
43
+ key: string;
44
+ /** 보고서 인덱스. Zero-based index. 생략 가능 (기본 값 : 0) */
45
+ docIndex?: number;
46
+ }
47
+ /**
48
+ * 오즈 뷰어 함수 `SetGlobal`을 호출할 때 사용하는 브릿지용 입력 옵션
49
+ */
50
+ interface SetGlobalOptions extends GetGlobalOptions {
51
+ /** 전역변수 값 */
52
+ value: string;
53
+ }
54
+ /**
55
+ * 오즈 뷰어 함수 `Script`를 호출할 때 사용하는 브릿지용 입력 옵션
56
+ */
57
+ interface ScriptOptions {
58
+ /**
59
+ * 오즈 뷰어의 기능을 제어하는 명령어
60
+ * - `movepage=${number}` 지정된 페이지 번호로 이동
61
+ */
62
+ command: string;
63
+ }
64
+ /**
65
+ * 오즈 뷰어 함수 `ScriptEx`를 호출할 때 사용하는 브릿지용 입력 옵션
66
+ */
67
+ interface ScriptExOptions extends ScriptOptions {
68
+ /**
69
+ * 오즈 뷰어 파라미터와 파라미터 값.
70
+ * - "`파라미터이름1=파라미터값1delimiter`...delimiter`파라미터이름n=파라미터값n`" 형태로 설정
71
+ */
72
+ param: string;
73
+ /**
74
+ * 파라미터이름=파라미터값을 구분하는 구분자. 생략 가능
75
+ * - (기본 값 : `\n`)
76
+ */
77
+ delimiter?: string;
78
+ }
79
+ /**
80
+ * 오즈 뷰어 함수 `TriggerExternalEvent`를 호출할 때 사용하는 브릿지용 입력 옵션
81
+ */
82
+ interface TriggerExternalEventOptions {
83
+ /** OnExternalEvent로 전달할 첫 번째 값. 생략 가능 (기본 값 : "") */
84
+ param1?: string;
85
+ /** OnExternalEvent로 전달할 두 번째 값. 생략 가능 (기본 값 : "") */
86
+ param2?: string;
87
+ /** OnExternalEvent로 전달할 세 번째 값. 생략 가능 (기본 값 : "") */
88
+ param3?: string;
89
+ /** OnExternalEvent로 전달할 네 번째 값. 생략 가능 (기본 값 : "") */
90
+ param4?: string;
91
+ }
92
+ /**
93
+ * 오즈 뷰어 함수 `TriggerExternalEventByDocIndex`를 호출할 때 사용하는 브릿지용 입력 옵션
94
+ */
95
+ interface TriggerExternalEventByDocIndexOptions extends TriggerExternalEventOptions {
96
+ /** 보고서 인덱스. Zero-based index */
97
+ docIndex: number;
98
+ }
25
99
 
26
100
  interface INativeBridge {
27
101
  showWebPopup<T>(options: ShowWebPopupOptions): Promise<T>;
28
102
  jumpSafari<T>(options: ShowWebPopupOptions): Promise<T>;
29
- createReport<T>(options?: CreateReportOptions): Promise<T>;
103
+ createReport<T>(options: CreateReportOptions): Promise<T>;
104
+ /** @deprecated 샘플 테스트용 브릿지 */
105
+ createReport_Sample<T>(): Promise<T>;
106
+ getInformation<T>(options: GetInformationOptions): Promise<T>;
107
+ getGlobal<T>(options: GetGlobalOptions): Promise<T>;
108
+ setGlobal<T>(options: SetGlobalOptions): Promise<T>;
109
+ script<T>(options: ScriptOptions): Promise<T>;
110
+ scriptEX<T>(options: ScriptExOptions): Promise<T>;
111
+ triggerExternalEvent<T>(options: TriggerExternalEventOptions): Promise<T>;
112
+ triggerExternalEventByDocIndex<T>(options: TriggerExternalEventByDocIndexOptions): Promise<T>;
113
+ getFileRootPath<T>(): Promise<T>;
114
+ getFileDocumentPath<T>(): Promise<T>;
30
115
  }
31
116
 
32
117
  type NativeAction = keyof INativeBridge;
@@ -121,7 +206,137 @@ declare class NativeBridge extends CommonBridge implements INativeBridge {
121
206
  * @returns
122
207
  */
123
208
  jumpSafari<T = any>(options: ShowWebPopupOptions): Promise<T>;
124
- createReport<T = any>(options?: CreateReportOptions): Promise<T>;
209
+ /**
210
+ * ### Bridge for Oz
211
+ * 설정한 뷰어 파라미터를 기준으로 뷰어에 새로운 보고서를 바인딩합니다.
212
+ * @example
213
+ * ```tsx
214
+ * // 사용 예시
215
+ * await Bridge.native.createReport({ param: "connection.openfile=sample.ozd" });
216
+ * ```
217
+ */
218
+ createReport<T = {
219
+ response: string;
220
+ }>(options: CreateReportOptions): Promise<T>;
221
+ /** @deprecated 샘플 테스트용 브릿지 */
222
+ createReport_Sample<T = {
223
+ response: string;
224
+ }>(): Promise<T>;
225
+ /**
226
+ * ### Bridge for Oz
227
+ * 오즈 뷰어의 정보를 가져옵니다
228
+ * @example
229
+ * ```tsx
230
+ * // 사용 예시
231
+ * await Bridge.native.getInformation({ command: "INPUT_JSON" });
232
+ * ```
233
+ */
234
+ getInformation<T = {
235
+ response: string;
236
+ }>(options: GetInformationOptions): Promise<T>;
237
+ /**
238
+ * ### Bridge for Oz
239
+ * 전역 변수 값을 가져옵니다.
240
+ * @example
241
+ * ```tsx
242
+ * // 사용 예시
243
+ * await Bridge.native.getGlobal({ key: "AAA" })
244
+ * ```
245
+ */
246
+ getGlobal<T = {
247
+ response: string;
248
+ }>(options: GetGlobalOptions): Promise<T>;
249
+ /**
250
+ * ### Bridge for Oz
251
+ * 전역 변수 값을 설정합니다.
252
+ * @example
253
+ * ```tsx
254
+ * // 사용 예시
255
+ * await Bridge.native.setGlobal({ key: "AAA", value: JSON.stringify({ aaa: 111 }) });
256
+ * ```
257
+ */
258
+ setGlobal<T = {
259
+ response: string;
260
+ }>(options: SetGlobalOptions): Promise<T>;
261
+ /**
262
+ * ### Bridge for Oz
263
+ * 오즈 뷰어의 기능을 제어합니다.
264
+ * @example
265
+ * ```tsx
266
+ * // 사용 예시
267
+ * const command = `movepage=2`;
268
+ * await Bridge.native.script({ command });
269
+ * ```
270
+ */
271
+ script<T = {
272
+ response: string;
273
+ }>(options: ScriptOptions): Promise<T>;
274
+ /**
275
+ * ### Bridge for Oz
276
+ * 오즈 뷰어의 기능을 제어합니다.
277
+ * - `param`을 통해 오즈 뷰어의 parameter를 변경할수 있습니다
278
+ * @example
279
+ * ```tsx
280
+ * // 사용 예시
281
+ * const command = `movepage=2`;
282
+ * const param1 = `eform.show_prev_next_input=true`;
283
+ * const param2 = `eform.signpad_iconposition=sign_bottom`;
284
+ * // param이 여러개인경우 \n으로 묶는다
285
+ * const param = `${param1}\n${param2}`;
286
+ * await Bridge.native.scriptEX({ command, param });
287
+ * ```
288
+ */
289
+ scriptEX<T = {
290
+ response: string;
291
+ }>(options: ScriptExOptions): Promise<T>;
292
+ /**
293
+ * ### Bridge for Oz
294
+ * 현재 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.
295
+ * @example
296
+ * ```tsx
297
+ * // 사용 예시
298
+ * await Bridge.native.triggerExternalEvent({ param1: 'signer' });
299
+ * ```
300
+ */
301
+ triggerExternalEvent<T = {
302
+ response: string;
303
+ }>(options: TriggerExternalEventOptions): Promise<T>;
304
+ /**
305
+ * ### Bridge for Oz
306
+ * 지정한 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.
307
+ * @example
308
+ * ```tsx
309
+ * // 사용 예시
310
+ * await Bridge.native.triggerExternalEventByDocIndex({ docIndex: 0, param1: 'signer' });
311
+ * ```
312
+ */
313
+ triggerExternalEventByDocIndex<T = {
314
+ response: string;
315
+ }>(options: TriggerExternalEventByDocIndexOptions): Promise<T>;
316
+ /**
317
+ * ### Bridge for Oz
318
+ * 앱 파일시스템의 RootPath를 조회하는 기능입니다
319
+ * @example
320
+ * ```tsx
321
+ * // 사용 예시
322
+ * await Bridge.native.getFileRootPath()
323
+ * ```
324
+ */
325
+ getFileRootPath<T = {
326
+ response: string;
327
+ }>(): Promise<T>;
328
+ /**
329
+ * ### Bridge for Oz
330
+ * 앱 파일시스템의 DocumentPath 조회하는 기능입니다
331
+ * @example
332
+ * ```tsx
333
+ * // 사용 예시
334
+ * await Bridge.native.getFileDocumentPath()
335
+ * ```
336
+ */
337
+ getFileDocumentPath<T = {
338
+ response: string;
339
+ }>(): Promise<T>;
125
340
  }
126
341
 
127
342
  /**
@@ -212,13 +427,13 @@ type OZViewerProgressEvent = {
212
427
  * - 3 : 데이터 다운로드
213
428
  * - 4 : 보고서 바인딩
214
429
  */
215
- step: "0" | "1" | "2" | "3" | "4";
430
+ step: '0' | '1' | '2' | '3' | '4';
216
431
  /**
217
432
  * 보고서 생성 상태
218
433
  * - 1 : 시작
219
434
  * - 2 : 완료
220
435
  */
221
- state: "1" | "2";
436
+ state: '1' | '2';
222
437
  /** 보고서 이름 */
223
438
  reportname: string;
224
439
  };
package/dist/index.js CHANGED
@@ -218,9 +218,143 @@ var NativeBridge = class extends CommonBridge {
218
218
  async jumpSafari(options) {
219
219
  return this.core.callToNative("jumpSafari", options);
220
220
  }
221
+ /**
222
+ * ### Bridge for Oz
223
+ * 설정한 뷰어 파라미터를 기준으로 뷰어에 새로운 보고서를 바인딩합니다.
224
+ * @example
225
+ * ```tsx
226
+ * // 사용 예시
227
+ * await Bridge.native.createReport({ param: "connection.openfile=sample.ozd" });
228
+ * ```
229
+ */
221
230
  async createReport(options) {
222
231
  return this.core.callToNative("createReport", options);
223
232
  }
233
+ /** @deprecated 샘플 테스트용 브릿지 */
234
+ async createReport_Sample() {
235
+ return this.core.callToNative("createReport_Sample");
236
+ }
237
+ /**
238
+ * ### Bridge for Oz
239
+ * 오즈 뷰어의 정보를 가져옵니다
240
+ * @example
241
+ * ```tsx
242
+ * // 사용 예시
243
+ * await Bridge.native.getInformation({ command: "INPUT_JSON" });
244
+ * ```
245
+ */
246
+ async getInformation(options) {
247
+ return this.core.callToNative("getInformation", options);
248
+ }
249
+ /**
250
+ * ### Bridge for Oz
251
+ * 전역 변수 값을 가져옵니다.
252
+ * @example
253
+ * ```tsx
254
+ * // 사용 예시
255
+ * await Bridge.native.getGlobal({ key: "AAA" })
256
+ * ```
257
+ */
258
+ async getGlobal(options) {
259
+ return this.core.callToNative("getGlobal", Object.assign({ docIndex: 0 }, options));
260
+ }
261
+ /**
262
+ * ### Bridge for Oz
263
+ * 전역 변수 값을 설정합니다.
264
+ * @example
265
+ * ```tsx
266
+ * // 사용 예시
267
+ * await Bridge.native.setGlobal({ key: "AAA", value: JSON.stringify({ aaa: 111 }) });
268
+ * ```
269
+ */
270
+ async setGlobal(options) {
271
+ return this.core.callToNative("setGlobal", Object.assign({ docIndex: 0 }, options));
272
+ }
273
+ /**
274
+ * ### Bridge for Oz
275
+ * 오즈 뷰어의 기능을 제어합니다.
276
+ * @example
277
+ * ```tsx
278
+ * // 사용 예시
279
+ * const command = `movepage=2`;
280
+ * await Bridge.native.script({ command });
281
+ * ```
282
+ */
283
+ async script(options) {
284
+ return this.core.callToNative("script", options);
285
+ }
286
+ /**
287
+ * ### Bridge for Oz
288
+ * 오즈 뷰어의 기능을 제어합니다.
289
+ * - `param`을 통해 오즈 뷰어의 parameter를 변경할수 있습니다
290
+ * @example
291
+ * ```tsx
292
+ * // 사용 예시
293
+ * const command = `movepage=2`;
294
+ * const param1 = `eform.show_prev_next_input=true`;
295
+ * const param2 = `eform.signpad_iconposition=sign_bottom`;
296
+ * // param이 여러개인경우 \n으로 묶는다
297
+ * const param = `${param1}\n${param2}`;
298
+ * await Bridge.native.scriptEX({ command, param });
299
+ * ```
300
+ */
301
+ async scriptEX(options) {
302
+ return this.core.callToNative("scriptEX", Object.assign({ delimiter: "\n" }, options));
303
+ }
304
+ /**
305
+ * ### Bridge for Oz
306
+ * 현재 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.
307
+ * @example
308
+ * ```tsx
309
+ * // 사용 예시
310
+ * await Bridge.native.triggerExternalEvent({ param1: 'signer' });
311
+ * ```
312
+ */
313
+ async triggerExternalEvent(options) {
314
+ return this.core.callToNative(
315
+ "triggerExternalEventByDocIndex",
316
+ Object.assign({ param1: "", param2: "", param3: "", param4: "" }, options)
317
+ );
318
+ }
319
+ /**
320
+ * ### Bridge for Oz
321
+ * 지정한 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.
322
+ * @example
323
+ * ```tsx
324
+ * // 사용 예시
325
+ * await Bridge.native.triggerExternalEventByDocIndex({ docIndex: 0, param1: 'signer' });
326
+ * ```
327
+ */
328
+ async triggerExternalEventByDocIndex(options) {
329
+ return this.core.callToNative(
330
+ "triggerExternalEventByDocIndex",
331
+ Object.assign({ param1: "", param2: "", param3: "", param4: "" }, options)
332
+ );
333
+ }
334
+ /**
335
+ * ### Bridge for Oz
336
+ * 앱 파일시스템의 RootPath를 조회하는 기능입니다
337
+ * @example
338
+ * ```tsx
339
+ * // 사용 예시
340
+ * await Bridge.native.getFileRootPath()
341
+ * ```
342
+ */
343
+ async getFileRootPath() {
344
+ return this.core.callToNative("getFileRootPath");
345
+ }
346
+ /**
347
+ * ### Bridge for Oz
348
+ * 앱 파일시스템의 DocumentPath 조회하는 기능입니다
349
+ * @example
350
+ * ```tsx
351
+ * // 사용 예시
352
+ * await Bridge.native.getFileDocumentPath()
353
+ * ```
354
+ */
355
+ async getFileDocumentPath() {
356
+ return this.core.callToNative("getFileDocumentPath");
357
+ }
224
358
  // TODO: 필요 플러그인들 추가
225
359
  };
226
360
 
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/bridge.ts","../src/bridge/oz/oz-event.types.ts"],"names":["OZViewerEvent"],"mappings":"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","file":"index.js","sourcesContent":["import { Platform } from '../types/common.types';\n\nexport const platformDetectorUtils = {\n getPlatform(): Platform {\n if (typeof window === 'undefined') {\nreturn 'web';\n} // SSR 환경에서는 기본값 반환\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 { BridgeAction } from '../types/common.types';\nimport { platformDetectorUtils } from '../utils/platform-detector-utils';\n\nimport { BridgeCommand, BridgeOptions, BridgePromise } from './core.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 if (typeof window === 'undefined') {\nreturn;\n} // SSR 환경에서는 아무것도 하지 않음\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\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n\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\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n\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] = {\n resolve: (value: T) => {\n resolve(value);\n },\n reject: (reason?: any) => {\n reject(reason);\n },\n retain\n };\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 { Core } from './core/core';\n\n/**\n * App, 영업포털과 동일하게 사용가능한 기능 정의 클래스\n */\nexport class CommonBridge {\n protected core: Core;\n\n constructor() {\n this.core = new Core();\n }\n}\n","import { CommonBridge } from './common-bridge';\n\nimport type { INativeBridge } from './types/native/native-bridge.types';\nimport type { ShowWebPopupOptions, CreateReportOptions } from './types/native/native-options.types';\n\n/**\n * App - Web Bridge\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 /**\n *\n * @param options\n * @returns\n */\n async jumpSafari<T = any>(options: ShowWebPopupOptions): Promise<T> {\n return this.core.callToNative<T>('jumpSafari', options);\n }\n\n async createReport<T = any>(options?: CreateReportOptions): Promise<T> {\n return this.core.callToNative<T>('createReport', options);\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { CommonBridge } from './common-bridge';\nimport { IPortalBridge } from './types/portal/portal-bridge.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>('openUrlWindow', options);\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { Core } from './core/core';\nimport { NativeBridge } from './native-bridge';\nimport { PortalBridge } from './portal-bridge';\n\nexport const Bridge = {\n native: new NativeBridge(),\n portal: new PortalBridge(),\n core: new Core()\n};\n","/**\n * OZ 뷰어에 관련된 이벤트 목록\n */\nexport enum OZViewerEvent {\n /**\n * 보고서 생성 단계별로 발생하는 이벤트\n * - `OZViewerProgressEvent` 이벤트와 매칭된다\n * - `viewer.progresscommand=true` 설정이 필요하다\n * - `OZViewerProgressEvent`와 매칭된다\n */\n OZProgressCommand = \"OZProgressCommand\",\n /**\n * 에러 발생 시 발생하는 이벤트\n * - `viewer.errorcommand=true` 설정이 필요하다\n * - `OZViewerErrorEvent`와 매칭된다\n */\n OZErrorCommand = \"OZErrorCommand\",\n /**\n * 화면에 표시되는 페이지가 변경된 후 발생하는 이벤트\n * - `viewer.pagechangecommand=true` 설정이 필요하다\n * - `OZViewerChangeEvent`와 매칭된다\n */\n OZPageChangeCommand = \"OZPageChangeCommand\",\n /**\n * 화면에 표시되는 보고서가 변경된 후 발생하는 이벤트\n * - `viewer.reportchangecommand=true` 설정이 필요하다\n * - `OZViewerChangeEvent`와 매칭된다\n */\n OZReportChangeCommand = \"OZReportChangeCommand\",\n /**\n * `OZUserEvent` _TriggerOCXUserEvent 함수 실행 시 발생하는 이벤트\n * - `OZViewerUserEvent`와 매칭된다\n */\n OZUserEvent = \"OZUserEvent\",\n /**\n * `OZPageBindCommand` 페이지가 바인딩된 후 발생하는 이벤트\n * - `viewer.pagebindcommandinterval` 파라미터에서 설정한 주기별로 동작\n * - ex) `viewer.pagebindcommandinterval=500`\n * - `OZViewerPageBindEvent`와 매칭된다\n */\n OZPageBindCommand = \"OZPageBindCommand\"\n}\n\n/**\n * `OZViewerEvent.OZProgressCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZProgressCommand, (e) => { console.log(e.detail); });\n * ```\n * \n * `step과` `state`는 step => state 방식으로 진행된다\n * \n * 예시\n * ```bash\n * # step0 뷰어실행\n * [step=0][state=0] # 뷰어 실행 시작\n * [step=0][state=1] # 뷰어 실행 완료\n * # step2 보고서 템플릿 생성\n * [step=1][state=0] # 보고서 템플릿 생성 시작\n * [step=1][state=1] # 보고서 템플릿 생성 완료\n * ```\n */\nexport type OZViewerProgressEvent = {\n /**\n * 보고서 생성 단계\n * - 0 : 뷰어 실행 옵션 설정\n * - 1 : 보고서 파일 다운로드\n * - 2 : 보고서 템플릿 생성\n * - 3 : 데이터 다운로드\n * - 4 : 보고서 바인딩\n */\n step: \"0\" | \"1\" | \"2\" | \"3\" | \"4\";\n /**\n * 보고서 생성 상태\n * - 1 : 시작\n * - 2 : 완료\n */\n state: \"1\" | \"2\";\n /** 보고서 이름 */\n reportname: string\n}\n\n/**\n * `OZViewerEvent.OZErrorCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZErrorCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerErrorEvent = {\n /** 에러 메시지 코드 */\n code: string;\n /** 에러 기본 메시지 */\n message: string;\n /** 에러 상세 메시지 */\n detailmessage: string;\n /** 보고서 이름 */\n reportname: string;\n}\n\n\n/**\n * 두 이벤트의 공용 타입 \n * - `OZViewerEvent.OZPageChangeCommand` 이벤트의 `e.detail` 타입 정의\n * - `OZViewerEvent.OZReportChangeCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZPageChangeCommand, (e) => { console.log(e.detail); });\n * window.addEventListener(OZViewerEvent.OZViewerChangeCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerChangeEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: number\n}\n\n/**\n * `OZViewerEvent.OZUserEvent` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZUserEvent, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerUserEvent = {\n /** _TriggerOCXUserEvent 함수에서 전달한 첫 번째 값 */\n param1: string;\n /** _TriggerOCXUserEvent 함수에서 전달한 두 번째 값 */\n param2: string;\n /** _TriggerOCXUserEvent 함수에서 전달한 세 번째 값 */\n param3: string;\n /** 보고서 인덱스(zero-based index) */\n docindex: string\n}\n\n\n/**\n * `OZViewerEvent.OZPageBindCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZPageBindCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerPageBindEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n /** 바인딩된 페이지 번호 */\n pagecount: string;\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/bridge.ts","../src/bridge/oz/oz-event.types.ts"],"names":["OZViewerEvent"],"mappings":"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","file":"index.js","sourcesContent":["import { Platform } from '../types/common.types';\n\nexport const platformDetectorUtils = {\n getPlatform(): Platform {\n if (typeof window === 'undefined') {\n return 'web';\n } // SSR 환경에서는 기본값 반환\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 { BridgeAction } from '../types/common.types';\nimport { platformDetectorUtils } from '../utils/platform-detector-utils';\n\nimport { BridgeCommand, BridgeOptions, BridgePromise } from './core.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 if (typeof window === 'undefined') {\n return;\n } // SSR 환경에서는 아무것도 하지 않음\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\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n\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\n return;\n }\n\n try {\n if (error) {\n promise.reject(error);\n this.cleanupPromise(promiseId);\n\n return;\n }\n\n if (promise.retain) {\n promise.retain(data);\n\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] = {\n resolve: (value: T) => {\n resolve(value);\n },\n reject: (reason?: any) => {\n reject(reason);\n },\n retain\n };\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 { Core } from './core/core';\n\n/**\n * App, 영업포털과 동일하게 사용가능한 기능 정의 클래스\n */\nexport class CommonBridge {\n protected core: Core;\n\n constructor() {\n this.core = new Core();\n }\n}\n","import { CommonBridge } from './common-bridge';\n\nimport type { INativeBridge } from './types/native/native-bridge.types';\nimport type {\n ShowWebPopupOptions,\n CreateReportOptions,\n GetInformationOptions,\n GetGlobalOptions,\n SetGlobalOptions,\n ScriptExOptions,\n ScriptOptions,\n TriggerExternalEventByDocIndexOptions,\n TriggerExternalEventOptions\n} from './types/native/native-options.types';\n\n/**\n * App - Web Bridge\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 /**\n *\n * @param options\n * @returns\n */\n async jumpSafari<T = any>(options: ShowWebPopupOptions): Promise<T> {\n return this.core.callToNative<T>('jumpSafari', options);\n }\n\n /**\n * ### Bridge for Oz\n * 설정한 뷰어 파라미터를 기준으로 뷰어에 새로운 보고서를 바인딩합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.createReport({ param: \"connection.openfile=sample.ozd\" });\n * ```\n */\n async createReport<T = { response: string }>(options: CreateReportOptions): Promise<T> {\n return this.core.callToNative<T>('createReport', options);\n }\n\n /** @deprecated 샘플 테스트용 브릿지 */\n async createReport_Sample<T = { response: string }>(): Promise<T> {\n return this.core.callToNative<T>('createReport_Sample');\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 정보를 가져옵니다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getInformation({ command: \"INPUT_JSON\" });\n * ```\n */\n async getInformation<T = { response: string }>(options: GetInformationOptions): Promise<T> {\n return this.core.callToNative<T>('getInformation', options);\n }\n\n /**\n * ### Bridge for Oz\n * 전역 변수 값을 가져옵니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getGlobal({ key: \"AAA\" })\n * ```\n */\n async getGlobal<T = { response: string }>(options: GetGlobalOptions): Promise<T> {\n return this.core.callToNative<T>('getGlobal', Object.assign({ docIndex: 0 }, options));\n }\n\n /**\n * ### Bridge for Oz\n * 전역 변수 값을 설정합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.setGlobal({ key: \"AAA\", value: JSON.stringify({ aaa: 111 }) });\n * ```\n */\n async setGlobal<T = { response: string }>(options: SetGlobalOptions): Promise<T> {\n return this.core.callToNative<T>('setGlobal', Object.assign({ docIndex: 0 }, options));\n }\n\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 기능을 제어합니다.\n * @example\n * ```tsx\n * // 사용 예시\n * const command = `movepage=2`;\n * await Bridge.native.script({ command });\n * ```\n */\n async script<T = { response: string }>(options: ScriptOptions): Promise<T> {\n return this.core.callToNative<T>('script', options);\n }\n /**\n * ### Bridge for Oz\n * 오즈 뷰어의 기능을 제어합니다.\n * - `param`을 통해 오즈 뷰어의 parameter를 변경할수 있습니다\n * @example\n * ```tsx\n * // 사용 예시\n * const command = `movepage=2`;\n * const param1 = `eform.show_prev_next_input=true`;\n * const param2 = `eform.signpad_iconposition=sign_bottom`;\n * // param이 여러개인경우 \\n으로 묶는다\n * const param = `${param1}\\n${param2}`;\n * await Bridge.native.scriptEX({ command, param });\n * ```\n */\n async scriptEX<T = { response: string }>(options: ScriptExOptions): Promise<T> {\n return this.core.callToNative<T>('scriptEX', Object.assign({ delimiter: '\\n' }, options));\n }\n\n /**\n * ### Bridge for Oz\n * 현재 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.triggerExternalEvent({ param1: 'signer' });\n * ```\n */\n async triggerExternalEvent<T = { response: string }>(options: TriggerExternalEventOptions): Promise<T> {\n return this.core.callToNative<T>(\n 'triggerExternalEventByDocIndex',\n Object.assign({ param1: '', param2: '', param3: '', param4: '' }, options)\n );\n }\n\n /**\n * ### Bridge for Oz\n * 지정한 보고서의 `OnExternalEvent` 이벤트를 실행하고, `OnExternalEvent` 이벤트에서 전달한 값을 string 형태로 리턴받습니다.\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.triggerExternalEventByDocIndex({ docIndex: 0, param1: 'signer' });\n * ```\n */\n async triggerExternalEventByDocIndex<T = { response: string }>(\n options: TriggerExternalEventByDocIndexOptions\n ): Promise<T> {\n return this.core.callToNative<T>(\n 'triggerExternalEventByDocIndex',\n Object.assign({ param1: '', param2: '', param3: '', param4: '' }, options)\n );\n }\n /**\n * ### Bridge for Oz\n * 앱 파일시스템의 RootPath를 조회하는 기능입니다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getFileRootPath()\n * ```\n */\n async getFileRootPath<T = { response: string }>(): Promise<T> {\n return this.core.callToNative<T>('getFileRootPath');\n }\n\n /**\n * ### Bridge for Oz\n * 앱 파일시스템의 DocumentPath 조회하는 기능입니다\n * @example\n * ```tsx\n * // 사용 예시\n * await Bridge.native.getFileDocumentPath()\n * ```\n */\n async getFileDocumentPath<T = { response: string }>(): Promise<T> {\n return this.core.callToNative<T>('getFileDocumentPath');\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { CommonBridge } from './common-bridge';\nimport { IPortalBridge } from './types/portal/portal-bridge.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>('openUrlWindow', options);\n }\n\n // TODO: 필요 플러그인들 추가\n}\n","import { Core } from './core/core';\nimport { NativeBridge } from './native-bridge';\nimport { PortalBridge } from './portal-bridge';\n\nexport const Bridge = {\n native: new NativeBridge(),\n portal: new PortalBridge(),\n core: new Core()\n};\n","/**\n * OZ 뷰어에 관련된 이벤트 목록\n */\nexport enum OZViewerEvent {\n /**\n * 보고서 생성 단계별로 발생하는 이벤트\n * - `OZViewerProgressEvent` 이벤트와 매칭된다\n * - `viewer.progresscommand=true` 설정이 필요하다\n * - `OZViewerProgressEvent`와 매칭된다\n */\n OZProgressCommand = 'OZProgressCommand',\n /**\n * 에러 발생 시 발생하는 이벤트\n * - `viewer.errorcommand=true` 설정이 필요하다\n * - `OZViewerErrorEvent`와 매칭된다\n */\n OZErrorCommand = 'OZErrorCommand',\n /**\n * 화면에 표시되는 페이지가 변경된 후 발생하는 이벤트\n * - `viewer.pagechangecommand=true` 설정이 필요하다\n * - `OZViewerChangeEvent`와 매칭된다\n */\n OZPageChangeCommand = 'OZPageChangeCommand',\n /**\n * 화면에 표시되는 보고서가 변경된 후 발생하는 이벤트\n * - `viewer.reportchangecommand=true` 설정이 필요하다\n * - `OZViewerChangeEvent`와 매칭된다\n */\n OZReportChangeCommand = 'OZReportChangeCommand',\n /**\n * `OZUserEvent` _TriggerOCXUserEvent 함수 실행 시 발생하는 이벤트\n * - `OZViewerUserEvent`와 매칭된다\n */\n OZUserEvent = 'OZUserEvent',\n /**\n * `OZPageBindCommand` 페이지가 바인딩된 후 발생하는 이벤트\n * - `viewer.pagebindcommandinterval` 파라미터에서 설정한 주기별로 동작\n * - ex) `viewer.pagebindcommandinterval=500`\n * - `OZViewerPageBindEvent`와 매칭된다\n */\n OZPageBindCommand = 'OZPageBindCommand'\n}\n\n/**\n * `OZViewerEvent.OZProgressCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZProgressCommand, (e) => { console.log(e.detail); });\n * ```\n *\n * `step과` `state`는 step => state 방식으로 진행된다\n *\n * 예시\n * ```bash\n * # step0 뷰어실행\n * [step=0][state=0] # 뷰어 실행 시작\n * [step=0][state=1] # 뷰어 실행 완료\n * # step2 보고서 템플릿 생성\n * [step=1][state=0] # 보고서 템플릿 생성 시작\n * [step=1][state=1] # 보고서 템플릿 생성 완료\n * ```\n */\nexport type OZViewerProgressEvent = {\n /**\n * 보고서 생성 단계\n * - 0 : 뷰어 실행 옵션 설정\n * - 1 : 보고서 파일 다운로드\n * - 2 : 보고서 템플릿 생성\n * - 3 : 데이터 다운로드\n * - 4 : 보고서 바인딩\n */\n step: '0' | '1' | '2' | '3' | '4';\n /**\n * 보고서 생성 상태\n * - 1 : 시작\n * - 2 : 완료\n */\n state: '1' | '2';\n /** 보고서 이름 */\n reportname: string;\n};\n\n/**\n * `OZViewerEvent.OZErrorCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZErrorCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerErrorEvent = {\n /** 에러 메시지 코드 */\n code: string;\n /** 에러 기본 메시지 */\n message: string;\n /** 에러 상세 메시지 */\n detailmessage: string;\n /** 보고서 이름 */\n reportname: string;\n};\n\n/**\n * 두 이벤트의 공용 타입\n * - `OZViewerEvent.OZPageChangeCommand` 이벤트의 `e.detail` 타입 정의\n * - `OZViewerEvent.OZReportChangeCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZPageChangeCommand, (e) => { console.log(e.detail); });\n * window.addEventListener(OZViewerEvent.OZViewerChangeCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerChangeEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: number;\n};\n\n/**\n * `OZViewerEvent.OZUserEvent` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZUserEvent, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerUserEvent = {\n /** _TriggerOCXUserEvent 함수에서 전달한 첫 번째 값 */\n param1: string;\n /** _TriggerOCXUserEvent 함수에서 전달한 두 번째 값 */\n param2: string;\n /** _TriggerOCXUserEvent 함수에서 전달한 세 번째 값 */\n param3: string;\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n};\n\n/**\n * `OZViewerEvent.OZPageBindCommand` 이벤트의 `e.detail` 타입 정의\n * ```tsx\n * import { OZViewerEvent } from 'sales-frontend-bridge';\n * window.addEventListener(OZViewerEvent.OZPageBindCommand, (e) => { console.log(e.detail); });\n * ```\n */\nexport type OZViewerPageBindEvent = {\n /** 보고서 인덱스(zero-based index) */\n docindex: string;\n /** 바인딩된 페이지 번호 */\n pagecount: string;\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sales-frontend-bridge",
3
- "version": "0.0.11",
3
+ "version": "0.0.13",
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.6"
27
+ "eslint-config-sales-frontend-eslint-config-v8": "^0.0.6",
28
+ "sales-frontend-typescript-config": "0.0.2"
29
29
  },
30
30
  "scripts": {
31
31
  "lint": "eslint . --max-warnings 0",