@tanstack/ai-worldlabs 0.0.0 → 0.1.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.
- package/LICENSE +21 -0
- package/README.md +42 -2
- package/dist/esm/adapters/world.d.ts +38 -0
- package/dist/esm/adapters/world.js +314 -0
- package/dist/esm/adapters/world.js.map +1 -0
- package/dist/esm/byok.d.ts +1 -0
- package/dist/esm/byok.js +11 -0
- package/dist/esm/byok.js.map +1 -0
- package/dist/esm/generated/client/client.gen.d.ts +2 -0
- package/dist/esm/generated/client/client.gen.js +174 -0
- package/dist/esm/generated/client/client.gen.js.map +1 -0
- package/dist/esm/generated/client/index.d.ts +10 -0
- package/dist/esm/generated/client/index.js +5 -0
- package/dist/esm/generated/client/types.gen.d.ts +120 -0
- package/dist/esm/generated/client/utils.gen.d.ts +37 -0
- package/dist/esm/generated/client/utils.gen.js +177 -0
- package/dist/esm/generated/client/utils.gen.js.map +1 -0
- package/dist/esm/generated/client.d.ts +1 -0
- package/dist/esm/generated/client.gen.d.ts +12 -0
- package/dist/esm/generated/client.gen.js +9 -0
- package/dist/esm/generated/client.gen.js.map +1 -0
- package/dist/esm/generated/client.js +5 -0
- package/dist/esm/generated/core/auth.gen.d.ts +25 -0
- package/dist/esm/generated/core/auth.gen.js +12 -0
- package/dist/esm/generated/core/auth.gen.js.map +1 -0
- package/dist/esm/generated/core/bodySerializer.gen.d.ts +25 -0
- package/dist/esm/generated/core/bodySerializer.gen.js +6 -0
- package/dist/esm/generated/core/bodySerializer.gen.js.map +1 -0
- package/dist/esm/generated/core/params.gen.d.ts +43 -0
- package/dist/esm/generated/core/params.gen.js +9 -0
- package/dist/esm/generated/core/params.gen.js.map +1 -0
- package/dist/esm/generated/core/pathSerializer.gen.d.ts +33 -0
- package/dist/esm/generated/core/pathSerializer.gen.js +82 -0
- package/dist/esm/generated/core/pathSerializer.gen.js.map +1 -0
- package/dist/esm/generated/core/queryKeySerializer.gen.d.ts +18 -0
- package/dist/esm/generated/core/serverSentEvents.gen.d.ts +71 -0
- package/dist/esm/generated/core/serverSentEvents.gen.js +96 -0
- package/dist/esm/generated/core/serverSentEvents.gen.js.map +1 -0
- package/dist/esm/generated/core/types.gen.d.ts +83 -0
- package/dist/esm/generated/core/utils.gen.d.ts +19 -0
- package/dist/esm/generated/core/utils.gen.js +78 -0
- package/dist/esm/generated/core/utils.gen.js.map +1 -0
- package/dist/esm/generated/index.d.ts +2 -0
- package/dist/esm/generated/sdk.gen.d.ts +275 -0
- package/dist/esm/generated/sdk.gen.js +79 -0
- package/dist/esm/generated/sdk.gen.js.map +1 -0
- package/dist/esm/generated/types.gen.d.ts +1610 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/model-meta.d.ts +63 -0
- package/dist/esm/model-meta.js +17 -0
- package/dist/esm/model-meta.js.map +1 -0
- package/dist/esm/utils/client.d.ts +16 -0
- package/dist/esm/utils/client.js +35 -0
- package/dist/esm/utils/client.js.map +1 -0
- package/package.json +54 -6
- package/src/adapters/world.ts +535 -0
- package/src/byok.ts +7 -0
- package/src/generated/client/client.gen.ts +301 -0
- package/src/generated/client/index.ts +27 -0
- package/src/generated/client/types.gen.ts +247 -0
- package/src/generated/client/utils.gen.ts +332 -0
- package/src/generated/client.gen.ts +26 -0
- package/src/generated/client.ts +3 -0
- package/src/generated/core/auth.gen.ts +48 -0
- package/src/generated/core/bodySerializer.gen.ts +96 -0
- package/src/generated/core/params.gen.ts +186 -0
- package/src/generated/core/pathSerializer.gen.ts +186 -0
- package/src/generated/core/queryKeySerializer.gen.ts +139 -0
- package/src/generated/core/serverSentEvents.gen.ts +265 -0
- package/src/generated/core/types.gen.ts +124 -0
- package/src/generated/core/utils.gen.ts +146 -0
- package/src/generated/index.ts +113 -0
- package/src/generated/sdk.gen.ts +531 -0
- package/src/generated/types.gen.ts +1767 -0
- package/src/index.ts +20 -0
- package/src/model-meta.ts +79 -0
- package/src/utils/client.ts +50 -0
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import { Client, ClientMeta, Options as Options2, RequestResult, TDataShape } from './client.js';
|
|
2
|
+
import { DeleteWorldMarbleV1WorldsWorldIdDeleteData, DeleteWorldMarbleV1WorldsWorldIdDeleteErrors, DeleteWorldMarbleV1WorldsWorldIdDeleteResponses, ExportWorldMarbleV1WorldsWorldIdExportPostData, ExportWorldMarbleV1WorldsWorldIdExportPostErrors, ExportWorldMarbleV1WorldsWorldIdExportPostResponses, GenerateWorldMarbleV1WorldsGeneratePostData, GenerateWorldMarbleV1WorldsGeneratePostErrors, GenerateWorldMarbleV1WorldsGeneratePostResponses, GetCreditsMarbleV1CreditsGetData, GetCreditsMarbleV1CreditsGetResponses, GetMediaAssetMarbleV1MediaAssetsMediaAssetIdGetData, GetMediaAssetMarbleV1MediaAssetsMediaAssetIdGetErrors, GetMediaAssetMarbleV1MediaAssetsMediaAssetIdGetResponses, GetOperationMarbleV1OperationsOperationIdGetData, GetOperationMarbleV1OperationsOperationIdGetErrors, GetOperationMarbleV1OperationsOperationIdGetResponses, GetWorldMarbleV1WorldsWorldIdGetData, GetWorldMarbleV1WorldsWorldIdGetErrors, GetWorldMarbleV1WorldsWorldIdGetResponses, ListWorldsMarbleV1WorldsListPostData, ListWorldsMarbleV1WorldsListPostErrors, ListWorldsMarbleV1WorldsListPostResponses, PanoDepthToRgbMarbleV1PanoDepthToRgbPostData, PanoDepthToRgbMarbleV1PanoDepthToRgbPostErrors, PanoDepthToRgbMarbleV1PanoDepthToRgbPostResponses, PrepareMediaAssetUploadMarbleV1MediaAssetsPrepareUploadPostData, PrepareMediaAssetUploadMarbleV1MediaAssetsPrepareUploadPostErrors, PrepareMediaAssetUploadMarbleV1MediaAssetsPrepareUploadPostResponses } from './types.gen';
|
|
3
|
+
export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options2<TData, ThrowOnError, TResponse> & {
|
|
4
|
+
/**
|
|
5
|
+
* You can provide a client instance returned by `createClient()` instead of
|
|
6
|
+
* individual options. This might be also useful if you want to implement a
|
|
7
|
+
* custom client.
|
|
8
|
+
*/
|
|
9
|
+
client?: Client;
|
|
10
|
+
/**
|
|
11
|
+
* You can pass arbitrary values through the `meta` object. This can be
|
|
12
|
+
* used to access values that aren't defined as part of the SDK function.
|
|
13
|
+
*/
|
|
14
|
+
meta?: keyof ClientMeta extends never ? Record<string, unknown> : ClientMeta;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Get Credits
|
|
18
|
+
*
|
|
19
|
+
* Get remaining API credits for the authenticated user.
|
|
20
|
+
*
|
|
21
|
+
* Returns:
|
|
22
|
+
* CreditsResponse with the current aggregate API credit balance.
|
|
23
|
+
*
|
|
24
|
+
* Raises:
|
|
25
|
+
* HTTPException: 404 if the caller is not an API-enabled user
|
|
26
|
+
* HTTPException: 503 if the billing backend is unavailable
|
|
27
|
+
*/
|
|
28
|
+
export declare const getCreditsMarbleV1CreditsGet: <ThrowOnError extends boolean = false>(options?: Options<GetCreditsMarbleV1CreditsGetData, ThrowOnError>) => RequestResult<GetCreditsMarbleV1CreditsGetResponses, unknown, ThrowOnError>;
|
|
29
|
+
/**
|
|
30
|
+
* Get Media Asset
|
|
31
|
+
*
|
|
32
|
+
* Get a media asset by ID.
|
|
33
|
+
*
|
|
34
|
+
* Retrieves metadata for a previously created media asset.
|
|
35
|
+
*
|
|
36
|
+
* Args:
|
|
37
|
+
* media_asset_id: The media asset identifier.
|
|
38
|
+
*
|
|
39
|
+
* Returns:
|
|
40
|
+
* MediaAsset object with media_asset_id, file_name, extension, kind,
|
|
41
|
+
* metadata, created_at, and updated_at.
|
|
42
|
+
*
|
|
43
|
+
* Raises:
|
|
44
|
+
* HTTPException: 404 if not found
|
|
45
|
+
*/
|
|
46
|
+
export declare const getMediaAssetMarbleV1MediaAssetsMediaAssetIdGet: <ThrowOnError extends boolean = false>(options: Options<GetMediaAssetMarbleV1MediaAssetsMediaAssetIdGetData, ThrowOnError>) => RequestResult<GetMediaAssetMarbleV1MediaAssetsMediaAssetIdGetResponses, GetMediaAssetMarbleV1MediaAssetsMediaAssetIdGetErrors, ThrowOnError>;
|
|
47
|
+
/**
|
|
48
|
+
* Prepare a media asset upload
|
|
49
|
+
*
|
|
50
|
+
* Prepare a media asset upload for use in world generation.
|
|
51
|
+
*
|
|
52
|
+
* This API endpoint creates a media asset record and returns a signed upload URL.
|
|
53
|
+
* Use this workflow to upload images or videos that you want to reference in world
|
|
54
|
+
* generation requests.
|
|
55
|
+
*
|
|
56
|
+
* ## Workflow
|
|
57
|
+
*
|
|
58
|
+
* 1. **Prepare Upload** (this endpoint): Get a `media_asset_id` and `upload_url`
|
|
59
|
+
* 2. **Upload File**: Use the signed URL to upload your file
|
|
60
|
+
* 3. **Generate World**: Reference the `media_asset_id` in `/worlds:generate` with
|
|
61
|
+
* source type "media_asset"
|
|
62
|
+
*
|
|
63
|
+
* ## Request Parameters
|
|
64
|
+
*
|
|
65
|
+
* - `file_name`: Your file's name (e.g., "landscape.jpg")
|
|
66
|
+
* - `extension`: File extension without dot (e.g., "jpg", "png", "mp4")
|
|
67
|
+
* - `kind`: Either "image" or "video"
|
|
68
|
+
* - `metadata`: Optional custom metadata object
|
|
69
|
+
*
|
|
70
|
+
* ## Response
|
|
71
|
+
*
|
|
72
|
+
* Returns a `MediaAssetPrepareUploadResponse` containing:
|
|
73
|
+
*
|
|
74
|
+
* - `media_asset`: Object with `media_asset_id` (use this in world generation)
|
|
75
|
+
* - `upload_info`: Object with `upload_url`, `required_headers`, and `curl_example`
|
|
76
|
+
*
|
|
77
|
+
* ## Uploading Your File
|
|
78
|
+
*
|
|
79
|
+
* Use the returned `upload_url` and `required_headers` to upload your file:
|
|
80
|
+
*
|
|
81
|
+
* ```bash
|
|
82
|
+
* curl --request PUT \
|
|
83
|
+
* --url <upload_url> \
|
|
84
|
+
* --header "Content-Type: <content-type>" \
|
|
85
|
+
* --header "<header-name>: <header-value>" \
|
|
86
|
+
* --upload-file /path/to/your/file
|
|
87
|
+
* ```
|
|
88
|
+
*
|
|
89
|
+
* Replace:
|
|
90
|
+
* - `<upload_url>`: The `upload_url` from the response
|
|
91
|
+
* - `<content-type>`: MIME type (e.g., `image/png`, `image/jpeg`, `video/mp4`)
|
|
92
|
+
* - `<header-name>: <header-value>`: Each header from `required_headers`
|
|
93
|
+
* - `/path/to/your/file`: Path to your local file
|
|
94
|
+
*
|
|
95
|
+
* ## Example Usage in World Generation
|
|
96
|
+
*
|
|
97
|
+
* After uploading, use the `media_asset_id` in a world generation request:
|
|
98
|
+
*
|
|
99
|
+
* ```json
|
|
100
|
+
* {
|
|
101
|
+
* "world_prompt": {
|
|
102
|
+
* "type": "image",
|
|
103
|
+
* "image_prompt": {
|
|
104
|
+
* "source": "media_asset",
|
|
105
|
+
* "media_asset_id": "<your-media-asset-id>"
|
|
106
|
+
* }
|
|
107
|
+
* }
|
|
108
|
+
* }
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export declare const prepareMediaAssetUploadMarbleV1MediaAssetsPrepareUploadPost: <ThrowOnError extends boolean = false>(options: Options<PrepareMediaAssetUploadMarbleV1MediaAssetsPrepareUploadPostData, ThrowOnError>) => RequestResult<PrepareMediaAssetUploadMarbleV1MediaAssetsPrepareUploadPostResponses, PrepareMediaAssetUploadMarbleV1MediaAssetsPrepareUploadPostErrors, ThrowOnError>;
|
|
112
|
+
/**
|
|
113
|
+
* Get Operation
|
|
114
|
+
*
|
|
115
|
+
* Get an operation by ID.
|
|
116
|
+
*
|
|
117
|
+
* Poll this endpoint to check the status of a long-running operation.
|
|
118
|
+
* When done=true, the response field contains the generated world.
|
|
119
|
+
*
|
|
120
|
+
* Args:
|
|
121
|
+
* operation_id: The operation identifier from /worlds:generate.
|
|
122
|
+
*
|
|
123
|
+
* Returns:
|
|
124
|
+
* GetOperationResponse[World] with:
|
|
125
|
+
* - operation_id: Operation identifier
|
|
126
|
+
* - created_at: Creation timestamp
|
|
127
|
+
* - updated_at: Last update timestamp
|
|
128
|
+
* - expires_at: Expiration timestamp
|
|
129
|
+
* - done: true when complete, false while in progress
|
|
130
|
+
* - error: Error details if failed, null otherwise
|
|
131
|
+
* - metadata: Progress information and world_id
|
|
132
|
+
* - response: Generated World if done=true, null otherwise
|
|
133
|
+
* - cost: Settled credit cost breakdown; populated only when the
|
|
134
|
+
* operation completed successfully (done=true with no error)
|
|
135
|
+
* and a public price is known for its operation type. Failed
|
|
136
|
+
* or in-progress operations return null.
|
|
137
|
+
*
|
|
138
|
+
* Raises:
|
|
139
|
+
* HTTPException: 401 if unauthorized
|
|
140
|
+
* HTTPException: 404 if operation not found
|
|
141
|
+
* HTTPException: 500 if request fails
|
|
142
|
+
*/
|
|
143
|
+
export declare const getOperationMarbleV1OperationsOperationIdGet: <ThrowOnError extends boolean = false>(options: Options<GetOperationMarbleV1OperationsOperationIdGetData, ThrowOnError>) => RequestResult<GetOperationMarbleV1OperationsOperationIdGetResponses, GetOperationMarbleV1OperationsOperationIdGetErrors, ThrowOnError>;
|
|
144
|
+
/**
|
|
145
|
+
* Pano Depth To Rgb
|
|
146
|
+
*
|
|
147
|
+
* Generate an RGB panorama from a depth panorama.
|
|
148
|
+
*
|
|
149
|
+
* Provide a depth panorama and a text prompt
|
|
150
|
+
* describing the desired appearance. The depth map
|
|
151
|
+
* supplies the scene geometry; the model synthesizes
|
|
152
|
+
* textures that match that geometry and returns a
|
|
153
|
+
* panoramic RGB image.
|
|
154
|
+
*
|
|
155
|
+
* Accepted depth inputs:
|
|
156
|
+
*
|
|
157
|
+
* * **EXR**: float depth values. Omit
|
|
158
|
+
* ``z_min`` and ``z_max``.
|
|
159
|
+
* * **PNG**: depth values normalized to [0, 1].
|
|
160
|
+
* Provide both ``z_min`` and ``z_max`` so the
|
|
161
|
+
* service can decode the PNG correctly.
|
|
162
|
+
*
|
|
163
|
+
* For a complete PNG-based workflow, see the
|
|
164
|
+
* [web-chisel-depth-png example](https://github.com/worldlabsai/worldlabs-api-examples/tree/main/web-chisel-depth-png).
|
|
165
|
+
*
|
|
166
|
+
* Returns a long-running ``Operation``. Poll
|
|
167
|
+
* ``GET /operations/{operation_id}`` until
|
|
168
|
+
* ``done`` is ``true``, then read the generated
|
|
169
|
+
* panorama URL from ``response.pano_url``.
|
|
170
|
+
*
|
|
171
|
+
* Raises:
|
|
172
|
+
* HTTPException: 400 if invalid request
|
|
173
|
+
* HTTPException: 402 if insufficient credits
|
|
174
|
+
* HTTPException: 500 if generation could not start
|
|
175
|
+
*/
|
|
176
|
+
export declare const panoDepthToRgbMarbleV1PanoDepthToRgbPost: <ThrowOnError extends boolean = false>(options: Options<PanoDepthToRgbMarbleV1PanoDepthToRgbPostData, ThrowOnError>) => RequestResult<PanoDepthToRgbMarbleV1PanoDepthToRgbPostResponses, PanoDepthToRgbMarbleV1PanoDepthToRgbPostErrors, ThrowOnError>;
|
|
177
|
+
/**
|
|
178
|
+
* Delete World
|
|
179
|
+
*
|
|
180
|
+
* Delete a world by ID.
|
|
181
|
+
*
|
|
182
|
+
* Permanently deletes a world and its associated assets.
|
|
183
|
+
* Only the world owner can delete a world.
|
|
184
|
+
*
|
|
185
|
+
* Args:
|
|
186
|
+
* world_id: The unique identifier of the world to delete.
|
|
187
|
+
*
|
|
188
|
+
* Returns:
|
|
189
|
+
* DeleteWorldResponse confirming the deletion.
|
|
190
|
+
*
|
|
191
|
+
* Raises:
|
|
192
|
+
* HTTPException: 403 if user is not the world owner
|
|
193
|
+
* HTTPException: 404 if world not found
|
|
194
|
+
* HTTPException: 500 if deletion fails
|
|
195
|
+
*/
|
|
196
|
+
export declare const deleteWorldMarbleV1WorldsWorldIdDelete: <ThrowOnError extends boolean = false>(options: Options<DeleteWorldMarbleV1WorldsWorldIdDeleteData, ThrowOnError>) => RequestResult<DeleteWorldMarbleV1WorldsWorldIdDeleteResponses, DeleteWorldMarbleV1WorldsWorldIdDeleteErrors, ThrowOnError>;
|
|
197
|
+
/**
|
|
198
|
+
* Get World
|
|
199
|
+
*
|
|
200
|
+
* Get a world by ID.
|
|
201
|
+
*
|
|
202
|
+
* Retrieves a world's details including generated assets if available.
|
|
203
|
+
* Only the world owner or users with access to public worlds can retrieve them.
|
|
204
|
+
*
|
|
205
|
+
* Args:
|
|
206
|
+
* world_id: The unique identifier of the world.
|
|
207
|
+
*
|
|
208
|
+
* Returns:
|
|
209
|
+
* World object with world_id, display_name, tags, assets, created_at,
|
|
210
|
+
* updated_at, permission, model, world_prompt, and world_marble_url.
|
|
211
|
+
*
|
|
212
|
+
* Raises:
|
|
213
|
+
* HTTPException: 404 if world not found or access denied
|
|
214
|
+
*/
|
|
215
|
+
export declare const getWorldMarbleV1WorldsWorldIdGet: <ThrowOnError extends boolean = false>(options: Options<GetWorldMarbleV1WorldsWorldIdGetData, ThrowOnError>) => RequestResult<GetWorldMarbleV1WorldsWorldIdGetResponses, GetWorldMarbleV1WorldsWorldIdGetErrors, ThrowOnError>;
|
|
216
|
+
/**
|
|
217
|
+
* Export World
|
|
218
|
+
*
|
|
219
|
+
* Export a generated world asset.
|
|
220
|
+
*
|
|
221
|
+
* PLY splat exports are converted synchronously, cached in GCS, and returned
|
|
222
|
+
* as completed operations. HQ mesh exports reuse the existing async mesh
|
|
223
|
+
* export service and return an in-progress operation.
|
|
224
|
+
*/
|
|
225
|
+
export declare const exportWorldMarbleV1WorldsWorldIdExportPost: <ThrowOnError extends boolean = false>(options: Options<ExportWorldMarbleV1WorldsWorldIdExportPostData, ThrowOnError>) => RequestResult<ExportWorldMarbleV1WorldsWorldIdExportPostResponses, ExportWorldMarbleV1WorldsWorldIdExportPostErrors, ThrowOnError>;
|
|
226
|
+
/**
|
|
227
|
+
* Generate World
|
|
228
|
+
*
|
|
229
|
+
* Start world generation.
|
|
230
|
+
*
|
|
231
|
+
* Creates a new world generation job and returns a long-running operation.
|
|
232
|
+
* Poll the /operations/{operation_id} endpoint to check generation status
|
|
233
|
+
* and retrieve the generated world when complete.
|
|
234
|
+
*
|
|
235
|
+
* Args:
|
|
236
|
+
* request: The world generation request containing world_prompt, display_name,
|
|
237
|
+
* tags, model, seed, and permission settings.
|
|
238
|
+
*
|
|
239
|
+
* Returns:
|
|
240
|
+
* GenerateWorldResponse with operation_id and timestamps. Use the operation_id
|
|
241
|
+
* to poll for completion.
|
|
242
|
+
*
|
|
243
|
+
* Raises:
|
|
244
|
+
* HTTPException: 400 if invalid request or content violates policies
|
|
245
|
+
* HTTPException: 402 if insufficient credits
|
|
246
|
+
* HTTPException: 500 if generation could not be started
|
|
247
|
+
*/
|
|
248
|
+
export declare const generateWorldMarbleV1WorldsGeneratePost: <ThrowOnError extends boolean = false>(options: Options<GenerateWorldMarbleV1WorldsGeneratePostData, ThrowOnError>) => RequestResult<GenerateWorldMarbleV1WorldsGeneratePostResponses, GenerateWorldMarbleV1WorldsGeneratePostErrors, ThrowOnError>;
|
|
249
|
+
/**
|
|
250
|
+
* List Worlds
|
|
251
|
+
*
|
|
252
|
+
* List worlds with optional filters.
|
|
253
|
+
*
|
|
254
|
+
* Returns worlds created through the API with optional filtering and pagination.
|
|
255
|
+
*
|
|
256
|
+
* Args:
|
|
257
|
+
* request: List request with optional filters:
|
|
258
|
+
* - page_size: Number of results per page (default: 10)
|
|
259
|
+
* - page_token: Pagination token from previous response
|
|
260
|
+
* - status: Filter by status (e.g., "COMPLETED")
|
|
261
|
+
* - model: Filter by model name (e.g., "marble-1.0-plus")
|
|
262
|
+
* - tags: Filter by tags (matches worlds with any tag)
|
|
263
|
+
* - is_public: Filter by visibility (true=public, false=private, null=all)
|
|
264
|
+
* - created_after: Filter by creation time (after timestamp)
|
|
265
|
+
* - created_before: Filter by creation time (before timestamp)
|
|
266
|
+
* - sort_by: Sort order ("created_at" or "updated_at")
|
|
267
|
+
*
|
|
268
|
+
* Returns:
|
|
269
|
+
* ListWorldsResponse with worlds list and next_page_token for pagination.
|
|
270
|
+
*
|
|
271
|
+
* Raises:
|
|
272
|
+
* HTTPException: 400 if invalid parameters
|
|
273
|
+
* HTTPException: 500 if request fails
|
|
274
|
+
*/
|
|
275
|
+
export declare const listWorldsMarbleV1WorldsListPost: <ThrowOnError extends boolean = false>(options: Options<ListWorldsMarbleV1WorldsListPostData, ThrowOnError>) => RequestResult<ListWorldsMarbleV1WorldsListPostResponses, ListWorldsMarbleV1WorldsListPostErrors, ThrowOnError>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { client } from "./client.gen.js";
|
|
2
|
+
//#region src/generated/sdk.gen.ts
|
|
3
|
+
/**
|
|
4
|
+
* Get Operation
|
|
5
|
+
*
|
|
6
|
+
* Get an operation by ID.
|
|
7
|
+
*
|
|
8
|
+
* Poll this endpoint to check the status of a long-running operation.
|
|
9
|
+
* When done=true, the response field contains the generated world.
|
|
10
|
+
*
|
|
11
|
+
* Args:
|
|
12
|
+
* operation_id: The operation identifier from /worlds:generate.
|
|
13
|
+
*
|
|
14
|
+
* Returns:
|
|
15
|
+
* GetOperationResponse[World] with:
|
|
16
|
+
* - operation_id: Operation identifier
|
|
17
|
+
* - created_at: Creation timestamp
|
|
18
|
+
* - updated_at: Last update timestamp
|
|
19
|
+
* - expires_at: Expiration timestamp
|
|
20
|
+
* - done: true when complete, false while in progress
|
|
21
|
+
* - error: Error details if failed, null otherwise
|
|
22
|
+
* - metadata: Progress information and world_id
|
|
23
|
+
* - response: Generated World if done=true, null otherwise
|
|
24
|
+
* - cost: Settled credit cost breakdown; populated only when the
|
|
25
|
+
* operation completed successfully (done=true with no error)
|
|
26
|
+
* and a public price is known for its operation type. Failed
|
|
27
|
+
* or in-progress operations return null.
|
|
28
|
+
*
|
|
29
|
+
* Raises:
|
|
30
|
+
* HTTPException: 401 if unauthorized
|
|
31
|
+
* HTTPException: 404 if operation not found
|
|
32
|
+
* HTTPException: 500 if request fails
|
|
33
|
+
*/
|
|
34
|
+
var getOperationMarbleV1OperationsOperationIdGet = (options) => (options.client ?? client).get({
|
|
35
|
+
security: [{
|
|
36
|
+
name: "WLT-Api-Key",
|
|
37
|
+
type: "apiKey"
|
|
38
|
+
}],
|
|
39
|
+
url: "/marble/v1/operations/{operation_id}",
|
|
40
|
+
...options
|
|
41
|
+
});
|
|
42
|
+
/**
|
|
43
|
+
* Generate World
|
|
44
|
+
*
|
|
45
|
+
* Start world generation.
|
|
46
|
+
*
|
|
47
|
+
* Creates a new world generation job and returns a long-running operation.
|
|
48
|
+
* Poll the /operations/{operation_id} endpoint to check generation status
|
|
49
|
+
* and retrieve the generated world when complete.
|
|
50
|
+
*
|
|
51
|
+
* Args:
|
|
52
|
+
* request: The world generation request containing world_prompt, display_name,
|
|
53
|
+
* tags, model, seed, and permission settings.
|
|
54
|
+
*
|
|
55
|
+
* Returns:
|
|
56
|
+
* GenerateWorldResponse with operation_id and timestamps. Use the operation_id
|
|
57
|
+
* to poll for completion.
|
|
58
|
+
*
|
|
59
|
+
* Raises:
|
|
60
|
+
* HTTPException: 400 if invalid request or content violates policies
|
|
61
|
+
* HTTPException: 402 if insufficient credits
|
|
62
|
+
* HTTPException: 500 if generation could not be started
|
|
63
|
+
*/
|
|
64
|
+
var generateWorldMarbleV1WorldsGeneratePost = (options) => (options.client ?? client).post({
|
|
65
|
+
security: [{
|
|
66
|
+
name: "WLT-Api-Key",
|
|
67
|
+
type: "apiKey"
|
|
68
|
+
}],
|
|
69
|
+
url: "/marble/v1/worlds:generate",
|
|
70
|
+
...options,
|
|
71
|
+
headers: {
|
|
72
|
+
"Content-Type": "application/json",
|
|
73
|
+
...options.headers
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
//#endregion
|
|
77
|
+
export { generateWorldMarbleV1WorldsGeneratePost, getOperationMarbleV1OperationsOperationIdGet };
|
|
78
|
+
|
|
79
|
+
//# sourceMappingURL=sdk.gen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.gen.js","names":[],"sources":["../../../src/generated/sdk.gen.ts"],"sourcesContent":["// This file is auto-generated by @hey-api/openapi-ts\n\nimport type {\n Client,\n ClientMeta,\n Options as Options2,\n RequestResult,\n TDataShape,\n} from './client'\nimport { client } from './client.gen'\nimport type {\n DeleteWorldMarbleV1WorldsWorldIdDeleteData,\n DeleteWorldMarbleV1WorldsWorldIdDeleteErrors,\n DeleteWorldMarbleV1WorldsWorldIdDeleteResponses,\n ExportWorldMarbleV1WorldsWorldIdExportPostData,\n ExportWorldMarbleV1WorldsWorldIdExportPostErrors,\n ExportWorldMarbleV1WorldsWorldIdExportPostResponses,\n GenerateWorldMarbleV1WorldsGeneratePostData,\n GenerateWorldMarbleV1WorldsGeneratePostErrors,\n GenerateWorldMarbleV1WorldsGeneratePostResponses,\n GetCreditsMarbleV1CreditsGetData,\n GetCreditsMarbleV1CreditsGetResponses,\n GetMediaAssetMarbleV1MediaAssetsMediaAssetIdGetData,\n GetMediaAssetMarbleV1MediaAssetsMediaAssetIdGetErrors,\n GetMediaAssetMarbleV1MediaAssetsMediaAssetIdGetResponses,\n GetOperationMarbleV1OperationsOperationIdGetData,\n GetOperationMarbleV1OperationsOperationIdGetErrors,\n GetOperationMarbleV1OperationsOperationIdGetResponses,\n GetWorldMarbleV1WorldsWorldIdGetData,\n GetWorldMarbleV1WorldsWorldIdGetErrors,\n GetWorldMarbleV1WorldsWorldIdGetResponses,\n ListWorldsMarbleV1WorldsListPostData,\n ListWorldsMarbleV1WorldsListPostErrors,\n ListWorldsMarbleV1WorldsListPostResponses,\n PanoDepthToRgbMarbleV1PanoDepthToRgbPostData,\n PanoDepthToRgbMarbleV1PanoDepthToRgbPostErrors,\n PanoDepthToRgbMarbleV1PanoDepthToRgbPostResponses,\n PrepareMediaAssetUploadMarbleV1MediaAssetsPrepareUploadPostData,\n PrepareMediaAssetUploadMarbleV1MediaAssetsPrepareUploadPostErrors,\n PrepareMediaAssetUploadMarbleV1MediaAssetsPrepareUploadPostResponses,\n} from './types.gen'\n\nexport type Options<\n TData extends TDataShape = TDataShape,\n ThrowOnError extends boolean = boolean,\n TResponse = unknown,\n> = Options2<TData, ThrowOnError, TResponse> & {\n /**\n * You can provide a client instance returned by `createClient()` instead of\n * individual options. This might be also useful if you want to implement a\n * custom client.\n */\n client?: Client\n /**\n * You can pass arbitrary values through the `meta` object. This can be\n * used to access values that aren't defined as part of the SDK function.\n */\n meta?: keyof ClientMeta extends never ? Record<string, unknown> : ClientMeta\n}\n\n/**\n * Get Credits\n *\n * Get remaining API credits for the authenticated user.\n *\n * Returns:\n * CreditsResponse with the current aggregate API credit balance.\n *\n * Raises:\n * HTTPException: 404 if the caller is not an API-enabled user\n * HTTPException: 503 if the billing backend is unavailable\n */\nexport const getCreditsMarbleV1CreditsGet = <\n ThrowOnError extends boolean = false,\n>(\n options?: Options<GetCreditsMarbleV1CreditsGetData, ThrowOnError>,\n): RequestResult<\n GetCreditsMarbleV1CreditsGetResponses,\n unknown,\n ThrowOnError\n> =>\n (options?.client ?? client).get<\n GetCreditsMarbleV1CreditsGetResponses,\n unknown,\n ThrowOnError\n >({\n security: [{ name: 'WLT-Api-Key', type: 'apiKey' }],\n url: '/marble/v1/credits',\n ...options,\n })\n\n/**\n * Get Media Asset\n *\n * Get a media asset by ID.\n *\n * Retrieves metadata for a previously created media asset.\n *\n * Args:\n * media_asset_id: The media asset identifier.\n *\n * Returns:\n * MediaAsset object with media_asset_id, file_name, extension, kind,\n * metadata, created_at, and updated_at.\n *\n * Raises:\n * HTTPException: 404 if not found\n */\nexport const getMediaAssetMarbleV1MediaAssetsMediaAssetIdGet = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<\n GetMediaAssetMarbleV1MediaAssetsMediaAssetIdGetData,\n ThrowOnError\n >,\n): RequestResult<\n GetMediaAssetMarbleV1MediaAssetsMediaAssetIdGetResponses,\n GetMediaAssetMarbleV1MediaAssetsMediaAssetIdGetErrors,\n ThrowOnError\n> =>\n (options.client ?? client).get<\n GetMediaAssetMarbleV1MediaAssetsMediaAssetIdGetResponses,\n GetMediaAssetMarbleV1MediaAssetsMediaAssetIdGetErrors,\n ThrowOnError\n >({\n security: [{ name: 'WLT-Api-Key', type: 'apiKey' }],\n url: '/marble/v1/media-assets/{media_asset_id}',\n ...options,\n })\n\n/**\n * Prepare a media asset upload\n *\n * Prepare a media asset upload for use in world generation.\n *\n * This API endpoint creates a media asset record and returns a signed upload URL.\n * Use this workflow to upload images or videos that you want to reference in world\n * generation requests.\n *\n * ## Workflow\n *\n * 1. **Prepare Upload** (this endpoint): Get a `media_asset_id` and `upload_url`\n * 2. **Upload File**: Use the signed URL to upload your file\n * 3. **Generate World**: Reference the `media_asset_id` in `/worlds:generate` with\n * source type \"media_asset\"\n *\n * ## Request Parameters\n *\n * - `file_name`: Your file's name (e.g., \"landscape.jpg\")\n * - `extension`: File extension without dot (e.g., \"jpg\", \"png\", \"mp4\")\n * - `kind`: Either \"image\" or \"video\"\n * - `metadata`: Optional custom metadata object\n *\n * ## Response\n *\n * Returns a `MediaAssetPrepareUploadResponse` containing:\n *\n * - `media_asset`: Object with `media_asset_id` (use this in world generation)\n * - `upload_info`: Object with `upload_url`, `required_headers`, and `curl_example`\n *\n * ## Uploading Your File\n *\n * Use the returned `upload_url` and `required_headers` to upload your file:\n *\n * ```bash\n * curl --request PUT \\\n * --url <upload_url> \\\n * --header \"Content-Type: <content-type>\" \\\n * --header \"<header-name>: <header-value>\" \\\n * --upload-file /path/to/your/file\n * ```\n *\n * Replace:\n * - `<upload_url>`: The `upload_url` from the response\n * - `<content-type>`: MIME type (e.g., `image/png`, `image/jpeg`, `video/mp4`)\n * - `<header-name>: <header-value>`: Each header from `required_headers`\n * - `/path/to/your/file`: Path to your local file\n *\n * ## Example Usage in World Generation\n *\n * After uploading, use the `media_asset_id` in a world generation request:\n *\n * ```json\n * {\n * \"world_prompt\": {\n * \"type\": \"image\",\n * \"image_prompt\": {\n * \"source\": \"media_asset\",\n * \"media_asset_id\": \"<your-media-asset-id>\"\n * }\n * }\n * }\n * ```\n */\nexport const prepareMediaAssetUploadMarbleV1MediaAssetsPrepareUploadPost = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<\n PrepareMediaAssetUploadMarbleV1MediaAssetsPrepareUploadPostData,\n ThrowOnError\n >,\n): RequestResult<\n PrepareMediaAssetUploadMarbleV1MediaAssetsPrepareUploadPostResponses,\n PrepareMediaAssetUploadMarbleV1MediaAssetsPrepareUploadPostErrors,\n ThrowOnError\n> =>\n (options.client ?? client).post<\n PrepareMediaAssetUploadMarbleV1MediaAssetsPrepareUploadPostResponses,\n PrepareMediaAssetUploadMarbleV1MediaAssetsPrepareUploadPostErrors,\n ThrowOnError\n >({\n security: [{ name: 'WLT-Api-Key', type: 'apiKey' }],\n url: '/marble/v1/media-assets:prepare_upload',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n })\n\n/**\n * Get Operation\n *\n * Get an operation by ID.\n *\n * Poll this endpoint to check the status of a long-running operation.\n * When done=true, the response field contains the generated world.\n *\n * Args:\n * operation_id: The operation identifier from /worlds:generate.\n *\n * Returns:\n * GetOperationResponse[World] with:\n * - operation_id: Operation identifier\n * - created_at: Creation timestamp\n * - updated_at: Last update timestamp\n * - expires_at: Expiration timestamp\n * - done: true when complete, false while in progress\n * - error: Error details if failed, null otherwise\n * - metadata: Progress information and world_id\n * - response: Generated World if done=true, null otherwise\n * - cost: Settled credit cost breakdown; populated only when the\n * operation completed successfully (done=true with no error)\n * and a public price is known for its operation type. Failed\n * or in-progress operations return null.\n *\n * Raises:\n * HTTPException: 401 if unauthorized\n * HTTPException: 404 if operation not found\n * HTTPException: 500 if request fails\n */\nexport const getOperationMarbleV1OperationsOperationIdGet = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<\n GetOperationMarbleV1OperationsOperationIdGetData,\n ThrowOnError\n >,\n): RequestResult<\n GetOperationMarbleV1OperationsOperationIdGetResponses,\n GetOperationMarbleV1OperationsOperationIdGetErrors,\n ThrowOnError\n> =>\n (options.client ?? client).get<\n GetOperationMarbleV1OperationsOperationIdGetResponses,\n GetOperationMarbleV1OperationsOperationIdGetErrors,\n ThrowOnError\n >({\n security: [{ name: 'WLT-Api-Key', type: 'apiKey' }],\n url: '/marble/v1/operations/{operation_id}',\n ...options,\n })\n\n/**\n * Pano Depth To Rgb\n *\n * Generate an RGB panorama from a depth panorama.\n *\n * Provide a depth panorama and a text prompt\n * describing the desired appearance. The depth map\n * supplies the scene geometry; the model synthesizes\n * textures that match that geometry and returns a\n * panoramic RGB image.\n *\n * Accepted depth inputs:\n *\n * * **EXR**: float depth values. Omit\n * ``z_min`` and ``z_max``.\n * * **PNG**: depth values normalized to [0, 1].\n * Provide both ``z_min`` and ``z_max`` so the\n * service can decode the PNG correctly.\n *\n * For a complete PNG-based workflow, see the\n * [web-chisel-depth-png example](https://github.com/worldlabsai/worldlabs-api-examples/tree/main/web-chisel-depth-png).\n *\n * Returns a long-running ``Operation``. Poll\n * ``GET /operations/{operation_id}`` until\n * ``done`` is ``true``, then read the generated\n * panorama URL from ``response.pano_url``.\n *\n * Raises:\n * HTTPException: 400 if invalid request\n * HTTPException: 402 if insufficient credits\n * HTTPException: 500 if generation could not start\n */\nexport const panoDepthToRgbMarbleV1PanoDepthToRgbPost = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<PanoDepthToRgbMarbleV1PanoDepthToRgbPostData, ThrowOnError>,\n): RequestResult<\n PanoDepthToRgbMarbleV1PanoDepthToRgbPostResponses,\n PanoDepthToRgbMarbleV1PanoDepthToRgbPostErrors,\n ThrowOnError\n> =>\n (options.client ?? client).post<\n PanoDepthToRgbMarbleV1PanoDepthToRgbPostResponses,\n PanoDepthToRgbMarbleV1PanoDepthToRgbPostErrors,\n ThrowOnError\n >({\n security: [{ name: 'WLT-Api-Key', type: 'apiKey' }],\n url: '/marble/v1/pano:depth_to_rgb',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n })\n\n/**\n * Delete World\n *\n * Delete a world by ID.\n *\n * Permanently deletes a world and its associated assets.\n * Only the world owner can delete a world.\n *\n * Args:\n * world_id: The unique identifier of the world to delete.\n *\n * Returns:\n * DeleteWorldResponse confirming the deletion.\n *\n * Raises:\n * HTTPException: 403 if user is not the world owner\n * HTTPException: 404 if world not found\n * HTTPException: 500 if deletion fails\n */\nexport const deleteWorldMarbleV1WorldsWorldIdDelete = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<DeleteWorldMarbleV1WorldsWorldIdDeleteData, ThrowOnError>,\n): RequestResult<\n DeleteWorldMarbleV1WorldsWorldIdDeleteResponses,\n DeleteWorldMarbleV1WorldsWorldIdDeleteErrors,\n ThrowOnError\n> =>\n (options.client ?? client).delete<\n DeleteWorldMarbleV1WorldsWorldIdDeleteResponses,\n DeleteWorldMarbleV1WorldsWorldIdDeleteErrors,\n ThrowOnError\n >({\n security: [{ name: 'WLT-Api-Key', type: 'apiKey' }],\n url: '/marble/v1/worlds/{world_id}',\n ...options,\n })\n\n/**\n * Get World\n *\n * Get a world by ID.\n *\n * Retrieves a world's details including generated assets if available.\n * Only the world owner or users with access to public worlds can retrieve them.\n *\n * Args:\n * world_id: The unique identifier of the world.\n *\n * Returns:\n * World object with world_id, display_name, tags, assets, created_at,\n * updated_at, permission, model, world_prompt, and world_marble_url.\n *\n * Raises:\n * HTTPException: 404 if world not found or access denied\n */\nexport const getWorldMarbleV1WorldsWorldIdGet = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<GetWorldMarbleV1WorldsWorldIdGetData, ThrowOnError>,\n): RequestResult<\n GetWorldMarbleV1WorldsWorldIdGetResponses,\n GetWorldMarbleV1WorldsWorldIdGetErrors,\n ThrowOnError\n> =>\n (options.client ?? client).get<\n GetWorldMarbleV1WorldsWorldIdGetResponses,\n GetWorldMarbleV1WorldsWorldIdGetErrors,\n ThrowOnError\n >({\n security: [{ name: 'WLT-Api-Key', type: 'apiKey' }],\n url: '/marble/v1/worlds/{world_id}',\n ...options,\n })\n\n/**\n * Export World\n *\n * Export a generated world asset.\n *\n * PLY splat exports are converted synchronously, cached in GCS, and returned\n * as completed operations. HQ mesh exports reuse the existing async mesh\n * export service and return an in-progress operation.\n */\nexport const exportWorldMarbleV1WorldsWorldIdExportPost = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<\n ExportWorldMarbleV1WorldsWorldIdExportPostData,\n ThrowOnError\n >,\n): RequestResult<\n ExportWorldMarbleV1WorldsWorldIdExportPostResponses,\n ExportWorldMarbleV1WorldsWorldIdExportPostErrors,\n ThrowOnError\n> =>\n (options.client ?? client).post<\n ExportWorldMarbleV1WorldsWorldIdExportPostResponses,\n ExportWorldMarbleV1WorldsWorldIdExportPostErrors,\n ThrowOnError\n >({\n security: [{ name: 'WLT-Api-Key', type: 'apiKey' }],\n url: '/marble/v1/worlds/{world_id}:export',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n })\n\n/**\n * Generate World\n *\n * Start world generation.\n *\n * Creates a new world generation job and returns a long-running operation.\n * Poll the /operations/{operation_id} endpoint to check generation status\n * and retrieve the generated world when complete.\n *\n * Args:\n * request: The world generation request containing world_prompt, display_name,\n * tags, model, seed, and permission settings.\n *\n * Returns:\n * GenerateWorldResponse with operation_id and timestamps. Use the operation_id\n * to poll for completion.\n *\n * Raises:\n * HTTPException: 400 if invalid request or content violates policies\n * HTTPException: 402 if insufficient credits\n * HTTPException: 500 if generation could not be started\n */\nexport const generateWorldMarbleV1WorldsGeneratePost = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<GenerateWorldMarbleV1WorldsGeneratePostData, ThrowOnError>,\n): RequestResult<\n GenerateWorldMarbleV1WorldsGeneratePostResponses,\n GenerateWorldMarbleV1WorldsGeneratePostErrors,\n ThrowOnError\n> =>\n (options.client ?? client).post<\n GenerateWorldMarbleV1WorldsGeneratePostResponses,\n GenerateWorldMarbleV1WorldsGeneratePostErrors,\n ThrowOnError\n >({\n security: [{ name: 'WLT-Api-Key', type: 'apiKey' }],\n url: '/marble/v1/worlds:generate',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n })\n\n/**\n * List Worlds\n *\n * List worlds with optional filters.\n *\n * Returns worlds created through the API with optional filtering and pagination.\n *\n * Args:\n * request: List request with optional filters:\n * - page_size: Number of results per page (default: 10)\n * - page_token: Pagination token from previous response\n * - status: Filter by status (e.g., \"COMPLETED\")\n * - model: Filter by model name (e.g., \"marble-1.0-plus\")\n * - tags: Filter by tags (matches worlds with any tag)\n * - is_public: Filter by visibility (true=public, false=private, null=all)\n * - created_after: Filter by creation time (after timestamp)\n * - created_before: Filter by creation time (before timestamp)\n * - sort_by: Sort order (\"created_at\" or \"updated_at\")\n *\n * Returns:\n * ListWorldsResponse with worlds list and next_page_token for pagination.\n *\n * Raises:\n * HTTPException: 400 if invalid parameters\n * HTTPException: 500 if request fails\n */\nexport const listWorldsMarbleV1WorldsListPost = <\n ThrowOnError extends boolean = false,\n>(\n options: Options<ListWorldsMarbleV1WorldsListPostData, ThrowOnError>,\n): RequestResult<\n ListWorldsMarbleV1WorldsListPostResponses,\n ListWorldsMarbleV1WorldsListPostErrors,\n ThrowOnError\n> =>\n (options.client ?? client).post<\n ListWorldsMarbleV1WorldsListPostResponses,\n ListWorldsMarbleV1WorldsListPostErrors,\n ThrowOnError\n >({\n security: [{ name: 'WLT-Api-Key', type: 'apiKey' }],\n url: '/marble/v1/worlds:list',\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options.headers,\n },\n })\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2PA,IAAa,gDAGX,aASC,QAAQ,UAAU,OAAA,CAAQ,IAIzB;CACA,UAAU,CAAC;EAAE,MAAM;EAAe,MAAM;CAAS,CAAC;CAClD,KAAK;CACL,GAAG;AACL,CAAC;;;;;;;;;;;;;;;;;;;;;;;AA6LH,IAAa,2CAGX,aAMC,QAAQ,UAAU,OAAA,CAAQ,KAIzB;CACA,UAAU,CAAC;EAAE,MAAM;EAAe,MAAM;CAAS,CAAC;CAClD,KAAK;CACL,GAAG;CACH,SAAS;EACP,gBAAgB;EAChB,GAAG,QAAQ;CACb;AACF,CAAC"}
|