@apps-in-toss/web-bridge 2.5.1 → 2.6.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/bridge.d.ts CHANGED
@@ -22,6 +22,8 @@ export * from './setDeviceOrientation';
22
22
  export * from './checkoutPayment';
23
23
  export * from './requestTossPayPaysBilling';
24
24
  export * from './saveBase64Data';
25
+ export * from './openPDFViewer';
26
+ export * from './fetchAlbumItems';
25
27
  export * from './appsInTossSignTossCert';
26
28
  export * from './getGameCenterGameProfile';
27
29
  export * from './openGameCenterLeaderboard';
package/dist/bridge.js CHANGED
@@ -1 +1 @@
1
- import{createAsyncBridge,createConstantBridge,createEventBridge}from"@apps-in-toss/bridge-core";var createEvents=function(){return{emit:function emit(event,args){for(var callbacks=this.events[event]||[],i=0,length=callbacks.length;i<length;i++){callbacks[i](args)}},events:{},on:function on(event,cb){var _this=this;var _this_events,_event;((_this_events=this.events)[_event=event]||(_this_events[_event]=[])).push(cb);return function(){var _this_events_event;_this.events[event]=(_this_events_event=_this.events[event])===null||_this_events_event===void 0?void 0:_this_events_event.filter(function(i){return cb!==i})}}}};if(typeof window!=="undefined"){window.__GRANITE_NATIVE_EMITTER=createEvents()}export var closeView=createAsyncBridge("closeView");export var generateHapticFeedback=createAsyncBridge("generateHapticFeedback");export var share=createAsyncBridge("share");export var setSecureScreen=createAsyncBridge("setSecureScreen");export var setScreenAwakeMode=createAsyncBridge("setScreenAwakeMode");export var getNetworkStatus=createAsyncBridge("getNetworkStatus");export var setIosSwipeGestureEnabled=createAsyncBridge("setIosSwipeGestureEnabled");export var openURL=createAsyncBridge("openURL");export var openPermissionDialog=createAsyncBridge("openPermissionDialog");export var getPermission=createAsyncBridge("getPermission");export var requestPermission=createAsyncBridge("requestPermission");export var setClipboardText=createConstantBridge("setClipboardText");export var getClipboardText=createConstantBridge("getClipboardText");export var fetchContacts=createConstantBridge("fetchContacts");export var fetchAlbumPhotos=createConstantBridge("fetchAlbumPhotos");export var getCurrentLocation=createConstantBridge("getCurrentLocation");export var openCamera=createConstantBridge("openCamera");export var appLogin=createAsyncBridge("appLogin");export var eventLog=createAsyncBridge("eventLog");export var getTossShareLink=createAsyncBridge("getTossShareLink");export var setDeviceOrientation=createAsyncBridge("setDeviceOrientation");export var checkoutPayment=createAsyncBridge("checkoutPayment");export var requestTossPayPaysBilling=createAsyncBridge("requestTossPayPaysBilling");export var saveBase64Data=createAsyncBridge("saveBase64Data");export var appsInTossSignTossCert=createAsyncBridge("appsInTossSignTossCert");export var getGameCenterGameProfile=createAsyncBridge("getGameCenterGameProfile");export var openGameCenterLeaderboard=createAsyncBridge("openGameCenterLeaderboard");export var submitGameCenterLeaderBoardScore=createAsyncBridge("submitGameCenterLeaderBoardScore");export var getAnonymousKey=createAsyncBridge("getAnonymousKey");export var getUserKeyForGame=createAsyncBridge("getUserKeyForGame");export var grantPromotionReward=createAsyncBridge("grantPromotionReward");export var grantPromotionRewardForGame=createAsyncBridge("grantPromotionRewardForGame");export var getIsTossLoginIntegratedService=createAsyncBridge("getIsTossLoginIntegratedService");export var getServerTime=createAsyncBridge("getServerTime");export var requestReview=createAsyncBridge("requestReview");export var getLocale=createConstantBridge("getLocale");export var getSchemeUri=createConstantBridge("getSchemeUri");export var getPlatformOS=createConstantBridge("getPlatformOS");export var getOperationalEnvironment=createConstantBridge("getOperationalEnvironment");export var getTossAppVersion=createConstantBridge("getTossAppVersion");export var getDeviceId=createConstantBridge("getDeviceId");export var getGroupId=createConstantBridge("getGroupId");export var contactsViral=createEventBridge("contactsViral");export var startUpdateLocation=createEventBridge("startUpdateLocation");export var onVisibilityChangedByTransparentServiceWeb=createEventBridge("onVisibilityChangedByTransparentServiceWeb");
1
+ import{createAsyncBridge,createConstantBridge,createEventBridge}from"@apps-in-toss/bridge-core";var createEvents=function(){return{emit:function emit(event,args){for(var callbacks=this.events[event]||[],i=0,length=callbacks.length;i<length;i++){callbacks[i](args)}},events:{},on:function on(event,cb){var _this=this;var _this_events,_event;((_this_events=this.events)[_event=event]||(_this_events[_event]=[])).push(cb);return function(){var _this_events_event;_this.events[event]=(_this_events_event=_this.events[event])===null||_this_events_event===void 0?void 0:_this_events_event.filter(function(i){return cb!==i})}}}};if(typeof window!=="undefined"){window.__GRANITE_NATIVE_EMITTER=createEvents()}export var closeView=createAsyncBridge("closeView");export var generateHapticFeedback=createAsyncBridge("generateHapticFeedback");export var share=createAsyncBridge("share");export var setSecureScreen=createAsyncBridge("setSecureScreen");export var setScreenAwakeMode=createAsyncBridge("setScreenAwakeMode");export var getNetworkStatus=createAsyncBridge("getNetworkStatus");export var setIosSwipeGestureEnabled=createAsyncBridge("setIosSwipeGestureEnabled");export var openURL=createAsyncBridge("openURL");export var openPermissionDialog=createAsyncBridge("openPermissionDialog");export var getPermission=createAsyncBridge("getPermission");export var requestPermission=createAsyncBridge("requestPermission");export var setClipboardText=createConstantBridge("setClipboardText");export var getClipboardText=createConstantBridge("getClipboardText");export var fetchContacts=createConstantBridge("fetchContacts");export var fetchAlbumPhotos=createConstantBridge("fetchAlbumPhotos");export var getCurrentLocation=createConstantBridge("getCurrentLocation");export var openCamera=createConstantBridge("openCamera");export var appLogin=createAsyncBridge("appLogin");export var eventLog=createAsyncBridge("eventLog");export var getTossShareLink=createAsyncBridge("getTossShareLink");export var setDeviceOrientation=createAsyncBridge("setDeviceOrientation");export var checkoutPayment=createAsyncBridge("checkoutPayment");export var requestTossPayPaysBilling=createAsyncBridge("requestTossPayPaysBilling");export var saveBase64Data=createAsyncBridge("saveBase64Data");export var openPDFViewer=createAsyncBridge("openPDFViewer");export var fetchAlbumItems=createAsyncBridge("fetchAlbumItems");export var appsInTossSignTossCert=createAsyncBridge("appsInTossSignTossCert");export var getGameCenterGameProfile=createAsyncBridge("getGameCenterGameProfile");export var openGameCenterLeaderboard=createAsyncBridge("openGameCenterLeaderboard");export var submitGameCenterLeaderBoardScore=createAsyncBridge("submitGameCenterLeaderBoardScore");export var getAnonymousKey=createAsyncBridge("getAnonymousKey");export var getUserKeyForGame=createAsyncBridge("getUserKeyForGame");export var grantPromotionReward=createAsyncBridge("grantPromotionReward");export var grantPromotionRewardForGame=createAsyncBridge("grantPromotionRewardForGame");export var getIsTossLoginIntegratedService=createAsyncBridge("getIsTossLoginIntegratedService");export var getServerTime=createAsyncBridge("getServerTime");export var requestReview=createAsyncBridge("requestReview");export var getLocale=createConstantBridge("getLocale");export var getSchemeUri=createConstantBridge("getSchemeUri");export var getPlatformOS=createConstantBridge("getPlatformOS");export var getOperationalEnvironment=createConstantBridge("getOperationalEnvironment");export var getTossAppVersion=createConstantBridge("getTossAppVersion");export var getDeviceId=createConstantBridge("getDeviceId");export var getGroupId=createConstantBridge("getGroupId");export var contactsViral=createEventBridge("contactsViral");export var startUpdateLocation=createEventBridge("startUpdateLocation");export var onVisibilityChangedByTransparentServiceWeb=createEventBridge("onVisibilityChangedByTransparentServiceWeb");
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @public
3
+ * @category 앨범
4
+ * @name AlbumItemType
5
+ * @description 앨범에서 가져올 미디어 유형이에요.
6
+ */
7
+ export type AlbumItemType = "PHOTO" | "VIDEO";
8
+ /**
9
+ * @public
10
+ * @category 앨범
11
+ * @name FetchAlbumItemsOptions
12
+ * @description 앨범에서 사진·동영상을 선택할 때 사용하는 옵션이에요.
13
+ * @property {Array<"PHOTO" | "VIDEO">} [types] - 가져올 미디어 유형 목록이에요. 지정하지 않으면 사진만 가져와요.
14
+ * @property {number} [maxCount] - 가져올 항목의 최대 개수예요. 기본값은 10이에요.
15
+ * @property {number} [maxWidth] - 이미지의 최대 폭이에요. 단위는 픽셀이에요. 기본값은 1024이에요.
16
+ * @property {boolean} [base64] - 이미지의 `dataUri`를 Base64 문자열로 반환할지 여부예요. 기본값은 `false`이에요.
17
+ */
18
+ export interface FetchAlbumItemsOptions {
19
+ types?: AlbumItemType[];
20
+ maxCount?: number;
21
+ maxWidth?: number;
22
+ base64?: boolean;
23
+ }
24
+ /**
25
+ * @public
26
+ * @category 앨범
27
+ * @name AlbumItemResponse
28
+ * @description 앨범에서 선택한 미디어 항목이에요.
29
+ * @property {string} id - 항목의 고유 ID예요.
30
+ * @property {string} dataUri - 미디어 데이터 URI예요. `type`이 `PHOTO`면서 `base64` 옵션이 `true`이면 Base64 문자열로 반환돼요.
31
+ * @property {"PHOTO" | "VIDEO"} type - 미디어 유형이에요.
32
+ */
33
+ export interface AlbumItemResponse {
34
+ id: string;
35
+ dataUri: string;
36
+ type: AlbumItemType;
37
+ }
38
+ /**
39
+ * @public
40
+ * @category 앨범
41
+ * @name fetchAlbumItems
42
+ * @description 사용자 앨범에서 사진·동영상을 선택해 가져와요. 사용자가 선택을 취소하면 빈 배열 `[]`을 반환해요.
43
+ *
44
+ * @param {FetchAlbumItemsOptions} [options] - 조회 옵션을 담은 객체예요.
45
+ * @returns {Promise<AlbumItemResponse[]>} 선택한 미디어 목록을 반환해요. 취소 시 빈 배열을 반환해요.
46
+ *
47
+ * @throws 다음 에러 코드가 발생할 수 있어요.
48
+ * - {code: `NOT_ALLOWED`}: 앨범 접근이 허용되지 않았을 때
49
+ * - {code: `INVALID_REQUEST`}: 요청 파라미터가 올바르지 않을 때
50
+ * - {code: `INVALID_DATA`}: 미디어 데이터가 유효하지 않을 때
51
+ * - {code: `UNSUPPORTED_APP_VERSION`}: 토스앱 버전이 5.261.0보다 낮을 때
52
+ *
53
+ * @example
54
+ * ```tsx
55
+ * import { fetchAlbumItems, FetchAlbumItemsError } from '@apps-in-toss/web-framework';
56
+ *
57
+ * async function pickMedia() {
58
+ * try {
59
+ * const items = await fetchAlbumItems({
60
+ * types: ['PHOTO', 'VIDEO'],
61
+ * maxCount: 5,
62
+ * base64: true,
63
+ * });
64
+ *
65
+ * if (items.length === 0) {
66
+ * console.log('선택이 취소되었어요.');
67
+ * return;
68
+ * }
69
+ *
70
+ * items.forEach((item) => {
71
+ * console.log(item.type, item.id);
72
+ * });
73
+ * } catch (error) {
74
+ * console.error('앨범 조회 오류:', error.code);
75
+ * }
76
+ * }
77
+ * ```
78
+ */
79
+ export declare function fetchAlbumItems(options?: FetchAlbumItemsOptions): Promise<AlbumItemResponse[]>;
80
+
81
+ export {};
package/dist/index.cjs CHANGED
@@ -1287,6 +1287,7 @@ var DEFAULT_ATTACH_VARIANT = "expanded";
1287
1287
  var ATTACH_CLASS_NAME = "toss-ads-attach";
