@snap/camera-kit 0.14.1 → 0.15.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 (263) hide show
  1. package/LICENSE.md +5921 -1485
  2. package/README.md +1 -1
  3. package/docs/html/assets/search.js +1 -1
  4. package/docs/html/classes/CameraKit.html +7 -7
  5. package/docs/html/classes/CameraKitSession.html +17 -25
  6. package/docs/html/classes/CameraKitSource.html +15 -10
  7. package/docs/html/classes/LensPerformanceMeasurement.html +7 -7
  8. package/docs/html/classes/LensPerformanceMetrics.html +7 -7
  9. package/docs/html/classes/LensRepository.html +7 -7
  10. package/docs/html/classes/Transform2D.html +7 -7
  11. package/docs/html/classes/TypedCustomEvent.html +7 -7
  12. package/docs/html/classes/TypedEventTarget.html +7 -7
  13. package/docs/html/functions/ConcatInjectable.html +202 -0
  14. package/docs/html/functions/Injectable.html +15 -16
  15. package/docs/html/functions/bootstrapCameraKit.html +7 -7
  16. package/docs/html/functions/createExtension.html +7 -7
  17. package/docs/html/functions/createImageSource.html +7 -7
  18. package/docs/html/functions/createMediaStreamSource.html +7 -7
  19. package/docs/html/functions/createUserMediaSource.html +7 -7
  20. package/docs/html/functions/createVideoSource.html +7 -7
  21. package/docs/html/functions/estimateLensPerformance.html +7 -7
  22. package/docs/html/functions/getRequiredBootstrapURLs.html +7 -7
  23. package/docs/html/functions/lensSourcesFactory.html +17 -9
  24. package/docs/html/functions/remoteApiServicesFactory.html +7 -7
  25. package/docs/html/index.html +9 -9
  26. package/docs/html/interfaces/CameraKitBootstrapConfiguration.html +7 -7
  27. package/docs/html/interfaces/CameraKitSourceSubscriber.html +7 -7
  28. package/docs/html/interfaces/ComputedFrameMetrics.html +7 -7
  29. package/docs/html/interfaces/CreateSessionOptions.html +7 -7
  30. package/docs/html/interfaces/EstimatedLensPerformance.html +7 -7
  31. package/docs/html/interfaces/Lens.html +7 -7
  32. package/docs/html/interfaces/LensLaunchData.html +183 -0
  33. package/docs/html/interfaces/LensSource.html +28 -46
  34. package/docs/html/interfaces/MediaStreamSourceOptions.html +7 -7
  35. package/docs/html/interfaces/Preview.html +7 -7
  36. package/docs/html/interfaces/RemoteApiRequest.html +7 -7
  37. package/docs/html/interfaces/RemoteApiResponse.html +7 -7
  38. package/docs/html/interfaces/RemoteApiService.html +7 -7
  39. package/docs/html/interfaces/Snapcode.html +7 -7
  40. package/docs/html/interfaces/UriCancelRequest.html +7 -7
  41. package/docs/html/interfaces/UriRequest.html +7 -7
  42. package/docs/html/interfaces/UriResponse.html +7 -7
  43. package/docs/html/interfaces/VideoSourceOptions.html +7 -7
  44. package/docs/html/modules.html +12 -12
  45. package/docs/html/types/AssetLoader.html +7 -7
  46. package/docs/html/types/AssetTiming.html +7 -7
  47. package/docs/html/types/BenchmarkError.html +7 -7
  48. package/docs/html/types/BootstrapError.html +7 -7
  49. package/docs/html/types/CacheKeyNotFoundError.html +7 -7
  50. package/docs/html/types/CameraKitDeviceInfo.html +7 -7
  51. package/docs/html/types/CameraKitDeviceOptions.html +7 -7
  52. package/docs/html/types/CameraKitSessionEventListener.html +7 -7
  53. package/docs/html/types/CameraKitSessionEvents.html +7 -7
  54. package/docs/html/types/CameraKitSourceError.html +7 -7
  55. package/docs/html/types/CameraKitSourceInfo.html +7 -7
  56. package/docs/html/types/CameraKitSourceOptions.html +7 -7
  57. package/docs/html/types/ConfigurationError.html +7 -7
  58. package/docs/html/types/Keyboard.html +7 -7
  59. package/docs/html/types/KeyboardEvents.html +7 -7
  60. package/docs/html/types/LegalError.html +7 -7
  61. package/docs/html/types/LensAbortError.html +7 -7
  62. package/docs/html/types/LensAssetError.html +7 -7
  63. package/docs/html/types/LensContentValidationError.html +7 -7
  64. package/docs/html/types/LensError.html +7 -7
  65. package/docs/html/types/LensExecutionError.html +7 -7
  66. package/docs/html/types/LensImagePickerError.html +7 -7
  67. package/docs/html/types/LensMetricsEvents.html +7 -7
  68. package/docs/html/types/LensPerformanceCluster.html +7 -7
  69. package/docs/html/types/LensView.html +7 -7
  70. package/docs/html/types/LensWait.html +7 -7
  71. package/docs/html/types/PersistentStoreError.html +7 -7
  72. package/docs/html/types/PlatformNotSupportedError.html +7 -7
  73. package/docs/html/types/PublicContainer.html +7 -7
  74. package/docs/html/types/RemoteApiRequestHandler.html +7 -7
  75. package/docs/html/types/RemoteApiServices.html +7 -7
  76. package/docs/html/types/RemoteApiStatus.html +7 -7
  77. package/docs/html/types/RenderTarget.html +7 -7
  78. package/docs/html/types/Uri.html +7 -7
  79. package/docs/html/types/WebGLError.html +7 -7
  80. package/docs/html/variables/extensionRequestContext.html +7 -7
  81. package/docs/md/README.md +1 -1
  82. package/docs/md/classes/CameraKit.md +1 -1
  83. package/docs/md/classes/CameraKitSession.md +11 -22
  84. package/docs/md/classes/CameraKitSource.md +11 -5
  85. package/docs/md/classes/LensPerformanceMeasurement.md +1 -1
  86. package/docs/md/classes/LensPerformanceMetrics.md +1 -1
  87. package/docs/md/classes/LensRepository.md +1 -1
  88. package/docs/md/classes/Transform2D.md +1 -1
  89. package/docs/md/classes/TypedCustomEvent.md +1 -1
  90. package/docs/md/classes/TypedEventTarget.md +1 -1
  91. package/docs/md/interfaces/CameraKitBootstrapConfiguration.md +1 -1
  92. package/docs/md/interfaces/CameraKitSourceSubscriber.md +1 -1
  93. package/docs/md/interfaces/ComputedFrameMetrics.md +1 -1
  94. package/docs/md/interfaces/CreateSessionOptions.md +1 -1
  95. package/docs/md/interfaces/EstimatedLensPerformance.md +1 -1
  96. package/docs/md/interfaces/Lens.md +1 -1
  97. package/docs/md/interfaces/LensLaunchData.md +53 -0
  98. package/docs/md/interfaces/LensSource.md +23 -25
  99. package/docs/md/interfaces/MediaStreamSourceOptions.md +1 -1
  100. package/docs/md/interfaces/Preview.md +1 -1
  101. package/docs/md/interfaces/RemoteApiRequest.md +1 -1
  102. package/docs/md/interfaces/RemoteApiResponse.md +1 -1
  103. package/docs/md/interfaces/RemoteApiService.md +1 -1
  104. package/docs/md/interfaces/Snapcode.md +1 -1
  105. package/docs/md/interfaces/UriCancelRequest.md +1 -1
  106. package/docs/md/interfaces/UriRequest.md +1 -1
  107. package/docs/md/interfaces/UriResponse.md +1 -1
  108. package/docs/md/interfaces/VideoSourceOptions.md +1 -1
  109. package/docs/md/modules.md +125 -28
  110. package/lib/CameraKit.d.ts +14 -6
  111. package/lib/__tests__/data.d.ts +2 -2
  112. package/lib/__tests__/data.js +2 -2
  113. package/lib/__tests__/data.js.map +1 -1
  114. package/lib/bootstrapCameraKit.js +12 -3
  115. package/lib/bootstrapCameraKit.js.map +1 -1
  116. package/lib/clients/createTsProtoClient.d.ts +47 -0
  117. package/lib/clients/createTsProtoClient.js +53 -0
  118. package/lib/clients/createTsProtoClient.js.map +1 -0
  119. package/lib/clients/grpcHandler.d.ts +23 -0
  120. package/lib/clients/grpcHandler.js +87 -0
  121. package/lib/clients/grpcHandler.js.map +1 -0
  122. package/lib/clients/lensesClient.d.ts +9 -0
  123. package/lib/clients/lensesClient.js +6 -0
  124. package/lib/clients/lensesClient.js.map +1 -0
  125. package/lib/common/entries.d.ts +1 -0
  126. package/lib/common/entries.js +2 -0
  127. package/lib/common/entries.js.map +1 -1
  128. package/lib/common/result.d.ts +36 -0
  129. package/lib/common/result.js +40 -0
  130. package/lib/common/result.js.map +1 -0
  131. package/lib/common/unionBy.d.ts +28 -0
  132. package/lib/common/unionBy.js +46 -0
  133. package/lib/common/unionBy.js.map +1 -0
  134. package/lib/configuration.js +14 -1
  135. package/lib/configuration.js.map +1 -1
  136. package/lib/dependency-injection/Injectable.d.ts +67 -11
  137. package/lib/dependency-injection/Injectable.js +21 -2
  138. package/lib/dependency-injection/Injectable.js.map +1 -1
  139. package/lib/dependency-injection/RootServices.d.ts +5 -1
  140. package/lib/dependency-injection/RootServices.js.map +1 -1
  141. package/lib/environment.json +1 -1
  142. package/lib/extensions/RemoteApiServices.d.ts +1 -1
  143. package/lib/extensions/RemoteApiServices.js +7 -7
  144. package/lib/extensions/RemoteApiServices.js.map +1 -1
  145. package/lib/extensions/uriHandlersRegister.d.ts +6 -6
  146. package/lib/extensions/uriHandlersRegister.js +1 -1
  147. package/lib/extensions/uriHandlersRegister.js.map +1 -1
  148. package/lib/generated-proto/blizzard/cameraKitEvents.js.map +1 -1
  149. package/lib/generated-proto/pb_schema/camera_kit/v3/business_events.d.ts +15 -17
  150. package/lib/generated-proto/pb_schema/camera_kit/v3/business_events.js +62 -69
  151. package/lib/generated-proto/pb_schema/camera_kit/v3/business_events.js.map +1 -1
  152. package/lib/generated-proto/pb_schema/camera_kit/v3/export.d.ts +6 -0
  153. package/lib/generated-proto/pb_schema/camera_kit/v3/export.js +68 -0
  154. package/lib/generated-proto/pb_schema/camera_kit/v3/export.js.map +1 -1
  155. package/lib/generated-proto/pb_schema/camera_kit/v3/legal_prompt.d.ts +5 -6
  156. package/lib/generated-proto/pb_schema/camera_kit/v3/legal_prompt.js +11 -25
  157. package/lib/generated-proto/pb_schema/camera_kit/v3/legal_prompt.js.map +1 -1
  158. package/lib/generated-proto/pb_schema/camera_kit/v3/lens.d.ts +19 -14
  159. package/lib/generated-proto/pb_schema/camera_kit/v3/lens.js +145 -64
  160. package/lib/generated-proto/pb_schema/camera_kit/v3/lens.js.map +1 -1
  161. package/lib/generated-proto/pb_schema/camera_kit/v3/operational_metrics.d.ts +2 -0
  162. package/lib/generated-proto/pb_schema/camera_kit/v3/operational_metrics.js +30 -0
  163. package/lib/generated-proto/pb_schema/camera_kit/v3/operational_metrics.js.map +1 -1
  164. package/lib/generated-proto/pb_schema/camera_kit/v3/ranking.d.ts +15 -16
  165. package/lib/generated-proto/pb_schema/camera_kit/v3/ranking.js +36 -62
  166. package/lib/generated-proto/pb_schema/camera_kit/v3/ranking.js.map +1 -1
  167. package/lib/generated-proto/pb_schema/camera_kit/v3/service.d.ts +1294 -12
  168. package/lib/generated-proto/pb_schema/camera_kit/v3/service.js +200 -0
  169. package/lib/generated-proto/pb_schema/camera_kit/v3/service.js.map +1 -1
  170. package/lib/generated-proto/pb_schema/cdp/cof/config_result.d.ts +4 -0
  171. package/lib/generated-proto/pb_schema/cdp/cof/config_result.js +4 -0
  172. package/lib/generated-proto/pb_schema/cdp/cof/config_result.js.map +1 -1
  173. package/lib/generated-proto/pb_schema/google/protobuf/descriptor.d.ts +39 -45
  174. package/lib/generated-proto/pb_schema/google/protobuf/descriptor.js +74 -192
  175. package/lib/generated-proto/pb_schema/google/protobuf/descriptor.js.map +1 -1
  176. package/lib/handlers/defaultFetchHandler.js +1 -5
  177. package/lib/handlers/defaultFetchHandler.js.map +1 -1
  178. package/lib/index.d.ts +3 -3
  179. package/lib/index.js +2 -6
  180. package/lib/index.js.map +1 -1
  181. package/lib/lens/Lens.d.ts +2 -12
  182. package/lib/lens/Lens.js +2 -2
  183. package/lib/lens/Lens.js.map +1 -1
  184. package/lib/lens/LensLaunchData.d.ts +37 -0
  185. package/lib/lens/LensLaunchData.js +35 -0
  186. package/lib/lens/LensLaunchData.js.map +1 -0
  187. package/lib/lens/LensRepository.d.ts +4 -7
  188. package/lib/lens/LensRepository.js +24 -35
  189. package/lib/lens/LensRepository.js.map +1 -1
  190. package/lib/lens/LensSource.d.ts +43 -0
  191. package/lib/lens/LensSource.js +42 -0
  192. package/lib/lens/LensSource.js.map +1 -0
  193. package/lib/lens/assets/LensAssetRepository.js +2 -4
  194. package/lib/lens/assets/LensAssetRepository.js.map +1 -1
  195. package/lib/lens/assets/LensAssetsProvider.d.ts +1 -1
  196. package/lib/lens/cameraKitLensSource.d.ts +16 -0
  197. package/lib/lens/cameraKitLensSource.js +59 -0
  198. package/lib/lens/cameraKitLensSource.js.map +1 -0
  199. package/lib/lens-core-module/lensCore.d.ts +2 -1
  200. package/lib/lens-core-module/lensCore.js +6 -1
  201. package/lib/lens-core-module/lensCore.js.map +1 -1
  202. package/lib/lens-core-module/lensCoreError.js +1 -1
  203. package/lib/lens-core-module/lensCoreError.js.map +1 -1
  204. package/lib/lensCoreWasmVersions.json +3 -3
  205. package/lib/media-sources/CameraKitSource.d.ts +10 -4
  206. package/lib/media-sources/CameraKitSource.js +11 -4
  207. package/lib/media-sources/CameraKitSource.js.map +1 -1
  208. package/lib/media-sources/ImageSource.js +1 -11
  209. package/lib/media-sources/ImageSource.js.map +1 -1
  210. package/lib/media-sources/MediaStreamSource.js +1 -5
  211. package/lib/media-sources/MediaStreamSource.js.map +1 -1
  212. package/lib/media-sources/VideoSource.js +1 -11
  213. package/lib/media-sources/VideoSource.js.map +1 -1
  214. package/lib/metrics/businessEventsReporter.js +1 -1
  215. package/lib/metrics/businessEventsReporter.js.map +1 -1
  216. package/lib/metrics/reporters/reportGlobalException.d.ts +7 -0
  217. package/lib/metrics/reporters/reportGlobalException.js +22 -4
  218. package/lib/metrics/reporters/reportGlobalException.js.map +1 -1
  219. package/lib/metrics/reporters/reportHttpMetrics.js +14 -0
  220. package/lib/metrics/reporters/reportHttpMetrics.js.map +1 -1
  221. package/lib/metrics/reporters/reportLensValidationFailed.d.ts +1 -1
  222. package/lib/metrics/reporters/reportLensView.d.ts +1 -1
  223. package/lib/metrics/reporters/reportLensWait.d.ts +1 -1
  224. package/lib/metrics/reporters/reportSessionException.d.ts +1 -1
  225. package/lib/metrics/reporters/reporters.d.ts +1 -1
  226. package/lib/persistence/ExpiringPersistence.js +3 -4
  227. package/lib/persistence/ExpiringPersistence.js.map +1 -1
  228. package/lib/platform/platformInfo.js +1 -1
  229. package/lib/platform/platformInfo.js.map +1 -1
  230. package/lib/remote-configuration/cofHandler.d.ts +1 -0
  231. package/lib/remote-configuration/cofHandler.js +61 -50
  232. package/lib/remote-configuration/cofHandler.js.map +1 -1
  233. package/lib/session/CameraKitSession.d.ts +9 -11
  234. package/lib/session/CameraKitSession.js +22 -18
  235. package/lib/session/CameraKitSession.js.map +1 -1
  236. package/lib/session/CameraKitSessionEvents.d.ts +1 -1
  237. package/lib/session/CameraKitSessionEvents.js.map +1 -1
  238. package/lib/session/LensKeyboard.d.ts +7 -1
  239. package/lib/session/lensState.d.ts +3 -3
  240. package/lib/session/lensState.js +40 -15
  241. package/lib/session/lensState.js.map +1 -1
  242. package/package.json +2 -2
  243. package/docs/html/classes/LensSources.html +0 -160
  244. package/docs/html/types/LensLaunchParams.html +0 -115
  245. package/docs/md/classes/LensSources.md +0 -29
  246. package/lib/common/any.d.ts +0 -19
  247. package/lib/common/any.js +0 -53
  248. package/lib/common/any.js.map +0 -1
  249. package/lib/extensions/LensSources.d.ts +0 -58
  250. package/lib/extensions/LensSources.js +0 -54
  251. package/lib/extensions/LensSources.js.map +0 -1
  252. package/lib/lens/LensLaunchParams.d.ts +0 -19
  253. package/lib/lens/LensLaunchParams.js +0 -40
  254. package/lib/lens/LensLaunchParams.js.map +0 -1
  255. package/lib/lens/index.d.ts +0 -7
  256. package/lib/lens/index.js +0 -7
  257. package/lib/lens/index.js.map +0 -1
  258. package/lib/lens/lensEnvelopeUtil.d.ts +0 -5
  259. package/lib/lens/lensEnvelopeUtil.js +0 -19
  260. package/lib/lens/lensEnvelopeUtil.js.map +0 -1
  261. package/lib/lens/lensHttpUtil.d.ts +0 -5
  262. package/lib/lens/lensHttpUtil.js +0 -52
  263. package/lib/lens/lensHttpUtil.js.map +0 -1
