@apps-in-toss/framework 2.0.4 → 2.0.6

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.
Files changed (3) hide show
  1. package/dist/index.cjs +125 -119
  2. package/dist/index.js +30 -22
  3. package/package.json +7 -7
package/dist/index.cjs CHANGED
@@ -55,9 +55,9 @@ var import_analytics2 = require("@apps-in-toss/analytics");
55
55
  // src/core/registerApp.tsx
56
56
  var import_analytics = require("@apps-in-toss/analytics");
57
57
  var import_native_modules14 = require("@apps-in-toss/native-modules");
58
- var import_react_native23 = require("@granite-js/react-native");
58
+ var import_react_native22 = require("@granite-js/react-native");
59
59
  var import_tds_react_native10 = require("@toss/tds-react-native");
60
- var import_react_native24 = require("react-native");
60
+ var import_react_native23 = require("react-native");
61
61
 
62
62
  // src/core/components/AppEvent.tsx
63
63
  var import_native_modules2 = require("@apps-in-toss/native-modules");
@@ -259,7 +259,7 @@ function useNavigationBarContext() {
259
259
  // src/components/RNAppContainer.tsx
260
260
  var import_native_modules13 = require("@apps-in-toss/native-modules");
261
261
  var import_react17 = require("react");
262
- var import_react_native22 = require("react-native");
262
+ var import_react_native21 = require("react-native");
263
263
 
264
264
  // src/components/GameInitializer.tsx
265
265
  var import_native_modules6 = require("@apps-in-toss/native-modules");
@@ -914,7 +914,7 @@ function useNavigationEvent() {
914
914
 
915
915
  // src/core/hooks/useMoreButtonBottomSheet/index.tsx
916
916
  var import_native_modules12 = require("@apps-in-toss/native-modules");
917
- var import_react_native20 = require("@granite-js/react-native");
917
+ var import_react_native19 = require("@granite-js/react-native");
918
918
  var import_tds_react_native8 = require("@toss/tds-react-native");
919
919
  var import_private4 = require("@toss/tds-react-native/private");
920
920
  var import_react15 = require("react");
@@ -1100,7 +1100,6 @@ function AppShareListMenu() {
1100
1100
 
1101
1101
  // src/core/hooks/useMoreButtonBottomSheet/HomeShortcutMenu.tsx
1102
1102
  var import_native_modules10 = require("@apps-in-toss/native-modules");
1103
- var import_react_native18 = require("react-native");
1104
1103
  var import_jsx_runtime7 = require("react/jsx-runtime");
1105
1104
  function HomeShortcutMenu() {
1106
1105
  const isSandbox = (0, import_native_modules10.getOperationalEnvironment)() === "sandbox";
@@ -1114,12 +1113,18 @@ function HomeShortcutMenu() {
1114
1113
  title: "\uD648 \uD654\uBA74\uC5D0 \uCD94\uAC00",
1115
1114
  iconURL: "https://static.toss.im/icons/png/4x/icon-plus-circle-mono.png",
1116
1115
  onPress: () => {
1117
- import_react_native18.NativeModules.AppsInTossModule.addMiniAppShortcut({
1118
- title: globals.brandDisplayName,
1119
- appName: global.__granite.app.name,
1120
- iconUrl: globals.brandIcon,
1121
- guideUrl: "https://service.toss.im/app-mini-home/shortcut"
1122
- });
1116
+ import_native_modules10.INTERNAL__appBridgeHandler.invokeAppBridgeMethod(
1117
+ "addMiniAppShortcut",
1118
+ {
1119
+ title: globals.brandDisplayName,
1120
+ appName: global.__granite.app.name,
1121
+ iconUrl: globals.brandIcon,
1122
+ guideUrl: "https://service.toss.im/app-mini-home/shortcut"
1123
+ },
1124
+ { onSuccess: () => {
1125
+ }, onError: () => {
1126
+ } }
1127
+ );
1123
1128
  }
1124
1129
  }
1125
1130
  );
@@ -1127,7 +1132,7 @@ function HomeShortcutMenu() {
1127
1132
 
1128
1133
  // src/core/hooks/useMoreButtonBottomSheet/SettingsMenu.tsx
1129
1134
  var import_native_modules11 = require("@apps-in-toss/native-modules");
1130
- var import_react_native19 = require("@granite-js/react-native");
1135
+ var import_react_native18 = require("@granite-js/react-native");
1131
1136
  var import_jsx_runtime8 = require("react/jsx-runtime");
1132
1137
  function SettingsMenu() {
1133
1138
  const globals = getAppsInTossGlobals();
@@ -1139,8 +1144,8 @@ function SettingsMenu() {
1139
1144
  {
1140
1145
  title: "\uC124\uC815",
1141
1146
  iconURL: "https://static.toss.im/icons/png/4x/icon-setting-mono.png",
1142
- onPress: () => (0, import_react_native19.openURL)(
1143
- `servicetoss://apps-in-toss-menu/settings?appName=${import_react_native19.Granite.appName}&displayAppName=${globals.brandDisplayName}`
1147
+ onPress: () => (0, import_react_native18.openURL)(
1148
+ `servicetoss://apps-in-toss-menu/settings?appName=${import_react_native18.Granite.appName}&displayAppName=${globals.brandDisplayName}`
1144
1149
  )
1145
1150
  }
1146
1151
  );
@@ -1244,7 +1249,7 @@ function useMoreButtonBottomSheet() {
1244
1249
  {
1245
1250
  title: item.contactItemName,
1246
1251
  iconURL: item.contactIconUrl,
1247
- onPress: () => (0, import_react_native20.openURL)(item.contactUri)
1252
+ onPress: () => (0, import_react_native19.openURL)(item.contactUri)
1248
1253
  },
1249
1254
  item.contactItemName
1250
1255
  )),
@@ -1321,7 +1326,7 @@ function DefaultNavigationBar() {
1321
1326
  var import_react_native_safe_area_context = require("@granite-js/native/react-native-safe-area-context");
1322
1327
  var import_tds_react_native9 = require("@toss/tds-react-native");
1323
1328
  var import_private6 = require("@toss/tds-react-native/private");
1324
- var import_react_native21 = require("react-native");
1329
+ var import_react_native20 = require("react-native");
1325
1330
  var import_jsx_runtime12 = require("react/jsx-runtime");
1326
1331
  function GameNavigationBar() {
1327
1332
  const safeAreaTop = (0, import_private6.useSafeAreaTop)();
@@ -1333,12 +1338,12 @@ function GameNavigationBar() {
1333
1338
  return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
1334
1339
  /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_tds_react_native9.PageNavbar, { preference: { type: "none" } }),
1335
1340
  /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1336
- import_react_native21.View,
1341
+ import_react_native20.View,
1337
1342
  {
1338
1343
  style: {
1339
1344
  width: "100%",
1340
1345
  // TODO: UI관련 스타일 설정은 TDS로 이관
1341
- height: import_react_native21.Platform.OS === "ios" ? 44 : 54,
1346
+ height: import_react_native20.Platform.OS === "ios" ? 44 : 54,
1342
1347
  flexDirection: "row",
1343
1348
  alignItems: "center",
1344
1349
  justifyContent: "flex-end",
@@ -1388,7 +1393,7 @@ function RNAppContainer({ children }) {
1388
1393
  }
1389
1394
  function GameAppContainer({ children }) {
1390
1395
  (0, import_react17.useEffect)(() => {
1391
- if (import_react_native22.Platform.OS === "ios") {
1396
+ if (import_react_native21.Platform.OS === "ios") {
1392
1397
  (0, import_native_modules13.setIosSwipeGestureEnabled)({ isEnabled: false });
1393
1398
  return () => {
1394
1399
  (0, import_native_modules13.setIosSwipeGestureEnabled)({ isEnabled: true });
@@ -1430,13 +1435,13 @@ function AppsInTossContainer(Container, { children, ...initialProps }) {
1430
1435
  }
1431
1436
  function registerApp(container, { context, analytics }) {
1432
1437
  const appName = getAppName();
1433
- const isRegistered = import_react_native24.AppRegistry.getAppKeys().includes(appName);
1438
+ const isRegistered = import_react_native23.AppRegistry.getAppKeys().includes(appName);
1434
1439
  if (!isRegistered) {
1435
1440
  import_analytics.Analytics.init({
1436
1441
  logger: (params) => void (0, import_native_modules14.eventLog)(params),
1437
1442
  debug: analytics?.debug ?? __DEV__
1438
1443
  });
1439
- const App = import_react_native23.Granite.registerApp(AppsInTossContainer.bind(null, container), {
1444
+ const App = import_react_native22.Granite.registerApp(AppsInTossContainer.bind(null, container), {
1440
1445
  appName,
1441
1446
  context,
1442
1447
  initialScheme: (0, import_native_modules14.getSchemeUri)(),
@@ -1454,7 +1459,7 @@ function registerApp(container, { context, analytics }) {
1454
1459
  }
1455
1460
  function AppsInTossScreenContainer({ children }) {
1456
1461
  const isRNApp = getAppsInTossGlobals().webViewType == null;
1457
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(NavigationBarContextProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_analytics.Analytics.Screen, { children: isRNApp ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(RNAppContainer, { children }) : children }) });
1462
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(NavigationBarContextProvider, { children: isRNApp ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_analytics.Analytics.Screen, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(RNAppContainer, { children }) }) : children });
1458
1463
  }
1459
1464
  function getAppName() {
1460
1465
  try {
@@ -1477,26 +1482,26 @@ var appsInTossConstantBridges = __toESM(require("@apps-in-toss/native-modules/co
1477
1482
  var appsInTossEventBridges = __toESM(require("@apps-in-toss/native-modules/event-bridges"), 1);
1478
1483
  var import_user_scripts = require("@apps-in-toss/user-scripts");
1479
1484
  var import_react_native_safe_area_context4 = require("@granite-js/native/react-native-safe-area-context");
1480
- var import_react_native38 = require("@granite-js/react-native");
1485
+ var import_react_native37 = require("@granite-js/react-native");
1481
1486
  var import_tds_react_native15 = require("@toss/tds-react-native");
1482
1487
  var import_private9 = require("@toss/tds-react-native/private");
1483
1488
  var import_react28 = require("react");
1484
- var import_react_native39 = require("react-native");
1489
+ var import_react_native38 = require("react-native");
1485
1490
 
1486
1491
  // src/components/GameWebView.tsx
1487
1492
  var import_native_modules15 = require("@apps-in-toss/native-modules");
1488
1493
  var import_react_native_webview = require("@granite-js/native/react-native-webview");
1489
1494
  var import_react19 = require("react");
1490
- var import_react_native27 = require("react-native");
1495
+ var import_react_native26 = require("react-native");
1491
1496
 
1492
1497
  // src/components/NavigationBar/GameWebviewNavigationBar.tsx
1493
1498
  var import_react_native_safe_area_context2 = require("@granite-js/native/react-native-safe-area-context");
1494
- var import_react_native25 = require("@granite-js/react-native");
1499
+ var import_react_native24 = require("@granite-js/react-native");
1495
1500
  var import_tds_react_native11 = require("@toss/tds-react-native");
1496
1501
  var import_private7 = require("@toss/tds-react-native/private");
1497
1502
  var import_es_hangul3 = require("es-hangul");
1498
1503
  var import_react18 = require("react");
1499
- var import_react_native26 = require("react-native");
1504
+ var import_react_native25 = require("react-native");
1500
1505
  var import_jsx_runtime15 = require("react/jsx-runtime");
1501
1506
  function GameWebviewNavigationBar() {
1502
1507
  const safeAreaTop = (0, import_private7.useSafeAreaTop)();
@@ -1519,18 +1524,18 @@ function GameWebviewNavigationBar() {
1519
1524
  logging.closePopupCtaClick(isConfirmed);
1520
1525
  if (isConfirmed) {
1521
1526
  captureExitLog(Date.now());
1522
- (0, import_react_native25.closeView)();
1527
+ (0, import_react_native24.closeView)();
1523
1528
  }
1524
1529
  }, [captureExitLog, global2.brandDisplayName, logging, openConfirm]);
1525
1530
  return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_jsx_runtime15.Fragment, { children: [
1526
1531
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_tds_react_native11.PageNavbar, { preference: { type: "none" } }),
1527
1532
  /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1528
- import_react_native26.View,
1533
+ import_react_native25.View,
1529
1534
  {
1530
1535
  style: {
1531
1536
  width: "100%",
1532
1537
  // TODO: UI관련 스타일 설정은 TDS로 이관
1533
- height: import_react_native26.Platform.OS === "ios" ? 44 : 54,
1538
+ height: import_react_native25.Platform.OS === "ios" ? 44 : 54,
1534
1539
  flexDirection: "row",
1535
1540
  alignItems: "center",
1536
1541
  justifyContent: "flex-end",
@@ -1560,7 +1565,7 @@ function GameWebviewNavigationBar() {
1560
1565
  var import_jsx_runtime16 = require("react/jsx-runtime");
1561
1566
  var GameWebView = (0, import_react19.forwardRef)(function GameWebView2(props, ref) {
1562
1567
  (0, import_react19.useEffect)(() => {
1563
- if (import_react_native27.Platform.OS === "ios") {
1568
+ if (import_react_native26.Platform.OS === "ios") {
1564
1569
  (0, import_native_modules15.setIosSwipeGestureEnabled)({ isEnabled: false });
1565
1570
  return () => {
1566
1571
  (0, import_native_modules15.setIosSwipeGestureEnabled)({ isEnabled: true });
@@ -1579,7 +1584,7 @@ var import_react_native_webview2 = require("@granite-js/native/react-native-webv
1579
1584
  var import_react21 = require("react");
1580
1585
 
1581
1586
  // src/components/NavigationBar/PartnerWebviewNavigationBar.tsx
1582
- var import_react_native28 = require("@granite-js/react-native");
1587
+ var import_react_native27 = require("@granite-js/react-native");
1583
1588
  var import_tds_react_native12 = require("@toss/tds-react-native");
1584
1589
  var import_private8 = require("@toss/tds-react-native/private");
1585
1590
  var import_es_hangul4 = require("es-hangul");
@@ -1607,7 +1612,7 @@ function PartnerWebviewNavigationBar({ onBackButtonClick, onHomeButtonClick }) {
1607
1612
  logging.closePopupCtaClick(isConfirmed);
1608
1613
  if (isConfirmed) {
1609
1614
  captureExitLog(Date.now());
1610
- (0, import_react_native28.closeView)();
1615
+ (0, import_react_native27.closeView)();
1611
1616
  }
1612
1617
  }, [captureExitLog, globals.brandDisplayName, logging, openConfirm]);
1613
1618
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(NavigationBarImpressionArea, { withHomeButton, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
@@ -1715,10 +1720,10 @@ function generateRequestId() {
1715
1720
  }
1716
1721
 
1717
1722
  // src/ads/getReferrer.ts
1718
- var import_react_native29 = require("@granite-js/react-native");
1723
+ var import_react_native28 = require("@granite-js/react-native");
1719
1724
  function getReferrer() {
1720
1725
  try {
1721
- return new URL((0, import_react_native29.getSchemeUri)()).searchParams.get("referrer");
1726
+ return new URL((0, import_react_native28.getSchemeUri)()).searchParams.get("referrer");
1722
1727
  } catch {
1723
1728
  return null;
1724
1729
  }
@@ -1728,10 +1733,10 @@ function getReferrer() {
1728
1733
  var import_native_modules17 = require("@apps-in-toss/native-modules");
1729
1734
 
1730
1735
  // src/ads/getIsDev.ts
1731
- var import_react_native30 = require("@granite-js/react-native");
1736
+ var import_react_native29 = require("@granite-js/react-native");
1732
1737
  function getIsDev() {
1733
1738
  try {
1734
- return new URL((0, import_react_native30.getSchemeUri)()).searchParams.get("isDev") === "true";
1739
+ return new URL((0, import_react_native29.getSchemeUri)()).searchParams.get("isDev") === "true";
1735
1740
  } catch {
1736
1741
  return false;
1737
1742
  }
@@ -1985,10 +1990,10 @@ showFullScreenAd.isSupported = import_native_modules18.GoogleAdMob.showAppsInTos
1985
1990
 
1986
1991
  // src/ads/tossAdEventLog.ts
1987
1992
  var import_native_modules19 = require("@apps-in-toss/native-modules");
1988
- var import_react_native31 = require("@granite-js/react-native");
1993
+ var import_react_native30 = require("@granite-js/react-native");
1989
1994
  async function tossAdEventLog(params) {
1990
1995
  const referrer = getReferrer();
1991
- const appName = import_react_native31.Granite.appName;
1996
+ const appName = import_react_native30.Granite.appName;
1992
1997
  const eventLogParams = {
1993
1998
  ...params,
1994
1999
  params: {
@@ -2153,7 +2158,7 @@ function useSafeAreaInsetsEvent() {
2153
2158
  }
2154
2159
 
2155
2160
  // src/core/hooks/useWebBackHandler.tsx
2156
- var import_react_native32 = require("@granite-js/react-native");
2161
+ var import_react_native31 = require("@granite-js/react-native");
2157
2162
  var import_tds_react_native13 = require("@toss/tds-react-native");
2158
2163
  var import_es_hangul5 = require("es-hangul");
2159
2164
  var import_react25 = require("react");
@@ -2211,7 +2216,7 @@ function useWebBackHandler(webViewInitialURL, webViewRef) {
2211
2216
  hasBackEvent: hasWebBackEvent,
2212
2217
  addEventListener: addWebBackEventListener,
2213
2218
  removeEventListener: removeWebBackEventListener
2214
- } = (0, import_react_native32.useBackEventState)();
2219
+ } = (0, import_react_native31.useBackEventState)();
2215
2220
  const logging = useNavigationBarLogging();
2216
2221
  const { openConfirm } = (0, import_tds_react_native13.useDialog)();
2217
2222
  const global2 = getAppsInTossGlobals();
@@ -2247,7 +2252,7 @@ function useWebBackHandler(webViewInitialURL, webViewRef) {
2247
2252
  logging.closePopupCtaClick(isConfirmed);
2248
2253
  if (isConfirmed) {
2249
2254
  captureExitLog(Date.now());
2250
- (0, import_react_native32.closeView)();
2255
+ (0, import_react_native31.closeView)();
2251
2256
  }
2252
2257
  }
2253
2258
  }, [
@@ -2294,7 +2299,7 @@ function mergeRefs(...refs) {
2294
2299
 
2295
2300
  // src/hooks/useCreateUserAgent.ts
2296
2301
  var import_native_modules20 = require("@apps-in-toss/native-modules");
2297
- var import_react_native33 = require("react-native");
2302
+ var import_react_native32 = require("react-native");
2298
2303
  var FontA11yCategory = {
2299
2304
  Large: "Large",
2300
2305
  xLarge: "xLarge",
@@ -2429,7 +2434,7 @@ function useCreateUserAgent({
2429
2434
  }) {
2430
2435
  const platform = (0, import_native_modules20.getPlatformOS)();
2431
2436
  const appVersion = (0, import_native_modules20.getTossAppVersion)();
2432
- const { fontScale } = (0, import_react_native33.useWindowDimensions)();
2437
+ const { fontScale } = (0, import_react_native32.useWindowDimensions)();
2433
2438
  const platformString = platform === "ios" ? "iPhone" : "Android phone";
2434
2439
  const fontA11y = mapFontScaleToCategory(fontScale, platform);
2435
2440
  const normalizedFontScale = convertToAndroidStyleScale(fontScale, platform);
@@ -2451,10 +2456,10 @@ function useCreateUserAgent({
2451
2456
 
2452
2457
  // src/hooks/useGeolocation.ts
2453
2458
  var import_native_modules21 = require("@apps-in-toss/native-modules");
2454
- var import_react_native34 = require("@granite-js/react-native");
2459
+ var import_react_native33 = require("@granite-js/react-native");
2455
2460
  var import_react26 = require("react");
2456
2461
  function useGeolocation({ accuracy, distanceInterval, timeInterval }) {
2457
- const isVisible = (0, import_react_native34.useVisibility)();
2462
+ const isVisible = (0, import_react_native33.useVisibility)();
2458
2463
  const [location, setLocation] = (0, import_react26.useState)(null);
2459
2464
  (0, import_react26.useEffect)(() => {
2460
2465
  if (!isVisible) {
@@ -2474,11 +2479,11 @@ function useGeolocation({ accuracy, distanceInterval, timeInterval }) {
2474
2479
  }
2475
2480
 
2476
2481
  // src/hooks/useWaitForReturnNavigator.tsx
2477
- var import_react_native35 = require("@granite-js/react-native");
2482
+ var import_react_native34 = require("@granite-js/react-native");
2478
2483
  var import_react27 = require("react");
2479
2484
  function useWaitForReturnNavigator() {
2480
2485
  const callbacks = (0, import_react27.useRef)([]).current;
2481
- const navigation = (0, import_react_native35.useNavigation)();
2486
+ const navigation = (0, import_react_native34.useNavigation)();
2482
2487
  const startNavigating = (0, import_react27.useCallback)(
2483
2488
  (route, params) => {
2484
2489
  return new Promise((resolve) => {
@@ -2499,7 +2504,7 @@ function useWaitForReturnNavigator() {
2499
2504
  },
2500
2505
  [callbacks]
2501
2506
  );
2502
- (0, import_react_native35.useVisibilityChange)(handleVisibilityChange);
2507
+ (0, import_react_native34.useVisibilityChange)(handleVisibilityChange);
2503
2508
  return startNavigating;
2504
2509
  }
2505
2510
 
@@ -2514,7 +2519,7 @@ function useTopNavigation() {
2514
2519
 
2515
2520
  // src/hooks/useWebViewMemoryDebug.tsx
2516
2521
  var import_native_modules22 = require("@apps-in-toss/native-modules");
2517
- var import_react_native36 = require("@granite-js/react-native");
2522
+ var import_react_native35 = require("@granite-js/react-native");
2518
2523
  var import_tds_react_native14 = require("@toss/tds-react-native");
2519
2524
  function useHandleWebViewProcessDidTerminate(webViewRef) {
2520
2525
  const toast = (0, import_tds_react_native14.useToast)();
@@ -2537,7 +2542,7 @@ function webViewDebugLog(logName, params) {
2537
2542
  log_type: "debug",
2538
2543
  params: {
2539
2544
  ...params,
2540
- app_name: import_react_native36.Granite.appName,
2545
+ app_name: import_react_native35.Granite.appName,
2541
2546
  deployment_id: global2.deploymentId
2542
2547
  }
2543
2548
  };
@@ -2550,7 +2555,7 @@ function webViewDebugLog(logName, params) {
2550
2555
 
2551
2556
  // src/utils/log.ts
2552
2557
  var import_native_modules23 = require("@apps-in-toss/native-modules");
2553
- var import_react_native37 = require("@granite-js/react-native");
2558
+ var import_react_native36 = require("@granite-js/react-native");
2554
2559
 
2555
2560
  // src/utils/extractDateFromUUIDv7.ts
2556
2561
  var extractDateFromUUIDv7 = (uuid) => {
@@ -2576,13 +2581,13 @@ var getGroupId = (url) => {
2576
2581
  };
2577
2582
  var getReferrer2 = () => {
2578
2583
  try {
2579
- const referrer = new URL((0, import_react_native37.getSchemeUri)());
2584
+ const referrer = new URL((0, import_react_native36.getSchemeUri)());
2580
2585
  return referrer.searchParams.get("referrer");
2581
2586
  } catch {
2582
2587
  return "";
2583
2588
  }
2584
2589
  };
2585
- var trackScreen = (url) => {
2590
+ var trackScreen = (url, title) => {
2586
2591
  const { groupId, search } = getGroupId(url);
2587
2592
  const log = {
2588
2593
  log_type: "screen",
@@ -2590,6 +2595,7 @@ var trackScreen = (url) => {
2590
2595
  params: {
2591
2596
  search,
2592
2597
  referrer: getReferrer2(),
2598
+ document_title: title,
2593
2599
  deployment_id: env.getDeploymentId(),
2594
2600
  deployment_timestamp: extractDateFromUUIDv7(env.getDeploymentId()).getTime()
2595
2601
  }
@@ -2608,7 +2614,7 @@ var WEBVIEW_TYPES = {
2608
2614
  };
2609
2615
  function mergeSchemeQueryParamsInto(url) {
2610
2616
  const baseUrl = new URL(url);
2611
- const schemeUrl = new URL((0, import_react_native38.getSchemeUri)());
2617
+ const schemeUrl = new URL((0, import_react_native37.getSchemeUri)());
2612
2618
  const resultUrl = new URL(schemeUrl.pathname, baseUrl.origin);
2613
2619
  for (const [key, value] of baseUrl.searchParams.entries()) {
2614
2620
  resultUrl.searchParams.set(key, value);
@@ -2738,8 +2744,8 @@ function WebView({ type, local, onMessage, ...props }) {
2738
2744
  /** Private */
2739
2745
  memoryDebugLog: webViewMemoryDebugLog,
2740
2746
  debugLog: async (event) => {
2741
- import_react_native39.NativeModules.AppsInTossModule?.eventLog(event);
2742
- import_react_native39.NativeModules.TossCoreModule?.eventLog({ params: event });
2747
+ (0, import_native_modules24.eventLog)(event);
2748
+ import_native_modules24.INTERNAL__module.tossCoreEventLog(event);
2743
2749
  }
2744
2750
  }
2745
2751
  });
@@ -2769,7 +2775,7 @@ function WebView({ type, local, onMessage, ...props }) {
2769
2775
  webBackHandler.handleWebBack();
2770
2776
  return true;
2771
2777
  };
2772
- const subscription = import_react_native39.BackHandler.addEventListener("hardwareBackPress", callback);
2778
+ const subscription = import_react_native38.BackHandler.addEventListener("hardwareBackPress", callback);
2773
2779
  return () => subscription.remove();
2774
2780
  }, [webBackHandler]);
2775
2781
  const handleWebViewProcessDidTerminate = useHandleWebViewProcessDidTerminate(webViewRef);
@@ -2790,19 +2796,19 @@ function WebView({ type, local, onMessage, ...props }) {
2790
2796
  onBackButtonClick: webBackHandler.handleWebBack,
2791
2797
  onNavigationStateChange: (event) => {
2792
2798
  if (event.url) {
2793
- trackScreen(event.url);
2799
+ trackScreen(event.url, event.title);
2794
2800
  }
2795
2801
  props.onNavigationStateChange?.(event);
2796
2802
  webBackHandler.onNavigationStateChange(event);
2797
2803
  },
2798
- userAgent: import_react_native39.Platform.OS === "ios" ? userAgent : void 0,
2804
+ userAgent: import_react_native38.Platform.OS === "ios" ? userAgent : void 0,
2799
2805
  sharedCookiesEnabled: true,
2800
2806
  webviewDebuggingEnabled: webViewDebuggingEnabled,
2801
2807
  thirdPartyCookiesEnabled: true,
2802
2808
  onMessage: handler.onMessage,
2803
2809
  injectedJavaScript: import_user_scripts.afterDocumentLoad,
2804
2810
  injectedJavaScriptBeforeContentLoaded: [handler.injectedJavaScript, import_user_scripts.beforeDocumentLoad].join("\n"),
2805
- decelerationRate: import_react_native39.Platform.OS === "ios" ? 1 : void 0,
2811
+ decelerationRate: import_react_native38.Platform.OS === "ios" ? 1 : void 0,
2806
2812
  allowsBackForwardNavigationGestures,
2807
2813
  onShouldStartLoadWithRequest: (event) => {
2808
2814
  try {
@@ -2810,7 +2816,7 @@ function WebView({ type, local, onMessage, ...props }) {
2810
2816
  if (["https:", "http:"].includes(url2.protocol) || url2.href === "about:blank") {
2811
2817
  return true;
2812
2818
  } else {
2813
- import_react_native39.Linking.openURL(convertIntentURL(url2) ?? url2.href);
2819
+ import_react_native38.Linking.openURL(convertIntentURL(url2) ?? url2.href);
2814
2820
  return false;
2815
2821
  }
2816
2822
  } catch (error) {
@@ -2841,9 +2847,9 @@ __reExport(src_exports, require("@apps-in-toss/types"), module.exports);
2841
2847
  var import_types = require("@apps-in-toss/types");
2842
2848
 
2843
2849
  // src/ads/inlineAd/InlineAd.tsx
2844
- var import_react_native43 = require("@granite-js/react-native");
2850
+ var import_react_native42 = require("@granite-js/react-native");
2845
2851
  var import_react31 = require("react");
2846
- var import_react_native44 = require("react-native");
2852
+ var import_react_native43 = require("react-native");
2847
2853
 
2848
2854
  // src/ads/inlineAd/constants.ts
2849
2855
  var SDK_ID = "106";
@@ -3104,7 +3110,7 @@ async function loadAd(adGroupId) {
3104
3110
  }
3105
3111
 
3106
3112
  // src/ads/inlineAd/opener.ts
3107
- var import_react_native40 = require("@granite-js/react-native");
3113
+ var import_react_native39 = require("@granite-js/react-native");
3108
3114
  function isSafeUrl(url) {
3109
3115
  try {
3110
3116
  const parsed = new URL(url);
@@ -3136,7 +3142,7 @@ function openLandingUrl(url) {
3136
3142
  return;
3137
3143
  }
3138
3144
  try {
3139
- (0, import_react_native40.openURL)(getWebSchemeOrUri(url));
3145
+ (0, import_react_native39.openURL)(getWebSchemeOrUri(url));
3140
3146
  } catch (error) {
3141
3147
  console.error("[InlineAd] Failed to open landing URL:", error);
3142
3148
  }
@@ -3224,7 +3230,7 @@ var EventTracker = class {
3224
3230
  // src/ads/inlineAd/ui/FeedBannerAdView.tsx
3225
3231
  var import_react_native_svg = require("@granite-js/native/react-native-svg");
3226
3232
  var import_react29 = require("react");
3227
- var import_react_native41 = require("react-native");
3233
+ var import_react_native40 = require("react-native");
3228
3234
  var import_jsx_runtime20 = require("react/jsx-runtime");
3229
3235
  var ARROW_PATH = "m7.5 20.4c-.5-.5-.5-1.2 0-1.7l6.7-6.7-6.8-6.7c-.5-.5-.5-1.2 0-1.7s1.2-.5 1.7 0l7.5 7.5c.5.5.5 1.2 0 1.7l-7.5 7.5c-.2.3-.5.4-.8.4s-.6-.1-.8-.3z";
3230
3236
  function FeedBannerAdView({
@@ -3242,12 +3248,12 @@ function FeedBannerAdView({
3242
3248
  paddingStyle,
3243
3249
  onPress
3244
3250
  }) {
3245
- const scale = (0, import_react29.useRef)(new import_react_native41.Animated.Value(1)).current;
3251
+ const scale = (0, import_react29.useRef)(new import_react_native40.Animated.Value(1)).current;
3246
3252
  const animateScale = (toValue) => {
3247
- import_react_native41.Animated.timing(scale, {
3253
+ import_react_native40.Animated.timing(scale, {
3248
3254
  toValue,
3249
3255
  duration: 100,
3250
- easing: import_react_native41.Easing.inOut(import_react_native41.Easing.ease),
3256
+ easing: import_react_native40.Easing.inOut(import_react_native40.Easing.ease),
3251
3257
  useNativeDriver: true
3252
3258
  }).start();
3253
3259
  };
@@ -3260,81 +3266,81 @@ function FeedBannerAdView({
3260
3266
  const resolvedCtaBackground = ctaBackgroundColor ?? "#3081F9";
3261
3267
  const resolvedCtaTextColor = ctaTextColor ?? "#ffffff";
3262
3268
  return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3263
- import_react_native41.Pressable,
3269
+ import_react_native40.Pressable,
3264
3270
  {
3265
3271
  accessibilityRole: "button",
3266
3272
  onPress: () => onPress(null),
3267
3273
  onPressIn: handlePressIn,
3268
3274
  onPressOut: handlePressOut,
3269
3275
  style: styles.pressable,
3270
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_native41.Animated.View, { style: [styles.container, paddingStyle, { transform: [{ scale }] }], children: [
3271
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_native41.View, { style: styles.profileContainer, children: [
3272
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_native41.View, { style: styles.brandArea, children: [
3276
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_native40.Animated.View, { style: [styles.container, paddingStyle, { transform: [{ scale }] }], children: [
3277
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_native40.View, { style: styles.profileContainer, children: [
3278
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_native40.View, { style: styles.brandArea, children: [
3273
3279
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3274
- import_react_native41.Pressable,
3280
+ import_react_native40.Pressable,
3275
3281
  {
3276
3282
  accessibilityRole: "button",
3277
3283
  onPress: () => onPress("202"),
3278
3284
  onPressIn: handlePressIn,
3279
3285
  onPressOut: handlePressOut,
3280
3286
  style: styles.logoContainer,
3281
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_native41.View, { style: [styles.logoWrapper, { backgroundColor: colors.brandLogoBg }], children: [
3282
- brandLogoUri ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native41.Image, { source: { uri: brandLogoUri }, style: styles.logoImage, resizeMode: "cover" }) : null,
3283
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native41.View, { style: [styles.logoOverlay, { borderColor: colors.brandLogoBorder }] })
3287
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_native40.View, { style: [styles.logoWrapper, { backgroundColor: colors.brandLogoBg }], children: [
3288
+ brandLogoUri ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native40.Image, { source: { uri: brandLogoUri }, style: styles.logoImage, resizeMode: "cover" }) : null,
3289
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native40.View, { style: [styles.logoOverlay, { borderColor: colors.brandLogoBorder }] })
3284
3290
  ] })
3285
3291
  }
3286
3292
  ),
3287
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_native41.View, { style: styles.brandTextContainer, children: [
3293
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_native40.View, { style: styles.brandTextContainer, children: [
3288
3294
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3289
- import_react_native41.Pressable,
3295
+ import_react_native40.Pressable,
3290
3296
  {
3291
3297
  accessibilityRole: "button",
3292
3298
  onPress: () => onPress("103"),
3293
3299
  onPressIn: handlePressIn,
3294
3300
  onPressOut: handlePressOut,
3295
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native41.Text, { numberOfLines: 1, style: [styles.brandName, { color: colors.brandName }], children: brandName })
3301
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native40.Text, { numberOfLines: 1, style: [styles.brandName, { color: colors.brandName }], children: brandName })
3296
3302
  }
3297
3303
  ),
3298
- isAdBadgeEnabled ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native41.Text, { numberOfLines: 1, style: [styles.adBadge, { color: colors.adBadge }], children: "\uAD11\uACE0" }) : null
3304
+ isAdBadgeEnabled ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native40.Text, { numberOfLines: 1, style: [styles.adBadge, { color: colors.adBadge }], children: "\uAD11\uACE0" }) : null
3299
3305
  ] })
3300
3306
  ] }),
3301
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_native41.View, { style: styles.textArea, children: [
3307
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_native40.View, { style: styles.textArea, children: [
3302
3308
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3303
- import_react_native41.Pressable,
3309
+ import_react_native40.Pressable,
3304
3310
  {
3305
3311
  accessibilityRole: "button",
3306
3312
  onPress: () => onPress("101"),
3307
3313
  onPressIn: handlePressIn,
3308
3314
  onPressOut: handlePressOut,
3309
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native41.Text, { style: [styles.title, { color: colors.title }], children: title })
3315
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native40.Text, { style: [styles.title, { color: colors.title }], children: title })
3310
3316
  }
3311
3317
  ),
3312
3318
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3313
- import_react_native41.Pressable,
3319
+ import_react_native40.Pressable,
3314
3320
  {
3315
3321
  accessibilityRole: "button",
3316
3322
  onPress: () => onPress("102"),
3317
3323
  onPressIn: handlePressIn,
3318
3324
  onPressOut: handlePressOut,
3319
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native41.Text, { style: [styles.subtitle, { color: colors.subtitle }], children: subtitle })
3325
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native40.Text, { style: [styles.subtitle, { color: colors.subtitle }], children: subtitle })
3320
3326
  }
3321
3327
  )
3322
3328
  ] })
3323
3329
  ] }),
3324
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_native41.View, { style: styles.card, children: [
3330
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_native40.View, { style: styles.card, children: [
3325
3331
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3326
- import_react_native41.Pressable,
3332
+ import_react_native40.Pressable,
3327
3333
  {
3328
3334
  accessibilityRole: "button",
3329
3335
  onPress: () => onPress("201"),
3330
3336
  onPressIn: handlePressIn,
3331
3337
  onPressOut: handlePressOut,
3332
3338
  style: styles.imageButton,
3333
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native41.View, { style: styles.imageContainer, children: mainImageUri ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native41.Image, { source: { uri: mainImageUri }, style: styles.mainImage, resizeMode: "cover" }) : null })
3339
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native40.View, { style: styles.imageContainer, children: mainImageUri ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native40.Image, { source: { uri: mainImageUri }, style: styles.mainImage, resizeMode: "cover" }) : null })
3334
3340
  }
3335
3341
  ),
3336
3342
  /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
3337
- import_react_native41.Pressable,
3343
+ import_react_native40.Pressable,
3338
3344
  {
3339
3345
  accessibilityRole: "button",
3340
3346
  onPress: () => onPress("0"),
@@ -3342,19 +3348,19 @@ function FeedBannerAdView({
3342
3348
  onPressOut: handlePressOut,
3343
3349
  style: [styles.cta, { backgroundColor: resolvedCtaBackground }],
3344
3350
  children: [
3345
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native41.Text, { style: [styles.ctaText, { color: resolvedCtaTextColor }], children: ctaText }),
3351
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native40.Text, { style: [styles.ctaText, { color: resolvedCtaTextColor }], children: ctaText }),
3346
3352
  /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native_svg.Svg, { width: 20, height: 20, viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native_svg.Path, { d: ARROW_PATH, fill: resolvedCtaTextColor }) })
3347
3353
  ]
3348
3354
  }
3349
3355
  ),
3350
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native41.View, { style: [styles.cardOverlay, { borderColor: colors.imageOverlayBorder }] })
3356
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native40.View, { style: [styles.cardOverlay, { borderColor: colors.imageOverlayBorder }] })
3351
3357
  ] }),
3352
- adClearanceText ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native41.Text, { style: [styles.adClearance, { color: colors.adClearance }], children: adClearanceText }) : null
3358
+ adClearanceText ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_native40.Text, { style: [styles.adClearance, { color: colors.adClearance }], children: adClearanceText }) : null
3353
3359
  ] })
3354
3360
  }
3355
3361
  );
3356
3362
  }
3357
- var styles = import_react_native41.StyleSheet.create({
3363
+ var styles = import_react_native40.StyleSheet.create({
3358
3364
  pressable: {
3359
3365
  width: "100%"
3360
3366
  },
@@ -3393,7 +3399,7 @@ var styles = import_react_native41.StyleSheet.create({
3393
3399
  borderRadius: 18
3394
3400
  },
3395
3401
  logoOverlay: {
3396
- ...import_react_native41.StyleSheet.absoluteFillObject,
3402
+ ...import_react_native40.StyleSheet.absoluteFillObject,
3397
3403
  borderWidth: 1,
3398
3404
  borderRadius: 18
3399
3405
  },
@@ -3456,7 +3462,7 @@ var styles = import_react_native41.StyleSheet.create({
3456
3462
  lineHeight: 22.5
3457
3463
  },
3458
3464
  cardOverlay: {
3459
- ...import_react_native41.StyleSheet.absoluteFillObject,
3465
+ ...import_react_native40.StyleSheet.absoluteFillObject,
3460
3466
  borderWidth: 2,
3461
3467
  borderRadius: 12,
3462
3468
  pointerEvents: "none"
@@ -3471,7 +3477,7 @@ var styles = import_react_native41.StyleSheet.create({
3471
3477
  // src/ads/inlineAd/ui/ListBannerAdView.tsx
3472
3478
  var import_react_native_svg2 = require("@granite-js/native/react-native-svg");
3473
3479
  var import_react30 = require("react");
3474
- var import_react_native42 = require("react-native");
3480
+ var import_react_native41 = require("react-native");
3475
3481
  var import_jsx_runtime21 = require("react/jsx-runtime");
3476
3482
  var SQUIRCLE_PATH = "M0 17.352C0 3.564 3.564 0 17.352 0H18.648C32.436 0 36 3.564 36 17.352V18.648C36 32.436 32.436 36 18.648 36H17.352C3.564 36 0 32.436 0 18.648V17.352Z";
3477
3483
  function ListBannerAdView({
@@ -3484,13 +3490,13 @@ function ListBannerAdView({
3484
3490
  colors,
3485
3491
  onPress
3486
3492
  }) {
3487
- const scale = (0, import_react30.useRef)(new import_react_native42.Animated.Value(1)).current;
3493
+ const scale = (0, import_react30.useRef)(new import_react_native41.Animated.Value(1)).current;
3488
3494
  const clipIdRef = (0, import_react30.useRef)(`clip-${Math.random().toString(36).slice(2)}`);
3489
3495
  const animateScale = (toValue) => {
3490
- import_react_native42.Animated.timing(scale, {
3496
+ import_react_native41.Animated.timing(scale, {
3491
3497
  toValue,
3492
3498
  duration: 100,
3493
- easing: import_react_native42.Easing.inOut(import_react_native42.Easing.ease),
3499
+ easing: import_react_native41.Easing.inOut(import_react_native41.Easing.ease),
3494
3500
  useNativeDriver: true
3495
3501
  }).start();
3496
3502
  };
@@ -3501,17 +3507,17 @@ function ListBannerAdView({
3501
3507
  animateScale(1);
3502
3508
  };
3503
3509
  return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3504
- import_react_native42.Pressable,
3510
+ import_react_native41.Pressable,
3505
3511
  {
3506
3512
  accessibilityRole: "button",
3507
3513
  onPress: () => onPress(null),
3508
3514
  onPressIn: handlePressIn,
3509
3515
  onPressOut: handlePressOut,
3510
3516
  style: styles2.pressable,
3511
- children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_react_native42.Animated.View, { style: [styles2.container, paddingStyle, { transform: [{ scale }] }], children: [
3512
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_react_native42.View, { style: styles2.titleRow, children: [
3517
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_react_native41.Animated.View, { style: [styles2.container, paddingStyle, { transform: [{ scale }] }], children: [
3518
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_react_native41.View, { style: styles2.titleRow, children: [
3513
3519
  /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3514
- import_react_native42.Pressable,
3520
+ import_react_native41.Pressable,
3515
3521
  {
3516
3522
  accessibilityRole: "button",
3517
3523
  onPress: () => onPress("202"),
@@ -3544,31 +3550,31 @@ function ListBannerAdView({
3544
3550
  ] })
3545
3551
  }
3546
3552
  ),
3547
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_react_native42.View, { style: styles2.textWrapper, children: [
3553
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_react_native41.View, { style: styles2.textWrapper, children: [
3548
3554
  /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3549
- import_react_native42.Pressable,
3555
+ import_react_native41.Pressable,
3550
3556
  {
3551
3557
  accessibilityRole: "button",
3552
3558
  onPress: () => onPress("101"),
3553
3559
  onPressIn: handlePressIn,
3554
3560
  onPressOut: handlePressOut,
3555
- children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_native42.Text, { style: [styles2.title, { color: colors.title }], children: title })
3561
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_native41.Text, { style: [styles2.title, { color: colors.title }], children: title })
3556
3562
  }
3557
3563
  ),
3558
3564
  /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3559
- import_react_native42.Pressable,
3565
+ import_react_native41.Pressable,
3560
3566
  {
3561
3567
  accessibilityRole: "button",
3562
3568
  onPress: () => onPress("102"),
3563
3569
  onPressIn: handlePressIn,
3564
3570
  onPressOut: handlePressOut,
3565
- children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_native42.Text, { style: [styles2.subtitle, { color: colors.subtitle }], children: subtitle })
3571
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_native41.Text, { style: [styles2.subtitle, { color: colors.subtitle }], children: subtitle })
3566
3572
  }
3567
3573
  )
3568
3574
  ] })
3569
3575
  ] }),
3570
3576
  adClearanceText ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3571
- import_react_native42.Text,
3577
+ import_react_native41.Text,
3572
3578
  {
3573
3579
  style: [
3574
3580
  styles2.adClearance,
@@ -3585,7 +3591,7 @@ function ListBannerAdView({
3585
3591
  }
3586
3592
  );
3587
3593
  }
3588
- var styles2 = import_react_native42.StyleSheet.create({
3594
+ var styles2 = import_react_native41.StyleSheet.create({
3589
3595
  pressable: {
3590
3596
  width: "100%"
3591
3597
  },
@@ -3815,7 +3821,7 @@ function InlineAd(props) {
3815
3821
  onNoFill
3816
3822
  });
3817
3823
  const isMountedRef = (0, import_react31.useRef)(false);
3818
- const colorScheme = (0, import_react_native44.useColorScheme)();
3824
+ const colorScheme = (0, import_react_native43.useColorScheme)();
3819
3825
  const selectedTheme = theme ?? DEFAULT_INLINE_AD_THEME;
3820
3826
  const resolvedTheme = selectedTheme === "auto" ? colorScheme === "dark" ? "dark" : "light" : selectedTheme;
3821
3827
  const resolvedTone = tone ?? DEFAULT_INLINE_AD_TONE;
@@ -3911,7 +3917,7 @@ function InlineAd(props) {
3911
3917
  loadRef.current = null;
3912
3918
  };
3913
3919
  }, [adGroupId]);
3914
- (0, import_react_native43.useVisibilityChange)((documentVisibility) => {
3920
+ (0, import_react_native42.useVisibilityChange)((documentVisibility) => {
3915
3921
  if (documentVisibility !== "visible") {
3916
3922
  return;
3917
3923
  }
@@ -4010,26 +4016,26 @@ function InlineAd(props) {
4010
4016
  }
4011
4017
  };
4012
4018
  return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
4013
- import_react_native43.ImpressionArea,
4019
+ import_react_native42.ImpressionArea,
4014
4020
  {
4015
4021
  style: styles3.impressionArea,
4016
4022
  onImpressionStart: handleImpression1px,
4017
4023
  areaThreshold: 0,
4018
4024
  UNSAFE__impressFallbackOnMount: Boolean(impressFallbackOnMount),
4019
4025
  children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
4020
- import_react_native43.ImpressionArea,
4026
+ import_react_native42.ImpressionArea,
4021
4027
  {
4022
4028
  onImpressionStart: handleImpression100p,
4023
4029
  areaThreshold: 1,
4024
4030
  UNSAFE__impressFallbackOnMount: Boolean(impressFallbackOnMount),
4025
4031
  children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
4026
- import_react_native43.ImpressionArea,
4032
+ import_react_native42.ImpressionArea,
4027
4033
  {
4028
4034
  onImpressionStart: handleViewableStart,
4029
4035
  onImpressionEnd: handleViewableEnd,
4030
4036
  areaThreshold: 0.5,
4031
4037
  UNSAFE__impressFallbackOnMount: Boolean(impressFallbackOnMount),
4032
- children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native44.View, { style: [styles3.wrapper, resolvedVariant === "card" && styles3.cardWrapper], children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native44.View, { style: [styles3.surface, { backgroundColor }, resolvedVariant === "card" && styles3.cardSurface], children: [
4038
+ children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_native43.View, { style: [styles3.wrapper, resolvedVariant === "card" && styles3.cardWrapper], children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_native43.View, { style: [styles3.surface, { backgroundColor }, resolvedVariant === "card" && styles3.cardSurface], children: [
4033
4039
  isListBanner && listCreative ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
4034
4040
  ListBannerAdView,
4035
4041
  {
@@ -4070,7 +4076,7 @@ function InlineAd(props) {
4070
4076
  impressionKey
4071
4077
  );
4072
4078
  }
4073
- var styles3 = import_react_native44.StyleSheet.create({
4079
+ var styles3 = import_react_native43.StyleSheet.create({
4074
4080
  impressionArea: {
4075
4081
  width: "100%"
4076
4082
  },
package/dist/index.js CHANGED
@@ -876,7 +876,7 @@ function useNavigationEvent() {
876
876
  }
877
877
 
878
878
  // src/core/hooks/useMoreButtonBottomSheet/index.tsx
879
- import { INTERNAL__appBridgeHandler, isMinVersionSupported as isMinVersionSupported2 } from "@apps-in-toss/native-modules";
879
+ import { INTERNAL__appBridgeHandler as INTERNAL__appBridgeHandler2, isMinVersionSupported as isMinVersionSupported2 } from "@apps-in-toss/native-modules";
880
880
  import { openURL as openURL5 } from "@granite-js/react-native";
881
881
  import { BottomSheet, List, ListHeader } from "@toss/tds-react-native";
882
882
  import { useAdaptive as useAdaptive2, useOverlay as useOverlay2 } from "@toss/tds-react-native/private";
@@ -1062,8 +1062,7 @@ function AppShareListMenu() {
1062
1062
  }
1063
1063
 
1064
1064
  // src/core/hooks/useMoreButtonBottomSheet/HomeShortcutMenu.tsx
1065
- import { getOperationalEnvironment as getOperationalEnvironment2 } from "@apps-in-toss/native-modules";
1066
- import { NativeModules } from "react-native";
1065
+ import { getOperationalEnvironment as getOperationalEnvironment2, INTERNAL__appBridgeHandler } from "@apps-in-toss/native-modules";
1067
1066
  import { jsx as jsx7 } from "react/jsx-runtime";
1068
1067
  function HomeShortcutMenu() {
1069
1068
  const isSandbox = getOperationalEnvironment2() === "sandbox";
@@ -1077,12 +1076,18 @@ function HomeShortcutMenu() {
1077
1076
  title: "\uD648 \uD654\uBA74\uC5D0 \uCD94\uAC00",
1078
1077
  iconURL: "https://static.toss.im/icons/png/4x/icon-plus-circle-mono.png",
1079
1078
  onPress: () => {
1080
- NativeModules.AppsInTossModule.addMiniAppShortcut({
1081
- title: globals.brandDisplayName,
1082
- appName: global.__granite.app.name,
1083
- iconUrl: globals.brandIcon,
1084
- guideUrl: "https://service.toss.im/app-mini-home/shortcut"
1085
- });
1079
+ INTERNAL__appBridgeHandler.invokeAppBridgeMethod(
1080
+ "addMiniAppShortcut",
1081
+ {
1082
+ title: globals.brandDisplayName,
1083
+ appName: global.__granite.app.name,
1084
+ iconUrl: globals.brandIcon,
1085
+ guideUrl: "https://service.toss.im/app-mini-home/shortcut"
1086
+ },
1087
+ { onSuccess: () => {
1088
+ }, onError: () => {
1089
+ } }
1090
+ );
1086
1091
  }
1087
1092
  }
1088
1093
  );
@@ -1154,7 +1159,7 @@ function useMoreButtonBottomSheet() {
1154
1159
  if (!isBottomSheetSupported) {
1155
1160
  return;
1156
1161
  }
1157
- INTERNAL__appBridgeHandler.invokeAppBridgeMethod(
1162
+ INTERNAL__appBridgeHandler2.invokeAppBridgeMethod(
1158
1163
  APP_BRIDGE_METHOD_NAME,
1159
1164
  {},
1160
1165
  {
@@ -1420,7 +1425,7 @@ function registerApp(container, { context, analytics }) {
1420
1425
  }
1421
1426
  function AppsInTossScreenContainer({ children }) {
1422
1427
  const isRNApp = getAppsInTossGlobals().webViewType == null;
1423
- return /* @__PURE__ */ jsx14(NavigationBarContextProvider, { children: /* @__PURE__ */ jsx14(Analytics.Screen, { children: isRNApp ? /* @__PURE__ */ jsx14(RNAppContainer, { children }) : children }) });
1428
+ return /* @__PURE__ */ jsx14(NavigationBarContextProvider, { children: isRNApp ? /* @__PURE__ */ jsx14(Analytics.Screen, { children: /* @__PURE__ */ jsx14(RNAppContainer, { children }) }) : children });
1424
1429
  }
1425
1430
  function getAppName() {
1426
1431
  try {
@@ -1446,7 +1451,9 @@ import {
1446
1451
  iapCreateOneTimePurchaseOrder,
1447
1452
  processProductGrant,
1448
1453
  requestOneTimePurchase,
1449
- safeSyncPostMessage
1454
+ safeSyncPostMessage,
1455
+ eventLog as eventLog2,
1456
+ INTERNAL__module as INTERNAL__module8
1450
1457
  } from "@apps-in-toss/native-modules";
1451
1458
  import * as appsInTossAsyncBridges from "@apps-in-toss/native-modules/async-bridges";
1452
1459
  import * as appsInTossConstantBridges from "@apps-in-toss/native-modules/constant-bridges";
@@ -1457,7 +1464,7 @@ import { getSchemeUri as getSchemeUri9 } from "@granite-js/react-native";
1457
1464
  import { ExternalWebViewScreen, tdsEvent } from "@toss/tds-react-native";
1458
1465
  import { useSafeAreaBottom, useSafeAreaTop as useSafeAreaTop3 } from "@toss/tds-react-native/private";
1459
1466
  import { useEffect as useEffect13, useMemo as useMemo6, useRef as useRef6, useState as useState6 } from "react";
1460
- import { BackHandler as BackHandler2, Linking, NativeModules as NativeModules2, Platform as Platform6 } from "react-native";
1467
+ import { BackHandler as BackHandler2, Linking, Platform as Platform6 } from "react-native";
1461
1468
 
1462
1469
  // src/components/GameWebView.tsx
1463
1470
  import { setIosSwipeGestureEnabled as setIosSwipeGestureEnabled3, getOperationalEnvironment as getOperationalEnvironment5 } from "@apps-in-toss/native-modules";
@@ -1632,7 +1639,7 @@ function convertIntentURL(url) {
1632
1639
  // src/ads/fetchTossAd.ts
1633
1640
  import {
1634
1641
  getOperationalEnvironment as getOperationalEnvironment6,
1635
- INTERNAL__appBridgeHandler as INTERNAL__appBridgeHandler2,
1642
+ INTERNAL__appBridgeHandler as INTERNAL__appBridgeHandler3,
1636
1643
  isMinVersionSupported as isMinVersionSupported4
1637
1644
  } from "@apps-in-toss/native-modules";
1638
1645
 
@@ -1664,7 +1671,7 @@ function fetchTossAd(params) {
1664
1671
  }
1665
1672
  const { onEvent, onError, options } = params;
1666
1673
  const { adGroupId } = options;
1667
- const unregisterCallbacks = INTERNAL__appBridgeHandler2.invokeAppBridgeMethod(
1674
+ const unregisterCallbacks = INTERNAL__appBridgeHandler3.invokeAppBridgeMethod(
1668
1675
  "fetchTossAd",
1669
1676
  { spaceUnitId: adGroupId, sessionId, sdkId: options.sdkId, availableStyleIds: options.availableStyleIds },
1670
1677
  {
@@ -1689,7 +1696,7 @@ fetchTossAd.isSupported = () => {
1689
1696
  };
1690
1697
 
1691
1698
  // src/ads/integratedAd.ts
1692
- import { GoogleAdMob, INTERNAL__appBridgeHandler as INTERNAL__appBridgeHandler3, isMinVersionSupported as isMinVersionSupported5 } from "@apps-in-toss/native-modules";
1699
+ import { GoogleAdMob, INTERNAL__appBridgeHandler as INTERNAL__appBridgeHandler4, isMinVersionSupported as isMinVersionSupported5 } from "@apps-in-toss/native-modules";
1693
1700
 
1694
1701
  // src/ads/generateRequestId.ts
1695
1702
  function generateRequestId() {
@@ -1809,7 +1816,7 @@ function generateLoadFullScreenAd(sdkId) {
1809
1816
  const { onEvent, onError, options } = params;
1810
1817
  const { adGroupId } = options;
1811
1818
  const referrer = getReferrer();
1812
- const unregisterCallbacks = INTERNAL__appBridgeHandler3.invokeAppBridgeMethod(
1819
+ const unregisterCallbacks = INTERNAL__appBridgeHandler4.invokeAppBridgeMethod(
1813
1820
  "loadTossAdOrAdmob",
1814
1821
  { spaceUnitId: adGroupId, referrer, sessionId, sdkId },
1815
1822
  {
@@ -1933,7 +1940,7 @@ function showFullScreenAd(params) {
1933
1940
  const { onEvent, onError, options } = params;
1934
1941
  const { adGroupId } = options;
1935
1942
  const referrer = getReferrer();
1936
- const unregisterCallbacks = INTERNAL__appBridgeHandler3.invokeAppBridgeMethod(
1943
+ const unregisterCallbacks = INTERNAL__appBridgeHandler4.invokeAppBridgeMethod(
1937
1944
  "showTossAdOrAdmob",
1938
1945
  { spaceUnitId: adGroupId, referrer, sessionId },
1939
1946
  {
@@ -2566,7 +2573,7 @@ var getReferrer2 = () => {
2566
2573
  return "";
2567
2574
  }
2568
2575
  };
2569
- var trackScreen = (url) => {
2576
+ var trackScreen = (url, title) => {
2570
2577
  const { groupId, search } = getGroupId(url);
2571
2578
  const log = {
2572
2579
  log_type: "screen",
@@ -2574,6 +2581,7 @@ var trackScreen = (url) => {
2574
2581
  params: {
2575
2582
  search,
2576
2583
  referrer: getReferrer2(),
2584
+ document_title: title,
2577
2585
  deployment_id: env.getDeploymentId(),
2578
2586
  deployment_timestamp: extractDateFromUUIDv7(env.getDeploymentId()).getTime()
2579
2587
  }
@@ -2722,8 +2730,8 @@ function WebView({ type, local, onMessage, ...props }) {
2722
2730
  /** Private */
2723
2731
  memoryDebugLog: webViewMemoryDebugLog,
2724
2732
  debugLog: async (event) => {
2725
- NativeModules2.AppsInTossModule?.eventLog(event);
2726
- NativeModules2.TossCoreModule?.eventLog({ params: event });
2733
+ eventLog2(event);
2734
+ INTERNAL__module8.tossCoreEventLog(event);
2727
2735
  }
2728
2736
  }
2729
2737
  });
@@ -2774,7 +2782,7 @@ function WebView({ type, local, onMessage, ...props }) {
2774
2782
  onBackButtonClick: webBackHandler.handleWebBack,
2775
2783
  onNavigationStateChange: (event) => {
2776
2784
  if (event.url) {
2777
- trackScreen(event.url);
2785
+ trackScreen(event.url, event.title);
2778
2786
  }
2779
2787
  props.onNavigationStateChange?.(event);
2780
2788
  webBackHandler.onNavigationStateChange(event);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@apps-in-toss/framework",
3
3
  "type": "module",
4
- "version": "2.0.4",
4
+ "version": "2.0.6",
5
5
  "description": "The framework for Apps In Toss",
6
6
  "scripts": {
7
7
  "typecheck": "tsc --noEmit",
@@ -55,12 +55,12 @@
55
55
  "ait": "./bin/ait.js"
56
56
  },
57
57
  "dependencies": {
58
- "@apps-in-toss/analytics": "2.0.4",
59
- "@apps-in-toss/cli": "2.0.4",
60
- "@apps-in-toss/native-modules": "2.0.4",
61
- "@apps-in-toss/plugins": "2.0.4",
62
- "@apps-in-toss/types": "2.0.4",
63
- "@apps-in-toss/user-scripts": "^2.0.4",
58
+ "@apps-in-toss/analytics": "2.0.6",
59
+ "@apps-in-toss/cli": "2.0.6",
60
+ "@apps-in-toss/native-modules": "2.0.6",
61
+ "@apps-in-toss/plugins": "2.0.6",
62
+ "@apps-in-toss/types": "2.0.6",
63
+ "@apps-in-toss/user-scripts": "^2.0.6",
64
64
  "es-hangul": "^2.3.2"
65
65
  },
66
66
  "devDependencies": {