@honua/app-platform 0.0.20-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (840) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +11 -0
  3. package/app/index.d.ts +164 -0
  4. package/app/index.d.ts.map +1 -0
  5. package/app/index.js +424 -0
  6. package/app-controller/controller.d.ts +425 -0
  7. package/app-controller/controller.d.ts.map +1 -0
  8. package/app-controller/controller.js +1173 -0
  9. package/app-controller/index.d.ts +14 -0
  10. package/app-controller/index.d.ts.map +1 -0
  11. package/app-controller/index.js +12 -0
  12. package/app-workspace/index.d.ts +421 -0
  13. package/app-workspace/index.d.ts.map +1 -0
  14. package/app-workspace/index.js +722 -0
  15. package/collaboration/client.d.ts +40 -0
  16. package/collaboration/client.d.ts.map +1 -0
  17. package/collaboration/client.js +299 -0
  18. package/collaboration/errors.d.ts +15 -0
  19. package/collaboration/errors.d.ts.map +1 -0
  20. package/collaboration/errors.js +17 -0
  21. package/collaboration/fixture.d.ts +41 -0
  22. package/collaboration/fixture.d.ts.map +1 -0
  23. package/collaboration/fixture.js +362 -0
  24. package/collaboration/index.d.ts +18 -0
  25. package/collaboration/index.d.ts.map +1 -0
  26. package/collaboration/index.js +14 -0
  27. package/collaboration/types.d.ts +240 -0
  28. package/collaboration/types.d.ts.map +1 -0
  29. package/collaboration/types.js +1 -0
  30. package/contract/analytics-sources.d.ts +149 -0
  31. package/contract/analytics-sources.d.ts.map +1 -0
  32. package/contract/analytics-sources.js +235 -0
  33. package/contract/edit-session.d.ts +203 -0
  34. package/contract/edit-session.d.ts.map +1 -0
  35. package/contract/edit-session.js +760 -0
  36. package/contract/edit-sketch.d.ts +91 -0
  37. package/contract/edit-sketch.d.ts.map +1 -0
  38. package/contract/edit-sketch.js +281 -0
  39. package/contract/index.d.ts +63 -0
  40. package/contract/index.d.ts.map +1 -0
  41. package/contract/index.js +52 -0
  42. package/contract/jobs.d.ts +149 -0
  43. package/contract/jobs.d.ts.map +1 -0
  44. package/contract/jobs.js +40 -0
  45. package/contract/pmtiles.d.ts +162 -0
  46. package/contract/pmtiles.d.ts.map +1 -0
  47. package/contract/pmtiles.js +155 -0
  48. package/contract/source.d.ts +447 -0
  49. package/contract/source.d.ts.map +1 -0
  50. package/contract/source.js +3909 -0
  51. package/contract/spatial-aggregation.d.ts +336 -0
  52. package/contract/spatial-aggregation.d.ts.map +1 -0
  53. package/contract/spatial-aggregation.js +298 -0
  54. package/contract/temporal.d.ts +455 -0
  55. package/contract/temporal.d.ts.map +1 -0
  56. package/contract/temporal.js +146 -0
  57. package/contract/tiles.d.ts +370 -0
  58. package/contract/tiles.d.ts.map +1 -0
  59. package/contract/tiles.js +519 -0
  60. package/contract/types.d.ts +694 -0
  61. package/contract/types.d.ts.map +1 -0
  62. package/contract/types.js +183 -0
  63. package/contract/widget-source.d.ts +205 -0
  64. package/contract/widget-source.d.ts.map +1 -0
  65. package/contract/widget-source.js +1473 -0
  66. package/control-plane/client.d.ts +95 -0
  67. package/control-plane/client.d.ts.map +1 -0
  68. package/control-plane/client.js +374 -0
  69. package/control-plane/index.d.ts +18 -0
  70. package/control-plane/index.d.ts.map +1 -0
  71. package/control-plane/index.js +14 -0
  72. package/control-plane/types.d.ts +233 -0
  73. package/control-plane/types.d.ts.map +1 -0
  74. package/control-plane/types.js +7 -0
  75. package/controls/basemap-style-binding.d.ts +54 -0
  76. package/controls/basemap-style-binding.d.ts.map +1 -0
  77. package/controls/basemap-style-binding.js +199 -0
  78. package/controls/basemap-switcher.d.ts +95 -0
  79. package/controls/basemap-switcher.d.ts.map +1 -0
  80. package/controls/basemap-switcher.js +379 -0
  81. package/controls/element-utils.d.ts +48 -0
  82. package/controls/element-utils.d.ts.map +1 -0
  83. package/controls/element-utils.js +78 -0
  84. package/controls/index.d.ts +33 -0
  85. package/controls/index.d.ts.map +1 -0
  86. package/controls/index.js +30 -0
  87. package/controls/layer-list.d.ts +98 -0
  88. package/controls/layer-list.d.ts.map +1 -0
  89. package/controls/layer-list.js +375 -0
  90. package/controls/legend-derive.d.ts +53 -0
  91. package/controls/legend-derive.d.ts.map +1 -0
  92. package/controls/legend-derive.js +196 -0
  93. package/controls/legend.d.ts +104 -0
  94. package/controls/legend.d.ts.map +1 -0
  95. package/controls/legend.js +381 -0
  96. package/controls/swipe-control.d.ts +80 -0
  97. package/controls/swipe-control.d.ts.map +1 -0
  98. package/controls/swipe-control.js +368 -0
  99. package/controls/types.d.ts +227 -0
  100. package/controls/types.d.ts.map +1 -0
  101. package/controls/types.js +11 -0
  102. package/core/auth/client-credentials-provider.d.ts +51 -0
  103. package/core/auth/client-credentials-provider.d.ts.map +1 -0
  104. package/core/auth/client-credentials-provider.js +115 -0
  105. package/core/auth/credential-store.d.ts +52 -0
  106. package/core/auth/credential-store.d.ts.map +1 -0
  107. package/core/auth/credential-store.js +82 -0
  108. package/core/auth/index.d.ts +23 -0
  109. package/core/auth/index.d.ts.map +1 -0
  110. package/core/auth/index.js +20 -0
  111. package/core/auth/oauth2-provider.d.ts +114 -0
  112. package/core/auth/oauth2-provider.d.ts.map +1 -0
  113. package/core/auth/oauth2-provider.js +408 -0
  114. package/core/auth/pkce.d.ts +25 -0
  115. package/core/auth/pkce.d.ts.map +1 -0
  116. package/core/auth/pkce.js +46 -0
  117. package/core/auth/static-providers.d.ts +20 -0
  118. package/core/auth/static-providers.d.ts.map +1 -0
  119. package/core/auth/static-providers.js +26 -0
  120. package/core/auth/token-endpoint.d.ts +40 -0
  121. package/core/auth/token-endpoint.d.ts.map +1 -0
  122. package/core/auth/token-endpoint.js +133 -0
  123. package/core/auth/types.d.ts +144 -0
  124. package/core/auth/types.d.ts.map +1 -0
  125. package/core/auth/types.js +8 -0
  126. package/core/batch.d.ts +37 -0
  127. package/core/batch.d.ts.map +1 -0
  128. package/core/batch.js +79 -0
  129. package/core/cache-state.d.ts +79 -0
  130. package/core/cache-state.d.ts.map +1 -0
  131. package/core/cache-state.js +87 -0
  132. package/core/client.d.ts +607 -0
  133. package/core/client.d.ts.map +1 -0
  134. package/core/client.js +1716 -0
  135. package/core/compatibility.d.ts +18 -0
  136. package/core/compatibility.d.ts.map +1 -0
  137. package/core/compatibility.js +245 -0
  138. package/core/errors.d.ts +139 -0
  139. package/core/errors.d.ts.map +1 -0
  140. package/core/errors.js +176 -0
  141. package/core/esri-geojson.d.ts +66 -0
  142. package/core/esri-geojson.d.ts.map +1 -0
  143. package/core/esri-geojson.js +363 -0
  144. package/core/geoparquet-sql.d.ts +162 -0
  145. package/core/geoparquet-sql.d.ts.map +1 -0
  146. package/core/geoparquet-sql.js +333 -0
  147. package/core/geoservices.d.ts +34 -0
  148. package/core/geoservices.d.ts.map +1 -0
  149. package/core/geoservices.js +434 -0
  150. package/core/grpc-adapter.d.ts +23 -0
  151. package/core/grpc-adapter.d.ts.map +1 -0
  152. package/core/grpc-adapter.js +688 -0
  153. package/core/odata.d.ts +347 -0
  154. package/core/odata.d.ts.map +1 -0
  155. package/core/odata.js +913 -0
  156. package/core/ogc-conformance.d.ts +35 -0
  157. package/core/ogc-conformance.d.ts.map +1 -0
  158. package/core/ogc-conformance.js +134 -0
  159. package/core/ogc-endpoint-layout.d.ts +70 -0
  160. package/core/ogc-endpoint-layout.d.ts.map +1 -0
  161. package/core/ogc-endpoint-layout.js +173 -0
  162. package/core/ogc-features.d.ts +23 -0
  163. package/core/ogc-features.d.ts.map +1 -0
  164. package/core/ogc-features.js +129 -0
  165. package/core/ogc-maps.d.ts +49 -0
  166. package/core/ogc-maps.d.ts.map +1 -0
  167. package/core/ogc-maps.js +126 -0
  168. package/core/ogc-processes.d.ts +118 -0
  169. package/core/ogc-processes.d.ts.map +1 -0
  170. package/core/ogc-processes.js +423 -0
  171. package/core/ogc-records.d.ts +75 -0
  172. package/core/ogc-records.d.ts.map +1 -0
  173. package/core/ogc-records.js +251 -0
  174. package/core/ogc-tiles.d.ts +125 -0
  175. package/core/ogc-tiles.d.ts.map +1 -0
  176. package/core/ogc-tiles.js +183 -0
  177. package/core/path-utils.d.ts +69 -0
  178. package/core/path-utils.d.ts.map +1 -0
  179. package/core/path-utils.js +123 -0
  180. package/core/pbf-decoder.d.ts +39 -0
  181. package/core/pbf-decoder.d.ts.map +1 -0
  182. package/core/pbf-decoder.js +702 -0
  183. package/core/process-runner.d.ts +104 -0
  184. package/core/process-runner.d.ts.map +1 -0
  185. package/core/process-runner.js +315 -0
  186. package/core/protocol-transport.d.ts +76 -0
  187. package/core/protocol-transport.d.ts.map +1 -0
  188. package/core/protocol-transport.js +15 -0
  189. package/core/query-builder.d.ts +261 -0
  190. package/core/query-builder.d.ts.map +1 -0
  191. package/core/query-builder.js +538 -0
  192. package/core/request-pipeline.d.ts +88 -0
  193. package/core/request-pipeline.d.ts.map +1 -0
  194. package/core/request-pipeline.js +273 -0
  195. package/core/spatial-filter.d.ts +93 -0
  196. package/core/spatial-filter.d.ts.map +1 -0
  197. package/core/spatial-filter.js +153 -0
  198. package/core/stac-static.d.ts +51 -0
  199. package/core/stac-static.d.ts.map +1 -0
  200. package/core/stac-static.js +195 -0
  201. package/core/stac.d.ts +67 -0
  202. package/core/stac.d.ts.map +1 -0
  203. package/core/stac.js +259 -0
  204. package/core/surfaces.d.ts +540 -0
  205. package/core/surfaces.d.ts.map +1 -0
  206. package/core/surfaces.js +1964 -0
  207. package/core/terrain-elevation.d.ts +114 -0
  208. package/core/terrain-elevation.d.ts.map +1 -0
  209. package/core/terrain-elevation.js +150 -0
  210. package/core/types.d.ts +1404 -0
  211. package/core/types.d.ts.map +1 -0
  212. package/core/types.js +13 -0
  213. package/core/wfs-capabilities.d.ts +153 -0
  214. package/core/wfs-capabilities.d.ts.map +1 -0
  215. package/core/wfs-capabilities.js +490 -0
  216. package/core/wfs-filter.d.ts +118 -0
  217. package/core/wfs-filter.d.ts.map +1 -0
  218. package/core/wfs-filter.js +634 -0
  219. package/core/wfs.d.ts +232 -0
  220. package/core/wfs.d.ts.map +1 -0
  221. package/core/wfs.js +426 -0
  222. package/core/wire-shared.d.ts +32 -0
  223. package/core/wire-shared.d.ts.map +1 -0
  224. package/core/wire-shared.js +76 -0
  225. package/core/wms-axis.d.ts +36 -0
  226. package/core/wms-axis.d.ts.map +1 -0
  227. package/core/wms-axis.js +73 -0
  228. package/core/wms-capabilities.d.ts +110 -0
  229. package/core/wms-capabilities.d.ts.map +1 -0
  230. package/core/wms-capabilities.js +559 -0
  231. package/core/wms-types.d.ts +128 -0
  232. package/core/wms-types.d.ts.map +1 -0
  233. package/core/wms-types.js +32 -0
  234. package/core/wms.d.ts +144 -0
  235. package/core/wms.d.ts.map +1 -0
  236. package/core/wms.js +338 -0
  237. package/core/wmts-capabilities.d.ts +82 -0
  238. package/core/wmts-capabilities.d.ts.map +1 -0
  239. package/core/wmts-capabilities.js +402 -0
  240. package/core/wmts.d.ts +103 -0
  241. package/core/wmts.d.ts.map +1 -0
  242. package/core/wmts.js +332 -0
  243. package/core/xml-text.d.ts +20 -0
  244. package/core/xml-text.d.ts.map +1 -0
  245. package/core/xml-text.js +85 -0
  246. package/esri-compat/basemap-gallery.d.ts +38 -0
  247. package/esri-compat/basemap-gallery.d.ts.map +1 -0
  248. package/esri-compat/basemap-gallery.js +159 -0
  249. package/esri-compat/basemap-layer-list.d.ts +35 -0
  250. package/esri-compat/basemap-layer-list.d.ts.map +1 -0
  251. package/esri-compat/basemap-layer-list.js +139 -0
  252. package/esri-compat/basemap.d.ts +32 -0
  253. package/esri-compat/basemap.d.ts.map +1 -0
  254. package/esri-compat/basemap.js +84 -0
  255. package/esri-compat/bookmarks.d.ts +36 -0
  256. package/esri-compat/bookmarks.d.ts.map +1 -0
  257. package/esri-compat/bookmarks.js +108 -0
  258. package/esri-compat/class-breaks-renderer.d.ts +50 -0
  259. package/esri-compat/class-breaks-renderer.d.ts.map +1 -0
  260. package/esri-compat/class-breaks-renderer.js +164 -0
  261. package/esri-compat/color.d.ts +22 -0
  262. package/esri-compat/color.d.ts.map +1 -0
  263. package/esri-compat/color.js +106 -0
  264. package/esri-compat/controls.d.ts +174 -0
  265. package/esri-compat/controls.d.ts.map +1 -0
  266. package/esri-compat/controls.js +479 -0
  267. package/esri-compat/coordinate-conversion.d.ts +41 -0
  268. package/esri-compat/coordinate-conversion.d.ts.map +1 -0
  269. package/esri-compat/coordinate-conversion.js +125 -0
  270. package/esri-compat/directions.d.ts +45 -0
  271. package/esri-compat/directions.d.ts.map +1 -0
  272. package/esri-compat/directions.js +123 -0
  273. package/esri-compat/editor.d.ts +47 -0
  274. package/esri-compat/editor.d.ts.map +1 -0
  275. package/esri-compat/editor.js +170 -0
  276. package/esri-compat/esri-config.d.ts +16 -0
  277. package/esri-compat/esri-config.d.ts.map +1 -0
  278. package/esri-compat/esri-config.js +23 -0
  279. package/esri-compat/esri-request.d.ts +17 -0
  280. package/esri-compat/esri-request.d.ts.map +1 -0
  281. package/esri-compat/esri-request.js +127 -0
  282. package/esri-compat/event-bus.d.ts +106 -0
  283. package/esri-compat/event-bus.d.ts.map +1 -0
  284. package/esri-compat/event-bus.js +90 -0
  285. package/esri-compat/expand.d.ts +36 -0
  286. package/esri-compat/expand.d.ts.map +1 -0
  287. package/esri-compat/expand.js +97 -0
  288. package/esri-compat/extent.d.ts +43 -0
  289. package/esri-compat/extent.d.ts.map +1 -0
  290. package/esri-compat/extent.js +140 -0
  291. package/esri-compat/feature-filter.d.ts +55 -0
  292. package/esri-compat/feature-filter.d.ts.map +1 -0
  293. package/esri-compat/feature-filter.js +109 -0
  294. package/esri-compat/feature-form.d.ts +64 -0
  295. package/esri-compat/feature-form.d.ts.map +1 -0
  296. package/esri-compat/feature-form.js +137 -0
  297. package/esri-compat/feature-layer.d.ts +173 -0
  298. package/esri-compat/feature-layer.d.ts.map +1 -0
  299. package/esri-compat/feature-layer.js +661 -0
  300. package/esri-compat/feature-set.d.ts +32 -0
  301. package/esri-compat/feature-set.d.ts.map +1 -0
  302. package/esri-compat/feature-set.js +80 -0
  303. package/esri-compat/feature-table.d.ts +141 -0
  304. package/esri-compat/feature-table.d.ts.map +1 -0
  305. package/esri-compat/feature-table.js +500 -0
  306. package/esri-compat/feature-templates.d.ts +41 -0
  307. package/esri-compat/feature-templates.d.ts.map +1 -0
  308. package/esri-compat/feature-templates.js +97 -0
  309. package/esri-compat/feature.d.ts +33 -0
  310. package/esri-compat/feature.d.ts.map +1 -0
  311. package/esri-compat/feature.js +83 -0
  312. package/esri-compat/geojson-layer.d.ts +86 -0
  313. package/esri-compat/geojson-layer.d.ts.map +1 -0
  314. package/esri-compat/geojson-layer.js +191 -0
  315. package/esri-compat/geometry-engine.d.ts +107 -0
  316. package/esri-compat/geometry-engine.d.ts.map +1 -0
  317. package/esri-compat/geometry-engine.js +266 -0
  318. package/esri-compat/graphic.d.ts +46 -0
  319. package/esri-compat/graphic.d.ts.map +1 -0
  320. package/esri-compat/graphic.js +103 -0
  321. package/esri-compat/graphics-layer.d.ts +49 -0
  322. package/esri-compat/graphics-layer.d.ts.map +1 -0
  323. package/esri-compat/graphics-layer.js +185 -0
  324. package/esri-compat/group-layer.d.ts +48 -0
  325. package/esri-compat/group-layer.d.ts.map +1 -0
  326. package/esri-compat/group-layer.js +212 -0
  327. package/esri-compat/identify.d.ts +71 -0
  328. package/esri-compat/identify.d.ts.map +1 -0
  329. package/esri-compat/identify.js +299 -0
  330. package/esri-compat/identity-manager.d.ts +74 -0
  331. package/esri-compat/identity-manager.d.ts.map +1 -0
  332. package/esri-compat/identity-manager.js +245 -0
  333. package/esri-compat/imagery-layer.d.ts +78 -0
  334. package/esri-compat/imagery-layer.d.ts.map +1 -0
  335. package/esri-compat/imagery-layer.js +167 -0
  336. package/esri-compat/label-class.d.ts +31 -0
  337. package/esri-compat/label-class.d.ts.map +1 -0
  338. package/esri-compat/label-class.js +102 -0
  339. package/esri-compat/layer-list.d.ts +77 -0
  340. package/esri-compat/layer-list.d.ts.map +1 -0
  341. package/esri-compat/layer-list.js +342 -0
  342. package/esri-compat/legend.d.ts +53 -0
  343. package/esri-compat/legend.d.ts.map +1 -0
  344. package/esri-compat/legend.js +254 -0
  345. package/esri-compat/map-image-layer.d.ts +162 -0
  346. package/esri-compat/map-image-layer.d.ts.map +1 -0
  347. package/esri-compat/map-image-layer.js +709 -0
  348. package/esri-compat/map-view.d.ts +323 -0
  349. package/esri-compat/map-view.d.ts.map +1 -0
  350. package/esri-compat/map-view.js +1175 -0
  351. package/esri-compat/map.d.ts +47 -0
  352. package/esri-compat/map.d.ts.map +1 -0
  353. package/esri-compat/map.js +209 -0
  354. package/esri-compat/measurement-2d.d.ts +61 -0
  355. package/esri-compat/measurement-2d.d.ts.map +1 -0
  356. package/esri-compat/measurement-2d.js +184 -0
  357. package/esri-compat/measurement.d.ts +45 -0
  358. package/esri-compat/measurement.d.ts.map +1 -0
  359. package/esri-compat/measurement.js +193 -0
  360. package/esri-compat/oauth-info.d.ts +50 -0
  361. package/esri-compat/oauth-info.d.ts.map +1 -0
  362. package/esri-compat/oauth-info.js +142 -0
  363. package/esri-compat/picture-marker-symbol.d.ts +35 -0
  364. package/esri-compat/picture-marker-symbol.d.ts.map +1 -0
  365. package/esri-compat/picture-marker-symbol.js +126 -0
  366. package/esri-compat/point.d.ts +31 -0
  367. package/esri-compat/point.d.ts.map +1 -0
  368. package/esri-compat/point.js +102 -0
  369. package/esri-compat/polygon.d.ts +31 -0
  370. package/esri-compat/polygon.d.ts.map +1 -0
  371. package/esri-compat/polygon.js +107 -0
  372. package/esri-compat/polyline.d.ts +31 -0
  373. package/esri-compat/polyline.d.ts.map +1 -0
  374. package/esri-compat/polyline.js +107 -0
  375. package/esri-compat/popup-template.d.ts +55 -0
  376. package/esri-compat/popup-template.d.ts.map +1 -0
  377. package/esri-compat/popup-template.js +128 -0
  378. package/esri-compat/popup.d.ts +54 -0
  379. package/esri-compat/popup.d.ts.map +1 -0
  380. package/esri-compat/popup.js +312 -0
  381. package/esri-compat/print.d.ts +47 -0
  382. package/esri-compat/print.d.ts.map +1 -0
  383. package/esri-compat/print.js +105 -0
  384. package/esri-compat/query.d.ts +58 -0
  385. package/esri-compat/query.d.ts.map +1 -0
  386. package/esri-compat/query.js +128 -0
  387. package/esri-compat/reactive-utils.d.ts +24 -0
  388. package/esri-compat/reactive-utils.d.ts.map +1 -0
  389. package/esri-compat/reactive-utils.js +193 -0
  390. package/esri-compat/request.d.ts +41 -0
  391. package/esri-compat/request.d.ts.map +1 -0
  392. package/esri-compat/request.js +253 -0
  393. package/esri-compat/route-layer.d.ts +59 -0
  394. package/esri-compat/route-layer.d.ts.map +1 -0
  395. package/esri-compat/route-layer.js +223 -0
  396. package/esri-compat/route-task.d.ts +88 -0
  397. package/esri-compat/route-task.d.ts.map +1 -0
  398. package/esri-compat/route-task.js +225 -0
  399. package/esri-compat/scene-view.d.ts +41 -0
  400. package/esri-compat/scene-view.d.ts.map +1 -0
  401. package/esri-compat/scene-view.js +68 -0
  402. package/esri-compat/search.d.ts +112 -0
  403. package/esri-compat/search.d.ts.map +1 -0
  404. package/esri-compat/search.js +820 -0
  405. package/esri-compat/simple-fill-symbol.d.ts +27 -0
  406. package/esri-compat/simple-fill-symbol.d.ts.map +1 -0
  407. package/esri-compat/simple-fill-symbol.js +85 -0
  408. package/esri-compat/simple-line-symbol.d.ts +27 -0
  409. package/esri-compat/simple-line-symbol.d.ts.map +1 -0
  410. package/esri-compat/simple-line-symbol.js +85 -0
  411. package/esri-compat/simple-marker-symbol.d.ts +29 -0
  412. package/esri-compat/simple-marker-symbol.d.ts.map +1 -0
  413. package/esri-compat/simple-marker-symbol.js +92 -0
  414. package/esri-compat/simple-renderer.d.ts +29 -0
  415. package/esri-compat/simple-renderer.d.ts.map +1 -0
  416. package/esri-compat/simple-renderer.js +92 -0
  417. package/esri-compat/sketch.d.ts +64 -0
  418. package/esri-compat/sketch.d.ts.map +1 -0
  419. package/esri-compat/sketch.js +227 -0
  420. package/esri-compat/spatial-reference.d.ts +31 -0
  421. package/esri-compat/spatial-reference.d.ts.map +1 -0
  422. package/esri-compat/spatial-reference.js +102 -0
  423. package/esri-compat/swipe.d.ts +34 -0
  424. package/esri-compat/swipe.d.ts.map +1 -0
  425. package/esri-compat/swipe.js +93 -0
  426. package/esri-compat/table-list.d.ts +36 -0
  427. package/esri-compat/table-list.d.ts.map +1 -0
  428. package/esri-compat/table-list.js +126 -0
  429. package/esri-compat/text-symbol.d.ts +37 -0
  430. package/esri-compat/text-symbol.d.ts.map +1 -0
  431. package/esri-compat/text-symbol.js +123 -0
  432. package/esri-compat/tile-layer.d.ts +52 -0
  433. package/esri-compat/tile-layer.d.ts.map +1 -0
  434. package/esri-compat/tile-layer.js +168 -0
  435. package/esri-compat/time-slider.d.ts +70 -0
  436. package/esri-compat/time-slider.d.ts.map +1 -0
  437. package/esri-compat/time-slider.js +208 -0
  438. package/esri-compat/track.d.ts +51 -0
  439. package/esri-compat/track.d.ts.map +1 -0
  440. package/esri-compat/track.js +174 -0
  441. package/esri-compat/unique-value-renderer.d.ts +41 -0
  442. package/esri-compat/unique-value-renderer.d.ts.map +1 -0
  443. package/esri-compat/unique-value-renderer.js +127 -0
  444. package/esri-compat/url.d.ts +13 -0
  445. package/esri-compat/url.d.ts.map +1 -0
  446. package/esri-compat/url.js +68 -0
  447. package/esri-compat/vector-tile-layer.d.ts +47 -0
  448. package/esri-compat/vector-tile-layer.d.ts.map +1 -0
  449. package/esri-compat/vector-tile-layer.js +130 -0
  450. package/esri-compat/web-map.d.ts +14 -0
  451. package/esri-compat/web-map.d.ts.map +1 -0
  452. package/esri-compat/web-map.js +24 -0
  453. package/esri-compat/wfs-layer.d.ts +64 -0
  454. package/esri-compat/wfs-layer.d.ts.map +1 -0
  455. package/esri-compat/wfs-layer.js +145 -0
  456. package/esri-compat/wms-layer.d.ts +76 -0
  457. package/esri-compat/wms-layer.d.ts.map +1 -0
  458. package/esri-compat/wms-layer.js +157 -0
  459. package/exploration/context.d.ts +25 -0
  460. package/exploration/context.d.ts.map +1 -0
  461. package/exploration/context.js +396 -0
  462. package/exploration/index.d.ts +27 -0
  463. package/exploration/index.d.ts.map +1 -0
  464. package/exploration/index.js +24 -0
  465. package/exploration/presets.d.ts +27 -0
  466. package/exploration/presets.d.ts.map +1 -0
  467. package/exploration/presets.js +114 -0
  468. package/exploration/reducer.d.ts +23 -0
  469. package/exploration/reducer.d.ts.map +1 -0
  470. package/exploration/reducer.js +332 -0
  471. package/exploration/selection.d.ts +25 -0
  472. package/exploration/selection.d.ts.map +1 -0
  473. package/exploration/selection.js +34 -0
  474. package/exploration/selectors.d.ts +56 -0
  475. package/exploration/selectors.d.ts.map +1 -0
  476. package/exploration/selectors.js +110 -0
  477. package/exploration/types.d.ts +294 -0
  478. package/exploration/types.d.ts.map +1 -0
  479. package/exploration/types.js +33 -0
  480. package/expr/expression.d.ts +457 -0
  481. package/expr/expression.d.ts.map +1 -0
  482. package/expr/expression.js +663 -0
  483. package/expr/index.d.ts +32 -0
  484. package/expr/index.d.ts.map +1 -0
  485. package/expr/index.js +30 -0
  486. package/filter-registry/index.d.ts +145 -0
  487. package/filter-registry/index.d.ts.map +1 -0
  488. package/filter-registry/index.js +531 -0
  489. package/gen/honua/v1/feature_service_pb.d.ts +918 -0
  490. package/gen/honua/v1/feature_service_pb.d.ts.map +1 -0
  491. package/gen/honua/v1/feature_service_pb.js +375 -0
  492. package/generated-app/errors.d.ts +41 -0
  493. package/generated-app/errors.d.ts.map +1 -0
  494. package/generated-app/errors.js +41 -0
  495. package/generated-app/index.d.ts +17 -0
  496. package/generated-app/index.d.ts.map +1 -0
  497. package/generated-app/index.js +12 -0
  498. package/generated-app/manifest.d.ts +183 -0
  499. package/generated-app/manifest.d.ts.map +1 -0
  500. package/generated-app/manifest.js +14 -0
  501. package/generated-app/projection.d.ts +44 -0
  502. package/generated-app/projection.d.ts.map +1 -0
  503. package/generated-app/projection.js +234 -0
  504. package/generated-app/runtime.d.ts +215 -0
  505. package/generated-app/runtime.d.ts.map +1 -0
  506. package/generated-app/runtime.js +1196 -0
  507. package/geocoding/index.d.ts +106 -0
  508. package/geocoding/index.d.ts.map +1 -0
  509. package/geocoding/index.js +278 -0
  510. package/interactions/detail-model.d.ts +54 -0
  511. package/interactions/detail-model.d.ts.map +1 -0
  512. package/interactions/detail-model.js +105 -0
  513. package/interactions/exploration-bindings.d.ts +120 -0
  514. package/interactions/exploration-bindings.d.ts.map +1 -0
  515. package/interactions/exploration-bindings.js +218 -0
  516. package/interactions/feature-state.d.ts +144 -0
  517. package/interactions/feature-state.d.ts.map +1 -0
  518. package/interactions/feature-state.js +169 -0
  519. package/interactions/hit-test.d.ts +112 -0
  520. package/interactions/hit-test.d.ts.map +1 -0
  521. package/interactions/hit-test.js +291 -0
  522. package/interactions/index.d.ts +31 -0
  523. package/interactions/index.d.ts.map +1 -0
  524. package/interactions/index.js +24 -0
  525. package/interactions/share-state.d.ts +36 -0
  526. package/interactions/share-state.d.ts.map +1 -0
  527. package/interactions/share-state.js +123 -0
  528. package/map/feature-service-adapter.d.ts +138 -0
  529. package/map/feature-service-adapter.d.ts.map +1 -0
  530. package/map/feature-service-adapter.js +279 -0
  531. package/map/honua-map.d.ts +203 -0
  532. package/map/honua-map.d.ts.map +1 -0
  533. package/map/honua-map.js +347 -0
  534. package/map/index.d.ts +27 -0
  535. package/map/index.d.ts.map +1 -0
  536. package/map/index.js +22 -0
  537. package/map/maplibre-target.d.ts +103 -0
  538. package/map/maplibre-target.d.ts.map +1 -0
  539. package/map/maplibre-target.js +164 -0
  540. package/map/webmap-maplibre.d.ts +60 -0
  541. package/map/webmap-maplibre.d.ts.map +1 -0
  542. package/map/webmap-maplibre.js +212 -0
  543. package/operate/client.d.ts +94 -0
  544. package/operate/client.d.ts.map +1 -0
  545. package/operate/client.js +361 -0
  546. package/operate/index.d.ts +22 -0
  547. package/operate/index.d.ts.map +1 -0
  548. package/operate/index.js +19 -0
  549. package/operate/types.d.ts +397 -0
  550. package/operate/types.d.ts.map +1 -0
  551. package/operate/types.js +17 -0
  552. package/operator/client.d.ts +60 -0
  553. package/operator/client.d.ts.map +1 -0
  554. package/operator/client.js +20 -0
  555. package/operator/controllers/approval.d.ts +52 -0
  556. package/operator/controllers/approval.d.ts.map +1 -0
  557. package/operator/controllers/approval.js +123 -0
  558. package/operator/controllers/base.d.ts +27 -0
  559. package/operator/controllers/base.d.ts.map +1 -0
  560. package/operator/controllers/base.js +53 -0
  561. package/operator/controllers/builder-workspace.d.ts +55 -0
  562. package/operator/controllers/builder-workspace.d.ts.map +1 -0
  563. package/operator/controllers/builder-workspace.js +108 -0
  564. package/operator/controllers/chat.d.ts +61 -0
  565. package/operator/controllers/chat.d.ts.map +1 -0
  566. package/operator/controllers/chat.js +154 -0
  567. package/operator/controllers/clarification.d.ts +52 -0
  568. package/operator/controllers/clarification.d.ts.map +1 -0
  569. package/operator/controllers/clarification.js +121 -0
  570. package/operator/controllers/execution.d.ts +60 -0
  571. package/operator/controllers/execution.d.ts.map +1 -0
  572. package/operator/controllers/execution.js +286 -0
  573. package/operator/controllers/index.d.ts +23 -0
  574. package/operator/controllers/index.d.ts.map +1 -0
  575. package/operator/controllers/index.js +15 -0
  576. package/operator/controllers/map-workspace.d.ts +85 -0
  577. package/operator/controllers/map-workspace.d.ts.map +1 -0
  578. package/operator/controllers/map-workspace.js +296 -0
  579. package/operator/controllers/plan-review.d.ts +66 -0
  580. package/operator/controllers/plan-review.d.ts.map +1 -0
  581. package/operator/controllers/plan-review.js +124 -0
  582. package/operator/errors.d.ts +62 -0
  583. package/operator/errors.d.ts.map +1 -0
  584. package/operator/errors.js +75 -0
  585. package/operator/i18n/index.d.ts +10 -0
  586. package/operator/i18n/index.d.ts.map +1 -0
  587. package/operator/i18n/index.js +8 -0
  588. package/operator/i18n/messages.d.ts +19 -0
  589. package/operator/i18n/messages.d.ts.map +1 -0
  590. package/operator/i18n/messages.js +54 -0
  591. package/operator/index.d.ts +19 -0
  592. package/operator/index.d.ts.map +1 -0
  593. package/operator/index.js +15 -0
  594. package/operator/telemetry.d.ts +26 -0
  595. package/operator/telemetry.d.ts.map +1 -0
  596. package/operator/telemetry.js +9 -0
  597. package/operator/theming/index.d.ts +12 -0
  598. package/operator/theming/index.d.ts.map +1 -0
  599. package/operator/theming/index.js +9 -0
  600. package/operator/theming/provider.d.ts +27 -0
  601. package/operator/theming/provider.d.ts.map +1 -0
  602. package/operator/theming/provider.js +26 -0
  603. package/operator/theming/tokens.d.ts +28 -0
  604. package/operator/theming/tokens.d.ts.map +1 -0
  605. package/operator/theming/tokens.js +65 -0
  606. package/operator/workspace/events.d.ts +70 -0
  607. package/operator/workspace/events.d.ts.map +1 -0
  608. package/operator/workspace/events.js +9 -0
  609. package/operator/workspace/index.d.ts +12 -0
  610. package/operator/workspace/index.d.ts.map +1 -0
  611. package/operator/workspace/index.js +8 -0
  612. package/operator/workspace/types.d.ts +178 -0
  613. package/operator/workspace/types.d.ts.map +1 -0
  614. package/operator/workspace/types.js +47 -0
  615. package/operator/workspace/workspace.d.ts +58 -0
  616. package/operator/workspace/workspace.d.ts.map +1 -0
  617. package/operator/workspace/workspace.js +339 -0
  618. package/package.json +105 -0
  619. package/realtime/exploration.d.ts +16 -0
  620. package/realtime/exploration.d.ts.map +1 -0
  621. package/realtime/exploration.js +32 -0
  622. package/realtime/honua-server.d.ts +123 -0
  623. package/realtime/honua-server.d.ts.map +1 -0
  624. package/realtime/honua-server.js +188 -0
  625. package/realtime/index.d.ts +20 -0
  626. package/realtime/index.d.ts.map +1 -0
  627. package/realtime/index.js +14 -0
  628. package/realtime/projections.d.ts +30 -0
  629. package/realtime/projections.d.ts.map +1 -0
  630. package/realtime/projections.js +51 -0
  631. package/realtime/reducer.d.ts +14 -0
  632. package/realtime/reducer.d.ts.map +1 -0
  633. package/realtime/reducer.js +351 -0
  634. package/realtime/sse.d.ts +23 -0
  635. package/realtime/sse.d.ts.map +1 -0
  636. package/realtime/sse.js +143 -0
  637. package/realtime/store.d.ts +18 -0
  638. package/realtime/store.d.ts.map +1 -0
  639. package/realtime/store.js +63 -0
  640. package/realtime/types.d.ts +190 -0
  641. package/realtime/types.d.ts.map +1 -0
  642. package/realtime/types.js +10 -0
  643. package/replica-sync/client.d.ts +32 -0
  644. package/replica-sync/client.d.ts.map +1 -0
  645. package/replica-sync/client.js +52 -0
  646. package/replica-sync/errors.d.ts +22 -0
  647. package/replica-sync/errors.d.ts.map +1 -0
  648. package/replica-sync/errors.js +29 -0
  649. package/replica-sync/fixture.d.ts +40 -0
  650. package/replica-sync/fixture.d.ts.map +1 -0
  651. package/replica-sync/fixture.js +364 -0
  652. package/replica-sync/index.d.ts +22 -0
  653. package/replica-sync/index.d.ts.map +1 -0
  654. package/replica-sync/index.js +17 -0
  655. package/replica-sync/types.d.ts +270 -0
  656. package/replica-sync/types.d.ts.map +1 -0
  657. package/replica-sync/types.js +13 -0
  658. package/runtime/diff.d.ts +31 -0
  659. package/runtime/diff.d.ts.map +1 -0
  660. package/runtime/diff.js +143 -0
  661. package/runtime/errors.d.ts +40 -0
  662. package/runtime/errors.d.ts.map +1 -0
  663. package/runtime/errors.js +35 -0
  664. package/runtime/index.d.ts +59 -0
  665. package/runtime/index.d.ts.map +1 -0
  666. package/runtime/index.js +40 -0
  667. package/runtime/legend.d.ts +23 -0
  668. package/runtime/legend.d.ts.map +1 -0
  669. package/runtime/legend.js +38 -0
  670. package/runtime/load-package.d.ts +125 -0
  671. package/runtime/load-package.d.ts.map +1 -0
  672. package/runtime/load-package.js +272 -0
  673. package/runtime/map-package-fetch.d.ts +107 -0
  674. package/runtime/map-package-fetch.d.ts.map +1 -0
  675. package/runtime/map-package-fetch.js +336 -0
  676. package/runtime/map-package-realtime.d.ts +169 -0
  677. package/runtime/map-package-realtime.d.ts.map +1 -0
  678. package/runtime/map-package-realtime.js +350 -0
  679. package/runtime/map-package-validation.d.ts +30 -0
  680. package/runtime/map-package-validation.d.ts.map +1 -0
  681. package/runtime/map-package-validation.js +257 -0
  682. package/runtime/map-package-watch.d.ts +78 -0
  683. package/runtime/map-package-watch.d.ts.map +1 -0
  684. package/runtime/map-package-watch.js +695 -0
  685. package/runtime/map-package.d.ts +167 -0
  686. package/runtime/map-package.d.ts.map +1 -0
  687. package/runtime/map-package.js +15 -0
  688. package/runtime/ogc-styles.d.ts +110 -0
  689. package/runtime/ogc-styles.d.ts.map +1 -0
  690. package/runtime/ogc-styles.js +195 -0
  691. package/runtime/pmtiles-protocol.d.ts +77 -0
  692. package/runtime/pmtiles-protocol.d.ts.map +1 -0
  693. package/runtime/pmtiles-protocol.js +120 -0
  694. package/runtime/popups.d.ts +62 -0
  695. package/runtime/popups.d.ts.map +1 -0
  696. package/runtime/popups.js +95 -0
  697. package/runtime/query-tiles.d.ts +217 -0
  698. package/runtime/query-tiles.d.ts.map +1 -0
  699. package/runtime/query-tiles.js +801 -0
  700. package/runtime/runtime.d.ts +243 -0
  701. package/runtime/runtime.d.ts.map +1 -0
  702. package/runtime/runtime.js +1147 -0
  703. package/runtime/source-bridge.d.ts +99 -0
  704. package/runtime/source-bridge.d.ts.map +1 -0
  705. package/runtime/source-bridge.js +428 -0
  706. package/runtime/style-compose.d.ts +46 -0
  707. package/runtime/style-compose.d.ts.map +1 -0
  708. package/runtime/style-compose.js +144 -0
  709. package/runtime/style-interactions.d.ts +141 -0
  710. package/runtime/style-interactions.d.ts.map +1 -0
  711. package/runtime/style-interactions.js +574 -0
  712. package/runtime/style-spec-validation.d.ts +23 -0
  713. package/runtime/style-spec-validation.d.ts.map +1 -0
  714. package/runtime/style-spec-validation.js +357 -0
  715. package/scene-workspace/analysis-widgets.d.ts +334 -0
  716. package/scene-workspace/analysis-widgets.d.ts.map +1 -0
  717. package/scene-workspace/analysis-widgets.js +424 -0
  718. package/scene-workspace/cesium-adapter.d.ts +438 -0
  719. package/scene-workspace/cesium-adapter.d.ts.map +1 -0
  720. package/scene-workspace/cesium-adapter.js +493 -0
  721. package/scene-workspace/index.d.ts +21 -0
  722. package/scene-workspace/index.d.ts.map +1 -0
  723. package/scene-workspace/index.js +14 -0
  724. package/scene-workspace/primitives.d.ts +162 -0
  725. package/scene-workspace/primitives.d.ts.map +1 -0
  726. package/scene-workspace/primitives.js +255 -0
  727. package/scene-workspace/scene-discovery.d.ts +196 -0
  728. package/scene-workspace/scene-discovery.d.ts.map +1 -0
  729. package/scene-workspace/scene-discovery.js +228 -0
  730. package/scene-workspace/scene-view.d.ts +209 -0
  731. package/scene-workspace/scene-view.d.ts.map +1 -0
  732. package/scene-workspace/scene-view.js +267 -0
  733. package/scene-workspace/types.d.ts +229 -0
  734. package/scene-workspace/types.d.ts.map +1 -0
  735. package/scene-workspace/types.js +23 -0
  736. package/scene-workspace/workspace.d.ts +13 -0
  737. package/scene-workspace/workspace.d.ts.map +1 -0
  738. package/scene-workspace/workspace.js +391 -0
  739. package/share/denial.d.ts +78 -0
  740. package/share/denial.d.ts.map +1 -0
  741. package/share/denial.js +61 -0
  742. package/share/embed-token.d.ts +71 -0
  743. package/share/embed-token.d.ts.map +1 -0
  744. package/share/embed-token.js +99 -0
  745. package/share/index.d.ts +35 -0
  746. package/share/index.d.ts.map +1 -0
  747. package/share/index.js +30 -0
  748. package/share/open-data.d.ts +114 -0
  749. package/share/open-data.d.ts.map +1 -0
  750. package/share/open-data.js +81 -0
  751. package/share/types.d.ts +163 -0
  752. package/share/types.d.ts.map +1 -0
  753. package/share/types.js +17 -0
  754. package/studio/capability-manifest.d.ts +285 -0
  755. package/studio/capability-manifest.d.ts.map +1 -0
  756. package/studio/capability-manifest.js +59 -0
  757. package/studio/chart-spec.d.ts +85 -0
  758. package/studio/chart-spec.d.ts.map +1 -0
  759. package/studio/chart-spec.js +106 -0
  760. package/studio/index.d.ts +34 -0
  761. package/studio/index.d.ts.map +1 -0
  762. package/studio/index.js +27 -0
  763. package/studio/provenance.d.ts +131 -0
  764. package/studio/provenance.d.ts.map +1 -0
  765. package/studio/provenance.js +39 -0
  766. package/studio/publish.d.ts +64 -0
  767. package/studio/publish.d.ts.map +1 -0
  768. package/studio/publish.js +13 -0
  769. package/studio/types.d.ts +278 -0
  770. package/studio/types.d.ts.map +1 -0
  771. package/studio/types.js +71 -0
  772. package/studio/validate.d.ts +45 -0
  773. package/studio/validate.d.ts.map +1 -0
  774. package/studio/validate.js +255 -0
  775. package/studio/validation.d.ts +112 -0
  776. package/studio/validation.d.ts.map +1 -0
  777. package/studio/validation.js +42 -0
  778. package/style/factory.d.ts +30 -0
  779. package/style/factory.d.ts.map +1 -0
  780. package/style/factory.js +61 -0
  781. package/style/index.d.ts +25 -0
  782. package/style/index.d.ts.map +1 -0
  783. package/style/index.js +24 -0
  784. package/style/specification.d.ts +203 -0
  785. package/style/specification.d.ts.map +1 -0
  786. package/style/specification.js +178 -0
  787. package/style/wms-wmts-resolvers.d.ts +38 -0
  788. package/style/wms-wmts-resolvers.d.ts.map +1 -0
  789. package/style/wms-wmts-resolvers.js +92 -0
  790. package/web-components/controller.d.ts +39 -0
  791. package/web-components/controller.d.ts.map +1 -0
  792. package/web-components/controller.js +640 -0
  793. package/web-components/elements.d.ts +210 -0
  794. package/web-components/elements.d.ts.map +1 -0
  795. package/web-components/elements.js +1651 -0
  796. package/web-components/index.d.ts +24 -0
  797. package/web-components/index.d.ts.map +1 -0
  798. package/web-components/index.js +22 -0
  799. package/web-components/maplibre-renderer.d.ts +22 -0
  800. package/web-components/maplibre-renderer.d.ts.map +1 -0
  801. package/web-components/maplibre-renderer.js +474 -0
  802. package/web-components/types.d.ts +397 -0
  803. package/web-components/types.d.ts.map +1 -0
  804. package/web-components/types.js +1 -0
  805. package/webmap/contract.d.ts +28 -0
  806. package/webmap/contract.d.ts.map +1 -0
  807. package/webmap/contract.js +130 -0
  808. package/webmap/convert-basemap.d.ts +17 -0
  809. package/webmap/convert-basemap.d.ts.map +1 -0
  810. package/webmap/convert-basemap.js +78 -0
  811. package/webmap/convert-extent.d.ts +17 -0
  812. package/webmap/convert-extent.d.ts.map +1 -0
  813. package/webmap/convert-extent.js +114 -0
  814. package/webmap/convert-label.d.ts +13 -0
  815. package/webmap/convert-label.d.ts.map +1 -0
  816. package/webmap/convert-label.js +125 -0
  817. package/webmap/convert-layer.d.ts +22 -0
  818. package/webmap/convert-layer.d.ts.map +1 -0
  819. package/webmap/convert-layer.js +181 -0
  820. package/webmap/convert-popup.d.ts +34 -0
  821. package/webmap/convert-popup.d.ts.map +1 -0
  822. package/webmap/convert-popup.js +68 -0
  823. package/webmap/convert-renderer.d.ts +17 -0
  824. package/webmap/convert-renderer.d.ts.map +1 -0
  825. package/webmap/convert-renderer.js +161 -0
  826. package/webmap/convert-symbol.d.ts +17 -0
  827. package/webmap/convert-symbol.d.ts.map +1 -0
  828. package/webmap/convert-symbol.js +122 -0
  829. package/webmap/index.d.ts +44 -0
  830. package/webmap/index.d.ts.map +1 -0
  831. package/webmap/index.js +33 -0
  832. package/webmap/parse.d.ts +25 -0
  833. package/webmap/parse.d.ts.map +1 -0
  834. package/webmap/parse.js +83 -0
  835. package/webmap/types.d.ts +264 -0
  836. package/webmap/types.d.ts.map +1 -0
  837. package/webmap/types.js +13 -0
  838. package/webmap/warnings.d.ts +30 -0
  839. package/webmap/warnings.d.ts.map +1 -0
  840. package/webmap/warnings.js +37 -0
