@cloudpdf/contract 3.0.0-next.1
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/LICENSE +192 -0
- package/README.md +26 -0
- package/dist/index.d.ts +6712 -0
- package/dist/index.js +843 -0
- package/dist/index.js.map +1 -0
- package/dist/openapi.d.ts +17 -0
- package/dist/openapi.js +1029 -0
- package/dist/openapi.js.map +1 -0
- package/openapi.json +10847 -0
- package/package.json +66 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { z } from 'zod';\nimport {\n AnnotationListPageSnapshotSchema,\n DocumentHeadSchema,\n DocumentManifestSchema,\n DocumentMetadataSchema,\n EngineErrorPayloadSchema,\n FormSnapshotSchema,\n MutationMetaSchema,\n PageTextSnapshotSchema,\n wireTemplates,\n} from '@embedpdf/engine-core/wire';\nimport type { DocCapability } from '@embedpdf/engine-core/runtime';\n\nconst sha256Hex = /^[0-9a-f]{64}$/i;\nconst docIdPattern = /^[A-Za-z0-9_-]+$/;\n/**\n * Tenant ids share the doc-id charset: URL-safe by construction, since\n * they appear in every tenant-scoped path (and therefore in logs — do\n * not put PII in tenant ids).\n */\nconst tenantIdPattern = /^[A-Za-z0-9_-]+$/;\n\n/**\n * Wire paths. The URL carries the full resource identity — tenant\n * resources live under `/v1/tenants/{tenantId}/…` — and the auth model\n * is one rule: the API token is valid everywhere; a JWT is valid\n * exactly under the subtree of the resource it names.\n */\nexport const adminWirePaths = {\n tenants: '/v1/tenants',\n tenant: (tenantId: string) => `/v1/tenants/${encodeURIComponent(tenantId)}`,\n documents: (tenantId: string) => `/v1/tenants/${encodeURIComponent(tenantId)}/documents`,\n documentsInit: (tenantId: string) => `/v1/tenants/${encodeURIComponent(tenantId)}/documents/init`,\n document: (tenantId: string, docId: string) =>\n `/v1/tenants/${encodeURIComponent(tenantId)}/documents/${encodeURIComponent(docId)}`,\n documentCommit: (tenantId: string, docId: string) =>\n `/v1/tenants/${encodeURIComponent(tenantId)}/documents/${encodeURIComponent(docId)}/commit`,\n documentUploadDirect: (tenantId: string, docId: string) =>\n `/v1/tenants/${encodeURIComponent(tenantId)}/documents/${encodeURIComponent(docId)}/upload-direct`,\n documentDownload: (tenantId: string, docId: string) =>\n `/v1/tenants/${encodeURIComponent(tenantId)}/documents/${encodeURIComponent(docId)}/download`,\n /** The warmed dashboard-tile artifact. Returns 404 while `pending`/`locked`. */\n documentThumbnail: (tenantId: string, docId: string) =>\n `/v1/tenants/${encodeURIComponent(tenantId)}/documents/${encodeURIComponent(docId)}/thumbnail`,\n tokenIssue: (tenantId: string) => `/v1/tenants/${encodeURIComponent(tenantId)}/tokens`,\n tokenRevoke: (tenantId: string, jti: string) =>\n `/v1/tenants/${encodeURIComponent(tenantId)}/tokens/${encodeURIComponent(jti)}/revoke`,\n /** Deployment-global singletons: API-token only, no tenant context. */\n deploymentLicenseStatus: '/v1/deployment/license/status',\n} as const;\n\nexport const DedupModeSchema = z.enum(['always-create', 'reuse-existing']);\nexport type DedupMode = z.infer<typeof DedupModeSchema>;\n\nexport const DocumentStateSchema = z.enum(['pending', 'ready', 'failed', 'deleting']);\nexport type DocumentState = z.infer<typeof DocumentStateSchema>;\n\nexport const AdminDocumentRecordSchema = z.object({\n id: z.string(),\n tenantId: z.string(),\n state: DocumentStateSchema,\n baseSha: z.string().nullable(),\n storageSizeBytes: z.number().nullable(),\n metadata: z.record(z.string(), z.unknown()).nullable(),\n idempotencyKey: z.string().nullable(),\n failureReason: z.string().nullable(),\n /** Dashboard tile lifecycle. Optional because older servers omit these fields. */\n thumbnailState: z.enum(['pending', 'ready', 'locked', 'failed']).optional(),\n thumbnailUrl: z.string().nullable().optional(),\n createdAt: z.number(),\n updatedAt: z.number(),\n createdBy: z.string().nullable(),\n});\nexport type AdminDocumentRecord = z.infer<typeof AdminDocumentRecordSchema>;\n\nexport const AdminDocumentInitRequestSchema = z.object({\n contentLength: z.number().finite().min(1),\n contentSha256: z.string().regex(sha256Hex),\n metadata: z.record(z.string(), z.unknown()).optional(),\n idempotencyKey: z.string().optional(),\n dedupMode: DedupModeSchema.optional(),\n docId: z.string().regex(docIdPattern).optional(),\n uploadTtlSec: z.number().finite().min(60).max(3600).optional(),\n});\nexport type AdminDocumentInitRequest = z.infer<typeof AdminDocumentInitRequestSchema>;\n\nexport const AdminPresignedUploadSchema = z.object({\n url: z.string(),\n headers: z.record(z.string(), z.string()),\n method: z.literal('PUT'),\n expiresAt: z.number(),\n});\nexport type AdminPresignedUpload = z.infer<typeof AdminPresignedUploadSchema>;\n\nexport const AdminInitUploadSchema = z.discriminatedUnion('kind', [\n z.object({\n kind: z.literal('presigned'),\n presigned: AdminPresignedUploadSchema,\n key: z.string(),\n }),\n z.object({\n kind: z.literal('direct'),\n url: z.string(),\n key: z.string(),\n }),\n]);\nexport type AdminInitUpload = z.infer<typeof AdminInitUploadSchema>;\n\nexport const AdminDocumentInitResponseSchema = z.discriminatedUnion('tag', [\n z.object({\n tag: z.literal('created'),\n document: AdminDocumentRecordSchema,\n upload: AdminInitUploadSchema,\n }),\n z.object({\n tag: z.literal('resumed'),\n document: AdminDocumentRecordSchema,\n upload: AdminInitUploadSchema,\n }),\n z.object({\n tag: z.literal('deduped'),\n document: AdminDocumentRecordSchema,\n }),\n]);\nexport type AdminDocumentInitResponse = z.infer<typeof AdminDocumentInitResponseSchema>;\n\nexport const AdminDocumentCommitRequestSchema = z.object({\n sha256: z.string().regex(sha256Hex),\n});\nexport type AdminDocumentCommitRequest = z.infer<typeof AdminDocumentCommitRequestSchema>;\n\nexport const AdminDocumentCommitResponseSchema = z.object({\n document: AdminDocumentRecordSchema,\n});\nexport type AdminDocumentCommitResponse = z.infer<typeof AdminDocumentCommitResponseSchema>;\n\nexport const AdminDocumentResponseSchema = z.object({\n document: AdminDocumentRecordSchema,\n});\nexport type AdminDocumentResponse = z.infer<typeof AdminDocumentResponseSchema>;\n\nexport const ADMIN_DOCUMENT_LIST_DEFAULT_LIMIT = 100;\nexport const ADMIN_DOCUMENT_LIST_MAX_LIMIT = 200;\n\n/**\n * Query parameters for `documents.list`. `limit` arrives as a string on\n * the wire, hence the coercion; values outside [1, MAX] are a validation\n * error, not a silent clamp. `cursor` is an opaque continuation token\n * from a previous page's `nextCursor` — clients must not parse it.\n */\nexport const AdminDocumentListQuerySchema = z.object({\n limit: z.coerce\n .number()\n .int()\n .min(1)\n .max(ADMIN_DOCUMENT_LIST_MAX_LIMIT)\n .default(ADMIN_DOCUMENT_LIST_DEFAULT_LIMIT),\n cursor: z.string().min(1).optional(),\n state: DocumentStateSchema.optional(),\n});\nexport type AdminDocumentListQuery = z.infer<typeof AdminDocumentListQuerySchema>;\n\nexport const AdminDocumentListResponseSchema = z.object({\n documents: z.array(AdminDocumentRecordSchema),\n /**\n * Opaque cursor for the next page; `null` on the last page. Optional\n * because pre-pagination servers omit it — clients treat absence as\n * \"no continuation available\", same convention as the thumbnail fields.\n */\n nextCursor: z.string().nullable().optional(),\n});\nexport type AdminDocumentListResponse = z.infer<typeof AdminDocumentListResponseSchema>;\n\nexport const AdminUploadDirectResponseSchema = z.object({\n sha256: z.string().regex(sha256Hex),\n});\nexport type AdminUploadDirectResponse = z.infer<typeof AdminUploadDirectResponseSchema>;\n\nexport const AdminErrorPayloadSchema = z.object({\n error: z.object({\n code: z.string(),\n message: z.string(),\n }),\n});\nexport type AdminErrorPayload = z.infer<typeof AdminErrorPayloadSchema>;\n\n/**\n * The thumbnail route's 404 while the warmed artifact is `pending`,\n * `locked`, or `failed` — the standard error envelope plus the tile\n * state so dashboards can render the right placeholder.\n */\nexport const AdminThumbnailUnavailablePayloadSchema = z.object({\n error: z.object({\n code: z.string(),\n message: z.string(),\n state: z.string(),\n }),\n});\nexport type AdminThumbnailUnavailablePayload = z.infer<\n typeof AdminThumbnailUnavailablePayloadSchema\n>;\n\nexport const AdminTenantParamsSchema = z.object({\n tenantId: z.string().regex(tenantIdPattern),\n});\nexport type AdminTenantParams = z.infer<typeof AdminTenantParamsSchema>;\n\nexport const AdminTenantDocParamsSchema = z.object({\n tenantId: z.string().regex(tenantIdPattern),\n id: z.string().regex(docIdPattern),\n});\nexport type AdminTenantDocParams = z.infer<typeof AdminTenantDocParamsSchema>;\n\nexport const AdminTenantJtiParamsSchema = z.object({\n tenantId: z.string().regex(tenantIdPattern),\n jti: z.string().min(1).max(256),\n});\nexport type AdminTenantJtiParams = z.infer<typeof AdminTenantJtiParamsSchema>;\n\nexport const AdminTokenRevokeRequestSchema = z.object({\n /** Optional human reason, written to the audit row. */\n reason: z.string().max(1024).optional(),\n /**\n * The token's `exp` (unix seconds), used to GC the revocation row\n * once the token would have expired anyway. Defaults server-side to\n * now + 30 days.\n */\n expiresAtSeconds: z.number().int().positive().optional(),\n});\nexport type AdminTokenRevokeRequest = z.infer<typeof AdminTokenRevokeRequestSchema>;\n\n/**\n * License/reporting/usage passthrough. The inner shapes belong to the\n * licensing runtime and are surfaced as-is; they tighten to full\n * schemas when the licensing contract stabilizes.\n */\nexport const AdminLicenseStatusResponseSchema = z.object({\n license: z.unknown(),\n reporting: z.unknown().nullable(),\n usage: z.unknown().nullable(),\n});\nexport type AdminLicenseStatusResponse = z.infer<typeof AdminLicenseStatusResponseSchema>;\n\nexport const AdminTenantRecordSchema = z.object({\n id: z.string(),\n name: z.string(),\n /** True when the namespace materialized on first use rather than via explicit create. */\n autoProvisioned: z.boolean(),\n createdAt: z.number(),\n});\nexport type AdminTenantRecord = z.infer<typeof AdminTenantRecordSchema>;\n\nexport const AdminTenantCreateRequestSchema = z.object({\n id: z.string().regex(tenantIdPattern),\n /** Display name; defaults to the id. */\n name: z.string().min(1).max(256).optional(),\n});\nexport type AdminTenantCreateRequest = z.infer<typeof AdminTenantCreateRequestSchema>;\n\nexport const AdminTenantCreateResponseSchema = z.object({\n tenant: AdminTenantRecordSchema,\n /** False when the tenant already existed — create is ensure-style. */\n created: z.boolean(),\n});\nexport type AdminTenantCreateResponse = z.infer<typeof AdminTenantCreateResponseSchema>;\n\nexport const AdminTenantResponseSchema = z.object({\n tenant: AdminTenantRecordSchema,\n});\nexport type AdminTenantResponse = z.infer<typeof AdminTenantResponseSchema>;\n\nexport const AdminTenantListQuerySchema = z.object({\n limit: z.coerce\n .number()\n .int()\n .min(1)\n .max(ADMIN_DOCUMENT_LIST_MAX_LIMIT)\n .default(ADMIN_DOCUMENT_LIST_DEFAULT_LIMIT),\n cursor: z.string().min(1).optional(),\n});\nexport type AdminTenantListQuery = z.infer<typeof AdminTenantListQuerySchema>;\n\nexport const AdminTenantListResponseSchema = z.object({\n tenants: z.array(AdminTenantRecordSchema),\n /** Opaque cursor for the next page; `null` on the last page. */\n nextCursor: z.string().nullable().optional(),\n});\nexport type AdminTenantListResponse = z.infer<typeof AdminTenantListResponseSchema>;\n\n/**\n * Tenant-token scopes used by the admin surface. The wildcard `*`\n * always satisfies a scope check and is deliberately not listed —\n * operations declare the *specific* scope they require.\n *\n * `tokens.issue-doc` and `tokens.revoke` are deliberately separate:\n * issuance leaking is a confidentiality risk (unauthorized access\n * creation), revocation leaking is an availability risk (mass session\n * kill). Different failure directions, different scopes.\n */\nexport const adminTenantScopes = [\n 'docs.create',\n 'docs.read',\n 'docs.delete',\n 'tokens.issue-doc',\n 'tokens.revoke',\n] as const;\nexport type AdminTenantScope = (typeof adminTenantScopes)[number];\n\nexport const AdminTokenIssueDocRequestSchema = z.object({\n kind: z.literal('doc'),\n /** Subject of the minted token — the end user's id in your system. */\n sub: z.string().min(1).max(256),\n docId: z.string().regex(docIdPattern),\n layerName: z.string().min(1).max(256).optional(),\n /**\n * Doc capability scopes (`doc.open`, `doc.render`, …, plus the\n * collab grammar). Validated server-side against the engine's scope\n * vocabulary — an unknown string rejects the whole request.\n */\n scope: z.array(z.string().min(1).max(128)).min(1).max(64),\n userId: z.string().max(256).optional(),\n displayName: z.string().max(256).optional(),\n groupId: z.string().max(256).optional(),\n groups: z.array(z.string().max(256)).max(64).optional(),\n /** Token lifetime in seconds. */\n expiresIn: z\n .number()\n .int()\n .min(60)\n .max(60 * 60 * 24 * 90),\n});\nexport type AdminTokenIssueDocRequest = z.infer<typeof AdminTokenIssueDocRequestSchema>;\n\nexport const AdminTokenIssueTenantRequestSchema = z.object({\n kind: z.literal('tenant'),\n sub: z.string().min(1).max(256),\n scope: z\n .array(z.union([z.literal('*'), z.enum(adminTenantScopes)]))\n .min(1)\n .max(16),\n /** Token lifetime in seconds. */\n expiresIn: z\n .number()\n .int()\n .min(60)\n .max(60 * 60 * 24 * 90),\n});\nexport type AdminTokenIssueTenantRequest = z.infer<typeof AdminTokenIssueTenantRequestSchema>;\n\nexport const AdminTokenIssueRequestSchema = z.discriminatedUnion('kind', [\n AdminTokenIssueDocRequestSchema,\n AdminTokenIssueTenantRequestSchema,\n]);\nexport type AdminTokenIssueRequest = z.infer<typeof AdminTokenIssueRequestSchema>;\n\nexport const AdminTokenIssueResponseSchema = z.object({\n token: z.string(),\n jti: z.string(),\n /** Unix seconds. */\n expiresAt: z.number(),\n});\nexport type AdminTokenIssueResponse = z.infer<typeof AdminTokenIssueResponseSchema>;\n\n// ---------------------------------------------------------------------------\n// Operation registry\n// ---------------------------------------------------------------------------\n//\n// The registry is the admin surface's contract: one entry per operation\n// carrying method, path template, required tenant scope, and the request/\n// response schemas. The server mounts its routes FROM these entries (so the\n// registry is executed, not merely described), and the OpenAPI document is\n// generated from the same entries in CI. Migration status: `documents.list`\n// is registered; the remaining admin operations move in as they are touched.\n\n/**\n * The credential kinds of the one-rule auth model: the API token\n * (static deployment secret) is valid everywhere; a tenant JWT is valid\n * exactly under its own `/v1/tenants/{tenantId}/` subtree; a doc JWT is\n * valid exactly on the `/v1/docs/{docId}` subtree it names, gated by\n * the capability scopes it carries.\n */\nexport const adminCredentials = ['api-token', 'tenant-jwt', 'doc-jwt'] as const;\nexport type AdminCredential = (typeof adminCredentials)[number];\n\nexport type AdminOperationMethod = 'GET' | 'POST' | 'PATCH' | 'DELETE';\n\nexport interface AdminOperationHeader {\n name: string;\n description: string;\n /** Defaults to false. */\n required?: boolean;\n}\n\nexport interface AdminOperationResponse {\n /**\n * MIME type(s) of the response body. An array means the server picks\n * one per response (e.g. thumbnail webp/png). Absent = empty body\n * (204-style).\n */\n contentType?: string | ReadonlyArray<string>;\n /** Body schema; absent for empty or binary bodies. */\n schema?: z.ZodTypeAny;\n}\n\nexport interface AdminOperationBody {\n /** Accepted request MIME type(s). */\n contentType: string | ReadonlyArray<string>;\n /** Body schema; absent for binary bodies. */\n schema?: z.ZodTypeAny;\n /** Defaults to true; false when the operation accepts an empty body. */\n required?: boolean;\n}\n\n/**\n * One admin operation, fully described: everything a server needs to mount\n * it and everything a generator needs to document it.\n */\nexport interface AdminOperation {\n /** Stable `resource.verb` id; becomes the OpenAPI operationId. */\n operationId: string;\n summary: string;\n method: AdminOperationMethod;\n /** Fastify-style path template (`:param`); rewritten to `{param}` for OpenAPI. */\n path: string;\n /**\n * Credentials accepted by this operation. The API token is root and\n * passes every scope check; a tenant JWT additionally requires the\n * path's `tenantId` to equal the token's `tenant_id`. Doc-scoped\n * tokens are always rejected on these surfaces.\n */\n credentials: ReadonlyArray<AdminCredential>;\n /**\n * Tenant scopes accepted on the tenant-jwt path — possessing any one\n * grants access (`*` always does). Empty for API-token-only\n * operations, where no scope model applies.\n */\n scope: ReadonlyArray<AdminTenantScope>;\n /**\n * Doc capabilities required on the doc-jwt path — typed against the\n * engine-core vocabulary so a misspelled capability fails compile.\n * The API token bypasses capability checks, same as it passes tenant\n * scope checks. Present only on doc-plane operations.\n */\n docCapabilities?: ReadonlyArray<DocCapability>;\n /** Documented request headers (beyond Authorization). */\n requestHeaders?: ReadonlyArray<AdminOperationHeader>;\n /** Path-parameter schema, keyed by template name. */\n params?: z.ZodTypeAny;\n /** Query-string schema. */\n query?: z.ZodTypeAny;\n /** Request body. */\n body?: AdminOperationBody;\n /** Success and known-error responses by HTTP status code. */\n responses: Readonly<Record<number, AdminOperationResponse>>;\n /**\n * Deployment caveats a generated doc must carry — e.g. an operation\n * that is only mounted under a server flag.\n */\n notes?: string;\n}\n\nexport const adminOperations = {\n 'tenants.create': {\n operationId: 'tenants.create',\n summary: 'Create a tenant, or confirm it already exists — ensure-style, idempotent.',\n method: 'POST',\n path: adminWirePaths.tenants,\n credentials: ['api-token'],\n scope: [],\n body: { contentType: 'application/json', schema: AdminTenantCreateRequestSchema },\n responses: {\n 200: { contentType: 'application/json', schema: AdminTenantCreateResponseSchema },\n 400: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n },\n },\n 'tenants.list': {\n operationId: 'tenants.list',\n summary: 'List tenants, newest first, cursor-paginated.',\n method: 'GET',\n path: adminWirePaths.tenants,\n credentials: ['api-token'],\n scope: [],\n query: AdminTenantListQuerySchema,\n responses: {\n 200: { contentType: 'application/json', schema: AdminTenantListResponseSchema },\n 400: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n },\n },\n 'tenants.get': {\n operationId: 'tenants.get',\n summary: 'Fetch one tenant record.',\n method: 'GET',\n path: '/v1/tenants/:tenantId',\n credentials: ['api-token'],\n scope: [],\n params: AdminTenantParamsSchema,\n responses: {\n 200: { contentType: 'application/json', schema: AdminTenantResponseSchema },\n 404: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n },\n },\n 'tenants.delete': {\n operationId: 'tenants.delete',\n summary: 'Delete a tenant and everything under it.',\n method: 'DELETE',\n path: '/v1/tenants/:tenantId',\n credentials: ['api-token'],\n scope: [],\n params: AdminTenantParamsSchema,\n responses: {\n 204: {},\n 404: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n },\n notes:\n 'Destroys the tenant and everything in its namespace — documents, layers, stored bytes, audit history. Irreversible.',\n },\n 'documents.init': {\n operationId: 'documents.init',\n summary:\n 'Begin an upload: create (or resume/dedupe) a pending document and issue upload access.',\n method: 'POST',\n path: '/v1/tenants/:tenantId/documents/init',\n credentials: ['api-token', 'tenant-jwt'],\n scope: ['docs.create'],\n params: AdminTenantParamsSchema,\n body: { contentType: 'application/json', schema: AdminDocumentInitRequestSchema },\n responses: {\n 200: { contentType: 'application/json', schema: AdminDocumentInitResponseSchema },\n 400: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n },\n },\n 'documents.commit': {\n operationId: 'documents.commit',\n summary: 'Finish an upload: verify the SHA-256 and promote the document to ready.',\n method: 'POST',\n path: '/v1/tenants/:tenantId/documents/:id/commit',\n credentials: ['api-token', 'tenant-jwt'],\n scope: ['docs.create'],\n params: AdminTenantDocParamsSchema,\n body: { contentType: 'application/json', schema: AdminDocumentCommitRequestSchema },\n responses: {\n 200: { contentType: 'application/json', schema: AdminDocumentCommitResponseSchema },\n 400: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n 404: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n },\n },\n 'documents.uploadDirect': {\n operationId: 'documents.uploadDirect',\n summary: 'Upload the PDF bytes through the origin instead of a presigned URL.',\n method: 'POST',\n path: '/v1/tenants/:tenantId/documents/:id/upload-direct',\n credentials: ['api-token', 'tenant-jwt'],\n scope: ['docs.create'],\n params: AdminTenantDocParamsSchema,\n body: {\n contentType: ['application/pdf', 'application/octet-stream', 'multipart/form-data'],\n },\n responses: {\n 200: { contentType: 'application/json', schema: AdminUploadDirectResponseSchema },\n 400: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n },\n },\n 'documents.list': {\n operationId: 'documents.list',\n summary: 'List documents in the tenant, newest first, cursor-paginated.',\n method: 'GET',\n path: '/v1/tenants/:tenantId/documents',\n credentials: ['api-token', 'tenant-jwt'],\n scope: ['docs.read'],\n params: AdminTenantParamsSchema,\n query: AdminDocumentListQuerySchema,\n responses: {\n 200: { contentType: 'application/json', schema: AdminDocumentListResponseSchema },\n 400: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n },\n },\n 'documents.get': {\n operationId: 'documents.get',\n summary: 'Fetch one document record.',\n method: 'GET',\n path: '/v1/tenants/:tenantId/documents/:id',\n credentials: ['api-token', 'tenant-jwt'],\n scope: ['docs.read'],\n params: AdminTenantDocParamsSchema,\n responses: {\n 200: { contentType: 'application/json', schema: AdminDocumentResponseSchema },\n 403: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n 404: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n },\n },\n 'documents.download': {\n operationId: 'documents.download',\n summary: 'Download the stored base PDF bytes.',\n method: 'GET',\n path: '/v1/tenants/:tenantId/documents/:id/download',\n credentials: ['api-token', 'tenant-jwt'],\n scope: ['docs.read'],\n params: AdminTenantDocParamsSchema,\n responses: {\n 200: { contentType: 'application/pdf' },\n 403: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n 404: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n },\n },\n 'documents.delete': {\n operationId: 'documents.delete',\n summary: 'Delete a document and its stored artifacts.',\n method: 'DELETE',\n path: '/v1/tenants/:tenantId/documents/:id',\n credentials: ['api-token', 'tenant-jwt'],\n scope: ['docs.delete'],\n params: AdminTenantDocParamsSchema,\n responses: {\n 204: {},\n 403: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n 404: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n },\n },\n 'documents.thumbnail': {\n operationId: 'documents.thumbnail',\n summary: 'Fetch the warmed dashboard-tile render for a document.',\n method: 'GET',\n path: '/v1/tenants/:tenantId/documents/:id/thumbnail',\n credentials: ['api-token', 'tenant-jwt'],\n scope: ['docs.read'],\n params: AdminTenantDocParamsSchema,\n responses: {\n 200: { contentType: ['image/webp', 'image/png'] },\n 404: { contentType: 'application/json', schema: AdminThumbnailUnavailablePayloadSchema },\n },\n },\n 'deployment.licenseStatus': {\n operationId: 'deployment.licenseStatus',\n summary: 'License decision plus usage-reporting and meter snapshots for this deployment.',\n method: 'GET',\n path: adminWirePaths.deploymentLicenseStatus,\n credentials: ['api-token'],\n scope: [],\n responses: {\n 200: { contentType: 'application/json', schema: AdminLicenseStatusResponseSchema },\n },\n },\n 'tokens.issue': {\n operationId: 'tokens.issue',\n summary: 'Mint a delegated JWT: a doc token, or (API token only) a tenant token.',\n method: 'POST',\n path: '/v1/tenants/:tenantId/tokens',\n credentials: ['api-token', 'tenant-jwt'],\n scope: ['tokens.issue-doc'],\n params: AdminTenantParamsSchema,\n body: { contentType: 'application/json', schema: AdminTokenIssueRequestSchema },\n responses: {\n 200: { contentType: 'application/json', schema: AdminTokenIssueResponseSchema },\n 400: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n 403: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n 404: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n },\n notes:\n 'kind \"tenant\" requires the API token — authority mints only downward. Mounted only when the deployment can sign (HS256 mode); asymmetric deployments mint with their own private key.',\n },\n 'tokens.revoke': {\n operationId: 'tokens.revoke',\n summary: 'Revoke a token by jti; live sessions drop on their next heartbeat.',\n method: 'POST',\n path: '/v1/tenants/:tenantId/tokens/:jti/revoke',\n credentials: ['api-token', 'tenant-jwt'],\n scope: ['tokens.revoke'],\n params: AdminTenantJtiParamsSchema,\n body: {\n contentType: 'application/json',\n schema: AdminTokenRevokeRequestSchema,\n required: false,\n },\n responses: {\n 204: {},\n 400: { contentType: 'application/json', schema: AdminErrorPayloadSchema },\n },\n notes: 'Mounted only when the deployment enables token revocation.',\n },\n} as const satisfies Record<string, AdminOperation>;\nexport type AdminOperationId = keyof typeof adminOperations;\n\n// ---------------------------------------------------------------------------\n// Doc-plane operations (the backend-usable document API)\n// ---------------------------------------------------------------------------\n//\n// The \"API vs protocol\" split: these are the document operations a backend\n// can genuinely call — plain origin paths, credentialed by the API token\n// (which the server resolves to the document's own tenant) or a doc JWT\n// carrying the listed capabilities. The viewer-session protocol — /v1/access,\n// /v1/warm, the immutable `@{version}` CDN variants, SSE, weak annotation\n// sessions, password sessions — deliberately stays out of this registry: it\n// is the transport between the CloudPDF viewer SDK and the engine, free to\n// evolve behind the SDK boundary. Body/response schemas start deliberately\n// loose (documented paths, params, credentials, capabilities) and tighten\n// incrementally as the wire shapes are ported from engine-core.\n\nexport const DocIdParamsSchema = z.object({\n docId: z.string().regex(docIdPattern),\n});\nexport const DocLayerParamsSchema = DocIdParamsSchema.extend({\n layerName: z.string().min(1),\n});\nexport const DocPageParamsSchema = DocLayerParamsSchema.extend({\n pon: z.coerce.number().int().min(0),\n});\nexport const DocAnnotationParamsSchema = DocPageParamsSchema.extend({\n annotKey: z.string().min(1),\n});\nexport const DocFieldParamsSchema = DocLayerParamsSchema.extend({\n fieldKey: z.string().min(1),\n});\n\n/**\n * Attached to every doc-plane operation: per-request password supply for\n * encrypted documents, API-token callers only. Viewer JWTs never send\n * passwords in headers — they use the SDK's password-session flow.\n */\nexport const documentPasswordHeader: AdminOperationHeader = {\n name: 'X-Document-Password',\n required: false,\n description:\n 'Base64-encoded password for an encrypted document. Valid only with the API token ' +\n '(403 anywhere else). An encrypted document answers 422 DocPasswordRequired when ' +\n 'the header is absent. Viewer doc JWTs use the SDK password-session flow instead.',\n};\n\nconst looseJson = z.record(z.string(), z.unknown());\nconst docCredentials = ['api-token', 'doc-jwt'] as const;\n\n/**\n * Every doc-plane mutation responds with the shared meta envelope — the\n * cache/version deltas SDKs use to re-point immutable reads — plus\n * operation-specific fields that tighten per-op as they are ported.\n */\nconst MutationResponseSchema = z.object({ meta: MutationMetaSchema }).passthrough();\n\nexport const docOperations = {\n 'doc.head': {\n operationId: 'doc.head',\n summary: 'Open a document and return its head (versions, page count, security).',\n method: 'GET',\n path: wireTemplates.docHead,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.open'],\n requestHeaders: [documentPasswordHeader],\n params: DocIdParamsSchema,\n responses: {\n 200: { contentType: 'application/json', schema: DocumentHeadSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.manifest': {\n operationId: 'doc.manifest',\n summary: \"Full layer manifest at the layer's current version.\",\n method: 'GET',\n path: wireTemplates.layerManifest,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.open'],\n requestHeaders: [documentPasswordHeader],\n params: DocLayerParamsSchema,\n responses: {\n 200: { contentType: 'application/json', schema: DocumentManifestSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.metadata.get': {\n operationId: 'doc.metadata.get',\n summary: 'Document metadata (PDF info dictionary view) for a layer.',\n method: 'GET',\n path: wireTemplates.layerMetadata,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.open'],\n requestHeaders: [documentPasswordHeader],\n params: DocLayerParamsSchema,\n responses: {\n 200: { contentType: 'application/json', schema: DocumentMetadataSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.render': {\n operationId: 'doc.render',\n summary: 'Render one page as an image at the current layer version.',\n method: 'GET',\n path: wireTemplates.layerRenderPage,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.render'],\n requestHeaders: [documentPasswordHeader],\n params: DocPageParamsSchema,\n notes:\n 'Render parameters (viewport, format) pass as flat dotted query keys, e.g. ' +\n '`?viewport.kind=width&viewport.width=800`; the full grammar is documented with the viewer.',\n responses: {\n 200: { contentType: 'image/webp' },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.text': {\n operationId: 'doc.text',\n summary: 'Extracted text content for one page.',\n method: 'GET',\n path: wireTemplates.layerTextPage,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.text.copy'],\n requestHeaders: [documentPasswordHeader],\n params: DocPageParamsSchema,\n responses: {\n 200: { contentType: 'application/json', schema: PageTextSnapshotSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.annotations.list': {\n operationId: 'doc.annotations.list',\n summary: \"One page's annotations at the current layer version.\",\n method: 'GET',\n path: wireTemplates.layerAnnotationItems,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.annotate.read'],\n requestHeaders: [documentPasswordHeader],\n params: DocPageParamsSchema,\n responses: {\n 200: { contentType: 'application/json', schema: AnnotationListPageSnapshotSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.annotations.create': {\n operationId: 'doc.annotations.create',\n summary: 'Create an annotation on a page.',\n method: 'POST',\n path: wireTemplates.layerAnnotationItems,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.annotate.modify'],\n requestHeaders: [documentPasswordHeader],\n params: DocPageParamsSchema,\n body: { contentType: 'application/json', schema: looseJson },\n notes:\n 'Doc JWTs may instead carry collab scopes (annotations:create:self, …) that refine ' +\n 'per-annotation authorship rules; the API token is exempt from both.',\n responses: {\n 200: { contentType: 'application/json', schema: MutationResponseSchema },\n 400: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.annotations.update': {\n operationId: 'doc.annotations.update',\n summary: 'Update one annotation by key.',\n method: 'PATCH',\n path: wireTemplates.layerAnnotationItem,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.annotate.modify'],\n requestHeaders: [documentPasswordHeader],\n params: DocAnnotationParamsSchema,\n body: { contentType: 'application/json', schema: looseJson },\n responses: {\n 200: { contentType: 'application/json', schema: MutationResponseSchema },\n 400: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.annotations.delete': {\n operationId: 'doc.annotations.delete',\n summary: 'Delete one annotation by key.',\n method: 'DELETE',\n path: wireTemplates.layerAnnotationItem,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.annotate.modify'],\n requestHeaders: [documentPasswordHeader],\n params: DocAnnotationParamsSchema,\n responses: {\n 200: { contentType: 'application/json', schema: MutationResponseSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.forms.get': {\n operationId: 'doc.forms.get',\n summary: 'Reconciled form snapshot: fields, widgets, values.',\n method: 'GET',\n path: wireTemplates.layerForm,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.forms.read'],\n requestHeaders: [documentPasswordHeader],\n params: DocLayerParamsSchema,\n responses: {\n 200: { contentType: 'application/json', schema: FormSnapshotSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.forms.setValue': {\n operationId: 'doc.forms.setValue',\n summary: \"Set one form field's value.\",\n method: 'POST',\n path: wireTemplates.layerFormFieldValue,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.forms.fill'],\n requestHeaders: [documentPasswordHeader],\n params: DocFieldParamsSchema,\n body: { contentType: 'application/json', schema: looseJson },\n responses: {\n 200: { contentType: 'application/json', schema: MutationResponseSchema },\n 400: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.forms.reset': {\n operationId: 'doc.forms.reset',\n summary: 'Reset one form field to its default value.',\n method: 'POST',\n path: wireTemplates.layerFormFieldReset,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.forms.fill'],\n requestHeaders: [documentPasswordHeader],\n params: DocFieldParamsSchema,\n responses: {\n 200: { contentType: 'application/json', schema: MutationResponseSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.forms.exportData': {\n operationId: 'doc.forms.exportData',\n summary: 'Export form data as FDF or XFDF.',\n method: 'GET',\n path: wireTemplates.layerFormData,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.forms.read'],\n requestHeaders: [documentPasswordHeader],\n params: DocLayerParamsSchema,\n query: z.object({ format: z.enum(['fdf', 'xfdf']).optional() }),\n responses: {\n 200: { contentType: ['application/vnd.adobe.xfdf', 'application/vnd.fdf'] },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.forms.importData': {\n operationId: 'doc.forms.importData',\n summary: 'Import form data (FDF/XFDF), filling matching fields.',\n method: 'POST',\n path: wireTemplates.layerFormData,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.forms.fill'],\n requestHeaders: [documentPasswordHeader],\n params: DocLayerParamsSchema,\n body: { contentType: 'application/json', schema: looseJson },\n responses: {\n 200: { contentType: 'application/json', schema: MutationResponseSchema },\n 400: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.pages.move': {\n operationId: 'doc.pages.move',\n summary: 'Reorder pages.',\n method: 'POST',\n path: wireTemplates.layerPagesMove,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.pages.assemble'],\n requestHeaders: [documentPasswordHeader],\n params: DocLayerParamsSchema,\n body: { contentType: 'application/json', schema: looseJson },\n responses: {\n 200: { contentType: 'application/json', schema: MutationResponseSchema },\n 400: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.pages.rotate': {\n operationId: 'doc.pages.rotate',\n summary: 'Set absolute rotation on pages.',\n method: 'POST',\n path: wireTemplates.layerPagesRotate,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.pages.assemble'],\n requestHeaders: [documentPasswordHeader],\n params: DocLayerParamsSchema,\n body: { contentType: 'application/json', schema: looseJson },\n responses: {\n 200: { contentType: 'application/json', schema: MutationResponseSchema },\n 400: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.pages.delete': {\n operationId: 'doc.pages.delete',\n summary: 'Delete pages.',\n method: 'POST',\n path: wireTemplates.layerPagesDelete,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.pages.assemble'],\n requestHeaders: [documentPasswordHeader],\n params: DocLayerParamsSchema,\n body: { contentType: 'application/json', schema: looseJson },\n responses: {\n 200: { contentType: 'application/json', schema: MutationResponseSchema },\n 400: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.pages.flatten': {\n operationId: 'doc.pages.flatten',\n summary: 'Flatten annotations and form fields into page content.',\n method: 'POST',\n path: wireTemplates.layerPagesFlatten,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.pages.modify', 'doc.annotate.modify'],\n requestHeaders: [documentPasswordHeader],\n params: DocLayerParamsSchema,\n body: { contentType: 'application/json', schema: looseJson, required: false },\n responses: {\n 200: { contentType: 'application/json', schema: MutationResponseSchema },\n 400: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.redactions.apply': {\n operationId: 'doc.redactions.apply',\n summary: 'Apply pending redactions, permanently removing content.',\n method: 'POST',\n path: wireTemplates.layerRedactionsApply,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.pages.modify', 'doc.annotate.modify', 'doc.redact'],\n requestHeaders: [documentPasswordHeader],\n params: DocLayerParamsSchema,\n body: { contentType: 'application/json', schema: looseJson, required: false },\n responses: {\n 200: { contentType: 'application/json', schema: MutationResponseSchema },\n 400: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n 'doc.download': {\n operationId: 'doc.download',\n summary: \"Download the layer's current PDF (base plus layer edits).\",\n method: 'GET',\n path: wireTemplates.layerDownload,\n credentials: docCredentials,\n scope: [],\n docCapabilities: ['doc.download'],\n requestHeaders: [documentPasswordHeader],\n params: DocLayerParamsSchema,\n responses: {\n 200: { contentType: 'application/pdf' },\n 404: { contentType: 'application/json', schema: EngineErrorPayloadSchema },\n },\n },\n} as const satisfies Record<string, AdminOperation>;\nexport type DocOperationId = keyof typeof docOperations;\n\n/** Every operation in the published contract: admin surfaces + doc plane. */\nexport const allOperations = { ...adminOperations, ...docOperations } as const;\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI 3.1 emitter for the backend-callable operation registry.
|
|
3
|
+
*
|
|
4
|
+
* The registry (`allOperations`) is the contract; this module is a
|
|
5
|
+
* pure projection of it — no hand-authored paths, schemas, or scopes.
|
|
6
|
+
* `scripts/emit-openapi.mjs` writes the committed `openapi.json`, and
|
|
7
|
+
* the freshness test fails CI whenever the two diverge. Downstream
|
|
8
|
+
* consumers (Fern SDK generation, API reference docs) read the
|
|
9
|
+
* committed artifact, never this module.
|
|
10
|
+
*/
|
|
11
|
+
interface BuildAdminOpenApiOptions {
|
|
12
|
+
/** Package version stamped into `info.version`; keeps the emitter pure. */
|
|
13
|
+
version: string;
|
|
14
|
+
}
|
|
15
|
+
declare function buildAdminOpenApiDocument(opts: BuildAdminOpenApiOptions): Record<string, unknown>;
|
|
16
|
+
|
|
17
|
+
export { type BuildAdminOpenApiOptions, buildAdminOpenApiDocument };
|