@clipwright/core 0.17.0 → 0.18.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.
Files changed (57) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/billing-terms.d.ts +19 -0
  3. package/dist/billing-terms.js +8 -0
  4. package/dist/billing-terms.js.map +1 -0
  5. package/dist/broll-policy.d.ts +31 -0
  6. package/dist/broll-policy.js +24 -0
  7. package/dist/broll-policy.js.map +1 -0
  8. package/dist/contract-dispositions.d.ts +65 -3
  9. package/dist/contract-dispositions.js +25 -21
  10. package/dist/contract-dispositions.js.map +1 -1
  11. package/dist/endpoints.d.ts +0 -2
  12. package/dist/endpoints.js +5 -0
  13. package/dist/endpoints.js.map +1 -1
  14. package/dist/face-billing.d.ts +116 -0
  15. package/dist/face-billing.js +83 -0
  16. package/dist/face-billing.js.map +1 -0
  17. package/dist/face-delivery.d.ts +17 -0
  18. package/dist/face-delivery.js +12 -0
  19. package/dist/face-delivery.js.map +1 -0
  20. package/dist/index.d.ts +9 -0
  21. package/dist/index.js +9 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/long-form-pricing.d.ts +48 -0
  24. package/dist/long-form-pricing.js +73 -0
  25. package/dist/long-form-pricing.js.map +1 -0
  26. package/dist/long-form-profile.d.ts +5 -0
  27. package/dist/long-form-profile.js +6 -0
  28. package/dist/long-form-profile.js.map +1 -0
  29. package/dist/media-timebase.d.ts +2 -0
  30. package/dist/media-timebase.js +3 -0
  31. package/dist/media-timebase.js.map +1 -0
  32. package/dist/public-endpoints.d.ts +2 -0
  33. package/dist/public-endpoints.js +2 -0
  34. package/dist/public-endpoints.js.map +1 -1
  35. package/dist/render-backend.d.ts +3 -1
  36. package/dist/runs.d.ts +106 -0
  37. package/dist/runs.js +12 -0
  38. package/dist/runs.js.map +1 -1
  39. package/dist/semantic-inserts.d.ts +63 -0
  40. package/dist/semantic-inserts.js +160 -0
  41. package/dist/semantic-inserts.js.map +1 -0
  42. package/dist/skills.d.ts +210 -0
  43. package/dist/skills.js +66 -11
  44. package/dist/skills.js.map +1 -1
  45. package/dist/speech-rhythm-contract.d.ts +20 -0
  46. package/dist/speech-rhythm-contract.js +22 -0
  47. package/dist/speech-rhythm-contract.js.map +1 -0
  48. package/dist/speech-rhythm.d.ts +21 -0
  49. package/dist/speech-rhythm.js +47 -0
  50. package/dist/speech-rhythm.js.map +1 -0
  51. package/dist/tts-backend.d.ts +1 -0
  52. package/dist/tts-backend.js.map +1 -1
  53. package/dist/voice-admission.d.ts +40 -0
  54. package/dist/voice-preview-approval.d.ts +27 -0
  55. package/dist/voice-preview-approval.js +29 -0
  56. package/dist/voice-preview-approval.js.map +1 -0
  57. package/package.json +13 -1
