@devultur/convex 1.4.2 → 1.4.3
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/component/_generated/api.d.ts +0 -1
- package/dist/component/_generated/api.js.map +1 -1
- package/dist/component/_generated/component.d.ts +0 -1
- package/dist/component/_generated/component.js.map +1 -1
- package/dist/component/_generated/dataModel.d.ts +0 -1
- package/dist/component/_generated/dataModel.js.map +1 -1
- package/dist/component/_generated/server.d.ts +0 -1
- package/dist/component/_generated/server.js.map +1 -1
- package/dist/component/convex.config.d.ts +0 -1
- package/dist/component/convex.config.js.map +1 -1
- package/dist/component/http.d.ts +0 -1
- package/dist/component/http.js.map +1 -1
- package/dist/component/library.d.ts +0 -1
- package/dist/component/library.js.map +1 -1
- package/dist/component/lock.d.ts +0 -1
- package/dist/component/lock.js.map +1 -1
- package/dist/component/lockValidators.d.ts +0 -1
- package/dist/component/lockValidators.js.map +1 -1
- package/dist/component/mediaClient.d.ts +0 -1
- package/dist/component/mediaClient.js.map +1 -1
- package/dist/component/mediaMeta.d.ts +0 -1
- package/dist/component/mediaMeta.js.map +1 -1
- package/dist/component/metadata.d.ts +0 -1
- package/dist/component/metadata.js.map +1 -1
- package/dist/component/public.d.ts +0 -1
- package/dist/component/public.js.map +1 -1
- package/dist/component/schema.d.ts +0 -1
- package/dist/component/schema.js.map +1 -1
- package/dist/component/uploadKeys.d.ts +0 -1
- package/dist/component/uploadKeys.js.map +1 -1
- package/dist/component/uploads.d.ts +0 -1
- package/dist/component/uploads.js.map +1 -1
- package/dist/component/workerErrors.d.ts +0 -1
- package/dist/component/workerErrors.js.map +1 -1
- package/dist/index.d.ts +11 -7
- package/dist/locales/es-formal.d.ts +4 -2
- package/dist/locales/es.d.ts +4 -2
- package/dist/{preview-labels-B-2mra1h.d.ts → preview-labels-B7HNa7Va.d.ts} +1 -1
- package/dist/react.d.ts +15 -10
- package/dist/react.js +12 -9
- package/dist/types-DZxN6Eij.d.ts +190 -0
- package/package.json +4 -3
- package/dist/component/_generated/api.d.ts.map +0 -1
- package/dist/component/_generated/component.d.ts.map +0 -1
- package/dist/component/_generated/dataModel.d.ts.map +0 -1
- package/dist/component/_generated/server.d.ts.map +0 -1
- package/dist/component/convex.config.d.ts.map +0 -1
- package/dist/component/http.d.ts.map +0 -1
- package/dist/component/library.d.ts.map +0 -1
- package/dist/component/lock.d.ts.map +0 -1
- package/dist/component/lockValidators.d.ts.map +0 -1
- package/dist/component/mediaClient.d.ts.map +0 -1
- package/dist/component/mediaMeta.d.ts.map +0 -1
- package/dist/component/metadata.d.ts.map +0 -1
- package/dist/component/public.d.ts.map +0 -1
- package/dist/component/schema.d.ts.map +0 -1
- package/dist/component/uploadKeys.d.ts.map +0 -1
- package/dist/component/uploads.d.ts.map +0 -1
- package/dist/component/workerErrors.d.ts.map +0 -1
- package/dist/types-LrusGVDf.d.ts +0 -62
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/component/_generated/api.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;GAOG;AAmBH,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE1D,MAAM,OAAO,GAYR,MAAa,CAAC;AAEnB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,GAAG,GAGZ,MAAa,CAAC;AAElB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAGjB,MAAa,CAAC;AAElB,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,EAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/component/_generated/api.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;GAOG;AAmBH,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE1D,MAAM,OAAO,GAYR,MAAa,CAAC;AAEnB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,GAAG,GAGZ,MAAa,CAAC;AAElB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAGjB,MAAa,CAAC;AAElB,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,EAAmB,CAAC","sourcesContent":["/* eslint-disable */\n/**\n * Generated `api` utility.\n *\n * THIS CODE IS AUTOMATICALLY GENERATED.\n *\n * To regenerate, run `npx convex dev`.\n * @module\n */\n\nimport type * as http from \"../http.js\";\nimport type * as library from \"../library.js\";\nimport type * as lock from \"../lock.js\";\nimport type * as lockValidators from \"../lockValidators.js\";\nimport type * as mediaClient from \"../mediaClient.js\";\nimport type * as mediaMeta from \"../mediaMeta.js\";\nimport type * as metadata from \"../metadata.js\";\nimport type * as public_ from \"../public.js\";\nimport type * as uploadKeys from \"../uploadKeys.js\";\nimport type * as uploads from \"../uploads.js\";\nimport type * as workerErrors from \"../workerErrors.js\";\n\nimport type {\n ApiFromModules,\n FilterApi,\n FunctionReference,\n} from \"convex/server\";\nimport { anyApi, componentsGeneric } from \"convex/server\";\n\nconst fullApi: ApiFromModules<{\n http: typeof http;\n library: typeof library;\n lock: typeof lock;\n lockValidators: typeof lockValidators;\n mediaClient: typeof mediaClient;\n mediaMeta: typeof mediaMeta;\n metadata: typeof metadata;\n public: typeof public_;\n uploadKeys: typeof uploadKeys;\n uploads: typeof uploads;\n workerErrors: typeof workerErrors;\n}> = anyApi as any;\n\n/**\n * A utility for referencing Convex functions in your app's public API.\n *\n * Usage:\n * ```js\n * const myFunctionReference = api.myModule.myFunction;\n * ```\n */\nexport const api: FilterApi<\n typeof fullApi,\n FunctionReference<any, \"public\">\n> = anyApi as any;\n\n/**\n * A utility for referencing Convex functions in your app's internal API.\n *\n * Usage:\n * ```js\n * const myFunctionReference = internal.myModule.myFunction;\n * ```\n */\nexport const internal: FilterApi<\n typeof fullApi,\n FunctionReference<any, \"internal\">\n> = anyApi as any;\n\nexport const components = componentsGeneric() as unknown as {};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../../src/component/_generated/component.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;GAOG"}
|
|
1
|
+
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../../src/component/_generated/component.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;GAOG","sourcesContent":["/* eslint-disable */\n/**\n * Generated `ComponentApi` utility.\n *\n * THIS CODE IS AUTOMATICALLY GENERATED.\n *\n * To regenerate, run `npx convex dev`.\n * @module\n */\n\nimport type { FunctionReference } from \"convex/server\";\n\n/**\n * A utility for referencing a Convex component's exposed API.\n *\n * Useful when expecting a parameter like `components.myComponent`.\n * Usage:\n * ```ts\n * async function myFunction(ctx: QueryCtx, component: ComponentApi) {\n * return ctx.runQuery(component.someFile.someQuery, { ...args });\n * }\n * ```\n */\nexport type ComponentApi<Name extends string | undefined = string | undefined> =\n {\n library: {\n backfillSearchText: FunctionReference<\n \"mutation\",\n \"internal\",\n { batchSize?: number },\n any,\n Name\n >;\n searchMedia: FunctionReference<\n \"query\",\n \"internal\",\n {\n paginationOpts: {\n cursor: string | null;\n endCursor?: string | null;\n id?: number;\n maximumBytesRead?: number;\n maximumRowsRead?: number;\n numItems: number;\n };\n search: string;\n type?: \"video\" | \"image\" | \"file\";\n },\n any,\n Name\n >;\n };\n lock: {\n getLock: FunctionReference<\n \"action\",\n \"internal\",\n { key: string },\n any,\n Name\n >;\n releaseHold: FunctionReference<\n \"action\",\n \"internal\",\n { keys: Array<string> },\n any,\n Name\n >;\n setHold: FunctionReference<\n \"action\",\n \"internal\",\n { keys: Array<string> },\n any,\n Name\n >;\n setLock: FunctionReference<\n \"action\",\n \"internal\",\n {\n bypassGovernance?: boolean;\n derivatives?: \"inherit\" | \"original-only\";\n key: string;\n mode?: \"governance\" | \"compliance\";\n period?: number;\n remove?: true;\n until?: string;\n },\n any,\n Name\n >;\n };\n metadata: {\n updateMediaMeta: FunctionReference<\n \"mutation\",\n \"internal\",\n { alt?: string; key: string; tags?: Array<string>; title?: string },\n any,\n Name\n >;\n };\n public: {\n createMedia: FunctionReference<\n \"mutation\",\n \"internal\",\n {\n contentType: string;\n filename: string;\n key: string;\n sizeBytes: number;\n type: \"video\" | \"image\" | \"file\";\n },\n any,\n Name\n >;\n createUploadUrl: FunctionReference<\n \"action\",\n \"internal\",\n {\n contentType: string;\n filename: string;\n hold?: boolean;\n lock?: {\n hold?: boolean;\n retention?: {\n derivatives?: \"inherit\" | \"original-only\";\n mode: \"governance\" | \"compliance\";\n period?: number;\n until?: string;\n };\n };\n visibility?: \"public\" | \"private\";\n },\n any,\n Name\n >;\n deleteMediaAction: FunctionReference<\n \"action\",\n \"internal\",\n { key: string },\n any,\n Name\n >;\n deleteVideo: FunctionReference<\n \"action\",\n \"internal\",\n { videoId: string; visibility?: \"public\" | \"private\" },\n any,\n Name\n >;\n getCourseProgress: FunctionReference<\n \"query\",\n \"internal\",\n { userId: string; videoIds: Array<string> },\n any,\n Name\n >;\n getMediaByKey: FunctionReference<\n \"query\",\n \"internal\",\n { key: string },\n any,\n Name\n >;\n issueViewerToken: FunctionReference<\n \"action\",\n \"internal\",\n { sessionSecret?: string; userId?: string },\n any,\n Name\n >;\n listCaptionsByMedia: FunctionReference<\n \"query\",\n \"internal\",\n { mediaKey: string },\n any,\n Name\n >;\n listMedia: FunctionReference<\n \"query\",\n \"internal\",\n { type?: \"video\" | \"image\" | \"file\" },\n any,\n Name\n >;\n listMediaPage: FunctionReference<\n \"query\",\n \"internal\",\n {\n paginationOpts: {\n cursor: string | null;\n endCursor?: string | null;\n id?: number;\n maximumBytesRead?: number;\n maximumRowsRead?: number;\n numItems: number;\n };\n type?: \"video\" | \"image\" | \"file\";\n },\n any,\n Name\n >;\n loadProgress: FunctionReference<\n \"query\",\n \"internal\",\n { userId: string; videoId: string },\n any,\n Name\n >;\n markComplete: FunctionReference<\n \"mutation\",\n \"internal\",\n { userId: string; videoId: string },\n any,\n Name\n >;\n processVideo: FunctionReference<\n \"action\",\n \"internal\",\n {\n callbackUrl?: string;\n key: string;\n locales?: Array<string>;\n preset?: string;\n },\n any,\n Name\n >;\n resetProgress: FunctionReference<\n \"mutation\",\n \"internal\",\n { userId: string; videoId: string },\n any,\n Name\n >;\n saveProgress: FunctionReference<\n \"mutation\",\n \"internal\",\n { position: number; userId: string; videoId: string },\n any,\n Name\n >;\n updateMedia: FunctionReference<\n \"mutation\",\n \"internal\",\n {\n captionLocales?: Array<string>;\n captionsPending?: boolean;\n duration?: number;\n failureReason?:\n | \"invalid_input\"\n | \"unsupported_codec\"\n | \"timeout\"\n | \"capacity\"\n | \"internal\";\n key: string;\n playlistUrl?: string;\n retriable?: boolean;\n thumbnailKey?: string;\n transcodeError?: string;\n transcodeProgress?: { current: number; total: number };\n transcodeStatus?:\n | \"queued\"\n | \"transcoding\"\n | \"captioning\"\n | \"ready\"\n | \"failed\";\n },\n any,\n Name\n >;\n upsertCaption: FunctionReference<\n \"mutation\",\n \"internal\",\n { locale: string; mediaKey: string; srtUrl?: string; vttUrl: string },\n any,\n Name\n >;\n };\n uploads: {\n confirmUpload: FunctionReference<\n \"action\",\n \"internal\",\n {\n filename?: string;\n height?: number;\n key: string;\n pageCount?: number;\n width?: number;\n },\n any,\n Name\n >;\n };\n };\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataModel.js","sourceRoot":"","sources":["../../../src/component/_generated/dataModel.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;GAOG"}
|
|
1
|
+
{"version":3,"file":"dataModel.js","sourceRoot":"","sources":["../../../src/component/_generated/dataModel.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;GAOG","sourcesContent":["/* eslint-disable */\n/**\n * Generated data model types.\n *\n * THIS CODE IS AUTOMATICALLY GENERATED.\n *\n * To regenerate, run `npx convex dev`.\n * @module\n */\n\nimport type {\n DataModelFromSchemaDefinition,\n DocumentByName,\n TableNamesInDataModel,\n SystemTableNames,\n} from \"convex/server\";\nimport type { GenericId } from \"convex/values\";\nimport schema from \"../schema.js\";\n\n/**\n * The names of all of your Convex tables.\n */\nexport type TableNames = TableNamesInDataModel<DataModel>;\n\n/**\n * The type of a document stored in Convex.\n *\n * @typeParam TableName - A string literal type of the table name (like \"users\").\n */\nexport type Doc<TableName extends TableNames> = DocumentByName<\n DataModel,\n TableName\n>;\n\n/**\n * An identifier for a document in Convex.\n *\n * Convex documents are uniquely identified by their `Id`, which is accessible\n * on the `_id` field. To learn more, see [Document IDs](https://docs.convex.dev/using/document-ids).\n *\n * Documents can be loaded using `db.get(tableName, id)` in query and mutation functions.\n *\n * IDs are just strings at runtime, but this type can be used to distinguish them from other\n * strings when type checking.\n *\n * @typeParam TableName - A string literal type of the table name (like \"users\").\n */\nexport type Id<TableName extends TableNames | SystemTableNames> =\n GenericId<TableName>;\n\n/**\n * A type describing your Convex data model.\n *\n * This type includes information about what tables you have, the type of\n * documents stored in those tables, and the indexes defined on them.\n *\n * This type is used to parameterize methods like `queryGeneric` and\n * `mutationGeneric` to make them type-safe.\n */\nexport type DataModel = DataModelFromSchemaDefinition<typeof schema>;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/component/_generated/server.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;GAOG;AAaH,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAWvB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,KAAK,GAAsC,YAAY,CAAC;AAErE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GACxB,oBAAoB,CAAC;AAEvB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAyC,eAAe,CAAC;AAE9E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,uBAAuB,CAAC;AAE1B;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,MAAM,GAAuC,aAAa,CAAC;AAExE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GACzB,qBAAqB,CAAC;AAExB;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,UAAU,GAAsB,iBAAiB,CAAC;AAC/D,MAAM,CAAC,MAAM,GAAG,GAAQ,OAAO,CAAC,GAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/component/_generated/server.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;GAOG;AAaH,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAWvB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,KAAK,GAAsC,YAAY,CAAC;AAErE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GACxB,oBAAoB,CAAC;AAEvB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAyC,eAAe,CAAC;AAE9E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,uBAAuB,CAAC;AAE1B;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,MAAM,GAAuC,aAAa,CAAC;AAExE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GACzB,qBAAqB,CAAC;AAExB;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,UAAU,GAAsB,iBAAiB,CAAC;AAC/D,MAAM,CAAC,MAAM,GAAG,GAAQ,OAAO,CAAC,GAAqB,CAAC","sourcesContent":["/* eslint-disable */\n/**\n * Generated utilities for implementing server-side Convex query and mutation functions.\n *\n * THIS CODE IS AUTOMATICALLY GENERATED.\n *\n * To regenerate, run `npx convex dev`.\n * @module\n */\n\nimport type {\n ActionBuilder,\n HttpActionBuilder,\n MutationBuilder,\n QueryBuilder,\n GenericActionCtx,\n GenericMutationCtx,\n GenericQueryCtx,\n GenericDatabaseReader,\n GenericDatabaseWriter,\n} from \"convex/server\";\nimport {\n actionGeneric,\n httpActionGeneric,\n queryGeneric,\n mutationGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n} from \"convex/server\";\nimport type { DataModel } from \"./dataModel.js\";\n\n/**\n * Typesafe environment variables declared in `convex.config.ts`.\n */\ntype Env = {\n readonly DEVULTUR_API_URL: string;\n readonly DEVULTUR_SECRET: string;\n};\n\n/**\n * Define a query in this Convex app's public API.\n *\n * This function will be allowed to read your Convex database and will be accessible from the client.\n *\n * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n * @returns The wrapped query. Include this as an `export` to name it and make it accessible.\n */\nexport const query: QueryBuilder<DataModel, \"public\"> = queryGeneric;\n\n/**\n * Define a query that is only accessible from other Convex functions (but not from the client).\n *\n * This function will be allowed to read from your Convex database. It will not be accessible from the client.\n *\n * @param func - The query function. It receives a {@link QueryCtx} as its first argument.\n * @returns The wrapped query. Include this as an `export` to name it and make it accessible.\n */\nexport const internalQuery: QueryBuilder<DataModel, \"internal\"> =\n internalQueryGeneric;\n\n/**\n * Define a mutation in this Convex app's public API.\n *\n * This function will be allowed to modify your Convex database and will be accessible from the client.\n *\n * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n * @returns The wrapped mutation. Include this as an `export` to name it and make it accessible.\n */\nexport const mutation: MutationBuilder<DataModel, \"public\"> = mutationGeneric;\n\n/**\n * Define a mutation that is only accessible from other Convex functions (but not from the client).\n *\n * This function will be allowed to modify your Convex database. It will not be accessible from the client.\n *\n * @param func - The mutation function. It receives a {@link MutationCtx} as its first argument.\n * @returns The wrapped mutation. Include this as an `export` to name it and make it accessible.\n */\nexport const internalMutation: MutationBuilder<DataModel, \"internal\"> =\n internalMutationGeneric;\n\n/**\n * Define an action in this Convex app's public API.\n *\n * An action is a function which can execute any JavaScript code, including non-deterministic\n * code and code with side-effects, like calling third-party services.\n * They can be run in Convex's JavaScript environment or in Node.js using the \"use node\" directive.\n * They can interact with the database indirectly by calling queries and mutations using the {@link ActionCtx}.\n *\n * @param func - The action. It receives an {@link ActionCtx} as its first argument.\n * @returns The wrapped action. Include this as an `export` to name it and make it accessible.\n */\nexport const action: ActionBuilder<DataModel, \"public\"> = actionGeneric;\n\n/**\n * Define an action that is only accessible from other Convex functions (but not from the client).\n *\n * @param func - The function. It receives an {@link ActionCtx} as its first argument.\n * @returns The wrapped function. Include this as an `export` to name it and make it accessible.\n */\nexport const internalAction: ActionBuilder<DataModel, \"internal\"> =\n internalActionGeneric;\n\n/**\n * Define an HTTP action.\n *\n * The wrapped function will be used to respond to HTTP requests received\n * by a Convex deployment if the requests matches the path and method where\n * this action is routed. Be sure to route your httpAction in `convex/http.js`.\n *\n * @param func - The function. It receives an {@link ActionCtx} as its first argument\n * and a Fetch API `Request` object as its second.\n * @returns The wrapped function. Import this function from `convex/http.js` and route it to hook it up.\n */\nexport const httpAction: HttpActionBuilder = httpActionGeneric;\nexport const env: Env = process.env as unknown as Env;\n\n/**\n * A set of services for use within Convex query functions.\n *\n * The query context is passed as the first argument to any Convex query\n * function run on the server.\n *\n * If you're using code generation, use the `QueryCtx` type in `convex/_generated/server.d.ts` instead.\n */\nexport type QueryCtx = GenericQueryCtx<DataModel>;\n\n/**\n * A set of services for use within Convex mutation functions.\n *\n * The mutation context is passed as the first argument to any Convex mutation\n * function run on the server.\n *\n * If you're using code generation, use the `MutationCtx` type in `convex/_generated/server.d.ts` instead.\n */\nexport type MutationCtx = GenericMutationCtx<DataModel>;\n\n/**\n * A set of services for use within Convex action functions.\n *\n * The action context is passed as the first argument to any Convex action\n * function run on the server.\n */\nexport type ActionCtx = GenericActionCtx<DataModel>;\n\n/**\n * An interface to read from the database within Convex query functions.\n *\n * The two entry points are {@link DatabaseReader.get}, which fetches a single\n * document by its {@link Id}, or {@link DatabaseReader.query}, which starts\n * building a query.\n */\nexport type DatabaseReader = GenericDatabaseReader<DataModel>;\n\n/**\n * An interface to read from and write to the database within Convex mutation\n * functions.\n *\n * Convex guarantees that all writes within a single mutation are\n * executed atomically, so you never have to worry about partial writes leaving\n * your data in an inconsistent state. See [the Convex Guide](https://docs.convex.dev/understanding/convex-fundamentals/functions#atomicity-and-optimistic-concurrency-control)\n * for the guarantees Convex provides your functions.\n */\nexport type DatabaseWriter = GenericDatabaseWriter<DataModel>;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convex.config.js","sourceRoot":"","sources":["../../src/component/convex.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,EAAE;IAC7C,GAAG,EAAE;QACJ,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;QAC3B,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;KAC5B;CACD,CAAC,CAAC;AAEH,eAAe,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"convex.config.js","sourceRoot":"","sources":["../../src/component/convex.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,EAAE;IAC7C,GAAG,EAAE;QACJ,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;QAC3B,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE;KAC5B;CACD,CAAC,CAAC;AAEH,eAAe,SAAS,CAAC","sourcesContent":["import { defineComponent } from \"convex/server\";\nimport { v } from \"convex/values\";\n\nconst component = defineComponent(\"devultur\", {\n\tenv: {\n\t\tDEVULTUR_SECRET: v.string(),\n\t\tDEVULTUR_API_URL: v.string(),\n\t},\n});\n\nexport default component;\n"]}
|
package/dist/component/http.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/component/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;AAE1B,IAAI,CAAC,KAAK,CAAC;IACV,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;QAC1C,gFAAgF;QAChF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5E,OAAO,IAAI,QAAQ,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;YACjE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,IAAI,QAAQ,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,CAAC;IACF,CAAC,CAAC;CACF,CAAC,CAAC;AAEH,eAAe,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/component/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;AAE1B,IAAI,CAAC,KAAK,CAAC;IACV,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;QAC1C,gFAAgF;QAChF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5E,OAAO,IAAI,QAAQ,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;YACjE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,IAAI,QAAQ,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,CAAC;IACF,CAAC,CAAC;CACF,CAAC,CAAC;AAEH,eAAe,IAAI,CAAC","sourcesContent":["import { isBearerOf } from \"@devultur/core\";\nimport { httpRouter } from \"convex/server\";\nimport { internal } from \"./_generated/api\";\nimport { env, httpAction } from \"./_generated/server\";\n\nconst http = httpRouter();\n\nhttp.route({\n\tpath: \"/webhook\",\n\tmethod: \"POST\",\n\thandler: httpAction(async (ctx, request) => {\n\t\t// Fails closed: with `DEVULTUR_SECRET` unset or empty no request is authorized.\n\t\tif (!isBearerOf(request.headers.get(\"Authorization\"), env.DEVULTUR_SECRET)) {\n\t\t\treturn new Response(\"Unauthorized\", { status: 401 });\n\t\t}\n\n\t\ttry {\n\t\t\tconst event = await request.json();\n\t\t\tawait ctx.runMutation(internal.public.handleWebhookEvent, event);\n\t\t\treturn new Response(\"OK\", { status: 200 });\n\t\t} catch {\n\t\t\treturn new Response(\"Bad Request\", { status: 400 });\n\t\t}\n\t}),\n});\n\nexport default http;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/component/library.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/component/library.ts"],"names":[],"mappings":"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","sourcesContent":["// The media library: search over the records' `searchText` (title + filename), and the one-off backfill that gives\n// records from before 1.4.0 the `searchText` they were written without.\nimport { type PaginationOptions, type PaginationResult, paginationOptsValidator } from \"convex/server\";\nimport { v } from \"convex/values\";\nimport { internal } from \"./_generated/api\";\nimport type { Doc } from \"./_generated/dataModel\";\nimport type { MutationCtx, QueryCtx } from \"./_generated/server\";\nimport { internalMutation, mutation, query } from \"./_generated/server\";\nimport { missingSearchText } from \"./mediaMeta\";\n\nconst mediaType = v.union(v.literal(\"video\"), v.literal(\"image\"), v.literal(\"file\"));\ntype MediaType = Doc<\"media\">[\"type\"];\n\n/** Longest search kept: Convex matches at most 16 terms, so a longer query only costs. */\nconst SEARCH_MAX_LENGTH = 200;\nexport const BACKFILL_BATCH_SIZE = { default: 100, max: 1000 } as const;\n\n/** One page of the library, newest first, optionally of one kind (`by_type` index). */\nexport function listNewestFirst(\n\tctx: QueryCtx,\n\ttype: MediaType | undefined,\n\tpaginationOpts: PaginationOptions,\n): Promise<PaginationResult<Doc<\"media\">>> {\n\tconst records = type ? ctx.db.query(\"media\").withIndex(\"by_type\", (q) => q.eq(\"type\", type)) : ctx.db.query(\"media\");\n\treturn records.order(\"desc\").paginate(paginationOpts);\n}\n\n/**\n * One page of the records whose title or filename matches `search` (the last word as a prefix), best match first,\n * optionally of one kind. A blank `search` lists the library newest first, like `listMediaPage`. Records from before\n * 1.4.0 match only once they have a `searchText` (`backfillSearchText`, or any write to them).\n */\nexport const searchMedia = query({\n\targs: { search: v.string(), type: v.optional(mediaType), paginationOpts: paginationOptsValidator },\n\thandler: async (ctx, args): Promise<PaginationResult<Doc<\"media\">>> => {\n\t\tconst { type, paginationOpts } = args;\n\t\tconst search = args.search.trim().toLowerCase().slice(0, SEARCH_MAX_LENGTH);\n\t\tif (search === \"\") return listNewestFirst(ctx, type, paginationOpts);\n\n\t\treturn ctx.db\n\t\t\t.query(\"media\")\n\t\t\t.withSearchIndex(\"search_text\", (q) => {\n\t\t\t\tconst matches = q.search(\"searchText\", search);\n\t\t\t\treturn type ? matches.eq(\"type\", type) : matches;\n\t\t\t})\n\t\t\t.paginate(paginationOpts);\n\t},\n});\n\ninterface BackfillResult {\n\t/** Records given a `searchText` by this batch. */\n\tupdated: number;\n\t/** `false` while later batches are scheduled. */\n\tisDone: boolean;\n}\n\nfunction batchSizeOf(requested: number | undefined): number {\n\tif (requested === undefined || !Number.isFinite(requested)) return BACKFILL_BATCH_SIZE.default;\n\treturn Math.min(Math.max(Math.floor(requested), 1), BACKFILL_BATCH_SIZE.max);\n}\n\n/** Fills one page of records, then schedules the next page until the table is done. */\nasync function backfillBatch(ctx: MutationCtx, cursor: string | null, batchSize: number): Promise<BackfillResult> {\n\tconst page = await ctx.db.query(\"media\").paginate({ cursor, numItems: batchSize });\n\tlet updated = 0;\n\tfor (const record of page.page) {\n\t\tconst fill = missingSearchText(record);\n\t\tif (fill.searchText === undefined) continue;\n\t\tawait ctx.db.patch(record._id, fill);\n\t\tupdated++;\n\t}\n\tif (!page.isDone) {\n\t\tawait ctx.scheduler.runAfter(0, internal.library.backfillSearchTextBatch, {\n\t\t\tcursor: page.continueCursor,\n\t\t\tbatchSize,\n\t\t});\n\t}\n\treturn { updated, isDone: page.isDone };\n}\n\n/**\n * Gives every record without a `searchText` (written before 1.4.0) its title and filename, `batchSize` records per\n * mutation (default 100, at most 1000). Runs the first batch now and schedules the rest; safe to run again.\n */\nexport const backfillSearchText = mutation({\n\targs: { batchSize: v.optional(v.number()) },\n\thandler: async (ctx, args): Promise<BackfillResult> => backfillBatch(ctx, null, batchSizeOf(args.batchSize)),\n});\n\nexport const backfillSearchTextBatch = internalMutation({\n\targs: { cursor: v.union(v.string(), v.null()), batchSize: v.number() },\n\thandler: async (ctx, args): Promise<BackfillResult> => backfillBatch(ctx, args.cursor, args.batchSize),\n});\n"]}
|
package/dist/component/lock.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/component/lock.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/component/lock.ts"],"names":[],"mappings":"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","sourcesContent":["// Object lock from the app's server: read and change an object's retention, and set or release holds on a list of\n// keys. These are component functions, so only the app's own functions can call them (never a browser). A bulk hold\n// by prefix stays on the app's server, with `@devultur/core`'s `createWorkerClient(...).lock.holdAll({ prefix })`.\n// A refusal throws a `ConvexError` whose `data.code` is the Worker's (`retention_active`, `compliance_extend_only`,\n// `lock_privilege_required`, `lock_conflict`, ...); see workerErrors.ts.\nimport { HOLD_PAGE_SIZE } from \"@devultur/core\";\nimport { v } from \"convex/values\";\nimport { derivativesValidator, retentionModeValidator } from \"./lockValidators\";\nimport { getMediaClient } from \"./mediaClient\";\nimport { workerAction } from \"./workerErrors\";\n\nconst keysValidator = v.array(v.string());\n\nexport const getLock = workerAction({\n\targs: { key: v.string() },\n\thandler: async (_ctx, args) => getMediaClient().lock.get(args.key),\n});\n\nexport const setLock = workerAction({\n\targs: {\n\t\tkey: v.string(),\n\t\tmode: v.optional(retentionModeValidator),\n\t\tuntil: v.optional(v.string()),\n\t\tperiod: v.optional(v.number()),\n\t\tderivatives: v.optional(derivativesValidator),\n\t\tremove: v.optional(v.literal(true)),\n\t\tbypassGovernance: v.optional(v.boolean()),\n\t},\n\thandler: async (_ctx, { key, ...options }) => getMediaClient().lock.set(key, options),\n});\n\n/** Holds every key, a page of {@link HOLD_PAGE_SIZE} at a time; returns what changed and what didn't. */\nasync function changeHolds(keys: string[], hold: boolean) {\n\tconst lock = getMediaClient().lock;\n\tconst updated: string[] = [];\n\tconst skipped: { key: string; reason: string }[] = [];\n\tfor await (const page of hold ? lock.holdAll(keys) : lock.releaseAll(keys)) {\n\t\tupdated.push(...page.updated);\n\t\tskipped.push(...page.skipped);\n\t}\n\treturn { updated, skipped, pageSize: HOLD_PAGE_SIZE };\n}\n\nexport const setHold = workerAction({\n\targs: { keys: keysValidator },\n\thandler: async (_ctx, args) => changeHolds(args.keys, true),\n});\n\nexport const releaseHold = workerAction({\n\targs: { keys: keysValidator },\n\thandler: async (_ctx, args) => changeHolds(args.keys, false),\n});\n"]}
|
|
@@ -22,4 +22,3 @@ export declare const objectLockValidator: import("convex/values").VObject<{
|
|
|
22
22
|
}, "optional", "mode" | "until" | "period" | "derivatives">;
|
|
23
23
|
hold: import("convex/values").VBoolean<boolean | undefined, "optional">;
|
|
24
24
|
}, "required", "retention" | "hold" | "retention.mode" | "retention.until" | "retention.period" | "retention.derivatives">;
|
|
25
|
-
//# sourceMappingURL=lockValidators.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lockValidators.js","sourceRoot":"","sources":["../../src/component/lockValidators.ts"],"names":[],"mappings":"AAAA,gHAAgH;AAChH,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AAChG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;AAE9F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,QAAQ,CACpB,CAAC,CAAC,MAAM,CAAC;QACR,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9B,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KAC7C,CAAC,CACF;IACD,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;CAC7B,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"lockValidators.js","sourceRoot":"","sources":["../../src/component/lockValidators.ts"],"names":[],"mappings":"AAAA,gHAAgH;AAChH,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AAChG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;AAE9F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,QAAQ,CACpB,CAAC,CAAC,MAAM,CAAC;QACR,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9B,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KAC7C,CAAC,CACF;IACD,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;CAC7B,CAAC,CAAC","sourcesContent":["// Validators of the object lock arguments (the shapes of `@devultur/core`'s `ObjectLock` and `SetLockOptions`).\nimport { v } from \"convex/values\";\n\nexport const retentionModeValidator = v.union(v.literal(\"governance\"), v.literal(\"compliance\"));\nexport const derivativesValidator = v.union(v.literal(\"inherit\"), v.literal(\"original-only\"));\n\nexport const objectLockValidator = v.object({\n\tretention: v.optional(\n\t\tv.object({\n\t\t\tmode: retentionModeValidator,\n\t\t\tuntil: v.optional(v.string()),\n\t\t\tperiod: v.optional(v.number()),\n\t\t\tderivatives: v.optional(derivativesValidator),\n\t\t}),\n\t),\n\thold: v.optional(v.boolean()),\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediaClient.js","sourceRoot":"","sources":["../../src/component/mediaClient.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,OAAO,EAAE,kBAAkB,EAAqB,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,MAAM,UAAU,cAAc;IAC7B,OAAO,kBAAkB,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACtE,CAAC"}
|
|
1
|
+
{"version":3,"file":"mediaClient.js","sourceRoot":"","sources":["../../src/component/mediaClient.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,OAAO,EAAE,kBAAkB,EAAqB,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,MAAM,UAAU,cAAc;IAC7B,OAAO,kBAAkB,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACtE,CAAC","sourcesContent":["// The component's client of the media Worker, from the env the app mounts the component with.\nimport { createWorkerClient, type WorkerClient } from \"@devultur/core\";\nimport { env } from \"./_generated/server\";\n\nexport function getMediaClient(): WorkerClient {\n\treturn createWorkerClient(env.DEVULTUR_SECRET, env.DEVULTUR_API_URL);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediaMeta.js","sourceRoot":"","sources":["../../src/component/mediaMeta.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mediaMeta.js","sourceRoot":"","sources":["../../src/component/mediaMeta.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,kHAAkH;AAClH,kFAAkF;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,WAAW,EAAE,GAAG;IAChB,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,EAAE;IACb,+DAA+D;IAC/D,SAAS,EAAE,OAAO;CACT,CAAC;AAqBX,SAAS,eAAe,CAAC,KAAa,EAAE,OAAe;IACtD,OAAO,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAU,CAAC;AAE9D,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,iBAAiB,CAAC,SAAS,CAAC;AAEpH;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAkB;IAClD,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;YACrB,SAAS;QACV,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,qCAAqC,KAAK,IAAI,KAAK,qCAAqC,CAAC,CAAC;IACxG,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,KAAsB,EAAE,KAAa,EAAE,SAAiB;IAC5E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS;QAAE,MAAM,eAAe,CAAC,KAAK,EAAE,GAAG,KAAK,oBAAoB,SAAS,aAAa,CAAC,CAAC;IACjH,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7C,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,aAAa,CAAC,IAAc;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAAE,SAAS;QAChE,IAAI,OAAO,CAAC,MAAM,GAAG,iBAAiB,CAAC,SAAS,EAAE,CAAC;YAClD,MAAM,eAAe,CAAC,MAAM,EAAE,4BAA4B,iBAAiB,CAAC,SAAS,aAAa,CAAC,CAAC;QACrG,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QAChC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QACpD,MAAM,eAAe,CAAC,MAAM,EAAE,4BAA4B,iBAAiB,CAAC,QAAQ,OAAO,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,2GAA2G;AAC3G,MAAM,UAAU,cAAc,CAAC,KAAqB;IACnD,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC9G,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS;QAAE,KAAK,CAAC,GAAG,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IACpG,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrE,OAAO,KAAK,CAAC;AACd,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,YAAY,CAAC,KAAyB,EAAE,QAAgB;IACvE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;AAClE,CAAC;AAQD,yHAAyH;AACzH,MAAM,UAAU,iBAAiB,CAAC,MAAwB;IACzD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC/C,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;AACpE,CAAC","sourcesContent":["// A media record's descriptive metadata: what the app edits (`title`, `alt`, `tags`), the hints an uploading client\n// sends (`width`, `height`, `pageCount`), and the `searchText` kept in step with the title and filename. Pure: no\n// database, so it is checked the same way in every function that writes a record.\nimport { ConvexError } from \"convex/values\";\n\nexport const MEDIA_META_LIMITS = {\n\ttitleLength: 200,\n\taltLength: 1000,\n\ttagCount: 20,\n\ttagLength: 50,\n\t/** Largest width, height or page count a client may report. */\n\thintValue: 100_000,\n} as const;\n\nexport interface UploadHints {\n\twidth?: number;\n\theight?: number;\n\tpageCount?: number;\n}\n\nexport interface MediaMetaInput {\n\ttitle?: string;\n\talt?: string;\n\ttags?: string[];\n}\n\n/** The fields to patch: a trimmed empty `title` or `alt` clears it (`undefined`), `tags: []` clears the tags. */\nexport interface MediaMetaPatch {\n\ttitle?: string | undefined;\n\talt?: string | undefined;\n\ttags?: string[];\n}\n\nfunction invalidMetadata(field: string, message: string) {\n\treturn new ConvexError({ code: \"invalid_media_metadata\", message, status: 400, details: { field } });\n}\n\nconst HINT_FIELDS = [\"width\", \"height\", \"pageCount\"] as const;\n\nconst isValidHint = (value: number) => Number.isInteger(value) && value > 0 && value <= MEDIA_META_LIMITS.hintValue;\n\n/**\n * The hints worth recording: positive integers up to `hintValue`. The bytes are already stored, so a bad hint (a\n * client's bug) is dropped and logged instead of failing the upload.\n */\nexport function validUploadHints(hints: UploadHints): UploadHints {\n\tconst valid: UploadHints = {};\n\tfor (const field of HINT_FIELDS) {\n\t\tconst value = hints[field];\n\t\tif (value === undefined) continue;\n\t\tif (isValidHint(value)) {\n\t\t\tvalid[field] = value;\n\t\t\tcontinue;\n\t\t}\n\t\tconsole.warn(`Devultur: dropped the upload hint ${field}=${value} (a whole number from 1 to 100,000)`);\n\t}\n\treturn valid;\n}\n\nfunction trimmedText(field: \"title\" | \"alt\", value: string, maxLength: number): string | undefined {\n\tconst trimmed = value.trim();\n\tif (trimmed.length > maxLength) throw invalidMetadata(field, `${field} must be at most ${maxLength} characters`);\n\treturn trimmed === \"\" ? undefined : trimmed;\n}\n\n/** Trimmed, without empty ones or repeats (first spelling wins), within the count and length limits. */\nexport function normalizeTags(tags: string[]): string[] {\n\tconst seen = new Set<string>();\n\tconst normalized: string[] = [];\n\tfor (const tag of tags) {\n\t\tconst trimmed = tag.trim();\n\t\tif (trimmed === \"\" || seen.has(trimmed.toLowerCase())) continue;\n\t\tif (trimmed.length > MEDIA_META_LIMITS.tagLength) {\n\t\t\tthrow invalidMetadata(\"tags\", `Each tag must be at most ${MEDIA_META_LIMITS.tagLength} characters`);\n\t\t}\n\t\tseen.add(trimmed.toLowerCase());\n\t\tnormalized.push(trimmed);\n\t}\n\tif (normalized.length > MEDIA_META_LIMITS.tagCount) {\n\t\tthrow invalidMetadata(\"tags\", `A media can have at most ${MEDIA_META_LIMITS.tagCount} tags`);\n\t}\n\treturn normalized;\n}\n\n/** The patch for an edit; only the fields the caller passed are in it. Throws `invalid_media_metadata`. */\nexport function mediaMetaPatch(input: MediaMetaInput): MediaMetaPatch {\n\tconst patch: MediaMetaPatch = {};\n\tif (input.title !== undefined) patch.title = trimmedText(\"title\", input.title, MEDIA_META_LIMITS.titleLength);\n\tif (input.alt !== undefined) patch.alt = trimmedText(\"alt\", input.alt, MEDIA_META_LIMITS.altLength);\n\tif (input.tags !== undefined) patch.tags = normalizeTags(input.tags);\n\treturn patch;\n}\n\n/** What the media library's search matches: the title and the filename, lowercased. */\nexport function searchTextOf(title: string | undefined, filename: string): string {\n\treturn (title ? `${title} ${filename}` : filename).toLowerCase();\n}\n\ninterface SearchableRecord {\n\ttitle?: string;\n\tfilename: string;\n\tsearchText?: string;\n}\n\n/** `{ searchText }` for a record written before 1.4.0 (it has none), else `{}`: spread it into any patch of a record. */\nexport function missingSearchText(record: SearchableRecord): { searchText?: string } {\n\tif (record.searchText !== undefined) return {};\n\treturn { searchText: searchTextOf(record.title, record.filename) };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/component/metadata.ts"],"names":[],"mappings":"AAAA,mHAAmH;AACnH,mGAAmG;AACnG,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;IACvC,IAAI,EAAE;QACL,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;QACf,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;KACrC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAgC,EAAE;QAC1D,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;QAC/B,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE;aACzB,KAAK,CAAC,OAAO,CAAC;aACd,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;aAC5C,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5D,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/F,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;CACD,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/component/metadata.ts"],"names":[],"mappings":"AAAA,mHAAmH;AACnH,mGAAmG;AACnG,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC;IACvC,IAAI,EAAE;QACL,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;QACf,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;KACrC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAgC,EAAE;QAC1D,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;QAC/B,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE;aACzB,KAAK,CAAC,OAAO,CAAC;aACd,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;aAC5C,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5D,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/F,OAAO,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;CACD,CAAC,CAAC","sourcesContent":["// Editing a media record's descriptive metadata (title, alt text, tags). The upload's own facts (size, dimensions,\n// duration, page count) are recorded by `uploads.ts` and the transcode webhook, never edited here.\nimport { v } from \"convex/values\";\nimport type { Doc } from \"./_generated/dataModel\";\nimport { mutation } from \"./_generated/server\";\nimport { mediaMetaPatch, searchTextOf } from \"./mediaMeta\";\n\n/**\n * Sets a record's `title`, `alt` and/or `tags` (only the ones passed). Trimmed; an empty title or alt clears it, and\n * tags are deduplicated. Throws `invalid_media_metadata` past the limits (title 200, alt 1000, 20 tags of 50). Returns\n * the updated record, or `null` when no record has this media id.\n */\nexport const updateMediaMeta = mutation({\n\targs: {\n\t\tkey: v.string(),\n\t\ttitle: v.optional(v.string()),\n\t\talt: v.optional(v.string()),\n\t\ttags: v.optional(v.array(v.string())),\n\t},\n\thandler: async (ctx, args): Promise<Doc<\"media\"> | null> => {\n\t\tconst { key, ...input } = args;\n\t\tconst patch = mediaMetaPatch(input);\n\t\tconst record = await ctx.db\n\t\t\t.query(\"media\")\n\t\t\t.withIndex(\"by_key\", (q) => q.eq(\"key\", key))\n\t\t\t.first();\n\t\tif (!record) return null;\n\n\t\tconst title = \"title\" in patch ? patch.title : record.title;\n\t\tawait ctx.db.patch(record._id, { ...patch, searchText: searchTextOf(title, record.filename) });\n\t\treturn ctx.db.get(record._id);\n\t},\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/component/public.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/component/public.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WorkerClient } from \"@devultur/core\";\nimport { DEFAULT_TOKEN_EXPIRY_SECONDS, extractId, MediaEventName, MediaStatus } from \"@devultur/core\";\nimport { paginationOptsValidator } from \"convex/server\";\nimport { v } from \"convex/values\";\nimport { api, internal } from \"./_generated/api\";\nimport type { MutationCtx, QueryCtx } from \"./_generated/server\";\nimport { internalMutation, mutation, query } from \"./_generated/server\";\nimport { listNewestFirst } from \"./library\";\nimport { objectLockValidator } from \"./lockValidators\";\nimport { getMediaClient } from \"./mediaClient\";\nimport { missingSearchText, searchTextOf } from \"./mediaMeta\";\nimport { transcodeOutputFields } from \"./schema\";\nimport { UPLOAD_CONFIRM_BACKSTOP_MS } from \"./uploads\";\nimport { workerAction } from \"./workerErrors\";\n\n// Webhook path RELATIVE to the component. Convex gives the component a `CONVEX_SITE_URL` that ALREADY\n// includes its mount prefix (e.g. `${site}/devultur`), so `${CONVEX_SITE_URL}/webhook` resolves to the\n// mounted route (`${site}/devultur/webhook`) without duplicating the prefix. Do NOT add `/devultur/` here\n// (that duplicates it).\nconst WEBHOOK_PATH = \"/webhook\";\n// Accept-timeout (fail-fast): the machine emits the \"downloading\" heartbeat seconds after booting.\n// If it's still \"queued\" at 90s, it never started → FAILED capacity/retriable (fast, not an opaque 5 min).\nconst ACCEPT_TIMEOUT_MS = 90 * 1000;\n// Stuck-timeout (long encode): backstop in case the job hangs mid-processing.\nconst STUCK_TIMEOUT_MS = 45 * 60 * 1000;\n\n// Reusable validator for the categorized failure reason (see FailureReason in @devultur/core).\nconst failureReasonValidator = v.union(\n\tv.literal(\"invalid_input\"),\n\tv.literal(\"unsupported_codec\"),\n\tv.literal(\"timeout\"),\n\tv.literal(\"capacity\"),\n\tv.literal(\"internal\"),\n);\n\n// --- Media Actions (call CF Worker) ---\n\nexport const issueViewerToken = workerAction({\n\t// `userId`: the token's subject. Your server sets it (a guard's `userId`, see `defineDevulturFunctions`), never a\n\t// browser: the exposed `issueViewerToken` only takes `sessionSecret`. Omitted → the shared `viewer` subject.\n\targs: { sessionSecret: v.optional(v.string()), userId: v.optional(v.string()) },\n\thandler: async (_ctx, args) => {\n\t\tconst media = getMediaClient();\n\t\tconst { token, expiresIn } = await media.issueToken(args.userId ?? \"viewer\", {\n\t\t\texpiresIn: DEFAULT_TOKEN_EXPIRY_SECONDS,\n\t\t\tsessionSecret: args.sessionSecret,\n\t\t});\n\t\treturn { token, expiresIn };\n\t},\n});\n\nexport const createUploadUrl = workerAction({\n\targs: {\n\t\tfilename: v.string(),\n\t\tcontentType: v.string(),\n\t\tvisibility: v.optional(v.union(v.literal(\"public\"), v.literal(\"private\"))),\n\t\t/** Lock of the new file (retention and/or hold), written with its bytes. */\n\t\tlock: v.optional(objectLockValidator),\n\t\thold: v.optional(v.boolean()),\n\t},\n\thandler: async (ctx, args) => {\n\t\tconst media = getMediaClient();\n\t\t// Returns { url, key, id, kind, visibility } → the client assembles the DevulturMedia after the PUT.\n\t\tconst upload = await media.createUploadUrl(args);\n\t\t// Backstop for a client that never confirms: records the upload later if its bytes were stored (uploads.ts).\n\t\tawait ctx.scheduler.runAfter(UPLOAD_CONFIRM_BACKSTOP_MS, internal.uploads.confirmUploadLater, {\n\t\t\tkey: upload.key,\n\t\t\tfilename: args.filename,\n\t\t});\n\t\treturn upload;\n\t},\n});\n\nexport const deleteMediaAction = workerAction({\n\targs: { key: v.string() },\n\thandler: async (ctx, args) => {\n\t\tconst media = getMediaClient();\n\t\tawait media.delete(args.key);\n\t\t// Only once the Worker deleted it: a refused delete (a lock) keeps the file in the library.\n\t\tawait ctx.runMutation(internal.uploads.forgetUpload, { key: args.key });\n\t},\n});\n\nexport const deleteVideo = workerAction({\n\targs: { videoId: v.string(), visibility: v.optional(v.union(v.literal(\"public\"), v.literal(\"private\"))) },\n\thandler: async (ctx, args) => {\n\t\tconst media = getMediaClient();\n\t\tconst result = await media.deleteVideo(args.videoId, args.visibility);\n\t\t// The worker purges R2; here we clean up the component's records so a successful delete doesn't\n\t\t// leave a ghost `media` row (playlist/thumbnail giving 404s) or orphaned captions behind.\n\t\tawait ctx.runMutation(internal.public.cleanupVideoRecords, { videoId: args.videoId });\n\t\treturn result;\n\t},\n});\n\n// Cascade cleanup of the component's tables when a video is deleted (after the R2 purge in the worker):\n// the `media` row (key = videoId) and its `captions` (by_media index). `progress` (watch history)\n// is left orphaned but harmless — cascading it would require a `by_video` index.\nexport const cleanupVideoRecords = internalMutation({\n\targs: { videoId: v.string() },\n\thandler: async (ctx, args) => {\n\t\tconst record = await ctx.db\n\t\t\t.query(\"media\")\n\t\t\t.withIndex(\"by_key\", (q) => q.eq(\"key\", args.videoId))\n\t\t\t.first();\n\t\tif (record) await ctx.db.delete(record._id);\n\n\t\tconst captions = await ctx.db\n\t\t\t.query(\"captions\")\n\t\t\t.withIndex(\"by_media\", (q) => q.eq(\"mediaKey\", args.videoId))\n\t\t\t.collect();\n\t\tawait Promise.all(captions.map((caption) => ctx.db.delete(caption._id)));\n\t},\n});\n\nexport const processVideo = workerAction({\n\targs: {\n\t\tkey: v.string(),\n\t\tpreset: v.optional(v.string()),\n\t\tlocales: v.optional(v.array(v.string())),\n\t\tcallbackUrl: v.optional(v.string()),\n\t},\n\thandler: async (ctx, args) => {\n\t\tconst videoId = extractId(args.key);\n\t\tconst mediaKey = videoId;\n\n\t\tconst existing = await ctx.runQuery(api.public.getMediaByKey, { key: mediaKey });\n\t\tif (!existing) {\n\t\t\tconst filename = args.key.split(\"/\").pop() ?? args.key;\n\t\t\tawait ctx.runMutation(api.public.createMedia, {\n\t\t\t\tkey: mediaKey,\n\t\t\t\ttype: \"video\" as const,\n\t\t\t\tfilename,\n\t\t\t\tcontentType: \"video/mp4\",\n\t\t\t\tsizeBytes: 0,\n\t\t\t});\n\t\t}\n\n\t\tconst media = getMediaClient();\n\t\t// No preset → the config's default (or the usual HLS ladder if there is none).\n\t\tconst preset = args.preset;\n\t\tconst callbackUrl = args.callbackUrl ?? `${process.env.CONVEX_SITE_URL}${WEBHOOK_PATH}`;\n\n\t\tconst hasCaptionLocales = (args.locales?.length ?? 0) > 0;\n\n\t\t// \"queued\" state BEFORE firing (feedback \"requesting transcode…\").\n\t\t// The transcode.started webhook will move it to \"transcoding\"; this order avoids a race.\n\t\t// `captionsPending` is set here too, before any webhook can land: `transcode.complete` reads it to choose\n\t\t// between \"captioning\" (captions still on their way) and \"ready\".\n\t\tawait ctx.runMutation(api.public.updateMedia, {\n\t\t\tkey: mediaKey,\n\t\t\ttranscodeStatus: MediaStatus.QUEUED,\n\t\t\tcaptionsPending: hasCaptionLocales,\n\t\t});\n\n\t\tlet result: Awaited<ReturnType<WorkerClient[\"transcode\"]>>;\n\t\ttry {\n\t\t\tresult = await media.transcode(args.key, { preset, callbackUrl });\n\t\t} catch (error) {\n\t\t\t// Fail-loud: the worker didn't accept the transcode (token/suspend/error) → don't leave it hanging.\n\t\t\tconst message = error instanceof Error ? error.message : \"Could not start the transcode\";\n\t\t\tawait ctx.runMutation(api.public.updateMedia, {\n\t\t\t\tkey: mediaKey,\n\t\t\t\ttranscodeStatus: MediaStatus.FAILED,\n\t\t\t\ttranscodeError: message,\n\t\t\t\tfailureReason: \"internal\",\n\t\t\t\tretriable: true,\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\n\t\t// Captions is best-effort: its failure shouldn't mark the video as failed, nor leave it waiting for\n\t\t// captions that will never arrive.\n\t\tif (args.locales && hasCaptionLocales) {\n\t\t\ttry {\n\t\t\t\tawait media.requestCaptions(args.key, args.locales, { callbackUrl });\n\t\t\t} catch {\n\t\t\t\tawait ctx.runMutation(internal.public.skipCaptions, { key: mediaKey });\n\t\t\t}\n\t\t}\n\n\t\t// Accept-timeout (fast): if the machine never emitted the \"downloading\" heartbeat it's still \"queued\".\n\t\t// Stuck-timeout (long): backstop if the job hangs mid-processing.\n\t\tawait ctx.scheduler.runAfter(ACCEPT_TIMEOUT_MS, internal.public.checkTranscodeAccepted, { key: mediaKey });\n\t\tawait ctx.scheduler.runAfter(STUCK_TIMEOUT_MS, internal.public.checkTranscodeStuck, { key: mediaKey });\n\n\t\treturn result;\n\t},\n});\n\n// The captions request failed: stop waiting for them. A video whose transcode already completed (and is\n// waiting in \"captioning\") becomes ready.\nexport const skipCaptions = internalMutation({\n\targs: { key: v.string() },\n\thandler: async (ctx, args) => {\n\t\tconst record = await ctx.db\n\t\t\t.query(\"media\")\n\t\t\t.withIndex(\"by_key\", (q) => q.eq(\"key\", args.key))\n\t\t\t.first();\n\t\tif (!record) return;\n\n\t\tconst isWaitingForCaptions = record.transcodeStatus === MediaStatus.CAPTIONING;\n\t\tawait ctx.db.patch(record._id, {\n\t\t\t...missingSearchText(record),\n\t\t\tcaptionsPending: false,\n\t\t\t...(isWaitingForCaptions ? { transcodeStatus: MediaStatus.READY } : {}),\n\t\t});\n\t},\n});\n\n// Fail-fast: if the video is still \"queued\" at 90s (the machine never started), mark it FAILED with\n// reason `capacity` and retriable — a transient startup failure, not an invalid input.\nexport const checkTranscodeAccepted = internalMutation({\n\targs: { key: v.string() },\n\thandler: async (ctx, args) => {\n\t\tconst record = await ctx.db\n\t\t\t.query(\"media\")\n\t\t\t.withIndex(\"by_key\", (q) => q.eq(\"key\", args.key))\n\t\t\t.first();\n\t\tif (!record || record.transcodeStatus !== MediaStatus.QUEUED) return;\n\n\t\tawait ctx.db.patch(record._id, {\n\t\t\t...missingSearchText(record),\n\t\t\ttranscodeStatus: MediaStatus.FAILED,\n\t\t\ttranscodeError: \"The transcode didn't start in time. Retry.\",\n\t\t\tfailureReason: \"capacity\",\n\t\t\tretriable: true,\n\t\t\ttranscodeProgress: undefined,\n\t\t});\n\t},\n});\n\n// Long-encode backstop: if the video hasn't reached ready/failed after the max time, it got stuck\n// mid-way → FAILED with reason `timeout` and retriable.\nexport const checkTranscodeStuck = internalMutation({\n\targs: { key: v.string() },\n\thandler: async (ctx, args) => {\n\t\tconst record = await ctx.db\n\t\t\t.query(\"media\")\n\t\t\t.withIndex(\"by_key\", (q) => q.eq(\"key\", args.key))\n\t\t\t.first();\n\t\tif (!record) return;\n\t\tif (record.transcodeStatus === MediaStatus.READY || record.transcodeStatus === MediaStatus.FAILED) return;\n\n\t\tawait ctx.db.patch(record._id, {\n\t\t\t...missingSearchText(record),\n\t\t\ttranscodeStatus: MediaStatus.FAILED,\n\t\t\ttranscodeError: \"The transcode didn't finish in time. Retry.\",\n\t\t\tfailureReason: \"timeout\",\n\t\t\tretriable: true,\n\t\t\ttranscodeProgress: undefined,\n\t\t});\n\t},\n});\n\n// --- Media Mutations (component tables) ---\n\nexport const createMedia = mutation({\n\targs: {\n\t\tkey: v.string(),\n\t\ttype: v.union(v.literal(\"video\"), v.literal(\"image\"), v.literal(\"file\")),\n\t\tfilename: v.string(),\n\t\tcontentType: v.string(),\n\t\tsizeBytes: v.number(),\n\t},\n\thandler: async (ctx, args) => {\n\t\t// One record per key: `processVideo` and a confirmed upload can both get here first.\n\t\tconst existing = await ctx.db\n\t\t\t.query(\"media\")\n\t\t\t.withIndex(\"by_key\", (q) => q.eq(\"key\", args.key))\n\t\t\t.first();\n\t\tif (existing) return existing._id;\n\t\treturn ctx.db.insert(\"media\", {\n\t\t\t...args,\n\t\t\tsearchText: searchTextOf(undefined, args.filename),\n\t\t\tcreatedAt: Date.now(),\n\t\t});\n\t},\n});\n\nexport const updateMedia = mutation({\n\targs: {\n\t\tkey: v.string(),\n\t\ttranscodeStatus: v.optional(\n\t\t\tv.union(\n\t\t\t\tv.literal(\"queued\"),\n\t\t\t\tv.literal(\"transcoding\"),\n\t\t\t\tv.literal(\"captioning\"),\n\t\t\t\tv.literal(\"ready\"),\n\t\t\t\tv.literal(\"failed\"),\n\t\t\t),\n\t\t),\n\t\ttranscodeProgress: v.optional(v.object({ current: v.number(), total: v.number() })),\n\t\ttranscodeError: v.optional(v.string()),\n\t\tfailureReason: v.optional(failureReasonValidator),\n\t\tretriable: v.optional(v.boolean()),\n\t\tplaylistUrl: v.optional(v.string()),\n\t\tthumbnailKey: v.optional(v.string()),\n\t\tcaptionLocales: v.optional(v.array(v.string())),\n\t\tcaptionsPending: v.optional(v.boolean()),\n\t\tduration: v.optional(v.number()),\n\t},\n\thandler: async (ctx, args) => {\n\t\tconst record = await ctx.db\n\t\t\t.query(\"media\")\n\t\t\t.withIndex(\"by_key\", (q) => q.eq(\"key\", args.key))\n\t\t\t.first();\n\t\tif (!record) return;\n\n\t\tconst { key: _mediaKey, ...fields } = args;\n\t\t// Any write to a record from before 1.4.0 also gives it its `searchText`.\n\t\tconst patch: Record<string, unknown> = { ...missingSearchText(record) };\n\t\tfor (const [fieldName, fieldValue] of Object.entries(fields)) {\n\t\t\tif (fieldValue !== undefined) patch[fieldName] = fieldValue;\n\t\t}\n\t\tif (Object.keys(patch).length > 0) {\n\t\t\tawait ctx.db.patch(record._id, patch);\n\t\t}\n\t},\n});\n\n// --- Media Queries ---\n\nexport const getMediaByKey = query({\n\targs: { key: v.string() },\n\thandler: async (ctx, args) => {\n\t\treturn ctx.db\n\t\t\t.query(\"media\")\n\t\t\t.withIndex(\"by_key\", (q) => q.eq(\"key\", args.key))\n\t\t\t.first();\n\t},\n});\n\n// Every record at once: fine for a handful, unbounded for a library. A library pages with `listMediaPage`.\nexport const listMedia = query({\n\targs: { type: v.optional(v.union(v.literal(\"video\"), v.literal(\"image\"), v.literal(\"file\"))) },\n\thandler: async (ctx, args) => {\n\t\tconst mediaQuery = ctx.db.query(\"media\");\n\t\tif (args.type) {\n\t\t\treturn mediaQuery.filter((q) => q.eq(q.field(\"type\"), args.type)).collect();\n\t\t}\n\t\treturn mediaQuery.collect();\n\t},\n});\n\n/** One page of the media library, newest first, optionally of one type (`by_type` index). */\nexport const listMediaPage = query({\n\targs: {\n\t\ttype: v.optional(v.union(v.literal(\"video\"), v.literal(\"image\"), v.literal(\"file\"))),\n\t\tpaginationOpts: paginationOptsValidator,\n\t},\n\thandler: async (ctx, args) => listNewestFirst(ctx, args.type, args.paginationOpts),\n});\n\n// --- Captions ---\n\nexport const upsertCaption = mutation({\n\targs: {\n\t\tmediaKey: v.string(),\n\t\tlocale: v.string(),\n\t\tvttUrl: v.string(),\n\t\tsrtUrl: v.optional(v.string()),\n\t},\n\thandler: async (ctx, args) => {\n\t\tconst existing = await ctx.db\n\t\t\t.query(\"captions\")\n\t\t\t.withIndex(\"by_media_locale\", (q) => q.eq(\"mediaKey\", args.mediaKey).eq(\"locale\", args.locale))\n\t\t\t.first();\n\n\t\tif (existing) {\n\t\t\tawait ctx.db.patch(existing._id, { vttUrl: args.vttUrl, srtUrl: args.srtUrl });\n\t\t\treturn existing._id;\n\t\t}\n\t\treturn ctx.db.insert(\"captions\", { ...args, createdAt: Date.now() });\n\t},\n});\n\nexport const listCaptionsByMedia = query({\n\targs: { mediaKey: v.string() },\n\thandler: async (ctx, args) => {\n\t\treturn ctx.db\n\t\t\t.query(\"captions\")\n\t\t\t.withIndex(\"by_media\", (q) => q.eq(\"mediaKey\", args.mediaKey))\n\t\t\t.collect();\n\t},\n});\n\n// --- Progress ---\n\nfunction findProgress(ctx: QueryCtx | MutationCtx, userId: string, videoId: string) {\n\treturn ctx.db\n\t\t.query(\"progress\")\n\t\t.withIndex(\"by_user_video\", (q) => q.eq(\"userId\", userId).eq(\"videoId\", videoId))\n\t\t.first();\n}\n\nexport const saveProgress = mutation({\n\targs: { userId: v.string(), videoId: v.string(), position: v.number() },\n\thandler: async (ctx, args) => {\n\t\tconst existing = await findProgress(ctx, args.userId, args.videoId);\n\n\t\tif (existing) {\n\t\t\tawait ctx.db.patch(existing._id, { lastPosition: args.position, updatedAt: Date.now() });\n\t\t\treturn existing._id;\n\t\t}\n\t\treturn ctx.db.insert(\"progress\", {\n\t\t\tuserId: args.userId,\n\t\t\tvideoId: args.videoId,\n\t\t\tlastPosition: args.position,\n\t\t\tupdatedAt: Date.now(),\n\t\t});\n\t},\n});\n\nexport const loadProgress = query({\n\targs: { userId: v.string(), videoId: v.string() },\n\thandler: async (ctx, args) => {\n\t\treturn findProgress(ctx, args.userId, args.videoId);\n\t},\n});\n\nexport const markComplete = mutation({\n\targs: { userId: v.string(), videoId: v.string() },\n\thandler: async (ctx, args) => {\n\t\tconst existing = await findProgress(ctx, args.userId, args.videoId);\n\t\tconst now = Date.now();\n\n\t\tif (existing) {\n\t\t\tawait ctx.db.patch(existing._id, { completedAt: now, watchedPercent: 100, updatedAt: now });\n\t\t\treturn existing._id;\n\t\t}\n\t\treturn ctx.db.insert(\"progress\", {\n\t\t\tuserId: args.userId,\n\t\t\tvideoId: args.videoId,\n\t\t\tlastPosition: 0,\n\t\t\tcompletedAt: now,\n\t\t\twatchedPercent: 100,\n\t\t\tupdatedAt: now,\n\t\t});\n\t},\n});\n\nexport const resetProgress = mutation({\n\targs: { userId: v.string(), videoId: v.string() },\n\thandler: async (ctx, args) => {\n\t\tconst existing = await findProgress(ctx, args.userId, args.videoId);\n\t\tif (existing) {\n\t\t\tawait ctx.db.delete(existing._id);\n\t\t}\n\t},\n});\n\nexport const getCourseProgress = query({\n\targs: { userId: v.string(), videoIds: v.array(v.string()) },\n\thandler: async (ctx, args) => {\n\t\treturn Promise.all(args.videoIds.map((videoId) => findProgress(ctx, args.userId, videoId)));\n\t},\n});\n\n// --- Webhook Handler (updates component's media table) ---\n\nexport const handleWebhookEvent = internalMutation({\n\targs: {\n\t\tevent: v.string(),\n\t\tvideoId: v.string(),\n\t\tcurrentSegment: v.optional(v.number()),\n\t\ttotalSegments: v.optional(v.number()),\n\t\tphase: v.optional(v.string()),\n\t\tduration: v.optional(v.number()),\n\t\tplaylistKey: v.optional(v.string()),\n\t\tthumbnailKey: v.optional(v.string()),\n\t\t// Outputs of a config preset / inline spec (MP4, variants, poster). Absent with the `hls-*` aliases.\n\t\t...transcodeOutputFields,\n\t\tlocales: v.optional(v.array(v.string())),\n\t\terror: v.optional(v.string()),\n\t\treason: v.optional(failureReasonValidator),\n\t\tretriable: v.optional(v.boolean()),\n\t},\n\thandler: async (ctx, args) => {\n\t\tlet record = await ctx.db\n\t\t\t.query(\"media\")\n\t\t\t.withIndex(\"by_key\", (q) => q.eq(\"key\", args.videoId))\n\t\t\t.first();\n\t\tif (!record) {\n\t\t\trecord = await ctx.db\n\t\t\t\t.query(\"media\")\n\t\t\t\t.withIndex(\"by_key\", (q) => q.eq(\"key\", `videos/${args.videoId}`))\n\t\t\t\t.first();\n\t\t}\n\t\tif (!record) return;\n\n\t\tconst searchTextFill = missingSearchText(record);\n\t\tif (searchTextFill.searchText !== undefined) await ctx.db.patch(record._id, searchTextFill);\n\n\t\tswitch (args.event) {\n\t\t\tcase MediaEventName.TRANSCODE_STARTED:\n\t\t\t\tawait ctx.db.patch(record._id, {\n\t\t\t\t\ttranscodeStatus: MediaStatus.TRANSCODING,\n\t\t\t\t\ttranscodeProgress: { current: 0, total: args.totalSegments ?? 0 },\n\t\t\t\t\ttranscodeError: undefined,\n\t\t\t\t\tduration: args.duration,\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase MediaEventName.TRANSCODE_PROGRESS:\n\t\t\t\t// The \"downloading\" heartbeat is the first progress → moves out of \"queued\" as soon as the machine is alive.\n\t\t\t\tawait ctx.db.patch(record._id, {\n\t\t\t\t\ttranscodeStatus: MediaStatus.TRANSCODING,\n\t\t\t\t\ttranscodeProgress: {\n\t\t\t\t\t\tcurrent: args.currentSegment ?? 0,\n\t\t\t\t\t\ttotal: args.totalSegments ?? 0,\n\t\t\t\t\t\tphase: (args.phase as \"downloading\" | \"encoding\" | \"uploading\" | \"captioning\") ?? \"uploading\",\n\t\t\t\t\t},\n\t\t\t\t\ttranscodeError: undefined,\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase MediaEventName.TRANSCODE_COMPLETE: {\n\t\t\t\t// Wait in \"captioning\" only for captions that were requested and haven't arrived yet; a video\n\t\t\t\t// transcoded without captions is ready right away.\n\t\t\t\tawait ctx.db.patch(record._id, {\n\t\t\t\t\ttranscodeStatus: record.captionsPending ? MediaStatus.CAPTIONING : MediaStatus.READY,\n\t\t\t\t\ttranscodeProgress: undefined,\n\t\t\t\t\tduration: args.duration,\n\t\t\t\t\tplaylistUrl: args.playlistKey,\n\t\t\t\t\tthumbnailKey: args.thumbnailKey,\n\t\t\t\t\t...(args.renditions ? { renditions: args.renditions } : {}),\n\t\t\t\t\t...(args.posterUrls ? { posterUrls: args.posterUrls } : {}),\n\t\t\t\t\t...(args.hasAudio !== undefined ? { hasAudio: args.hasAudio } : {}),\n\t\t\t\t\t...(args.storyboardKey ? { storyboardKey: args.storyboardKey } : {}),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase MediaEventName.CAPTIONS_COMPLETE: {\n\t\t\t\t// An MP4-only preset has no playlist: its renditions also count as \"transcode ready\".\n\t\t\t\tconst hasPlaylist = !!record.playlistUrl || (record.renditions?.length ?? 0) > 0;\n\t\t\t\tawait ctx.db.patch(record._id, {\n\t\t\t\t\ttranscodeStatus: hasPlaylist ? MediaStatus.READY : MediaStatus.TRANSCODING,\n\t\t\t\t\tcaptionLocales: args.locales,\n\t\t\t\t\tcaptionsPending: false,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase MediaEventName.TRANSCODE_FAILED:\n\t\t\tcase MediaEventName.CAPTIONS_FAILED:\n\t\t\t\tawait ctx.db.patch(record._id, {\n\t\t\t\t\ttranscodeStatus: MediaStatus.FAILED,\n\t\t\t\t\ttranscodeError: args.error,\n\t\t\t\t\tfailureReason: args.reason ?? \"internal\",\n\t\t\t\t\tretriable: args.retriable ?? true,\n\t\t\t\t\ttranscodeProgress: undefined,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t},\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,4GAA4G;AAC5G,gFAAgF;AAChF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACpC,UAAU,EAAE,CAAC,CAAC,QAAQ,CACrB,CAAC,CAAC,KAAK,CACN,CAAC,CAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;QACf,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;KACf,CAAC,CACF,CACD;IACD,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/F,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACjC,yGAAyG;IACzG,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;CACrC,CAAC;AAEF,eAAe,YAAY,CAAC;IAC3B,KAAK,EAAE,WAAW,CAAC;QAClB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;QACf,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,gHAAgH;QAChH,6GAA6G;QAC7G,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1E,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACjC,8GAA8G;QAC9G,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9B,yFAAyF;QACzF,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACjC,sCAAsC;QACtC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACrC,yGAAyG;QACzG,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAClC,eAAe,EAAE,CAAC,CAAC,QAAQ,CAC1B,CAAC,CAAC,KAAK,CACN,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EACnB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EACxB,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EACvB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAClB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CACnB,CACD;QACD,iBAAiB,EAAE,CAAC,CAAC,QAAQ,CAC5B,CAAC,CAAC,MAAM,CAAC;YACR,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;YACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,KAAK,EAAE,CAAC,CAAC,QAAQ,CAChB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CACzG;SACD,CAAC,CACF;QACD,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACtC,sGAAsG;QACtG,aAAa,EAAE,CAAC,CAAC,QAAQ,CACxB,CAAC,CAAC,KAAK,CACN,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,EAC1B,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAC9B,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EACpB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EACrB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CACrB,CACD;QACD,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAClC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACnC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACpC,wGAAwG;QACxG,GAAG,qBAAqB;QACxB,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/C,yGAAyG;QACzG,yGAAyG;QACzG,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACxC,+DAA+D;QAC/D,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACrB,CAAC;SACA,KAAK,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC;QACzB,6DAA6D;SAC5D,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC;QAC3B,wEAAwE;SACvE,WAAW,CAAC,aAAa,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;IAEnF,QAAQ,EAAE,WAAW,CAAC;QACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACrB,CAAC;SACA,KAAK,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,CAAC;SAC/B,KAAK,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAElD,QAAQ,EAAE,WAAW,CAAC;QACrB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACnC,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACrB,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;CAChD,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineSchema, defineTable } from \"convex/server\";\nimport { v } from \"convex/values\";\n\n// Outputs of a preset transcode (carried by `transcode.complete`): each MP4/ladder with its stable URL, the\n// poster (JPG + AVIF per transform), and whether the video ended up with audio.\nexport const transcodeOutputFields = {\n\trenditions: v.optional(\n\t\tv.array(\n\t\t\tv.object({\n\t\t\t\tvariant: v.string(),\n\t\t\t\tkind: v.union(v.literal(\"hls\"), v.literal(\"mp4\")),\n\t\t\t\trung: v.string(),\n\t\t\t\tkey: v.string(),\n\t\t\t\twidth: v.optional(v.number()),\n\t\t\t\theight: v.optional(v.number()),\n\t\t\t\turl: v.string(),\n\t\t\t}),\n\t\t),\n\t),\n\tposterUrls: v.optional(v.object({ jpg: v.optional(v.string()), avif: v.optional(v.string()) })),\n\thasAudio: v.optional(v.boolean()),\n\t// Key of the storyboard VTT (scrub-bar previews). URL: `buildStoryboardUrl` / `buildMediaUrl` from core.\n\tstoryboardKey: v.optional(v.string()),\n};\n\nexport default defineSchema({\n\tmedia: defineTable({\n\t\tkey: v.string(),\n\t\ttype: v.union(v.literal(\"video\"), v.literal(\"image\"), v.literal(\"file\")),\n\t\tfilename: v.string(),\n\t\tcontentType: v.string(),\n\t\tsizeBytes: v.number(),\n\t\t// Set by a confirmed upload (see uploads.ts). Unset on records from before 1.1.0 and on videos recorded only by\n\t\t// `processVideo`. The record's `key` is the media id for every kind; `objectKey` is the stored object's key.\n\t\tvisibility: v.optional(v.union(v.literal(\"public\"), v.literal(\"private\"))),\n\t\tobjectKey: v.optional(v.string()),\n\t\t// An image's intrinsic size: read by the Worker from the bytes when it can, else the uploading client's hint.\n\t\twidth: v.optional(v.number()),\n\t\theight: v.optional(v.number()),\n\t\t// A PDF's page count, as the uploading client reported it (a hint, see `confirmUpload`).\n\t\tpageCount: v.optional(v.number()),\n\t\t// Set by the app (`updateMediaMeta`).\n\t\ttitle: v.optional(v.string()),\n\t\talt: v.optional(v.string()),\n\t\ttags: v.optional(v.array(v.string())),\n\t\t// `title + \" \" + filename`, lowercased, kept in step on every write. Unset on records from before 1.4.0.\n\t\tsearchText: v.optional(v.string()),\n\t\ttranscodeStatus: v.optional(\n\t\t\tv.union(\n\t\t\t\tv.literal(\"queued\"),\n\t\t\t\tv.literal(\"transcoding\"),\n\t\t\t\tv.literal(\"captioning\"),\n\t\t\t\tv.literal(\"ready\"),\n\t\t\t\tv.literal(\"failed\"),\n\t\t\t),\n\t\t),\n\t\ttranscodeProgress: v.optional(\n\t\t\tv.object({\n\t\t\t\tcurrent: v.number(),\n\t\t\t\ttotal: v.number(),\n\t\t\t\tphase: v.optional(\n\t\t\t\t\tv.union(v.literal(\"downloading\"), v.literal(\"encoding\"), v.literal(\"uploading\"), v.literal(\"captioning\")),\n\t\t\t\t),\n\t\t\t}),\n\t\t),\n\t\ttranscodeError: v.optional(v.string()),\n\t\t// Categorized failure + whether it's retriable (webhook / accept-timeout). See FailureReason in core.\n\t\tfailureReason: v.optional(\n\t\t\tv.union(\n\t\t\t\tv.literal(\"invalid_input\"),\n\t\t\t\tv.literal(\"unsupported_codec\"),\n\t\t\t\tv.literal(\"timeout\"),\n\t\t\t\tv.literal(\"capacity\"),\n\t\t\t\tv.literal(\"internal\"),\n\t\t\t),\n\t\t),\n\t\tretriable: v.optional(v.boolean()),\n\t\tplaylistUrl: v.optional(v.string()),\n\t\tthumbnailKey: v.optional(v.string()),\n\t\t// Outputs of a preset transcode: each MP4/ladder with its stable URL, poster, and whether it has audio.\n\t\t...transcodeOutputFields,\n\t\tcaptionLocales: v.optional(v.array(v.string())),\n\t\t// True while requested captions haven't arrived: `transcode.complete` then waits in \"captioning\" instead\n\t\t// of going straight to \"ready\". Unset (records from before this field) means no captions were requested.\n\t\tcaptionsPending: v.optional(v.boolean()),\n\t\t// A video's duration in seconds, from the transcode's webhook.\n\t\tduration: v.optional(v.number()),\n\t\tcreatedAt: v.number(),\n\t})\n\t\t.index(\"by_key\", [\"key\"])\n\t\t// The media library by kind (`listMediaPage`), newest first.\n\t\t.index(\"by_type\", [\"type\"])\n\t\t// Full-text search over the title and filename, optionally of one kind.\n\t\t.searchIndex(\"search_text\", { searchField: \"searchText\", filterFields: [\"type\"] }),\n\n\tcaptions: defineTable({\n\t\tmediaKey: v.string(),\n\t\tlocale: v.string(),\n\t\tvttUrl: v.string(),\n\t\tsrtUrl: v.optional(v.string()),\n\t\tcreatedAt: v.number(),\n\t})\n\t\t.index(\"by_media\", [\"mediaKey\"])\n\t\t.index(\"by_media_locale\", [\"mediaKey\", \"locale\"]),\n\n\tprogress: defineTable({\n\t\tuserId: v.string(),\n\t\tvideoId: v.string(),\n\t\tlastPosition: v.number(),\n\t\tcompletedAt: v.optional(v.number()),\n\t\twatchedPercent: v.optional(v.number()),\n\t\tupdatedAt: v.number(),\n\t}).index(\"by_user_video\", [\"userId\", \"videoId\"]),\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploadKeys.js","sourceRoot":"","sources":["../../src/component/uploadKeys.ts"],"names":[],"mappings":"AAGA,MAAM,KAAK,GAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAUlE;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC;IACxC,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAoB,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAE9D,MAAM,YAAY,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,IAAI,KAAK,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAE3D,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAoB,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;AACnE,CAAC"}
|
|
1
|
+
{"version":3,"file":"uploadKeys.js","sourceRoot":"","sources":["../../src/component/uploadKeys.ts"],"names":[],"mappings":"AAGA,MAAM,KAAK,GAA4B,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAUlE;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC;IACxC,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAoB,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAE9D,MAAM,YAAY,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,IAAI,KAAK,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAE3D,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAoB,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;AACnE,CAAC","sourcesContent":["// Keys of uploaded objects, as the Worker lays them out. Dependency-free so any module can parse them.\nimport type { DevulturKind, Visibility } from \"@devultur/core\";\n\nconst KINDS: readonly DevulturKind[] = [\"video\", \"image\", \"file\"];\n\nexport interface UploadKey {\n\tvisibility: Visibility;\n\tkind: DevulturKind;\n\tid: string;\n\t/** The (sanitized) filename in the key. */\n\tstoredName: string;\n}\n\n/**\n * The parts of an upload key: `{visibility}/{image|file}/{id}/{name}` or `{visibility}/video/{id}/raw/{name}`.\n * `null` for any other key (derivatives, assets, exports): those are never library items.\n */\nexport function parseUploadKey(key: string): UploadKey | null {\n\tconst segments = key.split(\"/\");\n\tconst [visibility, kind, id] = segments;\n\tif (visibility !== \"public\" && visibility !== \"private\") return null;\n\tif (!KINDS.includes(kind as DevulturKind) || !id) return null;\n\n\tconst nameSegments = kind === \"video\" ? 5 : 4;\n\tif (segments.length !== nameSegments) return null;\n\tif (kind === \"video\" && segments[3] !== \"raw\") return null;\n\n\tconst storedName = segments.at(-1);\n\tif (!storedName) return null;\n\treturn { visibility, kind: kind as DevulturKind, id, storedName };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploads.js","sourceRoot":"","sources":["../../src/component/uploads.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"uploads.js","sourceRoot":"","sources":["../../src/component/uploads.ts"],"names":[],"mappings":"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","sourcesContent":["// Upload records: every upload (video, image, file) gets a `media` record once its bytes are stored, so `listMedia` is\n// the app's media library. A record is only written after a HEAD on the Worker finds the object: an abandoned PUT never\n// shows up. The client confirms right after its PUT (`confirmUpload`); `createUploadUrl` also schedules the same check\n// for later (`confirmUploadLater`), so an upload whose client never confirmed is still recorded.\nimport type { FileHead } from \"@devultur/core\";\nimport { extractId, sanitizeFilename } from \"@devultur/core\";\nimport { ConvexError, v } from \"convex/values\";\nimport { internal } from \"./_generated/api\";\nimport type { Doc } from \"./_generated/dataModel\";\nimport type { ActionCtx } from \"./_generated/server\";\nimport { internalAction, internalMutation } from \"./_generated/server\";\nimport { getMediaClient } from \"./mediaClient\";\nimport { searchTextOf, type UploadHints, validUploadHints } from \"./mediaMeta\";\nimport { parseUploadKey, type UploadKey } from \"./uploadKeys\";\nimport { workerAction } from \"./workerErrors\";\n\n// Past the Worker's longest upload window (a multipart upload can run for 24 hours), so the scheduled check never runs\n// while the bytes are still on their way.\nexport const UPLOAD_CONFIRM_BACKSTOP_MS = 25 * 60 * 60 * 1000;\n\n/** The display name to store: the client's when it is the name in the key, else the key's own. */\nfunction displayName(uploadKey: UploadKey, filename: string | undefined): string {\n\tif (filename && sanitizeFilename(filename) === uploadKey.storedName) return filename;\n\treturn uploadKey.storedName;\n}\n\n// The hints are the uploading client's word, not the Worker's: positive integers up to 100,000; another value is\n// dropped (and logged) and the upload recorded without it. An image size the Worker read from the bytes wins over them.\nconst confirmArgs = {\n\tkey: v.string(),\n\t/** The original filename (display and download name). Ignored unless it is the one in the key. */\n\tfilename: v.optional(v.string()),\n\t/** Intrinsic size of an image, read in the browser. */\n\twidth: v.optional(v.number()),\n\theight: v.optional(v.number()),\n\t/** A PDF's page count, counted in the browser (`countPdfPages`). Recorded for PDFs only. */\n\tpageCount: v.optional(v.number()),\n};\n\ninterface ConfirmArgs extends UploadHints {\n\tkey: string;\n\tfilename?: string;\n}\n\n/** The size to record: the Worker's (read from the bytes) when it has one, else the client's hint. */\nfunction recordedSize(head: FileHead, hints: UploadHints): { width?: number; height?: number } {\n\tif (head.width && head.height) return { width: head.width, height: head.height };\n\treturn {\n\t\t...(hints.width !== undefined ? { width: hints.width } : {}),\n\t\t...(hints.height !== undefined ? { height: hints.height } : {}),\n\t};\n}\n\n/** HEADs the object and records it; `null` when no object is stored at `key` (yet). */\n// Annotated: the result of `internal.uploads.*` would otherwise type this module in terms of itself.\nasync function confirm(ctx: ActionCtx, args: ConfirmArgs): Promise<Doc<\"media\"> | null> {\n\tconst uploadKey = parseUploadKey(args.key);\n\tif (!uploadKey) {\n\t\tthrow new ConvexError({ code: \"invalid_upload_key\", message: `Not an upload key: ${args.key}`, status: 400 });\n\t}\n\tconst hints = validUploadHints(args);\n\n\tconst head: FileHead | null = await getMediaClient().files.head(args.key);\n\tif (!head) return null;\n\n\tconst isPdf = head.contentType === \"application/pdf\";\n\treturn ctx.runMutation(internal.uploads.recordUpload, {\n\t\tkey: uploadKey.id,\n\t\tobjectKey: args.key,\n\t\ttype: uploadKey.kind,\n\t\tvisibility: uploadKey.visibility,\n\t\tfilename: displayName(uploadKey, args.filename),\n\t\tcontentType: head.contentType,\n\t\tsizeBytes: head.size,\n\t\t...recordedSize(head, hints),\n\t\t...(isPdf && hints.pageCount !== undefined ? { pageCount: hints.pageCount } : {}),\n\t});\n}\n\n/**\n * Records an upload in the component's `media` table once its bytes are stored (call it after the PUT). Returns the\n * record, or `null` when nothing is stored at `key`. Idempotent: confirming twice updates the same record, and a\n * video's transcode state is left as it is.\n */\nexport const confirmUpload = workerAction({\n\targs: confirmArgs,\n\thandler: async (ctx, args): Promise<Doc<\"media\"> | null> => confirm(ctx, args),\n});\n\n/** The scheduled check `createUploadUrl` leaves behind: records the upload if it was stored and never confirmed. */\nexport const confirmUploadLater = internalAction({\n\targs: confirmArgs,\n\thandler: async (ctx, args) => {\n\t\tawait confirm(ctx, args);\n\t},\n});\n\nexport const recordUpload = internalMutation({\n\targs: {\n\t\tkey: v.string(),\n\t\tobjectKey: v.string(),\n\t\ttype: v.union(v.literal(\"video\"), v.literal(\"image\"), v.literal(\"file\")),\n\t\tvisibility: v.union(v.literal(\"public\"), v.literal(\"private\")),\n\t\tfilename: v.string(),\n\t\tcontentType: v.string(),\n\t\tsizeBytes: v.number(),\n\t\twidth: v.optional(v.number()),\n\t\theight: v.optional(v.number()),\n\t\tpageCount: v.optional(v.number()),\n\t},\n\thandler: async (ctx, args) => {\n\t\tconst existing = await ctx.db\n\t\t\t.query(\"media\")\n\t\t\t.withIndex(\"by_key\", (q) => q.eq(\"key\", args.key))\n\t\t\t.first();\n\t\tif (!existing) {\n\t\t\tconst searchText = searchTextOf(undefined, args.filename);\n\t\t\tconst id = await ctx.db.insert(\"media\", { ...args, searchText, createdAt: Date.now() });\n\t\t\treturn ctx.db.get(id);\n\t\t}\n\n\t\t// A video `processVideo` recorded first: fill in what only the upload knows, keep its transcode state (and any\n\t\t// title the app already set).\n\t\tawait ctx.db.patch(existing._id, { ...args, searchText: searchTextOf(existing.title, args.filename) });\n\t\treturn ctx.db.get(existing._id);\n\t},\n});\n\n/** Drops the record of a deleted image or file. A video's record goes with `deleteVideo`, not with one of its keys. */\nexport const forgetUpload = internalMutation({\n\targs: { key: v.string() },\n\thandler: async (ctx, args) => {\n\t\tif (!parseUploadKey(args.key)) return;\n\t\tconst record = await ctx.db\n\t\t\t.query(\"media\")\n\t\t\t.withIndex(\"by_key\", (q) => q.eq(\"key\", extractId(args.key)))\n\t\t\t.first();\n\t\tif (!record || record.type === \"video\") return;\n\t\tif (record.objectKey && record.objectKey !== args.key) return;\n\t\tawait ctx.db.delete(record._id);\n\t},\n});\n"]}
|
|
@@ -14,4 +14,3 @@ export interface DevulturErrorData {
|
|
|
14
14
|
export declare function toComponentError(error: unknown): unknown;
|
|
15
15
|
/** `action` whose handler rethrows Worker refusals as `ConvexError<DevulturErrorData>`. */
|
|
16
16
|
export declare const workerAction: typeof action;
|
|
17
|
-
//# sourceMappingURL=workerErrors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workerErrors.js","sourceRoot":"","sources":["../../src/component/workerErrors.ts"],"names":[],"mappings":"AAAA,mHAAmH;AACnH,sHAAsH;AACtH,0GAA0G;AAC1G,iGAAiG;AACjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAc,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAa7C,SAAS,UAAU,CAAC,KAAc;IACjC,IAAI,KAAK,YAAY,gBAAgB;QAAE,OAAO,IAAI,CAAC;IACnD,sFAAsF;IACtF,OAAO,CACN,KAAK,YAAY,KAAK;QACtB,KAAK,CAAC,IAAI,KAAK,kBAAkB;QACjC,OAAQ,KAA8B,CAAC,MAAM,KAAK,QAAQ,CAC1D,CAAC;AACH,CAAC;AAED,kHAAkH;AAClH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC9C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,IAAI,GAAsB;QAC/B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,cAAc;QAClC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,sEAAsE;QACtE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAA0B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzG,CAAC;IACF,OAAO,IAAI,WAAW,CAAC,IAAwB,CAAC,CAAC;AAClD,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,UAA0E,EAAE,EAAE,CAC3G,MAAM,CAAC;IACN,GAAG,UAAU;IACb,OAAO,EAAE,KAAK,EAAE,GAAY,EAAE,IAAa,EAAE,EAAE;QAC9C,IAAI,CAAC;YACJ,OAAO,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACF,CAAC;CACQ,CAAC,CAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"workerErrors.js","sourceRoot":"","sources":["../../src/component/workerErrors.ts"],"names":[],"mappings":"AAAA,mHAAmH;AACnH,sHAAsH;AACtH,0GAA0G;AAC1G,iGAAiG;AACjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAc,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAa7C,SAAS,UAAU,CAAC,KAAc;IACjC,IAAI,KAAK,YAAY,gBAAgB;QAAE,OAAO,IAAI,CAAC;IACnD,sFAAsF;IACtF,OAAO,CACN,KAAK,YAAY,KAAK;QACtB,KAAK,CAAC,IAAI,KAAK,kBAAkB;QACjC,OAAQ,KAA8B,CAAC,MAAM,KAAK,QAAQ,CAC1D,CAAC;AACH,CAAC;AAED,kHAAkH;AAClH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC9C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,IAAI,GAAsB;QAC/B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,cAAc;QAClC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,sEAAsE;QACtE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAA0B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzG,CAAC;IACF,OAAO,IAAI,WAAW,CAAC,IAAwB,CAAC,CAAC;AAClD,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,UAA0E,EAAE,EAAE,CAC3G,MAAM,CAAC;IACN,GAAG,UAAU;IACb,OAAO,EAAE,KAAK,EAAE,GAAY,EAAE,IAAa,EAAE,EAAE;QAC9C,IAAI,CAAC;YACJ,OAAO,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACF,CAAC;CACQ,CAAC,CAA6B,CAAC","sourcesContent":["// Worker errors across the component boundary. A plain `Error` thrown in a component function reaches the app as a\n// message only; a `ConvexError` keeps its `data`. Every component action is built with `workerAction`, which rethrows\n// the Worker's `DevulturApiError` as `ConvexError<DevulturErrorData>`, so the app reads `error.data.code`\n// (`retention_active`, `lock_conflict`, `compliance_extend_only`, ...) and `error.data.details`.\nimport { DevulturApiError } from \"@devultur/core\";\nimport { ConvexError, type Value } from \"convex/values\";\nimport { action } from \"./_generated/server\";\n\n/** `data` of the `ConvexError` a component action throws when the Worker refuses a request. */\nexport interface DevulturErrorData {\n\t/** The Worker's stable code (`retention_active`, `file_too_large`, ...), or `worker_error` when it sent none. */\n\tcode: string;\n\tmessage: string;\n\t/** HTTP status of the Worker's answer. */\n\tstatus: number;\n\t/** The rest of the Worker's error body, e.g. `{ key, mode, until, hold }` on `retention_active`. */\n\tdetails?: Record<string, Value>;\n}\n\nfunction isApiError(error: unknown): error is DevulturApiError {\n\tif (error instanceof DevulturApiError) return true;\n\t// A second copy of `@devultur/core` (bundling) fails `instanceof`; its shape doesn't.\n\treturn (\n\t\terror instanceof Error &&\n\t\terror.name === \"DevulturApiError\" &&\n\t\ttypeof (error as { status?: unknown }).status === \"number\"\n\t);\n}\n\n/** The error to rethrow: a Worker refusal becomes a `ConvexError` with its code; anything else passes through. */\nexport function toComponentError(error: unknown): unknown {\n\tif (!isApiError(error)) return error;\n\tconst data: DevulturErrorData = {\n\t\tcode: error.code ?? \"worker_error\",\n\t\tmessage: error.message,\n\t\tstatus: error.status,\n\t\t// JSON from the Worker: valid Convex values once `undefined` is gone.\n\t\t...(error.details ? { details: JSON.parse(JSON.stringify(error.details)) as Record<string, Value> } : {}),\n\t};\n\treturn new ConvexError(data as unknown as Value);\n}\n\n/** `action` whose handler rethrows Worker refusals as `ConvexError<DevulturErrorData>`. */\nexport const workerAction = ((definition: { handler: (ctx: unknown, args: unknown) => Promise<unknown> }) =>\n\taction({\n\t\t...definition,\n\t\thandler: async (ctx: unknown, args: unknown) => {\n\t\t\ttry {\n\t\t\t\treturn await definition.handler(ctx, args);\n\t\t\t} catch (error) {\n\t\t\t\tthrow toComponentError(error);\n\t\t\t}\n\t\t},\n\t} as never)) as unknown as typeof action;\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ import { ObjectLock, LockView, SetLockOptions, HoldPage, DevulturMedia } from '@
|
|
|
2
2
|
export { CaptionLocale, DevulturConfig, DevulturKind, DevulturMedia, ImageFit, ImageFormat, SecurityLevel, SpeechProvider, StorageProvider, TranscodePreset, TranscodeProvider, TranslationProvider, VideoModuleConfig, Visibility } from '@devultur/core';
|
|
3
3
|
import { FunctionReference, FunctionVisibility, DefaultFunctionArgs, GenericQueryCtx, GenericDataModel, GenericMutationCtx, GenericActionCtx, RegisteredQuery, RegisteredMutation, RegisteredAction, PaginationOptions, PaginationResult } from 'convex/server';
|
|
4
4
|
import { PropertyValidators, Value, ConvexError } from 'convex/values';
|
|
5
|
-
import { D as DevulturComponentConfig, M as MediaRecord } from './types-
|
|
6
|
-
export { P as ProgressRecord } from './types-
|
|
5
|
+
import { D as DevulturComponentConfig, M as MediaRecord } from './types-DZxN6Eij.js';
|
|
6
|
+
export { P as ProgressRecord } from './types-DZxN6Eij.js';
|
|
7
7
|
export { a as DEVULTUR_ERROR_CODES, b as DevulturErrorCode, c as DevulturErrorDetails, d as DevulturErrorLabel, D as DevulturErrorLabels, e as describeDevulturError, f as devulturErrorLabels, i as isDevulturErrorCode } from './error-labels-D0Vbp-qA.js';
|
|
8
8
|
export { dv } from './validators.js';
|
|
9
9
|
|
|
@@ -290,9 +290,10 @@ type RegisteredFunctions<Visibility extends FunctionVisibility> = {
|
|
|
290
290
|
};
|
|
291
291
|
|
|
292
292
|
type DevulturComponent = ComponentApi;
|
|
293
|
-
type
|
|
294
|
-
type
|
|
295
|
-
type
|
|
293
|
+
type Runners = GenericActionCtx<GenericDataModel>;
|
|
294
|
+
type QueryCtx = Pick<Runners, "runQuery">;
|
|
295
|
+
type MutationCtx = Pick<Runners, "runMutation">;
|
|
296
|
+
type ActionCtx = Pick<Runners, "runAction">;
|
|
296
297
|
type UploadUrlArgs = {
|
|
297
298
|
filename: string;
|
|
298
299
|
contentType: string;
|
|
@@ -421,8 +422,11 @@ type DevulturOperation = {
|
|
|
421
422
|
args: ArgsOf<ExposedFunctions[Name]>;
|
|
422
423
|
};
|
|
423
424
|
}[ExposedFunctionName];
|
|
424
|
-
/**
|
|
425
|
-
|
|
425
|
+
/**
|
|
426
|
+
* The ctx of the guarded function: a query's, a mutation's or an action's (all of them have `auth`). Of any data
|
|
427
|
+
* model, so a guard typed with the app's own ctx (`QueryCtx | MutationCtx | ActionCtx` from `_generated/server`) fits.
|
|
428
|
+
*/
|
|
429
|
+
type DevulturGuardCtx<DataModel extends GenericDataModel = any> = GenericQueryCtx<DataModel> | GenericMutationCtx<DataModel> | GenericActionCtx<DataModel>;
|
|
426
430
|
/**
|
|
427
431
|
* Throws to deny the call. May return what it learned about the caller: a `userId` becomes the subject of the token
|
|
428
432
|
* `issueViewerToken` issues, and the only user the progress functions act for (another `userId` in their arguments is
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { A as AttachmentLabels, M as MediaLibraryLabels, a as MediaPickerLabels, P as PreviewLabels } from '../preview-labels-
|
|
1
|
+
import { A as AttachmentLabels, M as MediaLibraryLabels, a as MediaPickerLabels, P as PreviewLabels } from '../preview-labels-B7HNa7Va.js';
|
|
2
2
|
import { D as DevulturErrorLabels } from '../error-labels-D0Vbp-qA.js';
|
|
3
|
-
import '../types-
|
|
3
|
+
import '../types-DZxN6Eij.js';
|
|
4
4
|
import '@devultur/core';
|
|
5
|
+
import 'convex/values';
|
|
6
|
+
import 'convex/server';
|
|
5
7
|
|
|
6
8
|
declare const devulturErrorLabels: DevulturErrorLabels;
|
|
7
9
|
declare const attachmentLabels: AttachmentLabels;
|
package/dist/locales/es.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { A as AttachmentLabels, M as MediaLibraryLabels, a as MediaPickerLabels, P as PreviewLabels } from '../preview-labels-
|
|
1
|
+
import { A as AttachmentLabels, M as MediaLibraryLabels, a as MediaPickerLabels, P as PreviewLabels } from '../preview-labels-B7HNa7Va.js';
|
|
2
2
|
import { D as DevulturErrorLabels } from '../error-labels-D0Vbp-qA.js';
|
|
3
|
-
import '../types-
|
|
3
|
+
import '../types-DZxN6Eij.js';
|
|
4
4
|
import '@devultur/core';
|
|
5
|
+
import 'convex/values';
|
|
6
|
+
import 'convex/server';
|
|
5
7
|
|
|
6
8
|
declare const devulturErrorLabels: DevulturErrorLabels;
|
|
7
9
|
declare const previewLabels: PreviewLabels;
|
package/dist/react.d.ts
CHANGED
|
@@ -3,10 +3,10 @@ import { DevulturMedia, MediaUrlOptions, Visibility, ProcessingPhase, FailureRea
|
|
|
3
3
|
import { BakeOutputFormat, MediaUploadState, MediaUploadError, UploadProgress } from '@devultur/react';
|
|
4
4
|
export { MediaUploadError, MediaUploadState, UploadProgress } from '@devultur/react';
|
|
5
5
|
import { FunctionReference } from 'convex/server';
|
|
6
|
-
import { A as AttachmentLabels, M as MediaLibraryLabels, P as PreviewLabels, a as MediaPickerLabels, b as MediaFetchError } from './preview-labels-
|
|
7
|
-
export { c as AttachmentKind, d as MediaFetchErrorCode, e as defaultAttachmentLabels, f as defaultMediaLibraryLabels, g as defaultMediaPickerLabels, h as defaultPreviewLabels, i as formatDuration, j as formatFileSize } from './preview-labels-
|
|
6
|
+
import { A as AttachmentLabels, M as MediaLibraryLabels, P as PreviewLabels, a as MediaPickerLabels, b as MediaFetchError } from './preview-labels-B7HNa7Va.js';
|
|
7
|
+
export { c as AttachmentKind, d as MediaFetchErrorCode, e as defaultAttachmentLabels, f as defaultMediaLibraryLabels, g as defaultMediaPickerLabels, h as defaultPreviewLabels, i as formatDuration, j as formatFileSize } from './preview-labels-B7HNa7Va.js';
|
|
8
8
|
import { Value } from 'convex/values';
|
|
9
|
-
import { M as MediaRecord } from './types-
|
|
9
|
+
import { M as MediaRecord } from './types-DZxN6Eij.js';
|
|
10
10
|
import { P as PdfjsLoader } from './pdf-render-BwJGagvz.js';
|
|
11
11
|
export { a as PdfjsModule } from './pdf-render-BwJGagvz.js';
|
|
12
12
|
|
|
@@ -25,8 +25,12 @@ type TokenStatus = "idle" | "loading" | "ready" | "error";
|
|
|
25
25
|
|
|
26
26
|
/** Transform/delivery options for media URLs (without `token`, which the context injects). */
|
|
27
27
|
type MediaRenderOptions = Omit<MediaUrlOptions, "token">;
|
|
28
|
+
/**
|
|
29
|
+
* The viewer token action: the component's `issueViewerToken` (as `defineDevulturFunctions` or `exposeApi` export it,
|
|
30
|
+
* where `sessionSecret` is optional) or an app's own, which may require it. The providers always send it.
|
|
31
|
+
*/
|
|
28
32
|
type ViewerTokenAction = FunctionReference<"action", "public", {
|
|
29
|
-
sessionSecret
|
|
33
|
+
sessionSecret?: string;
|
|
30
34
|
}>;
|
|
31
35
|
interface MediaSession {
|
|
32
36
|
token: string | null;
|
|
@@ -442,12 +446,13 @@ type MediaPickerProps = CommonProps & (SingleValueProps | MultipleValueProps);
|
|
|
442
446
|
* @example
|
|
443
447
|
* <MediaPicker accept={["image/*"]} value={cover} onChange={setCover} />
|
|
444
448
|
*/
|
|
445
|
-
declare function
|
|
446
|
-
declare
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
449
|
+
declare function MediaPickerRoot(props: MediaPickerProps): React.JSX.Element;
|
|
450
|
+
declare const MediaPicker: typeof MediaPickerRoot & {
|
|
451
|
+
displayName: string;
|
|
452
|
+
Upload: typeof MediaPickerUpload;
|
|
453
|
+
Library: typeof MediaPickerLibrary;
|
|
454
|
+
Selection: typeof MediaPickerSelection;
|
|
455
|
+
};
|
|
451
456
|
|
|
452
457
|
/** A file's name and type, or a record's filename and content type. */
|
|
453
458
|
interface Candidate {
|
package/dist/react.js
CHANGED
|
@@ -793,7 +793,7 @@ function mergePreviewLabels(...sources) {
|
|
|
793
793
|
|
|
794
794
|
// src/pdf-context.tsx
|
|
795
795
|
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
796
|
-
var PdfPreviewContext = React7.createContext({});
|
|
796
|
+
var PdfPreviewContext = /* @__PURE__ */ React7.createContext({});
|
|
797
797
|
function PdfPreviewProvider({
|
|
798
798
|
pdfjs,
|
|
799
799
|
workerSrc,
|
|
@@ -1526,7 +1526,7 @@ function recordMatchesAccept(record, accept) {
|
|
|
1526
1526
|
|
|
1527
1527
|
// src/media-picker-context.ts
|
|
1528
1528
|
import React15 from "react";
|
|
1529
|
-
var MediaPickerContext = React15.createContext(null);
|
|
1529
|
+
var MediaPickerContext = /* @__PURE__ */ React15.createContext(null);
|
|
1530
1530
|
function useMediaPicker() {
|
|
1531
1531
|
const picker = React15.use(MediaPickerContext);
|
|
1532
1532
|
if (!picker) throw new Error("useMediaPicker must be used within <MediaPicker>");
|
|
@@ -1969,7 +1969,7 @@ function emit(props, next) {
|
|
|
1969
1969
|
props.onChange(next[0] ?? null);
|
|
1970
1970
|
}
|
|
1971
1971
|
var isSame = (a, b) => a.id === b.id;
|
|
1972
|
-
function
|
|
1972
|
+
function MediaPickerRoot(props) {
|
|
1973
1973
|
const isMultiple = props.multiple ?? false;
|
|
1974
1974
|
const labels = React21.useMemo(() => mergeMediaPickerLabels(props.labels), [props.labels]);
|
|
1975
1975
|
const accept = uploadAcceptOf(props.accept, props.type);
|
|
@@ -2089,15 +2089,18 @@ function MediaPicker(props) {
|
|
|
2089
2089
|
/* @__PURE__ */ jsx15("div", { role: "status", "aria-live": "polite", style: VISUALLY_HIDDEN, children: announcement })
|
|
2090
2090
|
] }) });
|
|
2091
2091
|
}
|
|
2092
|
-
MediaPicker
|
|
2093
|
-
MediaPicker
|
|
2094
|
-
|
|
2092
|
+
var MediaPicker = /* @__PURE__ */ Object.assign(MediaPickerRoot, {
|
|
2093
|
+
displayName: "MediaPicker",
|
|
2094
|
+
Upload: MediaPickerUpload,
|
|
2095
|
+
Library: MediaPickerLibrary,
|
|
2096
|
+
Selection: MediaPickerSelection
|
|
2097
|
+
});
|
|
2095
2098
|
|
|
2096
2099
|
// src/react.tsx
|
|
2097
2100
|
import { jsx as jsx16 } from "react/jsx-runtime";
|
|
2098
|
-
var DevulturContext = React22.createContext(null);
|
|
2099
|
-
var DevulturApiContext = React22.createContext(null);
|
|
2100
|
-
var ProgressContext = React22.createContext(null);
|
|
2101
|
+
var DevulturContext = /* @__PURE__ */ React22.createContext(null);
|
|
2102
|
+
var DevulturApiContext = /* @__PURE__ */ React22.createContext(null);
|
|
2103
|
+
var ProgressContext = /* @__PURE__ */ React22.createContext(null);
|
|
2101
2104
|
function DevulturProvider({ api, baseUrl, tokenArgs, issueViewerToken, children }) {
|
|
2102
2105
|
const session = useMediaSession({ issueViewerToken: issueViewerToken ?? api.issueViewerToken, tokenArgs, baseUrl });
|
|
2103
2106
|
const createUploadUrlAction = useAction2(api.createUploadUrl);
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { VideoModuleConfig, ObjectLock } from '@devultur/core';
|
|
2
|
+
import * as convex_values from 'convex/values';
|
|
3
|
+
import { Infer } from 'convex/values';
|
|
4
|
+
import * as convex_server from 'convex/server';
|
|
5
|
+
|
|
6
|
+
declare const _default: convex_server.SchemaDefinition<{
|
|
7
|
+
media: convex_server.TableDefinition<convex_values.VObject<{
|
|
8
|
+
alt?: string | undefined;
|
|
9
|
+
tags?: string[] | undefined;
|
|
10
|
+
title?: string | undefined;
|
|
11
|
+
visibility?: "public" | "private" | undefined;
|
|
12
|
+
captionLocales?: string[] | undefined;
|
|
13
|
+
captionsPending?: boolean | undefined;
|
|
14
|
+
duration?: number | undefined;
|
|
15
|
+
failureReason?: "internal" | "invalid_input" | "unsupported_codec" | "timeout" | "capacity" | undefined;
|
|
16
|
+
playlistUrl?: string | undefined;
|
|
17
|
+
retriable?: boolean | undefined;
|
|
18
|
+
thumbnailKey?: string | undefined;
|
|
19
|
+
transcodeError?: string | undefined;
|
|
20
|
+
transcodeProgress?: {
|
|
21
|
+
phase?: "captioning" | "downloading" | "encoding" | "uploading" | undefined;
|
|
22
|
+
current: number;
|
|
23
|
+
total: number;
|
|
24
|
+
} | undefined;
|
|
25
|
+
transcodeStatus?: "queued" | "transcoding" | "captioning" | "ready" | "failed" | undefined;
|
|
26
|
+
height?: number | undefined;
|
|
27
|
+
pageCount?: number | undefined;
|
|
28
|
+
width?: number | undefined;
|
|
29
|
+
objectKey?: string | undefined;
|
|
30
|
+
searchText?: string | undefined;
|
|
31
|
+
renditions?: {
|
|
32
|
+
height?: number | undefined;
|
|
33
|
+
width?: number | undefined;
|
|
34
|
+
key: string;
|
|
35
|
+
variant: string;
|
|
36
|
+
kind: "hls" | "mp4";
|
|
37
|
+
rung: string;
|
|
38
|
+
url: string;
|
|
39
|
+
}[] | undefined;
|
|
40
|
+
posterUrls?: {
|
|
41
|
+
jpg?: string | undefined;
|
|
42
|
+
avif?: string | undefined;
|
|
43
|
+
} | undefined;
|
|
44
|
+
hasAudio?: boolean | undefined;
|
|
45
|
+
storyboardKey?: string | undefined;
|
|
46
|
+
type: "video" | "image" | "file";
|
|
47
|
+
key: string;
|
|
48
|
+
contentType: string;
|
|
49
|
+
filename: string;
|
|
50
|
+
sizeBytes: number;
|
|
51
|
+
createdAt: number;
|
|
52
|
+
}, {
|
|
53
|
+
captionLocales: convex_values.VArray<string[] | undefined, convex_values.VString<string, "required">, "optional">;
|
|
54
|
+
captionsPending: convex_values.VBoolean<boolean | undefined, "optional">;
|
|
55
|
+
duration: convex_values.VFloat64<number | undefined, "optional">;
|
|
56
|
+
createdAt: convex_values.VFloat64<number, "required">;
|
|
57
|
+
renditions: convex_values.VArray<{
|
|
58
|
+
height?: number | undefined;
|
|
59
|
+
width?: number | undefined;
|
|
60
|
+
key: string;
|
|
61
|
+
variant: string;
|
|
62
|
+
kind: "hls" | "mp4";
|
|
63
|
+
rung: string;
|
|
64
|
+
url: string;
|
|
65
|
+
}[] | undefined, convex_values.VObject<{
|
|
66
|
+
height?: number | undefined;
|
|
67
|
+
width?: number | undefined;
|
|
68
|
+
key: string;
|
|
69
|
+
variant: string;
|
|
70
|
+
kind: "hls" | "mp4";
|
|
71
|
+
rung: string;
|
|
72
|
+
url: string;
|
|
73
|
+
}, {
|
|
74
|
+
variant: convex_values.VString<string, "required">;
|
|
75
|
+
kind: convex_values.VUnion<"hls" | "mp4", [convex_values.VLiteral<"hls", "required">, convex_values.VLiteral<"mp4", "required">], "required", never>;
|
|
76
|
+
rung: convex_values.VString<string, "required">;
|
|
77
|
+
key: convex_values.VString<string, "required">;
|
|
78
|
+
width: convex_values.VFloat64<number | undefined, "optional">;
|
|
79
|
+
height: convex_values.VFloat64<number | undefined, "optional">;
|
|
80
|
+
url: convex_values.VString<string, "required">;
|
|
81
|
+
}, "required", "key" | "height" | "width" | "variant" | "kind" | "rung" | "url">, "optional">;
|
|
82
|
+
posterUrls: convex_values.VObject<{
|
|
83
|
+
jpg?: string | undefined;
|
|
84
|
+
avif?: string | undefined;
|
|
85
|
+
} | undefined, {
|
|
86
|
+
jpg: convex_values.VString<string | undefined, "optional">;
|
|
87
|
+
avif: convex_values.VString<string | undefined, "optional">;
|
|
88
|
+
}, "optional", "jpg" | "avif">;
|
|
89
|
+
hasAudio: convex_values.VBoolean<boolean | undefined, "optional">;
|
|
90
|
+
storyboardKey: convex_values.VString<string | undefined, "optional">;
|
|
91
|
+
key: convex_values.VString<string, "required">;
|
|
92
|
+
type: convex_values.VUnion<"video" | "image" | "file", [convex_values.VLiteral<"video", "required">, convex_values.VLiteral<"image", "required">, convex_values.VLiteral<"file", "required">], "required", never>;
|
|
93
|
+
filename: convex_values.VString<string, "required">;
|
|
94
|
+
contentType: convex_values.VString<string, "required">;
|
|
95
|
+
sizeBytes: convex_values.VFloat64<number, "required">;
|
|
96
|
+
visibility: convex_values.VUnion<"public" | "private" | undefined, [convex_values.VLiteral<"public", "required">, convex_values.VLiteral<"private", "required">], "optional", never>;
|
|
97
|
+
objectKey: convex_values.VString<string | undefined, "optional">;
|
|
98
|
+
width: convex_values.VFloat64<number | undefined, "optional">;
|
|
99
|
+
height: convex_values.VFloat64<number | undefined, "optional">;
|
|
100
|
+
pageCount: convex_values.VFloat64<number | undefined, "optional">;
|
|
101
|
+
title: convex_values.VString<string | undefined, "optional">;
|
|
102
|
+
alt: convex_values.VString<string | undefined, "optional">;
|
|
103
|
+
tags: convex_values.VArray<string[] | undefined, convex_values.VString<string, "required">, "optional">;
|
|
104
|
+
searchText: convex_values.VString<string | undefined, "optional">;
|
|
105
|
+
transcodeStatus: convex_values.VUnion<"queued" | "transcoding" | "captioning" | "ready" | "failed" | undefined, [convex_values.VLiteral<"queued", "required">, convex_values.VLiteral<"transcoding", "required">, convex_values.VLiteral<"captioning", "required">, convex_values.VLiteral<"ready", "required">, convex_values.VLiteral<"failed", "required">], "optional", never>;
|
|
106
|
+
transcodeProgress: convex_values.VObject<{
|
|
107
|
+
phase?: "captioning" | "downloading" | "encoding" | "uploading" | undefined;
|
|
108
|
+
current: number;
|
|
109
|
+
total: number;
|
|
110
|
+
} | undefined, {
|
|
111
|
+
current: convex_values.VFloat64<number, "required">;
|
|
112
|
+
total: convex_values.VFloat64<number, "required">;
|
|
113
|
+
phase: convex_values.VUnion<"captioning" | "downloading" | "encoding" | "uploading" | undefined, [convex_values.VLiteral<"downloading", "required">, convex_values.VLiteral<"encoding", "required">, convex_values.VLiteral<"uploading", "required">, convex_values.VLiteral<"captioning", "required">], "optional", never>;
|
|
114
|
+
}, "optional", "current" | "total" | "phase">;
|
|
115
|
+
transcodeError: convex_values.VString<string | undefined, "optional">;
|
|
116
|
+
failureReason: convex_values.VUnion<"internal" | "invalid_input" | "unsupported_codec" | "timeout" | "capacity" | undefined, [convex_values.VLiteral<"invalid_input", "required">, convex_values.VLiteral<"unsupported_codec", "required">, convex_values.VLiteral<"timeout", "required">, convex_values.VLiteral<"capacity", "required">, convex_values.VLiteral<"internal", "required">], "optional", never>;
|
|
117
|
+
retriable: convex_values.VBoolean<boolean | undefined, "optional">;
|
|
118
|
+
playlistUrl: convex_values.VString<string | undefined, "optional">;
|
|
119
|
+
thumbnailKey: convex_values.VString<string | undefined, "optional">;
|
|
120
|
+
}, "required", "type" | "key" | "alt" | "tags" | "title" | "contentType" | "filename" | "sizeBytes" | "visibility" | "captionLocales" | "captionsPending" | "duration" | "failureReason" | "playlistUrl" | "retriable" | "thumbnailKey" | "transcodeError" | "transcodeProgress" | "transcodeStatus" | "height" | "pageCount" | "width" | "objectKey" | "searchText" | "createdAt" | "renditions" | "posterUrls" | "hasAudio" | "storyboardKey" | "transcodeProgress.current" | "transcodeProgress.total" | "transcodeProgress.phase" | "posterUrls.jpg" | "posterUrls.avif">, {
|
|
121
|
+
by_key: ["key", "_creationTime"];
|
|
122
|
+
by_type: ["type", "_creationTime"];
|
|
123
|
+
}, {
|
|
124
|
+
search_text: {
|
|
125
|
+
searchField: "searchText";
|
|
126
|
+
filterFields: "type";
|
|
127
|
+
};
|
|
128
|
+
}, {}>;
|
|
129
|
+
captions: convex_server.TableDefinition<convex_values.VObject<{
|
|
130
|
+
srtUrl?: string | undefined;
|
|
131
|
+
mediaKey: string;
|
|
132
|
+
locale: string;
|
|
133
|
+
vttUrl: string;
|
|
134
|
+
createdAt: number;
|
|
135
|
+
}, {
|
|
136
|
+
mediaKey: convex_values.VString<string, "required">;
|
|
137
|
+
locale: convex_values.VString<string, "required">;
|
|
138
|
+
vttUrl: convex_values.VString<string, "required">;
|
|
139
|
+
srtUrl: convex_values.VString<string | undefined, "optional">;
|
|
140
|
+
createdAt: convex_values.VFloat64<number, "required">;
|
|
141
|
+
}, "required", "mediaKey" | "locale" | "srtUrl" | "vttUrl" | "createdAt">, {
|
|
142
|
+
by_media: ["mediaKey", "_creationTime"];
|
|
143
|
+
by_media_locale: ["mediaKey", "locale", "_creationTime"];
|
|
144
|
+
}, {}, {}>;
|
|
145
|
+
progress: convex_server.TableDefinition<convex_values.VObject<{
|
|
146
|
+
completedAt?: number | undefined;
|
|
147
|
+
watchedPercent?: number | undefined;
|
|
148
|
+
videoId: string;
|
|
149
|
+
userId: string;
|
|
150
|
+
lastPosition: number;
|
|
151
|
+
updatedAt: number;
|
|
152
|
+
}, {
|
|
153
|
+
userId: convex_values.VString<string, "required">;
|
|
154
|
+
videoId: convex_values.VString<string, "required">;
|
|
155
|
+
lastPosition: convex_values.VFloat64<number, "required">;
|
|
156
|
+
completedAt: convex_values.VFloat64<number | undefined, "optional">;
|
|
157
|
+
watchedPercent: convex_values.VFloat64<number | undefined, "optional">;
|
|
158
|
+
updatedAt: convex_values.VFloat64<number, "required">;
|
|
159
|
+
}, "required", "videoId" | "userId" | "lastPosition" | "completedAt" | "watchedPercent" | "updatedAt">, {
|
|
160
|
+
by_user_video: ["userId", "videoId", "_creationTime"];
|
|
161
|
+
}, {}, {}>;
|
|
162
|
+
}, true>;
|
|
163
|
+
|
|
164
|
+
interface DevulturComponentConfig {
|
|
165
|
+
video?: VideoModuleConfig;
|
|
166
|
+
/**
|
|
167
|
+
* Lock every upload through the exposed `createUploadUrl` gets (retention and/or hold). Set here, on your server:
|
|
168
|
+
* the browser never chooses a lock. To lock per upload, call `devultur.createUploadUrl(ctx, { lock })` from your
|
|
169
|
+
* own function.
|
|
170
|
+
*/
|
|
171
|
+
upload?: {
|
|
172
|
+
lock?: ObjectLock;
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* A media record as the component stores it (without the system fields), inferred from the schema's `media` table so
|
|
177
|
+
* it has every field the component writes: the transcode's progress phase, outputs (`renditions`, `posterUrls`,
|
|
178
|
+
* `hasAudio`) and failure (`failureReason`, `retriable`), the metadata, the upload hints. The schema documents each.
|
|
179
|
+
*/
|
|
180
|
+
type MediaRecord = Infer<typeof _default.tables.media.validator>;
|
|
181
|
+
interface ProgressRecord {
|
|
182
|
+
userId: string;
|
|
183
|
+
videoId: string;
|
|
184
|
+
lastPosition: number;
|
|
185
|
+
completedAt?: number;
|
|
186
|
+
watchedPercent?: number;
|
|
187
|
+
updatedAt: number;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export type { DevulturComponentConfig as D, MediaRecord as M, ProgressRecord as P };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devultur/convex",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.3",
|
|
4
4
|
"description": "Convex component for Devultur media: media records, uploads, transcodes, watch progress and React bindings",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"convex",
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"url": "https://github.com/devultur/devultur/issues"
|
|
23
23
|
},
|
|
24
24
|
"type": "module",
|
|
25
|
+
"sideEffects": false,
|
|
25
26
|
"exports": {
|
|
26
27
|
".": {
|
|
27
28
|
"types": "./dist/index.d.ts",
|
|
@@ -63,8 +64,8 @@
|
|
|
63
64
|
"dist"
|
|
64
65
|
],
|
|
65
66
|
"dependencies": {
|
|
66
|
-
"@devultur/core": "1.4.
|
|
67
|
-
"@devultur/react": "1.4.
|
|
67
|
+
"@devultur/core": "1.4.3",
|
|
68
|
+
"@devultur/react": "1.4.3"
|
|
68
69
|
},
|
|
69
70
|
"peerDependencies": {
|
|
70
71
|
"convex": ">=1.25.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/component/_generated/api.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,KAAK,IAAI,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,KAAK,OAAO,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,KAAK,IAAI,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,KAAK,WAAW,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,KAAK,SAAS,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,KAAK,OAAO,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,KAAK,UAAU,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,KAAK,OAAO,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,KAAK,YAAY,MAAM,oBAAoB,CAAC;AAExD,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAGvB,QAAA,MAAM,OAAO,EAAE,cAAc,CAAC;IAC5B,IAAI,EAAE,OAAO,IAAI,CAAC;IAClB,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,IAAI,EAAE,OAAO,IAAI,CAAC;IAClB,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,WAAW,EAAE,OAAO,WAAW,CAAC;IAChC,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,MAAM,EAAE,OAAO,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,YAAY,CAAC;CACnC,CAAiB,CAAC;AAEnB;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,EAAE,SAAS,CACzB,OAAO,OAAO,EACd,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CACjB,CAAC;AAElB;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,EAAE,SAAS,CAC9B,OAAO,OAAO,EACd,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CACnB,CAAC;AAElB,eAAO,MAAM,UAAU,EAAqC,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/component/_generated/component.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dataModel.d.ts","sourceRoot":"","sources":["../../../src/component/_generated/dataModel.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,6BAA6B,EAC7B,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;AAE1D;;;;GAIG;AACH,MAAM,MAAM,GAAG,CAAC,SAAS,SAAS,UAAU,IAAI,cAAc,CAC5D,SAAS,EACT,SAAS,CACV,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,EAAE,CAAC,SAAS,SAAS,UAAU,GAAG,gBAAgB,IAC5D,SAAS,CAAC,SAAS,CAAC,CAAC;AAEvB;;;;;;;;GAQG;AACH,MAAM,MAAM,SAAS,GAAG,6BAA6B,CAAC,OAAO,MAAM,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/component/_generated/server.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,eAAe,CAAC;AAUvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH,KAAK,GAAG,GAAG;IACT,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,EAAE,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAgB,CAAC;AAErE;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,SAAS,EAAE,UAAU,CACxC,CAAC;AAEvB;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,EAAE,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAmB,CAAC;AAE9E;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAAC,SAAS,EAAE,UAAU,CAC3C,CAAC;AAE1B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,MAAM,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAiB,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,SAAS,EAAE,UAAU,CACzC,CAAC;AAExB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,EAAE,iBAAqC,CAAC;AAC/D,eAAO,MAAM,GAAG,EAAE,GAAmC,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAExD;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;AAE9D;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"convex.config.d.ts","sourceRoot":"","sources":["../../src/component/convex.config.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,SAAS;;;EAKb,CAAC;AAEH,eAAe,SAAS,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/component/http.ts"],"names":[],"mappings":"AAKA,QAAA,MAAM,IAAI,oCAAe,CAAC;AAqB1B,eAAe,IAAI,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../../src/component/library.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAA2B,MAAM,eAAe,CAAC;AAGvG,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAKjE,KAAK,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAItC,eAAO,MAAM,mBAAmB;;;CAAuC,CAAC;AAExE,uFAAuF;AACvF,wBAAgB,eAAe,CAC9B,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,SAAS,GAAG,SAAS,EAC3B,cAAc,EAAE,iBAAiB,GAC/B,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAGzC;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAetB,CAAC;AAEH,UAAU,cAAc;IACvB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,MAAM,EAAE,OAAO,CAAC;CAChB;AA0BD;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;2BAG7B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;2BAGlC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/component/lock.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,OAAO;;8CAGlB,CAAC;AAEH,eAAO,MAAM,OAAO;;;;;;;;8CAWlB,CAAC;AAcH,eAAO,MAAM,OAAO;;;;;aARG,MAAM;gBAAU,MAAM;;;GAW3C,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;aAbD,MAAM;gBAAU,MAAM;;;GAgB3C,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lockValidators.d.ts","sourceRoot":"","sources":["../../src/component/lockValidators.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB,0MAA4D,CAAC;AAChG,eAAO,MAAM,oBAAoB,0MAA4D,CAAC;AAE9F,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;0HAU9B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mediaClient.d.ts","sourceRoot":"","sources":["../../src/component/mediaClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGvE,wBAAgB,cAAc,IAAI,YAAY,CAE7C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mediaMeta.d.ts","sourceRoot":"","sources":["../../src/component/mediaMeta.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,iBAAiB;;;;;IAK7B,+DAA+D;;CAEtD,CAAC;AAEX,MAAM,WAAW,WAAW;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,iHAAiH;AACjH,MAAM,WAAW,cAAc;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAUD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAYhE;AAQD,wGAAwG;AACxG,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAgBtD;AAED,2GAA2G;AAC3G,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAMpE;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED,UAAU,gBAAgB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,yHAAyH;AACzH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAGnF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/component/metadata.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAoB1B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/component/public.ts"],"names":[],"mappings":"AAqCA,eAAO,MAAM,gBAAgB;;;;;;GAY3B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;wDAoB1B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;iBAQ5B,CAAC;AAEH,eAAO,MAAM,WAAW;;;uDAUtB,CAAC;AAKH,eAAO,MAAM,mBAAmB;;iBAe9B,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;wDAyEvB,CAAC;AAIH,eAAO,MAAM,YAAY;;iBAgBvB,CAAC;AAIH,eAAO,MAAM,sBAAsB;;iBAkBjC,CAAC;AAIH,eAAO,MAAM,mBAAmB;;iBAmB9B,CAAC;AAIH,eAAO,MAAM,WAAW;;;;;;uDAqBtB,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;iBAuCtB,CAAC;AAIH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAQxB,CAAC;AAGH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KASpB,CAAC;AAEH,6FAA6F;AAC7F,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAMxB,CAAC;AAIH,eAAO,MAAM,aAAa;;;;;0DAmBxB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;KAQ9B,CAAC;AAWH,eAAO,MAAM,YAAY;;;;0DAgBvB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;UAKvB,CAAC;AAEH,eAAO,MAAM,YAAY;;;0DAmBvB,CAAC;AAEH,eAAO,MAAM,aAAa;;;iBAQxB,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;aAK5B,CAAC;AAIH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgG7B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/component/schema.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBjC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,wBAwFG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uploadKeys.d.ts","sourceRoot":"","sources":["../../src/component/uploadKeys.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAI/D,MAAM,WAAW,SAAS;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAa5D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uploads.d.ts","sourceRoot":"","sources":["../../src/component/uploads.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,0BAA0B,QAAsB,CAAC;AA6D9D;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAGxB,CAAC;AAEH,oHAAoH;AACpH,eAAO,MAAM,kBAAkB;;;;;;iBAK7B,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA6BvB,CAAC;AAEH,uHAAuH;AACvH,eAAO,MAAM,YAAY;;iBAYvB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workerErrors.d.ts","sourceRoot":"","sources":["../../src/component/workerErrors.ts"],"names":[],"mappings":"AAKA,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,+FAA+F;AAC/F,MAAM,WAAW,iBAAiB;IACjC,iHAAiH;IACjH,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,oGAAoG;IACpG,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CAChC;AAYD,kHAAkH;AAClH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAUxD;AAED,2FAA2F;AAC3F,eAAO,MAAM,YAAY,EAUG,OAAO,MAAM,CAAC"}
|
package/dist/types-LrusGVDf.d.ts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { VideoModuleConfig, ObjectLock } from '@devultur/core';
|
|
2
|
-
|
|
3
|
-
interface DevulturComponentConfig {
|
|
4
|
-
video?: VideoModuleConfig;
|
|
5
|
-
/**
|
|
6
|
-
* Lock every upload through the exposed `createUploadUrl` gets (retention and/or hold). Set here, on your server:
|
|
7
|
-
* the browser never chooses a lock. To lock per upload, call `devultur.createUploadUrl(ctx, { lock })` from your
|
|
8
|
-
* own function.
|
|
9
|
-
*/
|
|
10
|
-
upload?: {
|
|
11
|
-
lock?: ObjectLock;
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
interface MediaRecord {
|
|
15
|
-
/** The media id (the `id` of its `DevulturMedia`), for every kind. */
|
|
16
|
-
key: string;
|
|
17
|
-
type: "video" | "image" | "file";
|
|
18
|
-
filename: string;
|
|
19
|
-
contentType: string;
|
|
20
|
-
sizeBytes: number;
|
|
21
|
-
/** Set by a confirmed upload; unset on records from before 1.1.0. */
|
|
22
|
-
visibility?: "public" | "private";
|
|
23
|
-
/** Key of the uploaded object (a video's raw file). Set by a confirmed upload. */
|
|
24
|
-
objectKey?: string;
|
|
25
|
-
/** An image's intrinsic size: read by the Worker from the bytes when it can, else the uploading client's hint. */
|
|
26
|
-
width?: number;
|
|
27
|
-
height?: number;
|
|
28
|
-
/** A PDF's page count, as the uploading client reported it (a hint). */
|
|
29
|
-
pageCount?: number;
|
|
30
|
-
/** Set by the app with `updateMediaMeta`. */
|
|
31
|
-
title?: string;
|
|
32
|
-
alt?: string;
|
|
33
|
-
tags?: string[];
|
|
34
|
-
/** `title + " " + filename`, lowercased, for search. Unset on records from before 1.4.0. */
|
|
35
|
-
searchText?: string;
|
|
36
|
-
transcodeStatus?: "queued" | "transcoding" | "captioning" | "ready" | "failed";
|
|
37
|
-
transcodeProgress?: {
|
|
38
|
-
current: number;
|
|
39
|
-
total: number;
|
|
40
|
-
};
|
|
41
|
-
transcodeError?: string;
|
|
42
|
-
playlistUrl?: string;
|
|
43
|
-
thumbnailKey?: string;
|
|
44
|
-
/** Key of the storyboard VTT (hover previews); URL via `buildStoryboardUrl` from `@devultur/core`. */
|
|
45
|
-
storyboardKey?: string;
|
|
46
|
-
captionLocales?: string[];
|
|
47
|
-
/** True while requested captions haven't arrived; the video waits in "captioning" only then. */
|
|
48
|
-
captionsPending?: boolean;
|
|
49
|
-
/** A video's duration in seconds, from the transcode. */
|
|
50
|
-
duration?: number;
|
|
51
|
-
createdAt: number;
|
|
52
|
-
}
|
|
53
|
-
interface ProgressRecord {
|
|
54
|
-
userId: string;
|
|
55
|
-
videoId: string;
|
|
56
|
-
lastPosition: number;
|
|
57
|
-
completedAt?: number;
|
|
58
|
-
watchedPercent?: number;
|
|
59
|
-
updatedAt: number;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export type { DevulturComponentConfig as D, MediaRecord as M, ProgressRecord as P };
|