@geolens/sdk 1.18.1 → 1.19.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.
@@ -216,7 +216,7 @@ export const bulkRevokeAdminEmbedTokensBulkRevokePost = (options) => (options.cl
216
216
  /**
217
217
  * Get Embedding Stats
218
218
  *
219
- * Return semantic-search embedding coverage statistics (admin only).
219
+ * Return embedding coverage and the state of the backfill runs (admin only).
220
220
  */
221
221
  export const getEmbeddingStatsAdminEmbeddingStatsGet = (options) => (options?.client ?? client).get({
222
222
  security: [
@@ -572,7 +572,7 @@ export const resetUserPasswordAdminUsersUserIdResetPasswordPost = (options) => (
572
572
  /**
573
573
  * Ai Availability Endpoint
574
574
  *
575
- * Report whether builder AI chat is usable (builder-audit #338 P1-11).
575
+ * Report whether builder AI chat is usable (#338).
576
576
  *
577
577
  * Permission-gated on ``use_ai_chat`` so non-admin editors (who cannot read
578
578
  * ``/admin/ai-status``) can learn availability. Returns ``available=false``
@@ -802,14 +802,14 @@ export const generateMetadataSummaryAiMetadataSummaryPost = (options) => (option
802
802
  *
803
803
  * Return the column-DDL audit history for a dataset.
804
804
  *
805
- * SEC-FU-08: Surfaces the column-DDL events written by SEC-S03 (Phase 1061)
806
- * to dataset owners so they can detect editor-initiated schema changes.
805
+ * Surfaces the column-DDL events to dataset owners so they can detect
806
+ * editor-initiated schema changes.
807
807
  *
808
808
  * Access control (AGENTS.md Pre-Commit Checklist Rule 1):
809
809
  * - Owner: 200 with their own dataset's DDL history
810
810
  * - Admin: 200 (admin access is always allowed)
811
811
  * - Anyone else — including authenticated readers of a PUBLIC dataset: 404
812
- * via check_dataset_write_access. fix(#458 E-37): the feed previously used
812
+ * via check_dataset_write_access. fix(#458): the feed previously used
813
813
  * check_dataset_access (read visibility), which let any logged-in user
814
814
  * enumerate editor usernames/user_ids on public datasets, contradicting
815
815
  * this owner-facing contract.
@@ -924,7 +924,7 @@ export const configAuthConfigGet = (options) => (options?.client ?? client).get(
924
924
  *
925
925
  * Mint a short-lived download-scoped JWT for a single dataset.
926
926
  *
927
- * IA-P0-01 / SEC-04: the existing COG download URL path requires a
927
+ * The COG download URL path requires a
928
928
  * ``typ='download'`` JWT on the ``?token=`` query parameter — session JWTs
929
929
  * are rejected. This endpoint issues that token after verifying the caller
930
930
  * has read access to the dataset.
@@ -969,7 +969,7 @@ export const loginAuthLoginPost = (options) => (options.client ?? client).post({
969
969
  *
970
970
  * Revoke all refresh tokens and bump token_version for the current user.
971
971
  *
972
- * SEC-S15 (Phase 1062-01): revoke_all_tokens bumps User.token_version so the
972
+ * revoke_all_tokens bumps User.token_version so the
973
973
  * access JWT used for this logout call (and any other outstanding access JWTs)
974
974
  * are rejected on the next authenticated request — closing the
975
975
  * "logout doesn't invalidate the access JWT" gap.
@@ -1067,7 +1067,7 @@ export const listPublicProvidersAuthOauthProvidersGet = (options) => (options?.c
1067
1067
  *
1068
1068
  * Handle IdP callback: exchange code, find/create user, issue JWT, redirect to frontend.
1069
1069
  *
1070
- * Phase 268 H-27: the frontend redirect carries access tokens in the URL
1070
+ * The frontend redirect carries access tokens in the URL
1071
1071
  * fragment. Without explicit-config resolution, an attacker controlling
1072
1072
  * ``X-Forwarded-Host`` could steer the post-callback redirect to
1073
1073
  * attacker.com and capture the tokens. Force explicit-config resolution
@@ -1079,7 +1079,7 @@ export const oauthCallbackAuthOauthProviderSlugCallbackGet = (options) => (optio
1079
1079
  *
1080
1080
  * Redirect user to the IdP authorization URL with PKCE parameters.
1081
1081
  *
1082
- * Phase 268 H-27: the redirect_uri is handed to the IdP, where an
1082
+ * The redirect_uri is handed to the IdP, where an
1083
1083
  * attacker-controlled origin (via ``X-Forwarded-Host``) would otherwise
1084
1084
  * enable auth-code theft. We force explicit-config resolution by
1085
1085
  * passing ``for_external_use=True``; falling back to the request-origin
@@ -1130,7 +1130,7 @@ export const registerAuthRegisterPost = (options) => (options.client ?? client).
1130
1130
  *
1131
1131
  * Re-issue and re-send a verification email.
1132
1132
  *
1133
- * SIGNUP-05 / T-1231-05 (enumeration-safe): ALWAYS returns the same 200 body
1133
+ * Enumeration-safe: ALWAYS returns the same 200 body
1134
1134
  * regardless of whether the email exists, is unknown, or is already verified.
1135
1135
  * Send errors are logged server-side only and never branch the HTTP response.
1136
1136
  */
@@ -1147,12 +1147,12 @@ export const resendVerificationAuthResendVerificationPost = (options) => (option
1147
1147
  *
1148
1148
  * Redeem a verification token to activate the account.
1149
1149
  *
1150
- * SIGNUP-03: a valid single-use expiring token flips email_verified=True,
1150
+ * A valid single-use expiring token flips email_verified=True,
1151
1151
  * is_active=True, and status="active" so the user can log in via the
1152
1152
  * existing auth gate in dependencies.py.
1153
1153
  *
1154
1154
  * Expired, unknown, and already-consumed tokens all return the same
1155
- * "Invalid or expired" error (enumeration-safe, SIGNUP-05 / T-1231-06).
1155
+ * "Invalid or expired" error (enumeration-safe).
1156
1156
  */
1157
1157
  export const verifyEmailAuthVerifyEmailPost = (options) => (options.client ?? client).post({
1158
1158
  url: '/auth/verify-email/',
@@ -1526,7 +1526,7 @@ export const dryRunConfigurationConfigOpsDryRunPost = (options) => (options.clie
1526
1526
  * Returns a downloadable JSON payload with Content-Disposition header. This is a
1527
1527
  * file-download endpoint — the previous ``response_model=ConfigExportResponse``
1528
1528
  * was silently ignored because the handler returns a raw JSONResponse with custom
1529
- * headers (TYPE-N3). Using ``response_class=JSONResponse`` is the correct way to
1529
+ * headers. Using ``response_class=JSONResponse`` is the correct way to
1530
1530
  * document a download endpoint in OpenAPI.
1531
1531
  */
1532
1532
  export const exportConfigurationConfigOpsExportGet = (options) => (options?.client ?? client).get({
@@ -2092,7 +2092,7 @@ export const validateDcat3RecordDatasetsDatasetIdDcatValidationGet = (options) =
2092
2092
  * S3 storage: returns a 302 redirect to a presigned GET URL (1-hour expiry).
2093
2093
  * Accepts standard auth or ?token= JWT query parameter for browser downloads.
2094
2094
  *
2095
- * KNOWN-01 (Phase 1071): ``user`` may be None when a no-sub anonymous
2095
+ * ``user`` may be None when a no-sub anonymous
2096
2096
  * download token (issued by POST /auth/download-token/{id} for a public
2097
2097
  * dataset) is presented on ``?token=``. The function branches on
2098
2098
  * user-None to enforce public visibility and emit the audit row with
@@ -2140,7 +2140,7 @@ export const exportDatasetEndpointDatasetsDatasetIdExportGet = (options) => (opt
2140
2140
  * Return up to 5,000 features as RFC 7946 GeoJSON with Z coordinates.
2141
2141
  *
2142
2142
  * fix(#394) codex P2: the viewer's bounded-GeoJSON path (small 3D layers,
2143
- * eligible cluster layers) already sends ``X-Embed-Token``, and the B-023
2143
+ * eligible cluster layers) already sends ``X-Embed-Token``, and the
2144
2144
  * shared-map union now exposes embed-scoped private layers to embeds — so
2145
2145
  * this endpoint accepts the token as fallback authorization via the SAME
2146
2146
  * ``validate_embed_token_access`` capability check as tile serving.
@@ -2175,7 +2175,7 @@ export const getFeaturesGeojsonZEndpointDatasetsDatasetIdFeaturesGeojsonGet = (o
2175
2175
  *
2176
2176
  * Get paginated GeoJSON features for a dataset.
2177
2177
  *
2178
- * Pagination is OFFSET-based (fix(#458 E-40), documented limitation): rows can
2178
+ * Pagination is OFFSET-based (fix(#458), documented limitation): rows can
2179
2179
  * skip or duplicate across pages under concurrent writes, though feature ids
2180
2180
  * stay stable (ORDER BY gid, the primary key). Clients that need stable
2181
2181
  * cursoring should use the OGC API Features endpoint, which supports keyset
@@ -2508,7 +2508,7 @@ export const listRelatedDatasetsDatasetsDatasetIdRelatedGet = (options) => (opti
2508
2508
  * Paginated via ``skip`` and ``limit`` to bound response size for datasets
2509
2509
  * with large numbers of auto-detected relationships. Returns the standard
2510
2510
  * list envelope (``relationships`` + ``total``) so callers can detect whether
2511
- * more pages exist (GAP-033); ``total`` counts the visible relationships before
2511
+ * more pages exist; ``total`` counts the visible relationships before
2512
2512
  * pagination.
2513
2513
  */
2514
2514
  export const listDatasetRelationshipsDatasetsDatasetIdRelationshipsGet = (options) => (options.client ?? client).get({
@@ -3074,7 +3074,7 @@ export const registerTableIngestRegisterPost = (options) => (options.client ?? c
3074
3074
  * Each table is registered independently -- one failure does not block
3075
3075
  * others. Tables are processed in parallel via ``asyncio.gather`` with
3076
3076
  * a fresh session per task, which keeps transaction isolation while
3077
- * removing the sequential per-table latency (PERF-3).
3077
+ * removing the sequential per-table latency.
3078
3078
  */
3079
3079
  export const bulkRegisterTablesIngestRegisterBulkPost = (options) => (options.client ?? client).post({
3080
3080
  security: [
@@ -3184,16 +3184,23 @@ export const completePresignedUploadIngestUploadPresignedJobIdCompletePost = (op
3184
3184
  /**
3185
3185
  * Upload From Url
3186
3186
  *
3187
- * Import a geospatial file from an HTTP(S) URL for staging.
3187
+ * Start importing a geospatial file from an HTTP(S) URL.
3188
3188
  *
3189
3189
  * feat(#1705): the URL variant of ``POST /ingest/upload`` — NOT a new
3190
3190
  * source type. The server fetches the file itself and the staged bytes
3191
- * enter the normal pipeline unchanged (preview commit). Rule 2 posture:
3192
- * ``validate_url_for_ssrf`` gates the URL at submission, the download runs
3193
- * through ``make_safe_client()`` (connect-time IP pinning plus per-hop
3194
- * redirect revalidation), the size cap is enforced while streaming, the
3195
- * staged file passes the same extension allowlist and content sniff as a
3196
- * direct upload, and GDAL only ever sees the staged local file.
3191
+ * enter the normal pipeline unchanged (preview then commit).
3192
+ *
3193
+ * feat(#1710): the download is a background job. This call validates the
3194
+ * URL and returns a job id immediately; poll ``GET /jobs/{job_id}`` and
3195
+ * preview once the job reaches ``pending``. While the file is downloading
3196
+ * the job reports status ``running`` with step ``downloading``.
3197
+ *
3198
+ * Rule 2 posture: ``validate_url_for_ssrf`` gates the URL here, the worker
3199
+ * downloads through ``make_safe_client()`` (connect-time IP pinning plus
3200
+ * per-hop redirect revalidation), the size cap is enforced while
3201
+ * streaming, the staged file passes the same extension allowlist and
3202
+ * content sniff as a direct upload, and GDAL only ever sees the staged
3203
+ * local file.
3197
3204
  */
3198
3205
  export const uploadFromUrlIngestUploadUrlPost = (options) => (options.client ?? client).post({
3199
3206
  security: [
@@ -3245,7 +3252,7 @@ export const createVrtIngestVrtCreatePost = (options) => (options.client ?? clie
3245
3252
  *
3246
3253
  * Validates the new source against existing sources synchronously.
3247
3254
  * Returns 202 Accepted with a job_id for polling.
3248
- * Returns 409 if the VRT is currently regenerating (SRC-05) or source already linked.
3255
+ * Returns 409 if the VRT is currently regenerating or the source is already linked.
3249
3256
  * Returns 422 if the source is incompatible with existing sources.
3250
3257
  */
3251
3258
  export const addVrtSourceIngestVrtDatasetIdSourcesPost = (options) => (options.client ?? client).post({
@@ -3271,7 +3278,7 @@ export const addVrtSourceIngestVrtDatasetIdSourcesPost = (options) => (options.c
3271
3278
  * Remove a COG source from an existing VRT and trigger async regeneration.
3272
3279
  *
3273
3280
  * Returns 202 Accepted with a job_id for polling.
3274
- * Returns 409 if the VRT is currently regenerating (SRC-05).
3281
+ * Returns 409 if the VRT is currently regenerating.
3275
3282
  * Returns 422 if removing would leave fewer than 2 sources.
3276
3283
  * Returns 404 if the source is not linked to the VRT.
3277
3284
  */
@@ -3522,7 +3529,7 @@ export const renameColumnEndpointLayersDatasetIdColumnsColumnNameNamePatch = (op
3522
3529
  *
3523
3530
  * Count saved maps whose layer config references a column.
3524
3531
  *
3525
- * fix(#458 E-06): surfaced in the schema editor before a rename/drop so the
3532
+ * fix(#458): surfaced in the schema editor before a rename/drop so the
3526
3533
  * editor knows how many saved maps depend on the column. Count only — map
3527
3534
  * titles may belong to other users and are not exposed here.
3528
3535
  */
@@ -3653,7 +3660,7 @@ export const uploadMapIconEndpointMapsIconsPost = (options) => (options.client ?
3653
3660
  *
3654
3661
  * Serve an uploaded or bundled icon asset by stable icon ID.
3655
3662
  *
3656
- * SEC-01 / M-63: SVG responses carry Content-Security-Policy
3663
+ * SVG responses carry Content-Security-Policy
3657
3664
  * ``default-src 'none'; sandbox`` so an uploaded SVG cannot fetch other
3658
3665
  * origins, run scripts, or read auth cookies even if validation is bypassed
3659
3666
  * in the future. Browsers (Chromium, Firefox) honor the sandbox directive on
@@ -3666,8 +3673,7 @@ export const getMapIconAssetEndpointMapsIconsIconIdAssetGet = (options) => (opti
3666
3673
  *
3667
3674
  * Import a MapLibre style JSON document into a new GeoLens map.
3668
3675
  *
3669
- * API-01 (M-05): the request body is now a typed Pydantic model instead of
3670
- * a bare ``dict``. ``MapStyleImportRequest`` mirrors the MapLibre style
3676
+ * The request body is a typed Pydantic model rather than a bare ``dict``. ``MapStyleImportRequest`` mirrors the MapLibre style
3671
3677
  * spec top-level keys with ``extra="allow"``, so existing payloads keep
3672
3678
  * working byte-identically while the OpenAPI schema gains a named class
3673
3679
  * and the auto-generated SDKs stop emitting an opaque ``Mapping[str, Any]``
@@ -3695,14 +3701,14 @@ export const importMapStyleEndpointMapsImportPost = (options) => (options.client
3695
3701
  *
3696
3702
  * Get a shared map by token. Optionally authenticated for non-public layers.
3697
3703
  *
3698
- * SEC-S08 (Phase 1062-05): emits ``Content-Security-Policy: frame-ancestors
3704
+ * Emits ``Content-Security-Policy: frame-ancestors
3699
3705
  * 'self' [<allowed_origins>...]`` on the response, derived from the active
3700
3706
  * EmbedToken for this map. When no EmbedToken exists or allowed_origins is
3701
3707
  * empty, defaults to ``frame-ancestors 'self'``. The SecurityHeadersMiddleware
3702
3708
  * respects this route-level CSP and skips emitting X-Frame-Options: DENY.
3703
3709
  *
3704
- * fix(#394) SH-01/B-023: accepts ``X-Embed-Token`` so embed viewers get the
3705
- * layers the token's scope authorizes (SEC-022 capability posture).
3710
+ * fix(#394): accepts ``X-Embed-Token`` so embed viewers get the layers the
3711
+ * token's scope authorizes, as a capability rather than a role.
3706
3712
  */
3707
3713
  export const getSharedMapEndpointMapsSharedTokenGet = (options) => (options.client ?? client).get({
3708
3714
  security: [
@@ -3931,14 +3937,14 @@ export const getMapHistoryEndpointMapsMapIdHistoryGet = (options) => (options.cl
3931
3937
  *
3932
3938
  * Apply incremental layer additions, patches, removals, and ordering.
3933
3939
  *
3934
- * v13.14 fixup: declared on both slash variants directly (mirrors the
3935
- * Phase 280 fix on POST). FastAPI's default redirect_slashes builds a
3936
- * relative Location header that resolves against the request's Host
3937
- * header, which would leak the in-container ``api:8000`` hostname
3938
- * through Vite's dev proxy on a 307 redirect. The canonical
3939
- * (OpenAPI-published) form is the no-slash sub-collection convention
3940
- * documented in the GeoLens API guide (https://docs.getgeolens.com/guides/api/);
3941
- * the trailing-slash form is a hidden alias.
3940
+ * Declared on both slash variants directly, mirroring the POST route
3941
+ * below. FastAPI's default redirect_slashes builds a relative Location
3942
+ * header that resolves against the request's Host header, which would
3943
+ * leak the in-container ``api:8000`` hostname through Vite's dev proxy
3944
+ * on a 307 redirect. The canonical (OpenAPI-published) form is the
3945
+ * no-slash sub-collection convention documented in the GeoLens API guide
3946
+ * (https://docs.getgeolens.com/guides/api/); the trailing-slash form is
3947
+ * a hidden alias.
3942
3948
  */
3943
3949
  export const patchMapLayersEndpointMapsMapIdLayersPatch = (options) => (options.client ?? client).patch({
3944
3950
  security: [
@@ -3962,9 +3968,9 @@ export const patchMapLayersEndpointMapsMapIdLayersPatch = (options) => (options.
3962
3968
  *
3963
3969
  * Add a layer to a map.
3964
3970
  *
3965
- * Phase 280: declared on both slash variants directly so neither emits a
3966
- * 307. FastAPI's default redirect_slashes builds a relative Location
3967
- * header that resolves against the request's Host header, leaking the
3971
+ * Declared on both slash variants directly so neither emits a 307.
3972
+ * FastAPI's default redirect_slashes builds a relative Location header
3973
+ * that resolves against the request's Host header, leaking the
3968
3974
  * in-container ``api:8000`` hostname through Vite's dev proxy. The
3969
3975
  * canonical (OpenAPI-published) form is the no-slash sub-collection
3970
3976
  * convention documented in the GeoLens API guide
@@ -3993,9 +3999,8 @@ export const addLayerEndpointMapsMapIdLayersPost = (options) => (options.client
3993
3999
  *
3994
4000
  * Batch-delete multiple layers from a map in a single request.
3995
4001
  *
3996
- * Milestone exception (v1010 Phase 1047): one additive endpoint permitted
3997
- * per REQUIREMENTS.md Out-of-Scope to reduce N sequential DELETEs to one
3998
- * batched call for bulk-delete UX (PB-03 / PERF-03).
4002
+ * One additive endpoint that reduces N sequential DELETEs to a single
4003
+ * batched call for bulk-delete UX.
3999
4004
  *
4000
4005
  * Returns 200 with deleted/failed arrays in all cases (partial failures
4001
4006
  * surface inline, not as HTTP errors). Full rollback is the caller's
@@ -4068,7 +4073,7 @@ export const getOgImageMapsMapIdOgImageGet = (options) => (options.client ?? cli
4068
4073
  * ``maps/og-images/{map_id}.{ext}``, and persists the storage key to
4069
4074
  * ``catalog.maps.og_image_uri``.
4070
4075
  *
4071
- * Intended for 1200x630 JPEG captures (SHARE-08). The payload cap
4076
+ * Intended for 1200x630 JPEG captures. The payload cap
4072
4077
  * (750KB) is larger than the thumbnail cap (100KB) to accommodate the
4073
4078
  * larger canvas export — they are separate schemas (OgImageUploadRequest
4074
4079
  * vs ThumbnailUploadRequest) to avoid relaxing the locked thumbnail
@@ -4242,7 +4247,7 @@ export const uploadThumbnailMapsMapIdThumbnailPut = (options) => (options.client
4242
4247
  * Owner-or-admin like the other sharing mutations: the response names
4243
4248
  * non-public dataset titles, which read access alone must not reveal.
4244
4249
  * Read access is checked first so unreadable maps keep answering 404
4245
- * (SEC-007 existence-hiding); readable non-owners get 403.
4250
+ * (existence-hiding); readable non-owners get 403.
4246
4251
  */
4247
4252
  export const visibilityCheckEndpointMapsMapIdVisibilityCheckGet = (options) => (options.client ?? client).get({
4248
4253
  security: [
@@ -4824,6 +4829,8 @@ export const probeServiceUrlServicesProbePost = (options) => (options.client ??
4824
4829
  * Stac Collections
4825
4830
  *
4826
4831
  * List collections from a connected STAC API.
4832
+ *
4833
+ * Accepts a credential for a protected catalog, applied to this call.
4827
4834
  */
4828
4835
  export const stacCollectionsServicesStacCollectionsPost = (options) => (options.client ?? client).post({
4829
4836
  security: [
@@ -4846,6 +4853,8 @@ export const stacCollectionsServicesStacCollectionsPost = (options) => (options.
4846
4853
  * Stac Connect
4847
4854
  *
4848
4855
  * Connect to a STAC API and validate the endpoint.
4856
+ *
4857
+ * Accepts a credential for a protected catalog, applied to this call.
4849
4858
  */
4850
4859
  export const stacConnectServicesStacConnectPost = (options) => (options.client ?? client).post({
4851
4860
  security: [
@@ -4894,6 +4903,8 @@ export const stacImportServicesStacImportPost = (options) => (options.client ??
4894
4903
  * Stac Search
4895
4904
  *
4896
4905
  * Search items in a STAC API with spatial/temporal filters.
4906
+ *
4907
+ * Accepts a credential for a protected catalog, applied to this call.
4897
4908
  */
4898
4909
  export const stacSearchServicesStacSearchPost = (options) => (options.client ?? client).post({
4899
4910
  security: [
@@ -4979,7 +4990,7 @@ export const getApiKeyStatusSettingsApiKeyStatusGet = (options) => (options?.cli
4979
4990
  * configured. When a key IS set the placeholder is resolved server-side.
4980
4991
  * The response uses ``BasemapPublicResponse`` which excludes ``api_key``.
4981
4992
  *
4982
- * SEC-S10 (2026-05-20 audit): the resolved ``url`` field intentionally
4993
+ * The resolved ``url`` field intentionally
4983
4994
  * includes the substituted ``api_key`` value when configured. Client-side
4984
4995
  * tile-provider keys (Mapbox, Stadia, MapTiler) are designed for browser
4985
4996
  * exposure and the frontend MUST receive them to load tiles. Do NOT put a
@@ -5077,7 +5088,7 @@ export const getMapDefaultsSettingsMapDefaultsGet = (options) => (options?.clien
5077
5088
  *
5078
5089
  * Mirrors get_api_key_status: returns presence flags derived from env/settings
5079
5090
  * without ever echoing the SMTP password, webhook URL, or webhook secret
5080
- * (NOTIF-05 / T-1229-09).
5091
+ * without secrets.
5081
5092
  */
5082
5093
  export const getNotificationStatusSettingsNotificationsStatusGet = (options) => (options?.client ?? client).get({
5083
5094
  security: [
@@ -5099,7 +5110,7 @@ export const getNotificationStatusSettingsNotificationsStatusGet = (options) =>
5099
5110
  *
5100
5111
  * Mirrors detect_embedding_dims: admin-gated probe that reports per-channel
5101
5112
  * reachable/error in a 200 body without leaking secrets or raising 5xx on a
5102
- * bad channel (NOTIF-06 / T-1229-08 / T-1229-09 / T-1229-10).
5113
+ * bad channel.
5103
5114
  *
5104
5115
  * Per-channel approach (not EnvConfiguredNotificationSink.deliver) is used so
5105
5116
  * each channel's success/failure is captured in its own
@@ -5143,7 +5154,7 @@ export const listOauthProvidersSettingsOauthProvidersGet = (options) => (options
5143
5154
  *
5144
5155
  * Audit-log payload includes the full ``created`` snapshot with non-secret
5145
5156
  * fields verbatim and ``<redacted>`` markers for secrets that were submitted
5146
- * in the request body (SAML-12 / Pitfall 9 / T-217-03-AUDIT-LEAK).
5157
+ * in the request body.
5147
5158
  */
5148
5159
  export const createOauthProviderSettingsOauthProvidersPost = (options) => (options.client ?? client).post({
5149
5160
  security: [
@@ -5169,8 +5180,7 @@ export const createOauthProviderSettingsOauthProvidersPost = (options) => (optio
5169
5180
  *
5170
5181
  * Audit-log payload contains a ``deleted`` snapshot with the pre-delete
5171
5182
  * state — non-secret fields verbatim, secret fields marked ``<redacted>``
5172
- * if they were previously set (T-217-03-AUDIT-LEAK mitigation extends to
5173
- * delete events too).
5183
+ * if they were previously set; the same redaction applies to delete events.
5174
5184
  */
5175
5185
  export const deleteOauthProviderSettingsOauthProvidersProviderIdDelete = (options) => (options.client ?? client).delete({
5176
5186
  security: [
@@ -5193,8 +5203,7 @@ export const deleteOauthProviderSettingsOauthProvidersProviderIdDelete = (option
5193
5203
  * Audit-log payload contains ``details.changes`` with per-field
5194
5204
  * ``{"old": ..., "new": ...}`` diffs. Secret fields (idp_certificate,
5195
5205
  * client_secret_encrypted, client_secret) are redacted as
5196
- * ``{"old": "<redacted>", "new": "<redacted>"}`` (Pitfall 9 / SAML-12 /
5197
- * T-217-03-AUDIT-LEAK HIGH severity).
5206
+ * ``{"old": "<redacted>", "new": "<redacted>"}``.
5198
5207
  */
5199
5208
  export const updateOauthProviderSettingsOauthProvidersProviderIdPut = (options) => (options.client ?? client).put({
5200
5209
  security: [
@@ -5362,17 +5371,40 @@ export const searchPostStacSearchPost = (options) => (options.client ?? client).
5362
5371
  /**
5363
5372
  * Cluster Tile Endpoint
5364
5373
  *
5365
- * Serve a server-side clustered vector tile for point datasets.
5366
- *
5367
- * URL pattern: /tiles/clusters/data.{table_name}/{z}/{x}/{y}.pbf
5368
- *
5369
- * This route deliberately reuses the normal vector tile auth model:
5370
- * public datasets are readable directly, non-public datasets require either
5371
- * valid HMAC tile params or a valid embed token scoped to the dataset.
5372
- *
5373
- * fix(#403): `cols` mirrors the vector endpoint's runtime column opt-in;
5374
- * the columns are projected onto UNCLUSTERED features so data-driven
5375
- * styling and popups keep working on the server-cluster path.
5374
+ * Serve a server-side clustered vector tile for a point dataset.
5375
+ *
5376
+ * URL pattern: ``/tiles/clusters/data.{table_name}/{z}/{x}/{y}.pbf``
5377
+ *
5378
+ * Authorization matches the plain vector tile route, in three cases. A
5379
+ * public, published dataset is readable without credentials. A non-public
5380
+ * dataset needs either valid signature parameters (``sig``, ``exp``,
5381
+ * ``scope``) or an embed token scoped to it, and answers 403 without one. A
5382
+ * public dataset that is not yet published is readable by its owner, by an
5383
+ * admin, with an embed token, or with valid signature parameters, and answers
5384
+ * 404 to other callers, so a refusal keeps its existence undisclosed. An
5385
+ * unknown table is 404 too.
5386
+ *
5387
+ * A request that no capability authorized and that carried a credential which
5388
+ * did not resolve is refused with 401 rather than served as an anonymous
5389
+ * read, so an expired token is rejected instead of being silently downgraded.
5390
+ * A request sending no credential is served normally.
5391
+ *
5392
+ * ``cluster_radius`` is a screen-pixel distance, the same units MapLibre's
5393
+ * ``clusterRadius`` uses, and ``cluster_max_zoom`` is the last zoom at which
5394
+ * features are grouped. ``cols`` works as it does on the vector route, and
5395
+ * the named columns are projected onto the unclustered features, so
5396
+ * data-driven styling and popups keep working here too.
5397
+ *
5398
+ * Requires a vector point dataset; another record type responds 400, as does
5399
+ * a malformed table path or an out-of-range tile coordinate.
5400
+ *
5401
+ * A tile holding no features answers 204, and a repeat request whose
5402
+ * ``If-None-Match`` matches answers 304. Where a deployment runs cold storage,
5403
+ * a dataset still being restored answers 202 with a job id to poll. Three
5404
+ * cases answer 429 with ``Retry-After``: waiting past the tile pool's
5405
+ * connection budget, a tile query that outruns the pool's per-command
5406
+ * timeout, and exceeding a configured per-tenant concurrency limit. Any other
5407
+ * failure serving the tile answers 503.
5376
5408
  */
5377
5409
  export const clusterTileEndpointTilesClustersTablePathZXYPbfGet = (options) => (options.client ?? client).get({
5378
5410
  security: [
@@ -5390,39 +5422,46 @@ export const clusterTileEndpointTilesClustersTablePathZXYPbfGet = (options) => (
5390
5422
  /**
5391
5423
  * Raster Tile Proxy
5392
5424
  *
5393
- * API-side raster tile proxy: auth check + fetch from Titiler.
5394
- *
5395
- * Used by Vite dev proxy and as a fallback for deployments without nginx.
5396
- * Production deployments with nginx should use the nginx raster-tiles path
5397
- * for better caching and performance.
5398
- *
5399
- * colormap_name: Optional Titiler colormap for single-band display. Validated
5400
- * against _ALLOWED_COLORMAPS (T-1140-01). Gray is the Titiler default for
5401
- * single-band passing gray is a no-op (not forwarded). colormap_name is not
5402
- * forwarded for DEM layers (render_params starts with 'algorithm=').
5403
- *
5404
- * stretch: Optional stretch strategy. percentile/stddev compute a stats-based
5405
- * rescale from Titiler band statistics. Multi-band rasters produce one rescale=
5406
- * fragment per band (up to 3, RASTER-STRETCH-03).
5407
- *
5408
- * pmin/pmax: Configurable percentile clip bounds (default 2/98), read and
5409
- * validated (0 <= pmin < pmax <= 100) only when stretch=percentile. Forwarded
5410
- * as repeated p= params to /cog/statistics. The _band_stats_cache key includes
5411
- * pmin/pmax so different bounds never serve stale cached stats
5412
- * (RASTER-STRETCH-UI-01 / Phase 1153 cache-key isolation).
5413
- *
5414
- * sigma: Standard-deviation multiplier for stretch=stddev (default 2.0), read
5415
- * and validated (> 0) only when stretch=stddev.
5416
- *
5417
- * fix(#1778 codex r2): pmin/pmax/sigma used to be validated whenever present,
5418
- * regardless of the active stretch mode, so an "inactive" value could still
5419
- * 422. frontend/nginx.conf's raster proxy_cache_key blanks an inactive value
5420
- * out of the cache key to stop it defeating the cache; making that safe on
5421
- * every input (including a repeated query parameter, where nginx's $arg_x
5422
- * reads the FIRST occurrence and this endpoint's scalar Query reads the
5423
- * LAST) needs "inactive" to mean the SAME thing on both sides: ignored, not
5424
- * merely unvalidated for some inputs. A cache HIT must never disagree with
5425
- * what an uncached request would answer.
5425
+ * Render one raster tile and return the image.
5426
+ *
5427
+ * Returns the image itself rather than a redirect: the dataset is
5428
+ * authorized, then the rendered tile comes back in the response body. Used by
5429
+ * the development proxy and by deployments that run without nginx in front.
5430
+ *
5431
+ * ``colormap_name`` applies a colormap to a single-band raster. Passing
5432
+ * ``gray`` leaves the rendering unchanged, and a digital elevation model
5433
+ * ignores the parameter, because its terrain encoding cannot be recoloured.
5434
+ *
5435
+ * ``stretch`` chooses how pixel values map to the output range. ``minmax``
5436
+ * keeps the range the dataset already implies: the recorded per-band minimum
5437
+ * and maximum for a raster imported from a remote source that published
5438
+ * statistics, a range derived from the data type for most others, and no
5439
+ * rescale parameter for 8-bit data, which needs none. ``percentile`` and
5440
+ * ``stddev`` instead derive a range from band statistics read at request
5441
+ * time, for up to three bands. A digital elevation model ignores the
5442
+ * parameter, and so does a request whose band statistics cannot be read,
5443
+ * which falls back to ``minmax`` rather than failing.
5444
+ *
5445
+ * ``pmin`` and ``pmax`` (2 and 98 by default) are read when ``stretch`` is
5446
+ * ``percentile``, and ``sigma`` (2.0 by default) when it is ``stddev``. A
5447
+ * parameter that does not apply to the selected stretch is ignored, and its
5448
+ * default is used in place of the value sent.
5449
+ *
5450
+ * Responds 204 when the tile falls outside the raster, 400 for an
5451
+ * unsupported format, 401 when authentication is required, or when a request
5452
+ * that no capability authorized carried a credential which did not resolve,
5453
+ * 403 when the embed token is invalid or expired
5454
+ * or a multi-tenant request arrives with no tenant context, 422 for an
5455
+ * out-of-range stretch parameter, and 503 when the renderer cannot be
5456
+ * reached. A different failure from the renderer is passed through with its
5457
+ * own status.
5458
+ *
5459
+ * 404 covers more than a missing dataset. A dataset that is unknown, is not a
5460
+ * raster or has no image answers 404. Where no capability authorized the
5461
+ * request, so does a dataset the caller may not read: an authorization denial
5462
+ * on a non-public raster, and an unpublished raster asked for by a caller who
5463
+ * is neither its owner nor an admin. That is deliberate, so a refusal keeps a
5464
+ * dataset's existence undisclosed.
5426
5465
  */
5427
5466
  export const rasterTileProxyTilesRasterProxyDatasetIdZXYFmtGet = (options) => (options.client ?? client).get({
5428
5467
  security: [
@@ -5466,20 +5505,26 @@ export const getTileTokenTilesTokenDatasetIdGet = (options) => (options.client ?
5466
5505
  /**
5467
5506
  * Get Tile Tokens Batch
5468
5507
  *
5469
- * Batch-generate tile tokens for up to 50 datasets in one request.
5508
+ * Generate tile tokens for up to 50 datasets in one request.
5470
5509
  *
5471
- * Optimization for multi-layer maps: a 20-layer builder map previously
5472
- * fired 20 parallel GET /token/{id}/ requests (20 HTTP + 20 RBAC + 20 HMAC
5473
- * signatures). This endpoint does the same work in a single round trip
5474
- * with one DB query for dataset metadata (PERF-N5).
5510
+ * The list must hold between 1 and 50 ids, and a request outside that is 422.
5475
5511
  *
5476
- * Per-dataset errors (404, 403) do not fail the batch instead the
5477
- * response maps the offending dataset_id to ``{"error": "..."}``. Clients
5478
- * should check each entry for the ``error`` key.
5512
+ * One round trip in place of one request per dataset, which is what a map
5513
+ * with many layers would otherwise need.
5479
5514
  *
5480
- * fix(#394) SH-04: ``X-Embed-Token`` is accepted as per-dataset fallback
5481
- * authorization (same capability check as tile serving), so embed terrain
5482
- * builds its raster-dem source from the real bounds/maxzoom descriptor.
5515
+ * A dataset that cannot be found or cannot be authorized does not fail the
5516
+ * batch: that id maps to ``{"error": "..."}`` in the response instead, so
5517
+ * check each entry for an ``error`` key before using it. Duplicate ids are
5518
+ * collapsed.
5519
+ *
5520
+ * The request as a whole still fails 401 in one case: a request that carried
5521
+ * a credential which did not resolve and that no capability authorized
5522
+ * answers 401 rather than a body of per-dataset errors. A request carrying no
5523
+ * credential is served normally.
5524
+ *
5525
+ * ``X-Embed-Token`` is accepted as a fallback authorization for the datasets
5526
+ * inside that token's scope, so an embedded map can build a terrain source
5527
+ * from real bounds and zoom limits.
5483
5528
  */
5484
5529
  export const getTileTokensBatchTilesTokensPost = (options) => (options.client ?? client).post({
5485
5530
  security: [
@@ -5503,10 +5548,19 @@ export const getTileTokensBatchTilesTokensPost = (options) => (options.client ??
5503
5548
  *
5504
5549
  * Serve a vector tile as gzipped MVT binary.
5505
5550
  *
5506
- * URL pattern: /tiles/data.{table_name}/{z}/{x}/{y}.pbf
5551
+ * URL pattern: ``/tiles/data.{table_name}/{z}/{x}/{y}.pbf``
5507
5552
  *
5508
- * Non-public datasets require valid HMAC signature params (sig, exp, scope).
5509
- * Public datasets can be accessed without any signature.
5553
+ * A public, published dataset is readable without credentials. A non-public
5554
+ * dataset needs either valid signature parameters (``sig``, ``exp``,
5555
+ * ``scope``) or an embed token scoped to it, and answers 403 without one. A
5556
+ * public dataset that is not yet published is readable by its owner, by an
5557
+ * admin, with an embed token, or with valid signature parameters, and answers
5558
+ * 404 to other callers, so a refusal keeps its existence undisclosed. An
5559
+ * unknown table is 404 too.
5560
+ *
5561
+ * A request that no capability authorized and that carried a credential which
5562
+ * did not resolve is refused with 401 rather than served as an anonymous
5563
+ * read. A request sending no credential is served normally.
5510
5564
  *
5511
5565
  * `cols` is a runtime opt-in for additional attribute columns the client
5512
5566
  * needs at all zooms (e.g. data-driven styling columns referenced by
@@ -5516,6 +5570,15 @@ export const getTileTokensBatchTilesTokensPost = (options) => (options.client ??
5516
5570
  * Does not need to be signed — `sig` already authorizes dataset
5517
5571
  * access and `cols` can only project columns the caller already has
5518
5572
  * REST access to.
5573
+ *
5574
+ * A malformed table path or an out-of-range tile coordinate answers 400. A
5575
+ * tile holding no features answers 204, and a repeat request whose
5576
+ * ``If-None-Match`` matches answers 304. Where a deployment runs cold storage,
5577
+ * a dataset still being restored answers 202 with a job id to poll. Three
5578
+ * cases answer 429 with ``Retry-After``: waiting past the tile pool's
5579
+ * connection budget, a tile query that outruns the pool's per-command
5580
+ * timeout, and exceeding a configured per-tenant concurrency limit. Any other
5581
+ * failure serving the tile answers 503.
5519
5582
  */
5520
5583
  export const tileEndpointTilesTablePathZXYPbfGet = (options) => (options.client ?? client).get({
5521
5584
  security: [