@@ -0,0 +1,391 @@
1
+ import { featureSelectionKey } from "../exploration/index.js";
2
+ export function emptySceneWorkspaceState() {
3
+ return {
4
+ layers: {},
5
+ primitives: {},
6
+ diagnostics: [],
7
+ filters: {},
8
+ detail: {},
9
+ bookmarks: {},
10
+ selection: [],
11
+ timeline: {},
12
+ evidence: {},
13
+ realtime: { status: "idle" },
14
+ history: [],
15
+ };
16
+ }
17
+ export function createSceneWorkspace(initialState = {}) {
18
+ let state = mergeState(emptySceneWorkspaceState(), initialState);
19
+ const listeners = new Map();
20
+ let disposed = false;
21
+ function ensureLive() {
22
+ if (disposed)
23
+ throw new Error("SceneWorkspace has been disposed.");
24
+ }
25
+ function emit(event) {
26
+ for (const listener of listeners.get("all") ?? [])
27
+ listener(event);
28
+ for (const slice of event.changedSlices) {
29
+ if (slice === "all")
30
+ continue;
31
+ for (const listener of listeners.get(slice) ?? [])
32
+ listener(event);
33
+ }
34
+ }
35
+ return {
36
+ get state() {
37
+ return state;
38
+ },
39
+ dispatch(intent) {
40
+ ensureLive();
41
+ const previous = state;
42
+ const next = reduceSceneWorkspaceState(state, intent);
43
+ const changedSlices = changedSceneWorkspaceSlices(previous, next);
44
+ if (changedSlices.size === 0)
45
+ return state;
46
+ state = next;
47
+ emit({ state, previous, changedSlices, intent });
48
+ return state;
49
+ },
50
+ subscribe(slice, listener) {
51
+ ensureLive();
52
+ const sliceListeners = listeners.get(slice) ?? new Set();
53
+ sliceListeners.add(listener);
54
+ listeners.set(slice, sliceListeners);
55
+ return () => {
56
+ sliceListeners.delete(listener);
57
+ };
58
+ },
59
+ snapshot() {
60
+ ensureLive();
61
+ return { version: 1, state: cloneSceneWorkspaceState(state) };
62
+ },
63
+ restore(snapshot) {
64
+ return this.dispatch({ kind: "restore", snapshot, source: "workspace" });
65
+ },
66
+ dispose() {
67
+ disposed = true;
68
+ listeners.clear();
69
+ },
70
+ };
71
+ }
72
+ export function reduceSceneWorkspaceState(state, intent) {
73
+ const base = applyIntent(state, intent);
74
+ return appendHistory(base, intent);
75
+ }
76
+ export function sceneWorkspaceIntentFromAdapterEvent(event, source = "scene") {
77
+ switch (event.type) {
78
+ case "camera-change":
79
+ return { kind: "set-camera", camera: event.camera, source, historyLabel: "Scene camera changed" };
80
+ case "layer-visibility-change":
81
+ return {
82
+ kind: "set-layer-visibility",
83
+ layerId: event.layerId,
84
+ visible: event.visible,
85
+ source,
86
+ historyLabel: "Scene layer visibility changed",
87
+ };
88
+ case "primitive-diagnostics":
89
+ return {
90
+ kind: "set-diagnostics",
91
+ diagnostics: event.diagnostics,
92
+ source,
93
+ historyLabel: "Scene primitive diagnostics changed",
94
+ };
95
+ case "filter-change":
96
+ return event.clause
97
+ ? {
98
+ kind: "set-filter",
99
+ id: event.id,
100
+ clause: event.clause,
101
+ source,
102
+ historyLabel: "Scene filter changed",
103
+ }
104
+ : { kind: "clear-filter", id: event.id, source, historyLabel: "Scene filter cleared" };
105
+ case "selection-change":
106
+ return { kind: "set-selection", selection: event.selection, source, historyLabel: "Scene selection changed" };
107
+ case "detail-change":
108
+ return { kind: "set-detail", detail: event.detail, source, historyLabel: "Scene detail changed" };
109
+ case "timeline-change":
110
+ return { kind: "set-timeline", timeline: event.timeline, source, historyLabel: "Scene timeline changed" };
111
+ case "evidence-add":
112
+ if (!event.evidence)
113
+ throw new Error("evidence-add adapter event requires evidence.");
114
+ return { kind: "add-evidence", evidence: event.evidence, source, historyLabel: "Scene evidence added" };
115
+ case "evidence-remove":
116
+ if (!event.id)
117
+ throw new Error("evidence-remove adapter event requires id.");
118
+ return { kind: "remove-evidence", id: event.id, source, historyLabel: "Scene evidence removed" };
119
+ case "realtime-status":
120
+ return { kind: "set-realtime", realtime: event.realtime, source, historyLabel: "Scene realtime status changed" };
121
+ }
122
+ }
123
+ export function selectSceneVisibleLayers(state) {
124
+ return Object.values(state.layers).filter((layer) => layer.visible);
125
+ }
126
+ export function selectScenePrimitivesByKind(state, kind) {
127
+ return Object.values(state.primitives).filter((primitive) => primitive.kind === kind);
128
+ }
129
+ export function selectSceneDiagnosticsByStatus(state, status) {
130
+ return state.diagnostics.filter((diagnostic) => diagnostic.status === status);
131
+ }
132
+ export function selectSceneEvidenceForFeature(state, featureId) {
133
+ if (featureId === undefined)
134
+ return [];
135
+ return Object.values(state.evidence).filter((evidence) => evidence.featureId === featureId);
136
+ }
137
+ function applyIntent(state, intent) {
138
+ switch (intent.kind) {
139
+ case "set-scene":
140
+ return {
141
+ ...state,
142
+ sceneId: intent.sceneId,
143
+ title: intent.title,
144
+ };
145
+ case "set-layers":
146
+ return {
147
+ ...state,
148
+ layers: Object.fromEntries(intent.layers.map((layer) => [layer.id, { ...layer }])),
149
+ };
150
+ case "set-primitives":
151
+ return {
152
+ ...state,
153
+ primitives: Object.fromEntries(intent.primitives.map((primitive) => [primitive.id, clonePrimitive(primitive)])),
154
+ };
155
+ case "set-diagnostics":
156
+ return {
157
+ ...state,
158
+ diagnostics: intent.diagnostics.map(cloneDiagnostic),
159
+ };
160
+ case "set-layer-visibility": {
161
+ const existing = state.layers[intent.layerId];
162
+ return {
163
+ ...state,
164
+ layers: {
165
+ ...state.layers,
166
+ [intent.layerId]: {
167
+ ...existing,
168
+ id: intent.layerId,
169
+ visible: intent.visible,
170
+ },
171
+ },
172
+ };
173
+ }
174
+ case "set-camera":
175
+ return {
176
+ ...state,
177
+ camera: intent.camera ? { ...intent.camera } : undefined,
178
+ };
179
+ case "apply-bookmark":
180
+ return {
181
+ ...state,
182
+ camera: { ...intent.bookmark.camera },
183
+ bookmarks: {
184
+ ...state.bookmarks,
185
+ [intent.bookmark.id]: { ...intent.bookmark, camera: { ...intent.bookmark.camera } },
186
+ },
187
+ };
188
+ case "set-filter":
189
+ return {
190
+ ...state,
191
+ filters: {
192
+ ...state.filters,
193
+ [intent.id]: cloneValue(intent.clause),
194
+ },
195
+ };
196
+ case "clear-filter": {
197
+ const filters = { ...state.filters };
198
+ delete filters[intent.id];
199
+ return { ...state, filters };
200
+ }
201
+ case "set-selection":
202
+ return {
203
+ ...state,
204
+ selection: dedupeSelection(intent.selection),
205
+ };
206
+ case "clear-selection":
207
+ return {
208
+ ...state,
209
+ selection: [],
210
+ };
211
+ case "set-detail":
212
+ return {
213
+ ...state,
214
+ detail: cloneDetail(intent.detail),
215
+ };
216
+ case "set-active-asset":
217
+ return {
218
+ ...state,
219
+ activeAssetId: intent.id,
220
+ };
221
+ case "set-timeline":
222
+ return {
223
+ ...state,
224
+ timeline: { ...intent.timeline },
225
+ };
226
+ case "add-evidence":
227
+ return {
228
+ ...state,
229
+ evidence: {
230
+ ...state.evidence,
231
+ [intent.evidence.id]: cloneEvidence(intent.evidence),
232
+ },
233
+ };
234
+ case "remove-evidence": {
235
+ const evidence = { ...state.evidence };
236
+ delete evidence[intent.id];
237
+ return { ...state, evidence };
238
+ }
239
+ case "set-realtime":
240
+ return {
241
+ ...state,
242
+ realtime: { ...intent.realtime },
243
+ };
244
+ case "restore":
245
+ return cloneSceneWorkspaceState(intent.snapshot.state);
246
+ }
247
+ }
248
+ function appendHistory(state, intent) {
249
+ if (intent.kind === "restore")
250
+ return state;
251
+ const label = intent.historyLabel ?? intent.kind;
252
+ const at = intent.at ?? new Date().toISOString();
253
+ const entry = {
254
+ id: `${state.history.length + 1}:${intent.kind}`,
255
+ label,
256
+ at,
257
+ intentKind: intent.kind,
258
+ };
259
+ return {
260
+ ...state,
261
+ history: [...state.history, entry].slice(-50),
262
+ };
263
+ }
264
+ function changedSceneWorkspaceSlices(previous, next) {
265
+ const changed = new Set();
266
+ if (previous.sceneId !== next.sceneId || previous.title !== next.title)
267
+ changed.add("scene");
268
+ if (previous.camera !== next.camera)
269
+ changed.add("camera");
270
+ if (previous.layers !== next.layers)
271
+ changed.add("layers");
272
+ if (previous.primitives !== next.primitives)
273
+ changed.add("primitives");
274
+ if (previous.diagnostics !== next.diagnostics)
275
+ changed.add("diagnostics");
276
+ if (previous.filters !== next.filters)
277
+ changed.add("filters");
278
+ if (previous.detail !== next.detail)
279
+ changed.add("detail");
280
+ if (previous.selection !== next.selection)
281
+ changed.add("selection");
282
+ if (previous.timeline !== next.timeline)
283
+ changed.add("timeline");
284
+ if (previous.evidence !== next.evidence)
285
+ changed.add("evidence");
286
+ if (previous.realtime !== next.realtime)
287
+ changed.add("realtime");
288
+ if (previous.history !== next.history)
289
+ changed.add("history");
290
+ return changed;
291
+ }
292
+ function mergeState(base, initial) {
293
+ return cloneSceneWorkspaceState({
294
+ ...base,
295
+ ...initial,
296
+ layers: {
297
+ ...base.layers,
298
+ ...Object.fromEntries(Object.entries(initial.layers ?? {}).map(([id, layer]) => [id, cloneLayer(layer)])),
299
+ },
300
+ primitives: {
301
+ ...base.primitives,
302
+ ...Object.fromEntries(Object.entries(initial.primitives ?? {}).map(([id, primitive]) => [id, clonePrimitive(primitive)])),
303
+ },
304
+ diagnostics: initial.diagnostics ? initial.diagnostics.map(cloneDiagnostic) : base.diagnostics,
305
+ filters: {
306
+ ...base.filters,
307
+ ...cloneValue(initial.filters ?? {}),
308
+ },
309
+ detail: cloneDetail({ ...base.detail, ...initial.detail }),
310
+ bookmarks: {
311
+ ...base.bookmarks,
312
+ ...Object.fromEntries(Object.entries(initial.bookmarks ?? {}).map(([id, bookmark]) => [id, cloneBookmark(bookmark)])),
313
+ },
314
+ selection: initial.selection ? dedupeSelection(initial.selection) : base.selection,
315
+ timeline: { ...base.timeline, ...initial.timeline },
316
+ evidence: {
317
+ ...base.evidence,
318
+ ...Object.fromEntries(Object.entries(initial.evidence ?? {}).map(([id, evidence]) => [id, cloneEvidence(evidence)])),
319
+ },
320
+ realtime: { ...base.realtime, ...initial.realtime },
321
+ history: [...(initial.history ?? base.history)],
322
+ });
323
+ }
324
+ function cloneSceneWorkspaceState(state) {
325
+ return {
326
+ ...state,
327
+ layers: Object.fromEntries(Object.entries(state.layers).map(([id, layer]) => [id, cloneLayer(layer)])),
328
+ primitives: Object.fromEntries(Object.entries(state.primitives).map(([id, primitive]) => [id, clonePrimitive(primitive)])),
329
+ diagnostics: state.diagnostics.map(cloneDiagnostic),
330
+ filters: cloneValue(state.filters),
331
+ detail: cloneDetail(state.detail),
332
+ bookmarks: Object.fromEntries(Object.entries(state.bookmarks).map(([id, bookmark]) => [id, cloneBookmark(bookmark)])),
333
+ camera: state.camera ? cloneCamera(state.camera) : undefined,
334
+ selection: dedupeSelection(state.selection),
335
+ timeline: { ...state.timeline },
336
+ evidence: Object.fromEntries(Object.entries(state.evidence).map(([id, evidence]) => [id, cloneEvidence(evidence)])),
337
+ realtime: { ...state.realtime },
338
+ history: state.history.map((entry) => ({ ...entry })),
339
+ };
340
+ }
341
+ function cloneLayer(layer) {
342
+ return { ...layer };
343
+ }
344
+ function clonePrimitive(primitive) {
345
+ return cloneValue(primitive);
346
+ }
347
+ function cloneDiagnostic(diagnostic) {
348
+ return cloneValue(diagnostic);
349
+ }
350
+ function cloneDetail(detail) {
351
+ return {
352
+ ...detail,
353
+ target: detail.target ? cloneSelectionTarget(detail.target) : undefined,
354
+ attributes: detail.attributes ? cloneValue(detail.attributes) : undefined,
355
+ };
356
+ }
357
+ function cloneCamera(camera) {
358
+ return { ...camera };
359
+ }
360
+ function cloneBookmark(bookmark) {
361
+ return {
362
+ ...bookmark,
363
+ camera: cloneCamera(bookmark.camera),
364
+ };
365
+ }
366
+ function cloneEvidence(evidence) {
367
+ return {
368
+ ...evidence,
369
+ metadata: evidence.metadata ? cloneValue(evidence.metadata) : undefined,
370
+ };
371
+ }
372
+ function dedupeSelection(selection) {
373
+ const seen = new Set();
374
+ const out = [];
375
+ for (const target of selection) {
376
+ const key = featureSelectionKey(target);
377
+ if (seen.has(key))
378
+ continue;
379
+ seen.add(key);
380
+ out.push(cloneSelectionTarget(target));
381
+ }
382
+ return out;
383
+ }
384
+ function cloneSelectionTarget(target) {
385
+ return typeof target === "object" && target !== null ? { ...target } : target;
386
+ }
387
+ function cloneValue(value) {
388
+ if (typeof structuredClone === "function")
389
+ return structuredClone(value);
390
+ return JSON.parse(JSON.stringify(value));
391
+ }
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Anonymous-safe Share access states and denial helpers.
3
+ *
4
+ * Mirrors the server's anonymous Share endpoints: unknown, expired, revoked,
5
+ * forbidden, or no-longer-covered tokens all collapse to a single, identical
6
+ * denial that never discloses item identity, title, or existence. Browser code
7
+ * consumes one explicit state model rather than inferring access from HTTP
8
+ * status codes or—worse—leaking a private title into a "not allowed" message.
9
+ *
10
+ * @module
11
+ */
12
+ import type { HonuaEmbedRedemption, HonuaPublicLinkResolution } from "./types.js";
13
+ /**
14
+ * Why an anonymous Share read was denied. These are intentionally coarse so the
15
+ * reason never acts as an existence/identity oracle: `not-found` covers unknown
16
+ * items, revoked/unknown tokens, and items whose tier no longer covers the
17
+ * access path; `expired` covers tokens past their TTL; `forbidden` covers a
18
+ * surface that exists but is not anonymously readable through the attempted
19
+ * mechanism.
20
+ */
21
+ export type HonuaShareDenialReason = "not-found" | "expired" | "forbidden";
22
+ /** The mechanism an anonymous read was attempted through. */
23
+ export type HonuaShareAccessKind = "public-link" | "public-content" | "embed";
24
+ /**
25
+ * Granted anonymous Share state — the resolved presentation projection plus the
26
+ * access kind it was reached through.
27
+ */
28
+ export interface HonuaShareAccessGranted<TResolution> {
29
+ readonly status: "granted";
30
+ readonly kind: HonuaShareAccessKind;
31
+ readonly resolution: TResolution;
32
+ }
33
+ /**
34
+ * Denied anonymous Share state. Carries only a coarse {@link reason} and an
35
+ * opaque, identity-free {@link message}. It deliberately exposes no item id,
36
+ * title, or any field that could confirm a private item exists.
37
+ */
38
+ export interface HonuaShareAccessDenied {
39
+ readonly status: "denied";
40
+ readonly kind: HonuaShareAccessKind;
41
+ readonly reason: HonuaShareDenialReason;
42
+ /** Opaque, anonymous-safe denial message. Never includes item identity. */
43
+ readonly message: string;
44
+ }
45
+ /** Discriminated anonymous Share access state. */
46
+ export type HonuaShareAccessState<TResolution> = HonuaShareAccessGranted<TResolution> | HonuaShareAccessDenied;
47
+ /** Anonymous Share access state for a public-link / public-content read. */
48
+ export type HonuaPublicLinkAccessState = HonuaShareAccessState<HonuaPublicLinkResolution>;
49
+ /** Anonymous Share access state for an embed redemption. */
50
+ export type HonuaEmbedAccessState = HonuaShareAccessState<HonuaEmbedRedemption>;
51
+ /**
52
+ * Constant, identity-free denial messages keyed by access kind. These mirror
53
+ * the server's fixed denial bodies so the browser never has to synthesize a
54
+ * message from item data. They are byte-stable per kind so a denial response
55
+ * cannot be distinguished by message content.
56
+ */
57
+ export declare const HONUA_SHARE_DENIAL_MESSAGES: Readonly<Record<HonuaShareAccessKind, string>>;
58
+ /**
59
+ * Builds an anonymous-safe denial state. The message is always sourced from
60
+ * {@link HONUA_SHARE_DENIAL_MESSAGES} and never from caller-supplied item data,
61
+ * so private titles cannot leak through this path.
62
+ */
63
+ export declare function denyShareAccess(kind: HonuaShareAccessKind, reason: HonuaShareDenialReason): HonuaShareAccessDenied;
64
+ /** Builds a granted Share access state from a resolved presentation projection. */
65
+ export declare function grantShareAccess<TResolution>(kind: HonuaShareAccessKind, resolution: TResolution): HonuaShareAccessGranted<TResolution>;
66
+ /** Narrowing guard for the denied state. */
67
+ export declare function isShareAccessDenied<TResolution>(state: HonuaShareAccessState<TResolution>): state is HonuaShareAccessDenied;
68
+ /** Narrowing guard for the granted state. */
69
+ export declare function isShareAccessGranted<TResolution>(state: HonuaShareAccessState<TResolution>): state is HonuaShareAccessGranted<TResolution>;
70
+ /**
71
+ * Maps an anonymous Share endpoint HTTP status to a denial state. The server
72
+ * collapses unknown/expired/revoked/forbidden into a uniform `404`, so any
73
+ * non-2xx status becomes a `not-found` denial unless it is a `403`
74
+ * (`forbidden`) or `410` (`expired`). This keeps browser callers from leaking
75
+ * an existence oracle by branching on richer statuses.
76
+ */
77
+ export declare function denialFromHttpStatus(kind: HonuaShareAccessKind, status: number): HonuaShareAccessDenied;
78
+ //# sourceMappingURL=denial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"denial.d.ts","sourceRoot":"","sources":["../../../src/share/denial.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAElF;;;;;;;GAOG;AACH,MAAM,MAAM,sBAAsB,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAE3E,6DAA6D;AAC7D,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG,gBAAgB,GAAG,OAAO,CAAC;AAE9E;;;GAGG;AACH,MAAM,WAAW,uBAAuB,CAAC,WAAW;IAClD,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,kDAAkD;AAClD,MAAM,MAAM,qBAAqB,CAAC,WAAW,IAAI,uBAAuB,CAAC,WAAW,CAAC,GAAG,sBAAsB,CAAC;AAE/G,4EAA4E;AAC5E,MAAM,MAAM,0BAA0B,GAAG,qBAAqB,CAAC,yBAAyB,CAAC,CAAC;AAE1F,4DAA4D;AAC5D,MAAM,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;AAEhF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAI7E,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,sBAAsB,GAAG,sBAAsB,CAOlH;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,WAAW,EAC1C,IAAI,EAAE,oBAAoB,EAC1B,UAAU,EAAE,WAAW,GACtB,uBAAuB,CAAC,WAAW,CAAC,CAEtC;AAED,4CAA4C;AAC5C,wBAAgB,mBAAmB,CAAC,WAAW,EAC7C,KAAK,EAAE,qBAAqB,CAAC,WAAW,CAAC,GACxC,KAAK,IAAI,sBAAsB,CAEjC;AAED,6CAA6C;AAC7C,wBAAgB,oBAAoB,CAAC,WAAW,EAC9C,KAAK,EAAE,qBAAqB,CAAC,WAAW,CAAC,GACxC,KAAK,IAAI,uBAAuB,CAAC,WAAW,CAAC,CAE/C;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,GAAG,sBAAsB,CAIvG"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Anonymous-safe Share access states and denial helpers.
3
+ *
4
+ * Mirrors the server's anonymous Share endpoints: unknown, expired, revoked,
5
+ * forbidden, or no-longer-covered tokens all collapse to a single, identical
6
+ * denial that never discloses item identity, title, or existence. Browser code
7
+ * consumes one explicit state model rather than inferring access from HTTP
8
+ * status codes or—worse—leaking a private title into a "not allowed" message.
9
+ *
10
+ * @module
11
+ */
12
+ /**
13
+ * Constant, identity-free denial messages keyed by access kind. These mirror
14
+ * the server's fixed denial bodies so the browser never has to synthesize a
15
+ * message from item data. They are byte-stable per kind so a denial response
16
+ * cannot be distinguished by message content.
17
+ */
18
+ export const HONUA_SHARE_DENIAL_MESSAGES = {
19
+ "public-link": "Link not found or expired.",
20
+ "public-content": "Shared item not found.",
21
+ embed: "Embed token not found or expired.",
22
+ };
23
+ /**
24
+ * Builds an anonymous-safe denial state. The message is always sourced from
25
+ * {@link HONUA_SHARE_DENIAL_MESSAGES} and never from caller-supplied item data,
26
+ * so private titles cannot leak through this path.
27
+ */
28
+ export function denyShareAccess(kind, reason) {
29
+ return {
30
+ status: "denied",
31
+ kind,
32
+ reason,
33
+ message: HONUA_SHARE_DENIAL_MESSAGES[kind] ?? HONUA_SHARE_DENIAL_MESSAGES["public-content"],
34
+ };
35
+ }
36
+ /** Builds a granted Share access state from a resolved presentation projection. */
37
+ export function grantShareAccess(kind, resolution) {
38
+ return { status: "granted", kind, resolution };
39
+ }
40
+ /** Narrowing guard for the denied state. */
41
+ export function isShareAccessDenied(state) {
42
+ return state.status === "denied";
43
+ }
44
+ /** Narrowing guard for the granted state. */
45
+ export function isShareAccessGranted(state) {
46
+ return state.status === "granted";
47
+ }
48
+ /**
49
+ * Maps an anonymous Share endpoint HTTP status to a denial state. The server
50
+ * collapses unknown/expired/revoked/forbidden into a uniform `404`, so any
51
+ * non-2xx status becomes a `not-found` denial unless it is a `403`
52
+ * (`forbidden`) or `410` (`expired`). This keeps browser callers from leaking
53
+ * an existence oracle by branching on richer statuses.
54
+ */
55
+ export function denialFromHttpStatus(kind, status) {
56
+ if (status === 403)
57
+ return denyShareAccess(kind, "forbidden");
58
+ if (status === 410)
59
+ return denyShareAccess(kind, "expired");
60
+ return denyShareAccess(kind, "not-found");
61
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Fragment-only embed-token parsing.
3
+ *
4
+ * Embed bearer tokens MUST travel in the URL fragment (`#...`), never the query
5
+ * string. The fragment is not sent to the origin server, is not written to
6
+ * server access logs or the `Referer` header, and is not captured by most
7
+ * proxy/CDN request logging — so a fragment-borne bearer token has a much
8
+ * smaller disclosure surface than a query-string one. This helper extracts a
9
+ * token from the fragment and *rejects* query-string bearer patterns outright
10
+ * so a generated app or embed never silently accepts a leak-prone placement.
11
+ *
12
+ * @module
13
+ */
14
+ /** Default fragment parameter name an embed token is read from. */
15
+ export declare const HONUA_EMBED_TOKEN_FRAGMENT_PARAM: "embed_token";
16
+ /** Why an embed-token parse rejected an input. */
17
+ export type HonuaEmbedTokenRejectionReason =
18
+ /** No token was present in the fragment. */
19
+ "missing"
20
+ /** The token appeared in the query string — a forbidden, leak-prone placement. */
21
+ | "query-string-token"
22
+ /** The fragment held a token-shaped value but it was empty/blank. */
23
+ | "empty"
24
+ /** The input was not a parseable URL or fragment. */
25
+ | "malformed";
26
+ /** Successful fragment-only token parse. */
27
+ export interface HonuaEmbedTokenParseOk {
28
+ readonly ok: true;
29
+ /** The extracted opaque token value (trimmed, never empty). */
30
+ readonly token: string;
31
+ /** The fragment parameter the token was read from. */
32
+ readonly param: string;
33
+ }
34
+ /** Rejected token parse — carries a reason but never the offending value. */
35
+ export interface HonuaEmbedTokenParseRejected {
36
+ readonly ok: false;
37
+ readonly reason: HonuaEmbedTokenRejectionReason;
38
+ }
39
+ /** Result of {@link parseEmbedTokenFromFragment}. */
40
+ export type HonuaEmbedTokenParseResult = HonuaEmbedTokenParseOk | HonuaEmbedTokenParseRejected;
41
+ /** Options for {@link parseEmbedTokenFromFragment}. */
42
+ export interface ParseEmbedTokenOptions {
43
+ /**
44
+ * Fragment parameter name(s) to read the token from. Defaults to
45
+ * {@link HONUA_EMBED_TOKEN_FRAGMENT_PARAM}. The same name(s) are also the
46
+ * query-string keys that are rejected if a token is found there.
47
+ */
48
+ readonly param?: string | readonly string[];
49
+ }
50
+ /**
51
+ * Extracts an embed bearer token from a URL/location fragment, rejecting any
52
+ * token placed in the query string.
53
+ *
54
+ * Resolution order:
55
+ * 1. If a token parameter is present in the **query string**, reject with
56
+ * `query-string-token` — even if a fragment token also exists — so a
57
+ * leak-prone placement is never silently tolerated.
58
+ * 2. Otherwise read the token from the **fragment**. A blank fragment token
59
+ * rejects with `empty`; a missing one rejects with `missing`.
60
+ *
61
+ * @param input A full or relative URL, a bare query, or a bare fragment. In a
62
+ * browser, pass `window.location.href` (or `location.search + location.hash`).
63
+ */
64
+ export declare function parseEmbedTokenFromFragment(input: string, options?: ParseEmbedTokenOptions): HonuaEmbedTokenParseResult;
65
+ /**
66
+ * Convenience guard: `true` when `input` carries an embed-token parameter in the
67
+ * query string (any leak-prone placement). Useful for asserting a redirect
68
+ * stripped the token before it reached a logged surface.
69
+ */
70
+ export declare function hasQueryStringEmbedToken(input: string, options?: ParseEmbedTokenOptions): boolean;
71
+ //# sourceMappingURL=embed-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed-token.d.ts","sourceRoot":"","sources":["../../../src/share/embed-token.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,mEAAmE;AACnE,eAAO,MAAM,gCAAgC,EAAG,aAAsB,CAAC;AAEvE,kDAAkD;AAClD,MAAM,MAAM,8BAA8B;AACxC,4CAA4C;AAC1C,SAAS;AACX,kFAAkF;GAChF,oBAAoB;AACtB,qEAAqE;GACnE,OAAO;AACT,qDAAqD;GACnD,WAAW,CAAC;AAEhB,4CAA4C;AAC5C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,6EAA6E;AAC7E,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,8BAA8B,CAAC;CACjD;AAED,qDAAqD;AACrD,MAAM,MAAM,0BAA0B,GAAG,sBAAsB,GAAG,4BAA4B,CAAC;AAE/F,uDAAuD;AACvD,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CAC7C;AAwCD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,sBAA2B,GACnC,0BAA0B,CAmB5B;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAKrG"}