@snap/camera-kit 0.9.1 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -15
- package/docs/html/assets/search.js +1 -1
- package/docs/html/classes/CameraKit.html +116 -98
- package/docs/html/classes/CameraKitSession.html +175 -152
- package/docs/html/classes/CameraKitSource.html +109 -99
- package/docs/html/classes/LensPerformanceMeasurement.html +98 -92
- package/docs/html/classes/LensPerformanceMetrics.html +83 -79
- package/docs/html/classes/LensRepository.html +120 -107
- package/docs/html/classes/LensSources.html +86 -80
- package/docs/html/classes/Transform2D.html +98 -92
- package/docs/html/classes/TypedCustomEvent.html +83 -80
- package/docs/html/classes/TypedEventTarget.html +92 -89
- package/docs/html/functions/Injectable.html +87 -78
- package/docs/html/functions/bootstrapCameraKit.html +89 -84
- package/docs/html/functions/createExtension.html +76 -73
- package/docs/html/functions/createImageSource.html +80 -75
- package/docs/html/functions/createMediaStreamSource.html +81 -76
- package/docs/html/functions/createUserMediaSource.html +84 -75
- package/docs/html/functions/createVideoSource.html +80 -75
- package/docs/html/functions/estimateLensPerformance.html +76 -73
- package/docs/html/functions/getRequiredBootstrapURLs.html +78 -74
- package/docs/html/functions/lensSourcesFactory.html +74 -72
- package/docs/html/functions/uriHandlersFactory.html +76 -73
- package/docs/html/index.html +80 -78
- package/docs/html/interfaces/CameraKitBootstrapConfiguration.html +107 -98
- package/docs/html/interfaces/CameraKitSourceSubscriber.html +82 -79
- package/docs/html/interfaces/ComputedFrameMetrics.html +94 -82
- package/docs/html/interfaces/CreateSessionOptions.html +86 -81
- package/docs/html/interfaces/EstimatedLensPerformance.html +85 -82
- package/docs/html/interfaces/Lens.html +120 -102
- package/docs/html/interfaces/LensSource.html +102 -92
- package/docs/html/interfaces/MediaStreamSourceOptions.html +80 -78
- package/docs/html/interfaces/Preview.html +135 -0
- package/docs/html/interfaces/Snapcode.html +143 -0
- package/docs/html/interfaces/UriCancelRequest.html +80 -78
- package/docs/html/interfaces/UriHandler.html +102 -91
- package/docs/html/interfaces/UriRequest.html +89 -87
- package/docs/html/interfaces/UriResponse.html +89 -87
- package/docs/html/interfaces/VideoSourceOptions.html +77 -75
- package/docs/html/modules.html +153 -149
- package/docs/html/types/AssetLoader.html +75 -72
- package/docs/html/types/AssetTiming.html +75 -72
- package/docs/html/types/BenchmarkError.html +73 -71
- package/docs/html/types/BootstrapError.html +75 -72
- package/docs/html/types/CacheKeyNotFoundError.html +73 -71
- package/docs/html/types/CameraKitDeviceInfo.html +75 -72
- package/docs/html/types/CameraKitSessionEventListener.html +75 -72
- package/docs/html/types/CameraKitSessionEvents.html +82 -72
- package/docs/html/types/CameraKitSourceError.html +73 -71
- package/docs/html/types/CameraKitSourceInfo.html +73 -71
- package/docs/html/types/CameraKitSourceOptions.html +75 -72
- package/docs/html/types/ConfigurationError.html +75 -72
- package/docs/html/types/Keyboard.html +85 -78
- package/docs/html/types/KeyboardEvents.html +84 -72
- package/docs/html/types/LegalError.html +73 -71
- package/docs/html/types/LensAssetError.html +75 -72
- package/docs/html/types/LensContentValidationError.html +73 -71
- package/docs/html/types/LensError.html +73 -71
- package/docs/html/types/LensExecutionError.html +75 -72
- package/docs/html/types/LensImagePickerError.html +75 -72
- package/docs/html/types/LensLaunchParams.html +75 -72
- package/docs/html/types/LensMetricsEvents.html +75 -72
- package/docs/html/types/LensPerformanceCluster.html +75 -72
- package/docs/html/types/LensView.html +75 -72
- package/docs/html/types/LensWait.html +75 -72
- package/docs/html/types/PersistentStoreError.html +75 -72
- package/docs/html/types/PlatformNotSupportedError.html +75 -72
- package/docs/html/types/PublicContainer.html +75 -72
- package/docs/html/types/RenderTarget.html +75 -72
- package/docs/html/types/Uri.html +73 -71
- package/docs/html/types/UriHandlers.html +75 -72
- package/docs/html/types/WebGLError.html +73 -71
- package/docs/html/variables/extensionRequestContext.html +75 -72
- package/docs/md/README.md +18 -15
- package/docs/md/classes/CameraKit.md +14 -1
- package/docs/md/classes/CameraKitSession.md +1 -2
- package/docs/md/classes/CameraKitSource.md +1 -1
- package/docs/md/classes/LensPerformanceMeasurement.md +1 -1
- package/docs/md/classes/LensPerformanceMetrics.md +1 -1
- package/docs/md/classes/LensRepository.md +1 -1
- package/docs/md/classes/LensSources.md +1 -1
- package/docs/md/classes/Transform2D.md +1 -1
- package/docs/md/classes/TypedCustomEvent.md +1 -1
- package/docs/md/classes/TypedEventTarget.md +1 -1
- package/docs/md/interfaces/CameraKitBootstrapConfiguration.md +1 -1
- package/docs/md/interfaces/CameraKitSourceSubscriber.md +1 -1
- package/docs/md/interfaces/ComputedFrameMetrics.md +15 -1
- package/docs/md/interfaces/CreateSessionOptions.md +1 -1
- package/docs/md/interfaces/EstimatedLensPerformance.md +1 -1
- package/docs/md/interfaces/Lens.md +14 -3
- package/docs/md/interfaces/LensSource.md +1 -1
- package/docs/md/interfaces/MediaStreamSourceOptions.md +1 -1
- package/docs/md/interfaces/Preview.md +19 -0
- package/docs/md/interfaces/Snapcode.md +28 -0
- package/docs/md/interfaces/UriCancelRequest.md +1 -1
- package/docs/md/interfaces/UriHandler.md +1 -1
- package/docs/md/interfaces/UriRequest.md +1 -1
- package/docs/md/interfaces/UriResponse.md +1 -1
- package/docs/md/interfaces/VideoSourceOptions.md +1 -1
- package/docs/md/modules.md +11 -3
- package/lib/CameraKit.d.ts +29 -16
- package/lib/CameraKit.js +34 -5
- package/lib/CameraKit.js.map +1 -1
- package/lib/__tests__/data.js +9 -1
- package/lib/__tests__/data.js.map +1 -1
- package/lib/assertPlatformSupported.js +1 -1
- package/lib/assertPlatformSupported.js.map +1 -1
- package/lib/benchmark/webglUtils.js +2 -2
- package/lib/benchmark/webglUtils.js.map +1 -1
- package/lib/bootstrapCameraKit.js +9 -5
- package/lib/bootstrapCameraKit.js.map +1 -1
- package/lib/common/__mocks__/loadScript.d.ts +1 -1
- package/lib/common/__mocks__/loadScript.js +1 -1
- package/lib/common/__mocks__/loadScript.js.map +1 -1
- package/lib/common/dialog.d.ts +16 -0
- package/lib/common/dialog.js +146 -0
- package/lib/common/dialog.js.map +1 -0
- package/lib/common/hash.d.ts +5 -0
- package/lib/common/hash.js +17 -0
- package/lib/common/hash.js.map +1 -0
- package/lib/common/loadScript.d.ts +6 -1
- package/lib/common/loadScript.js +9 -2
- package/lib/common/loadScript.js.map +1 -1
- package/lib/common/localization.d.ts +17 -10
- package/lib/common/localization.js +653 -18
- package/lib/common/localization.js.map +1 -1
- package/lib/common/pageVisibility.d.ts +34 -20
- package/lib/common/pageVisibility.js +57 -48
- package/lib/common/pageVisibility.js.map +1 -1
- package/lib/common/validate.js +2 -2
- package/lib/common/validate.js.map +1 -1
- package/lib/dependency-injection/Container.d.ts +2 -2
- package/lib/dependency-injection/Container.js +10 -10
- package/lib/dependency-injection/Container.js.map +1 -1
- package/lib/dependency-injection/RootServices.d.ts +5 -1
- package/lib/dependency-injection/RootServices.js.map +1 -1
- package/lib/environment.json +1 -1
- package/lib/events/scan.js +1 -1
- package/lib/events/scan.js.map +1 -1
- package/lib/extensions/LensSources.d.ts +5 -5
- package/lib/extensions/LensSources.js +9 -9
- package/lib/extensions/LensSources.js.map +1 -1
- package/lib/extensions/UriHandlers.d.ts +1 -1
- package/lib/generated-proto/pb_schema/camera_kit/v3/business_events.d.ts +17 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/business_events.js +63 -1
- package/lib/generated-proto/pb_schema/camera_kit/v3/business_events.js.map +1 -1
- package/lib/generated-proto/pb_schema/camera_kit/v3/export.d.ts +38 -1
- package/lib/generated-proto/pb_schema/camera_kit/v3/legal_prompt.d.ts +5 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/legal_prompt.js +61 -0
- package/lib/generated-proto/pb_schema/camera_kit/v3/legal_prompt.js.map +1 -1
- package/lib/generated-proto/pb_schema/camera_kit/v3/lens.d.ts +64 -3
- package/lib/generated-proto/pb_schema/camera_kit/v3/lens.js +70 -2
- package/lib/generated-proto/pb_schema/camera_kit/v3/lens.js.map +1 -1
- package/lib/generated-proto/pb_schema/camera_kit/v3/service.d.ts +506 -3
- package/lib/generated-proto/pb_schema/camera_kit/v3/service.js +125 -3
- package/lib/generated-proto/pb_schema/camera_kit/v3/service.js.map +1 -1
- package/lib/generated-proto/pb_schema/cdp/cof/circumstance_service.d.ts +1917 -1852
- package/lib/generated-proto/pb_schema/cdp/cof/circumstance_service.js +55 -132
- package/lib/generated-proto/pb_schema/cdp/cof/circumstance_service.js.map +1 -1
- package/lib/generated-proto/pb_schema/cdp/cof/config_request.d.ts +8 -1
- package/lib/generated-proto/pb_schema/cdp/cof/config_request.js.map +1 -1
- package/lib/generated-proto/pb_schema/cdp/cof/config_response.d.ts +265 -0
- package/lib/generated-proto/pb_schema/cdp/cof/config_result.d.ts +628 -1
- package/lib/generated-proto/pb_schema/cdp/cof/config_result.js +140 -2
- package/lib/generated-proto/pb_schema/cdp/cof/config_result.js.map +1 -1
- package/lib/generated-proto/pb_schema/common/ruid.d.ts +2 -0
- package/lib/generated-proto/pb_schema/common/ruid.js +2 -0
- package/lib/generated-proto/pb_schema/common/ruid.js.map +1 -1
- package/lib/generated-proto/pb_schema/common/value.d.ts +22 -0
- package/lib/generated-proto/pb_schema/common/value.js +45 -0
- package/lib/generated-proto/pb_schema/common/value.js.map +1 -1
- package/lib/generated-proto/pb_schema/lenses/launchdata.d.ts +2 -0
- package/lib/generated-proto/pb_schema/lenses/launchdata.js +12 -0
- package/lib/generated-proto/pb_schema/lenses/launchdata.js.map +1 -1
- package/lib/handlers/HandlerChainBuilder.js +7 -2
- package/lib/handlers/HandlerChainBuilder.js.map +1 -1
- package/lib/handlers/batchingHandler.d.ts +8 -2
- package/lib/handlers/batchingHandler.js +5 -8
- package/lib/handlers/batchingHandler.js.map +1 -1
- package/lib/handlers/mappingHandler.d.ts +5 -1
- package/lib/handlers/mappingHandler.js +6 -4
- package/lib/handlers/mappingHandler.js.map +1 -1
- package/lib/handlers/rateLimitingHandler.d.ts +5 -1
- package/lib/handlers/rateLimitingHandler.js +6 -4
- package/lib/handlers/rateLimitingHandler.js.map +1 -1
- package/lib/handlers/requestStateEmittingHandler.d.ts +18 -5
- package/lib/handlers/requestStateEmittingHandler.js +12 -8
- package/lib/handlers/requestStateEmittingHandler.js.map +1 -1
- package/lib/handlers/responseCachingHandler.d.ts +1 -1
- package/lib/handlers/responseCachingHandler.js +1 -1
- package/lib/handlers/responseCachingHandler.js.map +1 -1
- package/lib/handlers/retryingHandler.d.ts +5 -1
- package/lib/handlers/retryingHandler.js +13 -9
- package/lib/handlers/retryingHandler.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js.map +1 -1
- package/lib/legal/legalPrompt.d.ts +7 -4
- package/lib/legal/legalPrompt.js +122 -133
- package/lib/legal/legalPrompt.js.map +1 -1
- package/lib/legal/legalState.d.ts +2 -2
- package/lib/legal/legalState.js +52 -38
- package/lib/legal/legalState.js.map +1 -1
- package/lib/lens/Lens.d.ts +32 -3
- package/lib/lens/Lens.js +10 -3
- package/lib/lens/Lens.js.map +1 -1
- package/lib/lens/LensLaunchParams.js +6 -4
- package/lib/lens/LensLaunchParams.js.map +1 -1
- package/lib/lens/LensPersistenceStore.js +1 -1
- package/lib/lens/LensPersistenceStore.js.map +1 -1
- package/lib/lens/LensRepository.d.ts +3 -2
- package/lib/lens/LensRepository.js +6 -5
- package/lib/lens/LensRepository.js.map +1 -1
- package/lib/lens/assets/LensAssetRepository.d.ts +5 -3
- package/lib/lens/assets/LensAssetRepository.js +21 -12
- package/lib/lens/assets/LensAssetRepository.js.map +1 -1
- package/lib/lens/assets/LensAssetsProvider.js +1 -1
- package/lib/lens/assets/LensAssetsProvider.js.map +1 -1
- package/lib/lens/lensEnvelopeUtil.js +1 -1
- package/lib/lens/lensEnvelopeUtil.js.map +1 -1
- package/lib/lens-client-interface/imagePicker.js +2 -2
- package/lib/lens-client-interface/imagePicker.js.map +1 -1
- package/lib/lens-client-interface/lensClientInterface.js +1 -1
- package/lib/lens-client-interface/lensClientInterface.js.map +1 -1
- package/lib/lens-core-module/loader/lensCoreFactory.js +4 -2
- package/lib/lens-core-module/loader/lensCoreFactory.js.map +1 -1
- package/lib/lensCoreWasmVersions.json +3 -3
- package/lib/logger/logEntries.d.ts +1 -1
- package/lib/logger/logEntries.js +3 -3
- package/lib/logger/logEntries.js.map +1 -1
- package/lib/logger/logger.d.ts +7 -2
- package/lib/logger/logger.js +9 -4
- package/lib/logger/logger.js.map +1 -1
- package/lib/media-sources/FunctionSource.js +1 -1
- package/lib/media-sources/FunctionSource.js.map +1 -1
- package/lib/media-sources/MediaStreamSource.d.ts +5 -1
- package/lib/media-sources/MediaStreamSource.js +14 -5
- package/lib/media-sources/MediaStreamSource.js.map +1 -1
- package/lib/metrics/businessEventsReporter.d.ts +3 -2
- package/lib/metrics/businessEventsReporter.js +16 -9
- package/lib/metrics/businessEventsReporter.js.map +1 -1
- package/lib/metrics/metricsHandler.d.ts +3 -2
- package/lib/metrics/metricsHandler.js +3 -3
- package/lib/metrics/metricsHandler.js.map +1 -1
- package/lib/metrics/operational/Count.d.ts +17 -0
- package/lib/metrics/operational/Count.js +28 -0
- package/lib/metrics/operational/Count.js.map +1 -0
- package/lib/metrics/operational/Histogram.d.ts +17 -0
- package/lib/metrics/operational/Histogram.js +23 -0
- package/lib/metrics/operational/Histogram.js.map +1 -0
- package/lib/metrics/operational/Metric.d.ts +20 -0
- package/lib/metrics/operational/Metric.js +26 -0
- package/lib/metrics/operational/Metric.js.map +1 -0
- package/lib/metrics/operational/Timer.d.ts +91 -0
- package/lib/metrics/operational/Timer.js +122 -0
- package/lib/metrics/operational/Timer.js.map +1 -0
- package/lib/metrics/{operationalMetricsReporter.d.ts → operational/operationalMetricsReporter.d.ts} +15 -4
- package/lib/metrics/{operationalMetricsReporter.js → operational/operationalMetricsReporter.js} +24 -8
- package/lib/metrics/operational/operationalMetricsReporter.js.map +1 -0
- package/lib/metrics/reporters/reportBenchmarks.d.ts +1 -1
- package/lib/metrics/reporters/reportBenchmarks.js +1 -1
- package/lib/metrics/reporters/reportBenchmarks.js.map +1 -1
- package/lib/metrics/reporters/reportGlobalException.d.ts +1 -1
- package/lib/metrics/reporters/reportGlobalException.js +1 -1
- package/lib/metrics/reporters/reportGlobalException.js.map +1 -1
- package/lib/metrics/reporters/reportHttpMetrics.d.ts +4 -4
- package/lib/metrics/reporters/reportHttpMetrics.js +3 -3
- package/lib/metrics/reporters/reportHttpMetrics.js.map +1 -1
- package/lib/metrics/reporters/reportLegalState.d.ts +1 -1
- package/lib/metrics/reporters/reportLegalState.js +1 -1
- package/lib/metrics/reporters/reportLegalState.js.map +1 -1
- package/lib/metrics/reporters/reportLensAndAssetDownload.d.ts +4 -4
- package/lib/metrics/reporters/reportLensAndAssetDownload.js +7 -3
- package/lib/metrics/reporters/reportLensAndAssetDownload.js.map +1 -1
- package/lib/metrics/reporters/reportLensValidationFailed.d.ts +1 -1
- package/lib/metrics/reporters/reportLensView.d.ts +2 -2
- package/lib/metrics/reporters/reportLensView.js +23 -17
- package/lib/metrics/reporters/reportLensView.js.map +1 -1
- package/lib/metrics/reporters/reportLensWait.d.ts +2 -2
- package/lib/metrics/reporters/reportLensWait.js +1 -1
- package/lib/metrics/reporters/reportLensWait.js.map +1 -1
- package/lib/metrics/reporters/reportSessionException.d.ts +1 -1
- package/lib/metrics/reporters/reporters.d.ts +7 -6
- package/lib/metrics/reporters/reporters.js +3 -3
- package/lib/metrics/reporters/reporters.js.map +1 -1
- package/lib/observable-operators/unsubscribed.d.ts +12 -0
- package/lib/observable-operators/unsubscribed.js +27 -0
- package/lib/observable-operators/unsubscribed.js.map +1 -0
- package/lib/remote-configuration/cofHandler.d.ts +3 -2
- package/lib/remote-configuration/cofHandler.js +8 -4
- package/lib/remote-configuration/cofHandler.js.map +1 -1
- package/lib/remote-configuration/remoteConfiguration.d.ts +16 -4
- package/lib/remote-configuration/remoteConfiguration.js +32 -6
- package/lib/remote-configuration/remoteConfiguration.js.map +1 -1
- package/lib/session/CameraKitSession.d.ts +4 -4
- package/lib/session/CameraKitSession.js +10 -9
- package/lib/session/CameraKitSession.js.map +1 -1
- package/lib/session/LensKeyboard.d.ts +1 -1
- package/lib/session/LensPerformanceMeasurement.d.ts +2 -0
- package/lib/session/LensPerformanceMeasurement.js +27 -4
- package/lib/session/LensPerformanceMeasurement.js.map +1 -1
- package/lib/session/lensState.d.ts +5 -4
- package/lib/session/lensState.js +95 -41
- package/lib/session/lensState.js.map +1 -1
- package/package.json +12 -12
- package/lib/metrics/operationalMetricsReporter.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value.js","sourceRoot":"","sources":["../../../../src/generated-proto/pb_schema/common/value.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable */\nimport Long from \"long\";\nimport _m0 from \"protobufjs/minimal\";\nimport { Any } from \"../google/protobuf/any\";\n\nexport const protobufPackage = \"snapchat.common\";\n\nexport interface MapRecord {\n key: string;\n value: string;\n}\n\nexport interface MapRecords {\n records: MapRecord[];\n}\n\n/**\n * `Value` represents a dynamically typed value which can be one of int, long, float, bool,\n * string or Any which represents a serialized proto.\n */\nexport interface Value {\n intValue: number | undefined;\n longValue: number | undefined;\n floatValue: number | undefined;\n doubleValue: number | undefined;\n boolValue: boolean | undefined;\n stringValue: string | undefined;\n anyValue: Any | undefined;\n mapValue: MapRecords | undefined;\n /**\n * Because resolution is used so often we pack it into a long.\n * We add this type here to help us identify when a long is a resolution.\n */\n intPairValue: number | undefined;\n}\n\nfunction createBaseMapRecord(): MapRecord {\n return { key: \"\", value: \"\" };\n}\n\nexport const MapRecord = {\n encode(message: MapRecord, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): MapRecord {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMapRecord();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.key = reader.string();\n break;\n case 2:\n message.value = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromPartial<I extends Exact<DeepPartial<MapRecord>, I>>(object: I): MapRecord {\n const message = createBaseMapRecord();\n message.key = object.key ?? \"\";\n message.value = object.value ?? \"\";\n return message;\n },\n};\n\nfunction createBaseMapRecords(): MapRecords {\n return { records: [] };\n}\n\nexport const MapRecords = {\n encode(message: MapRecords, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.records) {\n MapRecord.encode(v!, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): MapRecords {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMapRecords();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.records.push(MapRecord.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromPartial<I extends Exact<DeepPartial<MapRecords>, I>>(object: I): MapRecords {\n const message = createBaseMapRecords();\n message.records = object.records?.map((e) => MapRecord.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseValue(): Value {\n return {\n intValue: undefined,\n longValue: undefined,\n floatValue: undefined,\n doubleValue: undefined,\n boolValue: undefined,\n stringValue: undefined,\n anyValue: undefined,\n mapValue: undefined,\n intPairValue: undefined,\n };\n}\n\nexport const Value = {\n encode(message: Value, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.intValue !== undefined) {\n writer.uint32(8).int32(message.intValue);\n }\n if (message.longValue !== undefined) {\n writer.uint32(16).int64(message.longValue);\n }\n if (message.floatValue !== undefined) {\n writer.uint32(29).float(message.floatValue);\n }\n if (message.doubleValue !== undefined) {\n writer.uint32(73).double(message.doubleValue);\n }\n if (message.boolValue !== undefined) {\n writer.uint32(32).bool(message.boolValue);\n }\n if (message.stringValue !== undefined) {\n writer.uint32(42).string(message.stringValue);\n }\n if (message.anyValue !== undefined) {\n Any.encode(message.anyValue, writer.uint32(50).fork()).ldelim();\n }\n if (message.mapValue !== undefined) {\n MapRecords.encode(message.mapValue, writer.uint32(58).fork()).ldelim();\n }\n if (message.intPairValue !== undefined) {\n writer.uint32(65).fixed64(message.intPairValue);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Value {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseValue();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.intValue = reader.int32();\n break;\n case 2:\n message.longValue = longToNumber(reader.int64() as Long);\n break;\n case 3:\n message.floatValue = reader.float();\n break;\n case 9:\n message.doubleValue = reader.double();\n break;\n case 4:\n message.boolValue = reader.bool();\n break;\n case 5:\n message.stringValue = reader.string();\n break;\n case 6:\n message.anyValue = Any.decode(reader, reader.uint32());\n break;\n case 7:\n message.mapValue = MapRecords.decode(reader, reader.uint32());\n break;\n case 8:\n message.intPairValue = longToNumber(reader.fixed64() as Long);\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromPartial<I extends Exact<DeepPartial<Value>, I>>(object: I): Value {\n const message = createBaseValue();\n message.intValue = object.intValue ?? undefined;\n message.longValue = object.longValue ?? undefined;\n message.floatValue = object.floatValue ?? undefined;\n message.doubleValue = object.doubleValue ?? undefined;\n message.boolValue = object.boolValue ?? undefined;\n message.stringValue = object.stringValue ?? undefined;\n message.anyValue =\n object.anyValue !== undefined && object.anyValue !== null ? Any.fromPartial(object.anyValue) : undefined;\n message.mapValue =\n object.mapValue !== undefined && object.mapValue !== null ? MapRecords.fromPartial(object.mapValue) : undefined;\n message.intPairValue = object.intPairValue ?? undefined;\n return message;\n },\n};\n\ndeclare var self: any | undefined;\ndeclare var window: any | undefined;\ndeclare var global: any | undefined;\nvar globalThis: any = (() => {\n if (typeof globalThis !== \"undefined\") return globalThis;\n if (typeof self !== \"undefined\") return self;\n if (typeof window !== \"undefined\") return window;\n if (typeof global !== \"undefined\") return global;\n throw \"Unable to locate global object\";\n})();\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin\n ? T\n : T extends Array<infer U>\n ? Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U>\n ? ReadonlyArray<DeepPartial<U>>\n : T extends {}\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin\n ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & Record<Exclude<keyof I, KeysOfUnion<P>>, never>;\n\nfunction longToNumber(long: Long): number {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n return long.toNumber();\n}\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any;\n _m0.configure();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"value.js","sourceRoot":"","sources":["../../../../src/generated-proto/pb_schema/common/value.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable */\nimport Long from \"long\";\nimport _m0 from \"protobufjs/minimal\";\nimport { Any } from \"../google/protobuf/any\";\n\nexport const protobufPackage = \"snapchat.common\";\n\nexport interface MapRecord {\n key: string;\n value: string;\n}\n\nexport interface MapRecords {\n records: MapRecord[];\n}\n\nexport interface StringArray {\n value: string[];\n}\n\n/**\n * `Value` represents a dynamically typed value which can be one of int, long, float, bool,\n * string or Any which represents a serialized proto.\n */\nexport interface Value {\n intValue: number | undefined;\n longValue: number | undefined;\n floatValue: number | undefined;\n doubleValue: number | undefined;\n boolValue: boolean | undefined;\n stringValue: string | undefined;\n anyValue: Any | undefined;\n mapValue: MapRecords | undefined;\n /**\n * Because resolution is used so often we pack it into a long.\n * We add this type here to help us identify when a long is a resolution.\n */\n intPairValue: number | undefined;\n /** NOTE: this is not supported through COF CMS directly at the moment. Consumers still need to parse this as proto */\n stringArrayValue: StringArray | undefined;\n}\n\nfunction createBaseMapRecord(): MapRecord {\n return { key: \"\", value: \"\" };\n}\n\nexport const MapRecord = {\n encode(message: MapRecord, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.key !== \"\") {\n writer.uint32(10).string(message.key);\n }\n if (message.value !== \"\") {\n writer.uint32(18).string(message.value);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): MapRecord {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMapRecord();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.key = reader.string();\n break;\n case 2:\n message.value = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromPartial<I extends Exact<DeepPartial<MapRecord>, I>>(object: I): MapRecord {\n const message = createBaseMapRecord();\n message.key = object.key ?? \"\";\n message.value = object.value ?? \"\";\n return message;\n },\n};\n\nfunction createBaseMapRecords(): MapRecords {\n return { records: [] };\n}\n\nexport const MapRecords = {\n encode(message: MapRecords, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.records) {\n MapRecord.encode(v!, writer.uint32(10).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): MapRecords {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseMapRecords();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.records.push(MapRecord.decode(reader, reader.uint32()));\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromPartial<I extends Exact<DeepPartial<MapRecords>, I>>(object: I): MapRecords {\n const message = createBaseMapRecords();\n message.records = object.records?.map((e) => MapRecord.fromPartial(e)) || [];\n return message;\n },\n};\n\nfunction createBaseStringArray(): StringArray {\n return { value: [] };\n}\n\nexport const StringArray = {\n encode(message: StringArray, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n for (const v of message.value) {\n writer.uint32(10).string(v!);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): StringArray {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseStringArray();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.value.push(reader.string());\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromPartial<I extends Exact<DeepPartial<StringArray>, I>>(object: I): StringArray {\n const message = createBaseStringArray();\n message.value = object.value?.map((e) => e) || [];\n return message;\n },\n};\n\nfunction createBaseValue(): Value {\n return {\n intValue: undefined,\n longValue: undefined,\n floatValue: undefined,\n doubleValue: undefined,\n boolValue: undefined,\n stringValue: undefined,\n anyValue: undefined,\n mapValue: undefined,\n intPairValue: undefined,\n stringArrayValue: undefined,\n };\n}\n\nexport const Value = {\n encode(message: Value, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.intValue !== undefined) {\n writer.uint32(8).int32(message.intValue);\n }\n if (message.longValue !== undefined) {\n writer.uint32(16).int64(message.longValue);\n }\n if (message.floatValue !== undefined) {\n writer.uint32(29).float(message.floatValue);\n }\n if (message.doubleValue !== undefined) {\n writer.uint32(73).double(message.doubleValue);\n }\n if (message.boolValue !== undefined) {\n writer.uint32(32).bool(message.boolValue);\n }\n if (message.stringValue !== undefined) {\n writer.uint32(42).string(message.stringValue);\n }\n if (message.anyValue !== undefined) {\n Any.encode(message.anyValue, writer.uint32(50).fork()).ldelim();\n }\n if (message.mapValue !== undefined) {\n MapRecords.encode(message.mapValue, writer.uint32(58).fork()).ldelim();\n }\n if (message.intPairValue !== undefined) {\n writer.uint32(65).fixed64(message.intPairValue);\n }\n if (message.stringArrayValue !== undefined) {\n StringArray.encode(message.stringArrayValue, writer.uint32(82).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Value {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseValue();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.intValue = reader.int32();\n break;\n case 2:\n message.longValue = longToNumber(reader.int64() as Long);\n break;\n case 3:\n message.floatValue = reader.float();\n break;\n case 9:\n message.doubleValue = reader.double();\n break;\n case 4:\n message.boolValue = reader.bool();\n break;\n case 5:\n message.stringValue = reader.string();\n break;\n case 6:\n message.anyValue = Any.decode(reader, reader.uint32());\n break;\n case 7:\n message.mapValue = MapRecords.decode(reader, reader.uint32());\n break;\n case 8:\n message.intPairValue = longToNumber(reader.fixed64() as Long);\n break;\n case 10:\n message.stringArrayValue = StringArray.decode(reader, reader.uint32());\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromPartial<I extends Exact<DeepPartial<Value>, I>>(object: I): Value {\n const message = createBaseValue();\n message.intValue = object.intValue ?? undefined;\n message.longValue = object.longValue ?? undefined;\n message.floatValue = object.floatValue ?? undefined;\n message.doubleValue = object.doubleValue ?? undefined;\n message.boolValue = object.boolValue ?? undefined;\n message.stringValue = object.stringValue ?? undefined;\n message.anyValue =\n object.anyValue !== undefined && object.anyValue !== null ? Any.fromPartial(object.anyValue) : undefined;\n message.mapValue =\n object.mapValue !== undefined && object.mapValue !== null ? MapRecords.fromPartial(object.mapValue) : undefined;\n message.intPairValue = object.intPairValue ?? undefined;\n message.stringArrayValue =\n object.stringArrayValue !== undefined && object.stringArrayValue !== null\n ? StringArray.fromPartial(object.stringArrayValue)\n : undefined;\n return message;\n },\n};\n\ndeclare var self: any | undefined;\ndeclare var window: any | undefined;\ndeclare var global: any | undefined;\nvar globalThis: any = (() => {\n if (typeof globalThis !== \"undefined\") return globalThis;\n if (typeof self !== \"undefined\") return self;\n if (typeof window !== \"undefined\") return window;\n if (typeof global !== \"undefined\") return global;\n throw \"Unable to locate global object\";\n})();\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin\n ? T\n : T extends Array<infer U>\n ? Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U>\n ? ReadonlyArray<DeepPartial<U>>\n : T extends {}\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin\n ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & Record<Exclude<keyof I, KeysOfUnion<P>>, never>;\n\nfunction longToNumber(long: Long): number {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n return long.toNumber();\n}\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any;\n _m0.configure();\n}\n"]}
|
|
@@ -23,6 +23,8 @@ export declare enum LaunchData_EntryPoint {
|
|
|
23
23
|
PREVIEW_CANCEL = "PREVIEW_CANCEL",
|
|
24
24
|
MAP = "MAP",
|
|
25
25
|
BITMOJI_STICKERS = "BITMOJI_STICKERS",
|
|
26
|
+
POST_CAPTURE_PREVIEW = "POST_CAPTURE_PREVIEW",
|
|
27
|
+
POST_CAPTURE_TRANSCODING = "POST_CAPTURE_TRANSCODING",
|
|
26
28
|
UNRECOGNIZED = "UNRECOGNIZED"
|
|
27
29
|
}
|
|
28
30
|
export declare function launchData_EntryPointFromJSON(object: any): LaunchData_EntryPoint;
|
|
@@ -16,6 +16,8 @@ export var LaunchData_EntryPoint;
|
|
|
16
16
|
LaunchData_EntryPoint["PREVIEW_CANCEL"] = "PREVIEW_CANCEL";
|
|
17
17
|
LaunchData_EntryPoint["MAP"] = "MAP";
|
|
18
18
|
LaunchData_EntryPoint["BITMOJI_STICKERS"] = "BITMOJI_STICKERS";
|
|
19
|
+
LaunchData_EntryPoint["POST_CAPTURE_PREVIEW"] = "POST_CAPTURE_PREVIEW";
|
|
20
|
+
LaunchData_EntryPoint["POST_CAPTURE_TRANSCODING"] = "POST_CAPTURE_TRANSCODING";
|
|
19
21
|
LaunchData_EntryPoint["UNRECOGNIZED"] = "UNRECOGNIZED";
|
|
20
22
|
})(LaunchData_EntryPoint || (LaunchData_EntryPoint = {}));
|
|
21
23
|
export function launchData_EntryPointFromJSON(object) {
|
|
@@ -41,6 +43,12 @@ export function launchData_EntryPointFromJSON(object) {
|
|
|
41
43
|
case 6:
|
|
42
44
|
case "BITMOJI_STICKERS":
|
|
43
45
|
return LaunchData_EntryPoint.BITMOJI_STICKERS;
|
|
46
|
+
case 7:
|
|
47
|
+
case "POST_CAPTURE_PREVIEW":
|
|
48
|
+
return LaunchData_EntryPoint.POST_CAPTURE_PREVIEW;
|
|
49
|
+
case 8:
|
|
50
|
+
case "POST_CAPTURE_TRANSCODING":
|
|
51
|
+
return LaunchData_EntryPoint.POST_CAPTURE_TRANSCODING;
|
|
44
52
|
case -1:
|
|
45
53
|
case "UNRECOGNIZED":
|
|
46
54
|
default:
|
|
@@ -63,6 +71,10 @@ export function launchData_EntryPointToNumber(object) {
|
|
|
63
71
|
return 5;
|
|
64
72
|
case LaunchData_EntryPoint.BITMOJI_STICKERS:
|
|
65
73
|
return 6;
|
|
74
|
+
case LaunchData_EntryPoint.POST_CAPTURE_PREVIEW:
|
|
75
|
+
return 7;
|
|
76
|
+
case LaunchData_EntryPoint.POST_CAPTURE_TRANSCODING:
|
|
77
|
+
return 8;
|
|
66
78
|
default:
|
|
67
79
|
return 0;
|
|
68
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launchdata.js","sourceRoot":"","sources":["../../../../src/generated-proto/pb_schema/lenses/launchdata.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable */\nimport Long from \"long\";\nimport _m0 from \"protobufjs/minimal\";\nimport { Snappable } from \"./snappable\";\nimport { Lures } from \"./lures\";\nimport { UserData } from \"./user_data\";\nimport { PersistentStore } from \"./persistent_store\";\nimport { LaunchParams } from \"./launch_params\";\n\nexport const protobufPackage = \"snapchat.lenses\";\n\nexport interface LaunchData {\n snappable: Snappable | undefined;\n lures: Lures | undefined;\n userId: string;\n entryPoint: LaunchData_EntryPoint;\n userData: UserData | undefined;\n persistentStore: PersistentStore | undefined;\n launchParams: LaunchParams | undefined;\n apiDescriptors: LaunchData_ApiDescriptor[];\n}\n\nexport enum LaunchData_EntryPoint {\n LIVE_CAMERA = \"LIVE_CAMERA\",\n STORY_REPLY = \"STORY_REPLY\",\n CHAT_REPLY = \"CHAT_REPLY\",\n RESTART = \"RESTART\",\n PREVIEW_CANCEL = \"PREVIEW_CANCEL\",\n MAP = \"MAP\",\n BITMOJI_STICKERS = \"BITMOJI_STICKERS\",\n UNRECOGNIZED = \"UNRECOGNIZED\",\n}\n\nexport function launchData_EntryPointFromJSON(object: any): LaunchData_EntryPoint {\n switch (object) {\n case 0:\n case \"LIVE_CAMERA\":\n return LaunchData_EntryPoint.LIVE_CAMERA;\n case 1:\n case \"STORY_REPLY\":\n return LaunchData_EntryPoint.STORY_REPLY;\n case 2:\n case \"CHAT_REPLY\":\n return LaunchData_EntryPoint.CHAT_REPLY;\n case 3:\n case \"RESTART\":\n return LaunchData_EntryPoint.RESTART;\n case 4:\n case \"PREVIEW_CANCEL\":\n return LaunchData_EntryPoint.PREVIEW_CANCEL;\n case 5:\n case \"MAP\":\n return LaunchData_EntryPoint.MAP;\n case 6:\n case \"BITMOJI_STICKERS\":\n return LaunchData_EntryPoint.BITMOJI_STICKERS;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return LaunchData_EntryPoint.UNRECOGNIZED;\n }\n}\n\nexport function launchData_EntryPointToNumber(object: LaunchData_EntryPoint): number {\n switch (object) {\n case LaunchData_EntryPoint.LIVE_CAMERA:\n return 0;\n case LaunchData_EntryPoint.STORY_REPLY:\n return 1;\n case LaunchData_EntryPoint.CHAT_REPLY:\n return 2;\n case LaunchData_EntryPoint.RESTART:\n return 3;\n case LaunchData_EntryPoint.PREVIEW_CANCEL:\n return 4;\n case LaunchData_EntryPoint.MAP:\n return 5;\n case LaunchData_EntryPoint.BITMOJI_STICKERS:\n return 6;\n default:\n return 0;\n }\n}\n\nexport enum LaunchData_ApiDescriptor {\n /** NONE - Extend as appropriate */\n NONE = \"NONE\",\n /** EXPERIMENTAL - https://snapchat.quip.com/Z6pNAfq26OKk */\n EXPERIMENTAL = \"EXPERIMENTAL\",\n UNRECOGNIZED = \"UNRECOGNIZED\",\n}\n\nexport function launchData_ApiDescriptorFromJSON(object: any): LaunchData_ApiDescriptor {\n switch (object) {\n case 0:\n case \"NONE\":\n return LaunchData_ApiDescriptor.NONE;\n case 1:\n case \"EXPERIMENTAL\":\n return LaunchData_ApiDescriptor.EXPERIMENTAL;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return LaunchData_ApiDescriptor.UNRECOGNIZED;\n }\n}\n\nexport function launchData_ApiDescriptorToNumber(object: LaunchData_ApiDescriptor): number {\n switch (object) {\n case LaunchData_ApiDescriptor.NONE:\n return 0;\n case LaunchData_ApiDescriptor.EXPERIMENTAL:\n return 1;\n default:\n return 0;\n }\n}\n\nfunction createBaseLaunchData(): LaunchData {\n return {\n snappable: undefined,\n lures: undefined,\n userId: \"\",\n entryPoint: LaunchData_EntryPoint.LIVE_CAMERA,\n userData: undefined,\n persistentStore: undefined,\n launchParams: undefined,\n apiDescriptors: [],\n };\n}\n\nexport const LaunchData = {\n encode(message: LaunchData, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.snappable !== undefined) {\n Snappable.encode(message.snappable, writer.uint32(10).fork()).ldelim();\n }\n if (message.lures !== undefined) {\n Lures.encode(message.lures, writer.uint32(18).fork()).ldelim();\n }\n if (message.userId !== \"\") {\n writer.uint32(26).string(message.userId);\n }\n if (message.entryPoint !== LaunchData_EntryPoint.LIVE_CAMERA) {\n writer.uint32(32).int32(launchData_EntryPointToNumber(message.entryPoint));\n }\n if (message.userData !== undefined) {\n UserData.encode(message.userData, writer.uint32(42).fork()).ldelim();\n }\n if (message.persistentStore !== undefined) {\n PersistentStore.encode(message.persistentStore, writer.uint32(50).fork()).ldelim();\n }\n if (message.launchParams !== undefined) {\n LaunchParams.encode(message.launchParams, writer.uint32(58).fork()).ldelim();\n }\n writer.uint32(66).fork();\n for (const v of message.apiDescriptors) {\n writer.int32(launchData_ApiDescriptorToNumber(v));\n }\n writer.ldelim();\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): LaunchData {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaunchData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.snappable = Snappable.decode(reader, reader.uint32());\n break;\n case 2:\n message.lures = Lures.decode(reader, reader.uint32());\n break;\n case 3:\n message.userId = reader.string();\n break;\n case 4:\n message.entryPoint = launchData_EntryPointFromJSON(reader.int32());\n break;\n case 5:\n message.userData = UserData.decode(reader, reader.uint32());\n break;\n case 6:\n message.persistentStore = PersistentStore.decode(reader, reader.uint32());\n break;\n case 7:\n message.launchParams = LaunchParams.decode(reader, reader.uint32());\n break;\n case 8:\n if ((tag & 7) === 2) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.apiDescriptors.push(launchData_ApiDescriptorFromJSON(reader.int32()));\n }\n } else {\n message.apiDescriptors.push(launchData_ApiDescriptorFromJSON(reader.int32()));\n }\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromPartial<I extends Exact<DeepPartial<LaunchData>, I>>(object: I): LaunchData {\n const message = createBaseLaunchData();\n message.snappable =\n object.snappable !== undefined && object.snappable !== null ? Snappable.fromPartial(object.snappable) : undefined;\n message.lures = object.lures !== undefined && object.lures !== null ? Lures.fromPartial(object.lures) : undefined;\n message.userId = object.userId ?? \"\";\n message.entryPoint = object.entryPoint ?? LaunchData_EntryPoint.LIVE_CAMERA;\n message.userData =\n object.userData !== undefined && object.userData !== null ? UserData.fromPartial(object.userData) : undefined;\n message.persistentStore =\n object.persistentStore !== undefined && object.persistentStore !== null\n ? PersistentStore.fromPartial(object.persistentStore)\n : undefined;\n message.launchParams =\n object.launchParams !== undefined && object.launchParams !== null\n ? LaunchParams.fromPartial(object.launchParams)\n : undefined;\n message.apiDescriptors = object.apiDescriptors?.map((e) => e) || [];\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin\n ? T\n : T extends Array<infer U>\n ? Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U>\n ? ReadonlyArray<DeepPartial<U>>\n : T extends { $case: string }\n ? { [K in keyof Omit<T, \"$case\">]?: DeepPartial<T[K]> } & { $case: T[\"$case\"] }\n : T extends {}\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin\n ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & Record<Exclude<keyof I, KeysOfUnion<P>>, never>;\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any;\n _m0.configure();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"launchdata.js","sourceRoot":"","sources":["../../../../src/generated-proto/pb_schema/lenses/launchdata.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable */\nimport Long from \"long\";\nimport _m0 from \"protobufjs/minimal\";\nimport { Snappable } from \"./snappable\";\nimport { Lures } from \"./lures\";\nimport { UserData } from \"./user_data\";\nimport { PersistentStore } from \"./persistent_store\";\nimport { LaunchParams } from \"./launch_params\";\n\nexport const protobufPackage = \"snapchat.lenses\";\n\nexport interface LaunchData {\n snappable: Snappable | undefined;\n lures: Lures | undefined;\n userId: string;\n entryPoint: LaunchData_EntryPoint;\n userData: UserData | undefined;\n persistentStore: PersistentStore | undefined;\n launchParams: LaunchParams | undefined;\n apiDescriptors: LaunchData_ApiDescriptor[];\n}\n\nexport enum LaunchData_EntryPoint {\n LIVE_CAMERA = \"LIVE_CAMERA\",\n STORY_REPLY = \"STORY_REPLY\",\n CHAT_REPLY = \"CHAT_REPLY\",\n RESTART = \"RESTART\",\n PREVIEW_CANCEL = \"PREVIEW_CANCEL\",\n MAP = \"MAP\",\n BITMOJI_STICKERS = \"BITMOJI_STICKERS\",\n POST_CAPTURE_PREVIEW = \"POST_CAPTURE_PREVIEW\",\n POST_CAPTURE_TRANSCODING = \"POST_CAPTURE_TRANSCODING\",\n UNRECOGNIZED = \"UNRECOGNIZED\",\n}\n\nexport function launchData_EntryPointFromJSON(object: any): LaunchData_EntryPoint {\n switch (object) {\n case 0:\n case \"LIVE_CAMERA\":\n return LaunchData_EntryPoint.LIVE_CAMERA;\n case 1:\n case \"STORY_REPLY\":\n return LaunchData_EntryPoint.STORY_REPLY;\n case 2:\n case \"CHAT_REPLY\":\n return LaunchData_EntryPoint.CHAT_REPLY;\n case 3:\n case \"RESTART\":\n return LaunchData_EntryPoint.RESTART;\n case 4:\n case \"PREVIEW_CANCEL\":\n return LaunchData_EntryPoint.PREVIEW_CANCEL;\n case 5:\n case \"MAP\":\n return LaunchData_EntryPoint.MAP;\n case 6:\n case \"BITMOJI_STICKERS\":\n return LaunchData_EntryPoint.BITMOJI_STICKERS;\n case 7:\n case \"POST_CAPTURE_PREVIEW\":\n return LaunchData_EntryPoint.POST_CAPTURE_PREVIEW;\n case 8:\n case \"POST_CAPTURE_TRANSCODING\":\n return LaunchData_EntryPoint.POST_CAPTURE_TRANSCODING;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return LaunchData_EntryPoint.UNRECOGNIZED;\n }\n}\n\nexport function launchData_EntryPointToNumber(object: LaunchData_EntryPoint): number {\n switch (object) {\n case LaunchData_EntryPoint.LIVE_CAMERA:\n return 0;\n case LaunchData_EntryPoint.STORY_REPLY:\n return 1;\n case LaunchData_EntryPoint.CHAT_REPLY:\n return 2;\n case LaunchData_EntryPoint.RESTART:\n return 3;\n case LaunchData_EntryPoint.PREVIEW_CANCEL:\n return 4;\n case LaunchData_EntryPoint.MAP:\n return 5;\n case LaunchData_EntryPoint.BITMOJI_STICKERS:\n return 6;\n case LaunchData_EntryPoint.POST_CAPTURE_PREVIEW:\n return 7;\n case LaunchData_EntryPoint.POST_CAPTURE_TRANSCODING:\n return 8;\n default:\n return 0;\n }\n}\n\nexport enum LaunchData_ApiDescriptor {\n /** NONE - Extend as appropriate */\n NONE = \"NONE\",\n /** EXPERIMENTAL - https://snapchat.quip.com/Z6pNAfq26OKk */\n EXPERIMENTAL = \"EXPERIMENTAL\",\n UNRECOGNIZED = \"UNRECOGNIZED\",\n}\n\nexport function launchData_ApiDescriptorFromJSON(object: any): LaunchData_ApiDescriptor {\n switch (object) {\n case 0:\n case \"NONE\":\n return LaunchData_ApiDescriptor.NONE;\n case 1:\n case \"EXPERIMENTAL\":\n return LaunchData_ApiDescriptor.EXPERIMENTAL;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return LaunchData_ApiDescriptor.UNRECOGNIZED;\n }\n}\n\nexport function launchData_ApiDescriptorToNumber(object: LaunchData_ApiDescriptor): number {\n switch (object) {\n case LaunchData_ApiDescriptor.NONE:\n return 0;\n case LaunchData_ApiDescriptor.EXPERIMENTAL:\n return 1;\n default:\n return 0;\n }\n}\n\nfunction createBaseLaunchData(): LaunchData {\n return {\n snappable: undefined,\n lures: undefined,\n userId: \"\",\n entryPoint: LaunchData_EntryPoint.LIVE_CAMERA,\n userData: undefined,\n persistentStore: undefined,\n launchParams: undefined,\n apiDescriptors: [],\n };\n}\n\nexport const LaunchData = {\n encode(message: LaunchData, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.snappable !== undefined) {\n Snappable.encode(message.snappable, writer.uint32(10).fork()).ldelim();\n }\n if (message.lures !== undefined) {\n Lures.encode(message.lures, writer.uint32(18).fork()).ldelim();\n }\n if (message.userId !== \"\") {\n writer.uint32(26).string(message.userId);\n }\n if (message.entryPoint !== LaunchData_EntryPoint.LIVE_CAMERA) {\n writer.uint32(32).int32(launchData_EntryPointToNumber(message.entryPoint));\n }\n if (message.userData !== undefined) {\n UserData.encode(message.userData, writer.uint32(42).fork()).ldelim();\n }\n if (message.persistentStore !== undefined) {\n PersistentStore.encode(message.persistentStore, writer.uint32(50).fork()).ldelim();\n }\n if (message.launchParams !== undefined) {\n LaunchParams.encode(message.launchParams, writer.uint32(58).fork()).ldelim();\n }\n writer.uint32(66).fork();\n for (const v of message.apiDescriptors) {\n writer.int32(launchData_ApiDescriptorToNumber(v));\n }\n writer.ldelim();\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): LaunchData {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseLaunchData();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.snappable = Snappable.decode(reader, reader.uint32());\n break;\n case 2:\n message.lures = Lures.decode(reader, reader.uint32());\n break;\n case 3:\n message.userId = reader.string();\n break;\n case 4:\n message.entryPoint = launchData_EntryPointFromJSON(reader.int32());\n break;\n case 5:\n message.userData = UserData.decode(reader, reader.uint32());\n break;\n case 6:\n message.persistentStore = PersistentStore.decode(reader, reader.uint32());\n break;\n case 7:\n message.launchParams = LaunchParams.decode(reader, reader.uint32());\n break;\n case 8:\n if ((tag & 7) === 2) {\n const end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2) {\n message.apiDescriptors.push(launchData_ApiDescriptorFromJSON(reader.int32()));\n }\n } else {\n message.apiDescriptors.push(launchData_ApiDescriptorFromJSON(reader.int32()));\n }\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromPartial<I extends Exact<DeepPartial<LaunchData>, I>>(object: I): LaunchData {\n const message = createBaseLaunchData();\n message.snappable =\n object.snappable !== undefined && object.snappable !== null ? Snappable.fromPartial(object.snappable) : undefined;\n message.lures = object.lures !== undefined && object.lures !== null ? Lures.fromPartial(object.lures) : undefined;\n message.userId = object.userId ?? \"\";\n message.entryPoint = object.entryPoint ?? LaunchData_EntryPoint.LIVE_CAMERA;\n message.userData =\n object.userData !== undefined && object.userData !== null ? UserData.fromPartial(object.userData) : undefined;\n message.persistentStore =\n object.persistentStore !== undefined && object.persistentStore !== null\n ? PersistentStore.fromPartial(object.persistentStore)\n : undefined;\n message.launchParams =\n object.launchParams !== undefined && object.launchParams !== null\n ? LaunchParams.fromPartial(object.launchParams)\n : undefined;\n message.apiDescriptors = object.apiDescriptors?.map((e) => e) || [];\n return message;\n },\n};\n\ntype Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;\n\nexport type DeepPartial<T> = T extends Builtin\n ? T\n : T extends Array<infer U>\n ? Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U>\n ? ReadonlyArray<DeepPartial<U>>\n : T extends { $case: string }\n ? { [K in keyof Omit<T, \"$case\">]?: DeepPartial<T[K]> } & { $case: T[\"$case\"] }\n : T extends {}\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin\n ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & Record<Exclude<keyof I, KeysOfUnion<P>>, never>;\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any;\n _m0.configure();\n}\n"]}
|
|
@@ -153,9 +153,14 @@ export class HandlerChainBuilder {
|
|
|
153
153
|
// operation to be interrupted by an abort signal. For example, we might be calling the inner
|
|
154
154
|
// handler as a side-effect which we want to continue after the outer handler has completed.
|
|
155
155
|
//
|
|
156
|
+
// In this cases, we'll treat the inner handler as having completed immediately -- as far as the
|
|
157
|
+
// outer handler is concerned, the inner handler is a no-op. This means that when the outer handler
|
|
158
|
+
// completes, `maybeAbort` will not send an abort signal to the inner handler.
|
|
159
|
+
//
|
|
156
160
|
// A concrete example: returning a value from cache immediately, but then calling the inner handler
|
|
157
161
|
// as a side-effect to refresh the cache "in the background."
|
|
158
|
-
|
|
162
|
+
if (metadata === null || metadata === void 0 ? void 0 : metadata.isSideEffect)
|
|
163
|
+
innerCompleted = true;
|
|
159
164
|
// To help Handler authors out, we'll do some bookkeeping and cleanup for them – if they forget to
|
|
160
165
|
// remove an abort event listener, we'll remove it for them when the Promise they return resolves.
|
|
161
166
|
// Note: No need to proxy removeEventListener, since removing a non-existent listener just no-ops.
|
|
@@ -176,7 +181,7 @@ export class HandlerChainBuilder {
|
|
|
176
181
|
};
|
|
177
182
|
const innerResponse = Reflect.apply(target, thisArg, [
|
|
178
183
|
req,
|
|
179
|
-
Object.assign(Object.assign({}, metadata), {
|
|
184
|
+
Object.assign(Object.assign({}, metadata), { isSideEffect: false, signal }),
|
|
180
185
|
]);
|
|
181
186
|
// Using `finally` is more idiomatic, but causes trouble in some environments (e.g. some testing
|
|
182
187
|
// runtimes which detect uncaught rejected promises).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandlerChainBuilder.js","sourceRoot":"","sources":["../../src/handlers/HandlerChainBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["export type RequestMetadata =\n | {\n signal?: AbortSignal | null | undefined;\n /**\n * When calling a handler, if that handler is part of a handler chain, then by default an abort signal will be\n * sent to that handler if another handler higher up in the chain completes first. Usually this is desirable,\n * since we know if a handler higher up in the chain has completed and returned a response to its caller, then\n * the response from all the handlers below it in the chain will not be used.\n *\n * But in some cases, a handler in a handler chain wants to call the next handler in the chain as a\n * side-effect. If a handler is called as a side-effect, it will not be sent an abort signal when handlers\n * higher up in the chain complete.\n *\n * For example: a caching handler might return a cached value immediately, but then call the next handler as\n * a side-effect to fetch an updated value to refresh the cache in the background. In that case, the next\n * handler should not be sent an abort signal when the caching handler returns the cached value.\n */\n isSideEffect?: boolean;\n }\n | undefined;\nexport type Handler<Req, Res, Meta extends RequestMetadata> = (req: Req, metadata?: Meta) => Promise<Res>;\nexport type ChainableHandler<Req, Res, NextReq, NextRes, Meta extends RequestMetadata | undefined> = (\n next: Handler<NextReq, NextRes, Meta>\n) => Handler<Req, Res, Meta>;\n\n/**\n * Creates a Handler chain – a series of functions composed such that each function may call a supplied `next` function\n * which passes execution down the chain. When the final Handler in the chain returns, execution passes back up the\n * chain eventually returning to the caller.\n *\n * Each Handler chain begins with a \"raw\" Handler – this is a function which takes some request and returns some\n * response. A chain is then created by supplying a series of mapping functions – the ChainableHandler type – which will\n * be called with the `next` Handler in the chain.\n *\n * Ex:\n * ```ts\n * const handler = (request: string, metadata?: RequestMetadata) => Promise.resolve(`Responded to ${request}`)\n * const chainable = (next: Handler<string, string>) => (request: string, metadata?: RequestMetadata) => {\n * return next(`modified ${request}`, metadata)\n * }\n *\n * const chain = new HandlerChainBuilder(handler)\n * .map(chainable)\n * .handler\n *\n * const response = await chain('hello')\n * expect(response).toBe('Responded to modified hello; 0')\n * ```\n * You can largely ignore the `metadata` argument present in the above example. This is the mechanism by which an\n * AbortSignal is passed to each Handler in the chain, but the only real requirement when implementing a Handler is\n * to pass this argument along to the `next` function. In fact, many Handlers will want to be generic over the type\n * of metadata:\n * ```ts\n * const chainable = <Meta>(next: Handler<string, string, Meta>) => (request: string, metadata: Meta) => {\n * return next(`modified ${request}`, metadata)\n * }\n * ```\n * Actually, it's a very good idea for Handlers to be as generic as possible, since that will allow greater re-use. In\n * the above example, we don't do anything with the response from `next`, so we can let that be generic, too:\n * ```ts\n * const chainable = <Res, Meta>(next: Handler<string, Res, Meta>) => (request: string, metadata: Meta) => {\n * return next(`modified ${request}`, metadata)\n * }\n * ```\n * Now if some other Handler in the chain decides to return a different response type, our Handler won't require any\n * changes to compile.\n *\n * ---\n *\n * Since execution passes from handler to handler in the chain, and then back, handlers have the opportunity to modify\n * or observe both the request and response. This might be useful for implementing serialization/deserialization, but\n * the simplest example that demonstrates this feature is measuring request latency:\n * ```ts\n * const latencyMeasuringHandler = <Req, Res, Meta>(next: Handler<Req, Res, Meta>) =>\n * async (req: Req, metadata: Meta) => {\n * const start = performance.now()\n * const response = await next(req, metadata)\n * const latency = performance.now() - start\n * console.log(`latency for request ${request} was ${latency}`)\n * return response\n * }\n * ```\n * Execution is first passed to our measuring handler, which marks the `start` timestamp. Then it passes execution on\n * down the chain. After a response is received (by some handler down the chain), execution passes back up to our\n * handler here, which records the amount of time spent inside `next`.\n *\n * ---\n *\n * Handlers may also abort requests. They can do this in two ways:\n * 1. Create an `AbortController` and add its `AbortSignal` to the `metadata` object when calling `next`.\n * 2. Resolve its returned Promise.\n *\n * The first approach is straightforward, but the second may benefit from an example – the simplest is a handler which\n * will timeout a request:\n * ```ts\n * const timeoutHandler = <Req, Res, Meta>(next: Handler<Req, Res, Meta>) => (req: Req, metadata: Meta) => {\n * return Promise.race([\n * next(req, metadata),\n * sleep(1000),\n * ])\n * }\n * ```\n * The Promise returned by this handler will resolve either when the `next` handler resolves or 1 second has elapsed,\n * whichever happens first. If the timeout happens first, we want the `next` handler to recieve an abort signal so that\n * it can terminate early (since its result is no longer needed).\n *\n * HandlerChainBuilder makes this happen by observing when each handler completes, and sending an abort signal to all\n * the handlers \"downstream\" from the aborting handler.\n */\nexport class HandlerChainBuilder<Req, Res, Meta extends RequestMetadata> {\n private readonly inner: Handler<Req, Res, Meta>;\n\n constructor(inner: (req: Req, metadata: Meta) => Promise<Res>) {\n // The TS compiler has the following behavior:\n //\n // class Infer<T extends SomeType | undefined> { constructor(f: (t?: T) => void) {} }\n // const f = (t?: SomeType) => {}\n // const i = new Infer(f)\n //\n // The type of `i` is inferred to be `Infer<SomeType>` instead of `Infer<SomeType | undefined>`, even though the\n // type of `f`'s argument is `SomeType | undefined`. This seems to be a bug in type inference. Note that making\n // the constructor argument required gives the expected behavior:\n //\n // class Infer<T extends SomeType | undefined> { constructor(f: (t: T) => void) {} }\n // const f = (t?: SomeType) => {}\n // const i = new Infer(f)\n //\n // Now `i` is inferred to be `Infer<SomeType | undefined>`.\n //\n // This has consequences if the inferred type T is used elsewhere in the class.\n //\n // In this case, we need to make sure that if the given `inner` function marks the metadata argument as\n // optional, that HandlerChainBuilder correctly infers that the Meta type includes undefined. So we don't mark\n // metadata as optional, and so we must cast to `Handler` (which does mark it as optional).\n //\n // Safety: We're adding `| undefined` to the metadata type, which may be unsafe – `undefined` may not be\n // assignable to Meta. But when handling the argument of type Meta, we simply pass it through from handler to\n // handler – we never call `inner` without passing the metadata argument we've received from some call to an\n // outer handler. The typing visible to callers remains safe.\n this.inner = inner as Handler<Req, Res, Meta>;\n }\n\n get handler(): Handler<Req, Res, Meta> {\n return this.inner;\n }\n\n map<PriorReq, PriorRes>(\n outer: ChainableHandler<PriorReq, PriorRes, Req, Res, Meta>\n ): HandlerChainBuilder<PriorReq, PriorRes, Meta> {\n // To create the next handler in the chain, we compose the \"outer\" handler with the \"inner\" handler.\n //\n // The outer handler observes its own completion and sends an abort signal to the inner handler when it has\n // resolved. To prevent unexpected behavior, the inner handler also observes its own completion, setting a flag\n // when it resolves so that – if it resolves before the outer handler – the outer handler can skip sending the\n // abort signal (since the inner handler has already completed).\n const outerHandler = (req: PriorReq, metadata: Meta): Promise<PriorRes> => {\n const abort = new AbortController();\n const signal = abort.signal;\n\n // It's important to not signal an abort to an inner handler which has already completed – it seems like\n // this would be a non-issue (shouldn't aborting after completion be a no-op?), but specifically for the\n // browser's implementation of `fetch`, aborting even after the `fetch` Promise resolves can cause an abort\n // error if e.g. the Fetch Response's body has not yet been read.\n //\n // So, for safety, we will only abort inner handlers which are still executing.\n let innerCompleted = false;\n\n const maybeAbort = () => {\n // Safety: we never give `abort` to anyone else, so we know if the signal is aborted, this function\n // has already run, so we can return early without fear of leaking. We also know if inner has completed,\n // it has already performed cleanup.\n if (signal.aborted || innerCompleted) return;\n\n // If we've gotten here, the outer handler has either completed, or we heard an abort event while the\n // inner handler is still executing – so we pass the abort signal down to the inner handler.\n abort.abort();\n metadata?.signal?.removeEventListener(\"abort\", maybeAbort);\n };\n\n metadata?.signal?.addEventListener(\"abort\", maybeAbort);\n\n const innerHandler = new Proxy(this.inner, {\n apply: (target, thisArg, args) => {\n const [req, metadata] = args as Parameters<typeof target>;\n\n // When calling the inner handler, we may not care about the result and don't want the handler's\n // operation to be interrupted by an abort signal. For example, we might be calling the inner\n // handler as a side-effect which we want to continue after the outer handler has completed.\n //\n // A concrete example: returning a value from cache immediately, but then calling the inner handler\n // as a side-effect to refresh the cache \"in the background.\"\n const innerSignal = metadata?.isSideEffect ? undefined : signal;\n\n // To help Handler authors out, we'll do some bookkeeping and cleanup for them – if they forget to\n // remove an abort event listener, we'll remove it for them when the Promise they return resolves.\n // Note: No need to proxy removeEventListener, since removing a non-existent listener just no-ops.\n const abortListeners: EventListenerOrEventListenerObject[] = [];\n signal.addEventListener = new Proxy(signal.addEventListener, {\n apply: (target, thisArg, args) => {\n abortListeners.push(args[1]);\n return Reflect.apply(target, thisArg, args);\n },\n });\n\n const cleanupAndMarkComplete = () => {\n // The only reason we listen to upstream aborts is to pass them to the inner handler – since the\n // inner handler has completed, we no longer need the listener.\n metadata?.signal?.removeEventListener(\"abort\", maybeAbort);\n abortListeners.forEach((listener) => signal.removeEventListener(\"abort\", listener));\n innerCompleted = true;\n };\n\n const innerResponse: ReturnType<typeof target> = Reflect.apply(target, thisArg, [\n req,\n { ...metadata, signal: innerSignal },\n ]);\n\n // Using `finally` is more idiomatic, but causes trouble in some environments (e.g. some testing\n // runtimes which detect uncaught rejected promises).\n innerResponse.catch(() => {}).then(cleanupAndMarkComplete);\n return innerResponse;\n },\n });\n\n const outerResponse = outer(innerHandler)(req, metadata);\n outerResponse.catch(() => {}).then(maybeAbort);\n return outerResponse;\n };\n return new HandlerChainBuilder(outerHandler as Handler<PriorReq, PriorRes, Meta>);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"HandlerChainBuilder.js","sourceRoot":"","sources":["../../src/handlers/HandlerChainBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["export type RequestMetadata =\n | {\n signal?: AbortSignal | null | undefined;\n /**\n * When calling a handler, if that handler is part of a handler chain, then by default an abort signal will be\n * sent to that handler if another handler higher up in the chain completes first. Usually this is desirable,\n * since we know if a handler higher up in the chain has completed and returned a response to its caller, then\n * the response from all the handlers below it in the chain will not be used.\n *\n * But in some cases, a handler in a handler chain wants to call the next handler in the chain as a\n * side-effect. If a handler is called as a side-effect, it will not be sent an abort signal when handlers\n * higher up in the chain complete.\n *\n * For example: a caching handler might return a cached value immediately, but then call the next handler as\n * a side-effect to fetch an updated value to refresh the cache in the background. In that case, the next\n * handler should not be sent an abort signal when the caching handler returns the cached value.\n */\n isSideEffect?: boolean;\n }\n | undefined;\nexport type Handler<Req, Res, Meta extends RequestMetadata> = (req: Req, metadata?: Meta) => Promise<Res>;\nexport type ChainableHandler<Req, Res, NextReq, NextRes, Meta extends RequestMetadata | undefined> = (\n next: Handler<NextReq, NextRes, Meta>\n) => Handler<Req, Res, Meta>;\n\n/**\n * Creates a Handler chain – a series of functions composed such that each function may call a supplied `next` function\n * which passes execution down the chain. When the final Handler in the chain returns, execution passes back up the\n * chain eventually returning to the caller.\n *\n * Each Handler chain begins with a \"raw\" Handler – this is a function which takes some request and returns some\n * response. A chain is then created by supplying a series of mapping functions – the ChainableHandler type – which will\n * be called with the `next` Handler in the chain.\n *\n * Ex:\n * ```ts\n * const handler = (request: string, metadata?: RequestMetadata) => Promise.resolve(`Responded to ${request}`)\n * const chainable = (next: Handler<string, string>) => (request: string, metadata?: RequestMetadata) => {\n * return next(`modified ${request}`, metadata)\n * }\n *\n * const chain = new HandlerChainBuilder(handler)\n * .map(chainable)\n * .handler\n *\n * const response = await chain('hello')\n * expect(response).toBe('Responded to modified hello; 0')\n * ```\n * You can largely ignore the `metadata` argument present in the above example. This is the mechanism by which an\n * AbortSignal is passed to each Handler in the chain, but the only real requirement when implementing a Handler is\n * to pass this argument along to the `next` function. In fact, many Handlers will want to be generic over the type\n * of metadata:\n * ```ts\n * const chainable = <Meta>(next: Handler<string, string, Meta>) => (request: string, metadata: Meta) => {\n * return next(`modified ${request}`, metadata)\n * }\n * ```\n * Actually, it's a very good idea for Handlers to be as generic as possible, since that will allow greater re-use. In\n * the above example, we don't do anything with the response from `next`, so we can let that be generic, too:\n * ```ts\n * const chainable = <Res, Meta>(next: Handler<string, Res, Meta>) => (request: string, metadata: Meta) => {\n * return next(`modified ${request}`, metadata)\n * }\n * ```\n * Now if some other Handler in the chain decides to return a different response type, our Handler won't require any\n * changes to compile.\n *\n * ---\n *\n * Since execution passes from handler to handler in the chain, and then back, handlers have the opportunity to modify\n * or observe both the request and response. This might be useful for implementing serialization/deserialization, but\n * the simplest example that demonstrates this feature is measuring request latency:\n * ```ts\n * const latencyMeasuringHandler = <Req, Res, Meta>(next: Handler<Req, Res, Meta>) =>\n * async (req: Req, metadata: Meta) => {\n * const start = performance.now()\n * const response = await next(req, metadata)\n * const latency = performance.now() - start\n * console.log(`latency for request ${request} was ${latency}`)\n * return response\n * }\n * ```\n * Execution is first passed to our measuring handler, which marks the `start` timestamp. Then it passes execution on\n * down the chain. After a response is received (by some handler down the chain), execution passes back up to our\n * handler here, which records the amount of time spent inside `next`.\n *\n * ---\n *\n * Handlers may also abort requests. They can do this in two ways:\n * 1. Create an `AbortController` and add its `AbortSignal` to the `metadata` object when calling `next`.\n * 2. Resolve its returned Promise.\n *\n * The first approach is straightforward, but the second may benefit from an example – the simplest is a handler which\n * will timeout a request:\n * ```ts\n * const timeoutHandler = <Req, Res, Meta>(next: Handler<Req, Res, Meta>) => (req: Req, metadata: Meta) => {\n * return Promise.race([\n * next(req, metadata),\n * sleep(1000),\n * ])\n * }\n * ```\n * The Promise returned by this handler will resolve either when the `next` handler resolves or 1 second has elapsed,\n * whichever happens first. If the timeout happens first, we want the `next` handler to recieve an abort signal so that\n * it can terminate early (since its result is no longer needed).\n *\n * HandlerChainBuilder makes this happen by observing when each handler completes, and sending an abort signal to all\n * the handlers \"downstream\" from the aborting handler.\n */\nexport class HandlerChainBuilder<Req, Res, Meta extends RequestMetadata> {\n private readonly inner: Handler<Req, Res, Meta>;\n\n constructor(inner: (req: Req, metadata: Meta) => Promise<Res>) {\n // The TS compiler has the following behavior:\n //\n // class Infer<T extends SomeType | undefined> { constructor(f: (t?: T) => void) {} }\n // const f = (t?: SomeType) => {}\n // const i = new Infer(f)\n //\n // The type of `i` is inferred to be `Infer<SomeType>` instead of `Infer<SomeType | undefined>`, even though the\n // type of `f`'s argument is `SomeType | undefined`. This seems to be a bug in type inference. Note that making\n // the constructor argument required gives the expected behavior:\n //\n // class Infer<T extends SomeType | undefined> { constructor(f: (t: T) => void) {} }\n // const f = (t?: SomeType) => {}\n // const i = new Infer(f)\n //\n // Now `i` is inferred to be `Infer<SomeType | undefined>`.\n //\n // This has consequences if the inferred type T is used elsewhere in the class.\n //\n // In this case, we need to make sure that if the given `inner` function marks the metadata argument as\n // optional, that HandlerChainBuilder correctly infers that the Meta type includes undefined. So we don't mark\n // metadata as optional, and so we must cast to `Handler` (which does mark it as optional).\n //\n // Safety: We're adding `| undefined` to the metadata type, which may be unsafe – `undefined` may not be\n // assignable to Meta. But when handling the argument of type Meta, we simply pass it through from handler to\n // handler – we never call `inner` without passing the metadata argument we've received from some call to an\n // outer handler. The typing visible to callers remains safe.\n this.inner = inner as Handler<Req, Res, Meta>;\n }\n\n get handler(): Handler<Req, Res, Meta> {\n return this.inner;\n }\n\n map<PriorReq, PriorRes>(\n outer: ChainableHandler<PriorReq, PriorRes, Req, Res, Meta>\n ): HandlerChainBuilder<PriorReq, PriorRes, Meta> {\n // To create the next handler in the chain, we compose the \"outer\" handler with the \"inner\" handler.\n //\n // The outer handler observes its own completion and sends an abort signal to the inner handler when it has\n // resolved. To prevent unexpected behavior, the inner handler also observes its own completion, setting a flag\n // when it resolves so that – if it resolves before the outer handler – the outer handler can skip sending the\n // abort signal (since the inner handler has already completed).\n const outerHandler = (req: PriorReq, metadata: Meta): Promise<PriorRes> => {\n const abort = new AbortController();\n const signal = abort.signal;\n\n // It's important to not signal an abort to an inner handler which has already completed – it seems like\n // this would be a non-issue (shouldn't aborting after completion be a no-op?), but specifically for the\n // browser's implementation of `fetch`, aborting even after the `fetch` Promise resolves can cause an abort\n // error if e.g. the Fetch Response's body has not yet been read.\n //\n // So, for safety, we will only abort inner handlers which are still executing.\n let innerCompleted = false;\n\n const maybeAbort = () => {\n // Safety: we never give `abort` to anyone else, so we know if the signal is aborted, this function\n // has already run, so we can return early without fear of leaking. We also know if inner has completed,\n // it has already performed cleanup.\n if (signal.aborted || innerCompleted) return;\n\n // If we've gotten here, the outer handler has either completed, or we heard an abort event while the\n // inner handler is still executing – so we pass the abort signal down to the inner handler.\n abort.abort();\n metadata?.signal?.removeEventListener(\"abort\", maybeAbort);\n };\n\n metadata?.signal?.addEventListener(\"abort\", maybeAbort);\n\n const innerHandler = new Proxy(this.inner, {\n apply: (target, thisArg, args) => {\n const [req, metadata] = args as Parameters<typeof target>;\n\n // When calling the inner handler, we may not care about the result and don't want the handler's\n // operation to be interrupted by an abort signal. For example, we might be calling the inner\n // handler as a side-effect which we want to continue after the outer handler has completed.\n //\n // In this cases, we'll treat the inner handler as having completed immediately -- as far as the\n // outer handler is concerned, the inner handler is a no-op. This means that when the outer handler\n // completes, `maybeAbort` will not send an abort signal to the inner handler.\n //\n // A concrete example: returning a value from cache immediately, but then calling the inner handler\n // as a side-effect to refresh the cache \"in the background.\"\n if (metadata?.isSideEffect) innerCompleted = true;\n\n // To help Handler authors out, we'll do some bookkeeping and cleanup for them – if they forget to\n // remove an abort event listener, we'll remove it for them when the Promise they return resolves.\n // Note: No need to proxy removeEventListener, since removing a non-existent listener just no-ops.\n const abortListeners: EventListenerOrEventListenerObject[] = [];\n signal.addEventListener = new Proxy(signal.addEventListener, {\n apply: (target, thisArg, args) => {\n abortListeners.push(args[1]);\n return Reflect.apply(target, thisArg, args);\n },\n });\n\n const cleanupAndMarkComplete = () => {\n // The only reason we listen to upstream aborts is to pass them to the inner handler – since the\n // inner handler has completed, we no longer need the listener.\n metadata?.signal?.removeEventListener(\"abort\", maybeAbort);\n abortListeners.forEach((listener) => signal.removeEventListener(\"abort\", listener));\n innerCompleted = true;\n };\n\n const innerResponse: ReturnType<typeof target> = Reflect.apply(target, thisArg, [\n req,\n // Side-effect state does not propagate down the handler chain -- each outer handler must set\n // this property on their own when calling their inner handler. One outer handler may treat its\n // inner handler as a side-effect, but that doesn't each subsequent handler in the chain should\n // be treated as a side-effect. In other words, passing isSideEffect is only relevant to the\n // HandlerChainBuilder (telling it not to abort the inner handler), and not to any subsequent\n // handlers in the chain.\n { ...metadata, isSideEffect: false, signal },\n ]);\n\n // Using `finally` is more idiomatic, but causes trouble in some environments (e.g. some testing\n // runtimes which detect uncaught rejected promises).\n innerResponse.catch(() => {}).then(cleanupAndMarkComplete);\n return innerResponse;\n },\n });\n\n const outerResponse = outer(innerHandler)(req, metadata);\n outerResponse.catch(() => {}).then(maybeAbort);\n return outerResponse;\n };\n return new HandlerChainBuilder(outerHandler as Handler<PriorReq, PriorRes, Meta>);\n }\n}\n"]}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
|
+
import { PageVisibility } from "../common/pageVisibility";
|
|
1
2
|
import { ChainableHandler, RequestMetadata } from "./HandlerChainBuilder";
|
|
2
3
|
export interface BatchingHandlerOptions<Req, BatchReq> {
|
|
3
4
|
batchReduce: (batch: BatchReq | undefined, req: Req) => BatchReq | Promise<BatchReq>;
|
|
4
5
|
isBatchComplete: (batch: BatchReq) => boolean;
|
|
5
6
|
maxBatchAge?: number;
|
|
6
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Determines whether to flush buffered requests when the page becomes hidden.
|
|
9
|
+
* `false` value indicates that page visibility handling is avoided, while
|
|
10
|
+
* a {@link PageVisibility} instance is used to subscribe to page visibility change events.
|
|
11
|
+
*/
|
|
12
|
+
pageVisibility: PageVisibility | false;
|
|
7
13
|
}
|
|
8
14
|
/**
|
|
9
15
|
* Accumulate requests into batches, which are then sent to the next handler in the chain. Batches are sent when either:
|
|
@@ -22,4 +28,4 @@ export interface BatchingHandlerOptions<Req, BatchReq> {
|
|
|
22
28
|
* @param options
|
|
23
29
|
* @returns {@link ChainableHandler}, suitable for use in {@link HandlerChainBuilder.map}
|
|
24
30
|
*/
|
|
25
|
-
export declare const createBatchingHandler: <Req, BatchReq, BatchRes, Meta extends RequestMetadata>({ batchReduce, isBatchComplete, maxBatchAge,
|
|
31
|
+
export declare const createBatchingHandler: <Req, BatchReq, BatchRes, Meta extends RequestMetadata>({ batchReduce, isBatchComplete, maxBatchAge, pageVisibility, }: BatchingHandlerOptions<Req, BatchReq>) => ChainableHandler<Req, void, BatchReq, BatchRes, Meta>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { isDuringVisibilityTransition, onPageHidden } from "../common/pageVisibility";
|
|
3
2
|
import { createMappingHandler } from "./mappingHandler";
|
|
4
3
|
/**
|
|
5
4
|
* Accumulate requests into batches, which are then sent to the next handler in the chain. Batches are sent when either:
|
|
@@ -18,9 +17,7 @@ import { createMappingHandler } from "./mappingHandler";
|
|
|
18
17
|
* @param options
|
|
19
18
|
* @returns {@link ChainableHandler}, suitable for use in {@link HandlerChainBuilder.map}
|
|
20
19
|
*/
|
|
21
|
-
export const createBatchingHandler = ({ batchReduce, isBatchComplete, maxBatchAge,
|
|
22
|
-
// Flush batches when the page is hidden by default.
|
|
23
|
-
const doFlushOnPageHidden = flushOnPageHidden !== null && flushOnPageHidden !== void 0 ? flushOnPageHidden : true;
|
|
20
|
+
export const createBatchingHandler = ({ batchReduce, isBatchComplete, maxBatchAge, pageVisibility, }) => {
|
|
24
21
|
// TODO: this should just be `number`, but we're picking up NodeJS types (@types/node) when building, so setTimeout
|
|
25
22
|
// gets a different return type than what it should have in the browser. We should build without NodeJS types, but
|
|
26
23
|
// that will require some fixes across the codebase.
|
|
@@ -30,7 +27,7 @@ export const createBatchingHandler = ({ batchReduce, isBatchComplete, maxBatchAg
|
|
|
30
27
|
const reducingHandler = createMappingHandler((request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
31
28
|
currentBatch = yield batchReduce(currentBatch, request);
|
|
32
29
|
return currentBatch;
|
|
33
|
-
}), 1);
|
|
30
|
+
}), pageVisibility, 1);
|
|
34
31
|
const batchAndSend = (next, request, metadata) => {
|
|
35
32
|
const batch = request ? batchReduce(currentBatch, request) : currentBatch;
|
|
36
33
|
if (!batch)
|
|
@@ -49,7 +46,7 @@ export const createBatchingHandler = ({ batchReduce, isBatchComplete, maxBatchAg
|
|
|
49
46
|
// Requests may be made while the page is transitioning to hidden – for example, the page is being unloaded and
|
|
50
47
|
// we're reporting final metrics. In this case, we need to skip batching and synchronously call `next` so that
|
|
51
48
|
// the request is not lost.
|
|
52
|
-
if (isDuringVisibilityTransition("hidden")
|
|
49
|
+
if (pageVisibility && pageVisibility.isDuringVisibilityTransition("hidden")) {
|
|
53
50
|
yield batchAndSend(next, request, metadata);
|
|
54
51
|
return;
|
|
55
52
|
}
|
|
@@ -63,8 +60,8 @@ export const createBatchingHandler = ({ batchReduce, isBatchComplete, maxBatchAg
|
|
|
63
60
|
const sendBatch = () => batchAndSend(next, undefined, metadata);
|
|
64
61
|
if (maxBatchAge !== undefined)
|
|
65
62
|
batchTimeout = setTimeout(sendBatch, maxBatchAge);
|
|
66
|
-
if (
|
|
67
|
-
clearOnHidden = onPageHidden(sendBatch);
|
|
63
|
+
if (pageVisibility)
|
|
64
|
+
clearOnHidden = pageVisibility.onPageHidden(sendBatch);
|
|
68
65
|
}
|
|
69
66
|
const handle = reducingHandler(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
70
67
|
if (!currentBatch)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batchingHandler.js","sourceRoot":"","sources":["../../src/handlers/batchingHandler.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"batchingHandler.js","sourceRoot":"","sources":["../../src/handlers/batchingHandler.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAcxD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAwD,EACzF,WAAW,EACX,eAAe,EACf,WAAW,EACX,cAAc,GACsB,EAAyD,EAAE;IAC/F,mHAAmH;IACnH,kHAAkH;IAClH,oDAAoD;IACpD,IAAI,YAA2C,CAAC;IAChD,IAAI,YAAY,GAAyB,SAAS,CAAC;IACnD,IAAI,aAAa,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IAE7B,MAAM,eAAe,GAAG,oBAAoB,CACxC,CAAO,OAAO,EAAE,EAAE;QACd,YAAY,GAAG,MAAM,WAAW,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,YAAY,CAAC;IACxB,CAAC,CAAA,EACD,cAAc,EACd,CAAC,CACJ,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,IAAuC,EAAE,OAAa,EAAE,QAAe,EAAE,EAAE;QAC7F,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAC1E,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,8GAA8G;QAC9G,uDAAuD;QACvD,MAAM,QAAQ,GACV,KAAK,YAAY,OAAO;YACpB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;YACtD,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEhD,YAAY,GAAG,SAAS,CAAC;QACzB,YAAY,CAAC,YAAY,CAAC,CAAC;QAC3B,aAAa,EAAE,CAAC;QAEhB,OAAO,QAAQ,CAAC;IACpB,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAO,OAAO,EAAE,QAAQ,EAAE,EAAE;QACzC,+GAA+G;QAC/G,8GAA8G;QAC9G,2BAA2B;QAC3B,IAAI,cAAc,IAAI,cAAc,CAAC,4BAA4B,CAAC,QAAQ,CAAC,EAAE;YACzE,MAAM,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC5C,OAAO;SACV;QAED,4GAA4G;QAC5G,gBAAgB;QAChB,EAAE;QACF,6BAA6B;QAC7B,6FAA6F;QAC7F,EAAE;QACF,IAAI,YAAY,KAAK,SAAS,EAAE;YAC5B,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YAChE,IAAI,WAAW,KAAK,SAAS;gBAAE,YAAY,GAAG,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACjF,IAAI,cAAc;gBAAE,aAAa,GAAG,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;SAC9E;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,GAAS,EAAE;YACtC,IAAI,CAAC,YAAY;gBAAE,OAAO;YAC1B,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;gBAAE,OAAO;YAC3C,MAAM,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAClD,CAAC,CAAA,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAA,CAAC;AACN,CAAC,CAAC","sourcesContent":["import { PageVisibility } from \"../common/pageVisibility\";\nimport { ChainableHandler, Handler, RequestMetadata } from \"./HandlerChainBuilder\";\nimport { createMappingHandler } from \"./mappingHandler\";\n\nexport interface BatchingHandlerOptions<Req, BatchReq> {\n batchReduce: (batch: BatchReq | undefined, req: Req) => BatchReq | Promise<BatchReq>;\n isBatchComplete: (batch: BatchReq) => boolean;\n maxBatchAge?: number;\n /**\n * Determines whether to flush buffered requests when the page becomes hidden.\n * `false` value indicates that page visibility handling is avoided, while\n * a {@link PageVisibility} instance is used to subscribe to page visibility change events.\n */\n pageVisibility: PageVisibility | false;\n}\n\n/**\n * Accumulate requests into batches, which are then sent to the next handler in the chain. Batches are sent when either:\n * - the given `isBatchComplete` function returns true, closing the current batch and sending it down the chain.\n * - an optional `maxBatchAge` time has elapsed since the first request in the batch was received.\n * - the page terminates.\n *\n * When handling a request, the Promise returned will resolve when that request has been successfully added to the\n * current batch – **NOT** when that batch has been successfully processed by the rest of the handler chain.\n *\n * The `next` handler in the chain will receive the batch and should handle any errors arising from further processing\n * on the batch (e.g. sending it to a server).\n *\n * **Note:** This handler does not support aborting handled requests via AbortSignal.\n *\n * @param options\n * @returns {@link ChainableHandler}, suitable for use in {@link HandlerChainBuilder.map}\n */\nexport const createBatchingHandler = <Req, BatchReq, BatchRes, Meta extends RequestMetadata>({\n batchReduce,\n isBatchComplete,\n maxBatchAge,\n pageVisibility,\n}: BatchingHandlerOptions<Req, BatchReq>): ChainableHandler<Req, void, BatchReq, BatchRes, Meta> => {\n // TODO: this should just be `number`, but we're picking up NodeJS types (@types/node) when building, so setTimeout\n // gets a different return type than what it should have in the browser. We should build without NodeJS types, but\n // that will require some fixes across the codebase.\n let batchTimeout: ReturnType<typeof setTimeout>;\n let currentBatch: BatchReq | undefined = undefined;\n let clearOnHidden = () => {};\n\n const reducingHandler = createMappingHandler<Req, BatchReq, void, Meta>(\n async (request) => {\n currentBatch = await batchReduce(currentBatch, request);\n return currentBatch;\n },\n pageVisibility,\n 1\n );\n\n const batchAndSend = (next: Handler<BatchReq, BatchRes, Meta>, request?: Req, metadata?: Meta) => {\n const batch = request ? batchReduce(currentBatch, request) : currentBatch;\n if (!batch) return;\n\n // `next` should handle its own errors – that is, the batchingHandler is meant to be placed in a handler chain\n // prior to any error logging, retrying, etc. handlers.\n const complete =\n batch instanceof Promise\n ? batch.then((b) => next(b, metadata)).catch(() => {})\n : next(batch, metadata).catch(() => {});\n\n currentBatch = undefined;\n clearTimeout(batchTimeout);\n clearOnHidden();\n\n return complete;\n };\n\n return (next) => async (request, metadata) => {\n // Requests may be made while the page is transitioning to hidden – for example, the page is being unloaded and\n // we're reporting final metrics. In this case, we need to skip batching and synchronously call `next` so that\n // the request is not lost.\n if (pageVisibility && pageVisibility.isDuringVisibilityTransition(\"hidden\")) {\n await batchAndSend(next, request, metadata);\n return;\n }\n\n // If this is the first request in a batch, we need to set up some callbacks to flush the batch when certain\n // events occur:\n //\n // - maxBatchAge time passes.\n // - page visibility transitions to hidden (which could indicate the page is being unloaded).\n //\n if (currentBatch === undefined) {\n const sendBatch = () => batchAndSend(next, undefined, metadata);\n if (maxBatchAge !== undefined) batchTimeout = setTimeout(sendBatch, maxBatchAge);\n if (pageVisibility) clearOnHidden = pageVisibility.onPageHidden(sendBatch);\n }\n\n const handle = reducingHandler(async () => {\n if (!currentBatch) return;\n if (!isBatchComplete(currentBatch)) return;\n await batchAndSend(next, undefined, metadata);\n });\n\n return handle(request, metadata);\n };\n};\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PageVisibility } from "../common/pageVisibility";
|
|
1
2
|
import { ChainableHandler, RequestMetadata } from "./HandlerChainBuilder";
|
|
2
3
|
/**
|
|
3
4
|
* Map from one request type to another, potentially asynchronously.
|
|
@@ -8,8 +9,11 @@ import { ChainableHandler, RequestMetadata } from "./HandlerChainBuilder";
|
|
|
8
9
|
* buffer could use a large amount of memory. Keep this in mind when using this handler.
|
|
9
10
|
*
|
|
10
11
|
* @param map Transform each request, may be sync or async.
|
|
12
|
+
* @param pageVisibility Determines whether to flush buffered requests when the page becomes hidden.
|
|
13
|
+
* `false` value indicates that page visibility handling is avoided, while
|
|
14
|
+
* a {@link PageVisibility} instance is used to subscribe to page visibility change events.
|
|
11
15
|
* @param maxMapConcurrency If the `map` function is async, it will be invoked at most this number of times
|
|
12
16
|
* concurrently. Setting this to 1 could be useful if it's important for `map` to be called in serial.
|
|
13
17
|
* @returns {@link ChainableHandler}, suitable for use in {@link HandlerChainBuilder.map}
|
|
14
18
|
*/
|
|
15
|
-
export declare const createMappingHandler: <Req, MappedReq, Res, Meta extends RequestMetadata>(map: (request: Req) => MappedReq | Promise<MappedReq>,
|
|
19
|
+
export declare const createMappingHandler: <Req, MappedReq, Res, Meta extends RequestMetadata>(map: (request: Req) => MappedReq | Promise<MappedReq>, pageVisibility: PageVisibility | false, maxMapConcurrency?: number) => ChainableHandler<Req, Res, MappedReq, Res, Meta>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { onPageHidden } from "../common/pageVisibility";
|
|
3
2
|
/**
|
|
4
3
|
* Map from one request type to another, potentially asynchronously.
|
|
5
4
|
*
|
|
@@ -9,11 +8,14 @@ import { onPageHidden } from "../common/pageVisibility";
|
|
|
9
8
|
* buffer could use a large amount of memory. Keep this in mind when using this handler.
|
|
10
9
|
*
|
|
11
10
|
* @param map Transform each request, may be sync or async.
|
|
11
|
+
* @param pageVisibility Determines whether to flush buffered requests when the page becomes hidden.
|
|
12
|
+
* `false` value indicates that page visibility handling is avoided, while
|
|
13
|
+
* a {@link PageVisibility} instance is used to subscribe to page visibility change events.
|
|
12
14
|
* @param maxMapConcurrency If the `map` function is async, it will be invoked at most this number of times
|
|
13
15
|
* concurrently. Setting this to 1 could be useful if it's important for `map` to be called in serial.
|
|
14
16
|
* @returns {@link ChainableHandler}, suitable for use in {@link HandlerChainBuilder.map}
|
|
15
17
|
*/
|
|
16
|
-
export const createMappingHandler = (map, maxMapConcurrency = Number.POSITIVE_INFINITY
|
|
18
|
+
export const createMappingHandler = (map, pageVisibility, maxMapConcurrency = Number.POSITIVE_INFINITY) => {
|
|
17
19
|
const buffer = [];
|
|
18
20
|
let mapConcurrency = 0;
|
|
19
21
|
const processRequest = (request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -42,8 +44,8 @@ export const createMappingHandler = (map, maxMapConcurrency = Number.POSITIVE_IN
|
|
|
42
44
|
});
|
|
43
45
|
// This may indicate that the page is being unloaded, in which case we may want to flush any buffered requests
|
|
44
46
|
// regardless of our max concurrency – otherwise those requests will be lost when the page terminates.
|
|
45
|
-
if (
|
|
46
|
-
onPageHidden(() => {
|
|
47
|
+
if (pageVisibility) {
|
|
48
|
+
pageVisibility.onPageHidden(() => {
|
|
47
49
|
while (buffer.length > 0)
|
|
48
50
|
processRequest(buffer.shift());
|
|
49
51
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mappingHandler.js","sourceRoot":"","sources":["../../src/handlers/mappingHandler.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"mappingHandler.js","sourceRoot":"","sources":["../../src/handlers/mappingHandler.ts"],"names":[],"mappings":";AASA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,GAAqD,EACrD,cAAsC,EACtC,oBAA4B,MAAM,CAAC,iBAAiB,EACJ,EAAE;IAClD,MAAM,MAAM,GAAiC,EAAE,CAAC;IAChD,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,MAAM,cAAc,GAAG,CAAO,OAAmC,EAAE,EAAE;QACjE,IAAI;YACA,cAAc,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAC7B,0GAA0G;YAC1G,wGAAwG;YACxG,wGAAwG;YACxG,gFAAgF;YAChF,IAAI,MAAM,YAAY,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC;iBACrD,IAAI,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACzC;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACzB;gBAAS;YACN,cAAc,EAAE,CAAC;SACpB;QACD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,GAAG,iBAAiB,EAAE;YAC5D,iGAAiG;YACjG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAG,CAAC,CAAC;SACnC;IACL,CAAC,CAAA,CAAC;IAEF,8GAA8G;IAC9G,sGAAsG;IACtG,IAAI,cAAc,EAAE;QAChB,cAAc,CAAC,YAAY,CAAC,GAAG,EAAE;YAC7B,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,cAAc,CAAC,MAAM,CAAC,KAAK,EAAG,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;KACN;IAED,OAAO,CAAC,IAAmC,EAAE,EAAE,CAAC,CAAC,OAAY,EAAE,QAAe,EAAE,EAAE;QAC9E,OAAO,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,MAAM,eAAe,GAA+B;gBAChD,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC;gBACvB,IAAI,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;gBAClF,MAAM;aACT,CAAC;YACF,IAAI,cAAc,GAAG,iBAAiB;gBAAE,cAAc,CAAC,eAAe,CAAC,CAAC;;gBACnE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC,CAAC","sourcesContent":["import { PageVisibility } from \"../common/pageVisibility\";\nimport { ChainableHandler, Handler, RequestMetadata } from \"./HandlerChainBuilder\";\n\ninterface MappableRequest<T> {\n map: () => T | Promise<T>;\n next: (request: T) => Promise<void>;\n reject: (reason: unknown) => void;\n}\n\n/**\n * Map from one request type to another, potentially asynchronously.\n *\n * **NOTE:** If `maxMapConcurrency` is set to some finite number, and more requests are handled than are allowed to\n * be concurrently mapped, the waiting requests will be placed into a unbounded buffer. If, for example, requests are\n * handled with high frequency, `maxMapConcurrency` is low, and the `map` function returns a long-running Promise, this\n * buffer could use a large amount of memory. Keep this in mind when using this handler.\n *\n * @param map Transform each request, may be sync or async.\n * @param pageVisibility Determines whether to flush buffered requests when the page becomes hidden.\n * `false` value indicates that page visibility handling is avoided, while\n * a {@link PageVisibility} instance is used to subscribe to page visibility change events.\n * @param maxMapConcurrency If the `map` function is async, it will be invoked at most this number of times\n * concurrently. Setting this to 1 could be useful if it's important for `map` to be called in serial.\n * @returns {@link ChainableHandler}, suitable for use in {@link HandlerChainBuilder.map}\n */\nexport const createMappingHandler = <Req, MappedReq, Res, Meta extends RequestMetadata>(\n map: (request: Req) => MappedReq | Promise<MappedReq>,\n pageVisibility: PageVisibility | false,\n maxMapConcurrency: number = Number.POSITIVE_INFINITY\n): ChainableHandler<Req, Res, MappedReq, Res, Meta> => {\n const buffer: MappableRequest<MappedReq>[] = [];\n let mapConcurrency = 0;\n\n const processRequest = async (request: MappableRequest<MappedReq>) => {\n try {\n mapConcurrency++;\n const mapped = request.map();\n // We want to make sure that if the mapping operation is not async, we don't introduce asynchronicity here\n // (which unfortunately happens even if you `await` a non-Promise value). This is important so that e.g.\n // handlers which run when the page is terminated can send requests synchronously, since the browser may\n // not pick up any async handlers registered to run on the following event loop.\n if (mapped instanceof Promise) request.next(await mapped);\n else if (mapped) request.next(mapped);\n } catch (error) {\n request.reject(error);\n } finally {\n mapConcurrency--;\n }\n while (buffer.length > 0 && mapConcurrency < maxMapConcurrency) {\n // Safety: we just checked for `buffer.length > 0`, so the shifted value will never be undefined.\n processRequest(buffer.shift()!);\n }\n };\n\n // This may indicate that the page is being unloaded, in which case we may want to flush any buffered requests\n // regardless of our max concurrency – otherwise those requests will be lost when the page terminates.\n if (pageVisibility) {\n pageVisibility.onPageHidden(() => {\n while (buffer.length > 0) processRequest(buffer.shift()!);\n });\n }\n\n return (next: Handler<MappedReq, Res, Meta>) => (request: Req, metadata?: Meta) => {\n return new Promise<Res>((resolve, reject) => {\n const mappableRequest: MappableRequest<MappedReq> = {\n map: () => map(request),\n next: (mappedRequest) => next(mappedRequest, metadata).then(resolve).catch(reject),\n reject,\n };\n if (mapConcurrency < maxMapConcurrency) processRequest(mappableRequest);\n else buffer.push(mappableRequest);\n });\n };\n};\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PageVisibility } from "../common/pageVisibility";
|
|
1
2
|
import { ChainableHandler, RequestMetadata } from "./HandlerChainBuilder";
|
|
2
3
|
/**
|
|
3
4
|
* Limit the rate at which requests are passed to the next handler in the chain.
|
|
@@ -15,6 +16,9 @@ import { ChainableHandler, RequestMetadata } from "./HandlerChainBuilder";
|
|
|
15
16
|
*
|
|
16
17
|
* @param duration In milliseconds. Requests will be passed to the next handler in the chain no faster than this. That
|
|
17
18
|
* is, if `duration` is `1000`, the next handler will be called at most once per second.
|
|
19
|
+
* @param pageVisibility Determines whether to flush buffered requests when the page becomes hidden.
|
|
20
|
+
* `false` value indicates that page visibility handling is avoided, while
|
|
21
|
+
* a {@link PageVisibility} instance is used to subscribe to page visibility change events.
|
|
18
22
|
* @returns {@link ChainableHandler}, suitable for use in {@link HandlerChainBuilder.map}
|
|
19
23
|
*/
|
|
20
|
-
export declare const createRateLimitingHandler: <Req, Res, Meta extends RequestMetadata>(duration: number,
|
|
24
|
+
export declare const createRateLimitingHandler: <Req, Res, Meta extends RequestMetadata>(duration: number, pageVisibility: PageVisibility | false) => ChainableHandler<Req, Res, Req, Res, Meta>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { isDuringVisibilityTransition } from "../common/pageVisibility";
|
|
3
2
|
import { createMappingHandler } from "./mappingHandler";
|
|
4
3
|
const delay = (duration) => new Promise((resolve) => setTimeout(resolve, duration));
|
|
5
4
|
/**
|
|
@@ -18,9 +17,12 @@ const delay = (duration) => new Promise((resolve) => setTimeout(resolve, duratio
|
|
|
18
17
|
*
|
|
19
18
|
* @param duration In milliseconds. Requests will be passed to the next handler in the chain no faster than this. That
|
|
20
19
|
* is, if `duration` is `1000`, the next handler will be called at most once per second.
|
|
20
|
+
* @param pageVisibility Determines whether to flush buffered requests when the page becomes hidden.
|
|
21
|
+
* `false` value indicates that page visibility handling is avoided, while
|
|
22
|
+
* a {@link PageVisibility} instance is used to subscribe to page visibility change events.
|
|
21
23
|
* @returns {@link ChainableHandler}, suitable for use in {@link HandlerChainBuilder.map}
|
|
22
24
|
*/
|
|
23
|
-
export const createRateLimitingHandler = (duration,
|
|
25
|
+
export const createRateLimitingHandler = (duration, pageVisibility) => {
|
|
24
26
|
let mostRecentSendTime = undefined;
|
|
25
27
|
const mappingHandler = createMappingHandler((request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
26
28
|
if (mostRecentSendTime !== undefined) {
|
|
@@ -30,12 +32,12 @@ export const createRateLimitingHandler = (duration, flushOnPageHidden = true) =>
|
|
|
30
32
|
}
|
|
31
33
|
mostRecentSendTime = Date.now();
|
|
32
34
|
return request;
|
|
33
|
-
}),
|
|
35
|
+
}), pageVisibility, 1);
|
|
34
36
|
return (next) => (request, metadata) => {
|
|
35
37
|
// Requests may be made while the page is transitioning to hidden – for example, the page is being unloaded and
|
|
36
38
|
// we're reporting final metrics. In this case, we need to skip rate limiting and synchronously call `next`
|
|
37
39
|
// so that the request is not lost.
|
|
38
|
-
if (isDuringVisibilityTransition("hidden")
|
|
40
|
+
if (pageVisibility && pageVisibility.isDuringVisibilityTransition("hidden"))
|
|
39
41
|
return next(request, metadata);
|
|
40
42
|
return mappingHandler(next)(request, metadata);
|
|
41
43
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rateLimitingHandler.js","sourceRoot":"","sources":["../../src/handlers/rateLimitingHandler.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"rateLimitingHandler.js","sourceRoot":"","sources":["../../src/handlers/rateLimitingHandler.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,KAAK,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAElG;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACrC,QAAgB,EAChB,cAAsC,EACI,EAAE;IAC5C,IAAI,kBAAkB,GAAuB,SAAS,CAAC;IAEvD,MAAM,cAAc,GAAG,oBAAoB,CACvC,CAAO,OAAO,EAAE,EAAE;QACd,IAAI,kBAAkB,KAAK,SAAS,EAAE;YAClC,MAAM,mBAAmB,GAAG,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB,CAAC,CAAC;YACzE,IAAI,mBAAmB,GAAG,CAAC;gBAAE,MAAM,KAAK,CAAC,mBAAmB,CAAC,CAAC;SACjE;QACD,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACnB,CAAC,CAAA,EACD,cAAc,EACd,CAAC,CACJ,CAAC;IAEF,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;QACnC,+GAA+G;QAC/G,2GAA2G;QAC3G,mCAAmC;QACnC,IAAI,cAAc,IAAI,cAAc,CAAC,4BAA4B,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC5G,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC,CAAC;AACN,CAAC,CAAC","sourcesContent":["import { PageVisibility } from \"../common/pageVisibility\";\nimport { ChainableHandler, RequestMetadata } from \"./HandlerChainBuilder\";\nimport { createMappingHandler } from \"./mappingHandler\";\n\nconst delay = (duration: number) => new Promise<void>((resolve) => setTimeout(resolve, duration));\n\n/**\n * Limit the rate at which requests are passed to the next handler in the chain.\n *\n * During any page transitions to \"hidden\" – possibly indicating the page is about to terminate – requests will not be\n * rate limited, to ensure that they are not lost.\n *\n * TODO: If there are requests in the queue waiting to be sent when the page transitions to \"hidden,\" these will not\n * be immediately sent. This means there still is an edge case in which a request may be lost on page termination. This\n * can be fixed with changes to `createMappingHandler`.\n *\n * **NOTE:** Under the hood, requests that come in faster than the set `duration` are placed in an unbounded buffer.\n * If many requests are made quickly and `duration` is long, this could result in high memory usage. Keep this in mind\n * when using this handler.\n *\n * @param duration In milliseconds. Requests will be passed to the next handler in the chain no faster than this. That\n * is, if `duration` is `1000`, the next handler will be called at most once per second.\n * @param pageVisibility Determines whether to flush buffered requests when the page becomes hidden.\n * `false` value indicates that page visibility handling is avoided, while\n * a {@link PageVisibility} instance is used to subscribe to page visibility change events.\n * @returns {@link ChainableHandler}, suitable for use in {@link HandlerChainBuilder.map}\n */\nexport const createRateLimitingHandler = <Req, Res, Meta extends RequestMetadata>(\n duration: number,\n pageVisibility: PageVisibility | false\n): ChainableHandler<Req, Res, Req, Res, Meta> => {\n let mostRecentSendTime: number | undefined = undefined;\n\n const mappingHandler = createMappingHandler<Req, Req, Res, Meta>(\n async (request) => {\n if (mostRecentSendTime !== undefined) {\n const millisUntilNextSend = duration - (Date.now() - mostRecentSendTime);\n if (millisUntilNextSend > 0) await delay(millisUntilNextSend);\n }\n mostRecentSendTime = Date.now();\n return request;\n },\n pageVisibility,\n 1\n );\n\n return (next) => (request, metadata) => {\n // Requests may be made while the page is transitioning to hidden – for example, the page is being unloaded and\n // we're reporting final metrics. In this case, we need to skip rate limiting and synchronously call `next`\n // so that the request is not lost.\n if (pageVisibility && pageVisibility.isDuringVisibilityTransition(\"hidden\")) return next(request, metadata);\n return mappingHandler(next)(request, metadata);\n };\n};\n"]}
|