biometry-sdk 2.1.2 → 2.2.0
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 +13 -160
- package/dist/index.d.ts +0 -1
- package/package.json +2 -10
- package/dist/react.js +0 -1328
- package/dist/react.js.map +0 -1
- package/dist/ui/biometry-enrollment.d.ts +0 -24
- package/dist/ui/doc-auth.d.ts +0 -23
- package/dist/ui/index.d.ts +0 -3
- package/dist/ui/process-video.d.ts +0 -50
- package/dist/ui/react/BiometryEnrollment.d.ts +0 -16
- package/dist/ui/react/ProcessVideo.d.ts +0 -25
- package/dist/ui/react/index.d.ts +0 -4
- package/dist/ui/types.d.ts +0 -12
- package/dist/ui.js +0 -1480
- package/dist/ui.js.map +0 -1
package/dist/ui.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sources":["../src/ui/types.ts","../src/ui/biometry-enrollment.ts","../node_modules/fix-webm-duration/fix-webm-duration.js","../src/ui/process-video.ts","../src/ui/doc-auth.ts"],"sourcesContent":["export enum BiometryAttributes {\n ApiKey = 'api-key',\n UserFullname = 'user-fullname',\n}\n\nexport enum BiometryEnrollmentState {\n Loading = 'loading',\n Success = 'success',\n ErrorNoFace = 'error-no-face',\n ErrorMultipleFaces = 'error-multiple-faces',\n ErrorNotCentered = 'error-not-centered',\n ErrorOther = 'error-other',\n}\n","import { BiometryAttributes, BiometryEnrollmentState } from \"./types.js\";\n\nexport class BiometryEnrollment extends HTMLElement {\n private readonly shadow: ShadowRoot;\n private videoElement: HTMLVideoElement | null = null;\n private canvasElement: HTMLCanvasElement | null = null;\n private captureButton: HTMLButtonElement | null = null;\n\n private resultCode?: number;\n private description?: string;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n\n this.toggleState = this.toggleState.bind(this);\n this.capturePhoto = this.capturePhoto.bind(this);\n }\n\n static get observedAttributes(): string[] {\n return Object.values(BiometryAttributes);\n }\n\n get endpoint(): string | null {\n return this.getAttribute(\"endpoint\");\n }\n\n set endpoint(value: string | null) {\n const current = this.getAttribute(\"endpoint\");\n if (value !== null && value !== current) {\n this.setAttribute(\"endpoint\", value);\n } else if (value === null && current !== null) {\n this.removeAttribute(\"endpoint\");\n }\n }\n\n get userFullname(): string | null {\n return this.getAttribute(\"user-fullname\");\n }\n\n set userFullname(value: string | null) {\n if (value) {\n this.setAttribute(\"user-fullname\", value);\n } else {\n this.removeAttribute(\"user-fullname\");\n }\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n if (name === \"endpoint\" || name === \"user-fullname\") {\n if (name === \"endpoint\") {\n this.endpoint = newValue;\n } else if (name === \"user-fullname\") {\n this.userFullname = newValue;\n }\n this.validateAttributes();\n }\n }\n\n connectedCallback(): void {\n this.validateAttributes();\n this.init();\n }\n\n disconnectedCallback(): void {\n this.cleanup();\n if (this.captureButton) {\n this.captureButton.removeEventListener(\"click\", this.capturePhoto);\n }\n }\n\n validateAttributes(): void {\n if (!this.endpoint) {\n console.error(\"Endpoint is required.\");\n this.toggleState(BiometryEnrollmentState.ErrorOther);\n return;\n }\n\n if (!this.userFullname) {\n console.error(\"User fullname is required.\");\n this.toggleState(BiometryEnrollmentState.ErrorOther);\n return;\n }\n }\n\n init(): void {\n this.shadow.innerHTML = `\n <style>\n .wrapper {\n position: relative;\n }\n video {\n transform: scaleX(-1); /* Flip video for preview */\n max-width: 100%;\n border-radius: var(--border-radius, 8px);\n }\n canvas {\n display: none;\n }\n </style>\n <div class=\"wrapper\">\n <slot name=\"video\">\n <video id=\"video\" autoplay playsinline></video>\n </slot>\n <slot name=\"canvas\">\n <canvas id=\"canvas\" style=\"display: none;\"></canvas>\n </slot>\n <slot name=\"button\">\n <button id=\"button\">Capture Photo</button>\n </slot>\n <div class=\"status\">\n <slot name=\"loading\" class=\"loading\"></slot>\n <slot name=\"success\" class=\"success\"></slot>\n <slot name=\"error-no-face\" class=\"error-no-face\"></slot>\n <slot name=\"error-multiple-faces\" class=\"error-multiple-faces\"></slot>\n <slot name=\"error-not-centered\" class=\"error-not-centered\"></slot>\n <slot name=\"error-other\" class=\"error-other\"></slot>\n </div>\n </div>\n `;\n\n this.attachSlotListeners();\n this.setupCamera();\n this.toggleState(\"\");\n }\n\n public cleanup(): void {\n if (this.videoElement?.srcObject) {\n const tracks = (this.videoElement.srcObject as MediaStream).getTracks();\n tracks.forEach((track) => track.stop());\n }\n if (this.videoElement) {\n this.videoElement.srcObject = null;\n }\n }\n\n private attachSlotListeners(): void {\n const videoSlot = this.shadow.querySelector('slot[name=\"video\"]') as HTMLSlotElement;\n const canvasSlot = this.shadow.querySelector('slot[name=\"canvas\"]') as HTMLSlotElement;\n const buttonSlot = this.shadow.querySelector('slot[name=\"button\"]') as HTMLSlotElement;\n\n const assignedVideoElements = videoSlot.assignedElements();\n this.videoElement = (assignedVideoElements.length > 0 ? assignedVideoElements[0] : null) as HTMLVideoElement || this.shadow.querySelector(\"#video\") as HTMLVideoElement;\n\n const assignedCanvasElements = canvasSlot.assignedElements();\n this.canvasElement = (assignedCanvasElements.length > 0 ? assignedCanvasElements[0] : null) as HTMLCanvasElement || this.shadow.querySelector(\"#canvas\") as HTMLCanvasElement;\n\n const assignedButtonElements = buttonSlot.assignedElements();\n this.captureButton = (assignedButtonElements.length > 0 ? assignedButtonElements[0] : null) as HTMLButtonElement || this.shadow.querySelector(\"#button\") as HTMLButtonElement;\n\n if (!this.videoElement) {\n console.error(\"Video element is missing.\");\n return;\n }\n\n if (!this.captureButton) {\n console.error(\"Capture button is missing.\");\n return;\n } else {\n this.captureButton.addEventListener(\"click\", this.capturePhoto);\n }\n }\n\n private setupCamera(): void {\n if (!this.videoElement) {\n console.error(\"Video element is missing.\");\n return;\n }\n\n navigator.mediaDevices\n .getUserMedia({ video: true })\n .then((stream) => {\n this.videoElement!.srcObject = stream;\n })\n .catch((error) => {\n console.error(\"Error accessing camera:\", error);\n });\n }\n\n private async capturePhoto(): Promise<void> {\n try {\n if (!this.videoElement || !this.canvasElement) {\n console.error(\"Essential elements are not initialized.\");\n return;\n }\n\n const context = this.canvasElement.getContext(\"2d\");\n this.canvasElement.width = this.videoElement.videoWidth;\n this.canvasElement.height = this.videoElement.videoHeight;\n\n context!.drawImage(\n this.videoElement,\n 0,\n 0,\n this.canvasElement.width,\n this.canvasElement.height\n );\n\n this.toggleState(\"loading\");\n\n this.canvasElement.toBlob(async (blob) => {\n try {\n if (!blob) {\n console.error(\"Failed to capture photo.\");\n this.toggleState(BiometryEnrollmentState.ErrorOther);\n return;\n }\n\n const file = new File([blob], \"onboard-face.jpg\", { type: \"image/jpeg\" });\n const formData = new FormData();\n formData.append('photo', file);\n formData.append('userFullname', this.userFullname || '');\n\n const response = await fetch(this.endpoint!, {\n method: 'POST',\n body: formData\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const result = await response.json();\n this.resultCode = result?.code;\n this.description = result?.description || \"Unknown error occurred.\";\n\n switch (this.resultCode) {\n case 0:\n this.toggleState(BiometryEnrollmentState.Success);\n break;\n case 1:\n this.toggleState(BiometryEnrollmentState.ErrorNoFace);\n break;\n case 2:\n this.toggleState(BiometryEnrollmentState.ErrorMultipleFaces);\n break;\n case 3:\n this.toggleState(BiometryEnrollmentState.ErrorNotCentered);\n break;\n default:\n this.toggleState(BiometryEnrollmentState.ErrorOther);\n }\n\n console.log(\"Enrollment result:\", result);\n } catch (error) {\n console.error(\"Error in toBlob callback:\", error);\n this.toggleState(BiometryEnrollmentState.ErrorOther);\n }\n }, \"image/jpeg\");\n } catch (error) {\n console.error(\"Error capturing photo:\", error);\n this.toggleState(BiometryEnrollmentState.ErrorOther);\n }\n }\n\n private toggleState(state: BiometryEnrollmentState | string): void {\n const slots = [\n BiometryEnrollmentState.Loading,\n BiometryEnrollmentState.Success,\n BiometryEnrollmentState.ErrorNoFace,\n BiometryEnrollmentState.ErrorMultipleFaces,\n BiometryEnrollmentState.ErrorNotCentered,\n BiometryEnrollmentState.ErrorOther,\n ];\n\n slots.forEach((slotName) => {\n const slot = this.shadow.querySelector(`slot[name=\"${slotName}\"]`) as HTMLElement;\n if (slot) {\n slot.style.display = slotName === state ? \"block\" : \"none\";\n }\n });\n }\n}\n\ncustomElements.define(\"biometry-enrollment\", BiometryEnrollment);","(function (name, definition) {\n if (typeof define === 'function' && define.amd) { // RequireJS / AMD\n define(definition);\n } else if (typeof module !== 'undefined' && module.exports) { // CommonJS / Node.js\n module.exports = definition();\n } else { // Direct include\n window.ysFixWebmDuration = definition();\n }\n})('fix-webm-duration', function () {\n /*\n * This is the list of possible WEBM file sections by their IDs.\n * Possible types: Container, Binary, Uint, Int, String, Float, Date\n */\n var sections = {\n 0xa45dfa3: { name: 'EBML', type: 'Container' },\n 0x286: { name: 'EBMLVersion', type: 'Uint' },\n 0x2f7: { name: 'EBMLReadVersion', type: 'Uint' },\n 0x2f2: { name: 'EBMLMaxIDLength', type: 'Uint' },\n 0x2f3: { name: 'EBMLMaxSizeLength', type: 'Uint' },\n 0x282: { name: 'DocType', type: 'String' },\n 0x287: { name: 'DocTypeVersion', type: 'Uint' },\n 0x285: { name: 'DocTypeReadVersion', type: 'Uint' },\n 0x6c: { name: 'Void', type: 'Binary' },\n 0x3f: { name: 'CRC-32', type: 'Binary' },\n 0xb538667: { name: 'SignatureSlot', type: 'Container' },\n 0x3e8a: { name: 'SignatureAlgo', type: 'Uint' },\n 0x3e9a: { name: 'SignatureHash', type: 'Uint' },\n 0x3ea5: { name: 'SignaturePublicKey', type: 'Binary' },\n 0x3eb5: { name: 'Signature', type: 'Binary' },\n 0x3e5b: { name: 'SignatureElements', type: 'Container' },\n 0x3e7b: { name: 'SignatureElementList', type: 'Container' },\n 0x2532: { name: 'SignedElement', type: 'Binary' },\n 0x8538067: { name: 'Segment', type: 'Container' },\n 0x14d9b74: { name: 'SeekHead', type: 'Container' },\n 0xdbb: { name: 'Seek', type: 'Container' },\n 0x13ab: { name: 'SeekID', type: 'Binary' },\n 0x13ac: { name: 'SeekPosition', type: 'Uint' },\n 0x549a966: { name: 'Info', type: 'Container' },\n 0x33a4: { name: 'SegmentUID', type: 'Binary' },\n 0x3384: { name: 'SegmentFilename', type: 'String' },\n 0x1cb923: { name: 'PrevUID', type: 'Binary' },\n 0x1c83ab: { name: 'PrevFilename', type: 'String' },\n 0x1eb923: { name: 'NextUID', type: 'Binary' },\n 0x1e83bb: { name: 'NextFilename', type: 'String' },\n 0x444: { name: 'SegmentFamily', type: 'Binary' },\n 0x2924: { name: 'ChapterTranslate', type: 'Container' },\n 0x29fc: { name: 'ChapterTranslateEditionUID', type: 'Uint' },\n 0x29bf: { name: 'ChapterTranslateCodec', type: 'Uint' },\n 0x29a5: { name: 'ChapterTranslateID', type: 'Binary' },\n 0xad7b1: { name: 'TimecodeScale', type: 'Uint' },\n 0x489: { name: 'Duration', type: 'Float' },\n 0x461: { name: 'DateUTC', type: 'Date' },\n 0x3ba9: { name: 'Title', type: 'String' },\n 0xd80: { name: 'MuxingApp', type: 'String' },\n 0x1741: { name: 'WritingApp', type: 'String' },\n // 0xf43b675: { name: 'Cluster', type: 'Container' },\n 0x67: { name: 'Timecode', type: 'Uint' },\n 0x1854: { name: 'SilentTracks', type: 'Container' },\n 0x18d7: { name: 'SilentTrackNumber', type: 'Uint' },\n 0x27: { name: 'Position', type: 'Uint' },\n 0x2b: { name: 'PrevSize', type: 'Uint' },\n 0x23: { name: 'SimpleBlock', type: 'Binary' },\n 0x20: { name: 'BlockGroup', type: 'Container' },\n 0x21: { name: 'Block', type: 'Binary' },\n 0x22: { name: 'BlockVirtual', type: 'Binary' },\n 0x35a1: { name: 'BlockAdditions', type: 'Container' },\n 0x26: { name: 'BlockMore', type: 'Container' },\n 0x6e: { name: 'BlockAddID', type: 'Uint' },\n 0x25: { name: 'BlockAdditional', type: 'Binary' },\n 0x1b: { name: 'BlockDuration', type: 'Uint' },\n 0x7a: { name: 'ReferencePriority', type: 'Uint' },\n 0x7b: { name: 'ReferenceBlock', type: 'Int' },\n 0x7d: { name: 'ReferenceVirtual', type: 'Int' },\n 0x24: { name: 'CodecState', type: 'Binary' },\n 0x35a2: { name: 'DiscardPadding', type: 'Int' },\n 0xe: { name: 'Slices', type: 'Container' },\n 0x68: { name: 'TimeSlice', type: 'Container' },\n 0x4c: { name: 'LaceNumber', type: 'Uint' },\n 0x4d: { name: 'FrameNumber', type: 'Uint' },\n 0x4b: { name: 'BlockAdditionID', type: 'Uint' },\n 0x4e: { name: 'Delay', type: 'Uint' },\n 0x4f: { name: 'SliceDuration', type: 'Uint' },\n 0x48: { name: 'ReferenceFrame', type: 'Container' },\n 0x49: { name: 'ReferenceOffset', type: 'Uint' },\n 0x4a: { name: 'ReferenceTimeCode', type: 'Uint' },\n 0x2f: { name: 'EncryptedBlock', type: 'Binary' },\n 0x654ae6b: { name: 'Tracks', type: 'Container' },\n 0x2e: { name: 'TrackEntry', type: 'Container' },\n 0x57: { name: 'TrackNumber', type: 'Uint' },\n 0x33c5: { name: 'TrackUID', type: 'Uint' },\n 0x3: { name: 'TrackType', type: 'Uint' },\n 0x39: { name: 'FlagEnabled', type: 'Uint' },\n 0x8: { name: 'FlagDefault', type: 'Uint' },\n 0x15aa: { name: 'FlagForced', type: 'Uint' },\n 0x1c: { name: 'FlagLacing', type: 'Uint' },\n 0x2de7: { name: 'MinCache', type: 'Uint' },\n 0x2df8: { name: 'MaxCache', type: 'Uint' },\n 0x3e383: { name: 'DefaultDuration', type: 'Uint' },\n 0x34e7a: { name: 'DefaultDecodedFieldDuration', type: 'Uint' },\n 0x3314f: { name: 'TrackTimecodeScale', type: 'Float' },\n 0x137f: { name: 'TrackOffset', type: 'Int' },\n 0x15ee: { name: 'MaxBlockAdditionID', type: 'Uint' },\n 0x136e: { name: 'Name', type: 'String' },\n 0x2b59c: { name: 'Language', type: 'String' },\n 0x6: { name: 'CodecID', type: 'String' },\n 0x23a2: { name: 'CodecPrivate', type: 'Binary' },\n 0x58688: { name: 'CodecName', type: 'String' },\n 0x3446: { name: 'AttachmentLink', type: 'Uint' },\n 0x1a9697: { name: 'CodecSettings', type: 'String' },\n 0x1b4040: { name: 'CodecInfoURL', type: 'String' },\n 0x6b240: { name: 'CodecDownloadURL', type: 'String' },\n 0x2a: { name: 'CodecDecodeAll', type: 'Uint' },\n 0x2fab: { name: 'TrackOverlay', type: 'Uint' },\n 0x16aa: { name: 'CodecDelay', type: 'Uint' },\n 0x16bb: { name: 'SeekPreRoll', type: 'Uint' },\n 0x2624: { name: 'TrackTranslate', type: 'Container' },\n 0x26fc: { name: 'TrackTranslateEditionUID', type: 'Uint' },\n 0x26bf: { name: 'TrackTranslateCodec', type: 'Uint' },\n 0x26a5: { name: 'TrackTranslateTrackID', type: 'Binary' },\n 0x60: { name: 'Video', type: 'Container' },\n 0x1a: { name: 'FlagInterlaced', type: 'Uint' },\n 0x13b8: { name: 'StereoMode', type: 'Uint' },\n 0x13c0: { name: 'AlphaMode', type: 'Uint' },\n 0x13b9: { name: 'OldStereoMode', type: 'Uint' },\n 0x30: { name: 'PixelWidth', type: 'Uint' },\n 0x3a: { name: 'PixelHeight', type: 'Uint' },\n 0x14aa: { name: 'PixelCropBottom', type: 'Uint' },\n 0x14bb: { name: 'PixelCropTop', type: 'Uint' },\n 0x14cc: { name: 'PixelCropLeft', type: 'Uint' },\n 0x14dd: { name: 'PixelCropRight', type: 'Uint' },\n 0x14b0: { name: 'DisplayWidth', type: 'Uint' },\n 0x14ba: { name: 'DisplayHeight', type: 'Uint' },\n 0x14b2: { name: 'DisplayUnit', type: 'Uint' },\n 0x14b3: { name: 'AspectRatioType', type: 'Uint' },\n 0xeb524: { name: 'ColourSpace', type: 'Binary' },\n 0xfb523: { name: 'GammaValue', type: 'Float' },\n 0x383e3: { name: 'FrameRate', type: 'Float' },\n 0x61: { name: 'Audio', type: 'Container' },\n 0x35: { name: 'SamplingFrequency', type: 'Float' },\n 0x38b5: { name: 'OutputSamplingFrequency', type: 'Float' },\n 0x1f: { name: 'Channels', type: 'Uint' },\n 0x3d7b: { name: 'ChannelPositions', type: 'Binary' },\n 0x2264: { name: 'BitDepth', type: 'Uint' },\n 0x62: { name: 'TrackOperation', type: 'Container' },\n 0x63: { name: 'TrackCombinePlanes', type: 'Container' },\n 0x64: { name: 'TrackPlane', type: 'Container' },\n 0x65: { name: 'TrackPlaneUID', type: 'Uint' },\n 0x66: { name: 'TrackPlaneType', type: 'Uint' },\n 0x69: { name: 'TrackJoinBlocks', type: 'Container' },\n 0x6d: { name: 'TrackJoinUID', type: 'Uint' },\n 0x40: { name: 'TrickTrackUID', type: 'Uint' },\n 0x41: { name: 'TrickTrackSegmentUID', type: 'Binary' },\n 0x46: { name: 'TrickTrackFlag', type: 'Uint' },\n 0x47: { name: 'TrickMasterTrackUID', type: 'Uint' },\n 0x44: { name: 'TrickMasterTrackSegmentUID', type: 'Binary' },\n 0x2d80: { name: 'ContentEncodings', type: 'Container' },\n 0x2240: { name: 'ContentEncoding', type: 'Container' },\n 0x1031: { name: 'ContentEncodingOrder', type: 'Uint' },\n 0x1032: { name: 'ContentEncodingScope', type: 'Uint' },\n 0x1033: { name: 'ContentEncodingType', type: 'Uint' },\n 0x1034: { name: 'ContentCompression', type: 'Container' },\n 0x254: { name: 'ContentCompAlgo', type: 'Uint' },\n 0x255: { name: 'ContentCompSettings', type: 'Binary' },\n 0x1035: { name: 'ContentEncryption', type: 'Container' },\n 0x7e1: { name: 'ContentEncAlgo', type: 'Uint' },\n 0x7e2: { name: 'ContentEncKeyID', type: 'Binary' },\n 0x7e3: { name: 'ContentSignature', type: 'Binary' },\n 0x7e4: { name: 'ContentSigKeyID', type: 'Binary' },\n 0x7e5: { name: 'ContentSigAlgo', type: 'Uint' },\n 0x7e6: { name: 'ContentSigHashAlgo', type: 'Uint' },\n 0xc53bb6b: { name: 'Cues', type: 'Container' },\n 0x3b: { name: 'CuePoint', type: 'Container' },\n 0x33: { name: 'CueTime', type: 'Uint' },\n 0x37: { name: 'CueTrackPositions', type: 'Container' },\n 0x77: { name: 'CueTrack', type: 'Uint' },\n 0x71: { name: 'CueClusterPosition', type: 'Uint' },\n 0x70: { name: 'CueRelativePosition', type: 'Uint' },\n 0x32: { name: 'CueDuration', type: 'Uint' },\n 0x1378: { name: 'CueBlockNumber', type: 'Uint' },\n 0x6a: { name: 'CueCodecState', type: 'Uint' },\n 0x5b: { name: 'CueReference', type: 'Container' },\n 0x16: { name: 'CueRefTime', type: 'Uint' },\n 0x17: { name: 'CueRefCluster', type: 'Uint' },\n 0x135f: { name: 'CueRefNumber', type: 'Uint' },\n 0x6b: { name: 'CueRefCodecState', type: 'Uint' },\n 0x941a469: { name: 'Attachments', type: 'Container' },\n 0x21a7: { name: 'AttachedFile', type: 'Container' },\n 0x67e: { name: 'FileDescription', type: 'String' },\n 0x66e: { name: 'FileName', type: 'String' },\n 0x660: { name: 'FileMimeType', type: 'String' },\n 0x65c: { name: 'FileData', type: 'Binary' },\n 0x6ae: { name: 'FileUID', type: 'Uint' },\n 0x675: { name: 'FileReferral', type: 'Binary' },\n 0x661: { name: 'FileUsedStartTime', type: 'Uint' },\n 0x662: { name: 'FileUsedEndTime', type: 'Uint' },\n 0x43a770: { name: 'Chapters', type: 'Container' },\n 0x5b9: { name: 'EditionEntry', type: 'Container' },\n 0x5bc: { name: 'EditionUID', type: 'Uint' },\n 0x5bd: { name: 'EditionFlagHidden', type: 'Uint' },\n 0x5db: { name: 'EditionFlagDefault', type: 'Uint' },\n 0x5dd: { name: 'EditionFlagOrdered', type: 'Uint' },\n 0x36: { name: 'ChapterAtom', type: 'Container' },\n 0x33c4: { name: 'ChapterUID', type: 'Uint' },\n 0x1654: { name: 'ChapterStringUID', type: 'String' },\n 0x11: { name: 'ChapterTimeStart', type: 'Uint' },\n 0x12: { name: 'ChapterTimeEnd', type: 'Uint' },\n 0x18: { name: 'ChapterFlagHidden', type: 'Uint' },\n 0x598: { name: 'ChapterFlagEnabled', type: 'Uint' },\n 0x2e67: { name: 'ChapterSegmentUID', type: 'Binary' },\n 0x2ebc: { name: 'ChapterSegmentEditionUID', type: 'Uint' },\n 0x23c3: { name: 'ChapterPhysicalEquiv', type: 'Uint' },\n 0xf: { name: 'ChapterTrack', type: 'Container' },\n 0x9: { name: 'ChapterTrackNumber', type: 'Uint' },\n 0x0: { name: 'ChapterDisplay', type: 'Container' },\n 0x5: { name: 'ChapString', type: 'String' },\n 0x37c: { name: 'ChapLanguage', type: 'String' },\n 0x37e: { name: 'ChapCountry', type: 'String' },\n 0x2944: { name: 'ChapProcess', type: 'Container' },\n 0x2955: { name: 'ChapProcessCodecID', type: 'Uint' },\n 0x50d: { name: 'ChapProcessPrivate', type: 'Binary' },\n 0x2911: { name: 'ChapProcessCommand', type: 'Container' },\n 0x2922: { name: 'ChapProcessTime', type: 'Uint' },\n 0x2933: { name: 'ChapProcessData', type: 'Binary' },\n 0x254c367: { name: 'Tags', type: 'Container' },\n 0x3373: { name: 'Tag', type: 'Container' },\n 0x23c0: { name: 'Targets', type: 'Container' },\n 0x28ca: { name: 'TargetTypeValue', type: 'Uint' },\n 0x23ca: { name: 'TargetType', type: 'String' },\n 0x23c5: { name: 'TagTrackUID', type: 'Uint' },\n 0x23c9: { name: 'TagEditionUID', type: 'Uint' },\n 0x23c4: { name: 'TagChapterUID', type: 'Uint' },\n 0x23c6: { name: 'TagAttachmentUID', type: 'Uint' },\n 0x27c8: { name: 'SimpleTag', type: 'Container' },\n 0x5a3: { name: 'TagName', type: 'String' },\n 0x47a: { name: 'TagLanguage', type: 'String' },\n 0x484: { name: 'TagDefault', type: 'Uint' },\n 0x487: { name: 'TagString', type: 'String' },\n 0x485: { name: 'TagBinary', type: 'Binary' }\n };\n\n function doInherit(newClass, baseClass) {\n newClass.prototype = Object.create(baseClass.prototype);\n newClass.prototype.constructor = newClass;\n }\n\n function WebmBase(name, type) {\n this.name = name || 'Unknown';\n this.type = type || 'Unknown';\n }\n WebmBase.prototype.updateBySource = function() { };\n WebmBase.prototype.setSource = function(source) {\n this.source = source;\n this.updateBySource();\n };\n WebmBase.prototype.updateByData = function() { };\n WebmBase.prototype.setData = function(data) {\n this.data = data;\n this.updateByData();\n };\n\n function WebmUint(name, type) {\n WebmBase.call(this, name, type || 'Uint');\n }\n doInherit(WebmUint, WebmBase);\n function padHex(hex) {\n return hex.length % 2 === 1 ? '0' + hex : hex;\n }\n WebmUint.prototype.updateBySource = function() {\n // use hex representation of a number instead of number value\n this.data = '';\n for (var i = 0; i < this.source.length; i++) {\n var hex = this.source[i].toString(16);\n this.data += padHex(hex);\n }\n };\n WebmUint.prototype.updateByData = function() {\n var length = this.data.length / 2;\n this.source = new Uint8Array(length);\n for (var i = 0; i < length; i++) {\n var hex = this.data.substr(i * 2, 2);\n this.source[i] = parseInt(hex, 16);\n }\n };\n WebmUint.prototype.getValue = function() {\n return parseInt(this.data, 16);\n };\n WebmUint.prototype.setValue = function(value) {\n this.setData(padHex(value.toString(16)));\n };\n\n function WebmFloat(name, type) {\n WebmBase.call(this, name, type || 'Float');\n }\n doInherit(WebmFloat, WebmBase);\n WebmFloat.prototype.getFloatArrayType = function() {\n return this.source && this.source.length === 4 ? Float32Array : Float64Array;\n };\n WebmFloat.prototype.updateBySource = function() {\n var byteArray = this.source.reverse();\n var floatArrayType = this.getFloatArrayType();\n var floatArray = new floatArrayType(byteArray.buffer);\n this.data = floatArray[0];\n };\n WebmFloat.prototype.updateByData = function() {\n var floatArrayType = this.getFloatArrayType();\n var floatArray = new floatArrayType([ this.data ]);\n var byteArray = new Uint8Array(floatArray.buffer);\n this.source = byteArray.reverse();\n };\n WebmFloat.prototype.getValue = function() {\n return this.data;\n };\n WebmFloat.prototype.setValue = function(value) {\n this.setData(value);\n };\n\n function WebmContainer(name, type) {\n WebmBase.call(this, name, type || 'Container');\n }\n doInherit(WebmContainer, WebmBase);\n WebmContainer.prototype.readByte = function() {\n return this.source[this.offset++];\n };\n WebmContainer.prototype.readUint = function() {\n var firstByte = this.readByte();\n var bytes = 8 - firstByte.toString(2).length;\n var value = firstByte - (1 << (7 - bytes));\n for (var i = 0; i < bytes; i++) {\n // don't use bit operators to support x86\n value *= 256;\n value += this.readByte();\n }\n return value;\n };\n WebmContainer.prototype.updateBySource = function() {\n this.data = [];\n for (this.offset = 0; this.offset < this.source.length; this.offset = end) {\n var id = this.readUint();\n var len = this.readUint();\n var end = Math.min(this.offset + len, this.source.length);\n var data = this.source.slice(this.offset, end);\n\n var info = sections[id] || { name: 'Unknown', type: 'Unknown' };\n var ctr = WebmBase;\n switch (info.type) {\n case 'Container':\n ctr = WebmContainer;\n break;\n case 'Uint':\n ctr = WebmUint;\n break;\n case 'Float':\n ctr = WebmFloat;\n break;\n }\n var section = new ctr(info.name, info.type);\n section.setSource(data);\n this.data.push({\n id: id,\n idHex: id.toString(16),\n data: section\n });\n }\n };\n WebmContainer.prototype.writeUint = function(x, draft) {\n for (var bytes = 1, flag = 0x80; x >= flag && bytes < 8; bytes++, flag *= 0x80) { }\n\n if (!draft) {\n var value = flag + x;\n for (var i = bytes - 1; i >= 0; i--) {\n // don't use bit operators to support x86\n var c = value % 256;\n this.source[this.offset + i] = c;\n value = (value - c) / 256;\n }\n }\n\n this.offset += bytes;\n };\n WebmContainer.prototype.writeSections = function(draft) {\n this.offset = 0;\n for (var i = 0; i < this.data.length; i++) {\n var section = this.data[i],\n content = section.data.source,\n contentLength = content.length;\n this.writeUint(section.id, draft);\n this.writeUint(contentLength, draft);\n if (!draft) {\n this.source.set(content, this.offset);\n }\n this.offset += contentLength;\n }\n return this.offset;\n };\n WebmContainer.prototype.updateByData = function() {\n // run without accessing this.source to determine total length - need to know it to create Uint8Array\n var length = this.writeSections('draft');\n this.source = new Uint8Array(length);\n // now really write data\n this.writeSections();\n };\n WebmContainer.prototype.getSectionById = function(id) {\n for (var i = 0; i < this.data.length; i++) {\n var section = this.data[i];\n if (section.id === id) {\n return section.data;\n }\n }\n return null;\n };\n\n function WebmFile(source) {\n WebmContainer.call(this, 'File', 'File');\n this.setSource(source);\n }\n doInherit(WebmFile, WebmContainer);\n WebmFile.prototype.fixDuration = function(duration, options) {\n var logger = options && options.logger;\n if (logger === undefined) {\n logger = function(message) {\n console.log(message);\n };\n } else if (!logger) {\n logger = function() { };\n }\n\n var segmentSection = this.getSectionById(0x8538067);\n if (!segmentSection) {\n logger('[fix-webm-duration] Segment section is missing');\n return false;\n }\n\n var infoSection = segmentSection.getSectionById(0x549a966);\n if (!infoSection) {\n logger('[fix-webm-duration] Info section is missing');\n return false;\n }\n\n var timeScaleSection = infoSection.getSectionById(0xad7b1);\n if (!timeScaleSection) {\n logger('[fix-webm-duration] TimecodeScale section is missing');\n return false;\n }\n\n var durationSection = infoSection.getSectionById(0x489);\n if (durationSection) {\n if (durationSection.getValue() <= 0) {\n logger(`[fix-webm-duration] Duration section is present, but the value is ${durationSection.getValue()}`);\n durationSection.setValue(duration);\n } else {\n logger(`[fix-webm-duration] Duration section is present, and the value is ${durationSection.getValue()}`);\n return false;\n }\n } else {\n logger('[fix-webm-duration] Duration section is missing');\n // append Duration section\n durationSection = new WebmFloat('Duration', 'Float');\n durationSection.setValue(duration);\n infoSection.data.push({\n id: 0x489,\n data: durationSection\n });\n }\n\n // set default time scale to 1 millisecond (1000000 nanoseconds)\n timeScaleSection.setValue(1000000);\n infoSection.updateByData();\n segmentSection.updateByData();\n this.updateByData();\n\n return true;\n };\n WebmFile.prototype.toBlob = function(mimeType) {\n return new Blob([ this.source.buffer ], { type: mimeType || 'video/webm' });\n };\n\n function fixWebmDuration(blob, duration, callback, options) {\n // The callback may be omitted - then the third argument is options\n if (typeof callback === \"object\") {\n options = callback;\n callback = undefined;\n }\n\n if (!callback) {\n return new Promise(function(resolve) {\n fixWebmDuration(blob, duration, resolve, options);\n });\n }\n\n try {\n var reader = new FileReader();\n reader.onloadend = function() {\n try {\n var file = new WebmFile(new Uint8Array(reader.result));\n if (file.fixDuration(duration, options)) {\n blob = file.toBlob(blob.type);\n }\n } catch (ex) {\n // ignore\n }\n callback(blob);\n };\n reader.readAsArrayBuffer(blob);\n } catch (ex) {\n callback(blob);\n }\n }\n\n // Support AMD import default\n fixWebmDuration.default = fixWebmDuration;\n\n return fixWebmDuration;\n});\n","import ysFixWebmDuration from \"fix-webm-duration\";\n\nexport class ProcessVideo extends HTMLElement {\n private phrase: string;\n private previewStream: MediaStream | null = null;\n private recordedChunks: Blob[] = [];\n private mediaRecorder: MediaRecorder | null = null;\n private videoFile: File | null = null;\n private startTime: number = 0;\n private timerInterval: ReturnType<typeof setInterval> | null = null;\n private recordingTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private videoElement!: HTMLVideoElement;\n private fileInput!: HTMLInputElement;\n private recordButton!: HTMLButtonElement;\n private stopButton!: HTMLButtonElement;\n private submitButton!: HTMLButtonElement;\n\n private errorState: string | null = null;\n private timeLimit: number = 30;\n\n constructor() {\n super();\n\n this.phrase = this.generateDefaultPhrase();\n\n // Attach shadow DOM and initialize UI\n this.attachShadow({ mode: 'open' });\n this.initializeUI();\n }\n\n get endpoint(): string | null {\n return this.getAttribute(\"endpoint\");\n }\n\n set endpoint(value: string | null) {\n const current = this.getAttribute(\"endpoint\");\n if (value !== null && value !== current) {\n this.setAttribute(\"endpoint\", value);\n } else if (value === null && current !== null) {\n this.removeAttribute(\"endpoint\");\n }\n }\n\n disconnectedCallback() {\n this.stopRecording();\n if (this.previewStream) {\n this.previewStream.getTracks().forEach(track => track.stop());\n }\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null) {\n if (name === 'endpoint' && newValue !== this.endpoint) {\n this.endpoint = newValue;\n }\n }\n\n private generateDefaultPhrase(): string {\n return Math.random().toString().slice(2, 10); // 8-digit random phrase\n }\n\n initializeUI() {\n const phraseDisplay = this.phrase\n .split(\"\")\n .map((digit) => `<span class=\"digit\">${digit}</span>`)\n .join(\" \");\n\n this.shadowRoot!.innerHTML = `\n <style>\n :host {\n display: block;\n font-family: Arial, sans-serif;\n --primary-color: #007bff;\n --secondary-color: #6c757d;\n --button-bg: var(--primary-color);\n --button-text-color: #fff;\n --input-border-color: var(--secondary-color);\n --input-focus-border-color: var(--primary-color);\n --spacing: 16px;\n --button-padding: 10px 20px;\n --border-radius: 4px;\n }\n \n .container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--spacing);\n padding: var(--spacing);\n max-width: 500px;\n margin: 0 auto;\n text-align: center;\n }\n\n .video-wrapper {\n position: relative;\n display: inline-block;\n }\n\n #timer-overlay {\n position: absolute;\n top: 10px;\n left: 10px;\n background-color: rgba(0, 0, 0, 0.7);\n color: white;\n padding: 5px 10px;\n border-radius: 4px;\n font-family: Arial, sans-serif;\n font-size: 14px;\n }\n\n video {\n max-width: 100%;\n border-radius: var(--border-radius);\n }\n\n input[type=\"text\"], input[type=\"file\"] {\n padding: var(--button-padding);\n border: 1px solid var(--input-border-color);\n border-radius: var(--border-radius);\n width: 100%;\n max-width: 100%;\n }\n\n input[type=\"text\"]:focus, input[type=\"file\"]:focus {\n outline: none;\n border-color: var(--input-focus-border-color);\n }\n\n .hidden {\n display: none;\n }\n\n .phrase-display {\n font-size: 24px;\n font-weight: bold;\n display: flex;\n gap: 8px;\n justify-content: center;\n }\n .digit {\n padding: 4px;\n border: 1px solid #ccc;\n border-radius: 4px;\n text-align: center;\n width: 24px;\n }\n\n </style>\n <div class=\"container\">\n <slot name=\"video\">\n <div class=\"video-wrapper\">\n <video id=\"video-preview\" muted autoplay></video>\n <div id=\"timer-overlay\" class=\"hidden\">00:00</div>\n </div>\n </slot>\n <slot name=\"phrase-display\">\n <div class=\"phrase-display\">\n ${phraseDisplay}\n </div>\n </slot>\n <slot name=\"record-button\">\n <button id=\"record-button\">Start Recording</button>\n </slot>\n <slot name=\"stop-button\">\n <button id=\"stop-button\" disabled>Stop Recording</button>\n </slot>\n <slot name=\"file-input\">\n <input type=\"file\" accept=\"video/*\" id=\"file-input\" />\n </slot>\n <slot name=\"submit-button\">\n <button id=\"submit-button\">Submit Video</button>\n </slot>\n <slot name=\"loading\">\n <div class=\"message\">Loading...</div>\n </slot>\n <slot name=\"error\">\n <div class=\"message error\">An error occurred</div>\n </slot>\n <slot name=\"success\">\n <div class=\"message success\">Video submitted successfully!</div>\n </slot>\n </div>\n `;\n this.attachSlotListeners();\n this.setupPreview();\n this.toggleState(null);\n }\n\n private attachSlotListeners(): void {\n const videoSlot = this.shadowRoot!.querySelector('slot[name=\"video\"]') as HTMLSlotElement;\n const recordButtonSlot = this.shadowRoot!.querySelector('slot[name=\"record-button\"]') as HTMLSlotElement;\n const stopButtonSlot = this.shadowRoot!.querySelector('slot[name=\"stop-button\"]') as HTMLSlotElement;\n const fileInputSlot = this.shadowRoot!.querySelector('slot[name=\"file-input\"]') as HTMLSlotElement;\n const submitButtonSlot = this.shadowRoot!.querySelector('slot[name=\"submit-button\"]') as HTMLSlotElement;\n\n this.videoElement = this.getSlotElement(videoSlot, '#video-preview', HTMLVideoElement);\n this.recordButton = this.getSlotElement(recordButtonSlot, '#record-button', HTMLButtonElement);\n this.stopButton = this.getSlotElement(stopButtonSlot, '#stop-button', HTMLButtonElement);\n this.fileInput = this.getSlotElement(fileInputSlot, '#file-input', HTMLInputElement);\n this.submitButton = this.getSlotElement(submitButtonSlot, '#submit-button', HTMLButtonElement);\n\n if (this.fileInput) {\n this.fileInput.addEventListener('change', (e) => this.handleFileUpload(e));\n }\n if (this.recordButton) {\n this.recordButton.addEventListener(\"click\", () => this.startRecording());\n }\n if (this.stopButton) {\n this.stopButton.addEventListener(\"click\", () => this.stopRecording());\n }\n if (this.submitButton) {\n this.submitButton.addEventListener(\"click\", () => this.handleSubmit())\n }\n }\n\n private getSlotElement<T extends HTMLElement>(\n slot: HTMLSlotElement,\n fallbackSelector: string,\n elementType: { new(): T }\n ): T {\n const assignedElements = slot.assignedElements();\n return (assignedElements.length > 0 ? assignedElements[0] : null) as T || this.shadowRoot!.querySelector(fallbackSelector) as T;\n }\n\n replaceSlotContent(slotName: string, content: string | HTMLElement) {\n const slot = this.shadowRoot!.querySelector(`slot[name=\"${slotName}\"]`) as HTMLElement;\n if (slot) {\n if (typeof content === 'string') {\n slot.innerHTML = content;\n } else if (content instanceof HTMLElement) {\n slot.innerHTML = '';\n slot.appendChild(content);\n }\n }\n }\n\n removeSlotListener(slotName: string, event: string, callback: EventListener) {\n const slot = this.shadowRoot!.querySelector(`slot[name=\"${slotName}\"]`) as HTMLSlotElement;\n if (slot) {\n const assignedNodes = slot.assignedElements();\n assignedNodes.forEach((node) => {\n node.removeEventListener(event, callback);\n });\n }\n }\n\n private toggleState(state: 'loading' | 'success' | 'error' | null) {\n const states = ['loading', 'success', 'error'];\n\n states.forEach((slotName) => {\n const slot = this.shadowRoot!.querySelector(`slot[name=\"${slotName}\"]`) as HTMLElement;\n if (slot) {\n slot.style.display = slotName === state ? 'block' : 'none';\n }\n });\n }\n\n private convertPhraseToWords(phrase: string): string {\n const digitWords = [\n \"zero\", \"one\", \"two\", \"three\", \"four\",\n \"five\", \"six\", \"seven\", \"eight\", \"nine\"\n ];\n\n return phrase\n .split(\"\")\n .map((digit) => digitWords[parseInt(digit, 10)])\n .join(\" \");\n }\n\n private async setupPreview() {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true });\n this.previewStream = stream;\n\n this.videoElement.srcObject = stream;\n this.videoElement.controls = false;\n this.videoElement.play();\n } catch (error) {\n this.toggleState('error');\n console.error('Error setting up video preview:', error);\n }\n }\n\n private async startTimer() {\n const timerOverlay = this.shadowRoot!.querySelector('#timer-overlay') as HTMLElement;\n timerOverlay.textContent = '00:00';\n timerOverlay.classList.remove('hidden');\n\n let seconds = 0;\n this.timerInterval = setInterval(() => {\n seconds++;\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n timerOverlay.textContent = `${String(minutes).padStart(2, '0')}:${String(remainingSeconds).padStart(2, '0')}`;\n }, 1000);\n\n this.recordingTimeout = setTimeout(() => {\n this.stopRecording();\n }, this.timeLimit * 1000);\n }\n\n private async stopTimer() {\n if (this.recordingTimeout) {\n clearTimeout(this.recordingTimeout);\n }\n if (this.timerInterval) {\n clearInterval(this.timerInterval);\n this.timerInterval = null;\n }\n const timerOverlay = this.shadowRoot!.querySelector('#timer-overlay') as HTMLElement;\n timerOverlay.classList.add('hidden');\n }\n\n public async startRecording() {\n if (!window.MediaRecorder) {\n console.error('MediaRecorder API is not supported in this browser');\n return;\n }\n try {\n if (this.mediaRecorder && this.mediaRecorder.state !== 'inactive') {\n console.log('Recording already in progress.');\n return;\n }\n\n if (!this.previewStream) {\n console.log('Initializing preview stream...');\n this.previewStream = await navigator.mediaDevices.getUserMedia({\n video: true,\n audio: true,\n });\n }\n\n this.videoElement.muted = true;\n this.videoElement.srcObject = this.previewStream;\n this.videoElement.currentTime = 0;\n\n await this.videoElement.play();\n\n this.mediaRecorder = new MediaRecorder(this.previewStream);\n this.recordedChunks = [];\n\n this.mediaRecorder.ondataavailable = (event) => {\n if (event.data.size > 0) {\n this.recordedChunks.push(event.data);\n }\n };\n\n this.mediaRecorder.onstop = () => {\n const duration = Date.now() - this.startTime;\n const buggyBlob = new Blob(this.recordedChunks, { type: 'video/webm' });\n\n ysFixWebmDuration(buggyBlob, duration, { logger: false })\n .then((fixedBlob: Blob) => {\n this.onStopMediaRecorder(fixedBlob);\n });\n };\n\n this.mediaRecorder.start();\n this.startTimer();\n this.startTime = Date.now();\n\n this.recordButton.disabled = true;\n this.stopButton.disabled = false;\n this.videoElement.controls = false;\n } catch (error) {\n console.error('Error starting video recording:', error);\n }\n }\n\n public stopRecording() {\n try {\n if (!this.mediaRecorder || this.mediaRecorder.state === 'inactive') {\n console.log('No recording in progress.');\n return;\n }\n\n this.mediaRecorder.stop();\n\n if (this.previewStream) {\n this.previewStream.getTracks().forEach(track => track.stop());\n }\n this.videoElement.srcObject = null;\n this.videoElement.src = '';\n this.videoElement.controls = false;\n\n this.recordButton.disabled = false;\n this.stopButton.disabled = true;\n\n this.mediaRecorder = null;\n this.previewStream = null;\n\n } catch (error) {\n console.error('Error stopping video recording:', error);\n }\n }\n\n private onStopMediaRecorder(blob: Blob) {\n const videoURL = URL.createObjectURL(blob);\n this.videoFile = new File([blob], 'recorded_video.webm', { type: 'video/webm' });\n this.recordedChunks = [];\n\n this.videoElement.src = videoURL;\n this.videoElement.controls = true;\n this.videoElement.play();\n this.videoElement.muted = false;\n this.stopTimer();\n\n // Clean up the object URL when the video loads\n this.videoElement.onloadeddata = () => {\n URL.revokeObjectURL(videoURL);\n };\n }\n\n private handleFileUpload(event: Event) {\n const file = (event.target as HTMLInputElement).files?.[0];\n if (file?.type?.startsWith('video/')) {\n if (file.size > 100 * 1024 * 1024) { // 100MB limit\n this.toggleState('error');\n console.error('File size exceeds limit of 100MB');\n return;\n }\n this.videoFile = file;\n this.videoElement.src = URL.createObjectURL(file);\n this.videoElement.play();\n } else {\n this.toggleState('error');\n console.error('Please select a valid video file.');\n }\n }\n\n public async handleSubmit() {\n if (!this.videoFile) {\n this.toggleState('error');\n console.error('No video file to submit.');\n return;\n }\n\n if (!this.endpoint) {\n this.toggleState('error');\n console.error('Endpoint must be provided.');\n return;\n }\n\n if (!this.userFullname) {\n this.toggleState('error');\n console.error('User full name must be provided.');\n return;\n }\n\n this.toggleState('loading');\n\n try {\n const formData = new FormData();\n formData.append('video', this.videoFile);\n formData.append('phrase', this.convertPhraseToWords(this.phrase));\n formData.append('userFullname', this.userFullname);\n\n const response = await fetch(this.endpoint, {\n method: 'POST',\n body: formData\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const result = await response.json();\n console.log('Response from endpoint:', result);\n this.toggleState('success');\n } catch (error) {\n this.toggleState('error');\n console.error('Error submitting video:', error);\n }\n }\n\n static get observedAttributes() {\n return ['endpoint', 'user-fullname'];\n }\n\n get userFullname(): string | null {\n return this.getAttribute('user-fullname');\n }\n\n set userFullname(value: string | null) {\n if (value) {\n this.setAttribute('user-fullname', value);\n } else {\n this.removeAttribute('user-fullname');\n }\n }\n\n get isRecording(): boolean {\n return this.mediaRecorder?.state === 'recording';\n }\n\n get currentPhrase(): string {\n return this.phrase;\n }\n\n get videoDuration(): number | null {\n return this.videoElement?.duration || null;\n }\n\n get currentFile(): File | null {\n return this.videoFile;\n }\n\n get currentStream(): MediaStream | null {\n return this.previewStream;\n }\n\n get videoElementRef(): HTMLVideoElement {\n return this.videoElement;\n }\n\n get fileInputRef(): HTMLInputElement {\n return this.fileInput;\n }\n\n get recordingTimeLimit(): number {\n return this.timeLimit;\n }\n\n set recordingTimeLimit(value: number) {\n this.timeLimit = value;\n if (this.mediaRecorder && this.mediaRecorder.state === 'recording') {\n if (this.recordingTimeout) {\n clearTimeout(this.recordingTimeout);\n }\n this.recordingTimeout = setTimeout(() => this.stopRecording(), this.timeLimit * 1000);\n }\n }\n}\n\ncustomElements.define('process-video', ProcessVideo);\n","export class DocAuth extends HTMLElement {\n private readonly shadow: ShadowRoot;\n private videoElement: HTMLVideoElement | null = null;\n private canvasElement: HTMLCanvasElement | null = null;\n private captureButton: HTMLButtonElement | null = null;\n\n constructor() {\n super();\n this.shadow = this.attachShadow({ mode: \"open\" });\n this.captureDocument = this.captureDocument.bind(this);\n }\n\n static get observedAttributes(): string[] {\n return [\"endpoint\", \"user-fullname\"];\n }\n\n get endpoint(): string | null {\n return this.getAttribute(\"endpoint\");\n }\n\n set endpoint(value: string | null) {\n if (value !== this.getAttribute(\"endpoint\")) {\n if (value === null) {\n this.removeAttribute(\"endpoint\");\n } else {\n this.setAttribute(\"endpoint\", value);\n }\n }\n }\n\n get userFullname(): string | null {\n return this.getAttribute(\"user-fullname\");\n }\n\n set userFullname(value: string | null) {\n if (value !== this.getAttribute(\"user-fullname\")) {\n if (value === null) {\n this.removeAttribute(\"user-fullname\");\n } else {\n this.setAttribute(\"user-fullname\", value);\n }\n }\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n if (name === \"endpoint\" || name === \"user-fullname\") {\n this.validateAttributes();\n }\n }\n\n connectedCallback(): void {\n this.validateAttributes();\n this.init();\n }\n\n disconnectedCallback(): void {\n this.cleanup();\n if (this.captureButton) {\n this.captureButton.removeEventListener(\"click\", this.captureDocument);\n }\n }\n\n validateAttributes(): void {\n if (!this.endpoint) {\n console.error(\"Endpoint is required.\");\n this.toggleState(\"error\");\n return;\n }\n if (!this.userFullname) {\n console.error(\"User fullname is required.\");\n this.toggleState(\"error\");\n return;\n }\n }\n\n init(): void {\n this.shadow.innerHTML = `\n <style>\n :host {\n display: block;\n font-family: Arial, sans-serif;\n --primary-color: #007bff;\n --button-bg: var(--primary-color);\n --button-text-color: #fff;\n --border-radius: 8px;\n --scan-area-border: 2px dashed var(--primary-color);\n --scan-area-bg: rgba(0, 123, 255, 0.05);\n --button-padding: 10px 24px;\n --button-radius: 6px;\n --button-hover-bg: #0056b3;\n }\n .container {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 20px;\n padding: 24px;\n background: #fff;\n border-radius: var(--border-radius);\n box-shadow: 0 2px 8px rgba(0,0,0,0.04);\n max-width: 420px;\n margin: 0 auto;\n }\n .scan-area {\n position: relative;\n width: 340px;\n height: 220px;\n background: var(--scan-area-bg);\n border: var(--scan-area-border);\n border-radius: var(--border-radius);\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: var(--border-radius);\n }\n canvas {\n display: none;\n }\n .capture-btn {\n background: var(--button-bg);\n color: var(--button-text-color);\n border: none;\n border-radius: var(--button-radius);\n padding: var(--button-padding);\n font-size: 1rem;\n cursor: pointer;\n transition: background 0.2s;\n }\n .capture-btn:hover {\n background: var(--button-hover-bg);\n }\n .status {\n min-height: 24px;\n font-size: 0.95rem;\n color: #d32f2f;\n text-align: center;\n }\n .status.success {\n color: #388e3c;\n }\n </style>\n <div class=\"container\">\n <div class=\"scan-area\">\n <video id=\"video\" autoplay playsinline></video>\n <canvas id=\"canvas\"></canvas>\n </div>\n <button class=\"capture-btn\" id=\"capture-btn\">Capture Document</button>\n <div class=\"status\" id=\"status\"></div>\n </div>\n `;\n this.attachElements();\n this.setupCamera();\n this.toggleState(\"\");\n }\n\n cleanup(): void {\n if (this.videoElement?.srcObject) {\n const tracks = (this.videoElement.srcObject as MediaStream).getTracks();\n tracks.forEach((track) => track.stop());\n }\n if (this.videoElement) {\n this.videoElement.srcObject = null;\n }\n }\n\n private attachElements(): void {\n this.videoElement = this.shadow.querySelector(\"#video\") as HTMLVideoElement;\n this.canvasElement = this.shadow.querySelector(\"#canvas\") as HTMLCanvasElement;\n this.captureButton = this.shadow.querySelector(\"#capture-btn\") as HTMLButtonElement;\n if (this.captureButton) {\n this.captureButton.addEventListener(\"click\", this.captureDocument);\n }\n }\n\n private setupCamera(): void {\n if (!this.videoElement) {\n console.error(\"Video element is missing.\");\n return;\n }\n navigator.mediaDevices\n .getUserMedia({ video: { facingMode: \"environment\" } })\n .then((stream) => {\n this.videoElement!.srcObject = stream;\n })\n .catch((error) => {\n this.toggleState(\"error\");\n this.setStatus(\"Error accessing camera: \" + error, false);\n });\n }\n\n private async captureDocument(): Promise<void> {\n if (!this.videoElement || !this.canvasElement) {\n this.setStatus(\"Camera not ready.\", false);\n return;\n }\n // Set canvas size to video size for high quality\n this.canvasElement.width = this.videoElement.videoWidth;\n this.canvasElement.height = this.videoElement.videoHeight;\n const context = this.canvasElement.getContext(\"2d\");\n context!.drawImage(\n this.videoElement,\n 0,\n 0,\n this.canvasElement.width,\n this.canvasElement.height\n );\n this.toggleState(\"loading\");\n this.setStatus(\"Uploading...\", false);\n this.canvasElement.toBlob(async (blob) => {\n try {\n if (!blob) {\n this.setStatus(\"Failed to capture image.\", false);\n this.toggleState(\"error\");\n return;\n }\n const file = new File([blob], \"id-document.jpg\", { type: \"image/jpeg\" });\n const formData = new FormData();\n formData.append(\"document\", file);\n formData.append(\"userFullname\", this.userFullname || \"\");\n const response = await fetch(this.endpoint!, {\n method: \"POST\",\n body: formData,\n });\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n this.setStatus(\"Document uploaded successfully!\", true);\n this.toggleState(\"success\");\n } catch (error) {\n this.setStatus(\"Error uploading document.\", false);\n this.toggleState(\"error\");\n }\n }, \"image/jpeg\", 0.98); // High quality JPEG\n }\n\n private setStatus(message: string, success: boolean) {\n const statusDiv = this.shadow.querySelector(\"#status\") as HTMLElement;\n if (statusDiv) {\n statusDiv.textContent = message;\n statusDiv.className = \"status\" + (success ? \" success\" : \"\");\n }\n }\n\n private toggleState(state: string): void {\n // For extensibility, could add more UI feedback here\n // Currently just updates status color\n }\n}\n\ncustomElements.define(\"doc-auth\", DocAuth); "],"names":[],"mappings":"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","x_google_ignoreList":[2]}
|