@@ -0,0 +1,20 @@
1
+ import { z } from "zod";
2
+ export declare const speechRhythmResult: z.ZodDiscriminatedUnion<[z.ZodObject<{
3
+ status: z.ZodLiteral<"available">;
4
+ durationSec: z.ZodNumber;
5
+ wordGapDurationSec: z.ZodNumber;
6
+ wordGapFraction: z.ZodNumber;
7
+ leadingGapSec: z.ZodNumber;
8
+ trailingGapSec: z.ZodNumber;
9
+ interWordGapsSec: z.ZodArray<z.ZodNumber>;
10
+ measuredSentenceGapCount: z.ZodNumber;
11
+ sentenceGapMedianSec: z.ZodNullable<z.ZodNumber>;
12
+ }, z.core.$strip>, z.ZodObject<{
13
+ status: z.ZodLiteral<"unavailable">;
14
+ reason: z.ZodEnum<{
15
+ invalid_duration: "invalid_duration";
16
+ invalid_timings: "invalid_timings";
17
+ missing_timings: "missing_timings";
18
+ unsupported_mode: "unsupported_mode";
19
+ }>;
20
+ }, z.core.$strip>], "status">;
@@ -0,0 +1,22 @@
1
+ import { z } from "zod";
2
+ const seconds = z.number().finite().nonnegative();
3
+ export const speechRhythmResult = z.discriminatedUnion("status", [
4
+ z.object({
5
+ status: z.literal("available"),
6
+ durationSec: z.number().finite().positive(),
7
+ wordGapDurationSec: seconds,
8
+ wordGapFraction: z.number().finite().min(0).max(1),
9
+ leadingGapSec: seconds,
10
+ trailingGapSec: seconds,
11
+ interWordGapsSec: z.array(seconds),
12
+ measuredSentenceGapCount: z.number().int().nonnegative(),
13
+ sentenceGapMedianSec: seconds.nullable(),
14
+ }),
15
+ z.object({
16
+ status: z.literal("unavailable"),
17
+ reason: z.enum(["missing_timings", "invalid_duration", "invalid_timings", "unsupported_mode"]),
18
+ }),
19
+ ]).describe("Gaps outside persisted TTS word intervals over the delivered clip duration, including leading and trailing gaps. " +
20
+ "These are timing gaps, not acoustic silence. Sentence boundaries use terminal punctuation. " +
21
+ "Timings extending beyond the delivered duration are unavailable, not clipped. Older runs may omit this field.");
22
+ //# sourceMappingURL=speech-rhythm-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speech-rhythm-contract.js","sourceRoot":"","sources":["../src/speech-rhythm-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;AAClD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE;IAC/D,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3C,kBAAkB,EAAE,OAAO;QAC3B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,aAAa,EAAE,OAAO;QACtB,cAAc,EAAE,OAAO;QACvB,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;QAClC,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QACxD,oBAAoB,EAAE,OAAO,CAAC,QAAQ,EAAE;KACzC,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;QAChC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;KAC/F,CAAC;CACH,CAAC,CAAC,QAAQ,CACT,mHAAmH;IACnH,6FAA6F;IAC7F,+GAA+G,CACxE,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { WordTiming } from "./tts-backend.js";
2
+ export interface SpeechRhythmMetrics {
3
+ status: "available";
4
+ durationSec: number;
5
+ /** Time outside the union of word intervals, including leading/trailing gaps. */
6
+ wordGapDurationSec: number;
7
+ /** Uncovered duration divided by measured full duration; not acoustic silence. */
8
+ wordGapFraction: number;
9
+ leadingGapSec: number;
10
+ trailingGapSec: number;
11
+ /** One gap per adjacent pair; earlier overlapping words can cover that gap. */
12
+ interWordGapsSec: number[];
13
+ measuredSentenceGapCount: number;
14
+ /** Seconds; null when no punctuation boundary has a following timed word. */
15
+ sentenceGapMedianSec: number | null;
16
+ }
17
+ export type SpeechRhythmResult = SpeechRhythmMetrics | {
18
+ status: "unavailable";
19
+ reason: "missing_timings" | "invalid_duration" | "invalid_timings" | "unsupported_mode";
20
+ };
21
+ export declare function measureSpeechRhythm(words: readonly WordTiming[] | null | undefined, durationSec: number): SpeechRhythmResult;
@@ -0,0 +1,47 @@
1
+ /** A punctuation heuristic, not linguistic sentence segmentation or pause detection. */
2
+ const SENTENCE_END = /[.!?…。!?][\s"'’”»›)\]}]*$/u;
3
+ export function measureSpeechRhythm(words, durationSec) {
4
+ if (!Number.isFinite(durationSec) || durationSec <= 0) {
5
+ return { status: "unavailable", reason: "invalid_duration" };
6
+ }
7
+ if (!words?.length)
8
+ return { status: "unavailable", reason: "missing_timings" };
9
+ let previousStart = -Infinity;
10
+ for (const word of words) {
11
+ if (!word || typeof word.word !== "string" || !word.word.trim() ||
12
+ !Number.isFinite(word.startSec) || !Number.isFinite(word.endSec) ||
13
+ word.startSec < 0 || word.endSec <= word.startSec ||
14
+ word.endSec > durationSec || word.startSec < previousStart) {
15
+ return { status: "unavailable", reason: "invalid_timings" };
16
+ }
17
+ previousStart = word.startSec;
18
+ }
19
+ const leadingGapSec = words[0].startSec;
20
+ let coveredUntil = words[0].endSec;
21
+ let wordGapDurationSec = leadingGapSec;
22
+ const interWordGapsSec = [];
23
+ const sentenceGaps = [];
24
+ for (let index = 1; index < words.length; index++) {
25
+ const current = words[index];
26
+ const gap = Math.max(0, current.startSec - coveredUntil);
27
+ interWordGapsSec.push(gap);
28
+ wordGapDurationSec += gap;
29
+ if (SENTENCE_END.test(words[index - 1].word))
30
+ sentenceGaps.push(gap);
31
+ coveredUntil = Math.max(coveredUntil, current.endSec);
32
+ }
33
+ const trailingGapSec = durationSec - coveredUntil;
34
+ wordGapDurationSec += trailingGapSec;
35
+ sentenceGaps.sort((left, right) => left - right);
36
+ const middle = Math.floor(sentenceGaps.length / 2);
37
+ const sentenceGapMedianSec = sentenceGaps.length === 0 ? null
38
+ : sentenceGaps.length % 2 ? sentenceGaps[middle]
39
+ : (sentenceGaps[middle - 1] + sentenceGaps[middle]) / 2;
40
+ return {
41
+ status: "available", durationSec, wordGapDurationSec,
42
+ wordGapFraction: Math.min(1, wordGapDurationSec / durationSec),
43
+ leadingGapSec, trailingGapSec, interWordGapsSec,
44
+ measuredSentenceGapCount: sentenceGaps.length, sentenceGapMedianSec,
45
+ };
46
+ }
47
+ //# sourceMappingURL=speech-rhythm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speech-rhythm.js","sourceRoot":"","sources":["../src/speech-rhythm.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@ export interface SpeechRequest {
25
25
  modelId: string;
26
26
  /** Наш run_id — для идемпотентности и трассировки на стороне вендора. */
27
27
  runId: string;
28
+ pace?: number;
28
29
  }
