| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- 'use strict'
- const { z } = require('@overleaf/validation-tools')
- const Blob = require('overleaf-editor-core').Blob
- const hexHashPattern = new RegExp(Blob.HEX_HASH_RX_STRING)
- const fileSchema = z.object({
- hash: z.string().optional(),
- byteLength: z.number().int().nullable().optional(),
- stringLength: z.number().int().nullable().optional(),
- })
- const snapshotSchema = z.object({
- files: z.record(z.string(), fileSchema),
- })
- const v2DocVersionsSchema = z.object({
- pathname: z.string().optional(),
- v: z.number().int().optional(),
- })
- const operationSchema = z.object({
- pathname: z.string().optional(),
- newPathname: z.string().optional(),
- blob: z
- .object({
- hash: z.string(),
- })
- .optional(),
- textOperation: z.array(z.any()).optional(),
- file: fileSchema.optional(),
- })
- const changeSchema = z.object({
- timestamp: z.string(),
- operations: z.array(operationSchema),
- authors: z.array(z.number().int().nullable()).optional(),
- v2Authors: z.array(z.string().nullable()).optional(),
- projectVersion: z.string().optional(),
- v2DocVersions: z.record(v2DocVersionsSchema).optional(),
- })
- const schemas = {
- projectId: z.object({
- params: z
- .object({
- project_id: z.string().optional(),
- })
- .optional(),
- }),
- initializeProject: z.object({
- body: z
- .object({
- projectId: z.string().optional(),
- })
- .optional(),
- }),
- getProjectBlobsStats: z.object({
- body: z.object({
- projectIds: z.array(z.string()),
- }),
- }),
- getBlobStats: z.object({
- params: z.object({
- project_id: z.string(),
- }),
- body: z.object({
- blobHashes: z.array(z.string()),
- }),
- }),
- deleteProject: z.object({
- params: z.object({
- project_id: z.string(),
- }),
- body: z.any().optional(),
- }),
- getProjectBlob: z.object({
- params: z.object({
- project_id: z.string(),
- hash: z.string().regex(hexHashPattern),
- }),
- headers: z.object({
- range: z.string().optional(),
- }),
- }),
- headProjectBlob: z.object({
- params: z.object({
- project_id: z.string(),
- hash: z.string().regex(hexHashPattern),
- }),
- }),
- createProjectBlob: z.object({
- params: z.object({
- project_id: z.string(),
- hash: z.string().regex(hexHashPattern),
- }),
- body: z.any().optional(),
- }),
- copyProjectBlob: z.object({
- params: z.object({
- project_id: z.string(),
- hash: z.string().regex(hexHashPattern),
- }),
- query: z.object({
- copyFrom: z.string(),
- }),
- body: z.any().optional(),
- }),
- getLatestContent: z.object({
- params: z.object({
- project_id: z.string(),
- }),
- }),
- getLatestHashedContent: z.object({
- params: z.object({
- project_id: z.string(),
- }),
- }),
- getLatestHistory: z.object({
- params: z.object({
- project_id: z.string(),
- }),
- }),
- getLatestHistoryRaw: z.object({
- params: z.object({
- project_id: z.string(),
- }),
- query: z.object({
- readOnly: z.boolean().optional(),
- }),
- }),
- getLatestPersistedHistory: z.object({
- params: z.object({
- project_id: z.string(),
- }),
- }),
- getHistory: z.object({
- params: z.object({
- project_id: z.string(),
- version: z.coerce.number(),
- }),
- }),
- getContentAtVersion: z.object({
- params: z.object({
- project_id: z.string(),
- version: z.coerce.number(),
- }),
- }),
- getHistoryBefore: z.object({
- params: z.object({
- project_id: z.string(),
- timestamp: z.iso.datetime(),
- }),
- }),
- getZip: z.object({
- params: z.object({
- project_id: z.string(),
- version: z.coerce.number(),
- }),
- }),
- createZip: z.object({
- params: z.object({
- project_id: z.string(),
- version: z.coerce.number(),
- }),
- body: z.any().optional(),
- }),
- getChanges: z.object({
- params: z.object({
- project_id: z.string(),
- }),
- query: z.object({
- since: z.coerce.number().optional(),
- }),
- }),
- importSnapshot: z.object({
- params: z.object({
- project_id: z.string(),
- }),
- body: snapshotSchema,
- }),
- importChanges: z.object({
- params: z.object({
- project_id: z.string(),
- }),
- query: z.object({
- end_version: z.coerce.number(),
- return_snapshot: z.enum(['hashed', 'none']).optional(),
- }),
- body: z.array(changeSchema),
- }),
- flushChanges: z.object({
- params: z.object({
- project_id: z.string(),
- }),
- body: z.any().optional(),
- }),
- expireProject: z.object({
- params: z.object({
- project_id: z.string(),
- }),
- body: z.any().optional(),
- }),
- }
- module.exports = schemas
|