@blux.ai/web-sdk 2.1.4-dev3 → 2.2.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blux.ai/web-sdk",
3
- "version": "2.1.4-dev3",
3
+ "version": "2.2.0",
4
4
  "description": "The official Blux JavaScript browser client library",
5
5
  "main": "dist/src/index.js",
6
6
  "module": "dist/src/index.js",
@@ -1,5 +1,6 @@
1
1
  import { BehaviorSubject } from "rxjs";
2
2
  import { DevicePlatform, type APIs } from "./apis/APIs";
3
+ import { BridgePlatform } from "./bridges/Bridge";
3
4
  import type { Event as BluxEvent } from "./events/Event";
4
5
  import type { EventRequest } from "./events/types";
5
6
  import type { CategoryRec, ItemRec, ItemsRec, UserRec } from "./recs";
@@ -15,6 +16,14 @@ type BluxUser = {
15
16
  deviceId?: string;
16
17
  userId?: string;
17
18
  };
19
+ type BridgeOptions = {
20
+ /**
21
+ * @deprecated `bridgePlatform`을 사용하세요.
22
+ */
23
+ useRNBridge?: boolean;
24
+ } | {
25
+ bridgePlatform?: BridgePlatform;
26
+ };
18
27
  export declare class BluxClient {
19
28
  private readonly api;
20
29
  private readonly sdkInfo;
@@ -24,18 +33,17 @@ export declare class BluxClient {
24
33
  private readonly inappPollDelay$;
25
34
  private readonly bluxApplicationId;
26
35
  private readonly bluxAPIKey;
27
- private readonly useRNBridge;
36
+ private readonly bridge;
28
37
  private impressedElements;
29
38
  private intersectionObservingElements;
30
39
  private readonly intersectionObserver;
31
40
  private readonly intersectionEntry$;
32
41
  private hitElements;
33
- private postMessageToRN;
34
- constructor({ bluxApplicationId, bluxAPIKey, useRNBridge, }: {
42
+ private resolveBridge;
43
+ constructor({ bluxApplicationId, bluxAPIKey, ...bridgeOptions }: {
35
44
  bluxApplicationId: string;
36
45
  bluxAPIKey: string;
37
- useRNBridge?: boolean;
38
- }, completionCallback?: (args: {
46
+ } & BridgeOptions, completionCallback?: (args: {
39
47
  errorMessage?: string;
40
48
  success: boolean;
41
49
  }) => void);
@@ -9,10 +9,13 @@ import { collectEvent } from "./apis/createEvent";
9
9
  import { getItemRecommendations } from "./apis/getItemRecommendations";
10
10
  import { inappsDispatch } from "./apis/inappsDispatch";
11
11
  import { initialize } from "./apis/initialize";
12
+ import { notificationsUpdate } from "./apis/notificationsUpdate";
12
13
  import { signIn } from "./apis/signIn";
13
14
  import { signOut } from "./apis/signOut";
14
15
  import { updateCustomUserProperties } from "./apis/updateCustomUserProperties";
15
16
  import { updateUserProperties } from "./apis/updateUserProperties";
17
+ import { FlutterBridge } from "./bridges/FlutterBridge";
18
+ import { RNBridge } from "./bridges/RNBridge";
16
19
  import { BLUX_ATTRIBUTES } from "./constants/BLUX_ATTRIBUTES";
17
20
  import { AddClickEvent, AddPageVisitEvent, AddSectionViewEvent, VisitEvent, } from "./events";
18
21
  import { LocalStorage } from "./utils/LocalStorage";
@@ -32,7 +35,7 @@ export class BluxClient {
32
35
  inappPollDelay$ = new BehaviorSubject(5000);
33
36
  bluxApplicationId;
34
37
  bluxAPIKey;
35
- useRNBridge;
38
+ bridge;
36
39
  // Impression 관련 변수
37
40
  impressedElements = [];
38
41
  intersectionObservingElements = [];
@@ -44,28 +47,35 @@ export class BluxClient {
44
47
  intersectionEntry$ = new Subject();
45
48
  // Hit 관련 변수
46
49
  hitElements = [];
47
- // RN 브릿지 함수를 위한 함수
48
- postMessageToRN(action, payload) {
49
- if (typeof window === "undefined" ||
50
- !window.ReactNativeWebView?.postMessage) {
51
- Logger.error("React Native WebView is not available for postMessage", {
52
- tags: {
53
- action,
54
- useRNBridge: this.useRNBridge,
55
- hasReactNativeWebView: typeof window !== "undefined" && !!window.ReactNativeWebView,
56
- },
57
- });
58
- return;
50
+ resolveBridge(bridgeOptions) {
51
+ if ("useRNBridge" in bridgeOptions && bridgeOptions.useRNBridge) {
52
+ return new RNBridge();
59
53
  }
60
- window.ReactNativeWebView.postMessage(JSON.stringify({ action, payload }));
54
+ if ("bridgePlatform" in bridgeOptions && bridgeOptions.bridgePlatform) {
55
+ switch (bridgeOptions.bridgePlatform) {
56
+ case "none":
57
+ return null;
58
+ case "react-native":
59
+ return new RNBridge();
60
+ case "flutter":
61
+ return new FlutterBridge();
62
+ default: {
63
+ const exhaustiveCheck = bridgeOptions.bridgePlatform;
64
+ Logger.error(`Unknown bridge platform: ${exhaustiveCheck}`, {
65
+ tags: { from: "resolveBridge" },
66
+ });
67
+ }
68
+ }
69
+ }
70
+ return null;
61
71
  }
62
- constructor({ bluxApplicationId, bluxAPIKey, useRNBridge = false, }, completionCallback) {
72
+ constructor({ bluxApplicationId, bluxAPIKey, ...bridgeOptions }, completionCallback) {
63
73
  this.bluxApplicationId = bluxApplicationId;
64
74
  this.bluxAPIKey = bluxAPIKey;
65
- this.useRNBridge = useRNBridge;
66
75
  const baseUrl = window?._BLUX_SDK_?.baseUrl ?? "https://api.blux.ai/prod";
67
76
  this.api.defaults.baseURL = baseUrl;
68
- if (!this.useRNBridge) {
77
+ this.bridge = this.resolveBridge(bridgeOptions);
78
+ if (!this.bridge) {
69
79
  onlineAndVisible$
70
80
  .pipe(switchMap((active) => active
71
81
  ? this.inappPollDelay$.pipe(distinctUntilChanged(), switchMap((delay, index) =>
@@ -144,6 +154,7 @@ export class BluxClient {
144
154
  return new Promise((resolve) => {
145
155
  if (!inapp.shouldDisplay)
146
156
  return resolve(true);
157
+ const bluxUser = this.bluxUser$.getValue();
147
158
  const hideTimestamp = LocalStorage.getInappHideTimestamp(inapp.inappId);
148
159
  const isShouldSkip = hideTimestamp !== null && dayjs().isBefore(dayjs(hideTimestamp));
149
160
  if (isShouldSkip)
@@ -185,7 +196,6 @@ export class BluxClient {
185
196
  }
186
197
  }
187
198
  else if (message.action === "link") {
188
- const bluxUser = this.bluxUser$.getValue();
189
199
  if (bluxUser) {
190
200
  createCrmEvent(this.api, {
191
201
  application_id: this.bluxApplicationId,
@@ -199,13 +209,7 @@ export class BluxClient {
199
209
  // TODO: @all 스키마상에는 개인화 랜딩이 존재하나, 콘솔에는 필드가 없음 -> 추후 이에 따른 핸들링이 필요함
200
210
  }
201
211
  else {
202
- // window.open(message.data.url, "_blank");
203
- if (window.top) {
204
- window.top.postMessage({
205
- type: "blux_inapp_message",
206
- url: message.data.url,
207
- }, window.location.origin);
208
- }
212
+ window.open(message.data.url, "_blank");
209
213
  }
210
214
  }
211
215
  iframeElement.remove();
@@ -217,12 +221,19 @@ export class BluxClient {
217
221
  window.visualViewport?.addEventListener("resize", handleViewportChange);
218
222
  window.visualViewport?.addEventListener("scroll", handleViewportChange);
219
223
  window.addEventListener("message", handleMessage);
224
+ if (bluxUser) {
225
+ notificationsUpdate(this.api, {
226
+ application_id: this.bluxApplicationId,
227
+ notification_id: inapp.notificationId,
228
+ }, {
229
+ status: "received",
230
+ }, this.generateApiHeader(bluxUser));
231
+ }
220
232
  });
221
233
  }
222
234
  async init() {
223
- // React Native에서 처리하도록 요청을 보냈다면 웹에서는 API 호출하지 않음
224
- if (this.useRNBridge) {
225
- this.postMessageToRN("initialize", {
235
+ if (this.bridge) {
236
+ this.bridge.initialize({
226
237
  bluxApplicationId: this.bluxApplicationId,
227
238
  bluxAPIKey: this.bluxAPIKey,
228
239
  });
@@ -308,12 +319,10 @@ export class BluxClient {
308
319
  return bluxUser;
309
320
  }
310
321
  async signIn({ userId }) {
311
- // React Native에서 처리하도록 요청을 보냈다면 웹에서는 API 호출하지 않음
312
- if (this.useRNBridge) {
313
- this.postMessageToRN("signIn", { userId });
322
+ if (this.bridge) {
323
+ this.bridge.signIn({ userId });
314
324
  return;
315
325
  }
316
- // React Native WebView가 아닌 경우 웹에서 직접 처리
317
326
  try {
318
327
  const bluxUser = await this.getBluxUserWithTimeout();
319
328
  const { data: { blux_user_id: bluxIdInResponse }, } = await signIn(this.api, { application_id: bluxUser.applicationId, blux_user_id: bluxUser.id }, { user_id: userId, device_id: bluxUser.deviceId }, this.generateApiHeader(bluxUser));
@@ -330,12 +339,10 @@ export class BluxClient {
330
339
  }
331
340
  }
332
341
  async signOut() {
333
- // React Native에서 처리하도록 요청을 보냈다면 웹에서는 API 호출하지 않음
334
- if (this.useRNBridge) {
335
- this.postMessageToRN("signOut");
342
+ if (this.bridge) {
343
+ this.bridge.signOut();
336
344
  return;
337
345
  }
338
- // React Native WebView가 아닌 경우 웹에서 직접 처리
339
346
  try {
340
347
  const bluxUser = await this.getBluxUserWithTimeout();
341
348
  const { data: { blux_user_id: bluxIdInResponse }, } = await signOut(this.api, { application_id: bluxUser.applicationId, blux_user_id: bluxUser.id }, { device_id: bluxUser.deviceId }, this.generateApiHeader(bluxUser));
@@ -350,12 +357,10 @@ export class BluxClient {
350
357
  }
351
358
  }
352
359
  async setUserProperties({ userProperties, }) {
353
- // React Native에서 처리하도록 요청을 보냈다면 웹에서는 API 호출하지 않음
354
- if (this.useRNBridge) {
355
- this.postMessageToRN("setUserProperties", { userProperties });
360
+ if (this.bridge) {
361
+ this.bridge.setUserProperties(userProperties);
356
362
  return;
357
363
  }
358
- // React Native WebView가 아닌 경우 웹에서 직접 처리
359
364
  try {
360
365
  const bluxUser = await this.getBluxUserWithTimeout();
361
366
  await updateUserProperties(this.api, { application_id: bluxUser.applicationId, blux_user_id: bluxUser.id }, { properties: userProperties }, this.generateApiHeader(bluxUser));
@@ -365,12 +370,10 @@ export class BluxClient {
365
370
  }
366
371
  }
367
372
  async setCustomUserProperties({ customUserProperties, }) {
368
- // React Native에서 처리하도록 요청을 보냈다면 웹에서는 API 호출하지 않음
369
- if (this.useRNBridge) {
370
- this.postMessageToRN("setCustomUserProperties", { customUserProperties });
373
+ if (this.bridge) {
374
+ this.bridge.setCustomUserProperties(customUserProperties);
371
375
  return;
372
376
  }
373
- // React Native WebView가 아닌 경우 웹에서 직접 처리
374
377
  try {
375
378
  const bluxUser = await this.getBluxUserWithTimeout();
376
379
  await updateCustomUserProperties(this.api, { application_id: bluxUser.applicationId, blux_user_id: bluxUser.id }, { properties: customUserProperties }, this.generateApiHeader(bluxUser));
@@ -381,12 +384,10 @@ export class BluxClient {
381
384
  }
382
385
  sendEvent(event) {
383
386
  const requests = (Array.isArray(event) ? event : [event]).map((e) => e.request);
384
- // React Native에서 처리하도록 요청을 보냈다면 웹에서는 API 호출하지 않음
385
- if (this.useRNBridge) {
386
- this.postMessageToRN("sendEvent", { requests });
387
+ if (this.bridge) {
388
+ this.bridge.sendEvent({ requests });
387
389
  return;
388
390
  }
389
- // React Native WebView가 아닌 경우 웹에서 직접 처리
390
391
  this.requestQueue$.next([
391
392
  ...this.requestQueue$.value,
392
393
  ...requests.filter((request) => !this.requestQueue$.value.map((r) => r.id).includes(request.id)),
@@ -1 +1 @@
1
- {"version":3,"file":"BluxClient.js","sourceRoot":"/","sources":["src/BluxClient.ts"],"names":[],"mappings":"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","sourcesContent":["import axios from \"axios\";\n// eslint-disable-next-line no-restricted-imports\nimport dayjs from \"dayjs\";\nimport {\n asyncScheduler,\n BehaviorSubject,\n catchError,\n combineLatest,\n concatMap,\n debounceTime,\n distinctUntilChanged,\n exhaustMap,\n filter,\n firstValueFrom,\n from,\n groupBy,\n map,\n mergeMap,\n NEVER,\n observeOn,\n Subject,\n switchMap,\n throwError,\n timeout,\n timer,\n withLatestFrom,\n} from \"rxjs\";\n\nimport packageJson from \"../package.json\";\nimport { DevicePlatform, type APIs } from \"./apis/APIs\";\nimport { createCrmEvent } from \"./apis/createCrmEvent\";\nimport { collectEvent } from \"./apis/createEvent\";\nimport { getItemRecommendations } from \"./apis/getItemRecommendations\";\nimport { InappMessageResponse, inappsDispatch } from \"./apis/inappsDispatch\";\nimport { initialize } from \"./apis/initialize\";\nimport { signIn } from \"./apis/signIn\";\nimport { signOut } from \"./apis/signOut\";\nimport { updateCustomUserProperties } from \"./apis/updateCustomUserProperties\";\nimport { updateUserProperties } from \"./apis/updateUserProperties\";\nimport { BLUX_ATTRIBUTES } from \"./constants/BLUX_ATTRIBUTES\";\nimport {\n AddClickEvent,\n AddPageVisitEvent,\n AddSectionViewEvent,\n VisitEvent,\n} from \"./events\";\nimport { LocalStorage } from \"./utils/LocalStorage\";\nimport { Logger } from \"./utils/Logger\";\nimport { onlineAndVisible$ } from \"./utils/observables\";\nimport { filterNullable } from \"./utils/operators\";\nimport { SessionStorage } from \"./utils/SessionStorage\";\n\nimport type { Event as BluxEvent } from \"./events/Event\";\nimport type { EventRequest } from \"./events/types\";\nimport type { CategoryRec, ItemRec, ItemsRec, UserRec } from \"./recs\";\nimport type { LogLevel } from \"./utils/Logger\";\nimport type { AxiosInstance } from \"axios\";\n\nexport type SdkInfo = {\n type: DevicePlatform;\n version: string;\n};\n\ntype BluxUser = {\n id: string;\n bluxAPIKey: string;\n applicationId: string;\n deviceId?: string;\n userId?: string;\n};\n\nexport class BluxClient {\n private readonly api: AxiosInstance = axios.create();\n\n private readonly sdkInfo: SdkInfo = {\n type: DevicePlatform.browser,\n version: packageJson.version,\n };\n\n public readonly bluxUser$ = new BehaviorSubject<BluxUser | undefined>(\n undefined,\n );\n\n public readonly requestQueue$ = new BehaviorSubject<EventRequest[]>([]);\n public readonly inappQueue$ = new BehaviorSubject<\n InappMessageResponse | undefined\n >(undefined);\n\n private readonly inappPollDelay$ = new BehaviorSubject<number>(5000);\n\n private readonly bluxApplicationId: string;\n private readonly bluxAPIKey: string;\n private readonly useRNBridge: boolean;\n\n // Impression 관련 변수\n private impressedElements: Element[] = [];\n private intersectionObservingElements: Element[] = [];\n private readonly intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n this.intersectionEntry$.next(entry);\n });\n },\n );\n\n private readonly intersectionEntry$ =\n new Subject<IntersectionObserverEntry>();\n\n // Hit 관련 변수\n private hitElements: Element[] = [];\n\n // RN 브릿지 함수를 위한 함수\n private postMessageToRN(\n action: string,\n payload?: Record<string, unknown>,\n ): void {\n if (\n typeof window === \"undefined\" ||\n !window.ReactNativeWebView?.postMessage\n ) {\n Logger.error(\"React Native WebView is not available for postMessage\", {\n tags: {\n action,\n useRNBridge: this.useRNBridge,\n hasReactNativeWebView:\n typeof window !== \"undefined\" && !!window.ReactNativeWebView,\n },\n });\n return;\n }\n\n window.ReactNativeWebView.postMessage(JSON.stringify({ action, payload }));\n }\n\n constructor(\n {\n bluxApplicationId,\n bluxAPIKey,\n useRNBridge = false,\n }: {\n bluxApplicationId: string;\n bluxAPIKey: string;\n useRNBridge?: boolean;\n },\n completionCallback?: (args: {\n errorMessage?: string;\n success: boolean;\n }) => void,\n ) {\n this.bluxApplicationId = bluxApplicationId;\n this.bluxAPIKey = bluxAPIKey;\n this.useRNBridge = useRNBridge;\n\n const baseUrl = window?._BLUX_SDK_?.baseUrl ?? \"https://api.blux.ai/prod\";\n this.api.defaults.baseURL = baseUrl;\n\n if (!this.useRNBridge) {\n onlineAndVisible$\n .pipe(\n switchMap((active) =>\n active\n ? this.inappPollDelay$.pipe(\n distinctUntilChanged(),\n switchMap((delay, index) =>\n // init 직후는 바로 호출, 이후에는 delay 후 호출\n index === 0 ? timer(0, delay) : timer(delay, delay),\n ),\n )\n : NEVER,\n ),\n withLatestFrom(this.bluxUser$),\n map(([_, bluxUser]) => bluxUser),\n filterNullable(),\n exhaustMap((bluxUser) => this.handleInappEvent(bluxUser)),\n )\n .subscribe();\n }\n\n combineLatest([this.requestQueue$, this.bluxUser$.pipe(filterNullable())])\n .pipe(\n filter(([requests]) => requests.length > 0),\n exhaustMap(async ([requests, bluxUser]) => {\n const events = requests.map((request) => ({\n ...request,\n internal_event_properties: {\n ...request.internal_event_properties,\n url: `${this.urlAndRef$.value?.url ?? null}`,\n ref: `${this.urlAndRef$.value?.ref ?? null}`,\n },\n blux_id: bluxUser.id,\n device_id: bluxUser.deviceId,\n }));\n\n await this.handleSendRequest({ bluxUser, events });\n return requests.map((r) => r.id); // TODO: @all return successed requests only\n }),\n map((requestIdsSucceeded) =>\n this.requestQueue$.value.filter(\n (request) => !requestIdsSucceeded.includes(request.id),\n ),\n ),\n observeOn(asyncScheduler),\n )\n .subscribe(this.requestQueue$);\n\n this.bluxUser$.subscribe((bluxUser) => {\n if (bluxUser) SessionStorage.setBluxUserId(bluxUser.id);\n });\n\n this.inappQueue$\n .pipe(filterNullable())\n .pipe(concatMap((inapp) => from(this.displayInapp(inapp))))\n .subscribe();\n\n this.init()\n .then(() => {\n completionCallback?.({ success: true });\n })\n .catch((error) => {\n completionCallback?.({ success: false, errorMessage: error.message });\n });\n }\n\n private generateApiHeader({ bluxAPIKey }: { bluxAPIKey: string }) {\n return {\n Authorization: bluxAPIKey,\n };\n }\n\n private async handleSendRequest({\n bluxUser,\n events,\n }: {\n bluxUser: BluxUser;\n events: EventRequest[];\n }) {\n try {\n await collectEvent(\n this.api,\n {\n blux_user_id: bluxUser.id,\n application_id: bluxUser.applicationId,\n },\n {\n events,\n },\n this.generateApiHeader(bluxUser),\n );\n } catch (error) {\n Logger.error(error, { tags: { from: \"request-events-api\" } });\n }\n }\n\n private async handleInappEvent(bluxUser: BluxUser) {\n try {\n const { data } = await inappsDispatch(\n this.api,\n {\n application_id: bluxUser.applicationId,\n },\n {\n blux_user_id: bluxUser.id,\n device_id: bluxUser.deviceId ?? \"\",\n platform: this.sdkInfo.type,\n },\n this.generateApiHeader(bluxUser),\n );\n\n this.inappPollDelay$.next(data.nextPollDelay);\n this.inappQueue$.next(data);\n } catch (error) {\n Logger.error(error, { tags: { from: \"request-inapps-api\" } });\n }\n }\n\n private async displayInapp(inapp: InappMessageResponse) {\n return new Promise((resolve) => {\n if (!inapp.shouldDisplay) return resolve(true);\n\n const hideTimestamp = LocalStorage.getInappHideTimestamp(inapp.inappId);\n const isShouldSkip =\n hideTimestamp !== null && dayjs().isBefore(dayjs(hideTimestamp));\n\n if (isShouldSkip) return resolve(true);\n\n const iframeElement = document.createElement(\"iframe\");\n\n const params = new URLSearchParams({\n inapp_id: inapp.inappId,\n application_id: this.bluxApplicationId,\n stage: \"prod\",\n });\n\n iframeElement.src = `${inapp.baseUrl}?${params.toString()}`;\n iframeElement.style.position = \"fixed\";\n iframeElement.style.width = `${window.innerWidth}px`;\n iframeElement.style.height = `${window.innerHeight}px`;\n iframeElement.style.top = \"0\";\n iframeElement.style.left = \"0\";\n\n iframeElement.style.zIndex = \"9999\";\n iframeElement.id = `blux-inapp-${inapp.inappId}`;\n\n document.body.appendChild(iframeElement);\n\n const handleViewportChange = () => {\n const width = window.visualViewport?.width ?? window.innerWidth;\n const height = window.visualViewport?.height ?? window.innerHeight;\n const left = window.visualViewport?.offsetLeft ?? 0;\n const top = window.visualViewport?.offsetTop ?? 0;\n\n iframeElement.style.width = `${width}px`;\n iframeElement.style.height = `${height}px`;\n iframeElement.style.left = `${left}px`;\n iframeElement.style.top = `${top}px`;\n };\n\n const handleMessage = (\n event: MessageEvent<\n | {\n action: \"hide\";\n data: {\n days_to_hide: number;\n };\n }\n | {\n action: \"link\";\n data:\n | {\n is_blux_landing: false;\n url: string;\n }\n | {\n is_blux_landing: true;\n landing_id: string;\n };\n }\n >,\n ) => {\n if (event.origin !== new URL(inapp.baseUrl).origin) return;\n const message = event.data;\n\n if (message.action === \"hide\") {\n const { days_to_hide } = message.data;\n if (days_to_hide !== 0) {\n const expiresAt = dayjs().add(days_to_hide, \"days\").valueOf();\n LocalStorage.setInappHideTimestamp(inapp.inappId, expiresAt);\n }\n } else if (message.action === \"link\") {\n const bluxUser = this.bluxUser$.getValue();\n if (bluxUser) {\n createCrmEvent(\n this.api,\n {\n application_id: this.bluxApplicationId,\n },\n {\n notification_id: inapp.notificationId,\n crm_event_type: \"inapp_opened\",\n captured_at: new Date().toISOString(),\n },\n this.generateApiHeader(bluxUser),\n );\n }\n\n if (message.data.is_blux_landing) {\n // TODO: @all 스키마상에는 개인화 랜딩이 존재하나, 콘솔에는 필드가 없음 -> 추후 이에 따른 핸들링이 필요함\n } else {\n // window.open(message.data.url, \"_blank\");\n if (window.top) {\n window.top.postMessage(\n {\n type: \"blux_inapp_message\",\n url: message.data.url,\n },\n window.location.origin,\n );\n }\n }\n }\n\n iframeElement.remove();\n window.removeEventListener(\"message\", handleMessage);\n window.visualViewport?.removeEventListener(\n \"resize\",\n handleViewportChange,\n );\n window.visualViewport?.removeEventListener(\n \"scroll\",\n handleViewportChange,\n );\n resolve(inapp.inappId);\n };\n\n window.visualViewport?.addEventListener(\"resize\", handleViewportChange);\n window.visualViewport?.addEventListener(\"scroll\", handleViewportChange);\n window.addEventListener(\"message\", handleMessage);\n });\n }\n\n private async init() {\n // React Native에서 처리하도록 요청을 보냈다면 웹에서는 API 호출하지 않음\n if (this.useRNBridge) {\n this.postMessageToRN(\"initialize\", {\n bluxApplicationId: this.bluxApplicationId,\n bluxAPIKey: this.bluxAPIKey,\n });\n return;\n }\n\n const blux_user_id = new URLSearchParams(window.location.search).get(\n \"blux_user_id\",\n );\n\n const isBluxUserIdExistInSessionStorage = SessionStorage.getBluxUserId();\n if (!isBluxUserIdExistInSessionStorage) this.sendEvent(new VisitEvent({}));\n\n Logger.debug(`Init with application id: ${this.bluxApplicationId}`);\n\n const deviceId = LocalStorage.getDeviceId();\n\n if (!deviceId) {\n Logger.debug(\"No saved Device ID, register a new one.\");\n }\n\n this.handleUrlAndRef();\n\n // handle page visit event\n this.urlAndRef$.pipe(filterNullable()).subscribe(() => {\n this.sendEvent(new AddPageVisitEvent({}));\n });\n\n this.registerHitTracker();\n\n // 페이지 이동 시 추천 지표 수집 관련 변수 초기화\n this.urlAndRef$.pipe(filterNullable()).subscribe(() => {\n this.impressedElements = [];\n });\n\n this.registerImpressionTracker();\n new MutationObserver(() => {\n this.registerImpressionTracker();\n }).observe(document, { subtree: true, childList: true });\n\n // 500ms 연속으로 엘리먼트 들어있으면 추천 지표 수집\n const MIN_IMPRESSION_TIME = 500;\n this.intersectionEntry$\n .pipe(\n groupBy((entry) => entry.target),\n mergeMap((group$) =>\n group$.pipe(\n debounceTime(MIN_IMPRESSION_TIME),\n filter((entry) => entry.isIntersecting),\n ),\n ),\n )\n .subscribe((entry) => {\n const trackingId = entry.target.getAttribute(\n BLUX_ATTRIBUTES.tracking_id,\n );\n if (!trackingId) {\n Logger.warning(\n `Tracking ID is not found in the parent elements. Please check the tracking ID(${BLUX_ATTRIBUTES.tracking_id}) is set correctly.`,\n );\n return;\n }\n if (this.impressedElements.includes(entry.target)) return;\n\n this.sendEvent(\n new AddSectionViewEvent({\n section: trackingId,\n tracking: {\n id: trackingId,\n type: \"impression\",\n },\n }),\n );\n this.impressedElements.push(entry.target);\n });\n\n const { data } = await initialize(\n this.api,\n { application_id: this.bluxApplicationId },\n {\n isVisitHandlingInSdk: true,\n device_id: deviceId ?? undefined,\n country_code: navigator.language.split(\"-\")[1],\n device_model: navigator.userAgent,\n language_code: navigator.language.split(\"-\")[0],\n platform: DevicePlatform.browser,\n os_version: navigator.userAgent,\n sdk_version: this.sdkInfo.version,\n sdk_type: this.sdkInfo.type,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n blux_user_id: blux_user_id ?? undefined,\n },\n this.generateApiHeader({\n bluxAPIKey: this.bluxAPIKey,\n }),\n );\n\n if (data.device_id) LocalStorage.setDeviceId(data.device_id);\n\n this.bluxUser$.next({\n id: data.blux_user_id,\n bluxAPIKey: this.bluxAPIKey,\n applicationId: this.bluxApplicationId,\n deviceId: data.device_id,\n });\n }\n\n public setLogLevel(logLevel: LogLevel) {\n Logger.setLevel(logLevel);\n }\n\n private async getBluxUserWithTimeout() {\n const bluxUser = await firstValueFrom(\n this.bluxUser$.pipe(\n filterNullable(),\n timeout(5000),\n catchError((error) => {\n return throwError(() =>\n error.name === \"TimeoutError\"\n ? new Error(\n \"Application ID is not initialized. Please initialize BluxClient.\",\n )\n : error,\n );\n }),\n ),\n );\n\n return bluxUser;\n }\n\n public async signIn({ userId }: { userId: string }) {\n // React Native에서 처리하도록 요청을 보냈다면 웹에서는 API 호출하지 않음\n if (this.useRNBridge) {\n this.postMessageToRN(\"signIn\", { userId });\n return;\n }\n\n // React Native WebView가 아닌 경우 웹에서 직접 처리\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n\n const {\n data: { blux_user_id: bluxIdInResponse },\n } = await signIn(\n this.api,\n { application_id: bluxUser.applicationId, blux_user_id: bluxUser.id },\n { user_id: userId, device_id: bluxUser.deviceId },\n this.generateApiHeader(bluxUser),\n );\n\n if (bluxIdInResponse !== bluxUser.id) {\n Logger.debug(\"Blux id is changed in signIn.\");\n this.bluxUser$.next({\n ...bluxUser,\n id: bluxIdInResponse,\n });\n }\n } catch (error) {\n Logger.error(error, { tags: { from: \"signIn\" } });\n }\n }\n\n public async signOut() {\n // React Native에서 처리하도록 요청을 보냈다면 웹에서는 API 호출하지 않음\n if (this.useRNBridge) {\n this.postMessageToRN(\"signOut\");\n return;\n }\n\n // React Native WebView가 아닌 경우 웹에서 직접 처리\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n\n const {\n data: { blux_user_id: bluxIdInResponse },\n } = await signOut(\n this.api,\n { application_id: bluxUser.applicationId, blux_user_id: bluxUser.id },\n { device_id: bluxUser.deviceId },\n this.generateApiHeader(bluxUser),\n );\n\n Logger.debug(\"Blux id is changed in signOut.\");\n this.bluxUser$.next({\n ...bluxUser,\n id: bluxIdInResponse,\n });\n } catch (error) {\n Logger.error(error, { tags: { from: \"signOut\" } });\n }\n }\n\n public async setUserProperties({\n userProperties,\n }: {\n userProperties: {\n phone_number?: string;\n email_address?: string;\n marketing_notification_consent?: boolean;\n nighttime_notification_consent?: boolean;\n marketing_notification_sms_consent?: boolean;\n marketing_notification_email_consent?: boolean;\n marketing_notification_push_consent?: boolean;\n marketing_notification_kakao_consent?: boolean;\n };\n }) {\n // React Native에서 처리하도록 요청을 보냈다면 웹에서는 API 호출하지 않음\n if (this.useRNBridge) {\n this.postMessageToRN(\"setUserProperties\", { userProperties });\n return;\n }\n\n // React Native WebView가 아닌 경우 웹에서 직접 처리\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n\n await updateUserProperties(\n this.api,\n { application_id: bluxUser.applicationId, blux_user_id: bluxUser.id },\n { properties: userProperties },\n this.generateApiHeader(bluxUser),\n );\n } catch (error) {\n Logger.error(error, { tags: { from: \"setUserProperties\" } });\n }\n }\n\n public async setCustomUserProperties({\n customUserProperties,\n }: {\n customUserProperties: Record<string, string | boolean | number | null>;\n }) {\n // React Native에서 처리하도록 요청을 보냈다면 웹에서는 API 호출하지 않음\n if (this.useRNBridge) {\n this.postMessageToRN(\"setCustomUserProperties\", { customUserProperties });\n return;\n }\n\n // React Native WebView가 아닌 경우 웹에서 직접 처리\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n\n await updateCustomUserProperties(\n this.api,\n { application_id: bluxUser.applicationId, blux_user_id: bluxUser.id },\n { properties: customUserProperties },\n this.generateApiHeader(bluxUser),\n );\n } catch (error) {\n Logger.error(error, { tags: { from: \"setCustomUserProperties\" } });\n }\n }\n\n public sendEvent(event: BluxEvent | BluxEvent[]) {\n const requests = (Array.isArray(event) ? event : [event]).map(\n (e) => e.request,\n );\n\n // React Native에서 처리하도록 요청을 보냈다면 웹에서는 API 호출하지 않음\n if (this.useRNBridge) {\n this.postMessageToRN(\"sendEvent\", { requests });\n return;\n }\n\n // React Native WebView가 아닌 경우 웹에서 직접 처리\n this.requestQueue$.next([\n ...this.requestQueue$.value,\n ...requests.filter(\n (request) =>\n !this.requestQueue$.value.map((r) => r.id).includes(request.id),\n ),\n ]);\n }\n\n private urlAndRef$ = new BehaviorSubject<\n { url: string; ref: string | undefined } | undefined\n >(undefined);\n\n private handleUrlAndRef() {\n // set url and ref to local storage\n this.urlAndRef$.pipe(filterNullable()).subscribe(({ url, ref }) => {\n if (ref) {\n LocalStorage.setRef(ref);\n }\n LocalStorage.setUrl(url);\n });\n // init url and ref from local storage\n this.urlAndRef$.next({\n url: window.location.href,\n ref: LocalStorage.getUrl() ?? undefined,\n });\n // observe url and ref change\n new MutationObserver(() => {\n const prevUrl = this.urlAndRef$.value?.url;\n const currentUrl = window.location.href;\n if (prevUrl !== currentUrl) {\n this.urlAndRef$.next({\n url: currentUrl,\n ref: prevUrl ?? undefined,\n });\n }\n }).observe(document, { subtree: true, childList: true });\n }\n\n private registerImpressionTracker() {\n const targetElements = Array.from(\n document.querySelectorAll(`[${BLUX_ATTRIBUTES.tracking_id}]`),\n );\n\n const removed = this.intersectionObservingElements.filter(\n (e) => !targetElements.includes(e),\n );\n\n removed.forEach((e) => {\n this.intersectionObserver.unobserve(e);\n });\n\n const added = targetElements.filter(\n (element) => !this.intersectionObservingElements.includes(element),\n );\n\n added.forEach((element) => {\n this.intersectionObserver.observe(element);\n });\n\n this.intersectionObservingElements = targetElements;\n }\n\n private registerHitTracker() {\n const handleDelegatedClick = (event: Event) => {\n if (!(event.target instanceof Element)) return;\n\n const eventTarget = event.target;\n\n const targetItemElement = eventTarget.closest(\n `[${BLUX_ATTRIBUTES.item_id}]`,\n );\n if (!targetItemElement) return;\n\n const itemId = targetItemElement.getAttribute(BLUX_ATTRIBUTES.item_id);\n if (!itemId) return;\n\n const targetSectionElement = eventTarget.closest(\n `[${BLUX_ATTRIBUTES.tracking_id}]`,\n );\n const trackingId = targetSectionElement?.getAttribute(\n BLUX_ATTRIBUTES.tracking_id,\n );\n if (!trackingId) {\n Logger.warning(\n `Tracking ID is not found in the parent elements. Please check the tracking ID(${BLUX_ATTRIBUTES.tracking_id}) is set correctly.`,\n );\n return;\n }\n\n if (!this.hitElements.includes(targetItemElement)) {\n this.sendEvent(\n new AddClickEvent({\n itemId,\n tracking: {\n id: trackingId,\n type: \"hit\",\n },\n }),\n );\n this.hitElements.push(targetItemElement);\n }\n };\n document.addEventListener(\"click\", handleDelegatedClick);\n this.urlAndRef$.pipe(filterNullable()).subscribe(() => {\n this.hitElements = [];\n });\n }\n\n public async getUserRec(\n rec: UserRec,\n ): Promise<APIs.bluxUsersGetItemRecommendationsV2.ResponseData> {\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n const recRequest = rec.request;\n\n const recommendationResponse = await getItemRecommendations(\n this.api,\n {\n application_id: bluxUser.applicationId,\n blux_user_id: bluxUser.id,\n },\n {\n call_type: recRequest.call_type,\n limit: recRequest.limit,\n offset: recRequest.offset,\n },\n this.generateApiHeader(bluxUser),\n );\n\n return recommendationResponse.data;\n } catch (error) {\n Logger.error(error, { tags: { from: \"getItemRecommendations\" } });\n return {\n item_ids: [],\n metadata: {},\n recommendation_id: null,\n };\n }\n }\n\n public async getItemRec(\n rec: ItemRec,\n ): Promise<APIs.bluxUsersGetItemRecommendationsV2.ResponseData> {\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n const recRequest = rec.request;\n\n const recommendationResponse = await getItemRecommendations(\n this.api,\n {\n application_id: bluxUser.applicationId,\n blux_user_id: bluxUser.id,\n },\n {\n call_type: recRequest.call_type,\n limit: recRequest.limit,\n offset: recRequest.offset,\n item_id: recRequest.item_id,\n },\n this.generateApiHeader(bluxUser),\n );\n\n return recommendationResponse.data;\n } catch (error) {\n Logger.error(error, { tags: { from: \"getItemRecommendations\" } });\n return {\n item_ids: [],\n metadata: {},\n recommendation_id: null,\n };\n }\n }\n\n public async getItemsRec(\n rec: ItemsRec,\n ): Promise<APIs.bluxUsersGetItemRecommendationsV2.ResponseData> {\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n const recRequest = rec.request;\n\n const recommendationResponse = await getItemRecommendations(\n this.api,\n {\n application_id: bluxUser.applicationId,\n blux_user_id: bluxUser.id,\n },\n {\n call_type: recRequest.call_type,\n limit: recRequest.limit,\n offset: recRequest.offset,\n item_ids: recRequest.item_ids,\n },\n this.generateApiHeader(bluxUser),\n );\n\n return recommendationResponse.data;\n } catch (error) {\n Logger.error(error, { tags: { from: \"getItemRecommendations\" } });\n return {\n item_ids: [],\n metadata: {},\n recommendation_id: null,\n };\n }\n }\n\n public async getCategoryRec(\n rec: CategoryRec,\n ): Promise<APIs.bluxUsersGetItemRecommendationsV2.ResponseData> {\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n const recRequest = rec.request;\n\n const recommendationResponse = await getItemRecommendations(\n this.api,\n {\n application_id: bluxUser.applicationId,\n blux_user_id: bluxUser.id,\n },\n {\n call_type: recRequest.call_type,\n limit: recRequest.limit,\n offset: recRequest.offset,\n category_id: recRequest.category_id,\n },\n this.generateApiHeader(bluxUser),\n );\n\n return recommendationResponse.data;\n } catch (error) {\n Logger.error(error, { tags: { from: \"getItemRecommendations\" } });\n return {\n item_ids: [],\n metadata: {},\n recommendation_id: null,\n };\n }\n }\n}\n"]}
1
+ {"version":3,"file":"BluxClient.js","sourceRoot":"/","sources":["src/BluxClient.ts"],"names":[],"mappings":"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","sourcesContent":["import axios from \"axios\";\n// eslint-disable-next-line no-restricted-imports\nimport dayjs from \"dayjs\";\nimport {\n asyncScheduler,\n BehaviorSubject,\n catchError,\n combineLatest,\n concatMap,\n debounceTime,\n distinctUntilChanged,\n exhaustMap,\n filter,\n firstValueFrom,\n from,\n groupBy,\n map,\n mergeMap,\n NEVER,\n observeOn,\n Subject,\n switchMap,\n throwError,\n timeout,\n timer,\n withLatestFrom,\n} from \"rxjs\";\n\nimport packageJson from \"../package.json\";\nimport { DevicePlatform, type APIs } from \"./apis/APIs\";\nimport { createCrmEvent } from \"./apis/createCrmEvent\";\nimport { collectEvent } from \"./apis/createEvent\";\nimport { getItemRecommendations } from \"./apis/getItemRecommendations\";\nimport { InappMessageResponse, inappsDispatch } from \"./apis/inappsDispatch\";\nimport { initialize } from \"./apis/initialize\";\nimport { notificationsUpdate } from \"./apis/notificationsUpdate\";\nimport { signIn } from \"./apis/signIn\";\nimport { signOut } from \"./apis/signOut\";\nimport { updateCustomUserProperties } from \"./apis/updateCustomUserProperties\";\nimport { updateUserProperties } from \"./apis/updateUserProperties\";\nimport { Bridge, BridgePlatform } from \"./bridges/Bridge\";\nimport { FlutterBridge } from \"./bridges/FlutterBridge\";\nimport { RNBridge } from \"./bridges/RNBridge\";\nimport { BLUX_ATTRIBUTES } from \"./constants/BLUX_ATTRIBUTES\";\nimport {\n AddClickEvent,\n AddPageVisitEvent,\n AddSectionViewEvent,\n VisitEvent,\n} from \"./events\";\nimport { LocalStorage } from \"./utils/LocalStorage\";\nimport { Logger } from \"./utils/Logger\";\nimport { onlineAndVisible$ } from \"./utils/observables\";\nimport { filterNullable } from \"./utils/operators\";\nimport { SessionStorage } from \"./utils/SessionStorage\";\n\nimport type { Event as BluxEvent } from \"./events/Event\";\nimport type { EventRequest } from \"./events/types\";\nimport type { CategoryRec, ItemRec, ItemsRec, UserRec } from \"./recs\";\nimport type { LogLevel } from \"./utils/Logger\";\nimport type { AxiosInstance } from \"axios\";\n\nexport type SdkInfo = {\n type: DevicePlatform;\n version: string;\n};\n\ntype BluxUser = {\n id: string;\n bluxAPIKey: string;\n applicationId: string;\n deviceId?: string;\n userId?: string;\n};\n\ntype BridgeOptions =\n | {\n /**\n * @deprecated `bridgePlatform`을 사용하세요.\n */\n useRNBridge?: boolean;\n }\n | { bridgePlatform?: BridgePlatform };\n\nexport class BluxClient {\n private readonly api: AxiosInstance = axios.create();\n\n private readonly sdkInfo: SdkInfo = {\n type: DevicePlatform.browser,\n version: packageJson.version,\n };\n\n public readonly bluxUser$ = new BehaviorSubject<BluxUser | undefined>(\n undefined,\n );\n\n public readonly requestQueue$ = new BehaviorSubject<EventRequest[]>([]);\n public readonly inappQueue$ = new BehaviorSubject<\n InappMessageResponse | undefined\n >(undefined);\n\n private readonly inappPollDelay$ = new BehaviorSubject<number>(5000);\n\n private readonly bluxApplicationId: string;\n private readonly bluxAPIKey: string;\n\n private readonly bridge: Bridge | null;\n\n // Impression 관련 변수\n private impressedElements: Element[] = [];\n private intersectionObservingElements: Element[] = [];\n private readonly intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n this.intersectionEntry$.next(entry);\n });\n },\n );\n\n private readonly intersectionEntry$ =\n new Subject<IntersectionObserverEntry>();\n\n // Hit 관련 변수\n private hitElements: Element[] = [];\n\n private resolveBridge(bridgeOptions: BridgeOptions): Bridge | null {\n if (\"useRNBridge\" in bridgeOptions && bridgeOptions.useRNBridge) {\n return new RNBridge();\n }\n\n if (\"bridgePlatform\" in bridgeOptions && bridgeOptions.bridgePlatform) {\n switch (bridgeOptions.bridgePlatform) {\n case \"none\":\n return null;\n case \"react-native\":\n return new RNBridge();\n case \"flutter\":\n return new FlutterBridge();\n default: {\n const exhaustiveCheck: never = bridgeOptions.bridgePlatform;\n Logger.error(`Unknown bridge platform: ${exhaustiveCheck}`, {\n tags: { from: \"resolveBridge\" },\n });\n }\n }\n }\n\n return null;\n }\n\n constructor(\n {\n bluxApplicationId,\n bluxAPIKey,\n ...bridgeOptions\n }: {\n bluxApplicationId: string;\n bluxAPIKey: string;\n } & BridgeOptions,\n completionCallback?: (args: {\n errorMessage?: string;\n success: boolean;\n }) => void,\n ) {\n this.bluxApplicationId = bluxApplicationId;\n this.bluxAPIKey = bluxAPIKey;\n\n const baseUrl = window?._BLUX_SDK_?.baseUrl ?? \"https://api.blux.ai/prod\";\n this.api.defaults.baseURL = baseUrl;\n\n this.bridge = this.resolveBridge(bridgeOptions);\n if (!this.bridge) {\n onlineAndVisible$\n .pipe(\n switchMap((active) =>\n active\n ? this.inappPollDelay$.pipe(\n distinctUntilChanged(),\n switchMap((delay, index) =>\n // init 직후는 바로 호출, 이후에는 delay 후 호출\n index === 0 ? timer(0, delay) : timer(delay, delay),\n ),\n )\n : NEVER,\n ),\n withLatestFrom(this.bluxUser$),\n map(([_, bluxUser]) => bluxUser),\n filterNullable(),\n exhaustMap((bluxUser) => this.handleInappEvent(bluxUser)),\n )\n .subscribe();\n }\n\n combineLatest([this.requestQueue$, this.bluxUser$.pipe(filterNullable())])\n .pipe(\n filter(([requests]) => requests.length > 0),\n exhaustMap(async ([requests, bluxUser]) => {\n const events = requests.map((request) => ({\n ...request,\n internal_event_properties: {\n ...request.internal_event_properties,\n url: `${this.urlAndRef$.value?.url ?? null}`,\n ref: `${this.urlAndRef$.value?.ref ?? null}`,\n },\n blux_id: bluxUser.id,\n device_id: bluxUser.deviceId,\n }));\n\n await this.handleSendRequest({ bluxUser, events });\n return requests.map((r) => r.id); // TODO: @all return successed requests only\n }),\n map((requestIdsSucceeded) =>\n this.requestQueue$.value.filter(\n (request) => !requestIdsSucceeded.includes(request.id),\n ),\n ),\n observeOn(asyncScheduler),\n )\n .subscribe(this.requestQueue$);\n\n this.bluxUser$.subscribe((bluxUser) => {\n if (bluxUser) SessionStorage.setBluxUserId(bluxUser.id);\n });\n\n this.inappQueue$\n .pipe(filterNullable())\n .pipe(concatMap((inapp) => from(this.displayInapp(inapp))))\n .subscribe();\n\n this.init()\n .then(() => {\n completionCallback?.({ success: true });\n })\n .catch((error) => {\n completionCallback?.({ success: false, errorMessage: error.message });\n });\n }\n\n private generateApiHeader({ bluxAPIKey }: { bluxAPIKey: string }) {\n return {\n Authorization: bluxAPIKey,\n };\n }\n\n private async handleSendRequest({\n bluxUser,\n events,\n }: {\n bluxUser: BluxUser;\n events: EventRequest[];\n }) {\n try {\n await collectEvent(\n this.api,\n {\n blux_user_id: bluxUser.id,\n application_id: bluxUser.applicationId,\n },\n {\n events,\n },\n this.generateApiHeader(bluxUser),\n );\n } catch (error) {\n Logger.error(error, { tags: { from: \"request-events-api\" } });\n }\n }\n\n private async handleInappEvent(bluxUser: BluxUser) {\n try {\n const { data } = await inappsDispatch(\n this.api,\n {\n application_id: bluxUser.applicationId,\n },\n {\n blux_user_id: bluxUser.id,\n device_id: bluxUser.deviceId ?? \"\",\n platform: this.sdkInfo.type,\n },\n this.generateApiHeader(bluxUser),\n );\n\n this.inappPollDelay$.next(data.nextPollDelay);\n this.inappQueue$.next(data);\n } catch (error) {\n Logger.error(error, { tags: { from: \"request-inapps-api\" } });\n }\n }\n\n private async displayInapp(inapp: InappMessageResponse) {\n return new Promise((resolve) => {\n if (!inapp.shouldDisplay) return resolve(true);\n\n const bluxUser = this.bluxUser$.getValue();\n\n const hideTimestamp = LocalStorage.getInappHideTimestamp(inapp.inappId);\n const isShouldSkip =\n hideTimestamp !== null && dayjs().isBefore(dayjs(hideTimestamp));\n\n if (isShouldSkip) return resolve(true);\n\n const iframeElement = document.createElement(\"iframe\");\n\n const params = new URLSearchParams({\n inapp_id: inapp.inappId,\n application_id: this.bluxApplicationId,\n stage: \"prod\",\n });\n\n iframeElement.src = `${inapp.baseUrl}?${params.toString()}`;\n iframeElement.style.position = \"fixed\";\n iframeElement.style.width = `${window.innerWidth}px`;\n iframeElement.style.height = `${window.innerHeight}px`;\n iframeElement.style.top = \"0\";\n iframeElement.style.left = \"0\";\n\n iframeElement.style.zIndex = \"9999\";\n iframeElement.id = `blux-inapp-${inapp.inappId}`;\n\n document.body.appendChild(iframeElement);\n\n const handleViewportChange = () => {\n const width = window.visualViewport?.width ?? window.innerWidth;\n const height = window.visualViewport?.height ?? window.innerHeight;\n const left = window.visualViewport?.offsetLeft ?? 0;\n const top = window.visualViewport?.offsetTop ?? 0;\n\n iframeElement.style.width = `${width}px`;\n iframeElement.style.height = `${height}px`;\n iframeElement.style.left = `${left}px`;\n iframeElement.style.top = `${top}px`;\n };\n\n const handleMessage = (\n event: MessageEvent<\n | {\n action: \"hide\";\n data: {\n days_to_hide: number;\n };\n }\n | {\n action: \"link\";\n data:\n | {\n is_blux_landing: false;\n url: string;\n }\n | {\n is_blux_landing: true;\n landing_id: string;\n };\n }\n >,\n ) => {\n if (event.origin !== new URL(inapp.baseUrl).origin) return;\n const message = event.data;\n\n if (message.action === \"hide\") {\n const { days_to_hide } = message.data;\n if (days_to_hide !== 0) {\n const expiresAt = dayjs().add(days_to_hide, \"days\").valueOf();\n LocalStorage.setInappHideTimestamp(inapp.inappId, expiresAt);\n }\n } else if (message.action === \"link\") {\n if (bluxUser) {\n createCrmEvent(\n this.api,\n {\n application_id: this.bluxApplicationId,\n },\n {\n notification_id: inapp.notificationId,\n crm_event_type: \"inapp_opened\",\n captured_at: new Date().toISOString(),\n },\n this.generateApiHeader(bluxUser),\n );\n }\n\n if (message.data.is_blux_landing) {\n // TODO: @all 스키마상에는 개인화 랜딩이 존재하나, 콘솔에는 필드가 없음 -> 추후 이에 따른 핸들링이 필요함\n } else {\n window.open(message.data.url, \"_blank\");\n }\n }\n\n iframeElement.remove();\n window.removeEventListener(\"message\", handleMessage);\n window.visualViewport?.removeEventListener(\n \"resize\",\n handleViewportChange,\n );\n window.visualViewport?.removeEventListener(\n \"scroll\",\n handleViewportChange,\n );\n resolve(inapp.inappId);\n };\n\n window.visualViewport?.addEventListener(\"resize\", handleViewportChange);\n window.visualViewport?.addEventListener(\"scroll\", handleViewportChange);\n window.addEventListener(\"message\", handleMessage);\n\n if (bluxUser) {\n notificationsUpdate(\n this.api,\n {\n application_id: this.bluxApplicationId,\n notification_id: inapp.notificationId,\n },\n {\n status: \"received\",\n },\n this.generateApiHeader(bluxUser),\n );\n }\n });\n }\n\n private async init() {\n if (this.bridge) {\n this.bridge.initialize({\n bluxApplicationId: this.bluxApplicationId,\n bluxAPIKey: this.bluxAPIKey,\n });\n return;\n }\n\n const blux_user_id = new URLSearchParams(window.location.search).get(\n \"blux_user_id\",\n );\n\n const isBluxUserIdExistInSessionStorage = SessionStorage.getBluxUserId();\n if (!isBluxUserIdExistInSessionStorage) this.sendEvent(new VisitEvent({}));\n\n Logger.debug(`Init with application id: ${this.bluxApplicationId}`);\n\n const deviceId = LocalStorage.getDeviceId();\n\n if (!deviceId) {\n Logger.debug(\"No saved Device ID, register a new one.\");\n }\n\n this.handleUrlAndRef();\n\n // handle page visit event\n this.urlAndRef$.pipe(filterNullable()).subscribe(() => {\n this.sendEvent(new AddPageVisitEvent({}));\n });\n\n this.registerHitTracker();\n\n // 페이지 이동 시 추천 지표 수집 관련 변수 초기화\n this.urlAndRef$.pipe(filterNullable()).subscribe(() => {\n this.impressedElements = [];\n });\n\n this.registerImpressionTracker();\n new MutationObserver(() => {\n this.registerImpressionTracker();\n }).observe(document, { subtree: true, childList: true });\n\n // 500ms 연속으로 엘리먼트 들어있으면 추천 지표 수집\n const MIN_IMPRESSION_TIME = 500;\n this.intersectionEntry$\n .pipe(\n groupBy((entry) => entry.target),\n mergeMap((group$) =>\n group$.pipe(\n debounceTime(MIN_IMPRESSION_TIME),\n filter((entry) => entry.isIntersecting),\n ),\n ),\n )\n .subscribe((entry) => {\n const trackingId = entry.target.getAttribute(\n BLUX_ATTRIBUTES.tracking_id,\n );\n if (!trackingId) {\n Logger.warning(\n `Tracking ID is not found in the parent elements. Please check the tracking ID(${BLUX_ATTRIBUTES.tracking_id}) is set correctly.`,\n );\n return;\n }\n if (this.impressedElements.includes(entry.target)) return;\n\n this.sendEvent(\n new AddSectionViewEvent({\n section: trackingId,\n tracking: {\n id: trackingId,\n type: \"impression\",\n },\n }),\n );\n this.impressedElements.push(entry.target);\n });\n\n const { data } = await initialize(\n this.api,\n { application_id: this.bluxApplicationId },\n {\n isVisitHandlingInSdk: true,\n device_id: deviceId ?? undefined,\n country_code: navigator.language.split(\"-\")[1],\n device_model: navigator.userAgent,\n language_code: navigator.language.split(\"-\")[0],\n platform: DevicePlatform.browser,\n os_version: navigator.userAgent,\n sdk_version: this.sdkInfo.version,\n sdk_type: this.sdkInfo.type,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n blux_user_id: blux_user_id ?? undefined,\n },\n this.generateApiHeader({\n bluxAPIKey: this.bluxAPIKey,\n }),\n );\n\n if (data.device_id) LocalStorage.setDeviceId(data.device_id);\n\n this.bluxUser$.next({\n id: data.blux_user_id,\n bluxAPIKey: this.bluxAPIKey,\n applicationId: this.bluxApplicationId,\n deviceId: data.device_id,\n });\n }\n\n public setLogLevel(logLevel: LogLevel) {\n Logger.setLevel(logLevel);\n }\n\n private async getBluxUserWithTimeout() {\n const bluxUser = await firstValueFrom(\n this.bluxUser$.pipe(\n filterNullable(),\n timeout(5000),\n catchError((error) => {\n return throwError(() =>\n error.name === \"TimeoutError\"\n ? new Error(\n \"Application ID is not initialized. Please initialize BluxClient.\",\n )\n : error,\n );\n }),\n ),\n );\n\n return bluxUser;\n }\n\n public async signIn({ userId }: { userId: string }) {\n if (this.bridge) {\n this.bridge.signIn({ userId });\n return;\n }\n\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n\n const {\n data: { blux_user_id: bluxIdInResponse },\n } = await signIn(\n this.api,\n { application_id: bluxUser.applicationId, blux_user_id: bluxUser.id },\n { user_id: userId, device_id: bluxUser.deviceId },\n this.generateApiHeader(bluxUser),\n );\n\n if (bluxIdInResponse !== bluxUser.id) {\n Logger.debug(\"Blux id is changed in signIn.\");\n this.bluxUser$.next({\n ...bluxUser,\n id: bluxIdInResponse,\n });\n }\n } catch (error) {\n Logger.error(error, { tags: { from: \"signIn\" } });\n }\n }\n\n public async signOut() {\n if (this.bridge) {\n this.bridge.signOut();\n return;\n }\n\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n\n const {\n data: { blux_user_id: bluxIdInResponse },\n } = await signOut(\n this.api,\n { application_id: bluxUser.applicationId, blux_user_id: bluxUser.id },\n { device_id: bluxUser.deviceId },\n this.generateApiHeader(bluxUser),\n );\n\n Logger.debug(\"Blux id is changed in signOut.\");\n this.bluxUser$.next({\n ...bluxUser,\n id: bluxIdInResponse,\n });\n } catch (error) {\n Logger.error(error, { tags: { from: \"signOut\" } });\n }\n }\n\n public async setUserProperties({\n userProperties,\n }: {\n userProperties: {\n phone_number?: string;\n email_address?: string;\n marketing_notification_consent?: boolean;\n nighttime_notification_consent?: boolean;\n marketing_notification_sms_consent?: boolean;\n marketing_notification_email_consent?: boolean;\n marketing_notification_push_consent?: boolean;\n marketing_notification_kakao_consent?: boolean;\n };\n }) {\n if (this.bridge) {\n this.bridge.setUserProperties(userProperties);\n return;\n }\n\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n\n await updateUserProperties(\n this.api,\n { application_id: bluxUser.applicationId, blux_user_id: bluxUser.id },\n { properties: userProperties },\n this.generateApiHeader(bluxUser),\n );\n } catch (error) {\n Logger.error(error, { tags: { from: \"setUserProperties\" } });\n }\n }\n\n public async setCustomUserProperties({\n customUserProperties,\n }: {\n customUserProperties: Record<string, string | boolean | number | null>;\n }) {\n if (this.bridge) {\n this.bridge.setCustomUserProperties(customUserProperties);\n return;\n }\n\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n\n await updateCustomUserProperties(\n this.api,\n { application_id: bluxUser.applicationId, blux_user_id: bluxUser.id },\n { properties: customUserProperties },\n this.generateApiHeader(bluxUser),\n );\n } catch (error) {\n Logger.error(error, { tags: { from: \"setCustomUserProperties\" } });\n }\n }\n\n public sendEvent(event: BluxEvent | BluxEvent[]) {\n const requests = (Array.isArray(event) ? event : [event]).map(\n (e) => e.request,\n );\n\n if (this.bridge) {\n this.bridge.sendEvent({ requests });\n return;\n }\n\n this.requestQueue$.next([\n ...this.requestQueue$.value,\n ...requests.filter(\n (request) =>\n !this.requestQueue$.value.map((r) => r.id).includes(request.id),\n ),\n ]);\n }\n\n private urlAndRef$ = new BehaviorSubject<\n { url: string; ref: string | undefined } | undefined\n >(undefined);\n\n private handleUrlAndRef() {\n // set url and ref to local storage\n this.urlAndRef$.pipe(filterNullable()).subscribe(({ url, ref }) => {\n if (ref) {\n LocalStorage.setRef(ref);\n }\n LocalStorage.setUrl(url);\n });\n // init url and ref from local storage\n this.urlAndRef$.next({\n url: window.location.href,\n ref: LocalStorage.getUrl() ?? undefined,\n });\n // observe url and ref change\n new MutationObserver(() => {\n const prevUrl = this.urlAndRef$.value?.url;\n const currentUrl = window.location.href;\n if (prevUrl !== currentUrl) {\n this.urlAndRef$.next({\n url: currentUrl,\n ref: prevUrl ?? undefined,\n });\n }\n }).observe(document, { subtree: true, childList: true });\n }\n\n private registerImpressionTracker() {\n const targetElements = Array.from(\n document.querySelectorAll(`[${BLUX_ATTRIBUTES.tracking_id}]`),\n );\n\n const removed = this.intersectionObservingElements.filter(\n (e) => !targetElements.includes(e),\n );\n\n removed.forEach((e) => {\n this.intersectionObserver.unobserve(e);\n });\n\n const added = targetElements.filter(\n (element) => !this.intersectionObservingElements.includes(element),\n );\n\n added.forEach((element) => {\n this.intersectionObserver.observe(element);\n });\n\n this.intersectionObservingElements = targetElements;\n }\n\n private registerHitTracker() {\n const handleDelegatedClick = (event: Event) => {\n if (!(event.target instanceof Element)) return;\n\n const eventTarget = event.target;\n\n const targetItemElement = eventTarget.closest(\n `[${BLUX_ATTRIBUTES.item_id}]`,\n );\n if (!targetItemElement) return;\n\n const itemId = targetItemElement.getAttribute(BLUX_ATTRIBUTES.item_id);\n if (!itemId) return;\n\n const targetSectionElement = eventTarget.closest(\n `[${BLUX_ATTRIBUTES.tracking_id}]`,\n );\n const trackingId = targetSectionElement?.getAttribute(\n BLUX_ATTRIBUTES.tracking_id,\n );\n if (!trackingId) {\n Logger.warning(\n `Tracking ID is not found in the parent elements. Please check the tracking ID(${BLUX_ATTRIBUTES.tracking_id}) is set correctly.`,\n );\n return;\n }\n\n if (!this.hitElements.includes(targetItemElement)) {\n this.sendEvent(\n new AddClickEvent({\n itemId,\n tracking: {\n id: trackingId,\n type: \"hit\",\n },\n }),\n );\n this.hitElements.push(targetItemElement);\n }\n };\n document.addEventListener(\"click\", handleDelegatedClick);\n this.urlAndRef$.pipe(filterNullable()).subscribe(() => {\n this.hitElements = [];\n });\n }\n\n public async getUserRec(\n rec: UserRec,\n ): Promise<APIs.bluxUsersGetItemRecommendationsV2.ResponseData> {\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n const recRequest = rec.request;\n\n const recommendationResponse = await getItemRecommendations(\n this.api,\n {\n application_id: bluxUser.applicationId,\n blux_user_id: bluxUser.id,\n },\n {\n call_type: recRequest.call_type,\n limit: recRequest.limit,\n offset: recRequest.offset,\n },\n this.generateApiHeader(bluxUser),\n );\n\n return recommendationResponse.data;\n } catch (error) {\n Logger.error(error, { tags: { from: \"getItemRecommendations\" } });\n return {\n item_ids: [],\n metadata: {},\n recommendation_id: null,\n };\n }\n }\n\n public async getItemRec(\n rec: ItemRec,\n ): Promise<APIs.bluxUsersGetItemRecommendationsV2.ResponseData> {\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n const recRequest = rec.request;\n\n const recommendationResponse = await getItemRecommendations(\n this.api,\n {\n application_id: bluxUser.applicationId,\n blux_user_id: bluxUser.id,\n },\n {\n call_type: recRequest.call_type,\n limit: recRequest.limit,\n offset: recRequest.offset,\n item_id: recRequest.item_id,\n },\n this.generateApiHeader(bluxUser),\n );\n\n return recommendationResponse.data;\n } catch (error) {\n Logger.error(error, { tags: { from: \"getItemRecommendations\" } });\n return {\n item_ids: [],\n metadata: {},\n recommendation_id: null,\n };\n }\n }\n\n public async getItemsRec(\n rec: ItemsRec,\n ): Promise<APIs.bluxUsersGetItemRecommendationsV2.ResponseData> {\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n const recRequest = rec.request;\n\n const recommendationResponse = await getItemRecommendations(\n this.api,\n {\n application_id: bluxUser.applicationId,\n blux_user_id: bluxUser.id,\n },\n {\n call_type: recRequest.call_type,\n limit: recRequest.limit,\n offset: recRequest.offset,\n item_ids: recRequest.item_ids,\n },\n this.generateApiHeader(bluxUser),\n );\n\n return recommendationResponse.data;\n } catch (error) {\n Logger.error(error, { tags: { from: \"getItemRecommendations\" } });\n return {\n item_ids: [],\n metadata: {},\n recommendation_id: null,\n };\n }\n }\n\n public async getCategoryRec(\n rec: CategoryRec,\n ): Promise<APIs.bluxUsersGetItemRecommendationsV2.ResponseData> {\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n const recRequest = rec.request;\n\n const recommendationResponse = await getItemRecommendations(\n this.api,\n {\n application_id: bluxUser.applicationId,\n blux_user_id: bluxUser.id,\n },\n {\n call_type: recRequest.call_type,\n limit: recRequest.limit,\n offset: recRequest.offset,\n category_id: recRequest.category_id,\n },\n this.generateApiHeader(bluxUser),\n );\n\n return recommendationResponse.data;\n } catch (error) {\n Logger.error(error, { tags: { from: \"getItemRecommendations\" } });\n return {\n item_ids: [],\n metadata: {},\n recommendation_id: null,\n };\n }\n }\n}\n"]}
@@ -637,5 +637,30 @@ export declare namespace APIs {
637
637
  nextPollDelay: number;
638
638
  };
639
639
  }
640
+ namespace notificationsUpdate {
641
+ const name = "notificationsUpdate";
642
+ const path = "/applications/{application_id}/notifications/{notification_id}";
643
+ const method = HttpMethod.POST;
644
+ const pathSchema: z.ZodObject<{
645
+ application_id: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("bson-objectid").default, string>;
646
+ notification_id: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("bson-objectid").default, string>;
647
+ }, "strip", z.ZodTypeAny, {
648
+ application_id: import("bson-objectid").default;
649
+ notification_id: import("bson-objectid").default;
650
+ }, {
651
+ application_id: string;
652
+ notification_id: string;
653
+ }>;
654
+ type PathParam = Serialize<z.input<typeof pathSchema>>;
655
+ const bodySchema: z.ZodObject<{
656
+ status: z.ZodLiteral<"received">;
657
+ }, "strip", z.ZodTypeAny, {
658
+ status: "received";
659
+ }, {
660
+ status: "received";
661
+ }>;
662
+ type Body = Serialize<z.input<typeof bodySchema>>;
663
+ type ResponseData = boolean;
664
+ }
640
665
  }
641
666
  export {};
@@ -174,5 +174,18 @@ export var APIs;
174
174
  ]),
175
175
  });
176
176
  })(inappsDispatcher = APIs.inappsDispatcher || (APIs.inappsDispatcher = {}));
177
+ let notificationsUpdate;
178
+ (function (notificationsUpdate) {
179
+ notificationsUpdate.name = "notificationsUpdate";
180
+ notificationsUpdate.path = `${applicationsRoot}/notifications/{notification_id}`;
181
+ notificationsUpdate.method = HttpMethod.POST;
182
+ notificationsUpdate.pathSchema = z.object({
183
+ application_id: objectIdSchema,
184
+ notification_id: objectIdSchema,
185
+ });
186
+ notificationsUpdate.bodySchema = z.object({
187
+ status: z.literal("received"),
188
+ });
189
+ })(notificationsUpdate = APIs.notificationsUpdate || (APIs.notificationsUpdate = {}));
177
190
  })(APIs || (APIs = {}));
178
191
  //# sourceMappingURL=APIs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"APIs.js","sourceRoot":"/","sources":["src/apis/APIs.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-namespace */\nimport { z } from \"zod\";\n\nimport {\n countryCodeWithLowerCaseSchema,\n customPropertiesRequestSchema,\n customPropertiesSchema,\n dateSchema,\n eventPropertiesSchema,\n internalEventPropertiesSchema,\n objectIdSchema,\n recommendationRequestSchema,\n} from \"../utils/zodSchemas\";\n\nimport type { Serialize } from \"../utils/Base\";\nimport type { RecResponse } from \"../utils/zodSchemas\";\n\nenum HttpMethod {\n GET = \"get\",\n POST = \"post\",\n PUT = \"put\",\n DELETE = \"delete\",\n}\n\nexport enum DevicePlatform {\n ios = \"ios\",\n android = \"android\",\n browser = \"browser\",\n}\n\nconst applicationsRoot = \"/applications/{application_id}\";\nconst applicationsRootV2 = \"/v2/applications/{application_id}\";\n\nexport namespace APIs {\n export namespace bluxUsersInitialize {\n export const name = \"bluxUsersInitialize\";\n export const path = `${applicationsRoot}/blux-users/initialize`;\n export const method = HttpMethod.POST;\n\n export const bodySchema = z.object({\n device_id: objectIdSchema.optional(),\n country_code: countryCodeWithLowerCaseSchema.optional(),\n device_model: z.string(),\n language_code: z.string(),\n os_version: z.string(),\n platform: z.nativeEnum(DevicePlatform),\n sdk_type: z.string(),\n sdk_version: z.string(),\n timezone: z.string(),\n isVisitHandlingInSdk: z.boolean().default(false), // sdk 업데이트 후 삭제\n blux_user_id: z.string().optional(),\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export const pathSchema = z.object({\n application_id: z.string().optional(),\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export type ResponseData = {\n blux_user_id: string;\n device_id?: string;\n };\n }\n\n export namespace bluxUsersSignIn {\n export const name = \"bluxUsersSignIn\";\n export const path = `${applicationsRoot}/blux-users/{blux_user_id}/sign-in`;\n export const method = HttpMethod.PUT;\n\n export const bodySchema = z.object({\n user_id: z.string(),\n device_id: z.string().optional(), // TODO: @all sdk update 후 필수로 변경\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export const pathSchema = z.object({\n application_id: z.string().optional(),\n blux_user_id: objectIdSchema,\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export type ResponseData = {\n blux_user_id: string;\n };\n }\n\n export namespace bluxUsersSignOut {\n export const name = \"bluxUsersSignOut\";\n export const path = `${applicationsRoot}/blux-users/{blux_user_id}/sign-out`;\n export const method = HttpMethod.PUT;\n\n export const bodySchema = z.object({\n device_id: objectIdSchema.optional(),\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export const pathSchema = z.object({\n application_id: z.string().optional(), // TODO: @all objectIdSchema 로 변경\n blux_user_id: objectIdSchema,\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export type ResponseData = {\n blux_user_id: string;\n };\n }\n\n export namespace bluxUsersCollectEvents {\n export const name = \"bluxUsersCollectEvents\";\n export const path = `${applicationsRoot}/blux-users/{blux_user_id}/collect-events`;\n export const method = HttpMethod.POST;\n export const pathSchema = z.object({\n application_id: objectIdSchema,\n blux_user_id: objectIdSchema,\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export const bodySchema = z.object({\n events: z.array(\n z.object({\n device_id: objectIdSchema.optional(),\n event_type: z.string(),\n event_properties: eventPropertiesSchema.optional(),\n custom_event_properties: customPropertiesSchema.optional(),\n internal_event_properties: internalEventPropertiesSchema.optional(),\n captured_at: dateSchema,\n }),\n ),\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export type ResponseData = boolean;\n }\n\n export namespace bluxUsersUpdateUserProperties {\n export const name = \"bluxUsersUpdateUserProperties\";\n export const path = `${applicationsRoot}/blux-users/{blux_user_id}/update-user-properties`;\n export const method = HttpMethod.PUT;\n\n export const bodySchema = z.object({\n properties: z.object({\n phone_number: z.string().nullable().optional(),\n email_address: z.string().nullable().optional(),\n nighttime_notification_consent: z.boolean().nullable().optional(),\n marketing_notification_consent: z.boolean().nullable().optional(),\n\n // TODO: @luna 김캐디 연동 수정 이후 삭제\n sms_consent: z.boolean().nullable().optional(),\n email_consent: z.boolean().nullable().optional(),\n\n marketing_notification_sms_consent: z.boolean().nullable().optional(),\n marketing_notification_email_consent: z.boolean().nullable().optional(),\n marketing_notification_kakao_consent: z.boolean().nullable().optional(),\n marketing_notification_push_consent: z.boolean().nullable().optional(),\n }),\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export const pathSchema = z.object({\n application_id: z.string().optional(),\n blux_user_id: objectIdSchema,\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export type ResponseData = {\n blux_user_id: string;\n };\n }\n\n export namespace bluxUsersUpdateCustomUserProperties {\n export const name = \"bluxUsersUpdateCustomUserProperties\";\n export const path = `${applicationsRoot}/blux-users/{blux_user_id}/update-custom-user-properties`;\n export const method = HttpMethod.PUT;\n\n export const bodySchema = z.object({\n properties: customPropertiesRequestSchema,\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export const pathSchema = z.object({\n application_id: z.string().optional(),\n blux_user_id: objectIdSchema,\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export type ResponseData = {\n blux_user_id: string;\n };\n }\n\n export namespace bluxUsersGetItemRecommendationsV2 {\n export const name = \"bluxUsersGetItemRecommendationsV2\";\n export const path = `${applicationsRootV2}/blux-users/{blux_user_id}/item-recommendations`;\n export const method = HttpMethod.POST;\n\n export const bodySchema = recommendationRequestSchema;\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export const pathSchema = z.object({\n application_id: objectIdSchema,\n blux_user_id: objectIdSchema,\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export type ResponseData = RecResponse;\n }\n\n export namespace crmEventsCreate {\n export const name = \"crmEventsCreate\";\n export const path = `${applicationsRoot}/crm-events`;\n export const method = HttpMethod.POST;\n\n export const bodySchema = z.object({\n notification_id: objectIdSchema,\n crm_event_type: z.union([\n z.literal(\"push_opened\"),\n z.literal(\"button_clicked\"),\n z.literal(\"landing_clicked\"),\n z.literal(\"inapp_opened\"),\n ]),\n captured_at: dateSchema,\n item_id: z.string().optional(),\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export const pathSchema = z.object({\n application_id: z.string(),\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export type ResponseData = boolean;\n }\n export namespace inappsDispatcher {\n export const name = \"inappsDispatcher\";\n export const path = `${applicationsRoot}/inapps/dispatch`;\n export const method = HttpMethod.POST;\n\n export const pathSchema = z.object({\n application_id: objectIdSchema,\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export const bodySchema = z.object({\n blux_user_id: objectIdSchema,\n device_id: objectIdSchema,\n platform: z.union([\n z.literal(DevicePlatform.android),\n z.literal(DevicePlatform.ios),\n z.literal(DevicePlatform.browser),\n ]),\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export type ResponseData =\n | ({\n notificationId: string;\n inappId: string;\n htmlString: string;\n baseUrl: string;\n } & { shouldDisplay: true; nextPollDelay: number })\n | {\n shouldDisplay: false;\n nextPollDelay: number;\n };\n }\n}\n"]}
1
+ {"version":3,"file":"APIs.js","sourceRoot":"/","sources":["src/apis/APIs.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-namespace */\nimport { z } from \"zod\";\n\nimport {\n countryCodeWithLowerCaseSchema,\n customPropertiesRequestSchema,\n customPropertiesSchema,\n dateSchema,\n eventPropertiesSchema,\n internalEventPropertiesSchema,\n objectIdSchema,\n recommendationRequestSchema,\n} from \"../utils/zodSchemas\";\n\nimport type { Serialize } from \"../utils/Base\";\nimport type { RecResponse } from \"../utils/zodSchemas\";\n\nenum HttpMethod {\n GET = \"get\",\n POST = \"post\",\n PUT = \"put\",\n DELETE = \"delete\",\n}\n\nexport enum DevicePlatform {\n ios = \"ios\",\n android = \"android\",\n browser = \"browser\",\n}\n\nconst applicationsRoot = \"/applications/{application_id}\";\nconst applicationsRootV2 = \"/v2/applications/{application_id}\";\n\nexport namespace APIs {\n export namespace bluxUsersInitialize {\n export const name = \"bluxUsersInitialize\";\n export const path = `${applicationsRoot}/blux-users/initialize`;\n export const method = HttpMethod.POST;\n\n export const bodySchema = z.object({\n device_id: objectIdSchema.optional(),\n country_code: countryCodeWithLowerCaseSchema.optional(),\n device_model: z.string(),\n language_code: z.string(),\n os_version: z.string(),\n platform: z.nativeEnum(DevicePlatform),\n sdk_type: z.string(),\n sdk_version: z.string(),\n timezone: z.string(),\n isVisitHandlingInSdk: z.boolean().default(false), // sdk 업데이트 후 삭제\n blux_user_id: z.string().optional(),\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export const pathSchema = z.object({\n application_id: z.string().optional(),\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export type ResponseData = {\n blux_user_id: string;\n device_id?: string;\n };\n }\n\n export namespace bluxUsersSignIn {\n export const name = \"bluxUsersSignIn\";\n export const path = `${applicationsRoot}/blux-users/{blux_user_id}/sign-in`;\n export const method = HttpMethod.PUT;\n\n export const bodySchema = z.object({\n user_id: z.string(),\n device_id: z.string().optional(), // TODO: @all sdk update 후 필수로 변경\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export const pathSchema = z.object({\n application_id: z.string().optional(),\n blux_user_id: objectIdSchema,\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export type ResponseData = {\n blux_user_id: string;\n };\n }\n\n export namespace bluxUsersSignOut {\n export const name = \"bluxUsersSignOut\";\n export const path = `${applicationsRoot}/blux-users/{blux_user_id}/sign-out`;\n export const method = HttpMethod.PUT;\n\n export const bodySchema = z.object({\n device_id: objectIdSchema.optional(),\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export const pathSchema = z.object({\n application_id: z.string().optional(), // TODO: @all objectIdSchema 로 변경\n blux_user_id: objectIdSchema,\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export type ResponseData = {\n blux_user_id: string;\n };\n }\n\n export namespace bluxUsersCollectEvents {\n export const name = \"bluxUsersCollectEvents\";\n export const path = `${applicationsRoot}/blux-users/{blux_user_id}/collect-events`;\n export const method = HttpMethod.POST;\n export const pathSchema = z.object({\n application_id: objectIdSchema,\n blux_user_id: objectIdSchema,\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export const bodySchema = z.object({\n events: z.array(\n z.object({\n device_id: objectIdSchema.optional(),\n event_type: z.string(),\n event_properties: eventPropertiesSchema.optional(),\n custom_event_properties: customPropertiesSchema.optional(),\n internal_event_properties: internalEventPropertiesSchema.optional(),\n captured_at: dateSchema,\n }),\n ),\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export type ResponseData = boolean;\n }\n\n export namespace bluxUsersUpdateUserProperties {\n export const name = \"bluxUsersUpdateUserProperties\";\n export const path = `${applicationsRoot}/blux-users/{blux_user_id}/update-user-properties`;\n export const method = HttpMethod.PUT;\n\n export const bodySchema = z.object({\n properties: z.object({\n phone_number: z.string().nullable().optional(),\n email_address: z.string().nullable().optional(),\n nighttime_notification_consent: z.boolean().nullable().optional(),\n marketing_notification_consent: z.boolean().nullable().optional(),\n\n // TODO: @luna 김캐디 연동 수정 이후 삭제\n sms_consent: z.boolean().nullable().optional(),\n email_consent: z.boolean().nullable().optional(),\n\n marketing_notification_sms_consent: z.boolean().nullable().optional(),\n marketing_notification_email_consent: z.boolean().nullable().optional(),\n marketing_notification_kakao_consent: z.boolean().nullable().optional(),\n marketing_notification_push_consent: z.boolean().nullable().optional(),\n }),\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export const pathSchema = z.object({\n application_id: z.string().optional(),\n blux_user_id: objectIdSchema,\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export type ResponseData = {\n blux_user_id: string;\n };\n }\n\n export namespace bluxUsersUpdateCustomUserProperties {\n export const name = \"bluxUsersUpdateCustomUserProperties\";\n export const path = `${applicationsRoot}/blux-users/{blux_user_id}/update-custom-user-properties`;\n export const method = HttpMethod.PUT;\n\n export const bodySchema = z.object({\n properties: customPropertiesRequestSchema,\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export const pathSchema = z.object({\n application_id: z.string().optional(),\n blux_user_id: objectIdSchema,\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export type ResponseData = {\n blux_user_id: string;\n };\n }\n\n export namespace bluxUsersGetItemRecommendationsV2 {\n export const name = \"bluxUsersGetItemRecommendationsV2\";\n export const path = `${applicationsRootV2}/blux-users/{blux_user_id}/item-recommendations`;\n export const method = HttpMethod.POST;\n\n export const bodySchema = recommendationRequestSchema;\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export const pathSchema = z.object({\n application_id: objectIdSchema,\n blux_user_id: objectIdSchema,\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export type ResponseData = RecResponse;\n }\n\n export namespace crmEventsCreate {\n export const name = \"crmEventsCreate\";\n export const path = `${applicationsRoot}/crm-events`;\n export const method = HttpMethod.POST;\n\n export const bodySchema = z.object({\n notification_id: objectIdSchema,\n crm_event_type: z.union([\n z.literal(\"push_opened\"),\n z.literal(\"button_clicked\"),\n z.literal(\"landing_clicked\"),\n z.literal(\"inapp_opened\"),\n ]),\n captured_at: dateSchema,\n item_id: z.string().optional(),\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export const pathSchema = z.object({\n application_id: z.string(),\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export type ResponseData = boolean;\n }\n export namespace inappsDispatcher {\n export const name = \"inappsDispatcher\";\n export const path = `${applicationsRoot}/inapps/dispatch`;\n export const method = HttpMethod.POST;\n\n export const pathSchema = z.object({\n application_id: objectIdSchema,\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export const bodySchema = z.object({\n blux_user_id: objectIdSchema,\n device_id: objectIdSchema,\n platform: z.union([\n z.literal(DevicePlatform.android),\n z.literal(DevicePlatform.ios),\n z.literal(DevicePlatform.browser),\n ]),\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n\n export type ResponseData =\n | ({\n notificationId: string;\n inappId: string;\n htmlString: string;\n baseUrl: string;\n } & { shouldDisplay: true; nextPollDelay: number })\n | {\n shouldDisplay: false;\n nextPollDelay: number;\n };\n }\n\n export namespace notificationsUpdate {\n export const name = \"notificationsUpdate\";\n export const path = `${applicationsRoot}/notifications/{notification_id}`;\n export const method = HttpMethod.POST;\n\n export const pathSchema = z.object({\n application_id: objectIdSchema,\n notification_id: objectIdSchema,\n });\n export type PathParam = Serialize<z.input<typeof pathSchema>>;\n\n export const bodySchema = z.object({\n status: z.literal(\"received\"),\n });\n export type Body = Serialize<z.input<typeof bodySchema>>;\n export type ResponseData = boolean;\n }\n}\n"]}