@snap/camera-kit 0.7.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/LICENSE.md +6247 -0
- package/README.md +166 -0
- package/docs/html/.nojekyll +1 -0
- package/docs/html/assets/highlight.css +106 -0
- package/docs/html/assets/main.js +54 -0
- package/docs/html/assets/search.js +1 -0
- package/docs/html/assets/style.css +1225 -0
- package/docs/html/assets/widgets.png +0 -0
- package/docs/html/assets/widgets@2x.png +0 -0
- package/docs/html/classes/CameraKit.html +121 -0
- package/docs/html/classes/CameraKitSession.html +347 -0
- package/docs/html/classes/CameraKitSource.html +152 -0
- package/docs/html/classes/LensPerformanceMeasurement.html +115 -0
- package/docs/html/classes/LensPerformanceMetrics.html +76 -0
- package/docs/html/classes/LensRepository.html +171 -0
- package/docs/html/classes/LensSources.html +82 -0
- package/docs/html/classes/Transform2D.html +99 -0
- package/docs/html/classes/TypedCustomEvent.html +109 -0
- package/docs/html/classes/TypedEventTarget.html +146 -0
- package/docs/html/functions/Injectable.html +193 -0
- package/docs/html/functions/bootstrapCameraKit.html +158 -0
- package/docs/html/functions/createExtension.html +127 -0
- package/docs/html/functions/createImageSource.html +123 -0
- package/docs/html/functions/createMediaStreamSource.html +123 -0
- package/docs/html/functions/createUserMediaSource.html +127 -0
- package/docs/html/functions/createVideoSource.html +124 -0
- package/docs/html/functions/estimateLensPerformance.html +116 -0
- package/docs/html/functions/getRequiredBootstrapURLs.html +124 -0
- package/docs/html/functions/lensSourcesFactory.html +116 -0
- package/docs/html/functions/uriHandlersFactory.html +118 -0
- package/docs/html/index.html +208 -0
- package/docs/html/interfaces/CameraKitBootstrapConfiguration.html +132 -0
- package/docs/html/interfaces/CameraKitSourceSubscriber.html +121 -0
- package/docs/html/interfaces/ComputedFrameMetrics.html +70 -0
- package/docs/html/interfaces/CreateSessionOptions.html +77 -0
- package/docs/html/interfaces/EstimatedLensPerformance.html +78 -0
- package/docs/html/interfaces/Lens.html +115 -0
- package/docs/html/interfaces/LensSource.html +113 -0
- package/docs/html/interfaces/MediaStreamSourceOptions.html +65 -0
- package/docs/html/interfaces/UriCancelRequest.html +65 -0
- package/docs/html/interfaces/UriHandler.html +128 -0
- package/docs/html/interfaces/UriRequest.html +80 -0
- package/docs/html/interfaces/UriResponse.html +80 -0
- package/docs/html/interfaces/VideoSourceOptions.html +60 -0
- package/docs/html/modules.html +198 -0
- package/docs/html/types/AssetLoader.html +126 -0
- package/docs/html/types/AssetTiming.html +116 -0
- package/docs/html/types/BenchmarkError.html +107 -0
- package/docs/html/types/BootstrapError.html +110 -0
- package/docs/html/types/CacheKeyNotFoundError.html +107 -0
- package/docs/html/types/CameraKitDeviceInfo.html +114 -0
- package/docs/html/types/CameraKitSessionEventListener.html +109 -0
- package/docs/html/types/CameraKitSessionEvents.html +118 -0
- package/docs/html/types/CameraKitSourceError.html +107 -0
- package/docs/html/types/CameraKitSourceInfo.html +107 -0
- package/docs/html/types/CameraKitSourceOptions.html +113 -0
- package/docs/html/types/ConfigurationError.html +109 -0
- package/docs/html/types/Keyboard.html +196 -0
- package/docs/html/types/KeyboardEvents.html +109 -0
- package/docs/html/types/LegalError.html +107 -0
- package/docs/html/types/LensAssetError.html +109 -0
- package/docs/html/types/LensContentValidationError.html +107 -0
- package/docs/html/types/LensError.html +107 -0
- package/docs/html/types/LensExecutionError.html +114 -0
- package/docs/html/types/LensImagePickerError.html +110 -0
- package/docs/html/types/LensLaunchParams.html +109 -0
- package/docs/html/types/LensMetricsEvents.html +110 -0
- package/docs/html/types/LensPerformanceCluster.html +107 -0
- package/docs/html/types/LensView.html +119 -0
- package/docs/html/types/LensWait.html +111 -0
- package/docs/html/types/PersistentStoreError.html +109 -0
- package/docs/html/types/PlatformNotSupportedError.html +110 -0
- package/docs/html/types/PublicContainer.html +110 -0
- package/docs/html/types/RenderTarget.html +111 -0
- package/docs/html/types/Uri.html +107 -0
- package/docs/html/types/UriHandlers.html +109 -0
- package/docs/html/types/WebGLError.html +107 -0
- package/docs/html/variables/extensionRequestContext.html +109 -0
- package/docs/md/.nojekyll +1 -0
- package/docs/md/README.md +168 -0
- package/docs/md/classes/CameraKit.md +94 -0
- package/docs/md/classes/CameraKitSession.md +359 -0
- package/docs/md/classes/CameraKitSource.md +110 -0
- package/docs/md/classes/LensPerformanceMeasurement.md +77 -0
- package/docs/md/classes/LensPerformanceMetrics.md +37 -0
- package/docs/md/classes/LensRepository.md +145 -0
- package/docs/md/classes/LensSources.md +29 -0
- package/docs/md/classes/Transform2D.md +55 -0
- package/docs/md/classes/TypedCustomEvent.md +65 -0
- package/docs/md/classes/TypedEventTarget.md +103 -0
- package/docs/md/interfaces/CameraKitBootstrapConfiguration.md +106 -0
- package/docs/md/interfaces/CameraKitSourceSubscriber.md +55 -0
- package/docs/md/interfaces/ComputedFrameMetrics.md +29 -0
- package/docs/md/interfaces/CreateSessionOptions.md +35 -0
- package/docs/md/interfaces/EstimatedLensPerformance.md +38 -0
- package/docs/md/interfaces/Lens.md +84 -0
- package/docs/md/interfaces/LensSource.md +68 -0
- package/docs/md/interfaces/MediaStreamSourceOptions.md +22 -0
- package/docs/md/interfaces/UriCancelRequest.md +22 -0
- package/docs/md/interfaces/UriHandler.md +63 -0
- package/docs/md/interfaces/UriRequest.md +43 -0
- package/docs/md/interfaces/UriResponse.md +43 -0
- package/docs/md/interfaces/VideoSourceOptions.md +15 -0
- package/docs/md/modules.md +827 -0
- package/lib/CameraKit.d.ts +170 -0
- package/lib/CameraKit.js +145 -0
- package/lib/CameraKit.js.map +1 -0
- package/lib/__tests__/data.d.ts +9 -0
- package/lib/__tests__/data.js +50 -0
- package/lib/__tests__/data.js.map +1 -0
- package/lib/__tests__/deferred.d.ts +16 -0
- package/lib/__tests__/deferred.js +29 -0
- package/lib/__tests__/deferred.js.map +1 -0
- package/lib/__tests__/jest.matchers.d.ts +17 -0
- package/lib/__tests__/jest.matchers.js +67 -0
- package/lib/__tests__/jest.matchers.js.map +1 -0
- package/lib/assertPlatformSupported.d.ts +4 -0
- package/lib/assertPlatformSupported.js +10 -0
- package/lib/assertPlatformSupported.js.map +1 -0
- package/lib/benchmark/benchmarkGflops.d.ts +16 -0
- package/lib/benchmark/benchmarkGflops.js +129 -0
- package/lib/benchmark/benchmarkGflops.js.map +1 -0
- package/lib/benchmark/estimateLensPerformanceCluster.d.ts +33 -0
- package/lib/benchmark/estimateLensPerformanceCluster.js +48 -0
- package/lib/benchmark/estimateLensPerformanceCluster.js.map +1 -0
- package/lib/benchmark/webglUtils.d.ts +7 -0
- package/lib/benchmark/webglUtils.js +87 -0
- package/lib/benchmark/webglUtils.js.map +1 -0
- package/lib/bootstrapCameraKit.d.ts +96 -0
- package/lib/bootstrapCameraKit.js +204 -0
- package/lib/bootstrapCameraKit.js.map +1 -0
- package/lib/common/__mocks__/loadScript.d.ts +1 -0
- package/lib/common/__mocks__/loadScript.js +10 -0
- package/lib/common/__mocks__/loadScript.js.map +1 -0
- package/lib/common/assertions.d.ts +27 -0
- package/lib/common/assertions.js +39 -0
- package/lib/common/assertions.js.map +1 -0
- package/lib/common/cameraKitUserAgent.d.ts +34 -0
- package/lib/common/cameraKitUserAgent.js +216 -0
- package/lib/common/cameraKitUserAgent.js.map +1 -0
- package/lib/common/copyDefinedProperties.d.ts +13 -0
- package/lib/common/copyDefinedProperties.js +16 -0
- package/lib/common/copyDefinedProperties.js.map +1 -0
- package/lib/common/entries.d.ts +3 -0
- package/lib/common/entries.js +3 -0
- package/lib/common/entries.js.map +1 -0
- package/lib/common/errorHelpers.d.ts +10 -0
- package/lib/common/errorHelpers.js +24 -0
- package/lib/common/errorHelpers.js.map +1 -0
- package/lib/common/getFilename.d.ts +1 -0
- package/lib/common/getFilename.js +4 -0
- package/lib/common/getFilename.js.map +1 -0
- package/lib/common/index.d.ts +2 -0
- package/lib/common/index.js +3 -0
- package/lib/common/index.js.map +1 -0
- package/lib/common/loadScript.d.ts +1 -0
- package/lib/common/loadScript.js +11 -0
- package/lib/common/loadScript.js.map +1 -0
- package/lib/common/locale.d.ts +2 -0
- package/lib/common/locale.js +11 -0
- package/lib/common/locale.js.map +1 -0
- package/lib/common/localization.d.ts +43 -0
- package/lib/common/localization.js +43 -0
- package/lib/common/localization.js.map +1 -0
- package/lib/common/memoize.d.ts +8 -0
- package/lib/common/memoize.js +15 -0
- package/lib/common/memoize.js.map +1 -0
- package/lib/common/pageVisibility.d.ts +20 -0
- package/lib/common/pageVisibility.js +62 -0
- package/lib/common/pageVisibility.js.map +1 -0
- package/lib/common/time.d.ts +1 -0
- package/lib/common/time.js +2 -0
- package/lib/common/time.js.map +1 -0
- package/lib/common/typeguards.d.ts +53 -0
- package/lib/common/typeguards.js +92 -0
- package/lib/common/typeguards.js.map +1 -0
- package/lib/common/types.d.ts +10 -0
- package/lib/common/types.js +2 -0
- package/lib/common/types.js.map +1 -0
- package/lib/common/validate.d.ts +14 -0
- package/lib/common/validate.js +104 -0
- package/lib/common/validate.js.map +1 -0
- package/lib/configuration.d.ts +92 -0
- package/lib/configuration.js +36 -0
- package/lib/configuration.js.map +1 -0
- package/lib/configurationOverrides.d.ts +12 -0
- package/lib/configurationOverrides.js +41 -0
- package/lib/configurationOverrides.js.map +1 -0
- package/lib/dependency-injection/Container.d.ts +177 -0
- package/lib/dependency-injection/Container.js +160 -0
- package/lib/dependency-injection/Container.js.map +1 -0
- package/lib/dependency-injection/Injectable.d.ts +39 -0
- package/lib/dependency-injection/Injectable.js +18 -0
- package/lib/dependency-injection/Injectable.js.map +1 -0
- package/lib/dependency-injection/PartialContainer.d.ts +81 -0
- package/lib/dependency-injection/PartialContainer.js +85 -0
- package/lib/dependency-injection/PartialContainer.js.map +1 -0
- package/lib/dependency-injection/RootServices.d.ts +62 -0
- package/lib/dependency-injection/RootServices.js +2 -0
- package/lib/dependency-injection/RootServices.js.map +1 -0
- package/lib/dependency-injection/types.d.ts +56 -0
- package/lib/dependency-injection/types.js +2 -0
- package/lib/dependency-injection/types.js.map +1 -0
- package/lib/environment.json +1 -0
- package/lib/events/TypedCustomEvent.d.ts +10 -0
- package/lib/events/TypedCustomEvent.js +11 -0
- package/lib/events/TypedCustomEvent.js.map +1 -0
- package/lib/events/TypedEventTarget.d.ts +25 -0
- package/lib/events/TypedEventTarget.js +57 -0
- package/lib/events/TypedEventTarget.js.map +1 -0
- package/lib/events/scan.d.ts +15 -0
- package/lib/events/scan.js +46 -0
- package/lib/events/scan.js.map +1 -0
- package/lib/extensions/LensSources.d.ts +58 -0
- package/lib/extensions/LensSources.js +50 -0
- package/lib/extensions/LensSources.js.map +1 -0
- package/lib/extensions/UriHandlers.d.ts +54 -0
- package/lib/extensions/UriHandlers.js +93 -0
- package/lib/extensions/UriHandlers.js.map +1 -0
- package/lib/extensions/extensionRequestContext.d.ts +4 -0
- package/lib/extensions/extensionRequestContext.js +14 -0
- package/lib/extensions/extensionRequestContext.js.map +1 -0
- package/lib/generated-proto/blizzard/cameraKitEvents.d.ts +5603 -0
- package/lib/generated-proto/blizzard/cameraKitEvents.js +522 -0
- package/lib/generated-proto/blizzard/cameraKitEvents.js.map +1 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/business_events.d.ts +98 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/business_events.js +260 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/business_events.js.map +1 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/export.d.ts +543 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/export.js +429 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/export.js.map +1 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/legal_prompt.d.ts +100 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/legal_prompt.js +164 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/legal_prompt.js.map +1 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/lens.d.ts +395 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/lens.js +644 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/lens.js.map +1 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/operational_metrics.d.ts +185 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/operational_metrics.js +172 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/operational_metrics.js.map +1 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/ranking.d.ts +86 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/ranking.js +234 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/ranking.js.map +1 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/service.d.ts +854 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/service.js +629 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/service.js.map +1 -0
- package/lib/generated-proto/pb_schema/cdp/cof/benchmark.d.ts +86 -0
- package/lib/generated-proto/pb_schema/cdp/cof/benchmark.js +185 -0
- package/lib/generated-proto/pb_schema/cdp/cof/benchmark.js.map +1 -0
- package/lib/generated-proto/pb_schema/cdp/cof/benchmark_name.d.ts +95 -0
- package/lib/generated-proto/pb_schema/cdp/cof/benchmark_name.js +104 -0
- package/lib/generated-proto/pb_schema/cdp/cof/benchmark_name.js.map +1 -0
- package/lib/generated-proto/pb_schema/cdp/cof/circumstance_service.d.ts +10212 -0
- package/lib/generated-proto/pb_schema/cdp/cof/circumstance_service.js +1300 -0
- package/lib/generated-proto/pb_schema/cdp/cof/circumstance_service.js.map +1 -0
- package/lib/generated-proto/pb_schema/cdp/cof/config_request.d.ts +401 -0
- package/lib/generated-proto/pb_schema/cdp/cof/config_request.js +525 -0
- package/lib/generated-proto/pb_schema/cdp/cof/config_request.js.map +1 -0
- package/lib/generated-proto/pb_schema/cdp/cof/config_response.d.ts +1287 -0
- package/lib/generated-proto/pb_schema/cdp/cof/config_response.js +135 -0
- package/lib/generated-proto/pb_schema/cdp/cof/config_response.js.map +1 -0
- package/lib/generated-proto/pb_schema/cdp/cof/config_result.d.ts +4208 -0
- package/lib/generated-proto/pb_schema/cdp/cof/config_result.js +1053 -0
- package/lib/generated-proto/pb_schema/cdp/cof/config_result.js.map +1 -0
- package/lib/generated-proto/pb_schema/cdp/cof/debug_info.d.ts +102 -0
- package/lib/generated-proto/pb_schema/cdp/cof/debug_info.js +165 -0
- package/lib/generated-proto/pb_schema/cdp/cof/debug_info.js.map +1 -0
- package/lib/generated-proto/pb_schema/cdp/cof/namespace.d.ts +8 -0
- package/lib/generated-proto/pb_schema/cdp/cof/namespace.js +17 -0
- package/lib/generated-proto/pb_schema/cdp/cof/namespace.js.map +1 -0
- package/lib/generated-proto/pb_schema/common/ruid.d.ts +75 -0
- package/lib/generated-proto/pb_schema/common/ruid.js +96 -0
- package/lib/generated-proto/pb_schema/common/ruid.js.map +1 -0
- package/lib/generated-proto/pb_schema/common/value.d.ts +131 -0
- package/lib/generated-proto/pb_schema/common/value.js +204 -0
- package/lib/generated-proto/pb_schema/common/value.js.map +1 -0
- package/lib/generated-proto/pb_schema/google/api/annotations.d.ts +1 -0
- package/lib/generated-proto/pb_schema/google/api/annotations.js +9 -0
- package/lib/generated-proto/pb_schema/google/api/annotations.js.map +1 -0
- package/lib/generated-proto/pb_schema/google/api/http.d.ts +3636 -0
- package/lib/generated-proto/pb_schema/google/api/http.js +271 -0
- package/lib/generated-proto/pb_schema/google/api/http.js.map +1 -0
- package/lib/generated-proto/pb_schema/google/protobuf/any.d.ts +139 -0
- package/lib/generated-proto/pb_schema/google/protobuf/any.js +94 -0
- package/lib/generated-proto/pb_schema/google/protobuf/any.js.map +1 -0
- package/lib/generated-proto/pb_schema/google/protobuf/descriptor.d.ts +50968 -0
- package/lib/generated-proto/pb_schema/google/protobuf/descriptor.js +2962 -0
- package/lib/generated-proto/pb_schema/google/protobuf/descriptor.js.map +1 -0
- package/lib/generated-proto/pb_schema/google/protobuf/timestamp.d.ts +98 -0
- package/lib/generated-proto/pb_schema/google/protobuf/timestamp.js +82 -0
- package/lib/generated-proto/pb_schema/google/protobuf/timestamp.js.map +1 -0
- package/lib/generated-proto/pb_schema/google/protobuf/wrappers.d.ts +173 -0
- package/lib/generated-proto/pb_schema/google/protobuf/wrappers.js +332 -0
- package/lib/generated-proto/pb_schema/google/protobuf/wrappers.js.map +1 -0
- package/lib/generated-proto/pb_schema/lenses/geocircle.d.ts +42 -0
- package/lib/generated-proto/pb_schema/lenses/geocircle.js +52 -0
- package/lib/generated-proto/pb_schema/lenses/geocircle.js.map +1 -0
- package/lib/generated-proto/pb_schema/lenses/geopoint.d.ts +32 -0
- package/lib/generated-proto/pb_schema/lenses/geopoint.js +50 -0
- package/lib/generated-proto/pb_schema/lenses/geopoint.js.map +1 -0
- package/lib/generated-proto/pb_schema/lenses/launch_params.d.ts +29 -0
- package/lib/generated-proto/pb_schema/lenses/launch_params.js +43 -0
- package/lib/generated-proto/pb_schema/lenses/launch_params.js.map +1 -0
- package/lib/generated-proto/pb_schema/lenses/launchdata.d.ts +365 -0
- package/lib/generated-proto/pb_schema/lenses/launchdata.js +216 -0
- package/lib/generated-proto/pb_schema/lenses/launchdata.js.map +1 -0
- package/lib/generated-proto/pb_schema/lenses/lures.d.ts +113 -0
- package/lib/generated-proto/pb_schema/lenses/lures.js +64 -0
- package/lib/generated-proto/pb_schema/lenses/lures.js.map +1 -0
- package/lib/generated-proto/pb_schema/lenses/persistent_store.d.ts +29 -0
- package/lib/generated-proto/pb_schema/lenses/persistent_store.js +43 -0
- package/lib/generated-proto/pb_schema/lenses/persistent_store.js.map +1 -0
- package/lib/generated-proto/pb_schema/lenses/snappable.d.ts +921 -0
- package/lib/generated-proto/pb_schema/lenses/snappable.js +954 -0
- package/lib/generated-proto/pb_schema/lenses/snappable.js.map +1 -0
- package/lib/generated-proto/pb_schema/lenses/user_data.d.ts +247 -0
- package/lib/generated-proto/pb_schema/lenses/user_data.js +362 -0
- package/lib/generated-proto/pb_schema/lenses/user_data.js.map +1 -0
- package/lib/handlers/HandlerChainBuilder.d.ts +95 -0
- package/lib/handlers/HandlerChainBuilder.js +187 -0
- package/lib/handlers/HandlerChainBuilder.js.map +1 -0
- package/lib/handlers/arrayBufferParsingHandler.d.ts +10 -0
- package/lib/handlers/arrayBufferParsingHandler.js +18 -0
- package/lib/handlers/arrayBufferParsingHandler.js.map +1 -0
- package/lib/handlers/batchingHandler.d.ts +25 -0
- package/lib/handlers/batchingHandler.js +79 -0
- package/lib/handlers/batchingHandler.js.map +1 -0
- package/lib/handlers/cameraKitServiceFetchHandlerFactory.d.ts +12 -0
- package/lib/handlers/cameraKitServiceFetchHandlerFactory.js +19 -0
- package/lib/handlers/cameraKitServiceFetchHandlerFactory.js.map +1 -0
- package/lib/handlers/debugHandler.d.ts +8 -0
- package/lib/handlers/debugHandler.js +27 -0
- package/lib/handlers/debugHandler.js.map +1 -0
- package/lib/handlers/defaultFetchHandler.d.ts +15 -0
- package/lib/handlers/defaultFetchHandler.js +29 -0
- package/lib/handlers/defaultFetchHandler.js.map +1 -0
- package/lib/handlers/headersModifyingFetchHandler.d.ts +8 -0
- package/lib/handlers/headersModifyingFetchHandler.js +13 -0
- package/lib/handlers/headersModifyingFetchHandler.js.map +1 -0
- package/lib/handlers/index.d.ts +2 -0
- package/lib/handlers/index.js +3 -0
- package/lib/handlers/index.js.map +1 -0
- package/lib/handlers/mappingHandler.d.ts +15 -0
- package/lib/handlers/mappingHandler.js +65 -0
- package/lib/handlers/mappingHandler.js.map +1 -0
- package/lib/handlers/noCorsRetryingFetchHandler.d.ts +48 -0
- package/lib/handlers/noCorsRetryingFetchHandler.js +94 -0
- package/lib/handlers/noCorsRetryingFetchHandler.js.map +1 -0
- package/lib/handlers/persistingHandler.d.ts +14 -0
- package/lib/handlers/persistingHandler.js +71 -0
- package/lib/handlers/persistingHandler.js.map +1 -0
- package/lib/handlers/rateLimitingHandler.d.ts +20 -0
- package/lib/handlers/rateLimitingHandler.js +43 -0
- package/lib/handlers/rateLimitingHandler.js.map +1 -0
- package/lib/handlers/requestStateEmittingHandler.d.ts +29 -0
- package/lib/handlers/requestStateEmittingHandler.js +43 -0
- package/lib/handlers/requestStateEmittingHandler.js.map +1 -0
- package/lib/handlers/responseCachingHandler.d.ts +27 -0
- package/lib/handlers/responseCachingHandler.js +94 -0
- package/lib/handlers/responseCachingHandler.js.map +1 -0
- package/lib/handlers/retryingHandler.d.ts +37 -0
- package/lib/handlers/retryingHandler.js +73 -0
- package/lib/handlers/retryingHandler.js.map +1 -0
- package/lib/handlers/timeoutHandler.d.ts +18 -0
- package/lib/handlers/timeoutHandler.js +30 -0
- package/lib/handlers/timeoutHandler.js.map +1 -0
- package/lib/index.d.ts +33 -0
- package/lib/index.js +32 -0
- package/lib/index.js.map +1 -0
- package/lib/legal/legalPrompt.d.ts +17 -0
- package/lib/legal/legalPrompt.js +144 -0
- package/lib/legal/legalPrompt.js.map +1 -0
- package/lib/legal/legalState.d.ts +50 -0
- package/lib/legal/legalState.js +149 -0
- package/lib/legal/legalState.js.map +1 -0
- package/lib/lens/Lens.d.ts +71 -0
- package/lib/lens/Lens.js +63 -0
- package/lib/lens/Lens.js.map +1 -0
- package/lib/lens/LensLaunchParams.d.ts +19 -0
- package/lib/lens/LensLaunchParams.js +38 -0
- package/lib/lens/LensLaunchParams.js.map +1 -0
- package/lib/lens/LensPersistenceStore.d.ts +7 -0
- package/lib/lens/LensPersistenceStore.js +20 -0
- package/lib/lens/LensPersistenceStore.js.map +1 -0
- package/lib/lens/LensRepository.d.ts +134 -0
- package/lib/lens/LensRepository.js +239 -0
- package/lib/lens/LensRepository.js.map +1 -0
- package/lib/lens/assets/LensAssetRepository.d.ts +66 -0
- package/lib/lens/assets/LensAssetRepository.js +179 -0
- package/lib/lens/assets/LensAssetRepository.js.map +1 -0
- package/lib/lens/assets/LensAssetsProvider.d.ts +21 -0
- package/lib/lens/assets/LensAssetsProvider.js +41 -0
- package/lib/lens/assets/LensAssetsProvider.js.map +1 -0
- package/lib/lens/assets/deviceDependentAssetLoader.d.ts +11 -0
- package/lib/lens/assets/deviceDependentAssetLoader.js +58 -0
- package/lib/lens/assets/deviceDependentAssetLoader.js.map +1 -0
- package/lib/lens/assets/remoteMediaAssetLoaderFactory.d.ts +10 -0
- package/lib/lens/assets/remoteMediaAssetLoaderFactory.js +26 -0
- package/lib/lens/assets/remoteMediaAssetLoaderFactory.js.map +1 -0
- package/lib/lens/assets/staticAssetLoader.d.ts +10 -0
- package/lib/lens/assets/staticAssetLoader.js +24 -0
- package/lib/lens/assets/staticAssetLoader.js.map +1 -0
- package/lib/lens/index.d.ts +7 -0
- package/lib/lens/index.js +7 -0
- package/lib/lens/index.js.map +1 -0
- package/lib/lens/lensEnvelopeUtil.d.ts +5 -0
- package/lib/lens/lensEnvelopeUtil.js +19 -0
- package/lib/lens/lensEnvelopeUtil.js.map +1 -0
- package/lib/lens/lensHttpUtil.d.ts +4 -0
- package/lib/lens/lensHttpUtil.js +30 -0
- package/lib/lens/lensHttpUtil.js.map +1 -0
- package/lib/lens-client-interface/exif.d.ts +20 -0
- package/lib/lens-client-interface/exif.js +61 -0
- package/lib/lens-client-interface/exif.js.map +1 -0
- package/lib/lens-client-interface/imagePicker.d.ts +7 -0
- package/lib/lens-client-interface/imagePicker.js +128 -0
- package/lib/lens-client-interface/imagePicker.js.map +1 -0
- package/lib/lens-client-interface/lensClientInterface.d.ts +13 -0
- package/lib/lens-client-interface/lensClientInterface.js +30 -0
- package/lib/lens-client-interface/lensClientInterface.js.map +1 -0
- package/lib/lens-core-module/generated-types.d.ts +426 -0
- package/lib/lens-core-module/generated-types.js +2 -0
- package/lib/lens-core-module/generated-types.js.map +1 -0
- package/lib/lens-core-module/index.d.ts +2 -0
- package/lib/lens-core-module/index.js +3 -0
- package/lib/lens-core-module/index.js.map +1 -0
- package/lib/lens-core-module/loader/index.d.ts +1 -0
- package/lib/lens-core-module/loader/index.js +2 -0
- package/lib/lens-core-module/loader/index.js.map +1 -0
- package/lib/lens-core-module/loader/lensCoreFactory.d.ts +30 -0
- package/lib/lens-core-module/loader/lensCoreFactory.js +121 -0
- package/lib/lens-core-module/loader/lensCoreFactory.js.map +1 -0
- package/lib/lensCoreWasmVersions.json +5 -0
- package/lib/logger/errorLoggingDecorator.d.ts +9 -0
- package/lib/logger/errorLoggingDecorator.js +32 -0
- package/lib/logger/errorLoggingDecorator.js.map +1 -0
- package/lib/logger/logEntries.d.ts +15 -0
- package/lib/logger/logEntries.js +14 -0
- package/lib/logger/logEntries.js.map +1 -0
- package/lib/logger/logger.d.ts +35 -0
- package/lib/logger/logger.js +48 -0
- package/lib/logger/logger.js.map +1 -0
- package/lib/logger/registerLogEntriesSubscriber.d.ts +14 -0
- package/lib/logger/registerLogEntriesSubscriber.js +23 -0
- package/lib/logger/registerLogEntriesSubscriber.js.map +1 -0
- package/lib/media-sources/CameraKitSource.d.ts +88 -0
- package/lib/media-sources/CameraKitSource.js +140 -0
- package/lib/media-sources/CameraKitSource.js.map +1 -0
- package/lib/media-sources/FunctionSource.d.ts +30 -0
- package/lib/media-sources/FunctionSource.js +132 -0
- package/lib/media-sources/FunctionSource.js.map +1 -0
- package/lib/media-sources/ImageSource.d.ts +13 -0
- package/lib/media-sources/ImageSource.js +28 -0
- package/lib/media-sources/ImageSource.js.map +1 -0
- package/lib/media-sources/MediaStreamSource.d.ts +41 -0
- package/lib/media-sources/MediaStreamSource.js +146 -0
- package/lib/media-sources/MediaStreamSource.js.map +1 -0
- package/lib/media-sources/VideoSource.d.ts +21 -0
- package/lib/media-sources/VideoSource.js +38 -0
- package/lib/media-sources/VideoSource.js.map +1 -0
- package/lib/metrics/businessEventsReporter.d.ts +37 -0
- package/lib/metrics/businessEventsReporter.js +160 -0
- package/lib/metrics/businessEventsReporter.js.map +1 -0
- package/lib/metrics/metricsEventTarget.d.ts +41 -0
- package/lib/metrics/metricsEventTarget.js +11 -0
- package/lib/metrics/metricsEventTarget.js.map +1 -0
- package/lib/metrics/metricsHandler.d.ts +9 -0
- package/lib/metrics/metricsHandler.js +13 -0
- package/lib/metrics/metricsHandler.js.map +1 -0
- package/lib/metrics/operationalMetricsReporter.d.ts +52 -0
- package/lib/metrics/operationalMetricsReporter.js +108 -0
- package/lib/metrics/operationalMetricsReporter.js.map +1 -0
- package/lib/metrics/reporters/reportBenchmarks.d.ts +10 -0
- package/lib/metrics/reporters/reportBenchmarks.js +29 -0
- package/lib/metrics/reporters/reportBenchmarks.js.map +1 -0
- package/lib/metrics/reporters/reportGlobalException.d.ts +19 -0
- package/lib/metrics/reporters/reportGlobalException.js +68 -0
- package/lib/metrics/reporters/reportGlobalException.js.map +1 -0
- package/lib/metrics/reporters/reportHttpMetrics.d.ts +17 -0
- package/lib/metrics/reporters/reportHttpMetrics.js +92 -0
- package/lib/metrics/reporters/reportHttpMetrics.js.map +1 -0
- package/lib/metrics/reporters/reportLegalState.d.ts +15 -0
- package/lib/metrics/reporters/reportLegalState.js +34 -0
- package/lib/metrics/reporters/reportLegalState.js.map +1 -0
- package/lib/metrics/reporters/reportLensAndAssetDownload.d.ts +38 -0
- package/lib/metrics/reporters/reportLensAndAssetDownload.js +88 -0
- package/lib/metrics/reporters/reportLensAndAssetDownload.js.map +1 -0
- package/lib/metrics/reporters/reportLensValidationFailed.d.ts +20 -0
- package/lib/metrics/reporters/reportLensValidationFailed.js +24 -0
- package/lib/metrics/reporters/reportLensValidationFailed.js.map +1 -0
- package/lib/metrics/reporters/reportLensView.d.ts +36 -0
- package/lib/metrics/reporters/reportLensView.js +101 -0
- package/lib/metrics/reporters/reportLensView.js.map +1 -0
- package/lib/metrics/reporters/reportLensWait.d.ts +33 -0
- package/lib/metrics/reporters/reportLensWait.js +56 -0
- package/lib/metrics/reporters/reportLensWait.js.map +1 -0
- package/lib/metrics/reporters/reportSessionException.d.ts +17 -0
- package/lib/metrics/reporters/reportSessionException.js +12 -0
- package/lib/metrics/reporters/reportSessionException.js.map +1 -0
- package/lib/metrics/reporters/reportUserSession.d.ts +14 -0
- package/lib/metrics/reporters/reportUserSession.js +67 -0
- package/lib/metrics/reporters/reportUserSession.js.map +1 -0
- package/lib/metrics/reporters/reporters.d.ts +44 -0
- package/lib/metrics/reporters/reporters.js +33 -0
- package/lib/metrics/reporters/reporters.js.map +1 -0
- package/lib/namedErrors.d.ts +107 -0
- package/lib/namedErrors.js +56 -0
- package/lib/namedErrors.js.map +1 -0
- package/lib/persistence/ExpiringPersistence.d.ts +20 -0
- package/lib/persistence/ExpiringPersistence.js +58 -0
- package/lib/persistence/ExpiringPersistence.js.map +1 -0
- package/lib/persistence/IndexedDBPersistence.d.ts +47 -0
- package/lib/persistence/IndexedDBPersistence.js +180 -0
- package/lib/persistence/IndexedDBPersistence.js.map +1 -0
- package/lib/persistence/Persistence.d.ts +25 -0
- package/lib/persistence/Persistence.js +10 -0
- package/lib/persistence/Persistence.js.map +1 -0
- package/lib/remote-configuration/cofHandler.d.ts +21 -0
- package/lib/remote-configuration/cofHandler.js +75 -0
- package/lib/remote-configuration/cofHandler.js.map +1 -0
- package/lib/remote-configuration/remoteConfiguration.d.ts +13 -0
- package/lib/remote-configuration/remoteConfiguration.js +43 -0
- package/lib/remote-configuration/remoteConfiguration.js.map +1 -0
- package/lib/session/CameraKitSession.d.ts +252 -0
- package/lib/session/CameraKitSession.js +439 -0
- package/lib/session/CameraKitSession.js.map +1 -0
- package/lib/session/CameraKitSessionEvents.d.ts +33 -0
- package/lib/session/CameraKitSessionEvents.js +21 -0
- package/lib/session/CameraKitSessionEvents.js.map +1 -0
- package/lib/session/LensKeyboard.d.ts +89 -0
- package/lib/session/LensKeyboard.js +95 -0
- package/lib/session/LensKeyboard.js.map +1 -0
- package/lib/session/LensPerformanceMeasurement.d.ts +55 -0
- package/lib/session/LensPerformanceMeasurement.js +91 -0
- package/lib/session/LensPerformanceMeasurement.js.map +1 -0
- package/lib/session/LensPerformanceMetrics.d.ts +31 -0
- package/lib/session/LensPerformanceMetrics.js +58 -0
- package/lib/session/LensPerformanceMetrics.js.map +1 -0
- package/lib/session/index.d.ts +1 -0
- package/lib/session/index.js +2 -0
- package/lib/session/index.js.map +1 -0
- package/lib/session/lensState.d.ts +29 -0
- package/lib/session/lensState.js +160 -0
- package/lib/session/lensState.js.map +1 -0
- package/lib/session/sessionState.d.ts +10 -0
- package/lib/session/sessionState.js +12 -0
- package/lib/session/sessionState.js.map +1 -0
- package/lib/transforms/Transform2D.d.ts +17 -0
- package/lib/transforms/Transform2D.js +18 -0
- package/lib/transforms/Transform2D.js.map +1 -0
- package/lib/transforms/index.d.ts +1 -0
- package/lib/transforms/index.js +2 -0
- package/lib/transforms/index.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { FetchHandler } from "../../handlers/defaultFetchHandler";
|
|
2
|
+
import { RemoteConfiguration } from "../../remote-configuration/remoteConfiguration";
|
|
3
|
+
import { AssetLoader } from "./LensAssetRepository";
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare const deviceDependentAssetLoaderFactory: {
|
|
8
|
+
(args_0: FetchHandler<Response>, args_1: RemoteConfiguration): AssetLoader;
|
|
9
|
+
token: "deviceDependentAssetLoader";
|
|
10
|
+
dependencies: readonly ["defaultFetchHandler", "remoteConfiguration"];
|
|
11
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { catchError, firstValueFrom, map, mergeMap } from "rxjs";
|
|
3
|
+
import { isRecord, isString } from "../../common/typeguards";
|
|
4
|
+
import { Injectable } from "../../dependency-injection/Injectable";
|
|
5
|
+
import { createArrayBufferParsingHandler } from "../../handlers/arrayBufferParsingHandler";
|
|
6
|
+
import { defaultFetchHandlerFactory } from "../../handlers/defaultFetchHandler";
|
|
7
|
+
import { HandlerChainBuilder } from "../../handlers/HandlerChainBuilder";
|
|
8
|
+
import { remoteConfigurationFactory } from "../../remote-configuration/remoteConfiguration";
|
|
9
|
+
const hasStringValue = (value) => {
|
|
10
|
+
return isRecord(value) && isString(value.stringValue);
|
|
11
|
+
};
|
|
12
|
+
const isAssetConfig = (value) => {
|
|
13
|
+
return isRecord(value) && isString(value.url) && (value.checksum === undefined || isString(value.checksum));
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
export const deviceDependentAssetLoaderFactory = Injectable("deviceDependentAssetLoader", [defaultFetchHandlerFactory.token, remoteConfigurationFactory.token], (fetchHandler, remoteConfiguration) => {
|
|
19
|
+
const assetHandler = new HandlerChainBuilder(fetchHandler).map(createArrayBufferParsingHandler()).handler;
|
|
20
|
+
return function deviceDependentAssetLoader({ assetId }) {
|
|
21
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
22
|
+
const loadingFailed = (reason, cause) => new Error(`Cannot load device-dependent asset ${assetId}. ${reason}`, { cause });
|
|
23
|
+
return firstValueFrom(remoteConfiguration.get(assetId).pipe(catchError((error) => {
|
|
24
|
+
throw loadingFailed("COF config failed to load.", error);
|
|
25
|
+
}), map((configs) => {
|
|
26
|
+
if (configs.length === 0) {
|
|
27
|
+
throw loadingFailed(`No COF config found corresponding to that assetId.`);
|
|
28
|
+
}
|
|
29
|
+
// All of the deviceDependent asset configs will only have one value, so we can safely use the
|
|
30
|
+
// first (i.e. only) element in the configs list.
|
|
31
|
+
const [{ value }] = configs;
|
|
32
|
+
// Asset configurations are all JSON-encoded in the `stringValue` property. If it doesn't
|
|
33
|
+
// exists, we can't fetch the asset.
|
|
34
|
+
if (!hasStringValue(value))
|
|
35
|
+
throw loadingFailed("COF config malformed (missing stringValue)");
|
|
36
|
+
let assetConfig;
|
|
37
|
+
try {
|
|
38
|
+
assetConfig = JSON.parse(value.stringValue);
|
|
39
|
+
}
|
|
40
|
+
catch (parseError) {
|
|
41
|
+
throw loadingFailed("COF config malformed (JSON parse error)", parseError);
|
|
42
|
+
}
|
|
43
|
+
// Asset configurations have a `url` and `checksum` property. Otherwise we're dealing with some
|
|
44
|
+
// other kind of configuration, and cannot fetch the asset.
|
|
45
|
+
if (!isAssetConfig(assetConfig))
|
|
46
|
+
throw loadingFailed("COF config malformed (missing URL)");
|
|
47
|
+
return assetConfig;
|
|
48
|
+
}), mergeMap(({ url, checksum }) => __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
// TODO: remove force-cache once https://jira.sc-corp.net/browse/CAMKIT-3671 is addressed
|
|
50
|
+
const [data, response] = yield assetHandler(url, { cache: "force-cache" });
|
|
51
|
+
if (!response.ok)
|
|
52
|
+
throw response;
|
|
53
|
+
return { data, checksum };
|
|
54
|
+
}))));
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=deviceDependentAssetLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deviceDependentAssetLoader.js","sourceRoot":"","sources":["../../../src/lens/assets/deviceDependentAssetLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import { catchError, firstValueFrom, map, mergeMap } from \"rxjs\";\nimport { isRecord, isString } from \"../../common/typeguards\";\nimport { Injectable } from \"../../dependency-injection/Injectable\";\nimport { createArrayBufferParsingHandler } from \"../../handlers/arrayBufferParsingHandler\";\nimport { defaultFetchHandlerFactory, FetchHandler } from \"../../handlers/defaultFetchHandler\";\nimport { HandlerChainBuilder } from \"../../handlers/HandlerChainBuilder\";\nimport { RemoteConfiguration, remoteConfigurationFactory } from \"../../remote-configuration/remoteConfiguration\";\nimport { AssetLoader, AssetResponse } from \"./LensAssetRepository\";\n\ninterface AssetConfig {\n url: string;\n checksum?: string;\n}\n\nconst hasStringValue = (value: unknown): value is { stringValue: string } => {\n return isRecord(value) && isString(value.stringValue);\n};\n\nconst isAssetConfig = (value: unknown): value is AssetConfig => {\n return isRecord(value) && isString(value.url) && (value.checksum === undefined || isString(value.checksum));\n};\n\n/**\n * @internal\n */\nexport const deviceDependentAssetLoaderFactory = Injectable(\n \"deviceDependentAssetLoader\",\n [defaultFetchHandlerFactory.token, remoteConfigurationFactory.token] as const,\n (fetchHandler: FetchHandler, remoteConfiguration: RemoteConfiguration): AssetLoader => {\n const assetHandler = new HandlerChainBuilder(fetchHandler).map(createArrayBufferParsingHandler()).handler;\n\n return async function deviceDependentAssetLoader({ assetId }): Promise<AssetResponse> {\n const loadingFailed = (reason: string, cause?: unknown) =>\n new Error(`Cannot load device-dependent asset ${assetId}. ${reason}`, { cause });\n\n return firstValueFrom(\n remoteConfiguration.get(assetId).pipe(\n catchError((error) => {\n throw loadingFailed(\"COF config failed to load.\", error);\n }),\n map((configs) => {\n if (configs.length === 0) {\n throw loadingFailed(`No COF config found corresponding to that assetId.`);\n }\n // All of the deviceDependent asset configs will only have one value, so we can safely use the\n // first (i.e. only) element in the configs list.\n const [{ value }] = configs;\n\n // Asset configurations are all JSON-encoded in the `stringValue` property. If it doesn't\n // exists, we can't fetch the asset.\n if (!hasStringValue(value)) throw loadingFailed(\"COF config malformed (missing stringValue)\");\n\n let assetConfig: unknown;\n try {\n assetConfig = JSON.parse(value.stringValue);\n } catch (parseError) {\n throw loadingFailed(\"COF config malformed (JSON parse error)\", parseError);\n }\n\n // Asset configurations have a `url` and `checksum` property. Otherwise we're dealing with some\n // other kind of configuration, and cannot fetch the asset.\n if (!isAssetConfig(assetConfig)) throw loadingFailed(\"COF config malformed (missing URL)\");\n\n return assetConfig;\n }),\n mergeMap(async ({ url, checksum }) => {\n // TODO: remove force-cache once https://jira.sc-corp.net/browse/CAMKIT-3671 is addressed\n const [data, response] = await assetHandler(url, { cache: \"force-cache\" });\n if (!response.ok) throw response;\n return { data, checksum };\n })\n )\n );\n };\n }\n);\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FetchHandler } from "../../handlers/defaultFetchHandler";
|
|
2
|
+
import { AssetLoader } from "./LensAssetRepository";
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export declare const remoteMediaAssetLoaderFactory: {
|
|
7
|
+
(args_0: FetchHandler<Response>): AssetLoader;
|
|
8
|
+
token: "remoteMediaAssetLoader";
|
|
9
|
+
dependencies: readonly ["defaultFetchHandler"];
|
|
10
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Injectable } from "../../dependency-injection/Injectable";
|
|
3
|
+
import { createArrayBufferParsingHandler } from "../../handlers/arrayBufferParsingHandler";
|
|
4
|
+
import { defaultFetchHandlerFactory } from "../../handlers/defaultFetchHandler";
|
|
5
|
+
import { HandlerChainBuilder } from "../../handlers/HandlerChainBuilder";
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export const remoteMediaAssetLoaderFactory = Injectable("remoteMediaAssetLoader", [defaultFetchHandlerFactory.token], (fetchHandler) => {
|
|
10
|
+
const handler = new HandlerChainBuilder(fetchHandler).map(createArrayBufferParsingHandler()).handler;
|
|
11
|
+
return function remoteMediaAssetLoader(asset) {
|
|
12
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
13
|
+
// as a default option assuming that RemoteMedia asset type contains asset url in assetId
|
|
14
|
+
// this behaviour could be changed by providing own implementation for RemoteMedia asset loader
|
|
15
|
+
// const cameraKit = bootstrapCameraKit(config, container => {
|
|
16
|
+
// return container.provides(Injectable(
|
|
17
|
+
// remoteMediaAssetLoaderFactory.token, ...
|
|
18
|
+
// TODO: remove force-cache once https://jira.sc-corp.net/browse/CAMKIT-3671 is addressed
|
|
19
|
+
const [buffer, response] = yield handler(asset.assetId, { cache: "force-cache" });
|
|
20
|
+
if (!response.ok)
|
|
21
|
+
throw response;
|
|
22
|
+
return buffer;
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=remoteMediaAssetLoaderFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteMediaAssetLoaderFactory.js","sourceRoot":"","sources":["../../../src/lens/assets/remoteMediaAssetLoaderFactory.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,+BAA+B,EAAE,MAAM,0CAA0C,CAAC;AAC3F,OAAO,EAAE,0BAA0B,EAAgB,MAAM,oCAAoC,CAAC;AAC9F,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAGzE;;GAEG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,UAAU,CACnD,wBAAwB,EACxB,CAAC,0BAA0B,CAAC,KAAK,CAAU,EAC3C,CAAC,YAA0B,EAAe,EAAE;IACxC,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,+BAA+B,EAAE,CAAC,CAAC,OAAO,CAAC;IAErG,OAAO,SAAe,sBAAsB,CAAC,KAAK;;YAC9C,yFAAyF;YACzF,+FAA+F;YAC/F,gEAAgE;YAChE,4CAA4C;YAC5C,iDAAiD;YACjD,yFAAyF;YACzF,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;YAClF,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,QAAQ,CAAC;YACjC,OAAO,MAAM,CAAC;QAClB,CAAC;KAAA,CAAC;AACN,CAAC,CACJ,CAAC","sourcesContent":["import { Injectable } from \"../../dependency-injection/Injectable\";\nimport { createArrayBufferParsingHandler } from \"../../handlers/arrayBufferParsingHandler\";\nimport { defaultFetchHandlerFactory, FetchHandler } from \"../../handlers/defaultFetchHandler\";\nimport { HandlerChainBuilder } from \"../../handlers/HandlerChainBuilder\";\nimport { AssetLoader } from \"./LensAssetRepository\";\n\n/**\n * @internal\n */\nexport const remoteMediaAssetLoaderFactory = Injectable(\n \"remoteMediaAssetLoader\",\n [defaultFetchHandlerFactory.token] as const,\n (fetchHandler: FetchHandler): AssetLoader => {\n const handler = new HandlerChainBuilder(fetchHandler).map(createArrayBufferParsingHandler()).handler;\n\n return async function remoteMediaAssetLoader(asset) {\n // as a default option assuming that RemoteMedia asset type contains asset url in assetId\n // this behaviour could be changed by providing own implementation for RemoteMedia asset loader\n // const cameraKit = bootstrapCameraKit(config, container => {\n // return container.provides(Injectable(\n // remoteMediaAssetLoaderFactory.token, ...\n // TODO: remove force-cache once https://jira.sc-corp.net/browse/CAMKIT-3671 is addressed\n const [buffer, response] = await handler(asset.assetId, { cache: \"force-cache\" });\n if (!response.ok) throw response;\n return buffer;\n };\n }\n);\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FetchHandler } from "../../handlers/defaultFetchHandler";
|
|
2
|
+
import { AssetLoader } from "./LensAssetRepository";
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export declare const staticAssetLoaderFactory: {
|
|
7
|
+
(args_0: FetchHandler<Response>): AssetLoader;
|
|
8
|
+
token: "staticAssetLoader";
|
|
9
|
+
dependencies: readonly ["defaultFetchHandler"];
|
|
10
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Injectable } from "../../dependency-injection/Injectable";
|
|
3
|
+
import { createArrayBufferParsingHandler } from "../../handlers/arrayBufferParsingHandler";
|
|
4
|
+
import { defaultFetchHandlerFactory } from "../../handlers/defaultFetchHandler";
|
|
5
|
+
import { HandlerChainBuilder } from "../../handlers/HandlerChainBuilder";
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export const staticAssetLoaderFactory = Injectable("staticAssetLoader", [defaultFetchHandlerFactory.token], (fetchHandler) => {
|
|
10
|
+
const handler = new HandlerChainBuilder(fetchHandler).map(createArrayBufferParsingHandler()).handler;
|
|
11
|
+
return (asset, _lens, assetManifest) => __awaiter(void 0, void 0, void 0, function* () {
|
|
12
|
+
var _a;
|
|
13
|
+
const assetUrl = (_a = assetManifest === null || assetManifest === void 0 ? void 0 : assetManifest.find((manifest) => manifest.id === asset.assetId)) === null || _a === void 0 ? void 0 : _a.assetUrl;
|
|
14
|
+
if (!assetUrl) {
|
|
15
|
+
throw new Error(`Cannot load lens asset ${asset.assetId}. Static asset URL could not be found.`);
|
|
16
|
+
}
|
|
17
|
+
// TODO: remove force-cache once https://jira.sc-corp.net/browse/CAMKIT-3671 is addressed
|
|
18
|
+
const [buffer, response] = yield handler(assetUrl, { cache: "force-cache" });
|
|
19
|
+
if (!response.ok)
|
|
20
|
+
throw response;
|
|
21
|
+
return buffer;
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=staticAssetLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staticAssetLoader.js","sourceRoot":"","sources":["../../../src/lens/assets/staticAssetLoader.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACnE,OAAO,EAAE,+BAA+B,EAAE,MAAM,0CAA0C,CAAC;AAC3F,OAAO,EAAE,0BAA0B,EAAgB,MAAM,oCAAoC,CAAC;AAC9F,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAGzE;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,UAAU,CAC9C,mBAAmB,EACnB,CAAC,0BAA0B,CAAC,KAAK,CAAU,EAC3C,CAAC,YAA0B,EAAe,EAAE;IACxC,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,+BAA+B,EAAE,CAAC,CAAC,OAAO,CAAC;IAErG,OAAO,CAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE;;QACzC,MAAM,QAAQ,GAAG,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,0CAAE,QAAQ,CAAC;QAC5F,IAAI,CAAC,QAAQ,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,OAAO,wCAAwC,CAAC,CAAC;SACpG;QACD,yFAAyF;QACzF,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,QAAQ,CAAC;QACjC,OAAO,MAAM,CAAC;IAClB,CAAC,CAAA,CAAC;AACN,CAAC,CACJ,CAAC","sourcesContent":["import { Injectable } from \"../../dependency-injection/Injectable\";\nimport { createArrayBufferParsingHandler } from \"../../handlers/arrayBufferParsingHandler\";\nimport { defaultFetchHandlerFactory, FetchHandler } from \"../../handlers/defaultFetchHandler\";\nimport { HandlerChainBuilder } from \"../../handlers/HandlerChainBuilder\";\nimport { AssetLoader } from \"./LensAssetRepository\";\n\n/**\n * @internal\n */\nexport const staticAssetLoaderFactory = Injectable(\n \"staticAssetLoader\",\n [defaultFetchHandlerFactory.token] as const,\n (fetchHandler: FetchHandler): AssetLoader => {\n const handler = new HandlerChainBuilder(fetchHandler).map(createArrayBufferParsingHandler()).handler;\n\n return async (asset, _lens, assetManifest) => {\n const assetUrl = assetManifest?.find((manifest) => manifest.id === asset.assetId)?.assetUrl;\n if (!assetUrl) {\n throw new Error(`Cannot load lens asset ${asset.assetId}. Static asset URL could not be found.`);\n }\n // TODO: remove force-cache once https://jira.sc-corp.net/browse/CAMKIT-3671 is addressed\n const [buffer, response] = await handler(assetUrl, { cache: \"force-cache\" });\n if (!response.ok) throw response;\n return buffer;\n };\n }\n);\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { Lens_CameraFacing, LensAssetManifestItem_RequestTiming, LensAssetManifestItem_Type, LensAssetManifestItem, } from "../generated-proto/pb_schema/camera_kit/v3/lens";
|
|
2
|
+
export { LensProto, ContentProto, Lens, isLens, isPreview, toPublicLens } from "./Lens";
|
|
3
|
+
export { AssetTiming, LensRepository, lensRepositoryFactory } from "./LensRepository";
|
|
4
|
+
export { lensSourcesFactory, LensSources } from "../extensions/LensSources";
|
|
5
|
+
export { LensAssetRepository } from "./assets/LensAssetRepository";
|
|
6
|
+
export { remoteMediaAssetLoaderFactory } from "./assets/remoteMediaAssetLoaderFactory";
|
|
7
|
+
export { AssetLoader } from "./assets/LensAssetRepository";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { Lens_CameraFacing, LensAssetManifestItem_RequestTiming, LensAssetManifestItem_Type, LensAssetManifestItem, } from "../generated-proto/pb_schema/camera_kit/v3/lens";
|
|
2
|
+
export { isLens, isPreview, toPublicLens } from "./Lens";
|
|
3
|
+
export { LensRepository, lensRepositoryFactory } from "./LensRepository";
|
|
4
|
+
export { lensSourcesFactory, LensSources } from "../extensions/LensSources";
|
|
5
|
+
export { LensAssetRepository } from "./assets/LensAssetRepository";
|
|
6
|
+
export { remoteMediaAssetLoaderFactory } from "./assets/remoteMediaAssetLoaderFactory";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lens/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,iBAAiB,EACjB,mCAAmC,EACnC,0BAA0B,EAC1B,qBAAqB,GACxB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAiC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACxF,OAAO,EAAe,cAAc,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,wCAAwC,CAAC","sourcesContent":["export {\n Lens_CameraFacing,\n LensAssetManifestItem_RequestTiming,\n LensAssetManifestItem_Type,\n LensAssetManifestItem,\n} from \"../generated-proto/pb_schema/camera_kit/v3/lens\";\nexport { LensProto, ContentProto, Lens, isLens, isPreview, toPublicLens } from \"./Lens\";\nexport { AssetTiming, LensRepository, lensRepositoryFactory } from \"./LensRepository\";\nexport { lensSourcesFactory, LensSources } from \"../extensions/LensSources\";\nexport { LensAssetRepository } from \"./assets/LensAssetRepository\";\nexport { remoteMediaAssetLoaderFactory } from \"./assets/remoteMediaAssetLoaderFactory\";\nexport { AssetLoader } from \"./assets/LensAssetRepository\";\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Envelope } from "../generated-proto/pb_schema/camera_kit/v3/export";
|
|
2
|
+
/**
|
|
3
|
+
* @internal
|
|
4
|
+
*/
|
|
5
|
+
function decodeEnvelope(envelope) {
|
|
6
|
+
try {
|
|
7
|
+
return Envelope.decode(new Uint8Array(envelope)).lenses;
|
|
8
|
+
}
|
|
9
|
+
catch (_a) {
|
|
10
|
+
throw new Error("Invalid lens envelope");
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export function decodeEnvelopes(envelopes) {
|
|
17
|
+
return envelopes.reduce((lenses, envelope) => [...lenses, ...decodeEnvelope(envelope)], []);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=lensEnvelopeUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lensEnvelopeUtil.js","sourceRoot":"","sources":["../../src/lens/lensEnvelopeUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mDAAmD,CAAC;AAG7E;;GAEG;AACH,SAAS,cAAc,CAAC,QAAqB;IACzC,IAAI;QACA,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;KAC3D;IAAC,WAAM;QACJ,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;KAC5C;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,SAAwB;IACpD,OAAO,SAAS,CAAC,MAAM,CAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7G,CAAC","sourcesContent":["import { Envelope } from \"../generated-proto/pb_schema/camera_kit/v3/export\";\nimport { LensProto } from \"./Lens\";\n\n/**\n * @internal\n */\nfunction decodeEnvelope(envelope: ArrayBuffer) {\n try {\n return Envelope.decode(new Uint8Array(envelope)).lenses;\n } catch {\n throw new Error(\"Invalid lens envelope\");\n }\n}\n\n/**\n * @internal\n */\nexport function decodeEnvelopes(envelopes: ArrayBuffer[]) {\n return envelopes.reduce<LensProto[]>((lenses, envelope) => [...lenses, ...decodeEnvelope(envelope)], []);\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { FetchHandler } from "../handlers/defaultFetchHandler";
|
|
2
|
+
import { LensProto } from "./Lens";
|
|
3
|
+
export declare function retrieveCameraKitLens(httpClient: FetchHandler, lensId: string, groupId: string): Promise<LensProto>;
|
|
4
|
+
export declare function retrieveCameraKitLensGroup(httpClient: FetchHandler, groupId: string): Promise<LensProto[]>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { isGetGroupResponse, isLensProto } from "./Lens";
|
|
3
|
+
const BASE_PATH = "https://api-kit.snapchat.com/com.snap.camerakit.v3.Lenses";
|
|
4
|
+
function getRequestId(res) {
|
|
5
|
+
return res.headers.get("x-request-id");
|
|
6
|
+
}
|
|
7
|
+
export function retrieveCameraKitLens(httpClient, lensId, groupId) {
|
|
8
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
9
|
+
const url = [BASE_PATH, "groups", groupId, "lenses", lensId].join("/");
|
|
10
|
+
const response = yield httpClient(url, { credentials: "include" });
|
|
11
|
+
const body = yield response.json();
|
|
12
|
+
const lens = body.lens;
|
|
13
|
+
if (!isLensProto(lens)) {
|
|
14
|
+
throw new Error(`Expected request to ${url} to return a Lens. Got:\n\n${JSON.stringify(body)} with request-id of "${getRequestId(response)}"`);
|
|
15
|
+
}
|
|
16
|
+
return lens;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export function retrieveCameraKitLensGroup(httpClient, groupId) {
|
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
const url = [BASE_PATH, "groups", groupId].join("/");
|
|
22
|
+
const response = yield httpClient(url, { credentials: "include" });
|
|
23
|
+
const body = yield response.json();
|
|
24
|
+
if (!isGetGroupResponse(body)) {
|
|
25
|
+
throw new Error(`Expected request to ${url} to return a LensGroup. Got:\n\n${JSON.stringify(body)} with request-id of "${getRequestId(response)}"`);
|
|
26
|
+
}
|
|
27
|
+
return body.lenses;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=lensHttpUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lensHttpUtil.js","sourceRoot":"","sources":["../../src/lens/lensHttpUtil.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAa,MAAM,QAAQ,CAAC;AAEpE,MAAM,SAAS,GAAG,2DAA2D,CAAC;AAE9E,SAAS,YAAY,CAAC,GAAa;IAC/B,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAgB,qBAAqB,CACvC,UAAwB,EACxB,MAAc,EACd,OAAe;;QAEf,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YACpB,MAAM,IAAI,KAAK,CACX,uBAAuB,GAAG,8BAA8B,IAAI,CAAC,SAAS,CAClE,IAAI,CACP,wBAAwB,YAAY,CAAC,QAAQ,CAAC,GAAG,CACrD,CAAC;SACL;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CAAA;AAED,MAAM,UAAgB,0BAA0B,CAAC,UAAwB,EAAE,OAAe;;QACtF,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CACX,uBAAuB,GAAG,mCAAmC,IAAI,CAAC,SAAS,CACvE,IAAI,CACP,wBAAwB,YAAY,CAAC,QAAQ,CAAC,GAAG,CACrD,CAAC;SACL;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CAAA","sourcesContent":["import { FetchHandler } from \"../handlers/defaultFetchHandler\";\nimport { isGetGroupResponse, isLensProto, LensProto } from \"./Lens\";\n\nconst BASE_PATH = \"https://api-kit.snapchat.com/com.snap.camerakit.v3.Lenses\";\n\nfunction getRequestId(res: Response) {\n return res.headers.get(\"x-request-id\");\n}\n\nexport async function retrieveCameraKitLens(\n httpClient: FetchHandler,\n lensId: string,\n groupId: string\n): Promise<LensProto> {\n const url = [BASE_PATH, \"groups\", groupId, \"lenses\", lensId].join(\"/\");\n const response = await httpClient(url, { credentials: \"include\" });\n const body = await response.json();\n const lens = body.lens;\n if (!isLensProto(lens)) {\n throw new Error(\n `Expected request to ${url} to return a Lens. Got:\\n\\n${JSON.stringify(\n body\n )} with request-id of \"${getRequestId(response)}\"`\n );\n }\n return lens;\n}\n\nexport async function retrieveCameraKitLensGroup(httpClient: FetchHandler, groupId: string): Promise<LensProto[]> {\n const url = [BASE_PATH, \"groups\", groupId].join(\"/\");\n const response = await httpClient(url, { credentials: \"include\" });\n const body = await response.json();\n if (!isGetGroupResponse(body)) {\n throw new Error(\n `Expected request to ${url} to return a LensGroup. Got:\\n\\n${JSON.stringify(\n body\n )} with request-id of \"${getRequestId(response)}\"`\n );\n }\n return body.lenses;\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const enum Orientation {
|
|
2
|
+
TopLeft = 1,
|
|
3
|
+
TopRight = 2,
|
|
4
|
+
BottomRight = 3,
|
|
5
|
+
BottomLeft = 4,
|
|
6
|
+
LeftTop = 5,
|
|
7
|
+
RightTop = 6,
|
|
8
|
+
RightBottom = 7,
|
|
9
|
+
LeftBottom = 8
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Parses JPEG EXIF metadata and returns Orientation tag of it, or undefined if not applicable.
|
|
13
|
+
*
|
|
14
|
+
* Adopted from https://stackoverflow.com/a/32490603
|
|
15
|
+
*
|
|
16
|
+
* @internal
|
|
17
|
+
* @param data JPEG binary.
|
|
18
|
+
* @returns Orientation tag value or undefined.
|
|
19
|
+
*/
|
|
20
|
+
export declare function extractJpegOrientationTag(data: ArrayBuffer): Orientation | undefined;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
const JPEG_ID = 0xffd8;
|
|
2
|
+
const APP1_MARKER = 0xffe1;
|
|
3
|
+
const EXIF_ID = 0x45786966;
|
|
4
|
+
const LITTLE_ENDIAN = 0x4949;
|
|
5
|
+
const ORIENTATION_TAG_OFFSET = 0x0112;
|
|
6
|
+
// http://sylvana.net/jpegcrop/exif_orientation.html
|
|
7
|
+
export var Orientation;
|
|
8
|
+
(function (Orientation) {
|
|
9
|
+
Orientation[Orientation["TopLeft"] = 1] = "TopLeft";
|
|
10
|
+
Orientation[Orientation["TopRight"] = 2] = "TopRight";
|
|
11
|
+
Orientation[Orientation["BottomRight"] = 3] = "BottomRight";
|
|
12
|
+
Orientation[Orientation["BottomLeft"] = 4] = "BottomLeft";
|
|
13
|
+
Orientation[Orientation["LeftTop"] = 5] = "LeftTop";
|
|
14
|
+
Orientation[Orientation["RightTop"] = 6] = "RightTop";
|
|
15
|
+
Orientation[Orientation["RightBottom"] = 7] = "RightBottom";
|
|
16
|
+
Orientation[Orientation["LeftBottom"] = 8] = "LeftBottom";
|
|
17
|
+
})(Orientation || (Orientation = {}));
|
|
18
|
+
/**
|
|
19
|
+
* Parses JPEG EXIF metadata and returns Orientation tag of it, or undefined if not applicable.
|
|
20
|
+
*
|
|
21
|
+
* Adopted from https://stackoverflow.com/a/32490603
|
|
22
|
+
*
|
|
23
|
+
* @internal
|
|
24
|
+
* @param data JPEG binary.
|
|
25
|
+
* @returns Orientation tag value or undefined.
|
|
26
|
+
*/
|
|
27
|
+
export function extractJpegOrientationTag(data) {
|
|
28
|
+
const view = new DataView(data);
|
|
29
|
+
if (view.getUint16(0, false) !== JPEG_ID)
|
|
30
|
+
return undefined;
|
|
31
|
+
const length = view.byteLength;
|
|
32
|
+
let offset = 2;
|
|
33
|
+
while (offset < length) {
|
|
34
|
+
if (view.getUint16(offset + 2, false) <= 8)
|
|
35
|
+
return undefined;
|
|
36
|
+
let marker = view.getUint16(offset, false);
|
|
37
|
+
offset += 2;
|
|
38
|
+
if (marker === APP1_MARKER) {
|
|
39
|
+
if (view.getUint32((offset += 2), false) !== EXIF_ID) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
let little = view.getUint16((offset += 6), false) === LITTLE_ENDIAN;
|
|
43
|
+
offset += view.getUint32(offset + 4, little);
|
|
44
|
+
let tags = view.getUint16(offset, little);
|
|
45
|
+
offset += 2;
|
|
46
|
+
for (let i = 0; i < tags; i++) {
|
|
47
|
+
if (view.getUint16(offset + i * 12, little) === ORIENTATION_TAG_OFFSET) {
|
|
48
|
+
return view.getUint16(offset + i * 12 + 8, little);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else if ((marker & 0xff00) !== 0xff00) {
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
offset += view.getUint16(offset, false);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=exif.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exif.js","sourceRoot":"","sources":["../../src/lens-client-interface/exif.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,MAAM,CAAC;AACvB,MAAM,WAAW,GAAG,MAAM,CAAC;AAC3B,MAAM,OAAO,GAAG,UAAU,CAAC;AAC3B,MAAM,aAAa,GAAG,MAAM,CAAC;AAC7B,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAEtC,oDAAoD;AACpD,MAAM,CAAN,IAAkB,WASjB;AATD,WAAkB,WAAW;IACzB,mDAAW,CAAA;IACX,qDAAY,CAAA;IACZ,2DAAe,CAAA;IACf,yDAAc,CAAA;IACd,mDAAW,CAAA;IACX,qDAAY,CAAA;IACZ,2DAAe,CAAA;IACf,yDAAc,CAAA;AAClB,CAAC,EATiB,WAAW,KAAX,WAAW,QAS5B;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAiB;IACvD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEhC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IAE3D,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;IAC/B,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,MAAM,GAAG,MAAM,EAAE;QACpB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QAC7D,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,CAAC;QAEZ,IAAI,MAAM,KAAK,WAAW,EAAE;YACxB,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,OAAO,EAAE;gBAClD,OAAO,SAAS,CAAC;aACpB;YAED,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,aAAa,CAAC;YACpE,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YAC7C,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC1C,MAAM,IAAI,CAAC,CAAC;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;gBAC3B,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,KAAK,sBAAsB,EAAE;oBACpE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,CAAgB,CAAC;iBACrE;aACJ;SACJ;aAAM,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,MAAM,EAAE;YACrC,MAAM;SACT;aAAM;YACH,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;SAC3C;KACJ;IACD,OAAO,SAAS,CAAC;AACrB,CAAC","sourcesContent":["const JPEG_ID = 0xffd8;\nconst APP1_MARKER = 0xffe1;\nconst EXIF_ID = 0x45786966;\nconst LITTLE_ENDIAN = 0x4949;\nconst ORIENTATION_TAG_OFFSET = 0x0112;\n\n// http://sylvana.net/jpegcrop/exif_orientation.html\nexport const enum Orientation {\n TopLeft = 1,\n TopRight = 2,\n BottomRight = 3,\n BottomLeft = 4,\n LeftTop = 5,\n RightTop = 6,\n RightBottom = 7,\n LeftBottom = 8,\n}\n\n/**\n * Parses JPEG EXIF metadata and returns Orientation tag of it, or undefined if not applicable.\n *\n * Adopted from https://stackoverflow.com/a/32490603\n *\n * @internal\n * @param data JPEG binary.\n * @returns Orientation tag value or undefined.\n */\nexport function extractJpegOrientationTag(data: ArrayBuffer): Orientation | undefined {\n const view = new DataView(data);\n\n if (view.getUint16(0, false) !== JPEG_ID) return undefined;\n\n const length = view.byteLength;\n let offset = 2;\n\n while (offset < length) {\n if (view.getUint16(offset + 2, false) <= 8) return undefined;\n let marker = view.getUint16(offset, false);\n offset += 2;\n\n if (marker === APP1_MARKER) {\n if (view.getUint32((offset += 2), false) !== EXIF_ID) {\n return undefined;\n }\n\n let little = view.getUint16((offset += 6), false) === LITTLE_ENDIAN;\n offset += view.getUint32(offset + 4, little);\n let tags = view.getUint16(offset, little);\n offset += 2;\n for (let i = 0; i < tags; i++) {\n if (view.getUint16(offset + i * 12, little) === ORIENTATION_TAG_OFFSET) {\n return view.getUint16(offset + i * 12 + 8, little) as Orientation;\n }\n }\n } else if ((marker & 0xff00) !== 0xff00) {\n break;\n } else {\n offset += view.getUint16(offset, false);\n }\n }\n return undefined;\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ClientInterfaceData, LensCoreModule } from "../lens-core-module/generated-types";
|
|
2
|
+
/**
|
|
3
|
+
* Shows file open dialog to allow user to select image/video and provides the selection to LensCore.
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare function pickClientImage(clientInterfaceData: ClientInterfaceData, lensCore: LensCoreModule): Promise<void>;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { fileOpen } from "browser-fs-access";
|
|
3
|
+
import { getLogger } from "../logger/logger";
|
|
4
|
+
import { extractJpegOrientationTag } from "./exif";
|
|
5
|
+
const logger = getLogger("lensClientInterfaceImagePicker");
|
|
6
|
+
// Common MIME types supported by all browsers as per:
|
|
7
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
|
|
8
|
+
const mimeTypes = {
|
|
9
|
+
image: [
|
|
10
|
+
"image/avif",
|
|
11
|
+
"image/bmp",
|
|
12
|
+
"image/gif",
|
|
13
|
+
"image/jpeg",
|
|
14
|
+
"image/png",
|
|
15
|
+
"image/svg+xml",
|
|
16
|
+
"image/tiff",
|
|
17
|
+
"image/webp",
|
|
18
|
+
],
|
|
19
|
+
video: [
|
|
20
|
+
"video/3gpp",
|
|
21
|
+
"video/3gpp2",
|
|
22
|
+
"video/mp2t",
|
|
23
|
+
"video/mp4",
|
|
24
|
+
"video/mpeg",
|
|
25
|
+
"video/ogg",
|
|
26
|
+
"video/quicktime",
|
|
27
|
+
"video/webm",
|
|
28
|
+
"video/x-msvideo",
|
|
29
|
+
],
|
|
30
|
+
};
|
|
31
|
+
function* enumerateSupportedVideoTypes(types) {
|
|
32
|
+
// test video element to perform MIME types support check
|
|
33
|
+
const testVideoElement = typeof document !== "undefined" ? document.createElement("video") : undefined;
|
|
34
|
+
for (const type of types) {
|
|
35
|
+
if ((testVideoElement === null || testVideoElement === void 0 ? void 0 : testVideoElement.canPlayType(type)) || false) {
|
|
36
|
+
yield type;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function readFileAsArrayBuffer(file) {
|
|
41
|
+
return new Promise((resolve, reject) => {
|
|
42
|
+
const reader = new FileReader();
|
|
43
|
+
reader.addEventListener("load", (event) => {
|
|
44
|
+
// Safety: target.result is always an ArrayBuffer because we read file using readAsArrayBuffer()
|
|
45
|
+
resolve(event.target.result);
|
|
46
|
+
});
|
|
47
|
+
reader.addEventListener("error", (event) => {
|
|
48
|
+
reject(event.target.error);
|
|
49
|
+
});
|
|
50
|
+
reader.readAsArrayBuffer(file);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function getMimeType({ ImageEnabled, VideoEnabled }) {
|
|
54
|
+
const types = [];
|
|
55
|
+
if (ImageEnabled === "1")
|
|
56
|
+
types.push(...mimeTypes.image);
|
|
57
|
+
if (VideoEnabled === "1")
|
|
58
|
+
types.push(...enumerateSupportedVideoTypes(mimeTypes.video));
|
|
59
|
+
if (types.length === 0) {
|
|
60
|
+
throw new Error("Unknown media type requested");
|
|
61
|
+
}
|
|
62
|
+
return types;
|
|
63
|
+
}
|
|
64
|
+
function getOrientation(data, lensCore) {
|
|
65
|
+
var _a;
|
|
66
|
+
const orientationMap = {
|
|
67
|
+
[1 /* Orientation.TopLeft */]: lensCore.ExternalMediaOrientation.CW0,
|
|
68
|
+
[2 /* Orientation.TopRight */]: lensCore.ExternalMediaOrientation.CW0,
|
|
69
|
+
[3 /* Orientation.BottomRight */]: lensCore.ExternalMediaOrientation.CW180,
|
|
70
|
+
[4 /* Orientation.BottomLeft */]: lensCore.ExternalMediaOrientation.CW180,
|
|
71
|
+
[5 /* Orientation.LeftTop */]: lensCore.ExternalMediaOrientation.CW90,
|
|
72
|
+
[6 /* Orientation.RightTop */]: lensCore.ExternalMediaOrientation.CW90,
|
|
73
|
+
[7 /* Orientation.RightBottom */]: lensCore.ExternalMediaOrientation.CW270,
|
|
74
|
+
[8 /* Orientation.LeftBottom */]: lensCore.ExternalMediaOrientation.CW270,
|
|
75
|
+
};
|
|
76
|
+
try {
|
|
77
|
+
return orientationMap[(_a = extractJpegOrientationTag(data)) !== null && _a !== void 0 ? _a : 1 /* Orientation.TopLeft */];
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
logger.info("Error occured while reading EXIF orientation tag", error);
|
|
81
|
+
return lensCore.ExternalMediaOrientation.CW0;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Shows file open dialog to allow user to select image/video and provides the selection to LensCore.
|
|
86
|
+
*
|
|
87
|
+
* @internal
|
|
88
|
+
*/
|
|
89
|
+
export function pickClientImage(clientInterfaceData, lensCore) {
|
|
90
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
91
|
+
const mimeTypes = getMimeType(clientInterfaceData);
|
|
92
|
+
logger.debug(`Opening file dialog for MIME types: ${mimeTypes}`);
|
|
93
|
+
const file = yield fileOpen({ mimeTypes });
|
|
94
|
+
logger.debug(`Selected file MIME type: ${file.type}`);
|
|
95
|
+
const data = yield readFileAsArrayBuffer(file);
|
|
96
|
+
if (file.type.startsWith("image/")) {
|
|
97
|
+
lensCore.provideExternalImage({
|
|
98
|
+
data,
|
|
99
|
+
orientation: getOrientation(data, lensCore),
|
|
100
|
+
// As per Corvyn: both iOS and Android clients have the ability to pick out individual faces
|
|
101
|
+
// from an image to apply the effect on, using each of their native face detectors (not using LensCore).
|
|
102
|
+
// That's what the faceRects is for. For now, we can just apply the effect to the whole image (so face rect
|
|
103
|
+
// [[0,0][1,1]]). In future, in order to be able to pick out individual faces in the media picker, we could:
|
|
104
|
+
// - hook up some external web face tracking library
|
|
105
|
+
// - make LensCore to expose face tracker to external clients
|
|
106
|
+
faceRects: [
|
|
107
|
+
{
|
|
108
|
+
origin: {
|
|
109
|
+
x: 0,
|
|
110
|
+
y: 0,
|
|
111
|
+
},
|
|
112
|
+
size: {
|
|
113
|
+
width: 1,
|
|
114
|
+
height: 1,
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
lensCore.provideExternalVideo({
|
|
122
|
+
data,
|
|
123
|
+
orientation: lensCore.ExternalMediaOrientation.CW0,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=imagePicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imagePicker.js","sourceRoot":"","sources":["../../src/lens-client-interface/imagePicker.ts"],"names":[],"mappings":"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","sourcesContent":["import { fileOpen, FileWithHandle } from \"browser-fs-access\";\nimport { ClientInterfaceData, LensCoreModule } from \"../lens-core-module/generated-types\";\nimport { getLogger } from \"../logger/logger\";\nimport { extractJpegOrientationTag, Orientation } from \"./exif\";\n\nconst logger = getLogger(\"lensClientInterfaceImagePicker\");\n\n// Common MIME types supported by all browsers as per:\n// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\nconst mimeTypes = {\n image: [\n \"image/avif\",\n \"image/bmp\",\n \"image/gif\",\n \"image/jpeg\",\n \"image/png\",\n \"image/svg+xml\",\n \"image/tiff\",\n \"image/webp\",\n ],\n video: [\n \"video/3gpp\",\n \"video/3gpp2\",\n \"video/mp2t\",\n \"video/mp4\",\n \"video/mpeg\",\n \"video/ogg\",\n \"video/quicktime\",\n \"video/webm\",\n \"video/x-msvideo\",\n ],\n} as const;\n\nfunction* enumerateSupportedVideoTypes(types: typeof mimeTypes.video) {\n // test video element to perform MIME types support check\n const testVideoElement = typeof document !== \"undefined\" ? document.createElement(\"video\") : undefined;\n for (const type of types) {\n if (testVideoElement?.canPlayType(type) || false) {\n yield type;\n }\n }\n}\n\nfunction readFileAsArrayBuffer(file: FileWithHandle): Promise<ArrayBuffer> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.addEventListener(\"load\", (event) => {\n // Safety: target.result is always an ArrayBuffer because we read file using readAsArrayBuffer()\n resolve(event.target!.result as ArrayBuffer);\n });\n reader.addEventListener(\"error\", (event) => {\n reject(event.target!.error);\n });\n reader.readAsArrayBuffer(file);\n });\n}\n\nfunction getMimeType({ ImageEnabled, VideoEnabled }: ClientInterfaceData) {\n const types = [];\n if (ImageEnabled === \"1\") types.push(...mimeTypes.image);\n if (VideoEnabled === \"1\") types.push(...enumerateSupportedVideoTypes(mimeTypes.video));\n if (types.length === 0) {\n throw new Error(\"Unknown media type requested\");\n }\n return types;\n}\n\nfunction getOrientation(data: ArrayBuffer, lensCore: LensCoreModule) {\n const orientationMap = {\n [Orientation.TopLeft]: lensCore.ExternalMediaOrientation.CW0,\n [Orientation.TopRight]: lensCore.ExternalMediaOrientation.CW0,\n [Orientation.BottomRight]: lensCore.ExternalMediaOrientation.CW180,\n [Orientation.BottomLeft]: lensCore.ExternalMediaOrientation.CW180,\n [Orientation.LeftTop]: lensCore.ExternalMediaOrientation.CW90,\n [Orientation.RightTop]: lensCore.ExternalMediaOrientation.CW90,\n [Orientation.RightBottom]: lensCore.ExternalMediaOrientation.CW270,\n [Orientation.LeftBottom]: lensCore.ExternalMediaOrientation.CW270,\n };\n try {\n return orientationMap[extractJpegOrientationTag(data) ?? Orientation.TopLeft];\n } catch (error) {\n logger.info(\"Error occured while reading EXIF orientation tag\", error);\n return lensCore.ExternalMediaOrientation.CW0;\n }\n}\n\n/**\n * Shows file open dialog to allow user to select image/video and provides the selection to LensCore.\n *\n * @internal\n */\nexport async function pickClientImage(clientInterfaceData: ClientInterfaceData, lensCore: LensCoreModule) {\n const mimeTypes = getMimeType(clientInterfaceData);\n logger.debug(`Opening file dialog for MIME types: ${mimeTypes}`);\n\n const file = await fileOpen({ mimeTypes });\n logger.debug(`Selected file MIME type: ${file.type}`);\n\n const data = await readFileAsArrayBuffer(file);\n if (file.type.startsWith(\"image/\")) {\n lensCore.provideExternalImage({\n data,\n orientation: getOrientation(data, lensCore),\n // As per Corvyn: both iOS and Android clients have the ability to pick out individual faces\n // from an image to apply the effect on, using each of their native face detectors (not using LensCore).\n // That's what the faceRects is for. For now, we can just apply the effect to the whole image (so face rect\n // [[0,0][1,1]]). In future, in order to be able to pick out individual faces in the media picker, we could:\n // - hook up some external web face tracking library\n // - make LensCore to expose face tracker to external clients\n faceRects: [\n {\n origin: {\n x: 0,\n y: 0,\n },\n size: {\n width: 1,\n height: 1,\n },\n },\n ],\n });\n } else {\n lensCore.provideExternalVideo({\n data,\n orientation: lensCore.ExternalMediaOrientation.CW0,\n });\n }\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { LensCoreModule } from "../lens-core-module/generated-types";
|
|
2
|
+
/**
|
|
3
|
+
* Registers client interface handler in LensCore.
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
* @param lensCore LensCore instance to register in.
|
|
7
|
+
* @param sessionErrors EventTarget to dispatch errors in.
|
|
8
|
+
*/
|
|
9
|
+
export declare const registerLensClientInterfaceHandler: {
|
|
10
|
+
(args_0: LensCoreModule): void;
|
|
11
|
+
token: "registerLensClientInterfaceHandler";
|
|
12
|
+
dependencies: readonly ["lensCore"];
|
|
13
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { lensImagePickerError } from "../namedErrors";
|
|
3
|
+
import { Injectable } from "../dependency-injection/Injectable";
|
|
4
|
+
import { lensCoreFactory } from "../lens-core-module";
|
|
5
|
+
import { getLogger } from "../logger/logger";
|
|
6
|
+
import { pickClientImage } from "./imagePicker";
|
|
7
|
+
const logger = getLogger("lensClientInterface");
|
|
8
|
+
/**
|
|
9
|
+
* Registers client interface handler in LensCore.
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
* @param lensCore LensCore instance to register in.
|
|
13
|
+
* @param sessionErrors EventTarget to dispatch errors in.
|
|
14
|
+
*/
|
|
15
|
+
export const registerLensClientInterfaceHandler = Injectable("registerLensClientInterfaceHandler", [lensCoreFactory.token], (lensCore) => {
|
|
16
|
+
// Make sure we are compatible with previous LensCore versions
|
|
17
|
+
if (!lensCore.setClientInterfaceRequestHandler) {
|
|
18
|
+
logger.warn("Current LensCore version doesn't support lens client interface requests");
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
lensCore.setClientInterfaceRequestHandler(({ data, interfaceControl, interfaceAction }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
22
|
+
if (interfaceControl === lensCore.InterfaceControl.ImagePicker &&
|
|
23
|
+
interfaceAction === lensCore.InterfaceAction.Show) {
|
|
24
|
+
yield pickClientImage(data, lensCore).catch((error) => {
|
|
25
|
+
logger.error(lensImagePickerError("Failed to pick an image.", error));
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}));
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=lensClientInterface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lensClientInterface.js","sourceRoot":"","sources":["../../src/lens-client-interface/lensClientInterface.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,MAAM,GAAG,SAAS,CAAC,qBAAqB,CAAC,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,UAAU,CACxD,oCAAoC,EACpC,CAAC,eAAe,CAAC,KAAK,CAAU,EAChC,CAAC,QAAwB,EAAE,EAAE;IACzB,8DAA8D;IAC9D,IAAI,CAAC,QAAQ,CAAC,gCAAgC,EAAE;QAC5C,MAAM,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;QACvF,OAAO;KACV;IAED,QAAQ,CAAC,gCAAgC,CAAC,CAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,EAAE,EAAE;QAC5F,IACI,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB,CAAC,WAAW;YAC1D,eAAe,KAAK,QAAQ,CAAC,eAAe,CAAC,IAAI,EACnD;YACE,MAAM,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAClD,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;SACN;IACL,CAAC,CAAA,CAAC,CAAC;AACP,CAAC,CACJ,CAAC","sourcesContent":["import { lensImagePickerError } from \"../namedErrors\";\nimport { Injectable } from \"../dependency-injection/Injectable\";\nimport { lensCoreFactory } from \"../lens-core-module\";\nimport { LensCoreModule } from \"../lens-core-module/generated-types\";\nimport { getLogger } from \"../logger/logger\";\nimport { pickClientImage } from \"./imagePicker\";\n\nconst logger = getLogger(\"lensClientInterface\");\n\n/**\n * Registers client interface handler in LensCore.\n *\n * @internal\n * @param lensCore LensCore instance to register in.\n * @param sessionErrors EventTarget to dispatch errors in.\n */\nexport const registerLensClientInterfaceHandler = Injectable(\n \"registerLensClientInterfaceHandler\",\n [lensCoreFactory.token] as const,\n (lensCore: LensCoreModule) => {\n // Make sure we are compatible with previous LensCore versions\n if (!lensCore.setClientInterfaceRequestHandler) {\n logger.warn(\"Current LensCore version doesn't support lens client interface requests\");\n return;\n }\n\n lensCore.setClientInterfaceRequestHandler(async ({ data, interfaceControl, interfaceAction }) => {\n if (\n interfaceControl === lensCore.InterfaceControl.ImagePicker &&\n interfaceAction === lensCore.InterfaceAction.Show\n ) {\n await pickClientImage(data, lensCore).catch((error) => {\n logger.error(lensImagePickerError(\"Failed to pick an image.\", error));\n });\n }\n });\n }\n);\n"]}
|