@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.
Files changed (554) hide show
  1. package/LICENSE.md +6247 -0
  2. package/README.md +166 -0
  3. package/docs/html/.nojekyll +1 -0
  4. package/docs/html/assets/highlight.css +106 -0
  5. package/docs/html/assets/main.js +54 -0
  6. package/docs/html/assets/search.js +1 -0
  7. package/docs/html/assets/style.css +1225 -0
  8. package/docs/html/assets/widgets.png +0 -0
  9. package/docs/html/assets/widgets@2x.png +0 -0
  10. package/docs/html/classes/CameraKit.html +121 -0
  11. package/docs/html/classes/CameraKitSession.html +347 -0
  12. package/docs/html/classes/CameraKitSource.html +152 -0
  13. package/docs/html/classes/LensPerformanceMeasurement.html +115 -0
  14. package/docs/html/classes/LensPerformanceMetrics.html +76 -0
  15. package/docs/html/classes/LensRepository.html +171 -0
  16. package/docs/html/classes/LensSources.html +82 -0
  17. package/docs/html/classes/Transform2D.html +99 -0
  18. package/docs/html/classes/TypedCustomEvent.html +109 -0
  19. package/docs/html/classes/TypedEventTarget.html +146 -0
  20. package/docs/html/functions/Injectable.html +193 -0
  21. package/docs/html/functions/bootstrapCameraKit.html +158 -0
  22. package/docs/html/functions/createExtension.html +127 -0
  23. package/docs/html/functions/createImageSource.html +123 -0
  24. package/docs/html/functions/createMediaStreamSource.html +123 -0
  25. package/docs/html/functions/createUserMediaSource.html +127 -0
  26. package/docs/html/functions/createVideoSource.html +124 -0
  27. package/docs/html/functions/estimateLensPerformance.html +116 -0
  28. package/docs/html/functions/getRequiredBootstrapURLs.html +124 -0
  29. package/docs/html/functions/lensSourcesFactory.html +116 -0
  30. package/docs/html/functions/uriHandlersFactory.html +118 -0
  31. package/docs/html/index.html +208 -0
  32. package/docs/html/interfaces/CameraKitBootstrapConfiguration.html +132 -0
  33. package/docs/html/interfaces/CameraKitSourceSubscriber.html +121 -0
  34. package/docs/html/interfaces/ComputedFrameMetrics.html +70 -0
  35. package/docs/html/interfaces/CreateSessionOptions.html +77 -0
  36. package/docs/html/interfaces/EstimatedLensPerformance.html +78 -0
  37. package/docs/html/interfaces/Lens.html +115 -0
  38. package/docs/html/interfaces/LensSource.html +113 -0
  39. package/docs/html/interfaces/MediaStreamSourceOptions.html +65 -0
  40. package/docs/html/interfaces/UriCancelRequest.html +65 -0
  41. package/docs/html/interfaces/UriHandler.html +128 -0
  42. package/docs/html/interfaces/UriRequest.html +80 -0
  43. package/docs/html/interfaces/UriResponse.html +80 -0
  44. package/docs/html/interfaces/VideoSourceOptions.html +60 -0
  45. package/docs/html/modules.html +198 -0
  46. package/docs/html/types/AssetLoader.html +126 -0
  47. package/docs/html/types/AssetTiming.html +116 -0
  48. package/docs/html/types/BenchmarkError.html +107 -0
  49. package/docs/html/types/BootstrapError.html +110 -0
  50. package/docs/html/types/CacheKeyNotFoundError.html +107 -0
  51. package/docs/html/types/CameraKitDeviceInfo.html +114 -0
  52. package/docs/html/types/CameraKitSessionEventListener.html +109 -0
  53. package/docs/html/types/CameraKitSessionEvents.html +118 -0
  54. package/docs/html/types/CameraKitSourceError.html +107 -0
  55. package/docs/html/types/CameraKitSourceInfo.html +107 -0
  56. package/docs/html/types/CameraKitSourceOptions.html +113 -0
  57. package/docs/html/types/ConfigurationError.html +109 -0
  58. package/docs/html/types/Keyboard.html +196 -0
  59. package/docs/html/types/KeyboardEvents.html +109 -0
  60. package/docs/html/types/LegalError.html +107 -0
  61. package/docs/html/types/LensAssetError.html +109 -0
  62. package/docs/html/types/LensContentValidationError.html +107 -0
  63. package/docs/html/types/LensError.html +107 -0
  64. package/docs/html/types/LensExecutionError.html +114 -0
  65. package/docs/html/types/LensImagePickerError.html +110 -0
  66. package/docs/html/types/LensLaunchParams.html +109 -0
  67. package/docs/html/types/LensMetricsEvents.html +110 -0
  68. package/docs/html/types/LensPerformanceCluster.html +107 -0
  69. package/docs/html/types/LensView.html +119 -0
  70. package/docs/html/types/LensWait.html +111 -0
  71. package/docs/html/types/PersistentStoreError.html +109 -0
  72. package/docs/html/types/PlatformNotSupportedError.html +110 -0
  73. package/docs/html/types/PublicContainer.html +110 -0
  74. package/docs/html/types/RenderTarget.html +111 -0
  75. package/docs/html/types/Uri.html +107 -0
  76. package/docs/html/types/UriHandlers.html +109 -0
  77. package/docs/html/types/WebGLError.html +107 -0
  78. package/docs/html/variables/extensionRequestContext.html +109 -0
  79. package/docs/md/.nojekyll +1 -0
  80. package/docs/md/README.md +168 -0
  81. package/docs/md/classes/CameraKit.md +94 -0
  82. package/docs/md/classes/CameraKitSession.md +359 -0
  83. package/docs/md/classes/CameraKitSource.md +110 -0
  84. package/docs/md/classes/LensPerformanceMeasurement.md +77 -0
  85. package/docs/md/classes/LensPerformanceMetrics.md +37 -0
  86. package/docs/md/classes/LensRepository.md +145 -0
  87. package/docs/md/classes/LensSources.md +29 -0
  88. package/docs/md/classes/Transform2D.md +55 -0
  89. package/docs/md/classes/TypedCustomEvent.md +65 -0
  90. package/docs/md/classes/TypedEventTarget.md +103 -0
  91. package/docs/md/interfaces/CameraKitBootstrapConfiguration.md +106 -0
  92. package/docs/md/interfaces/CameraKitSourceSubscriber.md +55 -0
  93. package/docs/md/interfaces/ComputedFrameMetrics.md +29 -0
  94. package/docs/md/interfaces/CreateSessionOptions.md +35 -0
  95. package/docs/md/interfaces/EstimatedLensPerformance.md +38 -0
  96. package/docs/md/interfaces/Lens.md +84 -0
  97. package/docs/md/interfaces/LensSource.md +68 -0
  98. package/docs/md/interfaces/MediaStreamSourceOptions.md +22 -0
  99. package/docs/md/interfaces/UriCancelRequest.md +22 -0
  100. package/docs/md/interfaces/UriHandler.md +63 -0
  101. package/docs/md/interfaces/UriRequest.md +43 -0
  102. package/docs/md/interfaces/UriResponse.md +43 -0
  103. package/docs/md/interfaces/VideoSourceOptions.md +15 -0
  104. package/docs/md/modules.md +827 -0
  105. package/lib/CameraKit.d.ts +170 -0
  106. package/lib/CameraKit.js +145 -0
  107. package/lib/CameraKit.js.map +1 -0
  108. package/lib/__tests__/data.d.ts +9 -0
  109. package/lib/__tests__/data.js +50 -0
  110. package/lib/__tests__/data.js.map +1 -0
  111. package/lib/__tests__/deferred.d.ts +16 -0
  112. package/lib/__tests__/deferred.js +29 -0
  113. package/lib/__tests__/deferred.js.map +1 -0
  114. package/lib/__tests__/jest.matchers.d.ts +17 -0
  115. package/lib/__tests__/jest.matchers.js +67 -0
  116. package/lib/__tests__/jest.matchers.js.map +1 -0
  117. package/lib/assertPlatformSupported.d.ts +4 -0
  118. package/lib/assertPlatformSupported.js +10 -0
  119. package/lib/assertPlatformSupported.js.map +1 -0
  120. package/lib/benchmark/benchmarkGflops.d.ts +16 -0
  121. package/lib/benchmark/benchmarkGflops.js +129 -0
  122. package/lib/benchmark/benchmarkGflops.js.map +1 -0
  123. package/lib/benchmark/estimateLensPerformanceCluster.d.ts +33 -0
  124. package/lib/benchmark/estimateLensPerformanceCluster.js +48 -0
  125. package/lib/benchmark/estimateLensPerformanceCluster.js.map +1 -0
  126. package/lib/benchmark/webglUtils.d.ts +7 -0
  127. package/lib/benchmark/webglUtils.js +87 -0
  128. package/lib/benchmark/webglUtils.js.map +1 -0
  129. package/lib/bootstrapCameraKit.d.ts +96 -0
  130. package/lib/bootstrapCameraKit.js +204 -0
  131. package/lib/bootstrapCameraKit.js.map +1 -0
  132. package/lib/common/__mocks__/loadScript.d.ts +1 -0
  133. package/lib/common/__mocks__/loadScript.js +10 -0
  134. package/lib/common/__mocks__/loadScript.js.map +1 -0
  135. package/lib/common/assertions.d.ts +27 -0
  136. package/lib/common/assertions.js +39 -0
  137. package/lib/common/assertions.js.map +1 -0
  138. package/lib/common/cameraKitUserAgent.d.ts +34 -0
  139. package/lib/common/cameraKitUserAgent.js +216 -0
  140. package/lib/common/cameraKitUserAgent.js.map +1 -0
  141. package/lib/common/copyDefinedProperties.d.ts +13 -0
  142. package/lib/common/copyDefinedProperties.js +16 -0
  143. package/lib/common/copyDefinedProperties.js.map +1 -0
  144. package/lib/common/entries.d.ts +3 -0
  145. package/lib/common/entries.js +3 -0
  146. package/lib/common/entries.js.map +1 -0
  147. package/lib/common/errorHelpers.d.ts +10 -0
  148. package/lib/common/errorHelpers.js +24 -0
  149. package/lib/common/errorHelpers.js.map +1 -0
  150. package/lib/common/getFilename.d.ts +1 -0
  151. package/lib/common/getFilename.js +4 -0
  152. package/lib/common/getFilename.js.map +1 -0
  153. package/lib/common/index.d.ts +2 -0
  154. package/lib/common/index.js +3 -0
  155. package/lib/common/index.js.map +1 -0
  156. package/lib/common/loadScript.d.ts +1 -0
  157. package/lib/common/loadScript.js +11 -0
  158. package/lib/common/loadScript.js.map +1 -0
  159. package/lib/common/locale.d.ts +2 -0
  160. package/lib/common/locale.js +11 -0
  161. package/lib/common/locale.js.map +1 -0
  162. package/lib/common/localization.d.ts +43 -0
  163. package/lib/common/localization.js +43 -0
  164. package/lib/common/localization.js.map +1 -0
  165. package/lib/common/memoize.d.ts +8 -0
  166. package/lib/common/memoize.js +15 -0
  167. package/lib/common/memoize.js.map +1 -0
  168. package/lib/common/pageVisibility.d.ts +20 -0
  169. package/lib/common/pageVisibility.js +62 -0
  170. package/lib/common/pageVisibility.js.map +1 -0
  171. package/lib/common/time.d.ts +1 -0
  172. package/lib/common/time.js +2 -0
  173. package/lib/common/time.js.map +1 -0
  174. package/lib/common/typeguards.d.ts +53 -0
  175. package/lib/common/typeguards.js +92 -0
  176. package/lib/common/typeguards.js.map +1 -0
  177. package/lib/common/types.d.ts +10 -0
  178. package/lib/common/types.js +2 -0
  179. package/lib/common/types.js.map +1 -0
  180. package/lib/common/validate.d.ts +14 -0
  181. package/lib/common/validate.js +104 -0
  182. package/lib/common/validate.js.map +1 -0
  183. package/lib/configuration.d.ts +92 -0
  184. package/lib/configuration.js +36 -0
  185. package/lib/configuration.js.map +1 -0
  186. package/lib/configurationOverrides.d.ts +12 -0
  187. package/lib/configurationOverrides.js +41 -0
  188. package/lib/configurationOverrides.js.map +1 -0
  189. package/lib/dependency-injection/Container.d.ts +177 -0
  190. package/lib/dependency-injection/Container.js +160 -0
  191. package/lib/dependency-injection/Container.js.map +1 -0
  192. package/lib/dependency-injection/Injectable.d.ts +39 -0
  193. package/lib/dependency-injection/Injectable.js +18 -0
  194. package/lib/dependency-injection/Injectable.js.map +1 -0
  195. package/lib/dependency-injection/PartialContainer.d.ts +81 -0
  196. package/lib/dependency-injection/PartialContainer.js +85 -0
  197. package/lib/dependency-injection/PartialContainer.js.map +1 -0
  198. package/lib/dependency-injection/RootServices.d.ts +62 -0
  199. package/lib/dependency-injection/RootServices.js +2 -0
  200. package/lib/dependency-injection/RootServices.js.map +1 -0
  201. package/lib/dependency-injection/types.d.ts +56 -0
  202. package/lib/dependency-injection/types.js +2 -0
  203. package/lib/dependency-injection/types.js.map +1 -0
  204. package/lib/environment.json +1 -0
  205. package/lib/events/TypedCustomEvent.d.ts +10 -0
  206. package/lib/events/TypedCustomEvent.js +11 -0
  207. package/lib/events/TypedCustomEvent.js.map +1 -0
  208. package/lib/events/TypedEventTarget.d.ts +25 -0
  209. package/lib/events/TypedEventTarget.js +57 -0
  210. package/lib/events/TypedEventTarget.js.map +1 -0
  211. package/lib/events/scan.d.ts +15 -0
  212. package/lib/events/scan.js +46 -0
  213. package/lib/events/scan.js.map +1 -0
  214. package/lib/extensions/LensSources.d.ts +58 -0
  215. package/lib/extensions/LensSources.js +50 -0
  216. package/lib/extensions/LensSources.js.map +1 -0
  217. package/lib/extensions/UriHandlers.d.ts +54 -0
  218. package/lib/extensions/UriHandlers.js +93 -0
  219. package/lib/extensions/UriHandlers.js.map +1 -0
  220. package/lib/extensions/extensionRequestContext.d.ts +4 -0
  221. package/lib/extensions/extensionRequestContext.js +14 -0
  222. package/lib/extensions/extensionRequestContext.js.map +1 -0
  223. package/lib/generated-proto/blizzard/cameraKitEvents.d.ts +5603 -0
  224. package/lib/generated-proto/blizzard/cameraKitEvents.js +522 -0
  225. package/lib/generated-proto/blizzard/cameraKitEvents.js.map +1 -0
  226. package/lib/generated-proto/pb_schema/camera_kit/v3/business_events.d.ts +98 -0
  227. package/lib/generated-proto/pb_schema/camera_kit/v3/business_events.js +260 -0
  228. package/lib/generated-proto/pb_schema/camera_kit/v3/business_events.js.map +1 -0
  229. package/lib/generated-proto/pb_schema/camera_kit/v3/export.d.ts +543 -0
  230. package/lib/generated-proto/pb_schema/camera_kit/v3/export.js +429 -0
  231. package/lib/generated-proto/pb_schema/camera_kit/v3/export.js.map +1 -0
  232. package/lib/generated-proto/pb_schema/camera_kit/v3/legal_prompt.d.ts +100 -0
  233. package/lib/generated-proto/pb_schema/camera_kit/v3/legal_prompt.js +164 -0
  234. package/lib/generated-proto/pb_schema/camera_kit/v3/legal_prompt.js.map +1 -0
  235. package/lib/generated-proto/pb_schema/camera_kit/v3/lens.d.ts +395 -0
  236. package/lib/generated-proto/pb_schema/camera_kit/v3/lens.js +644 -0
  237. package/lib/generated-proto/pb_schema/camera_kit/v3/lens.js.map +1 -0
  238. package/lib/generated-proto/pb_schema/camera_kit/v3/operational_metrics.d.ts +185 -0
  239. package/lib/generated-proto/pb_schema/camera_kit/v3/operational_metrics.js +172 -0
  240. package/lib/generated-proto/pb_schema/camera_kit/v3/operational_metrics.js.map +1 -0
  241. package/lib/generated-proto/pb_schema/camera_kit/v3/ranking.d.ts +86 -0
  242. package/lib/generated-proto/pb_schema/camera_kit/v3/ranking.js +234 -0
  243. package/lib/generated-proto/pb_schema/camera_kit/v3/ranking.js.map +1 -0
  244. package/lib/generated-proto/pb_schema/camera_kit/v3/service.d.ts +854 -0
  245. package/lib/generated-proto/pb_schema/camera_kit/v3/service.js +629 -0
  246. package/lib/generated-proto/pb_schema/camera_kit/v3/service.js.map +1 -0
  247. package/lib/generated-proto/pb_schema/cdp/cof/benchmark.d.ts +86 -0
  248. package/lib/generated-proto/pb_schema/cdp/cof/benchmark.js +185 -0
  249. package/lib/generated-proto/pb_schema/cdp/cof/benchmark.js.map +1 -0
  250. package/lib/generated-proto/pb_schema/cdp/cof/benchmark_name.d.ts +95 -0
  251. package/lib/generated-proto/pb_schema/cdp/cof/benchmark_name.js +104 -0
  252. package/lib/generated-proto/pb_schema/cdp/cof/benchmark_name.js.map +1 -0
  253. package/lib/generated-proto/pb_schema/cdp/cof/circumstance_service.d.ts +10212 -0
  254. package/lib/generated-proto/pb_schema/cdp/cof/circumstance_service.js +1300 -0
  255. package/lib/generated-proto/pb_schema/cdp/cof/circumstance_service.js.map +1 -0
  256. package/lib/generated-proto/pb_schema/cdp/cof/config_request.d.ts +401 -0
  257. package/lib/generated-proto/pb_schema/cdp/cof/config_request.js +525 -0
  258. package/lib/generated-proto/pb_schema/cdp/cof/config_request.js.map +1 -0
  259. package/lib/generated-proto/pb_schema/cdp/cof/config_response.d.ts +1287 -0
  260. package/lib/generated-proto/pb_schema/cdp/cof/config_response.js +135 -0
  261. package/lib/generated-proto/pb_schema/cdp/cof/config_response.js.map +1 -0
  262. package/lib/generated-proto/pb_schema/cdp/cof/config_result.d.ts +4208 -0
  263. package/lib/generated-proto/pb_schema/cdp/cof/config_result.js +1053 -0
  264. package/lib/generated-proto/pb_schema/cdp/cof/config_result.js.map +1 -0
  265. package/lib/generated-proto/pb_schema/cdp/cof/debug_info.d.ts +102 -0
  266. package/lib/generated-proto/pb_schema/cdp/cof/debug_info.js +165 -0
  267. package/lib/generated-proto/pb_schema/cdp/cof/debug_info.js.map +1 -0
  268. package/lib/generated-proto/pb_schema/cdp/cof/namespace.d.ts +8 -0
  269. package/lib/generated-proto/pb_schema/cdp/cof/namespace.js +17 -0
  270. package/lib/generated-proto/pb_schema/cdp/cof/namespace.js.map +1 -0
  271. package/lib/generated-proto/pb_schema/common/ruid.d.ts +75 -0
  272. package/lib/generated-proto/pb_schema/common/ruid.js +96 -0
  273. package/lib/generated-proto/pb_schema/common/ruid.js.map +1 -0
  274. package/lib/generated-proto/pb_schema/common/value.d.ts +131 -0
  275. package/lib/generated-proto/pb_schema/common/value.js +204 -0
  276. package/lib/generated-proto/pb_schema/common/value.js.map +1 -0
  277. package/lib/generated-proto/pb_schema/google/api/annotations.d.ts +1 -0
  278. package/lib/generated-proto/pb_schema/google/api/annotations.js +9 -0
  279. package/lib/generated-proto/pb_schema/google/api/annotations.js.map +1 -0
  280. package/lib/generated-proto/pb_schema/google/api/http.d.ts +3636 -0
  281. package/lib/generated-proto/pb_schema/google/api/http.js +271 -0
  282. package/lib/generated-proto/pb_schema/google/api/http.js.map +1 -0
  283. package/lib/generated-proto/pb_schema/google/protobuf/any.d.ts +139 -0
  284. package/lib/generated-proto/pb_schema/google/protobuf/any.js +94 -0
  285. package/lib/generated-proto/pb_schema/google/protobuf/any.js.map +1 -0
  286. package/lib/generated-proto/pb_schema/google/protobuf/descriptor.d.ts +50968 -0
  287. package/lib/generated-proto/pb_schema/google/protobuf/descriptor.js +2962 -0
  288. package/lib/generated-proto/pb_schema/google/protobuf/descriptor.js.map +1 -0
  289. package/lib/generated-proto/pb_schema/google/protobuf/timestamp.d.ts +98 -0
  290. package/lib/generated-proto/pb_schema/google/protobuf/timestamp.js +82 -0
  291. package/lib/generated-proto/pb_schema/google/protobuf/timestamp.js.map +1 -0
  292. package/lib/generated-proto/pb_schema/google/protobuf/wrappers.d.ts +173 -0
  293. package/lib/generated-proto/pb_schema/google/protobuf/wrappers.js +332 -0
  294. package/lib/generated-proto/pb_schema/google/protobuf/wrappers.js.map +1 -0
  295. package/lib/generated-proto/pb_schema/lenses/geocircle.d.ts +42 -0
  296. package/lib/generated-proto/pb_schema/lenses/geocircle.js +52 -0
  297. package/lib/generated-proto/pb_schema/lenses/geocircle.js.map +1 -0
  298. package/lib/generated-proto/pb_schema/lenses/geopoint.d.ts +32 -0
  299. package/lib/generated-proto/pb_schema/lenses/geopoint.js +50 -0
  300. package/lib/generated-proto/pb_schema/lenses/geopoint.js.map +1 -0
  301. package/lib/generated-proto/pb_schema/lenses/launch_params.d.ts +29 -0
  302. package/lib/generated-proto/pb_schema/lenses/launch_params.js +43 -0
  303. package/lib/generated-proto/pb_schema/lenses/launch_params.js.map +1 -0
  304. package/lib/generated-proto/pb_schema/lenses/launchdata.d.ts +365 -0
  305. package/lib/generated-proto/pb_schema/lenses/launchdata.js +216 -0
  306. package/lib/generated-proto/pb_schema/lenses/launchdata.js.map +1 -0
  307. package/lib/generated-proto/pb_schema/lenses/lures.d.ts +113 -0
  308. package/lib/generated-proto/pb_schema/lenses/lures.js +64 -0
  309. package/lib/generated-proto/pb_schema/lenses/lures.js.map +1 -0
  310. package/lib/generated-proto/pb_schema/lenses/persistent_store.d.ts +29 -0
  311. package/lib/generated-proto/pb_schema/lenses/persistent_store.js +43 -0
  312. package/lib/generated-proto/pb_schema/lenses/persistent_store.js.map +1 -0
  313. package/lib/generated-proto/pb_schema/lenses/snappable.d.ts +921 -0
  314. package/lib/generated-proto/pb_schema/lenses/snappable.js +954 -0
  315. package/lib/generated-proto/pb_schema/lenses/snappable.js.map +1 -0
  316. package/lib/generated-proto/pb_schema/lenses/user_data.d.ts +247 -0
  317. package/lib/generated-proto/pb_schema/lenses/user_data.js +362 -0
  318. package/lib/generated-proto/pb_schema/lenses/user_data.js.map +1 -0
  319. package/lib/handlers/HandlerChainBuilder.d.ts +95 -0
  320. package/lib/handlers/HandlerChainBuilder.js +187 -0
  321. package/lib/handlers/HandlerChainBuilder.js.map +1 -0
  322. package/lib/handlers/arrayBufferParsingHandler.d.ts +10 -0
  323. package/lib/handlers/arrayBufferParsingHandler.js +18 -0
  324. package/lib/handlers/arrayBufferParsingHandler.js.map +1 -0
  325. package/lib/handlers/batchingHandler.d.ts +25 -0
  326. package/lib/handlers/batchingHandler.js +79 -0
  327. package/lib/handlers/batchingHandler.js.map +1 -0
  328. package/lib/handlers/cameraKitServiceFetchHandlerFactory.d.ts +12 -0
  329. package/lib/handlers/cameraKitServiceFetchHandlerFactory.js +19 -0
  330. package/lib/handlers/cameraKitServiceFetchHandlerFactory.js.map +1 -0
  331. package/lib/handlers/debugHandler.d.ts +8 -0
  332. package/lib/handlers/debugHandler.js +27 -0
  333. package/lib/handlers/debugHandler.js.map +1 -0
  334. package/lib/handlers/defaultFetchHandler.d.ts +15 -0
  335. package/lib/handlers/defaultFetchHandler.js +29 -0
  336. package/lib/handlers/defaultFetchHandler.js.map +1 -0
  337. package/lib/handlers/headersModifyingFetchHandler.d.ts +8 -0
  338. package/lib/handlers/headersModifyingFetchHandler.js +13 -0
  339. package/lib/handlers/headersModifyingFetchHandler.js.map +1 -0
  340. package/lib/handlers/index.d.ts +2 -0
  341. package/lib/handlers/index.js +3 -0
  342. package/lib/handlers/index.js.map +1 -0
  343. package/lib/handlers/mappingHandler.d.ts +15 -0
  344. package/lib/handlers/mappingHandler.js +65 -0
  345. package/lib/handlers/mappingHandler.js.map +1 -0
  346. package/lib/handlers/noCorsRetryingFetchHandler.d.ts +48 -0
  347. package/lib/handlers/noCorsRetryingFetchHandler.js +94 -0
  348. package/lib/handlers/noCorsRetryingFetchHandler.js.map +1 -0
  349. package/lib/handlers/persistingHandler.d.ts +14 -0
  350. package/lib/handlers/persistingHandler.js +71 -0
  351. package/lib/handlers/persistingHandler.js.map +1 -0
  352. package/lib/handlers/rateLimitingHandler.d.ts +20 -0
  353. package/lib/handlers/rateLimitingHandler.js +43 -0
  354. package/lib/handlers/rateLimitingHandler.js.map +1 -0
  355. package/lib/handlers/requestStateEmittingHandler.d.ts +29 -0
  356. package/lib/handlers/requestStateEmittingHandler.js +43 -0
  357. package/lib/handlers/requestStateEmittingHandler.js.map +1 -0
  358. package/lib/handlers/responseCachingHandler.d.ts +27 -0
  359. package/lib/handlers/responseCachingHandler.js +94 -0
  360. package/lib/handlers/responseCachingHandler.js.map +1 -0
  361. package/lib/handlers/retryingHandler.d.ts +37 -0
  362. package/lib/handlers/retryingHandler.js +73 -0
  363. package/lib/handlers/retryingHandler.js.map +1 -0
  364. package/lib/handlers/timeoutHandler.d.ts +18 -0
  365. package/lib/handlers/timeoutHandler.js +30 -0
  366. package/lib/handlers/timeoutHandler.js.map +1 -0
  367. package/lib/index.d.ts +33 -0
  368. package/lib/index.js +32 -0
  369. package/lib/index.js.map +1 -0
  370. package/lib/legal/legalPrompt.d.ts +17 -0
  371. package/lib/legal/legalPrompt.js +144 -0
  372. package/lib/legal/legalPrompt.js.map +1 -0
  373. package/lib/legal/legalState.d.ts +50 -0
  374. package/lib/legal/legalState.js +149 -0
  375. package/lib/legal/legalState.js.map +1 -0
  376. package/lib/lens/Lens.d.ts +71 -0
  377. package/lib/lens/Lens.js +63 -0
  378. package/lib/lens/Lens.js.map +1 -0
  379. package/lib/lens/LensLaunchParams.d.ts +19 -0
  380. package/lib/lens/LensLaunchParams.js +38 -0
  381. package/lib/lens/LensLaunchParams.js.map +1 -0
  382. package/lib/lens/LensPersistenceStore.d.ts +7 -0
  383. package/lib/lens/LensPersistenceStore.js +20 -0
  384. package/lib/lens/LensPersistenceStore.js.map +1 -0
  385. package/lib/lens/LensRepository.d.ts +134 -0
  386. package/lib/lens/LensRepository.js +239 -0
  387. package/lib/lens/LensRepository.js.map +1 -0
  388. package/lib/lens/assets/LensAssetRepository.d.ts +66 -0
  389. package/lib/lens/assets/LensAssetRepository.js +179 -0
  390. package/lib/lens/assets/LensAssetRepository.js.map +1 -0
  391. package/lib/lens/assets/LensAssetsProvider.d.ts +21 -0
  392. package/lib/lens/assets/LensAssetsProvider.js +41 -0
  393. package/lib/lens/assets/LensAssetsProvider.js.map +1 -0
  394. package/lib/lens/assets/deviceDependentAssetLoader.d.ts +11 -0
  395. package/lib/lens/assets/deviceDependentAssetLoader.js +58 -0
  396. package/lib/lens/assets/deviceDependentAssetLoader.js.map +1 -0
  397. package/lib/lens/assets/remoteMediaAssetLoaderFactory.d.ts +10 -0
  398. package/lib/lens/assets/remoteMediaAssetLoaderFactory.js +26 -0
  399. package/lib/lens/assets/remoteMediaAssetLoaderFactory.js.map +1 -0
  400. package/lib/lens/assets/staticAssetLoader.d.ts +10 -0
  401. package/lib/lens/assets/staticAssetLoader.js +24 -0
  402. package/lib/lens/assets/staticAssetLoader.js.map +1 -0
  403. package/lib/lens/index.d.ts +7 -0
  404. package/lib/lens/index.js +7 -0
  405. package/lib/lens/index.js.map +1 -0
  406. package/lib/lens/lensEnvelopeUtil.d.ts +5 -0
  407. package/lib/lens/lensEnvelopeUtil.js +19 -0
  408. package/lib/lens/lensEnvelopeUtil.js.map +1 -0
  409. package/lib/lens/lensHttpUtil.d.ts +4 -0
  410. package/lib/lens/lensHttpUtil.js +30 -0
  411. package/lib/lens/lensHttpUtil.js.map +1 -0
  412. package/lib/lens-client-interface/exif.d.ts +20 -0
  413. package/lib/lens-client-interface/exif.js +61 -0
  414. package/lib/lens-client-interface/exif.js.map +1 -0
  415. package/lib/lens-client-interface/imagePicker.d.ts +7 -0
  416. package/lib/lens-client-interface/imagePicker.js +128 -0
  417. package/lib/lens-client-interface/imagePicker.js.map +1 -0
  418. package/lib/lens-client-interface/lensClientInterface.d.ts +13 -0
  419. package/lib/lens-client-interface/lensClientInterface.js +30 -0
  420. package/lib/lens-client-interface/lensClientInterface.js.map +1 -0
  421. package/lib/lens-core-module/generated-types.d.ts +426 -0
  422. package/lib/lens-core-module/generated-types.js +2 -0
  423. package/lib/lens-core-module/generated-types.js.map +1 -0
  424. package/lib/lens-core-module/index.d.ts +2 -0
  425. package/lib/lens-core-module/index.js +3 -0
  426. package/lib/lens-core-module/index.js.map +1 -0
  427. package/lib/lens-core-module/loader/index.d.ts +1 -0
  428. package/lib/lens-core-module/loader/index.js +2 -0
  429. package/lib/lens-core-module/loader/index.js.map +1 -0
  430. package/lib/lens-core-module/loader/lensCoreFactory.d.ts +30 -0
  431. package/lib/lens-core-module/loader/lensCoreFactory.js +121 -0
  432. package/lib/lens-core-module/loader/lensCoreFactory.js.map +1 -0
  433. package/lib/lensCoreWasmVersions.json +5 -0
  434. package/lib/logger/errorLoggingDecorator.d.ts +9 -0
  435. package/lib/logger/errorLoggingDecorator.js +32 -0
  436. package/lib/logger/errorLoggingDecorator.js.map +1 -0
  437. package/lib/logger/logEntries.d.ts +15 -0
  438. package/lib/logger/logEntries.js +14 -0
  439. package/lib/logger/logEntries.js.map +1 -0
  440. package/lib/logger/logger.d.ts +35 -0
  441. package/lib/logger/logger.js +48 -0
  442. package/lib/logger/logger.js.map +1 -0
  443. package/lib/logger/registerLogEntriesSubscriber.d.ts +14 -0
  444. package/lib/logger/registerLogEntriesSubscriber.js +23 -0
  445. package/lib/logger/registerLogEntriesSubscriber.js.map +1 -0
  446. package/lib/media-sources/CameraKitSource.d.ts +88 -0
  447. package/lib/media-sources/CameraKitSource.js +140 -0
  448. package/lib/media-sources/CameraKitSource.js.map +1 -0
  449. package/lib/media-sources/FunctionSource.d.ts +30 -0
  450. package/lib/media-sources/FunctionSource.js +132 -0
  451. package/lib/media-sources/FunctionSource.js.map +1 -0
  452. package/lib/media-sources/ImageSource.d.ts +13 -0
  453. package/lib/media-sources/ImageSource.js +28 -0
  454. package/lib/media-sources/ImageSource.js.map +1 -0
  455. package/lib/media-sources/MediaStreamSource.d.ts +41 -0
  456. package/lib/media-sources/MediaStreamSource.js +146 -0
  457. package/lib/media-sources/MediaStreamSource.js.map +1 -0
  458. package/lib/media-sources/VideoSource.d.ts +21 -0
  459. package/lib/media-sources/VideoSource.js +38 -0
  460. package/lib/media-sources/VideoSource.js.map +1 -0
  461. package/lib/metrics/businessEventsReporter.d.ts +37 -0
  462. package/lib/metrics/businessEventsReporter.js +160 -0
  463. package/lib/metrics/businessEventsReporter.js.map +1 -0
  464. package/lib/metrics/metricsEventTarget.d.ts +41 -0
  465. package/lib/metrics/metricsEventTarget.js +11 -0
  466. package/lib/metrics/metricsEventTarget.js.map +1 -0
  467. package/lib/metrics/metricsHandler.d.ts +9 -0
  468. package/lib/metrics/metricsHandler.js +13 -0
  469. package/lib/metrics/metricsHandler.js.map +1 -0
  470. package/lib/metrics/operationalMetricsReporter.d.ts +52 -0
  471. package/lib/metrics/operationalMetricsReporter.js +108 -0
  472. package/lib/metrics/operationalMetricsReporter.js.map +1 -0
  473. package/lib/metrics/reporters/reportBenchmarks.d.ts +10 -0
  474. package/lib/metrics/reporters/reportBenchmarks.js +29 -0
  475. package/lib/metrics/reporters/reportBenchmarks.js.map +1 -0
  476. package/lib/metrics/reporters/reportGlobalException.d.ts +19 -0
  477. package/lib/metrics/reporters/reportGlobalException.js +68 -0
  478. package/lib/metrics/reporters/reportGlobalException.js.map +1 -0
  479. package/lib/metrics/reporters/reportHttpMetrics.d.ts +17 -0
  480. package/lib/metrics/reporters/reportHttpMetrics.js +92 -0
  481. package/lib/metrics/reporters/reportHttpMetrics.js.map +1 -0
  482. package/lib/metrics/reporters/reportLegalState.d.ts +15 -0
  483. package/lib/metrics/reporters/reportLegalState.js +34 -0
  484. package/lib/metrics/reporters/reportLegalState.js.map +1 -0
  485. package/lib/metrics/reporters/reportLensAndAssetDownload.d.ts +38 -0
  486. package/lib/metrics/reporters/reportLensAndAssetDownload.js +88 -0
  487. package/lib/metrics/reporters/reportLensAndAssetDownload.js.map +1 -0
  488. package/lib/metrics/reporters/reportLensValidationFailed.d.ts +20 -0
  489. package/lib/metrics/reporters/reportLensValidationFailed.js +24 -0
  490. package/lib/metrics/reporters/reportLensValidationFailed.js.map +1 -0
  491. package/lib/metrics/reporters/reportLensView.d.ts +36 -0
  492. package/lib/metrics/reporters/reportLensView.js +101 -0
  493. package/lib/metrics/reporters/reportLensView.js.map +1 -0
  494. package/lib/metrics/reporters/reportLensWait.d.ts +33 -0
  495. package/lib/metrics/reporters/reportLensWait.js +56 -0
  496. package/lib/metrics/reporters/reportLensWait.js.map +1 -0
  497. package/lib/metrics/reporters/reportSessionException.d.ts +17 -0
  498. package/lib/metrics/reporters/reportSessionException.js +12 -0
  499. package/lib/metrics/reporters/reportSessionException.js.map +1 -0
  500. package/lib/metrics/reporters/reportUserSession.d.ts +14 -0
  501. package/lib/metrics/reporters/reportUserSession.js +67 -0
  502. package/lib/metrics/reporters/reportUserSession.js.map +1 -0
  503. package/lib/metrics/reporters/reporters.d.ts +44 -0
  504. package/lib/metrics/reporters/reporters.js +33 -0
  505. package/lib/metrics/reporters/reporters.js.map +1 -0
  506. package/lib/namedErrors.d.ts +107 -0
  507. package/lib/namedErrors.js +56 -0
  508. package/lib/namedErrors.js.map +1 -0
  509. package/lib/persistence/ExpiringPersistence.d.ts +20 -0
  510. package/lib/persistence/ExpiringPersistence.js +58 -0
  511. package/lib/persistence/ExpiringPersistence.js.map +1 -0
  512. package/lib/persistence/IndexedDBPersistence.d.ts +47 -0
  513. package/lib/persistence/IndexedDBPersistence.js +180 -0
  514. package/lib/persistence/IndexedDBPersistence.js.map +1 -0
  515. package/lib/persistence/Persistence.d.ts +25 -0
  516. package/lib/persistence/Persistence.js +10 -0
  517. package/lib/persistence/Persistence.js.map +1 -0
  518. package/lib/remote-configuration/cofHandler.d.ts +21 -0
  519. package/lib/remote-configuration/cofHandler.js +75 -0
  520. package/lib/remote-configuration/cofHandler.js.map +1 -0
  521. package/lib/remote-configuration/remoteConfiguration.d.ts +13 -0
  522. package/lib/remote-configuration/remoteConfiguration.js +43 -0
  523. package/lib/remote-configuration/remoteConfiguration.js.map +1 -0
  524. package/lib/session/CameraKitSession.d.ts +252 -0
  525. package/lib/session/CameraKitSession.js +439 -0
  526. package/lib/session/CameraKitSession.js.map +1 -0
  527. package/lib/session/CameraKitSessionEvents.d.ts +33 -0
  528. package/lib/session/CameraKitSessionEvents.js +21 -0
  529. package/lib/session/CameraKitSessionEvents.js.map +1 -0
  530. package/lib/session/LensKeyboard.d.ts +89 -0
  531. package/lib/session/LensKeyboard.js +95 -0
  532. package/lib/session/LensKeyboard.js.map +1 -0
  533. package/lib/session/LensPerformanceMeasurement.d.ts +55 -0
  534. package/lib/session/LensPerformanceMeasurement.js +91 -0
  535. package/lib/session/LensPerformanceMeasurement.js.map +1 -0
  536. package/lib/session/LensPerformanceMetrics.d.ts +31 -0
  537. package/lib/session/LensPerformanceMetrics.js +58 -0
  538. package/lib/session/LensPerformanceMetrics.js.map +1 -0
  539. package/lib/session/index.d.ts +1 -0
  540. package/lib/session/index.js +2 -0
  541. package/lib/session/index.js.map +1 -0
  542. package/lib/session/lensState.d.ts +29 -0
  543. package/lib/session/lensState.js +160 -0
  544. package/lib/session/lensState.js.map +1 -0
  545. package/lib/session/sessionState.d.ts +10 -0
  546. package/lib/session/sessionState.js +12 -0
  547. package/lib/session/sessionState.js.map +1 -0
  548. package/lib/transforms/Transform2D.d.ts +17 -0
  549. package/lib/transforms/Transform2D.js +18 -0
  550. package/lib/transforms/Transform2D.js.map +1 -0
  551. package/lib/transforms/index.d.ts +1 -0
  552. package/lib/transforms/index.js +2 -0
  553. package/lib/transforms/index.js.map +1 -0
  554. package/package.json +62 -0
