@geolens/sdk 1.0.0 → 1.2.3

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.
@@ -434,6 +434,29 @@ export const generateMetadataSummaryAiMetadataSummaryPost = (options) => (option
434
434
  ...options.headers
435
435
  }
436
436
  });
437
+ /**
438
+ * Get Column Ddl Feed
439
+ *
440
+ * Return the column-DDL audit history for a dataset.
441
+ *
442
+ * SEC-FU-08: Surfaces the column-DDL events written by SEC-S03 (Phase 1061)
443
+ * to dataset owners so they can detect editor-initiated schema changes.
444
+ *
445
+ * Access control (AGENTS.md Pre-Commit Checklist Rule 1):
446
+ * - Owner + granted roles: 200 with their own dataset's DDL history
447
+ * - Non-owner editor (no grant): 404 (check_dataset_access raises 404 for
448
+ * private datasets)
449
+ * - Admin: 200 (admin access is always allowed)
450
+ * - Anonymous: 401 (get_current_active_user dependency)
451
+ *
452
+ * The dataset 404-before-auth-query ordering ensures non-existent datasets
453
+ * return 404 without leaking audit log details.
454
+ */
455
+ export const getColumnDdlFeedAuditDatasetsDatasetIdColumnDdlGet = (options) => (options.client ?? client).get({
456
+ security: [{ scheme: 'bearer', type: 'http' }],
457
+ url: '/audit/datasets/{dataset_id}/column-ddl',
458
+ ...options
459
+ });
437
460
  /**
438
461
  * List My Api Keys
439
462
  *
@@ -490,6 +513,24 @@ export const changePasswordAuthChangePasswordPost = (options) => (options.client
490
513
  * Return public auth configuration (no authentication required).
491
514
  */
492
515
  export const configAuthConfigGet = (options) => (options?.client ?? client).get({ url: '/auth/config/', ...options });
516
+ /**
517
+ * Create Download Token Endpoint
518
+ *
519
+ * Mint a short-lived download-scoped JWT for a single dataset.
520
+ *
521
+ * IA-P0-01 / SEC-04: the existing COG download URL path requires a
522
+ * ``typ='download'`` JWT on the ``?token=`` query parameter — session JWTs
523
+ * are rejected. This endpoint issues that token after verifying the caller
524
+ * has read access to the dataset.
525
+ *
526
+ * Anonymous callers are allowed for public datasets. The returned token has
527
+ * ``typ='download'``, ``scope='dataset:{dataset_id}'``, and a TTL of 120s.
528
+ */
529
+ export const createDownloadTokenEndpointAuthDownloadTokenDatasetIdPost = (options) => (options.client ?? client).post({
530
+ security: [{ scheme: 'bearer', type: 'http' }],
531
+ url: '/auth/download-token/{dataset_id}',
532
+ ...options
533
+ });
493
534
  /**
494
535
  * Login
495
536
  *
@@ -497,7 +538,7 @@ export const configAuthConfigGet = (options) => (options?.client ?? client).get(
497
538
  */
