@iota-uz/sdk 0.4.44 → 0.5.1
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/LICENSE +21 -0
- package/README.md +11 -142
- package/dist/client-host/applet.d.ts +52 -0
- package/dist/client-host/applet.d.ts.map +1 -0
- package/dist/client-host/applet.js +24 -0
- package/dist/client-host/cache.d.ts +15 -0
- package/dist/client-host/cache.d.ts.map +1 -0
- package/dist/client-host/cache.js +27 -0
- package/dist/client-host/errors.d.ts +16 -0
- package/dist/client-host/errors.d.ts.map +1 -0
- package/dist/client-host/errors.js +45 -0
- package/dist/client-host/identity.d.ts +21 -0
- package/dist/client-host/identity.d.ts.map +1 -0
- package/dist/client-host/identity.js +28 -0
- package/dist/client-host/index.d.ts +11 -0
- package/dist/client-host/index.d.ts.map +1 -0
- package/dist/client-host/index.js +10 -0
- package/dist/client-host/portals.d.ts +30 -0
- package/dist/client-host/portals.d.ts.map +1 -0
- package/dist/client-host/portals.js +149 -0
- package/dist/client-host/protocol.d.ts +2 -0
- package/dist/client-host/protocol.d.ts.map +1 -0
- package/dist/client-host/protocol.js +2 -0
- package/dist/client-host/route.d.ts +29 -0
- package/dist/client-host/route.d.ts.map +1 -0
- package/dist/client-host/route.js +32 -0
- package/dist/client-host/rpc.d.ts +46 -0
- package/dist/client-host/rpc.d.ts.map +1 -0
- package/dist/client-host/rpc.js +90 -0
- package/dist/client-host/streaming.d.ts +43 -0
- package/dist/client-host/streaming.d.ts.map +1 -0
- package/dist/client-host/streaming.js +141 -0
- package/dist/client-host/transport.d.ts +26 -0
- package/dist/client-host/transport.d.ts.map +1 -0
- package/dist/client-host/transport.js +53 -0
- package/dist/lens/CascadePanel-DqOZFdR-.js +512 -0
- package/dist/lens/ChartDataEquivalent-BFDdHoQn.js +52 -0
- package/dist/lens/ChartHost-Bl2lxIqU.js +68 -0
- package/dist/lens/ChartPanel-CTIp_4YE.js +720 -0
- package/dist/lens/CoveragePanel-DZZWkjSv.js +131 -0
- package/dist/lens/DashboardPanels.d.ts +36 -0
- package/dist/lens/DashboardPanels.d.ts.map +1 -0
- package/dist/lens/GaugePanel-BcNdd_Wj.js +43 -0
- package/dist/lens/LensDashboard.d.ts +21 -0
- package/dist/lens/LensDashboard.d.ts.map +1 -0
- package/dist/lens/MapPanel-6sI_Ei9L.js +178 -0
- package/dist/lens/MetricFlowPanel-LzqevSPs.js +70 -0
- package/dist/lens/MetricHierarchyPanel-h6tJqRPg.js +72 -0
- package/dist/lens/MetricRelationshipPanel-CgckUvvJ.js +54 -0
- package/dist/lens/PrintReport-DJv4Rm_U.js +1351 -0
- package/dist/lens/TablePanel-Dh6bXlwM.js +619 -0
- package/dist/lens/adapter-zBDC8hbZ.js +29093 -0
- package/dist/lens/breakpoints.d.ts +37 -0
- package/dist/lens/breakpoints.d.ts.map +1 -0
- package/dist/lens/charts/adapter.d.ts +157 -0
- package/dist/lens/charts/adapter.d.ts.map +1 -0
- package/dist/lens/charts/echarts/adapter.d.ts +9 -0
- package/dist/lens/charts/echarts/adapter.d.ts.map +1 -0
- package/dist/lens/charts/echarts/distributions.d.ts +9 -0
- package/dist/lens/charts/echarts/distributions.d.ts.map +1 -0
- package/dist/lens/charts/echarts/events.d.ts +7 -0
- package/dist/lens/charts/echarts/events.d.ts.map +1 -0
- package/dist/lens/charts/echarts/options.d.ts +163 -0
- package/dist/lens/charts/echarts/options.d.ts.map +1 -0
- package/dist/lens/charts/echarts/theme.d.ts +49 -0
- package/dist/lens/charts/echarts/theme.d.ts.map +1 -0
- package/dist/lens/charts/echarts/tooltip.d.ts +79 -0
- package/dist/lens/charts/echarts/tooltip.d.ts.map +1 -0
- package/dist/lens/charts/index.d.ts +9 -0
- package/dist/lens/charts/index.d.ts.map +1 -0
- package/dist/lens/charts/keys.d.ts +8 -0
- package/dist/lens/charts/keys.d.ts.map +1 -0
- package/dist/lens/charts/overlays.d.ts +134 -0
- package/dist/lens/charts/overlays.d.ts.map +1 -0
- package/dist/lens/charts/palette.d.ts +54 -0
- package/dist/lens/charts/palette.d.ts.map +1 -0
- package/dist/lens/charts/scales.d.ts +26 -0
- package/dist/lens/charts/scales.d.ts.map +1 -0
- package/dist/lens/charts/shares.d.ts +44 -0
- package/dist/lens/charts/shares.d.ts.map +1 -0
- package/dist/lens/charts/text.d.ts +23 -0
- package/dist/lens/charts/text.d.ts.map +1 -0
- package/dist/lens/contract/index.d.ts +4 -0
- package/dist/lens/contract/index.d.ts.map +1 -0
- package/dist/lens/contract/palette.d.ts +13 -0
- package/dist/lens/contract/palette.d.ts.map +1 -0
- package/dist/lens/contract/schemas.d.ts +132 -0
- package/dist/lens/contract/schemas.d.ts.map +1 -0
- package/dist/lens/contract/types.d.ts +788 -0
- package/dist/lens/contract/types.d.ts.map +1 -0
- package/dist/lens/controls/Calendar.d.ts +24 -0
- package/dist/lens/controls/Calendar.d.ts.map +1 -0
- package/dist/lens/controls/CompareFilterControl.d.ts +23 -0
- package/dist/lens/controls/CompareFilterControl.d.ts.map +1 -0
- package/dist/lens/controls/FacetFilterMenu.d.ts +29 -0
- package/dist/lens/controls/FacetFilterMenu.d.ts.map +1 -0
- package/dist/lens/controls/FilterBar.d.ts +30 -0
- package/dist/lens/controls/FilterBar.d.ts.map +1 -0
- package/dist/lens/controls/PeriodFilterControl.d.ts +50 -0
- package/dist/lens/controls/PeriodFilterControl.d.ts.map +1 -0
- package/dist/lens/controls/SegmentedFilterControl.d.ts +22 -0
- package/dist/lens/controls/SegmentedFilterControl.d.ts.map +1 -0
- package/dist/lens/controls/facetOptions.d.ts +33 -0
- package/dist/lens/controls/facetOptions.d.ts.map +1 -0
- package/dist/lens/controls/index.d.ts +6 -0
- package/dist/lens/controls/index.d.ts.map +1 -0
- package/dist/lens/controls/model.d.ts +181 -0
- package/dist/lens/controls/model.d.ts.map +1 -0
- package/dist/lens/drillPrefetch-Bs-6Oyxa.js +68 -0
- package/dist/lens/element.d.ts +12 -0
- package/dist/lens/element.d.ts.map +1 -0
- package/dist/lens/explore/ContextMiniChart.d.ts +18 -0
- package/dist/lens/explore/ContextMiniChart.d.ts.map +1 -0
- package/dist/lens/explore/DrillOverlay.d.ts +66 -0
- package/dist/lens/explore/DrillOverlay.d.ts.map +1 -0
- package/dist/lens/explore/ExplorePanel.d.ts +8 -0
- package/dist/lens/explore/ExplorePanel.d.ts.map +1 -0
- package/dist/lens/explore/FocusContextHeader.d.ts +20 -0
- package/dist/lens/explore/FocusContextHeader.d.ts.map +1 -0
- package/dist/lens/explore/LensSelector.d.ts +17 -0
- package/dist/lens/explore/LensSelector.d.ts.map +1 -0
- package/dist/lens/explore/SourceDataDisclosure.d.ts +15 -0
- package/dist/lens/explore/SourceDataDisclosure.d.ts.map +1 -0
- package/dist/lens/explore/actions.d.ts +22 -0
- package/dist/lens/explore/actions.d.ts.map +1 -0
- package/dist/lens/explore/focusModel.d.ts +55 -0
- package/dist/lens/explore/focusModel.d.ts.map +1 -0
- package/dist/lens/explore/index.d.ts +9 -0
- package/dist/lens/explore/index.d.ts.map +1 -0
- package/dist/lens/explore/model.d.ts +59 -0
- package/dist/lens/explore/model.d.ts.map +1 -0
- package/dist/lens/export-B0U20F4u.js +57 -0
- package/dist/lens/icons.d.ts +103 -0
- package/dist/lens/icons.d.ts.map +1 -0
- package/dist/lens/idlePrefetch-Bi4Wk1uR.js +80 -0
- package/dist/lens/index-C45DAO6w.js +10883 -0
- package/dist/lens/index-CspKnSQn.js +11 -0
- package/dist/lens/index.d.ts +7 -0
- package/dist/lens/index.d.ts.map +1 -0
- package/dist/lens/index.js +17 -0
- package/dist/lens/install-3GLgv_LN.js +2028 -0
- package/dist/lens/install-B5oSx3pv.js +233 -0
- package/dist/lens/install-DT0AQkUj.js +1490 -0
- package/dist/lens/install-DyXK20dR.js +307 -0
- package/dist/lens/keys-DenV5HsJ.js +12 -0
- package/dist/lens/listSearch.d.ts +12 -0
- package/dist/lens/listSearch.d.ts.map +1 -0
- package/dist/lens/metricViews-QvoFHVdh.js +170 -0
- package/dist/lens/panels/CascadePanel.d.ts +138 -0
- package/dist/lens/panels/CascadePanel.d.ts.map +1 -0
- package/dist/lens/panels/ChartDataEquivalent.d.ts +23 -0
- package/dist/lens/panels/ChartDataEquivalent.d.ts.map +1 -0
- package/dist/lens/panels/ChartHost.d.ts +14 -0
- package/dist/lens/panels/ChartHost.d.ts.map +1 -0
- package/dist/lens/panels/ChartPanel.d.ts +29 -0
- package/dist/lens/panels/ChartPanel.d.ts.map +1 -0
- package/dist/lens/panels/CopyValueButton.d.ts +15 -0
- package/dist/lens/panels/CopyValueButton.d.ts.map +1 -0
- package/dist/lens/panels/CoveragePanel.d.ts +17 -0
- package/dist/lens/panels/CoveragePanel.d.ts.map +1 -0
- package/dist/lens/panels/ExportMenu.d.ts +12 -0
- package/dist/lens/panels/ExportMenu.d.ts.map +1 -0
- package/dist/lens/panels/GaugePanel.d.ts +6 -0
- package/dist/lens/panels/GaugePanel.d.ts.map +1 -0
- package/dist/lens/panels/InfoTip.d.ts +50 -0
- package/dist/lens/panels/InfoTip.d.ts.map +1 -0
- package/dist/lens/panels/MapPanel.d.ts +17 -0
- package/dist/lens/panels/MapPanel.d.ts.map +1 -0
- package/dist/lens/panels/MetricFlowPanel.d.ts +6 -0
- package/dist/lens/panels/MetricFlowPanel.d.ts.map +1 -0
- package/dist/lens/panels/MetricHierarchyPanel.d.ts +6 -0
- package/dist/lens/panels/MetricHierarchyPanel.d.ts.map +1 -0
- package/dist/lens/panels/MetricRelationshipPanel.d.ts +14 -0
- package/dist/lens/panels/MetricRelationshipPanel.d.ts.map +1 -0
- package/dist/lens/panels/PanelExportMenu.d.ts +5 -0
- package/dist/lens/panels/PanelExportMenu.d.ts.map +1 -0
- package/dist/lens/panels/PanelFrame.d.ts +42 -0
- package/dist/lens/panels/PanelFrame.d.ts.map +1 -0
- package/dist/lens/panels/PanelOverlay.d.ts +19 -0
- package/dist/lens/panels/PanelOverlay.d.ts.map +1 -0
- package/dist/lens/panels/QualityChip.d.ts +51 -0
- package/dist/lens/panels/QualityChip.d.ts.map +1 -0
- package/dist/lens/panels/ShareSliceButton.d.ts +3 -0
- package/dist/lens/panels/ShareSliceButton.d.ts.map +1 -0
- package/dist/lens/panels/Skeleton.d.ts +67 -0
- package/dist/lens/panels/Skeleton.d.ts.map +1 -0
- package/dist/lens/panels/StatPanel.d.ts +52 -0
- package/dist/lens/panels/StatPanel.d.ts.map +1 -0
- package/dist/lens/panels/StatValueTicker.d.ts +27 -0
- package/dist/lens/panels/StatValueTicker.d.ts.map +1 -0
- package/dist/lens/panels/TablePanel.d.ts +19 -0
- package/dist/lens/panels/TablePanel.d.ts.map +1 -0
- package/dist/lens/panels/WaterfallPlot.d.ts +51 -0
- package/dist/lens/panels/WaterfallPlot.d.ts.map +1 -0
- package/dist/lens/panels/actions.d.ts +75 -0
- package/dist/lens/panels/actions.d.ts.map +1 -0
- package/dist/lens/panels/context.d.ts +32 -0
- package/dist/lens/panels/context.d.ts.map +1 -0
- package/dist/lens/panels/data.d.ts +95 -0
- package/dist/lens/panels/data.d.ts.map +1 -0
- package/dist/lens/panels/kinds.d.ts +4 -0
- package/dist/lens/panels/kinds.d.ts.map +1 -0
- package/dist/lens/panels/metricViews.d.ts +79 -0
- package/dist/lens/panels/metricViews.d.ts.map +1 -0
- package/dist/lens/panels/registry.d.ts +45 -0
- package/dist/lens/panels/registry.d.ts.map +1 -0
- package/dist/lens/panels/useIsClamped.d.ts +16 -0
- package/dist/lens/panels/useIsClamped.d.ts.map +1 -0
- package/dist/lens/panels/useMenuButton.d.ts +68 -0
- package/dist/lens/panels/useMenuButton.d.ts.map +1 -0
- package/dist/lens/prefetch-Dov5CBoH.js +74 -0
- package/dist/lens/prefetchPanels-B7bIY0bM.js +31 -0
- package/dist/lens/print/PrintReport.d.ts +12 -0
- package/dist/lens/print/PrintReport.d.ts.map +1 -0
- package/dist/lens/print/footnotes.d.ts +29 -0
- package/dist/lens/print/footnotes.d.ts.map +1 -0
- package/dist/lens/print/formula.d.ts +9 -0
- package/dist/lens/print/formula.d.ts.map +1 -0
- package/dist/lens/print/narrative.d.ts +41 -0
- package/dist/lens/print/narrative.d.ts.map +1 -0
- package/dist/lens/print/outline.d.ts +94 -0
- package/dist/lens/print/outline.d.ts.map +1 -0
- package/dist/lens/print/palette.d.ts +23 -0
- package/dist/lens/print/palette.d.ts.map +1 -0
- package/dist/lens/print/quality.d.ts +32 -0
- package/dist/lens/print/quality.d.ts.map +1 -0
- package/dist/lens/print/units.d.ts +23 -0
- package/dist/lens/print/units.d.ts.map +1 -0
- package/dist/lens/print/values.d.ts +28 -0
- package/dist/lens/print/values.d.ts.map +1 -0
- package/dist/lens/print-CwcB0fug.js +216 -0
- package/dist/lens/runtime/clipboard.d.ts +11 -0
- package/dist/lens/runtime/clipboard.d.ts.map +1 -0
- package/dist/lens/runtime/document.d.ts +9 -0
- package/dist/lens/runtime/document.d.ts.map +1 -0
- package/dist/lens/runtime/drawer.d.ts +21 -0
- package/dist/lens/runtime/drawer.d.ts.map +1 -0
- package/dist/lens/runtime/drill.d.ts +54 -0
- package/dist/lens/runtime/drill.d.ts.map +1 -0
- package/dist/lens/runtime/drillPrefetch.d.ts +22 -0
- package/dist/lens/runtime/drillPrefetch.d.ts.map +1 -0
- package/dist/lens/runtime/export.d.ts +21 -0
- package/dist/lens/runtime/export.d.ts.map +1 -0
- package/dist/lens/runtime/filters.d.ts +51 -0
- package/dist/lens/runtime/filters.d.ts.map +1 -0
- package/dist/lens/runtime/focusTrap.d.ts +4 -0
- package/dist/lens/runtime/focusTrap.d.ts.map +1 -0
- package/dist/lens/runtime/format.d.ts +81 -0
- package/dist/lens/runtime/format.d.ts.map +1 -0
- package/dist/lens/runtime/idlePrefetch.d.ts +35 -0
- package/dist/lens/runtime/idlePrefetch.d.ts.map +1 -0
- package/dist/lens/runtime/index.d.ts +15 -0
- package/dist/lens/runtime/index.d.ts.map +1 -0
- package/dist/lens/runtime/navigate.d.ts +12 -0
- package/dist/lens/runtime/navigate.d.ts.map +1 -0
- package/dist/lens/runtime/navigation.d.ts +77 -0
- package/dist/lens/runtime/navigation.d.ts.map +1 -0
- package/dist/lens/runtime/overlayContainer.d.ts +24 -0
- package/dist/lens/runtime/overlayContainer.d.ts.map +1 -0
- package/dist/lens/runtime/panel.d.ts +47 -0
- package/dist/lens/runtime/panel.d.ts.map +1 -0
- package/dist/lens/runtime/panelImage.d.ts +28 -0
- package/dist/lens/runtime/panelImage.d.ts.map +1 -0
- package/dist/lens/runtime/prefetch.d.ts +48 -0
- package/dist/lens/runtime/prefetch.d.ts.map +1 -0
- package/dist/lens/runtime/prefetchPanels.d.ts +17 -0
- package/dist/lens/runtime/prefetchPanels.d.ts.map +1 -0
- package/dist/lens/runtime/print.d.ts +50 -0
- package/dist/lens/runtime/print.d.ts.map +1 -0
- package/dist/lens/runtime/provider.d.ts +195 -0
- package/dist/lens/runtime/provider.d.ts.map +1 -0
- package/dist/lens/runtime/query.d.ts +32 -0
- package/dist/lens/runtime/query.d.ts.map +1 -0
- package/dist/lens/runtime/recovery.d.ts +26 -0
- package/dist/lens/runtime/recovery.d.ts.map +1 -0
- package/dist/lens/runtime/snapshotLease.d.ts +2 -0
- package/dist/lens/runtime/snapshotLease.d.ts.map +1 -0
- package/dist/lens/runtime/theme.d.ts +4 -0
- package/dist/lens/runtime/theme.d.ts.map +1 -0
- package/dist/lens/runtime/url.d.ts +23 -0
- package/dist/lens/runtime/url.d.ts.map +1 -0
- package/dist/lens/scales-DKkoQGtJ.js +195 -0
- package/dist/lens/snapshotLease-LjBaqKs-.js +14 -0
- package/dist/lens/style.css +1 -0
- package/dist/lens/visualRegression.d.ts +2 -0
- package/dist/lens/visualRegression.d.ts.map +1 -0
- package/dist/sdk-identity.cjs +6 -0
- package/dist/sdk-identity.d.ts +4 -0
- package/dist/sdk-identity.js +4 -0
- package/dist/sdk-identity.json +5 -0
- package/package.json +22 -123
- package/assets/fonts/Actay/Actay-Regular.otf +0 -0
- package/assets/fonts/Actay/Actay-RegularItalic.otf +0 -0
- package/assets/fonts/Actay/ActayCondensed-Thin.otf +0 -0
- package/assets/fonts/Actay/ActayCondensed-ThinItalic.otf +0 -0
- package/assets/fonts/Actay/ActayWide-Bold.otf +0 -0
- package/assets/fonts/Actay/ActayWide-BoldItalic.otf +0 -0
- package/assets/fonts/Gilroy/Gilroy-Black.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-BlackItalic.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-Bold.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-BoldItalic.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-Extrabold.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-ExtraboldItalic.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-Heavy.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-HeavyItalic.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-Light.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-LightItalic.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-Medium.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-MediumItalic.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-Regular.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-RegularItalic.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-Semibold.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-SemiboldItalic.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-Thin.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-ThinItalic.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-UltraLight.woff2 +0 -0
- package/assets/fonts/Gilroy/Gilroy-UltraLightItalic.woff2 +0 -0
- package/assets/fonts/Inter.var.woff2 +0 -0
- package/dist/applet/core.cjs +0 -412
- package/dist/applet/core.cjs.map +0 -1
- package/dist/applet/core.d.cts +0 -187
- package/dist/applet/core.d.ts +0 -187
- package/dist/applet/core.mjs +0 -396
- package/dist/applet/core.mjs.map +0 -1
- package/dist/applet/devtools.cjs +0 -147
- package/dist/applet/devtools.cjs.map +0 -1
- package/dist/applet/devtools.d.cts +0 -7
- package/dist/applet/devtools.d.ts +0 -7
- package/dist/applet/devtools.mjs +0 -144
- package/dist/applet/devtools.mjs.map +0 -1
- package/dist/applet/host.cjs +0 -397
- package/dist/applet/host.cjs.map +0 -1
- package/dist/applet/host.d.cts +0 -42
- package/dist/applet/host.d.ts +0 -42
- package/dist/applet/host.mjs +0 -392
- package/dist/applet/host.mjs.map +0 -1
- package/dist/applet/vite.cjs +0 -219
- package/dist/applet/vite.cjs.map +0 -1
- package/dist/applet/vite.d.cts +0 -99
- package/dist/applet/vite.d.ts +0 -99
- package/dist/applet/vite.mjs +0 -203
- package/dist/applet/vite.mjs.map +0 -1
- package/dist/applet-runtime/index.cjs +0 -890
- package/dist/applet-runtime/index.cjs.map +0 -1
- package/dist/applet-runtime/index.d.cts +0 -191
- package/dist/applet-runtime/index.d.ts +0 -191
- package/dist/applet-runtime/index.mjs +0 -876
- package/dist/applet-runtime/index.mjs.map +0 -1
- package/dist/bichat/index.cjs +0 -20896
- package/dist/bichat/index.cjs.map +0 -1
- package/dist/bichat/index.css +0 -618
- package/dist/bichat/index.css.map +0 -1
- package/dist/bichat/index.d.cts +0 -4522
- package/dist/bichat/index.d.ts +0 -4522
- package/dist/bichat/index.mjs +0 -20724
- package/dist/bichat/index.mjs.map +0 -1
- package/dist/bichat/styles.css +0 -774
- package/dist/bichat/tailwind.cjs +0 -103
- package/dist/bichat/tailwind.cjs.map +0 -1
- package/dist/bichat/tailwind.d.cts +0 -21
- package/dist/bichat/tailwind.d.ts +0 -21
- package/dist/bichat/tailwind.mjs +0 -95
- package/dist/bichat/tailwind.mjs.map +0 -1
- package/dist/fonts/Actay/Actay-Regular.otf +0 -0
- package/dist/fonts/Actay/Actay-RegularItalic.otf +0 -0
- package/dist/fonts/Actay/ActayCondensed-Thin.otf +0 -0
- package/dist/fonts/Actay/ActayCondensed-ThinItalic.otf +0 -0
- package/dist/fonts/Actay/ActayWide-Bold.otf +0 -0
- package/dist/fonts/Actay/ActayWide-BoldItalic.otf +0 -0
- package/dist/fonts/Gilroy/Gilroy-Black.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-BlackItalic.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-Bold.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-BoldItalic.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-Extrabold.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-ExtraboldItalic.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-Heavy.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-HeavyItalic.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-Light.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-LightItalic.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-Medium.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-MediumItalic.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-Regular.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-RegularItalic.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-Semibold.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-SemiboldItalic.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-Thin.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-ThinItalic.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-UltraLight.woff2 +0 -0
- package/dist/fonts/Gilroy/Gilroy-UltraLightItalic.woff2 +0 -0
- package/dist/fonts/Inter.var.woff2 +0 -0
- package/dist/index-Cs_xWkhC.d.cts +0 -84
- package/dist/index-Cs_xWkhC.d.ts +0 -84
- package/dist/index.cjs +0 -777
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -7
- package/dist/index.d.ts +0 -7
- package/dist/index.mjs +0 -755
- package/dist/index.mjs.map +0 -1
- package/dist/rpc-fh942_dj.d.cts +0 -31
- package/dist/rpc-fh942_dj.d.ts +0 -31
- package/tailwind/compiled.css +0 -2
- package/tailwind/create-config.cjs +0 -90
- package/tailwind/iota.css +0 -1195
- package/tailwind/main.css +0 -2
- package/tailwind/sdk-content.cjs +0 -177
- package/tailwind/sdk-theme.cjs +0 -120
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ComponentType } from 'react';
|
|
2
|
+
import { type WidgetSlotName } from './portals';
|
|
3
|
+
export declare class ClientHostProtocolError extends Error {
|
|
4
|
+
readonly expected: string;
|
|
5
|
+
readonly actual: string;
|
|
6
|
+
constructor(expected: string, actual: string);
|
|
7
|
+
}
|
|
8
|
+
export interface ClientRouteContext<TInitial = unknown> {
|
|
9
|
+
protocolVersion: string;
|
|
10
|
+
sdkReleaseVersion: string;
|
|
11
|
+
sdkCommit: string;
|
|
12
|
+
initial: TInitial;
|
|
13
|
+
theme: 'light' | 'dark';
|
|
14
|
+
csrf?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface MountClientRouteOptions<TInitial, TProps extends object> {
|
|
17
|
+
root: HTMLElement;
|
|
18
|
+
portals: HTMLElement;
|
|
19
|
+
background?: HTMLElement;
|
|
20
|
+
widgetSlots?: Partial<Record<WidgetSlotName, HTMLElement>>;
|
|
21
|
+
component: ComponentType<TProps & {
|
|
22
|
+
route: ClientRouteContext<TInitial>;
|
|
23
|
+
}>;
|
|
24
|
+
props: TProps;
|
|
25
|
+
context: ClientRouteContext<TInitial>;
|
|
26
|
+
}
|
|
27
|
+
export declare function assertClientHostProtocol(actual: string): void;
|
|
28
|
+
export declare function mountClientRoute<TInitial, TProps extends object>(options: MountClientRouteOptions<TInitial, TProps>): () => void;
|
|
29
|
+
//# sourceMappingURL=route.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../src/route.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AAInE,qBAAa,uBAAwB,SAAQ,KAAK;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAAzC,QAAQ,EAAE,MAAM,EAAW,MAAM,EAAE,MAAM;CAI/D;AAED,MAAM,WAAW,kBAAkB,CAAC,QAAQ,GAAG,OAAO;IACpD,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,QAAQ,CAAA;IACjB,KAAK,EAAE,OAAO,GAAG,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,uBAAuB,CAAC,QAAQ,EAAE,MAAM,SAAS,MAAM;IACtE,IAAI,EAAE,WAAW,CAAA;IACjB,OAAO,EAAE,WAAW,CAAA;IACpB,UAAU,CAAC,EAAE,WAAW,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAA;IAC1D,SAAS,EAAE,aAAa,CAAC,MAAM,GAAG;QAAE,KAAK,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAA;KAAE,CAAC,CAAA;IAC1E,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAA;CACtC;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAI7D;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,SAAS,MAAM,EAAE,OAAO,EAAE,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM,IAAI,CAehI"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createRoot } from 'react-dom/client';
|
|
3
|
+
import { ClientHostProvider } from './portals';
|
|
4
|
+
import { assertSDKIdentity } from './identity';
|
|
5
|
+
import { CLIENT_HOST_PROTOCOL_VERSION } from './protocol';
|
|
6
|
+
export class ClientHostProtocolError extends Error {
|
|
7
|
+
expected;
|
|
8
|
+
actual;
|
|
9
|
+
constructor(expected, actual) {
|
|
10
|
+
super(`Client host protocol ${actual} is incompatible with ${expected}`);
|
|
11
|
+
this.expected = expected;
|
|
12
|
+
this.actual = actual;
|
|
13
|
+
this.name = 'ClientHostProtocolError';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function assertClientHostProtocol(actual) {
|
|
17
|
+
if (actual.split('.', 1)[0] !== CLIENT_HOST_PROTOCOL_VERSION.split('.', 1)[0]) {
|
|
18
|
+
throw new ClientHostProtocolError(CLIENT_HOST_PROTOCOL_VERSION, actual);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function mountClientRoute(options) {
|
|
22
|
+
assertClientHostProtocol(options.context.protocolVersion);
|
|
23
|
+
assertSDKIdentity({
|
|
24
|
+
releaseVersion: options.context.sdkReleaseVersion,
|
|
25
|
+
sourceCommit: options.context.sdkCommit,
|
|
26
|
+
protocolVersion: options.context.protocolVersion,
|
|
27
|
+
});
|
|
28
|
+
const root = createRoot(options.root);
|
|
29
|
+
const Component = options.component;
|
|
30
|
+
root.render(_jsx(ClientHostProvider, { portalOwner: options.portals, background: options.background, widgetSlots: options.widgetSlots, theme: options.context.theme, children: _jsx(Component, { ...options.props, route: options.context }) }));
|
|
31
|
+
return () => root.unmount();
|
|
32
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type QueryCache, type QueryKey } from './cache';
|
|
2
|
+
import { HostError, type HostErrorHandlers } from './errors';
|
|
3
|
+
export interface RPCMethodContract {
|
|
4
|
+
namespace: string;
|
|
5
|
+
method: string;
|
|
6
|
+
kind: 'query' | 'mutation';
|
|
7
|
+
cacheable?: boolean;
|
|
8
|
+
maxRetries?: number;
|
|
9
|
+
invalidates?: readonly string[];
|
|
10
|
+
}
|
|
11
|
+
export interface RPCTransport {
|
|
12
|
+
call<TRequest, TResponse>(method: string, request: TRequest, signal: AbortSignal): Promise<TResponse>;
|
|
13
|
+
}
|
|
14
|
+
export interface RPCDiagnostics {
|
|
15
|
+
call?(event: {
|
|
16
|
+
method: string;
|
|
17
|
+
key?: QueryKey;
|
|
18
|
+
state: 'start' | 'success' | 'error' | 'cancelled';
|
|
19
|
+
error?: HostError;
|
|
20
|
+
}): void;
|
|
21
|
+
}
|
|
22
|
+
export interface RPCClientOptions {
|
|
23
|
+
cache?: QueryCache;
|
|
24
|
+
errors?: HostErrorHandlers;
|
|
25
|
+
diagnostics?: RPCDiagnostics;
|
|
26
|
+
}
|
|
27
|
+
export declare class RPCClient {
|
|
28
|
+
readonly transport: RPCTransport;
|
|
29
|
+
readonly options: RPCClientOptions;
|
|
30
|
+
readonly cache: QueryCache;
|
|
31
|
+
constructor(transport: RPCTransport, options?: RPCClientOptions);
|
|
32
|
+
query<TRequest, TResponse>(contract: RPCMethodContract, request: TRequest, signal: AbortSignal): Promise<TResponse>;
|
|
33
|
+
mutate<TRequest, TResponse>(contract: RPCMethodContract, request: TRequest, signal: AbortSignal): Promise<TResponse>;
|
|
34
|
+
}
|
|
35
|
+
export type QueryState<T> = {
|
|
36
|
+
status: 'loading';
|
|
37
|
+
} | {
|
|
38
|
+
status: 'success';
|
|
39
|
+
data: T;
|
|
40
|
+
} | {
|
|
41
|
+
status: 'error';
|
|
42
|
+
error: HostError;
|
|
43
|
+
};
|
|
44
|
+
export declare function useRPCQuery<TRequest, TResponse>(client: RPCClient, contract: RPCMethodContract, request: TRequest): QueryState<TResponse>;
|
|
45
|
+
export declare function useRPCMutation<TRequest, TResponse>(client: RPCClient, contract: RPCMethodContract): (request: TRequest) => Promise<TResponse>;
|
|
46
|
+
//# sourceMappingURL=rpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AACpF,OAAO,EAAkC,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAE5F,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,OAAO,GAAG,UAAU,CAAA;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAChC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;CACtG;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC;QAAC,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI,CAAA;CAC9H;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,WAAW,CAAC,EAAE,cAAc,CAAA;CAC7B;AAED,qBAAa,SAAS;IAER,QAAQ,CAAC,SAAS,EAAE,YAAY;IAAE,QAAQ,CAAC,OAAO,EAAE,gBAAgB;IADhF,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;gBACL,SAAS,EAAE,YAAY,EAAW,OAAO,GAAE,gBAAqB;IAI/E,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;IAgCnH,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;CAe3H;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAA;AAE1H,wBAAgB,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAezI;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,iBAAiB,aAG7D,QAAQ,KAAG,OAAO,CAAC,SAAS,CAAC,CAKjE"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { MemoryQueryCache, queryKey } from './cache';
|
|
3
|
+
import { asHostError, dispatchHostError, HostError } from './errors';
|
|
4
|
+
export class RPCClient {
|
|
5
|
+
transport;
|
|
6
|
+
options;
|
|
7
|
+
cache;
|
|
8
|
+
constructor(transport, options = {}) {
|
|
9
|
+
this.transport = transport;
|
|
10
|
+
this.options = options;
|
|
11
|
+
this.cache = options.cache ?? new MemoryQueryCache();
|
|
12
|
+
}
|
|
13
|
+
async query(contract, request, signal) {
|
|
14
|
+
if (contract.kind !== 'query')
|
|
15
|
+
throw new HostError('protocol', `${contract.method} is not a query`);
|
|
16
|
+
const key = queryKey(contract.namespace, contract.method, request);
|
|
17
|
+
if (contract.cacheable !== false) {
|
|
18
|
+
const cached = this.cache.get(key);
|
|
19
|
+
if (cached !== undefined)
|
|
20
|
+
return cached;
|
|
21
|
+
}
|
|
22
|
+
let attempt = 0;
|
|
23
|
+
const maxRetries = Math.max(0, Math.min(3, contract.maxRetries ?? 2));
|
|
24
|
+
for (;;) {
|
|
25
|
+
this.options.diagnostics?.call?.({ method: contract.method, key, state: 'start' });
|
|
26
|
+
try {
|
|
27
|
+
const response = await this.transport.call(contract.method, request, signal);
|
|
28
|
+
if (contract.cacheable !== false)
|
|
29
|
+
this.cache.set(key, response);
|
|
30
|
+
this.options.diagnostics?.call?.({ method: contract.method, key, state: 'success' });
|
|
31
|
+
return response;
|
|
32
|
+
}
|
|
33
|
+
catch (cause) {
|
|
34
|
+
if (signal.aborted) {
|
|
35
|
+
this.options.diagnostics?.call?.({ method: contract.method, key, state: 'cancelled' });
|
|
36
|
+
throw cause;
|
|
37
|
+
}
|
|
38
|
+
const error = asHostError(cause);
|
|
39
|
+
if (!error.retryable || attempt >= maxRetries) {
|
|
40
|
+
dispatchHostError(error, this.options.errors);
|
|
41
|
+
this.options.diagnostics?.call?.({ method: contract.method, key, state: 'error', error });
|
|
42
|
+
throw error;
|
|
43
|
+
}
|
|
44
|
+
attempt += 1;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async mutate(contract, request, signal) {
|
|
49
|
+
if (contract.kind !== 'mutation')
|
|
50
|
+
throw new HostError('protocol', `${contract.method} is not a mutation`);
|
|
51
|
+
this.options.diagnostics?.call?.({ method: contract.method, state: 'start' });
|
|
52
|
+
try {
|
|
53
|
+
const response = await this.transport.call(contract.method, request, signal);
|
|
54
|
+
this.cache.invalidate(contract.namespace, contract.invalidates ?? []);
|
|
55
|
+
this.options.diagnostics?.call?.({ method: contract.method, state: 'success' });
|
|
56
|
+
return response;
|
|
57
|
+
}
|
|
58
|
+
catch (cause) {
|
|
59
|
+
const error = asHostError(cause);
|
|
60
|
+
if (!signal.aborted)
|
|
61
|
+
dispatchHostError(error, this.options.errors);
|
|
62
|
+
this.options.diagnostics?.call?.({ method: contract.method, state: signal.aborted ? 'cancelled' : 'error', error });
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export function useRPCQuery(client, contract, request) {
|
|
68
|
+
const [state, setState] = useState({ status: 'loading' });
|
|
69
|
+
const generation = useRef(0);
|
|
70
|
+
const requestKey = queryKey(contract.namespace, contract.method, request)[2];
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
const current = ++generation.current;
|
|
73
|
+
const controller = new AbortController();
|
|
74
|
+
setState({ status: 'loading' });
|
|
75
|
+
void client.query(contract, request, controller.signal).then((data) => { if (generation.current === current)
|
|
76
|
+
setState({ status: 'success', data }); }, (cause) => { if (!controller.signal.aborted && generation.current === current)
|
|
77
|
+
setState({ status: 'error', error: asHostError(cause) }); });
|
|
78
|
+
return () => controller.abort();
|
|
79
|
+
}, [client, contract, requestKey]);
|
|
80
|
+
return state;
|
|
81
|
+
}
|
|
82
|
+
export function useRPCMutation(client, contract) {
|
|
83
|
+
const controller = useRef();
|
|
84
|
+
useEffect(() => () => controller.current?.abort(), []);
|
|
85
|
+
return useCallback(async (request) => {
|
|
86
|
+
controller.current?.abort();
|
|
87
|
+
controller.current = new AbortController();
|
|
88
|
+
return client.mutate(contract, request, controller.current.signal);
|
|
89
|
+
}, [client, contract]);
|
|
90
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { HostError, type HostErrorHandlers } from './errors';
|
|
2
|
+
import type { QueryCache } from './cache';
|
|
3
|
+
import { type SessionService } from './transport';
|
|
4
|
+
export interface StreamContract<TEvent> {
|
|
5
|
+
id: string;
|
|
6
|
+
url: string;
|
|
7
|
+
method?: 'GET' | 'POST';
|
|
8
|
+
body?: BodyInit | (() => BodyInit);
|
|
9
|
+
headers?: Readonly<Record<string, string>>;
|
|
10
|
+
terminal(event: TEvent): boolean;
|
|
11
|
+
cursor?(event: TEvent): string | undefined;
|
|
12
|
+
invalidates?(event: TEvent): readonly {
|
|
13
|
+
namespace: string;
|
|
14
|
+
methods: readonly string[];
|
|
15
|
+
}[];
|
|
16
|
+
}
|
|
17
|
+
export interface StreamDiagnostics {
|
|
18
|
+
event?(event: {
|
|
19
|
+
stream: string;
|
|
20
|
+
state: 'connect' | 'event' | 'reconnect' | 'terminal' | 'error';
|
|
21
|
+
cursor?: string | undefined;
|
|
22
|
+
attempt?: number;
|
|
23
|
+
error?: HostError;
|
|
24
|
+
}): void;
|
|
25
|
+
}
|
|
26
|
+
export interface ManagedStreamOptions<TEvent> {
|
|
27
|
+
parse(data: string, event: string): TEvent;
|
|
28
|
+
session?: SessionService;
|
|
29
|
+
errors?: HostErrorHandlers;
|
|
30
|
+
diagnostics?: StreamDiagnostics;
|
|
31
|
+
cache?: QueryCache;
|
|
32
|
+
maxReconnects?: number;
|
|
33
|
+
staleAfterMs?: number;
|
|
34
|
+
baseDelayMs?: number;
|
|
35
|
+
fetch?: typeof globalThis.fetch;
|
|
36
|
+
random?: () => number;
|
|
37
|
+
}
|
|
38
|
+
export interface StreamSubscription {
|
|
39
|
+
close(): void;
|
|
40
|
+
readonly closed: boolean;
|
|
41
|
+
}
|
|
42
|
+
export declare function subscribeManagedStream<TEvent>(contract: StreamContract<TEvent>, onEvent: (event: TEvent) => void, options: ManagedStreamOptions<TEvent>): StreamSubscription;
|
|
43
|
+
//# sourceMappingURL=streaming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjE,MAAM,WAAW,cAAc,CAAC,MAAM;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAA;IAClC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;IAChC,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAC1C,WAAW,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,EAAE,CAAA;CAC1F;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI,CAAA;CAC3K;AAED,MAAM,WAAW,oBAAoB,CAAC,MAAM;IAC1C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;IAC1C,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;IAC/B,MAAM,CAAC,EAAE,MAAM,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,kBAAkB;IAAG,KAAK,IAAI,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE;AAI/E,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAAE,OAAO,EAAE,oBAAoB,CAAC,MAAM,CAAC,GAAG,kBAAkB,CAuE5K"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { asHostError, dispatchHostError, HostError } from './errors';
|
|
2
|
+
import { ManagedSession } from './transport';
|
|
3
|
+
export function subscribeManagedStream(contract, onEvent, options) {
|
|
4
|
+
const controller = new AbortController();
|
|
5
|
+
let cursor;
|
|
6
|
+
let terminal = false;
|
|
7
|
+
let attempt = 0;
|
|
8
|
+
let refreshed = false;
|
|
9
|
+
const fetcher = options.fetch ?? globalThis.fetch;
|
|
10
|
+
const maxReconnects = options.maxReconnects ?? 4;
|
|
11
|
+
const baseDelay = options.baseDelayMs ?? 250;
|
|
12
|
+
const run = async () => {
|
|
13
|
+
while (!controller.signal.aborted && !terminal) {
|
|
14
|
+
options.diagnostics?.event?.({ stream: contract.id, state: attempt === 0 ? 'connect' : 'reconnect', cursor, attempt });
|
|
15
|
+
try {
|
|
16
|
+
const sessionService = options.session ?? new ManagedSession({}, async () => ({}));
|
|
17
|
+
const session = sessionService.snapshot();
|
|
18
|
+
const body = typeof contract.body === 'function' ? contract.body() : contract.body;
|
|
19
|
+
const response = await fetcher(contract.url, {
|
|
20
|
+
method: contract.method ?? 'GET',
|
|
21
|
+
...(body === undefined ? {} : { body }),
|
|
22
|
+
credentials: 'same-origin', signal: controller.signal,
|
|
23
|
+
headers: {
|
|
24
|
+
accept: 'text/event-stream',
|
|
25
|
+
...(cursor ? { 'last-event-id': cursor } : {}),
|
|
26
|
+
...(session.csrf ? { 'x-csrf-token': session.csrf } : {}),
|
|
27
|
+
...session.headers,
|
|
28
|
+
...contract.headers,
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
if (response.status === 401 && !refreshed) {
|
|
32
|
+
await sessionService.refresh(controller.signal);
|
|
33
|
+
refreshed = true;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (response.status === 401)
|
|
37
|
+
throw new HostError('unauthenticated', 'Session expired');
|
|
38
|
+
if (response.status === 403)
|
|
39
|
+
throw new HostError('permission_denied', 'Permission denied');
|
|
40
|
+
if (!response.ok || !response.body)
|
|
41
|
+
throw new HostError(response.status >= 500 ? 'transient' : 'unknown', `Stream HTTP ${response.status}`);
|
|
42
|
+
for await (const message of readSSE(response.body, controller.signal, options.staleAfterMs ?? 45_000)) {
|
|
43
|
+
if (message.id && message.id === cursor)
|
|
44
|
+
continue;
|
|
45
|
+
const event = options.parse(message.data, message.event);
|
|
46
|
+
cursor = contract.cursor?.(event) ?? message.id ?? cursor;
|
|
47
|
+
if (contract.terminal(event)) {
|
|
48
|
+
if (terminal)
|
|
49
|
+
continue;
|
|
50
|
+
terminal = true;
|
|
51
|
+
options.diagnostics?.event?.({ stream: contract.id, state: 'terminal', cursor });
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
options.diagnostics?.event?.({ stream: contract.id, state: 'event', cursor });
|
|
55
|
+
}
|
|
56
|
+
onEvent(event);
|
|
57
|
+
for (const invalidation of contract.invalidates?.(event) ?? []) {
|
|
58
|
+
options.cache?.invalidate(invalidation.namespace, invalidation.methods);
|
|
59
|
+
}
|
|
60
|
+
if (terminal)
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
if (!terminal)
|
|
64
|
+
throw new HostError('transient', 'Stream ended before a terminal event');
|
|
65
|
+
}
|
|
66
|
+
catch (cause) {
|
|
67
|
+
if (controller.signal.aborted)
|
|
68
|
+
return;
|
|
69
|
+
const error = asHostError(cause);
|
|
70
|
+
if (!error.retryable || attempt >= maxReconnects) {
|
|
71
|
+
dispatchHostError(error, options.errors);
|
|
72
|
+
options.diagnostics?.event?.({ stream: contract.id, state: 'error', cursor, error });
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
attempt += 1;
|
|
76
|
+
const jitter = 0.75 + (options.random?.() ?? Math.random()) * 0.5;
|
|
77
|
+
await abortableDelay(Math.min(8_000, baseDelay * 2 ** (attempt - 1)) * jitter, controller.signal);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
void run();
|
|
82
|
+
return { close: () => controller.abort(), get closed() { return controller.signal.aborted; } };
|
|
83
|
+
}
|
|
84
|
+
async function* readSSE(stream, signal, staleAfterMs) {
|
|
85
|
+
const reader = stream.getReader();
|
|
86
|
+
const decoder = new TextDecoder();
|
|
87
|
+
let buffer = '';
|
|
88
|
+
try {
|
|
89
|
+
for (;;) {
|
|
90
|
+
const result = await readWithTimeout(reader, staleAfterMs, signal);
|
|
91
|
+
if (result.done)
|
|
92
|
+
break;
|
|
93
|
+
buffer = (buffer + decoder.decode(result.value, { stream: true })).replaceAll('\r\n', '\n');
|
|
94
|
+
let boundary = buffer.indexOf('\n\n');
|
|
95
|
+
while (boundary >= 0) {
|
|
96
|
+
const block = buffer.slice(0, boundary);
|
|
97
|
+
buffer = buffer.slice(boundary + 2);
|
|
98
|
+
const message = parseSSEBlock(block);
|
|
99
|
+
if (message)
|
|
100
|
+
yield message;
|
|
101
|
+
boundary = buffer.indexOf('\n\n');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
reader.releaseLock();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function readWithTimeout(reader, staleAfterMs, signal) {
|
|
110
|
+
return new Promise((resolve, reject) => {
|
|
111
|
+
const timer = setTimeout(() => reject(new HostError('transient', 'Stream heartbeat timed out')), staleAfterMs);
|
|
112
|
+
const abort = () => { clearTimeout(timer); reject(signal.reason); };
|
|
113
|
+
signal.addEventListener('abort', abort, { once: true });
|
|
114
|
+
void reader.read().then((result) => { clearTimeout(timer); signal.removeEventListener('abort', abort); resolve(result); }, (error) => { clearTimeout(timer); signal.removeEventListener('abort', abort); reject(error); });
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
function parseSSEBlock(block) {
|
|
118
|
+
let id;
|
|
119
|
+
let event = 'message';
|
|
120
|
+
const data = [];
|
|
121
|
+
for (const line of block.replaceAll('\r', '').split('\n')) {
|
|
122
|
+
if (line.startsWith(':'))
|
|
123
|
+
continue;
|
|
124
|
+
const split = line.indexOf(':');
|
|
125
|
+
const field = split < 0 ? line : line.slice(0, split);
|
|
126
|
+
const value = split < 0 ? '' : line.slice(split + 1).replace(/^ /, '');
|
|
127
|
+
if (field === 'id')
|
|
128
|
+
id = value;
|
|
129
|
+
if (field === 'event')
|
|
130
|
+
event = value;
|
|
131
|
+
if (field === 'data')
|
|
132
|
+
data.push(value);
|
|
133
|
+
}
|
|
134
|
+
return data.length > 0 ? { ...(id === undefined ? {} : { id }), event, data: data.join('\n') } : undefined;
|
|
135
|
+
}
|
|
136
|
+
function abortableDelay(ms, signal) {
|
|
137
|
+
return new Promise((resolve, reject) => {
|
|
138
|
+
const timer = setTimeout(resolve, ms);
|
|
139
|
+
signal.addEventListener('abort', () => { clearTimeout(timer); reject(signal.reason); }, { once: true });
|
|
140
|
+
});
|
|
141
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { RPCTransport } from './rpc';
|
|
2
|
+
export interface SessionState {
|
|
3
|
+
csrf?: string;
|
|
4
|
+
headers?: Readonly<Record<string, string>>;
|
|
5
|
+
}
|
|
6
|
+
export interface SessionService {
|
|
7
|
+
snapshot(): SessionState;
|
|
8
|
+
refresh(signal: AbortSignal): Promise<SessionState>;
|
|
9
|
+
}
|
|
10
|
+
export declare class ManagedSession implements SessionService {
|
|
11
|
+
private readonly renew;
|
|
12
|
+
private state;
|
|
13
|
+
private refreshing;
|
|
14
|
+
constructor(initial: SessionState, renew: (signal: AbortSignal) => Promise<SessionState>);
|
|
15
|
+
snapshot(): SessionState;
|
|
16
|
+
refresh(signal: AbortSignal): Promise<SessionState>;
|
|
17
|
+
}
|
|
18
|
+
export declare class FetchRPCTransport implements RPCTransport {
|
|
19
|
+
readonly endpoint: string;
|
|
20
|
+
readonly session: SessionService;
|
|
21
|
+
private requestID;
|
|
22
|
+
constructor(endpoint: string, session?: SessionService);
|
|
23
|
+
call<TRequest, TResponse>(method: string, request: TRequest, signal: AbortSignal): Promise<TResponse>;
|
|
24
|
+
private request;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAEzC,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAC3C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,IAAI,YAAY,CAAA;IACxB,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;CACpD;AAED,qBAAa,cAAe,YAAW,cAAc;IAGhB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFzD,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,UAAU,CAAmC;gBACzC,OAAO,EAAE,YAAY,EAAmB,KAAK,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC;IACzG,QAAQ,IAAI,YAAY;IACxB,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAIpD;AAED,qBAAa,iBAAkB,YAAW,YAAY;IAExC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAAE,QAAQ,CAAC,OAAO,EAAE,cAAc;IADvE,OAAO,CAAC,SAAS,CAAI;gBACA,QAAQ,EAAE,MAAM,EAAW,OAAO,GAAE,cAAyD;IAE5G,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;YAI7F,OAAO;CAsBtB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { asHostError, HostError } from './errors';
|
|
2
|
+
export class ManagedSession {
|
|
3
|
+
renew;
|
|
4
|
+
state;
|
|
5
|
+
refreshing;
|
|
6
|
+
constructor(initial, renew) {
|
|
7
|
+
this.renew = renew;
|
|
8
|
+
this.state = initial;
|
|
9
|
+
}
|
|
10
|
+
snapshot() { return { ...this.state, headers: { ...this.state.headers } }; }
|
|
11
|
+
refresh(signal) {
|
|
12
|
+
this.refreshing ??= this.renew(signal).then((state) => { this.state = state; return this.snapshot(); }).finally(() => { this.refreshing = undefined; });
|
|
13
|
+
return this.refreshing;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export class FetchRPCTransport {
|
|
17
|
+
endpoint;
|
|
18
|
+
session;
|
|
19
|
+
requestID = 0;
|
|
20
|
+
constructor(endpoint, session = new ManagedSession({}, async () => ({}))) {
|
|
21
|
+
this.endpoint = endpoint;
|
|
22
|
+
this.session = session;
|
|
23
|
+
}
|
|
24
|
+
async call(method, request, signal) {
|
|
25
|
+
return this.request(method, request, signal, true);
|
|
26
|
+
}
|
|
27
|
+
async request(method, request, signal, mayRefresh) {
|
|
28
|
+
const session = this.session.snapshot();
|
|
29
|
+
const response = await fetch(this.endpoint, {
|
|
30
|
+
method: 'POST', credentials: 'same-origin', signal,
|
|
31
|
+
headers: {
|
|
32
|
+
'content-type': 'application/json',
|
|
33
|
+
...(session.csrf ? { 'x-csrf-token': session.csrf } : {}),
|
|
34
|
+
...session.headers,
|
|
35
|
+
},
|
|
36
|
+
body: JSON.stringify({ jsonrpc: '2.0', id: ++this.requestID, method, params: request }),
|
|
37
|
+
});
|
|
38
|
+
if (response.status === 401 && mayRefresh) {
|
|
39
|
+
await this.session.refresh(signal);
|
|
40
|
+
return this.request(method, request, signal, false);
|
|
41
|
+
}
|
|
42
|
+
if (response.status === 401)
|
|
43
|
+
throw new HostError('unauthenticated', 'Session expired');
|
|
44
|
+
if (response.status === 403)
|
|
45
|
+
throw new HostError('permission_denied', 'Permission denied');
|
|
46
|
+
if (!response.ok)
|
|
47
|
+
throw new HostError(response.status >= 500 ? 'transient' : 'unknown', `RPC HTTP ${response.status}`);
|
|
48
|
+
const payload = await response.json();
|
|
49
|
+
if (payload.error)
|
|
50
|
+
throw asHostError(payload.error);
|
|
51
|
+
return payload.result;
|
|
52
|
+
}
|
|
53
|
+
}
|