@alliumcloud/configurator-service 1.0.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.
@@ -0,0 +1,340 @@
1
+ /**
2
+ * Shared primitive types and SDK config used across all modules.
3
+ */
4
+ type ConfiguratorServiceSDKConfig = {
5
+ apiKey: string;
6
+ jwksUri: string;
7
+ accessTokenProvider: () => string | Promise<string>;
8
+ timeout?: number;
9
+ /** @internal - dev only, not for production use */
10
+ _devBaseUrl?: string;
11
+ };
12
+ type SpaceItemType = "RuntimeModel" | "SpatialMedia" | "LibraryModel" | "RuntimeStream" | "BridgeToolkitSettings" | "Configurator" | "ConfiguratorObject";
13
+ type ConfiguratorType = "string" | "number" | "boolean" | "enum" | "trigger" | "image" | "String" | "Number" | "Bool" | "Enum" | "Trigger" | "Image";
14
+ type Vector3 = {
15
+ x: number;
16
+ y: number;
17
+ z: number;
18
+ };
19
+ type SpaceContext = {
20
+ orgId: string;
21
+ spaceId: string;
22
+ type: SpaceItemType;
23
+ name: string;
24
+ position: Vector3;
25
+ rotation: Vector3;
26
+ offsetUpRotation: number;
27
+ thumb?: string;
28
+ isLocked?: boolean;
29
+ user?: string;
30
+ };
31
+
32
+ type SpatialMediaTypes = "video" | "link";
33
+ type SpatialMediaBase = Omit<SpaceContext, "type"> & {
34
+ type: "SpatialMedia";
35
+ mediaType: SpatialMediaTypes;
36
+ url: string;
37
+ attenuation: number;
38
+ };
39
+ type CreateVideoInput = Omit<SpatialMediaBase, "mediaType"> & {
40
+ mediaType: "video";
41
+ volume: number;
42
+ loop: boolean;
43
+ audioOnly: boolean;
44
+ showPreview: boolean;
45
+ autoplay?: boolean;
46
+ };
47
+ type UpdateVideoInput = {
48
+ orgId: string;
49
+ spaceId: string;
50
+ spaceItemId: string;
51
+ url?: string;
52
+ volume?: number;
53
+ attenuation?: number;
54
+ loop?: boolean;
55
+ audioOnly?: boolean;
56
+ showPreview?: boolean;
57
+ };
58
+ type CreateLinkInput = Omit<SpatialMediaBase, "mediaType"> & {
59
+ mediaType: "link";
60
+ isPortrait: boolean;
61
+ openInNewTab?: boolean;
62
+ displayName?: string;
63
+ };
64
+ type UpdateLinkInput = {
65
+ orgId: string;
66
+ spaceId: string;
67
+ spaceItemId: string;
68
+ url?: string;
69
+ name?: string;
70
+ openInNewTab?: boolean;
71
+ isPortrait?: boolean;
72
+ };
73
+ type CreateStreamInput = Omit<SpaceContext, "type"> & {
74
+ type: "RuntimeStream";
75
+ spaceStreamId: string;
76
+ scale?: Vector3;
77
+ autoScale?: boolean;
78
+ offsetUniformScale?: number;
79
+ name: string;
80
+ attenuation?: number;
81
+ volume?: number;
82
+ audioOnly?: boolean;
83
+ };
84
+ type UpdateStreamInput = {
85
+ orgId: string;
86
+ spaceId: string;
87
+ spaceItemId: string;
88
+ audioOnly?: boolean;
89
+ curvature?: number;
90
+ aspectRatio?: "4:3" | "16:9";
91
+ attenuation?: number;
92
+ volume?: number;
93
+ };
94
+
95
+ /**
96
+ * Media Module - Operations
97
+ */
98
+
99
+ interface MediaHandle {
100
+ addVideo(data: CreateVideoInput): Promise<void>;
101
+ updateVideo(spaceItemId: string, data: UpdateVideoInput): Promise<void>;
102
+ addStream(data: CreateStreamInput): Promise<void>;
103
+ updateStream(spaceItemId: string, data: UpdateStreamInput): Promise<void>;
104
+ addLink(data: CreateLinkInput): Promise<void>;
105
+ updateLink(spaceItemId: string, data: UpdateLinkInput): Promise<void>;
106
+ }
107
+
108
+ type ModelAuthor = {
109
+ username: string;
110
+ profileUrl: string;
111
+ };
112
+ type ModelGlbInfo = {
113
+ faceCount?: number;
114
+ textureCount?: number;
115
+ size?: number;
116
+ vertexCount?: number;
117
+ textureMaxResolution?: number;
118
+ };
119
+ type ModelMetadata = {
120
+ uid?: string;
121
+ viewerUrl?: string;
122
+ author?: ModelAuthor;
123
+ license?: string;
124
+ glb?: ModelGlbInfo;
125
+ };
126
+ type CreateSketchfabObjectInput = Omit<SpaceContext, "type"> & {
127
+ type: "RuntimeModel";
128
+ gltfUrl?: string;
129
+ materialOverrideId: string;
130
+ scale: Vector3;
131
+ autoScale: boolean;
132
+ offsetUniformScale: number;
133
+ collisionsEnabled: boolean;
134
+ currentAnimation?: string;
135
+ availableAnimations?: string[];
136
+ metadata?: ModelMetadata;
137
+ thumb?: string;
138
+ sketchfabTempUrl?: string;
139
+ };
140
+ type UpdateSketchfabObjectInput = {
141
+ orgId: string;
142
+ spaceId: string;
143
+ spaceItemId: string;
144
+ collisionsEnabled?: boolean;
145
+ currentAnimation?: string;
146
+ };
147
+
148
+ /**
149
+ * Sketchfab Module - 3D Object Operations
150
+ */
151
+
152
+ interface SketchfabHandle {
153
+ addObject(data: CreateSketchfabObjectInput): Promise<void>;
154
+ updateObject(spaceItemId: string, data: UpdateSketchfabObjectInput): Promise<void>;
155
+ }
156
+
157
+ type TransformItemContext = {
158
+ orgId: string;
159
+ spaceId: string;
160
+ spaceItemId: string;
161
+ };
162
+ type UpdatePositionInput = TransformItemContext & {
163
+ position: Vector3;
164
+ };
165
+ type UpdateRotationInput = TransformItemContext & {
166
+ rotation: Vector3;
167
+ offsetUpRotation?: number;
168
+ };
169
+ type UpdateScaleInput = TransformItemContext & {
170
+ scale?: Vector3;
171
+ offsetUniformScale: number;
172
+ };
173
+ type SnapToGroundInput = TransformItemContext;
174
+
175
+ /**
176
+ * Transform Module - Position, Rotation, Scale Operations
177
+ */
178
+
179
+ interface TransformHandle {
180
+ updatePosition(spaceItemId: string, data: UpdatePositionInput): Promise<void>;
181
+ updateRotation(spaceItemId: string, data: UpdateRotationInput): Promise<void>;
182
+ updateScale(spaceItemId: string, data: UpdateScaleInput): Promise<void>;
183
+ snapToGround(spaceItemId: string, data: SnapToGroundInput): Promise<void>;
184
+ }
185
+
186
+ type LockLayerItemInput = {
187
+ orgId: string;
188
+ spaceId: string;
189
+ spaceItemId: string;
190
+ isLocked: boolean;
191
+ };
192
+ type RenameLayerItemInput = {
193
+ orgId: string;
194
+ spaceId: string;
195
+ spaceItemId: string;
196
+ name: string;
197
+ };
198
+ type DeleteLayerItemInput = {
199
+ orgId: string;
200
+ spaceId: string;
201
+ spaceItemId: string;
202
+ };
203
+ type DeleteAllLayerItemsInput = {
204
+ orgId: string;
205
+ spaceId: string;
206
+ };
207
+
208
+ /**
209
+ * Layer Module - Lock, Rename, Delete Operations
210
+ */
211
+
212
+ interface LayerHandle {
213
+ lockItem(spaceItemId: string, data: LockLayerItemInput): Promise<void>;
214
+ renameItem(spaceItemId: string, data: RenameLayerItemInput): Promise<void>;
215
+ deleteItem(spaceItemId: string, data: DeleteLayerItemInput): Promise<void>;
216
+ deleteAll(data: DeleteAllLayerItemsInput): Promise<void>;
217
+ }
218
+
219
+ type ConfiguratorItemSchema = {
220
+ displayName: string;
221
+ type: ConfiguratorType;
222
+ default: string | number | boolean;
223
+ values?: (string | number)[];
224
+ max?: number;
225
+ min?: number;
226
+ step?: number;
227
+ isPersisted?: boolean;
228
+ isNetworked?: boolean;
229
+ };
230
+ type CreateConfiguratorItemInput = {
231
+ orgId: string;
232
+ spaceId: string;
233
+ spaceItemId: string;
234
+ itemTemplateId: string;
235
+ name: string;
236
+ levelFilePath?: string;
237
+ denormalizeOnUpdate: boolean;
238
+ currentState?: string | number | boolean;
239
+ schema: ConfiguratorItemSchema;
240
+ };
241
+ type UpdateConfiguratorItemStateInput = {
242
+ orgId: string;
243
+ spaceId: string;
244
+ spaceItemId: string;
245
+ currentState: string | number | boolean;
246
+ };
247
+
248
+ /**
249
+ * Configurator Items Module - Level-wide property operations
250
+ */
251
+
252
+ interface ConfiguratorItemsHandle {
253
+ create(data: CreateConfiguratorItemInput): Promise<void>;
254
+ updateState(spaceItemId: string, data: UpdateConfiguratorItemStateInput): Promise<void>;
255
+ }
256
+
257
+ type ObjectConfigurationValue = {
258
+ displayName: string;
259
+ type: ConfiguratorType;
260
+ currentState: string | number | boolean;
261
+ default: string | number | boolean;
262
+ max?: number;
263
+ min?: number;
264
+ step?: number;
265
+ values: (string | number)[];
266
+ displayType?: "image" | "dropdown";
267
+ valuesImages?: {
268
+ displayName: string;
269
+ thumb?: string;
270
+ }[];
271
+ };
272
+ type EnumObjectConfigurationValue = {
273
+ displayName: string;
274
+ type: "enum";
275
+ currentState: string | number;
276
+ default: string | number;
277
+ values: (string | number)[];
278
+ displayType: "image" | "dropdown";
279
+ max?: number;
280
+ min?: number;
281
+ step?: number;
282
+ valuesImages?: {
283
+ displayName: string;
284
+ thumb?: string;
285
+ }[];
286
+ };
287
+ type ConfigurationMap = {
288
+ [key: string]: ObjectConfigurationValue | EnumObjectConfigurationValue;
289
+ };
290
+ type CreateConfiguratorObjectInput = Omit<SpaceContext, "type"> & {
291
+ type: "ConfiguratorObject";
292
+ ueId: string;
293
+ versionId: string;
294
+ scale: Vector3;
295
+ offsetUniformScale: number;
296
+ configuration: ConfigurationMap;
297
+ };
298
+ type UpdateConfiguratorObjectConfigInput = {
299
+ orgId: string;
300
+ spaceId: string;
301
+ spaceItemId: string;
302
+ configuration: ConfigurationMap;
303
+ };
304
+
305
+ /**
306
+ * Configurator Objects Module - UE Actor placement and configuration
307
+ */
308
+
309
+ interface ConfiguratorObjectsHandle {
310
+ create(data: CreateConfiguratorObjectInput): Promise<void>;
311
+ updateConfiguration(spaceItemId: string, data: UpdateConfiguratorObjectConfigInput): Promise<void>;
312
+ }
313
+
314
+ /**
315
+ * SDK Error factories.
316
+ */
317
+ interface AlliumError extends Error {
318
+ readonly code: string;
319
+ }
320
+ /** Type guard — works for all Allium error factories */
321
+ declare function isAlliumError(err: unknown): err is AlliumError;
322
+
323
+ interface ConfiguratorSDKHandle {
324
+ media: MediaHandle;
325
+ sketchfab: SketchfabHandle;
326
+ transform: TransformHandle;
327
+ layer: LayerHandle;
328
+ configuratorItems: ConfiguratorItemsHandle;
329
+ configuratorObjects: ConfiguratorObjectsHandle;
330
+ }
331
+ declare function createConfiguratorSDK(config: ConfiguratorServiceSDKConfig): ConfiguratorSDKHandle;
332
+ declare const ConfiguratorSDK: {
333
+ /**
334
+ * Create a new SDK client instance.
335
+ * @param config SDK configuration — apiKey is required, timeout is optional.
336
+ */
337
+ readonly create: (config: ConfiguratorServiceSDKConfig) => ConfiguratorSDKHandle;
338
+ };
339
+
340
+ export { type AlliumError, type ConfiguratorSDKHandle, type ConfiguratorServiceSDKConfig, type CreateConfiguratorItemInput, type CreateConfiguratorObjectInput, type CreateLinkInput, type CreateSketchfabObjectInput, type CreateStreamInput, type CreateVideoInput, type DeleteAllLayerItemsInput, type DeleteLayerItemInput, type LockLayerItemInput, type RenameLayerItemInput, type SnapToGroundInput, type UpdateConfiguratorItemStateInput, type UpdateConfiguratorObjectConfigInput, type UpdateLinkInput, type UpdatePositionInput, type UpdateRotationInput, type UpdateScaleInput, type UpdateSketchfabObjectInput, type UpdateStreamInput, type UpdateVideoInput, createConfiguratorSDK, ConfiguratorSDK as default, isAlliumError };
@@ -0,0 +1,340 @@
1
+ /**
2
+ * Shared primitive types and SDK config used across all modules.
3
+ */
4
+ type ConfiguratorServiceSDKConfig = {
5
+ apiKey: string;
6
+ jwksUri: string;
7
+ accessTokenProvider: () => string | Promise<string>;
8
+ timeout?: number;
9
+ /** @internal - dev only, not for production use */
10
+ _devBaseUrl?: string;
11
+ };
12
+ type SpaceItemType = "RuntimeModel" | "SpatialMedia" | "LibraryModel" | "RuntimeStream" | "BridgeToolkitSettings" | "Configurator" | "ConfiguratorObject";
13
+ type ConfiguratorType = "string" | "number" | "boolean" | "enum" | "trigger" | "image" | "String" | "Number" | "Bool" | "Enum" | "Trigger" | "Image";
14
+ type Vector3 = {
15
+ x: number;
16
+ y: number;
17
+ z: number;
18
+ };
19
+ type SpaceContext = {
20
+ orgId: string;
21
+ spaceId: string;
22
+ type: SpaceItemType;
23
+ name: string;
24
+ position: Vector3;
25
+ rotation: Vector3;
26
+ offsetUpRotation: number;
27
+ thumb?: string;
28
+ isLocked?: boolean;
29
+ user?: string;
30
+ };
31
+
32
+ type SpatialMediaTypes = "video" | "link";
33
+ type SpatialMediaBase = Omit<SpaceContext, "type"> & {
34
+ type: "SpatialMedia";
35
+ mediaType: SpatialMediaTypes;
36
+ url: string;
37
+ attenuation: number;
38
+ };
39
+ type CreateVideoInput = Omit<SpatialMediaBase, "mediaType"> & {
40
+ mediaType: "video";
41
+ volume: number;
42
+ loop: boolean;
43
+ audioOnly: boolean;
44
+ showPreview: boolean;
45
+ autoplay?: boolean;
46
+ };
47
+ type UpdateVideoInput = {
48
+ orgId: string;
49
+ spaceId: string;
50
+ spaceItemId: string;
51
+ url?: string;
52
+ volume?: number;
53
+ attenuation?: number;
54
+ loop?: boolean;
55
+ audioOnly?: boolean;
56
+ showPreview?: boolean;
57
+ };
58
+ type CreateLinkInput = Omit<SpatialMediaBase, "mediaType"> & {
59
+ mediaType: "link";
60
+ isPortrait: boolean;
61
+ openInNewTab?: boolean;
62
+ displayName?: string;
63
+ };
64
+ type UpdateLinkInput = {
65
+ orgId: string;
66
+ spaceId: string;
67
+ spaceItemId: string;
68
+ url?: string;
69
+ name?: string;
70
+ openInNewTab?: boolean;
71
+ isPortrait?: boolean;
72
+ };
73
+ type CreateStreamInput = Omit<SpaceContext, "type"> & {
74
+ type: "RuntimeStream";
75
+ spaceStreamId: string;
76
+ scale?: Vector3;
77
+ autoScale?: boolean;
78
+ offsetUniformScale?: number;
79
+ name: string;
80
+ attenuation?: number;
81
+ volume?: number;
82
+ audioOnly?: boolean;
83
+ };
84
+ type UpdateStreamInput = {
85
+ orgId: string;
86
+ spaceId: string;
87
+ spaceItemId: string;
88
+ audioOnly?: boolean;
89
+ curvature?: number;
90
+ aspectRatio?: "4:3" | "16:9";
91
+ attenuation?: number;
92
+ volume?: number;
93
+ };
94
+
95
+ /**
96
+ * Media Module - Operations
97
+ */
98
+
99
+ interface MediaHandle {
100
+ addVideo(data: CreateVideoInput): Promise<void>;
101
+ updateVideo(spaceItemId: string, data: UpdateVideoInput): Promise<void>;
102
+ addStream(data: CreateStreamInput): Promise<void>;
103
+ updateStream(spaceItemId: string, data: UpdateStreamInput): Promise<void>;
104
+ addLink(data: CreateLinkInput): Promise<void>;
105
+ updateLink(spaceItemId: string, data: UpdateLinkInput): Promise<void>;
106
+ }
107
+
108
+ type ModelAuthor = {
109
+ username: string;
110
+ profileUrl: string;
111
+ };
112
+ type ModelGlbInfo = {
113
+ faceCount?: number;
114
+ textureCount?: number;
115
+ size?: number;
116
+ vertexCount?: number;
117
+ textureMaxResolution?: number;
118
+ };
119
+ type ModelMetadata = {
120
+ uid?: string;
121
+ viewerUrl?: string;
122
+ author?: ModelAuthor;
123
+ license?: string;
124
+ glb?: ModelGlbInfo;
125
+ };
126
+ type CreateSketchfabObjectInput = Omit<SpaceContext, "type"> & {
127
+ type: "RuntimeModel";
128
+ gltfUrl?: string;
129
+ materialOverrideId: string;
130
+ scale: Vector3;
131
+ autoScale: boolean;
132
+ offsetUniformScale: number;
133
+ collisionsEnabled: boolean;
134
+ currentAnimation?: string;
135
+ availableAnimations?: string[];
136
+ metadata?: ModelMetadata;
137
+ thumb?: string;
138
+ sketchfabTempUrl?: string;
139
+ };
140
+ type UpdateSketchfabObjectInput = {
141
+ orgId: string;
142
+ spaceId: string;
143
+ spaceItemId: string;
144
+ collisionsEnabled?: boolean;
145
+ currentAnimation?: string;
146
+ };
147
+
148
+ /**
149
+ * Sketchfab Module - 3D Object Operations
150
+ */
151
+
152
+ interface SketchfabHandle {
153
+ addObject(data: CreateSketchfabObjectInput): Promise<void>;
154
+ updateObject(spaceItemId: string, data: UpdateSketchfabObjectInput): Promise<void>;
155
+ }
156
+
157
+ type TransformItemContext = {
158
+ orgId: string;
159
+ spaceId: string;
160
+ spaceItemId: string;
161
+ };
162
+ type UpdatePositionInput = TransformItemContext & {
163
+ position: Vector3;
164
+ };
165
+ type UpdateRotationInput = TransformItemContext & {
166
+ rotation: Vector3;
167
+ offsetUpRotation?: number;
168
+ };
169
+ type UpdateScaleInput = TransformItemContext & {
170
+ scale?: Vector3;
171
+ offsetUniformScale: number;
172
+ };
173
+ type SnapToGroundInput = TransformItemContext;
174
+
175
+ /**
176
+ * Transform Module - Position, Rotation, Scale Operations
177
+ */
178
+
179
+ interface TransformHandle {
180
+ updatePosition(spaceItemId: string, data: UpdatePositionInput): Promise<void>;
181
+ updateRotation(spaceItemId: string, data: UpdateRotationInput): Promise<void>;
182
+ updateScale(spaceItemId: string, data: UpdateScaleInput): Promise<void>;
183
+ snapToGround(spaceItemId: string, data: SnapToGroundInput): Promise<void>;
184
+ }
185
+
186
+ type LockLayerItemInput = {
187
+ orgId: string;
188
+ spaceId: string;
189
+ spaceItemId: string;
190
+ isLocked: boolean;
191
+ };
192
+ type RenameLayerItemInput = {
193
+ orgId: string;
194
+ spaceId: string;
195
+ spaceItemId: string;
196
+ name: string;
197
+ };
198
+ type DeleteLayerItemInput = {
199
+ orgId: string;
200
+ spaceId: string;
201
+ spaceItemId: string;
202
+ };
203
+ type DeleteAllLayerItemsInput = {
204
+ orgId: string;
205
+ spaceId: string;
206
+ };
207
+
208
+ /**
209
+ * Layer Module - Lock, Rename, Delete Operations
210
+ */
211
+
212
+ interface LayerHandle {
213
+ lockItem(spaceItemId: string, data: LockLayerItemInput): Promise<void>;
214
+ renameItem(spaceItemId: string, data: RenameLayerItemInput): Promise<void>;
215
+ deleteItem(spaceItemId: string, data: DeleteLayerItemInput): Promise<void>;
216
+ deleteAll(data: DeleteAllLayerItemsInput): Promise<void>;
217
+ }
218
+
219
+ type ConfiguratorItemSchema = {
220
+ displayName: string;
221
+ type: ConfiguratorType;
222
+ default: string | number | boolean;
223
+ values?: (string | number)[];
224
+ max?: number;
225
+ min?: number;
226
+ step?: number;
227
+ isPersisted?: boolean;
228
+ isNetworked?: boolean;
229
+ };
230
+ type CreateConfiguratorItemInput = {
231
+ orgId: string;
232
+ spaceId: string;
233
+ spaceItemId: string;
234
+ itemTemplateId: string;
235
+ name: string;
236
+ levelFilePath?: string;
237
+ denormalizeOnUpdate: boolean;
238
+ currentState?: string | number | boolean;
239
+ schema: ConfiguratorItemSchema;
240
+ };
241
+ type UpdateConfiguratorItemStateInput = {
242
+ orgId: string;
243
+ spaceId: string;
244
+ spaceItemId: string;
245
+ currentState: string | number | boolean;
246
+ };
247
+
248
+ /**
249
+ * Configurator Items Module - Level-wide property operations
250
+ */
251
+
252
+ interface ConfiguratorItemsHandle {
253
+ create(data: CreateConfiguratorItemInput): Promise<void>;
254
+ updateState(spaceItemId: string, data: UpdateConfiguratorItemStateInput): Promise<void>;
255
+ }
256
+
257
+ type ObjectConfigurationValue = {
258
+ displayName: string;
259
+ type: ConfiguratorType;
260
+ currentState: string | number | boolean;
261
+ default: string | number | boolean;
262
+ max?: number;
263
+ min?: number;
264
+ step?: number;
265
+ values: (string | number)[];
266
+ displayType?: "image" | "dropdown";
267
+ valuesImages?: {
268
+ displayName: string;
269
+ thumb?: string;
270
+ }[];
271
+ };
272
+ type EnumObjectConfigurationValue = {
273
+ displayName: string;
274
+ type: "enum";
275
+ currentState: string | number;
276
+ default: string | number;
277
+ values: (string | number)[];
278
+ displayType: "image" | "dropdown";
279
+ max?: number;
280
+ min?: number;
281
+ step?: number;
282
+ valuesImages?: {
283
+ displayName: string;
284
+ thumb?: string;
285
+ }[];
286
+ };
287
+ type ConfigurationMap = {
288
+ [key: string]: ObjectConfigurationValue | EnumObjectConfigurationValue;
289
+ };
290
+ type CreateConfiguratorObjectInput = Omit<SpaceContext, "type"> & {
291
+ type: "ConfiguratorObject";
292
+ ueId: string;
293
+ versionId: string;
294
+ scale: Vector3;
295
+ offsetUniformScale: number;
296
+ configuration: ConfigurationMap;
297
+ };
298
+ type UpdateConfiguratorObjectConfigInput = {
299
+ orgId: string;
300
+ spaceId: string;
301
+ spaceItemId: string;
302
+ configuration: ConfigurationMap;
303
+ };
304
+
305
+ /**
306
+ * Configurator Objects Module - UE Actor placement and configuration
307
+ */
308
+
309
+ interface ConfiguratorObjectsHandle {
310
+ create(data: CreateConfiguratorObjectInput): Promise<void>;
311
+ updateConfiguration(spaceItemId: string, data: UpdateConfiguratorObjectConfigInput): Promise<void>;
312
+ }
313
+
314
+ /**
315
+ * SDK Error factories.
316
+ */
317
+ interface AlliumError extends Error {
318
+ readonly code: string;
319
+ }
320
+ /** Type guard — works for all Allium error factories */
321
+ declare function isAlliumError(err: unknown): err is AlliumError;
322
+
323
+ interface ConfiguratorSDKHandle {
324
+ media: MediaHandle;
325
+ sketchfab: SketchfabHandle;
326
+ transform: TransformHandle;
327
+ layer: LayerHandle;
328
+ configuratorItems: ConfiguratorItemsHandle;
329
+ configuratorObjects: ConfiguratorObjectsHandle;
330
+ }
331
+ declare function createConfiguratorSDK(config: ConfiguratorServiceSDKConfig): ConfiguratorSDKHandle;
332
+ declare const ConfiguratorSDK: {
333
+ /**
334
+ * Create a new SDK client instance.
335
+ * @param config SDK configuration — apiKey is required, timeout is optional.
336
+ */
337
+ readonly create: (config: ConfiguratorServiceSDKConfig) => ConfiguratorSDKHandle;
338
+ };
339
+
340
+ export { type AlliumError, type ConfiguratorSDKHandle, type ConfiguratorServiceSDKConfig, type CreateConfiguratorItemInput, type CreateConfiguratorObjectInput, type CreateLinkInput, type CreateSketchfabObjectInput, type CreateStreamInput, type CreateVideoInput, type DeleteAllLayerItemsInput, type DeleteLayerItemInput, type LockLayerItemInput, type RenameLayerItemInput, type SnapToGroundInput, type UpdateConfiguratorItemStateInput, type UpdateConfiguratorObjectConfigInput, type UpdateLinkInput, type UpdatePositionInput, type UpdateRotationInput, type UpdateScaleInput, type UpdateSketchfabObjectInput, type UpdateStreamInput, type UpdateVideoInput, createConfiguratorSDK, ConfiguratorSDK as default, isAlliumError };