@blux.ai/web-sdk 1.0.0-rc4 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/package.json
CHANGED
package/dist/src/BluxClient.js
CHANGED
|
@@ -84,7 +84,7 @@ export class BluxClient {
|
|
|
84
84
|
applicationId,
|
|
85
85
|
deviceId: device_id,
|
|
86
86
|
});
|
|
87
|
-
|
|
87
|
+
function updateUrlAndRef() {
|
|
88
88
|
const url = LocalStorage.getUrl();
|
|
89
89
|
if (window.location.href !== url) {
|
|
90
90
|
// 페이지 이동 시 url, ref 업데이트
|
|
@@ -93,7 +93,9 @@ export class BluxClient {
|
|
|
93
93
|
// 페이지 이동 시 page_visit event 자동 수집
|
|
94
94
|
client.sendEvent(new AddPageVisitEvent({}));
|
|
95
95
|
}
|
|
96
|
-
}
|
|
96
|
+
}
|
|
97
|
+
updateUrlAndRef();
|
|
98
|
+
const mutationObserver = new MutationObserver(updateUrlAndRef);
|
|
97
99
|
const mutationObserverConfig = { subtree: true, childList: true };
|
|
98
100
|
mutationObserver.observe(document.body, mutationObserverConfig);
|
|
99
101
|
return client;
|
|
@@ -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 exhaustMap,\n filter,\n firstValueFrom,\n map,\n observeOn,\n throwError,\n timeout,\n withLatestFrom,\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\";\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;\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 constructor() {\n this.api = axios.create({\n baseURL: \"https://api.blux.ai/prod\",\n });\n this.requestQueue$\n .pipe(\n filter((queue) => queue.length > 0),\n withLatestFrom(this.bluxUser$.pipe(filterNullable())),\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 user_id: bluxUser.userId,\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\n private generateApiHeader({ bluxApiKey }: { bluxApiKey: string }) {\n return {\n Authorization: bluxApiKey,\n };\n }\n\n public static async init({\n applicationId,\n bluxApiKey,\n }: {\n applicationId: string;\n bluxApiKey: string;\n }): Promise<BluxClient | null> {\n const client = new BluxClient();\n client.sendEvent(new VisitEvent({}));\n try {\n Logger.debug(`Init with application id: ${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 {\n data: { blux_user_id, device_id },\n } = await initialize(\n client.api,\n { application_id: 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: client.sdkInfo.version,\n sdk_type: client.sdkInfo.type,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n },\n client.generateApiHeader({\n bluxApiKey,\n }),\n );\n\n LocalStorage.setDeviceId(device_id);\n\n client.bluxUser$.next({\n id: blux_user_id,\n bluxApiKey,\n applicationId,\n deviceId: device_id,\n });\n\n const mutationObserver = new MutationObserver(() => {\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 client.sendEvent(new AddPageVisitEvent({}));\n }\n });\n const mutationObserverConfig = { subtree: true, childList: true };\n mutationObserver.observe(document.body, mutationObserverConfig);\n\n return client;\n } catch (error) {\n Logger.error(error, { tags: { from: \"init\" } });\n return null;\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((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 },\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"]}
|
|
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 exhaustMap,\n filter,\n firstValueFrom,\n map,\n observeOn,\n throwError,\n timeout,\n withLatestFrom,\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\";\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;\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 constructor() {\n this.api = axios.create({\n baseURL: \"https://api.blux.ai/prod\",\n });\n this.requestQueue$\n .pipe(\n filter((queue) => queue.length > 0),\n withLatestFrom(this.bluxUser$.pipe(filterNullable())),\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 user_id: bluxUser.userId,\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\n private generateApiHeader({ bluxApiKey }: { bluxApiKey: string }) {\n return {\n Authorization: bluxApiKey,\n };\n }\n\n public static async init({\n applicationId,\n bluxApiKey,\n }: {\n applicationId: string;\n bluxApiKey: string;\n }): Promise<BluxClient | null> {\n const client = new BluxClient();\n client.sendEvent(new VisitEvent({}));\n try {\n Logger.debug(`Init with application id: ${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 {\n data: { blux_user_id, device_id },\n } = await initialize(\n client.api,\n { application_id: 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: client.sdkInfo.version,\n sdk_type: client.sdkInfo.type,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n },\n client.generateApiHeader({\n bluxApiKey,\n }),\n );\n\n LocalStorage.setDeviceId(device_id);\n\n client.bluxUser$.next({\n id: blux_user_id,\n bluxApiKey,\n applicationId,\n deviceId: device_id,\n });\n\n function updateUrlAndRef() {\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 client.sendEvent(new AddPageVisitEvent({}));\n }\n }\n updateUrlAndRef();\n const mutationObserver = new MutationObserver(updateUrlAndRef);\n const mutationObserverConfig = { subtree: true, childList: true };\n mutationObserver.observe(document.body, mutationObserverConfig);\n\n return client;\n } catch (error) {\n Logger.error(error, { tags: { from: \"init\" } });\n return null;\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((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 },\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"]}
|