@blux.ai/web-sdk 2.1.4-dev4 → 2.2.1
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 +1 -1
- package/dist/src/BluxClient.d.ts +13 -5
- package/dist/src/BluxClient.js +58 -56
- package/dist/src/BluxClient.js.map +1 -1
- package/dist/src/apis/APIs.d.ts +25 -0
- package/dist/src/apis/APIs.js +13 -0
- package/dist/src/apis/APIs.js.map +1 -1
- package/dist/src/apis/notificationsUpdate.d.ts +4 -0
- package/dist/src/apis/notificationsUpdate.js +7 -0
- package/dist/src/apis/notificationsUpdate.js.map +1 -0
- package/dist/src/bridges/Bridge.d.ts +30 -0
- package/dist/src/bridges/Bridge.js +11 -0
- package/dist/src/bridges/Bridge.js.map +1 -0
- package/dist/src/bridges/FlutterBridge.d.ts +11 -0
- package/dist/src/bridges/FlutterBridge.js +45 -0
- package/dist/src/bridges/FlutterBridge.js.map +1 -0
- package/dist/src/bridges/RNBridge.d.ts +11 -0
- package/dist/src/bridges/RNBridge.js +39 -0
- package/dist/src/bridges/RNBridge.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/package.json
CHANGED
package/dist/src/BluxClient.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
34
|
-
constructor({ bluxApplicationId, bluxAPIKey,
|
|
42
|
+
private resolveBridge;
|
|
43
|
+
constructor({ bluxApplicationId, bluxAPIKey, ...bridgeOptions }: {
|
|
35
44
|
bluxApplicationId: string;
|
|
36
45
|
bluxAPIKey: string;
|
|
37
|
-
|
|
38
|
-
}, completionCallback?: (args: {
|
|
46
|
+
} & BridgeOptions, completionCallback?: (args: {
|
|
39
47
|
errorMessage?: string;
|
|
40
48
|
success: boolean;
|
|
41
49
|
}) => void);
|
package/dist/src/BluxClient.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import axios from "axios";
|
|
2
2
|
// eslint-disable-next-line no-restricted-imports
|
|
3
3
|
import dayjs from "dayjs";
|
|
4
|
-
import { asyncScheduler, BehaviorSubject, catchError, combineLatest, concatMap, debounceTime, distinctUntilChanged, exhaustMap, filter, firstValueFrom, from, groupBy, map, mergeMap, NEVER, observeOn, Subject, switchMap, throwError, timeout, timer,
|
|
4
|
+
import { asyncScheduler, BehaviorSubject, catchError, combineLatest, concatMap, debounceTime, distinctUntilChanged, exhaustMap, filter, firstValueFrom, from, groupBy, map, mergeMap, NEVER, observeOn, Subject, switchMap, throwError, timeout, timer, } from "rxjs";
|
|
5
5
|
import packageJson from "../package.json";
|
|
6
6
|
import { DevicePlatform } from "./apis/APIs";
|
|
7
7
|
import { createCrmEvent } from "./apis/createCrmEvent";
|
|
@@ -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
|
-
|
|
38
|
+
bridge;
|
|
36
39
|
// Impression 관련 변수
|
|
37
40
|
impressedElements = [];
|
|
38
41
|
intersectionObservingElements = [];
|
|
@@ -44,36 +47,44 @@ export class BluxClient {
|
|
|
44
47
|
intersectionEntry$ = new Subject();
|
|
45
48
|
// Hit 관련 변수
|
|
46
49
|
hitElements = [];
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (!webView?.postMessage) {
|
|
51
|
-
try {
|
|
52
|
-
webView = window.top?.ReactNativeWebView;
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
webView = undefined;
|
|
56
|
-
}
|
|
50
|
+
resolveBridge(bridgeOptions) {
|
|
51
|
+
if ("useRNBridge" in bridgeOptions && bridgeOptions.useRNBridge) {
|
|
52
|
+
return new RNBridge();
|
|
57
53
|
}
|
|
58
|
-
if (
|
|
59
|
-
|
|
60
|
-
|
|
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
|
+
}
|
|
61
69
|
}
|
|
62
|
-
|
|
70
|
+
return null;
|
|
63
71
|
}
|
|
64
|
-
constructor({ bluxApplicationId, bluxAPIKey,
|
|
72
|
+
constructor({ bluxApplicationId, bluxAPIKey, ...bridgeOptions }, completionCallback) {
|
|
65
73
|
this.bluxApplicationId = bluxApplicationId;
|
|
66
74
|
this.bluxAPIKey = bluxAPIKey;
|
|
67
|
-
this.useRNBridge = useRNBridge;
|
|
68
75
|
const baseUrl = window?._BLUX_SDK_?.baseUrl ?? "https://api.blux.ai/prod";
|
|
69
76
|
this.api.defaults.baseURL = baseUrl;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
this.bridge = this.resolveBridge(bridgeOptions);
|
|
78
|
+
if (!this.bridge) {
|
|
79
|
+
combineLatest([
|
|
80
|
+
onlineAndVisible$.pipe(distinctUntilChanged()),
|
|
81
|
+
this.bluxUser$,
|
|
82
|
+
])
|
|
83
|
+
.pipe(switchMap(([isOnlineAndVisible, bluxUser]) => {
|
|
84
|
+
if (!isOnlineAndVisible || !bluxUser)
|
|
85
|
+
return NEVER;
|
|
86
|
+
return this.inappPollDelay$.pipe(distinctUntilChanged(), switchMap((delay) => timer(0, delay)), exhaustMap(() => this.handleInappEvent(bluxUser)));
|
|
87
|
+
}))
|
|
77
88
|
.subscribe();
|
|
78
89
|
}
|
|
79
90
|
combineLatest([this.requestQueue$, this.bluxUser$.pipe(filterNullable())])
|
|
@@ -146,6 +157,7 @@ export class BluxClient {
|
|
|
146
157
|
return new Promise((resolve) => {
|
|
147
158
|
if (!inapp.shouldDisplay)
|
|
148
159
|
return resolve(true);
|
|
160
|
+
const bluxUser = this.bluxUser$.getValue();
|
|
149
161
|
const hideTimestamp = LocalStorage.getInappHideTimestamp(inapp.inappId);
|
|
150
162
|
const isShouldSkip = hideTimestamp !== null && dayjs().isBefore(dayjs(hideTimestamp));
|
|
151
163
|
if (isShouldSkip)
|
|
@@ -187,7 +199,6 @@ export class BluxClient {
|
|
|
187
199
|
}
|
|
188
200
|
}
|
|
189
201
|
else if (message.action === "link") {
|
|
190
|
-
const bluxUser = this.bluxUser$.getValue();
|
|
191
202
|
if (bluxUser) {
|
|
192
203
|
createCrmEvent(this.api, {
|
|
193
204
|
application_id: this.bluxApplicationId,
|
|
@@ -201,13 +212,7 @@ export class BluxClient {
|
|
|
201
212
|
// TODO: @all 스키마상에는 개인화 랜딩이 존재하나, 콘솔에는 필드가 없음 -> 추후 이에 따른 핸들링이 필요함
|
|
202
213
|
}
|
|
203
214
|
else {
|
|
204
|
-
|
|
205
|
-
if (window.top) {
|
|
206
|
-
window.top.postMessage({
|
|
207
|
-
type: "blux_inapp_message",
|
|
208
|
-
url: message.data.url,
|
|
209
|
-
}, window.location.origin);
|
|
210
|
-
}
|
|
215
|
+
window.open(message.data.url, "_blank");
|
|
211
216
|
}
|
|
212
217
|
}
|
|
213
218
|
iframeElement.remove();
|
|
@@ -219,12 +224,19 @@ export class BluxClient {
|
|
|
219
224
|
window.visualViewport?.addEventListener("resize", handleViewportChange);
|
|
220
225
|
window.visualViewport?.addEventListener("scroll", handleViewportChange);
|
|
221
226
|
window.addEventListener("message", handleMessage);
|
|
227
|
+
if (bluxUser) {
|
|
228
|
+
notificationsUpdate(this.api, {
|
|
229
|
+
application_id: this.bluxApplicationId,
|
|
230
|
+
notification_id: inapp.notificationId,
|
|
231
|
+
}, {
|
|
232
|
+
status: "received",
|
|
233
|
+
}, this.generateApiHeader(bluxUser));
|
|
234
|
+
}
|
|
222
235
|
});
|
|
223
236
|
}
|
|
224
237
|
async init() {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
this.postMessageToRN("initialize", {
|
|
238
|
+
if (this.bridge) {
|
|
239
|
+
this.bridge.initialize({
|
|
228
240
|
bluxApplicationId: this.bluxApplicationId,
|
|
229
241
|
bluxAPIKey: this.bluxAPIKey,
|
|
230
242
|
});
|
|
@@ -310,12 +322,10 @@ export class BluxClient {
|
|
|
310
322
|
return bluxUser;
|
|
311
323
|
}
|
|
312
324
|
async signIn({ userId }) {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
this.postMessageToRN("signIn", { userId });
|
|
325
|
+
if (this.bridge) {
|
|
326
|
+
this.bridge.signIn({ userId });
|
|
316
327
|
return;
|
|
317
328
|
}
|
|
318
|
-
// React Native WebView가 아닌 경우 웹에서 직접 처리
|
|
319
329
|
try {
|
|
320
330
|
const bluxUser = await this.getBluxUserWithTimeout();
|
|
321
331
|
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));
|
|
@@ -332,12 +342,10 @@ export class BluxClient {
|
|
|
332
342
|
}
|
|
333
343
|
}
|
|
334
344
|
async signOut() {
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
this.postMessageToRN("signOut");
|
|
345
|
+
if (this.bridge) {
|
|
346
|
+
this.bridge.signOut();
|
|
338
347
|
return;
|
|
339
348
|
}
|
|
340
|
-
// React Native WebView가 아닌 경우 웹에서 직접 처리
|
|
341
349
|
try {
|
|
342
350
|
const bluxUser = await this.getBluxUserWithTimeout();
|
|
343
351
|
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));
|
|
@@ -352,12 +360,10 @@ export class BluxClient {
|
|
|
352
360
|
}
|
|
353
361
|
}
|
|
354
362
|
async setUserProperties({ userProperties, }) {
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
this.postMessageToRN("setUserProperties", { userProperties });
|
|
363
|
+
if (this.bridge) {
|
|
364
|
+
this.bridge.setUserProperties(userProperties);
|
|
358
365
|
return;
|
|
359
366
|
}
|
|
360
|
-
// React Native WebView가 아닌 경우 웹에서 직접 처리
|
|
361
367
|
try {
|
|
362
368
|
const bluxUser = await this.getBluxUserWithTimeout();
|
|
363
369
|
await updateUserProperties(this.api, { application_id: bluxUser.applicationId, blux_user_id: bluxUser.id }, { properties: userProperties }, this.generateApiHeader(bluxUser));
|
|
@@ -367,12 +373,10 @@ export class BluxClient {
|
|
|
367
373
|
}
|
|
368
374
|
}
|
|
369
375
|
async setCustomUserProperties({ customUserProperties, }) {
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
this.postMessageToRN("setCustomUserProperties", { customUserProperties });
|
|
376
|
+
if (this.bridge) {
|
|
377
|
+
this.bridge.setCustomUserProperties(customUserProperties);
|
|
373
378
|
return;
|
|
374
379
|
}
|
|
375
|
-
// React Native WebView가 아닌 경우 웹에서 직접 처리
|
|
376
380
|
try {
|
|
377
381
|
const bluxUser = await this.getBluxUserWithTimeout();
|
|
378
382
|
await updateCustomUserProperties(this.api, { application_id: bluxUser.applicationId, blux_user_id: bluxUser.id }, { properties: customUserProperties }, this.generateApiHeader(bluxUser));
|
|
@@ -383,12 +387,10 @@ export class BluxClient {
|
|
|
383
387
|
}
|
|
384
388
|
sendEvent(event) {
|
|
385
389
|
const requests = (Array.isArray(event) ? event : [event]).map((e) => e.request);
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
this.postMessageToRN("sendEvent", { requests });
|
|
390
|
+
if (this.bridge) {
|
|
391
|
+
this.bridge.sendEvent({ requests });
|
|
389
392
|
return;
|
|
390
393
|
}
|
|
391
|
-
// React Native WebView가 아닌 경우 웹에서 직접 처리
|
|
392
394
|
this.requestQueue$.next([
|
|
393
395
|
...this.requestQueue$.value,
|
|
394
396
|
...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 let webView = window.ReactNativeWebView;\n\n if (!webView?.postMessage) {\n try {\n webView = window.top?.ReactNativeWebView;\n } catch {\n webView = undefined;\n }\n }\n\n if (!webView?.postMessage) {\n Logger.error(\"React Native WebView is not available for postMessage\");\n return;\n }\n\n webView.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} 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 combineLatest([\n onlineAndVisible$.pipe(distinctUntilChanged()),\n this.bluxUser$,\n ])\n .pipe(\n switchMap(([isOnlineAndVisible, bluxUser]) => {\n if (!isOnlineAndVisible || !bluxUser) return NEVER;\n\n return this.inappPollDelay$.pipe(\n distinctUntilChanged(),\n switchMap((delay) => timer(0, delay)),\n exhaustMap(() => this.handleInappEvent(bluxUser)),\n );\n }),\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"]}
|
package/dist/src/apis/APIs.d.ts
CHANGED
|
@@ -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 {};
|
package/dist/src/apis/APIs.js
CHANGED
|
@@ -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
|