@liqhtworks/sophon-sdk 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.
Files changed (230) hide show
  1. package/.github/workflows/publish.yml +56 -0
  2. package/.openapi-generator/FILES +73 -0
  3. package/.openapi-generator/VERSION +1 -0
  4. package/.openapi-generator-ignore +23 -0
  5. package/LICENSE +12 -0
  6. package/README.md +164 -0
  7. package/dist/apis/DownloadsApi.d.ts +63 -0
  8. package/dist/apis/DownloadsApi.js +58 -0
  9. package/dist/apis/HealthApi.d.ts +92 -0
  10. package/dist/apis/HealthApi.js +85 -0
  11. package/dist/apis/JobsApi.d.ts +225 -0
  12. package/dist/apis/JobsApi.js +245 -0
  13. package/dist/apis/UploadsApi.d.ts +228 -0
  14. package/dist/apis/UploadsApi.js +255 -0
  15. package/dist/apis/WebhooksApi.d.ts +138 -0
  16. package/dist/apis/WebhooksApi.js +152 -0
  17. package/dist/apis/index.d.ts +5 -0
  18. package/dist/apis/index.js +23 -0
  19. package/dist/esm/apis/DownloadsApi.d.ts +63 -0
  20. package/dist/esm/apis/DownloadsApi.js +54 -0
  21. package/dist/esm/apis/HealthApi.d.ts +92 -0
  22. package/dist/esm/apis/HealthApi.js +81 -0
  23. package/dist/esm/apis/JobsApi.d.ts +225 -0
  24. package/dist/esm/apis/JobsApi.js +241 -0
  25. package/dist/esm/apis/UploadsApi.d.ts +228 -0
  26. package/dist/esm/apis/UploadsApi.js +251 -0
  27. package/dist/esm/apis/WebhooksApi.d.ts +138 -0
  28. package/dist/esm/apis/WebhooksApi.js +148 -0
  29. package/dist/esm/apis/index.d.ts +5 -0
  30. package/dist/esm/apis/index.js +7 -0
  31. package/dist/esm/helpers/index.d.ts +3 -0
  32. package/dist/esm/helpers/index.js +3 -0
  33. package/dist/esm/helpers/jobs.d.ts +48 -0
  34. package/dist/esm/helpers/jobs.js +61 -0
  35. package/dist/esm/helpers/uploads.d.ts +71 -0
  36. package/dist/esm/helpers/uploads.js +146 -0
  37. package/dist/esm/helpers/webhooks.d.ts +23 -0
  38. package/dist/esm/helpers/webhooks.js +84 -0
  39. package/dist/esm/index.d.ts +4 -0
  40. package/dist/esm/index.js +6 -0
  41. package/dist/esm/models/CompleteUploadResponse.d.ts +57 -0
  42. package/dist/esm/models/CompleteUploadResponse.js +63 -0
  43. package/dist/esm/models/CreateJobOutputOptions.d.ts +55 -0
  44. package/dist/esm/models/CreateJobOutputOptions.js +46 -0
  45. package/dist/esm/models/CreateJobRequest.d.ts +61 -0
  46. package/dist/esm/models/CreateJobRequest.js +56 -0
  47. package/dist/esm/models/CreateUploadRequest.d.ts +44 -0
  48. package/dist/esm/models/CreateUploadRequest.js +51 -0
  49. package/dist/esm/models/CreateUploadResponse.d.ts +52 -0
  50. package/dist/esm/models/CreateUploadResponse.js +55 -0
  51. package/dist/esm/models/CreateWebhookRequest.d.ts +40 -0
  52. package/dist/esm/models/CreateWebhookRequest.js +45 -0
  53. package/dist/esm/models/ErrorBody.d.ts +72 -0
  54. package/dist/esm/models/ErrorBody.js +74 -0
  55. package/dist/esm/models/ErrorEnvelope.d.ts +33 -0
  56. package/dist/esm/models/ErrorEnvelope.js +44 -0
  57. package/dist/esm/models/JobOutputInfo.d.ts +95 -0
  58. package/dist/esm/models/JobOutputInfo.js +72 -0
  59. package/dist/esm/models/JobProfile.d.ts +49 -0
  60. package/dist/esm/models/JobProfile.js +69 -0
  61. package/dist/esm/models/JobProgress.d.ts +75 -0
  62. package/dist/esm/models/JobProgress.js +60 -0
  63. package/dist/esm/models/JobResponse.d.ts +134 -0
  64. package/dist/esm/models/JobResponse.js +94 -0
  65. package/dist/esm/models/JobSourceInfo.d.ts +62 -0
  66. package/dist/esm/models/JobSourceInfo.js +53 -0
  67. package/dist/esm/models/JobSourceType.d.ts +24 -0
  68. package/dist/esm/models/JobSourceType.js +44 -0
  69. package/dist/esm/models/JobStatus.d.ts +31 -0
  70. package/dist/esm/models/JobStatus.js +51 -0
  71. package/dist/esm/models/ListJobsResponse.d.ts +45 -0
  72. package/dist/esm/models/ListJobsResponse.js +50 -0
  73. package/dist/esm/models/OutputContainer.d.ts +27 -0
  74. package/dist/esm/models/OutputContainer.js +47 -0
  75. package/dist/esm/models/ReadyResponse.d.ts +38 -0
  76. package/dist/esm/models/ReadyResponse.js +45 -0
  77. package/dist/esm/models/UploadJobSource.d.ts +39 -0
  78. package/dist/esm/models/UploadJobSource.js +48 -0
  79. package/dist/esm/models/UploadPartResponse.d.ts +38 -0
  80. package/dist/esm/models/UploadPartResponse.js +47 -0
  81. package/dist/esm/models/UploadStatusResponse.d.ts +96 -0
  82. package/dist/esm/models/UploadStatusResponse.js +80 -0
  83. package/dist/esm/models/WebhookDeliveryPayload.d.ts +85 -0
  84. package/dist/esm/models/WebhookDeliveryPayload.js +83 -0
  85. package/dist/esm/models/WebhookListItem.d.ts +50 -0
  86. package/dist/esm/models/WebhookListItem.js +55 -0
  87. package/dist/esm/models/WebhookListResponse.d.ts +33 -0
  88. package/dist/esm/models/WebhookListResponse.js +44 -0
  89. package/dist/esm/models/WebhookResponse.d.ts +58 -0
  90. package/dist/esm/models/WebhookResponse.js +59 -0
  91. package/dist/esm/models/index.d.ts +25 -0
  92. package/dist/esm/models/index.js +27 -0
  93. package/dist/esm/runtime.d.ts +184 -0
  94. package/dist/esm/runtime.js +348 -0
  95. package/dist/helpers/index.d.ts +3 -0
  96. package/dist/helpers/index.js +19 -0
  97. package/dist/helpers/jobs.d.ts +48 -0
  98. package/dist/helpers/jobs.js +67 -0
  99. package/dist/helpers/uploads.d.ts +71 -0
  100. package/dist/helpers/uploads.js +149 -0
  101. package/dist/helpers/webhooks.d.ts +23 -0
  102. package/dist/helpers/webhooks.js +89 -0
  103. package/dist/index.d.ts +4 -0
  104. package/dist/index.js +22 -0
  105. package/dist/models/CompleteUploadResponse.d.ts +57 -0
  106. package/dist/models/CompleteUploadResponse.js +71 -0
  107. package/dist/models/CreateJobOutputOptions.d.ts +55 -0
  108. package/dist/models/CreateJobOutputOptions.js +53 -0
  109. package/dist/models/CreateJobRequest.d.ts +61 -0
  110. package/dist/models/CreateJobRequest.js +63 -0
  111. package/dist/models/CreateUploadRequest.d.ts +44 -0
  112. package/dist/models/CreateUploadRequest.js +58 -0
  113. package/dist/models/CreateUploadResponse.d.ts +52 -0
  114. package/dist/models/CreateUploadResponse.js +62 -0
  115. package/dist/models/CreateWebhookRequest.d.ts +40 -0
  116. package/dist/models/CreateWebhookRequest.js +52 -0
  117. package/dist/models/ErrorBody.d.ts +72 -0
  118. package/dist/models/ErrorBody.js +82 -0
  119. package/dist/models/ErrorEnvelope.d.ts +33 -0
  120. package/dist/models/ErrorEnvelope.js +51 -0
  121. package/dist/models/JobOutputInfo.d.ts +95 -0
  122. package/dist/models/JobOutputInfo.js +80 -0
  123. package/dist/models/JobProfile.d.ts +49 -0
  124. package/dist/models/JobProfile.js +77 -0
  125. package/dist/models/JobProgress.d.ts +75 -0
  126. package/dist/models/JobProgress.js +67 -0
  127. package/dist/models/JobResponse.d.ts +134 -0
  128. package/dist/models/JobResponse.js +101 -0
  129. package/dist/models/JobSourceInfo.d.ts +62 -0
  130. package/dist/models/JobSourceInfo.js +60 -0
  131. package/dist/models/JobSourceType.d.ts +24 -0
  132. package/dist/models/JobSourceType.js +52 -0
  133. package/dist/models/JobStatus.d.ts +31 -0
  134. package/dist/models/JobStatus.js +59 -0
  135. package/dist/models/ListJobsResponse.d.ts +45 -0
  136. package/dist/models/ListJobsResponse.js +57 -0
  137. package/dist/models/OutputContainer.d.ts +27 -0
  138. package/dist/models/OutputContainer.js +55 -0
  139. package/dist/models/ReadyResponse.d.ts +38 -0
  140. package/dist/models/ReadyResponse.js +52 -0
  141. package/dist/models/UploadJobSource.d.ts +39 -0
  142. package/dist/models/UploadJobSource.js +55 -0
  143. package/dist/models/UploadPartResponse.d.ts +38 -0
  144. package/dist/models/UploadPartResponse.js +54 -0
  145. package/dist/models/UploadStatusResponse.d.ts +96 -0
  146. package/dist/models/UploadStatusResponse.js +88 -0
  147. package/dist/models/WebhookDeliveryPayload.d.ts +85 -0
  148. package/dist/models/WebhookDeliveryPayload.js +91 -0
  149. package/dist/models/WebhookListItem.d.ts +50 -0
  150. package/dist/models/WebhookListItem.js +62 -0
  151. package/dist/models/WebhookListResponse.d.ts +33 -0
  152. package/dist/models/WebhookListResponse.js +51 -0
  153. package/dist/models/WebhookResponse.d.ts +58 -0
  154. package/dist/models/WebhookResponse.js +66 -0
  155. package/dist/models/index.d.ts +25 -0
  156. package/dist/models/index.js +43 -0
  157. package/dist/runtime.d.ts +184 -0
  158. package/dist/runtime.js +364 -0
  159. package/docs/CompleteUploadResponse.md +40 -0
  160. package/docs/CreateJobOutputOptions.md +39 -0
  161. package/docs/CreateJobRequest.md +42 -0
  162. package/docs/CreateUploadRequest.md +38 -0
  163. package/docs/CreateUploadResponse.md +40 -0
  164. package/docs/CreateWebhookRequest.md +36 -0
  165. package/docs/DownloadsApi.md +78 -0
  166. package/docs/ErrorBody.md +40 -0
  167. package/docs/ErrorEnvelope.md +34 -0
  168. package/docs/HealthApi.md +129 -0
  169. package/docs/JobOutputInfo.md +50 -0
  170. package/docs/JobProfile.md +33 -0
  171. package/docs/JobProgress.md +48 -0
  172. package/docs/JobResponse.md +62 -0
  173. package/docs/JobSourceInfo.md +44 -0
  174. package/docs/JobSourceType.md +33 -0
  175. package/docs/JobStatus.md +33 -0
  176. package/docs/JobsApi.md +407 -0
  177. package/docs/ListJobsResponse.md +38 -0
  178. package/docs/OutputContainer.md +33 -0
  179. package/docs/ReadyResponse.md +36 -0
  180. package/docs/UploadJobSource.md +37 -0
  181. package/docs/UploadPartResponse.md +36 -0
  182. package/docs/UploadStatusResponse.md +50 -0
  183. package/docs/UploadsApi.md +415 -0
  184. package/docs/WebhookDeliveryPayload.md +45 -0
  185. package/docs/WebhookEventsApi.md +91 -0
  186. package/docs/WebhookListItem.md +40 -0
  187. package/docs/WebhookListResponse.md +34 -0
  188. package/docs/WebhookResponse.md +42 -0
  189. package/docs/WebhooksApi.md +235 -0
  190. package/package.json +24 -0
  191. package/src/apis/DownloadsApi.ts +114 -0
  192. package/src/apis/HealthApi.ts +160 -0
  193. package/src/apis/JobsApi.ts +491 -0
  194. package/src/apis/UploadsApi.ts +522 -0
  195. package/src/apis/WebhooksApi.ts +298 -0
  196. package/src/apis/index.ts +7 -0
  197. package/src/helpers/index.ts +3 -0
  198. package/src/helpers/jobs.ts +112 -0
  199. package/src/helpers/uploads.ts +243 -0
  200. package/src/helpers/webhooks.ts +134 -0
  201. package/src/index.ts +7 -0
  202. package/src/models/CompleteUploadResponse.ts +102 -0
  203. package/src/models/CreateJobOutputOptions.ts +101 -0
  204. package/src/models/CreateJobRequest.ts +123 -0
  205. package/src/models/CreateUploadRequest.ts +84 -0
  206. package/src/models/CreateUploadResponse.ts +95 -0
  207. package/src/models/CreateWebhookRequest.ts +76 -0
  208. package/src/models/ErrorBody.ts +116 -0
  209. package/src/models/ErrorEnvelope.ts +74 -0
  210. package/src/models/JobOutputInfo.ts +149 -0
  211. package/src/models/JobProfile.ts +76 -0
  212. package/src/models/JobProgress.ts +133 -0
  213. package/src/models/JobResponse.ts +236 -0
  214. package/src/models/JobSourceInfo.ts +106 -0
  215. package/src/models/JobSourceType.ts +51 -0
  216. package/src/models/JobStatus.ts +58 -0
  217. package/src/models/ListJobsResponse.ts +91 -0
  218. package/src/models/OutputContainer.ts +54 -0
  219. package/src/models/ReadyResponse.ts +74 -0
  220. package/src/models/UploadJobSource.ts +85 -0
  221. package/src/models/UploadPartResponse.ts +75 -0
  222. package/src/models/UploadStatusResponse.ts +153 -0
  223. package/src/models/WebhookDeliveryPayload.ts +134 -0
  224. package/src/models/WebhookListItem.ts +93 -0
  225. package/src/models/WebhookListResponse.ts +74 -0
  226. package/src/models/WebhookResponse.ts +104 -0
  227. package/src/models/index.ts +27 -0
  228. package/src/runtime.ts +450 -0
  229. package/tsconfig.esm.json +7 -0
  230. package/tsconfig.json +20 -0
