@futdevpro/nts-dynamo 1.15.263 → 1.15.265
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/build/_modules/media-gen/_models/leonardo-settings.interface.d.ts +19 -0
- package/build/_modules/media-gen/_models/leonardo-settings.interface.d.ts.map +1 -0
- package/build/_modules/media-gen/_models/leonardo-settings.interface.js +3 -0
- package/build/_modules/media-gen/_models/leonardo-settings.interface.js.map +1 -0
- package/build/_modules/media-gen/_models/meshy-settings.interface.d.ts +19 -0
- package/build/_modules/media-gen/_models/meshy-settings.interface.d.ts.map +1 -0
- package/build/_modules/media-gen/_models/meshy-settings.interface.js +3 -0
- package/build/_modules/media-gen/_models/meshy-settings.interface.js.map +1 -0
- package/build/_modules/media-gen/_services/leonardo-image.control-service.d.ts +47 -0
- package/build/_modules/media-gen/_services/leonardo-image.control-service.d.ts.map +1 -0
- package/build/_modules/media-gen/_services/leonardo-image.control-service.js +178 -0
- package/build/_modules/media-gen/_services/leonardo-image.control-service.js.map +1 -0
- package/build/_modules/media-gen/_services/meshy-image-to-3d.control-service.d.ts +49 -0
- package/build/_modules/media-gen/_services/meshy-image-to-3d.control-service.d.ts.map +1 -0
- package/build/_modules/media-gen/_services/meshy-image-to-3d.control-service.js +173 -0
- package/build/_modules/media-gen/_services/meshy-image-to-3d.control-service.js.map +1 -0
- package/build/_modules/media-gen/index.d.ts +4 -0
- package/build/_modules/media-gen/index.d.ts.map +1 -1
- package/build/_modules/media-gen/index.js +4 -0
- package/build/_modules/media-gen/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** The HTTP call the Leonardo adapter makes - injectable, so specs assert the requests without a network or a key. */
|
|
2
|
+
export type DyNTS_Leonardo_Fetch = (url: string, init: RequestInit) => Promise<Response>;
|
|
3
|
+
/**
|
|
4
|
+
* Settings of the Leonardo image adapter. Every field is optional; what is left out falls back to the environment
|
|
5
|
+
* (read at call time) or to the defaults the master-prompter donor runs in production.
|
|
6
|
+
*/
|
|
7
|
+
export interface DyNTS_Leonardo_Settings {
|
|
8
|
+
/** API key. Falls back to `LEONARDO_API_KEY`. */
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
/** HTTP implementation. Defaults to the global `fetch`. */
|
|
11
|
+
fetchImpl?: DyNTS_Leonardo_Fetch;
|
|
12
|
+
/** Wait between two status checks. Default 3000 ms (the donor's production value). */
|
|
13
|
+
pollIntervalMs?: number;
|
|
14
|
+
/** Give up on a generation after this long. Default 15 minutes (the donor's production value). */
|
|
15
|
+
timeoutMs?: number;
|
|
16
|
+
/** The wait itself - injectable, so specs do not sleep. Defaults to a timer. */
|
|
17
|
+
sleep?: (ms: number) => Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=leonardo-settings.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leonardo-settings.interface.d.ts","sourceRoot":"","sources":["../../../../src/_modules/media-gen/_models/leonardo-settings.interface.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,MAAM,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEzF;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,sFAAsF;IACtF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kGAAkG;IAClG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leonardo-settings.interface.js","sourceRoot":"","sources":["../../../../src/_modules/media-gen/_models/leonardo-settings.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** The HTTP call the Meshy adapter makes - injectable, so specs assert the requests without a network or a key. */
|
|
2
|
+
export type DyNTS_Meshy_Fetch = (url: string, init: RequestInit) => Promise<Response>;
|
|
3
|
+
/**
|
|
4
|
+
* Settings of the Meshy image-to-3D adapter. Every field is optional; what is left out falls back to the environment
|
|
5
|
+
* (read at call time) or to the defaults the master-prompter donor runs in production.
|
|
6
|
+
*/
|
|
7
|
+
export interface DyNTS_Meshy_Settings {
|
|
8
|
+
/** API key. Falls back to `MESHY_API_KEY`. */
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
/** HTTP implementation. Defaults to the global `fetch`. */
|
|
11
|
+
fetchImpl?: DyNTS_Meshy_Fetch;
|
|
12
|
+
/** Wait between two status checks. Default 3000 ms (the donor's production value). */
|
|
13
|
+
pollIntervalMs?: number;
|
|
14
|
+
/** Give up on a task after this long. Default 15 minutes (the donor's production value). */
|
|
15
|
+
timeoutMs?: number;
|
|
16
|
+
/** The wait itself - injectable, so specs do not sleep. Defaults to a timer. */
|
|
17
|
+
sleep?: (ms: number) => Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=meshy-settings.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meshy-settings.interface.d.ts","sourceRoot":"","sources":["../../../../src/_modules/media-gen/_models/meshy-settings.interface.ts"],"names":[],"mappings":"AAAA,mHAAmH;AACnH,MAAM,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEtF;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,sFAAsF;IACtF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meshy-settings.interface.js","sourceRoot":"","sources":["../../../../src/_modules/media-gen/_models/meshy-settings.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { DyFM_AI_Image_Response, DyFM_AI_ImageGeneration_Request } from '@futdevpro/fsm-dynamo/ai';
|
|
2
|
+
import { DyNTS_Leonardo_Settings } from '../_models/leonardo-settings.interface';
|
|
3
|
+
import { DyNTS_MediaGen_Operation } from '../_models/media-gen-operation.type';
|
|
4
|
+
import { DyNTS_MediaGen_ServiceBase } from './media-gen.service-base';
|
|
5
|
+
/**
|
|
6
|
+
* Leonardo text-to-image adapter (REST API v1).
|
|
7
|
+
*
|
|
8
|
+
* The request and response shapes are measured, not assumed: base URL and bearer auth from the master-prompter
|
|
9
|
+
* donor that runs in production, the raw field names from the official `@leonardo-ai/sdk` 4.18.1 schemas
|
|
10
|
+
* (`POST /generations` with `modelId`, `prompt`, `num_images`, `width`, `height`, `public` → `sdGenerationJob.
|
|
11
|
+
* generationId`; `GET /generations/{id}` → `generations_by_pk.status` PENDING | COMPLETE | FAILED and
|
|
12
|
+
* `generated_images[].url`). ⚠️ Leonardo also documents a v2 API; this adapter targets v1, like the donor.
|
|
13
|
+
*
|
|
14
|
+
* 🔴 PRIVATE GENERATION IS ENFORCED (K-8): Leonardo takes a licence to content marked public, and its API reference
|
|
15
|
+
* does not state the default of `public` - so every request sends `public: false`, and nothing a caller passes
|
|
16
|
+
* can change that.
|
|
17
|
+
*
|
|
18
|
+
* One image per call: the POJO has no count, and the SDK default (4) would silently quadruple the cost.
|
|
19
|
+
* Knobs Leonardo v1 has no equivalent for (`quality`, `background`, `format`) are refused, not ignored.
|
|
20
|
+
*/
|
|
21
|
+
export declare class DyNTS_Leonardo_Image_ControlService extends DyNTS_MediaGen_ServiceBase<DyFM_AI_ImageGeneration_Request, DyFM_AI_Image_Response> {
|
|
22
|
+
static readonly baseUrl: string;
|
|
23
|
+
static readonly defaultPollIntervalMs: number;
|
|
24
|
+
static readonly defaultTimeoutMs: number;
|
|
25
|
+
readonly provider: string;
|
|
26
|
+
readonly operations: readonly DyNTS_MediaGen_Operation[];
|
|
27
|
+
protected readonly settings: DyNTS_Leonardo_Settings;
|
|
28
|
+
constructor(settings?: DyNTS_Leonardo_Settings);
|
|
29
|
+
static getInstance(): DyNTS_Leonardo_Image_ControlService;
|
|
30
|
+
/** Reads a field of an unknown JSON value without assuming its shape. */
|
|
31
|
+
private static readField;
|
|
32
|
+
/**
|
|
33
|
+
* Generates one image: create the job, wait for it, download the result.
|
|
34
|
+
*/
|
|
35
|
+
generate(operation: DyNTS_MediaGen_Operation, request: DyFM_AI_ImageGeneration_Request, issuer: string): Promise<DyFM_AI_Image_Response>;
|
|
36
|
+
/** `WIDTHxHEIGHT` → numbers; refuses anything else instead of letting the provider guess. */
|
|
37
|
+
private parseSize;
|
|
38
|
+
/** Polls `GET /generations/{id}` until COMPLETE; FAILED and the timeout are errors that carry the generation id. */
|
|
39
|
+
private waitForGeneration;
|
|
40
|
+
/** Downloads every generated image. The CDN URLs get NO auth header: the key must not travel to a CDN. */
|
|
41
|
+
private downloadImages;
|
|
42
|
+
/** Parses a JSON response, or throws with the status and the first 500 characters of the body. */
|
|
43
|
+
private readJson;
|
|
44
|
+
/** A refusal or failure, reported with this adapter's error settings. */
|
|
45
|
+
private failure;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=leonardo-image.control-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leonardo-image.control-service.d.ts","sourceRoot":"","sources":["../../../../src/_modules/media-gen/_services/leonardo-image.control-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,+BAA+B,EAAqB,MAAM,0BAA0B,CAAC;AAGtH,OAAO,EAAwB,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,mCACX,SAAQ,0BAA0B,CAAC,+BAA+B,EAAE,sBAAsB,CAAC;IAE3F,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAA2C;IAC1E,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAQ;IACrD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAkB;IAE1D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAc;IACvC,QAAQ,CAAC,UAAU,EAAE,SAAS,wBAAwB,EAAE,CAAuB;IAE/E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;gBAEzC,QAAQ,GAAE,uBAA4B;IAKlD,MAAM,CAAC,WAAW,IAAI,mCAAmC;IAIzD,yEAAyE;IACzE,OAAO,CAAC,MAAM,CAAC,SAAS;IAIxB;;OAEG;IACG,QAAQ,CACZ,SAAS,EAAE,wBAAwB,EACnC,OAAO,EAAE,+BAA+B,EACxC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,sBAAsB,CAAC;IA2DlC,6FAA6F;IAC7F,OAAO,CAAC,SAAS;IAcjB,oHAAoH;YACtG,iBAAiB;IAwC/B,0GAA0G;YAC5F,cAAc;IAyC5B,kGAAkG;YACpF,QAAQ;IAatB,yEAAyE;IACzE,OAAO,CAAC,OAAO;CAOhB"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyNTS_Leonardo_Image_ControlService = void 0;
|
|
4
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
+
const global_settings_const_1 = require("../../../_collections/global-settings.const");
|
|
6
|
+
const media_gen_service_base_1 = require("./media-gen.service-base");
|
|
7
|
+
/**
|
|
8
|
+
* Leonardo text-to-image adapter (REST API v1).
|
|
9
|
+
*
|
|
10
|
+
* The request and response shapes are measured, not assumed: base URL and bearer auth from the master-prompter
|
|
11
|
+
* donor that runs in production, the raw field names from the official `@leonardo-ai/sdk` 4.18.1 schemas
|
|
12
|
+
* (`POST /generations` with `modelId`, `prompt`, `num_images`, `width`, `height`, `public` → `sdGenerationJob.
|
|
13
|
+
* generationId`; `GET /generations/{id}` → `generations_by_pk.status` PENDING | COMPLETE | FAILED and
|
|
14
|
+
* `generated_images[].url`). ⚠️ Leonardo also documents a v2 API; this adapter targets v1, like the donor.
|
|
15
|
+
*
|
|
16
|
+
* 🔴 PRIVATE GENERATION IS ENFORCED (K-8): Leonardo takes a licence to content marked public, and its API reference
|
|
17
|
+
* does not state the default of `public` - so every request sends `public: false`, and nothing a caller passes
|
|
18
|
+
* can change that.
|
|
19
|
+
*
|
|
20
|
+
* One image per call: the POJO has no count, and the SDK default (4) would silently quadruple the cost.
|
|
21
|
+
* Knobs Leonardo v1 has no equivalent for (`quality`, `background`, `format`) are refused, not ignored.
|
|
22
|
+
*/
|
|
23
|
+
class DyNTS_Leonardo_Image_ControlService extends media_gen_service_base_1.DyNTS_MediaGen_ServiceBase {
|
|
24
|
+
static baseUrl = 'https://cloud.leonardo.ai/api/rest/v1';
|
|
25
|
+
static defaultPollIntervalMs = 3000;
|
|
26
|
+
static defaultTimeoutMs = 15 * 60 * 1000;
|
|
27
|
+
provider = 'leonardo';
|
|
28
|
+
operations = ['text-to-image'];
|
|
29
|
+
settings;
|
|
30
|
+
constructor(settings = {}) {
|
|
31
|
+
super();
|
|
32
|
+
this.settings = settings;
|
|
33
|
+
}
|
|
34
|
+
static getInstance() {
|
|
35
|
+
return DyNTS_Leonardo_Image_ControlService.getSingletonInstance();
|
|
36
|
+
}
|
|
37
|
+
/** Reads a field of an unknown JSON value without assuming its shape. */
|
|
38
|
+
static readField(json, key) {
|
|
39
|
+
return json !== null && typeof json === 'object' ? Reflect.get(json, key) : undefined;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Generates one image: create the job, wait for it, download the result.
|
|
43
|
+
*/
|
|
44
|
+
async generate(operation, request, issuer) {
|
|
45
|
+
if (!this.operations.includes(operation)) {
|
|
46
|
+
throw this.failure(`${this.constructor.name} does not serve '${operation}'. It serves: text-to-image.`, issuer);
|
|
47
|
+
}
|
|
48
|
+
if (!request.prompt) {
|
|
49
|
+
throw this.failure('The prompt is empty.', issuer);
|
|
50
|
+
}
|
|
51
|
+
if (!request.model) {
|
|
52
|
+
throw this.failure('A Leonardo model id is required (request.model).', issuer);
|
|
53
|
+
}
|
|
54
|
+
const unsupported = ['quality', 'background', 'format']
|
|
55
|
+
.filter((knob) => Reflect.get(request, knob) !== undefined);
|
|
56
|
+
if (unsupported.length) {
|
|
57
|
+
throw this.failure(`Leonardo v1 has no equivalent for: ${unsupported.join(', ')}. Leave them out.`, issuer);
|
|
58
|
+
}
|
|
59
|
+
const dimensions = this.parseSize(request.size, issuer);
|
|
60
|
+
const apiKey = this.settings.apiKey ?? process.env.LEONARDO_API_KEY;
|
|
61
|
+
if (!apiKey) {
|
|
62
|
+
throw this.failure('Missing Leonardo API key: pass settings.apiKey or set LEONARDO_API_KEY.', issuer);
|
|
63
|
+
}
|
|
64
|
+
const doFetch = this.settings.fetchImpl ?? ((url, init) => fetch(url, init));
|
|
65
|
+
const headers = { 'Content-Type': 'application/json', Authorization: `Bearer ${apiKey}` };
|
|
66
|
+
const createUrl = `${DyNTS_Leonardo_Image_ControlService.baseUrl}/generations`;
|
|
67
|
+
const created = await this.readJson(await doFetch(createUrl, {
|
|
68
|
+
method: 'POST',
|
|
69
|
+
headers: headers,
|
|
70
|
+
body: JSON.stringify({
|
|
71
|
+
modelId: request.model,
|
|
72
|
+
prompt: request.prompt,
|
|
73
|
+
num_images: 1,
|
|
74
|
+
...(dimensions ?? {}),
|
|
75
|
+
public: false,
|
|
76
|
+
}),
|
|
77
|
+
}), createUrl, issuer);
|
|
78
|
+
const generationId = DyNTS_Leonardo_Image_ControlService.readField(DyNTS_Leonardo_Image_ControlService.readField(created, 'sdGenerationJob'), 'generationId');
|
|
79
|
+
if (typeof generationId !== 'string' || !generationId) {
|
|
80
|
+
throw this.failure(`Leonardo returned no generation id (${createUrl}).`, issuer);
|
|
81
|
+
}
|
|
82
|
+
const generation = await this.waitForGeneration(generationId, doFetch, headers, issuer);
|
|
83
|
+
const images = await this.downloadImages(generation, generationId, doFetch, issuer);
|
|
84
|
+
return {
|
|
85
|
+
provider: this.provider,
|
|
86
|
+
model: request.model,
|
|
87
|
+
images: images,
|
|
88
|
+
rawResponse: generation,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/** `WIDTHxHEIGHT` → numbers; refuses anything else instead of letting the provider guess. */
|
|
92
|
+
parseSize(size, issuer) {
|
|
93
|
+
if (size === undefined) {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
const match = /^(\d+)x(\d+)$/.exec(size);
|
|
97
|
+
if (!match) {
|
|
98
|
+
throw this.failure(`Invalid size '${size}': expected WIDTHxHEIGHT, e.g. 1024x768.`, issuer);
|
|
99
|
+
}
|
|
100
|
+
return { width: Number(match[1]), height: Number(match[2]) };
|
|
101
|
+
}
|
|
102
|
+
/** Polls `GET /generations/{id}` until COMPLETE; FAILED and the timeout are errors that carry the generation id. */
|
|
103
|
+
async waitForGeneration(generationId, doFetch, headers, issuer) {
|
|
104
|
+
const intervalMs = this.settings.pollIntervalMs ?? DyNTS_Leonardo_Image_ControlService.defaultPollIntervalMs;
|
|
105
|
+
const timeoutMs = this.settings.timeoutMs ?? DyNTS_Leonardo_Image_ControlService.defaultTimeoutMs;
|
|
106
|
+
const maxChecks = Math.max(1, Math.ceil(timeoutMs / intervalMs));
|
|
107
|
+
const sleep = this.settings.sleep
|
|
108
|
+
?? ((ms) => new Promise((resolve) => {
|
|
109
|
+
setTimeout(resolve, ms);
|
|
110
|
+
}));
|
|
111
|
+
const url = `${DyNTS_Leonardo_Image_ControlService.baseUrl}/generations/${encodeURIComponent(generationId)}`;
|
|
112
|
+
for (let check = 1; check <= maxChecks; check++) {
|
|
113
|
+
const json = await this.readJson(await doFetch(url, { method: 'GET', headers: headers }), url, issuer);
|
|
114
|
+
const generation = DyNTS_Leonardo_Image_ControlService.readField(json, 'generations_by_pk');
|
|
115
|
+
const status = DyNTS_Leonardo_Image_ControlService.readField(generation, 'status');
|
|
116
|
+
if (status === 'COMPLETE') {
|
|
117
|
+
return generation;
|
|
118
|
+
}
|
|
119
|
+
if (status === 'FAILED') {
|
|
120
|
+
throw this.failure(`Leonardo generation ${generationId} FAILED.`, issuer, { generationId: generationId });
|
|
121
|
+
}
|
|
122
|
+
if (check < maxChecks) {
|
|
123
|
+
await sleep(intervalMs);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
throw this.failure(`Leonardo generation ${generationId} did not complete within ${timeoutMs} ms (${maxChecks} checks).`, issuer, { generationId: generationId });
|
|
127
|
+
}
|
|
128
|
+
/** Downloads every generated image. The CDN URLs get NO auth header: the key must not travel to a CDN. */
|
|
129
|
+
async downloadImages(generation, generationId, doFetch, issuer) {
|
|
130
|
+
const entries = DyNTS_Leonardo_Image_ControlService.readField(generation, 'generated_images');
|
|
131
|
+
const urls = (Array.isArray(entries) ? entries : [])
|
|
132
|
+
.map((entry) => DyNTS_Leonardo_Image_ControlService.readField(entry, 'url'))
|
|
133
|
+
.filter((url) => typeof url === 'string' && !!url);
|
|
134
|
+
if (!urls.length) {
|
|
135
|
+
throw this.failure(`Leonardo generation ${generationId} completed without image URLs.`, issuer, {
|
|
136
|
+
generationId: generationId,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
const images = [];
|
|
140
|
+
for (const url of urls) {
|
|
141
|
+
const response = await doFetch(url, { method: 'GET' });
|
|
142
|
+
if (!response.ok) {
|
|
143
|
+
throw this.failure(`Downloading a Leonardo image failed: HTTP ${response.status} (${url}).`, issuer, {
|
|
144
|
+
generationId: generationId,
|
|
145
|
+
status: response.status,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
const bytes = Buffer.from(await response.arrayBuffer());
|
|
149
|
+
images.push({
|
|
150
|
+
name: url.split('/').pop(),
|
|
151
|
+
mimeType: response.headers.get('content-type') ?? 'application/octet-stream',
|
|
152
|
+
base64: bytes.toString('base64'),
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
return images;
|
|
156
|
+
}
|
|
157
|
+
/** Parses a JSON response, or throws with the status and the first 500 characters of the body. */
|
|
158
|
+
async readJson(response, url, issuer) {
|
|
159
|
+
if (!response.ok) {
|
|
160
|
+
const detail = await response.text().catch(() => '');
|
|
161
|
+
throw this.failure(`Leonardo HTTP ${response.status}: ${detail.slice(0, 500)}`, issuer, {
|
|
162
|
+
status: response.status,
|
|
163
|
+
url: url,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
return response.json();
|
|
167
|
+
}
|
|
168
|
+
/** A refusal or failure, reported with this adapter's error settings. */
|
|
169
|
+
failure(message, issuer, additionalContent) {
|
|
170
|
+
return new fsm_dynamo_1.DyFM_Error({
|
|
171
|
+
...this.getDefaultErrorSettings('generate', new Error(message), issuer),
|
|
172
|
+
errorCode: `${global_settings_const_1.DyNTS_global_settings.systemShortCodeName}|DyNTS-MG-LEO`,
|
|
173
|
+
...(additionalContent ? { additionalContent: additionalContent } : {}),
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
exports.DyNTS_Leonardo_Image_ControlService = DyNTS_Leonardo_Image_ControlService;
|
|
178
|
+
//# sourceMappingURL=leonardo-image.control-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leonardo-image.control-service.js","sourceRoot":"","sources":["../../../../src/_modules/media-gen/_services/leonardo-image.control-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { DyFM_AI_Model3D_Request, DyFM_AI_Model3D_Response } from '@futdevpro/fsm-dynamo/ai';
|
|
2
|
+
import { DyNTS_Meshy_Settings } from '../_models/meshy-settings.interface';
|
|
3
|
+
import { DyNTS_MediaGen_Operation } from '../_models/media-gen-operation.type';
|
|
4
|
+
import { DyNTS_MediaGen_ServiceBase } from './media-gen.service-base';
|
|
5
|
+
/**
|
|
6
|
+
* Meshy image-to-3D adapter.
|
|
7
|
+
*
|
|
8
|
+
* Shapes verified against the provider's API reference (2026-09-15): `POST https://api.meshy.ai/openapi/v1/image-to-3d`
|
|
9
|
+
* with bearer auth, `image_url` as a public URL or a base64 data URI (.jpg / .jpeg / .png), the task id in `result`;
|
|
10
|
+
* `GET /openapi/v1/image-to-3d/:id` with `status` PENDING | IN_PROGRESS | SUCCEEDED | FAILED | CANCELED, `model_urls`
|
|
11
|
+
* keyed by format, and `task_error`.
|
|
12
|
+
*
|
|
13
|
+
* 🔴 MODERATION IS ENFORCED: every request sends `moderation: true` - the documented default is false, and the
|
|
14
|
+
* master-prompter donor turns it on for its compliance audit (no AI adult content; the input image and texture prompt
|
|
15
|
+
* are screened and the task does not generate on a hit). Nothing a caller passes can change it.
|
|
16
|
+
* The API reference states nothing about visibility, and API-generated models are private: there is no public flag
|
|
17
|
+
* to send.
|
|
18
|
+
*
|
|
19
|
+
* Only the requested formats are downloaded (default `glb`), without the auth header - the key must not travel to
|
|
20
|
+
* a CDN. The thumbnail URL stays in `rawResponse`: a failed preview download must not void a paid generation.
|
|
21
|
+
*/
|
|
22
|
+
export declare class DyNTS_Meshy_ImageTo3D_ControlService extends DyNTS_MediaGen_ServiceBase<DyFM_AI_Model3D_Request, DyFM_AI_Model3D_Response> {
|
|
23
|
+
static readonly baseUrl: string;
|
|
24
|
+
static readonly defaultPollIntervalMs: number;
|
|
25
|
+
static readonly defaultTimeoutMs: number;
|
|
26
|
+
static readonly defaultFormats: readonly string[];
|
|
27
|
+
/** The documented limit of `texture_prompt`. */
|
|
28
|
+
static readonly maxTexturePromptLength: number;
|
|
29
|
+
readonly provider: string;
|
|
30
|
+
readonly operations: readonly DyNTS_MediaGen_Operation[];
|
|
31
|
+
protected readonly settings: DyNTS_Meshy_Settings;
|
|
32
|
+
constructor(settings?: DyNTS_Meshy_Settings);
|
|
33
|
+
static getInstance(): DyNTS_Meshy_ImageTo3D_ControlService;
|
|
34
|
+
/** Reads a field of an unknown JSON value without assuming its shape. */
|
|
35
|
+
private static readField;
|
|
36
|
+
/**
|
|
37
|
+
* Builds a 3D model from one image: create the task, wait for it, download the requested formats.
|
|
38
|
+
*/
|
|
39
|
+
generate(operation: DyNTS_MediaGen_Operation, request: DyFM_AI_Model3D_Request, issuer: string): Promise<DyFM_AI_Model3D_Response>;
|
|
40
|
+
/** Polls the task until SUCCEEDED; FAILED, CANCELED and the timeout are errors that carry the task id. */
|
|
41
|
+
private waitForTask;
|
|
42
|
+
/** Downloads each requested format from `model_urls`; a missing format is an error naming the ones produced. */
|
|
43
|
+
private downloadFormats;
|
|
44
|
+
/** Parses a JSON response, or throws with the status and the first 500 characters of the body. */
|
|
45
|
+
private readJson;
|
|
46
|
+
/** A refusal or failure, reported with this adapter's error settings. */
|
|
47
|
+
private failure;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=meshy-image-to-3d.control-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meshy-image-to-3d.control-service.d.ts","sourceRoot":"","sources":["../../../../src/_modules/media-gen/_services/meshy-image-to-3d.control-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAGhH,OAAO,EAAqB,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC9F,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,oCACX,SAAQ,0BAA0B,CAAC,uBAAuB,EAAE,wBAAwB,CAAC;IAErF,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAiD;IAChF,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAQ;IACrD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAkB;IAC1D,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAa;IAC9D,gDAAgD;IAChD,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAO;IAErD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAW;IACpC,QAAQ,CAAC,UAAU,EAAE,SAAS,wBAAwB,EAAE,CAAqB;IAE7E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;gBAEtC,QAAQ,GAAE,oBAAyB;IAK/C,MAAM,CAAC,WAAW,IAAI,oCAAoC;IAI1D,yEAAyE;IACzE,OAAO,CAAC,MAAM,CAAC,SAAS;IAIxB;;OAEG;IACG,QAAQ,CACZ,SAAS,EAAE,wBAAwB,EACnC,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,wBAAwB,CAAC;IA+DpC,0GAA0G;YAC5F,WAAW;IA+CzB,gHAAgH;YAClG,eAAe;IA4C7B,kGAAkG;YACpF,QAAQ;IAatB,yEAAyE;IACzE,OAAO,CAAC,OAAO;CAOhB"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyNTS_Meshy_ImageTo3D_ControlService = void 0;
|
|
4
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
+
const global_settings_const_1 = require("../../../_collections/global-settings.const");
|
|
6
|
+
const media_gen_service_base_1 = require("./media-gen.service-base");
|
|
7
|
+
/**
|
|
8
|
+
* Meshy image-to-3D adapter.
|
|
9
|
+
*
|
|
10
|
+
* Shapes verified against the provider's API reference (2026-09-15): `POST https://api.meshy.ai/openapi/v1/image-to-3d`
|
|
11
|
+
* with bearer auth, `image_url` as a public URL or a base64 data URI (.jpg / .jpeg / .png), the task id in `result`;
|
|
12
|
+
* `GET /openapi/v1/image-to-3d/:id` with `status` PENDING | IN_PROGRESS | SUCCEEDED | FAILED | CANCELED, `model_urls`
|
|
13
|
+
* keyed by format, and `task_error`.
|
|
14
|
+
*
|
|
15
|
+
* 🔴 MODERATION IS ENFORCED: every request sends `moderation: true` - the documented default is false, and the
|
|
16
|
+
* master-prompter donor turns it on for its compliance audit (no AI adult content; the input image and texture prompt
|
|
17
|
+
* are screened and the task does not generate on a hit). Nothing a caller passes can change it.
|
|
18
|
+
* The API reference states nothing about visibility, and API-generated models are private: there is no public flag
|
|
19
|
+
* to send.
|
|
20
|
+
*
|
|
21
|
+
* Only the requested formats are downloaded (default `glb`), without the auth header - the key must not travel to
|
|
22
|
+
* a CDN. The thumbnail URL stays in `rawResponse`: a failed preview download must not void a paid generation.
|
|
23
|
+
*/
|
|
24
|
+
class DyNTS_Meshy_ImageTo3D_ControlService extends media_gen_service_base_1.DyNTS_MediaGen_ServiceBase {
|
|
25
|
+
static baseUrl = 'https://api.meshy.ai/openapi/v1/image-to-3d';
|
|
26
|
+
static defaultPollIntervalMs = 3000;
|
|
27
|
+
static defaultTimeoutMs = 15 * 60 * 1000;
|
|
28
|
+
static defaultFormats = ['glb'];
|
|
29
|
+
/** The documented limit of `texture_prompt`. */
|
|
30
|
+
static maxTexturePromptLength = 800;
|
|
31
|
+
provider = 'meshy';
|
|
32
|
+
operations = ['image-to-3d'];
|
|
33
|
+
settings;
|
|
34
|
+
constructor(settings = {}) {
|
|
35
|
+
super();
|
|
36
|
+
this.settings = settings;
|
|
37
|
+
}
|
|
38
|
+
static getInstance() {
|
|
39
|
+
return DyNTS_Meshy_ImageTo3D_ControlService.getSingletonInstance();
|
|
40
|
+
}
|
|
41
|
+
/** Reads a field of an unknown JSON value without assuming its shape. */
|
|
42
|
+
static readField(json, key) {
|
|
43
|
+
return json !== null && typeof json === 'object' ? Reflect.get(json, key) : undefined;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Builds a 3D model from one image: create the task, wait for it, download the requested formats.
|
|
47
|
+
*/
|
|
48
|
+
async generate(operation, request, issuer) {
|
|
49
|
+
if (!this.operations.includes(operation)) {
|
|
50
|
+
throw this.failure(`${this.constructor.name} does not serve '${operation}'. It serves: image-to-3d.`, issuer);
|
|
51
|
+
}
|
|
52
|
+
if (!request.image?.base64) {
|
|
53
|
+
throw this.failure('An input image is required for image-to-3d.', issuer);
|
|
54
|
+
}
|
|
55
|
+
if (!['image/png', 'image/jpeg'].includes(request.image.mimeType)) {
|
|
56
|
+
throw this.failure(`Meshy accepts .jpg / .jpeg / .png input only; got '${request.image.mimeType}'.`, issuer);
|
|
57
|
+
}
|
|
58
|
+
if (!request.model) {
|
|
59
|
+
throw this.failure('A Meshy model is required (request.model, e.g. latest).', issuer);
|
|
60
|
+
}
|
|
61
|
+
if ((request.prompt?.length ?? 0) > DyNTS_Meshy_ImageTo3D_ControlService.maxTexturePromptLength) {
|
|
62
|
+
throw this.failure(`The texture prompt is ${request.prompt?.length} characters; Meshy allows `
|
|
63
|
+
+ `${DyNTS_Meshy_ImageTo3D_ControlService.maxTexturePromptLength}.`, issuer);
|
|
64
|
+
}
|
|
65
|
+
const apiKey = this.settings.apiKey ?? process.env.MESHY_API_KEY;
|
|
66
|
+
if (!apiKey) {
|
|
67
|
+
throw this.failure('Missing Meshy API key: pass settings.apiKey or set MESHY_API_KEY.', issuer);
|
|
68
|
+
}
|
|
69
|
+
const formats = request.formats?.length
|
|
70
|
+
? request.formats
|
|
71
|
+
: DyNTS_Meshy_ImageTo3D_ControlService.defaultFormats;
|
|
72
|
+
const doFetch = this.settings.fetchImpl ?? ((url, init) => fetch(url, init));
|
|
73
|
+
const headers = { 'Content-Type': 'application/json', Authorization: `Bearer ${apiKey}` };
|
|
74
|
+
const createUrl = DyNTS_Meshy_ImageTo3D_ControlService.baseUrl;
|
|
75
|
+
const created = await this.readJson(await doFetch(createUrl, {
|
|
76
|
+
method: 'POST',
|
|
77
|
+
headers: headers,
|
|
78
|
+
body: JSON.stringify({
|
|
79
|
+
image_url: `data:${request.image.mimeType};base64,${request.image.base64}`,
|
|
80
|
+
ai_model: request.model,
|
|
81
|
+
...(request.prompt ? { texture_prompt: request.prompt } : {}),
|
|
82
|
+
moderation: true,
|
|
83
|
+
}),
|
|
84
|
+
}), createUrl, issuer);
|
|
85
|
+
const taskId = DyNTS_Meshy_ImageTo3D_ControlService.readField(created, 'result');
|
|
86
|
+
if (typeof taskId !== 'string' || !taskId) {
|
|
87
|
+
throw this.failure(`Meshy returned no task id (${createUrl}).`, issuer);
|
|
88
|
+
}
|
|
89
|
+
const task = await this.waitForTask(taskId, doFetch, headers, issuer);
|
|
90
|
+
const files = await this.downloadFormats(task, taskId, formats, doFetch, issuer);
|
|
91
|
+
return {
|
|
92
|
+
provider: this.provider,
|
|
93
|
+
model: request.model,
|
|
94
|
+
files: files,
|
|
95
|
+
rawResponse: task,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/** Polls the task until SUCCEEDED; FAILED, CANCELED and the timeout are errors that carry the task id. */
|
|
99
|
+
async waitForTask(taskId, doFetch, headers, issuer) {
|
|
100
|
+
const intervalMs = this.settings.pollIntervalMs ?? DyNTS_Meshy_ImageTo3D_ControlService.defaultPollIntervalMs;
|
|
101
|
+
const timeoutMs = this.settings.timeoutMs ?? DyNTS_Meshy_ImageTo3D_ControlService.defaultTimeoutMs;
|
|
102
|
+
const maxChecks = Math.max(1, Math.ceil(timeoutMs / intervalMs));
|
|
103
|
+
const sleep = this.settings.sleep
|
|
104
|
+
?? ((ms) => new Promise((resolve) => {
|
|
105
|
+
setTimeout(resolve, ms);
|
|
106
|
+
}));
|
|
107
|
+
const url = `${DyNTS_Meshy_ImageTo3D_ControlService.baseUrl}/${encodeURIComponent(taskId)}`;
|
|
108
|
+
for (let check = 1; check <= maxChecks; check++) {
|
|
109
|
+
const task = await this.readJson(await doFetch(url, { method: 'GET', headers: headers }), url, issuer);
|
|
110
|
+
const status = DyNTS_Meshy_ImageTo3D_ControlService.readField(task, 'status');
|
|
111
|
+
if (status === 'SUCCEEDED') {
|
|
112
|
+
return task;
|
|
113
|
+
}
|
|
114
|
+
if (status === 'FAILED' || status === 'CANCELED') {
|
|
115
|
+
const detail = DyNTS_Meshy_ImageTo3D_ControlService.readField(DyNTS_Meshy_ImageTo3D_ControlService.readField(task, 'task_error'), 'message');
|
|
116
|
+
throw this.failure(`Meshy task ${taskId} ${status}${typeof detail === 'string' && detail ? `: ${detail}` : ''}.`, issuer, { taskId: taskId, status: status });
|
|
117
|
+
}
|
|
118
|
+
if (check < maxChecks) {
|
|
119
|
+
await sleep(intervalMs);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
throw this.failure(`Meshy task ${taskId} did not complete within ${timeoutMs} ms (${maxChecks} checks).`, issuer, { taskId: taskId });
|
|
123
|
+
}
|
|
124
|
+
/** Downloads each requested format from `model_urls`; a missing format is an error naming the ones produced. */
|
|
125
|
+
async downloadFormats(task, taskId, formats, doFetch, issuer) {
|
|
126
|
+
const modelUrls = DyNTS_Meshy_ImageTo3D_ControlService.readField(task, 'model_urls');
|
|
127
|
+
const available = modelUrls !== null && typeof modelUrls === 'object'
|
|
128
|
+
? Object.keys(modelUrls).filter((format) => typeof Reflect.get(modelUrls, format) === 'string')
|
|
129
|
+
: [];
|
|
130
|
+
const files = [];
|
|
131
|
+
for (const format of formats) {
|
|
132
|
+
const url = DyNTS_Meshy_ImageTo3D_ControlService.readField(modelUrls, format);
|
|
133
|
+
if (typeof url !== 'string' || !url) {
|
|
134
|
+
throw this.failure(`Meshy task ${taskId} produced no '${format}'. `
|
|
135
|
+
+ `Available: ${available.length ? available.join(', ') : 'none'}.`, issuer, { taskId: taskId });
|
|
136
|
+
}
|
|
137
|
+
const response = await doFetch(url, { method: 'GET' });
|
|
138
|
+
if (!response.ok) {
|
|
139
|
+
throw this.failure(`Downloading the Meshy '${format}' failed: HTTP ${response.status}.`, issuer, {
|
|
140
|
+
taskId: taskId,
|
|
141
|
+
status: response.status,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
files.push({
|
|
145
|
+
name: `model.${format}`,
|
|
146
|
+
mimeType: response.headers.get('content-type') ?? 'application/octet-stream',
|
|
147
|
+
base64: Buffer.from(await response.arrayBuffer()).toString('base64'),
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
return files;
|
|
151
|
+
}
|
|
152
|
+
/** Parses a JSON response, or throws with the status and the first 500 characters of the body. */
|
|
153
|
+
async readJson(response, url, issuer) {
|
|
154
|
+
if (!response.ok) {
|
|
155
|
+
const detail = await response.text().catch(() => '');
|
|
156
|
+
throw this.failure(`Meshy HTTP ${response.status}: ${detail.slice(0, 500)}`, issuer, {
|
|
157
|
+
status: response.status,
|
|
158
|
+
url: url,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
return response.json();
|
|
162
|
+
}
|
|
163
|
+
/** A refusal or failure, reported with this adapter's error settings. */
|
|
164
|
+
failure(message, issuer, additionalContent) {
|
|
165
|
+
return new fsm_dynamo_1.DyFM_Error({
|
|
166
|
+
...this.getDefaultErrorSettings('generate', new Error(message), issuer),
|
|
167
|
+
errorCode: `${global_settings_const_1.DyNTS_global_settings.systemShortCodeName}|DyNTS-MG-MSH`,
|
|
168
|
+
...(additionalContent ? { additionalContent: additionalContent } : {}),
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
exports.DyNTS_Meshy_ImageTo3D_ControlService = DyNTS_Meshy_ImageTo3D_ControlService;
|
|
173
|
+
//# sourceMappingURL=meshy-image-to-3d.control-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meshy-image-to-3d.control-service.js","sourceRoot":"","sources":["../../../../src/_modules/media-gen/_services/meshy-image-to-3d.control-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export * from './_models/elevenlabs-settings.interface';
|
|
2
|
+
export * from './_models/leonardo-settings.interface';
|
|
2
3
|
export * from './_models/media-gen-operation.type';
|
|
4
|
+
export * from './_models/meshy-settings.interface';
|
|
3
5
|
export * from './_collections/elevenlabs-region.util';
|
|
4
6
|
export * from './_collections/media-gen-prompt.util';
|
|
5
7
|
export * from './_services/media-gen.service-base';
|
|
@@ -7,4 +9,6 @@ export * from './_services/media-gen.registry';
|
|
|
7
9
|
export * from './_services/elevenlabs.service-base';
|
|
8
10
|
export * from './_services/elevenlabs-speak.control-service';
|
|
9
11
|
export * from './_services/elevenlabs-transcribe.control-service';
|
|
12
|
+
export * from './_services/leonardo-image.control-service';
|
|
13
|
+
export * from './_services/meshy-image-to-3d.control-service';
|
|
10
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/media-gen/index.ts"],"names":[],"mappings":"AAUA,cAAc,yCAAyC,CAAC;AACxD,cAAc,oCAAoC,CAAC;AAGnD,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,mDAAmD,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/media-gen/index.ts"],"names":[],"mappings":"AAUA,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AAGnD,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,mDAAmD,CAAC;AAClE,cAAc,4CAA4C,CAAC;AAC3D,cAAc,+CAA+C,CAAC"}
|
|
@@ -9,7 +9,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
9
9
|
const tslib_1 = require("tslib");
|
|
10
10
|
// MODELS
|
|
11
11
|
tslib_1.__exportStar(require("./_models/elevenlabs-settings.interface"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./_models/leonardo-settings.interface"), exports);
|
|
12
13
|
tslib_1.__exportStar(require("./_models/media-gen-operation.type"), exports);
|
|
14
|
+
tslib_1.__exportStar(require("./_models/meshy-settings.interface"), exports);
|
|
13
15
|
// COLLECTIONS
|
|
14
16
|
tslib_1.__exportStar(require("./_collections/elevenlabs-region.util"), exports);
|
|
15
17
|
tslib_1.__exportStar(require("./_collections/media-gen-prompt.util"), exports);
|
|
@@ -19,4 +21,6 @@ tslib_1.__exportStar(require("./_services/media-gen.registry"), exports);
|
|
|
19
21
|
tslib_1.__exportStar(require("./_services/elevenlabs.service-base"), exports);
|
|
20
22
|
tslib_1.__exportStar(require("./_services/elevenlabs-speak.control-service"), exports);
|
|
21
23
|
tslib_1.__exportStar(require("./_services/elevenlabs-transcribe.control-service"), exports);
|
|
24
|
+
tslib_1.__exportStar(require("./_services/leonardo-image.control-service"), exports);
|
|
25
|
+
tslib_1.__exportStar(require("./_services/meshy-image-to-3d.control-service"), exports);
|
|
22
26
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/media-gen/index.ts"],"names":[],"mappings":";AACA,EAAE;AACF,6DAA6D;AAC7D,EAAE;AACF,2GAA2G;AAC3G,6FAA6F;AAC7F,EAAE;;;AAGF,SAAS;AACT,kFAAwD;AACxD,6EAAmD;AAEnD,cAAc;AACd,gFAAsD;AACtD,+EAAqD;AAErD,WAAW;AACX,6EAAmD;AACnD,yEAA+C;AAC/C,8EAAoD;AACpD,uFAA6D;AAC7D,4FAAkE"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/media-gen/index.ts"],"names":[],"mappings":";AACA,EAAE;AACF,6DAA6D;AAC7D,EAAE;AACF,2GAA2G;AAC3G,6FAA6F;AAC7F,EAAE;;;AAGF,SAAS;AACT,kFAAwD;AACxD,gFAAsD;AACtD,6EAAmD;AACnD,6EAAmD;AAEnD,cAAc;AACd,gFAAsD;AACtD,+EAAqD;AAErD,WAAW;AACX,6EAAmD;AACnD,yEAA+C;AAC/C,8EAAoD;AACpD,uFAA6D;AAC7D,4FAAkE;AAClE,qFAA2D;AAC3D,wFAA8D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@futdevpro/nts-dynamo",
|
|
3
|
-
"version": "01.15.
|
|
3
|
+
"version": "01.15.265",
|
|
4
4
|
"description": "Dynamic NodeTS (NodeJS-Typescript), MongoDB Backend System Framework by Future Development Program Ltd.",
|
|
5
5
|
"DyBu_settings": {
|
|
6
6
|
"packageType": "server-package",
|
|
@@ -424,7 +424,7 @@
|
|
|
424
424
|
"@anthropic-ai/sdk": "~0.39.0",
|
|
425
425
|
"@modelcontextprotocol/sdk": "~1.29.0",
|
|
426
426
|
"better-sqlite3": "~12.4.1",
|
|
427
|
-
"@futdevpro/fsm-dynamo": "1.20.
|
|
427
|
+
"@futdevpro/fsm-dynamo": "1.20.43",
|
|
428
428
|
"@types/express": "4.17.21",
|
|
429
429
|
"@types/geoip-lite": "~1.4.4",
|
|
430
430
|
"@types/node": "~24.1.0",
|
|
@@ -463,7 +463,7 @@
|
|
|
463
463
|
}
|
|
464
464
|
},
|
|
465
465
|
"devDependencies": {
|
|
466
|
-
"@futdevpro/fsm-dynamo": "1.20.
|
|
466
|
+
"@futdevpro/fsm-dynamo": "1.20.43",
|
|
467
467
|
"@futdevpro/dynamo-eslint": "1.20.18",
|
|
468
468
|
"@discordjs/opus": "^0.10.0",
|
|
469
469
|
"@discordjs/voice": "^0.18.0",
|