@honua/app-platform 0.1.13 → 0.1.14
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/contract/source.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../src/contract/source.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../src/contract/source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,OAAO,EAIL,KAAK,mBAAmB,EAOzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGtE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,yBAAyB,EAE1B,MAAM,qBAAqB,CAAC;AAe7B,OAAO,KAAK,EAAE,mBAAmB,EAAsB,MAAM,gBAAgB,CAAC;AAG9E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAsB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAoB9E,OAAO,KAAK,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAgB/G,OAAO,EAYL,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,OAAO,EAQZ,KAAK,QAAQ,EAOb,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EAEd,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAEpE;AAED,iFAAiF;AACjF,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,oBAAoB,EAC7B,KAAK,GAAE;IACL,QAAQ,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAC;CAC5E,GACL,OAAO,CAwDT;AA+DD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,gBAAgB,GACvB,qBAAqB,CAAC,CAAC,CAAC,CAkF1B;AAID;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,EAC3C,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,gBAAgB,GACvB,qBAAqB,CAAC,CAAC,CAAC,CA4E1B;AAID;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,gBAAgB,GACvB,qBAAqB,CAAC,CAAC,CAAC,CAqM1B;AAID;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,gBAAgB,GACvB,qBAAqB,CAAC,CAAC,CAAC,CA4F1B;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gCAAgC,CAAC,CAAC,EAChD,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,gBAAgB,GACvB,qBAAqB,CAAC,CAAC,CAAC,CAQ1B;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAC1C,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,gBAAgB,GACvB,qBAAqB,CAAC,CAAC,CAAC,CAa1B;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,gBAAgB,GACvB,qBAAqB,CAAC,CAAC,CAAC,CAsB1B;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,gBAAgB,EACxB,IAAI,GAAE,0BAA+B,GACpC,qBAAqB,CAAC,CAAC,CAAC,CAqB1B;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,gBAAgB,GACvB,qBAAqB,CAAC,CAAC,CAAC,CAoB1B;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,gBAAgB,GACvB,qBAAqB,CAAC,CAAC,CAAC,CA4F1B;AAID;;;;;;;;;GASG;AACH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CAAC,CAAC,EACzB,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,gBAAgB,GACvB,qBAAqB,CAAC,CAAC,CAAC,CA6F1B;AA0HD;;;;;GAKG;AACH;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAC1B,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,gBAAgB,GACvB,qBAAqB,CAAC,CAAC,CAAC,CAkC1B;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,gBAAgB,GACvB,qBAAqB,CAAC,CAAC,CAAC,CAyI1B;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAgB,SAAS,CAAC,CAAC,EACzB,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,gBAAgB,GACvB,qBAAqB,CAAC,CAAC,CAAC,CAiV1B;AAuZD;;;;;;;;;;;;;GAaG;AACH,gEAAgE;AAChE,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,eAAe,CAAC;AAE5D,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,kBAAkB,CAAC;CAC7C;AAYD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,UAAU,EAAE,gBAAgB,EAC5B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,kBAAuB,GAC/B,qBAAqB,CAAC,CAAC,CAAC,CAwK1B;AAqxED;;;;;;GAMG;AACH,OAAO,QAAQ,YAAY,CAAC;IAC1B,UAAU,cAAc;QACtB,6BAA6B,EAAE,iBAAiB,CAAC;QACjD,yBAAyB,EAAE,eAAe,CAAC;QAC3C,uBAAuB,EAAE,aAAa,CAAC;QACvC,2BAA2B,EAAE,iBAAiB,CAAC;QAC/C,8BAA8B,EAAE,oBAAoB,CAAC;QACrD,wBAAwB,EAAE,yBAAyB,CAAC;QACpD,cAAc,EAAE,yBAAyB,CAAC;QAC1C,WAAW,EAAE,eAAe,GAAG,aAAa,CAAC;QAC7C,UAAU,EAAE,YAAY,GAAG,qBAAqB,CAAC;QACjD,aAAa,EAAE,wBAAwB,CAAC;QACxC,eAAe,EAAE,iBAAiB,CAAC;QACnC,IAAI,EAAE,eAAe,CAAC;QACtB,GAAG,EAAE,mBAAmB,CAAC;QACzB,GAAG,EAAE,QAAQ,CAAC;QACd,WAAW,EAAE,aAAa,CAAC;QAC3B,IAAI,EAAE,SAAS,CAAC;QAChB,YAAY,EAAE,cAAc,CAAC;QAC7B,cAAc,EAAE,gBAAgB,CAAC;QACjC,KAAK,EAAE,mBAAmB,CAAC;QAC3B,OAAO,EAAE,mBAAmB,CAAC;KAC9B;CACF;AAID,2EAA2E;AAC3E,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,UAAU,CAAyB,CAAC;AAE/E,iEAAiE;AACjE,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,QAAQ,CAe7C,CAAC"}
|
package/contract/source.js
CHANGED
|
@@ -1480,10 +1480,10 @@ export function wfsSource(descriptor, client, policy) {
|
|
|
1480
1480
|
* does not issue network traffic.
|
|
1481
1481
|
*/
|
|
1482
1482
|
let cachedFormat;
|
|
1483
|
-
async function negotiateJsonOrThrow() {
|
|
1483
|
+
async function negotiateJsonOrThrow(signal) {
|
|
1484
1484
|
if (cachedFormat)
|
|
1485
1485
|
return cachedFormat;
|
|
1486
|
-
const snapshot = await root.capabilities();
|
|
1486
|
+
const snapshot = await root.capabilities(signal ? { signal } : undefined);
|
|
1487
1487
|
const choice = root.negotiateOutputFormat(snapshot);
|
|
1488
1488
|
if (!choice) {
|
|
1489
1489
|
throw new HonuaCapabilityNotSupportedError("query", descriptor.protocol, descriptor.id);
|
|
@@ -1589,7 +1589,7 @@ export function wfsSource(descriptor, client, policy) {
|
|
|
1589
1589
|
// Unfiltered queryExtent: prefer the per-feature-type WGS84BoundingBox
|
|
1590
1590
|
// from GetCapabilities so we avoid an extra HTTP request entirely.
|
|
1591
1591
|
if (!hasExtentFilter(request) && request?.outSr === undefined) {
|
|
1592
|
-
const snapshot = await root.capabilities();
|
|
1592
|
+
const snapshot = await root.capabilities(request?.signal ? { signal: request.signal } : undefined);
|
|
1593
1593
|
const ft = snapshot.featureTypes.find((entry) => entry.name === typeName);
|
|
1594
1594
|
if (ft?.wgs84BoundingBox) {
|
|
1595
1595
|
return { extent: { ...ft.wgs84BoundingBox } };
|
|
@@ -1599,7 +1599,7 @@ export function wfsSource(descriptor, client, policy) {
|
|
|
1599
1599
|
// covers all features the filter resolves to, not just the first
|
|
1600
1600
|
// server-default page. Caller pagination is intentionally ignored —
|
|
1601
1601
|
// queryExtent is a "what bbox holds the matching set" question.
|
|
1602
|
-
const choice = await negotiateJsonOrThrow();
|
|
1602
|
+
const choice = await negotiateJsonOrThrow(request?.signal);
|
|
1603
1603
|
const drainPageSize = 2000;
|
|
1604
1604
|
const extentRequest = toWfsExtentDrainRequest(request);
|
|
1605
1605
|
let xmin = Number.POSITIVE_INFINITY;
|
|
@@ -1614,7 +1614,7 @@ export function wfsSource(descriptor, client, policy) {
|
|
|
1614
1614
|
...extentRequest,
|
|
1615
1615
|
pagination: { offset, limit: drainPageSize },
|
|
1616
1616
|
};
|
|
1617
|
-
const json = await runGetFeatureJson(featureType, choice, featureNamespace, await compileSourceQuery(pageRequest, "query"));
|
|
1617
|
+
const json = await runGetFeatureJson(featureType, choice, featureNamespace, await compileSourceQuery(pageRequest, "query"), request?.signal);
|
|
1618
1618
|
const page = computeExtentFromFeatureCollection(json);
|
|
1619
1619
|
count += page.count;
|
|
1620
1620
|
if (page.extent) {
|
|
@@ -1697,7 +1697,7 @@ export function wfsSource(descriptor, client, policy) {
|
|
|
1697
1697
|
const requestedLimit = request?.pagination?.limit;
|
|
1698
1698
|
if (requestedLimit === 0)
|
|
1699
1699
|
return [];
|
|
1700
|
-
const choice = await negotiateJsonOrThrow();
|
|
1700
|
+
const choice = await negotiateJsonOrThrow(request?.signal);
|
|
1701
1701
|
const limitCap = typeof requestedLimit === "number" && requestedLimit > 0 ? requestedLimit : undefined;
|
|
1702
1702
|
const drainPageSize = 2000;
|
|
1703
1703
|
const ids = [];
|
|
@@ -1712,7 +1712,7 @@ export function wfsSource(descriptor, client, policy) {
|
|
|
1712
1712
|
...idsRequest,
|
|
1713
1713
|
pagination: { offset, limit: pageSize },
|
|
1714
1714
|
};
|
|
1715
|
-
const json = await runGetFeatureJson(featureType, choice, featureNamespace, await compileSourceQuery(pageRequest, "query"));
|
|
1715
|
+
const json = await runGetFeatureJson(featureType, choice, featureNamespace, await compileSourceQuery(pageRequest, "query"), request?.signal);
|
|
1716
1716
|
const collection = json;
|
|
1717
1717
|
const features = collection.features ?? [];
|
|
1718
1718
|
for (const feature of features) {
|
|
@@ -1868,7 +1868,7 @@ function toWfsObjectIdsDrainRequest(request) {
|
|
|
1868
1868
|
* GeoJSON FeatureCollection. The protocol compiler owns filter, projection,
|
|
1869
1869
|
* paging, CRS, and transport selection so legacy drains do not duplicate it.
|
|
1870
1870
|
*/
|
|
1871
|
-
async function runGetFeatureJson(featureType, choice, featureNamespace, compiled) {
|
|
1871
|
+
async function runGetFeatureJson(featureType, choice, featureNamespace, compiled, signal) {
|
|
1872
1872
|
const typePrefix = compiled.typeName.includes(":")
|
|
1873
1873
|
? compiled.typeName.slice(0, compiled.typeName.indexOf(":"))
|
|
1874
1874
|
: undefined;
|
|
@@ -1886,6 +1886,9 @@ async function runGetFeatureJson(featureType, choice, featureNamespace, compiled
|
|
|
1886
1886
|
...(compiled.count !== undefined ? { count: compiled.count } : {}),
|
|
1887
1887
|
...(compiled.startIndex !== undefined && compiled.startIndex > 0 ? { startIndex: compiled.startIndex } : {}),
|
|
1888
1888
|
...(compiled.srsName !== undefined ? { srsName: compiled.srsName } : {}),
|
|
1889
|
+
// The drains (queryExtent / queryObjectIds) issue many pages; every page
|
|
1890
|
+
// must observe the caller's cancellation, not just the first request.
|
|
1891
|
+
...(signal ? { signal } : {}),
|
|
1889
1892
|
};
|
|
1890
1893
|
if (compiled.method === "POST" && compiled.filter !== undefined) {
|
|
1891
1894
|
params.body = buildWfsPostGetFeatureBody({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"esri-geojson.d.ts","sourceRoot":"","sources":["../../../src/core/esri-geojson.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,YAAY,EAKZ,cAAc,EACd,YAAY,EACZ,qBAAqB,EACtB,MAAM,YAAY,CAAC;AA2MpB;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAClE,eAAe,GAAG,IAAI,CA0ExB;AAkBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,cAAc,CAQ1E;AAyBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAC5C,gBAAgB,CAAC,EAAE,qBAAqB,GACvC,YAAY,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"esri-geojson.d.ts","sourceRoot":"","sources":["../../../src/core/esri-geojson.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,YAAY,EAKZ,cAAc,EACd,YAAY,EACZ,qBAAqB,EACtB,MAAM,YAAY,CAAC;AA2MpB;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAClE,eAAe,GAAG,IAAI,CA0ExB;AAkBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,cAAc,CAQ1E;AAyBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,EAC5C,gBAAgB,CAAC,EAAE,qBAAqB,GACvC,YAAY,GAAG,IAAI,CAyCrB"}
|
package/core/esri-geojson.js
CHANGED
|
@@ -333,11 +333,13 @@ export function geoJsonToEsriGeometry(geometry, spatialReference) {
|
|
|
333
333
|
const sr = spatialReference ? { spatialReference } : {};
|
|
334
334
|
switch (geometry.type) {
|
|
335
335
|
case "Point": {
|
|
336
|
-
const [x, y] = geometry.coordinates;
|
|
336
|
+
const [x, y, z] = geometry.coordinates;
|
|
337
337
|
if (typeof x !== "number" || typeof y !== "number") {
|
|
338
338
|
return null;
|
|
339
339
|
}
|
|
340
|
-
|
|
340
|
+
// Keep the altitude of a 3D position: dropping it would hand back a
|
|
341
|
+
// different geometry than the source served.
|
|
342
|
+
return { x, y, ...(typeof z === "number" && Number.isFinite(z) ? { z } : {}), ...sr };
|
|
341
343
|
}
|
|
342
344
|
case "MultiPoint": {
|
|
343
345
|
return { points: geometry.coordinates.map((position) => [...position]), ...sr };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@honua/app-platform",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.14",
|
|
4
4
|
"description": "Honua application-platform surfaces: app-shell, workspace, scene, operator, studio, and hosted-product clients",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"gis",
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
"proj4": "^2.20.9"
|
|
122
122
|
},
|
|
123
123
|
"peerDependencies": {
|
|
124
|
-
"@honua/sdk": "0.1.
|
|
124
|
+
"@honua/sdk": "0.1.14",
|
|
125
125
|
"@bufbuild/protobuf": "^2.0.0",
|
|
126
126
|
"@connectrpc/connect": "^2.0.0",
|
|
127
127
|
"@connectrpc/connect-web": "^2.0.0",
|
|
@@ -66,7 +66,7 @@ export interface OdataDeltaTransportOptions<TFeature = unknown> {
|
|
|
66
66
|
/**
|
|
67
67
|
* Absolute OData entity-set collection URL, e.g.
|
|
68
68
|
* `"https://host/odata/Incidents"`. Every `@odata.nextLink` /
|
|
69
|
-
* `@odata.deltaLink` this transport follows, and any resumed
|
|
69
|
+
* `@odata.deltaLink` and HTTP redirect this transport follows, and any resumed
|
|
70
70
|
* `resumeFrom.deltaToken`, must resolve to this exact origin and path
|
|
71
71
|
* (REQ-002).
|
|
72
72
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odata-delta.d.ts","sourceRoot":"","sources":["../../../src/realtime/odata-delta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAIV,wBAAwB,EAEzB,MAAM,YAAY,CAAC;AAGpB,sFAAsF;AACtF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,6FAA6F;AAC7F,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,8GAA8G;AAC9G,MAAM,WAAW,uBAAuB;IACtC,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uGAAuG;IACvG,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,0BAA0B,CAAC,QAAQ,GAAG,OAAO;IAC5D;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,wFAAwF;IACxF,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,SAAS,CAAC;IAC3D,sHAAsH;IACtH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,QAAQ,CAAC;IAC5D,gGAAgG;IAChG,QAAQ,CAAC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAC/C,iFAAiF;IACjF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,wDAAwD;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;IACjF;;;;;;OAMG;IACH,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC;IACzE,sFAAsF;IACtF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,4EAA4E;IAC5E,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,6FAA6F;IAC7F,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAC/D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;
|
|
1
|
+
{"version":3,"file":"odata-delta.d.ts","sourceRoot":"","sources":["../../../src/realtime/odata-delta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAIV,wBAAwB,EAEzB,MAAM,YAAY,CAAC;AAGpB,sFAAsF;AACtF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,6FAA6F;AAC7F,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,8GAA8G;AAC9G,MAAM,WAAW,uBAAuB;IACtC,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uGAAuG;IACvG,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,0BAA0B,CAAC,QAAQ,GAAG,OAAO;IAC5D;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,6EAA6E;IAC7E,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,wFAAwF;IACxF,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,SAAS,CAAC;IAC3D,sHAAsH;IACtH,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,QAAQ,CAAC;IAC5D,gGAAgG;IAChG,QAAQ,CAAC,YAAY,CAAC,EAAE,sBAAsB,CAAC;IAC/C,iFAAiF;IACjF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,wDAAwD;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;IACjF;;;;;;OAMG;IACH,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC;IACzE,sFAAsF;IACtF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,4EAA4E;IAC5E,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,6FAA6F;IAC7F,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAC/D,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AAQD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,GAAG,OAAO,EAC1D,OAAO,EAAE,0BAA0B,CAAC,QAAQ,CAAC,GAC5C,wBAAwB,CAAC,QAAQ,CAAC,CAoapC"}
|
package/realtime/odata-delta.js
CHANGED
|
@@ -42,6 +42,8 @@ import { realtimeFailure } from "./wire.js";
|
|
|
42
42
|
const DEFAULT_MAX_PAGES_PER_CYCLE = 500;
|
|
43
43
|
const DEFAULT_MAX_SNAPSHOT_ROWS = 50_000;
|
|
44
44
|
const DEFAULT_MAX_CONSECUTIVE_RESNAPSHOTS = 3;
|
|
45
|
+
const MAX_REDIRECTS = 5;
|
|
46
|
+
const REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);
|
|
45
47
|
/**
|
|
46
48
|
* Build a {@link RealtimeFeatureTransport} that polls an OData v4 entity
|
|
47
49
|
* set's delta link. See the module doc for the full recovery/security model.
|
|
@@ -146,17 +148,43 @@ export function createOdataDeltaTransport(options) {
|
|
|
146
148
|
}
|
|
147
149
|
async function fetchOdataDocument(target, trackChanges) {
|
|
148
150
|
const fetchImpl = resolveFetch(options.fetchImpl);
|
|
149
|
-
|
|
150
|
-
if (trackChanges)
|
|
151
|
-
headers.Prefer = "odata.track-changes";
|
|
151
|
+
let currentUrl = target;
|
|
152
152
|
let response;
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
153
|
+
for (let redirects = 0;; redirects += 1) {
|
|
154
|
+
controller.signal.throwIfAborted();
|
|
155
|
+
const headers = { Accept: "application/json", ...(options.headers?.() ?? {}) };
|
|
156
|
+
if (trackChanges)
|
|
157
|
+
headers.Prefer = "odata.track-changes";
|
|
158
|
+
try {
|
|
159
|
+
response = await fetchImpl(currentUrl, {
|
|
160
|
+
method: "GET",
|
|
161
|
+
headers,
|
|
162
|
+
signal: controller.signal,
|
|
163
|
+
redirect: "manual",
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
catch (cause) {
|
|
167
|
+
if (controller.signal.aborted)
|
|
168
|
+
throw cause;
|
|
169
|
+
throw realtimeFailure("transport-gap", "OData delta request failed.", cause);
|
|
170
|
+
}
|
|
171
|
+
if (response.type !== "opaqueredirect" && !REDIRECT_STATUSES.has(response.status))
|
|
172
|
+
break;
|
|
173
|
+
// Release every redirect response before validating or following its destination.
|
|
174
|
+
await response.body?.cancel().catch(() => undefined);
|
|
175
|
+
if (response.type === "opaqueredirect") {
|
|
176
|
+
throw realtimeFailure("invalid-event", "OData delta redirect destination is unavailable; refusing to follow.", undefined);
|
|
177
|
+
}
|
|
178
|
+
if (redirects >= MAX_REDIRECTS) {
|
|
179
|
+
throw realtimeFailure("invalid-event", "OData delta request exceeded the redirect limit.", undefined);
|
|
180
|
+
}
|
|
181
|
+
const location = response.headers.get("Location");
|
|
182
|
+
if (!location) {
|
|
183
|
+
throw realtimeFailure("invalid-event", "OData delta redirect is missing a Location header.", undefined);
|
|
184
|
+
}
|
|
185
|
+
const redirectUrl = parseRelativeOdataUrl(location, currentUrl, "OData delta redirect Location is not a valid URL.");
|
|
186
|
+
assertSameOdataCollection(collectionUrl, redirectUrl);
|
|
187
|
+
currentUrl = redirectUrl.toString();
|
|
160
188
|
}
|
|
161
189
|
if (!response.ok) {
|
|
162
190
|
const body = await safeReadJson(response);
|