1288
1288
  var ATTACH_STYLE_ID = "toss-ads-attach-style";
1289
1289
  var ATTACH_WRAPPER_ATTRIBUTE = "data-toss-ads-attach-banner-wrapper";
1290
+ var ATTACH_AD_FONT_FAMILY = '"Toss Product Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", sans-serif';
1290
1291
  function ensureAttachStyles(container) {
1291
1292
  const documentRef = container.ownerDocument;
1292
1293
  if (!documentRef) {
@@ -1298,6 +1299,11 @@ function ensureAttachStyles(container) {
1298
1299
  const style = documentRef.createElement("style");
1299
1300
  style.id = ATTACH_STYLE_ID;
1300
1301
  style.textContent = `
1302
+ .${ATTACH_CLASS_NAME},
1303
+ .${ATTACH_CLASS_NAME} * {
1304
+ font-family: ${ATTACH_AD_FONT_FAMILY};
1305
+ font-style: normal;
1306
+ }
1301
1307
  .${ATTACH_CLASS_NAME} { background: #ffffff; }
1302
1308
  .${ATTACH_CLASS_NAME}.toss-ads-tone-grey { background: #f2f4f7; }
1303
1309
  @media (prefers-color-scheme: dark) {
@@ -1363,6 +1369,8 @@ function attachBanner(adGroupId, target, options = {}) {
1363
1369
  wrapper.style.boxSizing = "border-box";
1364
1370
  wrapper.style.display = "flex";
1365
1371
  wrapper.style.flexDirection = "column";
1372
+ wrapper.style.fontFamily = ATTACH_AD_FONT_FAMILY;
1373
+ wrapper.style.fontStyle = "normal";
1366
1374
  wrapper.style.justifyContent = "center";
1367
1375
  wrapper.style.overflow = "hidden";
1368
1376
  wrapper.setAttribute(ATTACH_WRAPPER_ATTRIBUTE, "true");
@@ -1371,6 +1379,8 @@ function attachBanner(adGroupId, target, options = {}) {
1371
1379
  }
1372
1380
  const element = document.createElement("div");
1373
1381
  element.classList.add(ATTACH_CLASS_NAME);
1382
+ element.style.fontFamily = ATTACH_AD_FONT_FAMILY;
1383
+ element.style.fontStyle = "normal";
1374
1384
  if (tone === "grey") {
1375
1385
  element.classList.add("toss-ads-tone-grey");
1376
1386
  }
package/dist/index.js CHANGED
@@ -1238,6 +1238,7 @@ var DEFAULT_ATTACH_VARIANT = "expanded";
1238
1238
  var ATTACH_CLASS_NAME = "toss-ads-attach";
1239
1239
  var ATTACH_STYLE_ID = "toss-ads-attach-style";
1240
1240
  var ATTACH_WRAPPER_ATTRIBUTE = "data-toss-ads-attach-banner-wrapper";
1241
+ var ATTACH_AD_FONT_FAMILY = '"Toss Product Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", sans-serif';
1241
1242
  function ensureAttachStyles(container) {
1242
1243
  const documentRef = container.ownerDocument;
1243
1244
  if (!documentRef) {
@@ -1249,6 +1250,11 @@ function ensureAttachStyles(container) {
1249
1250
  const style = documentRef.createElement("style");
1250
1251
  style.id = ATTACH_STYLE_ID;
1251
1252
  style.textContent = `
1253
+ .${ATTACH_CLASS_NAME},
1254
+ .${ATTACH_CLASS_NAME} * {
1255
+ font-family: ${ATTACH_AD_FONT_FAMILY};
1256
+ font-style: normal;
1257
+ }
1252
1258
  .${ATTACH_CLASS_NAME} { background: #ffffff; }
1253
1259
  .${ATTACH_CLASS_NAME}.toss-ads-tone-grey { background: #f2f4f7; }
1254
1260
  @media (prefers-color-scheme: dark) {
@@ -1314,6 +1320,8 @@ function attachBanner(adGroupId, target, options = {}) {
1314
1320
  wrapper.style.boxSizing = "border-box";
1315
1321
  wrapper.style.display = "flex";
1316
1322
  wrapper.style.flexDirection = "column";
1323
+ wrapper.style.fontFamily = ATTACH_AD_FONT_FAMILY;
1324
+ wrapper.style.fontStyle = "normal";
1317
1325
  wrapper.style.justifyContent = "center";
1318
1326
  wrapper.style.overflow = "hidden";
1319
1327
  wrapper.setAttribute(ATTACH_WRAPPER_ATTRIBUTE, "true");
@@ -1322,6 +1330,8 @@ function attachBanner(adGroupId, target, options = {}) {
1322
1330
  }
1323
1331
  const element = document.createElement("div");
1324
1332
  element.classList.add(ATTACH_CLASS_NAME);
1333
+ element.style.fontFamily = ATTACH_AD_FONT_FAMILY;
1334
+ element.style.fontStyle = "normal";
1325
1335
  if (tone === "grey") {
1326
1336
  element.classList.add("toss-ads-tone-grey");
1327
1337
  }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @public
3
+ * @category PDF
4
+ * @name OpenPDFViewerParams
5
+ * @description PDF 뷰어를 열 때 필요한 파라미터예요.
6
+ * @property {string} data - Base64 형식으로 인코딩된 PDF 데이터 문자열이에요.
7
+ * @property {string} [filename] - PDF 파일 이름이에요.
8
+ */
9
+ export interface OpenPDFViewerParams {
10
+ data: string;
11
+ filename?: string;
12
+ }
13
+ /**
14
+ * @public
15
+ * @category PDF
16
+ * @name OpenPDFViewerResult
17
+ * @description PDF 뷰어가 닫혔을 때 반환되는 결과예요.
18
+ */
19
+ export type OpenPDFViewerResult = "CLOSE";
20
+ /**
21
+ * @public
22
+ * @category PDF
23
+ * @name openPDFViewer
24
+ * @description Base64로 인코딩된 PDF 데이터를 네이티브 PDF 뷰어로 열어요. 사용자가 뷰어를 닫으면 `'CLOSE'`를 반환해요.
25
+ *
26
+ * @param {OpenPDFViewerParams} params - PDF 데이터와 파일 이름을 담은 객체예요.
27
+ * @returns {Promise<OpenPDFViewerResult>} PDF 뷰어가 닫히면 `'CLOSE'`를 반환해요.
28
+ *
29
+ * @throws
30
+ * - {code: `INVALID_REQUEST`}: 요청 파라미터가 올바르지 않을 때
31
+ * - {code: `INVALID_DATA`}: PDF 데이터가 유효하지 않을 때
32
+ * - {code: `PDF_VIEWER_ERROR`}: PDF 뷰어를 여는 과정에서 오류가 발생했을 때
33
+ * - {code: `UNSUPPORTED_APP_VERSION`}: 토스앱 버전이 5.261.0보다 낮을 때
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * import { openPDFViewer } from '@apps-in-toss/web-framework';
38
+ *
39
+ * async function showPdf() {
40
+ * try {
41
+ * const result = await openPDFViewer({
42
+ * data: 'JVBERi0xLjQK...',
43
+ * filename: 'document.pdf',
44
+ * });
45
+ *
46
+ * if (result === 'CLOSE') {
47
+ * console.log('PDF 뷰어가 닫혔어요.');
48
+ * }
49
+ * } catch (error) {
50
+ * console.error('PDF 뷰어 오류:', error);
51
+ * }
52
+ * }
53
+ * ```
54
+ */
55
+ export declare function openPDFViewer(params: OpenPDFViewerParams): Promise<OpenPDFViewerResult>;
56
+
57
+ export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@apps-in-toss/web-bridge",
3
3
  "type": "module",
4
- "version": "2.5.1",
4
+ "version": "2.6.0",
5
5
  "description": "Web Bridge for Apps In Toss",
6
6
  "scripts": {
7
7
  "typecheck": "tsc --noEmit",
@@ -27,11 +27,11 @@
27
27
  "dist"
28
28
  ],
29
29
  "dependencies": {
30
- "@apps-in-toss/types": "2.5.1"
30
+ "@apps-in-toss/types": "2.6.0"
31
31
  },
32
32
  "devDependencies": {
33
- "@apps-in-toss/bridge-core": "2.5.1",
34
- "@apps-in-toss/native-modules": "^2.5.1",
33
+ "@apps-in-toss/bridge-core": "2.6.0",
34
+ "@apps-in-toss/native-modules": "^2.6.0",
35
35
  "@swc/core": "^1.12.7",
36
36
  "picocolors": "^1.1.1",
37
37
  "ts-morph": "^26.0.0",