{"version":3,"file":"352.chunk.js","mappings":"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","sources":["../node_modules/@luxottica/vto-microservices/src/config/Config.ts","../node_modules/@luxottica/vto-microservices/src/error/errors.ts","../node_modules/@luxottica/vto-microservices/src/helpers/RequestHelper.ts","../node_modules/@luxottica/vto-microservices/src/request/RefreshRequest.ts","../node_modules/@luxottica/vto-microservices/src/request/BipaRequest.ts","../node_modules/@luxottica/vto-microservices/src/request/ProfileRequest.ts","../node_modules/@luxottica/vto-microservices/src/request/ImageRequest.ts","../node_modules/@luxottica/vto-microservices/src/request/LoginRequest.ts","../node_modules/@luxottica/vto-microservices/src/request/SessionRequest.ts","../node_modules/@luxottica/vto-microservices/src/request/MeasurementRequest.ts","../node_modules/@luxottica/vto-microservices/src/request/VideoRequest.ts"],"sourcesContent":["import { MicroserviceEnvironment } from '../constants/MicroserviceEnvironment';\nimport { ApiConfig } from '../interfaces/ApiConfig';\n\nconst envHost: Record = {\n STAGING: 'https://test-gateway-vtoprofile.luxdeepblue.com',\n ACCEPTANCE: 'https://acceptance-gateway-vtoprofile.luxdeepblue.com',\n PRODUCTION: 'https://gateway-vtoprofile.luxdeepblue.com'\n};\n\nconst envMap: Record = {\n STAGING: {\n loginFaUrl: `${envHost.STAGING}/auth/fradv/token`,\n loginVmUrl: `${envHost.STAGING}/auth/vm/token`,\n refreshUrl: `${envHost.STAGING}/auth/refresh`,\n bipaTextUrl: `${envHost.STAGING}/services/vtobipams/public/v2/bipa/version`,\n bipaSubmitFormUrl: `${envHost.STAGING}/services/vtobipams/public/v1/bipa-consent`,\n videoSessionUrl: `${envHost.STAGING}/services/vtovideoprofilems/public/v3/video`,\n enrichUrl: `${envHost.STAGING}/services/vtovideoprofilems/public/v1/ml-enrich`,\n vtoUrl: `${envHost.STAGING}/services/vtovideoprofilems/public/v1/basel-mesh`,\n additionalInfoUrl: `${envHost.STAGING}/services/vtovideoprofilems/public/v1/additional-info`,\n poseExtractionUrl: `${envHost.STAGING}/services/vtovideoprofilems/public/v1/poses-extraction`,\n statusUrl: `${envHost.STAGING}/services/vtovideoprofilems/public/v2/status`,\n pdStatusUrl: `${envHost.STAGING}/services/vtomedicalinfoms/public/v1/pupillary-distance/status`,\n profileUrl: `${envHost.STAGING}/services/vtovideoprofilems/public/v3/get-video-profile`,\n measurementUrl: `${envHost.STAGING}/services/vtomedicalinfoms/public/v2/pupillary-distance`,\n },\n ACCEPTANCE: {\n loginFaUrl: `${envHost.ACCEPTANCE}/auth/fradv/token`,\n loginVmUrl: `${envHost.ACCEPTANCE}/auth/vm/token`,\n refreshUrl: `${envHost.ACCEPTANCE}/auth/refresh`,\n bipaTextUrl: `${envHost.ACCEPTANCE}/services/vtobipams/public/v2/bipa/version`,\n bipaSubmitFormUrl: `${envHost.ACCEPTANCE}/services/vtobipams/public/v1/bipa-consent`,\n videoSessionUrl: `${envHost.ACCEPTANCE}/services/vtovideoprofilems/public/v3/video`,\n enrichUrl: `${envHost.ACCEPTANCE}/services/vtovideoprofilems/public/v1/ml-enrich`,\n vtoUrl: `${envHost.ACCEPTANCE}/services/vtovideoprofilems/public/v1/basel-mesh`,\n additionalInfoUrl: `${envHost.ACCEPTANCE}/services/vtovideoprofilems/public/v1/additional-info`,\n poseExtractionUrl: `${envHost.ACCEPTANCE}/services/vtovideoprofilems/public/v1/poses-extraction`,\n statusUrl: `${envHost.ACCEPTANCE}/services/vtovideoprofilems/public/v2/status`,\n pdStatusUrl: `${envHost.ACCEPTANCE}/services/vtomedicalinfoms/public/v1/pupillary-distance/status`,\n profileUrl: `${envHost.ACCEPTANCE}/services/vtovideoprofilems/public/v3/get-video-profile`,\n measurementUrl: `${envHost.ACCEPTANCE}/services/vtomedicalinfoms/public/v2/pupillary-distance`,\n },\n PRODUCTION: {\n loginFaUrl: `${envHost.PRODUCTION}/auth/fradv/token`,\n loginVmUrl: `${envHost.PRODUCTION}/auth/vm/token`,\n refreshUrl: `${envHost.PRODUCTION}/auth/refresh`,\n bipaTextUrl: `${envHost.PRODUCTION}/services/vtobipams/public/v2/bipa/version`,\n bipaSubmitFormUrl: `${envHost.PRODUCTION}/services/vtobipams/public/v1/bipa-consent`,\n videoSessionUrl: `${envHost.PRODUCTION}/services/vtovideoprofilems/public/v3/video`,\n enrichUrl: `${envHost.PRODUCTION}/services/vtovideoprofilems/public/v1/ml-enrich`,\n vtoUrl: `${envHost.PRODUCTION}/services/vtovideoprofilems/public/v1/basel-mesh`,\n additionalInfoUrl: `${envHost.PRODUCTION}/services/vtovideoprofilems/public/v1/additional-info`,\n poseExtractionUrl: `${envHost.PRODUCTION}/services/vtovideoprofilems/public/v1/poses-extraction`,\n statusUrl: `${envHost.PRODUCTION}/services/vtovideoprofilems/public/v2/status`,\n pdStatusUrl: `${envHost.PRODUCTION}/services/vtomedicalinfoms/public/v1/pupillary-distance/status`,\n profileUrl: `${envHost.PRODUCTION}/services/vtovideoprofilems/public/v3/get-video-profile`,\n measurementUrl: `${envHost.PRODUCTION}/services/vtomedicalinfoms/public/v2/pupillary-distance`,\n }\n};\n\nconst getConfig = (env: MicroserviceEnvironment, param: keyof ApiConfig): string => {\n return envMap[env][param];\n};\n\nexport {\n getConfig\n};\n","class MicroserviceError extends Error {\n public type: string;\n\n constructor(type: string, message: string, error?: Error) {\n super(message);\n this.type = type;\n this.name = type;\n this.message = message;\n this.stack = error?.stack;\n\n Object.setPrototypeOf(this, MicroserviceError.prototype);\n }\n}\n\nclass EnvironmentError extends MicroserviceError {\n public static type = 'EnvironmentError';\n\n constructor(readonly env: string) {\n super(EnvironmentError.type, `microservice environment ${env} is not valid`);\n Object.setPrototypeOf(this, EnvironmentError.prototype);\n }\n}\n\nclass InvalidInputError extends MicroserviceError {\n public static type = 'InputError';\n\n constructor(message: string, error?: Error) {\n super(InvalidInputError.type, message, error);\n Object.setPrototypeOf(this, InvalidInputError.prototype);\n }\n}\n\nclass LocaleError extends MicroserviceError {\n public static type = 'LocaleError';\n\n constructor(readonly locale: string) {\n super(LocaleError.type, `bipa agreement text cannot be found for locale ${locale}`);\n Object.setPrototypeOf(this, LocaleError.prototype);\n }\n}\n\nclass RequestError extends MicroserviceError {\n public static type = 'RequestError';\n\n constructor(message: string, error?: Error) {\n super(RequestError.type, message, error);\n Object.setPrototypeOf(this, RequestError.prototype);\n }\n}\n\nclass TimeoutError extends MicroserviceError {\n public static type = 'TimeoutError';\n\n constructor(duration: number) {\n super(TimeoutError.type, `request has timed out after ${duration}ms`);\n Object.setPrototypeOf(this, TimeoutError.prototype);\n }\n}\n\nexport {\n InvalidInputError,\n EnvironmentError,\n LocaleError,\n RequestError,\n TimeoutError\n};\n","import { RemoteLogConfig } from '@luxottica/vm-remotelog';\nimport { name, version } from '../../package.json';\nimport { TimeoutError } from '../error/errors';\nimport { VtoRequest } from '../interfaces/Request';\n\nconst logger = RemoteLogConfig.getInstance().getLoggerInfo(name, version, 'RequestHelper');\n\nfunction delay(ms: number) {\n return new Promise(\n resolve => setTimeout(resolve, ms)\n );\n}\n\nconst pollPromise = (\n interval: number,\n timeout: number,\n promise: () => Promise,\n shouldCancel: () => boolean\n): Promise => {\n let completed = false;\n const startTime = Date.now();\n return new Promise(async (resolve, reject) => {\n\n while (true) {\n if (completed) { return; }\n if (shouldCancel()) { return; }\n if (Date.now() - startTime > timeout) { reject(new TimeoutError(timeout)); return; }\n\n await promise().then((result) => {\n completed = true;\n resolve(result);\n }).catch(() => {\n logger.debug('continue poll');\n });\n\n await delay(interval);\n }\n });\n};\n\nconst pollProcessingStatus = (\n request: VtoRequest,\n url: string,\n entryTypes: string[]\n): Promise => {\n \n return fetch(url, {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${request.accessToken}`,\n 'accept': '*/*',\n },\n }).then(response => {\n if (response.ok) {\n return response.json();\n } else {\n throw new Error('FAILED POLL');\n }\n }).then((json: PollingResponse) => {\n logger.debug(json);\n const pollingEntry = json.filter((entry) => { return entryTypes.includes(entry.type); });\n if (pollingEntry.length > 0) {\n // complete when all entries have a result or any entry is KO\n const complete = pollingEntry.every(entry => ['OK', 'KO'].includes(entry.progress))\n || pollingEntry.some(entry => entry.progress === 'KO');\n const success = pollingEntry.every(entry => entry.progress === 'OK');\n if (complete) {\n return success;\n } else {\n throw new Error('processing incomplete');\n }\n } else {\n throw new Error('processing incomplete');\n }\n }).catch(err => {\n logger.debug(err);\n throw(err);\n });\n};\n\nconst parseJsonResponse = (\n response: Response\n): Promise => {\n if (response.ok) {\n return response.json();\n } else {\n return response.json().catch(() => {\n throw new Error(`${response.status}: ${response.statusText}`);\n }).then((json) => {\n throw new Error(JSON.stringify(json));\n });\n }\n};\n\nexport {\n pollPromise,\n pollProcessingStatus,\n parseJsonResponse\n};\n","import { getConfig } from '../config/Config';\nimport { RefreshResponse, RefreshReturn } from '../interfaces/Refresh';\nimport { VtoRequest } from '../interfaces/Request';\n\nconst refreshRequest = (\n request: VtoRequest\n): Promise => {\n\n const url = getConfig(request.environment, 'refreshUrl');\n return fetch(url, {\n method: 'POST',\n headers: {\n 'Accept': '*/*',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n refresh_token: request.refreshToken\n })\n\n }).then(response => {\n if (response.ok) {\n return response.json();\n } else {\n return response.json().catch(() => {\n throw new Error(`${response.status}: ${response.statusText}`);\n }).then((json) => {\n throw new Error(JSON.stringify(json));\n });\n }\n\n }).then((json: RefreshResponse) => {\n // logger.debug(json);\n const refreshReturn = {\n accessToken: json.access_token,\n refreshToken: json.refresh_token\n };\n if (!!request.onAuthUpdated) { request.onAuthUpdated(refreshReturn); }\n return refreshReturn;\n\n }).catch(err => {\n // logger.error(err);\n throw(err);\n\n });\n};\n\nexport {\n refreshRequest\n};\n","import { getConfig } from '../config/Config';\nimport { LocaleError } from '../error/errors';\nimport { parseJsonResponse } from '../helpers/RequestHelper';\nimport { BipaAgreementRequestData, BipaAgreementResponse, BipaAgreementReturn, BipaTextResponse, SubmitBipaFormRequestData } from '../interfaces/Bipa';\nimport { refreshRequest } from './RefreshRequest';\n\nconst bipaAgreementFetch = (\n request: BipaAgreementRequestData\n): Promise => {\n const bipaAgreementUrl = getConfig(request.environment, 'bipaTextUrl');\n\n return fetch(bipaAgreementUrl, {\n method: 'GET',\n headers: {\n 'Accept': '*/*',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${request.accessToken}`,\n },\n });\n};\n\nconst bipaAgreementRequest = (\n request: BipaAgreementRequestData\n): Promise => {\n\n let bipaVersion: number;\n let bipaDescription: string;\n\n return bipaAgreementFetch(request).then((bipaAgreementResponse) => {\n if (bipaAgreementResponse.status === 401) {\n return refreshRequest(request).then((refreshResponse) => {\n return bipaAgreementFetch({\n ...request,\n accessToken: refreshResponse.accessToken,\n refreshToken: refreshResponse.refreshToken\n });\n });\n } else {\n return bipaAgreementResponse;\n }\n\n }).then((response) => {\n return parseJsonResponse(response);\n\n }).then((json: BipaTextResponse) => {\n bipaVersion = json.version;\n bipaDescription = json.description;\n\n const bipaUrls = JSON.parse(json.jsonUrl);\n if (!!bipaUrls[request.locale]) {\n return fetch(bipaUrls[request.locale]);\n } else {\n throw new LocaleError(request.locale);\n }\n\n }).then((response) => {\n return parseJsonResponse(response);\n\n }).then((bipaAgreementResponse: BipaAgreementResponse) => {\n return {\n version: bipaVersion,\n description: bipaDescription,\n text: bipaAgreementResponse.BIPA_AGREEMENT,\n };\n });\n};\n\nconst submitBipaFormFetch = (\n request: SubmitBipaFormRequestData\n): Promise => {\n const bipaSubmitUrl = getConfig(request.environment, 'bipaSubmitFormUrl');\n\n return fetch(bipaSubmitUrl, {\n method: 'POST',\n headers: {\n 'Accept': '*/*',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${request.accessToken}`,\n },\n body: `{ \"bipaVersion\": ${request.bipaVersion}, \"channel\": \"${request.source}\", \"firstName\": \"${request.firstName}\", \"lastName\": \"${request.lastName}\", \"email\": \"${request.email}\" }`\n });\n};\n\nconst submitBipaFormRequest = (\n request: SubmitBipaFormRequestData\n): Promise => {\n\n return submitBipaFormFetch(request).then((submitBipaResponse) => {\n if (submitBipaResponse.status === 401) {\n return refreshRequest(request).then((refreshResponse) => {\n return submitBipaFormFetch({\n ...request,\n accessToken: refreshResponse.accessToken,\n refreshToken: refreshResponse.refreshToken\n });\n });\n } else {\n return submitBipaResponse;\n }\n });\n};\n\nexport {\n bipaAgreementRequest,\n submitBipaFormRequest\n};\n","import { getConfig } from '../config/Config';\nimport { ProfileRequestData, ProfileResponse, ProfileReturn } from '../interfaces/Profile';\nimport { refreshRequest } from './RefreshRequest';\n\nconst profileFetch = (\n request: ProfileRequestData\n): Promise => {\n const url = getConfig(request.environment, 'profileUrl');\n\n return fetch(`${url}/${request.videoId}`, {\n method: 'GET',\n headers: {\n 'Accept': '*/*',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${request.accessToken}`\n }\n });\n};\n\nconst profileRequest = (\n request: ProfileRequestData\n): Promise => {\n\n return profileFetch(request).then((profileResponse) => {\n if (profileResponse.status === 401) {\n return refreshRequest(request).then((refreshResponse) => {\n return profileFetch({\n ...request,\n accessToken: refreshResponse.accessToken,\n refreshToken: refreshResponse.refreshToken\n });\n });\n } else {\n return profileResponse;\n }\n\n }).then((response) => {\n if (response.ok) {\n return response.json();\n } else {\n return response.json().catch(() => {\n throw new Error(`${response.status}: ${response.statusText}`);\n }).then((json) => {\n throw new Error(JSON.stringify(json));\n });\n }\n\n }).then((json: ProfileResponse) => {\n const result: ProfileReturn = {};\n result['properties'] = json.mlInformations;\n result['videoId'] = json.uuid;\n return result;\n\n });\n};\n\nexport {\n profileRequest\n};","import { getConfig } from '../config/Config';\nimport { InvalidInputError, RequestError } from '../error/errors';\nimport { pollProcessingStatus, pollPromise } from '../helpers/RequestHelper';\nimport { ProcessImageRequestData, UploadImageDataRequestData, UploadImageRequestData, UploadImageResponse, UploadImageReturn } from '../interfaces/Image';\nimport { ProfileReturn } from '../interfaces/Profile';\nimport { profileRequest } from './ProfileRequest';\nimport { refreshRequest } from './RefreshRequest';\n\nconst uploadImageFetch = (\n request: UploadImageRequestData\n): Promise => {\n\n const form = new FormData();\n form.append('file', new File([request.img], 'take0.jpg', { type: 'image/jpeg' }));\n\n return fetch(`${request.uploadPath}/take0.jpg`, {\n method: 'POST',\n headers: {\n 'Accept': '*/*',\n Authorization: `Bearer ${request.accessToken}`\n },\n body: form\n });\n};\n\nconst processImageFetch = (\n request: ProcessImageRequestData\n): Promise> => {\n const mlUrl = getConfig(request.environment, 'enrichUrl');\n const vtoUrl = getConfig(request.environment, 'vtoUrl');\n\n return Promise.all([\n (request.enableMachineLearning) ? fetch(mlUrl, {\n method: 'POST',\n headers: {\n 'Accept': '*/*',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${request.accessToken}`\n },\n 'body': `{ \"uuid\": \"${request.videoId}\" }`\n }): undefined,\n (request.enableVto) ? fetch(vtoUrl, {\n method: 'POST',\n headers: {\n 'Accept': '*/*',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${request.accessToken}`\n },\n 'body': `{ \"uuid\": \"${request.videoId}\" }`\n }) : undefined\n ]);\n};\n\nconst uploadImageRequest = (\n request: UploadImageRequestData\n): Promise => {\n\n return uploadImageFetch(request).then((uploadImageResponse) => {\n if (uploadImageResponse.status === 401) {\n return refreshRequest(request).then((refreshResponse) => {\n return uploadImageFetch({\n ...request,\n accessToken: refreshResponse.accessToken,\n refreshToken: refreshResponse.refreshToken\n });\n });\n } else {\n return uploadImageResponse;\n }\n }).then((response) => {\n if (response.ok) {\n return;\n } else {\n return response.json().catch(() => {\n throw new Error(`${response.status}: ${response.statusText}`);\n }).then((json) => {\n throw new Error(JSON.stringify(json));\n });\n }\n });\n};\n\nconst uploadImageDataRequest = (\n request: UploadImageDataRequestData\n): Promise => {\n\n return new Promise((resolve, reject) => {\n const w = request.imgData.width;\n const h = request.imgData.height;\n \n const canvas = document.createElement('canvas');\n canvas.width = w;\n canvas.height = h;\n \n const ctx = canvas.getContext('2d');\n if (!!ctx) {\n ctx.putImageData(request.imgData, 0, 0);\n canvas.toBlob((blob) => {\n if (!!blob) {\n resolve(blob);\n } else {\n reject(new RequestError('failed to extract image from canvas'));\n }\n }, 'image/jpeg', 0.95);\n \n } else {\n reject(new RequestError('failed to extract image from canvas'));\n }\n }).then((imgBlob) => {\n return uploadImageRequest({\n ...request,\n img: imgBlob\n });\n });\n};\n\nconst processImageRequest = (\n request: ProcessImageRequestData\n): Promise => {\n\n if (!request.enableMachineLearning && !request.enableVto) {\n return Promise.reject(new InvalidInputError('enableMachineLearning and enableVto cannot both be set to false'));\n }\n\n return processImageFetch(request).then((processImageResponse) => {\n if ((!!processImageResponse[0] && processImageResponse[0].ok && processImageResponse[0].status === 401)\n || (!!processImageResponse[1] && processImageResponse[1].ok && processImageResponse[1].status === 401)) {\n return refreshRequest(request).then((refreshResponse) => {\n return processImageFetch({\n ...request,\n accessToken: refreshResponse.accessToken,\n refreshToken: refreshResponse.refreshToken\n });\n });\n } else {\n return processImageResponse;\n }\n\n }).then((response) => {\n if ((response[0] === undefined || response[0].ok)\n && (response[1] === undefined || response[1].ok)) {\n\n const promises: Promise[] = [];\n const entries: string[] = [];\n\n if (request.enableVto) {\n entries.push('BASEL_MESH');\n }\n\n if (request.enableMachineLearning) {\n entries.push('ML_INFORMATION');\n\n const pdStatusUrl = `${getConfig(request.environment, 'pdStatusUrl')}/${request.videoId}` ;\n promises.push(pollPromise(\n 1000,\n 30000,\n () => pollProcessingStatus(request, pdStatusUrl, ['PD']),\n request.shouldCancel\n ));\n }\n\n const statusUrl = `${getConfig(request.environment, 'statusUrl')}/${request.videoId}` ;\n promises.push(pollPromise(\n 1000,\n 30000,\n () => pollProcessingStatus(request, statusUrl, entries),\n request.shouldCancel\n ));\n\n return Promise.all(promises).then(results => results.every(result => !!result));\n\n } else {\n throw new RequestError(`failed to poll status with sessionId=${request.videoId}`);\n }\n\n }).then((success) => {\n if (success) {\n return profileRequest(request);\n } else {\n throw new RequestError(`failed to poll status with sessionId=${request.videoId}`);\n }\n });\n};\n\nexport {\n uploadImageRequest,\n uploadImageDataRequest,\n processImageRequest\n};","import { getConfig } from '../config/Config';\nimport { LoginRequestData, LoginResponse, LoginReturn } from '../interfaces/Login';\n\nconst loginRequest = (\n request: LoginRequestData\n): Promise => {\n\n if (!!request.accessToken && !!request.refreshToken) {\n return Promise.resolve({\n accessToken: request.accessToken,\n refreshToken: request.refreshToken\n });\n\n } else {\n const loginType = (request.version === 1) ? 'loginVmUrl' : 'loginFaUrl';\n const url = getConfig(request.environment, loginType);\n return fetch(url, {\n method: 'POST',\n headers: {\n 'Accept': '*/*',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ rememberMe: true })\n }).then((response) => {\n if (response.ok) {\n return response.json();\n } else {\n return response.json().catch(() => {\n throw new Error(`${response.status}: ${response.statusText}`);\n }).then((json) => {\n throw new Error(JSON.stringify(json));\n });\n }\n }).then((json: LoginResponse) => {\n const authData = {\n accessToken: json.access_token,\n refreshToken: json.refresh_token\n };\n request.onAuthUpdated?.(authData);\n return authData;\n });\n }\n};\n\nexport {\n loginRequest\n};","import { getConfig } from '../config/Config';\nimport { SessionRequestData, SessionResponse, SessionReturn } from '../interfaces/Session';\nimport { refreshRequest } from './RefreshRequest';\n\nconst sessionFetch = (\n request: SessionRequestData\n): Promise => {\n\n const url = getConfig(request.environment, 'videoSessionUrl');\n return fetch(url, {\n method: 'POST',\n headers: {\n 'Accept': '*/*',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${request.accessToken}`,\n },\n body: `{ \"region\": \"${request.region}\", \"source\": \"${request.source}\"}`\n });\n};\n\nconst sessionRequest = (\n request: SessionRequestData\n): Promise => {\n\n return sessionFetch(request).then((sessionResponse) => {\n if (sessionResponse.status === 401) {\n return refreshRequest(request).then((refreshResponse) => {\n return sessionFetch({\n ...request,\n accessToken: refreshResponse.accessToken,\n refreshToken: refreshResponse.refreshToken\n });\n });\n } else {\n return sessionResponse;\n }\n }).then((response) => {\n if (response.ok) {\n return response.json();\n } else {\n return response.json().catch(() => {\n throw new Error(`${response.status}: ${response.statusText}`);\n }).then((json) => {\n throw new Error(JSON.stringify(json));\n });\n }\n }).then((json: SessionResponse) => {\n return {\n videoId: json.uuid,\n uploadPath: json.uploadBasePath,\n };\n });\n};\n\nexport {\n sessionRequest\n};","import { getConfig } from '../config/Config';\nimport { MeasurementRequestData } from '../interfaces/Measurement';\n\nconst uploadMeasurementRequest = (\n request: MeasurementRequestData\n): Promise => {\n\n const url = getConfig(request.environment, 'measurementUrl') + '/' + request.videoId;\n return fetch(url, {\n method: 'PUT',\n headers: {\n 'Accept': '*/*',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${request.accessToken}`\n },\n body: JSON.stringify({\n finalComputedPD: request.finalComputedPD,\n finalFaceBreadth: request.finalFaceBreadth,\n irisFaceBreadth: 0,\n irisRawPD: 0\n })\n })\n .then((response) => {\n if (response.ok) {\n return;\n } else {\n throw new Error(`${response.status}: ${response.statusText}`);\n }\n });\n};\n\nexport {\n uploadMeasurementRequest\n};","import { getConfig } from '../config/Config';\nimport { InvalidInputError, RequestError } from '../error/errors';\nimport { pollProcessingStatus, pollPromise } from '../helpers/RequestHelper';\nimport { ProfileReturn } from '../interfaces/Profile';\nimport { ProcessVideoRequestData, UploadVideoRequestData } from '../interfaces/Video';\nimport { profileRequest } from './ProfileRequest';\nimport { refreshRequest } from './RefreshRequest';\n\nconst uploadVideoFetch = (\n request: UploadVideoRequestData\n): Promise => {\n\n const form = new FormData();\n const mimeType = `video/${request.fileType}`;\n form.append('file', new File(request.video, `videoTake.${request.fileType}`, { type: mimeType }));\n\n return fetch(`${request.uploadPath}/videoTake.${request.fileType}`, {\n method: 'POST',\n headers: {\n 'Accept': '*/*',\n Authorization: `Bearer ${request.accessToken}`,\n },\n body: form\n }).then(response => {\n const url = getConfig(request.environment, 'additionalInfoUrl');\n\n if (response.ok) {\n return fetch(`${url}/${request.videoId}`, {\n method: 'PUT',\n headers: {\n 'Accept': '*/*',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${request.accessToken}`,\n },\n 'body': `{ \"mimeType\": \"${mimeType}\" }`\n });\n } else {\n const e = new Error('failed to upload');\n throw e;\n }\n });\n};\n\nconst processVideoFetch = (\n request: ProcessVideoRequestData\n): Promise> => {\n const mlUrl = getConfig(request.environment, 'enrichUrl');\n const vtoUrl = getConfig(request.environment, 'poseExtractionUrl');\n\n return Promise.all([\n (request.enableMachineLearning) ? fetch(mlUrl, {\n method: 'POST',\n headers: {\n 'Accept': '*/*',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${request.accessToken}`\n },\n 'body': `{ \"uuid\": \"${request.videoId}\" }`\n }): undefined,\n (request.enableVto) ? fetch(vtoUrl, {\n method: 'POST',\n headers: {\n 'Accept': '*/*',\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${request.accessToken}`\n },\n 'body': `{ \"uuid\": \"${request.videoId}\" }`\n }) : undefined\n ]);\n};\n\nconst uploadVideoRequest = (\n request: UploadVideoRequestData\n): Promise => {\n\n return uploadVideoFetch(request).then((uploadVideoResponse) => {\n if (uploadVideoResponse.status === 401) {\n return refreshRequest(request).then((refreshResponse) => {\n return uploadVideoFetch({\n ...request,\n accessToken: refreshResponse.accessToken,\n refreshToken: refreshResponse.refreshToken\n });\n });\n } else {\n return uploadVideoResponse;\n }\n }).then((response) => {\n if (response.ok) {\n return;\n } else {\n return response.json().catch(() => {\n throw new Error(`${response.status}: ${response.statusText}`);\n }).then((json) => {\n throw new Error(JSON.stringify(json));\n });\n }\n });\n};\n\nconst processVideoRequest = (\n request: ProcessVideoRequestData\n): Promise => {\n\n if (!request.enableMachineLearning && !request.enableVto) {\n return Promise.reject(new InvalidInputError('enableMachineLearning and enableVto cannot both be set to false'));\n }\n\n return processVideoFetch(request).then((processVideoResponse) => {\n if ((!!processVideoResponse[0] && processVideoResponse[0].ok && processVideoResponse[0].status === 401)\n || (!!processVideoResponse[1] && processVideoResponse[1].ok && processVideoResponse[1].status === 401)) {\n return refreshRequest(request).then((refreshResponse) => {\n return processVideoFetch({\n ...request,\n accessToken: refreshResponse.accessToken,\n refreshToken: refreshResponse.refreshToken\n });\n });\n } else {\n return processVideoResponse;\n }\n\n }).then((response) => {\n if ((response[0] === undefined || response[0].ok)\n && (response[1] === undefined || response[1].ok)) {\n\n const promises: Promise[] = [];\n const entries: string[] = ['POSES_EXTRACTION'];\n\n if (request.enableVto) {\n entries.push('BASEL_MESH');\n }\n\n if (request.enableMachineLearning) {\n entries.push('ML_INFORMATION');\n\n const pdStatusUrl = `${getConfig(request.environment, 'pdStatusUrl')}/${request.videoId}` ;\n promises.push(pollPromise(\n 1000,\n 30000,\n () => pollProcessingStatus(request, pdStatusUrl, ['PD']),\n request.shouldCancel\n ));\n }\n\n const statusUrl = `${getConfig(request.environment, 'statusUrl')}/${request.videoId}` ;\n promises.push(pollPromise(\n 1000,\n 30000,\n () => pollProcessingStatus(request, statusUrl, entries),\n request.shouldCancel\n ));\n\n return Promise.all(promises).then(results => results.every(result => !!result));\n\n } else {\n throw new RequestError(`failed to poll status with sessionId=${request.videoId}`);\n }\n\n }).then((success) => {\n if (success) {\n return profileRequest(request);\n } else {\n throw new RequestError(`failed to poll status with sessionId=${request.videoId}`);\n }\n });\n};\n\nexport {\n uploadVideoRequest,\n processVideoRequest\n};\n"],"names":["envHost","envMap","STAGING","loginFaUrl","loginVmUrl","refreshUrl","bipaTextUrl","bipaSubmitFormUrl","videoSessionUrl","enrichUrl","vtoUrl","additionalInfoUrl","poseExtractionUrl","statusUrl","pdStatusUrl","profileUrl","measurementUrl","ACCEPTANCE","PRODUCTION","getConfig","env","param","MicroserviceError","constructor","type","message","error","name","stack","Object","setPrototypeOf","prototype","Error","EnvironmentError","InvalidInputError","LocaleError","locale","RequestError","TimeoutError","duration","logger","RemoteLogConfig","getLoggerInfo","delay","ms","Promise","resolve","setTimeout","pollPromise","interval","timeout","promise","shouldCancel","completed","startTime","Date","now","reject","then","result","catch","debug","pollProcessingStatus","request","url","entryTypes","fetch","method","headers","Authorization","accessToken","response","ok","json","pollingEntry","filter","entry","includes","length","complete","every","progress","some","success","err","parseJsonResponse","status","statusText","JSON","stringify","refreshRequest","environment","body","refresh_token","refreshToken","refreshReturn","access_token","onAuthUpdated","bipaAgreementFetch","bipaAgreementUrl","bipaAgreementRequest","bipaVersion","bipaDescription","bipaAgreementResponse","refreshResponse","version","description","bipaUrls","parse","jsonUrl","text","BIPA_AGREEMENT","submitBipaFormFetch","bipaSubmitUrl","source","firstName","lastName","email","submitBipaFormRequest","submitBipaResponse","profileFetch","videoId","profileRequest","profileResponse","mlInformations","uuid","uploadImageFetch","form","FormData","append","File","img","uploadPath","processImageFetch","mlUrl","all","enableMachineLearning","undefined","enableVto","uploadImageRequest","uploadImageResponse","uploadImageDataRequest","w","imgData","width","h","height","canvas","document","createElement","ctx","getContext","putImageData","toBlob","blob","imgBlob","processImageRequest","processImageResponse","promises","entries","push","results","loginRequest","loginType","rememberMe","authData","sessionFetch","region","sessionRequest","sessionResponse","uploadBasePath","uploadMeasurementRequest","finalComputedPD","finalFaceBreadth","irisFaceBreadth","irisRawPD","uploadVideoFetch","mimeType","fileType","video","processVideoFetch","uploadVideoRequest","uploadVideoResponse","processVideoRequest","processVideoResponse"],"sourceRoot":""}