@snap/camera-kit 0.22.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/environment.js +1 -1
- package/dist/environment.js.map +1 -1
- package/dist/lens-core-module/loader/bootstrapURLs.d.ts +2 -0
- package/dist/lens-core-module/loader/bootstrapURLs.d.ts.map +1 -1
- package/dist/lens-core-module/loader/bootstrapURLs.js +22 -11
- package/dist/lens-core-module/loader/bootstrapURLs.js.map +1 -1
- package/dist/lensCoreWasmVersions.js +3 -3
- package/dist/lensCoreWasmVersions.js.map +1 -1
- package/dist/platform/platformCapabilities.d.ts +6 -16
- package/dist/platform/platformCapabilities.d.ts.map +1 -1
- package/dist/platform/platformCapabilities.js +15 -15
- package/dist/platform/platformCapabilities.js.map +1 -1
- package/dist/session/lensState.d.ts.map +1 -1
- package/dist/session/lensState.js +12 -3
- package/dist/session/lensState.js.map +1 -1
- package/docs/html/assets/navigation.js +1 -1
- package/docs/html/assets/search.js +1 -1
- package/docs/html/classes/CameraKit.html +2 -2
- package/docs/html/classes/CameraKitSession.html +2 -2
- package/docs/html/classes/CameraKitSource.html +2 -2
- package/docs/html/classes/LensPerformanceMeasurement.html +2 -2
- package/docs/html/classes/LensPerformanceMetrics.html +2 -2
- package/docs/html/classes/LensRepository.html +2 -2
- package/docs/html/classes/Transform2D.html +2 -2
- package/docs/html/classes/TypedCustomEvent.html +2 -2
- package/docs/html/classes/TypedEventTarget.html +2 -2
- package/docs/html/enums/Lens_CameraFacing.html +2 -2
- package/docs/html/functions/ConcatInjectable.html +2 -2
- package/docs/html/functions/Injectable.html +2 -2
- package/docs/html/functions/bootstrapCameraKit.html +2 -2
- package/docs/html/functions/createExtension.html +2 -2
- package/docs/html/functions/createImageSource.html +2 -2
- package/docs/html/functions/createMediaStreamSource.html +2 -2
- package/docs/html/functions/createVideoSource.html +2 -2
- package/docs/html/functions/estimateLensPerformance.html +2 -2
- package/docs/html/functions/filePickerFactory.html +2 -2
- package/docs/html/functions/lensSourcesFactory.html +2 -2
- package/docs/html/functions/remoteApiServicesFactory.html +2 -2
- package/docs/html/hierarchy.html +1 -1
- package/docs/html/index.html +3 -3
- package/docs/html/interfaces/BitmojiUserInfo.html +2 -2
- package/docs/html/interfaces/CameraKitBootstrapConfiguration.html +2 -2
- package/docs/html/interfaces/CameraKitDeviceOptions.html +2 -2
- package/docs/html/interfaces/CameraKitSourceInfo.html +2 -2
- package/docs/html/interfaces/CameraKitSourceSubscriber.html +2 -2
- package/docs/html/interfaces/ComputedFrameMetrics.html +2 -2
- package/docs/html/interfaces/CreateSessionOptions.html +2 -2
- package/docs/html/interfaces/EstimatedLensPerformance.html +2 -2
- package/docs/html/interfaces/FriendUserInfo.html +2 -2
- package/docs/html/interfaces/FunctionSourceOptions.html +2 -2
- package/docs/html/interfaces/Lens.html +2 -2
- package/docs/html/interfaces/LensCreator.html +2 -2
- package/docs/html/interfaces/LensLaunchData.html +2 -2
- package/docs/html/interfaces/LensSource.html +2 -2
- package/docs/html/interfaces/LensUserData.html +2 -2
- package/docs/html/interfaces/LoadAssetRequest.html +2 -2
- package/docs/html/interfaces/MediaStreamSourceOptions.html +2 -2
- package/docs/html/interfaces/Preview.html +2 -2
- package/docs/html/interfaces/RemoteApiRequest.html +2 -2
- package/docs/html/interfaces/RemoteApiResponse.html +2 -2
- package/docs/html/interfaces/RemoteApiService.html +2 -2
- package/docs/html/interfaces/Snapcode.html +2 -2
- package/docs/html/interfaces/UriCancelRequest.html +2 -2
- package/docs/html/interfaces/UriRequest.html +2 -2
- package/docs/html/interfaces/UriResponse.html +2 -2
- package/docs/html/interfaces/VideoSourceOptions.html +2 -2
- package/docs/html/modules.html +2 -2
- package/docs/html/types/ArgumentValidationError.html +2 -2
- package/docs/html/types/AssetLoader.html +2 -2
- package/docs/html/types/AssetResponse.html +1 -1
- package/docs/html/types/AssetTiming.html +2 -2
- package/docs/html/types/BenchmarkError.html +1 -1
- package/docs/html/types/BootstrapError.html +2 -2
- package/docs/html/types/CacheKeyNotFoundError.html +1 -1
- package/docs/html/types/CameraKitSessionEventListener.html +2 -2
- package/docs/html/types/CameraKitSessionEvents.html +2 -2
- package/docs/html/types/CameraKitSourceError.html +1 -1
- package/docs/html/types/ConfigurationError.html +2 -2
- package/docs/html/types/FetchHandler.html +1 -1
- package/docs/html/types/FilePicker.html +2 -2
- package/docs/html/types/FilePickerOptions.html +2 -2
- package/docs/html/types/FilePickerResult.html +2 -2
- package/docs/html/types/Keyboard.html +2 -2
- package/docs/html/types/KeyboardEvents.html +2 -2
- package/docs/html/types/LegalError.html +1 -1
- package/docs/html/types/LensAbortError.html +2 -2
- package/docs/html/types/LensAssetError.html +2 -2
- package/docs/html/types/LensContentValidationError.html +1 -1
- package/docs/html/types/LensError.html +1 -1
- package/docs/html/types/LensExecutionError.html +2 -2
- package/docs/html/types/LensImagePickerError.html +2 -2
- package/docs/html/types/LensLaunchParams.html +2 -2
- package/docs/html/types/LensMetricsEvents.html +2 -2
- package/docs/html/types/LensPerformanceCluster.html +1 -1
- package/docs/html/types/LensView.html +2 -2
- package/docs/html/types/LensWait.html +2 -2
- package/docs/html/types/Matrix.html +2 -2
- package/docs/html/types/PersistentStoreError.html +2 -2
- package/docs/html/types/PlatformNotSupportedError.html +2 -2
- package/docs/html/types/PublicContainer.html +2 -2
- package/docs/html/types/PublicServices.html +2 -2
- package/docs/html/types/RemoteApiCancelRequestHandler.html +2 -2
- package/docs/html/types/RemoteApiRequestHandler.html +2 -2
- package/docs/html/types/RemoteApiServices.html +1 -1
- package/docs/html/types/RemoteApiStatus.html +2 -2
- package/docs/html/types/RenderTarget.html +2 -2
- package/docs/html/types/Uri.html +1 -1
- package/docs/html/types/WebGLError.html +1 -1
- package/docs/html/types/Zodiac.html +1 -1
- package/docs/html/variables/extensionRequestContext.html +2 -2
- package/docs/md/README.md +1 -1
- package/docs/md/classes/CameraKit.md +1 -1
- package/docs/md/classes/CameraKitSession.md +1 -1
- package/docs/md/classes/CameraKitSource.md +1 -1
- package/docs/md/classes/LensPerformanceMeasurement.md +1 -1
- package/docs/md/classes/LensPerformanceMetrics.md +1 -1
- package/docs/md/classes/LensRepository.md +1 -1
- package/docs/md/classes/Transform2D.md +1 -1
- package/docs/md/classes/TypedCustomEvent.md +1 -1
- package/docs/md/classes/TypedEventTarget.md +1 -1
- package/docs/md/enums/Lens_CameraFacing.md +1 -1
- package/docs/md/interfaces/BitmojiUserInfo.md +1 -1
- package/docs/md/interfaces/CameraKitBootstrapConfiguration.md +1 -1
- package/docs/md/interfaces/CameraKitDeviceOptions.md +1 -1
- package/docs/md/interfaces/CameraKitSourceInfo.md +1 -1
- package/docs/md/interfaces/CameraKitSourceSubscriber.md +1 -1
- package/docs/md/interfaces/ComputedFrameMetrics.md +1 -1
- package/docs/md/interfaces/CreateSessionOptions.md +1 -1
- package/docs/md/interfaces/EstimatedLensPerformance.md +1 -1
- package/docs/md/interfaces/FriendUserInfo.md +1 -1
- package/docs/md/interfaces/FunctionSourceOptions.md +1 -1
- package/docs/md/interfaces/Lens.md +1 -1
- package/docs/md/interfaces/LensCreator.md +1 -1
- package/docs/md/interfaces/LensLaunchData.md +1 -1
- package/docs/md/interfaces/LensSource.md +1 -1
- package/docs/md/interfaces/LensUserData.md +1 -1
- package/docs/md/interfaces/LoadAssetRequest.md +1 -1
- package/docs/md/interfaces/MediaStreamSourceOptions.md +1 -1
- package/docs/md/interfaces/Preview.md +1 -1
- package/docs/md/interfaces/RemoteApiRequest.md +1 -1
- package/docs/md/interfaces/RemoteApiResponse.md +1 -1
- package/docs/md/interfaces/RemoteApiService.md +1 -1
- package/docs/md/interfaces/Snapcode.md +1 -1
- package/docs/md/interfaces/UriCancelRequest.md +1 -1
- package/docs/md/interfaces/UriRequest.md +1 -1
- package/docs/md/interfaces/UriResponse.md +1 -1
- package/docs/md/interfaces/VideoSourceOptions.md +1 -1
- package/docs/md/modules.md +2 -2
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -181,7 +181,7 @@ session.pause('capture');
|
|
|
181
181
|
|
|
182
182
|
## Error Handling
|
|
183
183
|
|
|
184
|
-
Camera Kit Web SDK methods may throw errors, or return rejected Promises -- these are documented in the [API docs](https://kit.snapchat.com/reference/CameraKit/web/0.
|
|
184
|
+
Camera Kit Web SDK methods may throw errors, or return rejected Promises -- these are documented in the [API docs](https://kit.snapchat.com/reference/CameraKit/web/0.23.0/index.html). It is good practice to handle such cases, to provide a good experience to your users.
|
|
185
185
|
|
|
186
186
|
Errors may also occur during Lens rendering. For example, Lenses contain their own scripting, which could throw an error. A rendering error could also occur if a Lens attempts to use a feature that is not supported by Camera Kit Web SDK.
|
|
187
187
|
|
package/dist/environment.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export default { PACKAGE_VERSION: "0.
|
|
1
|
+
export default { PACKAGE_VERSION: "0.23.0" };
|
|
2
2
|
//# sourceMappingURL=environment.js.map
|
package/dist/environment.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC","sourcesContent":["export default { PACKAGE_VERSION: \"0.
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC","sourcesContent":["export default { PACKAGE_VERSION: \"0.23.0\" };\n"]}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { WasmFeatures } from "../../platform/platformCapabilities";
|
|
2
|
+
export declare function getBuildFlavor({ simd, exceptionHandling, relaxedSimd }: WasmFeatures, buildNumber: string): "release" | "rel-relaxed-simd-neh" | "rel-simd-neh" | "release-simd" | "rel-neh";
|
|
1
3
|
/**
|
|
2
4
|
* Returns a list of URLs for resources which will be fetched during {@link bootstrapCameraKit}.
|
|
3
5
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrapURLs.d.ts","sourceRoot":"","sources":["../../../src/lens-core-module/loader/bootstrapURLs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bootstrapURLs.d.ts","sourceRoot":"","sources":["../../../src/lens-core-module/loader/bootstrapURLs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAMxE,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oFAsBzG;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,wBAAwB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgB3F"}
|
|
@@ -1,13 +1,27 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import {
|
|
2
|
+
import { getPlatformCapabilities } from "../../platform/platformCapabilities";
|
|
3
3
|
import { getPlatformInfo } from "../../platform/platformInfo";
|
|
4
|
-
const wasmCapabilitiesToLensCoreBuildFlavor = {
|
|
5
|
-
[WasmFeatures.Default]: "release",
|
|
6
|
-
[WasmFeatures.ExceptionHandling]: "rel-neh",
|
|
7
|
-
[WasmFeatures.SIMD]: "release-simd",
|
|
8
|
-
[WasmFeatures.ExceptionHandling | WasmFeatures.SIMD]: "rel-simd-neh",
|
|
9
|
-
};
|
|
10
4
|
const wasmAssets = ["LensCoreWebAssembly.js", "LensCoreWebAssembly.wasm"];
|
|
5
|
+
export function getBuildFlavor({ simd, exceptionHandling, relaxedSimd }, buildNumber) {
|
|
6
|
+
const relaxedBuildAvailable = parseInt(buildNumber) >= Number.MAX_SAFE_INTEGER;
|
|
7
|
+
if (relaxedBuildAvailable && relaxedSimd) {
|
|
8
|
+
return "rel-relaxed-simd-neh";
|
|
9
|
+
}
|
|
10
|
+
else if (simd) {
|
|
11
|
+
if (exceptionHandling) {
|
|
12
|
+
return "rel-simd-neh";
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
return "release-simd";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
else if (exceptionHandling) {
|
|
19
|
+
return "rel-neh";
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
return "release";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
11
25
|
export function getRequiredBootstrapURLs(endpointOverride) {
|
|
12
26
|
return __awaiter(this, void 0, void 0, function* () {
|
|
13
27
|
const endpoint = endpointOverride === null || endpointOverride === void 0 ? void 0 : endpointOverride.replace(/[\/]+$/, "");
|
|
@@ -15,12 +29,9 @@ export function getRequiredBootstrapURLs(endpointOverride) {
|
|
|
15
29
|
if (!wasm.supported)
|
|
16
30
|
throw wasm.error;
|
|
17
31
|
const { lensCore } = getPlatformInfo();
|
|
18
|
-
const flavor = wasmCapabilitiesToLensCoreBuildFlavor[wasm.wasmFeatures];
|
|
19
|
-
if (!flavor)
|
|
20
|
-
throw new Error(`Could not determine a LensCore build flavor corresponding to the bitstring ` +
|
|
21
|
-
`${wasm.wasmFeatures.toString(2)}. CameraKit cannot be bootstrapped.`);
|
|
22
32
|
const version = lensCore.version;
|
|
23
33
|
const buildNumber = lensCore.buildNumber;
|
|
34
|
+
const flavor = getBuildFlavor(wasm.wasmFeatures, buildNumber);
|
|
24
35
|
return wasmAssets.map((asset) => {
|
|
25
36
|
if (endpoint)
|
|
26
37
|
return `${endpoint}/${asset}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrapURLs.js","sourceRoot":"","sources":["../../../src/lens-core-module/loader/bootstrapURLs.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"bootstrapURLs.js","sourceRoot":"","sources":["../../../src/lens-core-module/loader/bootstrapURLs.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,UAAU,GAAG,CAAC,wBAAwB,EAAE,0BAA0B,CAAC,CAAC;AAE1E,MAAM,UAAU,cAAc,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAgB,EAAE,WAAmB;IAQtG,MAAM,qBAAqB,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC;IAC/E,IAAI,qBAAqB,IAAI,WAAW,EAAE;QACtC,OAAO,sBAAsB,CAAC;KACjC;SAAM,IAAI,IAAI,EAAE;QACb,IAAI,iBAAiB,EAAE;YACnB,OAAO,cAAc,CAAC;SACzB;aAAM;YACH,OAAO,cAAc,CAAC;SACzB;KACJ;SAAM,IAAI,iBAAiB,EAAE;QAC1B,OAAO,SAAS,CAAC;KACpB;SAAM;QACH,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;AAaD,MAAM,UAAgB,wBAAwB,CAAC,gBAAyB;;QAEpE,MAAM,QAAQ,GAAG,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAEzD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,uBAAuB,EAAE,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,CAAC,KAAK,CAAC;QAEtC,MAAM,EAAE,QAAQ,EAAE,GAAG,eAAe,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;QACzC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAC9D,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5B,IAAI,QAAQ;gBAAE,OAAO,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC5C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC/D,OAAO,GAAG,MAAM,GAAG,QAAQ,IAAI,OAAO,IAAI,WAAW,IAAI,MAAM,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;QACxF,CAAC,CAAC,CAAC;IACP,CAAC;CAAA","sourcesContent":["import type { WasmFeatures } from \"../../platform/platformCapabilities\";\nimport { getPlatformCapabilities } from \"../../platform/platformCapabilities\";\nimport { getPlatformInfo } from \"../../platform/platformInfo\";\n\nconst wasmAssets = [\"LensCoreWebAssembly.js\", \"LensCoreWebAssembly.wasm\"];\n\nexport function getBuildFlavor({ simd, exceptionHandling, relaxedSimd }: WasmFeatures, buildNumber: string) {\n // Starting from build {!!TODO: UPDATE WITH ACTUAL NUMBER!!}, LensCore now includes relaxed builds.\n // We need to check for this because we allow customization of Camera Kit\n // with any LensCore builds, which may not include a relaxed build.\n // TODO: https://jira.sc-corp.net/browse/CAMKIT-6390\n // Due to bug https://jira.sc-corp.net/browse/CAMKIT-6455, we decided to rollback emscripten,\n // which allowed us to have relaxed builds. Once the bug is addressed and relaxed builds are available\n // update the check below with actual LensCore build number.\n const relaxedBuildAvailable = parseInt(buildNumber) >= Number.MAX_SAFE_INTEGER;\n if (relaxedBuildAvailable && relaxedSimd) {\n return \"rel-relaxed-simd-neh\";\n } else if (simd) {\n if (exceptionHandling) {\n return \"rel-simd-neh\";\n } else {\n return \"release-simd\";\n }\n } else if (exceptionHandling) {\n return \"rel-neh\";\n } else {\n return \"release\";\n }\n}\n\n/**\n * Returns a list of URLs for resources which will be fetched during {@link bootstrapCameraKit}.\n *\n * When CameraKit is used on a website, these URLs must be reachable in order for CameraKit to be successfully\n * bootstrapped.\n *\n * @param endpointOverride Optional endpoint override to load the assets from.\n * @returns An array of asset URLs.\n *\n * @category Bootstrapping and Configuration\n */\nexport async function getRequiredBootstrapURLs(endpointOverride?: string): Promise<string[]> {\n // If we have an endpoint override, remove trailing `/` so we can construct a valid URL.\n const endpoint = endpointOverride?.replace(/[\\/]+$/, \"\");\n\n const { wasm } = await getPlatformCapabilities();\n if (!wasm.supported) throw wasm.error;\n\n const { lensCore } = getPlatformInfo();\n const version = lensCore.version;\n const buildNumber = lensCore.buildNumber;\n const flavor = getBuildFlavor(wasm.wasmFeatures, buildNumber);\n return wasmAssets.map((asset) => {\n if (endpoint) return `${endpoint}/${asset}`;\n const { origin, pathname, search } = new URL(lensCore.baseUrl);\n return `${origin}${pathname}/${version}/${buildNumber}/${flavor}/${asset}${search}`;\n });\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export default {
|
|
2
|
-
version: "
|
|
3
|
-
buildNumber: "
|
|
4
|
-
baseUrl: "https://cf-st.sc-cdn.net/d/
|
|
2
|
+
version: "281",
|
|
3
|
+
buildNumber: "404",
|
|
4
|
+
baseUrl: "https://cf-st.sc-cdn.net/d/WEdh9uNS2aPmOYgaM1M1r?go=IgsKCTIBBEgBUFxgAQ%3D%3D&uc=92",
|
|
5
5
|
};
|
|
6
6
|
//# sourceMappingURL=lensCoreWasmVersions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lensCoreWasmVersions.js","sourceRoot":"","sources":["../src/lensCoreWasmVersions.ts"],"names":[],"mappings":"AAAA,eAAe;IACX,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,oFAAoF;CAChG,CAAC","sourcesContent":["export default {\n version: \"
|
|
1
|
+
{"version":3,"file":"lensCoreWasmVersions.js","sourceRoot":"","sources":["../src/lensCoreWasmVersions.ts"],"names":[],"mappings":"AAAA,eAAe;IACX,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,oFAAoF;CAChG,CAAC","sourcesContent":["export default {\n version: \"281\",\n buildNumber: \"404\",\n baseUrl: \"https://cf-st.sc-cdn.net/d/WEdh9uNS2aPmOYgaM1M1r?go=IgsKCTIBBEgBUFxgAQ%3D%3D&uc=92\",\n};\n"]}
|
|
@@ -13,24 +13,14 @@ export type Capability<T = void> = SupportedCapability<T> | UnsupportedCapabilit
|
|
|
13
13
|
type WebGlCapability = Capability<{
|
|
14
14
|
maxTextureSize: number;
|
|
15
15
|
}>;
|
|
16
|
+
export interface WasmFeatures {
|
|
17
|
+
simd: boolean;
|
|
18
|
+
exceptionHandling: boolean;
|
|
19
|
+
relaxedSimd: boolean;
|
|
20
|
+
}
|
|
16
21
|
type WasmCapability = Capability<{
|
|
17
|
-
wasmFeatures:
|
|
22
|
+
wasmFeatures: WasmFeatures;
|
|
18
23
|
}>;
|
|
19
|
-
/**
|
|
20
|
-
* Because there may be a large number of WASM-related capabilities, and because these may correspond to various builds
|
|
21
|
-
* of LensCore, we encode the various WASM capabilities into a single number by bitwise OR-ing together the numbers
|
|
22
|
-
* corresponding to each capability.
|
|
23
|
-
*
|
|
24
|
-
* Since each combindation of capabilities is represented by a single number, we can easily map between that number and
|
|
25
|
-
* the corresponding LensCore build name that makes use of those capabilities.
|
|
26
|
-
*
|
|
27
|
-
* @internal
|
|
28
|
-
*/
|
|
29
|
-
export declare enum WasmFeatures {
|
|
30
|
-
Default = 0,
|
|
31
|
-
SIMD = 1,
|
|
32
|
-
ExceptionHandling = 2
|
|
33
|
-
}
|
|
34
24
|
type WebXrCapability = Capability<XrCapabilities>;
|
|
35
25
|
/**
|
|
36
26
|
* @returns A Promise containing an object with fields describing the support of various WebXR features. This object's
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platformCapabilities.d.ts","sourceRoot":"","sources":["../../src/platform/platformCapabilities.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAI1E,gBAAgB;AAChB,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,CAAC;AAC7D,gBAAgB;AAChB,MAAM,MAAM,qBAAqB,GAAG;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AACvE,gBAAgB;AAChB,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,IAAI,IAAI,mBAAmB,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC;AAMlF,KAAK,eAAe,GAAG,UAAU,CAAC;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AA8C9D,
|
|
1
|
+
{"version":3,"file":"platformCapabilities.d.ts","sourceRoot":"","sources":["../../src/platform/platformCapabilities.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAI1E,gBAAgB;AAChB,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG;IAAE,SAAS,EAAE,IAAI,CAAA;CAAE,CAAC;AAC7D,gBAAgB;AAChB,MAAM,MAAM,qBAAqB,GAAG;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AACvE,gBAAgB;AAChB,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,IAAI,IAAI,mBAAmB,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC;AAMlF,KAAK,eAAe,GAAG,UAAU,CAAC;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AA8C9D,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;CACxB;AAED,KAAK,cAAc,GAAG,UAAU,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;CAC9B,CAAC,CAAC;AAwCH,KAAK,eAAe,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;AAalD;;;;;GAKG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,eAAe,CAAC,CAuBrE;AAED,gBAAgB;AAChB,MAAM,WAAW,oBAAoB;IACjC,KAAK,EAAE,eAAe,CAAC;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,eAAe,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,6CAAqD,QAAQ,oBAAoB,CAAC,CAMpH,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { exceptions, simd } from "wasm-feature-detect";
|
|
2
|
+
import { exceptions as getExceptions, simd as getSimd, relaxedSimd as getRelaxedSimd } from "wasm-feature-detect";
|
|
3
3
|
import { memoize } from "../common/memoize";
|
|
4
4
|
import { platformNotSupportedError } from "../namedErrors";
|
|
5
5
|
import { getPlatformInfo } from "./platformInfo";
|
|
@@ -28,12 +28,6 @@ function getWebGlSupport() {
|
|
|
28
28
|
`${minRequiredMaxTextureSize}, but the browser's reported MAX_TEXTURE_SIZE is ${maxTextureSize}.`),
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
|
-
export var WasmFeatures;
|
|
32
|
-
(function (WasmFeatures) {
|
|
33
|
-
WasmFeatures[WasmFeatures["Default"] = 0] = "Default";
|
|
34
|
-
WasmFeatures[WasmFeatures["SIMD"] = 1] = "SIMD";
|
|
35
|
-
WasmFeatures[WasmFeatures["ExceptionHandling"] = 2] = "ExceptionHandling";
|
|
36
|
-
})(WasmFeatures || (WasmFeatures = {}));
|
|
37
31
|
function getWebAssemblyCapabilities() {
|
|
38
32
|
return __awaiter(this, void 0, void 0, function* () {
|
|
39
33
|
if (globalThis.WebAssembly === undefined)
|
|
@@ -41,16 +35,22 @@ function getWebAssemblyCapabilities() {
|
|
|
41
35
|
supported: false,
|
|
42
36
|
error: platformNotSupportedError("CameraKit requires WebAssembly, but this browser does not support WebAssembly."),
|
|
43
37
|
};
|
|
38
|
+
const [simd, exceptionHandling, relaxedSimd] = yield Promise.all([
|
|
39
|
+
getSimd().then((simd) => {
|
|
40
|
+
if (getPlatformInfo().browser.brand === "Safari")
|
|
41
|
+
return false;
|
|
42
|
+
return simd;
|
|
43
|
+
}),
|
|
44
|
+
getExceptions(),
|
|
45
|
+
getRelaxedSimd(),
|
|
46
|
+
]);
|
|
44
47
|
return {
|
|
45
48
|
supported: true,
|
|
46
|
-
wasmFeatures:
|
|
47
|
-
simd
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}),
|
|
52
|
-
exceptions().then((supported) => (supported ? WasmFeatures.ExceptionHandling : WasmFeatures.Default)),
|
|
53
|
-
])).reduce((features, feature) => features | feature, WasmFeatures.Default),
|
|
49
|
+
wasmFeatures: {
|
|
50
|
+
simd,
|
|
51
|
+
exceptionHandling,
|
|
52
|
+
relaxedSimd,
|
|
53
|
+
},
|
|
54
54
|
};
|
|
55
55
|
});
|
|
56
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platformCapabilities.js","sourceRoot":"","sources":["../../src/platform/platformCapabilities.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"platformCapabilities.js","sourceRoot":"","sources":["../../src/platform/platformCapabilities.ts"],"names":[],"mappings":"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","sourcesContent":["import { exceptions as getExceptions, simd as getSimd, relaxedSimd as getRelaxedSimd } from \"wasm-feature-detect\";\nimport { memoize } from \"../common/memoize\";\nimport type { XrCapabilities } from \"../lens-core-module/generated-types\";\nimport { platformNotSupportedError } from \"../namedErrors\";\nimport { getPlatformInfo } from \"./platformInfo\";\n\n/** @internal */\nexport type SupportedCapability<T> = T & { supported: true };\n/** @internal */\nexport type UnsupportedCapability = { supported: false; error: Error };\n/** @internal */\nexport type Capability<T = void> = SupportedCapability<T> | UnsupportedCapability;\n\n//-----------\n// WebGL\n//-----------\n\ntype WebGlCapability = Capability<{ maxTextureSize: number }>;\n\n// This required minimum max texture size is based on data from\n// https://web3dsurvey.com/webgl/parameters/MAX_TEXTURE_SIZE. Checking for a reasonable minimum MAX_TEXTURE_SIZE avoids\n// attempting to run lenses on platforms that will not support them -- most commonly, we've seen some platforms that\n// report 0 MAX_TEXTURE_SIZE, which will cause errors for all lenses.\nconst minRequiredMaxTextureSize = 1024;\n\n/**\n * @returns An object with fields describing support for various WebGL features.\n *\n * @internal\n */\nfunction getWebGlSupport(): WebGlCapability {\n const ctx = globalThis.document?.createElement(\"canvas\").getContext(\"webgl2\");\n if (!ctx) {\n const cause = globalThis.document?.createElement(\"canvas\").getContext(\"webgl\")\n ? \"platform_not_supported_only_webgl1\"\n : typeof globalThis.WebGLRenderingContext === \"function\"\n ? \"platform_not_supported_likely_no_hw_accel\"\n : \"platform_not_supported_no_webgl_browser_support\";\n return {\n supported: false,\n error: platformNotSupportedError(\n \"CameraKit requires WebGL2, but this browser does not support WebGL2.\",\n new Error(cause)\n ),\n };\n }\n const maxTextureSize = ctx.getParameter(ctx.MAX_TEXTURE_SIZE);\n const supported = maxTextureSize >= minRequiredMaxTextureSize;\n return supported\n ? { supported, maxTextureSize }\n : {\n supported,\n error: platformNotSupportedError(\n `CameraKit requires WebGL's MAX_TEXTURE_SIZE exceed a minimum value of ` +\n `${minRequiredMaxTextureSize}, but the browser's reported MAX_TEXTURE_SIZE is ${maxTextureSize}.`\n ),\n };\n}\n\n//-----------\n// WASM\n//-----------\n\nexport interface WasmFeatures {\n simd: boolean;\n exceptionHandling: boolean;\n relaxedSimd: boolean;\n}\n\ntype WasmCapability = Capability<{\n wasmFeatures: WasmFeatures;\n}>;\n\n/**\n * @returns A non-negative integer representing the combination of supported WebAssembly features, or -1 if WebAssembly\n * is not supported at all.\n *\n * @internal\n */\nasync function getWebAssemblyCapabilities(): Promise<WasmCapability> {\n if (globalThis.WebAssembly === undefined)\n return {\n supported: false,\n error: platformNotSupportedError(\n \"CameraKit requires WebAssembly, but this browser does not support WebAssembly.\"\n ),\n };\n const [simd, exceptionHandling, relaxedSimd] = await Promise.all([\n getSimd().then((simd) => {\n // Although Safari 16.4 reports SIMD support, LensCore encounters rendering bugs when using\n // SIMD in Safari 16.4. We will disable SIMD for now until Safari stabilizes the feature.\n if (getPlatformInfo().browser.brand === \"Safari\") return false;\n return simd;\n }),\n getExceptions(),\n getRelaxedSimd(),\n ]);\n return {\n supported: true,\n wasmFeatures: {\n simd,\n exceptionHandling,\n relaxedSimd,\n },\n };\n}\n\n//-----------\n// WebXR\n//-----------\n\ntype WebXrCapability = Capability<XrCapabilities>;\n\nfunction getGenericWebXrNotSupported(cause?: unknown): WebXrCapability {\n return {\n supported: false,\n error: platformNotSupportedError(\n `Use of this feature requires WebXR support for immersive AR sessions, but ` +\n `this browser does not support immersive AR sessions.`,\n cause\n ),\n };\n}\n\n/**\n * @returns A Promise containing an object with fields describing the support of various WebXR features. This object's\n * type is defined by LensCore, as they consume these capabilities and adjust behavior accordingly.\n *\n * @internal\n */\nexport async function getWebXrCapabilities(): Promise<WebXrCapability> {\n try {\n if (!isSecureContext || !navigator.xr) return getGenericWebXrNotSupported();\n const isImmersiveArSupported = await navigator.xr.isSessionSupported(\"immersive-ar\");\n return isImmersiveArSupported\n ? {\n supported: true,\n sixDofSupported: true,\n sceneDepthSupported: true,\n }\n : getGenericWebXrNotSupported();\n } catch (error) {\n if (error instanceof Error && error.name === \"SecurityError\") {\n return {\n supported: false,\n error: platformNotSupportedError(\n \"Failed to check XR capabilities due to permissions or other issues.\",\n error\n ),\n };\n }\n return getGenericWebXrNotSupported(error);\n }\n}\n\n/** @internal */\nexport interface PlatformCapabilities {\n webgl: WebGlCapability;\n wasm: WasmCapability;\n webxr: WebXrCapability;\n}\n\n/**\n * Get information about the current platform capabilities, including:\n * - WebGL support and various WebGL parameters.\n * - WASM support and support for various WASM features.\n * - WebXR support and support for various WebXR features.\n *\n * @internal\n */\nexport const getPlatformCapabilities = memoize(async function getPlatformCapabilities(): Promise<PlatformCapabilities> {\n return {\n webgl: getWebGlSupport(),\n wasm: await getWebAssemblyCapabilities(),\n webxr: await getWebXrCapabilities(),\n };\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lensState.d.ts","sourceRoot":"","sources":["../../src/session/lensState.ts"],"names":[],"mappings":"AACA,OAAO,EAQH,YAAY,EACf,MAAM,wBAAwB,CAAC;AAiBhC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAI7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,OAAO,KAAK,EAAE,UAAU,EAAE,0BAA0B,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAMxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAMvF,QAAA,MAAM,eAAe;UAEqB,IAAI;;;WAMG,UAAU;UAAQ,IAAI;whBAwCtE,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,0BAA0B,GAAG,SAAS,CAAC;AAE7E,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAE3D,eAAO,MAAM,gBAAgB;;cApDa,IAAI;;;eAMG,UAAU;cAAQ,IAAI;;;;
|
|
1
|
+
{"version":3,"file":"lensState.d.ts","sourceRoot":"","sources":["../../src/session/lensState.ts"],"names":[],"mappings":"AACA,OAAO,EAQH,YAAY,EACf,MAAM,wBAAwB,CAAC;AAiBhC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAI7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,OAAO,KAAK,EAAE,UAAU,EAAE,0BAA0B,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAMxF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAMvF,QAAA,MAAM,eAAe;UAEqB,IAAI;;;WAMG,UAAU;UAAQ,IAAI;whBAwCtE,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,0BAA0B,GAAG,SAAS,CAAC;AAE7E,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAE3D,eAAO,MAAM,gBAAgB;;cApDa,IAAI;;;eAMG,UAAU;cAAQ,IAAI;;;;CA0WtE,CAAC"}
|
|
@@ -71,7 +71,7 @@ export const lensStateFactory = Injectable("lensState", [
|
|
|
71
71
|
`repository. Use CameraKit.lensRepository.loadLens (or loadLensGroups) ` +
|
|
72
72
|
`to load lens metadata before calling CameraKitSession.applyLens.`);
|
|
73
73
|
}
|
|
74
|
-
const { content } = lensDetails;
|
|
74
|
+
const { content, isThirdParty } = lensDetails;
|
|
75
75
|
if (!content) {
|
|
76
76
|
throw new Error(`Cannot apply lens ${lens.id}. Metadata retrieved for this lens does not ` +
|
|
77
77
|
`include the lens content URL.`);
|
|
@@ -80,8 +80,9 @@ export const lensStateFactory = Injectable("lensState", [
|
|
|
80
80
|
lens,
|
|
81
81
|
launchData: encodeLensLaunchData(launchData !== null && launchData !== void 0 ? launchData : {}, persistentStore !== null && persistentStore !== void 0 ? persistentStore : new ArrayBuffer(0)),
|
|
82
82
|
content,
|
|
83
|
+
isThirdParty,
|
|
83
84
|
};
|
|
84
|
-
}), mergeMap(({ lens, launchData, content }) => {
|
|
85
|
+
}), mergeMap(({ lens, launchData, content, isThirdParty }) => {
|
|
85
86
|
const networkTimer = applyTimer.mark("network");
|
|
86
87
|
return from(Promise.all([
|
|
87
88
|
lensRepository.getLensContent(lens).finally(() => networkTimer.measure("lens")),
|
|
@@ -95,7 +96,15 @@ export const lensStateFactory = Injectable("lensState", [
|
|
|
95
96
|
lensState.dispatch("downloadComplete", lens);
|
|
96
97
|
}), map(([{ lensBuffer, lensChecksum }]) => {
|
|
97
98
|
const lensDataBuffer = lensBuffer.slice(0);
|
|
98
|
-
return {
|
|
99
|
+
return {
|
|
100
|
+
lensId: lens.id,
|
|
101
|
+
lensDataBuffer,
|
|
102
|
+
lensChecksum,
|
|
103
|
+
launchData,
|
|
104
|
+
apiVisibility: isThirdParty
|
|
105
|
+
? lensCore.LensApiVisibility.Public
|
|
106
|
+
: lensCore.LensApiVisibility.Private,
|
|
107
|
+
};
|
|
99
108
|
}));
|
|
100
109
|
})),
|
|
101
110
|
}).pipe(takeUntil(lensState.events.pipe(forActions("removeLens"))), mergeMap(({ lensInput, watermarkInput }) => new Observable((subscriber) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lensState.js","sourceRoot":"","sources":["../../src/session/lensState.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Actions } from \"@snap/state-management\";\nimport {\n defineAction,\n defineActions,\n defineState,\n defineStates,\n dispatch,\n forActions,\n inStates,\n StateMachine,\n} from \"@snap/state-management\";\nimport {\n catchError,\n exhaustMap,\n forkJoin,\n from,\n map,\n merge,\n mergeMap,\n Observable,\n of,\n switchMap,\n take,\n takeUntil,\n tap,\n} from \"rxjs\";\nimport { Injectable } from \"../dependency-injection/Injectable\";\nimport type { Lens } from \"../lens/Lens\";\nimport type { LensRepository } from \"../lens/LensRepository\";\nimport { lensRepositoryFactory } from \"../lens/LensRepository\";\nimport type { AddLensInput } from \"../lens-core-module/generated-types\";\nimport type { IndexedDBPersistence } from \"../persistence/IndexedDBPersistence\";\nimport { lensPersistenceStoreFactory } from \"../lens/LensPersistenceStore\";\nimport type { LensLaunchData } from \"../lens/LensLaunchData\";\nimport { encodeLensLaunchData } from \"../lens/LensLaunchData\";\nimport type { LegalState } from \"../legal/legalState\";\nimport { legalStateFactory } from \"../legal/legalState\";\nimport type { LensAssetRepository } from \"../lens/assets/LensAssetRepository\";\nimport { lensAssetRepositoryFactory } from \"../lens/assets/LensAssetRepository\";\nimport type { LegalError, LensContentValidationError, LensError } from \"../namedErrors\";\nimport { legalError, lensContentValidationError, lensError } from \"../namedErrors\";\nimport { getLogger } from \"../logger/logger\";\nimport { Timer } from \"../metrics/operational/Timer\";\nimport { unsubscribed } from \"../observable-operators/unsubscribed\";\nimport { assertUnreachable } from \"../common/assertions\";\nimport type { MetricsClient } from \"../clients/metricsClient\";\nimport { metricsClientFactory } from \"../clients/metricsClient\";\nimport type { LensCore } from \"../lens-core-module/lensCore\";\nimport { lensCoreFactory } from \"../lens-core-module/loader/lensCoreFactory\";\nimport type { RemoteConfiguration } from \"../remote-configuration/remoteConfiguration\";\nimport { remoteConfigurationFactory } from \"../remote-configuration/remoteConfiguration\";\nimport { watermarksLensGroup } from \"../lens/fetchWatermarkLens\";\n\nconst logger = getLogger(\"LensState\");\n\nconst createLensState = () => {\n const actions = defineActions(\n defineAction(\"applyLens\")<{ lens: Lens; launchData?: LensLaunchData }>(),\n defineAction(\"downloadComplete\")<Lens>(),\n defineAction(\"turnedOn\")<Lens>(),\n defineAction(\"resourcesLoaded\")<Lens>(),\n defineAction(\"firstFrameProcessed\")<Lens>(),\n defineAction(\"applyLensComplete\")<Lens>(),\n defineAction(\"applyLensFailed\")<{ error: LensErrors; lens: Lens }>(),\n defineAction(\"applyLensAborted\")<Lens>(),\n\n defineAction(\"removeLens\")(),\n defineAction(\"turnedOff\")<Lens>(),\n defineAction(\"removeLensComplete\")(),\n defineAction(\"removeLensFailed\")<Error>()\n );\n\n const states = defineStates(\n defineState(\"noLensApplied\")(),\n defineState(\"applyingLens\")<Lens>(),\n defineState(\"lensApplied\")<Lens>()\n );\n\n return new StateMachine(actions, states, states.noLensApplied(), (events) =>\n merge(\n events.pipe(\n // We allow a new lens to be applied at any time, no matter the state.\n inStates(\"noLensApplied\", \"applyingLens\", \"lensApplied\"),\n forActions(\"applyLens\"),\n map(([a]) => states.applyingLens(a.data.lens))\n ),\n events.pipe(\n inStates(\"applyingLens\"),\n forActions(\"applyLensComplete\"),\n map(([a]) => states.lensApplied(a.data))\n ),\n events.pipe(\n inStates(\"applyingLens\"),\n forActions(\"applyLensFailed\"),\n map(() => states.noLensApplied())\n ),\n events.pipe(\n inStates(\"lensApplied\"),\n forActions(\"removeLensComplete\"),\n map(() => states.noLensApplied())\n )\n )\n );\n};\n\nexport type LensErrors = LegalError | LensContentValidationError | LensError;\n\nexport type LensState = ReturnType<typeof createLensState>;\n\nexport const lensStateFactory = Injectable(\n \"lensState\",\n [\n lensCoreFactory.token,\n lensRepositoryFactory.token,\n lensAssetRepositoryFactory.token,\n lensPersistenceStoreFactory.token,\n legalStateFactory.token,\n metricsClientFactory.token,\n remoteConfigurationFactory.token,\n ] as const,\n (\n lensCore: LensCore,\n lensRepository: LensRepository,\n lensAssetRepository: LensAssetRepository,\n lensPersistence: IndexedDBPersistence<ArrayBuffer>,\n legalState: LegalState,\n metrics: MetricsClient,\n remoteConfig: RemoteConfiguration\n ): LensState => {\n const lensState = createLensState();\n let firstLensApply = true;\n\n /**\n * Apply lens\n */\n lensState.events\n .pipe(\n forActions(\"applyLens\"),\n\n // Determine the legal state (e.g. terms have been accepted). Using exhaustMap means while we are\n // ascertaining legal status (which may include prompting the end user to accept terms), we will ignore\n // any new applyLens actions.\n exhaustMap(([a]) =>\n of(legalState.actions.requestLegalPrompt()).pipe(\n dispatch(legalState),\n inStates(\"accepted\", \"rejected\"),\n take(1),\n map(([, { name }]) => {\n if (name === \"accepted\") return a;\n return lensState.actions.applyLensFailed({\n error: legalError(\n `Failed to apply lens ${a.data.lens.id}. Required legal terms were not accepted.`\n ),\n lens: a.data.lens,\n });\n })\n )\n ),\n\n // The use of switchMap is important so that if we get a new applyLens action while we're still\n // downloading lens content for a previously-requested lens, we can cancel those requests and ensure\n // that lenses are applied in the order they're requested.\n switchMap((a) => {\n if (a.name === \"applyLensFailed\") return of(a);\n\n const { lens } = a.data;\n // Convenience method making dispatching an action with Lens data less verbose.\n const dispatch = (action: Extract<Actions<LensState>, { data: Lens }>[\"name\"]) => {\n lensState.dispatch(action, lens);\n };\n\n // We record if this was the first lens apply for this page load, since there may be additional\n // sources of latency (e.g. remote configuration that needs to be loaded) on the first apply that\n // are not present for subsequent applies.\n const applyTimer = new Timer(\"lens\").mark(\"apply\", { first: `${firstLensApply}` });\n firstLensApply = false;\n\n return forkJoin({\n watermarkInput: remoteConfig.getInitializationConfig().pipe(\n mergeMap((config) => {\n if (!config.watermarkEnabled) return of(undefined);\n\n return from(lensRepository.loadLens(\"\", watermarksLensGroup)).pipe(\n mergeMap((watermark) =>\n // NOTE: we expect that watermark lens is preloaded,\n // to not affect loading time of the actual lens\n from(lensRepository.getLensContent(watermark)).pipe(\n map(({ lensBuffer, lensChecksum }): AddLensInput => {\n return {\n lensId: watermark.id,\n // Copy buffer, so LC can own the copy\n lensDataBuffer: lensBuffer.slice(0),\n lensChecksum,\n launchData: new ArrayBuffer(0),\n };\n })\n )\n )\n );\n })\n ),\n\n lensInput: of(a.data).pipe(\n mergeMap(({ lens, launchData }) => {\n // If retrieval throws an error, we still want to proceed with the lens\n // because persisted data is not a necessity.\n return from(lensPersistence.retrieve(lens.id).catch(() => undefined)).pipe(\n map((persistentStore) => ({ lens, launchData, persistentStore }))\n );\n }),\n\n map(({ lens, launchData, persistentStore }) => {\n const lensDetails = lensRepository.getLensMetadata(lens.id);\n if (!lensDetails) {\n throw new Error(\n `Cannot apply lens ${lens.id}. It has not been loaded by the Lens ` +\n `repository. Use CameraKit.lensRepository.loadLens (or loadLensGroups) ` +\n `to load lens metadata before calling CameraKitSession.applyLens.`\n );\n }\n\n const { content } = lensDetails;\n if (!content) {\n throw new Error(\n `Cannot apply lens ${lens.id}. Metadata retrieved for this lens does not ` +\n `include the lens content URL.`\n );\n }\n\n return {\n lens,\n launchData: encodeLensLaunchData(\n launchData ?? {},\n persistentStore ?? new ArrayBuffer(0)\n ),\n content,\n };\n }),\n\n // Load lens assets and the lens itself in parallel. Both count toward lens download time.\n // TODO: use RxJS fetch utilities so that these requests can be cancelled on unsubscribe.\n mergeMap(({ lens, launchData, content }) => {\n const networkTimer = applyTimer.mark(\"network\");\n\n return from(\n Promise.all([\n lensRepository.getLensContent(lens).finally(() => networkTimer.measure(\"lens\")),\n content.assetManifest.length > 0\n ? lensAssetRepository\n .cacheAssets(content.assetManifest, lens)\n .finally(() => networkTimer.measure(\"assets\"))\n : Promise.resolve(),\n ])\n ).pipe(\n tap(() => {\n networkTimer.measure();\n lensState.dispatch(\"downloadComplete\", lens);\n }),\n map(([{ lensBuffer, lensChecksum }]): AddLensInput => {\n // NOTE: cached array buffer has to be copied each time in order to be reused,\n // otherwise the original cached copy would be detached by LensCore\n // One optimization can be done here: do not copy the array if getLensContent()\n // returned uncached buffer\n const lensDataBuffer = lensBuffer.slice(0);\n return { lensId: lens.id, lensDataBuffer, lensChecksum, launchData };\n })\n );\n })\n ),\n }).pipe(\n // If removeLens is dispatched while downloading, cancel download, don't apply the lens.\n takeUntil(lensState.events.pipe(forActions(\"removeLens\"))),\n\n // Once the lens has downloaded, we can call replaceLenses. We're not concerned about\n // waiting for prior in-progress calls to replaceLenses to complete, because LensCore\n // guarantees that calls to replaceLenses will always be processed sequentially in the order\n // they are received.\n mergeMap(\n ({ lensInput, watermarkInput }) =>\n new Observable<Actions<LensState>>((subscriber) => {\n const coreTimer = applyTimer.mark(\"core\");\n\n // replaceLenses has the property that if it fails, LensCore guarantees that no\n // lenses are active – so we can safely dispatch applyLensFailed and transition\n // to noLensApplied state.\n lensCore\n .replaceLenses({\n lenses: [\n {\n ...lensInput,\n onTurnOn: () => dispatch(\"turnedOn\"),\n onResourcesLoaded: () => dispatch(\"resourcesLoaded\"),\n\n // onFirstFrameProcessed marks the end of the lens application for\n // the end-user -- this is when they see the newly applied lens\n // begin to render. As such, this is where we stop our overall\n // latency measurement and report latency metrics.\n onFirstFrameProcessed: () => {\n coreTimer.measure(\"first-frame\");\n applyTimer.measure(\"success\");\n applyTimer.stopAndReport(metrics);\n dispatch(\"firstFrameProcessed\");\n },\n onTurnOff: () => dispatch(\"turnedOff\"),\n },\n // Watermark is always applied last\n ...(watermarkInput ? [watermarkInput] : []),\n ],\n })\n .then(() => {\n coreTimer.measure(\"success\");\n\n // We emit applyLensComplete (and applyLensFailed, below) on an\n // Observable, which is piped to `dispatch` – this allows `switchMap` to\n // properly cancel the dispatch of these actions if a new applyLens\n // arrives while we're waiting for onSuccess/onFailure.\n //\n // That's desirable behavior, because we don't want the applyingLens\n // state due to a *subsequent applyLens action* to be transitioned to\n // lensApplied by this action.\n subscriber.next(lensState.actions.applyLensComplete(lens));\n subscriber.complete();\n })\n .catch((lensCoreError) => {\n coreTimer.measure(\"failure\");\n applyTimer.measure(\"failure\");\n applyTimer.stopAndReport(metrics);\n\n const message = `Failed to apply lens ${lensInput.lensId}.`;\n const error = /validation failed/.test(lensCoreError.message)\n ? lensContentValidationError(message, lensCoreError)\n : lensError(message, lensCoreError);\n\n subscriber.next(lensState.actions.applyLensFailed({ error, lens }));\n subscriber.complete();\n });\n })\n ),\n catchError((error: LensErrors) => {\n applyTimer.measure(\"failure\");\n applyTimer.stopAndReport(metrics);\n return of(lensState.actions.applyLensFailed({ error, lens }));\n }),\n\n // If a new applyLens is received, `switchMap` will unsubscribe from this inner observable,\n // which stops the current lens application. When this happens we can record a separate metric\n // to measure aborted lens applications.\n unsubscribed(() => {\n applyTimer.measure(\"abort\");\n applyTimer.stopAndReport(metrics);\n })\n );\n }),\n dispatch(lensState)\n )\n .subscribe({\n error: logger.error,\n });\n\n /**\n * Remove lens\n */\n lensState.events\n .pipe(\n inStates(\"lensApplied\", \"noLensApplied\"),\n forActions(\"removeLens\"),\n mergeMap(\n () =>\n new Observable<Actions<LensState>>((subscriber) => {\n lensCore\n .clearAllLenses()\n .then(() => {\n subscriber.next(lensState.actions.removeLensComplete());\n subscriber.complete();\n })\n .catch((lensCoreError) => {\n const error = new Error(\"Failed to remove lenses.\", { cause: lensCoreError });\n subscriber.next(lensState.actions.removeLensFailed(error));\n subscriber.complete();\n });\n })\n ),\n dispatch(lensState)\n )\n .subscribe({\n error: logger.error,\n });\n\n lensState.events\n .pipe(\n inStates(\"applyingLens\"),\n forActions(\"removeLens\"),\n switchMap(([a]) =>\n lensState.events.pipe(\n // Wait to remove the lens until it has been applied.\n inStates(\"lensApplied\"),\n // But cancel the removal if a new applyLens supersedes the current lens. The goal here is to\n // make sure the latest apply/remove preempts any previous request to apply/remove.\n takeUntil(lensState.events.pipe(forActions(\"applyLens\"))),\n map(() => a)\n )\n ),\n dispatch(lensState)\n )\n .subscribe({\n error: logger.error,\n });\n\n // Log transitions\n lensState.events.subscribe(([a, s]) => {\n const data = extractLoggableData(a);\n logger.debug(`Action: \"${a.name}\", state: \"${s.name}\"${data ? \", data: \" + JSON.stringify(data) : \"\"}`);\n });\n\n return lensState;\n }\n);\n\nfunction extractLoggableData(action: Actions<LensState>): Record<string, string> | undefined {\n switch (action.name) {\n case \"applyLens\":\n return { lensId: action.data.lens.id };\n case \"applyLensFailed\":\n return { lensId: action.data.lens.id, error: action.data.error.message };\n case \"downloadComplete\":\n case \"turnedOn\":\n case \"resourcesLoaded\":\n case \"firstFrameProcessed\":\n case \"applyLensComplete\":\n case \"applyLensAborted\":\n case \"turnedOff\":\n return { lensId: action.data.id };\n case \"removeLens\":\n case \"removeLensComplete\":\n return undefined;\n case \"removeLensFailed\":\n return { error: action.data.message };\n default:\n assertUnreachable(action);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"lensState.js","sourceRoot":"","sources":["../../src/session/lensState.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Actions } from \"@snap/state-management\";\nimport {\n defineAction,\n defineActions,\n defineState,\n defineStates,\n dispatch,\n forActions,\n inStates,\n StateMachine,\n} from \"@snap/state-management\";\nimport {\n catchError,\n exhaustMap,\n forkJoin,\n from,\n map,\n merge,\n mergeMap,\n Observable,\n of,\n switchMap,\n take,\n takeUntil,\n tap,\n} from \"rxjs\";\nimport { Injectable } from \"../dependency-injection/Injectable\";\nimport type { Lens } from \"../lens/Lens\";\nimport type { LensRepository } from \"../lens/LensRepository\";\nimport { lensRepositoryFactory } from \"../lens/LensRepository\";\nimport type { AddLensInput } from \"../lens-core-module/generated-types\";\nimport type { IndexedDBPersistence } from \"../persistence/IndexedDBPersistence\";\nimport { lensPersistenceStoreFactory } from \"../lens/LensPersistenceStore\";\nimport type { LensLaunchData } from \"../lens/LensLaunchData\";\nimport { encodeLensLaunchData } from \"../lens/LensLaunchData\";\nimport type { LegalState } from \"../legal/legalState\";\nimport { legalStateFactory } from \"../legal/legalState\";\nimport type { LensAssetRepository } from \"../lens/assets/LensAssetRepository\";\nimport { lensAssetRepositoryFactory } from \"../lens/assets/LensAssetRepository\";\nimport type { LegalError, LensContentValidationError, LensError } from \"../namedErrors\";\nimport { legalError, lensContentValidationError, lensError } from \"../namedErrors\";\nimport { getLogger } from \"../logger/logger\";\nimport { Timer } from \"../metrics/operational/Timer\";\nimport { unsubscribed } from \"../observable-operators/unsubscribed\";\nimport { assertUnreachable } from \"../common/assertions\";\nimport type { MetricsClient } from \"../clients/metricsClient\";\nimport { metricsClientFactory } from \"../clients/metricsClient\";\nimport type { LensCore } from \"../lens-core-module/lensCore\";\nimport { lensCoreFactory } from \"../lens-core-module/loader/lensCoreFactory\";\nimport type { RemoteConfiguration } from \"../remote-configuration/remoteConfiguration\";\nimport { remoteConfigurationFactory } from \"../remote-configuration/remoteConfiguration\";\nimport { watermarksLensGroup } from \"../lens/fetchWatermarkLens\";\n\nconst logger = getLogger(\"LensState\");\n\nconst createLensState = () => {\n const actions = defineActions(\n defineAction(\"applyLens\")<{ lens: Lens; launchData?: LensLaunchData }>(),\n defineAction(\"downloadComplete\")<Lens>(),\n defineAction(\"turnedOn\")<Lens>(),\n defineAction(\"resourcesLoaded\")<Lens>(),\n defineAction(\"firstFrameProcessed\")<Lens>(),\n defineAction(\"applyLensComplete\")<Lens>(),\n defineAction(\"applyLensFailed\")<{ error: LensErrors; lens: Lens }>(),\n defineAction(\"applyLensAborted\")<Lens>(),\n\n defineAction(\"removeLens\")(),\n defineAction(\"turnedOff\")<Lens>(),\n defineAction(\"removeLensComplete\")(),\n defineAction(\"removeLensFailed\")<Error>()\n );\n\n const states = defineStates(\n defineState(\"noLensApplied\")(),\n defineState(\"applyingLens\")<Lens>(),\n defineState(\"lensApplied\")<Lens>()\n );\n\n return new StateMachine(actions, states, states.noLensApplied(), (events) =>\n merge(\n events.pipe(\n // We allow a new lens to be applied at any time, no matter the state.\n inStates(\"noLensApplied\", \"applyingLens\", \"lensApplied\"),\n forActions(\"applyLens\"),\n map(([a]) => states.applyingLens(a.data.lens))\n ),\n events.pipe(\n inStates(\"applyingLens\"),\n forActions(\"applyLensComplete\"),\n map(([a]) => states.lensApplied(a.data))\n ),\n events.pipe(\n inStates(\"applyingLens\"),\n forActions(\"applyLensFailed\"),\n map(() => states.noLensApplied())\n ),\n events.pipe(\n inStates(\"lensApplied\"),\n forActions(\"removeLensComplete\"),\n map(() => states.noLensApplied())\n )\n )\n );\n};\n\nexport type LensErrors = LegalError | LensContentValidationError | LensError;\n\nexport type LensState = ReturnType<typeof createLensState>;\n\nexport const lensStateFactory = Injectable(\n \"lensState\",\n [\n lensCoreFactory.token,\n lensRepositoryFactory.token,\n lensAssetRepositoryFactory.token,\n lensPersistenceStoreFactory.token,\n legalStateFactory.token,\n metricsClientFactory.token,\n remoteConfigurationFactory.token,\n ] as const,\n (\n lensCore: LensCore,\n lensRepository: LensRepository,\n lensAssetRepository: LensAssetRepository,\n lensPersistence: IndexedDBPersistence<ArrayBuffer>,\n legalState: LegalState,\n metrics: MetricsClient,\n remoteConfig: RemoteConfiguration\n ): LensState => {\n const lensState = createLensState();\n let firstLensApply = true;\n\n /**\n * Apply lens\n */\n lensState.events\n .pipe(\n forActions(\"applyLens\"),\n\n // Determine the legal state (e.g. terms have been accepted). Using exhaustMap means while we are\n // ascertaining legal status (which may include prompting the end user to accept terms), we will ignore\n // any new applyLens actions.\n exhaustMap(([a]) =>\n of(legalState.actions.requestLegalPrompt()).pipe(\n dispatch(legalState),\n inStates(\"accepted\", \"rejected\"),\n take(1),\n map(([, { name }]) => {\n if (name === \"accepted\") return a;\n return lensState.actions.applyLensFailed({\n error: legalError(\n `Failed to apply lens ${a.data.lens.id}. Required legal terms were not accepted.`\n ),\n lens: a.data.lens,\n });\n })\n )\n ),\n\n // The use of switchMap is important so that if we get a new applyLens action while we're still\n // downloading lens content for a previously-requested lens, we can cancel those requests and ensure\n // that lenses are applied in the order they're requested.\n switchMap((a) => {\n if (a.name === \"applyLensFailed\") return of(a);\n\n const { lens } = a.data;\n // Convenience method making dispatching an action with Lens data less verbose.\n const dispatch = (action: Extract<Actions<LensState>, { data: Lens }>[\"name\"]) => {\n lensState.dispatch(action, lens);\n };\n\n // We record if this was the first lens apply for this page load, since there may be additional\n // sources of latency (e.g. remote configuration that needs to be loaded) on the first apply that\n // are not present for subsequent applies.\n const applyTimer = new Timer(\"lens\").mark(\"apply\", { first: `${firstLensApply}` });\n firstLensApply = false;\n\n return forkJoin({\n watermarkInput: remoteConfig.getInitializationConfig().pipe(\n mergeMap((config) => {\n if (!config.watermarkEnabled) return of(undefined);\n\n return from(lensRepository.loadLens(\"\", watermarksLensGroup)).pipe(\n mergeMap((watermark) =>\n // NOTE: we expect that watermark lens is preloaded,\n // to not affect loading time of the actual lens\n from(lensRepository.getLensContent(watermark)).pipe(\n map(({ lensBuffer, lensChecksum }): AddLensInput => {\n return {\n lensId: watermark.id,\n // Copy buffer, so LC can own the copy\n lensDataBuffer: lensBuffer.slice(0),\n lensChecksum,\n launchData: new ArrayBuffer(0),\n };\n })\n )\n )\n );\n })\n ),\n\n lensInput: of(a.data).pipe(\n mergeMap(({ lens, launchData }) => {\n // If retrieval throws an error, we still want to proceed with the lens\n // because persisted data is not a necessity.\n return from(lensPersistence.retrieve(lens.id).catch(() => undefined)).pipe(\n map((persistentStore) => ({ lens, launchData, persistentStore }))\n );\n }),\n\n map(({ lens, launchData, persistentStore }) => {\n const lensDetails = lensRepository.getLensMetadata(lens.id);\n if (!lensDetails) {\n throw new Error(\n `Cannot apply lens ${lens.id}. It has not been loaded by the Lens ` +\n `repository. Use CameraKit.lensRepository.loadLens (or loadLensGroups) ` +\n `to load lens metadata before calling CameraKitSession.applyLens.`\n );\n }\n\n const { content, isThirdParty } = lensDetails;\n if (!content) {\n throw new Error(\n `Cannot apply lens ${lens.id}. Metadata retrieved for this lens does not ` +\n `include the lens content URL.`\n );\n }\n\n return {\n lens,\n launchData: encodeLensLaunchData(\n launchData ?? {},\n persistentStore ?? new ArrayBuffer(0)\n ),\n content,\n isThirdParty,\n };\n }),\n\n // Load lens assets and the lens itself in parallel. Both count toward lens download time.\n // TODO: use RxJS fetch utilities so that these requests can be cancelled on unsubscribe.\n mergeMap(({ lens, launchData, content, isThirdParty }) => {\n const networkTimer = applyTimer.mark(\"network\");\n\n return from(\n Promise.all([\n lensRepository.getLensContent(lens).finally(() => networkTimer.measure(\"lens\")),\n content.assetManifest.length > 0\n ? lensAssetRepository\n .cacheAssets(content.assetManifest, lens)\n .finally(() => networkTimer.measure(\"assets\"))\n : Promise.resolve(),\n ])\n ).pipe(\n tap(() => {\n networkTimer.measure();\n lensState.dispatch(\"downloadComplete\", lens);\n }),\n map(([{ lensBuffer, lensChecksum }]): AddLensInput => {\n // NOTE: cached array buffer has to be copied each time in order to be reused,\n // otherwise the original cached copy would be detached by LensCore\n // One optimization can be done here: do not copy the array if getLensContent()\n // returned uncached buffer\n const lensDataBuffer = lensBuffer.slice(0);\n return {\n lensId: lens.id,\n lensDataBuffer,\n lensChecksum,\n launchData,\n apiVisibility: isThirdParty\n ? lensCore.LensApiVisibility.Public\n : lensCore.LensApiVisibility.Private,\n };\n })\n );\n })\n ),\n }).pipe(\n // If removeLens is dispatched while downloading, cancel download, don't apply the lens.\n takeUntil(lensState.events.pipe(forActions(\"removeLens\"))),\n\n // Once the lens has downloaded, we can call replaceLenses. We're not concerned about\n // waiting for prior in-progress calls to replaceLenses to complete, because LensCore\n // guarantees that calls to replaceLenses will always be processed sequentially in the order\n // they are received.\n mergeMap(\n ({ lensInput, watermarkInput }) =>\n new Observable<Actions<LensState>>((subscriber) => {\n const coreTimer = applyTimer.mark(\"core\");\n\n // replaceLenses has the property that if it fails, LensCore guarantees that no\n // lenses are active – so we can safely dispatch applyLensFailed and transition\n // to noLensApplied state.\n lensCore\n .replaceLenses({\n lenses: [\n {\n ...lensInput,\n onTurnOn: () => dispatch(\"turnedOn\"),\n onResourcesLoaded: () => dispatch(\"resourcesLoaded\"),\n\n // onFirstFrameProcessed marks the end of the lens application for\n // the end-user -- this is when they see the newly applied lens\n // begin to render. As such, this is where we stop our overall\n // latency measurement and report latency metrics.\n onFirstFrameProcessed: () => {\n coreTimer.measure(\"first-frame\");\n applyTimer.measure(\"success\");\n applyTimer.stopAndReport(metrics);\n dispatch(\"firstFrameProcessed\");\n },\n onTurnOff: () => dispatch(\"turnedOff\"),\n },\n // Watermark is always applied last\n ...(watermarkInput ? [watermarkInput] : []),\n ],\n })\n .then(() => {\n coreTimer.measure(\"success\");\n\n // We emit applyLensComplete (and applyLensFailed, below) on an\n // Observable, which is piped to `dispatch` – this allows `switchMap` to\n // properly cancel the dispatch of these actions if a new applyLens\n // arrives while we're waiting for onSuccess/onFailure.\n //\n // That's desirable behavior, because we don't want the applyingLens\n // state due to a *subsequent applyLens action* to be transitioned to\n // lensApplied by this action.\n subscriber.next(lensState.actions.applyLensComplete(lens));\n subscriber.complete();\n })\n .catch((lensCoreError) => {\n coreTimer.measure(\"failure\");\n applyTimer.measure(\"failure\");\n applyTimer.stopAndReport(metrics);\n\n const message = `Failed to apply lens ${lensInput.lensId}.`;\n const error = /validation failed/.test(lensCoreError.message)\n ? lensContentValidationError(message, lensCoreError)\n : lensError(message, lensCoreError);\n\n subscriber.next(lensState.actions.applyLensFailed({ error, lens }));\n subscriber.complete();\n });\n })\n ),\n catchError((error: LensErrors) => {\n applyTimer.measure(\"failure\");\n applyTimer.stopAndReport(metrics);\n return of(lensState.actions.applyLensFailed({ error, lens }));\n }),\n\n // If a new applyLens is received, `switchMap` will unsubscribe from this inner observable,\n // which stops the current lens application. When this happens we can record a separate metric\n // to measure aborted lens applications.\n unsubscribed(() => {\n applyTimer.measure(\"abort\");\n applyTimer.stopAndReport(metrics);\n })\n );\n }),\n dispatch(lensState)\n )\n .subscribe({\n error: logger.error,\n });\n\n /**\n * Remove lens\n */\n lensState.events\n .pipe(\n inStates(\"lensApplied\", \"noLensApplied\"),\n forActions(\"removeLens\"),\n mergeMap(\n () =>\n new Observable<Actions<LensState>>((subscriber) => {\n lensCore\n .clearAllLenses()\n .then(() => {\n subscriber.next(lensState.actions.removeLensComplete());\n subscriber.complete();\n })\n .catch((lensCoreError) => {\n const error = new Error(\"Failed to remove lenses.\", { cause: lensCoreError });\n subscriber.next(lensState.actions.removeLensFailed(error));\n subscriber.complete();\n });\n })\n ),\n dispatch(lensState)\n )\n .subscribe({\n error: logger.error,\n });\n\n lensState.events\n .pipe(\n inStates(\"applyingLens\"),\n forActions(\"removeLens\"),\n switchMap(([a]) =>\n lensState.events.pipe(\n // Wait to remove the lens until it has been applied.\n inStates(\"lensApplied\"),\n // But cancel the removal if a new applyLens supersedes the current lens. The goal here is to\n // make sure the latest apply/remove preempts any previous request to apply/remove.\n takeUntil(lensState.events.pipe(forActions(\"applyLens\"))),\n map(() => a)\n )\n ),\n dispatch(lensState)\n )\n .subscribe({\n error: logger.error,\n });\n\n // Log transitions\n lensState.events.subscribe(([a, s]) => {\n const data = extractLoggableData(a);\n logger.debug(`Action: \"${a.name}\", state: \"${s.name}\"${data ? \", data: \" + JSON.stringify(data) : \"\"}`);\n });\n\n return lensState;\n }\n);\n\nfunction extractLoggableData(action: Actions<LensState>): Record<string, string> | undefined {\n switch (action.name) {\n case \"applyLens\":\n return { lensId: action.data.lens.id };\n case \"applyLensFailed\":\n return { lensId: action.data.lens.id, error: action.data.error.message };\n case \"downloadComplete\":\n case \"turnedOn\":\n case \"resourcesLoaded\":\n case \"firstFrameProcessed\":\n case \"applyLensComplete\":\n case \"applyLensAborted\":\n case \"turnedOff\":\n return { lensId: action.data.id };\n case \"removeLens\":\n case \"removeLensComplete\":\n return undefined;\n case \"removeLensFailed\":\n return { error: action.data.message };\n default:\n assertUnreachable(action);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.navigationData = "data:application/octet-stream;base64,
|
|
1
|
+
window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA52Z227jNhBA/8XPQdNNu9s2b4kTt0GSbRAnWaBFUYypsc2NRKrkKLWx6L8XutiieN999RwekkNKHNF/fpkR7mh2PrtDof+eQ4UKFsC42MxOZjXQdnY+Q9FU+tQBvttSVc5OZq9cFLPzn/87Obp66pbT6GAlaI369Biatn53ZrZ/2tdYzBtNsrp+Q+HR2ETS1lFPoDYYshlEzNam4RFrqTlJtXdd03jMdEzFUjaKYSRXPZDnQq25FDFZT6Tm+IBqLVUFguE9gm4UVt6VCLNf1QMpznSGveOiq61A6JY/u/Is9BiMZlMhEA6J+r0mLoUxNi4I1RpYm1QPOBWfvf9giK818QoIC2teXnkIjnVwXOVLKUmTgnouxZpvGgU02RbmJOJtYt09YiUJL2r+iP80qMnrt6FMoa6l0P7MOFSWconqjQdybUMx4bOKTncMJyWRKRrxhGbe7okyMaIJFBO2e63b1VJ5XUY8pQm2jzV8UPjG8V9v2yEWa74UUDNZ+HN6CKYGfgeNYNsrIAhOYURSsmeNKqo6ADHRJadKfuYteiPW0uuymJhuoTiKImqbIqlJ2ieYNUXf+WVJJBQXWiPF9rENZb0I+76XzUozxVfo39VBOquLK2xfGdFzwot+xfiD6+ThoivfCNb23dOxIXvJmPoeCw5LUghV2h6CYx288AJlWu1i0TzLqm4Ii4WCyi1DzER7wNRjMWBdZWlYaV8PD8YEsGzf//LTu/dn4ZppXjaazP08al0q5X5oViVncykIuHClVjjPNhylzsSn0ZRrPJkJqHFkVjjbNjkQfwNRlO6so3B2T5l9fKM9lGQHSBkXSGwbGKQZS3p4iQ+cvaJyHtJBZgP5xkfUTUlhYR/P94VNKcez4nbjZ8VznuC+cngABZX3lWDGU74/ZMGB2Zb+11Tb7iB94tXkS78XGKEsi1vIGp5AFes3tSe8uyxGKCfDL5P6cczsi1s7ett/Au7sscPv6fYbKK+Vkp738iGSM4b2VYuCXqDkRfcVFnCGyJw+gsosg1V4eGU+JmdkNxVshgcxOEibSY+XbfEW9x8lLWQjisCAPVDSbH4t+7UOkXJ+wtWvd17XGEk5LlGwbQXq1euZRpMnegnUlhQfJS2bupaK0J/BIJi1I3fImuhunxI5zouVVBT0jdFkBlBprttHbUlS+fe7j8kaY/uCC4/xGE2u+OECx7/ik2jyfaw2TZV+BQWwdP0iClT2feyhdBlj+W+h/g7OX2r7qW9y33Xr655RUTjV0y3uVxJU4R/9NJrrCllS7e+BFN/ZrftfU21xRyja2Q/FbHc27YwFfgPFYVWiPg2g0x5+mMiH69Dg1el6+GLVpwF0Kv/woyFfHa8+3b8uRq9LRZSsuxu+PszT57OQiOxGfEZGbep8njEaUcylYEBxkc1EdMr+wFgAm/4jMmpDbES/PpbiEa8DRYTl8R4qNlKXSq5wV4jYF2D2GhtQUujcjYS1DpqUG7cjYa0BOcK//geMcQg6MxwAAA=="
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.searchData = "data:application/octet-stream;base64,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";
|
|
1
|
+
window.searchData = "data:application/octet-stream;base64,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";
|