@apps-in-toss/framework 0.0.0-dev.1744801739343 → 0.0.0-dev.1752049503789

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.cjs CHANGED
@@ -17,6 +17,7 @@ var __copyProps = (to, from, except, desc) => {
17
17
  }
18
18
  return to;
19
19
  };
20
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
20
21
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
22
  // If the importer is in node compatibility mode or this is not an ESM
22
23
  // file that has been converted to a CommonJS file using a Babel-
@@ -31,33 +32,704 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
32
  var src_exports = {};
32
33
  __export(src_exports, {
33
34
  Accuracy: () => Accuracy2,
35
+ Analytics: () => Analytics2,
34
36
  AppsInToss: () => AppsInToss,
37
+ AppsInTossModule: () => AppsInTossModule,
38
+ BedrockCoreModule: () => BedrockCoreModule,
39
+ BedrockModule: () => BedrockModule,
40
+ GoogleAdMob: () => GoogleAdMob,
41
+ INTERNAL__AppsInTossModule: () => AppsInTossModuleInstance,
42
+ INTERNAL__module: () => INTERNAL__module,
35
43
  Storage: () => Storage,
36
44
  TossPay: () => TossPay,
37
45
  WebView: () => WebView,
38
46
  appLogin: () => appLogin,
47
+ appsInTossEvent: () => appsInTossEvent,
48
+ closeView: () => closeView,
39
49
  env: () => env,
50
+ eventLog: () => eventLog,
40
51
  fetchAlbumPhotos: () => fetchAlbumPhotos,
41
52
  fetchContacts: () => fetchContacts,
53
+ generateHapticFeedback: () => generateHapticFeedback,
42
54
  getClipboardText: () => getClipboardText,
43
55
  getCurrentLocation: () => getCurrentLocation,
44
56
  getDeviceId: () => getDeviceId,
57
+ getLocale: () => getLocale,
58
+ getNetworkStatus: () => getNetworkStatus,
45
59
  getOperationalEnvironment: () => getOperationalEnvironment,
60
+ getPlatformOS: () => getPlatformOS,
61
+ getSchemeUri: () => getSchemeUri,
46
62
  getTossAppVersion: () => getTossAppVersion,
63
+ getTossShareLink: () => getTossShareLink,
64
+ isMinVersionSupported: () => isMinVersionSupported,
47
65
  openCamera: () => openCamera,
66
+ openURL: () => openURL,
67
+ saveBase64Data: () => saveBase64Data,
48
68
  setClipboardText: () => setClipboardText,
69
+ setDeviceOrientation: () => setDeviceOrientation,
70
+ setIosSwipeGestureEnabled: () => setIosSwipeGestureEnabled,
71
+ setScreenAwakeMode: () => setScreenAwakeMode,
72
+ setSecureScreen: () => setSecureScreen,
73
+ share: () => share,
49
74
  startUpdateLocation: () => startUpdateLocation,
50
75
  useGeolocation: () => useGeolocation
51
76
  });
52
77
  module.exports = __toCommonJS(src_exports);
78
+ var import_analytics2 = require("@apps-in-toss/analytics");
53
79
 
54
80
  // src/core/registerApp.tsx
55
- var import_react_native2 = require("@toss-design-system/react-native");
56
- var import_react_native_bedrock = require("react-native-bedrock");
81
+ var import_analytics = require("@apps-in-toss/analytics");
82
+ var import_react_native28 = require("@granite-js/react-native");
83
+ var import_react_native29 = require("@toss-design-system/react-native");
57
84
 
