@blux.ai/web-sdk 1.1.6 → 1.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 +1 -1
- package/dist/src/BluxClient.d.ts +5 -2
- package/dist/src/BluxClient.js +120 -48
- package/dist/src/BluxClient.js.map +1 -1
- package/dist/src/apis/APIs.d.ts +73 -50
- package/dist/src/apis/APIs.js +23 -18
- package/dist/src/apis/APIs.js.map +1 -1
- package/dist/src/apis/getItemRecommendations.d.ts +4 -0
- package/dist/src/apis/getItemRecommendations.js +7 -0
- package/dist/src/apis/getItemRecommendations.js.map +1 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/recs/ItemRec.d.ts +14 -0
- package/dist/src/recs/ItemRec.js +41 -0
- package/dist/src/recs/ItemRec.js.map +1 -0
- package/dist/src/recs/Rec.d.ts +5 -0
- package/dist/src/{recommendations/Recommendation.js → recs/Rec.js} +2 -2
- package/dist/src/recs/Rec.js.map +1 -0
- package/dist/src/recs/index.d.ts +1 -0
- package/dist/src/recs/index.js +2 -0
- package/dist/src/recs/index.js.map +1 -0
- package/dist/src/recs/types.d.ts +27 -0
- package/dist/src/recs/types.js.map +1 -0
- package/dist/src/utils/zodSchemas.d.ts +65 -0
- package/dist/src/utils/zodSchemas.js +22 -3
- package/dist/src/utils/zodSchemas.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/src/apis/getItemRecommendation.d.ts +0 -4
- package/dist/src/apis/getItemRecommendation.js +0 -7
- package/dist/src/apis/getItemRecommendation.js.map +0 -1
- package/dist/src/recommendations/ItemRecommendation.d.ts +0 -5
- package/dist/src/recommendations/ItemRecommendation.js +0 -13
- package/dist/src/recommendations/ItemRecommendation.js.map +0 -1
- package/dist/src/recommendations/Recommendation.d.ts +0 -5
- package/dist/src/recommendations/Recommendation.js.map +0 -1
- package/dist/src/recommendations/index.d.ts +0 -1
- package/dist/src/recommendations/index.js +0 -2
- package/dist/src/recommendations/index.js.map +0 -1
- package/dist/src/recommendations/types.d.ts +0 -12
- package/dist/src/recommendations/types.js.map +0 -1
- /package/dist/src/{recommendations → recs}/types.js +0 -0
package/dist/package.json
CHANGED
package/dist/src/BluxClient.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ import { BehaviorSubject } from "rxjs";
|
|
|
2
2
|
import type { LogLevel } from "./utils/Logger";
|
|
3
3
|
import type { EventRequest } from "./events/types";
|
|
4
4
|
import type { Event } from "./events/Event";
|
|
5
|
-
import type { Recommendation } from "./recommendations/Recommendation";
|
|
6
5
|
import { type APIs } from "./apis/APIs";
|
|
6
|
+
import type { CategoryRec, ItemRelatedRec, ItemsRelatedRec, UserRec } from "./recs";
|
|
7
7
|
export type SdkInfo = {
|
|
8
8
|
type: string;
|
|
9
9
|
version: string;
|
|
@@ -44,9 +44,12 @@ export declare class BluxClient {
|
|
|
44
44
|
}): Promise<void>;
|
|
45
45
|
setCustomUserProperties(customUserProperties: Record<string, string | boolean | number | null>): Promise<void>;
|
|
46
46
|
sendEvent(event: Event | Event[]): void;
|
|
47
|
-
getItemRecommendation(recommendation: Recommendation): Promise<APIs.bluxUsersGetItemRecommendations.ResponseData>;
|
|
48
47
|
private handlePageTransition;
|
|
49
48
|
private registerSectionViewObserver;
|
|
50
49
|
private handleIntersection;
|
|
50
|
+
getUserRec(rec: UserRec): Promise<APIs.bluxUsersGetItemRecommendationsV2.ResponseData>;
|
|
51
|
+
getItemRelatedRec(rec: ItemRelatedRec): Promise<APIs.bluxUsersGetItemRecommendationsV2.ResponseData>;
|
|
52
|
+
getItemsRelatedRec(rec: ItemsRelatedRec): Promise<APIs.bluxUsersGetItemRecommendationsV2.ResponseData>;
|
|
53
|
+
getCategoryRec(rec: CategoryRec): Promise<APIs.bluxUsersGetItemRecommendationsV2.ResponseData>;
|
|
51
54
|
}
|
|
52
55
|
export {};
|
package/dist/src/BluxClient.js
CHANGED
|
@@ -11,12 +11,12 @@ import { updateUserProperties } from "./apis/updateUserProperties";
|
|
|
11
11
|
import { updateCustomUserProperties } from "./apis/updateCustomUserProperties";
|
|
12
12
|
import { collectEvent } from "./apis/createEvent";
|
|
13
13
|
import { VisitEvent } from "./events/VisitEvent";
|
|
14
|
-
import { getItemRecommendation } from "./apis/getItemRecommendation";
|
|
15
14
|
import { DevicePlatform } from "./apis/APIs";
|
|
16
15
|
import { AddPageVisitEvent } from "./events/AddPageVisitEvent";
|
|
17
16
|
import { SessionStorage } from "./utils/SessionStorage";
|
|
18
17
|
import { AddSectionViewEvent } from "./events";
|
|
19
18
|
import { BLUX_ATTRIBUTES } from "./constants/BLUX_ATTRIBUTES";
|
|
19
|
+
import { getItemRecommendations } from "./apis/getItemRecommendations";
|
|
20
20
|
export class BluxClient {
|
|
21
21
|
api = axios.create({
|
|
22
22
|
baseURL: "https://api.blux.ai/prod",
|
|
@@ -44,6 +44,11 @@ export class BluxClient {
|
|
|
44
44
|
}, {
|
|
45
45
|
events: requests.map((request) => ({
|
|
46
46
|
...request,
|
|
47
|
+
internal_event_properties: {
|
|
48
|
+
...request.internal_event_properties,
|
|
49
|
+
url: `${LocalStorage.getUrl()}`,
|
|
50
|
+
ref: `${LocalStorage.getRef()}`,
|
|
51
|
+
},
|
|
47
52
|
blux_id: bluxUser.id,
|
|
48
53
|
device_id: bluxUser.deviceId,
|
|
49
54
|
})),
|
|
@@ -83,6 +88,16 @@ export class BluxClient {
|
|
|
83
88
|
if (!deviceId) {
|
|
84
89
|
Logger.debug("No saved Device ID, register a new one.");
|
|
85
90
|
}
|
|
91
|
+
// [페이지 이동 처리]
|
|
92
|
+
this.handlePageTransition();
|
|
93
|
+
// [Section View 자동 수집 관련 처리]
|
|
94
|
+
this.registerSectionViewObserver(); // init 시마다 특정 section을 observe하는 intersection observer 등록
|
|
95
|
+
// (SPA 처리) init이 최초 1회만 호출되더라도 페이지 이동 및 intersection observer를 처리할 수 있도록 MutationObserver 등록
|
|
96
|
+
const mutationObserver = new MutationObserver(() => {
|
|
97
|
+
this.registerSectionViewObserver();
|
|
98
|
+
});
|
|
99
|
+
const mutationObserverConfig = { subtree: true, childList: true };
|
|
100
|
+
mutationObserver.observe(document.body, mutationObserverConfig);
|
|
86
101
|
const { data } = await initialize(this.api, { application_id: this.applicationId }, {
|
|
87
102
|
isVisitHandlingInSdk: true,
|
|
88
103
|
device_id: deviceId ?? undefined,
|
|
@@ -106,16 +121,6 @@ export class BluxClient {
|
|
|
106
121
|
applicationId: this.applicationId,
|
|
107
122
|
deviceId: data.device_id,
|
|
108
123
|
});
|
|
109
|
-
// [페이지 이동 처리]
|
|
110
|
-
this.handlePageTransition();
|
|
111
|
-
// [Section View 자동 수집 관련 처리]
|
|
112
|
-
this.registerSectionViewObserver(); // init 시마다 특정 section을 observe하는 intersection observer 등록
|
|
113
|
-
// (SPA 처리) init이 최초 1회만 호출되더라도 페이지 이동 및 intersection observer를 처리할 수 있도록 MutationObserver 등록
|
|
114
|
-
const mutationObserver = new MutationObserver(() => {
|
|
115
|
-
this.registerSectionViewObserver();
|
|
116
|
-
});
|
|
117
|
-
const mutationObserverConfig = { subtree: true, childList: true };
|
|
118
|
-
mutationObserver.observe(document.body, mutationObserverConfig);
|
|
119
124
|
}
|
|
120
125
|
setLogLevel(logLevel) {
|
|
121
126
|
Logger.setLevel(logLevel);
|
|
@@ -177,48 +182,12 @@ export class BluxClient {
|
|
|
177
182
|
}
|
|
178
183
|
}
|
|
179
184
|
sendEvent(event) {
|
|
180
|
-
const requests = (Array.isArray(event) ? event : [event]).map((event) =>
|
|
181
|
-
// 모든 행동 데이터에 url, ref 추가
|
|
182
|
-
event.request.internal_event_properties = {
|
|
183
|
-
url: `${LocalStorage.getUrl()}`,
|
|
184
|
-
ref: `${LocalStorage.getRef()}`,
|
|
185
|
-
};
|
|
186
|
-
return event.request;
|
|
187
|
-
});
|
|
185
|
+
const requests = (Array.isArray(event) ? event : [event]).map((event) => event.request);
|
|
188
186
|
this.requestQueue$.next([
|
|
189
187
|
...this.requestQueue$.value,
|
|
190
188
|
...requests.filter((request) => !this.requestQueue$.value.map((r) => r.id).includes(request.id)),
|
|
191
189
|
]);
|
|
192
190
|
}
|
|
193
|
-
async getItemRecommendation(recommendation) {
|
|
194
|
-
try {
|
|
195
|
-
const bluxUser = await this.getBluxUserWithTimeout();
|
|
196
|
-
const recommendationRequest = recommendation.request;
|
|
197
|
-
const recommendationResponse = await getItemRecommendation(this.api, {
|
|
198
|
-
application_id: bluxUser.applicationId,
|
|
199
|
-
blux_user_id: bluxUser.id,
|
|
200
|
-
}, {
|
|
201
|
-
call_type: recommendationRequest.call_type,
|
|
202
|
-
limit: recommendationRequest.limit,
|
|
203
|
-
offset: recommendationRequest.offset,
|
|
204
|
-
item_ids: recommendationRequest.item_ids,
|
|
205
|
-
options: recommendationRequest.options,
|
|
206
|
-
}, this.generateApiHeader(bluxUser));
|
|
207
|
-
return recommendationResponse.data;
|
|
208
|
-
}
|
|
209
|
-
catch (error) {
|
|
210
|
-
Logger.error(error, { tags: { from: "getItemRecommendation" } });
|
|
211
|
-
return {
|
|
212
|
-
items: [],
|
|
213
|
-
metadata: {},
|
|
214
|
-
status: {
|
|
215
|
-
is_success: false,
|
|
216
|
-
code: 400,
|
|
217
|
-
message: error.message,
|
|
218
|
-
},
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
191
|
handlePageTransition() {
|
|
223
192
|
const url = LocalStorage.getUrl();
|
|
224
193
|
if (window.location.href !== url) {
|
|
@@ -270,5 +239,108 @@ export class BluxClient {
|
|
|
270
239
|
}
|
|
271
240
|
});
|
|
272
241
|
}
|
|
242
|
+
async getUserRec(rec) {
|
|
243
|
+
try {
|
|
244
|
+
const bluxUser = await this.getBluxUserWithTimeout();
|
|
245
|
+
const recRequest = rec.request;
|
|
246
|
+
const recommendationResponse = await getItemRecommendations(this.api, {
|
|
247
|
+
application_id: bluxUser.applicationId,
|
|
248
|
+
blux_user_id: bluxUser.id,
|
|
249
|
+
}, {
|
|
250
|
+
call_type: recRequest.call_type,
|
|
251
|
+
limit: recRequest.limit,
|
|
252
|
+
offset: recRequest.offset,
|
|
253
|
+
}, this.generateApiHeader(bluxUser));
|
|
254
|
+
return recommendationResponse.data;
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
Logger.error(error, { tags: { from: "getItemRecommendations" } });
|
|
258
|
+
return {
|
|
259
|
+
item_ids: [],
|
|
260
|
+
count: 0,
|
|
261
|
+
metadata: {},
|
|
262
|
+
timestamp: Number(new Date().toISOString()),
|
|
263
|
+
recommendation_id: null,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
async getItemRelatedRec(rec) {
|
|
268
|
+
try {
|
|
269
|
+
const bluxUser = await this.getBluxUserWithTimeout();
|
|
270
|
+
const recRequest = rec.request;
|
|
271
|
+
const recommendationResponse = await getItemRecommendations(this.api, {
|
|
272
|
+
application_id: bluxUser.applicationId,
|
|
273
|
+
blux_user_id: bluxUser.id,
|
|
274
|
+
}, {
|
|
275
|
+
call_type: recRequest.call_type,
|
|
276
|
+
limit: recRequest.limit,
|
|
277
|
+
offset: recRequest.offset,
|
|
278
|
+
item_id: recRequest.item_id,
|
|
279
|
+
}, this.generateApiHeader(bluxUser));
|
|
280
|
+
return recommendationResponse.data;
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
Logger.error(error, { tags: { from: "getItemRecommendations" } });
|
|
284
|
+
return {
|
|
285
|
+
item_ids: [],
|
|
286
|
+
count: 0,
|
|
287
|
+
metadata: {},
|
|
288
|
+
timestamp: Number(new Date().toISOString()),
|
|
289
|
+
recommendation_id: null,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
async getItemsRelatedRec(rec) {
|
|
294
|
+
try {
|
|
295
|
+
const bluxUser = await this.getBluxUserWithTimeout();
|
|
296
|
+
const recRequest = rec.request;
|
|
297
|
+
const recommendationResponse = await getItemRecommendations(this.api, {
|
|
298
|
+
application_id: bluxUser.applicationId,
|
|
299
|
+
blux_user_id: bluxUser.id,
|
|
300
|
+
}, {
|
|
301
|
+
call_type: recRequest.call_type,
|
|
302
|
+
limit: recRequest.limit,
|
|
303
|
+
offset: recRequest.offset,
|
|
304
|
+
item_ids: recRequest.item_ids,
|
|
305
|
+
}, this.generateApiHeader(bluxUser));
|
|
306
|
+
return recommendationResponse.data;
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
Logger.error(error, { tags: { from: "getItemRecommendations" } });
|
|
310
|
+
return {
|
|
311
|
+
item_ids: [],
|
|
312
|
+
count: 0,
|
|
313
|
+
metadata: {},
|
|
314
|
+
timestamp: Number(new Date().toISOString()),
|
|
315
|
+
recommendation_id: null,
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
async getCategoryRec(rec) {
|
|
320
|
+
try {
|
|
321
|
+
const bluxUser = await this.getBluxUserWithTimeout();
|
|
322
|
+
const recRequest = rec.request;
|
|
323
|
+
const recommendationResponse = await getItemRecommendations(this.api, {
|
|
324
|
+
application_id: bluxUser.applicationId,
|
|
325
|
+
blux_user_id: bluxUser.id,
|
|
326
|
+
}, {
|
|
327
|
+
call_type: recRequest.call_type,
|
|
328
|
+
limit: recRequest.limit,
|
|
329
|
+
offset: recRequest.offset,
|
|
330
|
+
category_id: recRequest.category_id,
|
|
331
|
+
}, this.generateApiHeader(bluxUser));
|
|
332
|
+
return recommendationResponse.data;
|
|
333
|
+
}
|
|
334
|
+
catch (error) {
|
|
335
|
+
Logger.error(error, { tags: { from: "getItemRecommendations" } });
|
|
336
|
+
return {
|
|
337
|
+
item_ids: [],
|
|
338
|
+
count: 0,
|
|
339
|
+
metadata: {},
|
|
340
|
+
timestamp: Number(new Date().toISOString()),
|
|
341
|
+
recommendation_id: null,
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
}
|
|
273
345
|
}
|
|
274
346
|
//# sourceMappingURL=BluxClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BluxClient.js","sourceRoot":"/","sources":["src/BluxClient.ts"],"names":[],"mappings":"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","sourcesContent":["import packageJson from \"../package.json\";\nimport {\n asyncScheduler,\n BehaviorSubject,\n catchError,\n combineLatest,\n exhaustMap,\n filter,\n firstValueFrom,\n map,\n observeOn,\n throwError,\n timeout,\n} from \"rxjs\";\nimport { LocalStorage } from \"./utils/LocalStorage\";\nimport type { LogLevel } from \"./utils/Logger\";\nimport { Logger } from \"./utils/Logger\";\nimport type { AxiosInstance } from \"axios\";\nimport axios from \"axios\";\nimport { filterNullable } from \"./utils/operators\";\nimport type { EventRequest } from \"./events/types\";\nimport type { Event } from \"./events/Event\";\nimport { initialize } from \"./apis/initialize\";\nimport { signIn } from \"./apis/signIn\";\nimport { signOut } from \"./apis/signOut\";\nimport { updateUserProperties } from \"./apis/updateUserProperties\";\nimport { updateCustomUserProperties } from \"./apis/updateCustomUserProperties\";\nimport { collectEvent } from \"./apis/createEvent\";\nimport { VisitEvent } from \"./events/VisitEvent\";\nimport type { Recommendation } from \"./recommendations/Recommendation\";\nimport { getItemRecommendation } from \"./apis/getItemRecommendation\";\nimport { DevicePlatform, type APIs } from \"./apis/APIs\";\nimport { AddPageVisitEvent } from \"./events/AddPageVisitEvent\";\nimport { SessionStorage } from \"./utils/SessionStorage\";\nimport { AddSectionViewEvent } from \"./events\";\nimport { BLUX_ATTRIBUTES } from \"./constants/BLUX_ATTRIBUTES\";\n\nexport type SdkInfo = {\n type: string;\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 baseURL: \"https://api.blux.ai/prod\",\n });\n\n private readonly sdkInfo: SdkInfo = {\n type: \"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\n private readonly applicationId: string;\n private readonly bluxApiKey: string;\n\n private sectionViewCollectedSections: string[] = [];\n private observingTargetElements: { [call_type: string]: Element } = {};\n private sectionViewObservers: IntersectionObserver[] = [];\n\n constructor(\n {\n applicationId,\n bluxApiKey,\n }: {\n applicationId: string;\n bluxApiKey: string;\n },\n completionCallback?: (args: {\n errorMessage?: string;\n success: boolean;\n }) => void,\n ) {\n this.applicationId = applicationId;\n this.bluxApiKey = bluxApiKey;\n\n combineLatest([this.requestQueue$, this.bluxUser$.pipe(filterNullable())])\n .pipe(\n filter(([requests]) => requests.length > 0),\n exhaustMap(async ([requests, bluxUser]) => {\n try {\n await collectEvent(\n this.api,\n {\n blux_user_id: bluxUser.id,\n application_id: bluxUser.applicationId,\n },\n {\n events: requests.map((request) => ({\n ...request,\n blux_id: bluxUser.id,\n device_id: bluxUser.deviceId,\n })),\n },\n this.generateApiHeader(bluxUser),\n );\n } catch (error) {\n // todo : retry\n Logger.error(error, { tags: { from: \"request-events-api\" } });\n }\n\n return requests.map((r) => r.id); // todo: 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.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 init() {\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.applicationId}`);\n\n const deviceId = LocalStorage.getDeviceId();\n\n if (!deviceId) {\n Logger.debug(\"No saved Device ID, register a new one.\");\n }\n\n const { data } = await initialize(\n this.api,\n { application_id: this.applicationId },\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.applicationId,\n deviceId: data.device_id,\n });\n\n // [페이지 이동 처리]\n this.handlePageTransition();\n\n // [Section View 자동 수집 관련 처리]\n this.registerSectionViewObserver(); // init 시마다 특정 section을 observe하는 intersection observer 등록\n\n // (SPA 처리) init이 최초 1회만 호출되더라도 페이지 이동 및 intersection observer를 처리할 수 있도록 MutationObserver 등록\n const mutationObserver = new MutationObserver(() => {\n this.registerSectionViewObserver();\n });\n const mutationObserverConfig = { subtree: true, childList: true };\n mutationObserver.observe(document.body, mutationObserverConfig);\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: string) {\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 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(userProperties: {\n phone_number?: string;\n email_address?: string;\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: Record<string, string | boolean | number | null>,\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: Event | Event[]) {\n const requests = (Array.isArray(event) ? event : [event]).map((event) => {\n // 모든 행동 데이터에 url, ref 추가\n event.request.internal_event_properties = {\n url: `${LocalStorage.getUrl()}`,\n ref: `${LocalStorage.getRef()}`,\n };\n\n return event.request;\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 public async getItemRecommendation(\n recommendation: Recommendation,\n ): Promise<APIs.bluxUsersGetItemRecommendations.ResponseData> {\n try {\n const bluxUser = await this.getBluxUserWithTimeout();\n const recommendationRequest = recommendation.request;\n\n const recommendationResponse = await getItemRecommendation(\n this.api,\n {\n application_id: bluxUser.applicationId,\n blux_user_id: bluxUser.id,\n },\n {\n call_type: recommendationRequest.call_type,\n limit: recommendationRequest.limit,\n offset: recommendationRequest.offset,\n item_ids: recommendationRequest.item_ids,\n options: recommendationRequest.options,\n },\n this.generateApiHeader(bluxUser),\n );\n\n return recommendationResponse.data;\n } catch (error) {\n Logger.error(error, { tags: { from: \"getItemRecommendation\" } });\n return {\n items: [],\n metadata: {},\n status: {\n is_success: false,\n code: 400,\n message: error.message,\n },\n };\n }\n }\n\n private handlePageTransition() {\n const url = LocalStorage.getUrl();\n\n if (window.location.href !== url) {\n // 페이지 이동 시 url, ref 업데이트\n LocalStorage.setRef(`${url}`);\n LocalStorage.setUrl(window.location.href);\n\n // 페이지 이동 시 page_visit event 자동 수집\n this.sendEvent(new AddPageVisitEvent({}));\n\n // 페이지 이동 시 section view 관련 변수 초기화\n this.sectionViewCollectedSections = [];\n this.observingTargetElements = {};\n this.sectionViewObservers.forEach((observer) => {\n observer.disconnect();\n });\n }\n }\n\n private registerSectionViewObserver() {\n const targetElements = Array.from(\n document.querySelectorAll(`[${BLUX_ATTRIBUTES.section}]`),\n );\n\n targetElements.forEach((targetElement) => {\n const section = targetElement.getAttribute(BLUX_ATTRIBUTES.section);\n if (!section) return;\n // 이미 observe 중인 section은 skip\n if (this.observingTargetElements[section]) {\n return;\n }\n\n this.observingTargetElements[section] = targetElement;\n const observer = new IntersectionObserver(\n this.handleIntersection.bind(this),\n { threshold: 0 },\n );\n observer.observe(targetElement);\n this.sectionViewObservers.push(observer);\n\n Logger.debug(\n `SectionView observer is registered for section: \"${section}\".`,\n );\n });\n }\n\n private handleIntersection(entries: IntersectionObserverEntry[]) {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n const section = entry.target.getAttribute(BLUX_ATTRIBUTES.section);\n const recommendationId = entry.target.getAttribute(\n BLUX_ATTRIBUTES.recommendation_id,\n );\n if (!section) {\n return;\n }\n\n if (!this.sectionViewCollectedSections.includes(section)) {\n this.sendEvent(\n new AddSectionViewEvent({\n section,\n recommendation_id: recommendationId ?? undefined,\n }),\n );\n this.sectionViewCollectedSections.push(section);\n }\n }\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"BluxClient.js","sourceRoot":"/","sources":["src/BluxClient.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,aAAa,EACb,UAAU,EACV,MAAM,EACN,cAAc,EACd,GAAG,EACH,SAAS,EACT,UAAU,EACV,OAAO,GACR,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAa,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAO9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAevE,MAAM,OAAO,UAAU;IACJ,GAAG,GAAkB,KAAK,CAAC,MAAM,CAAC;QACjD,OAAO,EAAE,0BAA0B;KACpC,CAAC,CAAC;IAEc,OAAO,GAAY;QAClC,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,WAAW,CAAC,OAAO;KAC7B,CAAC;IAEc,SAAS,GAAG,IAAI,eAAe,CAC7C,SAAS,CACV,CAAC;IAEc,aAAa,GAAG,IAAI,eAAe,CAAiB,EAAE,CAAC,CAAC;IAEvD,aAAa,CAAS;IACtB,UAAU,CAAS;IAE5B,4BAA4B,GAAa,EAAE,CAAC;IAC5C,uBAAuB,GAAqC,EAAE,CAAC;IAC/D,oBAAoB,GAA2B,EAAE,CAAC;IAE1D,YACE,EACE,aAAa,EACb,UAAU,GAIX,EACD,kBAGU;QAEV,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAE7B,aAAa,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;aACvE,IAAI,CACH,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAC3C,UAAU,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE;YACxC,IAAI;gBACF,MAAM,YAAY,CAChB,IAAI,CAAC,GAAG,EACR;oBACE,YAAY,EAAE,QAAQ,CAAC,EAAE;oBACzB,cAAc,EAAE,QAAQ,CAAC,aAAa;iBACvC,EACD;oBACE,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;wBACjC,GAAG,OAAO;wBACV,yBAAyB,EAAE;4BACzB,GAAG,OAAO,CAAC,yBAAyB;4BACpC,GAAG,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE;4BAC/B,GAAG,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE;yBAChC;wBACD,OAAO,EAAE,QAAQ,CAAC,EAAE;wBACpB,SAAS,EAAE,QAAQ,CAAC,QAAQ;qBAC7B,CAAC,CAAC;iBACJ,EACD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAC;aACH;YAAC,OAAO,KAAK,EAAE;gBACd,eAAe;gBACf,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAC;aAC/D;YAED,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,uCAAuC;QAC3E,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,mBAAmB,EAAE,EAAE,CAC1B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAC7B,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CACvD,CACF,EACD,SAAS,CAAC,cAAc,CAAC,CAC1B;aACA,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEjC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE;YACpC,IAAI,QAAQ;gBAAE,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE;aACR,IAAI,CAAC,GAAG,EAAE;YACT,kBAAkB,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,kBAAkB,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,iBAAiB,CAAC,EAAE,UAAU,EAA0B;QAC9D,OAAO;YACL,aAAa,EAAE,UAAU;SAC1B,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAClE,cAAc,CACf,CAAC;QAEF,MAAM,iCAAiC,GAAG,cAAc,CAAC,aAAa,EAAE,CAAC;QACzE,IAAI,CAAC,iCAAiC;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAE3E,MAAM,CAAC,KAAK,CAAC,6BAA6B,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAEhE,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;QAE5C,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;SACzD;QAED,cAAc;QACd,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,6BAA6B;QAC7B,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,0DAA0D;QAE9F,6FAA6F;QAC7F,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;YACjD,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,MAAM,sBAAsB,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAClE,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;QAEhE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,CAC/B,IAAI,CAAC,GAAG,EACR,EAAE,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,EACtC;YACE,oBAAoB,EAAE,IAAI;YAC1B,SAAS,EAAE,QAAQ,IAAI,SAAS;YAChC,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9C,YAAY,EAAE,SAAS,CAAC,SAAS;YACjC,aAAa,EAAE,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC/C,QAAQ,EAAE,cAAc,CAAC,OAAO;YAChC,UAAU,EAAE,SAAS,CAAC,SAAS;YAC/B,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YACjC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YAC3B,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ;YAC1D,YAAY,EAAE,YAAY,IAAI,SAAS;SACxC,EACD,IAAI,CAAC,iBAAiB,CAAC;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CACH,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS;YAAE,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE7D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAClB,EAAE,EAAE,IAAI,CAAC,YAAY;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,QAAQ,EAAE,IAAI,CAAC,SAAS;SACzB,CAAC,CAAC;IACL,CAAC;IAEM,WAAW,CAAC,QAAkB;QACnC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,sBAAsB;QAClC,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,cAAc,EAAE,EAChB,OAAO,CAAC,IAAI,CAAC,EACb,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;YACnB,OAAO,UAAU,CAAC,GAAG,EAAE,CACrB,KAAK,CAAC,IAAI,KAAK,cAAc;gBAC3B,CAAC,CAAC,IAAI,KAAK,CACP,kEAAkE,CACnE;gBACH,CAAC,CAAC,KAAK,CACV,CAAC;QACJ,CAAC,CAAC,CACH,CACF,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,MAAc;QAChC,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAErD,MAAM,EACJ,IAAI,EAAE,EAAE,YAAY,EAAE,gBAAgB,EAAE,GACzC,GAAG,MAAM,MAAM,CACd,IAAI,CAAC,GAAG,EACR,EAAE,cAAc,EAAE,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,EAAE,EACrE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAAE,EACjD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAC;YAEF,IAAI,gBAAgB,KAAK,QAAQ,CAAC,EAAE,EAAE;gBACpC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBAC9C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAClB,GAAG,QAAQ;oBACX,EAAE,EAAE,gBAAgB;iBACrB,CAAC,CAAC;aACJ;SACF;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;SACnD;IACH,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAErD,MAAM,EACJ,IAAI,EAAE,EAAE,YAAY,EAAE,gBAAgB,EAAE,GACzC,GAAG,MAAM,OAAO,CACf,IAAI,CAAC,GAAG,EACR,EAAE,cAAc,EAAE,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,EAAE,EACrE,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAChC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAC;YAEF,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAClB,GAAG,QAAQ;gBACX,EAAE,EAAE,gBAAgB;aACrB,CAAC,CAAC;SACJ;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;SACpD;IACH,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,cAG9B;QACC,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAErD,MAAM,oBAAoB,CACxB,IAAI,CAAC,GAAG,EACR,EAAE,cAAc,EAAE,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,EAAE,EACrE,EAAE,UAAU,EAAE,cAAc,EAAE,EAC9B,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAC;SACH;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;SAC9D;IACH,CAAC;IAEM,KAAK,CAAC,uBAAuB,CAClC,oBAAsE;QAEtE,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAErD,MAAM,0BAA0B,CAC9B,IAAI,CAAC,GAAG,EACR,EAAE,cAAc,EAAE,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,EAAE,EACrE,EAAE,UAAU,EAAE,oBAAoB,EAAE,EACpC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAC;SACH;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,CAAC,CAAC;SACpE;IACH,CAAC;IAEM,SAAS,CAAC,KAAsB;QACrC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAC3D,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CACzB,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YACtB,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK;YAC3B,GAAG,QAAQ,CAAC,MAAM,CAChB,CAAC,OAAO,EAAE,EAAE,CACV,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAClE;SACF,CAAC,CAAC;IACL,CAAC;IAEO,oBAAoB;QAC1B,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;QAElC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,GAAG,EAAE;YAChC,yBAAyB;YACzB,YAAY,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;YAC9B,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE1C,kCAAkC;YAClC,IAAI,CAAC,SAAS,CAAC,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;YAE1C,kCAAkC;YAClC,IAAI,CAAC,4BAA4B,GAAG,EAAE,CAAC;YACvC,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC;YAClC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC7C,QAAQ,CAAC,UAAU,EAAE,CAAC;YACxB,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAEO,2BAA2B;QACjC,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAC/B,QAAQ,CAAC,gBAAgB,CAAC,IAAI,eAAe,CAAC,OAAO,GAAG,CAAC,CAC1D,CAAC;QAEF,cAAc,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,EAAE;YACvC,MAAM,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACpE,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,8BAA8B;YAC9B,IAAI,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE;gBACzC,OAAO;aACR;YAED,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC;YACtD,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CACvC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAClC,EAAE,SAAS,EAAE,CAAC,EAAE,CACjB,CAAC;YACF,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAChC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEzC,MAAM,CAAC,KAAK,CACV,oDAAoD,OAAO,IAAI,CAChE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,OAAoC;QAC7D,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACxB,IAAI,KAAK,CAAC,cAAc,EAAE;gBACxB,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBACnE,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAChD,eAAe,CAAC,iBAAiB,CAClC,CAAC;gBACF,IAAI,CAAC,OAAO,EAAE;oBACZ,OAAO;iBACR;gBAED,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;oBACxD,IAAI,CAAC,SAAS,CACZ,IAAI,mBAAmB,CAAC;wBACtB,OAAO;wBACP,iBAAiB,EAAE,gBAAgB,IAAI,SAAS;qBACjD,CAAC,CACH,CAAC;oBACF,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACjD;aACF;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,UAAU,CACrB,GAAY;QAEZ,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACrD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC;YAE/B,MAAM,sBAAsB,GAAG,MAAM,sBAAsB,CACzD,IAAI,CAAC,GAAG,EACR;gBACE,cAAc,EAAE,QAAQ,CAAC,aAAa;gBACtC,YAAY,EAAE,QAAQ,CAAC,EAAE;aAC1B,EACD;gBACE,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,EACD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAC;YAEF,OAAO,sBAAsB,CAAC,IAAI,CAAC;SACpC;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC;YAClE,OAAO;gBACL,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,CAAC;gBACR,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC3C,iBAAiB,EAAE,IAAI;aACxB,CAAC;SACH;IACH,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAC5B,GAAmB;QAEnB,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACrD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC;YAE/B,MAAM,sBAAsB,GAAG,MAAM,sBAAsB,CACzD,IAAI,CAAC,GAAG,EACR;gBACE,cAAc,EAAE,QAAQ,CAAC,aAAa;gBACtC,YAAY,EAAE,QAAQ,CAAC,EAAE;aAC1B,EACD;gBACE,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,OAAO,EAAE,UAAU,CAAC,OAAO;aAC5B,EACD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAC;YAEF,OAAO,sBAAsB,CAAC,IAAI,CAAC;SACpC;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC;YAClE,OAAO;gBACL,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,CAAC;gBACR,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC3C,iBAAiB,EAAE,IAAI;aACxB,CAAC;SACH;IACH,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAC7B,GAAoB;QAEpB,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACrD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC;YAE/B,MAAM,sBAAsB,GAAG,MAAM,sBAAsB,CACzD,IAAI,CAAC,GAAG,EACR;gBACE,cAAc,EAAE,QAAQ,CAAC,aAAa;gBACtC,YAAY,EAAE,QAAQ,CAAC,EAAE;aAC1B,EACD;gBACE,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,QAAQ,EAAE,UAAU,CAAC,QAAQ;aAC9B,EACD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAC;YAEF,OAAO,sBAAsB,CAAC,IAAI,CAAC;SACpC;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC;YAClE,OAAO;gBACL,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,CAAC;gBACR,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC3C,iBAAiB,EAAE,IAAI;aACxB,CAAC;SACH;IACH,CAAC;IAEM,KAAK,CAAC,cAAc,CACzB,GAAgB;QAEhB,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACrD,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC;YAE/B,MAAM,sBAAsB,GAAG,MAAM,sBAAsB,CACzD,IAAI,CAAC,GAAG,EACR;gBACE,cAAc,EAAE,QAAQ,CAAC,aAAa;gBACtC,YAAY,EAAE,QAAQ,CAAC,EAAE;aAC1B,EACD;gBACE,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,WAAW,EAAE,UAAU,CAAC,WAAW;aACpC,EACD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CACjC,CAAC;YAEF,OAAO,sBAAsB,CAAC,IAAI,CAAC;SACpC;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC;YAClE,OAAO;gBACL,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,CAAC;gBACR,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC3C,iBAAiB,EAAE,IAAI;aACxB,CAAC;SACH;IACH,CAAC;CACF","sourcesContent":["import packageJson from \"../package.json\";\nimport {\n asyncScheduler,\n BehaviorSubject,\n catchError,\n combineLatest,\n exhaustMap,\n filter,\n firstValueFrom,\n map,\n observeOn,\n throwError,\n timeout,\n} from \"rxjs\";\nimport { LocalStorage } from \"./utils/LocalStorage\";\nimport type { LogLevel } from \"./utils/Logger\";\nimport { Logger } from \"./utils/Logger\";\nimport type { AxiosInstance } from \"axios\";\nimport axios from \"axios\";\nimport { filterNullable } from \"./utils/operators\";\nimport type { EventRequest } from \"./events/types\";\nimport type { Event } from \"./events/Event\";\nimport { initialize } from \"./apis/initialize\";\nimport { signIn } from \"./apis/signIn\";\nimport { signOut } from \"./apis/signOut\";\nimport { updateUserProperties } from \"./apis/updateUserProperties\";\nimport { updateCustomUserProperties } from \"./apis/updateCustomUserProperties\";\nimport { collectEvent } from \"./apis/createEvent\";\nimport { VisitEvent } from \"./events/VisitEvent\";\nimport { DevicePlatform, type APIs } from \"./apis/APIs\";\nimport { AddPageVisitEvent } from \"./events/AddPageVisitEvent\";\nimport { SessionStorage } from \"./utils/SessionStorage\";\nimport { AddSectionViewEvent } from \"./events\";\nimport { BLUX_ATTRIBUTES } from \"./constants/BLUX_ATTRIBUTES\";\nimport type {\n CategoryRec,\n ItemRelatedRec,\n ItemsRelatedRec,\n UserRec,\n} from \"./recs\";\nimport { getItemRecommendations } from \"./apis/getItemRecommendations\";\n\nexport type SdkInfo = {\n type: string;\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 baseURL: \"https://api.blux.ai/prod\",\n });\n\n private readonly sdkInfo: SdkInfo = {\n type: \"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\n private readonly applicationId: string;\n private readonly bluxApiKey: string;\n\n private sectionViewCollectedSections: string[] = [];\n private observingTargetElements: { [call_type: string]: Element } = {};\n private sectionViewObservers: IntersectionObserver[] = [];\n\n constructor(\n {\n applicationId,\n bluxApiKey,\n }: {\n applicationId: string;\n bluxApiKey: string;\n },\n completionCallback?: (args: {\n errorMessage?: string;\n success: boolean;\n }) => void,\n ) {\n this.applicationId = applicationId;\n this.bluxApiKey = bluxApiKey;\n\n combineLatest([this.requestQueue$, this.bluxUser$.pipe(filterNullable())])\n .pipe(\n filter(([requests]) => requests.length > 0),\n exhaustMap(async ([requests, bluxUser]) => {\n try {\n await collectEvent(\n this.api,\n {\n blux_user_id: bluxUser.id,\n application_id: bluxUser.applicationId,\n },\n {\n events: requests.map((request) => ({\n ...request,\n internal_event_properties: {\n ...request.internal_event_properties,\n url: `${LocalStorage.getUrl()}`,\n ref: `${LocalStorage.getRef()}`,\n },\n blux_id: bluxUser.id,\n device_id: bluxUser.deviceId,\n })),\n },\n this.generateApiHeader(bluxUser),\n );\n } catch (error) {\n // todo : retry\n Logger.error(error, { tags: { from: \"request-events-api\" } });\n }\n\n return requests.map((r) => r.id); // todo: 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.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 init() {\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.applicationId}`);\n\n const deviceId = LocalStorage.getDeviceId();\n\n if (!deviceId) {\n Logger.debug(\"No saved Device ID, register a new one.\");\n }\n\n // [페이지 이동 처리]\n this.handlePageTransition();\n\n // [Section View 자동 수집 관련 처리]\n this.registerSectionViewObserver(); // init 시마다 특정 section을 observe하는 intersection observer 등록\n\n // (SPA 처리) init이 최초 1회만 호출되더라도 페이지 이동 및 intersection observer를 처리할 수 있도록 MutationObserver 등록\n const mutationObserver = new MutationObserver(() => {\n this.registerSectionViewObserver();\n });\n const mutationObserverConfig = { subtree: true, childList: true };\n mutationObserver.observe(document.body, mutationObserverConfig);\n\n const { data } = await initialize(\n this.api,\n { application_id: this.applicationId },\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.applicationId,\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: string) {\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 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(userProperties: {\n phone_number?: string;\n email_address?: string;\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: Record<string, string | boolean | number | null>,\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: Event | Event[]) {\n const requests = (Array.isArray(event) ? event : [event]).map(\n (event) => event.request,\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 handlePageTransition() {\n const url = LocalStorage.getUrl();\n\n if (window.location.href !== url) {\n // 페이지 이동 시 url, ref 업데이트\n LocalStorage.setRef(`${url}`);\n LocalStorage.setUrl(window.location.href);\n\n // 페이지 이동 시 page_visit event 자동 수집\n this.sendEvent(new AddPageVisitEvent({}));\n\n // 페이지 이동 시 section view 관련 변수 초기화\n this.sectionViewCollectedSections = [];\n this.observingTargetElements = {};\n this.sectionViewObservers.forEach((observer) => {\n observer.disconnect();\n });\n }\n }\n\n private registerSectionViewObserver() {\n const targetElements = Array.from(\n document.querySelectorAll(`[${BLUX_ATTRIBUTES.section}]`),\n );\n\n targetElements.forEach((targetElement) => {\n const section = targetElement.getAttribute(BLUX_ATTRIBUTES.section);\n if (!section) return;\n // 이미 observe 중인 section은 skip\n if (this.observingTargetElements[section]) {\n return;\n }\n\n this.observingTargetElements[section] = targetElement;\n const observer = new IntersectionObserver(\n this.handleIntersection.bind(this),\n { threshold: 0 },\n );\n observer.observe(targetElement);\n this.sectionViewObservers.push(observer);\n\n Logger.debug(\n `SectionView observer is registered for section: \"${section}\".`,\n );\n });\n }\n\n private handleIntersection(entries: IntersectionObserverEntry[]) {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n const section = entry.target.getAttribute(BLUX_ATTRIBUTES.section);\n const recommendationId = entry.target.getAttribute(\n BLUX_ATTRIBUTES.recommendation_id,\n );\n if (!section) {\n return;\n }\n\n if (!this.sectionViewCollectedSections.includes(section)) {\n this.sendEvent(\n new AddSectionViewEvent({\n section,\n recommendation_id: recommendationId ?? undefined,\n }),\n );\n this.sectionViewCollectedSections.push(section);\n }\n }\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 count: 0,\n metadata: {},\n timestamp: Number(new Date().toISOString()),\n recommendation_id: null,\n };\n }\n }\n\n public async getItemRelatedRec(\n rec: ItemRelatedRec,\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 count: 0,\n metadata: {},\n timestamp: Number(new Date().toISOString()),\n recommendation_id: null,\n };\n }\n }\n\n public async getItemsRelatedRec(\n rec: ItemsRelatedRec,\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 count: 0,\n metadata: {},\n timestamp: Number(new Date().toISOString()),\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 count: 0,\n metadata: {},\n timestamp: Number(new Date().toISOString()),\n recommendation_id: null,\n };\n }\n }\n}\n"]}
|
package/dist/src/apis/APIs.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import type { InferencePipelineResponse } from "../utils/zodSchemas";
|
|
2
3
|
import type { Serialize } from "../utils/Base";
|
|
3
4
|
declare enum HttpMethod {
|
|
4
5
|
GET = "get",
|
|
@@ -37,9 +38,9 @@ export declare namespace APIs {
|
|
|
37
38
|
sdk_version: string;
|
|
38
39
|
timezone: string;
|
|
39
40
|
isVisitHandlingInSdk: boolean;
|
|
41
|
+
blux_user_id?: string | undefined;
|
|
40
42
|
device_id?: import("bson-objectid").default | undefined;
|
|
41
43
|
country_code?: "AF" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AI" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BM" | "BT" | "BO" | "BA" | "BW" | "BR" | "IO" | "BN" | "BG" | "BF" | "BI" | "KH" | "CM" | "CV" | "KY" | "CF" | "TD" | "CL" | "CN" | "CO" | "KM" | "CG" | "CD" | "CK" | "CR" | "CI" | "HR" | "CU" | "CY" | "CZ" | "DK" | "DJ" | "DM" | "DO" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FK" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GI" | "GR" | "GL" | "GD" | "GP" | "GU" | "GT" | "GN" | "GW" | "HT" | "VA" | "HN" | "HK" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IL" | "IT" | "JM" | "JP" | "JO" | "KE" | "KI" | "KP" | "KR" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LY" | "LI" | "LT" | "LU" | "MO" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MH" | "MQ" | "MR" | "MU" | "YT" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "MM" | "NA" | "NR" | "NP" | "NL" | "NC" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "MP" | "NO" | "OM" | "PK" | "PW" | "PS" | "PA" | "PG" | "PY" | "GY" | "PE" | "PH" | "PL" | "PT" | "PR" | "QA" | "RO" | "RU" | "KZ" | "RW" | "RE" | "BL" | "SH" | "KN" | "LC" | "MF" | "PM" | "VC" | "WS" | "SM" | "ST" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SK" | "SI" | "SB" | "SO" | "ZA" | "SS" | "ES" | "LK" | "SD" | "SR" | "SZ" | "SE" | "CH" | "SY" | "TW" | "TJ" | "TZ" | "TH" | "TL" | "TG" | "TK" | "TO" | "TT" | "TN" | "TR" | "TM" | "TC" | "TV" | "UG" | "UA" | "AE" | "GB" | "US" | "CA" | "UY" | "UZ" | "VU" | "VE" | "VN" | "VG" | "VI" | "WF" | "YE" | "ZM" | "ZW" | undefined;
|
|
42
|
-
blux_user_id?: string | undefined;
|
|
43
44
|
}, {
|
|
44
45
|
device_model: string;
|
|
45
46
|
language_code: string;
|
|
@@ -48,10 +49,10 @@ export declare namespace APIs {
|
|
|
48
49
|
sdk_type: string;
|
|
49
50
|
sdk_version: string;
|
|
50
51
|
timezone: string;
|
|
52
|
+
blux_user_id?: string | undefined;
|
|
51
53
|
device_id?: string | undefined;
|
|
52
54
|
country_code?: unknown;
|
|
53
55
|
isVisitHandlingInSdk?: boolean | undefined;
|
|
54
|
-
blux_user_id?: string | undefined;
|
|
55
56
|
}>;
|
|
56
57
|
type Body = Serialize<z.input<typeof bodySchema>>;
|
|
57
58
|
const pathSchema: z.ZodObject<{
|
|
@@ -132,11 +133,11 @@ export declare namespace APIs {
|
|
|
132
133
|
application_id: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("bson-objectid").default, string>;
|
|
133
134
|
blux_user_id: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("bson-objectid").default, string>;
|
|
134
135
|
}, "strip", z.ZodTypeAny, {
|
|
135
|
-
blux_user_id: import("bson-objectid").default;
|
|
136
136
|
application_id: import("bson-objectid").default;
|
|
137
|
+
blux_user_id: import("bson-objectid").default;
|
|
137
138
|
}, {
|
|
138
|
-
blux_user_id: string;
|
|
139
139
|
application_id: string;
|
|
140
|
+
blux_user_id: string;
|
|
140
141
|
}>;
|
|
141
142
|
type PathParam = Serialize<z.input<typeof pathSchema>>;
|
|
142
143
|
const bodySchema: z.ZodObject<{
|
|
@@ -215,52 +216,6 @@ export declare namespace APIs {
|
|
|
215
216
|
type Body = Serialize<z.input<typeof bodySchema>>;
|
|
216
217
|
type ResponseData = boolean;
|
|
217
218
|
}
|
|
218
|
-
namespace bluxUsersGetItemRecommendations {
|
|
219
|
-
const name = "bluxUsersGetItemRecommendations";
|
|
220
|
-
const path: string;
|
|
221
|
-
const method = HttpMethod.POST;
|
|
222
|
-
const bodySchema: z.ZodObject<{
|
|
223
|
-
call_type: z.ZodString;
|
|
224
|
-
limit: z.ZodNumber;
|
|
225
|
-
offset: z.ZodDefault<z.ZodNumber>;
|
|
226
|
-
item_ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
227
|
-
options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
228
|
-
}, "strip", z.ZodTypeAny, {
|
|
229
|
-
call_type: string;
|
|
230
|
-
limit: number;
|
|
231
|
-
offset: number;
|
|
232
|
-
options?: Record<string, any> | undefined;
|
|
233
|
-
item_ids?: string[] | undefined;
|
|
234
|
-
}, {
|
|
235
|
-
call_type: string;
|
|
236
|
-
limit: number;
|
|
237
|
-
options?: Record<string, any> | undefined;
|
|
238
|
-
offset?: number | undefined;
|
|
239
|
-
item_ids?: string[] | undefined;
|
|
240
|
-
}>;
|
|
241
|
-
type Body = Serialize<z.input<typeof bodySchema>>;
|
|
242
|
-
const pathSchema: z.ZodObject<{
|
|
243
|
-
application_id: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("bson-objectid").default, string>;
|
|
244
|
-
blux_user_id: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("bson-objectid").default, string>;
|
|
245
|
-
}, "strip", z.ZodTypeAny, {
|
|
246
|
-
blux_user_id: import("bson-objectid").default;
|
|
247
|
-
application_id: import("bson-objectid").default;
|
|
248
|
-
}, {
|
|
249
|
-
blux_user_id: string;
|
|
250
|
-
application_id: string;
|
|
251
|
-
}>;
|
|
252
|
-
type PathParam = Serialize<z.input<typeof pathSchema>>;
|
|
253
|
-
type ResponseData = {
|
|
254
|
-
recommendation_id?: string;
|
|
255
|
-
items: string[];
|
|
256
|
-
metadata: Record<string, any>;
|
|
257
|
-
status: {
|
|
258
|
-
is_success: boolean;
|
|
259
|
-
code: number;
|
|
260
|
-
message?: string;
|
|
261
|
-
};
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
219
|
namespace bluxUsersUpdateUserProperties {
|
|
265
220
|
const name = "bluxUsersUpdateUserProperties";
|
|
266
221
|
const path: string;
|
|
@@ -350,5 +305,73 @@ export declare namespace APIs {
|
|
|
350
305
|
blux_user_id: string;
|
|
351
306
|
};
|
|
352
307
|
}
|
|
308
|
+
namespace bluxUsersGetItemRecommendationsV2 {
|
|
309
|
+
const name = "bluxUsersGetItemRecommendationsV2";
|
|
310
|
+
const path: string;
|
|
311
|
+
const method = HttpMethod.POST;
|
|
312
|
+
const bodySchema: z.ZodObject<z.objectUtil.extendShape<Pick<{
|
|
313
|
+
application_id: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("bson-objectid").default, string>;
|
|
314
|
+
blux_user_id: z.ZodDefault<z.ZodNullable<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("bson-objectid").default, string>>>;
|
|
315
|
+
pipeline: z.ZodArray<z.ZodObject<{
|
|
316
|
+
name: z.ZodString;
|
|
317
|
+
kwargs: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
318
|
+
}, "strip", z.ZodTypeAny, {
|
|
319
|
+
name: string;
|
|
320
|
+
kwargs: Record<string, any>;
|
|
321
|
+
}, {
|
|
322
|
+
name: string;
|
|
323
|
+
kwargs: Record<string, any>;
|
|
324
|
+
}>, "many">;
|
|
325
|
+
item_id: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
326
|
+
item_ids: z.ZodDefault<z.ZodNullable<z.ZodArray<z.ZodString, "many">>>;
|
|
327
|
+
category_id: z.ZodDefault<z.ZodNullable<z.ZodObject<{
|
|
328
|
+
depth: z.ZodEnum<["1", "2", "3"]>;
|
|
329
|
+
value: z.ZodString;
|
|
330
|
+
}, "strip", z.ZodTypeAny, {
|
|
331
|
+
value: string;
|
|
332
|
+
depth: "1" | "2" | "3";
|
|
333
|
+
}, {
|
|
334
|
+
value: string;
|
|
335
|
+
depth: "1" | "2" | "3";
|
|
336
|
+
}>>>;
|
|
337
|
+
limit: z.ZodNumber;
|
|
338
|
+
offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
339
|
+
}, "item_id" | "item_ids" | "category_id" | "limit" | "offset">, {
|
|
340
|
+
call_type: z.ZodString;
|
|
341
|
+
}>, "strip", z.ZodTypeAny, {
|
|
342
|
+
item_id: string | null;
|
|
343
|
+
item_ids: string[] | null;
|
|
344
|
+
category_id: {
|
|
345
|
+
value: string;
|
|
346
|
+
depth: "1" | "2" | "3";
|
|
347
|
+
} | null;
|
|
348
|
+
limit: number;
|
|
349
|
+
offset: number;
|
|
350
|
+
call_type: string;
|
|
351
|
+
}, {
|
|
352
|
+
limit: number;
|
|
353
|
+
call_type: string;
|
|
354
|
+
item_id?: string | null | undefined;
|
|
355
|
+
item_ids?: string[] | null | undefined;
|
|
356
|
+
category_id?: {
|
|
357
|
+
value: string;
|
|
358
|
+
depth: "1" | "2" | "3";
|
|
359
|
+
} | null | undefined;
|
|
360
|
+
offset?: number | undefined;
|
|
361
|
+
}>;
|
|
362
|
+
type Body = Serialize<z.input<typeof bodySchema>>;
|
|
363
|
+
const pathSchema: z.ZodObject<{
|
|
364
|
+
application_id: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("bson-objectid").default, string>;
|
|
365
|
+
blux_user_id: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, import("bson-objectid").default, string>;
|
|
366
|
+
}, "strip", z.ZodTypeAny, {
|
|
367
|
+
application_id: import("bson-objectid").default;
|
|
368
|
+
blux_user_id: import("bson-objectid").default;
|
|
369
|
+
}, {
|
|
370
|
+
application_id: string;
|
|
371
|
+
blux_user_id: string;
|
|
372
|
+
}>;
|
|
373
|
+
type PathParam = Serialize<z.input<typeof pathSchema>>;
|
|
374
|
+
type ResponseData = InferencePipelineResponse;
|
|
375
|
+
}
|
|
353
376
|
}
|
|
354
377
|
export {};
|
package/dist/src/apis/APIs.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-namespace */
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import { countryCodeWithLowerCaseSchema, customPropertiesRequestSchema, customPropertiesSchema, dateSchema, objectIdSchema, } from "../utils/zodSchemas";
|
|
3
|
+
import { countryCodeWithLowerCaseSchema, customPropertiesRequestSchema, customPropertiesSchema, dateSchema, inferencePipelineRequestSchema, objectIdSchema, } from "../utils/zodSchemas";
|
|
4
4
|
var HttpMethod;
|
|
5
5
|
(function (HttpMethod) {
|
|
6
6
|
HttpMethod["GET"] = "get";
|
|
@@ -15,6 +15,7 @@ export var DevicePlatform;
|
|
|
15
15
|
DevicePlatform["browser"] = "browser";
|
|
16
16
|
})(DevicePlatform || (DevicePlatform = {}));
|
|
17
17
|
const applicationsRoot = "/applications/{application_id}";
|
|
18
|
+
const applicationsRootV2 = "/v2/applications/{application_id}";
|
|
18
19
|
export var APIs;
|
|
19
20
|
(function (APIs) {
|
|
20
21
|
let bluxUsersInitialize;
|
|
@@ -93,23 +94,6 @@ export var APIs;
|
|
|
93
94
|
})),
|
|
94
95
|
});
|
|
95
96
|
})(bluxUsersCollectEvents = APIs.bluxUsersCollectEvents || (APIs.bluxUsersCollectEvents = {}));
|
|
96
|
-
let bluxUsersGetItemRecommendations;
|
|
97
|
-
(function (bluxUsersGetItemRecommendations) {
|
|
98
|
-
bluxUsersGetItemRecommendations.name = "bluxUsersGetItemRecommendations";
|
|
99
|
-
bluxUsersGetItemRecommendations.path = `${applicationsRoot}/blux-users/{blux_user_id}/item-recommendations`;
|
|
100
|
-
bluxUsersGetItemRecommendations.method = HttpMethod.POST;
|
|
101
|
-
bluxUsersGetItemRecommendations.bodySchema = z.object({
|
|
102
|
-
call_type: z.string(),
|
|
103
|
-
limit: z.number(),
|
|
104
|
-
offset: z.number().default(0),
|
|
105
|
-
item_ids: z.array(z.string()).optional(),
|
|
106
|
-
options: z.record(z.string(), z.any()).optional(),
|
|
107
|
-
});
|
|
108
|
-
bluxUsersGetItemRecommendations.pathSchema = z.object({
|
|
109
|
-
application_id: objectIdSchema,
|
|
110
|
-
blux_user_id: objectIdSchema,
|
|
111
|
-
});
|
|
112
|
-
})(bluxUsersGetItemRecommendations = APIs.bluxUsersGetItemRecommendations || (APIs.bluxUsersGetItemRecommendations = {}));
|
|
113
97
|
let bluxUsersUpdateUserProperties;
|
|
114
98
|
(function (bluxUsersUpdateUserProperties) {
|
|
115
99
|
bluxUsersUpdateUserProperties.name = "bluxUsersUpdateUserProperties";
|
|
@@ -143,5 +127,26 @@ export var APIs;
|
|
|
143
127
|
blux_user_id: objectIdSchema,
|
|
144
128
|
});
|
|
145
129
|
})(bluxUsersUpdateCustomUserProperties = APIs.bluxUsersUpdateCustomUserProperties || (APIs.bluxUsersUpdateCustomUserProperties = {}));
|
|
130
|
+
let bluxUsersGetItemRecommendationsV2;
|
|
131
|
+
(function (bluxUsersGetItemRecommendationsV2) {
|
|
132
|
+
bluxUsersGetItemRecommendationsV2.name = "bluxUsersGetItemRecommendationsV2";
|
|
133
|
+
bluxUsersGetItemRecommendationsV2.path = `${applicationsRootV2}/blux-users/{blux_user_id}/item-recommendations`;
|
|
134
|
+
bluxUsersGetItemRecommendationsV2.method = HttpMethod.POST;
|
|
135
|
+
bluxUsersGetItemRecommendationsV2.bodySchema = inferencePipelineRequestSchema
|
|
136
|
+
.pick({
|
|
137
|
+
item_id: true,
|
|
138
|
+
item_ids: true,
|
|
139
|
+
category_id: true,
|
|
140
|
+
limit: true,
|
|
141
|
+
offset: true,
|
|
142
|
+
})
|
|
143
|
+
.extend({
|
|
144
|
+
call_type: z.string(),
|
|
145
|
+
});
|
|
146
|
+
bluxUsersGetItemRecommendationsV2.pathSchema = z.object({
|
|
147
|
+
application_id: objectIdSchema,
|
|
148
|
+
blux_user_id: objectIdSchema,
|
|
149
|
+
});
|
|
150
|
+
})(bluxUsersGetItemRecommendationsV2 = APIs.bluxUsersGetItemRecommendationsV2 || (APIs.bluxUsersGetItemRecommendationsV2 = {}));
|
|
146
151
|
})(APIs || (APIs = {}));
|
|
147
152
|
//# sourceMappingURL=APIs.js.map
|