@osdk/client 2.1.0-beta.3 → 2.1.0-beta.31
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/CHANGELOG.md +441 -0
- package/build/browser/Client.js +7 -0
- package/build/browser/Client.js.map +1 -1
- package/build/browser/Definitions.test.js +1 -0
- package/build/browser/Definitions.test.js.map +1 -1
- package/build/browser/Logger.js +0 -15
- package/build/browser/Logger.js.map +1 -1
- package/build/browser/MinimalClientContext.js +0 -15
- package/build/browser/MinimalClientContext.js.map +1 -1
- package/build/browser/ResultOrError.js +1 -0
- package/build/browser/ResultOrError.js.map +1 -1
- package/build/browser/SatisfiesSemver.js +0 -15
- package/build/browser/SatisfiesSemver.js.map +1 -1
- package/build/browser/SatisfiesSemver.test.js +1 -0
- package/build/browser/SatisfiesSemver.test.js.map +1 -1
- package/build/browser/__unstable/ConjureSupport.js +12 -6
- package/build/browser/__unstable/ConjureSupport.js.map +1 -1
- package/build/browser/__unstable/createBulkLinksAsyncIterFactory.js +6 -2
- package/build/browser/__unstable/createBulkLinksAsyncIterFactory.js.map +1 -1
- package/build/browser/actions/ActionValidationError.js +1 -1
- package/build/browser/actions/ActionValidationError.js.map +1 -1
- package/build/browser/actions/actions.test.js +85 -4
- package/build/browser/actions/actions.test.js.map +1 -1
- package/build/browser/actions/applyAction.js +3 -2
- package/build/browser/actions/applyAction.js.map +1 -1
- package/build/browser/createClient.js +50 -23
- package/build/browser/createClient.js.map +1 -1
- package/build/browser/createClient.test.js +25 -0
- package/build/browser/createClient.test.js.map +1 -1
- package/build/browser/createGeotimeSeriesProperty.js +5 -3
- package/build/browser/createGeotimeSeriesProperty.js.map +1 -1
- package/build/browser/createMediaReferenceProperty.js +47 -0
- package/build/browser/createMediaReferenceProperty.js.map +1 -0
- package/build/browser/createMinimalClient.js +9 -2
- package/build/browser/createMinimalClient.js.map +1 -1
- package/build/browser/createPlatformClient.js +1 -0
- package/build/browser/createPlatformClient.js.map +1 -1
- package/build/browser/createTimeseriesProperty.js +2 -1
- package/build/browser/createTimeseriesProperty.js.map +1 -1
- package/build/browser/definitions/LinkDefinitions.test.js +4 -0
- package/build/browser/definitions/LinkDefinitions.test.js.map +1 -1
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.js +106 -0
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.js.map +1 -0
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.test.js +100 -0
- package/build/browser/derivedProperties/createWithPropertiesObjectSet.test.js.map +1 -0
- package/build/browser/fetchMetadata.js +2 -0
- package/build/browser/fetchMetadata.js.map +1 -1
- package/build/browser/fetchMetadata.test.js +19 -0
- package/build/browser/fetchMetadata.test.js.map +1 -1
- package/build/browser/index.js +2 -1
- package/build/browser/index.js.map +1 -1
- package/build/browser/intellisense.test.helpers/callsQueryAcceptsObject.js +3 -1
- package/build/browser/intellisense.test.helpers/callsQueryAcceptsObject.js.map +1 -1
- package/build/browser/intellisense.test.js +5 -2
- package/build/browser/intellisense.test.js.map +1 -1
- package/build/browser/internal/conversions/legacyToModernSingleAggregationResult.js +3 -1
- package/build/browser/internal/conversions/legacyToModernSingleAggregationResult.js.map +1 -1
- package/build/browser/internal/conversions/modernToLegacyAggregationClause.js +2 -0
- package/build/browser/internal/conversions/modernToLegacyAggregationClause.js.map +1 -1
- package/build/browser/internal/conversions/modernToLegacyGroupByClause.js +1 -0
- package/build/browser/internal/conversions/modernToLegacyGroupByClause.js.map +1 -1
- package/build/browser/internal/conversions/modernToLegacyWhereClause.js +70 -21
- package/build/browser/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
- package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js +402 -14
- package/build/browser/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
- package/build/browser/object/AttachmentUpload.js +6 -7
- package/build/browser/object/AttachmentUpload.js.map +1 -1
- package/build/browser/object/Cache.js +27 -0
- package/build/browser/object/Cache.js.map +1 -1
- package/build/browser/object/Cache.test.js +10 -3
- package/build/browser/object/Cache.test.js.map +1 -1
- package/build/browser/object/SimpleCache.js +20 -0
- package/build/browser/object/SimpleCache.js.map +1 -1
- package/build/browser/object/aggregate.js +8 -10
- package/build/browser/object/aggregate.js.map +1 -1
- package/build/browser/object/aggregate.test.js +11 -9
- package/build/browser/object/aggregate.test.js.map +1 -1
- package/build/browser/object/attachment.test.js +1 -0
- package/build/browser/object/attachment.test.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/InterfaceHolder.js +0 -15
- package/build/browser/object/convertWireToOsdkObjects/InterfaceHolder.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/InternalSymbols.js +8 -3
- package/build/browser/object/convertWireToOsdkObjects/InternalSymbols.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/ObjectHolder.js +0 -15
- package/build/browser/object/convertWireToOsdkObjects/ObjectHolder.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js +4 -1
- package/build/browser/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/PropertyDescriptorRecord.js +0 -15
- package/build/browser/object/convertWireToOsdkObjects/PropertyDescriptorRecord.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js +42 -85
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.test.js +1 -6
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.test.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js +88 -88
- package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/getDollarAs.js +9 -3
- package/build/browser/object/convertWireToOsdkObjects/getDollarAs.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects/getDollarLink.js +15 -38
- package/build/browser/object/convertWireToOsdkObjects/getDollarLink.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects.js +53 -6
- package/build/browser/object/convertWireToOsdkObjects.js.map +1 -1
- package/build/browser/object/convertWireToOsdkObjects.test.js +197 -44
- package/build/browser/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/browser/object/fetchPage.js +42 -24
- package/build/browser/object/fetchPage.js.map +1 -1
- package/build/browser/object/fetchPage.test.js +80 -1
- package/build/browser/object/fetchPage.test.js.map +1 -1
- package/build/browser/object/fetchSingle.js +3 -0
- package/build/browser/object/fetchSingle.js.map +1 -1
- package/build/browser/object/geotimeseriesreference.test.js +2 -0
- package/build/browser/object/geotimeseriesreference.test.js.map +1 -1
- package/build/browser/object/media.test.js +55 -0
- package/build/browser/object/media.test.js.map +1 -0
- package/build/browser/object/mediaUpload.js +20 -0
- package/build/browser/object/mediaUpload.js.map +1 -0
- package/build/browser/object/object.test.js +203 -10
- package/build/browser/object/object.test.js.map +1 -1
- package/build/browser/object/timeseries.test.js +11 -0
- package/build/browser/object/timeseries.test.js.map +1 -1
- package/build/browser/objectSet/InterfaceObjectSet.test.js +65 -0
- package/build/browser/objectSet/InterfaceObjectSet.test.js.map +1 -0
- package/build/browser/objectSet/ObjectSet.test.js +400 -46
- package/build/browser/objectSet/ObjectSet.test.js.map +1 -1
- package/build/browser/objectSet/ObjectSetFactory.js +0 -15
- package/build/browser/objectSet/ObjectSetFactory.js.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.js +137 -80
- package/build/browser/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js +59 -29
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
- package/build/browser/objectSet/conjureUnionType.js +1 -0
- package/build/browser/objectSet/conjureUnionType.js.map +1 -1
- package/build/browser/objectSet/createObjectSet.js +31 -8
- package/build/browser/objectSet/createObjectSet.js.map +1 -1
- package/build/browser/ontology/OntologyProvider.js +1 -0
- package/build/browser/ontology/OntologyProvider.js.map +1 -1
- package/build/browser/ontology/StandardOntologyProvider.js +2 -0
- package/build/browser/ontology/StandardOntologyProvider.js.map +1 -1
- package/build/browser/ontology/StandardOntologyProvider.test.js +2 -0
- package/build/browser/ontology/StandardOntologyProvider.test.js.map +1 -1
- package/build/browser/ontology/loadActionMetadata.js +2 -1
- package/build/browser/ontology/loadActionMetadata.js.map +1 -1
- package/build/browser/ontology/loadFullObjectMetadata.js +2 -1
- package/build/browser/ontology/loadFullObjectMetadata.js.map +1 -1
- package/build/browser/ontology/loadInterfaceMetadata.js +2 -1
- package/build/browser/ontology/loadInterfaceMetadata.js.map +1 -1
- package/build/browser/ontology/loadQueryMetadata.js +2 -1
- package/build/browser/ontology/loadQueryMetadata.js.map +1 -1
- package/build/browser/ontology/makeConjureContext.js +1 -0
- package/build/browser/ontology/makeConjureContext.js.map +1 -1
- package/build/browser/pageRequestAsAsyncIter.js +1 -0
- package/build/browser/pageRequestAsAsyncIter.js.map +1 -1
- package/build/browser/public/internal.js +20 -0
- package/build/browser/public/internal.js.map +1 -0
- package/build/browser/public/unstable-do-not-use.js +1 -0
- package/build/browser/public/unstable-do-not-use.js.map +1 -1
- package/build/browser/public-utils/createAndFetchTempObjectSetRid.js +34 -0
- package/build/browser/public-utils/createAndFetchTempObjectSetRid.js.map +1 -0
- package/build/{esm/createAttachmentFromRid.js → browser/public-utils/hydrateAttachmentFromRid.js} +13 -6
- package/build/browser/public-utils/hydrateAttachmentFromRid.js.map +1 -0
- package/build/browser/public-utils/hydrateObjectSetFromRid.js +39 -0
- package/build/browser/public-utils/hydrateObjectSetFromRid.js.map +1 -0
- package/build/browser/queries/applyQuery.js +5 -5
- package/build/browser/queries/applyQuery.js.map +1 -1
- package/build/browser/queries/queries.test.js +9 -0
- package/build/browser/queries/queries.test.js.map +1 -1
- package/build/browser/queries/types.js +0 -15
- package/build/browser/queries/types.js.map +1 -1
- package/build/browser/tsserver.js +2 -1
- package/build/browser/tsserver.js.map +1 -1
- package/build/browser/util/ArrayElement.js +0 -15
- package/build/browser/util/ArrayElement.js.map +1 -1
- package/build/browser/util/NOOP.js +0 -15
- package/build/browser/util/NOOP.js.map +1 -1
- package/build/browser/util/NullableProps.js +0 -15
- package/build/browser/util/NullableProps.js.map +1 -1
- package/build/browser/util/UserAgent.js +2 -1
- package/build/browser/util/UserAgent.js.map +1 -1
- package/build/browser/util/WireObjectSet.js +2 -0
- package/build/browser/util/WireObjectSet.js.map +1 -1
- package/build/browser/util/addUserAgentAndRequestContextHeaders.js +1 -0
- package/build/browser/util/addUserAgentAndRequestContextHeaders.js.map +1 -1
- package/build/browser/util/augmentRequestContext.js +1 -0
- package/build/browser/util/augmentRequestContext.js.map +1 -1
- package/build/browser/util/datetimeConverters.js +60 -0
- package/build/browser/util/datetimeConverters.js.map +1 -0
- package/build/browser/util/datetimeConverters.test.js +76 -0
- package/build/browser/util/datetimeConverters.test.js.map +1 -0
- package/build/browser/util/interfaceUtils.js +21 -0
- package/build/browser/util/interfaceUtils.js.map +1 -0
- package/build/browser/util/isOntologyObjectV2.js +1 -0
- package/build/browser/util/isOntologyObjectV2.js.map +1 -1
- package/build/browser/util/isOsdkBaseObject.js +1 -0
- package/build/browser/util/isOsdkBaseObject.js.map +1 -1
- package/build/browser/util/isOsdkObject.js +1 -0
- package/build/browser/util/isOsdkObject.js.map +1 -1
- package/build/browser/util/objectSetUtils.js +26 -0
- package/build/browser/util/objectSetUtils.js.map +1 -0
- package/build/browser/util/partialBy.js +0 -15
- package/build/browser/util/partialBy.js.map +1 -1
- package/build/browser/util/streamutils.js +7 -0
- package/build/browser/util/streamutils.js.map +1 -1
- package/build/browser/util/timeseriesUtils.js +2 -1
- package/build/browser/util/timeseriesUtils.js.map +1 -1
- package/build/browser/util/toDataValue.js +28 -2
- package/build/browser/util/toDataValue.js.map +1 -1
- package/build/browser/util/toDataValue.test.js +14 -1
- package/build/browser/util/toDataValue.test.js.map +1 -1
- package/build/browser/util/toDataValueQueries.js +10 -1
- package/build/browser/util/toDataValueQueries.js.map +1 -1
- package/build/cjs/Client-BZcoRu7n.d.cts +67 -0
- package/build/cjs/chunk-L454XQQ7.cjs +1028 -0
- package/build/cjs/chunk-L454XQQ7.cjs.map +1 -0
- package/build/cjs/chunk-RDXQTUTR.cjs +466 -0
- package/build/cjs/chunk-RDXQTUTR.cjs.map +1 -0
- package/build/cjs/index.cjs +1664 -0
- package/build/cjs/index.cjs.map +1 -0
- package/build/cjs/index.d.cts +85 -0
- package/build/cjs/public/internal.cjs +35 -0
- package/build/cjs/public/internal.cjs.map +1 -0
- package/build/cjs/public/internal.d.cts +33 -0
- package/build/cjs/public/unstable-do-not-use.cjs +12 -0
- package/build/cjs/public/unstable-do-not-use.cjs.map +1 -0
- package/build/cjs/public/unstable-do-not-use.d.cts +5 -0
- package/build/esm/Client.js +7 -0
- package/build/esm/Client.js.map +1 -1
- package/build/esm/Definitions.test.js +1 -0
- package/build/esm/Definitions.test.js.map +1 -1
- package/build/esm/Logger.js +0 -15
- package/build/esm/Logger.js.map +1 -1
- package/build/esm/MinimalClientContext.js +0 -15
- package/build/esm/MinimalClientContext.js.map +1 -1
- package/build/esm/ResultOrError.js +1 -0
- package/build/esm/ResultOrError.js.map +1 -1
- package/build/esm/SatisfiesSemver.js +0 -15
- package/build/esm/SatisfiesSemver.js.map +1 -1
- package/build/esm/SatisfiesSemver.test.js +1 -0
- package/build/esm/SatisfiesSemver.test.js.map +1 -1
- package/build/esm/__unstable/ConjureSupport.js +12 -6
- package/build/esm/__unstable/ConjureSupport.js.map +1 -1
- package/build/esm/__unstable/createBulkLinksAsyncIterFactory.js +6 -2
- package/build/esm/__unstable/createBulkLinksAsyncIterFactory.js.map +1 -1
- package/build/esm/actions/ActionValidationError.js +1 -1
- package/build/esm/actions/ActionValidationError.js.map +1 -1
- package/build/esm/actions/actions.test.js +85 -4
- package/build/esm/actions/actions.test.js.map +1 -1
- package/build/esm/actions/applyAction.js +3 -2
- package/build/esm/actions/applyAction.js.map +1 -1
- package/build/esm/createClient.js +50 -23
- package/build/esm/createClient.js.map +1 -1
- package/build/esm/createClient.test.js +25 -0
- package/build/esm/createClient.test.js.map +1 -1
- package/build/esm/createGeotimeSeriesProperty.js +5 -3
- package/build/esm/createGeotimeSeriesProperty.js.map +1 -1
- package/build/esm/createMediaReferenceProperty.js +47 -0
- package/build/esm/createMediaReferenceProperty.js.map +1 -0
- package/build/esm/createMinimalClient.js +9 -2
- package/build/esm/createMinimalClient.js.map +1 -1
- package/build/esm/createPlatformClient.js +1 -0
- package/build/esm/createPlatformClient.js.map +1 -1
- package/build/esm/createTimeseriesProperty.js +2 -1
- package/build/esm/createTimeseriesProperty.js.map +1 -1
- package/build/esm/definitions/LinkDefinitions.test.js +4 -0
- package/build/esm/definitions/LinkDefinitions.test.js.map +1 -1
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.js +106 -0
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.js.map +1 -0
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.test.js +100 -0
- package/build/esm/derivedProperties/createWithPropertiesObjectSet.test.js.map +1 -0
- package/build/esm/fetchMetadata.js +2 -0
- package/build/esm/fetchMetadata.js.map +1 -1
- package/build/esm/fetchMetadata.test.js +19 -0
- package/build/esm/fetchMetadata.test.js.map +1 -1
- package/build/esm/index.js +2 -1
- package/build/esm/index.js.map +1 -1
- package/build/esm/intellisense.test.helpers/callsQueryAcceptsObject.js +3 -1
- package/build/esm/intellisense.test.helpers/callsQueryAcceptsObject.js.map +1 -1
- package/build/esm/intellisense.test.js +5 -2
- package/build/esm/intellisense.test.js.map +1 -1
- package/build/esm/internal/conversions/legacyToModernSingleAggregationResult.js +3 -1
- package/build/esm/internal/conversions/legacyToModernSingleAggregationResult.js.map +1 -1
- package/build/esm/internal/conversions/modernToLegacyAggregationClause.js +2 -0
- package/build/esm/internal/conversions/modernToLegacyAggregationClause.js.map +1 -1
- package/build/esm/internal/conversions/modernToLegacyGroupByClause.js +1 -0
- package/build/esm/internal/conversions/modernToLegacyGroupByClause.js.map +1 -1
- package/build/esm/internal/conversions/modernToLegacyWhereClause.js +70 -21
- package/build/esm/internal/conversions/modernToLegacyWhereClause.js.map +1 -1
- package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js +402 -14
- package/build/esm/internal/conversions/modernToLegacyWhereClause.test.js.map +1 -1
- package/build/esm/object/AttachmentUpload.js +6 -7
- package/build/esm/object/AttachmentUpload.js.map +1 -1
- package/build/esm/object/Cache.js +27 -0
- package/build/esm/object/Cache.js.map +1 -1
- package/build/esm/object/Cache.test.js +10 -3
- package/build/esm/object/Cache.test.js.map +1 -1
- package/build/esm/object/SimpleCache.js +20 -0
- package/build/esm/object/SimpleCache.js.map +1 -1
- package/build/esm/object/aggregate.js +8 -10
- package/build/esm/object/aggregate.js.map +1 -1
- package/build/esm/object/aggregate.test.js +11 -9
- package/build/esm/object/aggregate.test.js.map +1 -1
- package/build/esm/object/attachment.test.js +1 -0
- package/build/esm/object/attachment.test.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/InterfaceHolder.js +0 -15
- package/build/esm/object/convertWireToOsdkObjects/InterfaceHolder.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/InternalSymbols.js +8 -3
- package/build/esm/object/convertWireToOsdkObjects/InternalSymbols.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/ObjectHolder.js +0 -15
- package/build/esm/object/convertWireToOsdkObjects/ObjectHolder.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js +4 -1
- package/build/esm/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/PropertyDescriptorRecord.js +0 -15
- package/build/esm/object/convertWireToOsdkObjects/PropertyDescriptorRecord.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js +42 -85
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.test.js +1 -6
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.test.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js +88 -88
- package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/getDollarAs.js +9 -3
- package/build/esm/object/convertWireToOsdkObjects/getDollarAs.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects/getDollarLink.js +15 -38
- package/build/esm/object/convertWireToOsdkObjects/getDollarLink.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects.js +53 -6
- package/build/esm/object/convertWireToOsdkObjects.js.map +1 -1
- package/build/esm/object/convertWireToOsdkObjects.test.js +197 -44
- package/build/esm/object/convertWireToOsdkObjects.test.js.map +1 -1
- package/build/esm/object/fetchPage.js +42 -24
- package/build/esm/object/fetchPage.js.map +1 -1
- package/build/esm/object/fetchPage.test.js +80 -1
- package/build/esm/object/fetchPage.test.js.map +1 -1
- package/build/esm/object/fetchSingle.js +3 -0
- package/build/esm/object/fetchSingle.js.map +1 -1
- package/build/esm/object/geotimeseriesreference.test.js +2 -0
- package/build/esm/object/geotimeseriesreference.test.js.map +1 -1
- package/build/esm/object/media.test.js +55 -0
- package/build/esm/object/media.test.js.map +1 -0
- package/build/esm/object/mediaUpload.js +20 -0
- package/build/esm/object/mediaUpload.js.map +1 -0
- package/build/esm/object/object.test.js +203 -10
- package/build/esm/object/object.test.js.map +1 -1
- package/build/esm/object/timeseries.test.js +11 -0
- package/build/esm/object/timeseries.test.js.map +1 -1
- package/build/esm/objectSet/InterfaceObjectSet.test.js +65 -0
- package/build/esm/objectSet/InterfaceObjectSet.test.js.map +1 -0
- package/build/esm/objectSet/ObjectSet.test.js +400 -46
- package/build/esm/objectSet/ObjectSet.test.js.map +1 -1
- package/build/esm/objectSet/ObjectSetFactory.js +0 -15
- package/build/esm/objectSet/ObjectSetFactory.js.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.js +137 -83
- package/build/esm/objectSet/ObjectSetListenerWebsocket.js.map +1 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js +59 -29
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.js.map +1 -1
- package/build/esm/objectSet/conjureUnionType.js +1 -0
- package/build/esm/objectSet/conjureUnionType.js.map +1 -1
- package/build/esm/objectSet/createObjectSet.js +31 -8
- package/build/esm/objectSet/createObjectSet.js.map +1 -1
- package/build/esm/ontology/OntologyProvider.js +1 -0
- package/build/esm/ontology/OntologyProvider.js.map +1 -1
- package/build/esm/ontology/StandardOntologyProvider.js +2 -0
- package/build/esm/ontology/StandardOntologyProvider.js.map +1 -1
- package/build/esm/ontology/StandardOntologyProvider.test.js +2 -0
- package/build/esm/ontology/StandardOntologyProvider.test.js.map +1 -1
- package/build/esm/ontology/loadActionMetadata.js +2 -1
- package/build/esm/ontology/loadActionMetadata.js.map +1 -1
- package/build/esm/ontology/loadFullObjectMetadata.js +2 -1
- package/build/esm/ontology/loadFullObjectMetadata.js.map +1 -1
- package/build/esm/ontology/loadInterfaceMetadata.js +2 -1
- package/build/esm/ontology/loadInterfaceMetadata.js.map +1 -1
- package/build/esm/ontology/loadQueryMetadata.js +2 -1
- package/build/esm/ontology/loadQueryMetadata.js.map +1 -1
- package/build/esm/ontology/makeConjureContext.js +1 -0
- package/build/esm/ontology/makeConjureContext.js.map +1 -1
- package/build/esm/pageRequestAsAsyncIter.js +1 -0
- package/build/esm/pageRequestAsAsyncIter.js.map +1 -1
- package/build/esm/public/internal.js +20 -0
- package/build/esm/public/internal.js.map +1 -0
- package/build/esm/public/unstable-do-not-use.js +1 -0
- package/build/esm/public/unstable-do-not-use.js.map +1 -1
- package/build/esm/public-utils/createAndFetchTempObjectSetRid.js +34 -0
- package/build/esm/public-utils/createAndFetchTempObjectSetRid.js.map +1 -0
- package/build/{browser/createAttachmentFromRid.js → esm/public-utils/hydrateAttachmentFromRid.js} +13 -6
- package/build/esm/public-utils/hydrateAttachmentFromRid.js.map +1 -0
- package/build/esm/public-utils/hydrateObjectSetFromRid.js +39 -0
- package/build/esm/public-utils/hydrateObjectSetFromRid.js.map +1 -0
- package/build/esm/queries/applyQuery.js +5 -5
- package/build/esm/queries/applyQuery.js.map +1 -1
- package/build/esm/queries/queries.test.js +9 -0
- package/build/esm/queries/queries.test.js.map +1 -1
- package/build/esm/queries/types.js +0 -15
- package/build/esm/queries/types.js.map +1 -1
- package/build/esm/tsserver.js +2 -1
- package/build/esm/tsserver.js.map +1 -1
- package/build/esm/util/ArrayElement.js +0 -15
- package/build/esm/util/ArrayElement.js.map +1 -1
- package/build/esm/util/NOOP.js +0 -15
- package/build/esm/util/NOOP.js.map +1 -1
- package/build/esm/util/NullableProps.js +0 -15
- package/build/esm/util/NullableProps.js.map +1 -1
- package/build/esm/util/UserAgent.js +2 -1
- package/build/esm/util/UserAgent.js.map +1 -1
- package/build/esm/util/WireObjectSet.js +2 -0
- package/build/esm/util/WireObjectSet.js.map +1 -1
- package/build/esm/util/addUserAgentAndRequestContextHeaders.js +1 -0
- package/build/esm/util/addUserAgentAndRequestContextHeaders.js.map +1 -1
- package/build/esm/util/augmentRequestContext.js +1 -0
- package/build/esm/util/augmentRequestContext.js.map +1 -1
- package/build/esm/util/datetimeConverters.js +60 -0
- package/build/esm/util/datetimeConverters.js.map +1 -0
- package/build/esm/util/datetimeConverters.test.js +76 -0
- package/build/esm/util/datetimeConverters.test.js.map +1 -0
- package/build/esm/util/interfaceUtils.js +21 -0
- package/build/esm/util/interfaceUtils.js.map +1 -0
- package/build/esm/util/isOntologyObjectV2.js +1 -0
- package/build/esm/util/isOntologyObjectV2.js.map +1 -1
- package/build/esm/util/isOsdkBaseObject.js +1 -0
- package/build/esm/util/isOsdkBaseObject.js.map +1 -1
- package/build/esm/util/isOsdkObject.js +1 -0
- package/build/esm/util/isOsdkObject.js.map +1 -1
- package/build/esm/util/objectSetUtils.js +26 -0
- package/build/esm/util/objectSetUtils.js.map +1 -0
- package/build/esm/util/partialBy.js +0 -15
- package/build/esm/util/partialBy.js.map +1 -1
- package/build/esm/util/streamutils.js +7 -0
- package/build/esm/util/streamutils.js.map +1 -1
- package/build/esm/util/timeseriesUtils.js +2 -1
- package/build/esm/util/timeseriesUtils.js.map +1 -1
- package/build/esm/util/toDataValue.js +28 -2
- package/build/esm/util/toDataValue.js.map +1 -1
- package/build/esm/util/toDataValue.test.js +14 -1
- package/build/esm/util/toDataValue.test.js.map +1 -1
- package/build/esm/util/toDataValueQueries.js +10 -1
- package/build/esm/util/toDataValueQueries.js.map +1 -1
- package/build/types/Client.d.ts +20 -0
- package/build/types/Definitions.test.d.ts +1 -0
- package/build/types/Logger.d.ts +18 -0
- package/build/types/MinimalClientContext.d.ts +21 -0
- package/build/types/ResultOrError.d.ts +9 -0
- package/build/types/SatisfiesSemver.d.ts +10 -0
- package/build/types/SatisfiesSemver.test.d.ts +1 -0
- package/build/types/__unstable/ConjureSupport.d.ts +37 -0
- package/build/{browser → types}/__unstable/createBulkLinksAsyncIterFactory.d.ts +1 -7
- package/build/types/actions/ActionValidationError.d.ts +5 -0
- package/build/types/actions/actions.test.d.ts +1 -0
- package/build/{esm → types}/actions/applyAction.d.ts +18 -17
- package/build/{browser → types}/createClient.d.ts +1 -4
- package/build/types/createClient.test.d.ts +1 -0
- package/build/types/createGeotimeSeriesProperty.d.ts +13 -0
- package/build/types/createMediaReferenceProperty.d.ts +13 -0
- package/build/types/createMinimalClient.d.ts +1 -0
- package/build/types/createPlatformClient.d.ts +15 -0
- package/build/types/createTimeseriesProperty.d.ts +13 -0
- package/build/types/definitions/LinkDefinitions.test.d.ts +1 -0
- package/build/types/derivedProperties/createWithPropertiesObjectSet.d.ts +1 -0
- package/build/types/derivedProperties/createWithPropertiesObjectSet.test.d.ts +1 -0
- package/build/types/fetchMetadata.d.ts +1 -0
- package/build/types/fetchMetadata.test.d.ts +1 -0
- package/build/types/index.d.ts +12 -0
- package/build/types/intellisense.test.d.ts +1 -0
- package/build/types/intellisense.test.helpers/callsQueryAcceptsObject.d.ts +1 -0
- package/build/types/internal/conversions/legacyToModernSingleAggregationResult.d.ts +1 -0
- package/build/types/internal/conversions/modernToLegacyAggregationClause.d.ts +1 -0
- package/build/types/internal/conversions/modernToLegacyGroupByClause.d.ts +1 -0
- package/build/{browser → types}/internal/conversions/modernToLegacyWhereClause.d.ts +0 -1
- package/build/types/internal/conversions/modernToLegacyWhereClause.test.d.ts +1 -0
- package/build/{browser → types}/object/AttachmentUpload.d.ts +0 -1
- package/build/types/object/Cache.d.ts +17 -0
- package/build/types/object/Cache.test.d.ts +1 -0
- package/build/types/object/SimpleCache.d.ts +52 -0
- package/build/types/object/aggregate.d.ts +1 -0
- package/build/types/object/aggregate.test.d.ts +1 -0
- package/build/types/object/attachment.test.d.ts +1 -0
- package/build/types/object/convertWireToOsdkObjects/InterfaceHolder.d.ts +1 -0
- package/build/types/object/convertWireToOsdkObjects/InternalSymbols.d.ts +6 -0
- package/build/types/object/convertWireToOsdkObjects/ObjectHolder.d.ts +1 -0
- package/build/types/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.d.ts +15 -0
- package/build/types/object/convertWireToOsdkObjects/PropertyDescriptorRecord.d.ts +5 -0
- package/build/types/object/convertWireToOsdkObjects/createOsdkInterface.d.ts +1 -0
- package/build/types/object/convertWireToOsdkObjects/createOsdkInterface.test.d.ts +1 -0
- package/build/types/object/convertWireToOsdkObjects/createOsdkObject.d.ts +1 -0
- package/build/{browser → types}/object/convertWireToOsdkObjects/getDollarAs.d.ts +0 -1
- package/build/types/object/convertWireToOsdkObjects/getDollarLink.d.ts +1 -0
- package/build/types/object/convertWireToOsdkObjects.d.ts +1 -0
- package/build/types/object/convertWireToOsdkObjects.test.d.ts +1 -0
- package/build/types/object/fetchPage.d.ts +5 -0
- package/build/types/object/fetchPage.test.d.ts +1 -0
- package/build/types/object/fetchSingle.d.ts +1 -0
- package/build/types/object/geotimeseriesreference.test.d.ts +1 -0
- package/build/types/object/media.test.d.ts +1 -0
- package/build/types/object/mediaUpload.d.ts +2 -0
- package/build/{esm → types}/object/object.test.d.ts +1 -2
- package/build/types/object/timeseries.test.d.ts +1 -0
- package/build/types/objectSet/InterfaceObjectSet.test.d.ts +1 -0
- package/build/types/objectSet/ObjectSet.test.d.ts +7 -0
- package/build/types/objectSet/ObjectSetFactory.d.ts +1 -0
- package/build/types/objectSet/ObjectSetListenerWebsocket.d.ts +1 -0
- package/build/types/objectSet/ObjectSetListenerWebsocket.test.d.ts +1 -0
- package/build/types/objectSet/conjureUnionType.d.ts +11 -0
- package/build/types/objectSet/createObjectSet.d.ts +1 -0
- package/build/types/ontology/OntologyProvider.d.ts +27 -0
- package/build/{browser → types}/ontology/StandardOntologyProvider.d.ts +1 -3
- package/build/types/ontology/StandardOntologyProvider.test.d.ts +1 -0
- package/build/{browser → types}/ontology/loadActionMetadata.d.ts +0 -1
- package/build/{esm → types}/ontology/loadFullObjectMetadata.d.ts +1 -4
- package/build/{esm → types}/ontology/loadInterfaceMetadata.d.ts +0 -1
- package/build/{esm → types}/ontology/loadQueryMetadata.d.ts +0 -1
- package/build/{browser → types}/ontology/makeConjureContext.d.ts +0 -1
- package/build/types/pageRequestAsAsyncIter.d.ts +10 -0
- package/build/types/public/internal.d.ts +3 -0
- package/build/{browser → types}/public/unstable-do-not-use.d.ts +0 -1
- package/build/types/public-utils/createAndFetchTempObjectSetRid.d.ts +10 -0
- package/build/types/public-utils/hydrateAttachmentFromRid.d.ts +9 -0
- package/build/types/public-utils/hydrateObjectSetFromRid.d.ts +10 -0
- package/build/{esm → types}/queries/applyQuery.d.ts +4 -2
- package/build/types/queries/queries.test.d.ts +1 -0
- package/build/{esm → types}/queries/types.d.ts +3 -12
- package/build/{esm → types}/tsserver.d.ts +19 -21
- package/build/{browser → types}/util/ArrayElement.d.ts +0 -1
- package/build/types/util/NOOP.d.ts +1 -0
- package/build/types/util/NullableProps.d.ts +1 -0
- package/build/{browser → types}/util/UserAgent.d.ts +0 -1
- package/build/types/util/WireObjectSet.d.ts +1 -0
- package/build/{esm → types}/util/addUserAgentAndRequestContextHeaders.d.ts +0 -1
- package/build/{browser → types}/util/augmentRequestContext.d.ts +6 -7
- package/build/types/util/datetimeConverters.d.ts +21 -0
- package/build/types/util/datetimeConverters.test.d.ts +1 -0
- package/build/types/util/interfaceUtils.d.ts +1 -0
- package/build/types/util/isOntologyObjectV2.d.ts +1 -0
- package/build/{esm/util/isOsdkObject.d.ts → types/util/isOsdkBaseObject.d.ts} +0 -1
- package/build/{browser → types}/util/isOsdkObject.d.ts +0 -1
- package/build/types/util/objectSetUtils.d.ts +3 -0
- package/build/types/util/partialBy.d.ts +8 -0
- package/build/{browser → types}/util/streamutils.d.ts +0 -1
- package/build/{browser → types}/util/timeseriesUtils.d.ts +4 -5
- package/build/types/util/toDataValue.d.ts +1 -0
- package/build/types/util/toDataValue.test.d.ts +1 -0
- package/build/types/util/toDataValueQueries.d.ts +1 -0
- package/index.d.ts +17 -0
- package/internal.d.ts +17 -0
- package/package.json +59 -26
- package/unstable-do-not-use.d.ts +1 -1
- package/build/browser/Client.d.ts +0 -42
- package/build/browser/Client.d.ts.map +0 -1
- package/build/browser/Definitions.test.d.ts +0 -2
- package/build/browser/Definitions.test.d.ts.map +0 -1
- package/build/browser/Logger.d.ts +0 -19
- package/build/browser/Logger.d.ts.map +0 -1
- package/build/browser/MinimalClientContext.d.ts +0 -26
- package/build/browser/MinimalClientContext.d.ts.map +0 -1
- package/build/browser/ResultOrError.d.ts +0 -12
- package/build/browser/ResultOrError.d.ts.map +0 -1
- package/build/browser/SatisfiesSemver.d.ts +0 -4
- package/build/browser/SatisfiesSemver.d.ts.map +0 -1
- package/build/browser/SatisfiesSemver.test.d.ts +0 -2
- package/build/browser/SatisfiesSemver.test.d.ts.map +0 -1
- package/build/browser/__unstable/ConjureSupport.d.ts +0 -55
- package/build/browser/__unstable/ConjureSupport.d.ts.map +0 -1
- package/build/browser/__unstable/createBulkLinksAsyncIterFactory.d.ts.map +0 -1
- package/build/browser/actions/ActionValidationError.d.ts +0 -6
- package/build/browser/actions/ActionValidationError.d.ts.map +0 -1
- package/build/browser/actions/actions.test.d.ts +0 -2
- package/build/browser/actions/actions.test.d.ts.map +0 -1
- package/build/browser/actions/applyAction.d.ts +0 -30
- package/build/browser/actions/applyAction.d.ts.map +0 -1
- package/build/browser/createAttachmentFromRid.d.ts +0 -10
- package/build/browser/createAttachmentFromRid.d.ts.map +0 -1
- package/build/browser/createAttachmentFromRid.js.map +0 -1
- package/build/browser/createClient.d.ts.map +0 -1
- package/build/browser/createClient.test.d.ts +0 -2
- package/build/browser/createClient.test.d.ts.map +0 -1
- package/build/browser/createGeotimeSeriesProperty.d.ts +0 -14
- package/build/browser/createGeotimeSeriesProperty.d.ts.map +0 -1
- package/build/browser/createMinimalClient.d.ts +0 -2
- package/build/browser/createMinimalClient.d.ts.map +0 -1
- package/build/browser/createPlatformClient.d.ts +0 -17
- package/build/browser/createPlatformClient.d.ts.map +0 -1
- package/build/browser/createTimeseriesProperty.d.ts +0 -14
- package/build/browser/createTimeseriesProperty.d.ts.map +0 -1
- package/build/browser/definitions/LinkDefinitions.test.d.ts +0 -2
- package/build/browser/definitions/LinkDefinitions.test.d.ts.map +0 -1
- package/build/browser/fetchMetadata.d.ts +0 -2
- package/build/browser/fetchMetadata.d.ts.map +0 -1
- package/build/browser/fetchMetadata.test.d.ts +0 -2
- package/build/browser/fetchMetadata.test.d.ts.map +0 -1
- package/build/browser/index.d.ts +0 -13
- package/build/browser/index.d.ts.map +0 -1
- package/build/browser/intellisense.test.d.ts +0 -2
- package/build/browser/intellisense.test.d.ts.map +0 -1
- package/build/browser/intellisense.test.helpers/callsQueryAcceptsObject.d.ts +0 -2
- package/build/browser/intellisense.test.helpers/callsQueryAcceptsObject.d.ts.map +0 -1
- package/build/browser/internal/conversions/legacyToModernSingleAggregationResult.d.ts +0 -2
- package/build/browser/internal/conversions/legacyToModernSingleAggregationResult.d.ts.map +0 -1
- package/build/browser/internal/conversions/modernToLegacyAggregationClause.d.ts +0 -2
- package/build/browser/internal/conversions/modernToLegacyAggregationClause.d.ts.map +0 -1
- package/build/browser/internal/conversions/modernToLegacyGroupByClause.d.ts +0 -2
- package/build/browser/internal/conversions/modernToLegacyGroupByClause.d.ts.map +0 -1
- package/build/browser/internal/conversions/modernToLegacyWhereClause.d.ts.map +0 -1
- package/build/browser/internal/conversions/modernToLegacyWhereClause.test.d.ts +0 -2
- package/build/browser/internal/conversions/modernToLegacyWhereClause.test.d.ts.map +0 -1
- package/build/browser/object/AttachmentUpload.d.ts.map +0 -1
- package/build/browser/object/Cache.d.ts +0 -2
- package/build/browser/object/Cache.d.ts.map +0 -1
- package/build/browser/object/Cache.test.d.ts +0 -11
- package/build/browser/object/Cache.test.d.ts.map +0 -1
- package/build/browser/object/SimpleCache.d.ts +0 -38
- package/build/browser/object/SimpleCache.d.ts.map +0 -1
- package/build/browser/object/aggregate.d.ts +0 -2
- package/build/browser/object/aggregate.d.ts.map +0 -1
- package/build/browser/object/aggregate.test.d.ts +0 -2
- package/build/browser/object/aggregate.test.d.ts.map +0 -1
- package/build/browser/object/attachment.test.d.ts +0 -2
- package/build/browser/object/attachment.test.d.ts.map +0 -1
- package/build/browser/object/convertWireToOsdkObjects/InterfaceHolder.d.ts +0 -11
- package/build/browser/object/convertWireToOsdkObjects/InterfaceHolder.d.ts.map +0 -1
- package/build/browser/object/convertWireToOsdkObjects/InternalSymbols.d.ts +0 -14
- package/build/browser/object/convertWireToOsdkObjects/InternalSymbols.d.ts.map +0 -1
- package/build/browser/object/convertWireToOsdkObjects/ObjectHolder.d.ts +0 -2
- package/build/browser/object/convertWireToOsdkObjects/ObjectHolder.d.ts.map +0 -1
- package/build/browser/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.d.ts +0 -2
- package/build/browser/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.d.ts.map +0 -1
- package/build/browser/object/convertWireToOsdkObjects/PropertyDescriptorRecord.d.ts +0 -8
- package/build/browser/object/convertWireToOsdkObjects/PropertyDescriptorRecord.d.ts.map +0 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.d.ts +0 -2
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.d.ts.map +0 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.test.d.ts +0 -2
- package/build/browser/object/convertWireToOsdkObjects/createOsdkInterface.test.d.ts.map +0 -1
- package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.d.ts +0 -2
- package/build/browser/object/convertWireToOsdkObjects/createOsdkObject.d.ts.map +0 -1
- package/build/browser/object/convertWireToOsdkObjects/getDollarAs.d.ts.map +0 -1
- package/build/browser/object/convertWireToOsdkObjects/getDollarLink.d.ts +0 -2
- package/build/browser/object/convertWireToOsdkObjects/getDollarLink.d.ts.map +0 -1
- package/build/browser/object/convertWireToOsdkObjects.d.ts +0 -2
- package/build/browser/object/convertWireToOsdkObjects.d.ts.map +0 -1
- package/build/browser/object/convertWireToOsdkObjects.test.d.ts +0 -2
- package/build/browser/object/convertWireToOsdkObjects.test.d.ts.map +0 -1
- package/build/browser/object/fetchPage.d.ts +0 -3
- package/build/browser/object/fetchPage.d.ts.map +0 -1
- package/build/browser/object/fetchPage.test.d.ts +0 -2
- package/build/browser/object/fetchPage.test.d.ts.map +0 -1
- package/build/browser/object/fetchSingle.d.ts +0 -2
- package/build/browser/object/fetchSingle.d.ts.map +0 -1
- package/build/browser/object/geotimeseriesreference.test.d.ts +0 -2
- package/build/browser/object/geotimeseriesreference.test.d.ts.map +0 -1
- package/build/browser/object/object.test.d.ts +0 -12
- package/build/browser/object/object.test.d.ts.map +0 -1
- package/build/browser/object/timeseries.test.d.ts +0 -2
- package/build/browser/object/timeseries.test.d.ts.map +0 -1
- package/build/browser/objectSet/ObjectSet.test.d.ts +0 -2
- package/build/browser/objectSet/ObjectSet.test.d.ts.map +0 -1
- package/build/browser/objectSet/ObjectSetFactory.d.ts +0 -2
- package/build/browser/objectSet/ObjectSetFactory.d.ts.map +0 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.d.ts +0 -2
- package/build/browser/objectSet/ObjectSetListenerWebsocket.d.ts.map +0 -1
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.d.ts +0 -2
- package/build/browser/objectSet/ObjectSetListenerWebsocket.test.d.ts.map +0 -1
- package/build/browser/objectSet/conjureUnionType.d.ts +0 -13
- package/build/browser/objectSet/conjureUnionType.d.ts.map +0 -1
- package/build/browser/objectSet/createObjectSet.d.ts +0 -2
- package/build/browser/objectSet/createObjectSet.d.ts.map +0 -1
- package/build/browser/objectSet/toConjureObjectSet.d.ts +0 -2
- package/build/browser/objectSet/toConjureObjectSet.d.ts.map +0 -1
- package/build/browser/objectSet/toConjureObjectSet.js +0 -165
- package/build/browser/objectSet/toConjureObjectSet.js.map +0 -1
- package/build/browser/ontology/OntologyProvider.d.ts +0 -32
- package/build/browser/ontology/OntologyProvider.d.ts.map +0 -1
- package/build/browser/ontology/StandardOntologyProvider.d.ts.map +0 -1
- package/build/browser/ontology/StandardOntologyProvider.test.d.ts +0 -2
- package/build/browser/ontology/StandardOntologyProvider.test.d.ts.map +0 -1
- package/build/browser/ontology/loadActionMetadata.d.ts.map +0 -1
- package/build/browser/ontology/loadFullObjectMetadata.d.ts +0 -6
- package/build/browser/ontology/loadFullObjectMetadata.d.ts.map +0 -1
- package/build/browser/ontology/loadInterfaceMetadata.d.ts +0 -4
- package/build/browser/ontology/loadInterfaceMetadata.d.ts.map +0 -1
- package/build/browser/ontology/loadQueryMetadata.d.ts +0 -4
- package/build/browser/ontology/loadQueryMetadata.d.ts.map +0 -1
- package/build/browser/ontology/makeConjureContext.d.ts.map +0 -1
- package/build/browser/pageRequestAsAsyncIter.d.ts +0 -10
- package/build/browser/pageRequestAsAsyncIter.d.ts.map +0 -1
- package/build/browser/public/unstable-do-not-use.d.ts.map +0 -1
- package/build/browser/queries/applyQuery.d.ts +0 -6
- package/build/browser/queries/applyQuery.d.ts.map +0 -1
- package/build/browser/queries/queries.test.d.ts +0 -2
- package/build/browser/queries/queries.test.d.ts.map +0 -1
- package/build/browser/queries/types.d.ts +0 -20
- package/build/browser/queries/types.d.ts.map +0 -1
- package/build/browser/tsserver.d.ts +0 -34
- package/build/browser/tsserver.d.ts.map +0 -1
- package/build/browser/util/ArrayElement.d.ts.map +0 -1
- package/build/browser/util/NOOP.d.ts +0 -4
- package/build/browser/util/NOOP.d.ts.map +0 -1
- package/build/browser/util/NullableProps.d.ts +0 -6
- package/build/browser/util/NullableProps.d.ts.map +0 -1
- package/build/browser/util/UserAgent.d.ts.map +0 -1
- package/build/browser/util/WireObjectSet.d.ts +0 -2
- package/build/browser/util/WireObjectSet.d.ts.map +0 -1
- package/build/browser/util/addUserAgentAndRequestContextHeaders.d.ts +0 -4
- package/build/browser/util/addUserAgentAndRequestContextHeaders.d.ts.map +0 -1
- package/build/browser/util/augmentRequestContext.d.ts.map +0 -1
- package/build/browser/util/isOntologyObjectV2.d.ts +0 -2
- package/build/browser/util/isOntologyObjectV2.d.ts.map +0 -1
- package/build/browser/util/isOsdkBaseObject.d.ts +0 -3
- package/build/browser/util/isOsdkBaseObject.d.ts.map +0 -1
- package/build/browser/util/isOsdkObject.d.ts.map +0 -1
- package/build/browser/util/partialBy.d.ts +0 -3
- package/build/browser/util/partialBy.d.ts.map +0 -1
- package/build/browser/util/streamutils.d.ts.map +0 -1
- package/build/browser/util/timeseriesUtils.d.ts.map +0 -1
- package/build/browser/util/toDataValue.d.ts +0 -2
- package/build/browser/util/toDataValue.d.ts.map +0 -1
- package/build/browser/util/toDataValue.test.d.ts +0 -2
- package/build/browser/util/toDataValue.test.d.ts.map +0 -1
- package/build/browser/util/toDataValueQueries.d.ts +0 -2
- package/build/browser/util/toDataValueQueries.d.ts.map +0 -1
- package/build/esm/Client.d.ts +0 -42
- package/build/esm/Client.d.ts.map +0 -1
- package/build/esm/Definitions.test.d.ts +0 -2
- package/build/esm/Definitions.test.d.ts.map +0 -1
- package/build/esm/Logger.d.ts +0 -19
- package/build/esm/Logger.d.ts.map +0 -1
- package/build/esm/MinimalClientContext.d.ts +0 -26
- package/build/esm/MinimalClientContext.d.ts.map +0 -1
- package/build/esm/ResultOrError.d.ts +0 -12
- package/build/esm/ResultOrError.d.ts.map +0 -1
- package/build/esm/SatisfiesSemver.d.ts +0 -4
- package/build/esm/SatisfiesSemver.d.ts.map +0 -1
- package/build/esm/SatisfiesSemver.test.d.ts +0 -2
- package/build/esm/SatisfiesSemver.test.d.ts.map +0 -1
- package/build/esm/__unstable/ConjureSupport.d.ts +0 -55
- package/build/esm/__unstable/ConjureSupport.d.ts.map +0 -1
- package/build/esm/__unstable/createBulkLinksAsyncIterFactory.d.ts +0 -10
- package/build/esm/__unstable/createBulkLinksAsyncIterFactory.d.ts.map +0 -1
- package/build/esm/actions/ActionValidationError.d.ts +0 -6
- package/build/esm/actions/ActionValidationError.d.ts.map +0 -1
- package/build/esm/actions/actions.test.d.ts +0 -2
- package/build/esm/actions/actions.test.d.ts.map +0 -1
- package/build/esm/actions/applyAction.d.ts.map +0 -1
- package/build/esm/createAttachmentFromRid.d.ts +0 -10
- package/build/esm/createAttachmentFromRid.d.ts.map +0 -1
- package/build/esm/createAttachmentFromRid.js.map +0 -1
- package/build/esm/createClient.d.ts +0 -6
- package/build/esm/createClient.d.ts.map +0 -1
- package/build/esm/createClient.test.d.ts +0 -2
- package/build/esm/createClient.test.d.ts.map +0 -1
- package/build/esm/createGeotimeSeriesProperty.d.ts +0 -14
- package/build/esm/createGeotimeSeriesProperty.d.ts.map +0 -1
- package/build/esm/createMinimalClient.d.ts +0 -2
- package/build/esm/createMinimalClient.d.ts.map +0 -1
- package/build/esm/createPlatformClient.d.ts +0 -17
- package/build/esm/createPlatformClient.d.ts.map +0 -1
- package/build/esm/createTimeseriesProperty.d.ts +0 -14
- package/build/esm/createTimeseriesProperty.d.ts.map +0 -1
- package/build/esm/definitions/LinkDefinitions.test.d.ts +0 -2
- package/build/esm/definitions/LinkDefinitions.test.d.ts.map +0 -1
- package/build/esm/fetchMetadata.d.ts +0 -2
- package/build/esm/fetchMetadata.d.ts.map +0 -1
- package/build/esm/fetchMetadata.test.d.ts +0 -2
- package/build/esm/fetchMetadata.test.d.ts.map +0 -1
- package/build/esm/index.d.ts +0 -13
- package/build/esm/index.d.ts.map +0 -1
- package/build/esm/intellisense.test.d.ts +0 -2
- package/build/esm/intellisense.test.d.ts.map +0 -1
- package/build/esm/intellisense.test.helpers/callsQueryAcceptsObject.d.ts +0 -2
- package/build/esm/intellisense.test.helpers/callsQueryAcceptsObject.d.ts.map +0 -1
- package/build/esm/internal/conversions/legacyToModernSingleAggregationResult.d.ts +0 -2
- package/build/esm/internal/conversions/legacyToModernSingleAggregationResult.d.ts.map +0 -1
- package/build/esm/internal/conversions/modernToLegacyAggregationClause.d.ts +0 -2
- package/build/esm/internal/conversions/modernToLegacyAggregationClause.d.ts.map +0 -1
- package/build/esm/internal/conversions/modernToLegacyGroupByClause.d.ts +0 -2
- package/build/esm/internal/conversions/modernToLegacyGroupByClause.d.ts.map +0 -1
- package/build/esm/internal/conversions/modernToLegacyWhereClause.d.ts +0 -2
- package/build/esm/internal/conversions/modernToLegacyWhereClause.d.ts.map +0 -1
- package/build/esm/internal/conversions/modernToLegacyWhereClause.test.d.ts +0 -2
- package/build/esm/internal/conversions/modernToLegacyWhereClause.test.d.ts.map +0 -1
- package/build/esm/object/AttachmentUpload.d.ts +0 -4
- package/build/esm/object/AttachmentUpload.d.ts.map +0 -1
- package/build/esm/object/Cache.d.ts +0 -2
- package/build/esm/object/Cache.d.ts.map +0 -1
- package/build/esm/object/Cache.test.d.ts +0 -11
- package/build/esm/object/Cache.test.d.ts.map +0 -1
- package/build/esm/object/SimpleCache.d.ts +0 -38
- package/build/esm/object/SimpleCache.d.ts.map +0 -1
- package/build/esm/object/aggregate.d.ts +0 -2
- package/build/esm/object/aggregate.d.ts.map +0 -1
- package/build/esm/object/aggregate.test.d.ts +0 -2
- package/build/esm/object/aggregate.test.d.ts.map +0 -1
- package/build/esm/object/attachment.test.d.ts +0 -2
- package/build/esm/object/attachment.test.d.ts.map +0 -1
- package/build/esm/object/convertWireToOsdkObjects/InterfaceHolder.d.ts +0 -11
- package/build/esm/object/convertWireToOsdkObjects/InterfaceHolder.d.ts.map +0 -1
- package/build/esm/object/convertWireToOsdkObjects/InternalSymbols.d.ts +0 -14
- package/build/esm/object/convertWireToOsdkObjects/InternalSymbols.d.ts.map +0 -1
- package/build/esm/object/convertWireToOsdkObjects/ObjectHolder.d.ts +0 -2
- package/build/esm/object/convertWireToOsdkObjects/ObjectHolder.d.ts.map +0 -1
- package/build/esm/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.d.ts +0 -2
- package/build/esm/object/convertWireToOsdkObjects/OsdkCustomInspectPrototype.d.ts.map +0 -1
- package/build/esm/object/convertWireToOsdkObjects/PropertyDescriptorRecord.d.ts +0 -8
- package/build/esm/object/convertWireToOsdkObjects/PropertyDescriptorRecord.d.ts.map +0 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.d.ts +0 -2
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.d.ts.map +0 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.test.d.ts +0 -2
- package/build/esm/object/convertWireToOsdkObjects/createOsdkInterface.test.d.ts.map +0 -1
- package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.d.ts +0 -2
- package/build/esm/object/convertWireToOsdkObjects/createOsdkObject.d.ts.map +0 -1
- package/build/esm/object/convertWireToOsdkObjects/getDollarAs.d.ts +0 -3
- package/build/esm/object/convertWireToOsdkObjects/getDollarAs.d.ts.map +0 -1
- package/build/esm/object/convertWireToOsdkObjects/getDollarLink.d.ts +0 -2
- package/build/esm/object/convertWireToOsdkObjects/getDollarLink.d.ts.map +0 -1
- package/build/esm/object/convertWireToOsdkObjects.d.ts +0 -2
- package/build/esm/object/convertWireToOsdkObjects.d.ts.map +0 -1
- package/build/esm/object/convertWireToOsdkObjects.test.d.ts +0 -2
- package/build/esm/object/convertWireToOsdkObjects.test.d.ts.map +0 -1
- package/build/esm/object/fetchPage.d.ts +0 -3
- package/build/esm/object/fetchPage.d.ts.map +0 -1
- package/build/esm/object/fetchPage.test.d.ts +0 -2
- package/build/esm/object/fetchPage.test.d.ts.map +0 -1
- package/build/esm/object/fetchSingle.d.ts +0 -2
- package/build/esm/object/fetchSingle.d.ts.map +0 -1
- package/build/esm/object/geotimeseriesreference.test.d.ts +0 -2
- package/build/esm/object/geotimeseriesreference.test.d.ts.map +0 -1
- package/build/esm/object/object.test.d.ts.map +0 -1
- package/build/esm/object/timeseries.test.d.ts +0 -2
- package/build/esm/object/timeseries.test.d.ts.map +0 -1
- package/build/esm/objectSet/ObjectSet.test.d.ts +0 -2
- package/build/esm/objectSet/ObjectSet.test.d.ts.map +0 -1
- package/build/esm/objectSet/ObjectSetFactory.d.ts +0 -2
- package/build/esm/objectSet/ObjectSetFactory.d.ts.map +0 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.d.ts +0 -2
- package/build/esm/objectSet/ObjectSetListenerWebsocket.d.ts.map +0 -1
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.d.ts +0 -2
- package/build/esm/objectSet/ObjectSetListenerWebsocket.test.d.ts.map +0 -1
- package/build/esm/objectSet/conjureUnionType.d.ts +0 -13
- package/build/esm/objectSet/conjureUnionType.d.ts.map +0 -1
- package/build/esm/objectSet/createObjectSet.d.ts +0 -2
- package/build/esm/objectSet/createObjectSet.d.ts.map +0 -1
- package/build/esm/objectSet/toConjureObjectSet.d.ts +0 -2
- package/build/esm/objectSet/toConjureObjectSet.d.ts.map +0 -1
- package/build/esm/objectSet/toConjureObjectSet.js +0 -165
- package/build/esm/objectSet/toConjureObjectSet.js.map +0 -1
- package/build/esm/ontology/OntologyProvider.d.ts +0 -32
- package/build/esm/ontology/OntologyProvider.d.ts.map +0 -1
- package/build/esm/ontology/StandardOntologyProvider.d.ts +0 -5
- package/build/esm/ontology/StandardOntologyProvider.d.ts.map +0 -1
- package/build/esm/ontology/StandardOntologyProvider.test.d.ts +0 -2
- package/build/esm/ontology/StandardOntologyProvider.test.d.ts.map +0 -1
- package/build/esm/ontology/loadActionMetadata.d.ts +0 -4
- package/build/esm/ontology/loadActionMetadata.d.ts.map +0 -1
- package/build/esm/ontology/loadFullObjectMetadata.d.ts.map +0 -1
- package/build/esm/ontology/loadInterfaceMetadata.d.ts.map +0 -1
- package/build/esm/ontology/loadQueryMetadata.d.ts.map +0 -1
- package/build/esm/ontology/makeConjureContext.d.ts +0 -4
- package/build/esm/ontology/makeConjureContext.d.ts.map +0 -1
- package/build/esm/pageRequestAsAsyncIter.d.ts +0 -10
- package/build/esm/pageRequestAsAsyncIter.d.ts.map +0 -1
- package/build/esm/public/unstable-do-not-use.d.ts +0 -2
- package/build/esm/public/unstable-do-not-use.d.ts.map +0 -1
- package/build/esm/queries/applyQuery.d.ts.map +0 -1
- package/build/esm/queries/queries.test.d.ts +0 -2
- package/build/esm/queries/queries.test.d.ts.map +0 -1
- package/build/esm/queries/types.d.ts.map +0 -1
- package/build/esm/tsserver.d.ts.map +0 -1
- package/build/esm/util/ArrayElement.d.ts +0 -2
- package/build/esm/util/ArrayElement.d.ts.map +0 -1
- package/build/esm/util/NOOP.d.ts +0 -4
- package/build/esm/util/NOOP.d.ts.map +0 -1
- package/build/esm/util/NullableProps.d.ts +0 -6
- package/build/esm/util/NullableProps.d.ts.map +0 -1
- package/build/esm/util/UserAgent.d.ts +0 -2
- package/build/esm/util/UserAgent.d.ts.map +0 -1
- package/build/esm/util/WireObjectSet.d.ts +0 -2
- package/build/esm/util/WireObjectSet.d.ts.map +0 -1
- package/build/esm/util/addUserAgentAndRequestContextHeaders.d.ts.map +0 -1
- package/build/esm/util/augmentRequestContext.d.ts +0 -32
- package/build/esm/util/augmentRequestContext.d.ts.map +0 -1
- package/build/esm/util/isOntologyObjectV2.d.ts +0 -2
- package/build/esm/util/isOntologyObjectV2.d.ts.map +0 -1
- package/build/esm/util/isOsdkBaseObject.d.ts +0 -3
- package/build/esm/util/isOsdkBaseObject.d.ts.map +0 -1
- package/build/esm/util/isOsdkObject.d.ts.map +0 -1
- package/build/esm/util/partialBy.d.ts +0 -3
- package/build/esm/util/partialBy.d.ts.map +0 -1
- package/build/esm/util/streamutils.d.ts +0 -3
- package/build/esm/util/streamutils.d.ts.map +0 -1
- package/build/esm/util/timeseriesUtils.d.ts +0 -8
- package/build/esm/util/timeseriesUtils.d.ts.map +0 -1
- package/build/esm/util/toDataValue.d.ts +0 -2
- package/build/esm/util/toDataValue.d.ts.map +0 -1
- package/build/esm/util/toDataValue.test.d.ts +0 -2
- package/build/esm/util/toDataValue.test.d.ts.map +0 -1
- package/build/esm/util/toDataValueQueries.d.ts +0 -2
- package/build/esm/util/toDataValueQueries.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectSetListenerWebsocket.js","names":["WebSocket","invariant","convertWireToOsdkObjects","ONE_DAY_MS","MINIMUM_RECONNECT_DELAY_MS","doNothing","fillOutListener","onChange","onError","onOutOfDate","isReady","sub","subscriptionIsDone","status","ObjectSetListenerWebsocket","instances","WeakMap","OBJECT_SET_EXPIRY_MS","getInstance","client","instance","get","clientCacheKey","set","ws","lastWsConnect","logger","pendingSubscriptions","Map","subscriptions","maybeDisconnectTimeout","constructor","objectSetExpiryMs","minimumReconnectDelayMs","child","msgPrefix","baseUrl","startsWith","subscribe","objectType","objectSet","listener","properties","objDef","ontologyProvider","getObjectDefinition","apiName","objectProperties","filter","p","type","referenceProperties","primaryKeyPropertyName","primaryKeyApiName","requestedProperties","requestedReferenceProperties","subscriptionId","crypto","randomUUID","initiateSubscribe","unsubscribe","#initiateSubscribe","process","env","NODE_ENV","trace","expiry","clearTimeout","setTimeout","expire","ontologyRid","ensureWebsocket","readyState","OPEN","sendSubscribeMessage","error","#sendSubscribeMessage","readySubs","values","length","id","requests","map","propertySet","referenceSet","payload","send","JSON","stringify","#expire","subscription","#unsubscribe","newStatus","undefined","delete","size","cycleWebsocket","#ensureWebsocket","tokenProvider","base","URL","url","host","token","nextConnectTime","Date","now","Promise","resolve","addEventListener","onClose","onMessage","onOpen","CONNECTING","reject","cleanup","removeEventListener","open","evt","#onOpen","message","data","parse","toString","handleMessage_objectSetChanged","handleMessage_refreshObjectSet","handleMessage_subscribeResponses","handleMessage_subscriptionClosed","objectUpdates","updates","update","referenceUpdates","osdkObjectsWithReferenceUpdates","all","o","osdkObjectArray","__apiName","__primaryKey","primaryKey","property","value","singleOsdkObject","object","state","osdkObject","osdkObjects","keysToDelete","Object","keys","key","includes","responses","subs","i","response","errors","shouldFireOutOfDate","#handleMessage_subscriptionClosed","cause","event","#cycleWebsocket","CLOSING","CLOSED","close","s"],"sources":["ObjectSetListenerWebsocket.js"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport WebSocket from \"isomorphic-ws\";\nimport invariant from \"tiny-invariant\";\nimport { convertWireToOsdkObjects } from \"../object/convertWireToOsdkObjects.js\";\nconst ONE_DAY_MS = 24 * 60 * 60 * 1000;\nconst MINIMUM_RECONNECT_DELAY_MS = 5 * 1000;\n/** Noop function to reduce conditional checks */\nfunction doNothing() { }\n/**\n * Converts an ObjectSetListener to one where all the functions are defined.\n */\nfunction fillOutListener({ onChange = doNothing, onError = doNothing, onOutOfDate = doNothing, }) {\n return { onChange, onError, onOutOfDate };\n}\nfunction isReady(sub) {\n return sub.isReady != null;\n}\nfunction subscriptionIsDone(sub) {\n return sub.status === \"done\" || sub.status === \"error\";\n}\n/** @internal */\nexport class ObjectSetListenerWebsocket {\n static #instances = new WeakMap();\n OBJECT_SET_EXPIRY_MS;\n MINIMUM_RECONNECT_DELAY_MS;\n // FIXME\n static getInstance(client) {\n let instance = ObjectSetListenerWebsocket.#instances.get(client.clientCacheKey);\n if (instance == null) {\n instance = new ObjectSetListenerWebsocket(client);\n ObjectSetListenerWebsocket.#instances.set(client.clientCacheKey, instance);\n }\n return instance;\n }\n #ws;\n #lastWsConnect = 0;\n #client;\n #logger;\n /**\n * map of requestId to all active subscriptions at the time of the request\n */\n #pendingSubscriptions = new Map();\n /**\n * Map of subscriptionId to Subscription. Note: the subscriptionId may be\n * temporary and not the actual subscriptionId from the server.\n */\n #subscriptions = new Map();\n #maybeDisconnectTimeout;\n // DO NOT CONSTRUCT DIRECTLY. ONLY EXPOSED AS A TESTING SEAM\n constructor(client, { objectSetExpiryMs = ONE_DAY_MS, minimumReconnectDelayMs = MINIMUM_RECONNECT_DELAY_MS, } = {}) {\n this.OBJECT_SET_EXPIRY_MS = objectSetExpiryMs;\n this.MINIMUM_RECONNECT_DELAY_MS = minimumReconnectDelayMs;\n this.#client = client;\n this.#logger = client.logger?.child({}, {\n msgPrefix: \"<OSW> \",\n });\n invariant(client.baseUrl.startsWith(\"https://\")\n || client.baseUrl.startsWith(\"http://\"), \"Stack must be a URL\");\n }\n async subscribe(objectType, objectSet, listener, properties) {\n if (process.env.TARGET !== \"browser\") {\n // Node 18 does not expose 'crypto' on globalThis, so we need to do it ourselves. This\n // will not be needed after our minimum version is 19 or greater.\n globalThis.crypto ??= (await import(\"node:crypto\")).webcrypto;\n }\n const objDef = await this.#client.ontologyProvider.getObjectDefinition(objectType.apiName);\n const objectProperties = properties.filter((p) => objDef.properties[p].type !== \"geotimeSeriesReference\");\n const referenceProperties = properties.filter((p) => objDef.properties[p].type === \"geotimeSeriesReference\");\n const sub = {\n listener: fillOutListener(listener),\n objectSet,\n primaryKeyPropertyName: objDef.primaryKeyApiName,\n requestedProperties: objectProperties,\n requestedReferenceProperties: referenceProperties,\n status: \"preparing\",\n // Since we don't have a real subscription id yet but we need to keep\n // track of this reference, we can just use a random uuid.\n subscriptionId: `TMP-${crypto.randomUUID()}`,\n };\n this.#subscriptions.set(sub.subscriptionId, sub);\n // actually prepares the subscription, ensures the ws is ready, and sends\n // a subscribe message. We don't want to block on this.\n this.#initiateSubscribe(sub);\n return () => {\n this.#unsubscribe(sub);\n };\n }\n /**\n * Called at least once for every subscription.\n *\n * - Resets pending expiry\n * - Recreates temporary object set\n * - Triggers a full subscribe message\n *\n * @returns\n */\n async #initiateSubscribe(sub) {\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace(\"#initiateSubscribe()\");\n }\n if (sub.expiry) {\n clearTimeout(sub.expiry);\n }\n // expiry is tied to the temporary object set, which is set to `timeToLive: \"ONE_DAY\"`\n // in `#createTemporaryObjectSet`. They should be in sync\n sub.expiry = setTimeout(() => this.#expire(sub), this.OBJECT_SET_EXPIRY_MS);\n const ontologyRid = await this.#client.ontologyRid;\n try {\n await this.#ensureWebsocket();\n // the consumer may have already unsubscribed before we are ready to request a subscription\n // so we have to acquire the pendingSubscription after the await.\n if (subscriptionIsDone(sub)) {\n return;\n }\n sub.isReady = true;\n // if we aren't open, then this happens after we #onConnect\n if (this.#ws?.readyState === WebSocket.OPEN) {\n this.#sendSubscribeMessage();\n }\n }\n catch (error) {\n this.#logger?.error(error, \"Error in #initiateSubscribe\");\n sub.listener.onError([error]);\n }\n }\n #sendSubscribeMessage() {\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace(\"#sendSubscribeMessage()\");\n }\n // If two calls to `.subscribe()` happen at once (or if the connection is reset),\n // we may have multiple subscriptions that don't have a subscriptionId yet,\n // so we filter those out.\n const readySubs = [...this.#subscriptions.values()].filter(isReady);\n if (readySubs.length === 0) {\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace(\"#sendSubscribeMessage(): aborting due to no ready subscriptions\");\n }\n return;\n }\n // Assumes the node 18 crypto fallback to globalThis in `subscribe` has happened.\n const id = crypto.randomUUID();\n // responses come back as an array of subIds, so we need to know the sources\n this.#pendingSubscriptions.set(id, readySubs);\n // every subscribe message \"overwrites\" the previous ones that are not\n // re-included, so we have to reconstitute the entire list of subscriptions\n const subscribe = {\n id,\n requests: readySubs.map(({ objectSet, requestedProperties, requestedReferenceProperties }) => {\n return {\n objectSet: objectSet,\n propertySet: requestedProperties,\n referenceSet: requestedReferenceProperties,\n };\n }),\n };\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace({ payload: subscribe }, \"sending subscribe message\");\n }\n this.#ws?.send(JSON.stringify(subscribe));\n }\n #expire(sub) {\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace({ subscription: sub }, \"#expire()\");\n }\n // the temporary ObjectSet has expired, we should re-subscribe which will cause the\n // listener to get an onOutOfDate message when it becomes subscribed again\n sub.status = \"expired\";\n this.#initiateSubscribe(sub);\n }\n #unsubscribe(sub, newStatus = \"done\") {\n if (subscriptionIsDone(sub)) {\n // if we are already done, we don't need to do anything\n return;\n }\n sub.status = newStatus;\n // make sure listeners do nothing now\n sub.listener = fillOutListener({});\n if (sub.expiry) {\n clearTimeout(sub.expiry);\n sub.expiry = undefined;\n }\n this.#subscriptions.delete(sub.subscriptionId);\n // If we have no more subscriptions, we can disconnect the websocket\n // however we should wait a bit to see if we get any more subscriptions.\n // For example, when switching between react views, you may unsubscribe\n // in the old view and subscribe in the new view. We don't need to re-establish\n // the websocket connection in that case.\n if (this.#maybeDisconnectTimeout) {\n // We reset the timeout on every unsubscribe so its always at least 15s from\n // the last time we are empty. E.g.:\n // - 0s: Subscribe(A)\n // - 10s: Unsubscribe(A)\n // - 11s: Subscribe(B)\n // - 20s: Unsubscribe(B)\n // If we do not clear out the timeout we would disconnect at 25s but that would only be\n // 5s after the last subscription was removed instead of at 35s for the desired 15s.\n clearTimeout(this.#maybeDisconnectTimeout);\n }\n this.#maybeDisconnectTimeout = setTimeout(() => {\n this.#maybeDisconnectTimeout = undefined;\n if (this.#subscriptions.size === 0) {\n this.#cycleWebsocket();\n }\n }, 15_000 /* ms */);\n }\n async #ensureWebsocket() {\n if (this.#ws == null) {\n const { baseUrl, tokenProvider } = this.#client;\n const base = new URL(baseUrl);\n const url = `wss://${base.host}/api/v2/ontologySubscriptions/ontologies/${this.#client.ontologyRid}/streamSubscriptions`;\n const token = await tokenProvider();\n // tokenProvider is async, there could potentially be a race to create the websocket.\n // Only the first call to reach here will find a null this.#ws, the rest will bail out\n if (this.#ws == null) {\n // TODO this can probably be exponential backoff with jitter\n // don't reconnect more quickly than MINIMUM_RECONNECT_DELAY\n const nextConnectTime = (this.#lastWsConnect ?? 0)\n + this.MINIMUM_RECONNECT_DELAY_MS;\n if (nextConnectTime > Date.now()) {\n await new Promise((resolve) => {\n setTimeout(resolve, nextConnectTime - Date.now());\n });\n }\n this.#lastWsConnect = Date.now();\n // we again may have lost the race after our minimum backoff time\n if (this.#ws == null) {\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace(\"Creating websocket\");\n }\n this.#ws = new WebSocket(url, [`Bearer-${token}`]);\n this.#ws.addEventListener(\"close\", this.#onClose);\n this.#ws.addEventListener(\"message\", this.#onMessage);\n this.#ws.addEventListener(\"open\", this.#onOpen);\n }\n }\n // Allow await-ing the websocket open event if it isn't open already.\n // This needs to happen even for callers that didn't just create this.#ws\n if (this.#ws.readyState === WebSocket.CONNECTING) {\n const ws = this.#ws;\n return new Promise((resolve, reject) => {\n function cleanup() {\n ws.removeEventListener(\"open\", open);\n ws.removeEventListener(\"error\", error);\n ws.removeEventListener(\"close\", cleanup);\n }\n function open() {\n cleanup();\n resolve();\n }\n function error(evt) {\n cleanup();\n reject(evt);\n }\n ws.addEventListener(\"open\", open);\n ws.addEventListener(\"error\", error);\n ws.addEventListener(\"close\", cleanup);\n });\n }\n }\n }\n #onOpen = () => {\n // resubscribe all of the listeners\n this.#sendSubscribeMessage();\n };\n #onMessage = async (message) => {\n const data = JSON.parse(message.data.toString());\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace({ payload: data }, \"received message from ws\");\n }\n switch (data.type) {\n case \"objectSetChanged\":\n return this.#handleMessage_objectSetChanged(data);\n case \"refreshObjectSet\":\n return this.#handleMessage_refreshObjectSet(data);\n case \"subscribeResponses\":\n return this.#handleMessage_subscribeResponses(data);\n case \"subscriptionClosed\": {\n return this.#handleMessage_subscriptionClosed(data);\n }\n default:\n const _ = data;\n invariant(false, \"Unexpected message type\");\n }\n };\n #handleMessage_objectSetChanged = async (payload) => {\n const sub = this.#subscriptions.get(payload.id);\n invariant(sub, `Expected subscription id ${payload.id}`);\n const objectUpdates = payload.updates.filter((update) => update.type === \"object\");\n const referenceUpdates = payload.updates.filter((update) => update.type === \"reference\");\n const osdkObjectsWithReferenceUpdates = await Promise.all(referenceUpdates.map(async (o) => {\n const osdkObjectArray = await convertWireToOsdkObjects(this.#client, [{\n __apiName: o.objectType,\n __primaryKey: o.primaryKey[sub.primaryKeyPropertyName],\n ...o.primaryKey,\n [o.property]: o.value,\n }], undefined);\n const singleOsdkObject = osdkObjectArray[0] ?? undefined;\n return singleOsdkObject != null\n ? {\n object: singleOsdkObject,\n state: \"ADDED_OR_UPDATED\",\n }\n : undefined;\n }));\n for (const osdkObject of osdkObjectsWithReferenceUpdates) {\n if (osdkObject != null) {\n sub.listener.onChange?.(osdkObject);\n }\n }\n const osdkObjects = await Promise.all(objectUpdates.map(async (o) => {\n const keysToDelete = Object.keys(o.object).filter((key) => sub.requestedReferenceProperties.includes(key));\n for (const key of keysToDelete) {\n delete o.object[key];\n }\n const osdkObjectArray = await convertWireToOsdkObjects(this.#client, [o.object], undefined);\n const singleOsdkObject = osdkObjectArray[0] ?? undefined;\n return singleOsdkObject != null\n ? {\n object: singleOsdkObject,\n state: o.state,\n }\n : undefined;\n }));\n for (const osdkObject of osdkObjects) {\n if (osdkObject != null) {\n sub.listener.onChange?.(osdkObject);\n }\n }\n };\n #handleMessage_refreshObjectSet = (payload) => {\n const sub = this.#subscriptions.get(payload.id);\n invariant(sub, `Expected subscription id ${payload.id}`);\n sub.listener.onOutOfDate();\n };\n #handleMessage_subscribeResponses = (payload) => {\n const { id, responses } = payload;\n const subs = this.#pendingSubscriptions.get(id);\n invariant(subs, `should have a pending subscription for ${id}`);\n this.#pendingSubscriptions.delete(id);\n for (let i = 0; i < responses.length; i++) {\n const sub = subs[i];\n const response = responses[i];\n switch (response.type) {\n case \"error\":\n sub.listener.onError(response.errors);\n this.#unsubscribe(sub, \"error\");\n break;\n case \"qos\":\n // the server has requested that we tear down our websocket and reconnect to help load balance\n this.#cycleWebsocket();\n break;\n case \"success\":\n // `\"preparing\"` should only be the status on an initial subscribe.\n const shouldFireOutOfDate = sub.status === \"expired\"\n || sub.status === \"reconnecting\";\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace({ shouldFireOutOfDate }, \"success\");\n }\n sub.status = \"subscribed\";\n if (sub.subscriptionId !== response.id) {\n // might be the temporary one\n this.#subscriptions.delete(sub.subscriptionId);\n sub.subscriptionId = response.id;\n this.#subscriptions.set(sub.subscriptionId, sub); // future messages come by this subId\n }\n if (shouldFireOutOfDate)\n sub.listener.onOutOfDate();\n break;\n default:\n const _ = response;\n sub.listener.onError(response);\n }\n }\n };\n #handleMessage_subscriptionClosed(payload) {\n const sub = this.#subscriptions.get(payload.id);\n invariant(sub, `Expected subscription id ${payload.id}`);\n sub.listener.onError([payload.cause]);\n this.#unsubscribe(sub, \"error\");\n }\n #onClose = (event) => {\n if (process?.env?.NODE_ENV !== \"production\") {\n this.#logger?.trace({ event }, \"Received close event from ws\", event);\n }\n // TODO we should probably throttle this so we don't abuse the backend\n this.#cycleWebsocket();\n };\n #cycleWebsocket = () => {\n if (this.#ws) {\n this.#ws.removeEventListener(\"open\", this.#onOpen);\n this.#ws.removeEventListener(\"message\", this.#onMessage);\n this.#ws.removeEventListener(\"close\", this.#onClose);\n if (this.#ws.readyState !== WebSocket.CLOSING\n && this.#ws.readyState !== WebSocket.CLOSED) {\n this.#ws.close();\n }\n this.#ws = undefined;\n }\n // if we have any listeners that are still depending on us, go ahead and reopen the websocket\n if (this.#subscriptions.size > 0) {\n if (process?.env?.NODE_ENV !== \"production\") {\n for (const s of this.#subscriptions.values()) {\n invariant(s.status !== \"done\" && s.status !== \"error\", \"should not have done/error subscriptions still\");\n }\n }\n for (const s of this.#subscriptions.values()) {\n if (s.status === \"subscribed\")\n s.status = \"reconnecting\";\n }\n this.#ensureWebsocket();\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ObjectSetListenerWebsocket.js","names":["WebSocket","invariant","MINIMUM_RECONNECT_DELAY_MS","doNothing","fillOutListener","onChange","onError","onOutOfDate","onSuccessfulSubscription","isReady","sub","subscriptionIsDone","status","ObjectSetListenerWebsocket","instances","WeakMap","getInstance","client","instance","get","clientCacheKey","set","ws","lastWsConnect","logger","pendingSubscriptions","Map","subscriptions","endedSubscriptions","Set","maybeDisconnectTimeout","constructor","minimumReconnectDelayMs","child","msgPrefix","baseUrl","startsWith","process","env","NODE_ENV","subscribe","objectType","objectSet","listener","properties","objOrInterfaceDef","type","ontologyProvider","getObjectDefinition","apiName","getInterfaceDefinition","objectProperties","referenceProperties","length","Object","keys","filter","p","primaryKeyPropertyName","undefined","primaryKeyApiName","requestedProperties","requestedReferenceProperties","subscriptionId","nextUuid","interfaceApiName","initiateSubscribe","unsubscribe","#initiateSubscribe","trace","ensureWebsocket","readyState","OPEN","sendSubscribeMessage","error","tryCatchOnError","#sendSubscribeMessage","readySubs","values","id","requests","map","propertySet","referenceSet","payload","send","JSON","stringify","#unsubscribe","newStatus","delete","add","clearTimeout","setTimeout","size","cycleWebsocket","#ensureWebsocket","tokenProvider","url","constructWebsocketUrl","ontologyRid","token","nextConnectTime","Date","now","Promise","resolve","addEventListener","onClose","onMessage","onOpen","CONNECTING","reject","cleanup","removeEventListener","open","evt","#onOpen","message","data","parse","toString","handleMessage_objectSetChanged","handleMessage_refreshObjectSet","handleMessage_subscribeResponses","handleMessage_subscriptionClosed","objectUpdates","updates","update","referenceUpdates","osdkObjectsWithReferenceUpdates","all","o","osdkObjectArray","objectFactory2","__apiName","__primaryKey","primaryKey","property","value","fetchInterfaceMapping","singleOsdkObject","object","state","osdkObject","osdkObjects","keysToDelete","key","includes","#fetchInterfaceMapping","objectTypeApiName","interfaceMap","responses","subs","i","response","errors","shouldFireOutOfDate","#handleMessage_subscriptionClosed","has","cause","event","#cycleWebsocket","CLOSING","CLOSED","close","s","#tryCatchOnError","subscriptionClosed","onErrorError","console","base","URL","protocol","replace","uuidCounter","padStart"],"sources":["ObjectSetListenerWebsocket.ts"],"sourcesContent":["/*\n * Copyright 2023 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ObjectOrInterfaceDefinition,\n ObjectSetSubscription,\n Osdk,\n PropertyKeys,\n} from \"@osdk/api\";\nimport type {\n ObjectSet,\n ObjectSetStreamSubscribeRequest,\n ObjectSetStreamSubscribeRequests,\n ObjectSetSubscribeResponses,\n ObjectSetUpdates,\n ObjectState,\n RefreshObjectSet,\n StreamMessage,\n SubscriptionClosed,\n} from \"@osdk/foundry.ontologies\";\nimport WebSocket from \"isomorphic-ws\";\nimport invariant from \"tiny-invariant\";\nimport type { Logger } from \"../Logger.js\";\nimport type { ClientCacheKey, MinimalClient } from \"../MinimalClientContext.js\";\n\nconst MINIMUM_RECONNECT_DELAY_MS = 5 * 1000;\n\n/** Noop function to reduce conditional checks */\nfunction doNothing() {}\n\n/**\n * Converts an ObjectSetListener to one where all the functions are defined.\n */\nfunction fillOutListener<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n>(\n {\n onChange = doNothing,\n onError = doNothing,\n onOutOfDate = doNothing,\n onSuccessfulSubscription = doNothing,\n }: ObjectSetSubscription.Listener<Q, P>,\n): Required<ObjectSetSubscription.Listener<Q, P>> {\n return { onChange, onError, onOutOfDate, onSuccessfulSubscription };\n}\n\ninterface Subscription<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n> {\n listener: Required<ObjectSetSubscription.Listener<Q, P>>;\n requestedProperties: Array<P>;\n requestedReferenceProperties: Array<P>;\n objectSet: ObjectSet;\n\n subscriptionId: string;\n isReady?: boolean;\n status:\n | \"preparing\"\n | \"subscribed\"\n | \"done\"\n | \"expired\"\n | \"error\"\n | \"reconnecting\";\n\n interfaceApiName?: string;\n primaryKeyPropertyName?: string;\n}\n\nfunction isReady<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n>(\n sub: Subscription<Q, P>,\n): sub is Subscription<Q, P> & { temporaryObjectSetId: string } {\n return sub.isReady != null;\n}\n\nfunction subscriptionIsDone(sub: Subscription<any, any>) {\n return sub.status === \"done\" || sub.status === \"error\";\n}\n\n/** @internal */\nexport class ObjectSetListenerWebsocket {\n static #instances = new WeakMap<\n ClientCacheKey,\n ObjectSetListenerWebsocket\n >();\n readonly MINIMUM_RECONNECT_DELAY_MS: number;\n\n // FIXME\n static getInstance(client: MinimalClient): ObjectSetListenerWebsocket {\n let instance = ObjectSetListenerWebsocket.#instances.get(\n client.clientCacheKey,\n );\n if (instance == null) {\n instance = new ObjectSetListenerWebsocket(client);\n ObjectSetListenerWebsocket.#instances.set(\n client.clientCacheKey,\n instance,\n );\n }\n return instance;\n }\n\n #ws: WebSocket | undefined;\n #lastWsConnect = 0;\n #client: MinimalClient;\n\n #logger?: Logger;\n\n /**\n * map of requestId to all active subscriptions at the time of the request\n */\n #pendingSubscriptions = new Map<\n string,\n Subscription<any, any>[]\n >();\n\n /**\n * Map of subscriptionId to Subscription. Note: the subscriptionId may be\n * temporary and not the actual subscriptionId from the server.\n */\n #subscriptions = new Map<\n string,\n Subscription<any, any>\n >();\n\n #endedSubscriptions = new Set<\n string\n >();\n\n #maybeDisconnectTimeout: ReturnType<typeof setTimeout> | undefined;\n\n // DO NOT CONSTRUCT DIRECTLY. ONLY EXPOSED AS A TESTING SEAM\n constructor(\n client: MinimalClient,\n {\n minimumReconnectDelayMs = MINIMUM_RECONNECT_DELAY_MS,\n } = {},\n ) {\n this.MINIMUM_RECONNECT_DELAY_MS = minimumReconnectDelayMs;\n this.#client = client;\n this.#logger = client.logger?.child({}, {\n msgPrefix: \"<OSW> \",\n });\n invariant(\n client.baseUrl.startsWith(\"https://\")\n || client.baseUrl.startsWith(\"http://\"),\n \"Stack must be a URL\",\n );\n }\n\n async subscribe<\n Q extends ObjectOrInterfaceDefinition,\n P extends PropertyKeys<Q>,\n >(\n objectType: ObjectOrInterfaceDefinition,\n objectSet: ObjectSet,\n listener: ObjectSetSubscription.Listener<Q, P>,\n properties: Array<P> = [],\n ): Promise<() => void> {\n const objOrInterfaceDef = objectType.type === \"object\"\n ? await this.#client.ontologyProvider.getObjectDefinition(\n objectType.apiName,\n )\n : await this.#client.ontologyProvider.getInterfaceDefinition(\n objectType.apiName,\n );\n\n let objectProperties: Array<P> = [];\n let referenceProperties: Array<P> = [];\n\n if (properties.length === 0) {\n properties = Object.keys(objOrInterfaceDef.properties) as Array<P>;\n }\n\n objectProperties = properties.filter((p) =>\n objOrInterfaceDef.properties[p].type !== \"geotimeSeriesReference\"\n );\n\n referenceProperties = properties.filter((p) =>\n objOrInterfaceDef.properties[p].type === \"geotimeSeriesReference\"\n );\n\n const sub: Subscription<Q, P> = {\n listener: fillOutListener<Q, P>(listener),\n objectSet,\n primaryKeyPropertyName: objOrInterfaceDef.type === \"interface\"\n ? undefined\n : objOrInterfaceDef.primaryKeyApiName,\n requestedProperties: objectProperties,\n requestedReferenceProperties: referenceProperties,\n status: \"preparing\",\n // Since we don't have a real subscription id yet but we need to keep\n // track of this reference, we can just use a random uuid.\n subscriptionId: `TMP-${nextUuid()}}`,\n interfaceApiName: objOrInterfaceDef.type === \"object\"\n ? undefined\n : objOrInterfaceDef.apiName,\n };\n\n this.#subscriptions.set(sub.subscriptionId, sub);\n\n // actually prepares the subscription, ensures the ws is ready, and sends\n // a subscribe message. We don't want to block on this.\n void this.#initiateSubscribe(sub);\n\n return () => {\n this.#unsubscribe(sub);\n };\n }\n\n /**\n * Called at least once for every subscription.\n *\n * - Resets pending expiry\n * - Recreates temporary object set\n * - Triggers a full subscribe message\n *\n * @returns\n */\n async #initiateSubscribe(sub: Subscription<any, any>) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace(\"#initiateSubscribe()\");\n }\n\n try {\n await this.#ensureWebsocket();\n\n // the consumer may have already unsubscribed before we are ready to request a subscription\n // so we have to acquire the pendingSubscription after the await.\n if (subscriptionIsDone(sub)) {\n return;\n }\n sub.isReady = true;\n // if we aren't open, then this happens after we #onConnect\n if (this.#ws?.readyState === WebSocket.OPEN) {\n this.#sendSubscribeMessage();\n }\n } catch (error) {\n this.#logger?.error(error, \"Error in #initiateSubscribe\");\n this.#tryCatchOnError(sub, true, error);\n }\n }\n\n #sendSubscribeMessage() {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace(\"#sendSubscribeMessage()\");\n }\n // If two calls to `.subscribe()` happen at once (or if the connection is reset),\n // we may have multiple subscriptions that don't have a subscriptionId yet,\n // so we filter those out.\n const readySubs = [...this.#subscriptions.values()].filter(isReady);\n\n const id = nextUuid();\n // responses come back as an array of subIds, so we need to know the sources\n this.#pendingSubscriptions.set(id, readySubs);\n\n // every subscribe message \"overwrites\" the previous ones that are not\n // re-included, so we have to reconstitute the entire list of subscriptions\n const subscribe: ObjectSetStreamSubscribeRequests = {\n id,\n requests: readySubs.map<ObjectSetStreamSubscribeRequest>((\n {\n objectSet,\n requestedProperties,\n requestedReferenceProperties,\n interfaceApiName,\n },\n ) => {\n return {\n objectSet: objectSet,\n propertySet: requestedProperties,\n referenceSet: requestedReferenceProperties,\n };\n }),\n };\n\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace(\n { payload: subscribe },\n \"sending subscribe message\",\n );\n }\n this.#ws?.send(JSON.stringify(subscribe));\n }\n\n #unsubscribe<Q extends ObjectOrInterfaceDefinition>(\n sub: Subscription<Q, any>,\n newStatus: \"done\" | \"error\" = \"done\",\n ) {\n if (subscriptionIsDone(sub)) {\n // if we are already done, we don't need to do anything\n return;\n }\n\n sub.status = newStatus;\n\n // make sure listeners do nothing now\n sub.listener = fillOutListener<Q, any>({});\n\n this.#subscriptions.delete(sub.subscriptionId);\n this.#endedSubscriptions.add(sub.subscriptionId);\n this.#sendSubscribeMessage();\n\n // If we have no more subscriptions, we can disconnect the websocket\n // however we should wait a bit to see if we get any more subscriptions.\n // For example, when switching between react views, you may unsubscribe\n // in the old view and subscribe in the new view. We don't need to re-establish\n // the websocket connection in that case.\n if (this.#maybeDisconnectTimeout) {\n // We reset the timeout on every unsubscribe so its always at least 15s from\n // the last time we are empty. E.g.:\n // - 0s: Subscribe(A)\n // - 10s: Unsubscribe(A)\n // - 11s: Subscribe(B)\n // - 20s: Unsubscribe(B)\n // If we do not clear out the timeout we would disconnect at 25s but that would only be\n // 5s after the last subscription was removed instead of at 35s for the desired 15s.\n clearTimeout(this.#maybeDisconnectTimeout);\n }\n this.#maybeDisconnectTimeout = setTimeout(() => {\n this.#maybeDisconnectTimeout = undefined;\n if (this.#subscriptions.size === 0) {\n this.#cycleWebsocket();\n }\n }, 15_000 /* ms */);\n }\n\n async #ensureWebsocket() {\n if (this.#ws == null) {\n const { baseUrl, tokenProvider } = this.#client;\n const url = constructWebsocketUrl(\n baseUrl,\n await this.#client.ontologyRid,\n );\n\n const token = await tokenProvider();\n\n // tokenProvider is async, there could potentially be a race to create the websocket.\n // Only the first call to reach here will find a null this.#ws, the rest will bail out\n if (this.#ws == null) {\n // TODO this can probably be exponential backoff with jitter\n // don't reconnect more quickly than MINIMUM_RECONNECT_DELAY\n const nextConnectTime = (this.#lastWsConnect ?? 0)\n + this.MINIMUM_RECONNECT_DELAY_MS;\n if (nextConnectTime > Date.now()) {\n await new Promise((resolve) => {\n setTimeout(resolve, nextConnectTime - Date.now());\n });\n }\n\n this.#lastWsConnect = Date.now();\n\n // we again may have lost the race after our minimum backoff time\n if (this.#ws == null) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace(\"Creating websocket\");\n }\n this.#ws = new WebSocket(url, [`Bearer-${token}`]);\n this.#ws.addEventListener(\"close\", this.#onClose);\n this.#ws.addEventListener(\"message\", this.#onMessage);\n this.#ws.addEventListener(\"open\", this.#onOpen);\n }\n }\n // Allow await-ing the websocket open event if it isn't open already.\n // This needs to happen even for callers that didn't just create this.#ws\n if (this.#ws.readyState === WebSocket.CONNECTING) {\n const ws = this.#ws;\n return new Promise<void>((resolve, reject) => {\n function cleanup() {\n ws.removeEventListener(\"open\", open);\n ws.removeEventListener(\"error\", error);\n ws.removeEventListener(\"close\", cleanup);\n }\n function open() {\n cleanup();\n resolve();\n }\n function error(evt: unknown) {\n cleanup();\n reject(evt);\n }\n ws.addEventListener(\"open\", open);\n ws.addEventListener(\"error\", error);\n ws.addEventListener(\"close\", cleanup);\n });\n }\n }\n }\n\n #onOpen = () => {\n // resubscribe all of the listeners\n this.#sendSubscribeMessage();\n };\n\n #onMessage = async (message: WebSocket.MessageEvent) => {\n const data = JSON.parse(message.data.toString()) as StreamMessage;\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace({ payload: data }, \"received message from ws\");\n }\n switch (data.type) {\n case \"objectSetChanged\":\n return void this.#handleMessage_objectSetChanged(data);\n\n case \"refreshObjectSet\":\n return void this.#handleMessage_refreshObjectSet(data);\n\n case \"subscribeResponses\":\n return void this.#handleMessage_subscribeResponses(data);\n\n case \"subscriptionClosed\": {\n return void this.#handleMessage_subscriptionClosed(data);\n }\n\n default:\n const _: never = data;\n invariant(false, \"Unexpected message type\");\n }\n };\n\n #handleMessage_objectSetChanged = async (\n payload: ObjectSetUpdates,\n ) => {\n const sub = this.#subscriptions.get(payload.id);\n if (sub == null) return;\n\n const objectUpdates = payload.updates.filter((update) =>\n update.type === \"object\"\n );\n const referenceUpdates = payload.updates.filter((update) =>\n update.type === \"reference\"\n );\n const osdkObjectsWithReferenceUpdates = await Promise.all(\n referenceUpdates.map(async (o) => {\n const osdkObjectArray = await this.#client.objectFactory2(\n this.#client,\n [{\n __apiName: o.objectType,\n __primaryKey: sub.primaryKeyPropertyName != null\n ? o.primaryKey[sub.primaryKeyPropertyName]\n : undefined,\n ...o.primaryKey,\n [o.property]: o.value,\n }],\n sub.interfaceApiName,\n false,\n undefined,\n false,\n await this.#fetchInterfaceMapping(\n o.objectType,\n sub.interfaceApiName,\n ),\n ) as Array<Osdk.Instance<any, never, any>>;\n const singleOsdkObject = osdkObjectArray[0] ?? undefined;\n return singleOsdkObject != null\n ? {\n object: singleOsdkObject,\n state: \"ADDED_OR_UPDATED\" as ObjectState,\n }\n : undefined;\n }),\n );\n\n for (const osdkObject of osdkObjectsWithReferenceUpdates) {\n if (osdkObject != null) {\n try {\n sub.listener.onChange?.(osdkObject);\n } catch (error) {\n this.#logger?.error(error, \"Error in onChange callback\");\n this.#tryCatchOnError(sub, false, error);\n }\n }\n }\n\n const osdkObjects = await Promise.all(objectUpdates.map(async (o) => {\n const keysToDelete = Object.keys(o.object).filter((key) =>\n sub.requestedReferenceProperties.includes(key)\n );\n for (const key of keysToDelete) {\n delete o.object[key];\n }\n\n const osdkObjectArray = await this.#client.objectFactory2(\n this.#client,\n [o.object],\n sub.interfaceApiName,\n false,\n undefined,\n false,\n await this.#fetchInterfaceMapping(\n o.object.__apiName,\n sub.interfaceApiName,\n ),\n ) as Array<Osdk.Instance<any, never, any>>;\n const singleOsdkObject = osdkObjectArray[0] ?? undefined;\n return singleOsdkObject != null\n ? {\n object: singleOsdkObject,\n state: o.state,\n }\n : undefined;\n }));\n\n for (const osdkObject of osdkObjects) {\n if (osdkObject != null) {\n try {\n sub.listener.onChange?.(osdkObject);\n } catch (error) {\n this.#logger?.error(error, \"Error in onChange callback\");\n this.#tryCatchOnError(sub, false, error);\n }\n }\n }\n };\n\n async #fetchInterfaceMapping(\n objectTypeApiName: string,\n interfaceApiName: string | undefined,\n ): Promise<Record<string, Record<string, Record<string, string>>>> {\n if (interfaceApiName == null) return {};\n const interfaceMap = (await this.#client.ontologyProvider\n .getObjectDefinition(objectTypeApiName)).interfaceMap;\n return {\n [interfaceApiName]: {\n [objectTypeApiName]: interfaceMap[interfaceApiName],\n },\n };\n }\n\n #handleMessage_refreshObjectSet = (payload: RefreshObjectSet) => {\n const sub = this.#subscriptions.get(payload.id);\n invariant(sub, `Expected subscription id ${payload.id}`);\n try {\n sub.listener.onOutOfDate();\n } catch (error) {\n this.#logger?.error(error, \"Error in onOutOfDate callback\");\n this.#tryCatchOnError(sub, false, error);\n }\n };\n\n #handleMessage_subscribeResponses = (\n payload: ObjectSetSubscribeResponses,\n ) => {\n const { id, responses } = payload;\n\n const subs = this.#pendingSubscriptions.get(id);\n invariant(subs, `should have a pending subscription for ${id}`);\n this.#pendingSubscriptions.delete(id);\n\n for (let i = 0; i < responses.length; i++) {\n const sub = subs[i];\n const response = responses[i];\n\n switch (response.type) {\n case \"error\":\n this.#tryCatchOnError(sub, true, response.errors);\n this.#unsubscribe(sub, \"error\");\n break;\n\n case \"qos\":\n // the server has requested that we tear down our websocket and reconnect to help load balance\n this.#cycleWebsocket();\n break;\n\n case \"success\":\n // `\"preparing\"` should only be the status on an initial subscribe.\n const shouldFireOutOfDate = sub.status === \"expired\"\n || sub.status === \"reconnecting\";\n\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace({ shouldFireOutOfDate }, \"success\");\n }\n sub.status = \"subscribed\";\n if (sub.subscriptionId !== response.id) {\n // might be the temporary one\n this.#subscriptions.delete(sub.subscriptionId);\n sub.subscriptionId = response.id;\n this.#subscriptions.set(sub.subscriptionId, sub); // future messages come by this subId\n }\n try {\n if (shouldFireOutOfDate) sub.listener.onOutOfDate();\n else sub.listener.onSuccessfulSubscription();\n } catch (error) {\n this.#logger?.error(\n error,\n \"Error in onOutOfDate or onSuccessfulSubscription callback\",\n );\n this.#tryCatchOnError(sub, false, error);\n }\n break;\n default:\n this.#tryCatchOnError(sub, true, response);\n }\n }\n };\n\n #handleMessage_subscriptionClosed(payload: SubscriptionClosed) {\n const sub = this.#subscriptions.get(payload.id);\n if (sub == null && this.#endedSubscriptions.has(payload.id)) return;\n invariant(sub, `Expected subscription id ${payload.id}`);\n this.#tryCatchOnError(sub, true, payload.cause);\n this.#unsubscribe(sub, \"error\");\n }\n\n #onClose = (event: WebSocket.CloseEvent) => {\n if (process.env.NODE_ENV !== \"production\") {\n this.#logger?.trace({ event }, \"Received close event from ws\", event);\n }\n // TODO we should probably throttle this so we don't abuse the backend\n this.#cycleWebsocket();\n };\n\n #cycleWebsocket = () => {\n if (this.#ws) {\n this.#ws.removeEventListener(\"open\", this.#onOpen);\n this.#ws.removeEventListener(\"message\", this.#onMessage);\n this.#ws.removeEventListener(\"close\", this.#onClose);\n\n if (\n this.#ws.readyState !== WebSocket.CLOSING\n && this.#ws.readyState !== WebSocket.CLOSED\n ) {\n this.#ws.close();\n }\n this.#ws = undefined;\n }\n\n // if we have any listeners that are still depending on us, go ahead and reopen the websocket\n if (this.#subscriptions.size > 0) {\n if (process.env.NODE_ENV !== \"production\") {\n for (const s of this.#subscriptions.values()) {\n invariant(\n s.status !== \"done\" && s.status !== \"error\",\n \"should not have done/error subscriptions still\",\n );\n }\n }\n\n for (const s of this.#subscriptions.values()) {\n if (s.status === \"subscribed\") s.status = \"reconnecting\";\n }\n\n // we don't care about the result of this (we want cycleWebsocket to be fire and forget)\n // just that it happens\n void this.#ensureWebsocket();\n }\n };\n\n #tryCatchOnError = (\n sub: Subscription<any, any>,\n subscriptionClosed: boolean,\n error: any,\n ) => {\n try {\n sub.listener.onError({ subscriptionClosed: subscriptionClosed, error });\n } catch (onErrorError) {\n // eslint-disable-next-line no-console\n console.error(\n `Error encountered in an onError callback for an OSDK subscription`,\n onErrorError,\n );\n // eslint-disable-next-line no-console\n console.error(\n `This onError call was triggered by an error in another callback`,\n error,\n );\n // eslint-disable-next-line no-console\n console.error(\n `The subscription has been closed.`,\n error,\n );\n\n if (!subscriptionClosed) {\n this.#logger?.error(error, \"Error in onError callback\");\n this.#unsubscribe(sub, \"error\");\n this.#tryCatchOnError(sub, true, onErrorError);\n }\n }\n };\n}\n\n/** @internal */\nexport function constructWebsocketUrl(\n baseUrl: string,\n ontologyRid: string,\n) {\n const base = new URL(baseUrl);\n const url = new URL(\n `api/v2/ontologySubscriptions/ontologies/${ontologyRid}/streamSubscriptions`,\n base,\n );\n url.protocol = url.protocol.replace(\"https\", \"wss\");\n return url;\n}\n\nlet uuidCounter = 0;\n\nfunction nextUuid() {\n return `00000000-0000-0000-0000-${\n (uuidCounter++).toString().padStart(12, \"0\")\n }`;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAmBA,OAAOA,SAAS,MAAM,eAAe;AACrC,OAAOC,SAAS,MAAM,gBAAgB;AAItC,MAAMC,0BAA0B,GAAG,CAAC,GAAG,IAAI;;AAE3C;AACA,SAASC,SAASA,CAAA,EAAG,CAAC;;AAEtB;AACA;AACA;AACA,SAASC,eAAeA,CAItB;EACEC,QAAQ,GAAGF,SAAS;EACpBG,OAAO,GAAGH,SAAS;EACnBI,WAAW,GAAGJ,SAAS;EACvBK,wBAAwB,GAAGL;AACS,CAAC,EACS;EAChD,OAAO;IAAEE,QAAQ;IAAEC,OAAO;IAAEC,WAAW;IAAEC;EAAyB,CAAC;AACrE;AAyBA,SAASC,OAAOA,CAIdC,GAAuB,EACuC;EAC9D,OAAOA,GAAG,CAACD,OAAO,IAAI,IAAI;AAC5B;AAEA,SAASE,kBAAkBA,CAACD,GAA2B,EAAE;EACvD,OAAOA,GAAG,CAACE,MAAM,KAAK,MAAM,IAAIF,GAAG,CAACE,MAAM,KAAK,OAAO;AACxD;;AAEA;AACA,OAAO,MAAMC,0BAA0B,CAAC;EACtC,OAAO,CAACC,SAAS,GAAG,IAAIC,OAAO,CAG7B,CAAC;EAGH;EACA,OAAOC,WAAWA,CAACC,MAAqB,EAA8B;IACpE,IAAIC,QAAQ,GAAGL,0BAA0B,CAAC,CAACC,SAAS,CAACK,GAAG,CACtDF,MAAM,CAACG,cACT,CAAC;IACD,IAAIF,QAAQ,IAAI,IAAI,EAAE;MACpBA,QAAQ,GAAG,IAAIL,0BAA0B,CAACI,MAAM,CAAC;MACjDJ,0BAA0B,CAAC,CAACC,SAAS,CAACO,GAAG,CACvCJ,MAAM,CAACG,cAAc,EACrBF,QACF,CAAC;IACH;IACA,OAAOA,QAAQ;EACjB;EAEA,CAACI,EAAE;EACH,CAACC,aAAa,GAAG,CAAC;EAClB,CAACN,MAAM;EAEP,CAACO,MAAM;;EAEP;AACF;AACA;EACE,CAACC,oBAAoB,GAAG,IAAIC,GAAG,CAG7B,CAAC;;EAEH;AACF;AACA;AACA;EACE,CAACC,aAAa,GAAG,IAAID,GAAG,CAGtB,CAAC;EAEH,CAACE,kBAAkB,GAAG,IAAIC,GAAG,CAE3B,CAAC;EAEH,CAACC,sBAAsB;;EAEvB;EACAC,WAAWA,CACTd,MAAqB,EACrB;IACEe,uBAAuB,GAAG9B;EAC5B,CAAC,GAAG,CAAC,CAAC,EACN;IACA,IAAI,CAACA,0BAA0B,GAAG8B,uBAAuB;IACzD,IAAI,CAAC,CAACf,MAAM,GAAGA,MAAM;IACrB,IAAI,CAAC,CAACO,MAAM,GAAGP,MAAM,CAACO,MAAM,EAAES,KAAK,CAAC,CAAC,CAAC,EAAE;MACtCC,SAAS,EAAE;IACb,CAAC,CAAC;IACF,EACEjB,MAAM,CAACkB,OAAO,CAACC,UAAU,CAAC,UAAU,CAAC,IAChCnB,MAAM,CAACkB,OAAO,CAACC,UAAU,CAAC,SAAS,CAAC,IAAAC,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAF3CtC,SAAS,QAGP,qBAAqB,IAHvBA,SAAS;EAKX;EAEA,MAAMuC,SAASA,CAIbC,UAAuC,EACvCC,SAAoB,EACpBC,QAA8C,EAC9CC,UAAoB,GAAG,EAAE,EACJ;IACrB,MAAMC,iBAAiB,GAAGJ,UAAU,CAACK,IAAI,KAAK,QAAQ,GAClD,MAAM,IAAI,CAAC,CAAC7B,MAAM,CAAC8B,gBAAgB,CAACC,mBAAmB,CACvDP,UAAU,CAACQ,OACb,CAAC,GACC,MAAM,IAAI,CAAC,CAAChC,MAAM,CAAC8B,gBAAgB,CAACG,sBAAsB,CAC1DT,UAAU,CAACQ,OACb,CAAC;IAEH,IAAIE,gBAA0B,GAAG,EAAE;IACnC,IAAIC,mBAA6B,GAAG,EAAE;IAEtC,IAAIR,UAAU,CAACS,MAAM,KAAK,CAAC,EAAE;MAC3BT,UAAU,GAAGU,MAAM,CAACC,IAAI,CAACV,iBAAiB,CAACD,UAAU,CAAa;IACpE;IAEAO,gBAAgB,GAAGP,UAAU,CAACY,MAAM,CAAEC,CAAC,IACrCZ,iBAAiB,CAACD,UAAU,CAACa,CAAC,CAAC,CAACX,IAAI,KAAK,wBAC3C,CAAC;IAEDM,mBAAmB,GAAGR,UAAU,CAACY,MAAM,CAAEC,CAAC,IACxCZ,iBAAiB,CAACD,UAAU,CAACa,CAAC,CAAC,CAACX,IAAI,KAAK,wBAC3C,CAAC;IAED,MAAMpC,GAAuB,GAAG;MAC9BiC,QAAQ,EAAEvC,eAAe,CAAOuC,QAAQ,CAAC;MACzCD,SAAS;MACTgB,sBAAsB,EAAEb,iBAAiB,CAACC,IAAI,KAAK,WAAW,GAC1Da,SAAS,GACTd,iBAAiB,CAACe,iBAAiB;MACvCC,mBAAmB,EAAEV,gBAAgB;MACrCW,4BAA4B,EAAEV,mBAAmB;MACjDxC,MAAM,EAAE,WAAW;MACnB;MACA;MACAmD,cAAc,EAAE,OAAOC,QAAQ,CAAC,CAAC,GAAG;MACpCC,gBAAgB,EAAEpB,iBAAiB,CAACC,IAAI,KAAK,QAAQ,GACjDa,SAAS,GACTd,iBAAiB,CAACI;IACxB,CAAC;IAED,IAAI,CAAC,CAACtB,aAAa,CAACN,GAAG,CAACX,GAAG,CAACqD,cAAc,EAAErD,GAAG,CAAC;;IAEhD;IACA;IACA,KAAK,IAAI,CAAC,CAACwD,iBAAiB,CAACxD,GAAG,CAAC;IAEjC,OAAO,MAAM;MACX,IAAI,CAAC,CAACyD,WAAW,CAACzD,GAAG,CAAC;IACxB,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAM,CAACwD,iBAAiBE,CAAC1D,GAA2B,EAAE;IACpD,IAAI2B,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;MACzC,IAAI,CAAC,CAACf,MAAM,EAAE6C,KAAK,CAAC,sBAAsB,CAAC;IAC7C;IAEA,IAAI;MACF,MAAM,IAAI,CAAC,CAACC,eAAe,CAAC,CAAC;;MAE7B;MACA;MACA,IAAI3D,kBAAkB,CAACD,GAAG,CAAC,EAAE;QAC3B;MACF;MACAA,GAAG,CAACD,OAAO,GAAG,IAAI;MAClB;MACA,IAAI,IAAI,CAAC,CAACa,EAAE,EAAEiD,UAAU,KAAKvE,SAAS,CAACwE,IAAI,EAAE;QAC3C,IAAI,CAAC,CAACC,oBAAoB,CAAC,CAAC;MAC9B;IACF,CAAC,CAAC,OAAOC,KAAK,EAAE;MACd,IAAI,CAAC,CAAClD,MAAM,EAAEkD,KAAK,CAACA,KAAK,EAAE,6BAA6B,CAAC;MACzD,IAAI,CAAC,CAACC,eAAe,CAACjE,GAAG,EAAE,IAAI,EAAEgE,KAAK,CAAC;IACzC;EACF;EAEA,CAACD,oBAAoBG,CAAA,EAAG;IACtB,IAAIvC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;MACzC,IAAI,CAAC,CAACf,MAAM,EAAE6C,KAAK,CAAC,yBAAyB,CAAC;IAChD;IACA;IACA;IACA;IACA,MAAMQ,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,CAAClD,aAAa,CAACmD,MAAM,CAAC,CAAC,CAAC,CAACtB,MAAM,CAAC/C,OAAO,CAAC;IAEnE,MAAMsE,EAAE,GAAGf,QAAQ,CAAC,CAAC;IACrB;IACA,IAAI,CAAC,CAACvC,oBAAoB,CAACJ,GAAG,CAAC0D,EAAE,EAAEF,SAAS,CAAC;;IAE7C;IACA;IACA,MAAMrC,SAA2C,GAAG;MAClDuC,EAAE;MACFC,QAAQ,EAAEH,SAAS,CAACI,GAAG,CAAkC,CACvD;QACEvC,SAAS;QACTmB,mBAAmB;QACnBC,4BAA4B;QAC5BG;MACF,CAAC,KACE;QACH,OAAO;UACLvB,SAAS,EAAEA,SAAS;UACpBwC,WAAW,EAAErB,mBAAmB;UAChCsB,YAAY,EAAErB;QAChB,CAAC;MACH,CAAC;IACH,CAAC;IAED,IAAIzB,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;MACzC,IAAI,CAAC,CAACf,MAAM,EAAE6C,KAAK,CACjB;QAAEe,OAAO,EAAE5C;MAAU,CAAC,EACtB,2BACF,CAAC;IACH;IACA,IAAI,CAAC,CAAClB,EAAE,EAAE+D,IAAI,CAACC,IAAI,CAACC,SAAS,CAAC/C,SAAS,CAAC,CAAC;EAC3C;EAEA,CAAC2B,WAAWqB,CACV9E,GAAyB,EACzB+E,SAA2B,GAAG,MAAM,EACpC;IACA,IAAI9E,kBAAkB,CAACD,GAAG,CAAC,EAAE;MAC3B;MACA;IACF;IAEAA,GAAG,CAACE,MAAM,GAAG6E,SAAS;;IAEtB;IACA/E,GAAG,CAACiC,QAAQ,GAAGvC,eAAe,CAAS,CAAC,CAAC,CAAC;IAE1C,IAAI,CAAC,CAACuB,aAAa,CAAC+D,MAAM,CAAChF,GAAG,CAACqD,cAAc,CAAC;IAC9C,IAAI,CAAC,CAACnC,kBAAkB,CAAC+D,GAAG,CAACjF,GAAG,CAACqD,cAAc,CAAC;IAChD,IAAI,CAAC,CAACU,oBAAoB,CAAC,CAAC;;IAE5B;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,CAAC3C,sBAAsB,EAAE;MAChC;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA8D,YAAY,CAAC,IAAI,CAAC,CAAC9D,sBAAsB,CAAC;IAC5C;IACA,IAAI,CAAC,CAACA,sBAAsB,GAAG+D,UAAU,CAAC,MAAM;MAC9C,IAAI,CAAC,CAAC/D,sBAAsB,GAAG6B,SAAS;MACxC,IAAI,IAAI,CAAC,CAAChC,aAAa,CAACmE,IAAI,KAAK,CAAC,EAAE;QAClC,IAAI,CAAC,CAACC,cAAc,CAAC,CAAC;MACxB;IACF,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;EACrB;EAEA,MAAM,CAACzB,eAAe0B,CAAA,EAAG;IACvB,IAAI,IAAI,CAAC,CAAC1E,EAAE,IAAI,IAAI,EAAE;MACpB,MAAM;QAAEa,OAAO;QAAE8D;MAAc,CAAC,GAAG,IAAI,CAAC,CAAChF,MAAM;MAC/C,MAAMiF,GAAG,GAAGC,qBAAqB,CAC/BhE,OAAO,EACP,MAAM,IAAI,CAAC,CAAClB,MAAM,CAACmF,WACrB,CAAC;MAED,MAAMC,KAAK,GAAG,MAAMJ,aAAa,CAAC,CAAC;;MAEnC;MACA;MACA,IAAI,IAAI,CAAC,CAAC3E,EAAE,IAAI,IAAI,EAAE;QACpB;QACA;QACA,MAAMgF,eAAe,GAAG,CAAC,IAAI,CAAC,CAAC/E,aAAa,IAAI,CAAC,IAC7C,IAAI,CAACrB,0BAA0B;QACnC,IAAIoG,eAAe,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE;UAChC,MAAM,IAAIC,OAAO,CAAEC,OAAO,IAAK;YAC7Bb,UAAU,CAACa,OAAO,EAAEJ,eAAe,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC;UACnD,CAAC,CAAC;QACJ;QAEA,IAAI,CAAC,CAACjF,aAAa,GAAGgF,IAAI,CAACC,GAAG,CAAC,CAAC;;QAEhC;QACA,IAAI,IAAI,CAAC,CAAClF,EAAE,IAAI,IAAI,EAAE;UACpB,IAAIe,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;YACzC,IAAI,CAAC,CAACf,MAAM,EAAE6C,KAAK,CAAC,oBAAoB,CAAC;UAC3C;UACA,IAAI,CAAC,CAAC/C,EAAE,GAAG,IAAItB,SAAS,CAACkG,GAAG,EAAE,CAAC,UAAUG,KAAK,EAAE,CAAC,CAAC;UAClD,IAAI,CAAC,CAAC/E,EAAE,CAACqF,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAACC,OAAO,CAAC;UACjD,IAAI,CAAC,CAACtF,EAAE,CAACqF,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,CAACE,SAAS,CAAC;UACrD,IAAI,CAAC,CAACvF,EAAE,CAACqF,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAACG,MAAM,CAAC;QACjD;MACF;MACA;MACA;MACA,IAAI,IAAI,CAAC,CAACxF,EAAE,CAACiD,UAAU,KAAKvE,SAAS,CAAC+G,UAAU,EAAE;QAChD,MAAMzF,EAAE,GAAG,IAAI,CAAC,CAACA,EAAE;QACnB,OAAO,IAAImF,OAAO,CAAO,CAACC,OAAO,EAAEM,MAAM,KAAK;UAC5C,SAASC,OAAOA,CAAA,EAAG;YACjB3F,EAAE,CAAC4F,mBAAmB,CAAC,MAAM,EAAEC,IAAI,CAAC;YACpC7F,EAAE,CAAC4F,mBAAmB,CAAC,OAAO,EAAExC,KAAK,CAAC;YACtCpD,EAAE,CAAC4F,mBAAmB,CAAC,OAAO,EAAED,OAAO,CAAC;UAC1C;UACA,SAASE,IAAIA,CAAA,EAAG;YACdF,OAAO,CAAC,CAAC;YACTP,OAAO,CAAC,CAAC;UACX;UACA,SAAShC,KAAKA,CAAC0C,GAAY,EAAE;YAC3BH,OAAO,CAAC,CAAC;YACTD,MAAM,CAACI,GAAG,CAAC;UACb;UACA9F,EAAE,CAACqF,gBAAgB,CAAC,MAAM,EAAEQ,IAAI,CAAC;UACjC7F,EAAE,CAACqF,gBAAgB,CAAC,OAAO,EAAEjC,KAAK,CAAC;UACnCpD,EAAE,CAACqF,gBAAgB,CAAC,OAAO,EAAEM,OAAO,CAAC;QACvC,CAAC,CAAC;MACJ;IACF;EACF;EAEA,CAACH,MAAM,GAAGO,CAAA,KAAM;IACd;IACA,IAAI,CAAC,CAAC5C,oBAAoB,CAAC,CAAC;EAC9B,CAAC;EAED,CAACoC,SAAS,GAAG,MAAOS,OAA+B,IAAK;IACtD,MAAMC,IAAI,GAAGjC,IAAI,CAACkC,KAAK,CAACF,OAAO,CAACC,IAAI,CAACE,QAAQ,CAAC,CAAC,CAAkB;IACjE,IAAIpF,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;MACzC,IAAI,CAAC,CAACf,MAAM,EAAE6C,KAAK,CAAC;QAAEe,OAAO,EAAEmC;MAAK,CAAC,EAAE,0BAA0B,CAAC;IACpE;IACA,QAAQA,IAAI,CAACzE,IAAI;MACf,KAAK,kBAAkB;QACrB,OAAO,KAAK,IAAI,CAAC,CAAC4E,8BAA8B,CAACH,IAAI,CAAC;MAExD,KAAK,kBAAkB;QACrB,OAAO,KAAK,IAAI,CAAC,CAACI,8BAA8B,CAACJ,IAAI,CAAC;MAExD,KAAK,oBAAoB;QACvB,OAAO,KAAK,IAAI,CAAC,CAACK,gCAAgC,CAACL,IAAI,CAAC;MAE1D,KAAK,oBAAoB;QAAE;UACzB,OAAO,KAAK,IAAI,CAAC,CAACM,gCAAgC,CAACN,IAAI,CAAC;QAC1D;MAEA;QAEElF,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAAtC,SAAS,QAAQ,yBAAyB,IAA1CA,SAAS;IACb;EACF,CAAC;EAED,CAACyH,8BAA8B,GAAG,MAChCtC,OAAyB,IACtB;IACH,MAAM1E,GAAG,GAAG,IAAI,CAAC,CAACiB,aAAa,CAACR,GAAG,CAACiE,OAAO,CAACL,EAAE,CAAC;IAC/C,IAAIrE,GAAG,IAAI,IAAI,EAAE;IAEjB,MAAMoH,aAAa,GAAG1C,OAAO,CAAC2C,OAAO,CAACvE,MAAM,CAAEwE,MAAM,IAClDA,MAAM,CAAClF,IAAI,KAAK,QAClB,CAAC;IACD,MAAMmF,gBAAgB,GAAG7C,OAAO,CAAC2C,OAAO,CAACvE,MAAM,CAAEwE,MAAM,IACrDA,MAAM,CAAClF,IAAI,KAAK,WAClB,CAAC;IACD,MAAMoF,+BAA+B,GAAG,MAAMzB,OAAO,CAAC0B,GAAG,CACvDF,gBAAgB,CAAChD,GAAG,CAAC,MAAOmD,CAAC,IAAK;MAChC,MAAMC,eAAe,GAAG,MAAM,IAAI,CAAC,CAACpH,MAAM,CAACqH,cAAc,CACvD,IAAI,CAAC,CAACrH,MAAM,EACZ,CAAC;QACCsH,SAAS,EAAEH,CAAC,CAAC3F,UAAU;QACvB+F,YAAY,EAAE9H,GAAG,CAACgD,sBAAsB,IAAI,IAAI,GAC5C0E,CAAC,CAACK,UAAU,CAAC/H,GAAG,CAACgD,sBAAsB,CAAC,GACxCC,SAAS;QACb,GAAGyE,CAAC,CAACK,UAAU;QACf,CAACL,CAAC,CAACM,QAAQ,GAAGN,CAAC,CAACO;MAClB,CAAC,CAAC,EACFjI,GAAG,CAACuD,gBAAgB,EACpB,KAAK,EACLN,SAAS,EACT,KAAK,EACL,MAAM,IAAI,CAAC,CAACiF,qBAAqB,CAC/BR,CAAC,CAAC3F,UAAU,EACZ/B,GAAG,CAACuD,gBACN,CACF,CAA0C;MAC1C,MAAM4E,gBAAgB,GAAGR,eAAe,CAAC,CAAC,CAAC,IAAI1E,SAAS;MACxD,OAAOkF,gBAAgB,IAAI,IAAI,GAC3B;QACAC,MAAM,EAAED,gBAAgB;QACxBE,KAAK,EAAE;MACT,CAAC,GACCpF,SAAS;IACf,CAAC,CACH,CAAC;IAED,KAAK,MAAMqF,UAAU,IAAId,+BAA+B,EAAE;MACxD,IAAIc,UAAU,IAAI,IAAI,EAAE;QACtB,IAAI;UACFtI,GAAG,CAACiC,QAAQ,CAACtC,QAAQ,GAAG2I,UAAU,CAAC;QACrC,CAAC,CAAC,OAAOtE,KAAK,EAAE;UACd,IAAI,CAAC,CAAClD,MAAM,EAAEkD,KAAK,CAACA,KAAK,EAAE,4BAA4B,CAAC;UACxD,IAAI,CAAC,CAACC,eAAe,CAACjE,GAAG,EAAE,KAAK,EAAEgE,KAAK,CAAC;QAC1C;MACF;IACF;IAEA,MAAMuE,WAAW,GAAG,MAAMxC,OAAO,CAAC0B,GAAG,CAACL,aAAa,CAAC7C,GAAG,CAAC,MAAOmD,CAAC,IAAK;MACnE,MAAMc,YAAY,GAAG5F,MAAM,CAACC,IAAI,CAAC6E,CAAC,CAACU,MAAM,CAAC,CAACtF,MAAM,CAAE2F,GAAG,IACpDzI,GAAG,CAACoD,4BAA4B,CAACsF,QAAQ,CAACD,GAAG,CAC/C,CAAC;MACD,KAAK,MAAMA,GAAG,IAAID,YAAY,EAAE;QAC9B,OAAOd,CAAC,CAACU,MAAM,CAACK,GAAG,CAAC;MACtB;MAEA,MAAMd,eAAe,GAAG,MAAM,IAAI,CAAC,CAACpH,MAAM,CAACqH,cAAc,CACvD,IAAI,CAAC,CAACrH,MAAM,EACZ,CAACmH,CAAC,CAACU,MAAM,CAAC,EACVpI,GAAG,CAACuD,gBAAgB,EACpB,KAAK,EACLN,SAAS,EACT,KAAK,EACL,MAAM,IAAI,CAAC,CAACiF,qBAAqB,CAC/BR,CAAC,CAACU,MAAM,CAACP,SAAS,EAClB7H,GAAG,CAACuD,gBACN,CACF,CAA0C;MAC1C,MAAM4E,gBAAgB,GAAGR,eAAe,CAAC,CAAC,CAAC,IAAI1E,SAAS;MACxD,OAAOkF,gBAAgB,IAAI,IAAI,GAC3B;QACAC,MAAM,EAAED,gBAAgB;QACxBE,KAAK,EAAEX,CAAC,CAACW;MACX,CAAC,GACCpF,SAAS;IACf,CAAC,CAAC,CAAC;IAEH,KAAK,MAAMqF,UAAU,IAAIC,WAAW,EAAE;MACpC,IAAID,UAAU,IAAI,IAAI,EAAE;QACtB,IAAI;UACFtI,GAAG,CAACiC,QAAQ,CAACtC,QAAQ,GAAG2I,UAAU,CAAC;QACrC,CAAC,CAAC,OAAOtE,KAAK,EAAE;UACd,IAAI,CAAC,CAAClD,MAAM,EAAEkD,KAAK,CAACA,KAAK,EAAE,4BAA4B,CAAC;UACxD,IAAI,CAAC,CAACC,eAAe,CAACjE,GAAG,EAAE,KAAK,EAAEgE,KAAK,CAAC;QAC1C;MACF;IACF;EACF,CAAC;EAED,MAAM,CAACkE,qBAAqBS,CAC1BC,iBAAyB,EACzBrF,gBAAoC,EAC6B;IACjE,IAAIA,gBAAgB,IAAI,IAAI,EAAE,OAAO,CAAC,CAAC;IACvC,MAAMsF,YAAY,GAAG,CAAC,MAAM,IAAI,CAAC,CAACtI,MAAM,CAAC8B,gBAAgB,CACtDC,mBAAmB,CAACsG,iBAAiB,CAAC,EAAEC,YAAY;IACvD,OAAO;MACL,CAACtF,gBAAgB,GAAG;QAClB,CAACqF,iBAAiB,GAAGC,YAAY,CAACtF,gBAAgB;MACpD;IACF,CAAC;EACH;EAEA,CAAC0D,8BAA8B,GAAIvC,OAAyB,IAAK;IAC/D,MAAM1E,GAAG,GAAG,IAAI,CAAC,CAACiB,aAAa,CAACR,GAAG,CAACiE,OAAO,CAACL,EAAE,CAAC;IAC/C,CAAUrE,GAAG,GAAA2B,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAbtC,SAAS,QAAM,4BAA4BmF,OAAO,CAACL,EAAE,EAAE,IAAvD9E,SAAS;IACT,IAAI;MACFS,GAAG,CAACiC,QAAQ,CAACpC,WAAW,CAAC,CAAC;IAC5B,CAAC,CAAC,OAAOmE,KAAK,EAAE;MACd,IAAI,CAAC,CAAClD,MAAM,EAAEkD,KAAK,CAACA,KAAK,EAAE,+BAA+B,CAAC;MAC3D,IAAI,CAAC,CAACC,eAAe,CAACjE,GAAG,EAAE,KAAK,EAAEgE,KAAK,CAAC;IAC1C;EACF,CAAC;EAED,CAACkD,gCAAgC,GAC/BxC,OAAoC,IACjC;IACH,MAAM;MAAEL,EAAE;MAAEyE;IAAU,CAAC,GAAGpE,OAAO;IAEjC,MAAMqE,IAAI,GAAG,IAAI,CAAC,CAAChI,oBAAoB,CAACN,GAAG,CAAC4D,EAAE,CAAC;IAC/C,CAAU0E,IAAI,GAAApH,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAdtC,SAAS,QAAO,0CAA0C8E,EAAE,EAAE,IAA9D9E,SAAS;IACT,IAAI,CAAC,CAACwB,oBAAoB,CAACiE,MAAM,CAACX,EAAE,CAAC;IAErC,KAAK,IAAI2E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,SAAS,CAACnG,MAAM,EAAEqG,CAAC,EAAE,EAAE;MACzC,MAAMhJ,GAAG,GAAG+I,IAAI,CAACC,CAAC,CAAC;MACnB,MAAMC,QAAQ,GAAGH,SAAS,CAACE,CAAC,CAAC;MAE7B,QAAQC,QAAQ,CAAC7G,IAAI;QACnB,KAAK,OAAO;UACV,IAAI,CAAC,CAAC6B,eAAe,CAACjE,GAAG,EAAE,IAAI,EAAEiJ,QAAQ,CAACC,MAAM,CAAC;UACjD,IAAI,CAAC,CAACzF,WAAW,CAACzD,GAAG,EAAE,OAAO,CAAC;UAC/B;QAEF,KAAK,KAAK;UACR;UACA,IAAI,CAAC,CAACqF,cAAc,CAAC,CAAC;UACtB;QAEF,KAAK,SAAS;UACZ;UACA,MAAM8D,mBAAmB,GAAGnJ,GAAG,CAACE,MAAM,KAAK,SAAS,IAC/CF,GAAG,CAACE,MAAM,KAAK,cAAc;UAElC,IAAIyB,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;YACzC,IAAI,CAAC,CAACf,MAAM,EAAE6C,KAAK,CAAC;cAAEwF;YAAoB,CAAC,EAAE,SAAS,CAAC;UACzD;UACAnJ,GAAG,CAACE,MAAM,GAAG,YAAY;UACzB,IAAIF,GAAG,CAACqD,cAAc,KAAK4F,QAAQ,CAAC5E,EAAE,EAAE;YACtC;YACA,IAAI,CAAC,CAACpD,aAAa,CAAC+D,MAAM,CAAChF,GAAG,CAACqD,cAAc,CAAC;YAC9CrD,GAAG,CAACqD,cAAc,GAAG4F,QAAQ,CAAC5E,EAAE;YAChC,IAAI,CAAC,CAACpD,aAAa,CAACN,GAAG,CAACX,GAAG,CAACqD,cAAc,EAAErD,GAAG,CAAC,CAAC,CAAC;UACpD;UACA,IAAI;YACF,IAAImJ,mBAAmB,EAAEnJ,GAAG,CAACiC,QAAQ,CAACpC,WAAW,CAAC,CAAC,CAAC,KAC/CG,GAAG,CAACiC,QAAQ,CAACnC,wBAAwB,CAAC,CAAC;UAC9C,CAAC,CAAC,OAAOkE,KAAK,EAAE;YACd,IAAI,CAAC,CAAClD,MAAM,EAAEkD,KAAK,CACjBA,KAAK,EACL,2DACF,CAAC;YACD,IAAI,CAAC,CAACC,eAAe,CAACjE,GAAG,EAAE,KAAK,EAAEgE,KAAK,CAAC;UAC1C;UACA;QACF;UACE,IAAI,CAAC,CAACC,eAAe,CAACjE,GAAG,EAAE,IAAI,EAAEiJ,QAAQ,CAAC;MAC9C;IACF;EACF,CAAC;EAED,CAAC9B,gCAAgCiC,CAAC1E,OAA2B,EAAE;IAC7D,MAAM1E,GAAG,GAAG,IAAI,CAAC,CAACiB,aAAa,CAACR,GAAG,CAACiE,OAAO,CAACL,EAAE,CAAC;IAC/C,IAAIrE,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,CAACkB,kBAAkB,CAACmI,GAAG,CAAC3E,OAAO,CAACL,EAAE,CAAC,EAAE;IAC7D,CAAUrE,GAAG,GAAA2B,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAAbtC,SAAS,QAAM,4BAA4BmF,OAAO,CAACL,EAAE,EAAE,IAAvD9E,SAAS;IACT,IAAI,CAAC,CAAC0E,eAAe,CAACjE,GAAG,EAAE,IAAI,EAAE0E,OAAO,CAAC4E,KAAK,CAAC;IAC/C,IAAI,CAAC,CAAC7F,WAAW,CAACzD,GAAG,EAAE,OAAO,CAAC;EACjC;EAEA,CAACkG,OAAO,GAAIqD,KAA2B,IAAK;IAC1C,IAAI5H,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;MACzC,IAAI,CAAC,CAACf,MAAM,EAAE6C,KAAK,CAAC;QAAE4F;MAAM,CAAC,EAAE,8BAA8B,EAAEA,KAAK,CAAC;IACvE;IACA;IACA,IAAI,CAAC,CAAClE,cAAc,CAAC,CAAC;EACxB,CAAC;EAED,CAACA,cAAc,GAAGmE,CAAA,KAAM;IACtB,IAAI,IAAI,CAAC,CAAC5I,EAAE,EAAE;MACZ,IAAI,CAAC,CAACA,EAAE,CAAC4F,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAACJ,MAAM,CAAC;MAClD,IAAI,CAAC,CAACxF,EAAE,CAAC4F,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,CAACL,SAAS,CAAC;MACxD,IAAI,CAAC,CAACvF,EAAE,CAAC4F,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAACN,OAAO,CAAC;MAEpD,IACE,IAAI,CAAC,CAACtF,EAAE,CAACiD,UAAU,KAAKvE,SAAS,CAACmK,OAAO,IACtC,IAAI,CAAC,CAAC7I,EAAE,CAACiD,UAAU,KAAKvE,SAAS,CAACoK,MAAM,EAC3C;QACA,IAAI,CAAC,CAAC9I,EAAE,CAAC+I,KAAK,CAAC,CAAC;MAClB;MACA,IAAI,CAAC,CAAC/I,EAAE,GAAGqC,SAAS;IACtB;;IAEA;IACA,IAAI,IAAI,CAAC,CAAChC,aAAa,CAACmE,IAAI,GAAG,CAAC,EAAE;MAChC,IAAIzD,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,YAAY,EAAE;QACzC,KAAK,MAAM+H,CAAC,IAAI,IAAI,CAAC,CAAC3I,aAAa,CAACmD,MAAM,CAAC,CAAC,EAAE;UAC5C,EACEwF,CAAC,CAAC1J,MAAM,KAAK,MAAM,IAAI0J,CAAC,CAAC1J,MAAM,KAAK,OAAO,IAAAyB,OAAA,CAAAC,GAAA,CAAAC,QAAA,oBAD7CtC,SAAS,QAEP,gDAAgD,IAFlDA,SAAS;QAIX;MACF;MAEA,KAAK,MAAMqK,CAAC,IAAI,IAAI,CAAC,CAAC3I,aAAa,CAACmD,MAAM,CAAC,CAAC,EAAE;QAC5C,IAAIwF,CAAC,CAAC1J,MAAM,KAAK,YAAY,EAAE0J,CAAC,CAAC1J,MAAM,GAAG,cAAc;MAC1D;;MAEA;MACA;MACA,KAAK,IAAI,CAAC,CAAC0D,eAAe,CAAC,CAAC;IAC9B;EACF,CAAC;EAED,CAACK,eAAe,GAAG4F,CACjB7J,GAA2B,EAC3B8J,kBAA2B,EAC3B9F,KAAU,KACP;IACH,IAAI;MACFhE,GAAG,CAACiC,QAAQ,CAACrC,OAAO,CAAC;QAAEkK,kBAAkB,EAAEA,kBAAkB;QAAE9F;MAAM,CAAC,CAAC;IACzE,CAAC,CAAC,OAAO+F,YAAY,EAAE;MACrB;MACAC,OAAO,CAAChG,KAAK,CACX,mEAAmE,EACnE+F,YACF,CAAC;MACD;MACAC,OAAO,CAAChG,KAAK,CACX,iEAAiE,EACjEA,KACF,CAAC;MACD;MACAgG,OAAO,CAAChG,KAAK,CACX,mCAAmC,EACnCA,KACF,CAAC;MAED,IAAI,CAAC8F,kBAAkB,EAAE;QACvB,IAAI,CAAC,CAAChJ,MAAM,EAAEkD,KAAK,CAACA,KAAK,EAAE,2BAA2B,CAAC;QACvD,IAAI,CAAC,CAACP,WAAW,CAACzD,GAAG,EAAE,OAAO,CAAC;QAC/B,IAAI,CAAC,CAACiE,eAAe,CAACjE,GAAG,EAAE,IAAI,EAAE+J,YAAY,CAAC;MAChD;IACF;EACF,CAAC;AACH;;AAEA;AACA,OAAO,SAAStE,qBAAqBA,CACnChE,OAAe,EACfiE,WAAmB,EACnB;EACA,MAAMuE,IAAI,GAAG,IAAIC,GAAG,CAACzI,OAAO,CAAC;EAC7B,MAAM+D,GAAG,GAAG,IAAI0E,GAAG,CACjB,2CAA2CxE,WAAW,sBAAsB,EAC5EuE,IACF,CAAC;EACDzE,GAAG,CAAC2E,QAAQ,GAAG3E,GAAG,CAAC2E,QAAQ,CAACC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;EACnD,OAAO5E,GAAG;AACZ;AAEA,IAAI6E,WAAW,GAAG,CAAC;AAEnB,SAAS/G,QAAQA,CAAA,EAAG;EAClB,OAAO,2BACL,CAAC+G,WAAW,EAAE,EAAEtD,QAAQ,CAAC,CAAC,CAACuD,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAC5C;AACJ","ignoreList":[]}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
+
|
|
16
17
|
import { $ontologyRid, Employee } from "@osdk/client.test.ontology";
|
|
17
18
|
import { apiServer } from "@osdk/shared.test";
|
|
18
19
|
import ImportedWebSocket from "isomorphic-ws";
|
|
@@ -21,7 +22,8 @@ import pDefer from "p-defer";
|
|
|
21
22
|
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
|
22
23
|
import { z } from "zod";
|
|
23
24
|
import { createMinimalClient } from "../createMinimalClient.js";
|
|
24
|
-
import { ObjectSetListenerWebsocket } from "./ObjectSetListenerWebsocket.js";
|
|
25
|
+
import { constructWebsocketUrl, ObjectSetListenerWebsocket } from "./ObjectSetListenerWebsocket.js";
|
|
26
|
+
|
|
25
27
|
// it needs to be hoisted because its referenced from our mocked WebSocket
|
|
26
28
|
// which must be hoisted to work
|
|
27
29
|
const rootLogger = await vi.hoisted(async () => {
|
|
@@ -42,15 +44,17 @@ const rootLogger = await vi.hoisted(async () => {
|
|
|
42
44
|
write(a) {
|
|
43
45
|
// remove trailing newline since console.log adds one
|
|
44
46
|
if (a.at(-1) === "\n") a = a.slice(0, -1);
|
|
47
|
+
|
|
45
48
|
// This lets the test framework aggregate the logs per test, whereas direct to stdout does not
|
|
46
49
|
console.log(a);
|
|
47
50
|
}
|
|
48
51
|
}()
|
|
49
52
|
})));
|
|
50
53
|
});
|
|
54
|
+
|
|
51
55
|
// make local uses of WebSocket typed right
|
|
52
56
|
const MockedWebSocket = ImportedWebSocket;
|
|
53
|
-
const STACK = "https://stack.
|
|
57
|
+
const STACK = "https://stack.palantirCustom.com/foo/first/someStuff/";
|
|
54
58
|
vi.mock("isomorphic-ws", async importOriginal => {
|
|
55
59
|
const original = await importOriginal();
|
|
56
60
|
const WebSocket = createMockWebSocketConstructor(original.default, rootLogger);
|
|
@@ -88,8 +92,7 @@ describe("ObjectSetListenerWebsocket", async () => {
|
|
|
88
92
|
oslwInst: oslwInst++
|
|
89
93
|
})
|
|
90
94
|
}, {
|
|
91
|
-
minimumReconnectDelayMs: MINIMUM_RECONNECT_DELAY
|
|
92
|
-
objectSetExpiryMs: 60_000
|
|
95
|
+
minimumReconnectDelayMs: MINIMUM_RECONNECT_DELAY
|
|
93
96
|
});
|
|
94
97
|
listenerPromise = pDefer();
|
|
95
98
|
listener = {
|
|
@@ -98,7 +101,8 @@ describe("ObjectSetListenerWebsocket", async () => {
|
|
|
98
101
|
listenerPromise.resolve();
|
|
99
102
|
}),
|
|
100
103
|
onError: vi.fn(),
|
|
101
|
-
onOutOfDate: vi.fn()
|
|
104
|
+
onOutOfDate: vi.fn(),
|
|
105
|
+
onSuccessfulSubscription: vi.fn()
|
|
102
106
|
};
|
|
103
107
|
let objectSetRidCounter = 0;
|
|
104
108
|
apiServer.use(http.post(`${STACK}api/v2/ontologySubscriptions/ontologies/${$ontologyRid}/streamSubscriptions`, () => HttpResponse.json({
|
|
@@ -122,16 +126,19 @@ describe("ObjectSetListenerWebsocket", async () => {
|
|
|
122
126
|
let subReq1;
|
|
123
127
|
beforeEach(async () => {
|
|
124
128
|
[ws, unsubscribe] = await subscribeAndExpectWebSocket(client, listener);
|
|
125
|
-
subReq1 = await
|
|
129
|
+
subReq1 = await expectSubscribeMessages(ws, 2);
|
|
126
130
|
});
|
|
127
131
|
afterEach(() => {
|
|
128
132
|
// just ensure we ended in good states, as we clear these as we consume them
|
|
129
133
|
expect(MockedWebSocket).not.toHaveBeenCalled();
|
|
134
|
+
|
|
130
135
|
// make sure we are unsubscribed so closing the socket doesn't trigger reconnects
|
|
131
136
|
unsubscribe();
|
|
137
|
+
|
|
132
138
|
// disconnect the socket
|
|
133
139
|
setWebSocketState(ws, "close");
|
|
134
140
|
vi.runAllTicks();
|
|
141
|
+
|
|
135
142
|
// Make sure we cleaned up
|
|
136
143
|
expectEqualRemoveAndAddListeners(ws);
|
|
137
144
|
});
|
|
@@ -139,12 +146,12 @@ describe("ObjectSetListenerWebsocket", async () => {
|
|
|
139
146
|
respondSuccessToSubscribe(ws, subReq1);
|
|
140
147
|
// actually this is broken FIXME
|
|
141
148
|
unsubscribe();
|
|
142
|
-
expect(ws.send).
|
|
149
|
+
expect(ws.send).toHaveBeenCalledTimes(1);
|
|
143
150
|
});
|
|
144
|
-
it("
|
|
145
|
-
expect(subReq1.requests[0].propertySet).toEqual(["employeeId"]);
|
|
151
|
+
it("correctly requests regular object properties", () => {
|
|
152
|
+
expect(subReq1.requests[0].propertySet).toEqual(["employeeId", "fullName", "office", "class", "startDate", "employeeStatus", "employeeSensor"]);
|
|
146
153
|
});
|
|
147
|
-
it
|
|
154
|
+
it("correctly requests reference backed properties", () => {
|
|
148
155
|
expect(subReq1.requests[0].referenceSet).toEqual(["employeeLocation"]);
|
|
149
156
|
});
|
|
150
157
|
describe("socket closed before subscription confirmed", () => {
|
|
@@ -161,7 +168,7 @@ describe("ObjectSetListenerWebsocket", async () => {
|
|
|
161
168
|
});
|
|
162
169
|
describe("subscribe and respond", () => {
|
|
163
170
|
beforeEach(async () => {
|
|
164
|
-
const subReq2 = await
|
|
171
|
+
const subReq2 = await expectSubscribeMessages(ws);
|
|
165
172
|
respondSuccessToSubscribe(ws, subReq2);
|
|
166
173
|
});
|
|
167
174
|
it("should not send out of date", () => {
|
|
@@ -170,10 +177,28 @@ describe("ObjectSetListenerWebsocket", async () => {
|
|
|
170
177
|
});
|
|
171
178
|
});
|
|
172
179
|
});
|
|
180
|
+
describe("correctly try catches errors in handlers", () => {
|
|
181
|
+
beforeEach(() => {
|
|
182
|
+
listener.onSuccessfulSubscription.mockImplementationOnce(() => {
|
|
183
|
+
throw new Error("I am an error");
|
|
184
|
+
});
|
|
185
|
+
respondSuccessToSubscribe(ws, subReq1);
|
|
186
|
+
});
|
|
187
|
+
afterEach(() => {
|
|
188
|
+
listener.onSuccessfulSubscription.mockReset();
|
|
189
|
+
});
|
|
190
|
+
it("should call onError", async () => {
|
|
191
|
+
expect(listener.onError).toHaveBeenCalled();
|
|
192
|
+
expect(listener.onError.mock.calls[0][0].subscriptionClosed).toBe(false);
|
|
193
|
+
});
|
|
194
|
+
});
|
|
173
195
|
describe("successfully subscribed", () => {
|
|
174
196
|
beforeEach(() => {
|
|
175
197
|
respondSuccessToSubscribe(ws, subReq1);
|
|
176
198
|
});
|
|
199
|
+
it("should call onSuccessfulSubscription", () => {
|
|
200
|
+
expect(listener.onSuccessfulSubscription).toHaveBeenCalled();
|
|
201
|
+
});
|
|
177
202
|
it("should correctly return regular updates", async () => {
|
|
178
203
|
const idNum2 = currentSubscriptionId;
|
|
179
204
|
sendObjectUpdateResponse(ws, `${idNum2}`);
|
|
@@ -184,6 +209,8 @@ describe("ObjectSetListenerWebsocket", async () => {
|
|
|
184
209
|
"object": {
|
|
185
210
|
"$apiName": "Employee",
|
|
186
211
|
"$objectType": "Employee",
|
|
212
|
+
"$primaryKey": undefined,
|
|
213
|
+
"$title": undefined,
|
|
187
214
|
"employeeId": 1,
|
|
188
215
|
},
|
|
189
216
|
"state": "ADDED_OR_UPDATED",
|
|
@@ -201,6 +228,7 @@ describe("ObjectSetListenerWebsocket", async () => {
|
|
|
201
228
|
"$apiName": "Employee",
|
|
202
229
|
"$objectType": "Employee",
|
|
203
230
|
"$primaryKey": "12345",
|
|
231
|
+
"$title": undefined,
|
|
204
232
|
"employeeId": "12345",
|
|
205
233
|
"employeeLocation": GeotimeSeriesPropertyImpl {
|
|
206
234
|
"lastFetchedValue": {
|
|
@@ -223,21 +251,23 @@ describe("ObjectSetListenerWebsocket", async () => {
|
|
|
223
251
|
let unsubscribe2;
|
|
224
252
|
let subReq2;
|
|
225
253
|
beforeEach(async () => {
|
|
226
|
-
|
|
254
|
+
unsubscribe2 = await client.subscribe({
|
|
227
255
|
type: "object",
|
|
228
256
|
apiName: "Employee"
|
|
229
257
|
}, {
|
|
230
258
|
type: "base",
|
|
231
259
|
objectType: Employee.apiName
|
|
232
|
-
}, listener, ["
|
|
233
|
-
|
|
234
|
-
subReq2
|
|
235
|
-
});
|
|
260
|
+
}, listener, ["employeeId"]);
|
|
261
|
+
subReq2 = await expectSubscribeMessages(ws);
|
|
236
262
|
respondSuccessToSubscribe(ws, subReq2);
|
|
237
263
|
});
|
|
238
264
|
afterEach(() => {
|
|
239
265
|
unsubscribe2();
|
|
240
266
|
});
|
|
267
|
+
it("only requests requested properties", () => {
|
|
268
|
+
expect(subReq2.requests[1].propertySet).toEqual(["employeeId"]);
|
|
269
|
+
expect(subReq2.requests[1].referenceSet).toEqual([]);
|
|
270
|
+
});
|
|
241
271
|
it("does not trigger an out of date ", () => {
|
|
242
272
|
expect(listener.onOutOfDate).not.toHaveBeenCalled();
|
|
243
273
|
});
|
|
@@ -253,7 +283,7 @@ describe("ObjectSetListenerWebsocket", async () => {
|
|
|
253
283
|
// delay for connection reconnect
|
|
254
284
|
vi.advanceTimersByTimeAsync(MINIMUM_RECONNECT_DELAY)]);
|
|
255
285
|
setWebSocketState(ws, "open");
|
|
256
|
-
const subReq2 = await
|
|
286
|
+
const subReq2 = await expectSubscribeMessages(ws);
|
|
257
287
|
respondSuccessToSubscribe(ws, subReq2);
|
|
258
288
|
});
|
|
259
289
|
it("should send out of date", () => {
|
|
@@ -267,6 +297,9 @@ describe("ObjectSetListenerWebsocket", async () => {
|
|
|
267
297
|
expect(listener.onChange).not.toHaveBeenCalled();
|
|
268
298
|
expect(listener.onError).not.toHaveBeenCalled();
|
|
269
299
|
});
|
|
300
|
+
it("should create url correctly", () => {
|
|
301
|
+
expect(constructWebsocketUrl(STACK, "ontologyRid1").toString()).toEqual("wss://stack.palantircustom.com/foo/first/someStuff/api/v2/ontologySubscriptions/ontologies/ontologyRid1/streamSubscriptions");
|
|
302
|
+
});
|
|
270
303
|
});
|
|
271
304
|
});
|
|
272
305
|
});
|
|
@@ -317,8 +350,13 @@ function sendReferenceUpdatesResponse(ws, subId) {
|
|
|
317
350
|
function expectEqualRemoveAndAddListeners(ws) {
|
|
318
351
|
expect(ws.removeEventListener).toHaveBeenCalledTimes(ws.addEventListener.mock.calls.length);
|
|
319
352
|
}
|
|
320
|
-
async function
|
|
321
|
-
return await
|
|
353
|
+
async function expectSubscribeMessages(ws, times = 1) {
|
|
354
|
+
return await vi.waitFor(() => {
|
|
355
|
+
expect(ws.send).toBeCalledTimes(times);
|
|
356
|
+
const result = JSON.parse(ws.send.mock.lastCall[0].toString());
|
|
357
|
+
ws.send.mockClear();
|
|
358
|
+
return result;
|
|
359
|
+
});
|
|
322
360
|
}
|
|
323
361
|
async function subscribeAndExpectWebSocket(client, listener) {
|
|
324
362
|
const [ws, unsubscribe] = await Promise.all([expectWebSocketConstructed(), client.subscribe({
|
|
@@ -327,7 +365,8 @@ async function subscribeAndExpectWebSocket(client, listener) {
|
|
|
327
365
|
}, {
|
|
328
366
|
type: "base",
|
|
329
367
|
objectType: Employee.apiName
|
|
330
|
-
}, listener
|
|
368
|
+
}, listener)]);
|
|
369
|
+
|
|
331
370
|
// otherwise the ObjectSetListenerWebSocket is sitting waiting for it to "connect"
|
|
332
371
|
setWebSocketState(ws, "open");
|
|
333
372
|
return [ws, unsubscribe];
|
|
@@ -344,14 +383,6 @@ async function expectWebSocketConstructed() {
|
|
|
344
383
|
expect(MockedWebSocket).toHaveBeenCalledTimes(0);
|
|
345
384
|
return ws;
|
|
346
385
|
}
|
|
347
|
-
async function consumeSingleSend(ws) {
|
|
348
|
-
return await vi.waitFor(() => {
|
|
349
|
-
expect(ws.send).toBeCalledTimes(1);
|
|
350
|
-
const result = JSON.parse(ws.send.mock.lastCall[0].toString());
|
|
351
|
-
ws.send.mockClear();
|
|
352
|
-
return result;
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
386
|
function createMockWebSocketConstructor(OriginalWebSocket, logger) {
|
|
356
387
|
let i = 0;
|
|
357
388
|
const ret = vi.fn(function (..._args) {
|
|
@@ -412,7 +443,6 @@ const SubscribeMessage = z.object({
|
|
|
412
443
|
}))
|
|
413
444
|
});
|
|
414
445
|
class MessageEvent extends Event {
|
|
415
|
-
data;
|
|
416
446
|
constructor(data) {
|
|
417
447
|
super("message");
|
|
418
448
|
this.data = JSON.stringify(data);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectSetListenerWebsocket.test.js","names":["$ontologyRid","Employee","apiServer","ImportedWebSocket","http","HttpResponse","pDefer","afterAll","afterEach","beforeAll","beforeEach","describe","expect","it","vi","z","createMinimalClient","ObjectSetListenerWebsocket","rootLogger","hoisted","pino","pinoPretty","EventEmitter","Promise","resolve","level","build","sync","timestampKey","undefined","errorLikeObjectKeys","errorProps","ignore","destination","write","a","at","slice","console","log","MockedWebSocket","STACK","mock","importOriginal","original","WebSocket","createMockWebSocketConstructor","default","currentSubscriptionId","listen","addLoggerToApiServer","close","minimalClient","MINIMUM_RECONNECT_DELAY","client","listener","oslwInst","updateReceived","listenerPromise","ontologyRid","logger","child","minimumReconnectDelayMs","objectSetExpiryMs","onChange","fn","o","onError","onOutOfDate","objectSetRidCounter","use","post","json","objectSetRid","useFakeTimers","restoreAllMocks","resetHandlers","not","toHaveBeenCalled","ws","unsubscribe","subReq1","subscribeAndExpectWebSocket","expectSingleSubscribeMessage","setWebSocketState","runAllTicks","expectEqualRemoveAndAddListeners","respondSuccessToSubscribe","send","requests","propertySet","toEqual","fails","referenceSet","all","expectWebSocketConstructed","advanceTimersByTimeAsync","subReq2","idNum2","sendObjectUpdateResponse","promise","toMatchInlineSnapshot","sendReferenceUpdatesResponse","unsubscribe2","subscribe","type","apiName","objectType","fatal","toHaveBeenCalledTimes","sendToClient","id","responses","subId","updates","state","object","__apiName","employeeId","removeEventListener","addEventListener","calls","length","consumeSingleSend","waitFor","results","value","mockClear","toBeCalledTimes","result","JSON","parse","lastCall","toString","OriginalWebSocket","i","ret","_args","webSocketInst","debug","eventEmitter","EventTarget","bind","message","_eventEmitter","readyState","CONNECTING","Object","assign","OPEN","CLOSED","CLOSING","newState","dispatchEvent","Event","name","requestId","request","trace","url","eventNames","c","events","on","SubscribeMessage","string","array","objectSet","MessageEvent","data","constructor","stringify","t"],"sources":["ObjectSetListenerWebsocket.test.js"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { $ontologyRid, Employee } from \"@osdk/client.test.ontology\";\nimport { apiServer } from \"@osdk/shared.test\";\nimport ImportedWebSocket from \"isomorphic-ws\";\nimport { http, HttpResponse } from \"msw\";\nimport pDefer from \"p-defer\";\nimport { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, vi, } from \"vitest\";\nimport { z } from \"zod\";\nimport { createMinimalClient } from \"../createMinimalClient.js\";\nimport { ObjectSetListenerWebsocket } from \"./ObjectSetListenerWebsocket.js\";\n// it needs to be hoisted because its referenced from our mocked WebSocket\n// which must be hoisted to work\nconst rootLogger = await vi.hoisted(async () => {\n const pino = (await import(\"pino\")).pino;\n const pinoPretty = await import(\"pino-pretty\");\n const { EventEmitter } = await import(\"node:events\");\n class PinoConsoleLogDestination extends EventEmitter {\n write(a) {\n // remove trailing newline since console.log adds one\n if (a.at(-1) === \"\\n\")\n a = a.slice(0, -1);\n // This lets the test framework aggregate the logs per test, whereas direct to stdout does not\n console.log(a);\n }\n }\n return Promise.resolve(pino({ level: \"info\" }, (pinoPretty.build)({\n sync: true,\n timestampKey: undefined,\n errorLikeObjectKeys: [\"error\", \"err\", \"exception\"],\n errorProps: \"stack,cause,properties\",\n ignore: \"time,hostname,pid\",\n destination: new PinoConsoleLogDestination(),\n })));\n});\n// make local uses of WebSocket typed right\nconst MockedWebSocket = ImportedWebSocket;\nconst STACK = \"https://stack.palantir.com\";\nvi.mock(\"isomorphic-ws\", async (importOriginal) => {\n const original = await importOriginal();\n const WebSocket = createMockWebSocketConstructor(original.default, rootLogger);\n return { default: WebSocket, WebSocket };\n});\nlet currentSubscriptionId = 0;\ndescribe(\"ObjectSetListenerWebsocket\", async () => {\n beforeAll(async () => {\n apiServer.listen();\n addLoggerToApiServer(rootLogger);\n });\n afterAll(() => {\n apiServer.close();\n });\n describe(\"basic setup\", () => {\n let minimalClient;\n const MINIMUM_RECONNECT_DELAY = 2_000;\n const OBJECT_SET_EXPIRY_MS = 60_000;\n let client;\n let listener;\n let oslwInst = 0;\n let updateReceived = undefined;\n let listenerPromise;\n beforeEach(() => {\n minimalClient = createMinimalClient({ ontologyRid: $ontologyRid }, STACK, async () => \"myAccessToken\", { logger: rootLogger });\n client = new ObjectSetListenerWebsocket({\n ...minimalClient,\n logger: rootLogger.child({ oslwInst: oslwInst++ }),\n }, {\n minimumReconnectDelayMs: MINIMUM_RECONNECT_DELAY,\n objectSetExpiryMs: OBJECT_SET_EXPIRY_MS,\n });\n listenerPromise = pDefer();\n listener = {\n onChange: vi.fn((o) => {\n updateReceived = o;\n listenerPromise.resolve();\n }),\n onError: vi.fn(),\n onOutOfDate: vi.fn(),\n };\n let objectSetRidCounter = 0;\n apiServer.use(http.post(`${STACK}api/v2/ontologySubscriptions/ontologies/${$ontologyRid}/streamSubscriptions`, () => HttpResponse.json({\n objectSetRid: `rid.hi.${objectSetRidCounter++}`,\n })));\n vi.useFakeTimers();\n });\n afterEach(() => {\n vi.restoreAllMocks();\n apiServer.resetHandlers();\n });\n it(\"should not send onOutOfDate since it has not subscribed yet\", () => {\n expect(MockedWebSocket).not.toHaveBeenCalled();\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n expect(listener.onChange).not.toHaveBeenCalled();\n expect(listener.onError).not.toHaveBeenCalled();\n });\n describe(\"requests subscription\", () => {\n let ws;\n let unsubscribe;\n let subReq1;\n beforeEach(async () => {\n [ws, unsubscribe] = await subscribeAndExpectWebSocket(client, listener);\n subReq1 = await expectSingleSubscribeMessage(ws);\n });\n afterEach(() => {\n // just ensure we ended in good states, as we clear these as we consume them\n expect(MockedWebSocket).not.toHaveBeenCalled();\n // make sure we are unsubscribed so closing the socket doesn't trigger reconnects\n unsubscribe();\n // disconnect the socket\n setWebSocketState(ws, \"close\");\n vi.runAllTicks();\n // Make sure we cleaned up\n expectEqualRemoveAndAddListeners(ws);\n });\n it(\"only sends a single request\", async () => {\n respondSuccessToSubscribe(ws, subReq1);\n // actually this is broken FIXME\n unsubscribe();\n expect(ws.send).not.toHaveBeenCalled();\n });\n it(\"currently requests regular object properties\", () => {\n expect(subReq1.requests[0].propertySet).toEqual([\n \"employeeId\",\n ]);\n });\n it.fails(\"currently requests reference backed properties\", () => {\n expect(subReq1.requests[0].referenceSet).toEqual([\"employeeLocation\"]);\n });\n describe(\"socket closed before subscription confirmed\", () => {\n beforeEach(() => {\n setWebSocketState(ws, \"close\");\n expectEqualRemoveAndAddListeners(ws);\n });\n describe(\"reconnect\", async () => {\n beforeEach(async () => {\n [ws] = await Promise.all([\n expectWebSocketConstructed(),\n // delay for connection reconnect\n vi.advanceTimersByTimeAsync(MINIMUM_RECONNECT_DELAY),\n ]);\n setWebSocketState(ws, \"open\");\n });\n describe(\"subscribe and respond\", () => {\n beforeEach(async () => {\n const subReq2 = await expectSingleSubscribeMessage(ws);\n respondSuccessToSubscribe(ws, subReq2);\n });\n it(\"should not send out of date\", () => {\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n });\n });\n });\n });\n describe(\"successfully subscribed\", () => {\n beforeEach(() => {\n respondSuccessToSubscribe(ws, subReq1);\n });\n it(\"should correctly return regular updates\", async () => {\n const idNum2 = currentSubscriptionId;\n sendObjectUpdateResponse(ws, `${idNum2}`);\n await listenerPromise.promise;\n expect(listener.onChange).toHaveBeenCalled();\n expect(updateReceived).toMatchInlineSnapshot(`\n {\n \"object\": {\n \"$apiName\": \"Employee\",\n \"$objectType\": \"Employee\",\n \"employeeId\": 1,\n },\n \"state\": \"ADDED_OR_UPDATED\",\n }\n `);\n });\n it(\"should correctly return reference update\", async () => {\n const idNum2 = currentSubscriptionId;\n sendReferenceUpdatesResponse(ws, `${idNum2}`);\n await listenerPromise.promise;\n expect(listener.onChange).toHaveBeenCalled();\n expect(updateReceived).toMatchInlineSnapshot(`\n {\n \"object\": {\n \"$apiName\": \"Employee\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": \"12345\",\n \"employeeId\": \"12345\",\n \"employeeLocation\": GeotimeSeriesPropertyImpl {\n \"lastFetchedValue\": {\n \"time\": \"111\",\n \"value\": {\n \"coordinates\": [\n 100,\n 200,\n ],\n \"type\": \"Point\",\n },\n },\n },\n },\n \"state\": \"ADDED_OR_UPDATED\",\n }\n `);\n });\n describe(\"additional subscription\", async () => {\n let unsubscribe2;\n let subReq2;\n beforeEach(async () => {\n [unsubscribe2, subReq2] = await Promise.all([\n client.subscribe({\n type: \"object\",\n apiName: \"Employee\",\n }, {\n type: \"base\",\n objectType: Employee.apiName,\n }, listener, [\"employeeStatus\"]),\n expectSingleSubscribeMessage(ws),\n ]);\n rootLogger.fatal({ subReq2 });\n respondSuccessToSubscribe(ws, subReq2);\n });\n afterEach(() => {\n unsubscribe2();\n });\n it(\"does not trigger an out of date \", () => {\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n });\n });\n describe(\"socket closed abruptly\", () => {\n beforeEach(() => {\n setWebSocketState(ws, \"close\");\n expectEqualRemoveAndAddListeners(ws);\n });\n describe(\"reconnect, resubscribe successfully\", async () => {\n beforeEach(async () => {\n [ws] = await Promise.all([\n expectWebSocketConstructed(),\n // delay for connection reconnect\n vi.advanceTimersByTimeAsync(MINIMUM_RECONNECT_DELAY),\n ]);\n setWebSocketState(ws, \"open\");\n const subReq2 = await expectSingleSubscribeMessage(ws);\n respondSuccessToSubscribe(ws, subReq2);\n });\n it(\"should send out of date\", () => {\n expect(listener.onOutOfDate).toHaveBeenCalledTimes(1);\n });\n });\n });\n it(\"should not send onOutOfDate for first call\", () => {\n expect(MockedWebSocket).not.toHaveBeenCalled();\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n expect(listener.onChange).not.toHaveBeenCalled();\n expect(listener.onError).not.toHaveBeenCalled();\n });\n });\n });\n });\n});\nfunction respondSuccessToSubscribe(ws, subReq2) {\n sendToClient(ws, {\n id: subReq2.id,\n type: \"subscribeResponses\",\n responses: [{\n type: \"success\",\n id: `${++currentSubscriptionId}`,\n }],\n });\n}\nfunction sendObjectUpdateResponse(ws, subId) {\n const updateMessage = {\n type: \"objectSetChanged\",\n id: subId,\n updates: [{\n type: \"object\",\n state: \"ADDED_OR_UPDATED\",\n object: {\n __apiName: \"Employee\",\n employeeId: 1,\n },\n }],\n };\n sendToClient(ws, updateMessage);\n}\nfunction sendReferenceUpdatesResponse(ws, subId) {\n const referenceUpdateMessage = {\n type: \"objectSetChanged\",\n id: subId,\n updates: [{\n \"type\": \"reference\",\n \"objectType\": \"Employee\",\n \"primaryKey\": { \"employeeId\": \"12345\" },\n \"property\": \"employeeLocation\",\n \"value\": {\n \"timestamp\": \"111\",\n \"type\": \"geotimeSeriesValue\",\n \"position\": [100, 200],\n },\n }],\n };\n sendToClient(ws, referenceUpdateMessage);\n}\nfunction expectEqualRemoveAndAddListeners(ws) {\n expect(ws.removeEventListener).toHaveBeenCalledTimes(ws.addEventListener.mock.calls.length);\n}\nasync function expectSingleSubscribeMessage(ws) {\n return await consumeSingleSend(ws);\n}\nasync function subscribeAndExpectWebSocket(client, listener) {\n const [ws, unsubscribe] = await Promise.all([\n expectWebSocketConstructed(),\n client.subscribe({\n apiName: \"Employee\",\n type: \"object\",\n }, {\n type: \"base\",\n objectType: Employee.apiName,\n }, listener, [\"employeeId\"]),\n ]);\n // otherwise the ObjectSetListenerWebSocket is sitting waiting for it to \"connect\"\n setWebSocketState(ws, \"open\");\n return [ws, unsubscribe];\n}\nasync function expectWebSocketConstructed() {\n expect(MockedWebSocket).toHaveBeenCalledTimes(0);\n const ws = await vi.waitFor(() => {\n expect(MockedWebSocket).toHaveBeenCalled();\n expect(MockedWebSocket.mock.results[0].type === \"return\");\n return MockedWebSocket.mock.results[0].value;\n });\n expect(MockedWebSocket).toHaveBeenCalledTimes(1);\n MockedWebSocket.mockClear();\n expect(MockedWebSocket).toHaveBeenCalledTimes(0);\n return ws;\n}\nasync function consumeSingleSend(ws) {\n return await vi.waitFor(() => {\n expect(ws.send).toBeCalledTimes(1);\n const result = JSON.parse(ws.send.mock.lastCall[0].toString());\n ws.send.mockClear();\n return result;\n });\n}\nfunction createMockWebSocketConstructor(OriginalWebSocket, logger) {\n let i = 0;\n const ret = vi.fn(function (..._args) {\n const webSocketInst = i++;\n logger.debug(\"WebSocket constructor called\");\n const eventEmitter = new EventTarget();\n return {\n addEventListener: vi.fn(eventEmitter.addEventListener.bind(eventEmitter)),\n removeEventListener: vi.fn(eventEmitter.removeEventListener.bind(eventEmitter)),\n send: vi.fn((a, _b) => {\n logger.debug({ message: JSON.parse(a.toString()), webSocketInst }, \"send() called\");\n }),\n close: vi.fn(),\n _eventEmitter: eventEmitter,\n readyState: OriginalWebSocket.CONNECTING,\n };\n // ^ we only implement some things but the type system wants to think its the full deal,\n // thus the satisfies plus the cast\n });\n Object.assign(ret, {\n OPEN: OriginalWebSocket.OPEN,\n CLOSED: OriginalWebSocket.CLOSED,\n CLOSING: OriginalWebSocket.CLOSING,\n CONNECTING: OriginalWebSocket.CONNECTING,\n });\n return ret;\n}\nfunction setWebSocketState(ws, readyState) {\n const newState = readyState === \"open\"\n ? ImportedWebSocket.OPEN\n : ImportedWebSocket.CLOSED;\n if (newState === ws.readyState)\n return;\n ws.readyState = newState;\n ws._eventEmitter.dispatchEvent(new Event(readyState, {}));\n}\nfunction addLoggerToApiServer(logger) {\n const z = (name, { requestId, request }) => logger.trace({ requestId, url: request.url }, name);\n const eventNames = [\n \"request:start\",\n \"request:match\",\n \"request:end\",\n \"request:unhandled\",\n \"response:bypass\",\n \"response:mocked\",\n ];\n for (const c of eventNames) {\n apiServer.events.on(c, z.bind(undefined, c));\n }\n}\nconst SubscribeMessage = z.object({\n id: z.string(),\n requests: z.array(z.object({\n objectSet: z.object({ id: z.string() }),\n propertySet: z.array(z.string()),\n referenceSet: z.array(z.string()),\n })),\n});\nclass MessageEvent extends Event {\n data;\n constructor(data) {\n super(\"message\");\n this.data = JSON.stringify(data);\n }\n}\nfunction sendToClient(ws, t) {\n ws._eventEmitter.dispatchEvent(new MessageEvent(t));\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ObjectSetListenerWebsocket.test.js","names":["$ontologyRid","Employee","apiServer","ImportedWebSocket","http","HttpResponse","pDefer","afterAll","afterEach","beforeAll","beforeEach","describe","expect","it","vi","z","createMinimalClient","constructWebsocketUrl","ObjectSetListenerWebsocket","rootLogger","hoisted","pino","pinoPretty","EventEmitter","Promise","resolve","level","build","sync","timestampKey","undefined","errorLikeObjectKeys","errorProps","ignore","destination","write","a","at","slice","console","log","MockedWebSocket","STACK","mock","importOriginal","original","WebSocket","createMockWebSocketConstructor","default","currentSubscriptionId","listen","addLoggerToApiServer","close","minimalClient","MINIMUM_RECONNECT_DELAY","client","listener","oslwInst","updateReceived","listenerPromise","ontologyRid","logger","child","minimumReconnectDelayMs","onChange","fn","o","onError","onOutOfDate","onSuccessfulSubscription","objectSetRidCounter","use","post","json","objectSetRid","useFakeTimers","restoreAllMocks","resetHandlers","not","toHaveBeenCalled","ws","unsubscribe","subReq1","subscribeAndExpectWebSocket","expectSubscribeMessages","setWebSocketState","runAllTicks","expectEqualRemoveAndAddListeners","respondSuccessToSubscribe","send","toHaveBeenCalledTimes","requests","propertySet","toEqual","referenceSet","all","expectWebSocketConstructed","advanceTimersByTimeAsync","subReq2","mockImplementationOnce","Error","mockReset","calls","subscriptionClosed","toBe","idNum2","sendObjectUpdateResponse","promise","toMatchInlineSnapshot","sendReferenceUpdatesResponse","unsubscribe2","subscribe","type","apiName","objectType","toString","sendToClient","id","responses","subId","updates","state","object","__apiName","employeeId","removeEventListener","addEventListener","length","times","waitFor","toBeCalledTimes","result","JSON","parse","lastCall","mockClear","results","value","OriginalWebSocket","i","ret","_args","webSocketInst","debug","eventEmitter","EventTarget","bind","message","_eventEmitter","readyState","CONNECTING","Object","assign","OPEN","CLOSED","CLOSING","newState","dispatchEvent","Event","name","requestId","request","trace","url","eventNames","c","events","on","SubscribeMessage","string","array","objectSet","MessageEvent","constructor","data","stringify","t"],"sources":["ObjectSetListenerWebsocket.test.ts"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ObjectSetSubscription, PropertyKeys } from \"@osdk/api\";\nimport { $ontologyRid, Employee } from \"@osdk/client.test.ontology\";\nimport type {\n ObjectSetStreamSubscribeRequests,\n ObjectUpdate,\n StreamMessage,\n} from \"@osdk/foundry.ontologies\";\nimport { apiServer } from \"@osdk/shared.test\";\nimport ImportedWebSocket from \"isomorphic-ws\";\nimport { http, HttpResponse } from \"msw\";\nimport type { DeferredPromise } from \"p-defer\";\nimport pDefer from \"p-defer\";\nimport type { MockedClass, MockedFunction, MockedObject } from \"vitest\";\nimport {\n afterAll,\n afterEach,\n beforeAll,\n beforeEach,\n describe,\n expect,\n it,\n vi,\n} from \"vitest\";\nimport { z } from \"zod\";\nimport { createMinimalClient } from \"../createMinimalClient.js\";\nimport type { Logger } from \"../Logger.js\";\nimport type { MinimalClient } from \"../MinimalClientContext.js\";\nimport {\n constructWebsocketUrl,\n ObjectSetListenerWebsocket,\n} from \"./ObjectSetListenerWebsocket.js\";\n\n// it needs to be hoisted because its referenced from our mocked WebSocket\n// which must be hoisted to work\nconst rootLogger = await vi.hoisted(async (): Promise<Logger> => {\n const pino = (await import(\"pino\")).pino;\n const pinoPretty = await import(\"pino-pretty\");\n const { EventEmitter } = await import(\"node:events\");\n class PinoConsoleLogDestination extends EventEmitter {\n write(a: string) {\n // remove trailing newline since console.log adds one\n if (a.at(-1) === \"\\n\") a = a.slice(0, -1);\n\n // This lets the test framework aggregate the logs per test, whereas direct to stdout does not\n console.log(a);\n }\n }\n return Promise.resolve(pino(\n { level: \"info\" },\n (pinoPretty.build)({\n sync: true,\n timestampKey: undefined,\n errorLikeObjectKeys: [\"error\", \"err\", \"exception\"],\n errorProps: \"stack,cause,properties\",\n ignore: \"time,hostname,pid\",\n destination: new PinoConsoleLogDestination(),\n }),\n ));\n});\n\n// make local uses of WebSocket typed right\nconst MockedWebSocket = ImportedWebSocket as unknown as MockedWebSocket;\n\nconst STACK = \"https://stack.palantirCustom.com/foo/first/someStuff/\";\n\nvi.mock(\"isomorphic-ws\", async (importOriginal) => {\n const original = await importOriginal<\n { default: WebSocket }\n >();\n\n const WebSocket = createMockWebSocketConstructor(\n original.default,\n rootLogger,\n );\n return { default: WebSocket, WebSocket };\n});\n\nlet currentSubscriptionId = 0;\n\ndescribe(\"ObjectSetListenerWebsocket\", async () => {\n beforeAll(async () => {\n apiServer.listen();\n addLoggerToApiServer(rootLogger);\n });\n\n afterAll(() => {\n apiServer.close();\n });\n\n describe(\"basic setup\", () => {\n let minimalClient: MinimalClient;\n\n const MINIMUM_RECONNECT_DELAY = 2_000;\n const OBJECT_SET_EXPIRY_MS = 60_000;\n\n let client: ObjectSetListenerWebsocket;\n let listener: MockedObject<\n Required<\n ObjectSetSubscription.Listener<Employee, any>\n >\n >;\n let oslwInst = 0;\n\n let updateReceived: ObjectUpdate | undefined = undefined;\n\n let listenerPromise: DeferredPromise<void>;\n\n beforeEach(() => {\n minimalClient = createMinimalClient(\n { ontologyRid: $ontologyRid },\n STACK,\n async () => \"myAccessToken\",\n { logger: rootLogger },\n );\n client = new ObjectSetListenerWebsocket({\n ...minimalClient,\n logger: rootLogger.child({ oslwInst: oslwInst++ }),\n }, {\n minimumReconnectDelayMs: MINIMUM_RECONNECT_DELAY,\n });\n\n listenerPromise = pDefer();\n\n listener = {\n onChange: vi.fn((o) => {\n updateReceived = o;\n listenerPromise.resolve();\n }),\n onError: vi.fn(),\n onOutOfDate: vi.fn(),\n onSuccessfulSubscription: vi.fn(),\n };\n\n let objectSetRidCounter = 0;\n apiServer.use(\n http.post(\n `${STACK}api/v2/ontologySubscriptions/ontologies/${$ontologyRid}/streamSubscriptions`,\n () =>\n HttpResponse.json({\n objectSetRid: `rid.hi.${objectSetRidCounter++}`,\n }),\n ),\n );\n\n vi.useFakeTimers();\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n apiServer.resetHandlers();\n });\n\n it(\"should not send onOutOfDate since it has not subscribed yet\", () => {\n expect(MockedWebSocket).not.toHaveBeenCalled();\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n expect(listener.onChange).not.toHaveBeenCalled();\n expect(listener.onError).not.toHaveBeenCalled();\n });\n\n describe(\"requests subscription\", () => {\n let ws: MockedWebSocket;\n let unsubscribe: () => void;\n let subReq1: ObjectSetStreamSubscribeRequests;\n\n beforeEach(async () => {\n [ws, unsubscribe] = await subscribeAndExpectWebSocket(\n client,\n listener,\n );\n\n subReq1 = await expectSubscribeMessages(ws, 2);\n });\n\n afterEach(() => {\n // just ensure we ended in good states, as we clear these as we consume them\n expect(MockedWebSocket).not.toHaveBeenCalled();\n\n // make sure we are unsubscribed so closing the socket doesn't trigger reconnects\n unsubscribe();\n\n // disconnect the socket\n setWebSocketState(ws, \"close\");\n\n vi.runAllTicks();\n\n // Make sure we cleaned up\n expectEqualRemoveAndAddListeners(ws);\n });\n\n it(\"only sends a single request\", async () => {\n respondSuccessToSubscribe(ws, subReq1);\n // actually this is broken FIXME\n unsubscribe();\n expect(ws.send).toHaveBeenCalledTimes(1);\n });\n\n it(\"correctly requests regular object properties\", () => {\n expect(subReq1.requests[0].propertySet).toEqual([\n \"employeeId\",\n \"fullName\",\n \"office\",\n \"class\",\n \"startDate\",\n \"employeeStatus\",\n \"employeeSensor\",\n ]);\n });\n\n it(\"correctly requests reference backed properties\", () => {\n expect(subReq1.requests[0].referenceSet).toEqual([\"employeeLocation\"]);\n });\n\n describe(\"socket closed before subscription confirmed\", () => {\n beforeEach(() => {\n setWebSocketState(ws, \"close\");\n expectEqualRemoveAndAddListeners(ws);\n });\n\n describe(\"reconnect\", async () => {\n beforeEach(async () => {\n [ws] = await Promise.all([\n expectWebSocketConstructed(),\n // delay for connection reconnect\n vi.advanceTimersByTimeAsync(MINIMUM_RECONNECT_DELAY),\n ]);\n setWebSocketState(ws, \"open\");\n });\n\n describe(\"subscribe and respond\", () => {\n beforeEach(async () => {\n const subReq2 = await expectSubscribeMessages(ws);\n respondSuccessToSubscribe(ws, subReq2);\n });\n\n it(\"should not send out of date\", () => {\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n });\n });\n });\n });\n\n describe(\"correctly try catches errors in handlers\", () => {\n beforeEach(() => {\n listener.onSuccessfulSubscription.mockImplementationOnce(() => {\n throw new Error(\"I am an error\");\n });\n respondSuccessToSubscribe(ws, subReq1);\n });\n afterEach(() => {\n listener.onSuccessfulSubscription.mockReset();\n });\n\n it(\"should call onError\", async () => {\n expect(listener.onError).toHaveBeenCalled();\n expect(listener.onError.mock.calls[0][0].subscriptionClosed).toBe(\n false,\n );\n });\n });\n\n describe(\"successfully subscribed\", () => {\n beforeEach(() => {\n respondSuccessToSubscribe(ws, subReq1);\n });\n\n it(\"should call onSuccessfulSubscription\", () => {\n expect(listener.onSuccessfulSubscription).toHaveBeenCalled();\n });\n\n it(\"should correctly return regular updates\", async () => {\n const idNum2 = currentSubscriptionId;\n\n sendObjectUpdateResponse(ws, `${idNum2}`);\n await listenerPromise.promise;\n expect(listener.onChange).toHaveBeenCalled();\n expect(updateReceived).toMatchInlineSnapshot(`\n {\n \"object\": {\n \"$apiName\": \"Employee\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": undefined,\n \"$title\": undefined,\n \"employeeId\": 1,\n },\n \"state\": \"ADDED_OR_UPDATED\",\n }\n `);\n });\n\n it(\"should correctly return reference update\", async () => {\n const idNum2 = currentSubscriptionId;\n\n sendReferenceUpdatesResponse(ws, `${idNum2}`);\n await listenerPromise.promise;\n expect(listener.onChange).toHaveBeenCalled();\n expect(updateReceived).toMatchInlineSnapshot(`\n {\n \"object\": {\n \"$apiName\": \"Employee\",\n \"$objectType\": \"Employee\",\n \"$primaryKey\": \"12345\",\n \"$title\": undefined,\n \"employeeId\": \"12345\",\n \"employeeLocation\": GeotimeSeriesPropertyImpl {\n \"lastFetchedValue\": {\n \"time\": \"111\",\n \"value\": {\n \"coordinates\": [\n 100,\n 200,\n ],\n \"type\": \"Point\",\n },\n },\n },\n },\n \"state\": \"ADDED_OR_UPDATED\",\n }\n `);\n });\n\n describe(\"additional subscription\", async () => {\n let unsubscribe2: () => void;\n let subReq2: ObjectSetStreamSubscribeRequests;\n beforeEach(async () => {\n unsubscribe2 = await client.subscribe(\n {\n type: \"object\",\n apiName: \"Employee\",\n },\n {\n type: \"base\",\n objectType: Employee.apiName,\n },\n listener,\n [\"employeeId\"],\n );\n\n subReq2 = await expectSubscribeMessages(ws);\n\n respondSuccessToSubscribe(ws, subReq2);\n });\n\n afterEach(() => {\n unsubscribe2();\n });\n\n it(\"only requests requested properties\", () => {\n expect(subReq2.requests[1].propertySet).toEqual([\"employeeId\"]);\n expect(subReq2.requests[1].referenceSet).toEqual([]);\n });\n\n it(\"does not trigger an out of date \", () => {\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n });\n });\n\n describe(\"socket closed abruptly\", () => {\n beforeEach(() => {\n setWebSocketState(ws, \"close\");\n expectEqualRemoveAndAddListeners(ws);\n });\n\n describe(\"reconnect, resubscribe successfully\", async () => {\n beforeEach(async () => {\n [ws] = await Promise.all([\n expectWebSocketConstructed(),\n // delay for connection reconnect\n vi.advanceTimersByTimeAsync(MINIMUM_RECONNECT_DELAY),\n ]);\n setWebSocketState(ws, \"open\");\n\n const subReq2 = await expectSubscribeMessages(ws);\n respondSuccessToSubscribe(ws, subReq2);\n });\n\n it(\"should send out of date\", () => {\n expect(listener.onOutOfDate).toHaveBeenCalledTimes(1);\n });\n });\n });\n\n it(\"should not send onOutOfDate for first call\", () => {\n expect(MockedWebSocket).not.toHaveBeenCalled();\n expect(listener.onOutOfDate).not.toHaveBeenCalled();\n expect(listener.onChange).not.toHaveBeenCalled();\n expect(listener.onError).not.toHaveBeenCalled();\n });\n\n it(\"should create url correctly\", () => {\n expect(constructWebsocketUrl(STACK, \"ontologyRid1\").toString())\n .toEqual(\n \"wss://stack.palantircustom.com/foo/first/someStuff/api/v2/ontologySubscriptions/ontologies/ontologyRid1/streamSubscriptions\",\n );\n });\n });\n });\n });\n});\n\ninterface RawWebSocketPlus\n extends Pick<ImportedWebSocket, \"addEventListener\" | \"removeEventListener\">\n{\n _eventEmitter: EventTarget;\n readyState: 0 | 1 | 2 | 3;\n send: MockedFunction<ImportedWebSocket[\"send\"]>;\n close: MockedFunction<ImportedWebSocket[\"close\"]>;\n}\n\ninterface MockedWebSocket\n extends MockedClass<typeof ImportedWebSocket>, MockedObject<RawWebSocketPlus>\n{\n}\n\ntype MockedListener = MockedObject<\n Required<\n ObjectSetSubscription.Listener<Employee, PropertyKeys<Employee>>\n >\n>;\n\nfunction respondSuccessToSubscribe(\n ws: MockedWebSocket,\n subReq2: ObjectSetStreamSubscribeRequests,\n) {\n sendToClient<StreamMessage>(\n ws,\n {\n id: subReq2.id,\n type: \"subscribeResponses\",\n responses: [{\n type: \"success\",\n id: `${++currentSubscriptionId}`,\n }],\n },\n );\n}\n\nfunction sendObjectUpdateResponse(\n ws: MockedWebSocket,\n subId: string,\n) {\n const updateMessage: StreamMessage = {\n type: \"objectSetChanged\",\n id: subId,\n updates: [{\n type: \"object\",\n state: \"ADDED_OR_UPDATED\",\n object: {\n __apiName: \"Employee\",\n employeeId: 1,\n },\n }],\n };\n\n sendToClient<StreamMessage>(\n ws,\n updateMessage,\n );\n}\n\nfunction sendReferenceUpdatesResponse(\n ws: MockedWebSocket,\n subId: string,\n) {\n const referenceUpdateMessage: StreamMessage = {\n type: \"objectSetChanged\",\n id: subId,\n updates: [{\n \"type\": \"reference\",\n \"objectType\": \"Employee\",\n \"primaryKey\": { \"employeeId\": \"12345\" },\n \"property\": \"employeeLocation\",\n \"value\": {\n \"timestamp\": \"111\",\n \"type\": \"geotimeSeriesValue\",\n \"position\": [100, 200],\n },\n }],\n };\n\n sendToClient<StreamMessage>(\n ws,\n referenceUpdateMessage,\n );\n}\n\nfunction expectEqualRemoveAndAddListeners(ws: MockedWebSocket) {\n expect(ws.removeEventListener).toHaveBeenCalledTimes(\n ws.addEventListener.mock.calls.length,\n );\n}\n\nasync function expectSubscribeMessages(\n ws: MockedWebSocket,\n times: number = 1,\n): Promise<ObjectSetStreamSubscribeRequests> {\n return await vi.waitFor(() => {\n expect(ws.send).toBeCalledTimes(times);\n const result = JSON.parse(ws.send.mock.lastCall![0].toString());\n ws.send.mockClear();\n return result;\n });\n}\n\nasync function subscribeAndExpectWebSocket(\n client: ObjectSetListenerWebsocket,\n listener: MockedListener,\n): Promise<readonly [MockedWebSocket, () => void]> {\n const [ws, unsubscribe] = await Promise.all([\n expectWebSocketConstructed(),\n client.subscribe<Employee, PropertyKeys<Employee>>(\n {\n apiName: \"Employee\",\n type: \"object\",\n },\n {\n type: \"base\",\n objectType: Employee.apiName,\n },\n listener,\n ),\n ]);\n\n // otherwise the ObjectSetListenerWebSocket is sitting waiting for it to \"connect\"\n setWebSocketState(ws, \"open\");\n\n return [ws, unsubscribe] as const;\n}\n\nasync function expectWebSocketConstructed(): Promise<MockedWebSocket> {\n expect(MockedWebSocket).toHaveBeenCalledTimes(0);\n\n const ws = await vi.waitFor(() => {\n expect(MockedWebSocket).toHaveBeenCalled();\n expect(MockedWebSocket.mock.results[0].type === \"return\");\n return MockedWebSocket.mock.results[0].value as MockedWebSocket;\n });\n\n expect(MockedWebSocket).toHaveBeenCalledTimes(1);\n MockedWebSocket.mockClear();\n expect(MockedWebSocket).toHaveBeenCalledTimes(0);\n\n return ws;\n}\n\nfunction createMockWebSocketConstructor(\n OriginalWebSocket: WebSocket,\n logger: Logger,\n): MockedWebSocket {\n let i = 0;\n const ret = vi.fn(function(..._args: any[]): MockedWebSocket {\n const webSocketInst = i++;\n logger.debug(\"WebSocket constructor called\");\n const eventEmitter = new EventTarget();\n\n return {\n addEventListener: vi.fn(\n eventEmitter.addEventListener.bind(eventEmitter),\n ) as any,\n removeEventListener: vi.fn(\n eventEmitter.removeEventListener.bind(eventEmitter),\n ) as any,\n\n send: vi.fn((a, _b: any) => {\n logger.debug(\n { message: JSON.parse(a.toString()), webSocketInst },\n \"send() called\",\n );\n }),\n close: vi.fn(),\n _eventEmitter: eventEmitter,\n readyState: OriginalWebSocket.CONNECTING,\n } satisfies RawWebSocketPlus as any as MockedWebSocket;\n // ^ we only implement some things but the type system wants to think its the full deal,\n // thus the satisfies plus the cast\n }) as any as MockedWebSocket;\n\n Object.assign(ret, {\n OPEN: OriginalWebSocket.OPEN,\n CLOSED: OriginalWebSocket.CLOSED,\n CLOSING: OriginalWebSocket.CLOSING,\n CONNECTING: OriginalWebSocket.CONNECTING,\n });\n\n return ret;\n}\n\nfunction setWebSocketState(ws: MockedWebSocket, readyState: \"open\" | \"close\") {\n const newState = readyState === \"open\"\n ? ImportedWebSocket.OPEN\n : ImportedWebSocket.CLOSED;\n\n if (newState === ws.readyState) return;\n\n ws.readyState = newState;\n ws._eventEmitter.dispatchEvent(new Event(readyState, {}));\n}\n\nfunction addLoggerToApiServer(logger: Logger) {\n const z = (\n name: string,\n { requestId, request }: { requestId: string; request: Request },\n ) => logger.trace({ requestId, url: request.url }, name);\n\n const eventNames = [\n \"request:start\",\n \"request:match\",\n \"request:end\",\n \"request:unhandled\",\n \"response:bypass\",\n \"response:mocked\",\n ] as const;\n\n for (const c of eventNames) {\n apiServer.events.on(c as typeof eventNames[number], z.bind(undefined, c));\n }\n}\n\nconst SubscribeMessage = z.object({\n id: z.string(),\n requests: z.array(z.object({\n objectSet: z.object({ id: z.string() }),\n propertySet: z.array(z.string()),\n referenceSet: z.array(z.string()),\n })),\n});\n\nclass MessageEvent extends Event {\n data: string;\n constructor(data: any) {\n super(\"message\");\n this.data = JSON.stringify(data);\n }\n}\n\nfunction sendToClient<T>(ws: MockedWebSocket, t: T) {\n ws._eventEmitter.dispatchEvent(new MessageEvent(t));\n}\n"],"mappings":"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","ignoreList":[]}
|