payfri-video-sdk 0.1.0 → 0.1.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.
package/README.md CHANGED
@@ -263,9 +263,11 @@ Igual que `/client`, `VideoCallProps` **no tiene** campo para la API key (no com
263
263
  ```
264
264
 
265
265
  El plugin inyecta en el prebuild `NSCameraUsageDescription` / `NSMicrophoneUsageDescription` (iOS)
266
- y `CAMERA` / `RECORD_AUDIO` (Android).
266
+ y `CAMERA` / `RECORD_AUDIO` / `MODIFY_AUDIO_SETTINGS` (Android).
267
267
 
268
268
  **React Native "bare"** (sin Expo) — agrégalos a mano en `Info.plist` y `AndroidManifest.xml`.
269
+ En Android, `MODIFY_AUDIO_SETTINGS` es obligatorio: el WebView lo exige junto a `RECORD_AUDIO`
270
+ para capturar audio; sin él el micrófono falla con "Could not start audio source".
269
271
 
270
272
  > App de ejemplo completa (Expo):
271
273
  > [`examples/expo-videocall`](https://github.com/Payfri/VideoCallsGateway/tree/main/examples/expo-videocall)
@@ -15,7 +15,8 @@ var withVideoSdk = (config, props) => {
15
15
  });
16
16
  return configPlugins.AndroidConfig.Permissions.withPermissions(withIos, [
17
17
  "android.permission.CAMERA",
18
- "android.permission.RECORD_AUDIO"
18
+ "android.permission.RECORD_AUDIO",
19
+ "android.permission.MODIFY_AUDIO_SETTINGS"
19
20
  ]);
20
21
  };
21
22
  var withVideoSdk_default = withVideoSdk;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugin/withVideoSdk.ts"],"names":["withInfoPlist","AndroidConfig"],"mappings":";;;;;AAyBA,IAAM,mBAAA,GAAsB,mDAAA;AAC5B,IAAM,uBAAA,GAA0B,sDAAA;AAEhC,IAAM,YAAA,GAAyD,CAAC,MAAA,EAAQ,KAAA,KAAU;AAChF,EAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,mBAAA;AACxC,EAAA,MAAM,cAAA,GAAiB,OAAO,cAAA,IAAkB,uBAAA;AAGhD,EAAA,MAAM,OAAA,GAAUA,2BAAA,CAAc,MAAA,EAAQ,CAAC,GAAA,KAAQ;AAC7C,IAAA,GAAA,CAAI,UAAA,CAAW,wBAAA,GACb,GAAA,CAAI,UAAA,CAAW,wBAAA,IAA4B,UAAA;AAC7C,IAAA,GAAA,CAAI,UAAA,CAAW,4BAAA,GACb,GAAA,CAAI,UAAA,CAAW,4BAAA,IAAgC,cAAA;AACjD,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AAGD,EAAA,OAAOC,2BAAA,CAAc,WAAA,CAAY,eAAA,CAAgB,OAAA,EAAS;AAAA,IACxD,2BAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH,CAAA;AAEA,IAAO,oBAAA,GAAQ","file":"withVideoSdk.cjs","sourcesContent":["import {\n AndroidConfig,\n withInfoPlist,\n type ConfigPlugin,\n} from \"@expo/config-plugins\";\n\n/**\n * Config plugin de Expo para `payfri-video-sdk`. Inyecta en el prebuild los permisos\n * de cámara y micrófono que exige el sistema operativo para usar getUserMedia\n * dentro del WebView de `<VideoCall>`:\n *\n * - iOS: NSCameraUsageDescription, NSMicrophoneUsageDescription (Info.plist)\n * - Android: CAMERA, RECORD_AUDIO (AndroidManifest)\n *\n * El tenant lo activa en su `app.json` y no toca ningún archivo nativo:\n *\n * { \"plugins\": [[\"payfri-video-sdk\", { \"cameraText\": \"Para videollamadas\" }]] }\n */\nexport interface VideoSdkPluginProps {\n /** Texto del permiso de cámara mostrado por iOS. */\n cameraText?: string;\n /** Texto del permiso de micrófono mostrado por iOS. */\n microphoneText?: string;\n}\n\nconst DEFAULT_CAMERA_TEXT = \"Esta app usa la cámara para las videollamadas.\";\nconst DEFAULT_MICROPHONE_TEXT = \"Esta app usa el micrófono para las videollamadas.\";\n\nconst withVideoSdk: ConfigPlugin<VideoSdkPluginProps | void> = (config, props) => {\n const cameraText = props?.cameraText ?? DEFAULT_CAMERA_TEXT;\n const microphoneText = props?.microphoneText ?? DEFAULT_MICROPHONE_TEXT;\n\n // iOS: no pisar valores que el proyecto ya haya definido.\n const withIos = withInfoPlist(config, (cfg) => {\n cfg.modResults.NSCameraUsageDescription =\n cfg.modResults.NSCameraUsageDescription ?? cameraText;\n cfg.modResults.NSMicrophoneUsageDescription =\n cfg.modResults.NSMicrophoneUsageDescription ?? microphoneText;\n return cfg;\n });\n\n // Android: withPermissions deduplica, así que es seguro re-declararlos.\n return AndroidConfig.Permissions.withPermissions(withIos, [\n \"android.permission.CAMERA\",\n \"android.permission.RECORD_AUDIO\",\n ]);\n};\n\nexport default withVideoSdk;\n"]}
1
+ {"version":3,"sources":["../../src/plugin/withVideoSdk.ts"],"names":["withInfoPlist","AndroidConfig"],"mappings":";;;;;AA6BA,IAAM,mBAAA,GAAsB,mDAAA;AAC5B,IAAM,uBAAA,GAA0B,sDAAA;AAEhC,IAAM,YAAA,GAAyD,CAAC,MAAA,EAAQ,KAAA,KAAU;AAChF,EAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,mBAAA;AACxC,EAAA,MAAM,cAAA,GAAiB,OAAO,cAAA,IAAkB,uBAAA;AAGhD,EAAA,MAAM,OAAA,GAAUA,2BAAA,CAAc,MAAA,EAAQ,CAAC,GAAA,KAAQ;AAC7C,IAAA,GAAA,CAAI,UAAA,CAAW,wBAAA,GACb,GAAA,CAAI,UAAA,CAAW,wBAAA,IAA4B,UAAA;AAC7C,IAAA,GAAA,CAAI,UAAA,CAAW,4BAAA,GACb,GAAA,CAAI,UAAA,CAAW,4BAAA,IAAgC,cAAA;AACjD,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AAGD,EAAA,OAAOC,2BAAA,CAAc,WAAA,CAAY,eAAA,CAAgB,OAAA,EAAS;AAAA,IACxD,2BAAA;AAAA,IACA,iCAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH,CAAA;AAEA,IAAO,oBAAA,GAAQ","file":"withVideoSdk.cjs","sourcesContent":["import {\n AndroidConfig,\n withInfoPlist,\n type ConfigPlugin,\n} from \"@expo/config-plugins\";\n\n/**\n * Config plugin de Expo para `payfri-video-sdk`. Inyecta en el prebuild los permisos\n * de cámara y micrófono que exige el sistema operativo para usar getUserMedia\n * dentro del WebView de `<VideoCall>`:\n *\n * - iOS: NSCameraUsageDescription, NSMicrophoneUsageDescription (Info.plist)\n * - Android: CAMERA, RECORD_AUDIO, MODIFY_AUDIO_SETTINGS (AndroidManifest)\n *\n * MODIFY_AUDIO_SETTINGS es obligatorio: Chromium (el WebView) lo exige junto a\n * RECORD_AUDIO para abrir dispositivos de captura; sin él getUserMedia falla con\n * \"Could not start audio source\" aunque el usuario haya concedido el micrófono.\n *\n * El tenant lo activa en su `app.json` y no toca ningún archivo nativo:\n *\n * { \"plugins\": [[\"payfri-video-sdk\", { \"cameraText\": \"Para videollamadas\" }]] }\n */\nexport interface VideoSdkPluginProps {\n /** Texto del permiso de cámara mostrado por iOS. */\n cameraText?: string;\n /** Texto del permiso de micrófono mostrado por iOS. */\n microphoneText?: string;\n}\n\nconst DEFAULT_CAMERA_TEXT = \"Esta app usa la cámara para las videollamadas.\";\nconst DEFAULT_MICROPHONE_TEXT = \"Esta app usa el micrófono para las videollamadas.\";\n\nconst withVideoSdk: ConfigPlugin<VideoSdkPluginProps | void> = (config, props) => {\n const cameraText = props?.cameraText ?? DEFAULT_CAMERA_TEXT;\n const microphoneText = props?.microphoneText ?? DEFAULT_MICROPHONE_TEXT;\n\n // iOS: no pisar valores que el proyecto ya haya definido.\n const withIos = withInfoPlist(config, (cfg) => {\n cfg.modResults.NSCameraUsageDescription =\n cfg.modResults.NSCameraUsageDescription ?? cameraText;\n cfg.modResults.NSMicrophoneUsageDescription =\n cfg.modResults.NSMicrophoneUsageDescription ?? microphoneText;\n return cfg;\n });\n\n // Android: withPermissions deduplica, así que es seguro re-declararlos.\n return AndroidConfig.Permissions.withPermissions(withIos, [\n \"android.permission.CAMERA\",\n \"android.permission.RECORD_AUDIO\",\n \"android.permission.MODIFY_AUDIO_SETTINGS\",\n ]);\n};\n\nexport default withVideoSdk;\n"]}
@@ -6,7 +6,11 @@ import { ConfigPlugin } from '@expo/config-plugins';
6
6
  * dentro del WebView de `<VideoCall>`:
7
7
  *
8
8
  * - iOS: NSCameraUsageDescription, NSMicrophoneUsageDescription (Info.plist)
9
- * - Android: CAMERA, RECORD_AUDIO (AndroidManifest)
9
+ * - Android: CAMERA, RECORD_AUDIO, MODIFY_AUDIO_SETTINGS (AndroidManifest)
10
+ *
11
+ * MODIFY_AUDIO_SETTINGS es obligatorio: Chromium (el WebView) lo exige junto a
12
+ * RECORD_AUDIO para abrir dispositivos de captura; sin él getUserMedia falla con
13
+ * "Could not start audio source" aunque el usuario haya concedido el micrófono.
10
14
  *
11
15
  * El tenant lo activa en su `app.json` y no toca ningún archivo nativo:
12
16
  *
@@ -6,7 +6,11 @@ import { ConfigPlugin } from '@expo/config-plugins';
6
6
  * dentro del WebView de `<VideoCall>`:
7
7
  *
8
8
  * - iOS: NSCameraUsageDescription, NSMicrophoneUsageDescription (Info.plist)
9
- * - Android: CAMERA, RECORD_AUDIO (AndroidManifest)
9
+ * - Android: CAMERA, RECORD_AUDIO, MODIFY_AUDIO_SETTINGS (AndroidManifest)
10
+ *
11
+ * MODIFY_AUDIO_SETTINGS es obligatorio: Chromium (el WebView) lo exige junto a
12
+ * RECORD_AUDIO para abrir dispositivos de captura; sin él getUserMedia falla con
13
+ * "Could not start audio source" aunque el usuario haya concedido el micrófono.
10
14
  *
11
15
  * El tenant lo activa en su `app.json` y no toca ningún archivo nativo:
12
16
  *
@@ -13,7 +13,8 @@ var withVideoSdk = (config, props) => {
13
13
  });
14
14
  return AndroidConfig.Permissions.withPermissions(withIos, [
15
15
  "android.permission.CAMERA",
16
- "android.permission.RECORD_AUDIO"
16
+ "android.permission.RECORD_AUDIO",
17
+ "android.permission.MODIFY_AUDIO_SETTINGS"
17
18
  ]);
18
19
  };
19
20
  var withVideoSdk_default = withVideoSdk;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugin/withVideoSdk.ts"],"names":[],"mappings":";;;AAyBA,IAAM,mBAAA,GAAsB,mDAAA;AAC5B,IAAM,uBAAA,GAA0B,sDAAA;AAEhC,IAAM,YAAA,GAAyD,CAAC,MAAA,EAAQ,KAAA,KAAU;AAChF,EAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,mBAAA;AACxC,EAAA,MAAM,cAAA,GAAiB,OAAO,cAAA,IAAkB,uBAAA;AAGhD,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,MAAA,EAAQ,CAAC,GAAA,KAAQ;AAC7C,IAAA,GAAA,CAAI,UAAA,CAAW,wBAAA,GACb,GAAA,CAAI,UAAA,CAAW,wBAAA,IAA4B,UAAA;AAC7C,IAAA,GAAA,CAAI,UAAA,CAAW,4BAAA,GACb,GAAA,CAAI,UAAA,CAAW,4BAAA,IAAgC,cAAA;AACjD,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AAGD,EAAA,OAAO,aAAA,CAAc,WAAA,CAAY,eAAA,CAAgB,OAAA,EAAS;AAAA,IACxD,2BAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH,CAAA;AAEA,IAAO,oBAAA,GAAQ","file":"withVideoSdk.js","sourcesContent":["import {\n AndroidConfig,\n withInfoPlist,\n type ConfigPlugin,\n} from \"@expo/config-plugins\";\n\n/**\n * Config plugin de Expo para `payfri-video-sdk`. Inyecta en el prebuild los permisos\n * de cámara y micrófono que exige el sistema operativo para usar getUserMedia\n * dentro del WebView de `<VideoCall>`:\n *\n * - iOS: NSCameraUsageDescription, NSMicrophoneUsageDescription (Info.plist)\n * - Android: CAMERA, RECORD_AUDIO (AndroidManifest)\n *\n * El tenant lo activa en su `app.json` y no toca ningún archivo nativo:\n *\n * { \"plugins\": [[\"payfri-video-sdk\", { \"cameraText\": \"Para videollamadas\" }]] }\n */\nexport interface VideoSdkPluginProps {\n /** Texto del permiso de cámara mostrado por iOS. */\n cameraText?: string;\n /** Texto del permiso de micrófono mostrado por iOS. */\n microphoneText?: string;\n}\n\nconst DEFAULT_CAMERA_TEXT = \"Esta app usa la cámara para las videollamadas.\";\nconst DEFAULT_MICROPHONE_TEXT = \"Esta app usa el micrófono para las videollamadas.\";\n\nconst withVideoSdk: ConfigPlugin<VideoSdkPluginProps | void> = (config, props) => {\n const cameraText = props?.cameraText ?? DEFAULT_CAMERA_TEXT;\n const microphoneText = props?.microphoneText ?? DEFAULT_MICROPHONE_TEXT;\n\n // iOS: no pisar valores que el proyecto ya haya definido.\n const withIos = withInfoPlist(config, (cfg) => {\n cfg.modResults.NSCameraUsageDescription =\n cfg.modResults.NSCameraUsageDescription ?? cameraText;\n cfg.modResults.NSMicrophoneUsageDescription =\n cfg.modResults.NSMicrophoneUsageDescription ?? microphoneText;\n return cfg;\n });\n\n // Android: withPermissions deduplica, así que es seguro re-declararlos.\n return AndroidConfig.Permissions.withPermissions(withIos, [\n \"android.permission.CAMERA\",\n \"android.permission.RECORD_AUDIO\",\n ]);\n};\n\nexport default withVideoSdk;\n"]}
1
+ {"version":3,"sources":["../../src/plugin/withVideoSdk.ts"],"names":[],"mappings":";;;AA6BA,IAAM,mBAAA,GAAsB,mDAAA;AAC5B,IAAM,uBAAA,GAA0B,sDAAA;AAEhC,IAAM,YAAA,GAAyD,CAAC,MAAA,EAAQ,KAAA,KAAU;AAChF,EAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,mBAAA;AACxC,EAAA,MAAM,cAAA,GAAiB,OAAO,cAAA,IAAkB,uBAAA;AAGhD,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,MAAA,EAAQ,CAAC,GAAA,KAAQ;AAC7C,IAAA,GAAA,CAAI,UAAA,CAAW,wBAAA,GACb,GAAA,CAAI,UAAA,CAAW,wBAAA,IAA4B,UAAA;AAC7C,IAAA,GAAA,CAAI,UAAA,CAAW,4BAAA,GACb,GAAA,CAAI,UAAA,CAAW,4BAAA,IAAgC,cAAA;AACjD,IAAA,OAAO,GAAA;AAAA,EACT,CAAC,CAAA;AAGD,EAAA,OAAO,aAAA,CAAc,WAAA,CAAY,eAAA,CAAgB,OAAA,EAAS;AAAA,IACxD,2BAAA;AAAA,IACA,iCAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH,CAAA;AAEA,IAAO,oBAAA,GAAQ","file":"withVideoSdk.js","sourcesContent":["import {\n AndroidConfig,\n withInfoPlist,\n type ConfigPlugin,\n} from \"@expo/config-plugins\";\n\n/**\n * Config plugin de Expo para `payfri-video-sdk`. Inyecta en el prebuild los permisos\n * de cámara y micrófono que exige el sistema operativo para usar getUserMedia\n * dentro del WebView de `<VideoCall>`:\n *\n * - iOS: NSCameraUsageDescription, NSMicrophoneUsageDescription (Info.plist)\n * - Android: CAMERA, RECORD_AUDIO, MODIFY_AUDIO_SETTINGS (AndroidManifest)\n *\n * MODIFY_AUDIO_SETTINGS es obligatorio: Chromium (el WebView) lo exige junto a\n * RECORD_AUDIO para abrir dispositivos de captura; sin él getUserMedia falla con\n * \"Could not start audio source\" aunque el usuario haya concedido el micrófono.\n *\n * El tenant lo activa en su `app.json` y no toca ningún archivo nativo:\n *\n * { \"plugins\": [[\"payfri-video-sdk\", { \"cameraText\": \"Para videollamadas\" }]] }\n */\nexport interface VideoSdkPluginProps {\n /** Texto del permiso de cámara mostrado por iOS. */\n cameraText?: string;\n /** Texto del permiso de micrófono mostrado por iOS. */\n microphoneText?: string;\n}\n\nconst DEFAULT_CAMERA_TEXT = \"Esta app usa la cámara para las videollamadas.\";\nconst DEFAULT_MICROPHONE_TEXT = \"Esta app usa el micrófono para las videollamadas.\";\n\nconst withVideoSdk: ConfigPlugin<VideoSdkPluginProps | void> = (config, props) => {\n const cameraText = props?.cameraText ?? DEFAULT_CAMERA_TEXT;\n const microphoneText = props?.microphoneText ?? DEFAULT_MICROPHONE_TEXT;\n\n // iOS: no pisar valores que el proyecto ya haya definido.\n const withIos = withInfoPlist(config, (cfg) => {\n cfg.modResults.NSCameraUsageDescription =\n cfg.modResults.NSCameraUsageDescription ?? cameraText;\n cfg.modResults.NSMicrophoneUsageDescription =\n cfg.modResults.NSMicrophoneUsageDescription ?? microphoneText;\n return cfg;\n });\n\n // Android: withPermissions deduplica, así que es seguro re-declararlos.\n return AndroidConfig.Permissions.withPermissions(withIos, [\n \"android.permission.CAMERA\",\n \"android.permission.RECORD_AUDIO\",\n \"android.permission.MODIFY_AUDIO_SETTINGS\",\n ]);\n};\n\nexport default withVideoSdk;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payfri-video-sdk",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "SDK del microservicio de video: entry /server (apiKey, backend), /client (token, navegador) y /native (token, React Native)",
5
5
  "license": "MIT",
6
6
  "keywords": ["livekit", "video", "webrtc", "react-native", "expo", "sdk"],