@geolens/sdk 1.6.1 → 1.7.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.
@@ -144,6 +144,12 @@ export type AdminApiKeyCreateRequest = {
144
144
  * Human-readable label for the API key (e.g. 'CI pipeline', 'QGIS desktop').
145
145
  */
146
146
  name: string;
147
+ /**
148
+ * Scope
149
+ *
150
+ * Privilege scope (#875). 'full' impersonates the owner completely, the pre-existing behavior. 'read_only' authenticates GET, HEAD and OPTIONS requests only; any other method is refused with 403. A service-account key minted for an application is the usual case for 'read_only'.
151
+ */
152
+ scope?: 'full' | 'read_only';
147
153
  /**
148
154
  * User Id
149
155
  *
@@ -197,6 +203,12 @@ export type AdminApiKeyListItem = {
197
203
  * Human-readable label.
198
204
  */
199
205
  name: string;
206
+ /**
207
+ * Scope
208
+ *
209
+ * Privilege scope: 'full' or 'read_only' (#875).
210
+ */
211
+ scope: string;
200
212
  /**
201
213
  * User Id
202
214
  *
@@ -505,10 +517,22 @@ export type AnalysisMaterializeRequest = {
505
517
  * Buffer distance in meters (buffer only)
506
518
  */
507
519
  distance_meters?: number | null;
520
+ /**
521
+ * Join Dataset Id
522
+ *
523
+ * Dataset to join against; each source feature gains a count of the features from it that intersect (spatial_join only)
524
+ */
525
+ join_dataset_id?: string | null;
526
+ /**
527
+ * Join Fields
528
+ *
529
+ * Columns to copy from the intersecting join feature, prefixed 'join_' in the output. Ties break on the lowest join-layer gid (spatial_join only)
530
+ */
531
+ join_fields?: Array<string> | null;
508
532
  /**
509
533
  * Mask
510
534
  *
511
- * GeoJSON Polygon or MultiPolygon geometry in EPSG:4326 (clip only)
535
+ * GeoJSON Polygon or MultiPolygon geometry in EPSG:4326 (clip and select_by_location)
512
536
  */
513
537
  mask?: {
514
538
  [key: string]: unknown;
@@ -516,13 +540,13 @@ export type AnalysisMaterializeRequest = {
516
540
  /**
517
541
  * Mask Dataset Id
518
542
  *
519
- * Polygon dataset whose unioned features form the clip mask (clip only; alternative to mask)
543
+ * Polygon dataset supplying the second layer: the area clipped to, selected against, or overlaid with. For clip and select_by_location it is the alternative to `mask`; for intersect it is REQUIRED and `mask` is rejected, because an overlay carries the second layer's attributes onto its output and a drawn polygon has none.
520
544
  */
521
545
  mask_dataset_id?: string | null;
522
546
  /**
523
547
  * Operation
524
548
  */
525
- operation: 'buffer' | 'centroid' | 'clip' | 'dissolve';
549
+ operation: 'buffer' | 'centroid' | 'clip' | 'dissolve' | 'spatial_join' | 'measure' | 'select_by_location' | 'intersect';
526
550
  /**
527
551
  * Title
528
552
  */
@@ -558,10 +582,22 @@ export type AnalysisPreviewRequest = {
558
582
  * Buffer distance in meters (buffer only)
559
583
  */
560
584
  distance_meters?: number | null;
585
+ /**
586
+ * Join Dataset Id
587
+ *
588
+ * Dataset to join against; each source feature gains a count of the features from it that intersect (spatial_join only)
589
+ */
590
+ join_dataset_id?: string | null;
591
+ /**
592
+ * Join Fields
593
+ *
594
+ * Columns to copy from the intersecting join feature, prefixed 'join_' in the output. Ties break on the lowest join-layer gid (spatial_join only)
595
+ */
596
+ join_fields?: Array<string> | null;
561
597
  /**
562
598
  * Mask
563
599
  *
564
- * GeoJSON Polygon or MultiPolygon geometry in EPSG:4326 (clip only)
600
+ * GeoJSON Polygon or MultiPolygon geometry in EPSG:4326 (clip and select_by_location)
565
601
  */
566
602
  mask?: {
567
603
  [key: string]: unknown;
@@ -569,13 +605,13 @@ export type AnalysisPreviewRequest = {
569
605
  /**
570
606
  * Mask Dataset Id
571
607
  *
572
- * Polygon dataset whose unioned features form the clip mask (clip only; alternative to mask)
608
+ * Polygon dataset supplying the second layer: the area clipped to, selected against, or overlaid with. For clip and select_by_location it is the alternative to `mask`; for intersect it is REQUIRED and `mask` is rejected, because an overlay carries the second layer's attributes onto its output and a drawn polygon has none.
573
609
  */
574
610
  mask_dataset_id?: string | null;
575
611
  /**
576
612
  * Operation
577
613
  */
578
- operation: 'buffer' | 'centroid' | 'clip';
614
+ operation: 'buffer' | 'centroid' | 'clip' | 'spatial_join' | 'measure' | 'select_by_location' | 'intersect';
579
615
  };
580
616
  /**
581
617
  * AnalysisPreviewResponse
@@ -597,6 +633,12 @@ export type AnalysisPreviewResponse = {
597
633
  geojson: {
598
634
  [key: string]: unknown;
599
635
  };
636
+ /**
637
+ * Match Count
638
+ *
639
+ * Exact total across the WHOLE source, not just the previewed features. What it counts is per-operation, so read it against the operation you sent rather than as one number: select_by_location gives the selected source features and intersect gives the output pieces, and for both of those it IS the output total; spatial_join gives intersecting source/join PAIRS, which is NOT the output total, because the join keeps every source row (use source_feature_count for that operation). Null for operations that report no such total, and when the count could not be computed within the query budget
640
+ */
641
+ match_count?: number | null;
600
642
  /**
601
643
  * Source Feature Count
602
644
  *
@@ -624,6 +666,12 @@ export type ApiKeyCreateRequest = {
624
666
  * Human-readable label for the API key
625
667
  */
626
668
  name: string;
669
+ /**
670
+ * Scope
671
+ *
672
+ * Privilege scope (#875). 'full' impersonates the owner completely, the pre-existing behavior. 'read_only' authenticates GET, HEAD and OPTIONS requests only; any other method is refused with 403.
673
+ */
674
+ scope?: 'full' | 'read_only';
627
675
  };
628
676
  /**
629
677
  * ApiKeyCreateResponse
@@ -659,6 +707,12 @@ export type ApiKeyCreateResponse = {
659
707
  * Name
660
708
  */
661
709
  name: string;
710
+ /**
711
+ * Scope
712
+ *
713
+ * Privilege scope: 'full' or 'read_only' (#875)
714
+ */
715
+ scope: string;
662
716
  };
663
717
  /**
664
718
  * ApiKeyListItem
@@ -696,6 +750,12 @@ export type ApiKeyListItem = {
696
750
  * Name
697
751
  */
698
752
  name: string;
753
+ /**
754
+ * Scope
755
+ *
756
+ * Privilege scope: 'full' or 'read_only' (#875)
757
+ */
758
+ scope: string;
699
759
  };
700
760
  /**
701
761
  * ApiKeyListResponse
@@ -2895,10 +2955,14 @@ export type DatasetResponse = {
2895
2955
  * Start of temporal coverage
2896
2956
  */
2897
2957
  data_vintage_start?: string | null;
2958
+ /**
2959
+ * Provenance for an analysis output. Null for a dataset that was not derived, and also for a requester who cannot access the source dataset — the two are deliberately indistinguishable.
2960
+ */
2961
+ derived_from?: DerivedFromResponse | null;
2898
2962
  /**
2899
2963
  * Extent Bbox
2900
2964
  *
2901
- * Bounding box [minx, miny, maxx, maxy]
2965
+ * Bounding box [west, south, east, north] per RFC 7946 §5.2. west > east on an antimeridian-crossing extent.
2902
2966
  */
2903
2967
  extent_bbox?: Array<number> | null;
2904
2968
  /**
@@ -3225,6 +3289,52 @@ export type DbfTruncationDetail = {
3225
3289
  */
3226
3290
  truncated: string;
3227
3291
  };
3292
+ /**
3293
+ * DerivedFromResponse
3294
+ *
3295
+ * Provenance for an analysis output: what it came from, and how.
3296
+ *
3297
+ * fix(#765 review): declared as a model rather than ``dict[str, Any]``. The
3298
+ * dict spelled itself into the checked-in OpenAPI as bare
3299
+ * ``additionalProperties: true``, so both generated SDKs lost the shape — the
3300
+ * TypeScript one degraded to an index signature and the Python one to an
3301
+ * empty additional-properties container. The stable shape was documented in
3302
+ * prose and mirrored by hand in the frontend types while the SDKs, which is
3303
+ * where most consumers actually meet it, could not use it type-safely.
3304
+ *
3305
+ * ``params`` stays untyped on purpose: it is the operation's own parameter
3306
+ * dict, so its keys differ per operation (``distance_meters`` for a buffer,
3307
+ * ``mask_source``/``mask_dataset_id`` for a clip), and it is additionally
3308
+ * REDACTED per requester — ``visible_derived_from`` drops any embedded
3309
+ * dataset id the caller cannot see. A union of per-operation models would
3310
+ * describe a shape the redaction is free to punch holes in.
3311
+ */
3312
+ export type DerivedFromResponse = {
3313
+ /**
3314
+ * Created At
3315
+ */
3316
+ created_at: string;
3317
+ /**
3318
+ * Dataset Id
3319
+ *
3320
+ * The dataset this one was derived from
3321
+ */
3322
+ dataset_id: string;
3323
+ /**
3324
+ * Operation
3325
+ *
3326
+ * Analysis operation that produced it
3327
+ */
3328
+ operation: string;
3329
+ /**
3330
+ * Params
3331
+ *
3332
+ * Operation parameters, minus any dataset reference the requester cannot access
3333
+ */
3334
+ params: {
3335
+ [key: string]: unknown;
3336
+ };
3337
+ };
3228
3338
  /**
3229
3339
  * DetectEmbeddingDimsResponse
3230
3340
  *
@@ -4321,7 +4431,7 @@ export type JobStatusResponse = {
4321
4431
  /**
4322
4432
  * Warnings
4323
4433
  */
4324
- warnings?: Array<ReservedRenameWarning | DbfTruncationCollisionWarning>;
4434
+ warnings?: Array<ReservedRenameWarning | DbfTruncationCollisionWarning | MercatorClipWarning>;
4325
4435
  };
