@liforma/publisher 0.6.0 → 0.7.1
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/README.md +35 -3
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +2 -0
- package/dist/errors.js.map +1 -1
- package/dist/imageSource.d.ts +28 -0
- package/dist/imageSource.d.ts.map +1 -0
- package/dist/imageSource.js +155 -0
- package/dist/imageSource.js.map +1 -0
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/publishStart.d.ts +9 -0
- package/dist/publishStart.d.ts.map +1 -1
- package/dist/publishStart.js +10 -2
- package/dist/publishStart.js.map +1 -1
- package/dist/resources/createFrom.d.ts +93 -0
- package/dist/resources/createFrom.d.ts.map +1 -0
- package/dist/resources/createFrom.js +494 -0
- package/dist/resources/createFrom.js.map +1 -0
- package/dist/resources/experiences.d.ts +6 -1
- package/dist/resources/experiences.d.ts.map +1 -1
- package/dist/resources/experiences.js +5 -1
- package/dist/resources/experiences.js.map +1 -1
- package/dist/resources/sets.d.ts +2 -0
- package/dist/resources/sets.d.ts.map +1 -1
- package/dist/resources/sets.js +2 -0
- package/dist/resources/sets.js.map +1 -1
- package/dist/schemas.d.ts +124 -0
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +24 -0
- package/dist/schemas.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,19 +1,51 @@
|
|
|
1
1
|
# @liforma/publisher
|
|
2
2
|
|
|
3
|
-
Server SDK for the Liforma Publisher API —
|
|
3
|
+
Server SDK for the Liforma Publisher API — create a full experience in one call, or compose uploads, backdrops, sets, costumes/clothes/hair, and characters with the low-level namespaces.
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
npm install @liforma/publisher
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
+
## One-shot composition (happy path)
|
|
10
|
+
|
|
9
11
|
```ts
|
|
12
|
+
import { readFileSync } from 'node:fs';
|
|
10
13
|
import { createPublisher } from '@liforma/publisher';
|
|
11
14
|
|
|
12
15
|
const publisher = createPublisher(process.env.LIFORMA_PROJECT_ID!, {
|
|
13
|
-
apiKey: process.env.LIFORMA_API_KEY
|
|
14
|
-
retryPolicy: { maxAttempts: 3 }
|
|
16
|
+
apiKey: process.env.LIFORMA_API_KEY!
|
|
15
17
|
});
|
|
16
18
|
|
|
19
|
+
const avatars = await publisher.avatars.list();
|
|
20
|
+
const avatar = avatars[0]!;
|
|
21
|
+
|
|
22
|
+
const result = await publisher.experiences.createFrom({
|
|
23
|
+
title: 'Hotel check-in',
|
|
24
|
+
backdrop: {
|
|
25
|
+
image: { bytes: readFileSync('./lobby.png'), contentType: 'image/png' }
|
|
26
|
+
},
|
|
27
|
+
character: {
|
|
28
|
+
avatarId: avatar.id,
|
|
29
|
+
name: 'Front desk',
|
|
30
|
+
voice: avatar.defaultVoiceId,
|
|
31
|
+
sttLang: avatar.defaultSttLang,
|
|
32
|
+
personality: 'Friendly hotel receptionist'
|
|
33
|
+
},
|
|
34
|
+
startingMessage: 'Good evening. How may I help you?',
|
|
35
|
+
systemInstructions: 'The customer is checking in.',
|
|
36
|
+
publish: true
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
console.log(result.experience.id, result.created);
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
`ImageSource` accepts `Blob`, `{ bytes, contentType }`, `{ url }` (imported into Liforma storage — never a permanent dependency), or `{ uploadId }`. Reuse existing library items with `{ id }` on backdrop/character/plates (`id` wins if both `id` and create fields are present). Progress uses `{ stage, job }` because multiple plate jobs may run concurrently.
|
|
43
|
+
|
|
44
|
+
If `externalId` matches an existing experience or character, `createFrom` returns that resource’s live composition (`created.* === false` for reused members). Character `externalId` hits probe-create without wardrobe first so retries do not spawn orphan plates.
|
|
45
|
+
|
|
46
|
+
## Low-level namespaces
|
|
47
|
+
|
|
48
|
+
```ts
|
|
17
49
|
const background = await publisher.uploadImage(lobbyPng, { contentType: 'image/png' });
|
|
18
50
|
const backdrop = await publisher.backdrops.create({ name: 'Hotel lobby', image: background });
|
|
19
51
|
const set = await publisher.sets.create({ name: 'Hotel lobby', backdropId: backdrop.id });
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { PublishJob } from './schemas.js';
|
|
2
|
+
export type PublisherErrorContext = {
|
|
3
|
+
readonly operation?: 'experiences.createFrom';
|
|
4
|
+
readonly step?: 'resolveImage' | 'backdrop' | 'costume' | 'clothes' | 'hair' | 'set' | 'character' | 'experience';
|
|
5
|
+
};
|
|
2
6
|
export declare class LiformaPublisherError extends Error {
|
|
3
7
|
readonly code: string;
|
|
4
8
|
readonly status: number | undefined;
|
|
@@ -6,6 +10,7 @@ export declare class LiformaPublisherError extends Error {
|
|
|
6
10
|
readonly details: Record<string, unknown> | undefined;
|
|
7
11
|
readonly retryable: boolean;
|
|
8
12
|
readonly job: PublishJob | undefined;
|
|
13
|
+
readonly context: PublisherErrorContext | undefined;
|
|
9
14
|
constructor(message: string, options?: {
|
|
10
15
|
readonly code?: string;
|
|
11
16
|
readonly status?: number;
|
|
@@ -13,6 +18,7 @@ export declare class LiformaPublisherError extends Error {
|
|
|
13
18
|
readonly details?: Record<string, unknown>;
|
|
14
19
|
readonly retryable?: boolean;
|
|
15
20
|
readonly job?: PublishJob;
|
|
21
|
+
readonly context?: PublisherErrorContext;
|
|
16
22
|
readonly cause?: unknown;
|
|
17
23
|
});
|
|
18
24
|
}
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,qBAAa,qBAAsB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,MAAM,qBAAqB,GAAG;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,wBAAwB,CAAC;IAC9C,QAAQ,CAAC,IAAI,CAAC,EACX,cAAc,GACd,UAAU,GACV,SAAS,GACT,SAAS,GACT,MAAM,GACN,KAAK,GACL,WAAW,GACX,YAAY,CAAC;CAChB,CAAC;AAEF,qBAAa,qBAAsB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,UAAU,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,SAAS,CAAC;gBAGnD,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACT,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC;QAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC;QACzC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;KACzB;CAYF;AAQD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAErE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAItE;AAED,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,OAAO,GACf,qBAAqB,CA0CvB"}
|
package/dist/errors.js
CHANGED
|
@@ -5,6 +5,7 @@ export class LiformaPublisherError extends Error {
|
|
|
5
5
|
details;
|
|
6
6
|
retryable;
|
|
7
7
|
job;
|
|
8
|
+
context;
|
|
8
9
|
constructor(message, options) {
|
|
9
10
|
super(message, options?.cause !== undefined ? { cause: options.cause } : undefined);
|
|
10
11
|
this.name = 'LiformaPublisherError';
|
|
@@ -14,6 +15,7 @@ export class LiformaPublisherError extends Error {
|
|
|
14
15
|
this.details = options?.details;
|
|
15
16
|
this.retryable = Boolean(options?.retryable);
|
|
16
17
|
this.job = options?.job;
|
|
18
|
+
this.context = options?.context;
|
|
17
19
|
}
|
|
18
20
|
}
|
|
19
21
|
const RETRYABLE_CODES = new Set([
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { PublisherHttp } from './http.js';
|
|
2
|
+
import { type UploadedImage } from './upload.js';
|
|
3
|
+
export type ImageContentType = 'image/png' | 'image/jpeg' | 'image/webp';
|
|
4
|
+
/**
|
|
5
|
+
* Always resolves to a Liforma-hosted upload (or an existing uploadId).
|
|
6
|
+
* `{ url }` means import a copy — never a permanent runtime dependency.
|
|
7
|
+
*/
|
|
8
|
+
export type ImageSource = Blob | {
|
|
9
|
+
readonly bytes: Uint8Array | ArrayBuffer;
|
|
10
|
+
readonly contentType: ImageContentType;
|
|
11
|
+
readonly filename?: string;
|
|
12
|
+
} | {
|
|
13
|
+
readonly url: string;
|
|
14
|
+
readonly contentType?: ImageContentType;
|
|
15
|
+
} | {
|
|
16
|
+
readonly uploadId: string;
|
|
17
|
+
};
|
|
18
|
+
export type ResolvedUpload = UploadedImage | string;
|
|
19
|
+
export type ResolveImageSourceOptions = {
|
|
20
|
+
readonly signal?: AbortSignal;
|
|
21
|
+
readonly purpose?: 'colour' | 'depth';
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Resolve an ImageSource to a Liforma upload id / UploadedImage.
|
|
25
|
+
* URL sources are fetched and copied into Liforma storage.
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveImageSource(http: PublisherHttp, image: ImageSource, options?: ResolveImageSourceOptions): Promise<ResolvedUpload>;
|
|
28
|
+
//# sourceMappingURL=imageSource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageSource.d.ts","sourceRoot":"","sources":["../src/imageSource.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAiD,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAEhG,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,CAAC;AAEzE;;;GAGG;AACH,MAAM,MAAM,WAAW,GACpB,IAAI,GACJ;IACA,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC1B,GACD;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAA;CAAE,GACjE;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,MAAM,CAAC;AAEpD,MAAM,MAAM,yBAAyB,GAAG;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CACtC,CAAC;AA8JF;;;GAGG;AACH,wBAAsB,kBAAkB,CACvC,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE,yBAA8B,GACrC,OAAO,CAAC,cAAc,CAAC,CAkCzB"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { LiformaPublisherError } from './errors.js';
|
|
2
|
+
import { MAX_UPLOAD_BYTES, uploadDepthMap, uploadImage } from './upload.js';
|
|
3
|
+
const SUPPORTED_CONTENT_TYPES = new Set(['image/png', 'image/jpeg', 'image/webp']);
|
|
4
|
+
function isImageContentType(value) {
|
|
5
|
+
return SUPPORTED_CONTENT_TYPES.has(value);
|
|
6
|
+
}
|
|
7
|
+
function normalizeContentType(raw) {
|
|
8
|
+
if (!raw)
|
|
9
|
+
return null;
|
|
10
|
+
const base = raw.split(';')[0]?.trim().toLowerCase() ?? '';
|
|
11
|
+
if (base === 'image/jpg')
|
|
12
|
+
return 'image/jpeg';
|
|
13
|
+
if (isImageContentType(base))
|
|
14
|
+
return base;
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
function assertSupportedContentType(contentType) {
|
|
18
|
+
const normalized = normalizeContentType(contentType);
|
|
19
|
+
if (!normalized) {
|
|
20
|
+
throw new LiformaPublisherError(`Unsupported image contentType "${contentType}". Use image/png, image/jpeg, or image/webp.`, { code: 'INVALID_IMAGE_INPUT' });
|
|
21
|
+
}
|
|
22
|
+
return normalized;
|
|
23
|
+
}
|
|
24
|
+
function isTypedBytes(value) {
|
|
25
|
+
return 'bytes' in value && 'contentType' in value;
|
|
26
|
+
}
|
|
27
|
+
function isUrlSource(value) {
|
|
28
|
+
return 'url' in value && typeof value.url === 'string';
|
|
29
|
+
}
|
|
30
|
+
function isUploadIdSource(value) {
|
|
31
|
+
return 'uploadId' in value && typeof value.uploadId === 'string';
|
|
32
|
+
}
|
|
33
|
+
async function uploadResolved(http, bytes, contentType, options) {
|
|
34
|
+
const purpose = options.purpose ?? 'colour';
|
|
35
|
+
if (purpose === 'depth') {
|
|
36
|
+
return uploadDepthMap(http, bytes, { contentType, signal: options.signal });
|
|
37
|
+
}
|
|
38
|
+
return uploadImage(http, bytes, { contentType, signal: options.signal });
|
|
39
|
+
}
|
|
40
|
+
async function readBodyCapped(response, maxBytes) {
|
|
41
|
+
const contentLength = response.headers.get('content-length');
|
|
42
|
+
if (contentLength != null && contentLength.trim() !== '') {
|
|
43
|
+
const declared = Number(contentLength);
|
|
44
|
+
if (Number.isFinite(declared) && declared > maxBytes) {
|
|
45
|
+
throw new LiformaPublisherError('Image bytes must not exceed 20 MiB.', {
|
|
46
|
+
code: 'UPLOAD_TOO_LARGE'
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const reader = response.body?.getReader();
|
|
51
|
+
if (!reader) {
|
|
52
|
+
const buffer = new Uint8Array(await response.arrayBuffer());
|
|
53
|
+
if (buffer.byteLength > maxBytes) {
|
|
54
|
+
throw new LiformaPublisherError('Image bytes must not exceed 20 MiB.', {
|
|
55
|
+
code: 'UPLOAD_TOO_LARGE'
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return buffer;
|
|
59
|
+
}
|
|
60
|
+
const chunks = [];
|
|
61
|
+
let total = 0;
|
|
62
|
+
try {
|
|
63
|
+
for (;;) {
|
|
64
|
+
const { done, value } = await reader.read();
|
|
65
|
+
if (done)
|
|
66
|
+
break;
|
|
67
|
+
if (!value || value.byteLength === 0)
|
|
68
|
+
continue;
|
|
69
|
+
total += value.byteLength;
|
|
70
|
+
if (total > maxBytes) {
|
|
71
|
+
throw new LiformaPublisherError('Image bytes must not exceed 20 MiB.', {
|
|
72
|
+
code: 'UPLOAD_TOO_LARGE'
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
chunks.push(value);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
await reader.cancel().catch(() => undefined);
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
if (total === 0) {
|
|
83
|
+
return new Uint8Array();
|
|
84
|
+
}
|
|
85
|
+
const out = new Uint8Array(total);
|
|
86
|
+
let offset = 0;
|
|
87
|
+
for (const chunk of chunks) {
|
|
88
|
+
out.set(chunk, offset);
|
|
89
|
+
offset += chunk.byteLength;
|
|
90
|
+
}
|
|
91
|
+
return out;
|
|
92
|
+
}
|
|
93
|
+
async function importFromUrl(http, source, options) {
|
|
94
|
+
const url = source.url.trim();
|
|
95
|
+
if (!url) {
|
|
96
|
+
throw new LiformaPublisherError('url is required.', { code: 'INVALID_IMAGE_INPUT' });
|
|
97
|
+
}
|
|
98
|
+
let response;
|
|
99
|
+
try {
|
|
100
|
+
response = await http.fetchImpl(url, { method: 'GET', signal: options.signal });
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
options.signal?.throwIfAborted();
|
|
104
|
+
throw new LiformaPublisherError(error instanceof Error ? error.message : 'Failed to fetch image URL.', { code: 'IMAGE_URL_FETCH_FAILED', retryable: true, cause: error });
|
|
105
|
+
}
|
|
106
|
+
if (!response.ok) {
|
|
107
|
+
throw new LiformaPublisherError(`Image URL fetch failed (${response.status}).`, {
|
|
108
|
+
code: 'IMAGE_URL_FETCH_FAILED',
|
|
109
|
+
status: response.status,
|
|
110
|
+
retryable: response.status >= 500
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
const headerType = normalizeContentType(response.headers.get('content-type'));
|
|
114
|
+
const contentType = headerType ??
|
|
115
|
+
(source.contentType ? assertSupportedContentType(source.contentType) : null);
|
|
116
|
+
if (!contentType) {
|
|
117
|
+
throw new LiformaPublisherError('Image URL response did not include a supported Content-Type. Pass contentType on the source.', { code: 'INVALID_IMAGE_INPUT' });
|
|
118
|
+
}
|
|
119
|
+
const buffer = await readBodyCapped(response, MAX_UPLOAD_BYTES);
|
|
120
|
+
if (buffer.byteLength === 0) {
|
|
121
|
+
throw new LiformaPublisherError('Image URL returned empty body.', {
|
|
122
|
+
code: 'INVALID_IMAGE_INPUT'
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
return uploadResolved(http, buffer, contentType, options);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Resolve an ImageSource to a Liforma upload id / UploadedImage.
|
|
129
|
+
* URL sources are fetched and copied into Liforma storage.
|
|
130
|
+
*/
|
|
131
|
+
export async function resolveImageSource(http, image, options = {}) {
|
|
132
|
+
if (typeof Blob !== 'undefined' && image instanceof Blob) {
|
|
133
|
+
const contentType = assertSupportedContentType(image.type || '');
|
|
134
|
+
return uploadResolved(http, image, contentType, options);
|
|
135
|
+
}
|
|
136
|
+
if (!image || typeof image !== 'object') {
|
|
137
|
+
throw new LiformaPublisherError('ImageSource must be a Blob, { bytes, contentType }, { url }, or { uploadId }.', { code: 'INVALID_IMAGE_INPUT' });
|
|
138
|
+
}
|
|
139
|
+
if (isUploadIdSource(image)) {
|
|
140
|
+
const uploadId = image.uploadId.trim();
|
|
141
|
+
if (!uploadId) {
|
|
142
|
+
throw new LiformaPublisherError('uploadId is required.', { code: 'INVALID_IMAGE_INPUT' });
|
|
143
|
+
}
|
|
144
|
+
return uploadId;
|
|
145
|
+
}
|
|
146
|
+
if (isUrlSource(image)) {
|
|
147
|
+
return importFromUrl(http, image, options);
|
|
148
|
+
}
|
|
149
|
+
if (isTypedBytes(image)) {
|
|
150
|
+
const contentType = assertSupportedContentType(image.contentType);
|
|
151
|
+
return uploadResolved(http, image.bytes, contentType, options);
|
|
152
|
+
}
|
|
153
|
+
throw new LiformaPublisherError('ImageSource must be a Blob, { bytes, contentType }, { url }, or { uploadId }. Bare Uint8Array/ArrayBuffer is not supported.', { code: 'INVALID_IMAGE_INPUT' });
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=imageSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imageSource.js","sourceRoot":"","sources":["../src/imageSource.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,16 +4,19 @@ export type { AvatarsClient, BackdropsClient, CharactersClient, ClothesClient, C
|
|
|
4
4
|
export type { CreateBackdropInput } from './resources/backdrops.js';
|
|
5
5
|
export type { CreateCharacterInput, UpdateCharacterInput } from './resources/characters.js';
|
|
6
6
|
export type { BackgroundMode, CreateClothesInput, UpdateClothesInput } from './resources/clothes.js';
|
|
7
|
-
export type { CreateExperienceInput, UpdateExperienceInput } from './resources/experiences.js';
|
|
7
|
+
export type { CreateExperienceInput, CreateFromBackdropInput, CreateFromCharacterInput, CreateFromExperienceInput, CreateFromOptions, CreateFromProgress, CreateFromResult, CreateFromStage, PlateOrId, UpdateExperienceInput } from './resources/experiences.js';
|
|
8
8
|
export type { CreateCostumeInput, UpdateCostumeInput } from './resources/costumes.js';
|
|
9
9
|
export type { CreateHairInput, UpdateHairInput } from './resources/hair.js';
|
|
10
10
|
export type { CreateSetInput, UpdateSetInput } from './resources/sets.js';
|
|
11
11
|
export type { RequestOptions, TimeoutOptions, WaitOptions } from './options.js';
|
|
12
12
|
export type { RetryPolicy } from './retry.js';
|
|
13
13
|
export type { ImageBytes } from './hash.js';
|
|
14
|
+
export type { ImageContentType, ImageSource, ResolvedUpload } from './imageSource.js';
|
|
15
|
+
export { resolveImageSource } from './imageSource.js';
|
|
14
16
|
export { MAX_UPLOAD_BYTES } from './upload.js';
|
|
15
17
|
export type { UploadedImage } from './upload.js';
|
|
16
18
|
export { LiformaPublisherError, isRetryableError } from './errors.js';
|
|
19
|
+
export type { PublisherErrorContext } from './errors.js';
|
|
17
20
|
export { PERSONA_ETHNICITY_VALUES, PERSONA_GENDER_VALUES } from './schemas.js';
|
|
18
|
-
export type { Avatar, PersonaEthnicity, PersonaGender, AppearanceResourceStatus, PublishJob, PublishJobError, PublishJobErrorCategory, PublishJobStatus, PublishResourceStatus, CharacterResource, ClothesResource, CostumeResource, CreateClothesPublishResponse, CreateCostumePublishResponse, CreateHairPublishResponse, CreateBackdropPublishResponse, CreatePublishResponse, DeletedResource, ExperienceResource, ExperienceStatus, HairResource, LocationResourceStatus, SetResource, BackdropResource } from './schemas.js';
|
|
21
|
+
export type { Avatar, PersonaEthnicity, PersonaGender, AppearanceResourceStatus, PublishJob, PublishJobError, PublishJobErrorCategory, PublishJobStatus, PublishResourceStatus, CharacterResource, ClothesResource, CostumeResource, CreateClothesPublishResponse, CreateCostumePublishResponse, CreateHairPublishResponse, CreateBackdropPublishResponse, CreatePublishResponse, DeletedResource, ExperienceResource, ExperienceInteractionInput, ExperienceStatus, HairResource, LocationResourceStatus, SetResource, BackdropResource } from './schemas.js';
|
|
19
22
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC9E,YAAY,EACX,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,UAAU,EACV,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,YAAY,EACX,oBAAoB,EACpB,oBAAoB,EACpB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACX,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACX,qBAAqB,EACrB,qBAAqB,EACrB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACtF,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC5E,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1E,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChF,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC/E,YAAY,EACX,MAAM,EACN,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,UAAU,EACV,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,4BAA4B,EAC5B,4BAA4B,EAC5B,yBAAyB,EACzB,6BAA6B,EAC7B,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,WAAW,EACX,gBAAgB,EAChB,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC9E,YAAY,EACX,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,UAAU,EACV,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,YAAY,EACX,oBAAoB,EACpB,oBAAoB,EACpB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACX,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACX,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,SAAS,EACT,qBAAqB,EACrB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACtF,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC5E,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1E,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChF,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC/E,YAAY,EACX,MAAM,EACN,gBAAgB,EAChB,aAAa,EACb,wBAAwB,EACxB,UAAU,EACV,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,4BAA4B,EAC5B,4BAA4B,EAC5B,yBAAyB,EACzB,6BAA6B,EAC7B,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,0BAA0B,EAC1B,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,WAAW,EACX,gBAAgB,EAChB,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { createPublisher } from './createPublisher.js';
|
|
2
|
+
export { resolveImageSource } from './imageSource.js';
|
|
2
3
|
export { MAX_UPLOAD_BYTES } from './upload.js';
|
|
3
4
|
export { LiformaPublisherError, isRetryableError } from './errors.js';
|
|
4
5
|
export { PERSONA_ETHNICITY_VALUES, PERSONA_GENDER_VALUES } from './schemas.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AA0CvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEtE,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/publishStart.d.ts
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import { type PublisherHttp } from './http.js';
|
|
2
2
|
import type { PublishJob } from './schemas.js';
|
|
3
3
|
import type { z } from 'zod';
|
|
4
|
+
export type StartedPublishJob = {
|
|
5
|
+
readonly job: PublishJob;
|
|
6
|
+
/** Newly provisioned this call (false when HTTP 200 ready-reuse). */
|
|
7
|
+
readonly created: boolean;
|
|
8
|
+
readonly status: number;
|
|
9
|
+
};
|
|
4
10
|
export declare function startJobFromEnvelope(http: PublisherHttp, path: string, schema: z.ZodType<{
|
|
5
11
|
job: PublishJob;
|
|
6
12
|
}>, body: Record<string, unknown>, signal?: AbortSignal): Promise<PublishJob>;
|
|
13
|
+
export declare function startJobWithOutcome(http: PublisherHttp, path: string, schema: z.ZodType<{
|
|
14
|
+
job: PublishJob;
|
|
15
|
+
}>, body: Record<string, unknown>, signal?: AbortSignal): Promise<StartedPublishJob>;
|
|
7
16
|
//# sourceMappingURL=publishStart.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publishStart.d.ts","sourceRoot":"","sources":["../src/publishStart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,wBAAsB,oBAAoB,CACzC,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;IAAE,GAAG,EAAE,UAAU,CAAA;CAAE,CAAC,EACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"publishStart.d.ts","sourceRoot":"","sources":["../src/publishStart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,MAAM,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,qEAAqE;IACrE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,wBAAsB,oBAAoB,CACzC,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;IAAE,GAAG,EAAE,UAAU,CAAA;CAAE,CAAC,EACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,UAAU,CAAC,CAGrB;AAED,wBAAsB,mBAAmB,CACxC,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;IAAE,GAAG,EAAE,UAAU,CAAA;CAAE,CAAC,EACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,iBAAiB,CAAC,CAW5B"}
|
package/dist/publishStart.js
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
import { projectPath, publisherRequest } from './http.js';
|
|
2
2
|
export async function startJobFromEnvelope(http, path, schema, body, signal) {
|
|
3
|
-
const
|
|
3
|
+
const started = await startJobWithOutcome(http, path, schema, body, signal);
|
|
4
|
+
return started.job;
|
|
5
|
+
}
|
|
6
|
+
export async function startJobWithOutcome(http, path, schema, body, signal) {
|
|
7
|
+
const { data, status } = await publisherRequest(http, projectPath(http, path), schema, {
|
|
4
8
|
method: 'POST',
|
|
5
9
|
body,
|
|
6
10
|
signal
|
|
7
11
|
});
|
|
8
|
-
return
|
|
12
|
+
return {
|
|
13
|
+
job: data.job,
|
|
14
|
+
created: status !== 200,
|
|
15
|
+
status
|
|
16
|
+
};
|
|
9
17
|
}
|
|
10
18
|
//# sourceMappingURL=publishStart.js.map
|
package/dist/publishStart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publishStart.js","sourceRoot":"","sources":["../src/publishStart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAsB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"publishStart.js","sourceRoot":"","sources":["../src/publishStart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAsB,MAAM,WAAW,CAAC;AAW9E,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,IAAmB,EACnB,IAAY,EACZ,MAAsC,EACtC,IAA6B,EAC7B,MAAoB;IAEpB,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5E,OAAO,OAAO,CAAC,GAAG,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,IAAmB,EACnB,IAAY,EACZ,MAAsC,EACtC,IAA6B,EAC7B,MAAoB;IAEpB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE;QACtF,MAAM,EAAE,MAAM;QACd,IAAI;QACJ,MAAM;KACN,CAAC,CAAC;IACH,OAAO;QACN,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,OAAO,EAAE,MAAM,KAAK,GAAG;QACvB,MAAM;KACN,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { type PublisherHttp } from '../http.js';
|
|
2
|
+
import { type ImageSource } from '../imageSource.js';
|
|
3
|
+
import { type BackdropResource, type CharacterResource, type ClothesResource, type CostumeResource, type ExperienceResource, type ExperienceInteractionInput, type HairResource, type PersonaEthnicity, type PersonaGender, type PublishJob, type SetResource } from '../schemas.js';
|
|
4
|
+
import type { BackgroundMode } from './clothes.js';
|
|
5
|
+
export type PlateCreate = {
|
|
6
|
+
readonly image: ImageSource;
|
|
7
|
+
readonly name?: string;
|
|
8
|
+
readonly backgroundMode?: BackgroundMode;
|
|
9
|
+
readonly externalId?: string;
|
|
10
|
+
readonly forceNew?: boolean;
|
|
11
|
+
};
|
|
12
|
+
export type PlateOrId = {
|
|
13
|
+
readonly id: string;
|
|
14
|
+
} | PlateCreate;
|
|
15
|
+
export type BackdropCreate = {
|
|
16
|
+
readonly image: ImageSource;
|
|
17
|
+
readonly name?: string;
|
|
18
|
+
readonly externalId?: string;
|
|
19
|
+
readonly forceNew?: boolean;
|
|
20
|
+
readonly depth?: {
|
|
21
|
+
readonly image: ImageSource;
|
|
22
|
+
readonly depthMapType?: 'disparity';
|
|
23
|
+
readonly metersPerDepth?: number;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export type CreateFromBackdropInput = {
|
|
27
|
+
readonly id: string;
|
|
28
|
+
} | BackdropCreate;
|
|
29
|
+
export type CreateFromCharacterCreate = {
|
|
30
|
+
readonly avatarId: string;
|
|
31
|
+
readonly name: string;
|
|
32
|
+
readonly voice: string;
|
|
33
|
+
readonly sttLang: string;
|
|
34
|
+
readonly costume?: PlateOrId;
|
|
35
|
+
readonly clothes?: PlateOrId;
|
|
36
|
+
readonly hair?: PlateOrId;
|
|
37
|
+
readonly personality?: string;
|
|
38
|
+
readonly generalInstructions?: string;
|
|
39
|
+
readonly gender?: PersonaGender;
|
|
40
|
+
readonly age?: number;
|
|
41
|
+
readonly ethnicity?: PersonaEthnicity;
|
|
42
|
+
readonly externalId?: string;
|
|
43
|
+
};
|
|
44
|
+
export type CreateFromCharacterInput = {
|
|
45
|
+
readonly id: string;
|
|
46
|
+
} | CreateFromCharacterCreate;
|
|
47
|
+
export type CreateFromExperienceInput = {
|
|
48
|
+
readonly title: string;
|
|
49
|
+
readonly backdrop: CreateFromBackdropInput;
|
|
50
|
+
readonly character: CreateFromCharacterInput;
|
|
51
|
+
readonly set?: {
|
|
52
|
+
readonly name?: string;
|
|
53
|
+
readonly externalId?: string;
|
|
54
|
+
};
|
|
55
|
+
readonly slug?: string;
|
|
56
|
+
readonly attributes?: Record<string, string>;
|
|
57
|
+
readonly startingMessage?: string;
|
|
58
|
+
readonly systemInstructions?: string;
|
|
59
|
+
readonly introduction?: string;
|
|
60
|
+
readonly interaction?: ExperienceInteractionInput;
|
|
61
|
+
readonly publish?: boolean;
|
|
62
|
+
readonly externalId?: string;
|
|
63
|
+
};
|
|
64
|
+
export type CreateFromStage = 'backdrop' | 'costume' | 'clothes' | 'hair';
|
|
65
|
+
export type CreateFromProgress = {
|
|
66
|
+
readonly stage: CreateFromStage;
|
|
67
|
+
readonly job: PublishJob;
|
|
68
|
+
};
|
|
69
|
+
export type CreateFromOptions = {
|
|
70
|
+
readonly signal?: AbortSignal;
|
|
71
|
+
readonly timeoutMs?: number;
|
|
72
|
+
readonly onProgress?: (progress: CreateFromProgress) => void;
|
|
73
|
+
};
|
|
74
|
+
export type CreateFromResult = {
|
|
75
|
+
readonly experience: ExperienceResource;
|
|
76
|
+
readonly character: CharacterResource;
|
|
77
|
+
readonly set: SetResource;
|
|
78
|
+
readonly backdrop: BackdropResource;
|
|
79
|
+
readonly costume?: CostumeResource;
|
|
80
|
+
readonly clothes?: ClothesResource;
|
|
81
|
+
readonly hair?: HairResource;
|
|
82
|
+
readonly created: {
|
|
83
|
+
readonly experience: boolean;
|
|
84
|
+
readonly character: boolean;
|
|
85
|
+
readonly set: boolean;
|
|
86
|
+
readonly backdrop: boolean;
|
|
87
|
+
readonly costume?: boolean;
|
|
88
|
+
readonly clothes?: boolean;
|
|
89
|
+
readonly hair?: boolean;
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
export declare function createExperienceFrom(http: PublisherHttp, input: CreateFromExperienceInput, options?: CreateFromOptions): Promise<CreateFromResult>;
|
|
93
|
+
//# sourceMappingURL=createFrom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createFrom.d.ts","sourceRoot":"","sources":["../../src/resources/createFrom.ts"],"names":[],"mappings":"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"}
|