29
30
  export interface SpeechResult {
30
31
  audio: Uint8Array;
@@ -1 +1 @@
1
- {"version":3,"file":"tts-backend.js","sourceRoot":"","sources":["../src/tts-backend.ts"],"names":[],"mappings":"AAqEA;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAA6B,EAC7B,UAA6B,EAC7B,QAA2B;IAE3B,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrF,MAAM,IAAI,KAAK,CACb,qCAAqC,UAAU,CAAC,MAAM,UAAU;YAC9D,GAAG,UAAU,CAAC,MAAM,YAAY,QAAQ,CAAC,MAAM,OAAO,CACzD,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACxD,GAAG,GAAG,EAAE,CAAC;QACX,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAW,CAAC;QACnC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAClB,KAAK,EAAE,CAAC;YACR,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,KAAK,GAAG,UAAU,CAAC,CAAC,CAAW,CAAC;QAClC,CAAC;QACD,GAAG,IAAI,EAAE,CAAC;QACV,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAW,CAAC;IAC9B,CAAC;IACD,KAAK,EAAE,CAAC;IAER,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"tts-backend.js","sourceRoot":"","sources":["../src/tts-backend.ts"],"names":[],"mappings":"AAsEA;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAA6B,EAC7B,UAA6B,EAC7B,QAA2B;IAE3B,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrF,MAAM,IAAI,KAAK,CACb,qCAAqC,UAAU,CAAC,MAAM,UAAU;YAC9D,GAAG,UAAU,CAAC,MAAM,YAAY,QAAQ,CAAC,MAAM,OAAO,CACzD,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACxD,GAAG,GAAG,EAAE,CAAC;QACX,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAW,CAAC;QACnC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAClB,KAAK,EAAE,CAAC;YACR,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,KAAK,GAAG,UAAU,CAAC,CAAC,CAAW,CAAC;QAClC,CAAC;QACD,GAAG,IAAI,EAAE,CAAC;QACV,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAW,CAAC;IAC9B,CAAC;IACD,KAAK,EAAE,CAAC;IAER,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -12,7 +12,42 @@ export declare const serverUgcInput: import("zod").ZodObject<{
12
12
  }>;
13
13
  script: import("zod").ZodOptional<import("zod").ZodString>;
14
14
  media_url: import("zod").ZodOptional<import("zod").ZodString>;
15
+ media_type: import("zod").ZodOptional<import("zod").ZodEnum<{
16
+ image: "image";
17
+ video: "video";
18
+ }>>;
19
+ duration_seconds: import("zod").ZodOptional<import("zod").ZodNumber>;
20
+ image_motion: import("zod").ZodOptional<import("zod").ZodObject<{
21
+ direction: import("zod").ZodEnum<{
22
+ in: "in";
23
+ out: "out";
24
+ }>;
25
+ amount: import("zod").ZodNumber;
26
+ }, import("zod/v4/core").$strip>>;
15
27
  }, import("zod/v4/core").$strip>>>;
28
+ inserts: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
29
+ id: import("zod").ZodString;
30
+ media_url: import("zod").ZodString;
31
+ media_type: import("zod").ZodEnum<{
32
+ image: "image";
33
+ video: "video";
34
+ }>;
35
+ anchor: import("zod").ZodUnion<readonly [import("zod").ZodObject<{
36
+ startWord: import("zod").ZodNumber;
37
+ endWord: import("zod").ZodNumber;
38
+ }, import("zod/v4/core").$strict>, import("zod").ZodObject<{
39
+ quote: import("zod").ZodString;
40
+ occurrence: import("zod").ZodOptional<import("zod").ZodNumber>;
41
+ }, import("zod/v4/core").$strict>]>;
42
+ cover_words: import("zod").ZodOptional<import("zod").ZodNumber>;
43
+ image_motion: import("zod").ZodOptional<import("zod").ZodObject<{
44
+ direction: import("zod").ZodEnum<{
45
+ in: "in";
46
+ out: "out";
47
+ }>;
48
+ amount: import("zod").ZodNumber;
49
+ }, import("zod/v4/core").$strict>>;
50
+ }, import("zod/v4/core").$strict>>>;
16
51
  person: import("zod").ZodOptional<import("zod").ZodString>;