@@ -0,0 +1,160 @@
1
+ import { defineAction, defineActions, defineState, defineStates, dispatch, forActions, inStates, StateMachine, } from "@snap/state-management";
2
+ import { catchError, exhaustMap, from, map, merge, mergeMap, Observable, of, switchMap, take, takeUntil, tap, } from "rxjs";
3
+ import { ensureError } from "../common/errorHelpers";
4
+ import { Injectable } from "../dependency-injection/Injectable";
5
+ import { lensRepositoryFactory } from "../lens/LensRepository";
6
+ import { lensCoreFactory } from "../lens-core-module";
7
+ import { lensPersistenceStoreFactory } from "../lens/LensPersistenceStore";
8
+ import { createLaunchData } from "../lens/LensLaunchParams";
9
+ import { legalStateFactory } from "../legal/legalState";
10
+ import { lensAssetRepositoryFactory } from "../lens/assets/LensAssetRepository";
11
+ import { legalError, lensContentValidationError, lensError, } from "../namedErrors";
12
+ import { getLogger } from "../logger/logger";
13
+ const logger = getLogger("LensState");
14
+ const createLensState = () => {
15
+ const actions = defineActions(defineAction("applyLens")(), defineAction("downloadComplete")(), defineAction("turnedOn")(), defineAction("resourcesLoaded")(), defineAction("firstFrameProcessed")(), defineAction("applyLensComplete")(), defineAction("applyLensFailed")(), defineAction("removeLens")(), defineAction("turnedOff")(), defineAction("removeLensComplete")(), defineAction("removeLensFailed")());
16
+ const states = defineStates(defineState("noLensApplied")(), defineState("applyingLens")(), defineState("lensApplied")());
17
+ return new StateMachine(actions, states, states.noLensApplied(), (events) => merge(events.pipe(
18
+ // We allow a new lens to be applied at any time, no matter the state.
19
+ inStates("noLensApplied", "applyingLens", "lensApplied"), forActions("applyLens"), map(([a]) => states.applyingLens(a.data.lens))), events.pipe(inStates("applyingLens"), forActions("applyLensComplete"), map(([a]) => states.lensApplied(a.data))), events.pipe(inStates("applyingLens"), forActions("applyLensFailed"), map(() => states.noLensApplied())), events.pipe(inStates("lensApplied"), forActions("removeLensComplete"), map(() => states.noLensApplied()))));
20
+ };
21
+ export const lensStateFactory = Injectable("lensState", [
22
+ lensCoreFactory.token,
23
+ lensRepositoryFactory.token,
24
+ lensAssetRepositoryFactory.token,
25
+ lensPersistenceStoreFactory.token,
26
+ legalStateFactory.token,
27
+ ], (lensCore, lensRepository, lensAssetRepository, lensPersistence, legalState) => {
28
+ const lensState = createLensState();
29
+ /**
30
+ * Apply lens
31
+ */
32
+ lensState.events
33
+ .pipe(forActions("applyLens"),
34
+ // Determine the legal state (e.g. terms have been accepted). Using exhaustMap means while we are
35
+ // ascertaining legal status (which may include prompting the end user to accept terms), we will ignore
36
+ // any new applyLens actions.
37
+ exhaustMap(([a]) => of(legalState.actions.requestLegalPrompt()).pipe(dispatch(legalState), inStates("accepted", "rejected"), take(1), map(([, { name }]) => {
38
+ if (name === "accepted")
39
+ return a;
40
+ return lensState.actions.applyLensFailed({
41
+ error: legalError(`Failed to apply lens ${a.data.lens.id}. Required legal terms were not ` +
42
+ `accepted.`),
43
+ lens: a.data.lens,
44
+ });
45
+ }))),
46
+ // The use of switchMap is important so that if we get a new applyLens action while we're still
47
+ // downloading lens content for a previously-requested lens, we can cancel those requests and ensure
48
+ // that lenses are applied in the order they're requested.
49
+ switchMap((a) => {
50
+ if (a.name === "applyLensFailed")
51
+ return of(a);
52
+ const { lens } = a.data;
53
+ // Convenience method making dispatching an action with Lens data less verbose.
54
+ const dispatch = (action) => lensState.dispatch(action, lens);
55
+ return of(a.data).pipe(mergeMap(({ lens, launchParams }) =>
56
+ // If retrieval throws an error, we still want to proceed with the lens
57
+ // because persisted data is not a necessity.
58
+ from(lensPersistence.retrieve(lens.id).catch(() => undefined)).pipe(map((persistentStore) => ({ lens, launchParams, persistentStore })))), map(({ lens, launchParams, persistentStore }) => {
59
+ const launchData = createLaunchData({
60
+ launchParams,
61
+ persistentStore,
62
+ });
63
+ const lensDetails = lensRepository.getLensMetadata(lens.id);
64
+ if (!lensDetails) {
65
+ throw new Error(`Cannot apply lens ${lens.id}. It has not been loaded by the Lens repository. ` +
66
+ `Use CameraKit.lenses.repository.loadLens (or loadLensGroups) to load lens ` +
67
+ `metadata before calling CameraKitSession.applyLens.`);
68
+ }
69
+ const { content } = lensDetails;
70
+ if (!content) {
71
+ throw new Error(`Cannot apply lens ${lens.id}. Metadata retrieved for this lens does not include ` +
72
+ `the lens content URL.`);
73
+ }
74
+ return { lens, launchData, content };
75
+ }),
76
+ // Load lens assets and the lens itself in parallel. Both count toward lens download time.
77
+ // TODO: use RxJS fetch utilities so that these requests can be cancelled on unsubscribe.
78
+ mergeMap(({ lens, launchData, content }) => from(Promise.all([
79
+ lensRepository.getLensContent(lens),
80
+ lensAssetRepository.cacheAssets(content.assetManifest, lens),
81
+ ])).pipe(tap(() => lensState.dispatch("downloadComplete", lens)), map(([{ lensBuffer, lensChecksum }]) => {
82
+ // NOTE: cached array buffer has to be copied each time in order to be reused,
83
+ // otherwise the original cached copy would be detached by LensCore
84
+ // One optimization can be done here: do not copy the array if getLensContent()
85
+ // returned uncached buffer
86
+ const lensDataBuffer = lensBuffer.slice(0);
87
+ // LensCore chokes trying if launchData is set to undefined; we must omit it.
88
+ return launchData === undefined
89
+ ? { lensId: lens.id, lensDataBuffer, lensChecksum }
90
+ : { lensId: lens.id, lensDataBuffer, lensChecksum, launchData };
91
+ }))),
92
+ // If removeLens is dispatched while downloading, cancel download, don't apply the lens.
93
+ takeUntil(lensState.events.pipe(forActions("removeLens"))),
94
+ // Once the lens has downloaded, we can call replaceLenses. We're not concerned about waiting
95
+ // for prior in-progress calls to replaceLenses to complete, because LensCore guarantees that
96
+ // calls to replaceLenses will always be processed sequentially in the order they are received.
97
+ mergeMap((lensInput) => new Observable((subscriber) => {
98
+ // replaceLenses has the property that if it fails, LensCore guarantees that no
99
+ // lenses are active – so we can safely dispatch applyLensFailed and transition to
100
+ // noLensApplied state.
101
+ lensCore.replaceLenses({
102
+ lenses: [
103
+ Object.assign(Object.assign({}, lensInput), { onTurnOn: () => dispatch("turnedOn"), onResourcesLoaded: () => dispatch("resourcesLoaded"), onFirstFrameProcessed: () => dispatch("firstFrameProcessed"), onTurnOff: () => dispatch("turnedOff") }),
104
+ ],
105
+ onSuccess: () => {
106
+ // We emit applyLensComplete (and applyLensFailed, below) on an Observable,
107
+ // which is piped to `dispatch` – this allows `switchMap` to properly cancel
108
+ // the dispatch of these actions if a new applyLens arrives while we're
109
+ // waiting for onSuccess/onFailure.
110
+ //
111
+ // That's desirable behavior, because we don't want the applyingLens state
112
+ // due to a *subsequent applyLens action* to be transitioned to lensApplied
113
+ // by this action.
114
+ subscriber.next(lensState.actions.applyLensComplete(lens));
115
+ subscriber.complete();
116
+ },
117
+ onFailure: (reason) => {
118
+ const lensCoreError = ensureError(reason);
119
+ const message = `Failed to apply lens ${lensInput.lensId}.`;
120
+ const error = /validation failed/.test(lensCoreError.message)
121
+ ? lensContentValidationError(message, lensCoreError)
122
+ : lensError(message, lensCoreError);
123
+ subscriber.next(lensState.actions.applyLensFailed({ error, lens }));
124
+ subscriber.complete();
125
+ },
126
+ });
127
+ })), catchError((error) => of(lensState.actions.applyLensFailed({ error, lens }))));
128
+ }), dispatch(lensState))
129
+ .subscribe();
130
+ /**
131
+ * Remove lens
132
+ */
133
+ lensState.events
134
+ .pipe(inStates("lensApplied", "noLensApplied"), forActions("removeLens"), mergeMap(() => new Observable((subscriber) => {
135
+ lensCore.clearAllLenses({
136
+ onSuccess: () => {
137
+ subscriber.next(lensState.actions.removeLensComplete());
138
+ subscriber.complete();
139
+ },
140
+ onFailure: (lensCoreError) => {
141
+ const error = new Error("Failed to remove lenses.", { cause: lensCoreError });
142
+ subscriber.next(lensState.actions.removeLensFailed(error));
143
+ subscriber.complete();
144
+ },
145
+ });
146
+ })), dispatch(lensState))
147
+ .subscribe();
148
+ lensState.events
149
+ .pipe(inStates("applyingLens"), forActions("removeLens"), switchMap(([a]) => lensState.events.pipe(
150
+ // Wait to remove the lens until it has been applied.
151
+ inStates("lensApplied"),
152
+ // But cancel the removal if a new applyLens supercedes the current lens. The goal here is to
153
+ // make sure the latest apply/remove pre-empts any previous request to apply/remove.
154
+ takeUntil(lensState.events.pipe(forActions("applyLens"))), map(() => a))), dispatch(lensState))
155
+ .subscribe();
156
+ // Log transitions
157
+ lensState.events.subscribe(([a, s]) => logger.debug(`Action: "${a.name}", state: "${s.name}"`));
158
+ return lensState;
159
+ });
160
+ //# sourceMappingURL=lensState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lensState.js","sourceRoot":"","sources":["../../src/session/lensState.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Actions,\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 from,\n map,\n merge,\n mergeMap,\n Observable,\n of,\n switchMap,\n take,\n takeUntil,\n tap,\n} from \"rxjs\";\nimport { ensureError } from \"../common/errorHelpers\";\nimport { Injectable } from \"../dependency-injection/Injectable\";\nimport { Lens } from \"../lens/Lens\";\nimport { LensRepository, lensRepositoryFactory } from \"../lens/LensRepository\";\nimport { lensCoreFactory, LensCoreModule } from \"../lens-core-module\";\nimport { AddLensInput } from \"../lens-core-module/generated-types\";\nimport { IndexedDBPersistence } from \"../persistence/IndexedDBPersistence\";\nimport { lensPersistenceStoreFactory } from \"../lens/LensPersistenceStore\";\nimport { createLaunchData, LensLaunchParams } from \"../lens/LensLaunchParams\";\nimport { LegalState, legalStateFactory } from \"../legal/legalState\";\nimport { LensAssetRepository, lensAssetRepositoryFactory } from \"../lens/assets/LensAssetRepository\";\nimport {\n legalError,\n LegalError,\n lensContentValidationError,\n LensContentValidationError,\n lensError,\n LensError,\n} from \"../namedErrors\";\nimport { getLogger } from \"../logger/logger\";\n\nconst logger = getLogger(\"LensState\");\n\nconst createLensState = () => {\n const actions = defineActions(\n defineAction(\"applyLens\")<{ lens: Lens; launchParams?: LensLaunchParams }>(),\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\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 ] as const,\n (\n lensCore: LensCoreModule,\n lensRepository: LensRepository,\n lensAssetRepository: LensAssetRepository,\n lensPersistence: IndexedDBPersistence<ArrayBuffer>,\n legalState: LegalState\n ): LensState => {\n const lensState = createLensState();\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 ` +\n `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\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 return of(a.data).pipe(\n mergeMap(({ lens, launchParams }) =>\n // If retrieval throws an error, we still want to proceed with the lens\n // because persisted data is not a necessity.\n from(lensPersistence.retrieve(lens.id).catch(() => undefined)).pipe(\n map((persistentStore) => ({ lens, launchParams, persistentStore }))\n )\n ),\n\n map(({ lens, launchParams, persistentStore }) => {\n const launchData = createLaunchData({\n launchParams,\n persistentStore,\n });\n\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 repository. ` +\n `Use CameraKit.lenses.repository.loadLens (or loadLensGroups) to load lens ` +\n `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 include ` +\n `the lens content URL.`\n );\n }\n\n return { lens, launchData, content };\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 from(\n Promise.all([\n lensRepository.getLensContent(lens),\n lensAssetRepository.cacheAssets(content.assetManifest, lens),\n ])\n ).pipe(\n tap(() => lensState.dispatch(\"downloadComplete\", lens)),\n map(\n ([{ 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 // LensCore chokes trying if launchData is set to undefined; we must omit it.\n return launchData === undefined\n ? { lensId: lens.id, lensDataBuffer, lensChecksum }\n : { lensId: lens.id, lensDataBuffer, lensChecksum, launchData };\n }\n )\n )\n ),\n\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 waiting\n // for prior in-progress calls to replaceLenses to complete, because LensCore guarantees that\n // calls to replaceLenses will always be processed sequentially in the order they are received.\n mergeMap(\n (lensInput) =>\n new Observable<Actions<LensState>>((subscriber) => {\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 to\n // noLensApplied state.\n lensCore.replaceLenses({\n lenses: [\n {\n ...lensInput,\n onTurnOn: () => dispatch(\"turnedOn\"),\n onResourcesLoaded: () => dispatch(\"resourcesLoaded\"),\n onFirstFrameProcessed: () => dispatch(\"firstFrameProcessed\"),\n onTurnOff: () => dispatch(\"turnedOff\"),\n },\n ],\n onSuccess: () => {\n // We emit applyLensComplete (and applyLensFailed, below) on an Observable,\n // which is piped to `dispatch` – this allows `switchMap` to properly cancel\n // the dispatch of these actions if a new applyLens arrives while we're\n // waiting for onSuccess/onFailure.\n //\n // That's desirable behavior, because we don't want the applyingLens state\n // due to a *subsequent applyLens action* to be transitioned to lensApplied\n // by this action.\n subscriber.next(lensState.actions.applyLensComplete(lens));\n subscriber.complete();\n },\n onFailure: (reason) => {\n const lensCoreError = ensureError(reason);\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 ),\n\n catchError((error: LensErrors) => of(lensState.actions.applyLensFailed({ error, lens })))\n );\n }),\n dispatch(lensState)\n )\n .subscribe();\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.clearAllLenses({\n onSuccess: () => {\n subscriber.next(lensState.actions.removeLensComplete());\n subscriber.complete();\n },\n onFailure: (lensCoreError: unknown) => {\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 ),\n dispatch(lensState)\n )\n .subscribe();\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 supercedes the current lens. The goal here is to\n // make sure the latest apply/remove pre-empts 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\n // Log transitions\n lensState.events.subscribe(([a, s]) => logger.debug(`Action: \"${a.name}\", state: \"${s.name}\"`));\n\n return lensState;\n }\n);\n"]}
@@ -0,0 +1,10 @@
1
+ import { StateMachine } from "@snap/state-management";
2
+ import { CameraKitSession } from "./CameraKitSession";
3
+ declare const createSessionState: () => StateMachine<import("@snap/state-management").Action<"suspend", CameraKitSession> | import("@snap/state-management").Action<"resume", CameraKitSession>, import("@snap/state-management").State<"inactive", undefined> | import("@snap/state-management").State<"active", CameraKitSession>>;
4
+ export declare type SessionState = ReturnType<typeof createSessionState>;
5
+ export declare const sessionStateFactory: {
6
+ (): StateMachine<import("@snap/state-management").Action<"suspend", CameraKitSession> | import("@snap/state-management").Action<"resume", CameraKitSession>, import("@snap/state-management").State<"inactive", undefined> | import("@snap/state-management").State<"active", CameraKitSession>>;
7
+ token: "sessionState";
8
+ dependencies: [];
9
+ };
10
+ export {};
@@ -0,0 +1,12 @@
1
+ import { defineAction, defineActions, defineState, defineStates, forActions, StateMachine, } from "@snap/state-management";
2
+ import { map, merge } from "rxjs";
3
+ import { Injectable } from "../dependency-injection/Injectable";
4
+ const createSessionState = () => {
5
+ const actions = defineActions(defineAction("suspend")(), defineAction("resume")());
6
+ const states = defineStates(defineState("inactive")(), defineState("active")());
7
+ return new StateMachine(actions, states, defineState("inactive")()(), (events) => {
8
+ return merge(events.pipe(forActions("resume"), map(([a]) => states.active(a.data))), events.pipe(forActions("suspend"), map(() => states.inactive())));
9
+ });
10
+ };
11
+ export const sessionStateFactory = Injectable("sessionState", () => createSessionState());
12
+ //# sourceMappingURL=sessionState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionState.js","sourceRoot":"","sources":["../../src/session/sessionState.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EACZ,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,EACV,YAAY,GACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAGhE,MAAM,kBAAkB,GAAG,GAAG,EAAE;IAC5B,MAAM,OAAO,GAAG,aAAa,CACzB,YAAY,CAAC,SAAS,CAAC,EAAoB,EAC3C,YAAY,CAAC,QAAQ,CAAC,EAAoB,CAC7C,CAAC;IAEF,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAoB,CAAC,CAAC;IAElG,OAAO,IAAI,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE;QAC7E,OAAO,KAAK,CACR,MAAM,CAAC,IAAI,CACP,UAAU,CAAC,QAAQ,CAAC,EACpB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CACtC,EACD,MAAM,CAAC,IAAI,CACP,UAAU,CAAC,SAAS,CAAC,EACrB,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAC/B,CACJ,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAC,cAAc,EAAE,GAAiB,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC","sourcesContent":["import {\n defineAction,\n defineActions,\n defineState,\n defineStates,\n forActions,\n StateMachine,\n} from \"@snap/state-management\";\nimport { map, merge } from \"rxjs\";\nimport { Injectable } from \"../dependency-injection/Injectable\";\nimport { CameraKitSession } from \"./CameraKitSession\";\n\nconst createSessionState = () => {\n const actions = defineActions(\n defineAction(\"suspend\")<CameraKitSession>(),\n defineAction(\"resume\")<CameraKitSession>()\n );\n\n const states = defineStates(defineState(\"inactive\")(), defineState(\"active\")<CameraKitSession>());\n\n return new StateMachine(actions, states, defineState(\"inactive\")()(), (events) => {\n return merge(\n events.pipe(\n forActions(\"resume\"),\n map(([a]) => states.active(a.data))\n ),\n events.pipe(\n forActions(\"suspend\"),\n map(() => states.inactive())\n )\n );\n });\n};\n\nexport type SessionState = ReturnType<typeof createSessionState>;\n\nexport const sessionStateFactory = Injectable(\"sessionState\", (): SessionState => createSessionState());\n"]}
@@ -0,0 +1,17 @@
1
+ import { TupleOf } from "../common/types";
2
+ /**
3
+ * Use this class to supply the CameraKitSession::setSourceTransform with the proper data
4
+ * needed to apply transformations
5
+ *
6
+ * @category Rendering
7
+ */
8
+ export declare class Transform2D {
9
+ readonly matrix: TupleOf<number, 9>;
10
+ static readonly MirrorX: Transform2D;
11
+ static readonly MirrorY: Transform2D;
12
+ static readonly Identity: Transform2D;
13
+ /**
14
+ * @param matrix A 3x3 matrix in column-major order, representing a 2D transform to be applied to the source media
15
+ */
16
+ constructor(matrix: TupleOf<number, 9>);
17
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Use this class to supply the CameraKitSession::setSourceTransform with the proper data
3
+ * needed to apply transformations
4
+ *
5
+ * @category Rendering
6
+ */
7
+ export class Transform2D {
8
+ /**
9
+ * @param matrix A 3x3 matrix in column-major order, representing a 2D transform to be applied to the source media
10
+ */
11
+ constructor(matrix) {
12
+ this.matrix = matrix;
13
+ }
14
+ }
15
+ Transform2D.MirrorX = new Transform2D([-1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0]);
16
+ Transform2D.MirrorY = new Transform2D([1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0]);
17
+ Transform2D.Identity = new Transform2D([1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]);
18
+ //# sourceMappingURL=Transform2D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transform2D.js","sourceRoot":"","sources":["../../src/transforms/Transform2D.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IAKpB;;OAEG;IACH,YAAqB,MAA0B;QAA1B,WAAM,GAAN,MAAM,CAAoB;IAAG,CAAC;;AAPnC,mBAAO,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1E,mBAAO,GAAG,IAAI,WAAW,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1E,oBAAQ,GAAG,IAAI,WAAW,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC","sourcesContent":["import { TupleOf } from \"../common/types\";\n\n/**\n * Use this class to supply the CameraKitSession::setSourceTransform with the proper data\n * needed to apply transformations\n *\n * @category Rendering\n */\nexport class Transform2D {\n static readonly MirrorX = new Transform2D([-1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0]);\n static readonly MirrorY = new Transform2D([1.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0]);\n static readonly Identity = new Transform2D([1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]);\n\n /**\n * @param matrix A 3x3 matrix in column-major order, representing a 2D transform to be applied to the source media\n */\n constructor(readonly matrix: TupleOf<number, 9>) {}\n}\n"]}
@@ -0,0 +1 @@
1
+ export * from "./Transform2D";
@@ -0,0 +1,2 @@
1
+ export * from "./Transform2D";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transforms/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC","sourcesContent":["export * from \"./Transform2D\";\n"]}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@snap/camera-kit",
3
+ "version": "0.7.0",
4
+ "license": "SEE LICENSE IN LICENSE.md",
5
+ "description": "Camera Kit Web",
6
+ "homepage": "https://ar.snap.com/camera-kit",
7
+ "author": "Snap Inc.",
8
+ "main": "lib/index.js",
9
+ "types": "lib/index.d.ts",
10
+ "files": [
11
+ "docs",
12
+ "lib"
13
+ ],
14
+ "keywords": [
15
+ "sdk",
16
+ "camera-kit",
17
+ "camera kit",
18
+ "Snap",
19
+ "Snapchat",
20
+ "Augmented Reality",
21
+ "Lens"
22
+ ],
23
+ "devDependencies": {
24
+ "@babel/preset-env": "7.15.8",
25
+ "@types/dom-webcodecs": "0.1.4",
26
+ "@types/emscripten": "1.39.4",
27
+ "@types/jest": "27.0.1",
28
+ "@types/uuid": "8.3.4",
29
+ "@typescript-eslint/eslint-plugin": "5.36.2",
30
+ "@typescript-eslint/parser": "5.36.2",
31
+ "eslint": "7.28.0",
32
+ "eslint-plugin-import": "2.23.4",
33
+ "eslint-plugin-prefer-arrow": "1.2.3",
34
+ "fake-indexeddb": "3.1.7",
35
+ "jest": "29.0.2",
36
+ "jest-environment-jsdom": "^29.0.2",
37
+ "prettier": "2.2.1",
38
+ "ts-jest": "29.0.0",
39
+ "ts-node": "10.9.1",
40
+ "ts-proto": "1.110.0",
41
+ "typedoc": "0.23.14",
42
+ "typedoc-plugin-markdown": "3.14.0",
43
+ "typescript": "4.8.3",
44
+ "webpack": "5.72.0",
45
+ "webpack-bundle-analyzer": "4.5.0",
46
+ "webpack-cli": "4.9.2",
47
+ "whatwg-fetch": "3.6.2"
48
+ },
49
+ "dependencies": {
50
+ "@improbable-eng/grpc-web": "0.15.0",
51
+ "@snap/state-management": "^0.1.1",
52
+ "browser-fs-access": "0.31.1",
53
+ "browser-headers": "0.4.1",
54
+ "long": "4.0.0",
55
+ "protobufjs": "6.11.2",
56
+ "reflect-metadata": "0.1.13",
57
+ "rxjs": "7.5.7",
58
+ "tslib": "2.4.1",
59
+ "uuid": "8.3.2",
60
+ "wasm-feature-detect": "1.2.11"
61
+ }
62
+ }