@apps-in-toss/framework 0.0.0-dev.1755065572831 → 0.0.0-dev.1757040677030

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/index.js CHANGED
@@ -1,20 +1,16 @@
1
- var __defProp = Object.defineProperty;
2
- var __export = (target, all) => {
3
- for (var name in all)
4
- __defProp(target, name, { get: all[name], enumerable: true });
5
- };
6
-
7
1
  // src/index.ts
8
2
  import { Analytics as InternalAnalytics } from "@apps-in-toss/analytics";
9
3
 
10
4
  // src/core/registerApp.tsx
11
5
  import { Analytics } from "@apps-in-toss/analytics";
6
+ import { isMinVersionSupported, setIosSwipeGestureEnabled, eventLog } from "@apps-in-toss/native-modules";
7
+ import { Granite as Granite3 } from "@granite-js/react-native";
12
8
  import { TDSProvider } from "@toss-design-system/react-native";
13
- import { Bedrock as Bedrock3 } from "react-native-bedrock";
14
9
 
15
10
  // src/core/components/AppEvent.tsx
11
+ import { INTERNAL__module as INTERNAL__module2 } from "@apps-in-toss/native-modules";
12
+ import { Granite as Granite2, getSchemeUri as getSchemeUri3, useVisibility as useVisibility2 } from "@granite-js/react-native";
16
13
  import { useEffect as useEffect2 } from "react";
17
- import { Bedrock as Bedrock2, getSchemeUri as getSchemeUri3, useVisibility as useVisibility2 } from "react-native-bedrock";
18
14
 
19
15
  // src/env.ts
20
16
  var env = {
@@ -22,12 +18,13 @@ var env = {
22
18
  };
23
19
 
24
20
  // src/hooks/useCaptureExitLog.ts
21
+ import { INTERNAL__module } from "@apps-in-toss/native-modules";
22
+ import { Granite, useVisibility } from "@granite-js/react-native";
25
23
  import { useCallback, useEffect, useRef } from "react";
26
- import { Bedrock, useVisibility } from "react-native-bedrock";
27
24
 
28
25
  // src/core/hooks/useReferrer.ts
26
+ import { getSchemeUri } from "@granite-js/react-native";
29
27
  import { useMemo } from "react";
30
- import { getSchemeUri } from "react-native-bedrock";
31
28
  function useReferrer() {
32
29
  return useMemo(() => {
33
30
  try {
@@ -38,129 +35,8 @@ function useReferrer() {
38
35
  }, []);
39
36
  }
40
37
 
41
- // src/native-modules/tossCore.ts
42
- import { NativeModules as NativeModules2 } from "react-native";
43
-
44
- // src/native-modules/AppsInTossModule.ts
45
- import { NativeModules } from "react-native";
46
- var AppsInTossModuleInstance = NativeModules.AppsInTossModule;
47
- var AppsInTossModule = AppsInTossModuleInstance;
48
-
49
- // src/native-modules/getOperationalEnvironment.ts
50
- function getOperationalEnvironment() {
51
- return AppsInTossModule.operationalEnvironment;
52
- }
53
-
54
- // src/native-modules/isMinVersionSupported.ts
55
- import { Platform } from "react-native";
56
-
57
- // src/utils/compareVersion.ts
58
- var SEMVER_REGEX = /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\\-]+(?:\.[\da-z\\-]+)*))?(?:\+[\da-z\\-]+(?:\.[\da-z\\-]+)*)?)?)?$/i;
59
- var isWildcard = (val) => ["*", "x", "X"].includes(val);
60
- var tryParse = (val) => {
61
- const num = parseInt(val, 10);
62
- return isNaN(num) ? val : num;
63
- };
64
- var coerceTypes = (a, b) => {
65
- return typeof a === typeof b ? [a, b] : [String(a), String(b)];
66
- };
67
- var compareValues = (a, b) => {
68
- if (isWildcard(a) || isWildcard(b)) {
69
- return 0;
70
- }
71
- const [aVal, bVal] = coerceTypes(tryParse(a), tryParse(b));
72
- if (aVal > bVal) {
73
- return 1;
74
- }
75
- if (aVal < bVal) {
76
- return -1;
77
- }
78
- return 0;
79
- };
80
- var parseVersion = (version) => {
81
- if (typeof version !== "string") {
82
- throw new TypeError("Invalid argument: expected a string");
83
- }
84
- const match = version.match(SEMVER_REGEX);
85
- if (!match) {
86
- throw new Error(`Invalid semver: '${version}'`);
87
- }
88
- const [, major, minor, patch, build, preRelease] = match;
89
- return [major, minor, patch, build, preRelease];
90
- };
91
- var compareSegments = (a, b) => {
92
- const maxLength = Math.max(a.length, b.length);
93
- for (let i = 0; i < maxLength; i++) {
94
- const segA = a[i] ?? "0";
95
- const segB = b[i] ?? "0";
96
- const result = compareValues(segA, segB);
97
- if (result !== 0) {
98
- return result;
99
- }
100
- }
101
- return 0;
102
- };
103
- var compareVersions = (v1, v2) => {
104
- const seg1 = parseVersion(v1);
105
- const seg2 = parseVersion(v2);
106
- const preRelease1 = seg1.pop();
107
- const preRelease2 = seg2.pop();
108
- const mainCompare = compareSegments(seg1, seg2);
109
- if (mainCompare !== 0) {
110
- return mainCompare;
111
- }
112
- if (preRelease1 && preRelease2) {
113
- return compareSegments(preRelease1.split("."), preRelease2.split("."));
114
- }
115
- if (preRelease1) {
116
- return -1;
117
- }
118
- if (preRelease2) {
119
- return 1;
120
- }
121
- return 0;
122
- };
123
-
124
- // src/native-modules/isMinVersionSupported.ts
125
- function isMinVersionSupported(minVersions) {
126
- const operationalEnvironment2 = AppsInTossModule.operationalEnvironment;
127
- if (operationalEnvironment2 === "sandbox") {
128
- return true;
129
- }
130
- const currentVersion = AppsInTossModule.tossAppVersion;
131
- const isIOS = Platform.OS === "ios";
132
- const minVersion = isIOS ? minVersions.ios : minVersions.android;
133
- if (minVersion === void 0) {
134
- return false;
135
- }
136
- if (minVersion === "always") {
137
- return true;
138
- }
139
- if (minVersion === "never") {
140
- return false;
141
- }
142
- return compareVersions(currentVersion, minVersion) >= 0;
143
- }
144
-
145
- // src/native-modules/tossCore.ts
146
- var TossCoreModule = NativeModules2.TossCoreModule;
147
- function tossCoreEventLog(params) {
148
- const supported = isMinVersionSupported({ ios: "5.210.0", android: "5.210.0" });
149
- const isSandbox = getOperationalEnvironment() === "sandbox";
150
- if (!supported || isSandbox) {
151
- return;
152
- }
153
- TossCoreModule.eventLog({
154
- params: {
155
- log_name: params.log_name,
156
- log_type: params.log_type,
157
- params: params.params
158
- }
159
- });
160
- }
161
-
162
38
  // src/utils/isPrivateScheme.ts
