connectbase-client 1.9.1 → 1.10.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/CHANGELOG.md +50 -0
- package/dist/connect-base.umd.js +3 -3
- package/dist/index.d.mts +157 -0
- package/dist/index.d.ts +157 -0
- package/dist/index.js +116 -1
- package/dist/index.mjs +116 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -4436,11 +4436,13 @@ var OAuthAPI = class {
|
|
|
4436
4436
|
reject(new Error(event.data.error));
|
|
4437
4437
|
return;
|
|
4438
4438
|
}
|
|
4439
|
+
const rawEmail = event.data.email;
|
|
4439
4440
|
const result = {
|
|
4440
4441
|
member_id: event.data.member_id,
|
|
4441
4442
|
access_token: event.data.access_token,
|
|
4442
4443
|
refresh_token: event.data.refresh_token,
|
|
4443
|
-
is_new_member: event.data.is_new_member === "true" || event.data.is_new_member === true
|
|
4444
|
+
is_new_member: event.data.is_new_member === "true" || event.data.is_new_member === true,
|
|
4445
|
+
...typeof rawEmail === "string" && rawEmail.length > 0 ? { email: rawEmail } : {}
|
|
4444
4446
|
};
|
|
4445
4447
|
this.http.setTokens(result.access_token, result.refresh_token);
|
|
4446
4448
|
resolve(result);
|
|
@@ -4508,11 +4510,13 @@ var OAuthAPI = class {
|
|
|
4508
4510
|
if (!accessToken || !refreshToken || !memberId) {
|
|
4509
4511
|
return null;
|
|
4510
4512
|
}
|
|
4513
|
+
const emailParam = params.get("email");
|
|
4511
4514
|
const result = {
|
|
4512
4515
|
access_token: accessToken,
|
|
4513
4516
|
refresh_token: refreshToken,
|
|
4514
4517
|
member_id: memberId,
|
|
4515
4518
|
is_new_member: params.get("is_new_member") === "true",
|
|
4519
|
+
...emailParam ? { email: emailParam } : {},
|
|
4516
4520
|
state: params.get("state") || void 0
|
|
4517
4521
|
};
|
|
4518
4522
|
if (window.opener) {
|
|
@@ -4550,6 +4554,7 @@ var OAuthAPI = class {
|
|
|
4550
4554
|
refresh_token: resp.refresh_token,
|
|
4551
4555
|
member_id: resp.member_id,
|
|
4552
4556
|
is_new_member: resp.is_new_member,
|
|
4557
|
+
...resp.email ? { email: resp.email } : {},
|
|
4553
4558
|
state: params.get("state") || void 0
|
|
4554
4559
|
};
|
|
4555
4560
|
if (window.opener) {
|
|
@@ -5226,6 +5231,53 @@ var PushAPI = class {
|
|
|
5226
5231
|
const prefix = this.getPublicPrefix();
|
|
5227
5232
|
await this.http.delete(`${prefix}/push/devices/${encodeURIComponent(deviceToken)}`);
|
|
5228
5233
|
}
|
|
5234
|
+
// ============ Server-side Send (Functions / cb_sk_ 전용) ============
|
|
5235
|
+
/**
|
|
5236
|
+
* 회원 ID 목록으로 푸시 발송 — Functions / cb_sk_ 인증 환경 전용.
|
|
5237
|
+
*
|
|
5238
|
+
* 백엔드 라우트 `POST /v1/apps/:appID/push/send` 는 콘솔 JWT 또는 User Secret Key
|
|
5239
|
+
* (`cb_sk_`) 만 받는다. 브라우저 SDK 의 Public Key(`cb_pk_`) 인스턴스에서는 호출
|
|
5240
|
+
* 자체가 차단되며, 권한 누설을 막기 위해 명확한 에러를 던진다.
|
|
5241
|
+
*
|
|
5242
|
+
* @param appId 발송 대상 앱 ID (cb_sk_ 환경은 user 단위 권한이므로 명시 전달).
|
|
5243
|
+
* @param memberIds 받는 회원 ID 배열 (UUID).
|
|
5244
|
+
* @param payload 푸시 내용/옵션.
|
|
5245
|
+
*
|
|
5246
|
+
* @example
|
|
5247
|
+
* ```ts
|
|
5248
|
+
* // ConnectBase Function (Node.js, secrets.CB_SECRET_KEY 주입)
|
|
5249
|
+
* const result = await cb.push.sendToMembers(APP_ID, [memberId], {
|
|
5250
|
+
* title: '새 알림',
|
|
5251
|
+
* body: '확인해보세요',
|
|
5252
|
+
* data: { route: '/notifications' },
|
|
5253
|
+
* })
|
|
5254
|
+
* console.log(result.message_id, result.sent_count)
|
|
5255
|
+
* ```
|
|
5256
|
+
*/
|
|
5257
|
+
async sendToMembers(appId, memberIds, payload) {
|
|
5258
|
+
if (this.http.hasPublicKey()) {
|
|
5259
|
+
throw new Error(
|
|
5260
|
+
"cb.push.sendToMembers() \uB294 User Secret Key(cb_sk_) \uB610\uB294 \uCF58\uC194 JWT \uC778\uC99D\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. Public Key(cb_pk_) SDK \uC778\uC2A4\uD134\uC2A4\uB85C\uB294 \uD638\uCD9C\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 Functions \uD658\uACBD\uC5D0\uC11C \uC0AC\uC6A9\uD558\uC138\uC694."
|
|
5261
|
+
);
|
|
5262
|
+
}
|
|
5263
|
+
if (memberIds.length === 0) {
|
|
5264
|
+
throw new Error("cb.push.sendToMembers(): memberIds \uAC00 \uBE44\uC5B4\uC788\uC2B5\uB2C8\uB2E4.");
|
|
5265
|
+
}
|
|
5266
|
+
const body = {
|
|
5267
|
+
target_type: "members",
|
|
5268
|
+
target_member_ids: memberIds,
|
|
5269
|
+
title: payload.title,
|
|
5270
|
+
body: payload.body,
|
|
5271
|
+
...payload.imageUrl !== void 0 ? { image_url: payload.imageUrl } : {},
|
|
5272
|
+
...payload.data !== void 0 ? { data: payload.data } : {},
|
|
5273
|
+
...payload.platforms !== void 0 ? { platforms: payload.platforms } : {},
|
|
5274
|
+
...payload.ttlSeconds !== void 0 ? { ttl: payload.ttlSeconds } : {},
|
|
5275
|
+
...payload.priority !== void 0 ? { priority: payload.priority } : {},
|
|
5276
|
+
...payload.clickAction !== void 0 ? { click_action: payload.clickAction } : {},
|
|
5277
|
+
...payload.scheduledAt !== void 0 ? { scheduled_at: payload.scheduledAt } : {}
|
|
5278
|
+
};
|
|
5279
|
+
return this.http.post(`/v1/apps/${appId}/push/send`, body);
|
|
5280
|
+
}
|
|
5229
5281
|
// ============ Helper Methods ============
|
|
5230
5282
|
/**
|
|
5231
5283
|
* 브라우저 고유 ID 생성 (localStorage에 저장)
|
|
@@ -8135,6 +8187,15 @@ var SessionManager = class {
|
|
|
8135
8187
|
return generateId();
|
|
8136
8188
|
}
|
|
8137
8189
|
};
|
|
8190
|
+
function buildAnalyticsQuery(options) {
|
|
8191
|
+
if (!options) return "";
|
|
8192
|
+
const params = new URLSearchParams();
|
|
8193
|
+
if (options.start_date !== void 0) params.set("start_date", String(options.start_date));
|
|
8194
|
+
if (options.end_date !== void 0) params.set("end_date", String(options.end_date));
|
|
8195
|
+
if (options.limit !== void 0) params.set("limit", String(options.limit));
|
|
8196
|
+
const qs = params.toString();
|
|
8197
|
+
return qs ? `?${qs}` : "";
|
|
8198
|
+
}
|
|
8138
8199
|
function parseUTM() {
|
|
8139
8200
|
if (typeof window === "undefined") return {};
|
|
8140
8201
|
try {
|
|
@@ -8403,6 +8464,60 @@ var AnalyticsAPI = class {
|
|
|
8403
8464
|
async flush() {
|
|
8404
8465
|
await this.flushQueue();
|
|
8405
8466
|
}
|
|
8467
|
+
/**
|
|
8468
|
+
* 인기 페이지 조회 (콘솔 JWT 또는 User Secret Key `cb_sk_` 인증 필요).
|
|
8469
|
+
*
|
|
8470
|
+
* 브라우저 환경에서 Public Key(`cb_pk_`) 만 가진 SDK 인스턴스로는 호출이 차단된다.
|
|
8471
|
+
* Functions / 어드민 앱 등 cb_sk_ 환경에서 사용하라.
|
|
8472
|
+
*
|
|
8473
|
+
* @param storageWebId 조회할 웹스토리지 ID. 미지정 시 `init()` 에 전달된 ID 사용.
|
|
8474
|
+
* @param options 기간/limit 옵션
|
|
8475
|
+
* @example
|
|
8476
|
+
* ```ts
|
|
8477
|
+
* const { pages } = await cb.analytics.getPopularPages('019d8...', { limit: 20 })
|
|
8478
|
+
* ```
|
|
8479
|
+
*/
|
|
8480
|
+
async getPopularPages(storageWebId, options) {
|
|
8481
|
+
const id = this.requireServerSideStorageId(storageWebId, "getPopularPages");
|
|
8482
|
+
const qs = buildAnalyticsQuery(options);
|
|
8483
|
+
return this.http.get(`/v1/storages/web/${id}/popular-pages${qs}`);
|
|
8484
|
+
}
|
|
8485
|
+
/**
|
|
8486
|
+
* 페이지 전환 플로우(Sankey) 조회 — JWT/cb_sk_ 인증 필요.
|
|
8487
|
+
*/
|
|
8488
|
+
async getNavigationFlow(storageWebId, options) {
|
|
8489
|
+
const id = this.requireServerSideStorageId(storageWebId, "getNavigationFlow");
|
|
8490
|
+
const qs = buildAnalyticsQuery(options);
|
|
8491
|
+
return this.http.get(`/v1/storages/web/${id}/navigation/flow${qs}`);
|
|
8492
|
+
}
|
|
8493
|
+
/**
|
|
8494
|
+
* 방문자 목록 조회 — JWT/cb_sk_ 인증 필요.
|
|
8495
|
+
*/
|
|
8496
|
+
async getVisitors(storageWebId, options) {
|
|
8497
|
+
const id = this.requireServerSideStorageId(storageWebId, "getVisitors");
|
|
8498
|
+
const params = new URLSearchParams();
|
|
8499
|
+
if (options?.limit !== void 0) params.set("limit", String(options.limit));
|
|
8500
|
+
if (options?.offset !== void 0) params.set("offset", String(options.offset));
|
|
8501
|
+
if (options?.sort_by) params.set("sort_by", options.sort_by);
|
|
8502
|
+
const qs = params.toString() ? `?${params.toString()}` : "";
|
|
8503
|
+
return this.http.get(`/v1/storages/web/${id}/visitors${qs}`);
|
|
8504
|
+
}
|
|
8505
|
+
/**
|
|
8506
|
+
* 조회 메서드 공통 가드 — Public Key 인증 SDK 인스턴스에서는 명확한 에러를 던진다.
|
|
8507
|
+
* 백엔드 라우트는 cb_pk_ 를 거부하므로 호출 자체를 막는 것이 디버깅에 유리.
|
|
8508
|
+
*/
|
|
8509
|
+
requireServerSideStorageId(storageWebId, methodName) {
|
|
8510
|
+
if (this.http.hasPublicKey()) {
|
|
8511
|
+
throw new Error(
|
|
8512
|
+
`cb.analytics.${methodName}() \uB294 \uCF58\uC194 JWT \uB610\uB294 User Secret Key(cb_sk_) \uC778\uC99D\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. \uBE0C\uB77C\uC6B0\uC800 SDK \uC758 Public Key(cb_pk_) \uB85C\uB294 \uD638\uCD9C\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 \u2014 Functions \uD658\uACBD\uC5D0\uC11C \uC0AC\uC6A9\uD558\uC138\uC694.`
|
|
8513
|
+
);
|
|
8514
|
+
}
|
|
8515
|
+
const id = storageWebId ?? this.storageWebId;
|
|
8516
|
+
if (!id) {
|
|
8517
|
+
throw new Error(`cb.analytics.${methodName}() \uD638\uCD9C \uC2DC storageWebId \uAC00 \uD544\uC694\uD569\uB2C8\uB2E4 (init \uB610\uB294 \uC778\uC790\uB85C \uC804\uB2EC).`);
|
|
8518
|
+
}
|
|
8519
|
+
return id;
|
|
8520
|
+
}
|
|
8406
8521
|
/**
|
|
8407
8522
|
* 세션 매니저 접근 (고급 사용자용).
|
|
8408
8523
|
*
|