@apps-in-toss/native-modules 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/VisibilityChangedByTransparentServiceWebEvent-D6XJvPVh.d.cts +20 -0
  2. package/dist/VisibilityChangedByTransparentServiceWebEvent-D6XJvPVh.d.ts +20 -0
  3. package/dist/bridges-meta.json +24 -12
  4. package/dist/chunk-YS54L7RG.js +209 -0
  5. package/dist/index.cjs +209 -150
  6. package/dist/index.d.cts +662 -592
  7. package/dist/index.d.ts +662 -592
  8. package/dist/index.js +186 -128
  9. package/dist/private.cjs +236 -0
  10. package/dist/private.d.cts +17 -0
  11. package/dist/private.d.ts +17 -0
  12. package/dist/private.js +11 -0
  13. package/package.json +3 -2
  14. package/src/AppsInTossModule/native-event-emitter/StartUpdateLocationPermissionError.ts +1 -0
  15. package/src/AppsInTossModule/native-event-emitter/appsInTossEvent.ts +2 -0
  16. package/src/AppsInTossModule/native-event-emitter/event-plugins/HomeIconButtonClickHandleEvent.ts +10 -0
  17. package/src/AppsInTossModule/native-event-emitter/event-plugins/UpdateLocationEvent.ts +3 -3
  18. package/src/AppsInTossModule/native-event-emitter/index.ts +2 -0
  19. package/src/AppsInTossModule/native-event-emitter/internal/appBridge.ts +7 -1
  20. package/src/AppsInTossModule/native-event-emitter/startUpdateLocation.ts +64 -44
  21. package/src/AppsInTossModule/native-modules/AppsInTossModule.ts +22 -27
  22. package/src/AppsInTossModule/native-modules/ads/googleAdMobV2.ts +3 -3
  23. package/src/AppsInTossModule/native-modules/ads/types.ts +1 -1
  24. package/src/AppsInTossModule/native-modules/getPermission.ts +1 -1
  25. package/src/AppsInTossModule/native-modules/index.ts +9 -6
  26. package/src/AppsInTossModule/native-modules/permissions/createPermissionFunction.ts +25 -0
  27. package/src/AppsInTossModule/native-modules/permissions/fetchAlbumPhotos/fetchAlbumPhotos.ts +109 -0
  28. package/src/AppsInTossModule/native-modules/{fetchContacts.ts → permissions/fetchContacts/fetchContacts.ts} +51 -40
  29. package/src/AppsInTossModule/native-modules/permissions/getClipboardText/getClipboardText.ts +87 -0
  30. package/src/AppsInTossModule/native-modules/permissions/getCurrentLocation/getCurrentLocation.ts +88 -0
  31. package/src/AppsInTossModule/native-modules/permissions/openCamera/openCamera.ts +99 -0
  32. package/src/AppsInTossModule/native-modules/{openPermissionDialog.ts → permissions/openPermissionDialog.ts} +3 -3
  33. package/src/AppsInTossModule/native-modules/{requestPermission.ts → permissions/requestPermission.ts} +2 -2
  34. package/src/AppsInTossModule/native-modules/permissions/setClipboardText/setClipboardText.ts +75 -0
  35. package/src/AppsInTossModule/native-modules/saveBase64Data.ts +1 -1
  36. package/src/async-bridges.ts +9 -6
  37. package/src/types.ts +0 -106
  38. package/src/AppsInTossModule/native-modules/fetchAlbumPhotos.ts +0 -88
  39. package/src/AppsInTossModule/native-modules/getClipboardText.ts +0 -47
  40. package/src/AppsInTossModule/native-modules/getCurrentLocation.ts +0 -65
  41. package/src/AppsInTossModule/native-modules/openCamera.ts +0 -81
  42. package/src/AppsInTossModule/native-modules/setClipboardText.ts +0 -39