@@ -0,0 +1,134 @@
1
+ // Webhook signature verification for inbound terminal-job deliveries.
2
+ //
3
+ // SOPHON signs each delivery with HMAC-SHA256 over `"{timestamp}.{raw_body}"`
4
+ // using the per-webhook secret. The hex digest is sent as
5
+ // `X-Turbo-Signature-256: sha256=<hex>`.
6
+ //
7
+ // Isomorphic: uses the Web Crypto API (`crypto.subtle`), available globally in
8
+ // Node 18+ and modern browsers. No Node-specific imports.
9
+ //
10
+ // Consumers call `verifyWebhookSignature` with the RAW request body (string or
11
+ // Uint8Array — NOT a parsed JSON object), the signature header, the timestamp
12
+ // header, and the webhook secret. The helper does a constant-time comparison
13
+ // and enforces a replay window by default.
14
+
15
+ export interface VerifyWebhookSignatureParams {
16
+ /** Raw HTTP body exactly as received, before any JSON parsing. */
17
+ rawBody: string | Uint8Array;
18
+ /** Value of `X-Turbo-Signature-256`, e.g. `"sha256=abc..."`. */
19
+ signatureHeader: string | null | undefined;
20
+ /** Value of `X-Turbo-Timestamp`. */
21
+ timestampHeader: string | null | undefined;
22
+ /** Webhook secret returned by `POST /v1/webhooks`. */
23
+ secret: string;
24
+ /** Maximum acceptable clock skew in ms. Default 5 min. Set 0 to disable. */
25
+ replayWindowMs?: number;
26
+ /** Override "now" for deterministic tests. */
27
+ now?: () => number;
28
+ }
29
+
30
+ export class WebhookSignatureError extends Error {
31
+ readonly reason:
32
+ | "missing_signature"
33
+ | "missing_timestamp"
34
+ | "invalid_timestamp"
35
+ | "replay_window_exceeded"
36
+ | "bad_prefix"
37
+ | "bad_signature_encoding"
38
+ | "signature_mismatch";
39
+ constructor(reason: WebhookSignatureError["reason"], message?: string) {
40
+ super(message ?? reason);
41
+ this.name = "WebhookSignatureError";
42
+ this.reason = reason;
43
+ }
44
+ }
45
+
46
+ /**
47
+ * Throws `WebhookSignatureError` if the delivery is not authentic. Returns
48
+ * a resolved promise on success.
49
+ */
50
+ export async function verifyWebhookSignature(
51
+ params: VerifyWebhookSignatureParams,
52
+ ): Promise<void> {
53
+ const {
54
+ rawBody,
55
+ signatureHeader,
56
+ timestampHeader,
57
+ secret,
58
+ replayWindowMs = 5 * 60 * 1000,
59
+ now = Date.now,
60
+ } = params;
61
+
62
+ if (!signatureHeader) throw new WebhookSignatureError("missing_signature");
63
+ if (!timestampHeader) throw new WebhookSignatureError("missing_timestamp");
64
+
65
+ const deliveredTs = Date.parse(timestampHeader);
66
+ if (Number.isNaN(deliveredTs)) {
67
+ throw new WebhookSignatureError("invalid_timestamp");
68
+ }
69
+
70
+ if (replayWindowMs > 0) {
71
+ const drift = Math.abs(now() - deliveredTs);
72
+ if (drift > replayWindowMs) {
73
+ throw new WebhookSignatureError("replay_window_exceeded");
74
+ }
75
+ }
76
+
77
+ if (!signatureHeader.startsWith("sha256=")) {
78
+ throw new WebhookSignatureError("bad_prefix");
79
+ }
80
+ const deliveredHex = signatureHeader.slice("sha256=".length).trim();
81
+ const delivered = hexToBytes(deliveredHex);
82
+ if (!delivered) {
83
+ throw new WebhookSignatureError("bad_signature_encoding");
84
+ }
85
+
86
+ const bodyBytes =
87
+ typeof rawBody === "string" ? new TextEncoder().encode(rawBody) : rawBody;
88
+ const payload = concatBytes(
89
+ new TextEncoder().encode(`${timestampHeader}.`),
90
+ bodyBytes,
91
+ );
92
+
93
+ const key = await crypto.subtle.importKey(
94
+ "raw",
95
+ new TextEncoder().encode(secret),
96
+ { name: "HMAC", hash: "SHA-256" },
97
+ false,
98
+ ["sign"],
99
+ );
100
+ const expected = new Uint8Array(
101
+ // TS 5.7+ tightened BufferSource to require ArrayBufferView<ArrayBuffer>;
102
+ // our concatenated Uint8Array is backed by an ArrayBuffer at runtime.
103
+ await crypto.subtle.sign("HMAC", key, payload as BufferSource),
104
+ );
105
+
106
+ if (!constantTimeEqual(delivered, expected)) {
107
+ throw new WebhookSignatureError("signature_mismatch");
108
+ }
109
+ }
110
+
111
+ function hexToBytes(hex: string): Uint8Array | null {
112
+ if (hex.length % 2 !== 0 || !/^[0-9a-fA-F]*$/.test(hex)) return null;
113
+ const out = new Uint8Array(hex.length / 2);
114
+ for (let i = 0; i < out.length; i++) {
115
+ out[i] = parseInt(hex.substr(i * 2, 2), 16);
116
+ }
117
+ return out;
118
+ }
119
+
120
+ function concatBytes(a: Uint8Array, b: Uint8Array): Uint8Array {
121
+ const out = new Uint8Array(a.length + b.length);
122
+ out.set(a, 0);
123
+ out.set(b, a.length);
124
+ return out;
125
+ }
126
+
127
+ function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean {
128
+ if (a.length !== b.length) return false;
129
+ let diff = 0;
130
+ for (let i = 0; i < a.length; i++) {
131
+ diff |= (a[i] ?? 0) ^ (b[i] ?? 0);
132
+ }
133
+ return diff === 0;
134
+ }
package/src/index.ts ADDED
@@ -0,0 +1,7 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ export * from './runtime';
4
+ export * from './apis/index';
5
+ export * from './models/index';
6
+
7
+ export * from './helpers/index';
@@ -0,0 +1,102 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * SOPHON Encoding API
5
+ * REST API for submitting, monitoring, and retrieving SOPHON encoding jobs. Authentication is via Bearer API key or session cookie. All POST endpoints require an Idempotency-Key header. List endpoints use opaque cursor-based pagination.
6
+ *
7
+ * The version of the OpenAPI document: 1.0.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ /**
17
+ *
18
+ * @export
19
+ * @interface CompleteUploadResponse
20
+ */
21
+ export interface CompleteUploadResponse {
22
+ /**
23
+ *
24
+ * @type {string}
25
+ * @memberof CompleteUploadResponse
26
+ */
27
+ id: string;
28
+ /**
29
+ *
30
+ * @type {CompleteUploadResponseStatusEnum}
31
+ * @memberof CompleteUploadResponse
32
+ */
33
+ status: CompleteUploadResponseStatusEnum;
34
+ /**
35
+ * SHA-256 hex digest of the assembled file.
36
+ * @type {string}
37
+ * @memberof CompleteUploadResponse
38
+ */
39
+ sha256: string;
40
+ /**
41
+ *
42
+ * @type {number}
43
+ * @memberof CompleteUploadResponse
44
+ */
45
+ bytes: number;
46
+ }
47
+
48
+ /**
49
+ * @export
50
+ * @enum {string}
51
+ */
52
+ export enum CompleteUploadResponseStatusEnum {
53
+ COMPLETED = 'completed'
54
+ }
55
+
56
+
57
+ /**
58
+ * Check if a given object implements the CompleteUploadResponse interface.
59
+ */
60
+ export function instanceOfCompleteUploadResponse(value: object): value is CompleteUploadResponse {
61
+ if (!('id' in value) || value['id'] === undefined) return false;
62
+ if (!('status' in value) || value['status'] === undefined) return false;
63
+ if (!('sha256' in value) || value['sha256'] === undefined) return false;
64
+ if (!('bytes' in value) || value['bytes'] === undefined) return false;
65
+ return true;
66
+ }
67
+
68
+ export function CompleteUploadResponseFromJSON(json: any): CompleteUploadResponse {
69
+ return CompleteUploadResponseFromJSONTyped(json, false);
70
+ }
71
+
72
+ export function CompleteUploadResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): CompleteUploadResponse {
73
+ if (json == null) {
74
+ return json;
75
+ }
76
+ return {
77
+
78
+ 'id': json['id'],
79
+ 'status': json['status'],
80
+ 'sha256': json['sha256'],
81
+ 'bytes': json['bytes'],
82
+ };
83
+ }
84
+
85
+ export function CompleteUploadResponseToJSON(json: any): CompleteUploadResponse {
86
+ return CompleteUploadResponseToJSONTyped(json, false);
87
+ }
88
+
89
+ export function CompleteUploadResponseToJSONTyped(value?: CompleteUploadResponse | null, ignoreDiscriminator: boolean = false): any {
90
+ if (value == null) {
91
+ return value;
92
+ }
93
+
94
+ return {
95
+
96
+ 'id': value['id'],
97
+ 'status': value['status'],
98
+ 'sha256': value['sha256'],
99
+ 'bytes': value['bytes'],
100
+ };
101
+ }
102
+
@@ -0,0 +1,101 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * SOPHON Encoding API
5
+ * REST API for submitting, monitoring, and retrieving SOPHON encoding jobs. Authentication is via Bearer API key or session cookie. All POST endpoints require an Idempotency-Key header. List endpoints use opaque cursor-based pagination.
6
+ *
7
+ * The version of the OpenAPI document: 1.0.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ import type { OutputContainer } from './OutputContainer';
17
+ import {
18
+ OutputContainerFromJSON,
19
+ OutputContainerFromJSONTyped,
20
+ OutputContainerToJSON,
21
+ OutputContainerToJSONTyped,
22
+ } from './OutputContainer';
23
+
24
+ /**
25
+ * Optional output shaping knobs for a new job.
26
+ * @export
27
+ * @interface CreateJobOutputOptions
28
+ */
29
+ export interface CreateJobOutputOptions {
30
+ /**
31
+ *
32
+ * @type {OutputContainer}
33
+ * @memberof CreateJobOutputOptions
34
+ */
35
+ container?: OutputContainer;
36
+ /**
37
+ * When true, audio is included in the output. MKV preserves
38
+ * source audio streams unchanged. MP4 preserves broadly compatible
39
+ * source audio codecs when possible, and may normalize
40
+ * incompatible codecs to AAC for playback compatibility.
41
+ * When false, the output is video only.
42
+ *
43
+ * @type {boolean}
44
+ * @memberof CreateJobOutputOptions
45
+ */
46
+ audio?: boolean;
47
+ /**
48
+ * Target output height in pixels. When set, output is scaled down
49
+ * (aspect ratio preserved, width derived from source, both dims
50
+ * rounded to even). If absent or larger than source height, output
51
+ * uses source dimensions. Billing tier is determined by the actual
52
+ * encoded output, not by this requested value.
53
+ *
54
+ * @type {number}
55
+ * @memberof CreateJobOutputOptions
56
+ */
57
+ target_height?: number;
58
+ }
59
+
60
+
61
+
62
+ /**
63
+ * Check if a given object implements the CreateJobOutputOptions interface.
64
+ */
65
+ export function instanceOfCreateJobOutputOptions(value: object): value is CreateJobOutputOptions {
66
+ return true;
67
+ }
68
+
69
+ export function CreateJobOutputOptionsFromJSON(json: any): CreateJobOutputOptions {
70
+ return CreateJobOutputOptionsFromJSONTyped(json, false);
71
+ }
72
+
73
+ export function CreateJobOutputOptionsFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateJobOutputOptions {
74
+ if (json == null) {
75
+ return json;
76
+ }
77
+ return {
78
+
79
+ 'container': json['container'] == null ? undefined : OutputContainerFromJSON(json['container']),
80
+ 'audio': json['audio'] == null ? undefined : json['audio'],
81
+ 'target_height': json['target_height'] == null ? undefined : json['target_height'],
82
+ };
83
+ }
84
+
85
+ export function CreateJobOutputOptionsToJSON(json: any): CreateJobOutputOptions {
86
+ return CreateJobOutputOptionsToJSONTyped(json, false);
87
+ }
88
+
89
+ export function CreateJobOutputOptionsToJSONTyped(value?: CreateJobOutputOptions | null, ignoreDiscriminator: boolean = false): any {
90
+ if (value == null) {
91
+ return value;
92
+ }
93
+
94
+ return {
95
+
96
+ 'container': OutputContainerToJSON(value['container']),
97
+ 'audio': value['audio'],
98
+ 'target_height': value['target_height'],
99
+ };
100
+ }
101
+
@@ -0,0 +1,123 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * SOPHON Encoding API
5
+ * REST API for submitting, monitoring, and retrieving SOPHON encoding jobs. Authentication is via Bearer API key or session cookie. All POST endpoints require an Idempotency-Key header. List endpoints use opaque cursor-based pagination.
6
+ *
7
+ * The version of the OpenAPI document: 1.0.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ import type { CreateJobOutputOptions } from './CreateJobOutputOptions';
17
+ import {
18
+ CreateJobOutputOptionsFromJSON,
19
+ CreateJobOutputOptionsFromJSONTyped,
20
+ CreateJobOutputOptionsToJSON,
21
+ CreateJobOutputOptionsToJSONTyped,
22
+ } from './CreateJobOutputOptions';
23
+ import type { JobProfile } from './JobProfile';
24
+ import {
25
+ JobProfileFromJSON,
26
+ JobProfileFromJSONTyped,
27
+ JobProfileToJSON,
28
+ JobProfileToJSONTyped,
29
+ } from './JobProfile';
30
+ import type { UploadJobSource } from './UploadJobSource';
31
+ import {
32
+ UploadJobSourceFromJSON,
33
+ UploadJobSourceFromJSONTyped,
34
+ UploadJobSourceToJSON,
35
+ UploadJobSourceToJSONTyped,
36
+ } from './UploadJobSource';
37
+
38
+ /**
39
+ *
40
+ * @export
41
+ * @interface CreateJobRequest
42
+ */
43
+ export interface CreateJobRequest {
44
+ /**
45
+ *
46
+ * @type {UploadJobSource}
47
+ * @memberof CreateJobRequest
48
+ */
49
+ source: UploadJobSource;
50
+ /**
51
+ *
52
+ * @type {JobProfile}
53
+ * @memberof CreateJobRequest
54
+ */
55
+ profile: JobProfile;
56
+ /**
57
+ *
58
+ * @type {CreateJobOutputOptions}
59
+ * @memberof CreateJobRequest
60
+ */
61
+ output?: CreateJobOutputOptions;
62
+ /**
63
+ * IDs of registered webhook endpoints to notify on job state changes.
64
+ * @type {Array<string>}
65
+ * @memberof CreateJobRequest
66
+ */
67
+ webhook_ids?: Array<string>;
68
+ /**
69
+ * Arbitrary key-value metadata attached to the job. Max 16 KiB serialized.
70
+ * @type {{ [key: string]: any; }}
71
+ * @memberof CreateJobRequest
72
+ */
73
+ metadata?: { [key: string]: any; };
74
+ }
75
+
76
+
77
+
78
+ /**
79
+ * Check if a given object implements the CreateJobRequest interface.
80
+ */
81
+ export function instanceOfCreateJobRequest(value: object): value is CreateJobRequest {
82
+ if (!('source' in value) || value['source'] === undefined) return false;
83
+ if (!('profile' in value) || value['profile'] === undefined) return false;
84
+ return true;
85
+ }
86
+
87
+ export function CreateJobRequestFromJSON(json: any): CreateJobRequest {
88
+ return CreateJobRequestFromJSONTyped(json, false);
89
+ }
90
+
91
+ export function CreateJobRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateJobRequest {
92
+ if (json == null) {
93
+ return json;
94
+ }
95
+ return {
96
+
97
+ 'source': UploadJobSourceFromJSON(json['source']),
98
+ 'profile': JobProfileFromJSON(json['profile']),
99
+ 'output': json['output'] == null ? undefined : CreateJobOutputOptionsFromJSON(json['output']),
100
+ 'webhook_ids': json['webhook_ids'] == null ? undefined : json['webhook_ids'],
101
+ 'metadata': json['metadata'] == null ? undefined : json['metadata'],
102
+ };
103
+ }
104
+
105
+ export function CreateJobRequestToJSON(json: any): CreateJobRequest {
106
+ return CreateJobRequestToJSONTyped(json, false);
107
+ }
108
+
109
+ export function CreateJobRequestToJSONTyped(value?: CreateJobRequest | null, ignoreDiscriminator: boolean = false): any {
110
+ if (value == null) {
111
+ return value;
112
+ }
113
+
114
+ return {
115
+
116
+ 'source': UploadJobSourceToJSON(value['source']),
117
+ 'profile': JobProfileToJSON(value['profile']),
118
+ 'output': CreateJobOutputOptionsToJSON(value['output']),
119
+ 'webhook_ids': value['webhook_ids'],
120
+ 'metadata': value['metadata'],
121
+ };
122
+ }
123
+
@@ -0,0 +1,84 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * SOPHON Encoding API
5
+ * REST API for submitting, monitoring, and retrieving SOPHON encoding jobs. Authentication is via Bearer API key or session cookie. All POST endpoints require an Idempotency-Key header. List endpoints use opaque cursor-based pagination.
6
+ *
7
+ * The version of the OpenAPI document: 1.0.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ /**
17
+ *
18
+ * @export
19
+ * @interface CreateUploadRequest
20
+ */
21
+ export interface CreateUploadRequest {
22
+ /**
23
+ *
24
+ * @type {string}
25
+ * @memberof CreateUploadRequest
26
+ */
27
+ file_name: string;
28
+ /**
29
+ * Total file size in bytes.
30
+ * @type {number}
31
+ * @memberof CreateUploadRequest
32
+ */
33
+ file_size: number;
34
+ /**
35
+ *
36
+ * @type {string}
37
+ * @memberof CreateUploadRequest
38
+ */
39
+ mime_type: string;
40
+ }
41
+
42
+ /**
43
+ * Check if a given object implements the CreateUploadRequest interface.
44
+ */
45
+ export function instanceOfCreateUploadRequest(value: object): value is CreateUploadRequest {
46
+ if (!('file_name' in value) || value['file_name'] === undefined) return false;
47
+ if (!('file_size' in value) || value['file_size'] === undefined) return false;
48
+ if (!('mime_type' in value) || value['mime_type'] === undefined) return false;
49
+ return true;
50
+ }
51
+
52
+ export function CreateUploadRequestFromJSON(json: any): CreateUploadRequest {
53
+ return CreateUploadRequestFromJSONTyped(json, false);
54
+ }
55
+
56
+ export function CreateUploadRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateUploadRequest {
57
+ if (json == null) {
58
+ return json;
59
+ }
60
+ return {
61
+
62
+ 'file_name': json['file_name'],
63
+ 'file_size': json['file_size'],
64
+ 'mime_type': json['mime_type'],
65
+ };
66
+ }
67
+
68
+ export function CreateUploadRequestToJSON(json: any): CreateUploadRequest {
69
+ return CreateUploadRequestToJSONTyped(json, false);
70
+ }
71
+
72
+ export function CreateUploadRequestToJSONTyped(value?: CreateUploadRequest | null, ignoreDiscriminator: boolean = false): any {
73
+ if (value == null) {
74
+ return value;
75
+ }
76
+
77
+ return {
78
+
79
+ 'file_name': value['file_name'],
80
+ 'file_size': value['file_size'],
81
+ 'mime_type': value['mime_type'],
82
+ };
83
+ }
84
+
@@ -0,0 +1,95 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * SOPHON Encoding API
5
+ * REST API for submitting, monitoring, and retrieving SOPHON encoding jobs. Authentication is via Bearer API key or session cookie. All POST endpoints require an Idempotency-Key header. List endpoints use opaque cursor-based pagination.
6
+ *
7
+ * The version of the OpenAPI document: 1.0.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+
15
+ import { mapValues } from '../runtime';
16
+ /**
17
+ *
18
+ * @export
19
+ * @interface CreateUploadResponse
20
+ */
21
+ export interface CreateUploadResponse {
22
+ /**
23
+ *
24
+ * @type {string}
25
+ * @memberof CreateUploadResponse
26
+ */
27
+ id: string;
28
+ /**
29
+ * Size of each chunk in bytes. Tiered by file size:
30
+ * <64 MB = whole file, <=1 GB = 8 MB, <=10 GB = 16 MB, >10 GB = 32 MB.
31
+ *
32
+ * @type {number}
33
+ * @memberof CreateUploadResponse
34
+ */
35
+ chunk_size: number;
36
+ /**
37
+ *
38
+ * @type {number}
39
+ * @memberof CreateUploadResponse
40
+ */
41
+ total_chunks: number;
42
+ /**
43
+ * Upload session expiry (24 hours from creation).
44
+ * @type {Date}
45
+ * @memberof CreateUploadResponse
46
+ */
47
+ expires_at: Date;
48
+ }
49
+
50
+ /**
51
+ * Check if a given object implements the CreateUploadResponse interface.
52
+ */
53
+ export function instanceOfCreateUploadResponse(value: object): value is CreateUploadResponse {
54
+ if (!('id' in value) || value['id'] === undefined) return false;
55
+ if (!('chunk_size' in value) || value['chunk_size'] === undefined) return false;
56
+ if (!('total_chunks' in value) || value['total_chunks'] === undefined) return false;
57
+ if (!('expires_at' in value) || value['expires_at'] === undefined) return false;
58
+ return true;
59
+ }
60
+
61
+ export function CreateUploadResponseFromJSON(json: any): CreateUploadResponse {
62
+ return CreateUploadResponseFromJSONTyped(json, false);
63
+ }
64
+
65
+ export function CreateUploadResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateUploadResponse {
66
+ if (json == null) {
67
+ return json;
68
+ }
69
+ return {
70
+
71
+ 'id': json['id'],
72
+ 'chunk_size': json['chunk_size'],
73
+ 'total_chunks': json['total_chunks'],
74
+ 'expires_at': (new Date(json['expires_at'])),
75
+ };
76
+ }
77
+
78
+ export function CreateUploadResponseToJSON(json: any): CreateUploadResponse {
79
+ return CreateUploadResponseToJSONTyped(json, false);
80
+ }
81
+
82
+ export function CreateUploadResponseToJSONTyped(value?: CreateUploadResponse | null, ignoreDiscriminator: boolean = false): any {
83
+ if (value == null) {
84
+ return value;
85
+ }
86
+
87
+ return {
88
+
89
+ 'id': value['id'],
90
+ 'chunk_size': value['chunk_size'],
91
+ 'total_chunks': value['total_chunks'],
92
+ 'expires_at': value['expires_at'].toISOString(),
93
+ };
94
+ }
95
+