58
- // src/core/hooks/useAppsInTossBridge.ts
59
- var import_react_native = require("@toss-design-system/react-native");
85
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/dist/index.js
86
+ var import_react_native = require("@granite-js/react-native");
87
+ var import_react_native2 = require("@granite-js/react-native");
88
+ var import_react_native3 = require("@granite-js/react-native");
89
+ var import_react_native4 = require("react-native");
90
+ var import_react_native5 = require("react-native");
91
+ var import_react_native6 = require("@granite-js/react-native");
92
+
93
+ // ../../.yarn/cache/es-toolkit-npm-1.39.3-b94f623c91-1c85e518b1.zip/node_modules/es-toolkit/dist/function/noop.mjs
94
+ function noop() {
95
+ }
96
+
97
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/dist/index.js
98
+ var import_react_native7 = require("react-native");
99
+ var import_react_native8 = require("react-native");
100
+ var import_react_native9 = require("react-native");
101
+ var import_react_native10 = require("react-native");
102
+ var import_react_native11 = require("react-native");
103
+ var import_react_native12 = require("react-native");
104
+ var import_react_native13 = require("react-native");
105
+ var EntryMessageExitedEvent = class extends import_react_native2.GraniteEventDefinition {
106
+ name = "entryMessageExited";
107
+ remove() {
108
+ }
109
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
110
+ listener(_) {
111
+ }
112
+ };
113
+ var Module = import_react_native4.TurboModuleRegistry.getEnforcing("AppsInTossModule");
114
+ var AppsInTossModuleInstance = Module;
115
+ var AppsInTossModule = Module;
116
+ function getPermission(permission) {
117
+ return AppsInTossModule.getPermission(permission);
118
+ }
119
+ function openPermissionDialog(permission) {
120
+ return AppsInTossModule.openPermissionDialog(permission);
121
+ }
122
+ async function requestPermission(permission) {
123
+ const permissionStatus = await getPermission(permission);
124
+ switch (permissionStatus) {
125
+ case "allowed":
126
+ case "denied":
127
+ return permissionStatus;
128
+ default:
129
+ return openPermissionDialog(permission);
130
+ }
131
+ }
132
+ var nativeEventEmitter = new import_react_native5.NativeEventEmitter(AppsInTossModuleInstance);
133
+ var UpdateLocationEvent = class extends import_react_native3.GraniteEventDefinition {
134
+ name = "updateLocationEvent";
135
+ subscriptionCount = 0;
136
+ ref = {
137
+ remove: () => {
138
+ }
139
+ };
140
+ remove() {
141
+ if (--this.subscriptionCount === 0) {
142
+ AppsInTossModuleInstance.stopUpdateLocation({});
143
+ }
144
+ this.ref.remove();
145
+ }
146
+ listener(options, onEvent, onError) {
147
+ requestPermission({ name: "geolocation", access: "access" }).then((permissionStatus) => {
148
+ if (permissionStatus === "denied") {
149
+ onError(new Error("\uC704\uCE58 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694."));
150
+ return;
151
+ }
152
+ void AppsInTossModuleInstance.startUpdateLocation(options).catch(onError);
153
+ const subscription = nativeEventEmitter.addListener("updateLocation", onEvent);
154
+ this.ref = {
155
+ remove: () => subscription?.remove()
156
+ };
157
+ this.subscriptionCount++;
158
+ }).catch(onError);
159
+ }
160
+ };
161
+ function generateUUID(placeholder) {
162
+ return placeholder ? (placeholder ^ Math.random() * 16 >> placeholder / 4).toString(16) : (String(1e7) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, generateUUID);
163
+ }
164
+ var INTERNAL__callbacks = /* @__PURE__ */ new Map();
165
+ function invokeAppBridgeCallback(id, ...args) {
166
+ const callback = INTERNAL__callbacks.get(id);
167
+ callback?.call(null, ...args);
168
+ return Boolean(callback);
169
+ }
170
+ function invokeAppBridgeMethod(methodName, params, callbacks) {
171
+ const { onSuccess, onError, ...appBridgeCallbacks } = callbacks;
172
+ const { callbackMap, unregisterAll } = registerCallbacks(appBridgeCallbacks);
173
+ const promise = AppsInTossModuleInstance[methodName]({
174
+ params,
175
+ callbacks: callbackMap
176
+ });
177
+ void promise.then(onSuccess).catch(onError);
178
+ return unregisterAll;
179
+ }
180
+ function registerCallbacks(callbacks) {
181
+ const callbackMap = {};
182
+ for (const [callbackName, callback] of Object.entries(callbacks)) {
183
+ const id = registerCallback(callback, callbackName);
184
+ callbackMap[callbackName] = id;
185
+ }
186
+ const unregisterAll = () => {
187
+ Object.values(callbackMap).forEach(unregisterCallback);
188
+ };
189
+ return { callbackMap, unregisterAll };
190
+ }
191
+ function registerCallback(callback, name = "unnamed") {
192
+ const uniqueId = generateUUID();
193
+ const callbackId = `${uniqueId}__${name}`;
194
+ INTERNAL__callbacks.set(callbackId, callback);
195
+ return callbackId;
196
+ }
197
+ function unregisterCallback(id) {
198
+ INTERNAL__callbacks.delete(id);
199
+ }
200
+ function getCallbackIds() {
201
+ return Array.from(INTERNAL__callbacks.keys());
202
+ }
203
+ var INTERNAL__appBridgeHandler = {
204
+ invokeAppBridgeCallback,
205
+ invokeAppBridgeMethod,
206
+ registerCallback,
207
+ unregisterCallback,
208
+ getCallbackIds
209
+ };
210
+ var UNSAFE__nativeEventEmitter = nativeEventEmitter;
211
+ var AppBridgeCallbackEvent = class _AppBridgeCallbackEvent extends import_react_native6.GraniteEventDefinition {
212
+ static INTERNAL__appBridgeSubscription;
213
+ name = "appBridgeCallbackEvent";
214
+ constructor() {
215
+ super();
216
+ this.registerAppBridgeCallbackEventListener();
217
+ }
218
+ remove() {
219
+ }
220
+ listener() {
221
+ }
222
+ registerAppBridgeCallbackEventListener() {
223
+ if (_AppBridgeCallbackEvent.INTERNAL__appBridgeSubscription != null) {
224
+ return;
225
+ }
226
+ _AppBridgeCallbackEvent.INTERNAL__appBridgeSubscription = UNSAFE__nativeEventEmitter.addListener(
227
+ "appBridgeCallback",
228
+ this.ensureInvokeAppBridgeCallback
229
+ );
230
+ }
231
+ ensureInvokeAppBridgeCallback(result) {
232
+ if (typeof result === "object" && typeof result.name === "string") {
233
+ INTERNAL__appBridgeHandler.invokeAppBridgeCallback(result.name, result.params);
234
+ } else {
235
+ console.warn("Invalid app bridge callback result:", result);
236
+ }
237
+ }
238
+ };
239
+ var appsInTossEvent = new import_react_native.GraniteEvent([
240
+ new AppBridgeCallbackEvent(),
241
+ new UpdateLocationEvent(),
242
+ new EntryMessageExitedEvent()
243
+ ]);
244
+ function startUpdateLocation(eventParams) {
245
+ return appsInTossEvent.addEventListener("updateLocationEvent", eventParams);
246
+ }
247
+ function getOperationalEnvironment() {
248
+ return AppsInTossModule.operationalEnvironment;
249
+ }
250
+ var SEMVER_REGEX = /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\\-]+(?:\.[\da-z\\-]+)*))?(?:\+[\da-z\\-]+(?:\.[\da-z\\-]+)*)?)?)?$/i;
251
+ var isWildcard = (val) => ["*", "x", "X"].includes(val);
252
+ var tryParse = (val) => {
253
+ const num = parseInt(val, 10);
254
+ return isNaN(num) ? val : num;
255
+ };
256
+ var coerceTypes = (a, b) => {
257
+ return typeof a === typeof b ? [a, b] : [String(a), String(b)];
258
+ };
259
+ var compareValues = (a, b) => {
260
+ if (isWildcard(a) || isWildcard(b)) {
261
+ return 0;
262
+ }
263
+ const [aVal, bVal] = coerceTypes(tryParse(a), tryParse(b));
264
+ if (aVal > bVal) {
265
+ return 1;
266
+ }
267
+ if (aVal < bVal) {
268
+ return -1;
269
+ }
270
+ return 0;
271
+ };
272
+ var parseVersion = (version) => {
273
+ if (typeof version !== "string") {
274
+ throw new TypeError("Invalid argument: expected a string");
275
+ }
276
+ const match = version.match(SEMVER_REGEX);
277
+ if (!match) {
278
+ throw new Error(`Invalid semver: '${version}'`);
279
+ }
280
+ const [, major, minor, patch, build, preRelease] = match;
281
+ return [major, minor, patch, build, preRelease];
282
+ };
283
+ var compareSegments = (a, b) => {
284
+ const maxLength = Math.max(a.length, b.length);
285
+ for (let i = 0; i < maxLength; i++) {
286
+ const segA = a[i] ?? "0";
287
+ const segB = b[i] ?? "0";
288
+ const result = compareValues(segA, segB);
289
+ if (result !== 0) {
290
+ return result;
291
+ }
292
+ }
293
+ return 0;
294
+ };
295
+ var compareVersions = (v1, v2) => {
296
+ const seg1 = parseVersion(v1);
297
+ const seg2 = parseVersion(v2);
298
+ const preRelease1 = seg1.pop();
299
+ const preRelease2 = seg2.pop();
300
+ const mainCompare = compareSegments(seg1, seg2);
301
+ if (mainCompare !== 0) {
302
+ return mainCompare;
303
+ }
304
+ if (preRelease1 && preRelease2) {
305
+ return compareSegments(preRelease1.split("."), preRelease2.split("."));
306
+ }
307
+ if (preRelease1) {
308
+ return -1;
309
+ }
310
+ if (preRelease2) {
311
+ return 1;
312
+ }
313
+ return 0;
314
+ };
315
+ function isMinVersionSupported(minVersions) {
316
+ const operationalEnvironment2 = AppsInTossModule.operationalEnvironment;
317
+ if (operationalEnvironment2 === "sandbox") {
318
+ return true;
319
+ }
320
+ const currentVersion = AppsInTossModule.tossAppVersion;
321
+ const isIOS = import_react_native7.Platform.OS === "ios";
322
+ const minVersion = isIOS ? minVersions.ios : minVersions.android;
323
+ if (minVersion === void 0) {
324
+ return false;
325
+ }
326
+ if (minVersion === "always") {
327
+ return true;
328
+ }
329
+ if (minVersion === "never") {
330
+ return false;
331
+ }
332
+ return compareVersions(currentVersion, minVersion) >= 0;
333
+ }
334
+ function loadAdMobInterstitialAd(params) {
335
+ if (!loadAdMobInterstitialAd.isSupported()) {
336
+ params.onError(new Error(UNSUPPORTED_ERROR_MESSAGE));
337
+ return noop;
338
+ }
339
+ const { onEvent, onError, options } = params;
340
+ const unregisterCallbacks = INTERNAL__appBridgeHandler.invokeAppBridgeMethod("loadAdMobInterstitialAd", options, {
341
+ onAdClicked: () => {
342
+ onEvent({ type: "clicked" });
343
+ },
344
+ onAdDismissed: () => {
345
+ onEvent({ type: "dismissed" });
346
+ },
347
+ onAdFailedToShow: () => {
348
+ onEvent({ type: "failedToShow" });
349
+ },
350
+ onAdImpression: () => {
351
+ onEvent({ type: "impression" });
352
+ },
353
+ onAdShow: () => {
354
+ onEvent({ type: "show" });
355
+ },
356
+ onSuccess: (result) => onEvent({ type: "loaded", data: result }),
357
+ onError
358
+ });
359
+ return unregisterCallbacks;
360
+ }
361
+ function showAdMobInterstitialAd(params) {
362
+ if (!showAdMobInterstitialAd.isSupported()) {
363
+ params.onError(new Error(UNSUPPORTED_ERROR_MESSAGE));
364
+ return noop;
365
+ }
366
+ const { onEvent, onError, options } = params;
367
+ const unregisterCallbacks = INTERNAL__appBridgeHandler.invokeAppBridgeMethod("showAdMobInterstitialAd", options, {
368
+ onSuccess: () => onEvent({ type: "requested" }),
369
+ onError
370
+ });
371
+ return unregisterCallbacks;
372
+ }
373
+ function loadAdMobRewardedAd(params) {
374
+ if (!loadAdMobRewardedAd.isSupported()) {
375
+ params.onError(new Error(UNSUPPORTED_ERROR_MESSAGE));
376
+ return noop;
377
+ }
378
+ const { onEvent, onError, options } = params;
379
+ const unregisterCallbacks = INTERNAL__appBridgeHandler.invokeAppBridgeMethod("loadAdMobRewardedAd", options, {
380
+ onAdClicked: () => {
381
+ onEvent({ type: "clicked" });
382
+ },
383
+ onAdDismissed: () => {
384
+ onEvent({ type: "dismissed" });
385
+ },
386
+ onAdFailedToShow: () => {
387
+ onEvent({ type: "failedToShow" });
388
+ },
389
+ onAdImpression: () => {
390
+ onEvent({ type: "impression" });
391
+ },
392
+ onAdShow: () => {
393
+ onEvent({ type: "show" });
394
+ },
395
+ onUserEarnedReward: () => {
396
+ onEvent({ type: "userEarnedReward" });
397
+ },
398
+ onSuccess: (result) => onEvent({ type: "loaded", data: result }),
399
+ onError
400
+ });
401
+ return unregisterCallbacks;
402
+ }
403
+ function showAdMobRewardedAd(params) {
404
+ if (!showAdMobRewardedAd.isSupported()) {
405
+ params.onError(new Error(UNSUPPORTED_ERROR_MESSAGE));
406
+ return noop;
407
+ }
408
+ const { onEvent, onError, options } = params;
409
+ const unregisterCallbacks = INTERNAL__appBridgeHandler.invokeAppBridgeMethod("showAdMobRewardedAd", options, {
410
+ onSuccess: () => onEvent({ type: "requested" }),
411
+ onError
412
+ });
413
+ return unregisterCallbacks;
414
+ }
415
+ var ANDROID_GOOGLE_AD_MOB_SUPPORTED_VERSION = "5.209.0";
416
+ var IOS_GOOGLE_AD_MOB_SUPPORTED_VERSION = "5.209.0";
417
+ var UNSUPPORTED_ERROR_MESSAGE = "This feature is not supported in the current environment";
418
+ var ENVIRONMENT = getOperationalEnvironment();
419
+ function createIsSupported() {
420
+ return () => {
421
+ if (ENVIRONMENT !== "toss") {
422
+ return false;
423
+ }
424
+ return isMinVersionSupported({
425
+ android: ANDROID_GOOGLE_AD_MOB_SUPPORTED_VERSION,
426
+ ios: IOS_GOOGLE_AD_MOB_SUPPORTED_VERSION
427
+ });
428
+ };
429
+ }
430
+ loadAdMobInterstitialAd.isSupported = createIsSupported();
431
+ loadAdMobRewardedAd.isSupported = createIsSupported();
432
+ showAdMobInterstitialAd.isSupported = createIsSupported();
433
+ showAdMobRewardedAd.isSupported = createIsSupported();
434
+ async function checkoutPayment(options) {
435
+ return AppsInTossModule.checkoutPayment({ params: options });
436
+ }
437
+ async function setClipboardText(text) {
438
+ const permissionStatus = await requestPermission({ name: "clipboard", access: "write" });
439
+ if (permissionStatus === "denied") {
440
+ throw new Error("\uD074\uB9BD\uBCF4\uB4DC \uC4F0\uAE30 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
441
+ }
442
+ return AppsInTossModule.setClipboardText({ text });
443
+ }
444
+ async function getClipboardText() {
445
+ const permissionStatus = await requestPermission({ name: "clipboard", access: "read" });
446
+ if (permissionStatus === "denied") {
447
+ throw new Error("\uD074\uB9BD\uBCF4\uB4DC \uC77D\uAE30 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
448
+ }
449
+ return AppsInTossModule.getClipboardText({});
450
+ }
451
+ async function fetchContacts(options) {
452
+ const permissionStatus = await requestPermission({ name: "contacts", access: "read" });
453
+ if (permissionStatus === "denied") {
454
+ throw new Error("\uC5F0\uB77D\uCC98 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
455
+ }
456
+ const contacts = await AppsInTossModule.fetchContacts(options);
457
+ return {
458
+ result: contacts.result,
459
+ nextOffset: contacts.nextOffset ?? null,
460
+ done: contacts.done
461
+ };
462
+ }
463
+ var DEFAULT_MAX_COUNT = 10;
464
+ var DEFAULT_MAX_WIDTH = 1024;
465
+ async function fetchAlbumPhotos(options) {
466
+ const permissionStatus = await requestPermission({ name: "photos", access: "read" });
467
+ if (permissionStatus === "denied") {
468
+ throw new Error("\uC0AC\uC9C4\uCCA9 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
469
+ }
470
+ const albumPhotos = await AppsInTossModule.fetchAlbumPhotos({
471
+ ...options,
472
+ maxCount: options.maxCount ?? DEFAULT_MAX_COUNT,
473
+ maxWidth: options.maxWidth ?? DEFAULT_MAX_WIDTH
474
+ });
475
+ return albumPhotos;
476
+ }
477
+ async function getCurrentLocation(options) {
478
+ const permissionStatus = await requestPermission({ name: "geolocation", access: "access" });
479
+ if (permissionStatus === "denied") {
480
+ throw new Error("\uC704\uCE58 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
481
+ }
482
+ const position = await AppsInTossModule.getCurrentLocation(options);
483
+ return position;
484
+ }
485
+ async function openCamera(options) {
486
+ const permissionStatus = await requestPermission({ name: "camera", access: "access" });
487
+ if (permissionStatus === "denied") {
488
+ throw new Error("\uCE74\uBA54\uB77C \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
489
+ }
490
+ const photo = await AppsInTossModule.openCamera({ base64: false, maxWidth: 1024, ...options });
491
+ return photo;
492
+ }
493
+ async function appLogin() {
494
+ return AppsInTossModule.appLogin({});
495
+ }
496
+ function getTossAppVersion() {
497
+ return AppsInTossModule.tossAppVersion;
498
+ }
499
+ function getDeviceId() {
500
+ return AppsInTossModule.deviceId;
501
+ }
502
+ function getItem(key) {
503
+ return AppsInTossModule.getStorageItem({ key });
504
+ }
505
+ function setItem(key, value) {
506
+ return AppsInTossModule.setStorageItem({
507
+ key,
508
+ value
509
+ });
510
+ }
511
+ function removeItem(key) {
512
+ return AppsInTossModule.removeStorageItem({ key });
513
+ }
514
+ function clearItems() {
515
+ return AppsInTossModule.clearStorage({});
516
+ }
517
+ var Storage = {
518
+ getItem,
519
+ setItem,
520
+ removeItem,
521
+ clearItems
522
+ };
523
+ function normalizeParams(params) {
524
+ return Object.fromEntries(
525
+ Object.entries(params).filter(([, value]) => value !== void 0).map(([key, value]) => [key, String(value)])
526
+ );
527
+ }
528
+ async function eventLog(params) {
529
+ if (AppsInTossModule.operationalEnvironment === "sandbox") {
530
+ console.log("[eventLogDebug]", {
531
+ log_name: params.log_name,
532
+ log_type: params.log_type,
533
+ params: normalizeParams(params.params)
534
+ });
535
+ return;
536
+ }
537
+ const isSupported = isMinVersionSupported({
538
+ android: "5.208.0",
539
+ ios: "5.208.0"
540
+ });
541
+ if (!isSupported) {
542
+ return;
543
+ }
544
+ return AppsInTossModule.eventLog({
545
+ log_name: params.log_name,
546
+ log_type: params.log_type,
547
+ params: normalizeParams(params.params)
548
+ });
549
+ }
550
+ async function getTossShareLink(path) {
551
+ const { shareLink } = await AppsInTossModule.getTossShareLink({});
552
+ const shareUrl = new URL(shareLink);
553
+ shareUrl.searchParams.set("deep_link_value", path);
554
+ shareUrl.searchParams.set("af_dp", path);
555
+ return shareUrl.toString();
556
+ }
557
+ async function setDeviceOrientation(options) {
558
+ const isSupported = isMinVersionSupported({
559
+ android: "5.215.0",
560
+ ios: "5.215.0"
561
+ });
562
+ if (!isSupported) {
563
+ return;
564
+ }
565
+ return AppsInTossModule.setDeviceOrientation(options);
566
+ }
567
+ async function saveBase64Data(params) {
568
+ const isSupported = isMinVersionSupported({
569
+ android: "5.218.0",
570
+ ios: "5.216.0"
571
+ });
572
+ if (!isSupported) {
573
+ console.warn("saveBase64Data is not supported in this app version");
574
+ return;
575
+ }
576
+ await AppsInTossModule.saveBase64Data(params);
577
+ }
578
+ var TossPay = {
579
+ checkoutPayment
580
+ };
581
+ var GoogleAdMob = {
582
+ loadAdMobInterstitialAd,
583
+ showAdMobInterstitialAd,
584
+ loadAdMobRewardedAd,
585
+ showAdMobRewardedAd
586
+ };
587
+ var BedrockModule = import_react_native8.NativeModules.BedrockModule;
588
+ async function closeView() {
589
+ return BedrockModule.closeView();
590
+ }
591
+ function getLocale() {
592
+ const locale = BedrockModule?.DeviceInfo?.locale ?? "ko-KR";
593
+ if (import_react_native9.Platform.OS === "android") {
594
+ return replaceUnderbarToHypen(locale);
595
+ }
596
+ return locale;
597
+ }
598
+ function replaceUnderbarToHypen(locale) {
599
+ return locale.replace(/_/g, "-");
600
+ }
601
+ function getSchemeUri() {
602
+ return BedrockModule.schemeUri;
603
+ }
604
+ function generateHapticFeedback(options) {
605
+ return BedrockModule.generateHapticFeedback(options);
606
+ }
607
+ async function share(message) {
608
+ BedrockModule.share(message);
609
+ }
610
+ function setSecureScreen(options) {
611
+ return BedrockModule.setSecureScreen(options);
612
+ }
613
+ async function setScreenAwakeMode(options) {
614
+ return BedrockModule.setScreenAwakeMode(options);
615
+ }
616
+ function getNetworkStatus() {
617
+ return BedrockModule.getNetworkStatus();
618
+ }
619
+ async function setIosSwipeGestureEnabled(options) {
620
+ if (BedrockModule.setIosSwipeGestureEnabled == null) {
621
+ return;
622
+ }
623
+ return BedrockModule.setIosSwipeGestureEnabled(options);
624
+ }
625
+ function openURL(url) {
626
+ return import_react_native10.Linking.openURL(url);
627
+ }
628
+ function getPlatformOS() {
629
+ return import_react_native11.Platform.OS;
630
+ }
631
+ var BedrockCoreModule = import_react_native12.NativeModules.BedrockCoreModule;
632
+ var Accuracy2 = /* @__PURE__ */ ((Accuracy3) => {
633
+ Accuracy3[Accuracy3["Lowest"] = 1] = "Lowest";
634
+ Accuracy3[Accuracy3["Low"] = 2] = "Low";
635
+ Accuracy3[Accuracy3["Balanced"] = 3] = "Balanced";
636
+ Accuracy3[Accuracy3["High"] = 4] = "High";
637
+ Accuracy3[Accuracy3["Highest"] = 5] = "Highest";
638
+ Accuracy3[Accuracy3["BestForNavigation"] = 6] = "BestForNavigation";
639
+ return Accuracy3;
640
+ })(Accuracy2 || {});
641
+ var TossCoreModule = import_react_native13.NativeModules.TossCoreModule;
642
+ function tossCoreEventLog(params) {
643
+ const supported = isMinVersionSupported({ ios: "5.210.0", android: "5.210.0" });
644
+ const isSandbox = getOperationalEnvironment() === "sandbox";
645
+ if (!supported || isSandbox) {
646
+ return;
647
+ }
648
+ TossCoreModule.eventLog({
649
+ params: {
650
+ log_name: params.log_name,
651
+ log_type: params.log_type,
652
+ params: params.params
653
+ }
654
+ });
655
+ }
656
+ var INTERNAL__module = {
657
+ tossCoreEventLog
658
+ };
659
+
660
+ // src/core/components/AppEvent.tsx
661
+ var import_react_native15 = require("@granite-js/react-native");
662
+ var import_react2 = require("react");
663
+
664
+ // src/env.ts
665
+ var env = {
666
+ getDeploymentId: () => __DEV__ ? "local" : global.__appsInToss?.deploymentId
667
+ };
668
+
669
+ // src/core/hooks/useReferrer.ts
670
+ var import_react_native14 = require("@granite-js/react-native");
60
671
  var import_react = require("react");
672
+ function useReferrer() {
673
+ return (0, import_react.useMemo)(() => {
674
+ try {
675
+ return new URL((0, import_react_native14.getSchemeUri)()).searchParams.get("referrer");
676
+ } catch {
677
+ return null;
678
+ }
679
+ }, []);
680
+ }
681
+
682
+ // src/core/components/AppEvent.tsx
683
+ var ENTRY_APP_EVENT_SCHEMA_ID = 1562181;
684
+ function isPrivateScheme() {
685
+ try {
686
+ return new URL((0, import_react_native15.getSchemeUri)()).protocol === "intoss-private:";
687
+ } catch {
688
+ return false;
689
+ }
690
+ }
691
+ function EntryAppEvent() {
692
+ const referrer = useReferrer() ?? "";
693
+ (0, import_react2.useEffect)(() => {
694
+ INTERNAL__module.tossCoreEventLog({
695
+ log_name: "appsintoss_app_visit::impression__enter_appsintoss",
696
+ log_type: "info",
697
+ params: {
698
+ is_transform: true,
699
+ schema_id: ENTRY_APP_EVENT_SCHEMA_ID,
700
+ referrer,
701
+ deployment_id: env.getDeploymentId(),
702
+ app_name: import_react_native15.Granite.appName,
703
+ is_private: isPrivateScheme()
704
+ }
705
+ });
706
+ }, [referrer]);
707
+ return null;
708
+ }
709
+ function SystemAppEvent({ ...initialProps }) {
710
+ (0, import_react2.useEffect)(() => {
711
+ INTERNAL__module.tossCoreEventLog({
712
+ log_name: "AppsInTossInitialProps",
713
+ log_type: "debug",
714
+ params: {
715
+ ...initialProps,
716
+ schemeUri: (0, import_react_native15.getSchemeUri)(),
717
+ deployment_id: env.getDeploymentId(),
718
+ app_name: import_react_native15.Granite.appName,
719
+ is_private: isPrivateScheme()
720
+ }
721
+ });
722
+ }, [initialProps]);
723
+ return null;
724
+ }
725
+ var AppEvent = {
726
+ Entry: EntryAppEvent,
727
+ System: SystemAppEvent
728
+ };
729
+
730
+ // src/core/hooks/useAppsInTossBridge.ts
731
+ var import_react_native16 = require("@toss-design-system/react-native");
732
+ var import_react3 = require("react");
61
733
 
62
734
  // src/core/utils/getAppsInTossGlobals.ts
63
735
  function getAppsInTossGlobals() {
@@ -67,94 +739,443 @@ function getAppsInTossGlobals() {
67
739
  return global.__appsInToss;
68
740
  }
69
741
 
70
- // src/core/utils/toIcon.ts
71
- function toIcon(source) {
72
- return source.startsWith("http") ? { source: { uri: source } } : { name: source };
742
+ // src/core/utils/toIcon.ts
743
+ function toIcon(source) {
744
+ return source.startsWith("http") ? { source: { uri: source } } : { name: source };
745
+ }
746
+
747
+ // src/core/hooks/useAppsInTossBridge.ts
748
+ function useAppsInTossBridge() {
749
+ const controller = (0, import_react_native16.useBridge)();
750
+ const appsInTossGlobals2 = getAppsInTossGlobals();
751
+ (0, import_react3.useEffect)(() => {
752
+ const commonProps = {
753
+ serviceName: appsInTossGlobals2.brandDisplayName,
754
+ icon: toIcon(appsInTossGlobals2.brandIcon),
755
+ color: appsInTossGlobals2.brandPrimaryColor,
756
+ colorMode: appsInTossGlobals2.brandBridgeColorMode
757
+ };
758
+ controller.open({
759
+ ...commonProps,
760
+ onExited: () => {
761
+ appsInTossEvent.emit("entryMessageExited", void 0);
762
+ }
763
+ });
764
+ }, []);
765
+ }
766
+
767
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/async-bridges.ts
768
+ var async_bridges_exports = {};
769
+ __export(async_bridges_exports, {
770
+ appLogin: () => appLogin2,
771
+ checkoutPayment: () => checkoutPayment2,
772
+ closeView: () => closeView2,
773
+ eventLog: () => eventLog2,
774
+ fetchAlbumPhotos: () => fetchAlbumPhotos2,
775
+ fetchContacts: () => fetchContacts2,
776
+ generateHapticFeedback: () => generateHapticFeedback2,
777
+ getClipboardText: () => getClipboardText2,
778
+ getCurrentLocation: () => getCurrentLocation2,
779
+ getNetworkStatus: () => getNetworkStatus2,
780
+ getTossShareLink: () => getTossShareLink2,
781
+ openCamera: () => openCamera2,
782
+ openURL: () => openURL2,
783
+ saveBase64Data: () => saveBase64Data2,
784
+ setClipboardText: () => setClipboardText2,
785
+ setDeviceOrientation: () => setDeviceOrientation2,
786
+ setIosSwipeGestureEnabled: () => setIosSwipeGestureEnabled2,
787
+ setScreenAwakeMode: () => setScreenAwakeMode2,
788
+ setSecureScreen: () => setSecureScreen2,
789
+ share: () => share2
790
+ });
791
+
792
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/BedrockModule/native-modules/natives/BedrockModule.ts
793
+ var import_react_native17 = require("react-native");
794
+ var BedrockModule2 = import_react_native17.NativeModules.BedrockModule;
795
+
796
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/BedrockModule/native-modules/natives/closeView.ts
797
+ async function closeView2() {
798
+ return BedrockModule2.closeView();
799
+ }
800
+
801
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/BedrockModule/native-modules/natives/generateHapticFeedback/index.ts
802
+ function generateHapticFeedback2(options) {
803
+ return BedrockModule2.generateHapticFeedback(options);
804
+ }
805
+
806
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/BedrockModule/native-modules/natives/share.ts
807
+ async function share2(message) {
808
+ BedrockModule2.share(message);
809
+ }
810
+
811
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/BedrockModule/native-modules/natives/setSecureScreen.ts
812
+ function setSecureScreen2(options) {
813
+ return BedrockModule2.setSecureScreen(options);
814
+ }
815
+
816
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/BedrockModule/native-modules/natives/setScreenAwakeMode.ts
817
+ async function setScreenAwakeMode2(options) {
818
+ return BedrockModule2.setScreenAwakeMode(options);
819
+ }
820
+
821
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/BedrockModule/native-modules/natives/getNetworkStatus/index.ts
822
+ function getNetworkStatus2() {
823
+ return BedrockModule2.getNetworkStatus();
824
+ }
825
+
826
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/BedrockModule/native-modules/natives/setIosSwipeGestureEnabled.ts
827
+ async function setIosSwipeGestureEnabled2(options) {
828
+ if (BedrockModule2.setIosSwipeGestureEnabled == null) {
829
+ return;
830
+ }
831
+ return BedrockModule2.setIosSwipeGestureEnabled(options);
832
+ }
833
+
834
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/BedrockModule/native-modules/natives/openURL.ts
835
+ var import_react_native18 = require("react-native");
836
+ function openURL2(url) {
837
+ return import_react_native18.Linking.openURL(url);
838
+ }
839
+
840
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/AppsInTossModule.ts
841
+ var import_react_native19 = require("react-native");
842
+ var Module2 = import_react_native19.TurboModuleRegistry.getEnforcing("AppsInTossModule");
843
+ var AppsInTossModuleInstance2 = Module2;
844
+ var AppsInTossModule2 = Module2;
845
+
846
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/getPermission.ts
847
+ function getPermission2(permission) {
848
+ return AppsInTossModule2.getPermission(permission);
849
+ }
850
+
851
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/openPermissionDialog.ts
852
+ function openPermissionDialog2(permission) {
853
+ return AppsInTossModule2.openPermissionDialog(permission);
854
+ }
855
+
856
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/requestPermission.ts
857
+ async function requestPermission2(permission) {
858
+ const permissionStatus = await getPermission2(permission);
859
+ switch (permissionStatus) {
860
+ case "allowed":
861
+ case "denied":
862
+ return permissionStatus;
863
+ default:
864
+ return openPermissionDialog2(permission);
865
+ }
866
+ }
867
+
868
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/setClipboardText.ts
869
+ async function setClipboardText2(text) {
870
+ const permissionStatus = await requestPermission2({ name: "clipboard", access: "write" });
871
+ if (permissionStatus === "denied") {
872
+ throw new Error("\uD074\uB9BD\uBCF4\uB4DC \uC4F0\uAE30 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
873
+ }
874
+ return AppsInTossModule2.setClipboardText({ text });
875
+ }
876
+
877
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/getClipboardText.ts
878
+ async function getClipboardText2() {
879
+ const permissionStatus = await requestPermission2({ name: "clipboard", access: "read" });
880
+ if (permissionStatus === "denied") {
881
+ throw new Error("\uD074\uB9BD\uBCF4\uB4DC \uC77D\uAE30 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
882
+ }
883
+ return AppsInTossModule2.getClipboardText({});
884
+ }
885
+
886
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/fetchContacts.ts
887
+ async function fetchContacts2(options) {
888
+ const permissionStatus = await requestPermission2({ name: "contacts", access: "read" });
889
+ if (permissionStatus === "denied") {
890
+ throw new Error("\uC5F0\uB77D\uCC98 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
891
+ }
892
+ const contacts = await AppsInTossModule2.fetchContacts(options);
893
+ return {
894
+ result: contacts.result,
895
+ nextOffset: contacts.nextOffset ?? null,
896
+ done: contacts.done
897
+ };
898
+ }
899
+
900
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/fetchAlbumPhotos.ts
901
+ var DEFAULT_MAX_COUNT2 = 10;
902
+ var DEFAULT_MAX_WIDTH2 = 1024;
903
+ async function fetchAlbumPhotos2(options) {
904
+ const permissionStatus = await requestPermission2({ name: "photos", access: "read" });
905
+ if (permissionStatus === "denied") {
906
+ throw new Error("\uC0AC\uC9C4\uCCA9 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
907
+ }
908
+ const albumPhotos = await AppsInTossModule2.fetchAlbumPhotos({
909
+ ...options,
910
+ maxCount: options.maxCount ?? DEFAULT_MAX_COUNT2,
911
+ maxWidth: options.maxWidth ?? DEFAULT_MAX_WIDTH2
912
+ });
913
+ return albumPhotos;
914
+ }
915
+
916
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/getCurrentLocation.ts
917
+ async function getCurrentLocation2(options) {
918
+ const permissionStatus = await requestPermission2({ name: "geolocation", access: "access" });
919
+ if (permissionStatus === "denied") {
920
+ throw new Error("\uC704\uCE58 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
921
+ }
922
+ const position = await AppsInTossModule2.getCurrentLocation(options);
923
+ return position;
924
+ }
925
+
926
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/openCamera.ts
927
+ async function openCamera2(options) {
928
+ const permissionStatus = await requestPermission2({ name: "camera", access: "access" });
929
+ if (permissionStatus === "denied") {
930
+ throw new Error("\uCE74\uBA54\uB77C \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
931
+ }
932
+ const photo = await AppsInTossModule2.openCamera({ base64: false, maxWidth: 1024, ...options });
933
+ return photo;
934
+ }
935
+
936
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/appLogin.ts
937
+ async function appLogin2() {
938
+ return AppsInTossModule2.appLogin({});
939
+ }
940
+
941
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/isMinVersionSupported.ts
942
+ var import_react_native20 = require("react-native");
943
+
944
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/utils/compareVersion.ts
945
+ var SEMVER_REGEX2 = /^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\\-]+(?:\.[\da-z\\-]+)*))?(?:\+[\da-z\\-]+(?:\.[\da-z\\-]+)*)?)?)?$/i;
946
+ var isWildcard2 = (val) => ["*", "x", "X"].includes(val);
947
+ var tryParse2 = (val) => {
948
+ const num = parseInt(val, 10);
949
+ return isNaN(num) ? val : num;
950
+ };
951
+ var coerceTypes2 = (a, b) => {
952
+ return typeof a === typeof b ? [a, b] : [String(a), String(b)];
953
+ };
954
+ var compareValues2 = (a, b) => {
955
+ if (isWildcard2(a) || isWildcard2(b)) {
956
+ return 0;
957
+ }
958
+ const [aVal, bVal] = coerceTypes2(tryParse2(a), tryParse2(b));
959
+ if (aVal > bVal) {
960
+ return 1;
961
+ }
962
+ if (aVal < bVal) {
963
+ return -1;
964
+ }
965
+ return 0;
966
+ };
967
+ var parseVersion2 = (version) => {
968
+ if (typeof version !== "string") {
969
+ throw new TypeError("Invalid argument: expected a string");
970
+ }
971
+ const match = version.match(SEMVER_REGEX2);
972
+ if (!match) {
973
+ throw new Error(`Invalid semver: '${version}'`);
974
+ }
975
+ const [, major, minor, patch, build, preRelease] = match;
976
+ return [major, minor, patch, build, preRelease];
977
+ };
978
+ var compareSegments2 = (a, b) => {
979
+ const maxLength = Math.max(a.length, b.length);
980
+ for (let i = 0; i < maxLength; i++) {
981
+ const segA = a[i] ?? "0";
982
+ const segB = b[i] ?? "0";
983
+ const result = compareValues2(segA, segB);
984
+ if (result !== 0) {
985
+ return result;
986
+ }
987
+ }
988
+ return 0;
989
+ };
990
+ var compareVersions2 = (v1, v2) => {
991
+ const seg1 = parseVersion2(v1);
992
+ const seg2 = parseVersion2(v2);
993
+ const preRelease1 = seg1.pop();
994
+ const preRelease2 = seg2.pop();
995
+ const mainCompare = compareSegments2(seg1, seg2);
996
+ if (mainCompare !== 0) {
997
+ return mainCompare;
998
+ }
999
+ if (preRelease1 && preRelease2) {
1000
+ return compareSegments2(preRelease1.split("."), preRelease2.split("."));
1001
+ }
1002
+ if (preRelease1) {
1003
+ return -1;
1004
+ }
1005
+ if (preRelease2) {
1006
+ return 1;
1007
+ }
1008
+ return 0;
1009
+ };
1010
+
1011
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/isMinVersionSupported.ts
1012
+ function isMinVersionSupported2(minVersions) {
1013
+ const operationalEnvironment2 = AppsInTossModule2.operationalEnvironment;
1014
+ if (operationalEnvironment2 === "sandbox") {
1015
+ return true;
1016
+ }
1017
+ const currentVersion = AppsInTossModule2.tossAppVersion;
1018
+ const isIOS = import_react_native20.Platform.OS === "ios";
1019
+ const minVersion = isIOS ? minVersions.ios : minVersions.android;
1020
+ if (minVersion === void 0) {
1021
+ return false;
1022
+ }
1023
+ if (minVersion === "always") {
1024
+ return true;
1025
+ }
1026
+ if (minVersion === "never") {
1027
+ return false;
1028
+ }
1029
+ return compareVersions2(currentVersion, minVersion) >= 0;
1030
+ }
1031
+
1032
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/eventLog.ts
1033
+ function normalizeParams2(params) {
1034
+ return Object.fromEntries(
1035
+ Object.entries(params).filter(([, value]) => value !== void 0).map(([key, value]) => [key, String(value)])
1036
+ );
1037
+ }
1038
+ async function eventLog2(params) {
1039
+ if (AppsInTossModule2.operationalEnvironment === "sandbox") {
1040
+ console.log("[eventLogDebug]", {
1041
+ log_name: params.log_name,
1042
+ log_type: params.log_type,
1043
+ params: normalizeParams2(params.params)
1044
+ });
1045
+ return;
1046
+ }
1047
+ const isSupported = isMinVersionSupported2({
1048
+ android: "5.208.0",
1049
+ ios: "5.208.0"
1050
+ });
1051
+ if (!isSupported) {
1052
+ return;
1053
+ }
1054
+ return AppsInTossModule2.eventLog({
1055
+ log_name: params.log_name,
1056
+ log_type: params.log_type,
1057
+ params: normalizeParams2(params.params)
1058
+ });
1059
+ }
1060
+
1061
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/getTossShareLink.ts
1062
+ async function getTossShareLink2(path) {
1063
+ const { shareLink } = await AppsInTossModule2.getTossShareLink({});
1064
+ const shareUrl = new URL(shareLink);
1065
+ shareUrl.searchParams.set("deep_link_value", path);
1066
+ shareUrl.searchParams.set("af_dp", path);
1067
+ return shareUrl.toString();
73
1068
  }
74
1069
 
75
- // src/core/hooks/useAppsInTossBridge.ts
76
- function useAppsInTossBridge() {
77
- const controller = (0, import_react_native.useBridge)();
78
- const appsInTossGlobals2 = getAppsInTossGlobals();
79
- (0, import_react.useEffect)(() => {
80
- const commonProps = {
81
- serviceName: appsInTossGlobals2.brandDisplayName,
82
- icon: toIcon(appsInTossGlobals2.brandIcon),
83
- color: appsInTossGlobals2.brandPrimaryColor,
84
- colorMode: appsInTossGlobals2.brandBridgeColorMode
85
- };
86
- controller.open({ ...commonProps });
87
- }, []);
1070
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/setDeviceOrientation.ts
1071
+ async function setDeviceOrientation2(options) {
1072
+ const isSupported = isMinVersionSupported2({
1073
+ android: "5.215.0",
1074
+ ios: "5.215.0"
1075
+ });
1076
+ if (!isSupported) {
1077
+ return;
1078
+ }
1079
+ return AppsInTossModule2.setDeviceOrientation(options);
88
1080
  }
89
1081
 
90
- // src/core/registerApp.tsx
91
- var import_jsx_runtime = require("react/jsx-runtime");
92
- function AppsInTossContainer(Container, { children, ...initialProps }) {
93
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Container, { ...initialProps, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_native2.TDSProvider, { colorPreference: "light", token: { color: { primary: getAppsInTossGlobals().brandPrimaryColor } }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TDSContainer, { ...initialProps, children }) }) });
94
- }
95
- function TDSContainer({ children }) {
96
- useAppsInTossBridge();
97
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children });
1082
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/checkoutPayment.ts
1083
+ async function checkoutPayment2(options) {
1084
+ return AppsInTossModule2.checkoutPayment({ params: options });
98
1085
  }
99
- function registerApp(container, { context }) {
100
- return import_react_native_bedrock.Bedrock.registerApp(AppsInTossContainer.bind(null, container), {
101
- appName: getAppName(),
102
- context
1086
+
1087
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/saveBase64Data.ts
1088
+ async function saveBase64Data2(params) {
1089
+ const isSupported = isMinVersionSupported2({
1090
+ android: "5.218.0",
1091
+ ios: "5.216.0"
103
1092
  });
104
- }
105
- function getAppName() {
106
- try {
107
- return global.__bedrock.app.name;
108
- } catch (error) {
109
- console.error("unexpected error occurred while getting app name");
110
- throw error;
1093
+ if (!isSupported) {
1094
+ console.warn("saveBase64Data is not supported in this app version");
1095
+ return;
111
1096
  }
1097
+ await AppsInTossModule2.saveBase64Data(params);
112
1098
  }
113
1099
 
114
- // src/core/index.ts
115
- var AppsInToss = {
116
- registerApp
117
- };
1100
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/constant-bridges.ts
1101
+ var constant_bridges_exports = {};
1102
+ __export(constant_bridges_exports, {
1103
+ getDeviceId: () => getDeviceId2,
1104
+ getLocale: () => getLocale2,
1105
+ getOperationalEnvironment: () => getOperationalEnvironment2,
1106
+ getPlatformOS: () => getPlatformOS2,
1107
+ getSchemeUri: () => getSchemeUri4,
1108
+ getTossAppVersion: () => getTossAppVersion2
1109
+ });
118
1110
 
119
- // src/native-event-emitter/bedrock-event.ts
120
- var import_react_native_bedrock3 = require("react-native-bedrock");
1111
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/BedrockModule/native-modules/natives/getLocale.ts
1112
+ var import_react_native21 = require("react-native");
1113
+ function getLocale2() {
1114
+ const locale = BedrockModule2?.DeviceInfo?.locale ?? "ko-KR";
1115
+ if (import_react_native21.Platform.OS === "android") {
1116
+ return replaceUnderbarToHypen2(locale);
1117
+ }
1118
+ return locale;
1119
+ }
1120
+ function replaceUnderbarToHypen2(locale) {
1121
+ return locale.replace(/_/g, "-");
1122
+ }
121
1123
 
122
- // src/native-event-emitter/event-plugins/UpdateLocationEvent.ts
123
- var import_react_native_bedrock2 = require("react-native-bedrock");
1124
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/BedrockModule/native-modules/natives/getSchemeUri.ts
1125
+ function getSchemeUri4() {
1126
+ return BedrockModule2.schemeUri;
1127
+ }
124
1128
 
125
- // src/native-modules/AppsInTossModule.ts
126
- var import_react_native3 = require("react-native");
127
- var AppsInTossModuleInstance = import_react_native3.NativeModules.AppsInTossModule;
128
- var AppsInTossModule = AppsInTossModuleInstance;
1129
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/BedrockModule/native-modules/natives/getPlatformOS.ts
1130
+ var import_react_native22 = require("react-native");
1131
+ function getPlatformOS2() {
1132
+ return import_react_native22.Platform.OS;
1133
+ }
129
1134
 
130
- // src/native-modules/getPermission.ts
131
- function getPermission(permission) {
132
- return AppsInTossModule.getPermission(permission);
1135
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/getOperationalEnvironment.ts
1136
+ function getOperationalEnvironment2() {
1137
+ return AppsInTossModule2.operationalEnvironment;
133
1138
  }
134
1139
 
135
- // src/native-modules/openPermissionDialog.ts
136
- function openPermissionDialog(permission) {
137
- return AppsInTossModule.openPermissionDialog(permission);
1140
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/getTossAppVersion.ts
1141
+ function getTossAppVersion2() {
1142
+ return AppsInTossModule2.tossAppVersion;
138
1143
  }
139
1144
 
140
- // src/native-modules/requestPermission.ts
141
- async function requestPermission(permission) {
142
- const permissionStatus = await getPermission(permission);
143
- switch (permissionStatus) {
144
- case "allowed":
145
- case "denied":
146
- return permissionStatus;
147
- default:
148
- return openPermissionDialog(permission);
149
- }
1145
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-modules/getDeviceId.ts
1146
+ function getDeviceId2() {
1147
+ return AppsInTossModule2.deviceId;
150
1148
  }
151
1149
 
152
- // src/native-event-emitter/nativeEventEmitter.ts
153
- var import_react_native4 = require("react-native");
154
- var nativeEventEmitter = new import_react_native4.NativeEventEmitter(AppsInTossModuleInstance);
1150
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/event-bridges.ts
1151
+ var event_bridges_exports = {};
1152
+ __export(event_bridges_exports, {
1153
+ startUpdateLocation: () => startUpdateLocation2
1154
+ });
1155
+
1156
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-event-emitter/appsInTossEvent.ts
1157
+ var import_react_native27 = require("@granite-js/react-native");
1158
+
1159
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-event-emitter/event-plugins/EntryMessageExitedEvent.ts
1160
+ var import_react_native23 = require("@granite-js/react-native");
1161
+ var EntryMessageExitedEvent2 = class extends import_react_native23.GraniteEventDefinition {
1162
+ name = "entryMessageExited";
1163
+ remove() {
1164
+ }
1165
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1166
+ listener(_) {
1167
+ }
1168
+ };
1169
+
1170
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-event-emitter/event-plugins/UpdateLocationEvent.ts
1171
+ var import_react_native25 = require("@granite-js/react-native");
155
1172
 
156
- // src/native-event-emitter/event-plugins/UpdateLocationEvent.ts
157
- var UpdateLocationEvent = class extends import_react_native_bedrock2.BedrockEventDefinition {
1173
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-event-emitter/nativeEventEmitter.ts
1174
+ var import_react_native24 = require("react-native");
1175
+ var nativeEventEmitter2 = new import_react_native24.NativeEventEmitter(AppsInTossModuleInstance2);
1176
+
1177
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-event-emitter/event-plugins/UpdateLocationEvent.ts
1178
+ var UpdateLocationEvent2 = class extends import_react_native25.GraniteEventDefinition {
158
1179
  name = "updateLocationEvent";
159
1180
  subscriptionCount = 0;
160
1181
  ref = {
@@ -162,17 +1183,19 @@ var UpdateLocationEvent = class extends import_react_native_bedrock2.BedrockEven
162
1183
  }
163
1184
  };
164
1185
  remove() {
165
- --this.subscriptionCount === 0 && AppsInTossModuleInstance.stopUpdateLocation({});
1186
+ if (--this.subscriptionCount === 0) {
1187
+ AppsInTossModuleInstance2.stopUpdateLocation({});
1188
+ }
166
1189
  this.ref.remove();
167
1190
  }
168
1191
  listener(options, onEvent, onError) {
169
- requestPermission({ name: "geolocation", access: "access" }).then((permissionStatus) => {
1192
+ requestPermission2({ name: "geolocation", access: "access" }).then((permissionStatus) => {
170
1193
  if (permissionStatus === "denied") {
171
1194
  onError(new Error("\uC704\uCE58 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694."));
172
1195
  return;
173
1196
  }
174
- void AppsInTossModuleInstance.startUpdateLocation(options).catch(onError);
175
- const subscription = nativeEventEmitter.addListener("updateLocation", onEvent);
1197
+ void AppsInTossModuleInstance2.startUpdateLocation(options).catch(onError);
1198
+ const subscription = nativeEventEmitter2.addListener("updateLocation", onEvent);
176
1199
  this.ref = {
177
1200
  remove: () => subscription?.remove()
178
1201
  };
@@ -181,179 +1204,178 @@ var UpdateLocationEvent = class extends import_react_native_bedrock2.BedrockEven
181
1204
  }
182
1205
  };
183
1206
 
184
- // src/native-event-emitter/bedrock-event.ts
185
- var appsInTossEvent = new import_react_native_bedrock3.BedrockEvent([new UpdateLocationEvent()]);
1207
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-event-emitter/internal/AppBridgeCallbackEvent.ts
1208
+ var import_react_native26 = require("@granite-js/react-native");
186
1209
 
187
- // src/native-event-emitter/startUpdateLocation.ts
188
- function startUpdateLocation(eventParams) {
189
- return appsInTossEvent.addEventListener("updateLocationEvent", eventParams);
1210
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/utils/generateUUID.ts
1211
+ function generateUUID2(placeholder) {
1212
+ return placeholder ? (placeholder ^ Math.random() * 16 >> placeholder / 4).toString(16) : (String(1e7) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, generateUUID2);
190
1213
  }
191
1214
 
192
- // src/native-modules/checkoutPayment.ts
193
- async function checkoutPayment(options) {
194
- return AppsInTossModule.checkoutPayment(options);
1215
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-event-emitter/internal/appBridge.ts
1216
+ var INTERNAL__callbacks2 = /* @__PURE__ */ new Map();
1217
+ function invokeAppBridgeCallback2(id, ...args) {
1218
+ const callback = INTERNAL__callbacks2.get(id);
1219
+ callback?.call(null, ...args);
1220
+ return Boolean(callback);
195
1221
  }
196
-
197
- // src/native-modules/executePayment.ts
198
- async function executePayment(options) {
199
- return AppsInTossModule.executePayment(options);
1222
+ function invokeAppBridgeMethod2(methodName, params, callbacks) {
1223
+ const { onSuccess, onError, ...appBridgeCallbacks } = callbacks;
1224
+ const { callbackMap, unregisterAll } = registerCallbacks2(appBridgeCallbacks);
1225
+ const promise = AppsInTossModuleInstance2[methodName]({
1226
+ params,
1227
+ callbacks: callbackMap
1228
+ });
1229
+ void promise.then(onSuccess).catch(onError);
1230
+ return unregisterAll;
200
1231
  }
201
-
202
- // src/native-modules/setClipboardText.ts
203
- async function setClipboardText(text) {
204
- const permissionStatus = await requestPermission({ name: "clipboard", access: "write" });
205
- if (permissionStatus === "denied") {
206
- throw new Error("\uD074\uB9BD\uBCF4\uB4DC \uC4F0\uAE30 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
1232
+ function registerCallbacks2(callbacks) {
1233
+ const callbackMap = {};
1234
+ for (const [callbackName, callback] of Object.entries(callbacks)) {
1235
+ const id = registerCallback2(callback, callbackName);
1236
+ callbackMap[callbackName] = id;
207
1237
  }
208
- return AppsInTossModule.setClipboardText({ text });
1238
+ const unregisterAll = () => {
1239
+ Object.values(callbackMap).forEach(unregisterCallback2);
1240
+ };
1241
+ return { callbackMap, unregisterAll };
209
1242
  }
210
-
211
- // src/native-modules/getClipboardText.ts
212
- async function getClipboardText() {
213
- const permissionStatus = await requestPermission({ name: "clipboard", access: "read" });
214
- if (permissionStatus === "denied") {
215
- throw new Error("\uD074\uB9BD\uBCF4\uB4DC \uC77D\uAE30 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
216
- }
217
- return AppsInTossModule.getClipboardText({});
1243
+ function registerCallback2(callback, name = "unnamed") {
1244
+ const uniqueId = generateUUID2();
1245
+ const callbackId = `${uniqueId}__${name}`;
1246
+ INTERNAL__callbacks2.set(callbackId, callback);
1247
+ return callbackId;
218
1248
  }
219
-
220
- // src/native-modules/fetchContacts.ts
221
- async function fetchContacts({
222
- size,
223
- offset,
224
- query
225
- }) {
226
- const permissionStatus = await requestPermission({ name: "contacts", access: "read" });
227
- if (permissionStatus === "denied") {
228
- throw new Error("\uC5F0\uB77D\uCC98 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
229
- }
230
- const contacts = await AppsInTossModule.fetchContacts({
231
- size,
232
- offset,
233
- query
234
- });
235
- return {
236
- result: contacts.result,
237
- nextOffset: contacts.nextOffset ?? null,
238
- done: contacts.done
239
- };
1249
+ function unregisterCallback2(id) {
1250
+ INTERNAL__callbacks2.delete(id);
240
1251
  }
241
-
242
- // src/native-modules/fetchAlbumPhotos.ts
243
- var DEFAULT_MAX_COUNT = 10;
244
- var DEFAULT_MAX_WIDTH = 1024;
245
- async function fetchAlbumPhotos(options) {
246
- const permissionStatus = await requestPermission({ name: "photos", access: "read" });
247
- if (permissionStatus === "denied") {
248
- throw new Error("\uC0AC\uC9C4\uCCA9 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
249
- }
250
- const albumPhotos = await AppsInTossModule.fetchAlbumPhotos({
251
- ...options,
252
- maxCount: options.maxCount ?? DEFAULT_MAX_COUNT,
253
- maxWidth: options.maxWidth ?? DEFAULT_MAX_WIDTH
254
- });
255
- return albumPhotos;
1252
+ function getCallbackIds2() {
1253
+ return Array.from(INTERNAL__callbacks2.keys());
256
1254
  }
1255
+ var INTERNAL__appBridgeHandler2 = {
1256
+ invokeAppBridgeCallback: invokeAppBridgeCallback2,
1257
+ invokeAppBridgeMethod: invokeAppBridgeMethod2,
1258
+ registerCallback: registerCallback2,
1259
+ unregisterCallback: unregisterCallback2,
1260
+ getCallbackIds: getCallbackIds2
1261
+ };
257
1262
 
258
- // src/native-modules/getCurrentLocation.ts
259
- async function getCurrentLocation(options) {
260
- const permissionStatus = await requestPermission({ name: "geolocation", access: "access" });
261
- if (permissionStatus === "denied") {
262
- throw new Error("\uC704\uCE58 \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
1263
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-event-emitter/internal/AppBridgeCallbackEvent.ts
1264
+ var UNSAFE__nativeEventEmitter2 = nativeEventEmitter2;
1265
+ var AppBridgeCallbackEvent2 = class _AppBridgeCallbackEvent2 extends import_react_native26.GraniteEventDefinition {
1266
+ static INTERNAL__appBridgeSubscription;
1267
+ name = "appBridgeCallbackEvent";
1268
+ constructor() {
1269
+ super();
1270
+ this.registerAppBridgeCallbackEventListener();
263
1271
  }
264
- const position = await AppsInTossModule.getCurrentLocation(options);
265
- return position;
266
- }
267
-
268
- // src/native-modules/openCamera.ts
269
- async function openCamera(options) {
270
- const permissionStatus = await requestPermission({ name: "camera", access: "access" });
271
- if (permissionStatus === "denied") {
272
- throw new Error("\uCE74\uBA54\uB77C \uAD8C\uD55C\uC774 \uAC70\uBD80\uB418\uC5C8\uC5B4\uC694.");
1272
+ remove() {
273
1273
  }
274
- const photo = await AppsInTossModule.openCamera({ base64: false, maxWidth: 1024, ...options });
275
- return photo;
276
- }
277
-
278
- // src/native-modules/appLogin.ts
279
- async function appLogin() {
280
- return AppsInTossModule.appLogin({});
281
- }
1274
+ listener() {
1275
+ }
1276
+ registerAppBridgeCallbackEventListener() {
1277
+ if (_AppBridgeCallbackEvent2.INTERNAL__appBridgeSubscription != null) {
1278
+ return;
1279
+ }
1280
+ _AppBridgeCallbackEvent2.INTERNAL__appBridgeSubscription = UNSAFE__nativeEventEmitter2.addListener(
1281
+ "appBridgeCallback",
1282
+ this.ensureInvokeAppBridgeCallback
1283
+ );
1284
+ }
1285
+ ensureInvokeAppBridgeCallback(result) {
1286
+ if (typeof result === "object" && typeof result.name === "string") {
1287
+ INTERNAL__appBridgeHandler2.invokeAppBridgeCallback(result.name, result.params);
1288
+ } else {
1289
+ console.warn("Invalid app bridge callback result:", result);
1290
+ }
1291
+ }
1292
+ };
282
1293
 
283
- // src/native-modules/getOperationalEnvironment.ts
284
- function getOperationalEnvironment() {
285
- return AppsInTossModule.operationalEnvironment;
286
- }
1294
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-event-emitter/appsInTossEvent.ts
1295
+ var appsInTossEvent2 = new import_react_native27.GraniteEvent([
1296
+ new AppBridgeCallbackEvent2(),
1297
+ new UpdateLocationEvent2(),
1298
+ new EntryMessageExitedEvent2()
1299
+ ]);
287
1300
 
288
- // src/native-modules/getTossAppVersion.ts
289
- function getTossAppVersion() {
290
- return AppsInTossModule.tossAppVersion;
1301
+ // ../../.yarn/__virtual__/@apps-in-toss-native-modules-virtual-79d3aa8191/1/apps-in-toss-packages/native-modules/src/AppsInTossModule/native-event-emitter/startUpdateLocation.ts
1302
+ function startUpdateLocation2(eventParams) {
1303
+ return appsInTossEvent2.addEventListener("updateLocationEvent", eventParams);
291
1304
  }
292
1305
 
293
- // src/native-modules/getDeviceId.ts
294
- function getDeviceId() {
295
- return AppsInTossModule.deviceId;
1306
+ // src/core/registerApp.tsx
1307
+ var import_jsx_runtime = require("react/jsx-runtime");
1308
+ function AppsInTossContainer(Container, { children, ...initialProps }) {
1309
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
1310
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AppEvent.Entry, {}),
1311
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AppEvent.System, { ...initialProps }),
1312
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Container, { ...initialProps, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_native29.TDSProvider, { colorPreference: "light", token: { color: { primary: getAppsInTossGlobals().brandPrimaryColor } }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TDSContainer, { ...initialProps, children }) }) })
1313
+ ] });
296
1314
  }
297
-
298
- // src/native-modules/storage.ts
299
- function getItem(key) {
300
- return AppsInTossModule.getStorageItem({ key });
1315
+ function TDSContainer({ children }) {
1316
+ useAppsInTossBridge();
1317
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children });
301
1318
  }
302
- function setItem(key, value) {
303
- return AppsInTossModule.setStorageItem({
304
- key,
305
- value
1319
+ function registerApp(container, { context, analytics }) {
1320
+ import_analytics.Analytics.init({
1321
+ logger: (params) => void eventLog2(params),
1322
+ debug: analytics?.debug ?? __DEV__
1323
+ });
1324
+ return import_react_native28.Granite.registerApp(AppsInTossContainer.bind(null, container), {
1325
+ appName: getAppName(),
1326
+ context,
1327
+ router: {
1328
+ screenContainer: import_analytics.Analytics.Screen,
1329
+ defaultScreenOption: {
1330
+ statusBarStyle: "dark"
1331
+ }
1332
+ }
306
1333
  });
307
1334
  }
308
- function removeItem(key) {
309
- return AppsInTossModule.removeStorageItem({ key });
310
- }
311
- function clearItems() {
312
- return AppsInTossModule.clearStorage({});
1335
+ function getAppName() {
1336
+ try {
1337
+ return global.__granite.app.name;
1338
+ } catch (error) {
1339
+ console.error("unexpected error occurred while getting app name");
1340
+ throw error;
1341
+ }
313
1342
  }
314
- var Storage = {
315
- getItem,
316
- setItem,
317
- removeItem,
318
- clearItems
319
- };
320
1343
 
321
- // src/native-modules/index.ts
322
- var TossPay = {
323
- checkoutPayment,
324
- executePayment
1344
+ // src/core/index.ts
1345
+ var AppsInToss = {
1346
+ registerApp
325
1347
  };
326
1348
 
327
1349
  // src/components/WebView.tsx
328
- var import_react_native12 = require("@toss-design-system/react-native");
1350
+ var import_react_native39 = require("@granite-js/react-native");
1351
+ var graniteAsyncBridges = __toESM(require("@granite-js/react-native/async-bridges"), 1);
1352
+ var graniteConstantBridges = __toESM(require("@granite-js/react-native/constant-bridges"), 1);
1353
+ var import_react_native40 = require("@toss-design-system/react-native");
329
1354
  var import_private = require("@toss-design-system/react-native/private");
330
- var import_react4 = require("react");
331
- var import_react_native_bedrock5 = require("react-native-bedrock");
332
- var bedrockAsyncBridges = __toESM(require("react-native-bedrock/async-bridges"), 1);
333
- var bedrockConstantBridges = __toESM(require("react-native-bedrock/constant-bridges"), 1);
1355
+ var import_react6 = require("react");
334
1356
 
335
1357
  // src/components/GameWebView.tsx
336
- var import_react_native_webview = require("@react-native-bedrock/native/react-native-webview");
337
- var import_react_native10 = require("@toss-design-system/react-native");
1358
+ var import_react_native_webview = require("@granite-js/native/react-native-webview");
1359
+ var import_react_native35 = require("@granite-js/react-native");
1360
+ var import_react_native36 = require("@toss-design-system/react-native");
338
1361
  var import_es_hangul = require("es-hangul");
339
- var import_react2 = require("react");
340
- var import_react_native11 = require("react-native");
341
- var import_react_native_bedrock4 = require("react-native-bedrock");
1362
+ var import_react4 = require("react");
1363
+ var import_react_native37 = require("react-native");
342
1364
 
343
1365
  // src/components/GameWebViewNavigationBar/GameNavigationBar.tsx
344
- var import_react_native_svg = require("@react-native-bedrock/native/react-native-svg");
345
- var import_react_native8 = require("@toss-design-system/react-native");
346
- var import_react_native9 = require("react-native");
1366
+ var import_react_native_svg = require("@granite-js/native/react-native-svg");
1367
+ var import_react_native33 = require("@toss-design-system/react-native");
1368
+ var import_react_native34 = require("react-native");
347
1369
 
348
1370
  // src/components/GameWebViewNavigationBar/HeaderRight.tsx
349
- var import_react_native6 = require("react-native");
1371
+ var import_react_native31 = require("react-native");
350
1372
 
351
1373
  // src/components/GameWebViewNavigationBar/byPlatform.ts
352
- var import_react_native5 = require("react-native");
1374
+ var import_react_native30 = require("react-native");
353
1375
  function byPlatform({
354
1376
  ...props
355
1377
  }) {
356
- return (props[import_react_native5.Platform.OS] ?? props.fallback)();
1378
+ return (props[import_react_native30.Platform.OS] ?? props.fallback)();
357
1379
  }
358
1380
 
359
1381
  // src/components/GameWebViewNavigationBar/constants.ts
@@ -363,10 +1385,10 @@ var IOS_DEFAULT_MARGIN = 20;
363
1385
  // src/components/GameWebViewNavigationBar/HeaderRight.tsx
364
1386
  var import_jsx_runtime2 = require("react/jsx-runtime");
365
1387
  function IOSHeaderRight(props) {
366
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_native6.View, { style: styles.ios, ...props });
1388
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_native31.View, { style: styles.ios, ...props });
367
1389
  }
368
1390
  function AndroidHeaderRight(props) {
369
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_native6.View, { style: styles.android, ...props });
1391
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_native31.View, { style: styles.android, ...props });
370
1392
  }
371
1393
  function HeaderRight(props) {
372
1394
  return byPlatform({
@@ -375,7 +1397,7 @@ function HeaderRight(props) {
375
1397
  fallback: () => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(IOSHeaderRight, { ...props })
376
1398
  });
377
1399
  }
378
- var styles = import_react_native6.StyleSheet.create({
1400
+ var styles = import_react_native31.StyleSheet.create({
379
1401
  ios: {
380
1402
  marginRight: -IOS_DEFAULT_MARGIN + RIGHT_MARGIN,
381
1403
  flexDirection: "row"
@@ -386,11 +1408,11 @@ var styles = import_react_native6.StyleSheet.create({
386
1408
  });
387
1409
 
388
1410
  // src/components/GameWebViewNavigationBar/useSafeAreaTop.ts
389
- var import_react_native_safe_area_context = require("@react-native-bedrock/native/react-native-safe-area-context");
390
- var import_react_native7 = require("react-native");
1411
+ var import_react_native_safe_area_context = require("@granite-js/native/react-native-safe-area-context");
1412
+ var import_react_native32 = require("react-native");
391
1413
  function useSafeAreaTop() {
392
1414
  const safeAreaInsets = (0, import_react_native_safe_area_context.useSafeAreaInsets)();
393
- const hasDynamicIsland = import_react_native7.Platform.OS === "ios" && safeAreaInsets.top > 50;
1415
+ const hasDynamicIsland = import_react_native32.Platform.OS === "ios" && safeAreaInsets.top > 50;
394
1416
  const safeAreaTop = hasDynamicIsland ? safeAreaInsets.top - 5 : safeAreaInsets.top;
395
1417
  return safeAreaTop;
396
1418
  }
@@ -401,31 +1423,31 @@ var originXML = '<svg fill="none" height="30" viewBox="0 0 30 30" width="30" xml
401
1423
  function GameNavigationBar({ onClose }) {
402
1424
  const safeAreaTop = useSafeAreaTop();
403
1425
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
404
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native8.PageNavbar, { preference: { type: "none" } }),
1426
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native33.PageNavbar, { preference: { type: "none" } }),
405
1427
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
406
- import_react_native9.View,
1428
+ import_react_native34.View,
407
1429
  {
408
1430
  style: {
409
1431
  width: "100%",
410
- height: import_react_native9.Platform.OS === "ios" ? 44 : 54,
1432
+ height: import_react_native34.Platform.OS === "ios" ? 44 : 54,
411
1433
  flexDirection: "row",
412
1434
  alignItems: "center",
413
1435
  justifyContent: "flex-end",
414
1436
  position: "absolute",
415
1437
  zIndex: 9999,
416
1438
  marginTop: safeAreaTop,
417
- paddingRight: import_react_native9.Platform.OS === "ios" ? 10 : 8
1439
+ paddingRight: import_react_native34.Platform.OS === "ios" ? 10 : 8
418
1440
  },
419
1441
  pointerEvents: "box-none",
420
1442
  children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(HeaderRight, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
421
- import_react_native9.TouchableOpacity,
1443
+ import_react_native34.TouchableOpacity,
422
1444
  {
423
1445
  hitSlop: { left: 8, right: 8 },
424
1446
  accessibilityRole: "button",
425
1447
  accessible: true,
426
1448
  accessibilityLabel: "\uAC8C\uC784\uC885\uB8CC",
427
1449
  style: {
428
- padding: import_react_native9.Platform.OS === "ios" ? 7 : 9
1450
+ padding: import_react_native34.Platform.OS === "ios" ? 7 : 9
429
1451
  },
430
1452
  onPress: onClose,
431
1453
  children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native_svg.SvgXml, { xml: originXML, width: 30, height: 30 })
@@ -438,10 +1460,10 @@ function GameNavigationBar({ onClose }) {
438
1460
 
439
1461
  // src/components/GameWebView.tsx
440
1462
  var import_jsx_runtime4 = require("react/jsx-runtime");
441
- var GameWebView = (0, import_react2.forwardRef)(function GameWebView2(props, ref) {
442
- const { openConfirm } = (0, import_react_native10.useDialog)();
1463
+ var GameWebView = (0, import_react4.forwardRef)(function GameWebView2(props, ref) {
1464
+ const { openConfirm } = (0, import_react_native36.useDialog)();
443
1465
  const { brandDisplayName } = getAppsInTossGlobals();
444
- const handleClose = (0, import_react2.useCallback)(async () => {
1466
+ const handleClose = (0, import_react4.useCallback)(async () => {
445
1467
  const isConfirmed = await openConfirm({
446
1468
  title: `${(0, import_es_hangul.josa)(brandDisplayName, "\uC744/\uB97C")} \uC885\uB8CC\uD560\uAE4C\uC694?`,
447
1469
  leftButton: "\uCDE8\uC18C",
@@ -449,50 +1471,36 @@ var GameWebView = (0, import_react2.forwardRef)(function GameWebView2(props, ref
449
1471
  closeOnDimmerClick: true
450
1472
  });
451
1473
  if (isConfirmed) {
452
- (0, import_react_native_bedrock4.closeView)();
1474
+ (0, import_react_native35.closeView)();
453
1475
  }
454
1476
  }, [brandDisplayName, openConfirm]);
455
- (0, import_react2.useEffect)(() => {
456
- if (import_react_native11.Platform.OS === "ios") {
457
- (0, import_react_native_bedrock4.setIosSwipeGestureEnabled)({ isEnabled: false });
1477
+ (0, import_react4.useEffect)(() => {
1478
+ if (import_react_native37.Platform.OS === "ios") {
1479
+ setIosSwipeGestureEnabled({ isEnabled: false });
458
1480
  return () => {
459
- (0, import_react_native_bedrock4.setIosSwipeGestureEnabled)({ isEnabled: true });
1481
+ setIosSwipeGestureEnabled({ isEnabled: true });
460
1482
  };
461
1483
  }
462
1484
  return;
463
1485
  }, []);
464
- (0, import_react2.useEffect)(() => {
1486
+ (0, import_react4.useEffect)(() => {
465
1487
  const backHandler = () => {
466
1488
  handleClose();
467
1489
  return true;
468
1490
  };
469
- import_react_native11.BackHandler.addEventListener("hardwareBackPress", backHandler);
1491
+ import_react_native37.BackHandler.addEventListener("hardwareBackPress", backHandler);
470
1492
  return () => {
471
- import_react_native11.BackHandler.removeEventListener("hardwareBackPress", backHandler);
1493
+ import_react_native37.BackHandler.removeEventListener("hardwareBackPress", backHandler);
472
1494
  };
473
1495
  }, [handleClose]);
474
1496
  return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
475
1497
  /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(GameNavigationBar, { onClose: handleClose }),
476
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react_native11.View, { style: { flex: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react_native_webview.WebView, { ref, ...props }) })
1498
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react_native37.View, { style: { flex: 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_react_native_webview.WebView, { ref, ...props }) })
477
1499
  ] });
478
1500
  });
479
1501
 
480
- // src/async-bridges.ts
481
- var async_bridges_exports = {};
482
- __export(async_bridges_exports, {
483
- appLogin: () => appLogin,
484
- checkoutPayment: () => checkoutPayment,
485
- executePayment: () => executePayment,
486
- fetchAlbumPhotos: () => fetchAlbumPhotos,
487
- fetchContacts: () => fetchContacts,
488
- getClipboardText: () => getClipboardText,
489
- getCurrentLocation: () => getCurrentLocation,
490
- openCamera: () => openCamera,
491
- setClipboardText: () => setClipboardText
492
- });
493
-
494
1502
  // src/bridge-handler/useBridgeHandler.tsx
495
- var import_react3 = require("react");
1503
+ var import_react5 = require("react");
496
1504
  function serializeError(error) {
497
1505
  return JSON.stringify(error, (_, value) => {
498
1506
  if (value instanceof Error) {
@@ -513,22 +1521,23 @@ function methodHandler({
513
1521
  handlerMap,
514
1522
  injectJavaScript
515
1523
  }) {
516
- const func = async (...args2) => {
517
- const result = await handlerMap[functionName](...args2);
518
- return result;
519
- };
1524
+ const func = handlerMap[functionName];
520
1525
  if (!func) {
521
1526
  console.error(`${functionName} is not a function`);
522
1527
  return;
523
1528
  }
524
- func(...args).then((result) => {
1529
+ const wrappedFunc = async (...args2) => {
1530
+ const result = await func(...args2);
1531
+ return result;
1532
+ };
1533
+ wrappedFunc(...args).then((result) => {
525
1534
  injectJavaScript?.(`
526
- window.__BEDROCK_NATIVE_EMITTER.emit('${functionName}/resolve/${eventId}', ${JSON.stringify(result, null, 0)});
1535
+ window.__GRANITE_NATIVE_EMITTER.emit('${functionName}/resolve/${eventId}', ${JSON.stringify(result, null, 0)});
527
1536
  `);
528
1537
  }).catch((error) => {
529
1538
  const serializedError = serializeError(error);
530
1539
  injectJavaScript?.(`
531
- window.__BEDROCK_NATIVE_EMITTER.emit('${functionName}/reject/${eventId}', ${serializedError});
1540
+ window.__GRANITE_NATIVE_EMITTER.emit('${functionName}/reject/${eventId}', ${serializedError});
532
1541
  `);
533
1542
  });
534
1543
  }
@@ -540,8 +1549,8 @@ function useBridgeHandler({
540
1549
  eventListenerMap,
541
1550
  injectedJavaScript: originalInjectedJavaScript
542
1551
  }) {
543
- const ref = (0, import_react3.useRef)(null);
544
- const injectedJavaScript = (0, import_react3.useMemo)(
1552
+ const ref = (0, import_react5.useRef)(null);
1553
+ const injectedJavaScript = (0, import_react5.useMemo)(
545
1554
  () => [
546
1555
  `window.__CONSTANT_HANDLER_MAP = ${JSON.stringify(
547
1556
  Object.entries(constantHandlerMap).reduce(
@@ -559,15 +1568,15 @@ function useBridgeHandler({
559
1568
  );
560
1569
  const createHandleOnEvent = (functionName, eventId) => (response) => {
561
1570
  ref.current?.injectJavaScript(`
562
- window.__BEDROCK_NATIVE_EMITTER.emit('${functionName}/onEvent/${eventId}', ${JSON.stringify(response, null, 0)});
1571
+ window.__GRANITE_NATIVE_EMITTER.emit('${functionName}/onEvent/${eventId}', ${JSON.stringify(response, null, 0)});
563
1572
  `);
564
1573
  };
565
1574
  const createHandleOnError = (functionName, eventId) => (error) => {
566
1575
  ref.current?.injectJavaScript(`
567
- window.__BEDROCK_NATIVE_EMITTER.emit('${functionName}/onError/${eventId}', ${JSON.stringify(error, null, 0)});
1576
+ window.__GRANITE_NATIVE_EMITTER.emit('${functionName}/onError/${eventId}', ${JSON.stringify(error, null, 0)});
568
1577
  `);
569
1578
  };
570
- const $onMessage = (0, import_react3.useCallback)(
1579
+ const $onMessage = (0, import_react5.useCallback)(
571
1580
  async (e) => {
572
1581
  onMessage?.(e);
573
1582
  const data = JSON.parse(e.nativeEvent.data);
@@ -617,37 +1626,67 @@ function useBridgeHandler({
617
1626
  };
618
1627
  }
619
1628
 
620
- // src/constant-bridges.ts
621
- var constant_bridges_exports = {};
622
- __export(constant_bridges_exports, {
623
- getDeviceId: () => getDeviceId,
624
- getOperationalEnvironment: () => getOperationalEnvironment,
625
- getTossAppVersion: () => getTossAppVersion
626
- });
1629
+ // src/utils/log.ts
1630
+ var import_react_native38 = require("@granite-js/react-native");
627
1631
 
628
- // src/env.ts
629
- var env = {
630
- getDeploymentId: () => __DEV__ ? "local" : global.__appsInToss?.deploymentId
1632
+ // src/utils/extractDateFromUUIDv7.ts
1633
+ var extractDateFromUUIDv7 = (uuid) => {
1634
+ const timestampHex = uuid.split("-").join("").slice(0, 12);
1635
+ const timestamp = Number.parseInt(timestampHex, 16);
1636
+ return new Date(timestamp);
631
1637
  };
632
1638
 
633
- // src/event-bridges.ts
634
- var event_bridges_exports = {};
635
- __export(event_bridges_exports, {
636
- startUpdateLocation: () => startUpdateLocation
637
- });
1639
+ // src/utils/log.ts
1640
+ var getGroupId = (url) => {
1641
+ try {
1642
+ const urlObject = new URL(url);
1643
+ return {
1644
+ groupId: urlObject.pathname,
1645
+ search: urlObject.search.startsWith("?") ? urlObject.search.substring(1) : urlObject.search
1646
+ };
1647
+ } catch {
1648
+ return {
1649
+ groupId: "unknown",
1650
+ search: "unknown"
1651
+ };
1652
+ }
1653
+ };
1654
+ var getReferrer = () => {
1655
+ try {
1656
+ const referrer = new URL((0, import_react_native38.getSchemeUri)());
1657
+ return referrer.searchParams.get("referrer");
1658
+ } catch {
1659
+ return "";
1660
+ }
1661
+ };
1662
+ var trackScreen = (url) => {
1663
+ const { groupId, search } = getGroupId(url);
1664
+ const log = {
1665
+ log_type: "screen",
1666
+ log_name: `${groupId}::screen`,
1667
+ params: {
1668
+ search,
1669
+ referrer: getReferrer(),
1670
+ deployment_id: env.getDeploymentId(),
1671
+ deployment_timestamp: extractDateFromUUIDv7(env.getDeploymentId()).getTime()
1672
+ }
1673
+ };
1674
+ return eventLog(log);
1675
+ };
638
1676
 
639
1677
  // src/components/WebView.tsx
640
1678
  var import_jsx_runtime5 = require("react/jsx-runtime");
641
1679
  var appsInTossGlobals = getAppsInTossGlobals();
1680
+ var operationalEnvironment = getOperationalEnvironment2();
642
1681
  var TYPES = ["partner", "external", "game"];
643
1682
  var WEBVIEW_TYPES = {
644
- partner: import_react_native12.PartnerWebViewScreen,
645
- external: import_react_native12.ExternalWebViewScreen,
1683
+ partner: import_react_native40.PartnerWebViewScreen,
1684
+ external: import_react_native40.ExternalWebViewScreen,
646
1685
  game: GameWebView
647
1686
  };
648
1687
  function mergeSchemeQueryParamsInto(url) {
649
1688
  const baseUrl = new URL(url);
650
- const schemeUrl = new URL((0, import_react_native_bedrock5.getSchemeUri)());
1689
+ const schemeUrl = new URL((0, import_react_native39.getSchemeUri)());
651
1690
  baseUrl.pathname = schemeUrl.pathname;
652
1691
  for (const [key, value] of schemeUrl.searchParams.entries()) {
653
1692
  baseUrl.searchParams.set(key, value);
@@ -671,8 +1710,8 @@ function WebView({ type, local, onMessage, ...props }) {
671
1710
  if (!TYPES.includes(type)) {
672
1711
  throw new Error(`Invalid WebView type: '${type}'`);
673
1712
  }
674
- const bedrockEvent = (0, import_react_native_bedrock5.useBedrockEvent)();
675
- const uri = (0, import_react4.useMemo)(() => getWebViewUri(local), [local]);
1713
+ const graniteEvent = (0, import_react_native39.useGraniteEvent)();
1714
+ const uri = (0, import_react6.useMemo)(() => getWebViewUri(local), [local]);
676
1715
  const top = (0, import_private.useSafeAreaTop)();
677
1716
  const bottom = (0, import_private.useSafeAreaBottom)();
678
1717
  const handler = useBridgeHandler({
@@ -680,20 +1719,32 @@ function WebView({ type, local, onMessage, ...props }) {
680
1719
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
681
1720
  eventListenerMap: {
682
1721
  ...event_bridges_exports,
683
- backEvent: ({ onEvent, onError, options }) => bedrockEvent.addEventListener("backEvent", { onEvent, onError, options })
1722
+ backEvent: ({ onEvent, onError, options }) => graniteEvent.addEventListener("backEvent", { onEvent, onError, options }),
1723
+ entryMessageExited: ({ onEvent, onError }) => appsInTossEvent.addEventListener("entryMessageExited", { onEvent, onError }),
1724
+ updateLocationEvent: ({ onEvent, onError, options }) => appsInTossEvent.addEventListener("updateLocationEvent", { onEvent, onError, options }),
1725
+ /** @internal */
1726
+ appBridgeCallbackEvent: ({ onEvent, onError, options }) => appsInTossEvent.addEventListener("appBridgeCallbackEvent", { onEvent, onError, options }),
1727
+ /** AdMob */
1728
+ loadAdMobInterstitialAd: GoogleAdMob.loadAdMobInterstitialAd,
1729
+ showAdMobInterstitialAd: GoogleAdMob.showAdMobInterstitialAd,
1730
+ loadAdMobRewardedAd: GoogleAdMob.loadAdMobRewardedAd,
1731
+ showAdMobRewardedAd: GoogleAdMob.showAdMobRewardedAd
684
1732
  },
685
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
686
- // @ts-expect-error
687
1733
  constantHandlerMap: {
688
- ...bedrockConstantBridges,
1734
+ ...graniteConstantBridges,
689
1735
  ...constant_bridges_exports,
690
1736
  getSafeAreaTop: () => top,
691
- getSafeAreaBottom: () => bottom
1737
+ getSafeAreaBottom: () => bottom,
1738
+ /** AdMob */
1739
+ loadAdMobInterstitialAd_isSupported: GoogleAdMob.loadAdMobInterstitialAd.isSupported,
1740
+ showAdMobInterstitialAd_isSupported: GoogleAdMob.showAdMobInterstitialAd.isSupported,
1741
+ loadAdMobRewardedAd_isSupported: GoogleAdMob.loadAdMobRewardedAd.isSupported,
1742
+ showAdMobRewardedAd_isSupported: GoogleAdMob.showAdMobRewardedAd.isSupported,
1743
+ /** env */
1744
+ getDeploymentId: env.getDeploymentId
692
1745
  },
693
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
694
- // @ts-expect-error
695
1746
  asyncHandlerMap: {
696
- ...bedrockAsyncBridges,
1747
+ ...graniteAsyncBridges,
697
1748
  ...async_bridges_exports,
698
1749
  /** internal */
699
1750
  openPermissionDialog: AppsInTossModule.openPermissionDialog,
@@ -704,7 +1755,7 @@ function WebView({ type, local, onMessage, ...props }) {
704
1755
  clearItems: Storage.clearItems
705
1756
  }
706
1757
  });
707
- const baseProps = (0, import_react4.useMemo)(() => {
1758
+ const baseProps = (0, import_react6.useMemo)(() => {
708
1759
  switch (type) {
709
1760
  case "partner": {
710
1761
  const headerOnlyProp = {
@@ -734,10 +1785,12 @@ function WebView({ type, local, onMessage, ...props }) {
734
1785
  }
735
1786
  }, [type, props]);
736
1787
  const BaseWebView = WEBVIEW_TYPES[type];
737
- const webviewDebuggingEnabled = (0, import_react4.useMemo)(
738
- () => getOperationalEnvironment() === "sandbox",
739
- []
740
- );
1788
+ const webViewDebuggingEnabled = operationalEnvironment === "sandbox";
1789
+ const handleNavigationStateChange = (0, import_react6.useCallback)((event) => {
1790
+ if (event.url) {
1791
+ trackScreen(event.url);
1792
+ }
1793
+ }, []);
741
1794
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
742
1795
  BaseWebView,
743
1796
  {
@@ -746,9 +1799,10 @@ function WebView({ type, local, onMessage, ...props }) {
746
1799
  ...baseProps,
747
1800
  source: { uri },
748
1801
  sharedCookiesEnabled: true,
749
- webviewDebuggingEnabled,
1802
+ webviewDebuggingEnabled: webViewDebuggingEnabled,
750
1803
  thirdPartyCookiesEnabled: true,
751
1804
  onMessage: handler.onMessage,
1805
+ onNavigationStateChange: handleNavigationStateChange,
752
1806
  injectedJavaScript: handler.injectedJavaScript,
753
1807
  injectedJavaScriptBeforeContentLoaded: handler.injectedJavaScript
754
1808
  }
@@ -762,12 +1816,12 @@ function ensureValue(value, name) {
762
1816
  }
763
1817
 
764
1818
  // src/hooks/useGeolocation.ts
765
- var import_react5 = require("react");
766
- var import_react_native_bedrock6 = require("react-native-bedrock");
1819
+ var import_react_native41 = require("@granite-js/react-native");
1820
+ var import_react7 = require("react");
767
1821
  function useGeolocation({ accuracy, distanceInterval, timeInterval }) {
768
- const isVisible = (0, import_react_native_bedrock6.useVisibility)();
769
- const [location, setLocation] = (0, import_react5.useState)(null);
770
- (0, import_react5.useEffect)(() => {
1822
+ const isVisible = (0, import_react_native41.useVisibility)();
1823
+ const [location, setLocation] = (0, import_react7.useState)(null);
1824
+ (0, import_react7.useEffect)(() => {
771
1825
  if (!isVisible) {
772
1826
  return;
773
1827
  }
@@ -784,34 +1838,57 @@ function useGeolocation({ accuracy, distanceInterval, timeInterval }) {
784
1838
  return location;
785
1839
  }
786
1840
 
787
- // src/types.ts
788
- var Accuracy2 = /* @__PURE__ */ ((Accuracy3) => {
789
- Accuracy3[Accuracy3["Lowest"] = 1] = "Lowest";
790
- Accuracy3[Accuracy3["Low"] = 2] = "Low";
791
- Accuracy3[Accuracy3["Balanced"] = 3] = "Balanced";
792
- Accuracy3[Accuracy3["High"] = 4] = "High";
793
- Accuracy3[Accuracy3["Highest"] = 5] = "Highest";
794
- Accuracy3[Accuracy3["BestForNavigation"] = 6] = "BestForNavigation";
795
- return Accuracy3;
796
- })(Accuracy2 || {});
1841
+ // src/index.ts
1842
+ __reExport(src_exports, require("@apps-in-toss/analytics"), module.exports);
1843
+ var Analytics2 = {
1844
+ init: import_analytics2.Analytics.init,
1845
+ Impression: import_analytics2.Analytics.Impression,
1846
+ Press: import_analytics2.Analytics.Press,
1847
+ Area: import_analytics2.Analytics.Area
1848
+ };
797
1849
  // Annotate the CommonJS export names for ESM import in node:
798
1850
  0 && (module.exports = {
799
1851
  Accuracy,
1852
+ Analytics,
800
1853
  AppsInToss,
1854
+ AppsInTossModule,
1855
+ BedrockCoreModule,
1856
+ BedrockModule,
1857
+ GoogleAdMob,
1858
+ INTERNAL__AppsInTossModule,
1859
+ INTERNAL__module,
801
1860
  Storage,
802
1861
  TossPay,
803
1862
  WebView,
804
1863
  appLogin,
1864
+ appsInTossEvent,
1865
+ closeView,
805
1866
  env,
1867
+ eventLog,
806
1868
  fetchAlbumPhotos,
807
1869
  fetchContacts,
1870
+ generateHapticFeedback,
808
1871
  getClipboardText,
809
1872
  getCurrentLocation,
810
1873
  getDeviceId,
1874
+ getLocale,
1875
+ getNetworkStatus,
811
1876
  getOperationalEnvironment,
1877
+ getPlatformOS,
1878
+ getSchemeUri,
812
1879
  getTossAppVersion,
1880
+ getTossShareLink,
1881
+ isMinVersionSupported,
813
1882
  openCamera,
1883
+ openURL,
1884
+ saveBase64Data,
814
1885
  setClipboardText,
1886
+ setDeviceOrientation,
1887
+ setIosSwipeGestureEnabled,
1888
+ setScreenAwakeMode,
1889
+ setSecureScreen,
1890
+ share,
815
1891
  startUpdateLocation,
816
- useGeolocation
1892
+ useGeolocation,
1893
+ ...require("@apps-in-toss/analytics")
817
1894
  });