@sendbird/uikit-react-native 3.11.0 → 3.11.2

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 (48) hide show
  1. package/README.md +7 -5
  2. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +0 -3
  3. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  4. package/lib/commonjs/platform/createMediaService.expo.js +83 -12
  5. package/lib/commonjs/platform/createMediaService.expo.js.map +1 -1
  6. package/lib/commonjs/platform/createNotificationService.native.js +31 -6
  7. package/lib/commonjs/platform/createNotificationService.native.js.map +1 -1
  8. package/lib/commonjs/platform/createPlayerService.expo.js +214 -113
  9. package/lib/commonjs/platform/createPlayerService.expo.js.map +1 -1
  10. package/lib/commonjs/platform/createRecorderService.expo.js +248 -130
  11. package/lib/commonjs/platform/createRecorderService.expo.js.map +1 -1
  12. package/lib/commonjs/utils/expoBackwardUtils.js +23 -0
  13. package/lib/commonjs/utils/expoBackwardUtils.js.map +1 -1
  14. package/lib/commonjs/utils/expoPermissionGranted.js.map +1 -1
  15. package/lib/commonjs/version.js +1 -1
  16. package/lib/commonjs/version.js.map +1 -1
  17. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +0 -3
  18. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  19. package/lib/module/platform/createMediaService.expo.js +82 -13
  20. package/lib/module/platform/createMediaService.expo.js.map +1 -1
  21. package/lib/module/platform/createNotificationService.native.js +32 -6
  22. package/lib/module/platform/createNotificationService.native.js.map +1 -1
  23. package/lib/module/platform/createPlayerService.expo.js +214 -113
  24. package/lib/module/platform/createPlayerService.expo.js.map +1 -1
  25. package/lib/module/platform/createRecorderService.expo.js +249 -131
  26. package/lib/module/platform/createRecorderService.expo.js.map +1 -1
  27. package/lib/module/utils/expoBackwardUtils.js +23 -0
  28. package/lib/module/utils/expoBackwardUtils.js.map +1 -1
  29. package/lib/module/utils/expoPermissionGranted.js.map +1 -1
  30. package/lib/module/version.js +1 -1
  31. package/lib/module/version.js.map +1 -1
  32. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
  33. package/lib/typescript/src/platform/createMediaService.expo.d.ts +2 -2
  34. package/lib/typescript/src/platform/createNotificationService.native.d.ts +13 -1
  35. package/lib/typescript/src/platform/createPlayerService.expo.d.ts +2 -2
  36. package/lib/typescript/src/platform/createRecorderService.expo.d.ts +2 -2
  37. package/lib/typescript/src/utils/expoBackwardUtils.d.ts +10 -0
  38. package/lib/typescript/src/utils/expoPermissionGranted.d.ts +1 -1
  39. package/lib/typescript/src/version.d.ts +1 -1
  40. package/package.json +16 -5
  41. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +0 -3
  42. package/src/platform/createMediaService.expo.tsx +87 -9
  43. package/src/platform/createNotificationService.native.ts +53 -7
  44. package/src/platform/createPlayerService.expo.tsx +242 -109
  45. package/src/platform/createRecorderService.expo.tsx +267 -110
  46. package/src/utils/expoBackwardUtils.ts +29 -0
  47. package/src/utils/expoPermissionGranted.ts +3 -1
  48. package/src/version.ts +1 -1
@@ -2,133 +2,234 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
2
2
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
3
  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); }
4
4
  import { Logger, matchesOneOf } from '@sendbird/uikit-utils';
