@voyantjs/legal 0.81.11 → 0.81.13
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-documents.d.ts","sourceRoot":"","sources":["../../src/contracts/service-documents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAG3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAItF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"service-documents.d.ts","sourceRoot":"","sources":["../../src/contracts/service-documents.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,11 @@ import { desc, eq } from "drizzle-orm";
|
|
|
3
3
|
import { contractAttachments, contracts, contractTemplateVersions } from "./schema.js";
|
|
4
4
|
import { contractRecordsService } from "./service-contracts.js";
|
|
5
5
|
import { isContractTemplateSyntaxError, renderTemplate } from "./service-shared.js";
|
|
6
|
+
const GENERATION_METADATA_KEYS = [
|
|
7
|
+
"lastGenerationStatus",
|
|
8
|
+
"lastGenerationError",
|
|
9
|
+
"lastGenerationAttemptedAt",
|
|
10
|
+
];
|
|
6
11
|
function normalizeAttachmentInput(input, fallbackKind) {
|
|
7
12
|
return {
|
|
8
13
|
kind: input.kind ?? fallbackKind,
|
|
@@ -14,6 +19,44 @@ function normalizeAttachmentInput(input, fallbackKind) {
|
|
|
14
19
|
metadata: input.metadata ?? null,
|
|
15
20
|
};
|
|
16
21
|
}
|
|
22
|
+
function normalizeMetadata(value) {
|
|
23
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
24
|
+
? { ...value }
|
|
25
|
+
: {};
|
|
26
|
+
}
|
|
27
|
+
function formatTemplateSyntaxError(error) {
|
|
28
|
+
if (isContractTemplateSyntaxError(error) && error.issues.length > 0) {
|
|
29
|
+
return error.issues.map((issue) => issue.message).join("; ");
|
|
30
|
+
}
|
|
31
|
+
return error instanceof Error ? error.message : "Contract template could not be rendered";
|
|
32
|
+
}
|
|
33
|
+
async function recordGenerationFailure(db, contract, status, error) {
|
|
34
|
+
await db
|
|
35
|
+
.update(contracts)
|
|
36
|
+
.set({
|
|
37
|
+
metadata: {
|
|
38
|
+
...normalizeMetadata(contract.metadata),
|
|
39
|
+
lastGenerationStatus: status,
|
|
40
|
+
lastGenerationError: error,
|
|
41
|
+
lastGenerationAttemptedAt: new Date().toISOString(),
|
|
42
|
+
},
|
|
43
|
+
updatedAt: new Date(),
|
|
44
|
+
})
|
|
45
|
+
.where(eq(contracts.id, contract.id));
|
|
46
|
+
}
|
|
47
|
+
async function clearGenerationFailure(db, contract) {
|
|
48
|
+
const metadata = normalizeMetadata(contract.metadata);
|
|
49
|
+
for (const key of GENERATION_METADATA_KEYS) {
|
|
50
|
+
delete metadata[key];
|
|
51
|
+
}
|
|
52
|
+
await db
|
|
53
|
+
.update(contracts)
|
|
54
|
+
.set({
|
|
55
|
+
metadata: Object.keys(metadata).length > 0 ? metadata : null,
|
|
56
|
+
updatedAt: new Date(),
|
|
57
|
+
})
|
|
58
|
+
.where(eq(contracts.id, contract.id));
|
|
59
|
+
}
|
|
17
60
|
function defaultContractDocumentExtension(format) {
|
|
18
61
|
switch (format) {
|
|
19
62
|
case "html":
|
|
@@ -140,7 +183,12 @@ async function ensureRenderedContract(db, contractId, issueIfDraft, runtime) {
|
|
|
140
183
|
}
|
|
141
184
|
catch (error) {
|
|
142
185
|
if (isContractTemplateSyntaxError(error)) {
|
|
143
|
-
return {
|
|
186
|
+
return {
|
|
187
|
+
status: "render_unavailable",
|
|
188
|
+
contract,
|
|
189
|
+
templateVersion: null,
|
|
190
|
+
error: formatTemplateSyntaxError(error),
|
|
191
|
+
};
|
|
144
192
|
}
|
|
145
193
|
throw error;
|
|
146
194
|
}
|
|
@@ -148,7 +196,7 @@ async function ensureRenderedContract(db, contractId, issueIfDraft, runtime) {
|
|
|
148
196
|
if (issued.status === "not_found") {
|
|
149
197
|
return { status: "not_found" };
|
|
150
198
|
}
|
|
151
|
-
return { status: "not_draft"
|
|
199
|
+
return { status: "not_draft" };
|
|
152
200
|
}
|
|
153
201
|
contract = issued.contract;
|
|
154
202
|
}
|
|
@@ -162,7 +210,12 @@ async function ensureRenderedContract(db, contractId, issueIfDraft, runtime) {
|
|
|
162
210
|
}
|
|
163
211
|
catch (error) {
|
|
164
212
|
if (isContractTemplateSyntaxError(error)) {
|
|
165
|
-
return {
|
|
213
|
+
return {
|
|
214
|
+
status: "render_unavailable",
|
|
215
|
+
contract,
|
|
216
|
+
templateVersion,
|
|
217
|
+
error: formatTemplateSyntaxError(error),
|
|
218
|
+
};
|
|
166
219
|
}
|
|
167
220
|
throw error;
|
|
168
221
|
}
|
|
@@ -179,7 +232,12 @@ async function ensureRenderedContract(db, contractId, issueIfDraft, runtime) {
|
|
|
179
232
|
contract = updated ?? contract;
|
|
180
233
|
}
|
|
181
234
|
if (!renderedBody || !renderedBodyFormat) {
|
|
182
|
-
return {
|
|
235
|
+
return {
|
|
236
|
+
status: "render_unavailable",
|
|
237
|
+
contract,
|
|
238
|
+
templateVersion,
|
|
239
|
+
error: "Contract has no rendered body available for document generation",
|
|
240
|
+
};
|
|
183
241
|
}
|
|
184
242
|
return {
|
|
185
243
|
status: "ready",
|
|
@@ -199,6 +257,8 @@ export const contractDocumentsService = {
|
|
|
199
257
|
return { status: "not_draft" };
|
|
200
258
|
}
|
|
201
259
|
if (prepared.status === "render_unavailable") {
|
|
260
|
+
console.error(`[legal] contract document render unavailable for contract ${contractId}: ${prepared.error}`);
|
|
261
|
+
await recordGenerationFailure(db, prepared.contract, "render_unavailable", prepared.error);
|
|
202
262
|
return { status: "render_unavailable" };
|
|
203
263
|
}
|
|
204
264
|
let artifact;
|
|
@@ -220,6 +280,7 @@ export const contractDocumentsService = {
|
|
|
220
280
|
// and can't tell why. Log here so the wrangler dev log /
|
|
221
281
|
// production observability captures the actual cause.
|
|
222
282
|
console.error(`[legal] contract document generator failed for contract ${contractId}:`, err instanceof Error ? `${err.message}\n${err.stack ?? ""}` : err);
|
|
283
|
+
await recordGenerationFailure(db, prepared.contract, "generator_failed", err instanceof Error ? err.message : String(err));
|
|
223
284
|
return { status: "generator_failed" };
|
|
224
285
|
}
|
|
225
286
|
if (input.replaceExisting) {
|
|
@@ -242,8 +303,10 @@ export const contractDocumentsService = {
|
|
|
242
303
|
}
|
|
243
304
|
const attachment = await contractRecordsService.createAttachment(db, contractId, normalizeAttachmentInput(artifact, input.kind));
|
|
244
305
|
if (!attachment) {
|
|
306
|
+
await recordGenerationFailure(db, prepared.contract, "generator_failed", "Contract document attachment could not be created");
|
|
245
307
|
return { status: "not_found" };
|
|
246
308
|
}
|
|
309
|
+
await clearGenerationFailure(db, prepared.contract);
|
|
247
310
|
await runtime.eventBus?.emit("contract.document.generated", {
|
|
248
311
|
contractId: prepared.contract.id,
|
|
249
312
|
contractStatus: prepared.contract.status,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/contracts/service.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC7B,cAAc,EACd,4BAA4B,EAC5B,yBAAyB,EAC1B,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC7B,cAAc,EACd,4BAA4B,EAC5B,yBAAyB,GAC1B,CAAA;AAED,eAAO,MAAM,gBAAgB;;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/contracts/service.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC7B,cAAc,EACd,4BAA4B,EAC5B,yBAAyB,EAC1B,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,6BAA6B,EAC7B,cAAc,EACd,4BAA4B,EAC5B,yBAAyB,GAC1B,CAAA;AAED,eAAO,MAAM,gBAAgB;;mBAM6tX,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAA/jL,CAAC;eAAwB,CAAC;eAAwB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAD9uM,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voyantjs/legal",
|
|
3
|
-
"version": "0.81.
|
|
3
|
+
"version": "0.81.13",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -59,14 +59,14 @@
|
|
|
59
59
|
"drizzle-orm": "^0.45.2",
|
|
60
60
|
"hono": "^4.12.10",
|
|
61
61
|
"zod": "^4.3.6",
|
|
62
|
-
"@voyantjs/bookings": "0.81.
|
|
63
|
-
"@voyantjs/core": "0.81.
|
|
64
|
-
"@voyantjs/crm": "0.81.
|
|
65
|
-
"@voyantjs/db": "0.81.
|
|
66
|
-
"@voyantjs/hono": "0.81.
|
|
67
|
-
"@voyantjs/suppliers": "0.81.
|
|
68
|
-
"@voyantjs/utils": "0.81.
|
|
69
|
-
"@voyantjs/storage": "0.81.
|
|
62
|
+
"@voyantjs/bookings": "0.81.13",
|
|
63
|
+
"@voyantjs/core": "0.81.13",
|
|
64
|
+
"@voyantjs/crm": "0.81.13",
|
|
65
|
+
"@voyantjs/db": "0.81.13",
|
|
66
|
+
"@voyantjs/hono": "0.81.13",
|
|
67
|
+
"@voyantjs/suppliers": "0.81.13",
|
|
68
|
+
"@voyantjs/utils": "0.81.13",
|
|
69
|
+
"@voyantjs/storage": "0.81.13"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"typescript": "^6.0.2",
|