@@ -1,6 +1,6 @@
1
- [CameraKit Web SDK - v0.14.1-alpha.1](README.md) / Exports
1
+ [CameraKit Web SDK - v0.15.0-alpha.1](README.md) / Exports
2
2
 
3
- # CameraKit Web SDK - v0.14.1-alpha.1
3
+ # CameraKit Web SDK - v0.15.0-alpha.1
4
4
 
5
5
  ## Table of contents
6
6
 
@@ -9,7 +9,6 @@
9
9
  - [CameraKit](classes/CameraKit.md)
10
10
  - [TypedCustomEvent](classes/TypedCustomEvent.md)
11
11
  - [TypedEventTarget](classes/TypedEventTarget.md)
12
- - [LensSources](classes/LensSources.md)
13
12
  - [LensRepository](classes/LensRepository.md)
14
13
  - [CameraKitSource](classes/CameraKitSource.md)
15
14
  - [CameraKitSession](classes/CameraKitSession.md)
@@ -22,7 +21,6 @@
22
21
  - [CreateSessionOptions](interfaces/CreateSessionOptions.md)
23
22
  - [EstimatedLensPerformance](interfaces/EstimatedLensPerformance.md)
24
23
  - [CameraKitBootstrapConfiguration](interfaces/CameraKitBootstrapConfiguration.md)
25
- - [LensSource](interfaces/LensSource.md)
26
24
  - [RemoteApiRequest](interfaces/RemoteApiRequest.md)
27
25
  - [RemoteApiResponse](interfaces/RemoteApiResponse.md)
28
26
  - [RemoteApiService](interfaces/RemoteApiService.md)
@@ -32,6 +30,8 @@
32
30
  - [Lens](interfaces/Lens.md)
33
31
  - [Preview](interfaces/Preview.md)
34
32
  - [Snapcode](interfaces/Snapcode.md)
33
+ - [LensLaunchData](interfaces/LensLaunchData.md)
34
+ - [LensSource](interfaces/LensSource.md)
35
35
  - [CameraKitSourceSubscriber](interfaces/CameraKitSourceSubscriber.md)
36
36
  - [MediaStreamSourceOptions](interfaces/MediaStreamSourceOptions.md)
37
37
  - [VideoSourceOptions](interfaces/VideoSourceOptions.md)
