@geolens/sdk 1.17.0 → 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: [
@@ -531,10 +531,48 @@ export const rejectUserAdminUsersUserIdRejectPost = (options) => (options.client
531
531
  url: '/admin/users/{user_id}/reject/',
532
532
  ...options
533
533
  });
534
+ /**
535
+ * Reset User Password
536
+ *
537
+ * Set a user's password (admin only).
538
+ *
539
+ * feat(#1715): the login page tells a locked-out user to ask an
540
+ * administrator, and there was nothing for the administrator to do. This is
541
+ * the recovery path, so it asks for no current password -- holding
542
+ * manage_users is the whole authorization, and the audit row is what makes
543
+ * the action answerable for. The submitted value reaches the hash column and
544
+ * nowhere else: not the audit details, not a log line, not the response.
545
+ *
546
+ * 422 when the target signs in through an identity provider (no local
547
+ * password to replace), 404 when no such user exists -- both via the shared
548
+ * _raise_on_error mapping the sibling lifecycle routes use.
549
+ *
550
+ * Resetting your own password is permitted and ends every session the
551
+ * account holds, including the one making this request, because the reset
552
+ * revokes the account's credentials. That is the same consequence
553
+ * POST /auth/change-password/ has for the caller who invokes it.
554
+ */
555
+ export const resetUserPasswordAdminUsersUserIdResetPasswordPost = (options) => (options.client ?? client).post({
556
+ security: [
557
+ { scheme: 'bearer', type: 'http' },
558
+ { name: 'X-Api-Key', type: 'apiKey' },
559
+ {
560
+ in: 'query',
561
+ name: 'api_key',
562
+ type: 'apiKey'
563
+ }
564
+ ],
565
+ url: '/admin/users/{user_id}/reset-password/',
566
+ ...options,
567
+ headers: {
568
+ 'Content-Type': 'application/json',
569
+ ...options.headers
570
+ }
571
+ });
534
572
  /**
535
573
  * Ai Availability Endpoint
536
574
  *
537
- * Report whether builder AI chat is usable (builder-audit #338 P1-11).
575
+ * Report whether builder AI chat is usable (#338).
538
576
  *
539
577
  * Permission-gated on ``use_ai_chat`` so non-admin editors (who cannot read
540
578
  * ``/admin/ai-status``) can learn availability. Returns ``available=false``
@@ -764,14 +802,14 @@ export const generateMetadataSummaryAiMetadataSummaryPost = (options) => (option
764
802
  *
765
803
  * Return the column-DDL audit history for a dataset.
766
804
  *
767
- * SEC-FU-08: Surfaces the column-DDL events written by SEC-S03 (Phase 1061)
768
- * 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.
769
807
  *
770
808
  * Access control (AGENTS.md Pre-Commit Checklist Rule 1):
771
809
  * - Owner: 200 with their own dataset's DDL history
772
810
  * - Admin: 200 (admin access is always allowed)
773
811
  * - Anyone else — including authenticated readers of a PUBLIC dataset: 404
774
- * 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
775
813
  * check_dataset_access (read visibility), which let any logged-in user
776
814
  * enumerate editor usernames/user_ids on public datasets, contradicting
777
815
  * this owner-facing contract.
@@ -886,7 +924,7 @@ export const configAuthConfigGet = (options) => (options?.client ?? client).get(
886
924
  *
887
925
  * Mint a short-lived download-scoped JWT for a single dataset.
888
926
  *
889
- * IA-P0-01 / SEC-04: the existing COG download URL path requires a
927
+ * The COG download URL path requires a
890
928
  * ``typ='download'`` JWT on the ``?token=`` query parameter — session JWTs
891
929
  * are rejected. This endpoint issues that token after verifying the caller
892
930
  * has read access to the dataset.
@@ -931,7 +969,7 @@ export const loginAuthLoginPost = (options) => (options.client ?? client).post({
931
969
  *
932
970
  * Revoke all refresh tokens and bump token_version for the current user.
933
971
  *
934
- * SEC-S15 (Phase 1062-01): revoke_all_tokens bumps User.token_version so the
972
+ * revoke_all_tokens bumps User.token_version so the
935
973
  * access JWT used for this logout call (and any other outstanding access JWTs)
936
974
  * are rejected on the next authenticated request — closing the
937
975
  * "logout doesn't invalidate the access JWT" gap.
@@ -1029,7 +1067,7 @@ export const listPublicProvidersAuthOauthProvidersGet = (options) => (options?.c
1029
1067
  *
1030
1068
  * Handle IdP callback: exchange code, find/create user, issue JWT, redirect to frontend.
1031
1069
  *
1032
- * Phase 268 H-27: the frontend redirect carries access tokens in the URL
1070
+ * The frontend redirect carries access tokens in the URL
1033
1071
  * fragment. Without explicit-config resolution, an attacker controlling
1034
1072
  * ``X-Forwarded-Host`` could steer the post-callback redirect to
1035
1073
  * attacker.com and capture the tokens. Force explicit-config resolution
@@ -1041,7 +1079,7 @@ export const oauthCallbackAuthOauthProviderSlugCallbackGet = (options) => (optio
1041
1079
  *
1042
1080
  * Redirect user to the IdP authorization URL with PKCE parameters.
1043
1081
  *
1044
- * 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
1045
1083
  * attacker-controlled origin (via ``X-Forwarded-Host``) would otherwise
1046
1084
  * enable auth-code theft. We force explicit-config resolution by
1047
1085
  * passing ``for_external_use=True``; falling back to the request-origin
@@ -1092,7 +1130,7 @@ export const registerAuthRegisterPost = (options) => (options.client ?? client).
1092
1130
  *
1093
1131
  * Re-issue and re-send a verification email.
1094
1132
  *
1095
- * SIGNUP-05 / T-1231-05 (enumeration-safe): ALWAYS returns the same 200 body
1133
+ * Enumeration-safe: ALWAYS returns the same 200 body
1096
1134
  * regardless of whether the email exists, is unknown, or is already verified.
1097
1135
  * Send errors are logged server-side only and never branch the HTTP response.
1098
1136
  */