163
- import { getSchemeUri as getSchemeUri2 } from "react-native-bedrock";
39
+ import { getSchemeUri as getSchemeUri2 } from "@granite-js/react-native";
164
40
  function isPrivateScheme() {
165
41
  try {
166
42
  return new URL(getSchemeUri2()).protocol === "intoss-private:";
@@ -187,7 +63,7 @@ function useCaptureExitLog() {
187
63
  return;
188
64
  }
189
65
  const stayTime = Math.floor(exitTime - enterTime.current);
190
- tossCoreEventLog({
66
+ INTERNAL__module.tossCoreEventLog({
191
67
  log_name: EXIT_IMPRESSION_LOG_NAME,
192
68
  log_type: "event",
193
69
  params: {
@@ -195,7 +71,7 @@ function useCaptureExitLog() {
195
71
  event_type: "impression",
196
72
  referrer,
197
73
  deployment_id: env.getDeploymentId(),
198
- app_name: Bedrock.appName,
74
+ app_name: Granite.appName,
199
75
  is_private: isPrivateScheme(),
200
76
  stay_time: stayTime.toString(),
201
77
  exit_time: exitTime.toString()
@@ -213,7 +89,7 @@ var ENTRY_APP_EVENT_SCHEMA_ID = 1562181;
213
89
  function EntryAppEvent() {
214
90
  const referrer = useReferrer() ?? "";
215
91
  useEffect2(() => {
216
- tossCoreEventLog({
92
+ INTERNAL__module2.tossCoreEventLog({
217
93
  log_name: "appsintoss_app_visit::impression__enter_appsintoss",
218
94
  log_type: "info",
219
95
  params: {
@@ -221,7 +97,7 @@ function EntryAppEvent() {
221
97
  schema_id: ENTRY_APP_EVENT_SCHEMA_ID,
222
98
  referrer,
223
99
  deployment_id: env.getDeploymentId(),
224
- app_name: Bedrock2.appName,
100
+ app_name: Granite2.appName,
225
101
  is_private: isPrivateScheme()
226
102
  }
227
103
  });
@@ -230,14 +106,14 @@ function EntryAppEvent() {
230
106
  }
231
107
  function SystemAppEvent({ ...initialProps }) {
232
108
  useEffect2(() => {
233
- tossCoreEventLog({
109
+ INTERNAL__module2.tossCoreEventLog({
234
110
  log_name: "AppsInTossInitialProps",
235
111
  log_type: "debug",
236
112
  params: {
237
113
  ...initialProps,
238
114
  schemeUri: getSchemeUri3(),
239
115
  deployment_id: env.getDeploymentId(),
240
- app_name: Bedrock2.appName,
116
+ app_name: Granite2.appName,
241
117
  is_private: isPrivateScheme()
242
118
  }
243
119
  });
@@ -260,204 +136,22 @@ var AppEvent = {
260
136
  StayTime: StayTimeAppEvent
261
137
  };
262
138
 
263
- // src/core/hooks/useAppsInTossBridge.ts
264
- import { useBridge } from "@toss-design-system/react-native";
139
+ // src/core/components/AppUpdate.tsx
140
+ import { openURL } from "@granite-js/react-native";
265
141
  import { useEffect as useEffect3 } from "react";
266
-
267
- // src/native-event-emitter/appsInTossEvent.ts
268
- import { BedrockEvent } from "react-native-bedrock";
269
-
270
- // src/native-event-emitter/event-plugins/EntryMessageExitedEvent.ts
271
- import { BedrockEventDefinition } from "react-native-bedrock";
272
- var EntryMessageExitedEvent = class extends BedrockEventDefinition {
273
- name = "entryMessageExited";
274
- remove() {
275
- }
276
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
277
- listener(_) {
278
- }
279
- };
280
-
281
- // src/native-event-emitter/event-plugins/UpdateLocationEvent.ts
282
- import { BedrockEventDefinition as BedrockEventDefinition2 } from "react-native-bedrock";
283
-
284
- // src/native-modules/getPermission.ts
285
- function getPermission(permission) {
286
- return AppsInTossModule.getPermission(permission);
287
- }
288
-
289
- // src/native-modules/openPermissionDialog.ts
290
- function openPermissionDialog(permission) {
291
- return AppsInTossModule.openPermissionDialog(permission);
292
- }
293
-
294
- // src/native-modules/requestPermission.ts
295
- async function requestPermission(permission) {
296
- const permissionStatus = await getPermission(permission);
297
- switch (permissionStatus) {
298
- case "allowed":
299
- case "denied":
300
- return permissionStatus;
301
- default:
302
- return openPermissionDialog(permission);
303
- }
304
- }
305
-
306
- // src/native-event-emitter/nativeEventEmitter.ts
307
- import { NativeEventEmitter } from "react-native";
308
- var nativeEventEmitter = new NativeEventEmitter(AppsInTossModuleInstance);
309
-
310
- // src/native-event-emitter/event-plugins/UpdateLocationEvent.ts
311
- var UpdateLocationEvent = class extends BedrockEventDefinition2 {
312
- name = "updateLocationEvent";
313
- subscriptionCount = 0;
314
- ref = {
315
- remove: () => {
316
- }
317
- };
318
- remove() {
319
- if (--this.subscriptionCount === 0) {
320
- AppsInTossModuleInstance.stopUpdateLocation({});
321
- }
322
- this.ref.remove();
323
- }
324
- listener(options, onEvent, onError) {
325
- requestPermission({ name: "geolocation", access: "access" }).then((permissionStatus) => {
326
- if (permissionStatus === "denied") {
327
- onError(new Error("\uC704\uCE58 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694."));
328
- return;
329
- }
330
- void AppsInTossModuleInstance.startUpdateLocation(options).catch(onError);
331
- const subscription = nativeEventEmitter.addListener("updateLocation", onEvent);
332
- this.ref = {
333
- remove: () => subscription?.remove()
334
- };
335
- this.subscriptionCount++;
336
- }).catch(onError);
337
- }
338
- };
339
-
340
- // src/native-event-emitter/internal/AppBridgeCallbackEvent.ts
341
- import { BedrockEventDefinition as BedrockEventDefinition3 } from "react-native-bedrock";
342
-
343
- // src/utils/generateUUID.ts
344
- function generateUUID(placeholder) {
345
- return placeholder ? (placeholder ^ Math.random() * 16 >> placeholder / 4).toString(16) : (String(1e7) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, generateUUID);
346
- }
347
-
348
- // src/native-event-emitter/internal/appBridge.ts
349
- var INTERNAL__callbacks = /* @__PURE__ */ new Map();
350
- function invokeAppBridgeCallback(id, ...args) {
351
- const callback = INTERNAL__callbacks.get(id);
352
- callback?.call(null, ...args);
353
- return Boolean(callback);
354
- }
355
- function invokeAppBridgeMethod(methodName, params, callbacks) {
356
- const { onSuccess, onError, ...appBridgeCallbacks } = callbacks;
357
- const { callbackMap, unregisterAll } = registerCallbacks(appBridgeCallbacks);
358
- const promise = AppsInTossModuleInstance[methodName]({
359
- params,
360
- callbacks: callbackMap
361
- });
362
- void promise.then(onSuccess).catch(onError);
363
- return unregisterAll;
364
- }
365
- function registerCallbacks(callbacks) {
366
- const callbackMap = {};
367
- for (const [callbackName, callback] of Object.entries(callbacks)) {
368
- const id = registerCallback(callback, callbackName);
369
- callbackMap[callbackName] = id;
370
- }
371
- const unregisterAll = () => {
372
- Object.values(callbackMap).forEach(unregisterCallback);
373
- };
374
- return { callbackMap, unregisterAll };
375
- }
376
- function registerCallback(callback, name = "unnamed") {
377
- const uniqueId = generateUUID();
378
- const callbackId = `${uniqueId}__${name}`;
379
- INTERNAL__callbacks.set(callbackId, callback);
380
- return callbackId;
381
- }
382
- function unregisterCallback(id) {
383
- INTERNAL__callbacks.delete(id);
384
- }
385
- function getCallbackIds() {
386
- return Array.from(INTERNAL__callbacks.keys());
142
+ import { Fragment, jsx } from "react/jsx-runtime";
143
+ var UPDATE_SCHEME = "servicetoss://update/forced/j?updateType=required";
144
+ function AppUpdate() {
145
+ useEffect3(() => {
146
+ openURL(`supertoss://closePage?url=${UPDATE_SCHEME}`);
147
+ }, []);
148
+ return /* @__PURE__ */ jsx(Fragment, {});
387
149
  }
388
- var INTERNAL__appBridgeHandler = {
389
- invokeAppBridgeCallback,
390
- invokeAppBridgeMethod,
391
- registerCallback,
392
- unregisterCallback,
393
- getCallbackIds
394
- };
395
150
 
396
- // src/native-event-emitter/internal/AppBridgeCallbackEvent.ts
397
- var UNSAFE__nativeEventEmitter = nativeEventEmitter;
398
- var AppBridgeCallbackEvent = class _AppBridgeCallbackEvent extends BedrockEventDefinition3 {
399
- static INTERNAL__appBridgeSubscription;
400
- name = "appBridgeCallbackEvent";
401
- constructor() {
402
- super();
403
- this.registerAppBridgeCallbackEventListener();
404
- }
405
- remove() {
406
- }
407
- listener() {
408
- }
409
- registerAppBridgeCallbackEventListener() {
410
- if (_AppBridgeCallbackEvent.INTERNAL__appBridgeSubscription != null) {
411
- return;
412
- }
413
- _AppBridgeCallbackEvent.INTERNAL__appBridgeSubscription = UNSAFE__nativeEventEmitter.addListener(
414
- "appBridgeCallback",
415
- this.ensureInvokeAppBridgeCallback
416
- );
417
- }
418
- ensureInvokeAppBridgeCallback(result) {
419
- if (typeof result === "object" && typeof result.name === "string") {
420
- INTERNAL__appBridgeHandler.invokeAppBridgeCallback(result.name, result.params);
421
- } else {
422
- console.warn("Invalid app bridge callback result:", result);
423
- }
424
- }
425
- };
426
-
427
- // src/native-event-emitter/internal/VisibilityChangedByTransparentServiceWebEvent.ts
428
- import { BedrockEventDefinition as BedrockEventDefinition4 } from "react-native-bedrock";
429
- var VisibilityChangedByTransparentServiceWebEvent = class extends BedrockEventDefinition4 {
430
- name = "onVisibilityChangedByTransparentServiceWeb";
431
- subscription = null;
432
- remove() {
433
- this.subscription?.remove();
434
- this.subscription = null;
435
- }
436
- listener(options, onEvent, onError) {
437
- const subscription = nativeEventEmitter.addListener("visibilityChangedByTransparentServiceWeb", (params) => {
438
- if (this.isVisibilityChangedByTransparentServiceWebResult(params)) {
439
- if (params.callbackId === options.callbackId) {
440
- onEvent(params.isVisible);
441
- }
442
- } else {
443
- onError(new Error("Invalid visibility changed by transparent service web result"));
444
- }
445
- });
446
- this.subscription = subscription;
447
- }
448
- isVisibilityChangedByTransparentServiceWebResult(params) {
449
- return typeof params === "object" && typeof params.callbackId === "string" && typeof params.isVisible === "boolean";
450
- }
451
- };
452
-
453
- // src/native-event-emitter/appsInTossEvent.ts
454
- var appsInTossEvent = new BedrockEvent([
455
- new UpdateLocationEvent(),
456
- new EntryMessageExitedEvent(),
457
- // Internal events
458
- new AppBridgeCallbackEvent(),
459
- new VisibilityChangedByTransparentServiceWebEvent()
460
- ]);
151
+ // src/core/hooks/useAppsInTossBridge.ts
152
+ import { appsInTossEvent } from "@apps-in-toss/native-modules";
153
+ import { useBridge } from "@toss-design-system/react-native";
154
+ import { useEffect as useEffect4 } from "react";
461
155
 
462
156
  // src/core/utils/getAppsInTossGlobals.ts
463
157
  function getAppsInTossGlobals() {
@@ -476,7 +170,7 @@ function toIcon(source) {
476
170
  function useAppsInTossBridge() {
477
171
  const controller = useBridge();
478
172
  const appsInTossGlobals2 = getAppsInTossGlobals();
479
- useEffect3(() => {
173
+ useEffect4(() => {
480
174
  const commonProps = {
481
175
  serviceName: appsInTossGlobals2.brandDisplayName,
482
176
  icon: toIcon(appsInTossGlobals2.brandIcon),
@@ -492,234 +186,39 @@ function useAppsInTossBridge() {
492
186
  }, []);
493
187
  }
494
188
 
495
- // src/async-bridges.ts
496
- var async_bridges_exports = {};
497
- __export(async_bridges_exports, {
498
- appLogin: () => appLogin,
499
- checkoutPayment: () => checkoutPayment,
500
- eventLog: () => eventLog,
501
- fetchAlbumPhotos: () => fetchAlbumPhotos,
502
- fetchContacts: () => fetchContacts,
503
- getClipboardText: () => getClipboardText,
504
- getCurrentLocation: () => getCurrentLocation,
505
- getGameCenterGameProfile: () => getGameCenterGameProfile,
506
- getTossShareLink: () => getTossShareLink,
507
- openCamera: () => openCamera,
508
- openGameCenterLeaderboard: () => openGameCenterLeaderboard,
509
- saveBase64Data: () => saveBase64Data,
510
- setClipboardText: () => setClipboardText,
511
- setDeviceOrientation: () => setDeviceOrientation,
512
- submitGameCenterLeaderBoardScore: () => submitGameCenterLeaderBoardScore
513
- });
514
-
515
- // src/native-modules/setClipboardText.ts
516
- async function setClipboardText(text) {
517
- const permissionStatus = await requestPermission({ name: "clipboard", access: "write" });
518
- if (permissionStatus === "denied") {
519
- throw new Error("\uD074\uB9BD\uBCF4\uB4DC \uC4F0\uAE30 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
520
- }
521
- return AppsInTossModule.setClipboardText({ text });
522
- }
523
-
524
- // src/native-modules/getClipboardText.ts
525
- async function getClipboardText() {
526
- const permissionStatus = await requestPermission({ name: "clipboard", access: "read" });
527
- if (permissionStatus === "denied") {
528
- throw new Error("\uD074\uB9BD\uBCF4\uB4DC \uC77D\uAE30 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
529
- }
530
- return AppsInTossModule.getClipboardText({});
531
- }
532
-
533
- // src/native-modules/fetchContacts.ts
534
- async function fetchContacts({
535
- size,
536
- offset,
537
- query
538
- }) {
539
- const permissionStatus = await requestPermission({ name: "contacts", access: "read" });
540
- if (permissionStatus === "denied") {
541
- throw new Error("\uC5F0\uB77D\uCC98 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
542
- }
543
- const contacts = await AppsInTossModule.fetchContacts({
544
- size,
545
- offset,
546
- query
547
- });
548
- return {
549
- result: contacts.result,
550
- nextOffset: contacts.nextOffset ?? null,
551
- done: contacts.done
552
- };
553
- }
554
-
555
- // src/native-modules/fetchAlbumPhotos.ts
556
- var DEFAULT_MAX_COUNT = 10;
557
- var DEFAULT_MAX_WIDTH = 1024;
558
- async function fetchAlbumPhotos(options) {
559
- const permissionStatus = await requestPermission({ name: "photos", access: "read" });
560
- if (permissionStatus === "denied") {
561
- throw new Error("\uC0AC\uC9C4\uCCA9 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
562
- }
563
- const albumPhotos = await AppsInTossModule.fetchAlbumPhotos({
564
- ...options,
565
- maxCount: options.maxCount ?? DEFAULT_MAX_COUNT,
566
- maxWidth: options.maxWidth ?? DEFAULT_MAX_WIDTH
567
- });
568
- return albumPhotos;
569
- }
570
-
571
- // src/native-modules/getCurrentLocation.ts
572
- async function getCurrentLocation(options) {
573
- const permissionStatus = await requestPermission({ name: "geolocation", access: "access" });
574
- if (permissionStatus === "denied") {
575
- throw new Error("\uC704\uCE58 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
576
- }
577
- const position = await AppsInTossModule.getCurrentLocation(options);
578
- return position;
579
- }
580
-
581
- // src/native-modules/openCamera.ts
582
- async function openCamera(options) {
583
- const permissionStatus = await requestPermission({ name: "camera", access: "access" });
584
- if (permissionStatus === "denied") {
585
- throw new Error("\uCE74\uBA54\uB77C \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
586
- }
587
- const photo = await AppsInTossModule.openCamera({ base64: false, maxWidth: 1024, ...options });
588
- return photo;
589
- }
590
-
591
- // src/native-modules/appLogin.ts
592
- async function appLogin() {
593
- return AppsInTossModule.appLogin({});
594
- }
595
-
596
- // src/native-modules/checkoutPayment.ts
597
- async function checkoutPayment(options) {
598
- return AppsInTossModule.checkoutPayment({ params: options });
599
- }
600
-
601
- // src/native-modules/eventLog.ts
602
- function normalizeParams(params) {
603
- return Object.fromEntries(
604
- Object.entries(params).filter(([, value]) => value !== void 0).map(([key, value]) => [key, String(value)])
605
- );
606
- }
607
- async function eventLog(params) {
608
- if (AppsInTossModule.operationalEnvironment === "sandbox") {
609
- console.log("[eventLogDebug]", {
610
- log_name: params.log_name,
611
- log_type: params.log_type,
612
- params: normalizeParams(params.params)
613
- });
614
- return;
615
- }
616
- const isSupported = isMinVersionSupported({
617
- android: "5.208.0",
618
- ios: "5.208.0"
619
- });
620
- if (!isSupported) {
621
- return;
622
- }
623
- return AppsInTossModule.eventLog({
624
- log_name: params.log_name,
625
- log_type: params.log_type,
626
- params: normalizeParams(params.params)
627
- });
628
- }
629
-
630
- // src/native-modules/getTossShareLink.ts
631
- async function getTossShareLink(path) {
632
- const { shareLink } = await AppsInTossModule.getTossShareLink({});
633
- const shareUrl = new URL(shareLink);
634
- shareUrl.searchParams.set("deep_link_value", path);
635
- shareUrl.searchParams.set("af_dp", path);
636
- return shareUrl.toString();
637
- }
638
-
639
- // src/native-modules/setDeviceOrientation.ts
640
- async function setDeviceOrientation(options) {
641
- const isSupported = isMinVersionSupported({
642
- android: "5.215.0",
643
- ios: "5.215.0"
644
- });
645
- if (!isSupported) {
646
- return;
647
- }
648
- return AppsInTossModule.setDeviceOrientation(options);
649
- }
650
-
651
- // src/native-modules/saveBase64Data.ts
652
- async function saveBase64Data(params) {
653
- const isSupported = isMinVersionSupported({
654
- android: "5.218.0",
655
- ios: "5.216.0"
656
- });
657
- if (!isSupported) {
658
- console.warn("saveBase64Data is not supported in this app version");
659
- return;
660
- }
661
- await AppsInTossModule.saveBase64Data(params);
662
- }
663
-
664
- // src/constant/game-center.ts
665
- var GAME_PROFILE_WEBVIEW_URL = "https://service.toss.im/game-center/profile";
666
- var GAME_CENTER_MIN_VERSION = {
667
- android: "5.221.0",
668
- ios: "5.221.0"
669
- };
670
-
671
- // src/native-modules/getGameCenterGameProfile.ts
672
- async function getGameCenterGameProfile() {
673
- const isSupported = isMinVersionSupported(GAME_CENTER_MIN_VERSION);
674
- if (!isSupported) {
675
- return;
676
- }
677
- return AppsInTossModule.getGameCenterGameProfile({});
678
- }
679
-
680
- // src/native-modules/openGameCenterLeaderboard.ts
681
- import { openURL } from "react-native-bedrock";
682
- async function openGameCenterLeaderboard() {
683
- if (!isMinVersionSupported(GAME_CENTER_MIN_VERSION)) {
684
- return;
685
- }
686
- const url = new URL("servicetoss://game-center/leaderboard?_navbar=hide");
687
- url.searchParams.set("appName", getAppName());
688
- url.searchParams.set("referrer", `appsintoss.${getAppName()}`);
689
- return openURL(url.toString());
690
- }
691
-
692
- // src/native-modules/submitGameCenterLeaderBoardScore.ts
693
- async function submitGameCenterLeaderBoardScore(params) {
694
- const isSupported = isMinVersionSupported(GAME_CENTER_MIN_VERSION);
695
- if (!isSupported) {
696
- return;
697
- }
698
- return AppsInTossModule.submitGameCenterLeaderBoardScore(params);
699
- }
700
-
701
189
  // src/core/registerApp.tsx
702
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
190
+ import { Fragment as Fragment2, jsx as jsx2, jsxs } from "react/jsx-runtime";
703
191
  function AppsInTossContainer(Container, { children, ...initialProps }) {
704
- return /* @__PURE__ */ jsxs(Fragment, { children: [
705
- /* @__PURE__ */ jsx(AppEvent.StayTime, {}),
706
- /* @__PURE__ */ jsx(AppEvent.Entry, {}),
707
- /* @__PURE__ */ jsx(AppEvent.System, { ...initialProps }),
708
- /* @__PURE__ */ jsx(Container, { ...initialProps, children: /* @__PURE__ */ jsx(TDSProvider, { colorPreference: "light", token: { color: { primary: getAppsInTossGlobals().brandPrimaryColor } }, children: /* @__PURE__ */ jsx(TDSContainer, { ...initialProps, children }) }) })
192
+ if (!isMinVersionSupported({
193
+ android: "5.220.0",
194
+ ios: "5.221.0"
195
+ })) {
196
+ return /* @__PURE__ */ jsxs(Fragment2, { children: [
197
+ /* @__PURE__ */ jsx2(AppEvent.Entry, {}),
198
+ /* @__PURE__ */ jsx2(AppEvent.System, { ...initialProps }),
199
+ /* @__PURE__ */ jsx2(AppUpdate, {})
200
+ ] });
201
+ }
202
+ return /* @__PURE__ */ jsxs(Fragment2, { children: [
203
+ /* @__PURE__ */ jsx2(AppEvent.StayTime, {}),
204
+ /* @__PURE__ */ jsx2(AppEvent.Entry, {}),
205
+ /* @__PURE__ */ jsx2(AppEvent.System, { ...initialProps }),
206
+ /* @__PURE__ */ jsx2(Container, { ...initialProps, children: /* @__PURE__ */ jsx2(TDSProvider, { colorPreference: "light", token: { color: { primary: getAppsInTossGlobals().brandPrimaryColor } }, children: /* @__PURE__ */ jsx2(TDSContainer, { ...initialProps, children }) }) })
709
207
  ] });
710
208
  }
711
209
  function TDSContainer({ children }) {
712
210
  useAppsInTossBridge();
713
- return /* @__PURE__ */ jsx(Fragment, { children });
211
+ return /* @__PURE__ */ jsx2(Fragment2, { children });
714
212
  }
715
213
  function registerApp(container, { context, analytics }) {
716
214
  Analytics.init({
717
215
  logger: (params) => void eventLog(params),
718
216
  debug: analytics?.debug ?? __DEV__
719
217
  });
720
- return Bedrock3.registerApp(AppsInTossContainer.bind(null, container), {
218
+ const App = Granite3.registerApp(AppsInTossContainer.bind(null, container), {
721
219
  appName: getAppName(),
722
220
  context,
221
+ setIosSwipeGestureEnabled,
723
222
  router: {
724
223
  screenContainer: Analytics.Screen,
725
224
  defaultScreenOption: {
@@ -727,10 +226,12 @@ function registerApp(container, { context, analytics }) {
727
226
  }
728
227
  }
729
228
  });
229
+ global.Page = App;
230
+ return App;
730
231
  }
731
232
  function getAppName() {
732
233
  try {
733
- return global.__bedrock.app.name;
234
+ return global.__granite.app.name;
734
235
  } catch (error) {
735
236
  console.error("unexpected error occurred while getting app name");
736
237
  throw error;
@@ -742,211 +243,14 @@ var AppsInToss = {
742
243
  registerApp
743
244
  };
744
245
 
745
- // src/native-event-emitter/startUpdateLocation.ts
746
- function startUpdateLocation(eventParams) {
747
- return appsInTossEvent.addEventListener("updateLocationEvent", eventParams);
748
- }
749
-
750
- // ../../.yarn/cache/es-toolkit-npm-1.34.1-4cd6371dcb-aab6d07be3.zip/node_modules/es-toolkit/dist/function/noop.mjs
751
- function noop() {
752
- }
753
-
754
- // src/native-modules/ads/googleAdMob.ts
755
- function loadAdMobInterstitialAd(params) {
756
- if (!loadAdMobInterstitialAd.isSupported()) {
757
- params.onError(new Error(UNSUPPORTED_ERROR_MESSAGE));
758
- return noop;
759
- }
760
- const { onEvent, onError, options } = params;
761
- const unregisterCallbacks = INTERNAL__appBridgeHandler.invokeAppBridgeMethod("loadAdMobInterstitialAd", options, {
762
- onAdClicked: () => {
763
- onEvent({ type: "clicked" });
764
- },
765
- onAdDismissed: () => {
766
- onEvent({ type: "dismissed" });
767
- },
768
- onAdFailedToShow: () => {
769
- onEvent({ type: "failedToShow" });
770
- },
771
- onAdImpression: () => {
772
- onEvent({ type: "impression" });
773
- },
774
- onAdShow: () => {
775
- onEvent({ type: "show" });
776
- },
777
- onSuccess: (result) => onEvent({ type: "loaded", data: result }),
778
- onError
779
- });
780
- return unregisterCallbacks;
781
- }
782
- function showAdMobInterstitialAd(params) {
783
- if (!showAdMobInterstitialAd.isSupported()) {
784
- params.onError(new Error(UNSUPPORTED_ERROR_MESSAGE));
785
- return noop;
786
- }
787
- const { onEvent, onError, options } = params;
788
- const unregisterCallbacks = INTERNAL__appBridgeHandler.invokeAppBridgeMethod("showAdMobInterstitialAd", options, {
789
- onSuccess: () => onEvent({ type: "requested" }),
790
- onError
791
- });
792
- return unregisterCallbacks;
793
- }
794
- function loadAdMobRewardedAd(params) {
795
- if (!loadAdMobRewardedAd.isSupported()) {
796
- params.onError(new Error(UNSUPPORTED_ERROR_MESSAGE));
797
- return noop;
798
- }
799
- const { onEvent, onError, options } = params;
800
- const unregisterCallbacks = INTERNAL__appBridgeHandler.invokeAppBridgeMethod("loadAdMobRewardedAd", options, {
801
- onAdClicked: () => {
802
- onEvent({ type: "clicked" });
803
- },
804
- onAdDismissed: () => {
805
- onEvent({ type: "dismissed" });
806
- },
807
- onAdFailedToShow: () => {
808
- onEvent({ type: "failedToShow" });
809
- },
810
- onAdImpression: () => {
811
- onEvent({ type: "impression" });
812
- },
813
- onAdShow: () => {
814
- onEvent({ type: "show" });
815
- },
816
- onUserEarnedReward: () => {
817
- onEvent({ type: "userEarnedReward" });
818
- },
819
- onSuccess: (result) => onEvent({ type: "loaded", data: result }),
820
- onError
821
- });
822
- return unregisterCallbacks;
823
- }
824
- function showAdMobRewardedAd(params) {
825
- if (!showAdMobRewardedAd.isSupported()) {
826
- params.onError(new Error(UNSUPPORTED_ERROR_MESSAGE));
827
- return noop;
828
- }
829
- const { onEvent, onError, options } = params;
830
- const unregisterCallbacks = INTERNAL__appBridgeHandler.invokeAppBridgeMethod("showAdMobRewardedAd", options, {
831
- onSuccess: () => onEvent({ type: "requested" }),
832
- onError
833
- });
834
- return unregisterCallbacks;
835
- }
836
- var ANDROID_GOOGLE_AD_MOB_SUPPORTED_VERSION = "5.209.0";
837
- var IOS_GOOGLE_AD_MOB_SUPPORTED_VERSION = "5.209.0";
838
- var UNSUPPORTED_ERROR_MESSAGE = "This feature is not supported in the current environment";
839
- var ENVIRONMENT = getOperationalEnvironment();
840
- function createIsSupported() {
841
- return () => {
842
- if (ENVIRONMENT !== "toss") {
843
- return false;
844
- }
845
- return isMinVersionSupported({
846
- android: ANDROID_GOOGLE_AD_MOB_SUPPORTED_VERSION,
847
- ios: IOS_GOOGLE_AD_MOB_SUPPORTED_VERSION
848
- });
849
- };
850
- }
851
- loadAdMobInterstitialAd.isSupported = createIsSupported();
852
- loadAdMobRewardedAd.isSupported = createIsSupported();
853
- showAdMobInterstitialAd.isSupported = createIsSupported();
854
- showAdMobRewardedAd.isSupported = createIsSupported();
855
-
856
- // src/native-modules/getDeviceId.ts
857
- function getDeviceId() {
858
- return AppsInTossModule.deviceId;
859
- }
860
-
861
- // src/native-modules/getTossAppVersion.ts
862
- function getTossAppVersion() {
863
- return AppsInTossModule.tossAppVersion;
864
- }
865
-
866
- // src/native-modules/iap.ts
867
- async function createOneTimePurchaseOrder(params) {
868
- const isSupported = isMinVersionSupported({
869
- android: "5.219.0",
870
- ios: "5.219.0"
871
- });
872
- if (!isSupported) {
873
- return;
874
- }
875
- return AppsInTossModule.iapCreateOneTimePurchaseOrder(params);
876
- }
877
- async function getProductItemList() {
878
- const isSupported = isMinVersionSupported({
879
- android: "5.219.0",
880
- ios: "5.219.0"
881
- });
882
- if (!isSupported) {
883
- return;
884
- }
885
- return AppsInTossModule.iapGetProductItemList({});
886
- }
887
- var IAP = {
888
- createOneTimePurchaseOrder,
889
- getProductItemList
890
- };
891
-
892
- // src/native-modules/storage.ts
893
- function getItem(key) {
894
- return AppsInTossModule.getStorageItem({ key });
895
- }
896
- function setItem(key, value) {
897
- return AppsInTossModule.setStorageItem({
898
- key,
899
- value
900
- });
901
- }
902
- function removeItem(key) {
903
- return AppsInTossModule.removeStorageItem({ key });
904
- }
905
- function clearItems() {
906
- return AppsInTossModule.clearStorage({});
907
- }
908
- var Storage = {
909
- getItem,
910
- setItem,
911
- removeItem,
912
- clearItems
913
- };
914
-
915
- // src/native-modules/contactsViral.ts
916
- function contactsViral(params) {
917
- const isSupported = isMinVersionSupported({
918
- android: "5.223.0",
919
- ios: "5.223.0"
920
- });
921
- if (!isSupported) {
922
- return () => {
923
- };
924
- }
925
- const { onEvent, onError, options } = params;
926
- const unregisterCallbacks = INTERNAL__appBridgeHandler.invokeAppBridgeMethod("contactsViral", options, {
927
- onRewardFromContactsViral: (result) => {
928
- onEvent({ type: "sendViral", data: result });
929
- },
930
- onSuccess: (result) => {
931
- onEvent({ type: "close", data: result });
932
- },
933
- onError
934
- });
935
- return unregisterCallbacks;
936
- }
937
-
938
- // src/native-modules/index.ts
939
- var TossPay = {
940
- checkoutPayment
941
- };
942
- var GoogleAdMob = {
943
- loadAdMobInterstitialAd,
944
- showAdMobInterstitialAd,
945
- loadAdMobRewardedAd,
946
- showAdMobRewardedAd
947
- };
948
-
949
246
  // src/components/WebView.tsx
247
+ import { GoogleAdMob, IAP, Storage, AppsInTossModule, appsInTossEvent as appsInTossEvent3 } from "@apps-in-toss/native-modules";
248
+ import * as appsInTossAsyncBridges from "@apps-in-toss/native-modules/async-bridges";
249
+ import * as appsInTossConstantBridges from "@apps-in-toss/native-modules/constant-bridges";
250
+ import * as appsInTossEventBridges from "@apps-in-toss/native-modules/event-bridges";
251
+ import { getSchemeUri as getSchemeUri5, useGraniteEvent } from "@granite-js/react-native";
252
+ import * as graniteAsyncBridges from "@granite-js/react-native/async-bridges";
253
+ import * as graniteConstantBridges from "@granite-js/react-native/constant-bridges";
950
254
  import {
951
255
  ExternalWebViewScreen,
952
256
  PartnerWebViewScreen,
@@ -954,43 +258,50 @@ import {
954
258
  usePartnerNavigation
955
259
  } from "@toss-design-system/react-native";
956
260
  import { useSafeAreaBottom, useSafeAreaTop as useSafeAreaTop2 } from "@toss-design-system/react-native/private";
957
- import { useCallback as useCallback5, useEffect as useEffect7, useMemo as useMemo3, useState as useState4 } from "react";
958
- import { Platform as Platform7 } from "react-native";
959
- import { getSchemeUri as getSchemeUri5, useBackEvent, useBedrockEvent, closeView as closeView3 } from "react-native-bedrock";
960
- import * as bedrockAsyncBridges from "react-native-bedrock/async-bridges";
961
- import * as bedrockConstantBridges from "react-native-bedrock/constant-bridges";
261
+ import { useCallback as useCallback5, useEffect as useEffect8, useMemo as useMemo3, useState as useState4 } from "react";
262
+ import { BackHandler as BackHandler2, Platform as Platform6 } from "react-native";
962
263
 
963
264
  // src/components/GameWebView.tsx
265
+ import { setIosSwipeGestureEnabled as setIosSwipeGestureEnabled2, appsInTossEvent as appsInTossEvent2, getOperationalEnvironment } from "@apps-in-toss/native-modules";
964
266
  import {
965
267
  WebView as PlainWebView
966
- } from "@react-native-bedrock/native/react-native-webview";
268
+ } from "@granite-js/native/react-native-webview";
269
+ import { closeView as closeView2 } from "@granite-js/react-native";
967
270
  import { useDialog as useDialog2 } from "@toss-design-system/react-native";
968
271
  import { josa as josa2 } from "es-hangul";
969
- import { forwardRef, useCallback as useCallback3, useEffect as useEffect5, useState as useState2 } from "react";
970
- import { BackHandler, Platform as Platform6 } from "react-native";
971
- import { closeView as closeView2, setIosSwipeGestureEnabled } from "react-native-bedrock";
272
+ import { forwardRef, useCallback as useCallback3, useEffect as useEffect6, useState as useState2 } from "react";
273
+ import { BackHandler, Platform as Platform5 } from "react-native";
972
274
 
973
275
  // src/components/GameProfile.tsx
276
+ import { getGameCenterGameProfile as getGameCenterGameProfile2, isMinVersionSupported as isMinVersionSupported2 } from "@apps-in-toss/native-modules";
974
277
  import { Loader } from "@toss-design-system/react-native";
975
- import { useEffect as useEffect4 } from "react";
278
+ import { useEffect as useEffect5 } from "react";
976
279
  import { Pressable, View } from "react-native";
977
280
 
281
+ // src/constant/game-center.ts
282
+ var GAME_PROFILE_WEBVIEW_URL = "https://service.toss.im/game-center/profile";
283
+ var GAME_CENTER_MIN_VERSION = {
284
+ android: "5.221.0",
285
+ ios: "5.221.0"
286
+ };
287
+
978
288
  // src/hooks/useGameCenterProfile.ts
289
+ import { getGameCenterGameProfile } from "@apps-in-toss/native-modules";
290
+ import { closeView, openURL as openURL3 } from "@granite-js/react-native";
979
291
  import { useDialog } from "@toss-design-system/react-native";
980
292
  import { josa } from "es-hangul";
981
293
  import { useCallback as useCallback2, useRef as useRef2, useState } from "react";
982
- import { closeView, openURL as openURL3 } from "react-native-bedrock";
983
294
 
984
295
  // src/components/GameProfileToast.tsx
985
296
  import { Asset, Toast } from "@toss-design-system/react-native";
986
297
  import { AdaptiveColorProvider, ColorPreferenceProvider, useOverlay } from "@toss-design-system/react-native/private";
987
- import { jsx as jsx2 } from "react/jsx-runtime";
298
+ import { jsx as jsx3 } from "react/jsx-runtime";
988
299
  var useGameProfileToast = () => {
989
300
  const overlay = useOverlay();
990
301
  const openGameProfileToast = (nickname, profileImageUri) => {
991
302
  return new Promise((resolve) => {
992
303
  overlay.open(({ isOpen, close, exit }) => {
993
- return /* @__PURE__ */ jsx2(ColorPreferenceProvider, { colorPreference: "dark", children: /* @__PURE__ */ jsx2(AdaptiveColorProvider, { children: /* @__PURE__ */ jsx2(
304
+ return /* @__PURE__ */ jsx3(ColorPreferenceProvider, { colorPreference: "dark", children: /* @__PURE__ */ jsx3(AdaptiveColorProvider, { children: /* @__PURE__ */ jsx3(
994
305
  Toast,
995
306
  {
996
307
  open: isOpen,
@@ -1001,7 +312,7 @@ var useGameProfileToast = () => {
1001
312
  onExited: exit,
1002
313
  position: "top",
1003
314
  text: `${nickname}\uB2D8 \uBC18\uAC00\uC6CC\uC694!`,
1004
- icon: /* @__PURE__ */ jsx2(
315
+ icon: /* @__PURE__ */ jsx3(
1005
316
  Asset.Image,
1006
317
  {
1007
318
  style: { borderRadius: 64, overflow: "hidden" },
@@ -1024,22 +335,18 @@ var DEFAULT_ERROR = {
1024
335
  };
1025
336
 
1026
337
  // src/utils/market.ts
1027
- import { Platform as Platform2 } from "react-native";
338
+ import { Platform } from "react-native";
1028
339
  var PLAYSTORE_LINK = "https://play.google.com/store/apps/details?id=viva.republica.toss";
1029
340
  var APPSTORE_LINK = "https://itunes.apple.com/app/id839333328";
1030
341
  var getMarketLink = () => {
1031
- return Platform2.OS === "android" ? PLAYSTORE_LINK : APPSTORE_LINK;
342
+ return Platform.OS === "android" ? PLAYSTORE_LINK : APPSTORE_LINK;
1032
343
  };
1033
344
 
1034
345
  // src/utils/openTransparentWebView.ts
1035
- import { openURL as openURL2 } from "react-native-bedrock";
1036
-
1037
- // src/native-event-emitter/internal/onVisibilityChangedByTransparentServiceWeb.ts
1038
- function onVisibilityChangedByTransparentServiceWeb(eventParams) {
1039
- return appsInTossEvent.addEventListener("onVisibilityChangedByTransparentServiceWeb", eventParams);
1040
- }
346
+ import { openURL as openURL2 } from "@granite-js/react-native";
1041
347
 
1042
348
  // src/private.ts
349
+ import { onVisibilityChangedByTransparentServiceWeb } from "@apps-in-toss/native-modules";
1043
350
  var INTERNAL__onVisibilityChangedByTransparentServiceWeb = onVisibilityChangedByTransparentServiceWeb;
1044
351
 
1045
352
  // src/utils/openTransparentWebView.ts
@@ -1168,7 +475,7 @@ var Z_INDEX = {
1168
475
  };
1169
476
 
1170
477
  // src/components/GameProfile.tsx
1171
- import { Fragment as Fragment2, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
478
+ import { Fragment as Fragment3, jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
1172
479
  var GameProfile = ({ children, isReadyForProfileUI }) => {
1173
480
  const {
1174
481
  profileData,
@@ -1184,10 +491,10 @@ var GameProfile = ({ children, isReadyForProfileUI }) => {
1184
491
  openErrorAlert,
1185
492
  openGameProfileToast
1186
493
  } = useGameCenterProfile(isReadyForProfileUI);
1187
- useEffect4(() => {
494
+ useEffect5(() => {
1188
495
  try {
1189
496
  const getProfileData = async () => {
1190
- const data = await getGameCenterGameProfile();
497
+ const data = await getGameCenterGameProfile2();
1191
498
  setProfileData(data);
1192
499
  setIsProfileDataLoading(false);
1193
500
  };
@@ -1197,7 +504,7 @@ var GameProfile = ({ children, isReadyForProfileUI }) => {
1197
504
  setIsProfileDataLoading(false);
1198
505
  }
1199
506
  }, []);
1200
- useEffect4(() => {
507
+ useEffect5(() => {
1201
508
  const handleGameProfileFlow = async () => {
1202
509
  if (!canShowBottomSheetOrToast) {
1203
510
  return;
@@ -1206,7 +513,7 @@ var GameProfile = ({ children, isReadyForProfileUI }) => {
1206
513
  return;
1207
514
  }
1208
515
  isCompletedProfileFlow.current = true;
1209
- if (!isMinVersionSupported(GAME_CENTER_MIN_VERSION)) {
516
+ if (!isMinVersionSupported2(GAME_CENTER_MIN_VERSION)) {
1210
517
  updateAppToSupportedMinVersion();
1211
518
  return;
1212
519
  }
@@ -1227,10 +534,10 @@ var GameProfile = ({ children, isReadyForProfileUI }) => {
1227
534
  profileData,
1228
535
  updateAppToSupportedMinVersion
1229
536
  ]);
1230
- if (!isMinVersionSupported(GAME_CENTER_MIN_VERSION)) {
1231
- return /* @__PURE__ */ jsxs2(Fragment2, { children: [
1232
- /* @__PURE__ */ jsx3(View, { style: { flex: 1, position: "relative" }, children }),
1233
- /* @__PURE__ */ jsx3(
537
+ if (!isMinVersionSupported2(GAME_CENTER_MIN_VERSION)) {
538
+ return /* @__PURE__ */ jsxs2(Fragment3, { children: [
539
+ /* @__PURE__ */ jsx4(View, { style: { flex: 1, position: "relative" }, children }),
540
+ /* @__PURE__ */ jsx4(
1234
541
  Pressable,
1235
542
  {
1236
543
  style: {
@@ -1244,9 +551,9 @@ var GameProfile = ({ children, isReadyForProfileUI }) => {
1244
551
  ] });
1245
552
  }
1246
553
  if (shouldShowLoadingOverlay || isProfileDataRefetching) {
1247
- return /* @__PURE__ */ jsxs2(Fragment2, { children: [
1248
- /* @__PURE__ */ jsx3(View, { style: { flex: 1, position: "relative" }, children }),
1249
- /* @__PURE__ */ jsx3(
554
+ return /* @__PURE__ */ jsxs2(Fragment3, { children: [
555
+ /* @__PURE__ */ jsx4(View, { style: { flex: 1, position: "relative" }, children }),
556
+ /* @__PURE__ */ jsx4(
1250
557
  View,
1251
558
  {
1252
559
  style: {
@@ -1255,15 +562,15 @@ var GameProfile = ({ children, isReadyForProfileUI }) => {
1255
562
  alignItems: "center",
1256
563
  backgroundColor: "rgba(0, 0, 0, 0.2)"
1257
564
  },
1258
- children: /* @__PURE__ */ jsx3(Loader, { size: "large", type: "light" })
565
+ children: /* @__PURE__ */ jsx4(Loader, { size: "large", type: "light" })
1259
566
  }
1260
567
  )
1261
568
  ] });
1262
569
  }
1263
570
  if (shouldShowProfileNotFoundOverlay) {
1264
- return /* @__PURE__ */ jsxs2(Fragment2, { children: [
1265
- /* @__PURE__ */ jsx3(View, { style: { flex: 1, position: "relative" }, children }),
1266
- shouldShowProfileNotFoundOverlay && /* @__PURE__ */ jsx3(
571
+ return /* @__PURE__ */ jsxs2(Fragment3, { children: [
572
+ /* @__PURE__ */ jsx4(View, { style: { flex: 1, position: "relative" }, children }),
573
+ shouldShowProfileNotFoundOverlay && /* @__PURE__ */ jsx4(
1267
574
  Pressable,
1268
575
  {
1269
576
  style: {
@@ -1276,7 +583,7 @@ var GameProfile = ({ children, isReadyForProfileUI }) => {
1276
583
  )
1277
584
  ] });
1278
585
  }
1279
- return /* @__PURE__ */ jsx3(Fragment2, { children: /* @__PURE__ */ jsx3(View, { style: { flex: 1, position: "relative" }, children }) });
586
+ return /* @__PURE__ */ jsx4(Fragment3, { children: /* @__PURE__ */ jsx4(View, { style: { flex: 1, position: "relative" }, children }) });
1280
587
  };
1281
588
  var overlayStyle = {
1282
589
  position: "absolute",
@@ -1288,19 +595,19 @@ var overlayStyle = {
1288
595
  };
1289
596
 
1290
597
  // src/components/GameWebViewNavigationBar/GameNavigationBar.tsx
1291
- import { SvgXml } from "@react-native-bedrock/native/react-native-svg";
598
+ import { SvgXml } from "@granite-js/native/react-native-svg";
1292
599
  import { PageNavbar } from "@toss-design-system/react-native";
1293
- import { Platform as Platform5, TouchableOpacity, View as View3 } from "react-native";
600
+ import { Platform as Platform4, TouchableOpacity, View as View3 } from "react-native";
1294
601
 
1295
602
  // src/components/GameWebViewNavigationBar/HeaderRight.tsx
1296
603
  import { StyleSheet, View as View2 } from "react-native";
1297
604
 
1298
605
  // src/components/GameWebViewNavigationBar/byPlatform.ts
1299
- import { Platform as Platform3 } from "react-native";
606
+ import { Platform as Platform2 } from "react-native";
1300
607
  function byPlatform({
1301
608
  ...props
1302
609
  }) {
1303
- return (props[Platform3.OS] ?? props.fallback)();
610
+ return (props[Platform2.OS] ?? props.fallback)();
1304
611
  }
1305
612
 
1306
613
  // src/components/GameWebViewNavigationBar/constants.ts
@@ -1308,18 +615,18 @@ var RIGHT_MARGIN = 24;
1308
615
  var IOS_DEFAULT_MARGIN = 20;
1309
616
 
1310
617
  // src/components/GameWebViewNavigationBar/HeaderRight.tsx
1311
- import { jsx as jsx4 } from "react/jsx-runtime";
618
+ import { jsx as jsx5 } from "react/jsx-runtime";
1312
619
  function IOSHeaderRight(props) {
1313
- return /* @__PURE__ */ jsx4(View2, { style: styles.ios, ...props });
620
+ return /* @__PURE__ */ jsx5(View2, { style: styles.ios, ...props });
1314
621
  }
1315
622
  function AndroidHeaderRight(props) {
1316
- return /* @__PURE__ */ jsx4(View2, { style: styles.android, ...props });
623
+ return /* @__PURE__ */ jsx5(View2, { style: styles.android, ...props });
1317
624
  }
1318
625
  function HeaderRight(props) {
1319
626
  return byPlatform({
1320
- ios: () => /* @__PURE__ */ jsx4(IOSHeaderRight, { ...props }),
1321
- android: () => /* @__PURE__ */ jsx4(AndroidHeaderRight, { ...props }),
1322
- fallback: () => /* @__PURE__ */ jsx4(IOSHeaderRight, { ...props })
627
+ ios: () => /* @__PURE__ */ jsx5(IOSHeaderRight, { ...props }),
628
+ android: () => /* @__PURE__ */ jsx5(AndroidHeaderRight, { ...props }),
629
+ fallback: () => /* @__PURE__ */ jsx5(IOSHeaderRight, { ...props })
1323
630
  });
1324
631
  }
1325
632
  var styles = StyleSheet.create({
@@ -1333,38 +640,38 @@ var styles = StyleSheet.create({
1333
640
  });
1334
641
 
1335
642
  // src/components/GameWebViewNavigationBar/useSafeAreaTop.ts
1336
- import { useSafeAreaInsets } from "@react-native-bedrock/native/react-native-safe-area-context";
1337
- import { Platform as Platform4 } from "react-native";
643
+ import { useSafeAreaInsets } from "@granite-js/native/react-native-safe-area-context";
644
+ import { Platform as Platform3 } from "react-native";
1338
645
  function useSafeAreaTop() {
1339
646
  const safeAreaInsets = useSafeAreaInsets();
1340
- const hasDynamicIsland = Platform4.OS === "ios" && safeAreaInsets.top > 50;
647
+ const hasDynamicIsland = Platform3.OS === "ios" && safeAreaInsets.top > 50;
1341
648
  const safeAreaTop = hasDynamicIsland ? safeAreaInsets.top - 5 : safeAreaInsets.top;
1342
649
  return safeAreaTop;
1343
650
  }
1344
651
 
1345
652
  // src/components/GameWebViewNavigationBar/GameNavigationBar.tsx
1346
- import { Fragment as Fragment3, jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
653
+ import { Fragment as Fragment4, jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
1347
654
  var originXML = '<svg fill="none" height="30" viewBox="0 0 30 30" width="30" xmlns="https://www.w3.org/2000/svg"><rect fill="#031832" fill-opacity=".46" height="30" rx="15" width="30"/><rect height="29.5" rx="14.75" stroke="#d9d9ff" stroke-opacity=".11" stroke-width=".5" width="29.5" x=".25" y=".25"/><path clip-rule="evenodd" d="m16.5119 15.0014 4.7092-4.7092c.0929-.0928.1666-.2031.2169-.32441.0503-.12134.0762-.25141.0762-.38276.0001-.13136-.0258-.26144-.076-.38281s-.1239-.23166-.2167-.32457c-.0929-.09291-.2031-.16662-.3245-.21692-.1213-.05031-.2514-.07622-.3827-.07626-.1314-.00004-.2615.0258-.3828.07603-.1214.05023-.2317.12388-.3246.21673l-4.7092 4.70997-4.71-4.70997c-.1897-.17718-.4408-.27373-.70034-.26927s-.5072.10959-.69069.2932c-.1835.1836-.28848.43132-.29279.69087-.00432.25954.09238.51057.26968.70017l4.71004 4.7092-4.71004 4.7092c-.1392.1401-.23385.3183-.27204.5121-.0382.1939-.01823.3946.05739.5771s.20351.3386.36759.4486.35702.169.55456.1697c.25583 0 .51164-.0975.70664-.2925l4.71-4.71 4.7092 4.71c.0927.093.2029.1668.3243.2172.1213.0504.2514.0763.3828.0763s.2614-.0259.3828-.0763c.1213-.0504.2315-.1242.3243-.2172.0929-.0929.1667-.2032.217-.3246s.0762-.2515.0762-.3829-.0259-.2616-.0762-.383-.1241-.2317-.217-.3245z" fill="#fdfdfe" fill-opacity=".89" fill-rule="evenodd"/></svg>';
1348
655
  function GameNavigationBar({ onClose }) {
1349
656
  const safeAreaTop = useSafeAreaTop();
1350
- return /* @__PURE__ */ jsxs3(Fragment3, { children: [
1351
- /* @__PURE__ */ jsx5(PageNavbar, { preference: { type: "none" } }),
1352
- /* @__PURE__ */ jsx5(
657
+ return /* @__PURE__ */ jsxs3(Fragment4, { children: [
658
+ /* @__PURE__ */ jsx6(PageNavbar, { preference: { type: "none" } }),
659
+ /* @__PURE__ */ jsx6(
1353
660
  View3,
1354
661
  {
1355
662
  style: {
1356
663
  width: "100%",
1357
- height: Platform5.OS === "ios" ? 44 : 54,
664
+ height: Platform4.OS === "ios" ? 44 : 54,
1358
665
  flexDirection: "row",
1359
666
  alignItems: "center",
1360
667
  justifyContent: "flex-end",
1361
668
  position: "absolute",
1362
669
  zIndex: Z_INDEX.CLOSE_BUTTON,
1363
670
  marginTop: safeAreaTop,
1364
- paddingRight: Platform5.OS === "ios" ? 10 : 8
671
+ paddingRight: Platform4.OS === "ios" ? 10 : 8
1365
672
  },
1366
673
  pointerEvents: "box-none",
1367
- children: /* @__PURE__ */ jsx5(HeaderRight, { children: /* @__PURE__ */ jsx5(
674
+ children: /* @__PURE__ */ jsx6(HeaderRight, { children: /* @__PURE__ */ jsx6(
1368
675
  TouchableOpacity,
1369
676
  {
1370
677
  hitSlop: { left: 8, right: 8 },
@@ -1372,10 +679,10 @@ function GameNavigationBar({ onClose }) {
1372
679
  accessible: true,
1373
680
  accessibilityLabel: "\uAC8C\uC784\uC885\uB8CC",
1374
681
  style: {
1375
- padding: Platform5.OS === "ios" ? 7 : 9
682
+ padding: Platform4.OS === "ios" ? 7 : 9
1376
683
  },
1377
684
  onPress: onClose,
1378
- children: /* @__PURE__ */ jsx5(SvgXml, { xml: originXML, width: 30, height: 30 })
685
+ children: /* @__PURE__ */ jsx6(SvgXml, { xml: originXML, width: 30, height: 30 })
1379
686
  }
1380
687
  ) })
1381
688
  }
@@ -1384,7 +691,7 @@ function GameNavigationBar({ onClose }) {
1384
691
  }
1385
692
 
1386
693
  // src/components/GameWebView.tsx
1387
- import { Fragment as Fragment4, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
694
+ import { Fragment as Fragment5, jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
1388
695
  var GameWebView = forwardRef(function GameWebView2(props, ref) {
1389
696
  const { openConfirm } = useDialog2();
1390
697
  const { brandDisplayName } = getAppsInTossGlobals();
@@ -1402,16 +709,16 @@ var GameWebView = forwardRef(function GameWebView2(props, ref) {
1402
709
  closeView2();
1403
710
  }
1404
711
  }, [brandDisplayName, captureExitLog, openConfirm]);
1405
- useEffect5(() => {
1406
- if (Platform6.OS === "ios") {
1407
- setIosSwipeGestureEnabled({ isEnabled: false });
712
+ useEffect6(() => {
713
+ if (Platform5.OS === "ios") {
714
+ setIosSwipeGestureEnabled2({ isEnabled: false });
1408
715
  return () => {
1409
- setIosSwipeGestureEnabled({ isEnabled: true });
716
+ setIosSwipeGestureEnabled2({ isEnabled: true });
1410
717
  };
1411
718
  }
1412
719
  return;
1413
720
  }, []);
1414
- useEffect5(() => {
721
+ useEffect6(() => {
1415
722
  const backHandler = () => {
1416
723
  handleClose();
1417
724
  return true;
@@ -1421,16 +728,16 @@ var GameWebView = forwardRef(function GameWebView2(props, ref) {
1421
728
  BackHandler.removeEventListener("hardwareBackPress", backHandler);
1422
729
  };
1423
730
  }, [handleClose]);
1424
- useEffect5(() => {
1425
- appsInTossEvent.addEventListener("entryMessageExited", {
731
+ useEffect6(() => {
732
+ appsInTossEvent2.addEventListener("entryMessageExited", {
1426
733
  onEvent: () => {
1427
734
  setIsEntryMessageExited(true);
1428
735
  }
1429
736
  });
1430
737
  }, []);
1431
- return /* @__PURE__ */ jsxs4(Fragment4, { children: [
1432
- /* @__PURE__ */ jsx6(GameNavigationBar, { onClose: handleClose }),
1433
- getOperationalEnvironment() === "toss" ? /* @__PURE__ */ jsx6(GameProfile, { isReadyForProfileUI: isEntryMessageExited, children: /* @__PURE__ */ jsx6(PlainWebView, { ref, ...props }) }) : /* @__PURE__ */ jsx6(PlainWebView, { ref, ...props })
738
+ return /* @__PURE__ */ jsxs4(Fragment5, { children: [
739
+ /* @__PURE__ */ jsx7(GameNavigationBar, { onClose: handleClose }),
740
+ getOperationalEnvironment() === "toss" ? /* @__PURE__ */ jsx7(GameProfile, { isReadyForProfileUI: isEntryMessageExited, children: /* @__PURE__ */ jsx7(PlainWebView, { ref, ...props }) }) : /* @__PURE__ */ jsx7(PlainWebView, { ref, ...props })
1434
741
  ] });
1435
742
  });
1436
743
 
@@ -1467,12 +774,12 @@ function methodHandler({
1467
774
  };
1468
775
  wrappedFunc(...args).then((result) => {
1469
776
  injectJavaScript?.(`
1470
- window.__BEDROCK_NATIVE_EMITTER.emit('${functionName}/resolve/${eventId}', ${JSON.stringify(result, null, 0)});
777
+ window.__GRANITE_NATIVE_EMITTER.emit('${functionName}/resolve/${eventId}', ${JSON.stringify(result, null, 0)});
1471
778
  `);
1472
779
  }).catch((error) => {
1473
780
  const serializedError = serializeError(error);
1474
781
  injectJavaScript?.(`
1475
- window.__BEDROCK_NATIVE_EMITTER.emit('${functionName}/reject/${eventId}', ${serializedError});
782
+ window.__GRANITE_NATIVE_EMITTER.emit('${functionName}/reject/${eventId}', ${serializedError});
1476
783
  `);
1477
784
  });
1478
785
  }
@@ -1503,12 +810,12 @@ function useBridgeHandler({
1503
810
  );
1504
811
  const createHandleOnEvent = (functionName, eventId) => (response) => {
1505
812
  ref.current?.injectJavaScript(`
1506
- window.__BEDROCK_NATIVE_EMITTER.emit('${functionName}/onEvent/${eventId}', ${JSON.stringify(response, null, 0)});
813
+ window.__GRANITE_NATIVE_EMITTER.emit('${functionName}/onEvent/${eventId}', ${JSON.stringify(response, null, 0)});
1507
814
  `);
1508
815
  };
1509
816
  const createHandleOnError = (functionName, eventId) => (error) => {
1510
817
  ref.current?.injectJavaScript(`
1511
- window.__BEDROCK_NATIVE_EMITTER.emit('${functionName}/onError/${eventId}', ${JSON.stringify(error, null, 0)});
818
+ window.__GRANITE_NATIVE_EMITTER.emit('${functionName}/onError/${eventId}', ${JSON.stringify(error, null, 0)});
1512
819
  `);
1513
820
  };
1514
821
  const $onMessage = useCallback4(
@@ -1561,24 +868,9 @@ function useBridgeHandler({
1561
868
  };
1562
869
  }
1563
870
 
1564
- // src/constant-bridges.ts
1565
- var constant_bridges_exports = {};
1566
- __export(constant_bridges_exports, {
1567
- getDeviceId: () => getDeviceId,
1568
- getOperationalEnvironment: () => getOperationalEnvironment,
1569
- getTossAppVersion: () => getTossAppVersion
1570
- });
1571
-
1572
- // src/event-bridges.ts
1573
- var event_bridges_exports = {};
1574
- __export(event_bridges_exports, {
1575
- contactsViral: () => contactsViral,
1576
- startUpdateLocation: () => startUpdateLocation
1577
- });
1578
-
1579
871
  // src/hooks/useCreateUserAgent.ts
872
+ import { getPlatformOS, getTossAppVersion } from "@apps-in-toss/native-modules";
1580
873
  import { useWindowDimensions } from "react-native";
1581
- import { getPlatformOS } from "react-native-bedrock";
1582
874
  var FontA11yCategory = {
1583
875
  Large: "Large",
1584
876
  xLarge: "xLarge",
@@ -1733,12 +1025,13 @@ function useCreateUserAgent({
1733
1025
  }
1734
1026
 
1735
1027
  // src/hooks/useGeolocation.ts
1736
- import { useState as useState3, useEffect as useEffect6 } from "react";
1737
- import { useVisibility as useVisibility3 } from "react-native-bedrock";
1028
+ import { startUpdateLocation } from "@apps-in-toss/native-modules";
1029
+ import { useVisibility as useVisibility3 } from "@granite-js/react-native";
1030
+ import { useState as useState3, useEffect as useEffect7 } from "react";
1738
1031
  function useGeolocation({ accuracy, distanceInterval, timeInterval }) {
1739
1032
  const isVisible = useVisibility3();
1740
1033
  const [location, setLocation] = useState3(null);
1741
- useEffect6(() => {
1034
+ useEffect7(() => {
1742
1035
  if (!isVisible) {
1743
1036
  return;
1744
1037
  }
@@ -1756,7 +1049,8 @@ function useGeolocation({ accuracy, distanceInterval, timeInterval }) {
1756
1049
  }
1757
1050
 
1758
1051
  // src/utils/log.ts
1759
- import { getSchemeUri as getSchemeUri4 } from "react-native-bedrock";
1052
+ import { eventLog as eventLogNative } from "@apps-in-toss/native-modules";
1053
+ import { getSchemeUri as getSchemeUri4 } from "@granite-js/react-native";
1760
1054
 
1761
1055
  // src/utils/extractDateFromUUIDv7.ts
1762
1056
  var extractDateFromUUIDv7 = (uuid) => {
@@ -1800,13 +1094,13 @@ var trackScreen = (url) => {
1800
1094
  deployment_timestamp: extractDateFromUUIDv7(env.getDeploymentId()).getTime()
1801
1095
  }
1802
1096
  };
1803
- return eventLog(log);
1097
+ return eventLogNative(log);
1804
1098
  };
1805
1099
 
1806
1100
  // src/components/WebView.tsx
1807
- import { jsx as jsx7 } from "react/jsx-runtime";
1101
+ import { jsx as jsx8 } from "react/jsx-runtime";
1808
1102
  var appsInTossGlobals = getAppsInTossGlobals();
1809
- var operationalEnvironment = getOperationalEnvironment();
1103
+ var operationalEnvironment = appsInTossConstantBridges.getOperationalEnvironment();
1810
1104
  var TYPES = ["partner", "external", "game"];
1811
1105
  var WEBVIEW_TYPES = {
1812
1106
  partner: PartnerWebViewScreen,
@@ -1839,7 +1133,7 @@ function WebView({ type, local, onMessage, ...props }) {
1839
1133
  if (!TYPES.includes(type)) {
1840
1134
  throw new Error(`Invalid WebView type: '${type}'`);
1841
1135
  }
1842
- const bedrockEvent = useBedrockEvent();
1136
+ const graniteEvent = useGraniteEvent();
1843
1137
  const uri = useMemo3(() => getWebViewUri(local), [local]);
1844
1138
  const top = useSafeAreaTop2();
1845
1139
  const bottom = useSafeAreaBottom();
@@ -1852,30 +1146,36 @@ function WebView({ type, local, onMessage, ...props }) {
1852
1146
  document.head.appendChild(style);
1853
1147
  })();
1854
1148
  `;
1149
+ const [allowsBackForwardNavigationGestures, setAllowsBackForwardNavigationGestures] = useState4(
1150
+ props.allowsBackForwardNavigationGestures
1151
+ );
1855
1152
  const handler = useBridgeHandler({
1856
1153
  onMessage,
1857
1154
  injectedJavaScript: [disableTextSelectionCSS].join("\n"),
1858
1155
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
1859
1156
  eventListenerMap: {
1860
- ...event_bridges_exports,
1157
+ ...appsInTossEventBridges,
1861
1158
  navigationAccessoryEvent: ({ onEvent, onError }) => tdsEvent.addEventListener("navigationAccessoryEvent", {
1862
1159
  onEvent,
1863
1160
  onError
1864
1161
  }),
1865
- backEvent: ({ onEvent, onError, options }) => bedrockEvent.addEventListener("backEvent", { onEvent, onError, options }),
1866
- entryMessageExited: ({ onEvent, onError }) => appsInTossEvent.addEventListener("entryMessageExited", { onEvent, onError }),
1867
- updateLocationEvent: ({ onEvent, onError, options }) => appsInTossEvent.addEventListener("updateLocationEvent", { onEvent, onError, options }),
1162
+ backEvent: ({ onEvent, onError, options }) => graniteEvent.addEventListener("backEvent", { onEvent, onError, options }),
1163
+ entryMessageExited: ({ onEvent, onError }) => appsInTossEvent3.addEventListener("entryMessageExited", { onEvent, onError }),
1164
+ updateLocationEvent: ({ onEvent, onError, options }) => appsInTossEvent3.addEventListener("updateLocationEvent", { onEvent, onError, options }),
1868
1165
  /** @internal */
1869
- appBridgeCallbackEvent: ({ onEvent, onError, options }) => appsInTossEvent.addEventListener("appBridgeCallbackEvent", { onEvent, onError, options }),
1166
+ appBridgeCallbackEvent: ({ onEvent, onError, options }) => appsInTossEvent3.addEventListener("appBridgeCallbackEvent", { onEvent, onError, options }),
1870
1167
  /** AdMob */
1871
1168
  loadAdMobInterstitialAd: GoogleAdMob.loadAdMobInterstitialAd,
1872
1169
  showAdMobInterstitialAd: GoogleAdMob.showAdMobInterstitialAd,
1873
1170
  loadAdMobRewardedAd: GoogleAdMob.loadAdMobRewardedAd,
1874
- showAdMobRewardedAd: GoogleAdMob.showAdMobRewardedAd
1171
+ showAdMobRewardedAd: GoogleAdMob.showAdMobRewardedAd,
1172
+ /** AdMobV2 */
1173
+ loadAppsInTossAdMob: GoogleAdMob.loadAppsInTossAdMob,
1174
+ showAppsInTossAdMob: GoogleAdMob.showAppsInTossAdMob
1875
1175
  },
1876
1176
  constantHandlerMap: {
1877
- ...bedrockConstantBridges,
1878
- ...constant_bridges_exports,
1177
+ ...graniteConstantBridges,
1178
+ ...appsInTossConstantBridges,
1879
1179
  getSafeAreaTop: () => top,
1880
1180
  getSafeAreaBottom: () => bottom,
1881
1181
  ...Object.fromEntries(Object.entries(global2).map(([key, value]) => [key, () => value])),
@@ -1884,12 +1184,19 @@ function WebView({ type, local, onMessage, ...props }) {
1884
1184
  showAdMobInterstitialAd_isSupported: GoogleAdMob.showAdMobInterstitialAd.isSupported,
1885
1185
  loadAdMobRewardedAd_isSupported: GoogleAdMob.loadAdMobRewardedAd.isSupported,
1886
1186
  showAdMobRewardedAd_isSupported: GoogleAdMob.showAdMobRewardedAd.isSupported,
1187
+ /** AdMobV2 */
1188
+ loadAppsInTossAdMob_isSupported: GoogleAdMob.loadAppsInTossAdMob.isSupported,
1189
+ showAppsInTossAdMob_isSupported: GoogleAdMob.showAppsInTossAdMob.isSupported,
1887
1190
  /** env */
1888
1191
  getDeploymentId: env.getDeploymentId
1889
1192
  },
1890
1193
  asyncHandlerMap: {
1891
- ...bedrockAsyncBridges,
1892
- ...async_bridges_exports,
1194
+ ...graniteAsyncBridges,
1195
+ ...appsInTossAsyncBridges,
1196
+ setIosSwipeGestureEnabled: (options) => {
1197
+ setAllowsBackForwardNavigationGestures(options.isEnabled);
1198
+ return appsInTossAsyncBridges.setIosSwipeGestureEnabled(options);
1199
+ },
1893
1200
  addAccessoryButton: async (params) => partner.addAccessoryButton(params),
1894
1201
  removeAccessoryButton: async () => partner.removeAccessoryButton(),
1895
1202
  /** internal */
@@ -1946,19 +1253,19 @@ function WebView({ type, local, onMessage, ...props }) {
1946
1253
  const userAgent = useCreateUserAgent({
1947
1254
  colorPreference: "light"
1948
1255
  });
1949
- const backEvent = useBackEvent();
1950
1256
  const handleBackEvent = useCallback5(() => {
1951
1257
  if (canHistoryGoBack) {
1952
1258
  handler.ref.current?.goBack();
1259
+ return true;
1953
1260
  } else {
1954
- closeView3();
1261
+ return false;
1955
1262
  }
1956
1263
  }, [canHistoryGoBack, handler]);
1957
- useEffect7(() => {
1958
- backEvent.addEventListener(handleBackEvent);
1959
- return () => backEvent.removeEventListener(handleBackEvent);
1960
- }, [backEvent, handleBackEvent]);
1961
- return /* @__PURE__ */ jsx7(
1264
+ useEffect8(() => {
1265
+ BackHandler2.addEventListener("hardwareBackPress", handleBackEvent);
1266
+ return () => BackHandler2.removeEventListener("hardwareBackPress", handleBackEvent);
1267
+ }, [handleBackEvent]);
1268
+ return /* @__PURE__ */ jsx8(
1962
1269
  BaseWebView,
1963
1270
  {
1964
1271
  ref: handler.ref,
@@ -1971,7 +1278,7 @@ function WebView({ type, local, onMessage, ...props }) {
1971
1278
  "User-Agent": userAgent
1972
1279
  }
1973
1280
  },
1974
- userAgent: Platform7.OS === "ios" ? userAgent : void 0,
1281
+ userAgent: Platform6.OS === "ios" ? userAgent : void 0,
1975
1282
  sharedCookiesEnabled: true,
1976
1283
  webviewDebuggingEnabled: webViewDebuggingEnabled,
1977
1284
  thirdPartyCookiesEnabled: true,
@@ -1979,7 +1286,8 @@ function WebView({ type, local, onMessage, ...props }) {
1979
1286
  onNavigationStateChange: handleNavigationStateChange,
1980
1287
  injectedJavaScript: handler.injectedJavaScript,
1981
1288
  injectedJavaScriptBeforeContentLoaded: handler.injectedJavaScript,
1982
- decelerationRate: Platform7.OS === "ios" ? 1 : void 0
1289
+ decelerationRate: Platform6.OS === "ios" ? 1 : void 0,
1290
+ allowsBackForwardNavigationGestures
1983
1291
  }
1984
1292
  );
1985
1293
  }
@@ -1990,19 +1298,9 @@ function ensureValue(value, name) {
1990
1298
  return value;
1991
1299
  }
1992
1300
 
1993
- // src/types.ts
1994
- var Accuracy2 = /* @__PURE__ */ ((Accuracy3) => {
1995
- Accuracy3[Accuracy3["Lowest"] = 1] = "Lowest";
1996
- Accuracy3[Accuracy3["Low"] = 2] = "Low";
1997
- Accuracy3[Accuracy3["Balanced"] = 3] = "Balanced";
1998
- Accuracy3[Accuracy3["High"] = 4] = "High";
1999
- Accuracy3[Accuracy3["Highest"] = 5] = "Highest";
2000
- Accuracy3[Accuracy3["BestForNavigation"] = 6] = "BestForNavigation";
2001
- return Accuracy3;
2002
- })(Accuracy2 || {});
2003
-
2004
1301
  // src/index.ts
2005
1302
  export * from "@apps-in-toss/analytics";
1303
+ export * from "@apps-in-toss/native-modules";
2006
1304
  var Analytics2 = {
2007
1305
  init: InternalAnalytics.init,
2008
1306
  Impression: InternalAnalytics.Impression,
@@ -2010,37 +1308,11 @@ var Analytics2 = {
2010
1308
  Area: InternalAnalytics.Area
2011
1309
  };
2012
1310
  export {
2013
- Accuracy2 as Accuracy,
2014
1311
  Analytics2 as Analytics,
2015
1312
  AppsInToss,
2016
- GoogleAdMob,
2017
- IAP,
2018
1313
  INTERNAL__onVisibilityChangedByTransparentServiceWeb,
2019
- Storage,
2020
- TossPay,
2021
1314
  WebView,
2022
- appLogin,
2023
- appsInTossEvent,
2024
- contactsViral,
2025
1315
  env,
2026
- eventLog,
2027
- fetchAlbumPhotos,
2028
- fetchContacts,
2029
- getClipboardText,
2030
- getCurrentLocation,
2031
- getDeviceId,
2032
- getGameCenterGameProfile,
2033
- getOperationalEnvironment,
2034
- getTossAppVersion,
2035
- getTossShareLink,
2036
- isMinVersionSupported,
2037
- openCamera,
2038
- openGameCenterLeaderboard,
2039
- saveBase64Data,
2040
- setClipboardText,
2041
- setDeviceOrientation,
2042
- startUpdateLocation,
2043
- submitGameCenterLeaderBoardScore,
2044
1316
  useCreateUserAgent,
2045
1317
  useGeolocation
2046
1318
  };