@sendbird/uikit-react-native 3.10.3 → 3.11.1

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 (73) hide show
  1. package/README.md +9 -7
  2. package/lib/commonjs/components/ChannelInput/VoiceMessageInput.js +1 -1
  3. package/lib/commonjs/components/ChannelInput/VoiceMessageInput.js.map +1 -1
  4. package/lib/commonjs/components/ChannelInput/index.js +2 -25
  5. package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
  6. package/lib/commonjs/hooks/useVoiceMessageInput.js +10 -2
  7. package/lib/commonjs/hooks/useVoiceMessageInput.js.map +1 -1
  8. package/lib/commonjs/platform/createFileService.native.js +1 -1
  9. package/lib/commonjs/platform/createFileService.native.js.map +1 -1
  10. package/lib/commonjs/platform/createMediaService.expo.js +83 -12
  11. package/lib/commonjs/platform/createMediaService.expo.js.map +1 -1
  12. package/lib/commonjs/platform/createPlayerService.expo.js +214 -113
  13. package/lib/commonjs/platform/createPlayerService.expo.js.map +1 -1
  14. package/lib/commonjs/platform/createPlayerService.native.js +191 -114
  15. package/lib/commonjs/platform/createPlayerService.native.js.map +1 -1
  16. package/lib/commonjs/platform/createRecorderService.expo.js +248 -127
  17. package/lib/commonjs/platform/createRecorderService.expo.js.map +1 -1
  18. package/lib/commonjs/platform/createRecorderService.native.js +212 -129
  19. package/lib/commonjs/platform/createRecorderService.native.js.map +1 -1
  20. package/lib/commonjs/platform/types.js.map +1 -1
  21. package/lib/commonjs/utils/expoBackwardUtils.js +23 -0
  22. package/lib/commonjs/utils/expoBackwardUtils.js.map +1 -1
  23. package/lib/commonjs/utils/expoPermissionGranted.js.map +1 -1
  24. package/lib/commonjs/version.js +1 -1
  25. package/lib/commonjs/version.js.map +1 -1
  26. package/lib/module/components/ChannelInput/VoiceMessageInput.js +1 -1
  27. package/lib/module/components/ChannelInput/VoiceMessageInput.js.map +1 -1
  28. package/lib/module/components/ChannelInput/index.js +3 -26
  29. package/lib/module/components/ChannelInput/index.js.map +1 -1
  30. package/lib/module/hooks/useVoiceMessageInput.js +10 -2
  31. package/lib/module/hooks/useVoiceMessageInput.js.map +1 -1
  32. package/lib/module/platform/createFileService.native.js +1 -1
  33. package/lib/module/platform/createFileService.native.js.map +1 -1
  34. package/lib/module/platform/createMediaService.expo.js +82 -13
  35. package/lib/module/platform/createMediaService.expo.js.map +1 -1
  36. package/lib/module/platform/createPlayerService.expo.js +214 -113
  37. package/lib/module/platform/createPlayerService.expo.js.map +1 -1
  38. package/lib/module/platform/createPlayerService.native.js +191 -114
  39. package/lib/module/platform/createPlayerService.native.js.map +1 -1
  40. package/lib/module/platform/createRecorderService.expo.js +249 -128
  41. package/lib/module/platform/createRecorderService.expo.js.map +1 -1
  42. package/lib/module/platform/createRecorderService.native.js +212 -129
  43. package/lib/module/platform/createRecorderService.native.js.map +1 -1
  44. package/lib/module/platform/types.js.map +1 -1
  45. package/lib/module/utils/expoBackwardUtils.js +23 -0
  46. package/lib/module/utils/expoBackwardUtils.js.map +1 -1
  47. package/lib/module/utils/expoPermissionGranted.js.map +1 -1
  48. package/lib/module/version.js +1 -1
  49. package/lib/module/version.js.map +1 -1
  50. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
  51. package/lib/typescript/src/platform/createMediaService.expo.d.ts +2 -2
  52. package/lib/typescript/src/platform/createPlayerService.expo.d.ts +2 -2
  53. package/lib/typescript/src/platform/createPlayerService.native.d.ts +5 -3
  54. package/lib/typescript/src/platform/createRecorderService.expo.d.ts +2 -2
  55. package/lib/typescript/src/platform/createRecorderService.native.d.ts +5 -3
  56. package/lib/typescript/src/platform/types.d.ts +4 -0
  57. package/lib/typescript/src/utils/expoBackwardUtils.d.ts +10 -0
  58. package/lib/typescript/src/utils/expoPermissionGranted.d.ts +1 -1
  59. package/lib/typescript/src/version.d.ts +1 -1
  60. package/package.json +29 -5
  61. package/src/components/ChannelInput/VoiceMessageInput.tsx +1 -1
  62. package/src/components/ChannelInput/index.tsx +6 -36
  63. package/src/hooks/useVoiceMessageInput.ts +7 -2
  64. package/src/platform/createFileService.native.ts +1 -1
  65. package/src/platform/createMediaService.expo.tsx +87 -9
  66. package/src/platform/createPlayerService.expo.tsx +242 -109
  67. package/src/platform/createPlayerService.native.tsx +237 -113
  68. package/src/platform/createRecorderService.expo.tsx +268 -107
  69. package/src/platform/createRecorderService.native.tsx +240 -118
  70. package/src/platform/types.ts +5 -0
  71. package/src/utils/expoBackwardUtils.ts +29 -0
  72. package/src/utils/expoPermissionGranted.ts +3 -1
  73. package/src/version.ts +1 -1
