@ttt-productions/media-processing-core 0.0.4 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/audio/audio-processor.d.ts +1 -1
- package/dist/audio/audio-processor.d.ts.map +1 -1
- package/dist/image/image-processor.d.ts +1 -1
- package/dist/image/image-processor.d.ts.map +1 -1
- package/dist/moderation/merge.d.ts +1 -1
- package/dist/moderation/merge.d.ts.map +1 -1
- package/dist/moderation/types.d.ts +1 -1
- package/dist/moderation/types.d.ts.map +1 -1
- package/dist/process-media.d.ts +1 -1
- package/dist/process-media.d.ts.map +1 -1
- package/dist/processing/process-media.d.ts +1 -1
- package/dist/processing/process-media.d.ts.map +1 -1
- package/dist/processing/result.d.ts +1 -1
- package/dist/processing/result.d.ts.map +1 -1
- package/dist/run-pipeline.d.ts +1 -1
- package/dist/run-pipeline.d.ts.map +1 -1
- package/dist/run-pipeline.js +2 -2
- package/dist/run-pipeline.js.map +1 -1
- package/dist/server/build-download-url.d.ts +2 -0
- package/dist/server/build-download-url.d.ts.map +1 -0
- package/dist/server/build-download-url.js +20 -0
- package/dist/server/build-download-url.js.map +1 -0
- package/dist/server/firebase-media-io.d.ts.map +1 -1
- package/dist/server/firebase-media-io.js +8 -46
- package/dist/server/firebase-media-io.js.map +1 -1
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/storage-ops.d.ts +45 -0
- package/dist/server/storage-ops.d.ts.map +1 -0
- package/dist/server/storage-ops.js +101 -0
- package/dist/server/storage-ops.js.map +1 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/video/video-processor.d.ts +1 -1
- package/dist/video/video-processor.d.ts.map +1 -1
- package/dist/workspace/temp.d.ts.map +1 -1
- package/dist/workspace/temp.js +1 -1
- package/dist/workspace/temp.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MediaProcessingResult, MediaProcessingSpec } from "@ttt-productions/media-
|
|
1
|
+
import type { MediaProcessingResult, MediaProcessingSpec } from "@ttt-productions/media-schemas";
|
|
2
2
|
import type { ProcessMediaOptions } from "../types.js";
|
|
3
3
|
export declare function processAudio(spec: MediaProcessingSpec, ctx: {
|
|
4
4
|
inputPath: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio-processor.d.ts","sourceRoot":"","sources":["../../src/audio/audio-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"audio-processor.d.ts","sourceRoot":"","sources":["../../src/audio/audio-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAM9G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA2BvD,wBAAsB,YAAY,CAChC,IAAI,EAAE,mBAAmB,EACzB,GAAG,EAAE;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,EACD,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,qBAAqB,CAAC,CAkIhC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MediaProcessingResult, MediaProcessingSpec } from "@ttt-productions/media-
|
|
1
|
+
import type { MediaProcessingResult, MediaProcessingSpec } from "@ttt-productions/media-schemas";
|
|
2
2
|
import type { ProcessMediaOptions } from "../types.js";
|
|
3
3
|
export declare function processImage(spec: MediaProcessingSpec, ctx: {
|
|
4
4
|
inputPath: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-processor.d.ts","sourceRoot":"","sources":["../../src/image/image-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"image-processor.d.ts","sourceRoot":"","sources":["../../src/image/image-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAK9G,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA0PvD,wBAAsB,YAAY,CAChC,IAAI,EAAE,mBAAmB,EACzB,GAAG,EAAE;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB,EACD,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,qBAAqB,CAAC,CAoHhC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { MediaModerationResult } from "@ttt-productions/media-
|
|
1
|
+
import type { MediaModerationResult } from "@ttt-productions/media-schemas";
|
|
2
2
|
export declare function mergeModeration(input?: MediaModerationResult | null, output?: MediaModerationResult | null): MediaModerationResult | undefined;
|
|
3
3
|
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/moderation/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/moderation/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAE5E,wBAAgB,eAAe,CAC7B,KAAK,CAAC,EAAE,qBAAqB,GAAG,IAAI,EACpC,MAAM,CAAC,EAAE,qBAAqB,GAAG,IAAI,GACpC,qBAAqB,GAAG,SAAS,CAwBnC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MediaModerationResult, MediaProcessingSpec } from "@ttt-productions/media-
|
|
1
|
+
import type { MediaModerationResult, MediaProcessingSpec } from "@ttt-productions/media-schemas";
|
|
2
2
|
export interface ModerationInput {
|
|
3
3
|
spec: MediaProcessingSpec;
|
|
4
4
|
kind: "image" | "video" | "audio" | "generic";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/moderation/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/moderation/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAEjG,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IAC9C,OAAO,EAAE,KAAK,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IAEjB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,qBAAqB,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAE9F,iDAAiD;IACjD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,qBAAqB,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;CAClG"}
|
package/dist/process-media.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MediaProcessingResult, MediaProcessingSpec } from "@ttt-productions/media-
|
|
1
|
+
import type { MediaProcessingResult, MediaProcessingSpec } from "@ttt-productions/media-schemas";
|
|
2
2
|
import type { ProcessMediaContext, ProcessMediaOptions } from "./types.js";
|
|
3
3
|
export type { MediaPipelineProgress, ProcessMediaContext, ProcessMediaOptions } from "./types.js";
|
|
4
4
|
export declare function processMedia(spec: MediaProcessingSpec, ctx: ProcessMediaContext, opts?: ProcessMediaOptions): Promise<MediaProcessingResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-media.d.ts","sourceRoot":"","sources":["../src/process-media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"process-media.d.ts","sourceRoot":"","sources":["../src/process-media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAIjG,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE3E,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAElG,wBAAsB,YAAY,CAChC,IAAI,EAAE,mBAAmB,EACzB,GAAG,EAAE,mBAAmB,EACxB,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,qBAAqB,CAAC,CAmBhC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MediaProcessingSpec, MediaProcessingResult } from "@ttt-productions/media-
|
|
1
|
+
import type { MediaProcessingSpec, MediaProcessingResult } from "@ttt-productions/media-schemas";
|
|
2
2
|
export declare function processMedia(spec: MediaProcessingSpec, ctx: {
|
|
3
3
|
inputPath: string;
|
|
4
4
|
outputBasePath: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-media.d.ts","sourceRoot":"","sources":["../../src/processing/process-media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,
|
|
1
|
+
{"version":3,"file":"process-media.d.ts","sourceRoot":"","sources":["../../src/processing/process-media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,gCAAgC,CAAC;AAMxC,wBAAsB,YAAY,CAChC,IAAI,EAAE,mBAAmB,EACzB,GAAG,EAAE;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB,GACA,OAAO,CAAC,qBAAqB,CAAC,CAqBhC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MediaProcessingResult } from "@ttt-productions/media-
|
|
1
|
+
import type { MediaProcessingResult } from "@ttt-productions/media-schemas";
|
|
2
2
|
export declare function success(result: Omit<MediaProcessingResult, "ok">): MediaProcessingResult;
|
|
3
3
|
export declare function failure(error: MediaProcessingResult["error"]): MediaProcessingResult;
|
|
4
4
|
//# sourceMappingURL=result.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/processing/result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/processing/result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAE5E,wBAAgB,OAAO,CACrB,MAAM,EAAE,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,GACxC,qBAAqB,CAEvB;AAED,wBAAgB,OAAO,CACrB,KAAK,EAAE,qBAAqB,CAAC,OAAO,CAAC,GACpC,qBAAqB,CAMvB"}
|
package/dist/run-pipeline.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MediaProcessingResult, MediaProcessingSpec } from "@ttt-productions/media-
|
|
1
|
+
import type { MediaProcessingResult, MediaProcessingSpec } from "@ttt-productions/media-schemas";
|
|
2
2
|
import type { MediaIO } from "./io/types.js";
|
|
3
3
|
import type { ModerationAdapter } from "./moderation/types.js";
|
|
4
4
|
export interface RunPipelineArgs {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-pipeline.d.ts","sourceRoot":"","sources":["../src/run-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,qBAAqB,EACrB,mBAAmB,EAEpB,MAAM,
|
|
1
|
+
{"version":3,"file":"run-pipeline.d.ts","sourceRoot":"","sources":["../src/run-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,qBAAqB,EACrB,mBAAmB,EAEpB,MAAM,gCAAgC,CAAC;AAIxC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAK/D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,YAAY,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACpE;AAiBD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA6K5F"}
|
package/dist/run-pipeline.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseMediaProcessingSpec } from "@ttt-productions/media-
|
|
1
|
+
import { parseMediaProcessingSpec } from "@ttt-productions/media-schemas";
|
|
2
2
|
import { createTempWorkspace } from "./workspace/temp.js";
|
|
3
3
|
import { processMedia } from "./process-media.js";
|
|
4
4
|
import { mergeModeration } from "./moderation/merge.js";
|
|
@@ -42,7 +42,7 @@ export async function runMediaPipeline(args) {
|
|
|
42
42
|
},
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
|
-
const ws = await createTempWorkspace(
|
|
45
|
+
const ws = await createTempWorkspace();
|
|
46
46
|
try {
|
|
47
47
|
const inputPath = path.join(ws.dir, "input");
|
|
48
48
|
const outputBasePath = path.join(ws.dir, outputBaseName);
|
package/dist/run-pipeline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-pipeline.js","sourceRoot":"","sources":["../src/run-pipeline.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"run-pipeline.js","sourceRoot":"","sources":["../src/run-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-download-url.d.ts","sourceRoot":"","sources":["../../src/server/build-download-url.ts"],"names":[],"mappings":"AAYA,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,MAAM,CAOR"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Single source of truth for Firebase Storage download URL construction.
|
|
2
|
+
//
|
|
3
|
+
// Emulator awareness: when `FIREBASE_STORAGE_EMULATOR_HOST` is set (the
|
|
4
|
+
// Firebase Admin SDK auto-sets this when the Storage emulator is running),
|
|
5
|
+
// constructed URLs target the local emulator. Otherwise they target the
|
|
6
|
+
// production Firebase Storage CDN. This is critical for E2E tests — without
|
|
7
|
+
// it, browsers running against the emulator fetch production URLs and 404.
|
|
8
|
+
//
|
|
9
|
+
// Every download URL produced anywhere in the system MUST come from this
|
|
10
|
+
// function. Inline construction (`https://firebasestorage.googleapis.com/...`)
|
|
11
|
+
// is forbidden — it bypasses the emulator branch and breaks E2E tests.
|
|
12
|
+
export function buildFirebaseDownloadUrl(bucketName, storagePath, downloadToken) {
|
|
13
|
+
const encodedPath = encodeURIComponent(storagePath);
|
|
14
|
+
const emulatorHost = process.env.FIREBASE_STORAGE_EMULATOR_HOST;
|
|
15
|
+
const baseUrl = emulatorHost
|
|
16
|
+
? `http://${emulatorHost}`
|
|
17
|
+
: "https://firebasestorage.googleapis.com";
|
|
18
|
+
return `${baseUrl}/v0/b/${bucketName}/o/${encodedPath}?alt=media&token=${downloadToken}`;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=build-download-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-download-url.js","sourceRoot":"","sources":["../../src/server/build-download-url.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,wEAAwE;AACxE,2EAA2E;AAC3E,wEAAwE;AACxE,4EAA4E;AAC5E,2EAA2E;AAC3E,EAAE;AACF,yEAAyE;AACzE,+EAA+E;AAC/E,uEAAuE;AAEvE,MAAM,UAAU,wBAAwB,CACtC,UAAkB,EAClB,WAAmB,EACnB,aAAqB;IAErB,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;IAChE,MAAM,OAAO,GAAG,YAAY;QAC1B,CAAC,CAAC,UAAU,YAAY,EAAE;QAC1B,CAAC,CAAC,wCAAwC,CAAC;IAC7C,OAAO,GAAG,OAAO,SAAS,UAAU,MAAM,WAAW,oBAAoB,aAAa,EAAE,CAAC;AAC3F,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firebase-media-io.d.ts","sourceRoot":"","sources":["../../src/server/firebase-media-io.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"firebase-media-io.d.ts","sourceRoot":"","sources":["../../src/server/firebase-media-io.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,WAAW,yBAAyB;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAwB9E"}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
// Firebase Storage MediaIO adapter for the media-processing pipeline.
|
|
2
|
-
// Server-only — relies on firebase-admin. Imported via `/server` subpath.
|
|
3
2
|
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
// auto-sets it when the Storage emulator is running), URLs target the
|
|
7
|
-
// local emulator; otherwise they target the production Firebase Storage
|
|
8
|
-
// CDN. This is critical for E2E tests — without it, the browser fetches
|
|
9
|
-
// production URLs that 404 because the file lives in the local emulator.
|
|
3
|
+
// Internals delegate to `uploadFileToStorage` so URL construction and
|
|
4
|
+
// token attachment have a single source of truth.
|
|
10
5
|
import { getStorage } from "firebase-admin/storage";
|
|
11
|
-
import {
|
|
6
|
+
import { uploadFileToStorage } from "./storage-ops.js";
|
|
12
7
|
export function createFirebaseMediaIO(args) {
|
|
13
8
|
const bucket = getStorage().bucket();
|
|
14
9
|
return {
|
|
@@ -21,47 +16,14 @@ export function createFirebaseMediaIO(args) {
|
|
|
21
16
|
async writeFromFile(localPath, outputKey) {
|
|
22
17
|
const ext = localPath.split(".").pop() || "";
|
|
23
18
|
const destinationPath = `${args.outputStorageBasePath}/${outputKey}.${ext}`;
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
contentType: getMimeFromExt(ext),
|
|
29
|
-
cacheControl: "public, max-age=31536000",
|
|
30
|
-
metadata: { firebaseStorageDownloadTokens: downloadToken },
|
|
31
|
-
},
|
|
19
|
+
const result = await uploadFileToStorage({
|
|
20
|
+
bucket,
|
|
21
|
+
localPath,
|
|
22
|
+
destinationPath,
|
|
32
23
|
});
|
|
33
|
-
|
|
34
|
-
const emulatorHost = process.env.FIREBASE_STORAGE_EMULATOR_HOST;
|
|
35
|
-
const baseUrl = emulatorHost
|
|
36
|
-
? `http://${emulatorHost}`
|
|
37
|
-
: "https://firebasestorage.googleapis.com";
|
|
38
|
-
const url = `${baseUrl}/v0/b/${bucket.name}/o/${encodedPath}?alt=media&token=${downloadToken}`;
|
|
39
|
-
return { url, path: destinationPath };
|
|
24
|
+
return { url: result.url, path: result.path };
|
|
40
25
|
},
|
|
41
26
|
},
|
|
42
27
|
};
|
|
43
28
|
}
|
|
44
|
-
function getMimeFromExt(ext) {
|
|
45
|
-
switch (ext.toLowerCase()) {
|
|
46
|
-
case "jpg":
|
|
47
|
-
case "jpeg":
|
|
48
|
-
return "image/jpeg";
|
|
49
|
-
case "png":
|
|
50
|
-
return "image/png";
|
|
51
|
-
case "webp":
|
|
52
|
-
return "image/webp";
|
|
53
|
-
case "mp4":
|
|
54
|
-
return "video/mp4";
|
|
55
|
-
case "webm":
|
|
56
|
-
return "video/webm";
|
|
57
|
-
case "m4a":
|
|
58
|
-
return "audio/mp4";
|
|
59
|
-
case "aac":
|
|
60
|
-
return "audio/aac";
|
|
61
|
-
case "mp3":
|
|
62
|
-
return "audio/mpeg";
|
|
63
|
-
default:
|
|
64
|
-
return "application/octet-stream";
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
29
|
//# sourceMappingURL=firebase-media-io.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firebase-media-io.js","sourceRoot":"","sources":["../../src/server/firebase-media-io.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,
|
|
1
|
+
{"version":3,"file":"firebase-media-io.js","sourceRoot":"","sources":["../../src/server/firebase-media-io.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,EAAE;AACF,sEAAsE;AACtE,kDAAkD;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAOvD,MAAM,UAAU,qBAAqB,CAAC,IAA+B;IACnE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC,MAAM,EAAE,CAAC;IAErC,OAAO;QACL,KAAK,EAAE;YACL,KAAK,CAAC,UAAU,CAAC,SAAiB;gBAChC,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;YAChF,CAAC;SACF;QACD,MAAM,EAAE;YACN,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,SAAiB;gBACtD,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC7C,MAAM,eAAe,GAAG,GAAG,IAAI,CAAC,qBAAqB,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;gBAE5E,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC;oBACvC,MAAM;oBACN,SAAS;oBACT,eAAe;iBAChB,CAAC,CAAC;gBAEH,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YAChD,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC"}
|
package/dist/server/index.js
CHANGED
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { getStorage } from "firebase-admin/storage";
|
|
2
|
+
/** Firebase Admin Storage Bucket — inferred to avoid @google-cloud/storage dep. */
|
|
3
|
+
export type Bucket = ReturnType<ReturnType<typeof getStorage>["bucket"]>;
|
|
4
|
+
export interface StorageWriteResult {
|
|
5
|
+
url: string;
|
|
6
|
+
path: string;
|
|
7
|
+
token: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Upload a local file to Storage. Generates a download token, attaches it
|
|
11
|
+
* to the file's metadata, and returns the emulator-aware download URL.
|
|
12
|
+
*
|
|
13
|
+
* Use this for: pipeline outputs (sharp, ffmpeg) and any other "local file
|
|
14
|
+
* → Storage" flow.
|
|
15
|
+
*/
|
|
16
|
+
export declare function uploadFileToStorage(args: {
|
|
17
|
+
bucket: Bucket;
|
|
18
|
+
localPath: string;
|
|
19
|
+
destinationPath: string;
|
|
20
|
+
contentType?: string;
|
|
21
|
+
cacheControl?: string;
|
|
22
|
+
}): Promise<StorageWriteResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Move or copy a file already in Storage to a new location. Generates a
|
|
25
|
+
* fresh download token at the destination, attaches it, and returns the
|
|
26
|
+
* emulator-aware download URL.
|
|
27
|
+
*
|
|
28
|
+
* Use this for any "Storage → Storage" relocation flow.
|
|
29
|
+
*/
|
|
30
|
+
export declare function relocateStorageFile(args: {
|
|
31
|
+
bucket: Bucket;
|
|
32
|
+
fromPath: string;
|
|
33
|
+
toPath: string;
|
|
34
|
+
mode: "move" | "copy";
|
|
35
|
+
}): Promise<StorageWriteResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Attach a fresh download token to a file already at its final Storage
|
|
38
|
+
* location. Use when the file is already in place and only needs a token
|
|
39
|
+
* (e.g., content-moderation rejection where the file was renamed earlier).
|
|
40
|
+
*/
|
|
41
|
+
export declare function attachDownloadToken(args: {
|
|
42
|
+
bucket: Bucket;
|
|
43
|
+
storagePath: string;
|
|
44
|
+
}): Promise<StorageWriteResult>;
|
|
45
|
+
//# sourceMappingURL=storage-ops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-ops.d.ts","sourceRoot":"","sources":["../../src/server/storage-ops.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD,mFAAmF;AACnF,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAID;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmB9B;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAkB9B;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAY9B"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// Storage write operations — chokepoint for every file-storage side-effect
|
|
2
|
+
// in the system. Inline `bucket.upload()`, `bucket.file().move()`,
|
|
3
|
+
// `bucket.file().copy()`, and `setMetadata({ firebaseStorageDownloadTokens })`
|
|
4
|
+
// calls are forbidden outside this module.
|
|
5
|
+
//
|
|
6
|
+
// Every operation generates a fresh download token, attaches it to the file's
|
|
7
|
+
// metadata, and returns a `StorageWriteResult` with the emulator-aware URL.
|
|
8
|
+
import { randomUUID } from "node:crypto";
|
|
9
|
+
import { buildFirebaseDownloadUrl } from "./build-download-url.js";
|
|
10
|
+
const DEFAULT_CACHE_CONTROL = "public, max-age=31536000";
|
|
11
|
+
/**
|
|
12
|
+
* Upload a local file to Storage. Generates a download token, attaches it
|
|
13
|
+
* to the file's metadata, and returns the emulator-aware download URL.
|
|
14
|
+
*
|
|
15
|
+
* Use this for: pipeline outputs (sharp, ffmpeg) and any other "local file
|
|
16
|
+
* → Storage" flow.
|
|
17
|
+
*/
|
|
18
|
+
export async function uploadFileToStorage(args) {
|
|
19
|
+
const token = randomUUID();
|
|
20
|
+
const contentType = args.contentType ?? getMimeFromExt(extractExt(args.localPath));
|
|
21
|
+
await args.bucket.upload(args.localPath, {
|
|
22
|
+
destination: args.destinationPath,
|
|
23
|
+
metadata: {
|
|
24
|
+
contentType,
|
|
25
|
+
cacheControl: args.cacheControl ?? DEFAULT_CACHE_CONTROL,
|
|
26
|
+
metadata: { firebaseStorageDownloadTokens: token },
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
url: buildFirebaseDownloadUrl(args.bucket.name, args.destinationPath, token),
|
|
31
|
+
path: args.destinationPath,
|
|
32
|
+
token,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Move or copy a file already in Storage to a new location. Generates a
|
|
37
|
+
* fresh download token at the destination, attaches it, and returns the
|
|
38
|
+
* emulator-aware download URL.
|
|
39
|
+
*
|
|
40
|
+
* Use this for any "Storage → Storage" relocation flow.
|
|
41
|
+
*/
|
|
42
|
+
export async function relocateStorageFile(args) {
|
|
43
|
+
const token = randomUUID();
|
|
44
|
+
if (args.mode === "move") {
|
|
45
|
+
await args.bucket.file(args.fromPath).move(args.toPath);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
await args.bucket.file(args.fromPath).copy(args.bucket.file(args.toPath));
|
|
49
|
+
}
|
|
50
|
+
await args.bucket.file(args.toPath).setMetadata({
|
|
51
|
+
metadata: { firebaseStorageDownloadTokens: token },
|
|
52
|
+
});
|
|
53
|
+
return {
|
|
54
|
+
url: buildFirebaseDownloadUrl(args.bucket.name, args.toPath, token),
|
|
55
|
+
path: args.toPath,
|
|
56
|
+
token,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Attach a fresh download token to a file already at its final Storage
|
|
61
|
+
* location. Use when the file is already in place and only needs a token
|
|
62
|
+
* (e.g., content-moderation rejection where the file was renamed earlier).
|
|
63
|
+
*/
|
|
64
|
+
export async function attachDownloadToken(args) {
|
|
65
|
+
const token = randomUUID();
|
|
66
|
+
await args.bucket.file(args.storagePath).setMetadata({
|
|
67
|
+
metadata: { firebaseStorageDownloadTokens: token },
|
|
68
|
+
});
|
|
69
|
+
return {
|
|
70
|
+
url: buildFirebaseDownloadUrl(args.bucket.name, args.storagePath, token),
|
|
71
|
+
path: args.storagePath,
|
|
72
|
+
token,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function extractExt(localPath) {
|
|
76
|
+
return localPath.split(".").pop() || "";
|
|
77
|
+
}
|
|
78
|
+
function getMimeFromExt(ext) {
|
|
79
|
+
switch (ext.toLowerCase()) {
|
|
80
|
+
case "jpg":
|
|
81
|
+
case "jpeg":
|
|
82
|
+
return "image/jpeg";
|
|
83
|
+
case "png":
|
|
84
|
+
return "image/png";
|
|
85
|
+
case "webp":
|
|
86
|
+
return "image/webp";
|
|
87
|
+
case "mp4":
|
|
88
|
+
return "video/mp4";
|
|
89
|
+
case "webm":
|
|
90
|
+
return "video/webm";
|
|
91
|
+
case "m4a":
|
|
92
|
+
return "audio/mp4";
|
|
93
|
+
case "aac":
|
|
94
|
+
return "audio/aac";
|
|
95
|
+
case "mp3":
|
|
96
|
+
return "audio/mpeg";
|
|
97
|
+
default:
|
|
98
|
+
return "application/octet-stream";
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=storage-ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-ops.js","sourceRoot":"","sources":["../../src/server/storage-ops.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MediaProcessingResult, MediaProcessingSpec } from "@ttt-productions/media-
|
|
1
|
+
import type { MediaProcessingResult, MediaProcessingSpec } from "@ttt-productions/media-schemas";
|
|
2
2
|
export interface MediaPipelineProgress {
|
|
3
3
|
phase: "read_input" | "moderation_input" | "process" | "persist_outputs" | "moderation_output" | "done";
|
|
4
4
|
/** 0..1 when known */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAEjG,MAAM,WAAW,qBAAqB;IACpC,KAAK,EACD,YAAY,GACZ,kBAAkB,GAClB,SAAS,GACT,iBAAiB,GACjB,mBAAmB,GACnB,MAAM,CAAC;IACX,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,MAAM,cAAc,GAAG,CAC3B,IAAI,EAAE,mBAAmB,EACzB,GAAG,EAAE,mBAAmB,EACxB,IAAI,CAAC,EAAE,mBAAmB,KACvB,OAAO,CAAC,qBAAqB,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MediaProcessingResult, MediaProcessingSpec } from "@ttt-productions/media-
|
|
1
|
+
import type { MediaProcessingResult, MediaProcessingSpec } from "@ttt-productions/media-schemas";
|
|
2
2
|
import type { ProcessMediaOptions } from "../types.js";
|
|
3
3
|
export declare function processVideo(spec: MediaProcessingSpec, ctx: {
|
|
4
4
|
inputPath: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video-processor.d.ts","sourceRoot":"","sources":["../../src/video/video-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,qBAAqB,EAAE,mBAAmB,EAAoB,MAAM,
|
|
1
|
+
{"version":3,"file":"video-processor.d.ts","sourceRoot":"","sources":["../../src/video/video-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,qBAAqB,EAAE,mBAAmB,EAAoB,MAAM,gCAAgC,CAAC;AAMhI,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAsDvD,wBAAsB,YAAY,CAChC,IAAI,EAAE,mBAAmB,EACzB,GAAG,EAAE;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,EACD,IAAI,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,qBAAqB,CAAC,CAuQhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temp.d.ts","sourceRoot":"","sources":["../../src/workspace/temp.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,wBAAsB,mBAAmB,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"temp.d.ts","sourceRoot":"","sources":["../../src/workspace/temp.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,wBAAsB,mBAAmB,CAAC,MAAM,SAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAQnF"}
|
package/dist/workspace/temp.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { mkdtemp, rm } from "node:fs/promises";
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
export async function createTempWorkspace(prefix = "
|
|
4
|
+
export async function createTempWorkspace(prefix = "media-") {
|
|
5
5
|
const dir = await mkdtemp(path.join(os.tmpdir(), prefix));
|
|
6
6
|
return {
|
|
7
7
|
dir,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temp.js","sourceRoot":"","sources":["../../src/workspace/temp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAO7B,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"temp.js","sourceRoot":"","sources":["../../src/workspace/temp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAO7B,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAM,GAAG,QAAQ;IACzD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1D,OAAO;QACL,GAAG;QACH,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ttt-productions/media-processing-core",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/ttt-productions/ttt-packages.git",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@ttt-productions/firebase-helpers": "*",
|
|
35
|
-
"@ttt-productions/media-
|
|
35
|
+
"@ttt-productions/media-schemas": "*",
|
|
36
36
|
"sharp": "^0.34.1"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|