498
539
  export const loginAuthLoginPost = (options) => (options.client ?? client).post({
499
540
  ...urlSearchParamsBodySerializer,
500
- url: '/auth/login/',
541
+ url: '/auth/login',
501
542
  ...options,
502
543
  headers: {
503
544
  'Content-Type': 'application/x-www-form-urlencoded',
@@ -507,7 +548,12 @@ export const loginAuthLoginPost = (options) => (options.client ?? client).post({
507
548
  /**
508
549
  * Logout
509
550
  *
510
- * Revoke all refresh tokens for the current user.
551
+ * Revoke all refresh tokens and bump token_version for the current user.
552
+ *
553
+ * SEC-S15 (Phase 1062-01): revoke_all_tokens bumps User.token_version so the
554
+ * access JWT used for this logout call (and any other outstanding access JWTs)
555
+ * are rejected on the next authenticated request — closing the
556
+ * "logout doesn't invalidate the access JWT" gap.
511
557
  */
512
558
  export const logoutAuthLogoutPost = (options) => (options?.client ?? client).post({
513
559
  security: [{ scheme: 'bearer', type: 'http' }],
@@ -544,12 +590,24 @@ export const listPublicProvidersAuthOauthProvidersGet = (options) => (options?.c
544
590
  * Oauth Callback
545
591
  *
546
592
  * Handle IdP callback: exchange code, find/create user, issue JWT, redirect to frontend.
593
+ *
594
+ * Phase 268 H-27: the frontend redirect carries access tokens in the URL
595
+ * fragment. Without explicit-config resolution, an attacker controlling
596
+ * ``X-Forwarded-Host`` could steer the post-callback redirect to
597
+ * attacker.com and capture the tokens. Force explicit-config resolution
598
+ * by passing ``for_external_use=True``.
547
599
  */
548
600
  export const oauthCallbackAuthOauthProviderSlugCallbackGet = (options) => (options.client ?? client).get({ url: '/auth/oauth/{provider_slug}/callback', ...options });
549
601
  /**
550
602
  * Oauth Login
551
603
  *
552
604
  * Redirect user to the IdP authorization URL with PKCE parameters.
605
+ *
606
+ * Phase 268 H-27: the redirect_uri is handed to the IdP, where an
607
+ * attacker-controlled origin (via ``X-Forwarded-Host``) would otherwise
608
+ * enable auth-code theft. We force explicit-config resolution by
609
+ * passing ``for_external_use=True``; falling back to the request-origin
610
+ * is refused.
553
611
  */
554
612
  export const oauthLoginAuthOauthProviderSlugLoginGet = (options) => (options.client ?? client).get({ url: '/auth/oauth/{provider_slug}/login', ...options });
555
613
  /**
@@ -873,6 +931,26 @@ export const createEmptyDatasetEndpointDatasetsCreatePost = (options) => (option
873
931
  ...options.headers
874
932
  }
875
933
  });
934
+ /**
935
+ * Get Dcat Us3 Catalog
936
+ *
937
+ * DCAT-US Schema v3.0 catalog feed. Respects dataset visibility.
938
+ */
939
+ export const getDcatUs3CatalogDatasetsDcatUs30Get = (options) => (options?.client ?? client).get({
940
+ security: [{ scheme: 'bearer', type: 'http' }],
941
+ url: '/datasets/dcat-us/3.0/',
942
+ ...options
943
+ });
944
+ /**
945
+ * Validate Dcat Us3 Catalog
946
+ *
947
+ * Validate the visible DCAT-US Schema v3.0 catalog feed.
948
+ */
949
+ export const validateDcatUs3CatalogDatasetsDcatUs30ValidationGet = (options) => (options?.client ?? client).get({
950
+ security: [{ scheme: 'bearer', type: 'http' }],
951
+ url: '/datasets/dcat-us/3.0/validation/',
952
+ ...options
953
+ });
876
954
  /**
877
955
  * Get Dcat Catalog
878
956
  *
@@ -896,7 +974,7 @@ export const deleteDatasetRelationshipDatasetsRelationshipsRelationshipIdDelete
896
974
  /**
897
975
  * Delete Dataset Endpoint
898
976
  *
899
- * Delete a dataset with cascade cleanup. Admin only, requires confirm_title.
977
+ * Delete a dataset with cascade cleanup. Owner or admin only, requires confirm_title.
900
978
  */
901
979
  export const deleteDatasetEndpointDatasetsDatasetIdDelete = (options) => (options.client ?? client).delete({
902
980
  security: [{ scheme: 'bearer', type: 'http' }],
@@ -995,6 +1073,26 @@ export const getColumnValuesDatasetsDatasetIdColumnsColumnNameValuesGet = (optio
995
1073
  url: '/datasets/{dataset_id}/columns/{column_name}/values/',
996
1074
  ...options
997
1075
  });
1076
+ /**
1077
+ * Get Dcat Us3 Record
1078
+ *
1079
+ * DCAT-US Schema v3.0 JSON-LD for a single dataset.
1080
+ */
1081
+ export const getDcatUs3RecordDatasetsDatasetIdDcatUs30Get = (options) => (options.client ?? client).get({
1082
+ security: [{ scheme: 'bearer', type: 'http' }],
1083
+ url: '/datasets/{dataset_id}/dcat-us/3.0/',
1084
+ ...options
1085
+ });
1086
+ /**
1087
+ * Validate Dcat Us3 Record
1088
+ *
1089
+ * Validate a single dataset as DCAT-US Schema v3.0.
1090
+ */
1091
+ export const validateDcatUs3RecordDatasetsDatasetIdDcatUs30ValidationGet = (options) => (options.client ?? client).get({
1092
+ security: [{ scheme: 'bearer', type: 'http' }],
1093
+ url: '/datasets/{dataset_id}/dcat-us/3.0/validation/',
1094
+ ...options
1095
+ });
998
1096
  /**
999
1097
  * Get Dcat Record
1000
1098
  *
@@ -1013,6 +1111,12 @@ export const getDcatRecordDatasetsDatasetIdDcatGet = (options) => (options.clien
1013
1111
  * Local storage: streams the COG file with Content-Type image/tiff.
1014
1112
  * S3 storage: returns a 302 redirect to a presigned GET URL (1-hour expiry).
1015
1113
  * Accepts standard auth or ?token= JWT query parameter for browser downloads.
1114
+ *
1115
+ * KNOWN-01 (Phase 1071): ``user`` may be None when a no-sub anonymous
1116
+ * download token (issued by POST /auth/download-token/{id} for a public
1117
+ * dataset) is presented on ``?token=``. The function branches on
1118
+ * user-None to enforce public visibility and emit the audit row with
1119
+ * user_id=NULL.
1016
1120
  */
1017
1121
  export const downloadCogDatasetsDatasetIdDownloadCogGet = (options) => (options.client ?? client).get({
1018
1122
  security: [{ scheme: 'bearer', type: 'http' }],
@@ -1266,11 +1370,21 @@ export const reuploadCommitDatasetsDatasetIdReuploadJobIdCommitPost = (options)
1266
1370
  * Reupload Preview
1267
1371
  *
1268
1372
  * Preview the schema diff between old dataset and new upload.
1373
+ *
1374
+ * When the uploaded file contains multiple layers, the response includes
1375
+ * ``all_layers`` (for frontend layer-select UI) and ``previous_source_layer``
1376
+ * (pre-selection hint from the most-recent completed IngestJob for this
1377
+ * dataset). Pass ``layer_name`` in the request body to target a specific
1378
+ * layer; omit it to get the default first-layer metadata.
1269
1379
  */
1270
1380
  export const reuploadPreviewDatasetsDatasetIdReuploadJobIdPreviewPost = (options) => (options.client ?? client).post({
1271
1381
  security: [{ scheme: 'bearer', type: 'http' }],
1272
1382
  url: '/datasets/{dataset_id}/reupload/{job_id}/preview',
1273
- ...options
1383
+ ...options,
1384
+ headers: {
1385
+ 'Content-Type': 'application/json',
1386
+ ...options.headers
1387
+ }
1274
1388
  });
1275
1389
  /**
1276
1390
  * Get Dataset Rows Endpoint
@@ -1390,6 +1504,35 @@ export const getVrtStatusDatasetsDatasetIdVrtStatusGet = (options) => (options.c
1390
1504
  * Health check endpoint for ALB, Docker, and Nginx.
1391
1505
  */
1392
1506
  export const healthHealthGet = (options) => (options?.client ?? client).get({ url: '/health', ...options });
1507
+ /**
1508
+ * Commit Fan Out
1509
+ *
1510
+ * Convert a single pending IngestJob into N independent per-layer ingest tasks.
1511
+ *
1512
+ * For multi-layer sources (e.g. GeoPackage with 2+ layers), this endpoint
1513
+ * fans out the original upload into one Procrastinate task per requested
1514
+ * layer, each becoming a separate dataset. The original job is marked
1515
+ * 'fanned_out' (a terminal state).
1516
+ *
1517
+ * Required: original job must be in status='pending'. Each layer_name in
1518
+ * the request body must appear in job.user_metadata['all_layers']. Unknown
1519
+ * layer names return HTTP 422 with the list of unrecognized names.
1520
+ *
1521
+ * Returns HTTP 202 with per-layer outcomes. Partial success is possible:
1522
+ * each layer result carries status='queued' or status='failed' with a
1523
+ * user-safe error message.
1524
+ *
1525
+ * Permission: same as POST /ingest/commit/{job_id} — 'upload' capability.
1526
+ */
1527
+ export const commitFanOutIngestCommitFanOutJobIdPost = (options) => (options.client ?? client).post({
1528
+ security: [{ scheme: 'bearer', type: 'http' }],
1529
+ url: '/ingest/commit-fan-out/{job_id}',
1530
+ ...options,
1531
+ headers: {
1532
+ 'Content-Type': 'application/json',
1533
+ ...options.headers
1534
+ }
1535
+ });
1393
1536
  /**
1394
1537
  * Commit Import
1395
1538
  *
@@ -1422,6 +1565,20 @@ export const discoverTablesIngestDiscoverGet = (options) => (options?.client ??
1422
1565
  url: '/ingest/discover/',
1423
1566
  ...options
1424
1567
  });
1568
+ /**
1569
+ * Apply Manifest Endpoint
1570
+ *
1571
+ * Apply a versioned manifest through the ingest service layer.
1572
+ */
1573
+ export const applyManifestEndpointIngestManifestApplyPost = (options) => (options.client ?? client).post({
1574
+ security: [{ scheme: 'bearer', type: 'http' }],
1575
+ url: '/ingest/manifest/apply',
1576
+ ...options,
1577
+ headers: {
1578
+ 'Content-Type': 'application/json',
1579
+ ...options.headers
1580
+ }
1581
+ });
1425
1582
  /**
1426
1583
  * Preview File
1427
1584
  *
@@ -1742,16 +1899,93 @@ export const createMapEndpointMapsPost = (options) => (options.client ?? client)
1742
1899
  ...options.headers
1743
1900
  }
1744
1901
  });
1902
+ /**
1903
+ * List Map Icons Endpoint
1904
+ *
1905
+ * List reusable default and uploaded map icons.
1906
+ */
1907
+ export const listMapIconsEndpointMapsIconsGet = (options) => (options?.client ?? client).get({
1908
+ security: [{ scheme: 'bearer', type: 'http' }],
1909
+ url: '/maps/icons',
1910
+ ...options
1911
+ });
1912
+ /**
1913
+ * Upload Map Icon Endpoint
1914
+ *
1915
+ * Upload a reusable SVG or PNG icon for symbol layers.
1916
+ */
1917
+ export const uploadMapIconEndpointMapsIconsPost = (options) => (options.client ?? client).post({
1918
+ ...formDataBodySerializer,
1919
+ security: [{ scheme: 'bearer', type: 'http' }],
1920
+ url: '/maps/icons',
1921
+ ...options,
1922
+ headers: {
1923
+ 'Content-Type': null,
1924
+ ...options.headers
1925
+ }
1926
+ });
1927
+ /**
1928
+ * Get Map Icon Asset Endpoint
1929
+ *
1930
+ * Serve an uploaded or bundled icon asset by stable icon ID.
1931
+ *
1932
+ * SEC-01 / M-63: SVG responses carry Content-Security-Policy
1933
+ * ``default-src 'none'; sandbox`` so an uploaded SVG cannot fetch other
1934
+ * origins, run scripts, or read auth cookies even if validation is bypassed
1935
+ * in the future. Browsers (Chromium, Firefox) honor the sandbox directive on
1936
+ * image/svg+xml responses. PNG responses use the global SecurityHeadersMiddleware
1937
+ * default ``frame-ancestors 'self'``.
1938
+ */
1939
+ export const getMapIconAssetEndpointMapsIconsIconIdAssetGet = (options) => (options.client ?? client).get({ url: '/maps/icons/{icon_id}/asset', ...options });
1940
+ /**
1941
+ * Import Map Style Endpoint
1942
+ *
1943
+ * Import a MapLibre style JSON document into a new GeoLens map.
1944
+ *
1945
+ * API-01 (M-05): the request body is now a typed Pydantic model instead of
1946
+ * a bare ``dict``. ``MapStyleImportRequest`` mirrors the MapLibre style
1947
+ * spec top-level keys with ``extra="allow"``, so existing payloads keep
1948
+ * working byte-identically while the OpenAPI schema gains a named class
1949
+ * and the auto-generated SDKs stop emitting an opaque ``Mapping[str, Any]``
1950
+ * request type.
1951
+ */
1952
+ export const importMapStyleEndpointMapsImportPost = (options) => (options.client ?? client).post({
1953
+ security: [{ scheme: 'bearer', type: 'http' }],
1954
+ url: '/maps/import',
1955
+ ...options,
1956
+ headers: {
1957
+ 'Content-Type': 'application/json',
1958
+ ...options.headers
1959
+ }
1960
+ });
1745
1961
  /**
1746
1962
  * Get Shared Map Endpoint
1747
1963
  *
1748
1964
  * Get a shared map by token. Optionally authenticated for non-public layers.
1965
+ *
1966
+ * SEC-S08 (Phase 1062-05): emits ``Content-Security-Policy: frame-ancestors
1967
+ * 'self' [<allowed_origins>...]`` on the response, derived from the active
1968
+ * EmbedToken for this map. When no EmbedToken exists or allowed_origins is
1969
+ * empty, defaults to ``frame-ancestors 'self'``. The SecurityHeadersMiddleware
1970
+ * respects this route-level CSP and skips emitting X-Frame-Options: DENY.
1749
1971
  */
1750
1972
  export const getSharedMapEndpointMapsSharedTokenGet = (options) => (options.client ?? client).get({
1751
1973
  security: [{ scheme: 'bearer', type: 'http' }],
1752
1974
  url: '/maps/shared/{token}',
1753
1975
  ...options
1754
1976
  });
1977
+ /**
1978
+ * Get Geolens Sprite Index Endpoint
1979
+ *
1980
+ * Serve the stable GeoLens sprite JSON index.
1981
+ */
1982
+ export const getGeolensSpriteIndexEndpointMapsSpritesGeolensJsonGet = (options) => (options?.client ?? client).get({ url: '/maps/sprites/geolens.json', ...options });
1983
+ /**
1984
+ * Get Geolens Sprite Png Endpoint
1985
+ *
1986
+ * Serve the generated GeoLens sprite sheet for stable icon IDs.
1987
+ */
1988
+ export const getGeolensSpritePngEndpointMapsSpritesGeolensPngGet = (options) => (options?.client ?? client).get({ url: '/maps/sprites/geolens.png', ...options });
1755
1989
  /**
1756
1990
  * Delete Map Endpoint
1757
1991
  *
@@ -1786,6 +2020,16 @@ export const updateMapEndpointMapsMapIdPut = (options) => (options.client ?? cli
1786
2020
  ...options.headers
1787
2021
  }
1788
2022
  });
2023
+ /**
2024
+ * Get Map Access Endpoint
2025
+ *
2026
+ * Return server-confirmed route access for the map viewer gate.
2027
+ */
2028
+ export const getMapAccessEndpointMapsMapIdAccessGet = (options) => (options.client ?? client).get({
2029
+ security: [{ scheme: 'bearer', type: 'http' }],
2030
+ url: '/maps/{map_id}/access/',
2031
+ ...options
2032
+ });
1789
2033
  /**
1790
2034
  * Duplicate Map Endpoint
1791
2035
  *
@@ -1810,6 +2054,9 @@ export const listEmbedTokensEndpointMapsMapIdEmbedTokensGet = (options) => (opti
1810
2054
  * Create Embed Token Endpoint
1811
2055
  *
1812
2056
  * Create an embed token scoped to a map's current layers.
2057
+ *
2058
+ * Community supports the default 30-day unrestricted token. Custom lifetimes
2059
+ * and non-empty origin restrictions require the enterprise edition.
1813
2060
  */
1814
2061
  export const createEmbedTokenEndpointMapsMapIdEmbedTokensPost = (options) => (options.client ?? client).post({
1815
2062
  security: [{ scheme: 'bearer', type: 'http' }],
@@ -1834,6 +2081,8 @@ export const revokeEmbedTokenEndpointMapsMapIdEmbedTokensTokenIdDelete = (option
1834
2081
  * Update Embed Token Endpoint
1835
2082
  *
1836
2083
  * Update embed token allowed_origins.
2084
+ *
2085
+ * Null clears restrictions. Non-empty origin restrictions require the enterprise edition.
1837
2086
  */
1838
2087
  export const updateEmbedTokenEndpointMapsMapIdEmbedTokensTokenIdPatch = (options) => (options.client ?? client).patch({
1839
2088
  security: [{ scheme: 'bearer', type: 'http' }],
@@ -1844,14 +2093,78 @@ export const updateEmbedTokenEndpointMapsMapIdEmbedTokensTokenIdPatch = (options
1844
2093
  ...options.headers
1845
2094
  }
1846
2095
  });
2096
+ /**
2097
+ * Get Map History Endpoint
2098
+ *
2099
+ * Return recent builder edit history for a map.
2100
+ */
2101
+ export const getMapHistoryEndpointMapsMapIdHistoryGet = (options) => (options.client ?? client).get({
2102
+ security: [{ scheme: 'bearer', type: 'http' }],
2103
+ url: '/maps/{map_id}/history',
2104
+ ...options
2105
+ });
2106
+ /**
2107
+ * Patch Map Layers Endpoint
2108
+ *
2109
+ * Apply incremental layer additions, patches, removals, and ordering.
2110
+ *
2111
+ * v13.14 fixup: declared on both slash variants directly (mirrors the
2112
+ * Phase 280 fix on POST). FastAPI's default redirect_slashes builds a
2113
+ * relative Location header that resolves against the request's Host
2114
+ * header, which would leak the in-container ``api:8000`` hostname
2115
+ * through Vite's dev proxy on a 307 redirect. The canonical
2116
+ * (OpenAPI-published) form is the no-slash sub-collection convention
2117
+ * documented in the GeoLens API guide (https://docs.getgeolens.com/guides/api/);
2118
+ * the trailing-slash form is a hidden alias.
2119
+ */
2120
+ export const patchMapLayersEndpointMapsMapIdLayersPatch = (options) => (options.client ?? client).patch({
2121
+ security: [{ scheme: 'bearer', type: 'http' }],
2122
+ url: '/maps/{map_id}/layers',
2123
+ ...options,
2124
+ headers: {
2125
+ 'Content-Type': 'application/json',
2126
+ ...options.headers
2127
+ }
2128
+ });
1847
2129
  /**
1848
2130
  * Add Layer Endpoint
1849
2131
  *
1850
2132
  * Add a layer to a map.
2133
+ *
2134
+ * Phase 280: declared on both slash variants directly so neither emits a
2135
+ * 307. FastAPI's default redirect_slashes builds a relative Location
2136
+ * header that resolves against the request's Host header, leaking the
2137
+ * in-container ``api:8000`` hostname through Vite's dev proxy. The
2138
+ * canonical (OpenAPI-published) form is the no-slash sub-collection
2139
+ * convention documented in the GeoLens API guide
2140
+ * (https://docs.getgeolens.com/guides/api/); the trailing-slash form is a
2141
+ * hidden alias for callers that send the slash.
1851
2142
  */
1852
2143
  export const addLayerEndpointMapsMapIdLayersPost = (options) => (options.client ?? client).post({
1853
2144
  security: [{ scheme: 'bearer', type: 'http' }],
1854
- url: '/maps/{map_id}/layers/',
2145
+ url: '/maps/{map_id}/layers',
2146
+ ...options,
2147
+ headers: {
2148
+ 'Content-Type': 'application/json',
2149
+ ...options.headers
2150
+ }
2151
+ });
2152
+ /**
2153
+ * Bulk Delete Layers Endpoint
2154
+ *
2155
+ * Batch-delete multiple layers from a map in a single request.
2156
+ *
2157
+ * Milestone exception (v1010 Phase 1047): one additive endpoint permitted
2158
+ * per REQUIREMENTS.md Out-of-Scope to reduce N sequential DELETEs to one
2159
+ * batched call for bulk-delete UX (PB-03 / PERF-03).
2160
+ *
2161
+ * Returns 200 with deleted/failed arrays in all cases (partial failures
2162
+ * surface inline, not as HTTP errors). Full rollback is the caller's
2163
+ * responsibility if all ids fail.
2164
+ */
2165
+ export const bulkDeleteLayersEndpointMapsMapIdLayersBulkDeletePost = (options) => (options.client ?? client).post({
2166
+ security: [{ scheme: 'bearer', type: 'http' }],
2167
+ url: '/maps/{map_id}/layers/bulk-delete',
1855
2168
  ...options,
1856
2169
  headers: {
1857
2170
  'Content-Type': 'application/json',
@@ -1868,6 +2181,45 @@ export const removeLayerEndpointMapsMapIdLayersLayerIdDelete = (options) => (opt
1868
2181
  url: '/maps/{map_id}/layers/{layer_id}',
1869
2182
  ...options
1870
2183
  });
2184
+ /**
2185
+ * Get Og Image
2186
+ *
2187
+ * Serve the OG social-card image from storage (visibility-checked).
2188
+ *
2189
+ * Uses ``public, max-age=86400`` for public maps — OG images change
2190
+ * less often than thumbnails (which use 3600s). Mirrors get_thumbnail
2191
+ * but reads ``og_image_uri`` and uses the ``maps/og-images/`` key space.
2192
+ */
2193
+ export const getOgImageMapsMapIdOgImageGet = (options) => (options.client ?? client).get({
2194
+ security: [{ scheme: 'bearer', type: 'http' }],
2195
+ url: '/maps/{map_id}/og-image/',
2196
+ ...options
2197
+ });
2198
+ /**
2199
+ * Upload Og Image
2200
+ *
2201
+ * Upload a base64 OG social-card image (up to 750KB) for a map.
2202
+ *
2203
+ * Accepts a data:image/ URI, decodes the base64 payload, validates the
2204
+ * bytes are a real image (PIL verify), writes to storage under
2205
+ * ``maps/og-images/{map_id}.{ext}``, and persists the storage key to
2206
+ * ``catalog.maps.og_image_uri``.
2207
+ *
2208
+ * Intended for 1200x630 JPEG captures (SHARE-08). The payload cap
2209
+ * (750KB) is larger than the thumbnail cap (100KB) to accommodate the
2210
+ * larger canvas export — they are separate schemas (OgImageUploadRequest
2211
+ * vs ThumbnailUploadRequest) to avoid relaxing the locked thumbnail
2212
+ * contract. Auth and PIL-verify rules are identical to upload_thumbnail.
2213
+ */
2214
+ export const uploadOgImageMapsMapIdOgImagePut = (options) => (options.client ?? client).put({
2215
+ security: [{ scheme: 'bearer', type: 'http' }],
2216
+ url: '/maps/{map_id}/og-image/',
2217
+ ...options,
2218
+ headers: {
2219
+ 'Content-Type': 'application/json',
2220
+ ...options.headers
2221
+ }
2222
+ });
1871
2223
  /**
1872
2224
  * Revoke Map Share Endpoint
1873
2225
  *
@@ -1892,6 +2244,8 @@ export const getMapShareTokenEndpointMapsMapIdShareGet = (options) => (options.c
1892
2244
  * Update Map Share Token Endpoint
1893
2245
  *
1894
2246
  * Update expiration on an existing share token. Owner or admin only.
2247
+ *
2248
+ * Null clears expiration.
1895
2249
  */
1896
2250
  export const updateMapShareTokenEndpointMapsMapIdSharePatch = (options) => (options.client ?? client).patch({
1897
2251
  security: [{ scheme: 'bearer', type: 'http' }],
@@ -1916,6 +2270,16 @@ export const shareMapEndpointMapsMapIdSharePost = (options) => (options.client ?
1916
2270
  ...options.headers
1917
2271
  }
1918
2272
  });
2273
+ /**
2274
+ * Export Map Style Endpoint
2275
+ *
2276
+ * Export a saved map as a complete MapLibre style JSON document.
2277
+ */
2278
+ export const exportMapStyleEndpointMapsMapIdStyleJsonGet = (options) => (options.client ?? client).get({
2279
+ security: [{ scheme: 'bearer', type: 'http' }],
2280
+ url: '/maps/{map_id}/style.json',
2281
+ ...options
2282
+ });
1919
2283
  /**
1920
2284
  * Get Thumbnail
1921
2285
  *
@@ -1935,12 +2299,11 @@ export const getThumbnailMapsMapIdThumbnailGet = (options) => (options.client ??
1935
2299
  * bytes to the configured storage provider, and stores the storage key.
1936
2300
  */
1937
2301
  export const uploadThumbnailMapsMapIdThumbnailPut = (options) => (options.client ?? client).put({
1938
- bodySerializer: null,
1939
2302
  security: [{ scheme: 'bearer', type: 'http' }],
1940
2303
  url: '/maps/{map_id}/thumbnail/',
1941
2304
  ...options,
1942
2305
  headers: {
1943
- 'Content-Type': 'text/plain',
2306
+ 'Content-Type': 'application/json',
1944
2307
  ...options.headers
1945
2308
  }
1946
2309
  });
@@ -2289,6 +2652,14 @@ export const getApiKeyStatusSettingsApiKeyStatusGet = (options) => (options?.cli
2289
2652
  * Basemaps with ``{api_key}`` in the URL are filtered out when no key is
2290
2653
  * configured. When a key IS set the placeholder is resolved server-side.
2291
2654
  * The response uses ``BasemapPublicResponse`` which excludes ``api_key``.
2655
+ *
2656
+ * SEC-S10 (2026-05-20 audit): the resolved ``url`` field intentionally
2657
+ * includes the substituted ``api_key`` value when configured. Client-side
2658
+ * tile-provider keys (Mapbox, Stadia, MapTiler) are designed for browser
2659
+ * exposure and the frontend MUST receive them to load tiles. Do NOT put a
2660
+ * backend-only commercial-tier key in this field — rotate the key in the
2661
+ * provider dashboard if it is misused. Rate-limited via
2662
+ * ``_basemap_proxy_rate_limit`` to cap replay-cost from anonymous clients.
2292
2663
  */
2293
2664
  export const getBasemapsSettingsBasemapsGet = (options) => (options?.client ?? client).get({ url: '/settings/basemaps/', ...options });
2294
2665
  /**
@@ -2325,11 +2696,32 @@ export const detectEmbeddingDimsSettingsDetectEmbeddingDimsPost = (options) => (
2325
2696
  */
2326
2697
  export const editionInfoSettingsEditionGet = (options) => (options?.client ?? client).get({ url: '/settings/edition/', ...options });
2327
2698
  /**
2328
- * Get Enabled Widgets
2699
+ * Get Enabled Plugins
2329
2700
  *
2330
- * Return enabled widget IDs. null = no restriction (all shown), [] = none, [...ids] = only those.
2701
+ * Return enabled plugin IDs. null = no restriction (all shown), [] = none, [...ids] = only those.
2331
2702
  */
2332
- export const getEnabledWidgetsSettingsEnabledWidgetsGet = (options) => (options?.client ?? client).get({ url: '/settings/enabled-widgets/', ...options });
2703
+ export const getEnabledPluginsSettingsEnabledPluginsGet = (options) => (options?.client ?? client).get({ url: '/settings/enabled-plugins/', ...options });
2704
+ /**
2705
+ * Get Enterprise Only Tabs
2706
+ *
2707
+ * Return the canonical list of Settings tab keys that are enterprise-only.
2708
+ *
2709
+ * Phase 279 ADMIN-03 (M-03): single source of truth for enterprise-only
2710
+ * Settings tabs. The frontend AdminSidebar uses this to conditionally render
2711
+ * the tabs in community vs enterprise editions. The backend
2712
+ * ``_require_enterprise_for_key`` gate uses the same set to 404 community
2713
+ * attempts at writing enterprise-tab settings — keeping these aligned
2714
+ * prevents silent UX drift.
2715
+ *
2716
+ * Note: not gated by ``require_enterprise``. Community callers must be able
2717
+ * to read the list to render their own sidebar correctly (the response tells
2718
+ * them which tabs to HIDE).
2719
+ */
2720
+ export const getEnterpriseOnlyTabsSettingsEnterpriseTabsGet = (options) => (options?.client ?? client).get({
2721
+ security: [{ scheme: 'bearer', type: 'http' }],
2722
+ url: '/settings/enterprise-tabs/',
2723
+ ...options
2724
+ });
2333
2725
  /**
2334
2726
  * Get Feature Flags
2335
2727
  *
@@ -2448,13 +2840,21 @@ export const getCollectionStacCollectionsCollectionIdGet = (options) => (options
2448
2840
  *
2449
2841
  * List STAC Items within a collection.
2450
2842
  */
2451
- export const getCollectionItemsStacCollectionsCollectionIdItemsGet = (options) => (options.client ?? client).get({ url: '/stac/collections/{collection_id}/items', ...options });
2843
+ export const getCollectionItemsStacCollectionsCollectionIdItemsGet = (options) => (options.client ?? client).get({
2844
+ security: [{ scheme: 'bearer', type: 'http' }],
2845
+ url: '/stac/collections/{collection_id}/items',
2846
+ ...options
2847
+ });
2452
2848
  /**
2453
2849
  * Get Collection Item
2454
2850
  *
2455
2851
  * Get a single STAC Item within a collection.
2456
2852
  */
2457
- export const getCollectionItemStacCollectionsCollectionIdItemsItemIdGet = (options) => (options.client ?? client).get({ url: '/stac/collections/{collection_id}/items/{item_id}', ...options });
2853
+ export const getCollectionItemStacCollectionsCollectionIdItemsItemIdGet = (options) => (options.client ?? client).get({
2854
+ security: [{ scheme: 'bearer', type: 'http' }],
2855
+ url: '/stac/collections/{collection_id}/items/{item_id}',
2856
+ ...options
2857
+ });
2458
2858
  /**
2459
2859
  * Conformance
2460
2860
  *
@@ -2466,19 +2866,28 @@ export const conformanceStacConformanceGet = (options) => (options?.client ?? cl
2466
2866
  *
2467
2867
  * Get a single STAC Item by dataset ID.
2468
2868
  */
2469
- export const getItemStacItemsItemIdGet = (options) => (options.client ?? client).get({ url: '/stac/items/{item_id}', ...options });
2869
+ export const getItemStacItemsItemIdGet = (options) => (options.client ?? client).get({
2870
+ security: [{ scheme: 'bearer', type: 'http' }],
2871
+ url: '/stac/items/{item_id}',
2872
+ ...options
2873
+ });
2470
2874
  /**
2471
2875
  * Search Get
2472
2876
  *
2473
2877
  * STAC Item Search (GET).
2474
2878
  */
2475
- export const searchGetStacSearchGet = (options) => (options?.client ?? client).get({ url: '/stac/search', ...options });
2879
+ export const searchGetStacSearchGet = (options) => (options?.client ?? client).get({
2880
+ security: [{ scheme: 'bearer', type: 'http' }],
2881
+ url: '/stac/search',
2882
+ ...options
2883
+ });
2476
2884
  /**
2477
2885
  * Search Post
2478
2886
  *
2479
2887
  * STAC Item Search (POST with JSON body).
2480
2888
  */
2481
2889
  export const searchPostStacSearchPost = (options) => (options.client ?? client).post({
2890
+ security: [{ scheme: 'bearer', type: 'http' }],
2482
2891
  url: '/stac/search',
2483
2892
  ...options,
2484
2893
  headers: {
@@ -2486,6 +2895,22 @@ export const searchPostStacSearchPost = (options) => (options.client ?? client).
2486
2895
  ...options.headers
2487
2896
  }
2488
2897
  });
2898
+ /**
2899
+ * Cluster Tile Endpoint
2900
+ *
2901
+ * Serve a server-side clustered vector tile for point datasets.
2902
+ *
2903
+ * URL pattern: /tiles/clusters/data.{table_name}/{z}/{x}/{y}.pbf
2904
+ *
2905
+ * This route deliberately reuses the normal vector tile auth model:
2906
+ * public datasets are readable directly, non-public datasets require either
2907
+ * valid HMAC tile params or a valid embed token scoped to the dataset.
2908
+ */
2909
+ export const clusterTileEndpointTilesClustersTablePathZXYPbfGet = (options) => (options.client ?? client).get({
2910
+ security: [{ scheme: 'bearer', type: 'http' }],
2911
+ url: '/tiles/clusters/{table_path}/{z}/{x}/{y}.pbf',
2912
+ ...options
2913
+ });
2489
2914
  /**
2490
2915
  * Raster Auth Check
2491
2916
  *
@@ -2513,6 +2938,23 @@ export const rasterAuthCheckTilesRasterAuthCheckGet = (options) => (options.clie
2513
2938
  * Used by Vite dev proxy and as a fallback for deployments without nginx.
2514
2939
  * Production deployments with nginx should use the nginx raster-tiles path
2515
2940
  * for better caching and performance.
2941
+ *
2942
+ * colormap_name: Optional Titiler colormap for single-band display. Validated
2943
+ * against _ALLOWED_COLORMAPS (T-1140-01). Gray is the Titiler default for
2944
+ * single-band — passing gray is a no-op (not forwarded). colormap_name is not
2945
+ * forwarded for DEM layers (render_params starts with 'algorithm=').
2946
+ *
2947
+ * stretch: Optional stretch strategy. percentile/stddev compute a stats-based
2948
+ * rescale from Titiler band statistics. Multi-band rasters produce one rescale=
2949
+ * fragment per band (up to 3, RASTER-STRETCH-03).
2950
+ *
2951
+ * pmin/pmax: Configurable percentile clip bounds (default 2/98). Must satisfy
2952
+ * 0 <= pmin < pmax <= 100. Forwarded as repeated p= params to /cog/statistics.
2953
+ * The _band_stats_cache key includes pmin/pmax so different bounds never serve
2954
+ * stale cached stats (RASTER-STRETCH-UI-01 / Phase 1153 cache-key isolation).
2955
+ *
2956
+ * sigma: Standard-deviation multiplier for stretch=stddev (default 2.0).
2957
+ * Must be > 0.
2516
2958
  */
2517
2959
  export const rasterTileProxyTilesRasterProxyDatasetIdZXYFmtGet = (options) => (options.client ?? client).get({
2518
2960
  security: [{ scheme: 'bearer', type: 'http' }],
@@ -2569,6 +3011,19 @@ export const getTileTokensBatchTilesTokensPost = (options) => (options.client ??
2569
3011
  *
2570
3012
  * Non-public datasets require valid HMAC signature params (sig, exp, scope).
2571
3013
  * Public datasets can be accessed without any signature.
3014
+ *
3015
+ * `cols` is a runtime opt-in for additional attribute columns the client
3016
+ * needs at all zooms (e.g. data-driven styling columns referenced by
3017
+ * MapLibre paint expressions). Format: comma-separated column names.
3018
+ * Each name is validated against the dataset column list before it
3019
+ * flows into the MVT projection; invalid names are silently dropped.
3020
+ * Does not need to be signed — `sig` already authorizes dataset
3021
+ * access and `cols` can only project columns the caller already has
3022
+ * REST access to.
2572
3023
  */
2573
- export const tileEndpointTilesTablePathZXYPbfGet = (options) => (options.client ?? client).get({ url: '/tiles/{table_path}/{z}/{x}/{y}.pbf', ...options });
3024
+ export const tileEndpointTilesTablePathZXYPbfGet = (options) => (options.client ?? client).get({
3025
+ security: [{ scheme: 'bearer', type: 'http' }],
3026
+ url: '/tiles/{table_path}/{z}/{x}/{y}.pbf',
3027
+ ...options
3028
+ });
2574
3029
  //# sourceMappingURL=sdk.gen.js.map