kwikid-camera
Version:
KwikID's Camera Component
115 lines • 14.5 kB
JavaScript
import { __awaiter } from "tslib";
import { isEmptyValue } from "kwikid-toolkit";
// TOOLKIT
export function getDevicesList() {
return __awaiter(this, void 0, void 0, function* () {
const videoDevices = [];
try {
// Request permission to access media devices
const temporaryStream = yield navigator.mediaDevices.getUserMedia({
audio: true,
video: true
});
// Enumerate devices if permission is granted
yield navigator.mediaDevices.enumerateDevices().then((devices) => __awaiter(this, void 0, void 0, function* () {
for (const device of devices) {
if (device.kind === "videoinput") {
const constraints = {
video: { deviceId: { exact: device.deviceId } }
};
yield navigator.mediaDevices
.getUserMedia(constraints)
.then((stream) => {
const track = stream.getVideoTracks()[0];
const { facingMode } = track.getSettings();
videoDevices.push({
deviceId: device.deviceId,
groupId: device.groupId,
kind: device.kind,
label: device.label,
facingMode
});
// You can now identify whether it's a front or back camera
// Handle your logic accordingly
stream.getTracks().forEach((track) => track.stop());
})
.catch((error) => {
console.error("Error accessing camera:", error);
});
}
}
// Stop the stream after enumeration
temporaryStream.getTracks().forEach((track) => track.stop());
}));
return videoDevices;
}
catch (error) {
// Handle permission denied or other errors
console.info("Error accessing video devices:", error);
return videoDevices; // You might want to handle this differently based on your requirements
}
});
}
// TOOLKIT
export function getDevice(videoDevices, isFrontCamera) {
return __awaiter(this, void 0, void 0, function* () {
if (videoDevices.length === 0) {
return { deviceId: null, facingMode: null };
}
if (videoDevices.length === 1) {
return videoDevices[0];
}
if (videoDevices.length > 1) {
const frontCameraDevices = videoDevices.filter((videoDevice) => {
return videoDevice.facingMode === "user";
});
const backCameraDevices = videoDevices.filter((videoDevice) => {
return videoDevice.facingMode === "environment";
});
if (isFrontCamera) {
if (frontCameraDevices.length > 0) {
return frontCameraDevices[0];
}
return backCameraDevices[0];
}
if (!isFrontCamera) {
if (backCameraDevices.length > 0) {
return backCameraDevices[0];
}
return frontCameraDevices[0];
}
}
return { deviceId: null, facingMode: null };
});
}
// TOOLKIT
export function getBase64FromVideoFile(videoFile) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => {
const base64String = reader.result;
resolve(base64String); // Resolve the Promise with the base64 string
};
reader.onerror = (error) => {
reject(error); // Reject the Promise in case of an error
};
reader.readAsDataURL(
// This conversion is required due to browser differences and also video tag can't play certain type of formats.
new File([videoFile], "video.webm", {
type: "video/webm"
}));
});
}
export function getCorrectVideoFormat(video) {
if (isEmptyValue(video)) {
return "";
}
if (Array.isArray(video)) {
return video.find((vid) => typeof vid === "string" && vid.length !== 0);
}
if (typeof video === "string") {
return video;
}
return "";
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3dpa2lkLWNhbWVyYS1yZWNvcmQuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWNhbWVyYS9zcmMvbGliL2NvbXBvbmVudHMva3dpa2lkLWNhbWVyYS1yZWNvcmQva3dpa2lkLWNhbWVyYS1yZWNvcmQuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsVUFBVTtBQUNWLE1BQU0sVUFBZ0IsY0FBYzs7UUFDbEMsTUFBTSxZQUFZLEdBQVUsRUFBRSxDQUFDO1FBRS9CLElBQUk7WUFDRiw2Q0FBNkM7WUFDN0MsTUFBTSxlQUFlLEdBQUcsTUFBTSxTQUFTLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztnQkFDaEUsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDLENBQUM7WUFFSCw2Q0FBNkM7WUFDN0MsTUFBTSxTQUFTLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQU8sT0FBTyxFQUFFLEVBQUU7Z0JBQ3JFLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO29CQUM1QixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO3dCQUNoQyxNQUFNLFdBQVcsR0FBRzs0QkFDbEIsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRTt5QkFDaEQsQ0FBQzt3QkFFRixNQUFNLFNBQVMsQ0FBQyxZQUFZOzZCQUN6QixZQUFZLENBQUMsV0FBVyxDQUFDOzZCQUN6QixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTs0QkFDZixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3pDLE1BQU0s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QUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUVoQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUNuQixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBZ0IsQ0FBQztZQUM3QyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyw2Q0FBNkM7UUFDdEUsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHlDQUF5QztRQUMxRCxDQUFDLENBQUM7UUFFRixNQUFNLENBQUMsYUFBYTtRQUNsQixnSEFBZ0g7UUFDaEgsSUFBSSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxZQUFZLEVBQUU7WUFDbEMsSUFBSSxFQUFFLFlBQVk7U0FDbkIsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsS0FBVTtJQUM5QyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN2QixPQUFPLEVBQUUsQ0FBQztLQUNYO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDekU7SUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eVZhbHVlIH0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5cbi8vIFRPT0xLSVRcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VzTGlzdCgpOiBQcm9taXNlPGFueT4ge1xuICBjb25zdCB2aWRlb0RldmljZXM6IGFueVtdID0gW107XG5cbiAgdHJ5IHtcbiAgICAvLyBSZXF1ZXN0IHBlcm1pc3Npb24gdG8gYWNjZXNzIG1lZGlhIGRldmljZXNcbiAgICBjb25zdCB0ZW1wb3JhcnlTdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7XG4gICAgICBhdWRpbzogdHJ1ZSxcbiAgICAgIHZpZGVvOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvLyBFbnVtZXJhdGUgZGV2aWNlcyBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWRcbiAgICBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGFzeW5jIChkZXZpY2VzKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgICAgIGlmIChkZXZpY2Uua2luZCA9PT0gXCJ2aWRlb2lucHV0XCIpIHtcbiAgICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IHtcbiAgICAgICAgICAgIHZpZGVvOiB7IGRldmljZUlkOiB7IGV4YWN0OiBkZXZpY2UuZGV2aWNlSWQgfSB9XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXNcbiAgICAgICAgICAgIC5nZXRVc2VyTWVkaWEoY29uc3RyYWludHMpXG4gICAgICAgICAgICAudGhlbigoc3RyZWFtKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrID0gc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF07XG4gICAgICAgICAgICAgIGNvbnN0IHsgZmFjaW5nTW9kZSB9ID0gdHJhY2suZ2V0U2V0dGluZ3MoKTtcblxuICAgICAgICAgICAgICB2aWRlb0RldmljZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZGV2aWNlSWQ6IGRldmljZS5kZXZpY2VJZCxcbiAgICAgICAgICAgICAgICBncm91cElkOiBkZXZpY2UuZ3JvdXBJZCxcbiAgICAgICAgICAgICAgICBraW5kOiBkZXZpY2Uua2luZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogZGV2aWNlLmxhYmVsLFxuICAgICAgICAgICAgICAgIGZhY2luZ01vZGVcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgLy8gWW91IGNhbiBub3cgaWRlbnRpZnkgd2hldGhlciBpdCdzIGEgZnJvbnQgb3IgYmFjayBjYW1lcmFcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIHlvdXIgbG9naWMgYWNjb3JkaW5nbHlcblxuICAgICAgICAgICAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCgodHJhY2spID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgYWNjZXNzaW5nIGNhbWVyYTpcIiwgZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3RvcCB0aGUgc3RyZWFtIGFmdGVyIGVudW1lcmF0aW9uXG4gICAgICB0ZW1wb3JhcnlTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCgodHJhY2s6IGFueSkgPT4gdHJhY2suc3RvcCgpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB2aWRlb0RldmljZXM7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gSGFuZGxlIHBlcm1pc3Npb24gZGVuaWVkIG9yIG90aGVyIGVycm9yc1xuICAgIGNvbnNvbGUuaW5mbyhcIkVycm9yIGFjY2Vzc2luZyB2aWRlbyBkZXZpY2VzOlwiLCBlcnJvcik7XG5cbiAgICByZXR1cm4gdmlkZW9EZXZpY2VzOyAvLyBZb3UgbWlnaHQgd2FudCB0byBoYW5kbGUgdGhpcyBkaWZmZXJlbnRseSBiYXNlZCBvbiB5b3VyIHJlcXVpcmVtZW50c1xuICB9XG59XG5cbi8vIFRPT0xLSVRcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2UoXG4gIHZpZGVvRGV2aWNlczogYW55LFxuICBpc0Zyb250Q2FtZXJhOiBib29sZWFuXG4pOiBQcm9taXNlPGFueT4ge1xuICBpZiAodmlkZW9EZXZpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7IGRldmljZUlkOiBudWxsLCBmYWNpbmdNb2RlOiBudWxsIH07XG4gIH1cbiAgaWYgKHZpZGVvRGV2aWNlcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gdmlkZW9EZXZpY2VzWzBdO1xuICB9XG4gIGlmICh2aWRlb0RldmljZXMubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IGZyb250Q2FtZXJhRGV2aWNlcyA9IHZpZGVvRGV2aWNlcy5maWx0ZXIoKHZpZGVvRGV2aWNlOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiB2aWRlb0RldmljZS5mYWNpbmdNb2RlID09PSBcInVzZXJcIjtcbiAgICB9KTtcbiAgICBjb25zdCBiYWNrQ2FtZXJhRGV2aWNlcyA9IHZpZGVvRGV2aWNlcy5maWx0ZXIoKHZpZGVvRGV2aWNlOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiB2aWRlb0RldmljZS5mYWNpbmdNb2RlID09PSBcImVudmlyb25tZW50XCI7XG4gICAgfSk7XG4gICAgaWYgKGlzRnJvbnRDYW1lcmEpIHtcbiAgICAgIGlmIChmcm9udENhbWVyYURldmljZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gZnJvbnRDYW1lcmFEZXZpY2VzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhY2tDYW1lcmFEZXZpY2VzWzBdO1xuICAgIH1cbiAgICBpZiAoIWlzRnJvbnRDYW1lcmEpIHtcbiAgICAgIGlmIChiYWNrQ2FtZXJhRGV2aWNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBiYWNrQ2FtZXJhRGV2aWNlc1swXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9udENhbWVyYURldmljZXNbMF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgZGV2aWNlSWQ6IG51bGwsIGZhY2luZ01vZGU6IG51bGwgfTtcbn1cblxuLy8gVE9PTEtJVFxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhc2U2NEZyb21WaWRlb0ZpbGUodmlkZW9GaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGJhc2U2NFN0cmluZyA9IHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgcmVzb2x2ZShiYXNlNjRTdHJpbmcpOyAvLyBSZXNvbHZlIHRoZSBQcm9taXNlIHdpdGggdGhlIGJhc2U2NCBzdHJpbmdcbiAgICB9O1xuXG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgIHJlamVjdChlcnJvcik7IC8vIFJlamVjdCB0aGUgUHJvbWlzZSBpbiBjYXNlIG9mIGFuIGVycm9yXG4gICAgfTtcblxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKFxuICAgICAgLy8gVGhpcyBjb252ZXJzaW9uIGlzIHJlcXVpcmVkIGR1ZSB0byBicm93c2VyIGRpZmZlcmVuY2VzIGFuZCBhbHNvIHZpZGVvIHRhZyBjYW4ndCBwbGF5IGNlcnRhaW4gdHlwZSBvZiBmb3JtYXRzLlxuICAgICAgbmV3IEZpbGUoW3ZpZGVvRmlsZV0sIFwidmlkZW8ud2VibVwiLCB7XG4gICAgICAgIHR5cGU6IFwidmlkZW8vd2VibVwiXG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29ycmVjdFZpZGVvRm9ybWF0KHZpZGVvOiBhbnkpOiBzdHJpbmcge1xuICBpZiAoaXNFbXB0eVZhbHVlKHZpZGVvKSkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW8pKSB7XG4gICAgcmV0dXJuIHZpZGVvLmZpbmQoKHZpZCkgPT4gdHlwZW9mIHZpZCA9PT0gXCJzdHJpbmdcIiAmJiB2aWQubGVuZ3RoICE9PSAwKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmlkZW8gPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gdmlkZW87XG4gIH1cblxuICByZXR1cm4gXCJcIjtcbn1cbiJdfQ==