Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions apis/datasets/stac/v1/asset.proto
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ message Band {
repeated ClassificationClass classes = 8;
// SAR 1.3.2 permits frequency, center-frequency, and bandwidth metadata on Band Objects.
SARProperties sar = 9;
repeated ClassificationBitField bitfields = 10;
}

// Asset contains the canonical STAC 1.1 Asset Object fields used by the supported Items. Inheritable metadata applies
Expand Down Expand Up @@ -172,6 +173,7 @@ message Asset {
SARProperties sar = 21;
SatelliteProperties satellite = 22;
ProductProperties product = 23;
repeated ClassificationBitField bitfields = 24;
}

// Assets contains the shared profile tables and assets of one STAC Item. Asset locations reference access_profiles by
Expand Down
23 changes: 22 additions & 1 deletion apis/datasets/stac/v1/asset_metadata.proto
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ message RasterProperties {
double spatial_resolution = 4 [features.field_presence = EXPLICIT];
}

// ClassificationClass contains all Classification 2.0 class fields. Bit-field definitions are intentionally deferred.
// ClassificationClass contains all Classification 2.0 class fields.
message ClassificationClass {
int64 value = 1 [
features.field_presence = EXPLICIT,
Expand Down Expand Up @@ -94,6 +94,27 @@ message ClassificationClass {
uint64 count = 8 [features.field_presence = EXPLICIT];
}

// ClassificationBitField describes classes encoded in a contiguous range of bits, following Classification 2.0.
// Offset zero denotes the least significant bit; class values apply after extracting this bit range.
message ClassificationBitField {
uint32 offset = 1 [
features.field_presence = EXPLICIT,
(buf.validate.field).required = true
];
uint32 length = 2 [
features.field_presence = EXPLICIT,
(buf.validate.field).required = true,
(buf.validate.field).uint32.gte = 1
];
repeated ClassificationClass classes = 3 [(buf.validate.field).repeated.min_items = 1];
string name = 4 [
features.field_presence = EXPLICIT,
(buf.validate.field).string.pattern = "^[0-9A-Za-z-_]+$"
];
string description = 5 [features.field_presence = EXPLICIT];
repeated string roles = 6 [(buf.validate.field).repeated.unique = true];
}

// Projection contains the Projection 2.0 fields used by the supported Items.
message Projection {
// Explicit presence distinguishes a missing code from a value. A STAC JSON null is treated as missing.
Expand Down
23 changes: 21 additions & 2 deletions apis/workflows/v1/storage_location.proto
Original file line number Diff line number Diff line change
Expand Up @@ -157,11 +157,12 @@ enum StorageSubscriptionType {
// Azure Event Grid delivering notifications from an Azure Blob Storage container.
STORAGE_SUBSCRIPTION_TYPE_AZURE_EVENT_GRID = 3;
// Storage notifications sent by the Tilebox CLI. Typically for local storage locations. No delivery configuration is required.
// POST JSON containing object_path and optional RFC3339 event_time to /v1/storage-notifications/tilebox-cli/<subscription-id>.
// Use StorageLocationService.NotifyObjectCreated, or POST JSON containing object_path and optional RFC3339 event_time
// to /v1/storage-notifications/tilebox-cli/<subscription-id>.
// object_path is relative to the directory root and uses slash separators, without dot or parent components.
// Authenticate with Authorization: Bearer <api-key>; the organization must manage the storage location.
// The standalone on-orbit runtime does not require authentication.
// Successful deliveries return 204 after jobs and history are committed. Retries can create duplicate jobs.
// Successful HTTP deliveries return 204 after jobs and history are committed. Retries can create duplicate jobs.
STORAGE_SUBSCRIPTION_TYPE_TILEBOX_CLI = 4;
}

Expand Down Expand Up @@ -274,6 +275,20 @@ message ListStorageSubscriptionsRequest {
tilebox.v1.ID storage_location_id = 1 [(buf.validate.field).required = true];
}

// NotifyObjectCreatedRequest sends a file-ready event to a TILEBOX_CLI subscription.
message NotifyObjectCreatedRequest {
// Subscription through which to deliver the event. It must have type TILEBOX_CLI.
tilebox.v1.ID storage_subscription_id = 1 [(buf.validate.field).required = true];
// Path relative to the location root, using slash separators without dot or parent components. Must not include
// a leading slash. For example, "subdir/file.txt" or "file.txt".
string object_path = 2 [(buf.validate.field).string = {
min_bytes: 1
max_bytes: 4096
}];
// Time the object was observed, absent when unavailable.
google.protobuf.Timestamp event_time = 3;
}

// StorageSubscriptions contains notification subscriptions for a storage location.
message StorageSubscriptions {
repeated StorageSubscription subscriptions = 1;
Expand Down Expand Up @@ -360,4 +375,8 @@ service StorageLocationService {
rpc DeleteStorageSubscription(tilebox.v1.ID) returns (google.protobuf.Empty);
// ListStorageSubscriptionEvents lists received object notifications and the jobs they triggered.
rpc ListStorageSubscriptionEvents(ListStorageSubscriptionEventsRequest) returns (StorageSubscriptionEvents);

// NotifyObjectCreated delivers a storage event of a local storage location. Typically called by the Tilebox CLI
// during the `tilebox storage-location watch` command. The subscription must be of type TILEBOX_CLI.
rpc NotifyObjectCreated(NotifyObjectCreatedRequest) returns (google.protobuf.Empty);
}
29 changes: 27 additions & 2 deletions apis/workflows/v1/workflows.proto
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,18 @@ message ListPublicWorkflowsResponse {
// CreateWorkflowRequest creates a new workflow, with a name and an optional description.
// A workflow slug will be generated based on the name.
message CreateWorkflowRequest {
string name = 1 [(buf.validate.field).string.min_len = 1];
string description = 2;
string name = 1 [
(buf.validate.field).string.min_len = 1,
(buf.validate.field).string.max_len = 100
];
// short text summary of the workflow to create
string summary = 3 [(buf.validate.field).string.max_len = 50000];

// optional longer description of the workflow to create, in markdown format
string description = 2 [
features.field_presence = EXPLICIT,
(buf.validate.field).string.max_len = 1000000
];
}

// Workflow represents a logical grouping for a set of tasks. It can have multiple releases, each comprising a different
Expand All @@ -209,8 +219,23 @@ message Workflow {
// The owner-local slug, or namespace:slug for workflows owned by another namespace.
string slug = 2;
string name = 3;
// short text summary of the workflow
string summary = 6;
// optional longer description of the workflow, in markdown format
string description = 4;
repeated WorkflowRelease releases = 5;
// additional presentation metadata for public workflows, to display in the public workflow gallery.
WorkflowPresentation presentation = 7;
}

// WorkflowPresentation is an extended metadata message for a workflow, providing additional presentation properties
// for a public workflow.
message WorkflowPresentation {
string image_url = 1;
string image_alt = 2;
repeated string imagery_type = 3; // e.g. "optical", "radar", "hyperspectral", "thermal", "atmosphere"
repeated string use_case = 4; // e.g. "mosaic", "change-detection", "object-detection"
repeated string dataset_label = 5; // e.g. "Sentinel-2 L2A · 10 m"
}

// WorkflowRelease represents an immutable release of a workflow, which includes a set of tasks and an artifact.
Expand Down
Loading