@@ -1,88 +0,0 @@
1
- import { AppsInTossModule } from './AppsInTossModule';
2
- import { requestPermission } from './requestPermission';
3
- import { ImageResponse } from '../../types';
4
-
5
- const DEFAULT_MAX_COUNT = 10;
6
- const DEFAULT_MAX_WIDTH = 1024;
7
-
8
- /**
9
- * 앨범 사진을 조회할 때 사용하는 옵션 타입이에요.
10
- */
11
- export interface FetchAlbumPhotosOptions {
12
- /** 가져올 사진의 최대 개수를 설정해요. 숫자를 입력하고 기본값은 10이에요. */
13
- maxCount?: number;
14
- /** 사진의 최대 폭을 제한해요. 단위는 픽셀이고 기본값은 1024이에요. */
15
- maxWidth?: number;
16
- /** 이미지를 base64 형식으로 반환할지 설정해요. 기본값은 `false`예요. */
17
- base64?: boolean;
18
- }
19
-
20
- /**
21
- * @public
22
- * @category 사진
23
- * @name fetchAlbumPhotos
24
- * @description
25
- * 사용자의 앨범에서 사진 목록을 불러오는 함수예요.
26
- * 최대 개수와 해상도를 설정할 수 있고 갤러리 미리보기, 이미지 선택 기능 등에 활용할 수 있어요.
27
- *
28
- * @param options - 조회 옵션을 담은 객체예요.
29
- * @param {number} [options.maxCount=10] 가져올 사진의 최대 개수를 설정해요. 숫자로 입력하며 기본값은 10이에요.
30
- * @param {number} [options.maxWidth=1024] 사진의 최대 폭을 제한해요. 단위는 픽셀이며 기본값은 `1024`이에요.
31
- * @param {boolean} [options.base64=false] 이미지를 base64 형식으로 반환할지 설정해요. 기본값은 `false`예요.
32
- * @returns {Promise<ImageResponse[]>}
33
- * 앨범 사진의 고유 ID와 데이터 URI를 포함한 배열을 반환해요.
34
- *
35
- * @example
36
- * ### 사진의 최대 폭을 360px로 제한하여 가져오기
37
- *
38
- * ```tsx
39
- * import React, { useState } from 'react';
40
- * import { View, Image, Button } from 'react-native';
41
- * import { fetchAlbumPhotos } from '@apps-in-toss/framework';
42
- *
43
- * const base64 = true;
44
- *
45
- * // 앨범 사진 목록을 가져와 화면에 표시하는 컴포넌트
46
- * function AlbumPhotoList() {
47
- * const [albumPhotos, setAlbumPhotos] = useState([]);
48
- *
49
- * const handlePress = async () => {
50
- * try {
51
- * const response = await fetchAlbumPhotos({
52
- * base64,
53
- * maxWidth: 360,
54
- * });
55
- * setAlbumPhotos((prev) => ([...prev, ...response]));
56
- * } catch (error) {
57
- * console.error('앨범을 가져오는 데 실패했어요:', error);
58
- * }
59
- * };
60
- *
61
- * return (
62
- * <View>
63
- * {albumPhotos.map((image) => {
64
- * // base64 형식으로 반환된 이미지를 표시하려면 데이터 URL 스키마 Prefix를 붙여야해요.
65
- * const imageUri = base64 ? 'data:image/jpeg;base64,' + image.dataUri : image.dataUri;
66
- *
67
- * return <Image source={{ uri: imageUri }} key={image.id} />;
68
- * })}
69
- * <Button title="앨범 가져오기" onPress={handlePress} />
70
- * </View>
71
- * );
72
- * }
73
- * ```
74
- */
75
- export async function fetchAlbumPhotos(options: FetchAlbumPhotosOptions): Promise<ImageResponse[]> {
76
- const permissionStatus = await requestPermission({ name: 'photos', access: 'read' });
77
- if (permissionStatus === 'denied') {
78
- throw new Error('사진첩 권한이 거부되었어요.');
79
- }
80
-
81
- const albumPhotos = await AppsInTossModule.fetchAlbumPhotos({
82
- ...options,
83
- maxCount: options.maxCount ?? DEFAULT_MAX_COUNT,
84
- maxWidth: options.maxWidth ?? DEFAULT_MAX_WIDTH,
85
- });
86
-
87
- return albumPhotos;
88
- }
@@ -1,47 +0,0 @@
1
- import { AppsInTossModule } from './AppsInTossModule';
2
- import { requestPermission } from './requestPermission';
3
-
4
- /**
5
- * @public
6
- * @category 클립보드
7
- * @name getClipboardText
8
- * @description 클립보드에 저장된 텍스트를 가져오는 함수예요. 복사된 텍스트를 읽어서 다른 작업에 활용할 수 있어요.
9
- * @returns {Promise<string>} - 클립보드에 저장된 텍스트를 반환해요. 클립보드에 텍스트가 없으면 빈 문자열을 반환해요.
10
- *
11
- * @example
12
- * ### 클립보드의 텍스트 가져오기
13
- *
14
- * ```tsx
15
- * import React, { useState } from 'react';
16
- * import { View, Text, Button } from 'react-native';
17
- * import { getClipboardText } from '@apps-in-toss/framework';
18
- *
19
- * // '붙여넣기' 버튼을 누르면 클립보드에 저장된 텍스트를 가져와 화면에 표시해요.
20
- * function PasteButton() {
21
- * const [text, setText] = useState('');
22
- *
23
- * const handlePress = async () => {
24
- * try {
25
- * const clipboardText = await getClipboardText();
26
- * setText(clipboardText || '클립보드에 텍스트가 없어요.');
27
- * } catch (error) {
28
- * console.error('클립보드에서 텍스트를 가져오지 못했어요:', error);
29
- * }
30
- * };
31
- *
32
- * return (
33
- * <View>
34
- * <Text>{text}</Text>
35
- * <Button title="붙여넣기" onPress={handlePress} />
36
- * </View>
37
- * );
38
- * }
39
- * ```
40
- */
41
- export async function getClipboardText(): Promise<string> {
42
- const permissionStatus = await requestPermission({ name: 'clipboard', access: 'read' });
43
- if (permissionStatus === 'denied') {
44
- throw new Error('클립보드 읽기 권한이 거부되었어요.');
45
- }
46
- return AppsInTossModule.getClipboardText({});
47
- }
@@ -1,65 +0,0 @@
1
- import { AppsInTossModule } from './AppsInTossModule';
2
- import { requestPermission } from './requestPermission';
3
- import type { Accuracy, Location } from '../../types';
4
-
5
- export interface GetCurrentLocationOptions {
6
- /**
7
- * 위치 정보를 가져올 정확도 수준이에요.
8
- */
9
- accuracy: Accuracy;
10
- }
11
- /**
12
- * @public
13
- * @category 위치 정보
14
- * @name getCurrentLocation
15
- * @description 디바이스의 현재 위치 정보를 가져오는 함수예요.
16
- * 위치 기반 서비스를 구현할 때 사용되고, 한 번만 호출되어 현재 위치를 즉시 반환해요.
17
- * 예를 들어 지도 앱에서 사용자의 현재 위치를 한 번만 가져올 때, 날씨 앱에서 사용자의 위치를 기반으로 기상 정보를 제공할 때, 매장 찾기 기능에서 사용자의 위치를 기준으로 가까운 매장을 검색할 때 사용하면 유용해요.
18
- *
19
- * @param {GetCurrentLocationOptions} options 위치 정보를 가져올 때 사용하는 옵션 객체예요.
20
- * @param {Accuracy} [options.accuracy] 위치 정보의 정확도 수준이에요. 정확도는 `Accuracy` 타입으로 설정돼요.
21
- * @returns {Promise<Location>} 디바이스의 위치 정보가 담긴 객체를 반환해요. 자세한 내용은 [Location](/react-native/reference/native-modules/Types/Location.html)을 참고해주세요.
22
- *
23
- * @example
24
- * ### 디바이스의 현재 위치 정보 가져오기
25
- *
26
- * ```tsx
27
- * import React, { useState } from 'react';
28
- * import { View, Text, Button } from 'react-native';
29
- * import { getCurrentLocation } from '@apps-in-toss/framework';
30
- *
31
- * // 현재 위치 정보를 가져와 화면에 표시하는 컴포넌트
32
- * function CurrentPosition() {
33
- * const [position, setPosition] = useState(null);
34
- *
35
- * const handlePress = async () => {
36
- * try {
37
- * const response = await getCurrentLocation({ accuracy: Accuracy.Balanced });
38
- * setPosition(response);
39
- * } catch (error) {
40
- * console.error('위치 정보를 가져오는 데 실패했어요:', error);
41
- * }
42
- * };
43
- *
44
- * return (
45
- * <View>
46
- * {position ? (
47
- * <Text>위치: {position.coords.latitude}, {position.coords.longitude}</Text>
48
- * ) : (
49
- * <Text>위치 정보를 아직 가져오지 않았어요</Text>
50
- * )}
51
- * <Button title="현재 위치 정보 가져오기" onPress={handlePress} />
52
- * </View>
53
- * );
54
- * }
55
- * ```
56
- */
57
- export async function getCurrentLocation(options: GetCurrentLocationOptions): Promise<Location> {
58
- const permissionStatus = await requestPermission({ name: 'geolocation', access: 'access' });
59
- if (permissionStatus === 'denied') {
60
- throw new Error('위치 권한이 거부되었어요.');
61
- }
62
- const position = await AppsInTossModule.getCurrentLocation(options);
63
-
64
- return position;
65
- }
@@ -1,81 +0,0 @@
1
- import { AppsInTossModule } from './AppsInTossModule';
2
- import { requestPermission } from './requestPermission';
3
- import type { ImageResponse } from '../../types';
4
-
5
- export interface OpenCameraOptions {
6
- /**
7
- * 이미지를 Base64 형식으로 반환할지 여부를 나타내는 불리언 값이에요.
8
- *
9
- * 기본값: `false`.
10
- */
11
- base64?: boolean;
12
- /**
13
- * 이미지의 최대 너비를 나타내는 숫자 값이에요.
14
- *
15
- * 기본값: `1024`.
16
- */
17
- maxWidth?: number;
18
- }
19
-
20
- /**
21
- * @public
22
- * @category 카메라
23
- * @name openCamera
24
- * @description 카메라를 실행해서 촬영된 이미지를 반환하는 함수예요.
25
- * @param {OpenCameraOptions} options - 카메라 실행 시 사용되는 옵션 객체예요.
26
- * @param {boolean} [options.base64=false] - 이미지를 Base64 형식으로 반환할지 여부를 나타내는 불리언 값이에요. 기본값은 `false`예요. `true`로 설정하면 `dataUri` 대신 Base64 인코딩된 문자열을 반환해요.
27
- * @param {number} [options.maxWidth=1024] - 이미지의 최대 너비를 나타내는 숫자 값이에요. 기본값은 `1024`예요.
28
- * @returns {Promise<ImageResponse>}
29
- * 촬영된 이미지 정보를 포함한 객체를 반환해요. 반환 객체의 구성은 다음과 같아요:
30
- * - `id`: 이미지의 고유 식별자예요.
31
- * - `dataUri`: 이미지 데이터를 표현하는 데이터 URI예요.
32
- *
33
- * @example
34
- * ### 카메라 실행 후 촬영된 사진 가져오기
35
- *
36
- * ```tsx
37
- * import React, { useState } from 'react';
38
- * import { View, Text, Button, Image } from 'react-native';
39
- * import { openCamera } from '@apps-in-toss/framework';
40
- *
41
- * const base64 = true;
42
- *
43
- * // 카메라를 실행하고 촬영된 이미지를 화면에 표시하는 컴포넌트
44
- * function Camera() {
45
- * const [image, setImage] = useState(null);
46
- *
47
- * const handlePress = async () => {
48
- * try {
49
- * const response = await openCamera({ base64 });
50
- * setImage(response);
51
- * } catch (error) {
52
- * console.error('사진을 가져오는 데 실패했어요:', error);
53
- * }
54
- * };
55
- *
56
- * // base64 형식으로 반환된 이미지를 표시하려면 데이터 URL 스키마 Prefix를 붙여야해요.
57
- * const imageUri = base64 ? 'data:image/jpeg;base64,' + image.dataUri : image.dataUri;
58
- *
59
- * return (
60
- * <View>
61
- * {image ? (
62
- * <Image source={{ uri: imageUri }} style={{ width: 200, height: 200 }} />
63
- * ) : (
64
- * <Text>사진이 없어요</Text>
65
- * )}
66
- * <Button title="사진 촬영하기" onPress={handlePress} />
67
- * </View>
68
- * );
69
- * }
70
- * ```
71
- */
72
- export async function openCamera(options?: OpenCameraOptions): Promise<ImageResponse> {
73
- const permissionStatus = await requestPermission({ name: 'camera', access: 'access' });
74
- if (permissionStatus === 'denied') {
75
- throw new Error('카메라 권한이 거부되었어요.');
76
- }
77
-
78
- const photo = await AppsInTossModule.openCamera({ base64: false, maxWidth: 1024, ...options });
79
-
80
- return photo;
81
- }
@@ -1,39 +0,0 @@
1
- import { AppsInTossModule } from './AppsInTossModule';
2
- import { requestPermission } from './requestPermission';
3
-
4
- /**
5
- * @public
6
- * @category 클립보드
7
- * @name setClipboardText
8
- * @description 텍스트를 클립보드에 복사해서 사용자가 다른 곳에 붙여 넣기 할 수 있어요.
9
- * @param {Promise<void>} text - 클립보드에 복사할 텍스트예요. 문자열 형식으로 입력해요.
10
- *
11
- * @example
12
- * ### 텍스트를 클립보드에 복사하기
13
- *
14
- * ```tsx
15
- * import { Button } from 'react-native';
16
- * import { setClipboardText } from '@apps-in-toss/framework';
17
- *
18
- * // '복사' 버튼을 누르면 "복사할 텍스트"가 클립보드에 복사돼요.
19
- * function CopyButton() {
20
- * const handleCopy = async () => {
21
- * try {
22
- * await setClipboardText('복사할 텍스트');
23
- * console.log('텍스트가 복사됐어요!');
24
- * } catch (error) {
25
- * console.error('텍스트 복사에 실패했어요:', error);
26
- * }
27
- * };
28
- *
29
- * return <Button title="복사" onPress={handleCopy} />;
30
- * }
31
- * ```
32
- */
33
- export async function setClipboardText(text: string): Promise<void> {
34
- const permissionStatus = await requestPermission({ name: 'clipboard', access: 'write' });
35
- if (permissionStatus === 'denied') {
36
- throw new Error('클립보드 쓰기 권한이 거부되었어요.');
37
- }
38
- return AppsInTossModule.setClipboardText({ text });
39
- }