feat(provider-contract): define materializable L2 graph blueprints
This commit is contained in:
@@ -146,18 +146,23 @@ value.mappingContracts.push({
|
||||
observedAt: { strategy: "first_non_empty", paths: ["updatedAt"], coerce: "unix_or_iso_timestamp", fallback: "collection_received_at" },
|
||||
geometry: {
|
||||
type: "GeoJSON",
|
||||
strategy: "gelios_geozone_v1",
|
||||
paths: ["type", "points", "line", "radius"],
|
||||
strategy: "bounded_zone_geometry_v1",
|
||||
kindPath: "type",
|
||||
polygonPointsPath: "points",
|
||||
corridorPointsPath: "line",
|
||||
radiusPath: "radius",
|
||||
coordinateOrder: "latitude_longitude",
|
||||
circleSegments: 64,
|
||||
allowedTypes: ["Polygon", "MultiPolygon"],
|
||||
omitIfInvalid: false,
|
||||
},
|
||||
attributes: {
|
||||
area_square_meters: { strategy: "first_non_empty", paths: ["surfaceArea", "surface_area"], coerce: "number", minimum: 0, omitIfInvalid: true },
|
||||
area_square_meters: { strategy: "first_non_empty", paths: ["surfaceArea", "surface_area"], coerce: "number", minimum: 0, omitIfMissing: true, omitIfInvalid: true },
|
||||
description: { strategy: "first_non_empty", paths: ["description", "descr"], coerce: "string", omitIfMissing: true },
|
||||
display_name: { strategy: "first_non_empty", paths: ["name"], coerce: "string" },
|
||||
geometry_kind: { derive: "geometry_kind" },
|
||||
max_speed_kph: { strategy: "first_non_empty", paths: ["maxPermissibleSpeed", "max_permissible_speed"], coerce: "number", minimum: 0, omitIfInvalid: true },
|
||||
perimeter_meters: { strategy: "first_non_empty", paths: ["perimeter"], coerce: "number", minimum: 0, omitIfInvalid: true },
|
||||
max_speed_kph: { strategy: "first_non_empty", paths: ["maxPermissibleSpeed", "max_permissible_speed"], coerce: "number", minimum: 0, omitIfMissing: true, omitIfInvalid: true },
|
||||
perimeter_meters: { strategy: "first_non_empty", paths: ["perimeter"], coerce: "number", minimum: 0, omitIfMissing: true, omitIfInvalid: true },
|
||||
source_kind: { constant: "live_api" },
|
||||
source_revision: { constant: "gelios-rest-v1" },
|
||||
style_color: { strategy: "first_non_empty", paths: ["color"], coerce: "string", omitIfMissing: true },
|
||||
|
||||
@@ -138,7 +138,7 @@ value.collectionProfiles.push({
|
||||
maxCurrentEntities: 5000,
|
||||
onExceed: "require_partitioned_data_product",
|
||||
},
|
||||
retry: { maxAttempts: 4, backoff: "exponential_with_jitter" },
|
||||
retry: { maxAttempts: 4, backoff: "fixed_delay", delayMs: 2000 },
|
||||
});
|
||||
|
||||
value.dataProducts.push({
|
||||
@@ -232,6 +232,13 @@ value.l2Templates.push({
|
||||
],
|
||||
});
|
||||
|
||||
// The target Engine runtime materializes bounded fixed-delay retries exactly.
|
||||
// v8 therefore avoids promising a backoff algorithm that n8n cannot execute.
|
||||
value.collectionProfiles = value.collectionProfiles.map((profile) => ({
|
||||
...profile,
|
||||
retry: { maxAttempts: 4, backoff: "fixed_delay", delayMs: 2000 },
|
||||
}));
|
||||
|
||||
export const geliosProviderPackageV8 = deepFreeze(value);
|
||||
|
||||
function optional(type) {
|
||||
|
||||
Reference in New Issue
Block a user