@aippy/runtime 0.2.0-dev.3 → 0.2.0-dev.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/audio/index.js
CHANGED
package/dist/core/index.js
CHANGED
package/dist/index/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { A, E, c } from "../errors-DAz5_jDJ.js";
|
|
|
3
3
|
import { CameraAPI, FileSystemAPI, GeolocationAPI, SensorsAPI, camera, fileSystem, geolocation, sensors, vibrate } from "../device/index.js";
|
|
4
4
|
import { c as c2, a, P, b, p, d } from "../pwa-BkviTQoN.js";
|
|
5
5
|
import { a as a2, b as b2 } from "../useTweaks-mK5PAWOs.js";
|
|
6
|
-
import { c as c3, a as a3, i, b as b3, p as p2, u } from "../useAudioContext-
|
|
6
|
+
import { c as c3, a as a3, i, b as b3, p as p2, u } from "../useAudioContext-D9Y4gIw9.js";
|
|
7
7
|
export {
|
|
8
8
|
A as AippyRuntimeError,
|
|
9
9
|
CameraAPI,
|
|
@@ -214,6 +214,9 @@ function patchAudioContext(audioContext, options = {}) {
|
|
|
214
214
|
}
|
|
215
215
|
const originalDestination = audioContext.destination;
|
|
216
216
|
const streamDestination = audioContext.createMediaStreamDestination();
|
|
217
|
+
const gainNode = audioContext.createGain();
|
|
218
|
+
gainNode.gain.value = 1;
|
|
219
|
+
gainNode.connect(streamDestination);
|
|
217
220
|
const mediaElement = createHiddenMediaElement(mediaElementType, debug);
|
|
218
221
|
mediaElement.srcObject = streamDestination.stream;
|
|
219
222
|
document.body.appendChild(mediaElement);
|
|
@@ -225,15 +228,15 @@ function patchAudioContext(audioContext, options = {}) {
|
|
|
225
228
|
autoPauseOptions,
|
|
226
229
|
debug
|
|
227
230
|
);
|
|
228
|
-
silenceDetector.connect(
|
|
231
|
+
silenceDetector.connect(gainNode);
|
|
229
232
|
}
|
|
230
233
|
Object.defineProperty(audioContext, "destination", {
|
|
231
|
-
get: () =>
|
|
234
|
+
get: () => gainNode,
|
|
232
235
|
enumerable: true,
|
|
233
236
|
configurable: true
|
|
234
237
|
});
|
|
235
|
-
if (!("maxChannelCount" in
|
|
236
|
-
Object.defineProperty(
|
|
238
|
+
if (!("maxChannelCount" in gainNode)) {
|
|
239
|
+
Object.defineProperty(gainNode, "maxChannelCount", {
|
|
237
240
|
get: () => originalDestination.maxChannelCount,
|
|
238
241
|
enumerable: true
|
|
239
242
|
});
|
|
@@ -256,6 +259,12 @@ function patchAudioContext(audioContext, options = {}) {
|
|
|
256
259
|
console.log("[AudioContext] iOS unlock successful");
|
|
257
260
|
}
|
|
258
261
|
} catch (error) {
|
|
262
|
+
if (error instanceof DOMException && error.name === "NotAllowedError") {
|
|
263
|
+
if (debug) {
|
|
264
|
+
console.log("[AudioContext] Unlock requires user interaction");
|
|
265
|
+
}
|
|
266
|
+
throw error;
|
|
267
|
+
}
|
|
259
268
|
console.error("[AudioContext] Unlock failed:", error);
|
|
260
269
|
throw error;
|
|
261
270
|
}
|
|
@@ -312,20 +321,24 @@ function useAudioContext(options = {}) {
|
|
|
312
321
|
await audioContext.unlock();
|
|
313
322
|
setIsUnlocked(true);
|
|
314
323
|
} catch (error) {
|
|
324
|
+
if (error instanceof DOMException && error.name === "NotAllowedError") {
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
315
327
|
console.warn("Failed to unlock audio:", error);
|
|
316
328
|
}
|
|
317
329
|
};
|
|
318
330
|
}, [audioContext, isUnlocked]);
|
|
319
331
|
useEffect(() => {
|
|
320
332
|
if (!autoUnlock || !audioContext) return;
|
|
321
|
-
const handleInteraction = async () => {
|
|
333
|
+
const handleInteraction = async (event) => {
|
|
334
|
+
if (!event.isTrusted) return;
|
|
322
335
|
await unlockFnRef.current?.();
|
|
323
336
|
};
|
|
324
|
-
document.addEventListener("click", handleInteraction, { once: true });
|
|
325
|
-
document.addEventListener("touchstart", handleInteraction, { once: true });
|
|
337
|
+
document.addEventListener("click", handleInteraction, { once: true, capture: true });
|
|
338
|
+
document.addEventListener("touchstart", handleInteraction, { once: true, capture: true });
|
|
326
339
|
return () => {
|
|
327
|
-
document.removeEventListener("click", handleInteraction);
|
|
328
|
-
document.removeEventListener("touchstart", handleInteraction);
|
|
340
|
+
document.removeEventListener("click", handleInteraction, { capture: true });
|
|
341
|
+
document.removeEventListener("touchstart", handleInteraction, { capture: true });
|
|
329
342
|
};
|
|
330
343
|
}, [autoUnlock, audioContext]);
|
|
331
344
|
return {
|