@insureco/docman 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-7DJVMOS3.js +15 -0
- package/dist/chunk-7DJVMOS3.js.map +1 -0
- package/dist/index.cjs +478 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +103 -0
- package/dist/index.d.ts +103 -0
- package/dist/index.js +443 -0
- package/dist/index.js.map +1 -0
- package/dist/mock.cjs +339 -0
- package/dist/mock.cjs.map +1 -0
- package/dist/mock.d.cts +58 -0
- package/dist/mock.d.ts +58 -0
- package/dist/mock.js +305 -0
- package/dist/mock.js.map +1 -0
- package/dist/types-xbeSIrNB.d.cts +185 -0
- package/dist/types-xbeSIrNB.d.ts +185 -0
- package/package.json +44 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/client.ts"],"sourcesContent":["import { DocmanError } from './errors.js'\nimport type {\n DocmanClientConfig,\n HtmlTemplate,\n CreateHtmlTemplateOptions,\n UpdateHtmlTemplateOptions,\n HtmlTemplateListQuery,\n PdfTemplate,\n PdfField,\n CreatePdfTemplateOptions,\n UpdatePdfTemplateOptions,\n PdfTemplateListQuery,\n TemplateGroup,\n CreateTemplateGroupOptions,\n UpdateTemplateGroupOptions,\n DocmanDocument,\n DocumentVersion,\n GenerateOptions,\n GenerateResult,\n ListQuery,\n ListResult,\n ListMeta,\n PageRange,\n SplitPart,\n} from './types.js'\n\n// ─── Internal ────────────────────────────────────────────\n\nconst DEFAULT_RETRIES = 2\nconst DEFAULT_TIMEOUT_MS = 15_000\nconst TOKEN_BUFFER_SECONDS = 30\n\ninterface ApiEnvelope<T> {\n readonly success: boolean\n readonly data?: T\n readonly error?: { code: string; message: string } | string\n readonly meta?: ListMeta\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nfunction backoff(attempt: number): number {\n const base = Math.min(1000 * 2 ** attempt, 5_000)\n return base * (0.5 + Math.random() * 0.5)\n}\n\nfunction isTokenExpired(token: string, bufferSeconds = TOKEN_BUFFER_SECONDS): boolean {\n try {\n const parts = token.split('.')\n if (parts.length !== 3) return true\n const payload = JSON.parse(Buffer.from(parts[1], 'base64url').toString()) as { exp?: number }\n const now = Math.floor(Date.now() / 1000)\n return (payload.exp ?? 0) <= now + bufferSeconds\n } catch {\n return true\n }\n}\n\nfunction extractError(envelope: ApiEnvelope<unknown>): { code: string; message: string } {\n const err = envelope.error\n if (typeof err === 'object' && err !== null) return err\n return { code: 'REQUEST_ERROR', message: err ?? 'Request failed' }\n}\n\n// ─── DocmanClient ─────────────────────────────────────────\n\nexport class DocmanClient {\n private readonly baseUrl: string\n private readonly accessTokenFn?: () => Promise<string>\n private readonly internalKey?: string\n private readonly retries: number\n private readonly timeoutMs: number\n private cachedToken: string | null = null\n\n constructor(config: DocmanClientConfig) {\n this.baseUrl = config.baseUrl.replace(/\\/$/, '')\n this.accessTokenFn = config.accessTokenFn\n this.internalKey = config.internalKey\n this.retries = config.retries ?? DEFAULT_RETRIES\n this.timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS\n }\n\n /**\n * Create a client from environment variables.\n *\n * Reads DOCMAN_URL (injected automatically when you declare docman as an\n * internalDependency in catalog-info.yaml). Auth priority:\n * 1. BIO_CLIENT_ID + BIO_CLIENT_SECRET → client_credentials token\n * 2. INTERNAL_SERVICE_KEY → internal key header\n * 3. No auth → local dev / testing\n *\n * catalog-info.yaml:\n * spec:\n * internalDependencies:\n * - service: docman\n * port: 3000\n */\n static fromEnv(): DocmanClient {\n const baseUrl = process.env.DOCMAN_URL\n if (!baseUrl) {\n throw new DocmanError(\n 'DOCMAN_URL is not set. Add docman as an internalDependency in catalog-info.yaml',\n 500,\n 'CONFIG_ERROR',\n )\n }\n\n const clientId = process.env.BIO_CLIENT_ID\n const clientSecret = process.env.BIO_CLIENT_SECRET\n const bioIdUrl = process.env.BIO_ID_URL ?? 'https://bio.tawa.insureco.io'\n\n if (clientId && clientSecret) {\n return new DocmanClient({\n baseUrl,\n accessTokenFn: async () => {\n const res = await fetch(`${bioIdUrl}/api/oauth/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n grant_type: 'client_credentials',\n client_id: clientId,\n client_secret: clientSecret,\n }),\n })\n if (!res.ok) {\n throw new DocmanError('Failed to obtain Bio-ID access token', res.status, 'AUTH_ERROR')\n }\n const data = await res.json() as { access_token: string }\n return data.access_token\n },\n })\n }\n\n const internalKey = process.env.INTERNAL_SERVICE_KEY\n if (internalKey) {\n return new DocmanClient({ baseUrl, internalKey })\n }\n\n return new DocmanClient({ baseUrl })\n }\n\n // ─── Auth ────────────────────────────────────────────────\n\n private async authHeaders(): Promise<Record<string, string>> {\n if (this.accessTokenFn) {\n if (!this.cachedToken || isTokenExpired(this.cachedToken)) {\n this.cachedToken = await this.accessTokenFn()\n }\n return { Authorization: `Bearer ${this.cachedToken}` }\n }\n\n if (this.internalKey) {\n return { 'X-Internal-Key': this.internalKey }\n }\n\n return {}\n }\n\n // ─── Core fetch ──────────────────────────────────────────\n\n private async rawFetch<T>(\n method: string,\n path: string,\n body?: unknown,\n attempt = 0,\n ): Promise<ApiEnvelope<T>> {\n const headers = await this.authHeaders()\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), this.timeoutMs)\n\n let response: Response\n try {\n response = await fetch(`${this.baseUrl}${path}`, {\n method,\n headers: body !== undefined\n ? { ...headers, 'Content-Type': 'application/json' }\n : headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n })\n } catch (err) {\n clearTimeout(timer)\n if (attempt < this.retries) {\n await sleep(backoff(attempt))\n return this.rawFetch<T>(method, path, body, attempt + 1)\n }\n throw new DocmanError(`Network error: ${(err as Error).message}`, 0, 'NETWORK_ERROR')\n } finally {\n clearTimeout(timer)\n }\n\n if (response.status >= 500 && attempt < this.retries) {\n await sleep(backoff(attempt))\n return this.rawFetch<T>(method, path, body, attempt + 1)\n }\n\n const envelope = await response.json() as ApiEnvelope<T>\n\n if (!response.ok || !envelope.success) {\n const { code, message } = extractError(envelope)\n throw new DocmanError(message, response.status, code)\n }\n\n return envelope\n }\n\n private async fetchData<T>(method: string, path: string, body?: unknown): Promise<T> {\n const envelope = await this.rawFetch<T>(method, path, body)\n return envelope.data as T\n }\n\n private async fetchList<T>(path: string): Promise<ListResult<T>> {\n const envelope = await this.rawFetch<T[]>('GET', path)\n return {\n data: envelope.data ?? [],\n meta: envelope.meta ?? { total: 0, page: 1, limit: 20 },\n }\n }\n\n private buildQuery<T extends object>(params: T): string {\n const pairs = Object.entries(params)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n return pairs.length > 0 ? `?${pairs.join('&')}` : ''\n }\n\n /** Fetch with FormData body (multipart), return raw binary buffer. */\n private async fetchBinary(\n method: string,\n path: string,\n formData: FormData,\n attempt = 0,\n ): Promise<Buffer> {\n const headers = await this.authHeaders()\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), this.timeoutMs)\n\n let response: Response\n try {\n response = await fetch(`${this.baseUrl}${path}`, {\n method,\n headers,\n body: formData,\n signal: controller.signal,\n })\n } catch (err) {\n clearTimeout(timer)\n if (attempt < this.retries) {\n await sleep(backoff(attempt))\n return this.fetchBinary(method, path, formData, attempt + 1)\n }\n throw new DocmanError(`Network error: ${(err as Error).message}`, 0, 'NETWORK_ERROR')\n } finally {\n clearTimeout(timer)\n }\n\n if (response.status >= 500 && attempt < this.retries) {\n await sleep(backoff(attempt))\n return this.fetchBinary(method, path, formData, attempt + 1)\n }\n\n if (!response.ok) {\n const envelope = await response.json() as ApiEnvelope<never>\n const { code, message } = extractError(envelope)\n throw new DocmanError(message, response.status, code)\n }\n\n return Buffer.from(await response.arrayBuffer())\n }\n\n /** POST multipart form and parse the JSON response envelope. */\n private async fetchMultipartJson<T>(path: string, formData: FormData): Promise<T> {\n const headers = await this.authHeaders()\n\n const response = await fetch(`${this.baseUrl}${path}`, {\n method: 'POST',\n headers,\n body: formData,\n })\n\n const envelope = await response.json() as ApiEnvelope<T>\n if (!response.ok || !envelope.success) {\n const { code, message } = extractError(envelope)\n throw new DocmanError(message, response.status, code)\n }\n\n return envelope.data as T\n }\n\n /** PUT multipart form and parse the JSON response envelope. */\n private async putMultipartJson<T>(path: string, formData: FormData): Promise<T> {\n const headers = await this.authHeaders()\n\n const response = await fetch(`${this.baseUrl}${path}`, {\n method: 'PUT',\n headers,\n body: formData,\n })\n\n const envelope = await response.json() as ApiEnvelope<T>\n if (!response.ok || !envelope.success) {\n const { code, message } = extractError(envelope)\n throw new DocmanError(message, response.status, code)\n }\n\n return envelope.data as T\n }\n\n // ─── HTML Templates ──────────────────────────────────────\n\n async createHtmlTemplate(options: CreateHtmlTemplateOptions): Promise<HtmlTemplate> {\n return this.fetchData<HtmlTemplate>('POST', '/templates/html', options)\n }\n\n async listHtmlTemplates(query: HtmlTemplateListQuery = {}): Promise<ListResult<HtmlTemplate>> {\n return this.fetchList<HtmlTemplate>(`/templates/html${this.buildQuery(query)}`)\n }\n\n async getHtmlTemplate(id: string): Promise<HtmlTemplate> {\n return this.fetchData<HtmlTemplate>('GET', `/templates/html/${encodeURIComponent(id)}`)\n }\n\n async updateHtmlTemplate(id: string, options: UpdateHtmlTemplateOptions): Promise<HtmlTemplate> {\n return this.fetchData<HtmlTemplate>('PUT', `/templates/html/${encodeURIComponent(id)}`, options)\n }\n\n async deleteHtmlTemplate(id: string): Promise<HtmlTemplate> {\n return this.fetchData<HtmlTemplate>('DELETE', `/templates/html/${encodeURIComponent(id)}`)\n }\n\n // ─── PDF Templates ───────────────────────────────────────\n\n /**\n * Upload a PDF form template.\n * @param file Raw PDF bytes (Buffer or Uint8Array)\n * @param options Name, description, and optional coordinates/isSystem flags\n */\n async uploadPdfTemplate(\n file: Buffer | Uint8Array,\n options: CreatePdfTemplateOptions = {},\n ): Promise<PdfTemplate> {\n const form = new FormData()\n const filename = options.name ?? 'template.pdf'\n form.append('file', new Blob([file], { type: 'application/pdf' }), filename)\n if (options.name) form.append('name', options.name)\n if (options.description) form.append('description', options.description)\n if (options.coordinates) form.append('coordinates', JSON.stringify(options.coordinates))\n if (options.isSystem !== undefined) form.append('isSystem', String(options.isSystem))\n\n return this.fetchMultipartJson<PdfTemplate>('/templates/pdf', form)\n }\n\n async listPdfTemplates(query: PdfTemplateListQuery = {}): Promise<ListResult<PdfTemplate>> {\n return this.fetchList<PdfTemplate>(`/templates/pdf${this.buildQuery(query)}`)\n }\n\n async getPdfTemplate(id: string): Promise<PdfTemplate> {\n return this.fetchData<PdfTemplate>('GET', `/templates/pdf/${encodeURIComponent(id)}`)\n }\n\n async getPdfTemplateFields(id: string): Promise<readonly PdfField[]> {\n return this.fetchData<PdfField[]>('GET', `/templates/pdf/${encodeURIComponent(id)}/fields`)\n }\n\n async getPdfTemplateDownloadUrl(id: string): Promise<string> {\n const data = await this.fetchData<{ url: string }>('GET', `/templates/pdf/${encodeURIComponent(id)}/download`)\n return data.url\n }\n\n /**\n * Update a PDF template's metadata, and optionally replace the PDF file.\n * @param file If provided, replaces the stored PDF and re-extracts form fields\n */\n async updatePdfTemplate(\n id: string,\n options: UpdatePdfTemplateOptions,\n file?: Buffer | Uint8Array,\n ): Promise<PdfTemplate> {\n if (file) {\n const form = new FormData()\n form.append('file', new Blob([file], { type: 'application/pdf' }), 'template.pdf')\n if (options.name) form.append('name', options.name)\n if (options.description) form.append('description', options.description)\n if (options.coordinates) form.append('coordinates', JSON.stringify(options.coordinates))\n\n return this.putMultipartJson<PdfTemplate>(`/templates/pdf/${encodeURIComponent(id)}`, form)\n }\n\n return this.fetchData<PdfTemplate>('PUT', `/templates/pdf/${encodeURIComponent(id)}`, options)\n }\n\n async deletePdfTemplate(id: string): Promise<PdfTemplate> {\n return this.fetchData<PdfTemplate>('DELETE', `/templates/pdf/${encodeURIComponent(id)}`)\n }\n\n // ─── Template Groups ─────────────────────────────────────\n\n async createTemplateGroup(options: CreateTemplateGroupOptions): Promise<TemplateGroup> {\n return this.fetchData<TemplateGroup>('POST', '/template-groups', options)\n }\n\n async listTemplateGroups(query: ListQuery = {}): Promise<ListResult<TemplateGroup>> {\n return this.fetchList<TemplateGroup>(`/template-groups${this.buildQuery(query)}`)\n }\n\n async getTemplateGroup(id: string): Promise<TemplateGroup> {\n return this.fetchData<TemplateGroup>('GET', `/template-groups/${encodeURIComponent(id)}`)\n }\n\n async updateTemplateGroup(id: string, options: UpdateTemplateGroupOptions): Promise<TemplateGroup> {\n return this.fetchData<TemplateGroup>('PUT', `/template-groups/${encodeURIComponent(id)}`, options)\n }\n\n async deleteTemplateGroup(id: string): Promise<void> {\n await this.fetchData<{ deleted: boolean }>('DELETE', `/template-groups/${encodeURIComponent(id)}`)\n }\n\n // ─── Document Generation ─────────────────────────────────\n\n /**\n * Generate a document and store it in S3.\n * Returns a presigned download URL and a public share URL.\n */\n async generate(options: GenerateOptions): Promise<GenerateResult> {\n return this.fetchData<GenerateResult>('POST', '/documents/generate', {\n templateIds: options.templateIds,\n templateData: options.data,\n name: options.name,\n description: options.description,\n })\n }\n\n /**\n * Generate a document and stream the PDF buffer directly.\n * Nothing is stored — useful for previews or on-the-fly delivery.\n */\n async generatePassthrough(options: GenerateOptions): Promise<Buffer> {\n const headers = await this.authHeaders()\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), this.timeoutMs)\n\n let response: Response\n try {\n response = await fetch(`${this.baseUrl}/documents/generate/passthrough`, {\n method: 'POST',\n headers: { ...headers, 'Content-Type': 'application/json' },\n body: JSON.stringify({\n templateIds: options.templateIds,\n templateData: options.data,\n name: options.name,\n description: options.description,\n }),\n signal: controller.signal,\n })\n } catch (err) {\n clearTimeout(timer)\n throw new DocmanError(`Network error: ${(err as Error).message}`, 0, 'NETWORK_ERROR')\n } finally {\n clearTimeout(timer)\n }\n\n if (!response.ok) {\n const envelope = await response.json() as ApiEnvelope<never>\n const { code, message } = extractError(envelope)\n throw new DocmanError(message, response.status, code)\n }\n\n return Buffer.from(await response.arrayBuffer())\n }\n\n async listDocuments(query: ListQuery = {}): Promise<ListResult<DocmanDocument>> {\n return this.fetchList<DocmanDocument>(`/documents${this.buildQuery(query)}`)\n }\n\n async getDocument(id: string): Promise<DocmanDocument> {\n return this.fetchData<DocmanDocument>('GET', `/documents/${encodeURIComponent(id)}`)\n }\n\n /** Get a presigned S3 download URL for a stored document (1-hour TTL). */\n async downloadUrl(id: string): Promise<string> {\n const data = await this.fetchData<{ url: string }>('GET', `/documents/${encodeURIComponent(id)}/download`)\n return data.url\n }\n\n async getVersions(id: string): Promise<readonly DocumentVersion[]> {\n return this.fetchData<DocumentVersion[]>('GET', `/documents/${encodeURIComponent(id)}/versions`)\n }\n\n /** Re-render a stored document using the original template data. */\n async regenerate(id: string): Promise<GenerateResult> {\n return this.fetchData<GenerateResult>('POST', `/documents/${encodeURIComponent(id)}/regenerate`)\n }\n\n // ─── PDF Operations ──────────────────────────────────────\n\n /**\n * Merge two or more PDF buffers into a single PDF.\n * Returns the merged PDF as a Buffer.\n */\n async merge(buffers: readonly (Buffer | Uint8Array)[]): Promise<Buffer> {\n if (buffers.length < 2) {\n throw new DocmanError('At least 2 PDF buffers are required for merge', 400, 'VALIDATION_ERROR')\n }\n const form = new FormData()\n for (const buf of buffers) {\n form.append('files', new Blob([buf], { type: 'application/pdf' }), 'file.pdf')\n }\n return this.fetchBinary('POST', '/operations/merge', form)\n }\n\n /**\n * Split a PDF into parts by page ranges.\n * Returns an array of SplitPart with buffer, range, and size info.\n */\n async split(buffer: Buffer | Uint8Array, ranges: readonly PageRange[]): Promise<readonly SplitPart[]> {\n if (ranges.length === 0) {\n throw new DocmanError('At least 1 page range is required', 400, 'VALIDATION_ERROR')\n }\n\n const form = new FormData()\n form.append('file', new Blob([buffer], { type: 'application/pdf' }), 'file.pdf')\n form.append('ranges', JSON.stringify(ranges))\n\n const headers = await this.authHeaders()\n const response = await fetch(`${this.baseUrl}/operations/split`, {\n method: 'POST',\n headers,\n body: form,\n })\n\n if (!response.ok) {\n const envelope = await response.json() as ApiEnvelope<never>\n const { code, message } = extractError(envelope)\n throw new DocmanError(message, response.status, code)\n }\n\n const contentType = response.headers.get('content-type') ?? ''\n\n if (contentType.includes('application/json')) {\n type SplitResponse = {\n success: true\n data: Array<{ index: number; range: PageRange; base64: string; sizeBytes: number }>\n }\n const json = await response.json() as SplitResponse\n return json.data.map((part) => ({\n index: part.index,\n range: part.range,\n buffer: Buffer.from(part.base64, 'base64'),\n sizeBytes: part.sizeBytes,\n }))\n }\n\n // Single range — binary response\n const buf = Buffer.from(await response.arrayBuffer())\n return [{ index: 0, range: ranges[0], buffer: buf, sizeBytes: buf.length }]\n }\n\n /** Get the page count of a PDF buffer. */\n async pageCount(buffer: Buffer | Uint8Array): Promise<number> {\n const form = new FormData()\n form.append('file', new Blob([buffer], { type: 'application/pdf' }), 'file.pdf')\n\n const headers = await this.authHeaders()\n const response = await fetch(`${this.baseUrl}/operations/page-count`, {\n method: 'POST',\n headers,\n body: form,\n })\n\n if (!response.ok) {\n const envelope = await response.json() as ApiEnvelope<never>\n const { code, message } = extractError(envelope)\n throw new DocmanError(message, response.status, code)\n }\n\n const json = await response.json() as { success: true; data: { pages: number } }\n return json.data.pages\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/mock.cjs
ADDED
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/mock.ts
|
|
21
|
+
var mock_exports = {};
|
|
22
|
+
__export(mock_exports, {
|
|
23
|
+
MockDocmanClient: () => MockDocmanClient
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(mock_exports);
|
|
26
|
+
var import_node_crypto = require("crypto");
|
|
27
|
+
|
|
28
|
+
// src/errors.ts
|
|
29
|
+
var DocmanError = class extends Error {
|
|
30
|
+
constructor(message, statusCode, code, details) {
|
|
31
|
+
super(message);
|
|
32
|
+
this.statusCode = statusCode;
|
|
33
|
+
this.code = code;
|
|
34
|
+
this.details = details;
|
|
35
|
+
this.name = "DocmanError";
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// src/mock.ts
|
|
40
|
+
function now() {
|
|
41
|
+
return (/* @__PURE__ */ new Date()).toISOString();
|
|
42
|
+
}
|
|
43
|
+
function paginate(items, query) {
|
|
44
|
+
const page = query.page ?? 1;
|
|
45
|
+
const limit = query.limit ?? 20;
|
|
46
|
+
const start = (page - 1) * limit;
|
|
47
|
+
return {
|
|
48
|
+
data: items.slice(start, start + limit),
|
|
49
|
+
meta: { total: items.length, page, limit }
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function findOrThrow(map, id, label) {
|
|
53
|
+
const item = map.get(id);
|
|
54
|
+
if (!item) throw new DocmanError(`${label} not found`, 404, "NOT_FOUND");
|
|
55
|
+
return item;
|
|
56
|
+
}
|
|
57
|
+
var MockDocmanClient = class {
|
|
58
|
+
htmlTemplates = /* @__PURE__ */ new Map();
|
|
59
|
+
pdfTemplates = /* @__PURE__ */ new Map();
|
|
60
|
+
templateGroups = /* @__PURE__ */ new Map();
|
|
61
|
+
documents = /* @__PURE__ */ new Map();
|
|
62
|
+
documentVersions = /* @__PURE__ */ new Map();
|
|
63
|
+
/** Reset all in-memory state between tests. */
|
|
64
|
+
reset() {
|
|
65
|
+
this.htmlTemplates.clear();
|
|
66
|
+
this.pdfTemplates.clear();
|
|
67
|
+
this.templateGroups.clear();
|
|
68
|
+
this.documents.clear();
|
|
69
|
+
this.documentVersions.clear();
|
|
70
|
+
}
|
|
71
|
+
// ─── HTML Templates ────────────────────────────────────
|
|
72
|
+
async createHtmlTemplate(options) {
|
|
73
|
+
const template = {
|
|
74
|
+
_id: (0, import_node_crypto.randomUUID)(),
|
|
75
|
+
name: options.name,
|
|
76
|
+
description: options.description,
|
|
77
|
+
org: "mock-org",
|
|
78
|
+
html: options.html,
|
|
79
|
+
landscape: options.landscape ?? false,
|
|
80
|
+
variables: [],
|
|
81
|
+
isSystem: options.isSystem ?? false,
|
|
82
|
+
archived: false,
|
|
83
|
+
createdBy: "mock-user",
|
|
84
|
+
createdAt: now(),
|
|
85
|
+
updatedAt: now()
|
|
86
|
+
};
|
|
87
|
+
this.htmlTemplates.set(template._id, template);
|
|
88
|
+
return template;
|
|
89
|
+
}
|
|
90
|
+
async listHtmlTemplates(query = {}) {
|
|
91
|
+
const archived = query.archived ?? false;
|
|
92
|
+
const items = [...this.htmlTemplates.values()].filter((t) => t.archived === archived);
|
|
93
|
+
return paginate(items, query);
|
|
94
|
+
}
|
|
95
|
+
async getHtmlTemplate(id) {
|
|
96
|
+
return findOrThrow(this.htmlTemplates, id, "HTML template");
|
|
97
|
+
}
|
|
98
|
+
async updateHtmlTemplate(id, options) {
|
|
99
|
+
const existing = findOrThrow(this.htmlTemplates, id, "HTML template");
|
|
100
|
+
const updated = {
|
|
101
|
+
...existing,
|
|
102
|
+
...Object.fromEntries(Object.entries(options).filter(([, v]) => v !== void 0)),
|
|
103
|
+
updatedAt: now()
|
|
104
|
+
};
|
|
105
|
+
this.htmlTemplates.set(id, updated);
|
|
106
|
+
return updated;
|
|
107
|
+
}
|
|
108
|
+
async deleteHtmlTemplate(id) {
|
|
109
|
+
const existing = findOrThrow(this.htmlTemplates, id, "HTML template");
|
|
110
|
+
const archived = { ...existing, archived: true, updatedAt: now() };
|
|
111
|
+
this.htmlTemplates.set(id, archived);
|
|
112
|
+
return archived;
|
|
113
|
+
}
|
|
114
|
+
// ─── PDF Templates ────────────────────────────────────
|
|
115
|
+
async uploadPdfTemplate(_file, options = {}) {
|
|
116
|
+
const template = {
|
|
117
|
+
_id: (0, import_node_crypto.randomUUID)(),
|
|
118
|
+
name: options.name ?? "mock-template.pdf",
|
|
119
|
+
description: options.description,
|
|
120
|
+
org: "mock-org",
|
|
121
|
+
storageKey: `mock/templates/${(0, import_node_crypto.randomUUID)()}.pdf`,
|
|
122
|
+
fields: [],
|
|
123
|
+
pages: 1,
|
|
124
|
+
coordinates: options.coordinates,
|
|
125
|
+
isSystem: options.isSystem ?? false,
|
|
126
|
+
archived: false,
|
|
127
|
+
createdBy: "mock-user",
|
|
128
|
+
createdAt: now(),
|
|
129
|
+
updatedAt: now()
|
|
130
|
+
};
|
|
131
|
+
this.pdfTemplates.set(template._id, template);
|
|
132
|
+
return template;
|
|
133
|
+
}
|
|
134
|
+
async listPdfTemplates(query = {}) {
|
|
135
|
+
const archived = query.archived ?? false;
|
|
136
|
+
const items = [...this.pdfTemplates.values()].filter((t) => t.archived === archived);
|
|
137
|
+
return paginate(items, query);
|
|
138
|
+
}
|
|
139
|
+
async getPdfTemplate(id) {
|
|
140
|
+
return findOrThrow(this.pdfTemplates, id, "PDF template");
|
|
141
|
+
}
|
|
142
|
+
async getPdfTemplateFields(id) {
|
|
143
|
+
const template = findOrThrow(this.pdfTemplates, id, "PDF template");
|
|
144
|
+
return template.fields;
|
|
145
|
+
}
|
|
146
|
+
async getPdfTemplateDownloadUrl(id) {
|
|
147
|
+
findOrThrow(this.pdfTemplates, id, "PDF template");
|
|
148
|
+
return `https://mock-s3.example.com/templates/${id}.pdf?token=mock`;
|
|
149
|
+
}
|
|
150
|
+
async updatePdfTemplate(id, options, _file) {
|
|
151
|
+
const existing = findOrThrow(this.pdfTemplates, id, "PDF template");
|
|
152
|
+
const updated = {
|
|
153
|
+
...existing,
|
|
154
|
+
...Object.fromEntries(Object.entries(options).filter(([, v]) => v !== void 0)),
|
|
155
|
+
updatedAt: now()
|
|
156
|
+
};
|
|
157
|
+
this.pdfTemplates.set(id, updated);
|
|
158
|
+
return updated;
|
|
159
|
+
}
|
|
160
|
+
async deletePdfTemplate(id) {
|
|
161
|
+
const existing = findOrThrow(this.pdfTemplates, id, "PDF template");
|
|
162
|
+
const archived = { ...existing, archived: true, updatedAt: now() };
|
|
163
|
+
this.pdfTemplates.set(id, archived);
|
|
164
|
+
return archived;
|
|
165
|
+
}
|
|
166
|
+
// ─── Template Groups ──────────────────────────────────
|
|
167
|
+
async createTemplateGroup(options) {
|
|
168
|
+
const group = {
|
|
169
|
+
_id: (0, import_node_crypto.randomUUID)(),
|
|
170
|
+
name: options.name,
|
|
171
|
+
org: "mock-org",
|
|
172
|
+
templates: options.templates,
|
|
173
|
+
terms: options.terms,
|
|
174
|
+
coordinates: options.coordinates,
|
|
175
|
+
createdBy: "mock-user",
|
|
176
|
+
createdAt: now(),
|
|
177
|
+
updatedAt: now()
|
|
178
|
+
};
|
|
179
|
+
this.templateGroups.set(group._id, group);
|
|
180
|
+
return group;
|
|
181
|
+
}
|
|
182
|
+
async listTemplateGroups(query = {}) {
|
|
183
|
+
const items = [...this.templateGroups.values()];
|
|
184
|
+
return paginate(items, query);
|
|
185
|
+
}
|
|
186
|
+
async getTemplateGroup(id) {
|
|
187
|
+
return findOrThrow(this.templateGroups, id, "Template group");
|
|
188
|
+
}
|
|
189
|
+
async updateTemplateGroup(id, options) {
|
|
190
|
+
const existing = findOrThrow(this.templateGroups, id, "Template group");
|
|
191
|
+
const updated = {
|
|
192
|
+
...existing,
|
|
193
|
+
...Object.fromEntries(Object.entries(options).filter(([, v]) => v !== void 0)),
|
|
194
|
+
updatedAt: now()
|
|
195
|
+
};
|
|
196
|
+
this.templateGroups.set(id, updated);
|
|
197
|
+
return updated;
|
|
198
|
+
}
|
|
199
|
+
async deleteTemplateGroup(id) {
|
|
200
|
+
if (!this.templateGroups.has(id)) {
|
|
201
|
+
throw new DocmanError("Template group not found", 404, "NOT_FOUND");
|
|
202
|
+
}
|
|
203
|
+
this.templateGroups.delete(id);
|
|
204
|
+
}
|
|
205
|
+
// ─── Documents ────────────────────────────────────────
|
|
206
|
+
async generate(options) {
|
|
207
|
+
const docId = (0, import_node_crypto.randomUUID)();
|
|
208
|
+
const shareToken = (0, import_node_crypto.randomUUID)().replace(/-/g, "");
|
|
209
|
+
const doc = {
|
|
210
|
+
_id: docId,
|
|
211
|
+
name: options.name,
|
|
212
|
+
description: options.description,
|
|
213
|
+
org: "mock-org",
|
|
214
|
+
storageKey: `mock/documents/${docId}/v1.pdf`,
|
|
215
|
+
version: 1,
|
|
216
|
+
sourceTemplates: options.templateIds.map((id) => ({ templateId: id, templateType: "html" })),
|
|
217
|
+
templateData: options.data,
|
|
218
|
+
pages: 1,
|
|
219
|
+
sizeBytes: 1024,
|
|
220
|
+
deliveryMode: "managed",
|
|
221
|
+
shareToken,
|
|
222
|
+
createdBy: "mock-user",
|
|
223
|
+
createdAt: now(),
|
|
224
|
+
updatedAt: now()
|
|
225
|
+
};
|
|
226
|
+
this.documents.set(docId, doc);
|
|
227
|
+
this.documentVersions.set(docId, [{
|
|
228
|
+
_id: docId,
|
|
229
|
+
version: 1,
|
|
230
|
+
pages: 1,
|
|
231
|
+
sizeBytes: 1024,
|
|
232
|
+
createdAt: doc.createdAt,
|
|
233
|
+
createdBy: "mock-user"
|
|
234
|
+
}]);
|
|
235
|
+
return {
|
|
236
|
+
documentId: docId,
|
|
237
|
+
version: 1,
|
|
238
|
+
downloadUrl: `https://mock-s3.example.com/documents/${docId}/v1.pdf?token=mock`,
|
|
239
|
+
publicUrl: `http://localhost:3000/d/${shareToken}`,
|
|
240
|
+
pages: 1,
|
|
241
|
+
sizeBytes: 1024
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
async generatePassthrough(_options) {
|
|
245
|
+
return Buffer.from("%PDF-1.4 mock", "utf8");
|
|
246
|
+
}
|
|
247
|
+
async listDocuments(query = {}) {
|
|
248
|
+
const items = [...this.documents.values()].sort(
|
|
249
|
+
(a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()
|
|
250
|
+
);
|
|
251
|
+
return paginate(items, query);
|
|
252
|
+
}
|
|
253
|
+
async getDocument(id) {
|
|
254
|
+
return findOrThrow(this.documents, id, "Document");
|
|
255
|
+
}
|
|
256
|
+
async downloadUrl(id) {
|
|
257
|
+
findOrThrow(this.documents, id, "Document");
|
|
258
|
+
return `https://mock-s3.example.com/documents/${id}/v1.pdf?token=mock`;
|
|
259
|
+
}
|
|
260
|
+
async getVersions(id) {
|
|
261
|
+
findOrThrow(this.documents, id, "Document");
|
|
262
|
+
return this.documentVersions.get(id) ?? [];
|
|
263
|
+
}
|
|
264
|
+
async regenerate(id) {
|
|
265
|
+
const original = findOrThrow(this.documents, id, "Document");
|
|
266
|
+
const newVersion = original.version + 1;
|
|
267
|
+
const newDocId = (0, import_node_crypto.randomUUID)();
|
|
268
|
+
const shareToken = (0, import_node_crypto.randomUUID)().replace(/-/g, "");
|
|
269
|
+
const newDoc = {
|
|
270
|
+
...original,
|
|
271
|
+
_id: newDocId,
|
|
272
|
+
version: newVersion,
|
|
273
|
+
shareToken,
|
|
274
|
+
storageKey: `mock/documents/${newDocId}/v${newVersion}.pdf`,
|
|
275
|
+
createdAt: now(),
|
|
276
|
+
updatedAt: now()
|
|
277
|
+
};
|
|
278
|
+
this.documents.set(newDocId, newDoc);
|
|
279
|
+
const versions = this.documentVersions.get(id) ?? [];
|
|
280
|
+
this.documentVersions.set(newDocId, [
|
|
281
|
+
...versions,
|
|
282
|
+
{
|
|
283
|
+
_id: newDocId,
|
|
284
|
+
version: newVersion,
|
|
285
|
+
pages: original.pages,
|
|
286
|
+
sizeBytes: original.sizeBytes,
|
|
287
|
+
createdAt: newDoc.createdAt,
|
|
288
|
+
createdBy: "mock-user"
|
|
289
|
+
}
|
|
290
|
+
]);
|
|
291
|
+
return {
|
|
292
|
+
documentId: newDocId,
|
|
293
|
+
version: newVersion,
|
|
294
|
+
downloadUrl: `https://mock-s3.example.com/documents/${newDocId}/v${newVersion}.pdf?token=mock`,
|
|
295
|
+
publicUrl: `http://localhost:3000/d/${shareToken}`,
|
|
296
|
+
pages: original.pages,
|
|
297
|
+
sizeBytes: original.sizeBytes
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
// ─── Operations ──────────────────────────────────────
|
|
301
|
+
async merge(buffers) {
|
|
302
|
+
if (buffers.length < 2) {
|
|
303
|
+
throw new DocmanError("At least 2 PDF buffers are required for merge", 400, "VALIDATION_ERROR");
|
|
304
|
+
}
|
|
305
|
+
return Buffer.from("%PDF-1.4 mock-merged", "utf8");
|
|
306
|
+
}
|
|
307
|
+
async split(_buffer, ranges) {
|
|
308
|
+
if (ranges.length === 0) {
|
|
309
|
+
throw new DocmanError("At least 1 page range is required", 400, "VALIDATION_ERROR");
|
|
310
|
+
}
|
|
311
|
+
return ranges.map((range, index) => ({
|
|
312
|
+
index,
|
|
313
|
+
range,
|
|
314
|
+
buffer: Buffer.from(`%PDF-1.4 mock-part-${index}`, "utf8"),
|
|
315
|
+
sizeBytes: 20
|
|
316
|
+
}));
|
|
317
|
+
}
|
|
318
|
+
async pageCount(_buffer) {
|
|
319
|
+
return 1;
|
|
320
|
+
}
|
|
321
|
+
// ─── Test Helpers ────────────────────────────────────
|
|
322
|
+
/** Read all stored documents (for test assertions). */
|
|
323
|
+
getDocuments() {
|
|
324
|
+
return this.documents;
|
|
325
|
+
}
|
|
326
|
+
/** Read all stored HTML templates (for test assertions). */
|
|
327
|
+
getHtmlTemplates() {
|
|
328
|
+
return this.htmlTemplates;
|
|
329
|
+
}
|
|
330
|
+
/** Read all stored PDF templates (for test assertions). */
|
|
331
|
+
getPdfTemplates() {
|
|
332
|
+
return this.pdfTemplates;
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
336
|
+
0 && (module.exports = {
|
|
337
|
+
MockDocmanClient
|
|
338
|
+
});
|
|
339
|
+
//# sourceMappingURL=mock.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mock.ts","../src/errors.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto'\nimport { DocmanError } from './errors.js'\nimport type {\n HtmlTemplate,\n CreateHtmlTemplateOptions,\n UpdateHtmlTemplateOptions,\n HtmlTemplateListQuery,\n PdfTemplate,\n PdfField,\n CreatePdfTemplateOptions,\n UpdatePdfTemplateOptions,\n PdfTemplateListQuery,\n TemplateGroup,\n CreateTemplateGroupOptions,\n UpdateTemplateGroupOptions,\n DocmanDocument,\n DocumentVersion,\n GenerateOptions,\n GenerateResult,\n ListQuery,\n ListResult,\n PageRange,\n SplitPart,\n} from './types.js'\n\n// ─── Helpers ──────────────────────────────────────────────\n\nfunction now(): string {\n return new Date().toISOString()\n}\n\nfunction paginate<T>(items: readonly T[], query: ListQuery): ListResult<T> {\n const page = query.page ?? 1\n const limit = query.limit ?? 20\n const start = (page - 1) * limit\n return {\n data: items.slice(start, start + limit),\n meta: { total: items.length, page, limit },\n }\n}\n\nfunction findOrThrow<T extends { _id: string }>(\n map: Map<string, T>,\n id: string,\n label: string,\n): T {\n const item = map.get(id)\n if (!item) throw new DocmanError(`${label} not found`, 404, 'NOT_FOUND')\n return item\n}\n\n// ─── MockDocmanClient ────────────────────────────────────\n\n/**\n * In-memory implementation of DocmanClient for use in tests.\n *\n * Import from @insureco/docman/testing:\n * import { MockDocmanClient } from '@insureco/docman/testing'\n *\n * @example\n * const docman = new MockDocmanClient()\n * const template = await docman.createHtmlTemplate({ name: 'Quote', html: '<p>{{name}}</p>' })\n * const result = await docman.generate({ templateIds: [template._id], data: { name: 'Acme' }, name: 'test' })\n * expect(result.pages).toBe(1)\n */\nexport class MockDocmanClient {\n private readonly htmlTemplates = new Map<string, HtmlTemplate>()\n private readonly pdfTemplates = new Map<string, PdfTemplate>()\n private readonly templateGroups = new Map<string, TemplateGroup>()\n private readonly documents = new Map<string, DocmanDocument>()\n private readonly documentVersions = new Map<string, DocumentVersion[]>()\n\n /** Reset all in-memory state between tests. */\n reset(): void {\n this.htmlTemplates.clear()\n this.pdfTemplates.clear()\n this.templateGroups.clear()\n this.documents.clear()\n this.documentVersions.clear()\n }\n\n // ─── HTML Templates ────────────────────────────────────\n\n async createHtmlTemplate(options: CreateHtmlTemplateOptions): Promise<HtmlTemplate> {\n const template: HtmlTemplate = {\n _id: randomUUID(),\n name: options.name,\n description: options.description,\n org: 'mock-org',\n html: options.html,\n landscape: options.landscape ?? false,\n variables: [],\n isSystem: options.isSystem ?? false,\n archived: false,\n createdBy: 'mock-user',\n createdAt: now(),\n updatedAt: now(),\n }\n this.htmlTemplates.set(template._id, template)\n return template\n }\n\n async listHtmlTemplates(query: HtmlTemplateListQuery = {}): Promise<ListResult<HtmlTemplate>> {\n const archived = query.archived ?? false\n const items = [...this.htmlTemplates.values()].filter((t) => t.archived === archived)\n return paginate(items, query)\n }\n\n async getHtmlTemplate(id: string): Promise<HtmlTemplate> {\n return findOrThrow(this.htmlTemplates, id, 'HTML template')\n }\n\n async updateHtmlTemplate(id: string, options: UpdateHtmlTemplateOptions): Promise<HtmlTemplate> {\n const existing = findOrThrow(this.htmlTemplates, id, 'HTML template')\n const updated: HtmlTemplate = {\n ...existing,\n ...Object.fromEntries(Object.entries(options).filter(([, v]) => v !== undefined)),\n updatedAt: now(),\n }\n this.htmlTemplates.set(id, updated)\n return updated\n }\n\n async deleteHtmlTemplate(id: string): Promise<HtmlTemplate> {\n const existing = findOrThrow(this.htmlTemplates, id, 'HTML template')\n const archived: HtmlTemplate = { ...existing, archived: true, updatedAt: now() }\n this.htmlTemplates.set(id, archived)\n return archived\n }\n\n // ─── PDF Templates ────────────────────────────────────\n\n async uploadPdfTemplate(\n _file: Buffer | Uint8Array,\n options: CreatePdfTemplateOptions = {},\n ): Promise<PdfTemplate> {\n const template: PdfTemplate = {\n _id: randomUUID(),\n name: options.name ?? 'mock-template.pdf',\n description: options.description,\n org: 'mock-org',\n storageKey: `mock/templates/${randomUUID()}.pdf`,\n fields: [],\n pages: 1,\n coordinates: options.coordinates,\n isSystem: options.isSystem ?? false,\n archived: false,\n createdBy: 'mock-user',\n createdAt: now(),\n updatedAt: now(),\n }\n this.pdfTemplates.set(template._id, template)\n return template\n }\n\n async listPdfTemplates(query: PdfTemplateListQuery = {}): Promise<ListResult<PdfTemplate>> {\n const archived = query.archived ?? false\n const items = [...this.pdfTemplates.values()].filter((t) => t.archived === archived)\n return paginate(items, query)\n }\n\n async getPdfTemplate(id: string): Promise<PdfTemplate> {\n return findOrThrow(this.pdfTemplates, id, 'PDF template')\n }\n\n async getPdfTemplateFields(id: string): Promise<readonly PdfField[]> {\n const template = findOrThrow(this.pdfTemplates, id, 'PDF template')\n return template.fields\n }\n\n async getPdfTemplateDownloadUrl(id: string): Promise<string> {\n findOrThrow(this.pdfTemplates, id, 'PDF template')\n return `https://mock-s3.example.com/templates/${id}.pdf?token=mock`\n }\n\n async updatePdfTemplate(\n id: string,\n options: UpdatePdfTemplateOptions,\n _file?: Buffer | Uint8Array,\n ): Promise<PdfTemplate> {\n const existing = findOrThrow(this.pdfTemplates, id, 'PDF template')\n const updated: PdfTemplate = {\n ...existing,\n ...Object.fromEntries(Object.entries(options).filter(([, v]) => v !== undefined)),\n updatedAt: now(),\n }\n this.pdfTemplates.set(id, updated)\n return updated\n }\n\n async deletePdfTemplate(id: string): Promise<PdfTemplate> {\n const existing = findOrThrow(this.pdfTemplates, id, 'PDF template')\n const archived: PdfTemplate = { ...existing, archived: true, updatedAt: now() }\n this.pdfTemplates.set(id, archived)\n return archived\n }\n\n // ─── Template Groups ──────────────────────────────────\n\n async createTemplateGroup(options: CreateTemplateGroupOptions): Promise<TemplateGroup> {\n const group: TemplateGroup = {\n _id: randomUUID(),\n name: options.name,\n org: 'mock-org',\n templates: options.templates,\n terms: options.terms,\n coordinates: options.coordinates,\n createdBy: 'mock-user',\n createdAt: now(),\n updatedAt: now(),\n }\n this.templateGroups.set(group._id, group)\n return group\n }\n\n async listTemplateGroups(query: ListQuery = {}): Promise<ListResult<TemplateGroup>> {\n const items = [...this.templateGroups.values()]\n return paginate(items, query)\n }\n\n async getTemplateGroup(id: string): Promise<TemplateGroup> {\n return findOrThrow(this.templateGroups, id, 'Template group')\n }\n\n async updateTemplateGroup(id: string, options: UpdateTemplateGroupOptions): Promise<TemplateGroup> {\n const existing = findOrThrow(this.templateGroups, id, 'Template group')\n const updated: TemplateGroup = {\n ...existing,\n ...Object.fromEntries(Object.entries(options).filter(([, v]) => v !== undefined)),\n updatedAt: now(),\n }\n this.templateGroups.set(id, updated)\n return updated\n }\n\n async deleteTemplateGroup(id: string): Promise<void> {\n if (!this.templateGroups.has(id)) {\n throw new DocmanError('Template group not found', 404, 'NOT_FOUND')\n }\n this.templateGroups.delete(id)\n }\n\n // ─── Documents ────────────────────────────────────────\n\n async generate(options: GenerateOptions): Promise<GenerateResult> {\n const docId = randomUUID()\n const shareToken = randomUUID().replace(/-/g, '')\n\n const doc: DocmanDocument = {\n _id: docId,\n name: options.name,\n description: options.description,\n org: 'mock-org',\n storageKey: `mock/documents/${docId}/v1.pdf`,\n version: 1,\n sourceTemplates: options.templateIds.map((id) => ({ templateId: id, templateType: 'html' })),\n templateData: options.data,\n pages: 1,\n sizeBytes: 1024,\n deliveryMode: 'managed',\n shareToken,\n createdBy: 'mock-user',\n createdAt: now(),\n updatedAt: now(),\n }\n\n this.documents.set(docId, doc)\n this.documentVersions.set(docId, [{\n _id: docId,\n version: 1,\n pages: 1,\n sizeBytes: 1024,\n createdAt: doc.createdAt,\n createdBy: 'mock-user',\n }])\n\n return {\n documentId: docId,\n version: 1,\n downloadUrl: `https://mock-s3.example.com/documents/${docId}/v1.pdf?token=mock`,\n publicUrl: `http://localhost:3000/d/${shareToken}`,\n pages: 1,\n sizeBytes: 1024,\n }\n }\n\n async generatePassthrough(_options: GenerateOptions): Promise<Buffer> {\n return Buffer.from('%PDF-1.4 mock', 'utf8')\n }\n\n async listDocuments(query: ListQuery = {}): Promise<ListResult<DocmanDocument>> {\n const items = [...this.documents.values()].sort(\n (a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime(),\n )\n return paginate(items, query)\n }\n\n async getDocument(id: string): Promise<DocmanDocument> {\n return findOrThrow(this.documents, id, 'Document')\n }\n\n async downloadUrl(id: string): Promise<string> {\n findOrThrow(this.documents, id, 'Document')\n return `https://mock-s3.example.com/documents/${id}/v1.pdf?token=mock`\n }\n\n async getVersions(id: string): Promise<readonly DocumentVersion[]> {\n findOrThrow(this.documents, id, 'Document')\n return this.documentVersions.get(id) ?? []\n }\n\n async regenerate(id: string): Promise<GenerateResult> {\n const original = findOrThrow(this.documents, id, 'Document')\n const newVersion = original.version + 1\n const newDocId = randomUUID()\n const shareToken = randomUUID().replace(/-/g, '')\n\n const newDoc: DocmanDocument = {\n ...original,\n _id: newDocId,\n version: newVersion,\n shareToken,\n storageKey: `mock/documents/${newDocId}/v${newVersion}.pdf`,\n createdAt: now(),\n updatedAt: now(),\n }\n\n this.documents.set(newDocId, newDoc)\n\n const versions = this.documentVersions.get(id) ?? []\n this.documentVersions.set(newDocId, [\n ...versions,\n {\n _id: newDocId,\n version: newVersion,\n pages: original.pages,\n sizeBytes: original.sizeBytes,\n createdAt: newDoc.createdAt,\n createdBy: 'mock-user',\n },\n ])\n\n return {\n documentId: newDocId,\n version: newVersion,\n downloadUrl: `https://mock-s3.example.com/documents/${newDocId}/v${newVersion}.pdf?token=mock`,\n publicUrl: `http://localhost:3000/d/${shareToken}`,\n pages: original.pages,\n sizeBytes: original.sizeBytes,\n }\n }\n\n // ─── Operations ──────────────────────────────────────\n\n async merge(buffers: readonly (Buffer | Uint8Array)[]): Promise<Buffer> {\n if (buffers.length < 2) {\n throw new DocmanError('At least 2 PDF buffers are required for merge', 400, 'VALIDATION_ERROR')\n }\n return Buffer.from('%PDF-1.4 mock-merged', 'utf8')\n }\n\n async split(_buffer: Buffer | Uint8Array, ranges: readonly PageRange[]): Promise<readonly SplitPart[]> {\n if (ranges.length === 0) {\n throw new DocmanError('At least 1 page range is required', 400, 'VALIDATION_ERROR')\n }\n return ranges.map((range, index) => ({\n index,\n range,\n buffer: Buffer.from(`%PDF-1.4 mock-part-${index}`, 'utf8'),\n sizeBytes: 20,\n }))\n }\n\n async pageCount(_buffer: Buffer | Uint8Array): Promise<number> {\n return 1\n }\n\n // ─── Test Helpers ────────────────────────────────────\n\n /** Read all stored documents (for test assertions). */\n getDocuments(): ReadonlyMap<string, DocmanDocument> {\n return this.documents\n }\n\n /** Read all stored HTML templates (for test assertions). */\n getHtmlTemplates(): ReadonlyMap<string, HtmlTemplate> {\n return this.htmlTemplates\n }\n\n /** Read all stored PDF templates (for test assertions). */\n getPdfTemplates(): ReadonlyMap<string, PdfTemplate> {\n return this.pdfTemplates\n }\n}\n","export class DocmanError extends Error {\n constructor(\n message: string,\n public readonly statusCode: number,\n public readonly code?: string,\n public readonly details?: Record<string, unknown>,\n ) {\n super(message)\n this.name = 'DocmanError'\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/mock.d.cts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { C as CreateHtmlTemplateOptions, H as HtmlTemplate, a as HtmlTemplateListQuery, L as ListResult, U as UpdateHtmlTemplateOptions, b as CreatePdfTemplateOptions, P as PdfTemplate, c as PdfTemplateListQuery, d as PdfField, e as UpdatePdfTemplateOptions, f as CreateTemplateGroupOptions, T as TemplateGroup, g as ListQuery, h as UpdateTemplateGroupOptions, G as GenerateOptions, i as GenerateResult, j as DocmanDocument, k as DocumentVersion, l as PageRange, S as SplitPart } from './types-xbeSIrNB.cjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* In-memory implementation of DocmanClient for use in tests.
|
|
5
|
+
*
|
|
6
|
+
* Import from @insureco/docman/testing:
|
|
7
|
+
* import { MockDocmanClient } from '@insureco/docman/testing'
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const docman = new MockDocmanClient()
|
|
11
|
+
* const template = await docman.createHtmlTemplate({ name: 'Quote', html: '<p>{{name}}</p>' })
|
|
12
|
+
* const result = await docman.generate({ templateIds: [template._id], data: { name: 'Acme' }, name: 'test' })
|
|
13
|
+
* expect(result.pages).toBe(1)
|
|
14
|
+
*/
|
|
15
|
+
declare class MockDocmanClient {
|
|
16
|
+
private readonly htmlTemplates;
|
|
17
|
+
private readonly pdfTemplates;
|
|
18
|
+
private readonly templateGroups;
|
|
19
|
+
private readonly documents;
|
|
20
|
+
private readonly documentVersions;
|
|
21
|
+
/** Reset all in-memory state between tests. */
|
|
22
|
+
reset(): void;
|
|
23
|
+
createHtmlTemplate(options: CreateHtmlTemplateOptions): Promise<HtmlTemplate>;
|
|
24
|
+
listHtmlTemplates(query?: HtmlTemplateListQuery): Promise<ListResult<HtmlTemplate>>;
|
|
25
|
+
getHtmlTemplate(id: string): Promise<HtmlTemplate>;
|
|
26
|
+
updateHtmlTemplate(id: string, options: UpdateHtmlTemplateOptions): Promise<HtmlTemplate>;
|
|
27
|
+
deleteHtmlTemplate(id: string): Promise<HtmlTemplate>;
|
|
28
|
+
uploadPdfTemplate(_file: Buffer | Uint8Array, options?: CreatePdfTemplateOptions): Promise<PdfTemplate>;
|
|
29
|
+
listPdfTemplates(query?: PdfTemplateListQuery): Promise<ListResult<PdfTemplate>>;
|
|
30
|
+
getPdfTemplate(id: string): Promise<PdfTemplate>;
|
|
31
|
+
getPdfTemplateFields(id: string): Promise<readonly PdfField[]>;
|
|
32
|
+
getPdfTemplateDownloadUrl(id: string): Promise<string>;
|
|
33
|
+
updatePdfTemplate(id: string, options: UpdatePdfTemplateOptions, _file?: Buffer | Uint8Array): Promise<PdfTemplate>;
|
|
34
|
+
deletePdfTemplate(id: string): Promise<PdfTemplate>;
|
|
35
|
+
createTemplateGroup(options: CreateTemplateGroupOptions): Promise<TemplateGroup>;
|
|
36
|
+
listTemplateGroups(query?: ListQuery): Promise<ListResult<TemplateGroup>>;
|
|
37
|
+
getTemplateGroup(id: string): Promise<TemplateGroup>;
|
|
38
|
+
updateTemplateGroup(id: string, options: UpdateTemplateGroupOptions): Promise<TemplateGroup>;
|
|
39
|
+
deleteTemplateGroup(id: string): Promise<void>;
|
|
40
|
+
generate(options: GenerateOptions): Promise<GenerateResult>;
|
|
41
|
+
generatePassthrough(_options: GenerateOptions): Promise<Buffer>;
|
|
42
|
+
listDocuments(query?: ListQuery): Promise<ListResult<DocmanDocument>>;
|
|
43
|
+
getDocument(id: string): Promise<DocmanDocument>;
|
|
44
|
+
downloadUrl(id: string): Promise<string>;
|
|
45
|
+
getVersions(id: string): Promise<readonly DocumentVersion[]>;
|
|
46
|
+
regenerate(id: string): Promise<GenerateResult>;
|
|
47
|
+
merge(buffers: readonly (Buffer | Uint8Array)[]): Promise<Buffer>;
|
|
48
|
+
split(_buffer: Buffer | Uint8Array, ranges: readonly PageRange[]): Promise<readonly SplitPart[]>;
|
|
49
|
+
pageCount(_buffer: Buffer | Uint8Array): Promise<number>;
|
|
50
|
+
/** Read all stored documents (for test assertions). */
|
|
51
|
+
getDocuments(): ReadonlyMap<string, DocmanDocument>;
|
|
52
|
+
/** Read all stored HTML templates (for test assertions). */
|
|
53
|
+
getHtmlTemplates(): ReadonlyMap<string, HtmlTemplate>;
|
|
54
|
+
/** Read all stored PDF templates (for test assertions). */
|
|
55
|
+
getPdfTemplates(): ReadonlyMap<string, PdfTemplate>;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { MockDocmanClient };
|
package/dist/mock.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { C as CreateHtmlTemplateOptions, H as HtmlTemplate, a as HtmlTemplateListQuery, L as ListResult, U as UpdateHtmlTemplateOptions, b as CreatePdfTemplateOptions, P as PdfTemplate, c as PdfTemplateListQuery, d as PdfField, e as UpdatePdfTemplateOptions, f as CreateTemplateGroupOptions, T as TemplateGroup, g as ListQuery, h as UpdateTemplateGroupOptions, G as GenerateOptions, i as GenerateResult, j as DocmanDocument, k as DocumentVersion, l as PageRange, S as SplitPart } from './types-xbeSIrNB.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* In-memory implementation of DocmanClient for use in tests.
|
|
5
|
+
*
|
|
6
|
+
* Import from @insureco/docman/testing:
|
|
7
|
+
* import { MockDocmanClient } from '@insureco/docman/testing'
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* const docman = new MockDocmanClient()
|
|
11
|
+
* const template = await docman.createHtmlTemplate({ name: 'Quote', html: '<p>{{name}}</p>' })
|
|
12
|
+
* const result = await docman.generate({ templateIds: [template._id], data: { name: 'Acme' }, name: 'test' })
|
|
13
|
+
* expect(result.pages).toBe(1)
|
|
14
|
+
*/
|
|
15
|
+
declare class MockDocmanClient {
|
|
16
|
+
private readonly htmlTemplates;
|
|
17
|
+
private readonly pdfTemplates;
|
|
18
|
+
private readonly templateGroups;
|
|
19
|
+
private readonly documents;
|
|
20
|
+
private readonly documentVersions;
|
|
21
|
+
/** Reset all in-memory state between tests. */
|
|
22
|
+
reset(): void;
|
|
23
|
+
createHtmlTemplate(options: CreateHtmlTemplateOptions): Promise<HtmlTemplate>;
|
|
24
|
+
listHtmlTemplates(query?: HtmlTemplateListQuery): Promise<ListResult<HtmlTemplate>>;
|
|
25
|
+
getHtmlTemplate(id: string): Promise<HtmlTemplate>;
|
|
26
|
+
updateHtmlTemplate(id: string, options: UpdateHtmlTemplateOptions): Promise<HtmlTemplate>;
|
|
27
|
+
deleteHtmlTemplate(id: string): Promise<HtmlTemplate>;
|
|
28
|
+
uploadPdfTemplate(_file: Buffer | Uint8Array, options?: CreatePdfTemplateOptions): Promise<PdfTemplate>;
|
|
29
|
+
listPdfTemplates(query?: PdfTemplateListQuery): Promise<ListResult<PdfTemplate>>;
|
|
30
|
+
getPdfTemplate(id: string): Promise<PdfTemplate>;
|
|
31
|
+
getPdfTemplateFields(id: string): Promise<readonly PdfField[]>;
|
|
32
|
+
getPdfTemplateDownloadUrl(id: string): Promise<string>;
|
|
33
|
+
updatePdfTemplate(id: string, options: UpdatePdfTemplateOptions, _file?: Buffer | Uint8Array): Promise<PdfTemplate>;
|
|
34
|
+
deletePdfTemplate(id: string): Promise<PdfTemplate>;
|
|
35
|
+
createTemplateGroup(options: CreateTemplateGroupOptions): Promise<TemplateGroup>;
|
|
36
|
+
listTemplateGroups(query?: ListQuery): Promise<ListResult<TemplateGroup>>;
|
|
37
|
+
getTemplateGroup(id: string): Promise<TemplateGroup>;
|
|
38
|
+
updateTemplateGroup(id: string, options: UpdateTemplateGroupOptions): Promise<TemplateGroup>;
|
|
39
|
+
deleteTemplateGroup(id: string): Promise<void>;
|
|
40
|
+
generate(options: GenerateOptions): Promise<GenerateResult>;
|
|
41
|
+
generatePassthrough(_options: GenerateOptions): Promise<Buffer>;
|
|
42
|
+
listDocuments(query?: ListQuery): Promise<ListResult<DocmanDocument>>;
|
|
43
|
+
getDocument(id: string): Promise<DocmanDocument>;
|
|
44
|
+
downloadUrl(id: string): Promise<string>;
|
|
45
|
+
getVersions(id: string): Promise<readonly DocumentVersion[]>;
|
|
46
|
+
regenerate(id: string): Promise<GenerateResult>;
|
|
47
|
+
merge(buffers: readonly (Buffer | Uint8Array)[]): Promise<Buffer>;
|
|
48
|
+
split(_buffer: Buffer | Uint8Array, ranges: readonly PageRange[]): Promise<readonly SplitPart[]>;
|
|
49
|
+
pageCount(_buffer: Buffer | Uint8Array): Promise<number>;
|
|
50
|
+
/** Read all stored documents (for test assertions). */
|
|
51
|
+
getDocuments(): ReadonlyMap<string, DocmanDocument>;
|
|
52
|
+
/** Read all stored HTML templates (for test assertions). */
|
|
53
|
+
getHtmlTemplates(): ReadonlyMap<string, HtmlTemplate>;
|
|
54
|
+
/** Read all stored PDF templates (for test assertions). */
|
|
55
|
+
getPdfTemplates(): ReadonlyMap<string, PdfTemplate>;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { MockDocmanClient };
|