4326
4436
  /**
4327
4437
  * KeywordCreate
@@ -5551,6 +5661,10 @@ export type MapSummaryResponse = {
5551
5661
  * Name
5552
5662
  */
5553
5663
  name: string;
5664
+ /**
5665
+ * Thumbnail Updated At
5666
+ */
5667
+ thumbnail_updated_at?: string | null;
5554
5668
  /**
5555
5669
  * Thumbnail Url
5556
5670
  */
@@ -5652,6 +5766,44 @@ export type MapUpdate = {
5652
5766
  * MapVisibility
5653
5767
  */
5654
5768
  export type MapVisibility = 'private' | 'internal' | 'public';
5769
+ /**
5770
+ * MercatorClipDetail
5771
+ *
5772
+ * fix(#888): how much geometry the Web Mercator clamp destroyed.
5773
+ *
5774
+ * The clamp is a box, not a latitude cutoff: longitude -180 to 180 and
5775
+ * latitude -85.06 to 85.06. Either bound can be the one that cost the user
5776
+ * geometry, so clients must not present this as a latitude-only problem
5777
+ * (fix(#899 codex r1)).
5778
+ *
5779
+ * ``dropped_features`` lost their geometry entirely (a valid point at lat
5780
+ * -89.95 becomes ``MULTIPOINT EMPTY``); ``clipped_features`` survived in
5781
+ * reduced form.
5782
+ */
5783
+ export type MercatorClipDetail = {
5784
+ /**
5785
+ * Clip Skipped
5786
+ */
5787
+ clip_skipped?: boolean;
5788
+ /**
5789
+ * Clipped Features
5790
+ */
5791
+ clipped_features: number;
5792
+ /**
5793
+ * Dropped Features
5794
+ */
5795
+ dropped_features: number;
5796
+ };
5797
+ /**
5798
+ * MercatorClipWarning
5799
+ */
5800
+ export type MercatorClipWarning = {
5801
+ details: MercatorClipDetail;
5802
+ /**
5803
+ * Kind
5804
+ */
5805
+ kind: 'mercator_clip';
5806
+ };
5655
5807
  /**
5656
5808
  * MetadataAssistRequest
5657
5809
  *
@@ -7201,12 +7353,34 @@ export type RasterPreviewResponse = {
7201
7353
  };
7202
7354
  /**
7203
7355
  * RasterTileToken
7356
+ *
7357
+ * A raster tile template, signed like its vector sibling.
7358
+ *
7359
+ * fix(#688): the raster shape used to carry no signature at all, so a client
7360
+ * following the API contract literally received an *unauthenticated* template
7361
+ * for a private raster. MapLibre issues the tile image requests itself and
7362
+ * attaches no `X-Api-Key`, so an API-key-only client could not render one —
7363
+ * the workarounds were `setTransformRequest` (not available to every consumer)
7364
+ * or `?api_key=` in the tile URL, which puts a non-expiring unscoped
7365
+ * credential into tile URLs, server logs, and saved client project files.
7366
+ *
7367
+ * `tile_url` now arrives with `sig`/`exp`/`scope` already in its query string,
7368
+ * so the template is self-sufficient and expires. The three are also returned
7369
+ * as fields, mirroring `VectorTileToken`, for clients that rebuild the URL.
7204
7370
  */
7205
7371
  export type RasterTileToken = {
7206
7372
  /**
7207
7373
  * Bounds
7208
7374
  */
7209
7375
  bounds: Array<number> | null;
7376
+ /**
7377
+ * Exp
7378
+ */
7379
+ exp: number;
7380
+ /**
7381
+ * Expires In
7382
+ */
7383
+ expires_in: number;
7210
7384
  /**
7211
7385
  * Format
7212
7386
  */
@@ -7223,6 +7397,14 @@ export type RasterTileToken = {
7223
7397
  * Minzoom
7224
7398
  */
7225
7399
  minzoom: number;
7400
+ /**
7401
+ * Scope
7402
+ */
7403
+ scope: string;
7404
+ /**
7405
+ * Sig
7406
+ */
7407
+ sig: string;
7226
7408
  /**
7227
7409
  * Tile Size
7228
7410
  */
@@ -24372,46 +24554,6 @@ export type ClusterTileEndpointTilesClustersTablePathZxyPbfGetResponses = {
24372
24554
  */
24373
24555
  200: unknown;
24374
24556
  };
24375
- export type RasterAuthCheckTilesRasterAuthCheckGetData = {
24376
- body?: never;
24377
- path?: never;
24378
- query: {
24379
- /**
24380
- * Dataset Id
24381
- */
24382
- dataset_id: string;
24383
- };
24384
- url: '/tiles/raster-auth-check/';
24385
- };
24386
- export type RasterAuthCheckTilesRasterAuthCheckGetErrors = {
24387
- /**
24388
- * Bad request — invalid query parameters or payload
24389
- */
24390
- 400: ProblemDetail;
24391
- /**
24392
- * Not found
24393
- */
24394
- 404: ProblemDetail;
24395
- /**
24396
- * Validation error
24397
- */
24398
- 422: ProblemDetail;
24399
- /**
24400
- * Internal server error
24401
- */
24402
- 500: ProblemDetail;
24403
- /**
24404
- * Service unavailable — the database could not serve the request
24405
- */
24406
- 503: ProblemDetail;
24407
- };
24408
- export type RasterAuthCheckTilesRasterAuthCheckGetError = RasterAuthCheckTilesRasterAuthCheckGetErrors[keyof RasterAuthCheckTilesRasterAuthCheckGetErrors];
24409
- export type RasterAuthCheckTilesRasterAuthCheckGetResponses = {
24410
- /**
24411
- * Successful Response
24412
- */
24413
- 200: unknown;
24414
- };
24415
24557
  export type RasterTileProxyTilesRasterProxyDatasetIdZxyFmtGetData = {
24416
24558
  body?: never;
24417
24559
  path: {