@@ -9,134 +9,211 @@ var _uikitUtils = require("@sendbird/uikit-utils");
9
9
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
10
10
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
11
11
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
12
- const createNativePlayerService = ({
13
- audioRecorderModule,
14
- permissionModule
15
- }) => {
16
- const module = new audioRecorderModule.default();
17
- class VoicePlayer {
18
- constructor() {
19
- _defineProperty(this, "uri", void 0);
20
- _defineProperty(this, "state", 'idle');
21
- _defineProperty(this, "playbackSubscribers", new Set());
22
- _defineProperty(this, "stateSubscribers", new Set());
23
- _defineProperty(this, "setState", state => {
24
- this.state = state;
25
- this.stateSubscribers.forEach(callback => {
26
- callback(state);
27
- });
12
+ class AudioRecorderPlayerAdapter {
13
+ constructor(audioRecorderModule) {
14
+ _defineProperty(this, "module", void 0);
15
+ this.module = new audioRecorderModule.default();
16
+ }
17
+ async setSubscriptionDuration(duration) {
18
+ await this.module.setSubscriptionDuration(duration);
19
+ }
20
+ addPlayBackListener(callback) {
21
+ this.module.addPlayBackListener(callback);
22
+ }
23
+ removePlayBackListener() {
24
+ this.module.removePlayBackListener();
25
+ }
26
+ async startPlayer(uri) {
27
+ await this.module.startPlayer(uri);
28
+ }
29
+ async pausePlayer() {
30
+ await this.module.pausePlayer();
31
+ }
32
+ async resumePlayer() {
33
+ await this.module.resumePlayer();
34
+ }
35
+ async stopPlayer() {
36
+ await this.module.stopPlayer();
37
+ }
38
+ async seekToPlayer(time) {
39
+ await this.module.seekToPlayer(time);
40
+ }
41
+ }
42
+ class NitroSoundOrLegacyV4Adapter {
43
+ constructor(audioRecorderModule) {
44
+ _defineProperty(this, "module", void 0);
45
+ this.module = audioRecorderModule.default;
46
+ }
47
+ setSubscriptionDuration(duration) {
48
+ try {
49
+ this.module.setSubscriptionDuration(duration);
50
+ } catch (error) {
51
+ _uikitUtils.Logger.warn('[PlayerService.Native] Failed to set subscription duration', error);
52
+ }
53
+ }
54
+ addPlayBackListener(callback) {
55
+ this.module.addPlayBackListener(callback);
56
+ }
57
+ removePlayBackListener() {
58
+ this.module.removePlayBackListener();
59
+ }
60
+ async startPlayer(uri) {
61
+ await this.module.startPlayer(uri);
62
+ }
63
+ async pausePlayer() {
64
+ await this.module.pausePlayer();
65
+ }
66
+ async resumePlayer() {
67
+ await this.module.resumePlayer();
68
+ }
69
+ async stopPlayer() {
70
+ await this.module.stopPlayer();
71
+ }
72
+ async seekToPlayer(time) {
73
+ await this.module.seekToPlayer(time);
74
+ }
75
+ }
76
+ class VoicePlayer {
77
+ constructor(adapter, permissionModule) {
78
+ this.adapter = adapter;
79
+ this.permissionModule = permissionModule;
80
+ _defineProperty(this, "uri", void 0);
81
+ _defineProperty(this, "state", 'idle');
82
+ _defineProperty(this, "playbackSubscribers", new Set());
83
+ _defineProperty(this, "stateSubscribers", new Set());
84
+ _defineProperty(this, "setState", state => {
85
+ this.state = state;
86
+ this.stateSubscribers.forEach(callback => {
87
+ callback(state);
28
88
  });
29
- _defineProperty(this, "setListener", () => {
30
- module.addPlayBackListener(async data => {
31
- const stopped = data.currentPosition >= data.duration;
32
- if (stopped) {
33
- this.stop().catch(error => {
34
- _uikitUtils.Logger.warn('[PlayerService.Native] Failed to stop in PlayBackListener', error);
35
- });
36
- }
37
- if (this.state === 'playing') {
38
- this.playbackSubscribers.forEach(callback => {
39
- callback({
40
- currentTime: data.currentPosition,
41
- duration: data.duration,
42
- stopped
43
- });
89
+ });
90
+ _defineProperty(this, "setListener", () => {
91
+ this.adapter.addPlayBackListener(async data => {
92
+ const stopped = data.currentPosition >= data.duration;
93
+ if (stopped) {
94
+ this.stop().catch(error => {
95
+ _uikitUtils.Logger.warn('[PlayerService.Native] Failed to stop in PlayBackListener', error);
96
+ });
97
+ }
98
+ if (this.state === 'playing') {
99
+ this.playbackSubscribers.forEach(callback => {
100
+ callback({
101
+ currentTime: data.currentPosition,
102
+ duration: data.duration,
103
+ stopped
44
104
  });
45
- }
46
- });
47
- });
48
- _defineProperty(this, "removeListener", () => {
49
- module.removePlayBackListener();
105
+ });
106
+ }
50
107
  });
51
- _defineProperty(this, "requestPermission", async () => {
52
- if (_reactNative.Platform.OS === 'android') {
53
- if (_reactNative.Platform.Version > 32) return true;
54
- const {
55
- READ_EXTERNAL_STORAGE
56
- } = permissionModule.PERMISSIONS.ANDROID;
57
- const status = await permissionModule.check(READ_EXTERNAL_STORAGE);
58
- if (status === 'granted') {
59
- return true;
60
- } else {
61
- const status = await permissionModule.request(READ_EXTERNAL_STORAGE);
62
- return status === 'granted';
63
- }
64
- } else {
108
+ });
109
+ _defineProperty(this, "removeListener", () => {
110
+ this.adapter.removePlayBackListener();
111
+ });
112
+ _defineProperty(this, "requestPermission", async () => {
113
+ if (_reactNative.Platform.OS === 'android') {
114
+ if (_reactNative.Platform.Version > 32) return true;
115
+ const {
116
+ READ_EXTERNAL_STORAGE
117
+ } = this.permissionModule.PERMISSIONS.ANDROID;
118
+ const status = await this.permissionModule.check(READ_EXTERNAL_STORAGE);
119
+ if (status === 'granted') {
65
120
  return true;
121
+ } else {
122
+ const status = await this.permissionModule.request(READ_EXTERNAL_STORAGE);
123
+ return status === 'granted';
66
124
  }
67
- });
68
- _defineProperty(this, "addPlaybackListener", callback => {
69
- this.playbackSubscribers.add(callback);
70
- return () => {
71
- this.playbackSubscribers.delete(callback);
72
- };
73
- });
74
- _defineProperty(this, "addStateListener", callback => {
75
- this.stateSubscribers.add(callback);
76
- return () => {
77
- this.stateSubscribers.delete(callback);
78
- };
79
- });
80
- _defineProperty(this, "play", async uri => {
81
- if ((0, _uikitUtils.matchesOneOf)(this.state, ['idle', 'stopped'])) {
82
- try {
83
- this.setState('preparing');
84
- this.uri = uri;
85
- this.setListener();
125
+ } else {
126
+ return true;
127
+ }
128
+ });
129
+ _defineProperty(this, "addPlaybackListener", callback => {
130
+ this.playbackSubscribers.add(callback);
131
+ return () => {
132
+ this.playbackSubscribers.delete(callback);
133
+ };
134
+ });
135
+ _defineProperty(this, "addStateListener", callback => {
136
+ this.stateSubscribers.add(callback);
137
+ return () => {
138
+ this.stateSubscribers.delete(callback);
139
+ };
140
+ });
141
+ _defineProperty(this, "play", async uri => {
142
+ if ((0, _uikitUtils.matchesOneOf)(this.state, ['idle', 'stopped'])) {
143
+ try {
144
+ this.setState('preparing');
145
+ this.uri = uri;
146
+ this.setListener();
86
147
 
87
- // FIXME: Workaround, `module.startPlayer()` caused a significant frame-drop and prevented the 'preparing' UI transition.
88
- await (0, _uikitUtils.sleep)(0);
89
- await module.startPlayer(uri);
90
- this.setState('playing');
91
- } catch (e) {
92
- this.setState('idle');
93
- this.uri = undefined;
94
- this.removeListener();
95
- throw e;
96
- }
97
- } else if ((0, _uikitUtils.matchesOneOf)(this.state, ['paused']) && this.uri === uri) {
98
- try {
99
- this.setListener();
100
- await module.resumePlayer();
101
- this.setState('playing');
102
- } catch (e) {
103
- this.removeListener();
104
- throw e;
105
- }
106
- }
107
- });
108
- _defineProperty(this, "pause", async () => {
109
- if ((0, _uikitUtils.matchesOneOf)(this.state, ['playing'])) {
110
- await module.pausePlayer();
148
+ // FIXME: Workaround, `module.startPlayer()` caused a significant frame-drop and prevented the 'preparing' UI transition.
149
+ await (0, _uikitUtils.sleep)(0);
150
+ await this.adapter.startPlayer(uri);
151
+ this.setState('playing');
152
+ } catch (e) {
153
+ this.setState('idle');
154
+ this.uri = undefined;
111
155
  this.removeListener();
112
- this.setState('paused');
156
+ throw e;
113
157
  }
114
- });
115
- _defineProperty(this, "stop", async () => {
116
- if ((0, _uikitUtils.matchesOneOf)(this.state, ['preparing', 'playing', 'paused'])) {
117
- await module.stopPlayer();
158
+ } else if ((0, _uikitUtils.matchesOneOf)(this.state, ['paused']) && this.uri === uri) {
159
+ try {
160
+ this.setListener();
161
+ await this.adapter.resumePlayer();
162
+ this.setState('playing');
163
+ } catch (e) {
118
164
  this.removeListener();
119
- this.setState('stopped');
165
+ throw e;
120
166
  }
121
- });
122
- _defineProperty(this, "reset", async () => {
123
- await this.stop();
124
- this.setState('idle');
125
- this.uri = undefined;
126
- this.playbackSubscribers.clear();
127
- this.stateSubscribers.clear();
128
- });
129
- _defineProperty(this, "seek", async time => {
130
- if ((0, _uikitUtils.matchesOneOf)(this.state, ['playing', 'paused'])) {
131
- await module.seekToPlayer(time);
132
- }
133
- });
134
- module.setSubscriptionDuration(0.1).catch(error => {
167
+ }
168
+ });
169
+ _defineProperty(this, "pause", async () => {
170
+ if ((0, _uikitUtils.matchesOneOf)(this.state, ['playing'])) {
171
+ await this.adapter.pausePlayer();
172
+ this.removeListener();
173
+ this.setState('paused');
174
+ }
175
+ });
176
+ _defineProperty(this, "stop", async () => {
177
+ if ((0, _uikitUtils.matchesOneOf)(this.state, ['preparing', 'playing', 'paused'])) {
178
+ await this.adapter.stopPlayer();
179
+ this.removeListener();
180
+ this.setState('stopped');
181
+ }
182
+ });
183
+ _defineProperty(this, "reset", async () => {
184
+ await this.stop();
185
+ this.setState('idle');
186
+ this.uri = undefined;
187
+ this.playbackSubscribers.clear();
188
+ this.stateSubscribers.clear();
189
+ });
190
+ _defineProperty(this, "seek", async time => {
191
+ if ((0, _uikitUtils.matchesOneOf)(this.state, ['playing', 'paused'])) {
192
+ await this.adapter.seekToPlayer(time);
193
+ }
194
+ });
195
+ this.initialize();
196
+ }
197
+ initialize() {
198
+ const setDurationResult = this.adapter.setSubscriptionDuration(0.1);
199
+ if (setDurationResult instanceof Promise) {
200
+ setDurationResult.catch(error => {
135
201
  _uikitUtils.Logger.warn('[PlayerService.Native] Failed to set subscription duration', error);
136
202
  });
137
203
  }
138
204
  }
139
- return new VoicePlayer();
205
+ }
206
+ const createNativePlayerService = modules => {
207
+ const adapter = isNitroSoundOrLegacyV4Module(modules.audioRecorderModule) ? new NitroSoundOrLegacyV4Adapter(modules.audioRecorderModule) : new AudioRecorderPlayerAdapter(modules.audioRecorderModule);
208
+ return new VoicePlayer(adapter, modules.permissionModule);
140
209
  };
210
+ function isNitroSoundOrLegacyV4Module(module) {
211
+ const isNitroSound = 'createSound' in module && typeof module.createSound === 'function';
212
+ const isLegacyV4 = 'default' in module && 'getHybridObject' in module.default && typeof module.default.getHybridObject === 'function';
213
+ if (isLegacyV4) {
214
+ _uikitUtils.Logger.warn('react-native-audio-recorder-player is deprecated. Please use react-native-nitro-sound instead.');
215
+ }
216
+ return isNitroSound || isLegacyV4;
217
+ }
141
218
  var _default = exports.default = createNativePlayerService;
142
219
  //# sourceMappingURL=createPlayerService.native.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_uikitUtils","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","createNativePlayerService","audioRecorderModule","permissionModule","module","default","VoicePlayer","constructor","Set","state","stateSubscribers","forEach","callback","addPlayBackListener","data","stopped","currentPosition","duration","stop","catch","error","Logger","warn","playbackSubscribers","currentTime","removePlayBackListener","Platform","OS","Version","READ_EXTERNAL_STORAGE","PERMISSIONS","ANDROID","status","check","request","add","delete","uri","matchesOneOf","setState","setListener","sleep","startPlayer","undefined","removeListener","resumePlayer","pausePlayer","stopPlayer","clear","time","seekToPlayer","setSubscriptionDuration","_default","exports"],"sources":["createPlayerService.native.tsx"],"sourcesContent":["import { Platform } from 'react-native';\nimport type * as RNAudioRecorder from 'react-native-audio-recorder-player';\nimport * as Permissions from 'react-native-permissions';\n\nimport { Logger, matchesOneOf, sleep } from '@sendbird/uikit-utils';\n\nimport type { PlayerServiceInterface, Unsubscribe } from './types';\n\ntype Modules = {\n audioRecorderModule: typeof RNAudioRecorder;\n permissionModule: typeof Permissions;\n};\ntype PlaybackListener = Parameters<PlayerServiceInterface['addPlaybackListener']>[number];\ntype StateListener = Parameters<PlayerServiceInterface['addStateListener']>[number];\nconst createNativePlayerService = ({ audioRecorderModule, permissionModule }: Modules): PlayerServiceInterface => {\n const module = new audioRecorderModule.default();\n\n class VoicePlayer implements PlayerServiceInterface {\n uri?: string;\n state: PlayerServiceInterface['state'] = 'idle';\n\n private readonly playbackSubscribers = new Set<PlaybackListener>();\n private readonly stateSubscribers = new Set<StateListener>();\n\n constructor() {\n module.setSubscriptionDuration(0.1).catch((error) => {\n Logger.warn('[PlayerService.Native] Failed to set subscription duration', error);\n });\n }\n\n private setState = (state: PlayerServiceInterface['state']) => {\n this.state = state;\n this.stateSubscribers.forEach((callback) => {\n callback(state);\n });\n };\n\n private setListener = () => {\n module.addPlayBackListener(async (data) => {\n const stopped = data.currentPosition >= data.duration;\n\n if (stopped) {\n this.stop().catch((error) => {\n Logger.warn('[PlayerService.Native] Failed to stop in PlayBackListener', error);\n });\n }\n if (this.state === 'playing') {\n this.playbackSubscribers.forEach((callback) => {\n callback({ currentTime: data.currentPosition, duration: data.duration, stopped });\n });\n }\n });\n };\n\n private removeListener = () => {\n module.removePlayBackListener();\n };\n\n public requestPermission = async (): Promise<boolean> => {\n if (Platform.OS === 'android') {\n if (Platform.Version > 32) return true;\n\n const { READ_EXTERNAL_STORAGE } = permissionModule.PERMISSIONS.ANDROID;\n\n const status = await permissionModule.check(READ_EXTERNAL_STORAGE);\n if (status === 'granted') {\n return true;\n } else {\n const status = await permissionModule.request(READ_EXTERNAL_STORAGE);\n return status === 'granted';\n }\n } else {\n return true;\n }\n };\n\n public addPlaybackListener = (callback: PlaybackListener): Unsubscribe => {\n this.playbackSubscribers.add(callback);\n return () => {\n this.playbackSubscribers.delete(callback);\n };\n };\n\n public addStateListener = (callback: (state: PlayerServiceInterface['state']) => void): Unsubscribe => {\n this.stateSubscribers.add(callback);\n return () => {\n this.stateSubscribers.delete(callback);\n };\n };\n\n public play = async (uri: string): Promise<void> => {\n if (matchesOneOf(this.state, ['idle', 'stopped'])) {\n try {\n this.setState('preparing');\n this.uri = uri;\n this.setListener();\n\n // FIXME: Workaround, `module.startPlayer()` caused a significant frame-drop and prevented the 'preparing' UI transition.\n await sleep(0);\n await module.startPlayer(uri);\n\n this.setState('playing');\n } catch (e) {\n this.setState('idle');\n this.uri = undefined;\n this.removeListener();\n throw e;\n }\n } else if (matchesOneOf(this.state, ['paused']) && this.uri === uri) {\n try {\n this.setListener();\n await module.resumePlayer();\n this.setState('playing');\n } catch (e) {\n this.removeListener();\n throw e;\n }\n }\n };\n\n public pause = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing'])) {\n await module.pausePlayer();\n this.removeListener();\n this.setState('paused');\n }\n };\n\n public stop = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['preparing', 'playing', 'paused'])) {\n await module.stopPlayer();\n this.removeListener();\n this.setState('stopped');\n }\n };\n\n public reset = async (): Promise<void> => {\n await this.stop();\n this.setState('idle');\n this.uri = undefined;\n this.playbackSubscribers.clear();\n this.stateSubscribers.clear();\n };\n\n public seek = async (time: number): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n await module.seekToPlayer(time);\n }\n };\n }\n\n return new VoicePlayer();\n};\n\nexport default createNativePlayerService;\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAIA,IAAAC,WAAA,GAAAD,OAAA;AAAoE,SAAAE,gBAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAD,CAAA,GAAAI,MAAA,CAAAC,cAAA,CAAAL,CAAA,EAAAC,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAT,CAAA,CAAAC,CAAA,IAAAC,CAAA,EAAAF,CAAA;AAAA,SAAAG,eAAAD,CAAA,QAAAQ,CAAA,GAAAC,YAAA,CAAAT,CAAA,uCAAAQ,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAT,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAF,CAAA,GAAAE,CAAA,CAAAU,MAAA,CAAAC,WAAA,kBAAAb,CAAA,QAAAU,CAAA,GAAAV,CAAA,CAAAc,IAAA,CAAAZ,CAAA,EAAAD,CAAA,uCAAAS,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAAd,CAAA,GAAAe,MAAA,GAAAC,MAAA,EAAAf,CAAA;AAUpE,MAAMgB,yBAAyB,GAAGA,CAAC;EAAEC,mBAAmB;EAAEC;AAA0B,CAAC,KAA6B;EAChH,MAAMC,MAAM,GAAG,IAAIF,mBAAmB,CAACG,OAAO,CAAC,CAAC;EAEhD,MAAMC,WAAW,CAAmC;IAOlDC,WAAWA,CAAA,EAAG;MAAAzB,eAAA;MAAAA,eAAA,gBAL2B,MAAM;MAAAA,eAAA,8BAER,IAAI0B,GAAG,CAAmB,CAAC;MAAA1B,eAAA,2BAC9B,IAAI0B,GAAG,CAAgB,CAAC;MAAA1B,eAAA,mBAQxC2B,KAAsC,IAAK;QAC7D,IAAI,CAACA,KAAK,GAAGA,KAAK;QAClB,IAAI,CAACC,gBAAgB,CAACC,OAAO,CAAEC,QAAQ,IAAK;UAC1CA,QAAQ,CAACH,KAAK,CAAC;QACjB,CAAC,CAAC;MACJ,CAAC;MAAA3B,eAAA,sBAEqB,MAAM;QAC1BsB,MAAM,CAACS,mBAAmB,CAAC,MAAOC,IAAI,IAAK;UACzC,MAAMC,OAAO,GAAGD,IAAI,CAACE,eAAe,IAAIF,IAAI,CAACG,QAAQ;UAErD,IAAIF,OAAO,EAAE;YACX,IAAI,CAACG,IAAI,CAAC,CAAC,CAACC,KAAK,CAAEC,KAAK,IAAK;cAC3BC,kBAAM,CAACC,IAAI,CAAC,2DAA2D,EAAEF,KAAK,CAAC;YACjF,CAAC,CAAC;UACJ;UACA,IAAI,IAAI,CAACX,KAAK,KAAK,SAAS,EAAE;YAC5B,IAAI,CAACc,mBAAmB,CAACZ,OAAO,CAAEC,QAAQ,IAAK;cAC7CA,QAAQ,CAAC;gBAAEY,WAAW,EAAEV,IAAI,CAACE,eAAe;gBAAEC,QAAQ,EAAEH,IAAI,CAACG,QAAQ;gBAAEF;cAAQ,CAAC,CAAC;YACnF,CAAC,CAAC;UACJ;QACF,CAAC,CAAC;MACJ,CAAC;MAAAjC,eAAA,yBAEwB,MAAM;QAC7BsB,MAAM,CAACqB,sBAAsB,CAAC,CAAC;MACjC,CAAC;MAAA3C,eAAA,4BAE0B,YAA8B;QACvD,IAAI4C,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE;UAC7B,IAAID,qBAAQ,CAACE,OAAO,GAAG,EAAE,EAAE,OAAO,IAAI;UAEtC,MAAM;YAAEC;UAAsB,CAAC,GAAG1B,gBAAgB,CAAC2B,WAAW,CAACC,OAAO;UAEtE,MAAMC,MAAM,GAAG,MAAM7B,gBAAgB,CAAC8B,KAAK,CAACJ,qBAAqB,CAAC;UAClE,IAAIG,MAAM,KAAK,SAAS,EAAE;YACxB,OAAO,IAAI;UACb,CAAC,MAAM;YACL,MAAMA,MAAM,GAAG,MAAM7B,gBAAgB,CAAC+B,OAAO,CAACL,qBAAqB,CAAC;YACpE,OAAOG,MAAM,KAAK,SAAS;UAC7B;QACF,CAAC,MAAM;UACL,OAAO,IAAI;QACb;MACF,CAAC;MAAAlD,eAAA,8BAE6B8B,QAA0B,IAAkB;QACxE,IAAI,CAACW,mBAAmB,CAACY,GAAG,CAACvB,QAAQ,CAAC;QACtC,OAAO,MAAM;UACX,IAAI,CAACW,mBAAmB,CAACa,MAAM,CAACxB,QAAQ,CAAC;QAC3C,CAAC;MACH,CAAC;MAAA9B,eAAA,2BAE0B8B,QAA0D,IAAkB;QACrG,IAAI,CAACF,gBAAgB,CAACyB,GAAG,CAACvB,QAAQ,CAAC;QACnC,OAAO,MAAM;UACX,IAAI,CAACF,gBAAgB,CAAC0B,MAAM,CAACxB,QAAQ,CAAC;QACxC,CAAC;MACH,CAAC;MAAA9B,eAAA,eAEa,MAAOuD,GAAW,IAAoB;QAClD,IAAI,IAAAC,wBAAY,EAAC,IAAI,CAAC7B,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE;UACjD,IAAI;YACF,IAAI,CAAC8B,QAAQ,CAAC,WAAW,CAAC;YAC1B,IAAI,CAACF,GAAG,GAAGA,GAAG;YACd,IAAI,CAACG,WAAW,CAAC,CAAC;;YAElB;YACA,MAAM,IAAAC,iBAAK,EAAC,CAAC,CAAC;YACd,MAAMrC,MAAM,CAACsC,WAAW,CAACL,GAAG,CAAC;YAE7B,IAAI,CAACE,QAAQ,CAAC,SAAS,CAAC;UAC1B,CAAC,CAAC,OAAOxD,CAAC,EAAE;YACV,IAAI,CAACwD,QAAQ,CAAC,MAAM,CAAC;YACrB,IAAI,CAACF,GAAG,GAAGM,SAAS;YACpB,IAAI,CAACC,cAAc,CAAC,CAAC;YACrB,MAAM7D,CAAC;UACT;QACF,CAAC,MAAM,IAAI,IAAAuD,wBAAY,EAAC,IAAI,CAAC7B,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC4B,GAAG,KAAKA,GAAG,EAAE;UACnE,IAAI;YACF,IAAI,CAACG,WAAW,CAAC,CAAC;YAClB,MAAMpC,MAAM,CAACyC,YAAY,CAAC,CAAC;YAC3B,IAAI,CAACN,QAAQ,CAAC,SAAS,CAAC;UAC1B,CAAC,CAAC,OAAOxD,CAAC,EAAE;YACV,IAAI,CAAC6D,cAAc,CAAC,CAAC;YACrB,MAAM7D,CAAC;UACT;QACF;MACF,CAAC;MAAAD,eAAA,gBAEc,YAA2B;QACxC,IAAI,IAAAwD,wBAAY,EAAC,IAAI,CAAC7B,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE;UACzC,MAAML,MAAM,CAAC0C,WAAW,CAAC,CAAC;UAC1B,IAAI,CAACF,cAAc,CAAC,CAAC;UACrB,IAAI,CAACL,QAAQ,CAAC,QAAQ,CAAC;QACzB;MACF,CAAC;MAAAzD,eAAA,eAEa,YAA2B;QACvC,IAAI,IAAAwD,wBAAY,EAAC,IAAI,CAAC7B,KAAK,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE;UAChE,MAAML,MAAM,CAAC2C,UAAU,CAAC,CAAC;UACzB,IAAI,CAACH,cAAc,CAAC,CAAC;UACrB,IAAI,CAACL,QAAQ,CAAC,SAAS,CAAC;QAC1B;MACF,CAAC;MAAAzD,eAAA,gBAEc,YAA2B;QACxC,MAAM,IAAI,CAACoC,IAAI,CAAC,CAAC;QACjB,IAAI,CAACqB,QAAQ,CAAC,MAAM,CAAC;QACrB,IAAI,CAACF,GAAG,GAAGM,SAAS;QACpB,IAAI,CAACpB,mBAAmB,CAACyB,KAAK,CAAC,CAAC;QAChC,IAAI,CAACtC,gBAAgB,CAACsC,KAAK,CAAC,CAAC;MAC/B,CAAC;MAAAlE,eAAA,eAEa,MAAOmE,IAAY,IAAoB;QACnD,IAAI,IAAAX,wBAAY,EAAC,IAAI,CAAC7B,KAAK,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE;UACnD,MAAML,MAAM,CAAC8C,YAAY,CAACD,IAAI,CAAC;QACjC;MACF,CAAC;MA3HC7C,MAAM,CAAC+C,uBAAuB,CAAC,GAAG,CAAC,CAAChC,KAAK,CAAEC,KAAK,IAAK;QACnDC,kBAAM,CAACC,IAAI,CAAC,4DAA4D,EAAEF,KAAK,CAAC;MAClF,CAAC,CAAC;IACJ;EAyHF;EAEA,OAAO,IAAId,WAAW,CAAC,CAAC;AAC1B,CAAC;AAAC,IAAA8C,QAAA,GAAAC,OAAA,CAAAhD,OAAA,GAEaJ,yBAAyB","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_uikitUtils","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","AudioRecorderPlayerAdapter","constructor","audioRecorderModule","module","default","setSubscriptionDuration","duration","addPlayBackListener","callback","removePlayBackListener","startPlayer","uri","pausePlayer","resumePlayer","stopPlayer","seekToPlayer","time","NitroSoundOrLegacyV4Adapter","error","Logger","warn","VoicePlayer","adapter","permissionModule","Set","state","stateSubscribers","forEach","data","stopped","currentPosition","stop","catch","playbackSubscribers","currentTime","Platform","OS","Version","READ_EXTERNAL_STORAGE","PERMISSIONS","ANDROID","status","check","request","add","delete","matchesOneOf","setState","setListener","sleep","undefined","removeListener","clear","initialize","setDurationResult","Promise","createNativePlayerService","modules","isNitroSoundOrLegacyV4Module","isNitroSound","createSound","isLegacyV4","getHybridObject","_default","exports"],"sources":["createPlayerService.native.tsx"],"sourcesContent":["import { Platform } from 'react-native';\nimport type * as LegacyModule from 'react-native-audio-recorder-player';\nimport type * as NitroSoundOrLegacyV4Module from 'react-native-nitro-sound';\nimport * as Permissions from 'react-native-permissions';\n\nimport { Logger, matchesOneOf, sleep } from '@sendbird/uikit-utils';\n\nimport { AudioRecorderModule } from './createRecorderService.native';\nimport type { PlayerServiceInterface, Unsubscribe } from './types';\n\nexport type AudioPlayerModule = typeof LegacyModule | typeof NitroSoundOrLegacyV4Module;\n\ntype Modules = {\n audioRecorderModule: AudioPlayerModule;\n permissionModule: typeof Permissions;\n};\ntype PlaybackListener = Parameters<PlayerServiceInterface['addPlaybackListener']>[number];\ntype StateListener = Parameters<PlayerServiceInterface['addStateListener']>[number];\n\ninterface PlayBackData {\n currentPosition: number;\n duration: number;\n}\n\ninterface PlayerModuleAdapter {\n setSubscriptionDuration(duration: number): Promise<void> | void;\n addPlayBackListener(callback: (data: PlayBackData) => void): void;\n removePlayBackListener(): void;\n startPlayer(uri: string): Promise<void>;\n pausePlayer(): Promise<void>;\n resumePlayer(): Promise<void>;\n stopPlayer(): Promise<void>;\n seekToPlayer(time: number): Promise<void>;\n}\n\nclass AudioRecorderPlayerAdapter implements PlayerModuleAdapter {\n private module: InstanceType<typeof LegacyModule.default>;\n\n constructor(audioRecorderModule: typeof LegacyModule) {\n this.module = new audioRecorderModule.default();\n }\n\n async setSubscriptionDuration(duration: number): Promise<void> {\n await this.module.setSubscriptionDuration(duration);\n }\n\n addPlayBackListener(callback: (data: PlayBackData) => void): void {\n this.module.addPlayBackListener(callback);\n }\n\n removePlayBackListener(): void {\n this.module.removePlayBackListener();\n }\n\n async startPlayer(uri: string): Promise<void> {\n await this.module.startPlayer(uri);\n }\n\n async pausePlayer(): Promise<void> {\n await this.module.pausePlayer();\n }\n\n async resumePlayer(): Promise<void> {\n await this.module.resumePlayer();\n }\n\n async stopPlayer(): Promise<void> {\n await this.module.stopPlayer();\n }\n\n async seekToPlayer(time: number): Promise<void> {\n await this.module.seekToPlayer(time);\n }\n}\n\nclass NitroSoundOrLegacyV4Adapter implements PlayerModuleAdapter {\n private module;\n\n constructor(audioRecorderModule: typeof NitroSoundOrLegacyV4Module) {\n this.module = audioRecorderModule.default;\n }\n\n setSubscriptionDuration(duration: number): void {\n try {\n this.module.setSubscriptionDuration(duration);\n } catch (error) {\n Logger.warn('[PlayerService.Native] Failed to set subscription duration', error);\n }\n }\n\n addPlayBackListener(callback: (data: PlayBackData) => void): void {\n this.module.addPlayBackListener(callback);\n }\n\n removePlayBackListener(): void {\n this.module.removePlayBackListener();\n }\n\n async startPlayer(uri: string): Promise<void> {\n await this.module.startPlayer(uri);\n }\n\n async pausePlayer(): Promise<void> {\n await this.module.pausePlayer();\n }\n\n async resumePlayer(): Promise<void> {\n await this.module.resumePlayer();\n }\n\n async stopPlayer(): Promise<void> {\n await this.module.stopPlayer();\n }\n\n async seekToPlayer(time: number): Promise<void> {\n await this.module.seekToPlayer(time);\n }\n}\n\nclass VoicePlayer implements PlayerServiceInterface {\n public uri?: string;\n public state: PlayerServiceInterface['state'] = 'idle';\n\n private readonly playbackSubscribers = new Set<PlaybackListener>();\n private readonly stateSubscribers = new Set<StateListener>();\n\n constructor(private readonly adapter: PlayerModuleAdapter, private readonly permissionModule: typeof Permissions) {\n this.initialize();\n }\n\n private initialize(): void {\n const setDurationResult = this.adapter.setSubscriptionDuration(0.1);\n if (setDurationResult instanceof Promise) {\n setDurationResult.catch((error) => {\n Logger.warn('[PlayerService.Native] Failed to set subscription duration', error);\n });\n }\n }\n\n private setState = (state: PlayerServiceInterface['state']) => {\n this.state = state;\n this.stateSubscribers.forEach((callback) => {\n callback(state);\n });\n };\n\n private setListener = () => {\n this.adapter.addPlayBackListener(async (data) => {\n const stopped = data.currentPosition >= data.duration;\n\n if (stopped) {\n this.stop().catch((error) => {\n Logger.warn('[PlayerService.Native] Failed to stop in PlayBackListener', error);\n });\n }\n if (this.state === 'playing') {\n this.playbackSubscribers.forEach((callback) => {\n callback({ currentTime: data.currentPosition, duration: data.duration, stopped });\n });\n }\n });\n };\n\n private removeListener = () => {\n this.adapter.removePlayBackListener();\n };\n\n public requestPermission = async (): Promise<boolean> => {\n if (Platform.OS === 'android') {\n if (Platform.Version > 32) return true;\n\n const { READ_EXTERNAL_STORAGE } = this.permissionModule.PERMISSIONS.ANDROID;\n\n const status = await this.permissionModule.check(READ_EXTERNAL_STORAGE);\n if (status === 'granted') {\n return true;\n } else {\n const status = await this.permissionModule.request(READ_EXTERNAL_STORAGE);\n return status === 'granted';\n }\n } else {\n return true;\n }\n };\n\n public addPlaybackListener = (callback: PlaybackListener): Unsubscribe => {\n this.playbackSubscribers.add(callback);\n return () => {\n this.playbackSubscribers.delete(callback);\n };\n };\n\n public addStateListener = (callback: (state: PlayerServiceInterface['state']) => void): Unsubscribe => {\n this.stateSubscribers.add(callback);\n return () => {\n this.stateSubscribers.delete(callback);\n };\n };\n\n public play = async (uri: string): Promise<void> => {\n if (matchesOneOf(this.state, ['idle', 'stopped'])) {\n try {\n this.setState('preparing');\n this.uri = uri;\n this.setListener();\n\n // FIXME: Workaround, `module.startPlayer()` caused a significant frame-drop and prevented the 'preparing' UI transition.\n await sleep(0);\n await this.adapter.startPlayer(uri);\n\n this.setState('playing');\n } catch (e) {\n this.setState('idle');\n this.uri = undefined;\n this.removeListener();\n throw e;\n }\n } else if (matchesOneOf(this.state, ['paused']) && this.uri === uri) {\n try {\n this.setListener();\n await this.adapter.resumePlayer();\n this.setState('playing');\n } catch (e) {\n this.removeListener();\n throw e;\n }\n }\n };\n\n public pause = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing'])) {\n await this.adapter.pausePlayer();\n this.removeListener();\n this.setState('paused');\n }\n };\n\n public stop = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['preparing', 'playing', 'paused'])) {\n await this.adapter.stopPlayer();\n this.removeListener();\n this.setState('stopped');\n }\n };\n\n public reset = async (): Promise<void> => {\n await this.stop();\n this.setState('idle');\n this.uri = undefined;\n this.playbackSubscribers.clear();\n this.stateSubscribers.clear();\n };\n\n public seek = async (time: number): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n await this.adapter.seekToPlayer(time);\n }\n };\n}\n\nconst createNativePlayerService = (modules: Modules): PlayerServiceInterface => {\n const adapter = isNitroSoundOrLegacyV4Module(modules.audioRecorderModule)\n ? new NitroSoundOrLegacyV4Adapter(modules.audioRecorderModule)\n : new AudioRecorderPlayerAdapter(modules.audioRecorderModule as typeof LegacyModule);\n\n return new VoicePlayer(adapter, modules.permissionModule);\n};\n\nfunction isNitroSoundOrLegacyV4Module(module: AudioRecorderModule): module is typeof NitroSoundOrLegacyV4Module {\n const isNitroSound = 'createSound' in module && typeof module.createSound === 'function';\n const isLegacyV4 =\n 'default' in module && 'getHybridObject' in module.default && typeof module.default.getHybridObject === 'function';\n if (isLegacyV4) {\n Logger.warn('react-native-audio-recorder-player is deprecated. Please use react-native-nitro-sound instead.');\n }\n return isNitroSound || isLegacyV4;\n}\n\nexport default createNativePlayerService;\n"],"mappings":"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","ignoreList":[]}