17
52
  actor_id: import("zod").ZodOptional<import("zod").ZodString>;
18
53
  image: import("zod").ZodOptional<import("zod").ZodString>;
@@ -23,6 +58,11 @@ export declare const serverUgcInput: import("zod").ZodObject<{
23
58
  character: import("zod").ZodOptional<import("zod").ZodString>;
24
59
  name: import("zod").ZodOptional<import("zod").ZodString>;
25
60
  broll_url: import("zod").ZodOptional<import("zod").ZodString>;
61
+ broll_policy: import("zod").ZodOptional<import("zod").ZodEnum<{
62
+ anyone: "anyone";
63
+ no_actor: "no_actor";
64
+ no_people: "no_people";
65
+ }>>;
26
66
  captions: import("zod").ZodDefault<import("zod").ZodBoolean>;
27
67
  caption_style: import("zod").ZodDefault<import("zod").ZodEnum<{
28
68
  hormozi: "hormozi";
@@ -0,0 +1,27 @@
1
+ import { z } from "zod";
2
+ export declare const voicePreviewBindingSchema: z.ZodReadonly<z.ZodObject<{
3
+ version: z.ZodLiteral<1>;
4
+ accountId: z.ZodString;
5
+ fullScript: z.ZodString;
6
+ resolvedVoiceId: z.ZodString;
7
+ modelId: z.ZodString;
8
+ effectivePace: z.ZodNumber;
9
+ synthesisSettingsRevision: z.ZodString;
10
+ previewWordLimit: z.ZodNumber;
11
+ }, z.core.$strict>>;
12
+ export declare const voicePreviewArtifactSchema: z.ZodReadonly<z.ZodObject<{
13
+ version: z.ZodLiteral<1>;
14
+ previewId: z.ZodString;
15
+ accountId: z.ZodString;
16
+ bindingSha256: z.ZodString;
17
+ audioSha256: z.ZodString;
18
+ audioBytes: z.ZodNumber;
19
+ createdAtMs: z.ZodNumber;
20
+ expiresAtMs: z.ZodNumber;
21
+ }, z.core.$strict>>;
22
+ export declare const voicePreviewApprovalSchema: z.ZodReadonly<z.ZodObject<{
23
+ previewId: z.ZodString;
24
+ audioSha256: z.ZodString;
25
+ }, z.core.$strict>>;
26
+ export type VoicePreviewBinding = z.infer<typeof voicePreviewBindingSchema>;
27
+ export type VoicePreviewArtifact = z.infer<typeof voicePreviewArtifactSchema>;
@@ -0,0 +1,29 @@
1
+ import { z } from "zod";
2
+ const identifier = z.string().min(1);
3
+ const digest = z.string().regex(/^[a-f0-9]{64}$/);
4
+ const timestamp = z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER);
5
+ export const voicePreviewBindingSchema = z.object({
6
+ version: z.literal(1),
7
+ accountId: identifier,
8
+ fullScript: z.string().min(1),
9
+ resolvedVoiceId: identifier,
10
+ modelId: identifier,
11
+ effectivePace: z.number().finite().positive(),
12
+ synthesisSettingsRevision: identifier,
13
+ previewWordLimit: z.number().int().positive().max(Number.MAX_SAFE_INTEGER),
14
+ }).strict().readonly();
15
+ export const voicePreviewArtifactSchema = z.object({
16
+ version: z.literal(1),
17
+ previewId: identifier,
18
+ accountId: identifier,
19
+ bindingSha256: digest,
20
+ audioSha256: digest,
21
+ audioBytes: z.number().int().positive().max(Number.MAX_SAFE_INTEGER),
22
+ createdAtMs: timestamp,
23
+ expiresAtMs: timestamp,
24
+ }).strict().refine(value => value.expiresAtMs > value.createdAtMs, "expiry must follow creation").readonly();
25
+ export const voicePreviewApprovalSchema = z.object({
26
+ previewId: identifier,
27
+ audioSha256: digest,
28
+ }).strict().readonly();
29
+ //# sourceMappingURL=voice-preview-approval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-preview-approval.js","sourceRoot":"","sources":["../src/voice-preview-approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAE9E,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,SAAS,EAAE,UAAU;IACrB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,eAAe,EAAE,UAAU;IAC3B,OAAO,EAAE,UAAU;IACnB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7C,yBAAyB,EAAE,UAAU;IACrC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC;CAC3E,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC;AAEvB,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACrB,SAAS,EAAE,UAAU;IACrB,SAAS,EAAE,UAAU;IACrB,aAAa,EAAE,MAAM;IACrB,WAAW,EAAE,MAAM;IACnB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC;IACpE,WAAW,EAAE,SAAS;IACtB,WAAW,EAAE,SAAS;CACvB,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC,QAAQ,EAAE,CAAC;AAE7G,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,SAAS,EAAE,UAAU;IACrB,WAAW,EAAE,MAAM;CACpB,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clipwright/core",
3
- "version": "0.17.0",
3
+ "version": "0.18.0",
4
4
  "description": "Zod schemas and the shared request/response contract of the Clipwright UGC video API",
5
5
  "license": "MIT",
6
6
  "author": "Dimantika Sp. z o.o.",
@@ -17,6 +17,18 @@
17
17
  "node": ">=20"
18
18
  },
19
19
  "exports": {
20
+ "./media-timebase": {
21
+ "types": "./dist/media-timebase.d.ts",
22
+ "default": "./dist/media-timebase.js"
23
+ },
24
+ "./long-form-profile": {
25
+ "types": "./dist/long-form-profile.d.ts",
26
+ "default": "./dist/long-form-profile.js"
27
+ },
28
+ "./semantic-inserts": {
29
+ "types": "./dist/semantic-inserts.d.ts",
30
+ "default": "./dist/semantic-inserts.js"
31
+ },
20
32
  ".": {
21
33
  "types": "./dist/index.d.ts",
22
34
  "default": "./dist/index.js"