@@ -1109,12 +1147,12 @@ export const resendVerificationAuthResendVerificationPost = (options) => (option
1109
1147
  *
1110
1148
  * Redeem a verification token to activate the account.
1111
1149
  *
1112
- * SIGNUP-03: a valid single-use expiring token flips email_verified=True,
1150
+ * A valid single-use expiring token flips email_verified=True,
1113
1151
  * is_active=True, and status="active" so the user can log in via the
1114
1152
  * existing auth gate in dependencies.py.
1115
1153
  *
1116
1154
  * Expired, unknown, and already-consumed tokens all return the same
1117
- * "Invalid or expired" error (enumeration-safe, SIGNUP-05 / T-1231-06).
1155
+ * "Invalid or expired" error (enumeration-safe).
1118
1156
  */
1119
1157
  export const verifyEmailAuthVerifyEmailPost = (options) => (options.client ?? client).post({
1120
1158
  url: '/auth/verify-email/',
@@ -1488,7 +1526,7 @@ export const dryRunConfigurationConfigOpsDryRunPost = (options) => (options.clie
1488
1526
  * Returns a downloadable JSON payload with Content-Disposition header. This is a
1489
1527
  * file-download endpoint — the previous ``response_model=ConfigExportResponse``
1490
1528
  * was silently ignored because the handler returns a raw JSONResponse with custom
1491
- * headers (TYPE-N3). Using ``response_class=JSONResponse`` is the correct way to
1529
+ * headers. Using ``response_class=JSONResponse`` is the correct way to
1492
1530
  * document a download endpoint in OpenAPI.
1493
1531
  */
1494
1532
  export const exportConfigurationConfigOpsExportGet = (options) => (options?.client ?? client).get({
@@ -2054,7 +2092,7 @@ export const validateDcat3RecordDatasetsDatasetIdDcatValidationGet = (options) =
2054
2092
  * S3 storage: returns a 302 redirect to a presigned GET URL (1-hour expiry).
2055
2093
  * Accepts standard auth or ?token= JWT query parameter for browser downloads.
2056
2094
  *
2057
- * KNOWN-01 (Phase 1071): ``user`` may be None when a no-sub anonymous
2095
+ * ``user`` may be None when a no-sub anonymous
2058
2096
  * download token (issued by POST /auth/download-token/{id} for a public
2059
2097
  * dataset) is presented on ``?token=``. The function branches on
2060
2098
  * user-None to enforce public visibility and emit the audit row with
@@ -2102,7 +2140,7 @@ export const exportDatasetEndpointDatasetsDatasetIdExportGet = (options) => (opt
2102
2140
  * Return up to 5,000 features as RFC 7946 GeoJSON with Z coordinates.
2103
2141
  *
2104
2142
  * fix(#394) codex P2: the viewer's bounded-GeoJSON path (small 3D layers,
2105
- * eligible cluster layers) already sends ``X-Embed-Token``, and the B-023
2143
+ * eligible cluster layers) already sends ``X-Embed-Token``, and the
2106
2144
  * shared-map union now exposes embed-scoped private layers to embeds — so
2107
2145
  * this endpoint accepts the token as fallback authorization via the SAME
2108
2146
  * ``validate_embed_token_access`` capability check as tile serving.
@@ -2137,7 +2175,7 @@ export const getFeaturesGeojsonZEndpointDatasetsDatasetIdFeaturesGeojsonGet = (o
2137
2175
  *
2138
2176
  * Get paginated GeoJSON features for a dataset.
2139
2177
  *
2140
- * Pagination is OFFSET-based (fix(#458 E-40), documented limitation): rows can
2178
+ * Pagination is OFFSET-based (fix(#458), documented limitation): rows can
2141
2179
  * skip or duplicate across pages under concurrent writes, though feature ids
2142
2180
  * stay stable (ORDER BY gid, the primary key). Clients that need stable
2143
2181
  * cursoring should use the OGC API Features endpoint, which supports keyset
@@ -2470,7 +2508,7 @@ export const listRelatedDatasetsDatasetsDatasetIdRelatedGet = (options) => (opti
2470
2508
  * Paginated via ``skip`` and ``limit`` to bound response size for datasets
2471
2509
  * with large numbers of auto-detected relationships. Returns the standard
2472
2510
  * list envelope (``relationships`` + ``total``) so callers can detect whether
2473
- * more pages exist (GAP-033); ``total`` counts the visible relationships before
2511
+ * more pages exist; ``total`` counts the visible relationships before
2474
2512
  * pagination.
2475
2513
  */
2476
2514
  export const listDatasetRelationshipsDatasetsDatasetIdRelationshipsGet = (options) => (options.client ?? client).get({
@@ -2813,6 +2851,11 @@ export const listVrtSourcesDatasetsDatasetIdVrtSourcesGet = (options) => (option
2813
2851
  * List Vrt Generations
2814
2852
  *
2815
2853
  * Return paginated generation history for a VRT dataset.
2854
+ *
2855
+ * Not every caller gets every field. Seeing the dataset decides whether there
2856
+ * is a history at all; the provenance predicate decides whether its rows carry
2857
+ * their failure text and the id of whoever triggered them. See
2858
+ * ``_vrt_generation_item``.
2816
2859
  */
2817
2860
  export const listVrtGenerationsDatasetsDatasetIdVrtGenerationsGet = (options) => (options.client ?? client).get({
2818
2861
  security: [
@@ -3031,7 +3074,7 @@ export const registerTableIngestRegisterPost = (options) => (options.client ?? c
3031
3074
  * Each table is registered independently -- one failure does not block
3032
3075
  * others. Tables are processed in parallel via ``asyncio.gather`` with
3033
3076
  * a fresh session per task, which keeps transaction isolation while
3034
- * removing the sequential per-table latency (PERF-3).
3077
+ * removing the sequential per-table latency.
3035
3078
  */
3036
3079
  export const bulkRegisterTablesIngestRegisterBulkPost = (options) => (options.client ?? client).post({
3037
3080
  security: [
@@ -3141,16 +3184,23 @@ export const completePresignedUploadIngestUploadPresignedJobIdCompletePost = (op
3141
3184
  /**
3142
3185
  * Upload From Url
3143
3186
  *
3144
- * Import a geospatial file from an HTTP(S) URL for staging.
3187
+ * Start importing a geospatial file from an HTTP(S) URL.
3145
3188
  *
3146
3189
  * feat(#1705): the URL variant of ``POST /ingest/upload`` — NOT a new
3147
3190
  * source type. The server fetches the file itself and the staged bytes
3148
- * enter the normal pipeline unchanged (preview commit). Rule 2 posture:
3149
- * ``validate_url_for_ssrf`` gates the URL at submission, the download runs
3150
- * through ``make_safe_client()`` (connect-time IP pinning plus per-hop
3151
- * redirect revalidation), the size cap is enforced while streaming, the
3152
- * staged file passes the same extension allowlist and content sniff as a
3153
- * 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.
3154
3204
  */
3155
3205
  export const uploadFromUrlIngestUploadUrlPost = (options) => (options.client ?? client).post({
3156
3206
  security: [
@@ -3202,7 +3252,7 @@ export const createVrtIngestVrtCreatePost = (options) => (options.client ?? clie
3202
3252
  *
3203
3253
  * Validates the new source against existing sources synchronously.
3204
3254
  * Returns 202 Accepted with a job_id for polling.
3205
- * 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.
3206
3256
  * Returns 422 if the source is incompatible with existing sources.
3207
3257
  */
3208
3258
  export const addVrtSourceIngestVrtDatasetIdSourcesPost = (options) => (options.client ?? client).post({
@@ -3228,7 +3278,7 @@ export const addVrtSourceIngestVrtDatasetIdSourcesPost = (options) => (options.c
3228
3278
  * Remove a COG source from an existing VRT and trigger async regeneration.
3229
3279
  *
3230
3280
  * Returns 202 Accepted with a job_id for polling.
3231
- * Returns 409 if the VRT is currently regenerating (SRC-05).
3281
+ * Returns 409 if the VRT is currently regenerating.
3232
3282
  * Returns 422 if removing would leave fewer than 2 sources.
3233
3283
  * Returns 404 if the source is not linked to the VRT.
3234
3284
  */
@@ -3262,6 +3312,16 @@ export const removeVrtSourceIngestVrtDatasetIdSourcesSourceDatasetIdDelete = (op
3262
3312
  * 404 would needlessly pollute the browser console on the dataset detail
3263
3313
  * page. A genuine 404 is still raised when the dataset is not visible to the
3264
3314
  * user, to avoid leaking job existence (see visibility check below).
3315
+ *
3316
+ * Not every caller gets every field. Seeing the dataset decides whether there
3317
+ * is an answer at all; who ran the job decides how much of the answer is
3318
+ * filled in. The dataset's owner, an admin, and the job's own creator get the
3319
+ * full payload. Any other reader of a visible dataset gets the job id, its
3320
+ * status and its timestamps, with the run's own detail nulled: no
3321
+ * ``error_message``, ``source_filename``, warnings, step, row counts or
3322
+ * retry hint. That is the redaction ``GET /datasets/{dataset_id}/refresh-runs``
3323
+ * already applies to the same failure text, and ``_redacted_job_status``
3324
+ * documents the decision field by field.
3265
3325
  */
3266
3326
  export const getJobStatusByDatasetJobsByDatasetDatasetIdGet = (options) => (options.client ?? client).get({
3267
3327
  security: [
@@ -3469,7 +3529,7 @@ export const renameColumnEndpointLayersDatasetIdColumnsColumnNameNamePatch = (op
3469
3529
  *
3470
3530
  * Count saved maps whose layer config references a column.
3471
3531
  *
3472
- * 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
3473
3533
  * editor knows how many saved maps depend on the column. Count only — map
3474
3534
  * titles may belong to other users and are not exposed here.
3475
3535
  */
@@ -3600,7 +3660,7 @@ export const uploadMapIconEndpointMapsIconsPost = (options) => (options.client ?
3600
3660
  *
3601
3661
  * Serve an uploaded or bundled icon asset by stable icon ID.
3602
3662
  *
3603
- * SEC-01 / M-63: SVG responses carry Content-Security-Policy
3663
+ * SVG responses carry Content-Security-Policy
3604
3664
  * ``default-src 'none'; sandbox`` so an uploaded SVG cannot fetch other
3605
3665
  * origins, run scripts, or read auth cookies even if validation is bypassed
3606
3666
  * in the future. Browsers (Chromium, Firefox) honor the sandbox directive on
@@ -3613,8 +3673,7 @@ export const getMapIconAssetEndpointMapsIconsIconIdAssetGet = (options) => (opti
3613
3673
  *
3614
3674
  * Import a MapLibre style JSON document into a new GeoLens map.
3615
3675
  *
3616
- * API-01 (M-05): the request body is now a typed Pydantic model instead of
3617
- * 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
3618
3677
  * spec top-level keys with ``extra="allow"``, so existing payloads keep
3619
3678
  * working byte-identically while the OpenAPI schema gains a named class
3620
3679
  * and the auto-generated SDKs stop emitting an opaque ``Mapping[str, Any]``
@@ -3642,14 +3701,14 @@ export const importMapStyleEndpointMapsImportPost = (options) => (options.client
3642
3701
  *
3643
3702
  * Get a shared map by token. Optionally authenticated for non-public layers.
3644
3703
  *
3645
- * SEC-S08 (Phase 1062-05): emits ``Content-Security-Policy: frame-ancestors
3704
+ * Emits ``Content-Security-Policy: frame-ancestors
3646
3705
  * 'self' [<allowed_origins>...]`` on the response, derived from the active
3647
3706
  * EmbedToken for this map. When no EmbedToken exists or allowed_origins is
3648
3707
  * empty, defaults to ``frame-ancestors 'self'``. The SecurityHeadersMiddleware
3649
3708
  * respects this route-level CSP and skips emitting X-Frame-Options: DENY.
3650
3709
  *
3651
- * fix(#394) SH-01/B-023: accepts ``X-Embed-Token`` so embed viewers get the
3652
- * 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.
3653
3712
  */
3654
3713
  export const getSharedMapEndpointMapsSharedTokenGet = (options) => (options.client ?? client).get({
3655
3714
  security: [
@@ -3878,14 +3937,14 @@ export const getMapHistoryEndpointMapsMapIdHistoryGet = (options) => (options.cl
3878
3937
  *
3879
3938
  * Apply incremental layer additions, patches, removals, and ordering.
3880
3939
  *
3881
- * v13.14 fixup: declared on both slash variants directly (mirrors the
3882
- * Phase 280 fix on POST). FastAPI's default redirect_slashes builds a
3883
- * relative Location header that resolves against the request's Host
3884
- * header, which would leak the in-container ``api:8000`` hostname
3885
- * through Vite's dev proxy on a 307 redirect. The canonical
3886
- * (OpenAPI-published) form is the no-slash sub-collection convention
3887
- * documented in the GeoLens API guide (https://docs.getgeolens.com/guides/api/);
3888
- * 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.
3889
3948
  */
3890
3949
  export const patchMapLayersEndpointMapsMapIdLayersPatch = (options) => (options.client ?? client).patch({
3891
3950
  security: [
@@ -3909,9 +3968,9 @@ export const patchMapLayersEndpointMapsMapIdLayersPatch = (options) => (options.
3909
3968
  *
3910
3969
  * Add a layer to a map.
3911
3970
  *
3912
- * Phase 280: declared on both slash variants directly so neither emits a
3913
- * 307. FastAPI's default redirect_slashes builds a relative Location
3914
- * 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
3915
3974
  * in-container ``api:8000`` hostname through Vite's dev proxy. The
3916
3975
  * canonical (OpenAPI-published) form is the no-slash sub-collection
3917
3976
  * convention documented in the GeoLens API guide
@@ -3940,9 +3999,8 @@ export const addLayerEndpointMapsMapIdLayersPost = (options) => (options.client
3940
3999
  *
3941
4000
  * Batch-delete multiple layers from a map in a single request.
3942
4001
  *
3943
- * Milestone exception (v1010 Phase 1047): one additive endpoint permitted
3944
- * per REQUIREMENTS.md Out-of-Scope to reduce N sequential DELETEs to one
3945
- * 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.
3946
4004
  *
3947
4005
  * Returns 200 with deleted/failed arrays in all cases (partial failures
3948
4006
  * surface inline, not as HTTP errors). Full rollback is the caller's
@@ -4015,7 +4073,7 @@ export const getOgImageMapsMapIdOgImageGet = (options) => (options.client ?? cli
4015
4073
  * ``maps/og-images/{map_id}.{ext}``, and persists the storage key to
4016
4074
  * ``catalog.maps.og_image_uri``.
4017
4075
  *
4018
- * Intended for 1200x630 JPEG captures (SHARE-08). The payload cap
4076
+ * Intended for 1200x630 JPEG captures. The payload cap
4019
4077
  * (750KB) is larger than the thumbnail cap (100KB) to accommodate the
4020
4078
  * larger canvas export — they are separate schemas (OgImageUploadRequest
4021
4079
  * vs ThumbnailUploadRequest) to avoid relaxing the locked thumbnail
@@ -4189,7 +4247,7 @@ export const uploadThumbnailMapsMapIdThumbnailPut = (options) => (options.client
4189
4247
  * Owner-or-admin like the other sharing mutations: the response names
4190
4248
  * non-public dataset titles, which read access alone must not reveal.
4191
4249
  * Read access is checked first so unreadable maps keep answering 404
4192
- * (SEC-007 existence-hiding); readable non-owners get 403.
4250
+ * (existence-hiding); readable non-owners get 403.
4193
4251
  */
4194
4252
  export const visibilityCheckEndpointMapsMapIdVisibilityCheckGet = (options) => (options.client ?? client).get({
4195
4253
  security: [
@@ -4619,6 +4677,38 @@ export const getSavedSearchEndpointSearchSavedSearchIdGet = (options) => (option
4619
4677
  url: '/search/saved/{search_id}',
4620
4678
  ...options
4621
4679
  });
4680
+ /**
4681
+ * Arcgis Signin
4682
+ *
4683
+ * Sign in to an ArcGIS portal and return a short-lived token.
4684
+ *
4685
+ * Asks the portal's own token service for a token valid for 60 minutes and
4686
+ * returns it. Put that token in the `token` field on probe, preview, commit
4687
+ * and refresh; an import that runs longer than the token lives fails with a
4688
+ * credential error and has to start over.
4689
+ *
4690
+ * An account that signs in through an identity provider, or that has
4691
+ * multifactor authentication turned on, cannot use this. Paste a token or
4692
+ * an API key instead. A portal on a private network is unreachable either
4693
+ * way.
4694
+ */
4695
+ export const arcgisSigninServicesArcgisSigninPost = (options) => (options.client ?? client).post({
4696
+ security: [
4697
+ { scheme: 'bearer', type: 'http' },
4698
+ { name: 'X-Api-Key', type: 'apiKey' },
4699
+ {
4700
+ in: 'query',
4701
+ name: 'api_key',
4702
+ type: 'apiKey'
4703
+ }
4704
+ ],
4705
+ url: '/services/arcgis/signin/',
4706
+ ...options,
4707
+ headers: {
4708
+ 'Content-Type': 'application/json',
4709
+ ...options.headers
4710
+ }
4711
+ });
4622
4712
  /**
4623
4713
  * List Connectors Endpoint
4624
4714
  *
@@ -4739,6 +4829,8 @@ export const probeServiceUrlServicesProbePost = (options) => (options.client ??
4739
4829
  * Stac Collections
4740
4830
  *
4741
4831
  * List collections from a connected STAC API.
4832
+ *
4833
+ * Accepts a credential for a protected catalog, applied to this call.
4742
4834
  */
4743
4835
  export const stacCollectionsServicesStacCollectionsPost = (options) => (options.client ?? client).post({
4744
4836
  security: [
@@ -4761,6 +4853,8 @@ export const stacCollectionsServicesStacCollectionsPost = (options) => (options.
4761
4853
  * Stac Connect
4762
4854
  *
4763
4855
  * Connect to a STAC API and validate the endpoint.
4856
+ *
4857
+ * Accepts a credential for a protected catalog, applied to this call.
4764
4858
  */
4765
4859
  export const stacConnectServicesStacConnectPost = (options) => (options.client ?? client).post({
4766
4860
  security: [
@@ -4809,6 +4903,8 @@ export const stacImportServicesStacImportPost = (options) => (options.client ??
4809
4903
  * Stac Search
4810
4904
  *
4811
4905
  * Search items in a STAC API with spatial/temporal filters.
4906
+ *
4907
+ * Accepts a credential for a protected catalog, applied to this call.
4812
4908
  */
4813
4909
  export const stacSearchServicesStacSearchPost = (options) => (options.client ?? client).post({
4814
4910
  security: [
@@ -4894,7 +4990,7 @@ export const getApiKeyStatusSettingsApiKeyStatusGet = (options) => (options?.cli
4894
4990
  * configured. When a key IS set the placeholder is resolved server-side.
4895
4991
  * The response uses ``BasemapPublicResponse`` which excludes ``api_key``.
4896
4992
  *
4897
- * SEC-S10 (2026-05-20 audit): the resolved ``url`` field intentionally
4993
+ * The resolved ``url`` field intentionally
4898
4994
  * includes the substituted ``api_key`` value when configured. Client-side
4899
4995
  * tile-provider keys (Mapbox, Stadia, MapTiler) are designed for browser
4900
4996
  * exposure and the frontend MUST receive them to load tiles. Do NOT put a
@@ -4992,7 +5088,7 @@ export const getMapDefaultsSettingsMapDefaultsGet = (options) => (options?.clien
4992
5088
  *
4993
5089
  * Mirrors get_api_key_status: returns presence flags derived from env/settings
4994
5090
  * without ever echoing the SMTP password, webhook URL, or webhook secret
4995
- * (NOTIF-05 / T-1229-09).
5091
+ * without secrets.
4996
5092
  */
4997
5093
  export const getNotificationStatusSettingsNotificationsStatusGet = (options) => (options?.client ?? client).get({
4998
5094
  security: [
@@ -5014,7 +5110,7 @@ export const getNotificationStatusSettingsNotificationsStatusGet = (options) =>
5014
5110
  *
5015
5111
  * Mirrors detect_embedding_dims: admin-gated probe that reports per-channel
5016
5112
  * reachable/error in a 200 body without leaking secrets or raising 5xx on a
5017
- * bad channel (NOTIF-06 / T-1229-08 / T-1229-09 / T-1229-10).
5113
+ * bad channel.
5018
5114
  *
5019
5115
  * Per-channel approach (not EnvConfiguredNotificationSink.deliver) is used so
5020
5116
  * each channel's success/failure is captured in its own
@@ -5058,7 +5154,7 @@ export const listOauthProvidersSettingsOauthProvidersGet = (options) => (options
5058
5154
  *
5059
5155
  * Audit-log payload includes the full ``created`` snapshot with non-secret
5060
5156
  * fields verbatim and ``<redacted>`` markers for secrets that were submitted
5061
- * in the request body (SAML-12 / Pitfall 9 / T-217-03-AUDIT-LEAK).
5157
+ * in the request body.
5062
5158
  */
5063
5159
  export const createOauthProviderSettingsOauthProvidersPost = (options) => (options.client ?? client).post({
5064
5160
  security: [
@@ -5084,8 +5180,7 @@ export const createOauthProviderSettingsOauthProvidersPost = (options) => (optio
5084
5180
  *
5085
5181
  * Audit-log payload contains a ``deleted`` snapshot with the pre-delete
5086
5182
  * state — non-secret fields verbatim, secret fields marked ``<redacted>``
5087
- * if they were previously set (T-217-03-AUDIT-LEAK mitigation extends to
5088
- * delete events too).
5183
+ * if they were previously set; the same redaction applies to delete events.
5089
5184
  */
5090
5185
  export const deleteOauthProviderSettingsOauthProvidersProviderIdDelete = (options) => (options.client ?? client).delete({
5091
5186
  security: [
@@ -5108,8 +5203,7 @@ export const deleteOauthProviderSettingsOauthProvidersProviderIdDelete = (option
5108
5203
  * Audit-log payload contains ``details.changes`` with per-field
5109
5204
  * ``{"old": ..., "new": ...}`` diffs. Secret fields (idp_certificate,
5110
5205
  * client_secret_encrypted, client_secret) are redacted as
5111
- * ``{"old": "<redacted>", "new": "<redacted>"}`` (Pitfall 9 / SAML-12 /
5112
- * T-217-03-AUDIT-LEAK HIGH severity).
5206
+ * ``{"old": "<redacted>", "new": "<redacted>"}``.
5113
5207
  */
5114
5208
  export const updateOauthProviderSettingsOauthProvidersProviderIdPut = (options) => (options.client ?? client).put({
5115
5209
  security: [
@@ -5277,17 +5371,40 @@ export const searchPostStacSearchPost = (options) => (options.client ?? client).
5277
5371
  /**
5278
5372
  * Cluster Tile Endpoint
5279
5373
  *
5280
- * Serve a server-side clustered vector tile for point datasets.
5281
- *
5282
- * URL pattern: /tiles/clusters/data.{table_name}/{z}/{x}/{y}.pbf
5283
- *
5284
- * This route deliberately reuses the normal vector tile auth model:
5285
- * public datasets are readable directly, non-public datasets require either
5286
- * valid HMAC tile params or a valid embed token scoped to the dataset.
5287
- *
5288
- * fix(#403): `cols` mirrors the vector endpoint's runtime column opt-in;
5289
- * the columns are projected onto UNCLUSTERED features so data-driven
5290
- * 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.
5291
5408
  */
5292
5409
  export const clusterTileEndpointTilesClustersTablePathZXYPbfGet = (options) => (options.client ?? client).get({
5293
5410
  security: [
@@ -5305,28 +5422,46 @@ export const clusterTileEndpointTilesClustersTablePathZXYPbfGet = (options) => (
5305
5422
  /**
5306
5423
  * Raster Tile Proxy
5307
5424
  *
5308
- * API-side raster tile proxy: auth check + fetch from Titiler.
5309
- *
5310
- * Used by Vite dev proxy and as a fallback for deployments without nginx.
5311
- * Production deployments with nginx should use the nginx raster-tiles path
5312
- * for better caching and performance.
5313
- *
5314
- * colormap_name: Optional Titiler colormap for single-band display. Validated
5315
- * against _ALLOWED_COLORMAPS (T-1140-01). Gray is the Titiler default for
5316
- * single-band passing gray is a no-op (not forwarded). colormap_name is not
5317
- * forwarded for DEM layers (render_params starts with 'algorithm=').
5318
- *
5319
- * stretch: Optional stretch strategy. percentile/stddev compute a stats-based
5320
- * rescale from Titiler band statistics. Multi-band rasters produce one rescale=
5321
- * fragment per band (up to 3, RASTER-STRETCH-03).
5322
- *
5323
- * pmin/pmax: Configurable percentile clip bounds (default 2/98). Must satisfy
5324
- * 0 <= pmin < pmax <= 100. Forwarded as repeated p= params to /cog/statistics.
5325
- * The _band_stats_cache key includes pmin/pmax so different bounds never serve
5326
- * stale cached stats (RASTER-STRETCH-UI-01 / Phase 1153 cache-key isolation).
5327
- *
5328
- * sigma: Standard-deviation multiplier for stretch=stddev (default 2.0).
5329
- * Must be > 0.
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.
5330
5465
  */
5331
5466
  export const rasterTileProxyTilesRasterProxyDatasetIdZXYFmtGet = (options) => (options.client ?? client).get({
5332
5467
  security: [
@@ -5370,20 +5505,26 @@ export const getTileTokenTilesTokenDatasetIdGet = (options) => (options.client ?
5370
5505
  /**
5371
5506
  * Get Tile Tokens Batch
5372
5507
  *
5373
- * Batch-generate tile tokens for up to 50 datasets in one request.
5508
+ * Generate tile tokens for up to 50 datasets in one request.
5509
+ *
5510
+ * The list must hold between 1 and 50 ids, and a request outside that is 422.
5374
5511
  *
5375
- * Optimization for multi-layer maps: a 20-layer builder map previously
5376
- * fired 20 parallel GET /token/{id}/ requests (20 HTTP + 20 RBAC + 20 HMAC
5377
- * signatures). This endpoint does the same work in a single round trip
5378
- * with one DB query for dataset metadata (PERF-N5).
5512
+ * One round trip in place of one request per dataset, which is what a map
5513
+ * with many layers would otherwise need.
5379
5514
  *
5380
- * Per-dataset errors (404, 403) do not fail the batch instead the
5381
- * response maps the offending dataset_id to ``{"error": "..."}``. Clients
5382
- * should check each entry for the ``error`` key.
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.
5383
5519
  *
5384
- * fix(#394) SH-04: ``X-Embed-Token`` is accepted as per-dataset fallback
5385
- * authorization (same capability check as tile serving), so embed terrain
5386
- * builds its raster-dem source from the real bounds/maxzoom descriptor.
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.
5387
5528
  */
5388
5529
  export const getTileTokensBatchTilesTokensPost = (options) => (options.client ?? client).post({
5389
5530
  security: [
@@ -5407,10 +5548,19 @@ export const getTileTokensBatchTilesTokensPost = (options) => (options.client ??
5407
5548
  *
5408
5549
  * Serve a vector tile as gzipped MVT binary.
5409
5550
  *
5410
- * URL pattern: /tiles/data.{table_name}/{z}/{x}/{y}.pbf
5551
+ * URL pattern: ``/tiles/data.{table_name}/{z}/{x}/{y}.pbf``
5552
+ *
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.
5411
5560
  *
5412
- * Non-public datasets require valid HMAC signature params (sig, exp, scope).
5413
- * Public datasets can be accessed without any signature.
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.
5414
5564
  *
5415
5565
  * `cols` is a runtime opt-in for additional attribute columns the client
5416
5566
  * needs at all zooms (e.g. data-driven styling columns referenced by
@@ -5420,6 +5570,15 @@ export const getTileTokensBatchTilesTokensPost = (options) => (options.client ??
5420
5570
  * Does not need to be signed — `sig` already authorizes dataset
5421
5571
  * access and `cols` can only project columns the caller already has
5422
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.
5423
5582
  */
5424
5583
  export const tileEndpointTilesTablePathZXYPbfGet = (options) => (options.client ?? client).get({
5425
5584
  security: [