@@ -46,7 +46,6 @@
46
46
  - [RemoteApiRequestHandler](modules.md#remoteapirequesthandler)
47
47
  - [RemoteApiServices](modules.md#remoteapiservices)
48
48
  - [Uri](modules.md#uri)
49
- - [LensLaunchParams](modules.md#lenslaunchparams)
50
49
  - [AssetTiming](modules.md#assettiming)
51
50
  - [AssetLoader](modules.md#assetloader)
52
51
  - [CameraKitDeviceInfo](modules.md#camerakitdeviceinfo)
@@ -86,9 +85,10 @@
86
85
  - [bootstrapCameraKit](modules.md#bootstrapcamerakit)
87
86
  - [createExtension](modules.md#createextension)
88
87
  - [Injectable](modules.md#injectable)
89
- - [lensSourcesFactory](modules.md#lenssourcesfactory)
88
+ - [ConcatInjectable](modules.md#concatinjectable)
90
89
  - [remoteApiServicesFactory](modules.md#remoteapiservicesfactory)
91
90
  - [getRequiredBootstrapURLs](modules.md#getrequiredbootstrapurls)
91
+ - [lensSourcesFactory](modules.md#lenssourcesfactory)
92
92
  - [createImageSource](modules.md#createimagesource)
93
93
  - [createUserMediaSource](modules.md#createusermediasource)
94
94
  - [createMediaStreamSource](modules.md#createmediastreamsource)
@@ -289,14 +289,6 @@ These events are emitted by [CameraKit](classes/CameraKit.md) to report lens usa
289
289
 
290
290
  ___
291
291
 
292
- ### LensLaunchParams
293
-
294
- Ƭ **LensLaunchParams**: `Record`<`string`, `string` \| `number` \| `string`[] \| `number`[]\>
295
-
296
- Various lenses may support the passing of certain parameters from the application to the lens when it is launched.
297
-
298
- ___
299
-
300
292
  ### AssetTiming
301
293
 
302
294
  Ƭ **AssetTiming**: keyof typeof `assetTimingMap`
@@ -651,13 +643,13 @@ ___
651
643
 
652
644
  ▸ **Injectable**<`Token`, `Service`\>(`token`, `fn`): `InjectableFunction`<`any`, [], `Token`, `Service`\>
653
645
 
654
- Create an Injectable function with no dependencies (i.e. arguments).
646
+ Create an Injectable factory function with no dependencies (i.e. the factory function has no arguments).
655
647
 
656
648
  Ex:
657
649
  ```ts
658
- const createMyService = Factory(
650
+ const createMyService = Injectable(
659
651
  'MyService',
660
- () => { ... },
652
+ () => { return ... },
661
653
  )
662
654
  ```
663
655
 
@@ -681,18 +673,17 @@ const createMyService = Factory(
681
673
 
682
674
  ▸ **Injectable**<`Token`, `Tokens`, `Params`, `Service`\>(`token`, `dependencies`, `fn`): `Tokens`[``"length"``] extends `Params`[``"length"``] ? `InjectableFunction`<`ServicesFromTokenizedParams`<`Tokens`, `Params`\>, `Tokens`, `Token`, `Service`\> : `never`
683
675
 
684
- Create an Injectable function with dependencies (i.e. arguments).
676
+ Create an Injectable factory function with dependencies (i.e. the factory function has arguments).
685
677
 
686
- **Note:** the list of dependencies must be readonly that is, a literal tuple marked `as const`. This tuple must
687
- contain only string literals or string consts.
678
+ **Note:** the list of dependencies must contain only string literals or string consts.
688
679
 
689
680
  Ex:
690
681
  ```ts
691
682
  const DependencyB = 'DependencyB'
692
- const createMyService = Factory(
683
+ const createMyService = Injectable(
693
684
  'MyService',
694
- ['DependencyA', DependencyB] as const,
695
- (a: A, b: B) => { ... },
685
+ ['DependencyA', DependencyB],
686
+ (a: A, b: B) => { return ... },
696
687
  )
697
688
  ```
698
689
 
@@ -710,7 +701,7 @@ const createMyService = Factory(
710
701
  | Name | Type | Description |
711
702
  | :------ | :------ | :------ |
712
703
  | `token` | `Token` | A unique string Token which will correspond to the created Service. |
713
- | `dependencies` | `Tokens` | A *readonly* list of Tokens corresponding to dependencies (i.e. arguments to the Factory), which will be resolved by the Container to which this Factory is provided. |
704
+ | `dependencies` | `Tokens` | A *readonly* list of Tokens corresponding to dependencies (i.e. arguments to the Factory), which will be resolved by the Container to which this Injectable is provided. |
714
705
  | `fn` | (...`args`: `Tokens`[``"length"``] extends `Params`[``"length"``] ? `Params` : `void`[]) => `Service` | A function with arguments matching in type and length to the given list of dependencies. When called, it must return the Service. |
715
706
 
716
707
  #### Returns
@@ -719,19 +710,91 @@ const createMyService = Factory(
719
710
 
720
711
  ___
721
712
 
722
- ### lensSourcesFactory
713
+ ### ConcatInjectable
723
714
 
724
- ▸ **lensSourcesFactory**(`...args`): [`LensSources`](classes/LensSources.md)
715
+ ▸ **ConcatInjectable**<`Token`, `Service`\>(`token`, `fn`): `InjectableFunction`<{ [T in keyof Token]: Service[] }, [], `Token`, `Service`[]\>
716
+
717
+ Create an Injectable factory function without dependencies (i.e. the factory function has no arguments) that appends
718
+ a Service onto an existing array of Services of the same type.
719
+
720
+ Ex:
721
+ ```ts
722
+ import { myServiceFactory, MyService } from './my-service'
723
+
724
+ const createMyService = ConcatInjectable(
725
+ myServiceFactory.token,
726
+ (): MyService => { return ... },
727
+ )
728
+
729
+ // Consumers then do:
730
+ const myConsumingServiceFactory = Injectable(
731
+ 'myConsumingService',
732
+ [ myServiceFactory.token ],
733
+ (myServices: MyService[]) => { return ... }
734
+ )
735
+ ```
736
+
737
+ #### Type parameters
738
+
739
+ | Name | Type |
740
+ | :------ | :------ |
741
+ | `Token` | extends `string` |
742
+ | `Service` | `Service` |
725
743
 
726
744
  #### Parameters
727
745
 
746
+ | Name | Type | Description |
747
+ | :------ | :------ | :------ |
748
+ | `token` | `Token` | A string Token identifying an existing Service that has an Array type, to which will be appended the Service created by this factory function. |
749
+ | `fn` | () => `Service` | A function with no arguments which returns the Service. |
750
+
751
+ #### Returns
752
+
753
+ `InjectableFunction`<{ [T in keyof Token]: Service[] }, [], `Token`, `Service`[]\>
754
+
755
+ ▸ **ConcatInjectable**<`Token`, `Tokens`, `Params`, `Service`\>(`token`, `dependencies`, `fn`): `InjectableFunction`<`ServicesFromTokenizedParams`<`Tokens`, `Params`\>, `Tokens`, `Token`, `Service`[]\>
756
+
757
+ Create an Injectable factory function with dependencies (i.e. the factory function has arguments) that appends
758
+ a Service onto an existing array of Services of the same type.
759
+
760
+ Ex:
761
+ ```ts
762
+ import { myServiceFactory, MyService } from './my-service'
763
+
764
+ const createMyService = ConcatInjectable(
765
+ myServiceFactory.token,
766
+ ['DependencyA', 'DependencyB'],
767
+ (a: A, b: B): MyService => { return ... },
768
+ )
769
+
770
+ // Consumers then do:
771
+ const myConsumingServiceFactory = Injectable(
772
+ 'myConsumingService',
773
+ [ myServiceFactory.token ],
774
+ (myServices: MyService[]) => { return ... }
775
+ )
776
+ ```
777
+
778
+ #### Type parameters
779
+
728
780
  | Name | Type |
729
781
  | :------ | :------ |
730
- | `...args` | [] |
782
+ | `Token` | extends `string` |
783
+ | `Tokens` | extends readonly `string`[] |
784
+ | `Params` | extends readonly `any`[] |
785
+ | `Service` | `Service` |
786
+
787
+ #### Parameters
788
+
789
+ | Name | Type | Description |
790
+ | :------ | :------ | :------ |
791
+ | `token` | `Token` | A string Token identifying an existing Service that has an Array type, to which will be appended the Service created by this factory function. |
792
+ | `dependencies` | `Tokens` | A *readonly* list of Tokens corresponding to dependencies (i.e. arguments to the Factory), which will be resolved by the Container to which this Injectable is provided. |
793
+ | `fn` | (...`args`: `Tokens`[``"length"``] extends `Params`[``"length"``] ? `Params` : `void`[]) => `Service` | A function with no arguments which returns the Service. |
731
794
 
732
795
  #### Returns
733
796
 
734
- [`LensSources`](classes/LensSources.md)
797
+ `InjectableFunction`<`ServicesFromTokenizedParams`<`Tokens`, `Params`\>, `Tokens`, `Token`, `Service`[]\>
735
798
 
736
799
  ___
737
800
 
@@ -749,6 +812,40 @@ ___
749
812
 
750
813
  [`RemoteApiServices`](modules.md#remoteapiservices)
751
814
 
815
+ ___
816
+
817
+ ### lensSourcesFactory
818
+
819
+ ▸ **lensSourcesFactory**(`...args`): [`LensSource`](interfaces/LensSource.md)[]
820
+
821
+ By default, no custom LensSources are provided to CameraKit. But to enable certain advanced use-cases,
822
+ applications may provide their own LensSources.
823
+
824
+ Perhaps the most convenient way to do this is with [ConcatInjectable](modules.md#concatinjectable), as shown here:
825
+
826
+ **`Example`**
827
+
828
+ ```ts
829
+ import { bootstrapCameraKit, lensSourcesFactory, LensSource } from '@snap/camera-kit'
830
+
831
+ const cameraKit = bootstrapCameraKit(config, (container) => {
832
+ return container.provides(ConcatInjectable(
833
+ lensSourcesFactory.token,
834
+ (): LensSource => { return ... }
835
+ ))
836
+ })
837
+ ```
838
+
839
+ #### Parameters
840
+
841
+ | Name | Type |
842
+ | :------ | :------ |
843
+ | `...args` | [] |
844
+
845
+ #### Returns
846
+
847
+ [`LensSource`](interfaces/LensSource.md)[]
848
+
752
849
  ## Rendering
753
850
 
754
851
  ### CameraKitDeviceInfo
@@ -212,7 +212,6 @@ export declare const cameraKitFactory: {
212
212
  useMediaElement: (input: Omit<import("./lens-core-module").UseMediaElementInput, "onFailure" | "onSuccess">) => Promise<any>;
213
213
  setFPSLimit: (input: Omit<import("./lens-core-module").SetFpsLimitInput, "onFailure" | "onSuccess">) => Promise<any>;
214
214
  setRenderLoopMode: (input: Omit<import("./lens-core-module").SetRenderLoopInput, "onFailure" | "onSuccess">) => Promise<any>;
215
- playCanvas: (input: Omit<import("./lens-core-module").PlayCanvasInput, "onFailure" | "onSuccess">) => Promise<any>;
216
215
  pauseCanvas: (input: Omit<import("./lens-core-module").PauseCanvasInput, "onFailure" | "onSuccess">) => Promise<any>;
217
216
  setRenderSize: (input: Omit<import("./lens-core-module").SetRenderSizeMatchInputResolutionInput, "onFailure" | "onSuccess"> | Omit<import("./lens-core-module").SetRenderSizeExplicitInput, "onFailure" | "onSuccess">) => Promise<any>;
218
217
  setInputTransform: (input: Omit<import("./lens-core-module").SetInputTransformInput, "onFailure" | "onSuccess">) => Promise<any>;
@@ -239,6 +238,7 @@ export declare const cameraKitFactory: {
239
238
  assetChecksum?: string | undefined;
240
239
  onFailure?: ((err: LensCoreError) => void) | undefined;
241
240
  }): void;
241
+ playCanvas(input: Omit<import("./lens-core-module").PlayCanvasInput, "onFailure" | "onSuccess" | "onReady">): Promise<void>;
242
242
  }, args_3: PageVisibility, args_4: Container<{
243
243
  LensRepository: LensRepository;
244
244
  } & {
@@ -261,6 +261,14 @@ export declare const cameraKitFactory: {
261
261
  (args_0: import("./configuration").CameraKitConfiguration, args_1: import("./handlers").FetchHandler): import("./handlers/HandlerChainBuilder").Handler<RequestInfo, Response, RequestInit | undefined>;
262
262
  token: "cameraKitServiceFetchHandler";
263
263
  dependencies: readonly ["configuration", "defaultFetchHandler"];
264
+ }, {
265
+ (args_0: import("./configuration").CameraKitConfiguration, args_1: import("./handlers").FetchHandler): import("./clients/grpcHandler").GrpcHandler;
266
+ token: "grpcHandler";
267
+ dependencies: readonly ["configuration", "cameraKitServiceFetchHandler"];
268
+ }, {
269
+ (args_0: import("./clients/grpcHandler").GrpcHandler): import("./clients/lensesClient").LensesClient;
270
+ token: "lensesClient";
271
+ dependencies: readonly ["grpcHandler"];
264
272
  }, {
265
273
  (args_0: import("./configuration").CameraKitConfiguration, args_1: import("./handlers/requestStateEmittingHandler").RequestStateEventTarget, args_2: import("./metrics/operational/operationalMetricsReporter").OperationalMetricsReporter): import("./handlers/HandlerChainBuilder").Handler<Partial<import("./generated-proto/pb_schema/cdp/cof/config_request").ConfigTargetingRequest>, import("./generated-proto/pb_schema/cdp/cof/config_response").ConfigTargetingResponse, import("./remote-configuration/cofHandler").Metadata & {
266
274
  signal?: AbortSignal | null | undefined;
@@ -276,9 +284,9 @@ export declare const cameraKitFactory: {
276
284
  token: "remoteConfiguration";
277
285
  dependencies: readonly ["configuration", "cofHandler", "cameraKitServiceFetchHandler"];
278
286
  }, {
279
- (args_0: import("./handlers/requestStateEmittingHandler").RequestStateEventTarget, args_1: import("./handlers").FetchHandler, args_2: import("./handlers").FetchHandler, args_3: import("./lens").LensSources, args_4: import("./lens").LensAssetRepository, args_5: import("./configuration").CameraKitConfiguration): LensRepository;
287
+ (args_0: import("./handlers/requestStateEmittingHandler").RequestStateEventTarget, args_1: import("./handlers").FetchHandler, args_2: import(".").LensSource[], args_3: import("./lens/assets/LensAssetRepository").LensAssetRepository): LensRepository;
280
288
  token: "LensRepository";
281
- dependencies: readonly ["requestStateEventTarget", "cameraKitServiceFetchHandler", "defaultFetchHandler", "lensSources", "lensAssetRepository", "configuration"];
289
+ dependencies: readonly ["requestStateEventTarget", "defaultFetchHandler", "lensSources", "lensAssetRepository"];
282
290
  }, {
283
291
  (args_0: LensCore): import("./persistence/IndexedDBPersistence").IndexedDBPersistence<ArrayBuffer>;
284
292
  token: "lensPersistenceStore";
@@ -292,15 +300,15 @@ export declare const cameraKitFactory: {
292
300
  token: "operationalMetricsReporter";
293
301
  dependencies: readonly ["metricsHandler", "pageVisibility", "configuration"];
294
302
  }, {
295
- (args_0: LensCore, args_1: import("./lens").AssetLoader, args_2: import("./lens").AssetLoader, args_3: import("./lens").AssetLoader, args_4: MetricsEventTarget, args_5: import("./handlers/requestStateEmittingHandler").RequestStateEventTarget): import("./lens").LensAssetRepository;
303
+ (args_0: LensCore, args_1: import(".").AssetLoader, args_2: import(".").AssetLoader, args_3: import(".").AssetLoader, args_4: MetricsEventTarget, args_5: import("./handlers/requestStateEmittingHandler").RequestStateEventTarget): import("./lens/assets/LensAssetRepository").LensAssetRepository;
296
304
  token: "lensAssetRepository";
297
305
  dependencies: readonly ["lensCore", "deviceDependentAssetLoader", "remoteMediaAssetLoader", "staticAssetLoader", "metricsEventTarget", "requestStateEventTarget"];
298
306
  }, {
299
- (args_0: import("./handlers").FetchHandler, args_1: import("./remote-configuration/remoteConfiguration").RemoteConfiguration): import("./lens").AssetLoader;
307
+ (args_0: import("./handlers").FetchHandler, args_1: import("./remote-configuration/remoteConfiguration").RemoteConfiguration): import(".").AssetLoader;
300
308
  token: "deviceDependentAssetLoader";
301
309
  dependencies: readonly ["defaultFetchHandler", "remoteConfiguration"];
302
310
  }, {
303
- (args_0: import("./handlers").FetchHandler): import("./lens").AssetLoader;
311
+ (args_0: import("./handlers").FetchHandler): import(".").AssetLoader;
304
312
  token: "staticAssetLoader";
305
313
  dependencies: readonly ["defaultFetchHandler"];
306
314
  }, {
@@ -1,5 +1,5 @@
1
1
  /// <reference types="jest" />
2
- import { ContentProto } from "../lens";
2
+ import { Content } from "../generated-proto/pb_schema/camera_kit/v3/lens";
3
3
  import { LensCoreModule, AssetType as LensCoreAssetType } from "../lens-core-module/generated-types";
4
4
  import { LensProtoWithGroupId } from "../lens/Lens";
5
5
  export declare const falsyValues: readonly [false, null, undefined, 0, ""];
@@ -7,7 +7,7 @@ export declare const truthyValues: readonly [true, 1, {}, Date, readonly []];
7
7
  export declare function createLensFixture({ name, groupId, content, }: {
8
8
  name: string;
9
9
  groupId?: string;
10
- content?: Partial<ContentProto>;
10
+ content?: Partial<Content>;
11
11
  }): LensProtoWithGroupId;
12
12
  export type LensCoreMock = Pick<jest.Mocked<LensCoreModule>, "AssetType" | "CanvasType" | "ExternalMediaOrientation" | "InterfaceAction" | "InterfaceControl" | "RenderLoopMode" | "getOutputCanvases" | "initialize" | "provideExternalImage" | "provideExternalVideo" | "provideRemoteAssetsResponse" | "provideRemoteAssetsUploadResponse" | "provideUriResponse" | "registerSavePersistentStoreCallback" | "registerUriListener" | "setAllSoundsMuted" | "setClientInterfaceRequestHandler" | "setFPSLimit" | "setInputTransform" | "setOnFrameProcessedCallback" | "setPreloadedConfiguration" | "setRemoteAssetsProvider" | "setRemoteAssetsUploadHandler" | "setRenderLoopMode" | "setRenderSize" | "useMediaElement">;
13
13
  export declare const AssetType: Record<keyof LensCoreModule["AssetType"], LensCoreAssetType>;
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable max-len */
2
- import { Lens_CameraFacing } from "../lens";
2
+ import { Lens_CameraFacing } from "../generated-proto/pb_schema/camera_kit/v3/lens";
3
3
  export const falsyValues = [false, null, undefined, 0, ""];
4
4
  export const truthyValues = [true, 1, {}, new Date(), []];
5
5
  export function createLensFixture({ name, groupId = "test-group-id", content = {}, }) {
@@ -8,7 +8,7 @@ export function createLensFixture({ name, groupId = "test-group-id", content = {
8
8
  groupId,
9
9
  name,
10
10
  vendorData: {},
11
- content: Object.assign({ iconUrlBolt: "https://bolt.com/iconUrl1", lnsSha256: "", lnsUrlBolt: "", preview: {
11
+ content: Object.assign({ lnsUrl: "", iconUrl: "", iconUrlBolt: "https://bolt.com/iconUrl1", lnsSha256: "", lnsUrlBolt: "", preview: {
12
12
  imageUrl: "https://bolt.com/previewUrl1",
13
13
  imageSequenceSize: 100,
14
14
  imageSequenceWebpUrlPattern: "http://images.com/face-%d.com",
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/__tests__/data.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-len */\nimport { ContentProto, Lens_CameraFacing } from \"../lens\";\nimport { LensCoreModule, AssetType as LensCoreAssetType } from \"../lens-core-module/generated-types\";\nimport { LensProtoWithGroupId } from \"../lens/Lens\";\n\nexport const falsyValues = [false, null, undefined, 0, \"\"] as const;\nexport const truthyValues = [true, 1, {}, new Date(), []] as const;\n\nexport function createLensFixture({\n name,\n groupId = \"test-group-id\",\n content = {},\n}: {\n name: string;\n groupId?: string;\n content?: Partial<ContentProto>;\n}): LensProtoWithGroupId {\n return {\n id: name,\n groupId,\n name,\n vendorData: {},\n content: {\n iconUrlBolt: \"https://bolt.com/iconUrl1\",\n lnsSha256: \"\",\n lnsUrlBolt: \"\",\n preview: {\n imageUrl: \"https://bolt.com/previewUrl1\",\n imageSequenceSize: 100,\n imageSequenceWebpUrlPattern: \"http://images.com/face-%d.com\",\n },\n assetManifest: [],\n defaultHintId: \"\",\n hintTranslations: {},\n ...content,\n },\n scannable: {\n snapcodeImageUrl: \"https://snapcodeImageUrl.com\",\n snapcodeDeeplink: \"https://snapcodeDeeplink.com\",\n },\n isThirdParty: false,\n cameraFacingPreference: Lens_CameraFacing.UNRECOGNIZED,\n featureMetadata: [],\n lensCreator: {\n displayName: \"\",\n },\n };\n}\n\nexport type LensCoreMock = Pick<\n jest.Mocked<LensCoreModule>,\n | \"AssetType\"\n | \"CanvasType\"\n | \"ExternalMediaOrientation\"\n | \"InterfaceAction\"\n | \"InterfaceControl\"\n | \"RenderLoopMode\"\n | \"getOutputCanvases\"\n | \"initialize\"\n | \"provideExternalImage\"\n | \"provideExternalVideo\"\n | \"provideRemoteAssetsResponse\"\n | \"provideRemoteAssetsUploadResponse\"\n | \"provideUriResponse\"\n | \"registerSavePersistentStoreCallback\"\n | \"registerUriListener\"\n | \"setAllSoundsMuted\"\n | \"setClientInterfaceRequestHandler\"\n | \"setFPSLimit\"\n | \"setInputTransform\"\n | \"setOnFrameProcessedCallback\"\n | \"setPreloadedConfiguration\"\n | \"setRemoteAssetsProvider\"\n | \"setRemoteAssetsUploadHandler\"\n | \"setRenderLoopMode\"\n | \"setRenderSize\"\n | \"useMediaElement\"\n>;\n\n// NOTE: type of the record ensures newly added asset types break compilation\nexport const AssetType: Record<keyof LensCoreModule[\"AssetType\"], LensCoreAssetType> = {\n DeviceDependent: { value: 3 },\n RemoteMediaByUrl: { value: 6 },\n Static: { value: 1 },\n URL: { value: 2 },\n BitmojiDynamicAsset: { value: 4 },\n};\n\nexport function createLensCoreModule(): LensCoreMock {\n return {\n AssetType,\n CanvasType: { Preview: { value: 1 }, Capture: { value: 2 }, None: { value: 0 }, All: { value: 3 } },\n RenderLoopMode: { SetTimeout: { value: 1 }, RequestAnimationFrame: { value: 0 } },\n // https://github.sc-corp.net/Snapchat/LensCore/blob/502b54b9a663203bcdf3b90c63214cdf8cc1e713/Src/CoreManager/ClientInterfaceDelegate.hpp#L39\n InterfaceAction: { Show: { value: 3 } } as any,\n // https://github.sc-corp.net/Snapchat/LensCore/blob/502b54b9a663203bcdf3b90c63214cdf8cc1e713/Src/CoreManager/ClientInterfaceDelegate.hpp#L21\n InterfaceControl: { ImagePicker: { value: 1 } } as any,\n // https://github.sc-corp.net/Snapchat/LensCore/blob/2d538ecc41f67dd2c199e0ff0eefd96aac6f22dc/Src/Common/IExternalMediaFilePickedObserver.h#L21\n ExternalMediaOrientation: { CW0: { value: 0 }, CW90: { value: 1 }, CW180: { value: 2 }, CW270: { value: 3 } },\n getOutputCanvases: jest.fn(),\n initialize: jest.fn(),\n provideExternalImage: jest.fn(),\n provideExternalVideo: jest.fn(),\n provideRemoteAssetsResponse: jest.fn(),\n provideRemoteAssetsUploadResponse: jest.fn(),\n provideUriResponse: jest.fn(),\n registerSavePersistentStoreCallback: jest.fn(),\n registerUriListener: jest.fn(),\n setAllSoundsMuted: jest.fn(),\n setClientInterfaceRequestHandler: jest.fn(),\n setFPSLimit: jest.fn(),\n setOnFrameProcessedCallback: jest.fn(),\n setPreloadedConfiguration: jest.fn(),\n setRemoteAssetsProvider: jest.fn(),\n setRemoteAssetsUploadHandler: jest.fn(),\n setRenderLoopMode: jest.fn(),\n setRenderSize: jest.fn(),\n useMediaElement: jest.fn(),\n setInputTransform: jest.fn(),\n };\n}\n"]}
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/__tests__/data.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-len */\nimport { Content, Lens_CameraFacing } from \"../generated-proto/pb_schema/camera_kit/v3/lens\";\nimport { LensCoreModule, AssetType as LensCoreAssetType } from \"../lens-core-module/generated-types\";\nimport { LensProtoWithGroupId } from \"../lens/Lens\";\n\nexport const falsyValues = [false, null, undefined, 0, \"\"] as const;\nexport const truthyValues = [true, 1, {}, new Date(), []] as const;\n\nexport function createLensFixture({\n name,\n groupId = \"test-group-id\",\n content = {},\n}: {\n name: string;\n groupId?: string;\n content?: Partial<Content>;\n}): LensProtoWithGroupId {\n return {\n id: name,\n groupId,\n name,\n vendorData: {},\n content: {\n lnsUrl: \"\",\n iconUrl: \"\",\n iconUrlBolt: \"https://bolt.com/iconUrl1\",\n lnsSha256: \"\",\n lnsUrlBolt: \"\",\n preview: {\n imageUrl: \"https://bolt.com/previewUrl1\",\n imageSequenceSize: 100,\n imageSequenceWebpUrlPattern: \"http://images.com/face-%d.com\",\n },\n assetManifest: [],\n defaultHintId: \"\",\n hintTranslations: {},\n ...content,\n },\n scannable: {\n snapcodeImageUrl: \"https://snapcodeImageUrl.com\",\n snapcodeDeeplink: \"https://snapcodeDeeplink.com\",\n },\n isThirdParty: false,\n cameraFacingPreference: Lens_CameraFacing.UNRECOGNIZED,\n featureMetadata: [],\n lensCreator: {\n displayName: \"\",\n },\n };\n}\n\nexport type LensCoreMock = Pick<\n jest.Mocked<LensCoreModule>,\n | \"AssetType\"\n | \"CanvasType\"\n | \"ExternalMediaOrientation\"\n | \"InterfaceAction\"\n | \"InterfaceControl\"\n | \"RenderLoopMode\"\n | \"getOutputCanvases\"\n | \"initialize\"\n | \"provideExternalImage\"\n | \"provideExternalVideo\"\n | \"provideRemoteAssetsResponse\"\n | \"provideRemoteAssetsUploadResponse\"\n | \"provideUriResponse\"\n | \"registerSavePersistentStoreCallback\"\n | \"registerUriListener\"\n | \"setAllSoundsMuted\"\n | \"setClientInterfaceRequestHandler\"\n | \"setFPSLimit\"\n | \"setInputTransform\"\n | \"setOnFrameProcessedCallback\"\n | \"setPreloadedConfiguration\"\n | \"setRemoteAssetsProvider\"\n | \"setRemoteAssetsUploadHandler\"\n | \"setRenderLoopMode\"\n | \"setRenderSize\"\n | \"useMediaElement\"\n>;\n\n// NOTE: type of the record ensures newly added asset types break compilation\nexport const AssetType: Record<keyof LensCoreModule[\"AssetType\"], LensCoreAssetType> = {\n DeviceDependent: { value: 3 },\n RemoteMediaByUrl: { value: 6 },\n Static: { value: 1 },\n URL: { value: 2 },\n BitmojiDynamicAsset: { value: 4 },\n};\n\nexport function createLensCoreModule(): LensCoreMock {\n return {\n AssetType,\n CanvasType: { Preview: { value: 1 }, Capture: { value: 2 }, None: { value: 0 }, All: { value: 3 } },\n RenderLoopMode: { SetTimeout: { value: 1 }, RequestAnimationFrame: { value: 0 } },\n // https://github.sc-corp.net/Snapchat/LensCore/blob/502b54b9a663203bcdf3b90c63214cdf8cc1e713/Src/CoreManager/ClientInterfaceDelegate.hpp#L39\n InterfaceAction: { Show: { value: 3 } } as any,\n // https://github.sc-corp.net/Snapchat/LensCore/blob/502b54b9a663203bcdf3b90c63214cdf8cc1e713/Src/CoreManager/ClientInterfaceDelegate.hpp#L21\n InterfaceControl: { ImagePicker: { value: 1 } } as any,\n // https://github.sc-corp.net/Snapchat/LensCore/blob/2d538ecc41f67dd2c199e0ff0eefd96aac6f22dc/Src/Common/IExternalMediaFilePickedObserver.h#L21\n ExternalMediaOrientation: { CW0: { value: 0 }, CW90: { value: 1 }, CW180: { value: 2 }, CW270: { value: 3 } },\n getOutputCanvases: jest.fn(),\n initialize: jest.fn(),\n provideExternalImage: jest.fn(),\n provideExternalVideo: jest.fn(),\n provideRemoteAssetsResponse: jest.fn(),\n provideRemoteAssetsUploadResponse: jest.fn(),\n provideUriResponse: jest.fn(),\n registerSavePersistentStoreCallback: jest.fn(),\n registerUriListener: jest.fn(),\n setAllSoundsMuted: jest.fn(),\n setClientInterfaceRequestHandler: jest.fn(),\n setFPSLimit: jest.fn(),\n setOnFrameProcessedCallback: jest.fn(),\n setPreloadedConfiguration: jest.fn(),\n setRemoteAssetsProvider: jest.fn(),\n setRemoteAssetsUploadHandler: jest.fn(),\n setRenderLoopMode: jest.fn(),\n setRenderSize: jest.fn(),\n useMediaElement: jest.fn(),\n setInputTransform: jest.fn(),\n };\n}\n"]}
@@ -1,4 +1,6 @@
1
1
  import { __awaiter } from "tslib";
2
+ import environment from "./environment.json";
3
+ import lensCoreWasm from "./lensCoreWasmVersions.json";
2
4
  import { lensRepositoryFactory } from "./lens/LensRepository";
3
5
  import { Container } from "./dependency-injection/Container";
4
6
  import { cameraKitFactory } from "./CameraKit";
@@ -13,7 +15,6 @@ import { createCameraKitConfigurationFactory } from "./configuration";
13
15
  import { PartialContainer } from "./dependency-injection/PartialContainer";
14
16
  import { metricsHandlerFactory } from "./metrics/metricsHandler";
15
17
  import { operationalMetricReporterFactory } from "./metrics/operational/operationalMetricsReporter";
16
- import { lensSourcesFactory } from "./extensions/LensSources";
17
18
  import { uriHandlersFactory } from "./extensions/UriHandlers";
18
19
  import { assert } from "./common/assertions";
19
20
  import { isSafeString } from "./common/typeguards";
@@ -35,6 +36,10 @@ import { requestStateEventTargetFactory } from "./handlers/requestStateEmittingH
35
36
  import { pageVisibilityFactory } from "./common/pageVisibility";
36
37
  import { cofHandlerFactory } from "./remote-configuration/cofHandler";
37
38
  import { remoteApiServicesFactory } from "./extensions/RemoteApiServices";
39
+ import { lensesClientFactory } from "./clients/lensesClient";
40
+ import { gprcHandlerFactory } from "./clients/grpcHandler";
41
+ import { lensSourcesFactory } from "./lens/LensSource";
42
+ import { cameraKitLensSourceFactory } from "./lens/cameraKitLensSource";
38
43
  const logger = getLogger("bootstrapCameraKit");
39
44
  // The following errors are not wrapped with BootstrapError and bubble up as is.
40
45
  const nonWrappableErrors = [
@@ -42,7 +47,7 @@ const nonWrappableErrors = [
42
47
  "PlatformNotSupportedError",
43
48
  ];
44
49
  /**
45
- * Returns true if given error has to be wrapped with BoostrapError.
50
+ * Returns true if given error has to be wrapped with BootstrapError.
46
51
  */
47
52
  function shouldWrapError(error) {
48
53
  if (error instanceof Error) {
@@ -94,6 +99,7 @@ function shouldWrapError(error) {
94
99
  */
95
100
  export function bootstrapCameraKit(configuration, provide) {
96
101
  return __awaiter(this, void 0, void 0, function* () {
102
+ console.info(`Camera Kit SDK: ${environment.PACKAGE_VERSION} (${lensCoreWasm.version}/${lensCoreWasm.buildNumber})`);
97
103
  try {
98
104
  const startTimeMs = performance.now();
99
105
  assert(isSafeString(configuration.apiToken), configurationError("Invalid or unsafe apiToken provided."));
@@ -114,9 +120,11 @@ export function bootstrapCameraKit(configuration, provide) {
114
120
  // and we're not interested in errors thrown by their provide() function.
115
121
  // Below is the minimum required container to report errors to Blizzard.
116
122
  const telemetryContainer = Container.provides(publicContainer)
123
+ .provides(cameraKitServiceFetchHandlerFactory)
124
+ .provides(gprcHandlerFactory)
117
125
  .provides(logEntriesFactory)
118
126
  .run(registerLogEntriesSubscriber)
119
- .provides(cameraKitServiceFetchHandlerFactory)
127
+ .provides(lensesClientFactory)
120
128
  .provides(requestStateEventTargetFactory)
121
129
  .provides(metricsEventTargetFactory)
122
130
  .provides(metricsHandlerFactory)
@@ -145,6 +153,7 @@ export function bootstrapCameraKit(configuration, provide) {
145
153
  const lensCore = yield telemetryContainer.provides(lensCoreFactory).get(lensCoreFactory.token);
146
154
  const container = telemetryContainer
147
155
  .provides(Injectable(lensCoreFactory.token, () => lensCore))
156
+ .provides(cameraKitLensSourceFactory)
148
157
  .provides(lensPersistenceStoreFactory)
149
158
  .provides(deviceDependentAssetLoaderFactory)
150
159
  .provides(staticAssetLoaderFactory)
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrapCameraKit.js","sourceRoot":"","sources":["../src/bootstrapCameraKit.ts"],"names":[],"mappings":"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","sourcesContent":["import { lensRepositoryFactory } from \"./lens/LensRepository\";\nimport { Container } from \"./dependency-injection/Container\";\nimport { CameraKit, cameraKitFactory } from \"./CameraKit\";\nimport { lensCoreFactory } from \"./lens-core-module/loader/lensCoreFactory\";\nimport { Injectable } from \"./dependency-injection/Injectable\";\nimport { remoteMediaAssetLoaderFactory } from \"./lens/assets/remoteMediaAssetLoaderFactory\";\nimport { deviceDependentAssetLoaderFactory } from \"./lens/assets/deviceDependentAssetLoader\";\nimport { staticAssetLoaderFactory } from \"./lens/assets/staticAssetLoader\";\nimport { defaultFetchHandlerFactory } from \"./handlers/defaultFetchHandler\";\nimport { cameraKitServiceFetchHandlerFactory } from \"./handlers/cameraKitServiceFetchHandlerFactory\";\nimport { CameraKitBootstrapConfiguration, createCameraKitConfigurationFactory } from \"./configuration\";\nimport { PublicServices } from \"./dependency-injection/RootServices\";\nimport { PartialContainer } from \"./dependency-injection/PartialContainer\";\nimport { metricsHandlerFactory } from \"./metrics/metricsHandler\";\nimport { operationalMetricReporterFactory } from \"./metrics/operational/operationalMetricsReporter\";\nimport { lensSourcesFactory } from \"./extensions/LensSources\";\nimport { uriHandlersFactory } from \"./extensions/UriHandlers\";\nimport { assert } from \"./common/assertions\";\nimport { isSafeString } from \"./common/typeguards\";\nimport { metricsEventTargetFactory } from \"./metrics/metricsEventTarget\";\nimport { reportGloballyScopedMetrics } from \"./metrics/reporters/reporters\";\nimport { getLogger } from \"./logger/logger\";\nimport { logEntriesFactory } from \"./logger/logEntries\";\nimport { assertPlatformSupported } from \"./platform/assertPlatformSupported\";\nimport { lensPersistenceStoreFactory } from \"./lens/LensPersistenceStore\";\nimport { remoteConfigurationFactory } from \"./remote-configuration/remoteConfiguration\";\nimport { lensAssetRepositoryFactory } from \"./lens/assets/LensAssetRepository\";\nimport { legalStateFactory } from \"./legal/legalState\";\nimport { legalPromptFactory } from \"./legal/legalPrompt\";\nimport { bootstrapError, ConfigurationError, configurationError, PlatformNotSupportedError } from \"./namedErrors\";\nimport { businessEventsReporterFactory } from \"./metrics/businessEventsReporter\";\nimport { reportGlobalException } from \"./metrics/reporters/reportGlobalException\";\nimport { registerLogEntriesSubscriber } from \"./logger/registerLogEntriesSubscriber\";\nimport { requestStateEventTargetFactory } from \"./handlers/requestStateEmittingHandler\";\nimport { pageVisibilityFactory } from \"./common/pageVisibility\";\nimport { cofHandlerFactory } from \"./remote-configuration/cofHandler\";\nimport { remoteApiServicesFactory } from \"./extensions/RemoteApiServices\";\n\nconst logger = getLogger(\"bootstrapCameraKit\");\n\n// The following errors are not wrapped with BootstrapError and bubble up as is.\nconst nonWrappableErrors: [ConfigurationError[\"name\"], PlatformNotSupportedError[\"name\"]] = [\n \"ConfigurationError\",\n \"PlatformNotSupportedError\",\n];\n\n/**\n * Returns true if given error has to be wrapped with BoostrapError.\n */\nfunction shouldWrapError(error: unknown): boolean {\n if (error instanceof Error) {\n return !nonWrappableErrors.some((name) => error.name === name);\n }\n return true;\n}\n\n/**\n * For more advanced use-cases, this DI Container holds services for which a custom implementation may be provided by\n * the application.\n *\n * @category Bootstrapping and Configuration\n */\nexport type PublicContainer = Container<PublicServices>;\n\n/**\n * Bootstrap CameraKit. This will download the WebAssembly code which powers CameraKit's rendering engine, and return\n * an instance of {@link CameraKit}.\n *\n * CameraKit must be provided with some configuration (the application's API token), and there are some additional\n * configurations which are optional.\n *\n * Descriptions of the available configurations can be found in the documentation for\n * {@link CameraKitBootstrapConfiguration}\n *\n * ---\n *\n * There is also a second, more advanced way to modify CameraKit to provide greater flexibility to support less common\n * use cases.\n *\n * This requires some knowledge of CameraKit's dependency injection system, and allows applications to provide their\n * own custom implementations of certain CameraKit components. This functionality will only be needed by applications\n * with very specific, more advanced requirements.\n *\n * @example\n * ```ts\n * // The most common way to bootstrap:\n * const cameraKit = await bootstrapCameraKit({ apiToken: myApiToken })\n *\n * // For special advanced use-cases, it is possible to provide custom implementations for certain CameraKit components.\n * const cameraKit = await bootstrapCameraKit(config, (container) => {\n * return container.provides(myCustomRemoteMediaAssetLoaderFactory)\n * })\n * ```\n *\n * @param configuration Configure CameraKit with e.g. credentials, global resource endpoints, etc.\n * @param provide Optional function that can make modifications to CameraKit's root DI container.\n * @returns A {@link CameraKit} instance, which is the entry point to CameraKit's API.\n *\n * @throws\n * - {@link ConfigurationError} when provided configuration object is invalid\n * - {@link PlatformNotSupportedError} when current platform is not supported by CameraKit\n * - {@link BootstrapError} when a failure occurs while initializing CameraKit and downloading the render engine\n * WebAssembly binary.\n *\n * @category Bootstrapping and Configuration\n */\nexport async function bootstrapCameraKit(\n configuration: CameraKitBootstrapConfiguration,\n provide?: (c: PublicContainer) => PublicContainer\n): Promise<CameraKit> {\n try {\n const startTimeMs = performance.now();\n\n assert(isSafeString(configuration.apiToken), configurationError(\"Invalid or unsafe apiToken provided.\"));\n\n const configurationFactory = createCameraKitConfigurationFactory(configuration);\n\n // Public container holds services which applications can overwrite with their own implementations.\n const defaultPublicContainer = Container.provides(configurationFactory)\n .provides(pageVisibilityFactory)\n .provides(defaultFetchHandlerFactory)\n .provides(remoteMediaAssetLoaderFactory)\n .provides(lensSourcesFactory)\n .provides(remoteApiServicesFactory)\n .provides(uriHandlersFactory);\n\n const publicContainer = provide ? provide(defaultPublicContainer) : defaultPublicContainer;\n\n // Now that the client's provide() function has completed and the configuration override is ready,\n // we create another container to initialize the logger. This ensures that logging is available\n // as we continue bootstrapping. We don't initialize the logger as part of the defaultPublicContainer\n // because we don't want applications to provide their own logger implementations,\n // and we're not interested in errors thrown by their provide() function.\n // Below is the minimum required container to report errors to Blizzard.\n const telemetryContainer = Container.provides(publicContainer)\n .provides(logEntriesFactory)\n .run(registerLogEntriesSubscriber)\n .provides(cameraKitServiceFetchHandlerFactory)\n .provides(requestStateEventTargetFactory)\n .provides(metricsEventTargetFactory)\n .provides(metricsHandlerFactory)\n .provides(operationalMetricReporterFactory)\n .provides(reportGlobalException)\n .provides(cofHandlerFactory)\n .provides(remoteConfigurationFactory)\n .provides(legalPromptFactory)\n .provides(legalStateFactory)\n // We'll run a PartialContainer containing reporters for globally-scoped metrics. Running this container\n // allows each metric reporter to initialize itself (e.g. by adding event listeners to detect when certain\n // actions occur). This PartialContainer also includes the service which listens to locally-reported metrics\n // and sends them to our backend.\n .run(reportGloballyScopedMetrics)\n .run(businessEventsReporterFactory);\n\n // Run the exception logger so that it can subscribe to log events -- we can't use `Container.run()` because\n // reportGlobalException is also used as a dependency by other Services (and run does not provide Services,\n // it just runs them once).\n telemetryContainer.get(reportGlobalException.token);\n\n // At this point, logger is configured to report to console and Blizzard.\n\n await assertPlatformSupported();\n\n // LensCore is a foundational component which must be created asynchronously.\n // But it's annoying for every consumer of LensCore to have to wait on Promise<LensCore>\n // (which means they become async themselves). So we'll create a DI container which provides Promise<LensCore>,\n // wait for that promise once here, then create a new DI container that just contains LensCore.\n const lensCore = await telemetryContainer.provides(lensCoreFactory).get(lensCoreFactory.token);\n\n const container = telemetryContainer\n .provides(Injectable(lensCoreFactory.token, () => lensCore))\n .provides(lensPersistenceStoreFactory)\n .provides(deviceDependentAssetLoaderFactory)\n .provides(staticAssetLoaderFactory)\n .provides(lensAssetRepositoryFactory)\n .provides(lensRepositoryFactory)\n\n .provides(cameraKitFactory);\n const cameraKit = container.get(cameraKitFactory.token);\n\n const bootstrapTimeMs = performance.now() - startTimeMs;\n const reporter = container.get(operationalMetricReporterFactory.token);\n reporter.timer(\"bootstrap_time\", bootstrapTimeMs);\n\n return cameraKit;\n } catch (error) {\n if (shouldWrapError(error)) {\n error = bootstrapError(\"Error occurred during Camera Kit bootstrapping.\", error);\n }\n logger.error(error);\n throw error;\n }\n}\n\n/**\n * Extensions offer a way to provide custom implementations of certain parts of the CameraKit SDK.\n *\n * This enables more advanced use-cases, in which the default behavior of the SDK is substantially altered. For example,\n * replacing the default implementation that loads remote lens assets with a custom implementation that returns\n * different assets based on some business logic within the application.\n *\n * An extension is implemented as a [PartialContainer] – a collection of factory functions, each with its own\n * dependencies, which each provide some \"Service.\" A Service can be of any type, and the CameraKit SDK defines its\n * own Services, some of which can be overridden by providing a custom implementation of the type via an extension.\n *\n * Here's an example of how extensions might be used:\n * ```ts\n * import { bootstrapCameraKit, createExtension, remoteMediaAssetLoaderFactory } from '@snap/camera-kit'\n *\n * const myCustomRemoteAssetLoader = Injectable(\n * remoteMediaAssetLoaderFactory.token,\n * [remoteMediaAssetLoaderFactory.token] as const,\n * (defaultLoader: AssetLoader): AssetLoader => {\n * return async (asset, lens) => {\n * if (lens?.id === MY_SPECIAL_LENS) {\n * return (await fetch('my/asset.glb')).arrayBuffer()\n * }\n * return defaultLoader(asset, lens)\n * }\n * },\n * )\n *\n * const myExtension = createExtension().provides(myCustomeRemoteAssetLoader)\n * const cameraKit = bootstrapCameraKit(config, container => container.provides(myExtension))\n * ```\n *\n * This also enables greater modularity – the person/team creating the extension can do so in their own package, which\n * could be shared by many applications that all require the same functionality.\n *\n * @returns A {@link PartialContainer} which can be used to create a collection of Services, and can later be provided\n * to CameraKit's DI container during {@link bootstrapCameraKit}.\n *\n * @category Bootstrapping and Configuration\n */\nexport function createExtension(): PartialContainer {\n return new PartialContainer({});\n}\n"]}
1
+ {"version":3,"file":"bootstrapCameraKit.js","sourceRoot":"","sources":["../src/bootstrapCameraKit.ts"],"names":[],"mappings":"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","sourcesContent":["import environment from \"./environment.json\";\nimport lensCoreWasm from \"./lensCoreWasmVersions.json\";\nimport { lensRepositoryFactory } from \"./lens/LensRepository\";\nimport { Container } from \"./dependency-injection/Container\";\nimport { CameraKit, cameraKitFactory } from \"./CameraKit\";\nimport { lensCoreFactory } from \"./lens-core-module/loader/lensCoreFactory\";\nimport { Injectable } from \"./dependency-injection/Injectable\";\nimport { remoteMediaAssetLoaderFactory } from \"./lens/assets/remoteMediaAssetLoaderFactory\";\nimport { deviceDependentAssetLoaderFactory } from \"./lens/assets/deviceDependentAssetLoader\";\nimport { staticAssetLoaderFactory } from \"./lens/assets/staticAssetLoader\";\nimport { defaultFetchHandlerFactory } from \"./handlers/defaultFetchHandler\";\nimport { cameraKitServiceFetchHandlerFactory } from \"./handlers/cameraKitServiceFetchHandlerFactory\";\nimport { CameraKitBootstrapConfiguration, createCameraKitConfigurationFactory } from \"./configuration\";\nimport { PublicServices } from \"./dependency-injection/RootServices\";\nimport { PartialContainer } from \"./dependency-injection/PartialContainer\";\nimport { metricsHandlerFactory } from \"./metrics/metricsHandler\";\nimport { operationalMetricReporterFactory } from \"./metrics/operational/operationalMetricsReporter\";\nimport { uriHandlersFactory } from \"./extensions/UriHandlers\";\nimport { assert } from \"./common/assertions\";\nimport { isSafeString } from \"./common/typeguards\";\nimport { metricsEventTargetFactory } from \"./metrics/metricsEventTarget\";\nimport { reportGloballyScopedMetrics } from \"./metrics/reporters/reporters\";\nimport { getLogger } from \"./logger/logger\";\nimport { logEntriesFactory } from \"./logger/logEntries\";\nimport { assertPlatformSupported } from \"./platform/assertPlatformSupported\";\nimport { lensPersistenceStoreFactory } from \"./lens/LensPersistenceStore\";\nimport { remoteConfigurationFactory } from \"./remote-configuration/remoteConfiguration\";\nimport { lensAssetRepositoryFactory } from \"./lens/assets/LensAssetRepository\";\nimport { legalStateFactory } from \"./legal/legalState\";\nimport { legalPromptFactory } from \"./legal/legalPrompt\";\nimport { bootstrapError, ConfigurationError, configurationError, PlatformNotSupportedError } from \"./namedErrors\";\nimport { businessEventsReporterFactory } from \"./metrics/businessEventsReporter\";\nimport { reportGlobalException } from \"./metrics/reporters/reportGlobalException\";\nimport { registerLogEntriesSubscriber } from \"./logger/registerLogEntriesSubscriber\";\nimport { requestStateEventTargetFactory } from \"./handlers/requestStateEmittingHandler\";\nimport { pageVisibilityFactory } from \"./common/pageVisibility\";\nimport { cofHandlerFactory } from \"./remote-configuration/cofHandler\";\nimport { remoteApiServicesFactory } from \"./extensions/RemoteApiServices\";\nimport { lensesClientFactory } from \"./clients/lensesClient\";\nimport { gprcHandlerFactory } from \"./clients/grpcHandler\";\nimport { lensSourcesFactory } from \"./lens/LensSource\";\nimport { cameraKitLensSourceFactory } from \"./lens/cameraKitLensSource\";\n\nconst logger = getLogger(\"bootstrapCameraKit\");\n\n// The following errors are not wrapped with BootstrapError and bubble up as is.\nconst nonWrappableErrors: [ConfigurationError[\"name\"], PlatformNotSupportedError[\"name\"]] = [\n \"ConfigurationError\",\n \"PlatformNotSupportedError\",\n];\n\n/**\n * Returns true if given error has to be wrapped with BootstrapError.\n */\nfunction shouldWrapError(error: unknown): boolean {\n if (error instanceof Error) {\n return !nonWrappableErrors.some((name) => error.name === name);\n }\n return true;\n}\n\n/**\n * For more advanced use-cases, this DI Container holds services for which a custom implementation may be provided by\n * the application.\n *\n * @category Bootstrapping and Configuration\n */\nexport type PublicContainer = Container<PublicServices>;\n\n/**\n * Bootstrap CameraKit. This will download the WebAssembly code which powers CameraKit's rendering engine, and return\n * an instance of {@link CameraKit}.\n *\n * CameraKit must be provided with some configuration (the application's API token), and there are some additional\n * configurations which are optional.\n *\n * Descriptions of the available configurations can be found in the documentation for\n * {@link CameraKitBootstrapConfiguration}\n *\n * ---\n *\n * There is also a second, more advanced way to modify CameraKit to provide greater flexibility to support less common\n * use cases.\n *\n * This requires some knowledge of CameraKit's dependency injection system, and allows applications to provide their\n * own custom implementations of certain CameraKit components. This functionality will only be needed by applications\n * with very specific, more advanced requirements.\n *\n * @example\n * ```ts\n * // The most common way to bootstrap:\n * const cameraKit = await bootstrapCameraKit({ apiToken: myApiToken })\n *\n * // For special advanced use-cases, it is possible to provide custom implementations for certain CameraKit components.\n * const cameraKit = await bootstrapCameraKit(config, (container) => {\n * return container.provides(myCustomRemoteMediaAssetLoaderFactory)\n * })\n * ```\n *\n * @param configuration Configure CameraKit with e.g. credentials, global resource endpoints, etc.\n * @param provide Optional function that can make modifications to CameraKit's root DI container.\n * @returns A {@link CameraKit} instance, which is the entry point to CameraKit's API.\n *\n * @throws\n * - {@link ConfigurationError} when provided configuration object is invalid\n * - {@link PlatformNotSupportedError} when current platform is not supported by CameraKit\n * - {@link BootstrapError} when a failure occurs while initializing CameraKit and downloading the render engine\n * WebAssembly binary.\n *\n * @category Bootstrapping and Configuration\n */\nexport async function bootstrapCameraKit(\n configuration: CameraKitBootstrapConfiguration,\n provide?: (c: PublicContainer) => PublicContainer\n): Promise<CameraKit> {\n console.info(\n `Camera Kit SDK: ${environment.PACKAGE_VERSION} (${lensCoreWasm.version}/${lensCoreWasm.buildNumber})`\n );\n\n try {\n const startTimeMs = performance.now();\n\n assert(isSafeString(configuration.apiToken), configurationError(\"Invalid or unsafe apiToken provided.\"));\n\n const configurationFactory = createCameraKitConfigurationFactory(configuration);\n\n // Public container holds services which applications can overwrite with their own implementations.\n const defaultPublicContainer = Container.provides(configurationFactory)\n .provides(pageVisibilityFactory)\n .provides(defaultFetchHandlerFactory)\n .provides(remoteMediaAssetLoaderFactory)\n .provides(lensSourcesFactory)\n .provides(remoteApiServicesFactory)\n .provides(uriHandlersFactory);\n\n const publicContainer = provide ? provide(defaultPublicContainer) : defaultPublicContainer;\n\n // Now that the client's provide() function has completed and the configuration override is ready,\n // we create another container to initialize the logger. This ensures that logging is available\n // as we continue bootstrapping. We don't initialize the logger as part of the defaultPublicContainer\n // because we don't want applications to provide their own logger implementations,\n // and we're not interested in errors thrown by their provide() function.\n // Below is the minimum required container to report errors to Blizzard.\n const telemetryContainer = Container.provides(publicContainer)\n .provides(cameraKitServiceFetchHandlerFactory)\n .provides(gprcHandlerFactory)\n .provides(logEntriesFactory)\n .run(registerLogEntriesSubscriber)\n .provides(lensesClientFactory)\n .provides(requestStateEventTargetFactory)\n .provides(metricsEventTargetFactory)\n .provides(metricsHandlerFactory)\n .provides(operationalMetricReporterFactory)\n .provides(reportGlobalException)\n .provides(cofHandlerFactory)\n .provides(remoteConfigurationFactory)\n .provides(legalPromptFactory)\n .provides(legalStateFactory)\n // We'll run a PartialContainer containing reporters for globally-scoped metrics. Running this container\n // allows each metric reporter to initialize itself (e.g. by adding event listeners to detect when certain\n // actions occur). This PartialContainer also includes the service which listens to locally-reported metrics\n // and sends them to our backend.\n .run(reportGloballyScopedMetrics)\n .run(businessEventsReporterFactory);\n\n // Run the exception logger so that it can subscribe to log events -- we can't use `Container.run()` because\n // reportGlobalException is also used as a dependency by other Services (and run does not provide Services,\n // it just runs them once).\n telemetryContainer.get(reportGlobalException.token);\n\n // At this point, logger is configured to report to console and Blizzard.\n\n await assertPlatformSupported();\n\n // LensCore is a foundational component which must be created asynchronously.\n // But it's annoying for every consumer of LensCore to have to wait on Promise<LensCore>\n // (which means they become async themselves). So we'll create a DI container which provides Promise<LensCore>,\n // wait for that promise once here, then create a new DI container that just contains LensCore.\n const lensCore = await telemetryContainer.provides(lensCoreFactory).get(lensCoreFactory.token);\n\n const container = telemetryContainer\n .provides(Injectable(lensCoreFactory.token, () => lensCore))\n .provides(cameraKitLensSourceFactory)\n .provides(lensPersistenceStoreFactory)\n .provides(deviceDependentAssetLoaderFactory)\n .provides(staticAssetLoaderFactory)\n .provides(lensAssetRepositoryFactory)\n .provides(lensRepositoryFactory)\n .provides(cameraKitFactory);\n\n const cameraKit = container.get(cameraKitFactory.token);\n\n const bootstrapTimeMs = performance.now() - startTimeMs;\n const reporter = container.get(operationalMetricReporterFactory.token);\n reporter.timer(\"bootstrap_time\", bootstrapTimeMs);\n\n return cameraKit;\n } catch (error) {\n if (shouldWrapError(error)) {\n error = bootstrapError(\"Error occurred during Camera Kit bootstrapping.\", error);\n }\n logger.error(error);\n throw error;\n }\n}\n\n/**\n * Extensions offer a way to provide custom implementations of certain parts of the CameraKit SDK.\n *\n * This enables more advanced use-cases, in which the default behavior of the SDK is substantially altered. For example,\n * replacing the default implementation that loads remote lens assets with a custom implementation that returns\n * different assets based on some business logic within the application.\n *\n * An extension is implemented as a [PartialContainer] – a collection of factory functions, each with its own\n * dependencies, which each provide some \"Service.\" A Service can be of any type, and the CameraKit SDK defines its\n * own Services, some of which can be overridden by providing a custom implementation of the type via an extension.\n *\n * Here's an example of how extensions might be used:\n * ```ts\n * import { bootstrapCameraKit, createExtension, remoteMediaAssetLoaderFactory } from '@snap/camera-kit'\n *\n * const myCustomRemoteAssetLoader = Injectable(\n * remoteMediaAssetLoaderFactory.token,\n * [remoteMediaAssetLoaderFactory.token] as const,\n * (defaultLoader: AssetLoader): AssetLoader => {\n * return async (asset, lens) => {\n * if (lens?.id === MY_SPECIAL_LENS) {\n * return (await fetch('my/asset.glb')).arrayBuffer()\n * }\n * return defaultLoader(asset, lens)\n * }\n * },\n * )\n *\n * const myExtension = createExtension().provides(myCustomeRemoteAssetLoader)\n * const cameraKit = bootstrapCameraKit(config, container => container.provides(myExtension))\n * ```\n *\n * This also enables greater modularity – the person/team creating the extension can do so in their own package, which\n * could be shared by many applications that all require the same functionality.\n *\n * @returns A {@link PartialContainer} which can be used to create a collection of Services, and can later be provided\n * to CameraKit's DI container during {@link bootstrapCameraKit}.\n *\n * @category Bootstrapping and Configuration\n */\nexport function createExtension(): PartialContainer {\n return new PartialContainer({});\n}\n"]}
@@ -0,0 +1,47 @@
1
+ import { grpc } from "@improbable-eng/grpc-web";
2
+ import { Writer } from "protobufjs";
3
+ import { Exact, DeepPartial } from "../generated-proto/pb_schema/camera_kit/v3/service";
4
+ import { Result } from "../common/result";
5
+ import { GrpcHandler } from "./grpcHandler";
6
+ type TsProtoServiceDefinition<Methods extends TsProtoMethods> = {
7
+ name: string;
8
+ fullName: string;
9
+ methods: Methods;
10
+ };
11
+ type TsProtoMethods = {
12
+ [methodName: string]: TsProtoMethodDefinition<any, any>;
13
+ };
14
+ type TsProtoMethodDefinition<Request, Response> = {
15
+ name: string;
16
+ requestType: TsProtoMessage<Request>;
17
+ responseType: TsProtoMessage<Response>;
18
+ };
19
+ type TsProtoMessage<M> = {
20
+ encode: (message: M) => Writer;
21
+ decode: (message: Uint8Array) => M;
22
+ fromPartial: (partialMessage: any) => M;
23
+ };
24
+ export type GrpcServiceClient<S extends TsProtoServiceDefinition<any>> = {
25
+ [MethodName in keyof S["methods"]]: InferGrpcMethod<S["methods"][MethodName]>;
26
+ };
27
+ interface UnaryOutput<M> {
28
+ status: grpc.Code;
29
+ statusMessage: string;
30
+ headers: grpc.Metadata;
31
+ message: M | null;
32
+ trailers: grpc.Metadata;
33
+ }
34
+ type InferGrpcMethod<M extends TsProtoMethodDefinition<any, any>> = M extends TsProtoMethodDefinition<infer Request, infer Response> ? <I extends Exact<DeepPartial<Request>, I>>(request: I) => Promise<Result<UnaryOutput<Response & grpc.ProtobufMessage>, UnaryOutput<Response & grpc.ProtobufMessage>>> : never;
35
+ /**
36
+ * Convert a service definition generated by ts-proto (using the `outputServices=generic-definitions` CLI option) into
37
+ * a working client.
38
+ *
39
+ * @param serviceDefinition
40
+ * @param handler
41
+ * @returns A client that can make requests to a remote service by sending Protobuf-encoded messages over HTTP using the
42
+ * grpc-web package.
43
+ *
44
+ * @internal
45
+ */
46
+ export declare function createTsProtoClient<Methods extends TsProtoMethods, S extends TsProtoServiceDefinition<Methods>>(serviceDefinition: S, handler: GrpcHandler): GrpcServiceClient<S>;
47
+ export {};
@@ -0,0 +1,53 @@
1
+ import { __awaiter } from "tslib";
2
+ import { entries, fromEntries } from "../common/entries";
3
+ function messageClass(message, data) {
4
+ return class Message {
5
+ constructor() {
6
+ Object.assign(this, message.fromPartial(data));
7
+ }
8
+ static deserializeBinary(data) {
9
+ const protobufMessage = new Message();
10
+ return Object.assign(Object.assign({}, protobufMessage), message.decode(data));
11
+ }
12
+ serializeBinary() {
13
+ return message.encode(this).finish();
14
+ }
15
+ toObject() {
16
+ return this;
17
+ }
18
+ };
19
+ }
20
+ /**
21
+ * Convert a service definition generated by ts-proto (using the `outputServices=generic-definitions` CLI option) into
22
+ * a working client.
23
+ *
24
+ * @param serviceDefinition
25
+ * @param handler
26
+ * @returns A client that can make requests to a remote service by sending Protobuf-encoded messages over HTTP using the
27
+ * grpc-web package.
28
+ *
29
+ * @internal
30
+ */
31
+ export function createTsProtoClient(serviceDefinition, handler) {
32
+ return fromEntries(entries(serviceDefinition.methods).map(([methodName, methodDefinition]) => {
33
+ return [
34
+ methodName,
35
+ (request) => __awaiter(this, void 0, void 0, function* () {
36
+ const requestType = messageClass(methodDefinition.requestType, request);
37
+ const responseType = messageClass(methodDefinition.responseType, {});
38
+ return handler({
39
+ serviceName: serviceDefinition.fullName,
40
+ methodName: methodDefinition.name,
41
+ requestType,
42
+ responseType,
43
+ });
44
+ }),
45
+ ];
46
+ // Safety: We're mapping from the method definitions object into the GrpcServiceClient object in a manner
47
+ // that preserves each key in the method definitions object, pairing it with the corresponding
48
+ // serialization/deserialization logic for that particular method. But in doing this, we lose type
49
+ // specificity by converting the method definition object to a list of entries, mapping them, and then
50
+ // converting back into the client object -- so we're forced into this type cast.
51
+ }));
52
+ }
53
+ //# sourceMappingURL=createTsProtoClient.js.map