5
- import expoPermissionGranted from '../utils/expoPermissionGranted';
6
- const createExpoPlayerService = ({
7
- avModule
8
- }) => {
9
- const sound = new avModule.Audio.Sound();
10
- class VoicePlayer {
11
- constructor() {
12
- _defineProperty(this, "uri", void 0);
13
- _defineProperty(this, "state", 'idle');
14
- _defineProperty(this, "playbackSubscribers", new Set());
15
- _defineProperty(this, "stateSubscribers", new Set());
16
- _defineProperty(this, "setState", state => {
17
- this.state = state;
18
- this.stateSubscribers.forEach(callback => {
19
- callback(state);
20
- });
21
- });
22
- _defineProperty(this, "setListener", () => {
23
- sound.setProgressUpdateIntervalAsync(100).catch(error => {
24
- Logger.warn('[PlayerService.Expo] Failed to set progress update interval', error);
25
- });
26
- sound.setOnPlaybackStatusUpdate(status => {
27
- if (status.isLoaded) {
28
- if (status.didJustFinish) {
29
- this.stop().catch(error => {
30
- Logger.warn('[PlayerService.Expo] Failed to stop in OnPlaybackStatusUpdate', error);
31
- });
32
- }
33
- if (status.isPlaying) {
34
- this.playbackSubscribers.forEach(callback => {
35
- callback({
36
- currentTime: status.positionMillis,
37
- duration: status.durationMillis ?? 0,
38
- stopped: status.didJustFinish
39
- });
40
- });
41
- }
42
- }
43
- });
5
+ import expoBackwardUtils from '../utils/expoBackwardUtils';
6
+ class BaseAudioPlayerAdapter {
7
+ constructor() {
8
+ _defineProperty(this, "uri", void 0);
9
+ _defineProperty(this, "state", 'idle');
10
+ _defineProperty(this, "playbackSubscribers", new Set());
11
+ _defineProperty(this, "stateSubscribers", new Set());
12
+ _defineProperty(this, "setState", state => {
13
+ this.state = state;
14
+ this.stateSubscribers.forEach(callback => {
15
+ callback(state);
44
16
  });
45
- _defineProperty(this, "removeListener", () => {
46
- sound.setOnPlaybackStatusUpdate(null);
47
- });
48
- _defineProperty(this, "requestPermission", async () => {
49
- const status = await avModule.Audio.getPermissionsAsync();
50
- if (expoPermissionGranted([status])) {
51
- return true;
52
- } else {
53
- const status = await avModule.Audio.requestPermissionsAsync();
54
- return expoPermissionGranted([status]);
55
- }
56
- });
57
- _defineProperty(this, "addPlaybackListener", callback => {
58
- this.playbackSubscribers.add(callback);
59
- return () => {
60
- this.playbackSubscribers.delete(callback);
61
- };
62
- });
63
- _defineProperty(this, "addStateListener", callback => {
64
- this.stateSubscribers.add(callback);
65
- return () => {
66
- this.stateSubscribers.delete(callback);
67
- };
68
- });
69
- _defineProperty(this, "prepare", async uri => {
70
- this.setState('preparing');
71
- await sound.loadAsync({
72
- uri
73
- }, {
74
- shouldPlay: false
75
- }, true);
76
- this.uri = uri;
17
+ });
18
+ _defineProperty(this, "requestPermission", async () => {
19
+ return true;
20
+ });
21
+ _defineProperty(this, "addPlaybackListener", callback => {
22
+ this.playbackSubscribers.add(callback);
23
+ return () => {
24
+ this.playbackSubscribers.delete(callback);
25
+ };
26
+ });
27
+ _defineProperty(this, "addStateListener", callback => {
28
+ this.stateSubscribers.add(callback);
29
+ return () => {
30
+ this.stateSubscribers.delete(callback);
31
+ };
32
+ });
33
+ }
34
+ }
35
+ class LegacyExpoAVPlayerAdapter extends BaseAudioPlayerAdapter {
36
+ constructor(avModule) {
37
+ super();
38
+ _defineProperty(this, "sound", void 0);
39
+ _defineProperty(this, "setListener", () => {
40
+ this.sound.setProgressUpdateIntervalAsync(100).catch(error => {
41
+ Logger.warn('[PlayerService.Expo] Failed to set progress update interval', error);
77
42
  });
78
- _defineProperty(this, "play", async uri => {
79
- if (matchesOneOf(this.state, ['idle', 'stopped'])) {
80
- try {
81
- await this.prepare(uri);
82
- this.setListener();
83
- await sound.playAsync();
84
- this.setState('playing');
85
- } catch (e) {
86
- this.setState('idle');
87
- this.uri = undefined;
88
- this.removeListener();
89
- throw e;
43
+ this.sound.setOnPlaybackStatusUpdate(status => {
44
+ if (status.isLoaded) {
45
+ if (status.didJustFinish) {
46
+ this.stop().catch(error => {
47
+ Logger.warn('[PlayerService.Expo] Failed to stop in OnPlaybackStatusUpdate', error);
48
+ });
90
49
  }
91
- } else if (matchesOneOf(this.state, ['paused']) && this.uri === uri) {
92
- try {
93
- this.setListener();
94
- await sound.playAsync();
95
- this.setState('playing');
96
- } catch (e) {
97
- this.removeListener();
98
- throw e;
50
+ if (status.isPlaying) {
51
+ this.playbackSubscribers.forEach(callback => {
52
+ callback({
53
+ currentTime: status.positionMillis,
54
+ duration: status.durationMillis ?? 0,
55
+ stopped: status.didJustFinish
56
+ });
57
+ });
99
58
  }
100
59
  }
101
60
  });
102
- _defineProperty(this, "pause", async () => {
103
- if (matchesOneOf(this.state, ['playing'])) {
104
- await sound.pauseAsync();
61
+ });
62
+ _defineProperty(this, "removeListener", () => {
63
+ this.sound.setOnPlaybackStatusUpdate(null);
64
+ });
65
+ _defineProperty(this, "prepare", async uri => {
66
+ this.setState('preparing');
67
+ await this.sound.loadAsync({
68
+ uri
69
+ }, {
70
+ shouldPlay: false
71
+ }, true);
72
+ this.uri = uri;
73
+ });
74
+ _defineProperty(this, "play", async uri => {
75
+ if (matchesOneOf(this.state, ['idle', 'stopped'])) {
76
+ try {
77
+ await this.prepare(uri);
78
+ this.setListener();
79
+ await this.sound.playAsync();
80
+ this.setState('playing');
81
+ } catch (e) {
82
+ this.setState('idle');
83
+ this.uri = undefined;
105
84
  this.removeListener();
106
- this.setState('paused');
85
+ throw e;
107
86
  }
108
- });
109
- _defineProperty(this, "stop", async () => {
110
- if (matchesOneOf(this.state, ['playing', 'paused'])) {
111
- await sound.stopAsync();
112
- await sound.unloadAsync();
87
+ } else if (matchesOneOf(this.state, ['paused']) && this.uri === uri) {
88
+ try {
89
+ this.setListener();
90
+ await this.sound.playAsync();
91
+ this.setState('playing');
92
+ } catch (e) {
113
93
  this.removeListener();
114
- this.setState('stopped');
94
+ throw e;
95
+ }
96
+ }
97
+ });
98
+ _defineProperty(this, "pause", async () => {
99
+ if (matchesOneOf(this.state, ['playing'])) {
100
+ await this.sound.pauseAsync();
101
+ this.removeListener();
102
+ this.setState('paused');
103
+ }
104
+ });
105
+ _defineProperty(this, "stop", async () => {
106
+ if (matchesOneOf(this.state, ['playing', 'paused'])) {
107
+ await this.sound.stopAsync();
108
+ await this.sound.unloadAsync();
109
+ this.removeListener();
110
+ this.setState('stopped');
111
+ }
112
+ });
113
+ _defineProperty(this, "reset", async () => {
114
+ await this.stop();
115
+ this.setState('idle');
116
+ this.uri = undefined;
117
+ this.playbackSubscribers.clear();
118
+ this.stateSubscribers.clear();
119
+ });
120
+ _defineProperty(this, "seek", async time => {
121
+ if (matchesOneOf(this.state, ['playing', 'paused'])) {
122
+ await this.sound.playFromPositionAsync(time);
123
+ }
124
+ });
125
+ this.sound = new avModule.Audio.Sound();
126
+ }
127
+ }
128
+ class ExpoAudioPlayerAdapter extends BaseAudioPlayerAdapter {
129
+ constructor(audioModule) {
130
+ super();
131
+ _defineProperty(this, "audioModule", void 0);
132
+ _defineProperty(this, "player", null);
133
+ _defineProperty(this, "setListener", () => {
134
+ if (!this.player) return;
135
+ this.player.addListener('playbackStatusUpdate', status => {
136
+ if (status.isLoaded) {
137
+ if (status.didJustFinish) {
138
+ this.stop().catch(error => {
139
+ Logger.warn('[PlayerService.Expo] Failed to stop in playbackStatusUpdate', error);
140
+ });
141
+ }
142
+ if (status.playing) {
143
+ this.playbackSubscribers.forEach(callback => {
144
+ callback({
145
+ currentTime: status.currentTime,
146
+ duration: status.duration ?? 0,
147
+ stopped: status.didJustFinish
148
+ });
149
+ });
150
+ }
115
151
  }
116
152
  });
117
- _defineProperty(this, "reset", async () => {
118
- await this.stop();
119
- this.setState('idle');
120
- this.uri = undefined;
121
- this.playbackSubscribers.clear();
122
- this.stateSubscribers.clear();
153
+ });
154
+ _defineProperty(this, "removeListener", () => {
155
+ if (this.player) {
156
+ this.player.remove();
157
+ }
158
+ });
159
+ _defineProperty(this, "prepare", async uri => {
160
+ this.setState('preparing');
161
+ this.player = this.audioModule.createAudioPlayer(uri, {
162
+ updateInterval: 100
123
163
  });
124
- _defineProperty(this, "seek", async time => {
125
- if (matchesOneOf(this.state, ['playing', 'paused'])) {
126
- await sound.playFromPositionAsync(time);
164
+ this.uri = uri;
165
+ });
166
+ _defineProperty(this, "play", async uri => {
167
+ if (matchesOneOf(this.state, ['idle', 'stopped'])) {
168
+ try {
169
+ var _this$player;
170
+ await this.prepare(uri);
171
+ this.setListener();
172
+ (_this$player = this.player) === null || _this$player === void 0 || _this$player.play();
173
+ this.setState('playing');
174
+ } catch (e) {
175
+ this.setState('idle');
176
+ this.uri = undefined;
177
+ this.removeListener();
178
+ throw e;
127
179
  }
128
- });
129
- }
180
+ } else if (matchesOneOf(this.state, ['paused']) && this.uri === uri) {
181
+ try {
182
+ var _this$player2;
183
+ this.setListener();
184
+ (_this$player2 = this.player) === null || _this$player2 === void 0 || _this$player2.play();
185
+ this.setState('playing');
186
+ } catch (e) {
187
+ this.removeListener();
188
+ throw e;
189
+ }
190
+ }
191
+ });
192
+ _defineProperty(this, "pause", async () => {
193
+ if (matchesOneOf(this.state, ['playing'])) {
194
+ var _this$player3;
195
+ (_this$player3 = this.player) === null || _this$player3 === void 0 || _this$player3.pause();
196
+ this.removeListener();
197
+ this.setState('paused');
198
+ }
199
+ });
200
+ _defineProperty(this, "stop", async () => {
201
+ if (matchesOneOf(this.state, ['playing', 'paused'])) {
202
+ var _this$player4;
203
+ (_this$player4 = this.player) === null || _this$player4 === void 0 || _this$player4.pause();
204
+ this.removeListener();
205
+ this.setState('stopped');
206
+ }
207
+ });
208
+ _defineProperty(this, "reset", async () => {
209
+ var _this$player5;
210
+ await this.stop();
211
+ (_this$player5 = this.player) === null || _this$player5 === void 0 || _this$player5.remove();
212
+ this.player = null;
213
+ this.setState('idle');
214
+ this.uri = undefined;
215
+ this.playbackSubscribers.clear();
216
+ this.stateSubscribers.clear();
217
+ });
218
+ _defineProperty(this, "seek", async time => {
219
+ if (matchesOneOf(this.state, ['playing', 'paused']) && this.player) {
220
+ this.player.currentTime = time;
221
+ }
222
+ });
223
+ this.audioModule = audioModule;
224
+ }
225
+ }
226
+ const createExpoPlayerService = ({
227
+ avModule
228
+ }) => {
229
+ if (expoBackwardUtils.expoAV.isLegacyAVModule(avModule)) {
230
+ Logger.warn('[PlayerService.Expo] expo-av is deprecated and will be removed in Expo 54. Please migrate to expo-audio.');
130
231
  }
131
- return new VoicePlayer();
232
+ return expoBackwardUtils.expoAV.isAudioModule(avModule) ? new ExpoAudioPlayerAdapter(avModule) : new LegacyExpoAVPlayerAdapter(avModule);
132
233
  };
133
234
  export default createExpoPlayerService;
134
235
  //# sourceMappingURL=createPlayerService.expo.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Logger","matchesOneOf","expoPermissionGranted","createExpoPlayerService","avModule","sound","Audio","Sound","VoicePlayer","constructor","_defineProperty","Set","state","stateSubscribers","forEach","callback","setProgressUpdateIntervalAsync","catch","error","warn","setOnPlaybackStatusUpdate","status","isLoaded","didJustFinish","stop","isPlaying","playbackSubscribers","currentTime","positionMillis","duration","durationMillis","stopped","getPermissionsAsync","requestPermissionsAsync","add","delete","uri","setState","loadAsync","shouldPlay","prepare","setListener","playAsync","e","undefined","removeListener","pauseAsync","stopAsync","unloadAsync","clear","time","playFromPositionAsync"],"sources":["createPlayerService.expo.tsx"],"sourcesContent":["import type * as ExpoAV from 'expo-av';\n\nimport { Logger, matchesOneOf } from '@sendbird/uikit-utils';\n\nimport expoPermissionGranted from '../utils/expoPermissionGranted';\nimport type { PlayerServiceInterface, Unsubscribe } from './types';\n\ntype Modules = {\n avModule: typeof ExpoAV;\n};\ntype PlaybackListener = Parameters<PlayerServiceInterface['addPlaybackListener']>[number];\ntype StateListener = Parameters<PlayerServiceInterface['addStateListener']>[number];\nconst createExpoPlayerService = ({ avModule }: Modules): PlayerServiceInterface => {\n const sound = new avModule.Audio.Sound();\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 private setState = (state: PlayerServiceInterface['state']) => {\n this.state = state;\n this.stateSubscribers.forEach((callback) => {\n callback(state);\n });\n };\n\n private setListener = () => {\n sound.setProgressUpdateIntervalAsync(100).catch((error) => {\n Logger.warn('[PlayerService.Expo] Failed to set progress update interval', error);\n });\n sound.setOnPlaybackStatusUpdate((status) => {\n if (status.isLoaded) {\n if (status.didJustFinish) {\n this.stop().catch((error) => {\n Logger.warn('[PlayerService.Expo] Failed to stop in OnPlaybackStatusUpdate', error);\n });\n }\n if (status.isPlaying) {\n this.playbackSubscribers.forEach((callback) => {\n callback({\n currentTime: status.positionMillis,\n duration: status.durationMillis ?? 0,\n stopped: status.didJustFinish,\n });\n });\n }\n }\n });\n };\n\n private removeListener = () => {\n sound.setOnPlaybackStatusUpdate(null);\n };\n\n public requestPermission = async (): Promise<boolean> => {\n const status = await avModule.Audio.getPermissionsAsync();\n if (expoPermissionGranted([status])) {\n return true;\n } else {\n const status = await avModule.Audio.requestPermissionsAsync();\n return expoPermissionGranted([status]);\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 private prepare = async (uri: string) => {\n this.setState('preparing');\n await sound.loadAsync({ uri }, { shouldPlay: false }, true);\n this.uri = uri;\n };\n\n public play = async (uri: string): Promise<void> => {\n if (matchesOneOf(this.state, ['idle', 'stopped'])) {\n try {\n await this.prepare(uri);\n this.setListener();\n await sound.playAsync();\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 sound.playAsync();\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 sound.pauseAsync();\n this.removeListener();\n this.setState('paused');\n }\n };\n\n public stop = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n await sound.stopAsync();\n await sound.unloadAsync();\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 sound.playFromPositionAsync(time);\n }\n };\n }\n\n return new VoicePlayer();\n};\n\nexport default createExpoPlayerService;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Logger","matchesOneOf","expoBackwardUtils","BaseAudioPlayerAdapter","constructor","_defineProperty","Set","state","stateSubscribers","forEach","callback","playbackSubscribers","add","delete","LegacyExpoAVPlayerAdapter","avModule","sound","setProgressUpdateIntervalAsync","catch","error","warn","setOnPlaybackStatusUpdate","status","isLoaded","didJustFinish","stop","isPlaying","currentTime","positionMillis","duration","durationMillis","stopped","uri","setState","loadAsync","shouldPlay","prepare","setListener","playAsync","e","undefined","removeListener","pauseAsync","stopAsync","unloadAsync","clear","time","playFromPositionAsync","Audio","Sound","ExpoAudioPlayerAdapter","audioModule","player","addListener","playing","remove","createAudioPlayer","updateInterval","_this$player","play","_this$player2","_this$player3","pause","_this$player4","_this$player5","createExpoPlayerService","expoAV","isLegacyAVModule","isAudioModule"],"sources":["createPlayerService.expo.tsx"],"sourcesContent":["import type * as ExpoAudio from 'expo-audio';\nimport type * as ExpoAV from 'expo-av';\n\nimport { Logger, matchesOneOf } from '@sendbird/uikit-utils';\n\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoAudioModule } from '../utils/expoBackwardUtils';\nimport type { PlayerServiceInterface, Unsubscribe } from './types';\n\ntype Modules = {\n avModule: ExpoAudioModule;\n};\ntype PlaybackListener = Parameters<PlayerServiceInterface['addPlaybackListener']>[number];\ntype StateListener = Parameters<PlayerServiceInterface['addStateListener']>[number];\n\ninterface AudioPlayerAdapter {\n requestPermission(): Promise<boolean>;\n play(uri: string): Promise<void>;\n pause(): Promise<void>;\n stop(): Promise<void>;\n reset(): Promise<void>;\n seek(time: number): Promise<void>;\n addPlaybackListener(callback: PlaybackListener): Unsubscribe;\n addStateListener(callback: StateListener): Unsubscribe;\n readonly state: PlayerServiceInterface['state'];\n uri?: string;\n}\n\nabstract class BaseAudioPlayerAdapter implements AudioPlayerAdapter {\n uri?: string;\n state: PlayerServiceInterface['state'] = 'idle';\n\n protected readonly playbackSubscribers = new Set<PlaybackListener>();\n protected readonly stateSubscribers = new Set<StateListener>();\n\n protected setState = (state: PlayerServiceInterface['state']) => {\n this.state = state;\n this.stateSubscribers.forEach((callback) => {\n callback(state);\n });\n };\n\n public requestPermission = async (): Promise<boolean> => {\n return true;\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: StateListener): Unsubscribe => {\n this.stateSubscribers.add(callback);\n return () => {\n this.stateSubscribers.delete(callback);\n };\n };\n\n abstract play(uri: string): Promise<void>;\n abstract pause(): Promise<void>;\n abstract stop(): Promise<void>;\n abstract reset(): Promise<void>;\n abstract seek(time: number): Promise<void>;\n}\n\nclass LegacyExpoAVPlayerAdapter extends BaseAudioPlayerAdapter {\n private readonly sound: ExpoAV.Audio.Sound;\n\n constructor(avModule: typeof ExpoAV) {\n super();\n this.sound = new avModule.Audio.Sound();\n }\n\n private setListener = () => {\n this.sound.setProgressUpdateIntervalAsync(100).catch((error) => {\n Logger.warn('[PlayerService.Expo] Failed to set progress update interval', error);\n });\n this.sound.setOnPlaybackStatusUpdate((status) => {\n if (status.isLoaded) {\n if (status.didJustFinish) {\n this.stop().catch((error) => {\n Logger.warn('[PlayerService.Expo] Failed to stop in OnPlaybackStatusUpdate', error);\n });\n }\n if (status.isPlaying) {\n this.playbackSubscribers.forEach((callback) => {\n callback({\n currentTime: status.positionMillis,\n duration: status.durationMillis ?? 0,\n stopped: status.didJustFinish,\n });\n });\n }\n }\n });\n };\n\n private removeListener = () => {\n this.sound.setOnPlaybackStatusUpdate(null);\n };\n\n private prepare = async (uri: string) => {\n this.setState('preparing');\n await this.sound.loadAsync({ uri }, { shouldPlay: false }, true);\n this.uri = uri;\n };\n\n public play = async (uri: string): Promise<void> => {\n if (matchesOneOf(this.state, ['idle', 'stopped'])) {\n try {\n await this.prepare(uri);\n this.setListener();\n await this.sound.playAsync();\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.sound.playAsync();\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.sound.pauseAsync();\n this.removeListener();\n this.setState('paused');\n }\n };\n\n public stop = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n await this.sound.stopAsync();\n await this.sound.unloadAsync();\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.sound.playFromPositionAsync(time);\n }\n };\n}\n\nclass ExpoAudioPlayerAdapter extends BaseAudioPlayerAdapter {\n private readonly audioModule: typeof ExpoAudio;\n private player: ExpoAudio.AudioPlayer | null = null;\n\n constructor(audioModule: typeof ExpoAudio) {\n super();\n this.audioModule = audioModule;\n }\n\n private setListener = () => {\n if (!this.player) return;\n\n this.player.addListener('playbackStatusUpdate', (status) => {\n if (status.isLoaded) {\n if (status.didJustFinish) {\n this.stop().catch((error) => {\n Logger.warn('[PlayerService.Expo] Failed to stop in playbackStatusUpdate', error);\n });\n }\n if (status.playing) {\n this.playbackSubscribers.forEach((callback) => {\n callback({\n currentTime: status.currentTime,\n duration: status.duration ?? 0,\n stopped: status.didJustFinish,\n });\n });\n }\n }\n });\n };\n\n private removeListener = () => {\n if (this.player) {\n this.player.remove();\n }\n };\n\n private prepare = async (uri: string) => {\n this.setState('preparing');\n this.player = this.audioModule.createAudioPlayer(uri, { updateInterval: 100 });\n this.uri = uri;\n };\n\n public play = async (uri: string): Promise<void> => {\n if (matchesOneOf(this.state, ['idle', 'stopped'])) {\n try {\n await this.prepare(uri);\n this.setListener();\n this.player?.play();\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 this.player?.play();\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 this.player?.pause();\n this.removeListener();\n this.setState('paused');\n }\n };\n\n public stop = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n this.player?.pause();\n this.removeListener();\n this.setState('stopped');\n }\n };\n\n public reset = async (): Promise<void> => {\n await this.stop();\n this.player?.remove();\n this.player = null;\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']) && this.player) {\n this.player.currentTime = time;\n }\n };\n}\n\nconst createExpoPlayerService = ({ avModule }: Modules): PlayerServiceInterface => {\n if (expoBackwardUtils.expoAV.isLegacyAVModule(avModule)) {\n Logger.warn(\n '[PlayerService.Expo] expo-av is deprecated and will be removed in Expo 54. Please migrate to expo-audio.',\n );\n }\n\n return expoBackwardUtils.expoAV.isAudioModule(avModule)\n ? new ExpoAudioPlayerAdapter(avModule)\n : new LegacyExpoAVPlayerAdapter(avModule);\n};\n\nexport default createExpoPlayerService;\n"],"mappings":"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","ignoreList":[]}