@voyantjs/finance 0.75.7 → 0.76.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/document-download.d.ts +22 -0
- package/dist/document-download.d.ts.map +1 -0
- package/dist/document-download.js +48 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/routes-documents.d.ts +0 -4
- package/dist/routes-documents.d.ts.map +1 -1
- package/dist/routes-documents.js +25 -27
- package/dist/routes.d.ts +182 -0
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +59 -26
- package/dist/service-rendition-wait.d.ts +38 -0
- package/dist/service-rendition-wait.d.ts.map +1 -0
- package/dist/service-rendition-wait.js +67 -0
- package/dist/validation-billing.d.ts +26 -0
- package/dist/validation-billing.d.ts.map +1 -1
- package/dist/validation-billing.js +16 -0
- package/package.json +9 -9
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface DocumentDownloadEnvelope {
|
|
2
|
+
url: string;
|
|
3
|
+
expiresAt: string | null;
|
|
4
|
+
}
|
|
5
|
+
export type DocumentDownloadResolution = {
|
|
6
|
+
status: "ready";
|
|
7
|
+
download: DocumentDownloadEnvelope;
|
|
8
|
+
} | {
|
|
9
|
+
status: "resolver_not_configured";
|
|
10
|
+
} | {
|
|
11
|
+
status: "not_available";
|
|
12
|
+
};
|
|
13
|
+
export type DocumentDownloadResolver = (bindings: unknown, storageKey: string) => Promise<string | null> | string | null;
|
|
14
|
+
export interface StoredDocumentReference {
|
|
15
|
+
storageKey?: string | null;
|
|
16
|
+
metadata?: unknown;
|
|
17
|
+
}
|
|
18
|
+
export declare function resolveStoredDocumentDownload(reference: StoredDocumentReference, options: {
|
|
19
|
+
bindings: unknown;
|
|
20
|
+
resolveDocumentDownloadUrl?: DocumentDownloadResolver;
|
|
21
|
+
}): Promise<DocumentDownloadResolution>;
|
|
22
|
+
//# sourceMappingURL=document-download.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-download.d.ts","sourceRoot":"","sources":["../src/document-download.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,MAAM,0BAA0B,GAClC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,wBAAwB,CAAA;CAAE,GACvD;IAAE,MAAM,EAAE,yBAAyB,CAAA;CAAE,GACrC;IAAE,MAAM,EAAE,eAAe,CAAA;CAAE,CAAA;AAE/B,MAAM,MAAM,wBAAwB,GAAG,CACrC,QAAQ,EAAE,OAAO,EACjB,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAA;AAE3C,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAmCD,wBAAsB,6BAA6B,CACjD,SAAS,EAAE,uBAAuB,EAClC,OAAO,EAAE;IACP,QAAQ,EAAE,OAAO,CAAA;IACjB,0BAA0B,CAAC,EAAE,wBAAwB,CAAA;CACtD,GACA,OAAO,CAAC,0BAA0B,CAAC,CAuBrC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
function getMetadataRecord(metadata) {
|
|
2
|
+
if (!metadata || typeof metadata !== "object" || Array.isArray(metadata)) {
|
|
3
|
+
return null;
|
|
4
|
+
}
|
|
5
|
+
return metadata;
|
|
6
|
+
}
|
|
7
|
+
function maybeUrl(value) {
|
|
8
|
+
return typeof value === "string" && /^https?:\/\//i.test(value) ? value : null;
|
|
9
|
+
}
|
|
10
|
+
function maybeIsoString(value) {
|
|
11
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
12
|
+
}
|
|
13
|
+
function getFallbackDownload(metadata) {
|
|
14
|
+
const record = getMetadataRecord(metadata);
|
|
15
|
+
if (!record) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const url = maybeUrl(record.url) ?? maybeUrl(record.downloadUrl);
|
|
19
|
+
if (!url) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
url,
|
|
24
|
+
expiresAt: maybeIsoString(record.expiresAt) ?? maybeIsoString(record.expires_at),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export async function resolveStoredDocumentDownload(reference, options) {
|
|
28
|
+
let needsResolver = false;
|
|
29
|
+
if (reference.storageKey) {
|
|
30
|
+
if (!options.resolveDocumentDownloadUrl) {
|
|
31
|
+
needsResolver = true;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
const url = await options.resolveDocumentDownloadUrl(options.bindings, reference.storageKey);
|
|
35
|
+
if (url) {
|
|
36
|
+
return { status: "ready", download: { url, expiresAt: null } };
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const fallback = getFallbackDownload(reference.metadata);
|
|
41
|
+
if (fallback) {
|
|
42
|
+
return { status: "ready", download: fallback };
|
|
43
|
+
}
|
|
44
|
+
if (needsResolver) {
|
|
45
|
+
return { status: "resolver_not_configured" };
|
|
46
|
+
}
|
|
47
|
+
return { status: "not_available" };
|
|
48
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ export interface FinanceHonoModuleOptions extends FinanceRuntimeOptions, PublicF
|
|
|
21
21
|
export declare function createFinanceHonoModule(options?: FinanceHonoModuleOptions): HonoModule;
|
|
22
22
|
export declare const financeHonoModule: HonoModule;
|
|
23
23
|
export { type BookingTaxRouteOptions, type BookingTaxSettings, computeBookingItemTaxLine, createBookingTaxHonoExtension, createBookingTaxRoutes, loadProductTaxFacts, matchesTaxPolicyCondition, mountBookingTaxRoutes, type ProductTaxFacts, type ResolveBookingSellTaxRateOptions, type ResolveBookingTaxSettings, type ResolvedBookingSellTaxRate, resolveBookingSellTaxRate, type TaxPolicyCondition, type UpdateBookingTaxSettings, } from "./booking-tax.js";
|
|
24
|
+
export { type DocumentDownloadEnvelope, type DocumentDownloadResolution, type DocumentDownloadResolver, resolveStoredDocumentDownload, type StoredDocumentReference, } from "./document-download.js";
|
|
24
25
|
export { createInvoiceFxHonoExtension, createInvoiceFxRoutes, createVoyantDataFxExchangeRateResolver, type InvoiceFxContext, type InvoiceFxOptions, type InvoiceFxRouteOptions, type InvoiceFxSettings, mountInvoiceFxRoutes, type ResolvedInvoiceFxSettings, type ResolveInvoiceExchangeRate, type ResolveInvoiceExchangeRateInput, type ResolveInvoiceFxSettings, resolveInvoiceFxContext, resolveInvoiceFxSettingsOrDefault, type UpdateInvoiceFxSettings, type VoyantDataFxResolverOptions, } from "./invoice-fx.js";
|
|
25
26
|
export type { ComputedScheduleEntry, ComputeScheduleInput, DepositKind, DepositRule, PaymentPolicy, PaymentPolicyCascadeLayers, PaymentPolicySource, PaymentScheduleEntryType, ResolvedPaymentPolicy, } from "./payment-policy.js";
|
|
26
27
|
export { computePaymentSchedule, isPaymentPolicyEmpty, noDepositPolicy, policyShouldRequireFullPayment, resolveEffectivePaymentPolicy, } from "./payment-policy.js";
|
|
@@ -41,6 +42,7 @@ export type { GeneratedInvoiceDocumentRecord, GeneratedInvoiceRenditionArtifact,
|
|
|
41
42
|
export { createPdfInvoiceDocumentGenerator, createStorageBackedInvoiceDocumentGenerator, defaultPdfInvoiceDocumentSerializer, defaultStorageBackedInvoiceDocumentSerializer, financeDocumentsService, } from "./service-documents.js";
|
|
42
43
|
export type { InvoiceIssuedEvent, InvoiceIssueRuntime } from "./service-issue.js";
|
|
43
44
|
export { issueInvoiceFromBooking, issueProformaFromBooking } from "./service-issue.js";
|
|
45
|
+
export { getLatestInvoiceRendition, type InvoiceRenditionWaitMode, type WaitForInvoiceRenditionOptions, type WaitForInvoiceRenditionResult, waitForInvoiceRendition, waitFormatForMode, } from "./service-rendition-wait.js";
|
|
44
46
|
export type { FinanceSettlementRuntimeOptions, InvoiceSettledEvent, InvoiceSettlementPollerContext, InvoiceSettlementPollerResult, } from "./service-settlement.js";
|
|
45
47
|
export { financeSettlementService } from "./service-settlement.js";
|
|
46
48
|
export { VoucherServiceError, vouchersService } from "./service-vouchers.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -67,6 +67,7 @@ export function createFinanceHonoModule(options = {}) {
|
|
|
67
67
|
}
|
|
68
68
|
export const financeHonoModule = createFinanceHonoModule();
|
|
69
69
|
export { computeBookingItemTaxLine, createBookingTaxHonoExtension, createBookingTaxRoutes, loadProductTaxFacts, matchesTaxPolicyCondition, mountBookingTaxRoutes, resolveBookingSellTaxRate, } from "./booking-tax.js";
|
|
70
|
+
export { resolveStoredDocumentDownload, } from "./document-download.js";
|
|
70
71
|
export { createInvoiceFxHonoExtension, createInvoiceFxRoutes, createVoyantDataFxExchangeRateResolver, mountInvoiceFxRoutes, resolveInvoiceFxContext, resolveInvoiceFxSettingsOrDefault, } from "./invoice-fx.js";
|
|
71
72
|
export { computePaymentSchedule, isPaymentPolicyEmpty, noDepositPolicy, policyShouldRequireFullPayment, resolveEffectivePaymentPolicy, } from "./payment-policy.js";
|
|
72
73
|
export { buildFinanceRouteRuntime, FINANCE_ROUTE_RUNTIME_CONTAINER_KEY, } from "./route-runtime.js";
|
|
@@ -79,6 +80,7 @@ export { bookingCreateSchema, createBooking, } from "./service-booking-create.js
|
|
|
79
80
|
export { dualCreateBooking, dualCreateBookingSchema, } from "./service-bookings-dual-create.js";
|
|
80
81
|
export { createPdfInvoiceDocumentGenerator, createStorageBackedInvoiceDocumentGenerator, defaultPdfInvoiceDocumentSerializer, defaultStorageBackedInvoiceDocumentSerializer, financeDocumentsService, } from "./service-documents.js";
|
|
81
82
|
export { issueInvoiceFromBooking, issueProformaFromBooking } from "./service-issue.js";
|
|
83
|
+
export { getLatestInvoiceRendition, waitForInvoiceRendition, waitFormatForMode, } from "./service-rendition-wait.js";
|
|
82
84
|
export { financeSettlementService } from "./service-settlement.js";
|
|
83
85
|
export { VoucherServiceError, vouchersService } from "./service-vouchers.js";
|
|
84
86
|
export { migrateVouchersFromPaymentInstruments, } from "./service-vouchers-migration.js";
|
|
@@ -60,8 +60,6 @@ export declare function createFinanceAdminDocumentRoutes(options?: FinanceDocume
|
|
|
60
60
|
};
|
|
61
61
|
output: {
|
|
62
62
|
data: {
|
|
63
|
-
status: "not_found" | "generator_failed";
|
|
64
|
-
} | {
|
|
65
63
|
status: "generated";
|
|
66
64
|
invoiceId: string;
|
|
67
65
|
renderedBodyFormat: "html" | "markdown" | "lexical_json";
|
|
@@ -131,8 +129,6 @@ export declare function createFinanceAdminDocumentRoutes(options?: FinanceDocume
|
|
|
131
129
|
};
|
|
132
130
|
output: {
|
|
133
131
|
data: {
|
|
134
|
-
status: "not_found" | "generator_failed";
|
|
135
|
-
} | {
|
|
136
132
|
status: "generated";
|
|
137
133
|
invoiceId: string;
|
|
138
134
|
renderedBodyFormat: "html" | "markdown" | "lexical_json";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes-documents.d.ts","sourceRoot":"","sources":["../src/routes-documents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"routes-documents.d.ts","sourceRoot":"","sources":["../src/routes-documents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAUjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAGhE,KAAK,GAAG,GAAG;IACT,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,SAAS,EAAE;QACT,SAAS,EAAE,eAAe,CAAA;QAC1B,EAAE,EAAE,kBAAkB,CAAA;QACtB,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;CACF,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAC/C,OAAO,uBAAuB,CAAC,uBAAuB,CACvD,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;AAEjB,MAAM,WAAW,2BAA2B;IAC1C,wBAAwB,CAAC,EAAE,wBAAwB,CAAA;IACnD,+BAA+B,CAAC,EAAE,CAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,wBAAwB,GAAG,SAAS,CAAA;IACzC,0BAA0B,CAAC,EAAE,CAC3B,QAAQ,EAAE,OAAO,EACjB,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAA;IAC3C,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,QAAQ,GAAG,SAAS,CAAA;CAC9E;AAaD,wBAAgB,gCAAgC,CAAC,OAAO,GAAE,2BAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CAsEzF"}
|
package/dist/routes-documents.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { parseOptionalJsonBody } from "@voyantjs/hono";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
+
import { resolveStoredDocumentDownload } from "./document-download.js";
|
|
3
4
|
import { buildFinanceRouteRuntime, FINANCE_ROUTE_RUNTIME_CONTAINER_KEY, } from "./route-runtime.js";
|
|
4
5
|
import { financeService } from "./service.js";
|
|
5
6
|
import { financeDocumentsService } from "./service-documents.js";
|
|
@@ -8,22 +9,6 @@ function getRuntime(options, bindings, resolveFromContainer) {
|
|
|
8
9
|
return (resolveFromContainer?.(FINANCE_ROUTE_RUNTIME_CONTAINER_KEY) ??
|
|
9
10
|
buildFinanceRouteRuntime(bindings, options));
|
|
10
11
|
}
|
|
11
|
-
function getMetadataRecord(metadata) {
|
|
12
|
-
if (!metadata || typeof metadata !== "object" || Array.isArray(metadata)) {
|
|
13
|
-
return null;
|
|
14
|
-
}
|
|
15
|
-
return metadata;
|
|
16
|
-
}
|
|
17
|
-
function maybeUrl(value) {
|
|
18
|
-
return typeof value === "string" && /^https?:\/\//i.test(value) ? value : null;
|
|
19
|
-
}
|
|
20
|
-
function getFallbackDownloadUrl(metadata) {
|
|
21
|
-
const record = getMetadataRecord(metadata);
|
|
22
|
-
if (!record) {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
return maybeUrl(record.url);
|
|
26
|
-
}
|
|
27
12
|
export function createFinanceAdminDocumentRoutes(options = {}) {
|
|
28
13
|
return new Hono()
|
|
29
14
|
.post("/invoices/:id/generate-document", async (c) => {
|
|
@@ -38,7 +23,10 @@ export function createFinanceAdminDocumentRoutes(options = {}) {
|
|
|
38
23
|
if (result.status === "generator_failed") {
|
|
39
24
|
return c.json({ error: "Invoice document generation failed" }, 502);
|
|
40
25
|
}
|
|
41
|
-
|
|
26
|
+
if (!("rendition" in result)) {
|
|
27
|
+
return c.json({ error: "Invoice document generation failed" }, 502);
|
|
28
|
+
}
|
|
29
|
+
return c.json({ data: await attachDownloadEnvelope(c.env, runtime, result) }, 201);
|
|
42
30
|
})
|
|
43
31
|
.post("/invoices/:id/regenerate-document", async (c) => {
|
|
44
32
|
const runtime = getRuntime(options, c.env, (key) => c.var.container?.resolve(key));
|
|
@@ -52,24 +40,34 @@ export function createFinanceAdminDocumentRoutes(options = {}) {
|
|
|
52
40
|
if (result.status === "generator_failed") {
|
|
53
41
|
return c.json({ error: "Invoice document generation failed" }, 502);
|
|
54
42
|
}
|
|
55
|
-
|
|
43
|
+
if (!("rendition" in result)) {
|
|
44
|
+
return c.json({ error: "Invoice document generation failed" }, 502);
|
|
45
|
+
}
|
|
46
|
+
return c.json({ data: await attachDownloadEnvelope(c.env, runtime, result) });
|
|
56
47
|
})
|
|
57
48
|
.get("/invoice-renditions/:id/download", async (c) => {
|
|
49
|
+
const runtime = getRuntime(options, c.env, (key) => c.var.container?.resolve(key));
|
|
58
50
|
const rendition = await financeService.getInvoiceRenditionById(c.get("db"), c.req.param("id"));
|
|
59
51
|
if (!rendition) {
|
|
60
52
|
return c.json({ error: "Invoice rendition not found" }, 404);
|
|
61
53
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
54
|
+
const download = await resolveStoredDocumentDownload(rendition, {
|
|
55
|
+
bindings: c.env,
|
|
56
|
+
resolveDocumentDownloadUrl: runtime.resolveDocumentDownloadUrl,
|
|
57
|
+
});
|
|
58
|
+
if (download.status === "resolver_not_configured") {
|
|
59
|
+
return c.json({ error: "Document download resolver is not configured" }, 501);
|
|
68
60
|
}
|
|
69
|
-
|
|
70
|
-
if (!location) {
|
|
61
|
+
if (download.status !== "ready") {
|
|
71
62
|
return c.json({ error: "Invoice document is not available" }, 404);
|
|
72
63
|
}
|
|
73
|
-
return c.redirect(
|
|
64
|
+
return c.redirect(download.download.url, 302);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async function attachDownloadEnvelope(bindings, runtime, result) {
|
|
68
|
+
const download = await resolveStoredDocumentDownload(result.rendition, {
|
|
69
|
+
bindings,
|
|
70
|
+
resolveDocumentDownloadUrl: runtime.resolveDocumentDownloadUrl,
|
|
74
71
|
});
|
|
72
|
+
return download.status === "ready" ? { ...result, download: download.download } : result;
|
|
75
73
|
}
|
package/dist/routes.d.ts
CHANGED
|
@@ -2491,6 +2491,128 @@ export declare const financeRoutes: import("hono/hono-base").HonoBase<Env, {
|
|
|
2491
2491
|
};
|
|
2492
2492
|
outputFormat: "json";
|
|
2493
2493
|
status: 201;
|
|
2494
|
+
} | {
|
|
2495
|
+
input: {};
|
|
2496
|
+
output: {
|
|
2497
|
+
data: {
|
|
2498
|
+
invoice: {
|
|
2499
|
+
id: string;
|
|
2500
|
+
status: "draft" | "pending_external_allocation" | "sent" | "partially_paid" | "paid" | "overdue" | "void";
|
|
2501
|
+
organizationId: string | null;
|
|
2502
|
+
createdAt: string;
|
|
2503
|
+
currency: string;
|
|
2504
|
+
notes: string | null;
|
|
2505
|
+
updatedAt: string;
|
|
2506
|
+
bookingId: string;
|
|
2507
|
+
personId: string | null;
|
|
2508
|
+
invoiceNumber: string;
|
|
2509
|
+
invoiceType: "invoice" | "proforma" | "credit_note";
|
|
2510
|
+
convertedFromInvoiceId: string | null;
|
|
2511
|
+
seriesId: string | null;
|
|
2512
|
+
sequence: number | null;
|
|
2513
|
+
templateId: string | null;
|
|
2514
|
+
taxRegimeId: string | null;
|
|
2515
|
+
language: string | null;
|
|
2516
|
+
baseCurrency: string | null;
|
|
2517
|
+
fxRateSetId: string | null;
|
|
2518
|
+
subtotalCents: number;
|
|
2519
|
+
baseSubtotalCents: number | null;
|
|
2520
|
+
taxCents: number;
|
|
2521
|
+
baseTaxCents: number | null;
|
|
2522
|
+
totalCents: number;
|
|
2523
|
+
baseTotalCents: number | null;
|
|
2524
|
+
paidCents: number;
|
|
2525
|
+
basePaidCents: number | null;
|
|
2526
|
+
balanceDueCents: number;
|
|
2527
|
+
baseBalanceDueCents: number | null;
|
|
2528
|
+
commissionPercent: number | null;
|
|
2529
|
+
commissionAmountCents: number | null;
|
|
2530
|
+
issueDate: string;
|
|
2531
|
+
dueDate: string;
|
|
2532
|
+
};
|
|
2533
|
+
rendition: {
|
|
2534
|
+
format: "json" | "html" | "pdf" | "xml";
|
|
2535
|
+
id: string;
|
|
2536
|
+
status: "failed" | "pending" | "ready" | "stale";
|
|
2537
|
+
createdAt: string;
|
|
2538
|
+
updatedAt: string;
|
|
2539
|
+
metadata: import("hono/utils/types").JSONValue;
|
|
2540
|
+
templateId: string | null;
|
|
2541
|
+
language: string | null;
|
|
2542
|
+
invoiceId: string;
|
|
2543
|
+
storageKey: string | null;
|
|
2544
|
+
fileSize: number | null;
|
|
2545
|
+
checksum: string | null;
|
|
2546
|
+
errorMessage: string | null;
|
|
2547
|
+
generatedAt: string | null;
|
|
2548
|
+
} | null;
|
|
2549
|
+
};
|
|
2550
|
+
};
|
|
2551
|
+
outputFormat: "json";
|
|
2552
|
+
status: 202;
|
|
2553
|
+
} | {
|
|
2554
|
+
input: {};
|
|
2555
|
+
output: {
|
|
2556
|
+
data: {
|
|
2557
|
+
download: {
|
|
2558
|
+
url: string;
|
|
2559
|
+
expiresAt: string | null;
|
|
2560
|
+
};
|
|
2561
|
+
invoice: {
|
|
2562
|
+
id: string;
|
|
2563
|
+
status: "draft" | "pending_external_allocation" | "sent" | "partially_paid" | "paid" | "overdue" | "void";
|
|
2564
|
+
organizationId: string | null;
|
|
2565
|
+
createdAt: string;
|
|
2566
|
+
currency: string;
|
|
2567
|
+
notes: string | null;
|
|
2568
|
+
updatedAt: string;
|
|
2569
|
+
bookingId: string;
|
|
2570
|
+
personId: string | null;
|
|
2571
|
+
invoiceNumber: string;
|
|
2572
|
+
invoiceType: "invoice" | "proforma" | "credit_note";
|
|
2573
|
+
convertedFromInvoiceId: string | null;
|
|
2574
|
+
seriesId: string | null;
|
|
2575
|
+
sequence: number | null;
|
|
2576
|
+
templateId: string | null;
|
|
2577
|
+
taxRegimeId: string | null;
|
|
2578
|
+
language: string | null;
|
|
2579
|
+
baseCurrency: string | null;
|
|
2580
|
+
fxRateSetId: string | null;
|
|
2581
|
+
subtotalCents: number;
|
|
2582
|
+
baseSubtotalCents: number | null;
|
|
2583
|
+
taxCents: number;
|
|
2584
|
+
baseTaxCents: number | null;
|
|
2585
|
+
totalCents: number;
|
|
2586
|
+
baseTotalCents: number | null;
|
|
2587
|
+
paidCents: number;
|
|
2588
|
+
basePaidCents: number | null;
|
|
2589
|
+
balanceDueCents: number;
|
|
2590
|
+
baseBalanceDueCents: number | null;
|
|
2591
|
+
commissionPercent: number | null;
|
|
2592
|
+
commissionAmountCents: number | null;
|
|
2593
|
+
issueDate: string;
|
|
2594
|
+
dueDate: string;
|
|
2595
|
+
};
|
|
2596
|
+
rendition: {
|
|
2597
|
+
format: "json" | "html" | "pdf" | "xml";
|
|
2598
|
+
id: string;
|
|
2599
|
+
status: "failed" | "pending" | "ready" | "stale";
|
|
2600
|
+
createdAt: string;
|
|
2601
|
+
updatedAt: string;
|
|
2602
|
+
metadata: import("hono/utils/types").JSONValue;
|
|
2603
|
+
templateId: string | null;
|
|
2604
|
+
language: string | null;
|
|
2605
|
+
invoiceId: string;
|
|
2606
|
+
storageKey: string | null;
|
|
2607
|
+
fileSize: number | null;
|
|
2608
|
+
checksum: string | null;
|
|
2609
|
+
errorMessage: string | null;
|
|
2610
|
+
generatedAt: string | null;
|
|
2611
|
+
} | null;
|
|
2612
|
+
};
|
|
2613
|
+
};
|
|
2614
|
+
outputFormat: "json";
|
|
2615
|
+
status: 201;
|
|
2494
2616
|
};
|
|
2495
2617
|
};
|
|
2496
2618
|
} & {
|
|
@@ -4448,6 +4570,66 @@ export declare const financeRoutes: import("hono/hono-base").HonoBase<Env, {
|
|
|
4448
4570
|
};
|
|
4449
4571
|
outputFormat: "json";
|
|
4450
4572
|
status: 404;
|
|
4573
|
+
} | {
|
|
4574
|
+
input: {
|
|
4575
|
+
param: {
|
|
4576
|
+
id: string;
|
|
4577
|
+
};
|
|
4578
|
+
};
|
|
4579
|
+
output: {
|
|
4580
|
+
data: {
|
|
4581
|
+
rendition: {
|
|
4582
|
+
format: "json" | "html" | "pdf" | "xml";
|
|
4583
|
+
id: string;
|
|
4584
|
+
status: "failed" | "pending" | "ready" | "stale";
|
|
4585
|
+
createdAt: string;
|
|
4586
|
+
updatedAt: string;
|
|
4587
|
+
metadata: import("hono/utils/types").JSONValue;
|
|
4588
|
+
templateId: string | null;
|
|
4589
|
+
language: string | null;
|
|
4590
|
+
invoiceId: string;
|
|
4591
|
+
storageKey: string | null;
|
|
4592
|
+
fileSize: number | null;
|
|
4593
|
+
checksum: string | null;
|
|
4594
|
+
errorMessage: string | null;
|
|
4595
|
+
generatedAt: string | null;
|
|
4596
|
+
};
|
|
4597
|
+
};
|
|
4598
|
+
};
|
|
4599
|
+
outputFormat: "json";
|
|
4600
|
+
status: 202;
|
|
4601
|
+
} | {
|
|
4602
|
+
input: {
|
|
4603
|
+
param: {
|
|
4604
|
+
id: string;
|
|
4605
|
+
};
|
|
4606
|
+
};
|
|
4607
|
+
output: {
|
|
4608
|
+
data: {
|
|
4609
|
+
download: {
|
|
4610
|
+
url: string;
|
|
4611
|
+
expiresAt: string | null;
|
|
4612
|
+
};
|
|
4613
|
+
rendition: {
|
|
4614
|
+
format: "json" | "html" | "pdf" | "xml";
|
|
4615
|
+
id: string;
|
|
4616
|
+
status: "failed" | "pending" | "ready" | "stale";
|
|
4617
|
+
createdAt: string;
|
|
4618
|
+
updatedAt: string;
|
|
4619
|
+
metadata: import("hono/utils/types").JSONValue;
|
|
4620
|
+
templateId: string | null;
|
|
4621
|
+
language: string | null;
|
|
4622
|
+
invoiceId: string;
|
|
4623
|
+
storageKey: string | null;
|
|
4624
|
+
fileSize: number | null;
|
|
4625
|
+
checksum: string | null;
|
|
4626
|
+
errorMessage: string | null;
|
|
4627
|
+
generatedAt: string | null;
|
|
4628
|
+
};
|
|
4629
|
+
};
|
|
4630
|
+
};
|
|
4631
|
+
outputFormat: "json";
|
|
4632
|
+
status: 201;
|
|
4451
4633
|
} | {
|
|
4452
4634
|
input: {
|
|
4453
4635
|
param: {
|
package/dist/routes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AAuJ7C,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAqnDtB,CAAA;AAEJ,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAA;AAChD,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAA"}
|
package/dist/routes.js
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import { parseJsonBody, parseQuery, requireUserId } from "@voyantjs/hono";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
+
import { resolveStoredDocumentDownload } from "./document-download.js";
|
|
3
4
|
import { FINANCE_ROUTE_RUNTIME_CONTAINER_KEY } from "./route-runtime.js";
|
|
4
5
|
import { financeService, InvoiceNumberAllocationError, PaymentValidationError } from "./service.js";
|
|
6
|
+
import { waitForInvoiceRendition, waitFormatForMode, } from "./service-rendition-wait.js";
|
|
5
7
|
import { VoucherServiceError } from "./service-vouchers.js";
|
|
6
|
-
import { agingReportQuerySchema, applyDefaultBookingPaymentPlanSchema, cancelPaymentSessionSchema, completePaymentSessionSchema, createPaymentSessionFromGuaranteeSchema, createPaymentSessionFromInvoiceSchema, createPaymentSessionFromScheduleSchema, expirePaymentSessionSchema, failPaymentSessionSchema, financeAggregatesQuerySchema, insertBookingGuaranteeSchema, insertBookingItemCommissionSchema, insertBookingItemTaxLineSchema, insertBookingPaymentScheduleSchema, insertCreditNoteLineItemSchema, insertCreditNoteSchema, insertFinanceNoteSchema, insertInvoiceAttachmentSchema, insertInvoiceExternalRefSchema, insertInvoiceLineItemSchema, insertInvoiceNumberSeriesSchema, insertInvoiceSchema, insertInvoiceTemplateSchema, insertPaymentAuthorizationSchema, insertPaymentCaptureSchema, insertPaymentInstrumentSchema, insertPaymentSchema, insertPaymentSessionSchema, insertSupplierPaymentSchema, insertTaxClassSchema, insertTaxPolicyProfileSchema, insertTaxPolicyRuleSchema, insertTaxRegimeSchema, insertVoucherSchema, invoiceFromBookingSchema, invoiceListQuerySchema, invoiceNumberSeriesListQuerySchema, invoiceTemplateListQuerySchema, markPaymentSessionRequiresRedirectSchema, paymentAuthorizationListQuerySchema, paymentCaptureListQuerySchema, paymentInstrumentListQuerySchema, paymentListQuerySchema, paymentSessionListQuerySchema, profitabilityQuerySchema, redeemVoucherSchema, renderInvoiceInputSchema, revenueReportQuerySchema, supplierPaymentListQuerySchema, taxClassListQuerySchema, taxPolicyProfileListQuerySchema, taxPolicyRuleListQuerySchema, taxRegimeListQuerySchema, updateBookingGuaranteeSchema, updateBookingItemCommissionSchema, updateBookingItemTaxLineSchema, updateBookingPaymentScheduleSchema, updateCreditNoteSchema, updateInvoiceAttachmentSchema, updateInvoiceLineItemSchema, updateInvoiceNumberSeriesSchema, updateInvoiceSchema, updateInvoiceTemplateSchema, updatePaymentAuthorizationSchema, updatePaymentCaptureSchema, updatePaymentInstrumentSchema, updatePaymentSessionSchema, updateSupplierPaymentSchema, updateTaxClassSchema, updateTaxPolicyProfileSchema, updateTaxPolicyRuleSchema, updateTaxRegimeSchema, updateVoucherSchema, voucherListQuerySchema, } from "./validation.js";
|
|
8
|
+
import { agingReportQuerySchema, applyDefaultBookingPaymentPlanSchema, cancelPaymentSessionSchema, completePaymentSessionSchema, createPaymentSessionFromGuaranteeSchema, createPaymentSessionFromInvoiceSchema, createPaymentSessionFromScheduleSchema, expirePaymentSessionSchema, failPaymentSessionSchema, financeAggregatesQuerySchema, insertBookingGuaranteeSchema, insertBookingItemCommissionSchema, insertBookingItemTaxLineSchema, insertBookingPaymentScheduleSchema, insertCreditNoteLineItemSchema, insertCreditNoteSchema, insertFinanceNoteSchema, insertInvoiceAttachmentSchema, insertInvoiceExternalRefSchema, insertInvoiceLineItemSchema, insertInvoiceNumberSeriesSchema, insertInvoiceSchema, insertInvoiceTemplateSchema, insertPaymentAuthorizationSchema, insertPaymentCaptureSchema, insertPaymentInstrumentSchema, insertPaymentSchema, insertPaymentSessionSchema, insertSupplierPaymentSchema, insertTaxClassSchema, insertTaxPolicyProfileSchema, insertTaxPolicyRuleSchema, insertTaxRegimeSchema, insertVoucherSchema, invoiceDocumentWaitQuerySchema, invoiceFromBookingSchema, invoiceListQuerySchema, invoiceNumberSeriesListQuerySchema, invoiceTemplateListQuerySchema, markPaymentSessionRequiresRedirectSchema, paymentAuthorizationListQuerySchema, paymentCaptureListQuerySchema, paymentInstrumentListQuerySchema, paymentListQuerySchema, paymentSessionListQuerySchema, profitabilityQuerySchema, redeemVoucherSchema, renderInvoiceInputSchema, revenueReportQuerySchema, supplierPaymentListQuerySchema, taxClassListQuerySchema, taxPolicyProfileListQuerySchema, taxPolicyRuleListQuerySchema, taxRegimeListQuerySchema, updateBookingGuaranteeSchema, updateBookingItemCommissionSchema, updateBookingItemTaxLineSchema, updateBookingPaymentScheduleSchema, updateCreditNoteSchema, updateInvoiceAttachmentSchema, updateInvoiceLineItemSchema, updateInvoiceNumberSeriesSchema, updateInvoiceSchema, updateInvoiceTemplateSchema, updatePaymentAuthorizationSchema, updatePaymentCaptureSchema, updatePaymentInstrumentSchema, updatePaymentSessionSchema, updateSupplierPaymentSchema, updateTaxClassSchema, updateTaxPolicyProfileSchema, updateTaxPolicyRuleSchema, updateTaxRegimeSchema, updateVoucherSchema, voucherListQuerySchema, } from "./validation.js";
|
|
7
9
|
// ==========================================================================
|
|
8
10
|
// Finance Routes — method-chained for Hono RPC type inference
|
|
9
11
|
// ==========================================================================
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
function maybeUrl(value) {
|
|
17
|
-
return typeof value === "string" && /^https?:\/\//i.test(value) ? value : null;
|
|
12
|
+
const DEFAULT_RENDITION_WAIT_TIMEOUT_MS = 30_000;
|
|
13
|
+
function resolveWaitRequest(body, query) {
|
|
14
|
+
return {
|
|
15
|
+
mode: query.wait ?? body.wait ?? "none",
|
|
16
|
+
timeoutMs: query.waitTimeoutMs ?? body.waitTimeoutMs ?? DEFAULT_RENDITION_WAIT_TIMEOUT_MS,
|
|
17
|
+
};
|
|
18
18
|
}
|
|
19
|
-
function
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
async function buildInlineDownload(c, reference) {
|
|
20
|
+
const runtime = getFinanceRouteRuntime(c);
|
|
21
|
+
return resolveStoredDocumentDownload(reference, {
|
|
22
|
+
bindings: c.env,
|
|
23
|
+
resolveDocumentDownloadUrl: runtime?.resolveDocumentDownloadUrl,
|
|
24
|
+
});
|
|
25
25
|
}
|
|
26
26
|
function getFinanceRouteRuntime(c) {
|
|
27
27
|
try {
|
|
@@ -590,6 +590,7 @@ export const financeRoutes = new Hono()
|
|
|
590
590
|
// POST /invoices/from-booking — Create + issue invoice (or proforma) from booking + booking items
|
|
591
591
|
.post("/invoices/from-booking", async (c) => {
|
|
592
592
|
const input = await parseJsonBody(c, invoiceFromBookingSchema);
|
|
593
|
+
const waitRequest = resolveWaitRequest(input, parseQuery(c, invoiceDocumentWaitQuerySchema));
|
|
593
594
|
const db = c.get("db");
|
|
594
595
|
const [{ bookingItems, bookings }, { eq }, { issueInvoiceFromBooking, issueProformaFromBooking },] = await Promise.all([
|
|
595
596
|
import("@voyantjs/bookings/schema"),
|
|
@@ -647,7 +648,25 @@ export const financeRoutes = new Hono()
|
|
|
647
648
|
}
|
|
648
649
|
throw error;
|
|
649
650
|
}
|
|
650
|
-
|
|
651
|
+
if (!row || waitRequest.mode === "none") {
|
|
652
|
+
return c.json({ data: row }, 201);
|
|
653
|
+
}
|
|
654
|
+
const waitResult = await waitForInvoiceRendition(db, row.id, {
|
|
655
|
+
format: waitFormatForMode(waitRequest.mode),
|
|
656
|
+
timeoutMs: waitRequest.timeoutMs,
|
|
657
|
+
});
|
|
658
|
+
const payload = {
|
|
659
|
+
invoice: row,
|
|
660
|
+
rendition: waitResult.rendition,
|
|
661
|
+
};
|
|
662
|
+
if (waitResult.status !== "ready") {
|
|
663
|
+
return c.json({ data: payload }, 202);
|
|
664
|
+
}
|
|
665
|
+
const download = await buildInlineDownload(c, waitResult.rendition);
|
|
666
|
+
if (download.status !== "ready") {
|
|
667
|
+
return c.json({ data: payload }, 202);
|
|
668
|
+
}
|
|
669
|
+
return c.json({ data: { ...payload, download: download.download } }, 201);
|
|
651
670
|
})
|
|
652
671
|
// POST /invoices/:id/convert-to-invoice — Convert a proforma into a final invoice
|
|
653
672
|
.post("/invoices/:id/convert-to-invoice", async (c) => {
|
|
@@ -1094,19 +1113,14 @@ export const financeRoutes = new Hono()
|
|
|
1094
1113
|
const attachment = await financeService.getInvoiceAttachmentById(c.get("db"), c.req.param("id"));
|
|
1095
1114
|
if (!attachment)
|
|
1096
1115
|
return c.json({ error: "Attachment not found" }, 404);
|
|
1097
|
-
|
|
1098
|
-
if (
|
|
1099
|
-
|
|
1100
|
-
if (!runtime?.resolveDocumentDownloadUrl) {
|
|
1101
|
-
return c.json({ error: "Document download resolver is not configured" }, 501);
|
|
1102
|
-
}
|
|
1103
|
-
location = await runtime.resolveDocumentDownloadUrl(c.env, attachment.storageKey);
|
|
1116
|
+
const download = await buildInlineDownload(c, attachment);
|
|
1117
|
+
if (download.status === "resolver_not_configured") {
|
|
1118
|
+
return c.json({ error: "Document download resolver is not configured" }, 501);
|
|
1104
1119
|
}
|
|
1105
|
-
|
|
1106
|
-
if (!location) {
|
|
1120
|
+
if (download.status !== "ready") {
|
|
1107
1121
|
return c.json({ error: "Attachment file is not available" }, 404);
|
|
1108
1122
|
}
|
|
1109
|
-
return c.redirect(
|
|
1123
|
+
return c.redirect(download.download.url, 302);
|
|
1110
1124
|
})
|
|
1111
1125
|
.delete("/invoices/:id/attachments/:attachmentId", async (c) => {
|
|
1112
1126
|
const row = await financeService.deleteInvoiceAttachment(c.get("db"), c.req.param("id"), c.req.param("attachmentId"));
|
|
@@ -1116,9 +1130,28 @@ export const financeRoutes = new Hono()
|
|
|
1116
1130
|
})
|
|
1117
1131
|
.post("/invoices/:id/render", async (c) => {
|
|
1118
1132
|
const input = await parseJsonBody(c, renderInvoiceInputSchema);
|
|
1133
|
+
const waitRequest = resolveWaitRequest(input, parseQuery(c, invoiceDocumentWaitQuerySchema));
|
|
1119
1134
|
const result = await financeService.renderInvoice(c.get("db"), c.req.param("id"), input);
|
|
1120
1135
|
if (result.status === "not_found")
|
|
1121
1136
|
return c.json({ error: "Invoice not found" }, 404);
|
|
1137
|
+
if (waitRequest.mode !== "none" && result.rendition) {
|
|
1138
|
+
const waitResult = await waitForInvoiceRendition(c.get("db"), c.req.param("id"), {
|
|
1139
|
+
renditionId: result.rendition.id,
|
|
1140
|
+
format: waitFormatForMode(waitRequest.mode),
|
|
1141
|
+
timeoutMs: waitRequest.timeoutMs,
|
|
1142
|
+
});
|
|
1143
|
+
const payload = {
|
|
1144
|
+
rendition: waitResult.rendition ?? result.rendition,
|
|
1145
|
+
};
|
|
1146
|
+
if (waitResult.status !== "ready") {
|
|
1147
|
+
return c.json({ data: payload }, 202);
|
|
1148
|
+
}
|
|
1149
|
+
const download = await buildInlineDownload(c, waitResult.rendition);
|
|
1150
|
+
if (download.status !== "ready") {
|
|
1151
|
+
return c.json({ data: payload }, 202);
|
|
1152
|
+
}
|
|
1153
|
+
return c.json({ data: { ...payload, download: download.download } }, 201);
|
|
1154
|
+
}
|
|
1122
1155
|
return c.json({ data: result.rendition }, 201);
|
|
1123
1156
|
})
|
|
1124
1157
|
.get("/invoices/:id/external-refs", async (c) => {
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { PostgresJsDatabase } from "drizzle-orm/postgres-js";
|
|
2
|
+
import { type InvoiceRendition } from "./schema.js";
|
|
3
|
+
export type InvoiceRenditionWaitMode = "none" | "pdf" | "any";
|
|
4
|
+
export interface WaitForInvoiceRenditionOptions {
|
|
5
|
+
format?: InvoiceRendition["format"];
|
|
6
|
+
renditionId?: string;
|
|
7
|
+
timeoutMs?: number;
|
|
8
|
+
intervalMs?: number;
|
|
9
|
+
}
|
|
10
|
+
export type WaitForInvoiceRenditionResult = {
|
|
11
|
+
status: "ready";
|
|
12
|
+
rendition: InvoiceRendition;
|
|
13
|
+
} | {
|
|
14
|
+
status: "failed";
|
|
15
|
+
rendition: InvoiceRendition;
|
|
16
|
+
} | {
|
|
17
|
+
status: "timeout";
|
|
18
|
+
rendition: InvoiceRendition | null;
|
|
19
|
+
};
|
|
20
|
+
export declare function getLatestInvoiceRendition(db: PostgresJsDatabase, invoiceId: string, options?: Pick<WaitForInvoiceRenditionOptions, "format" | "renditionId">): Promise<{
|
|
21
|
+
id: string;
|
|
22
|
+
invoiceId: string;
|
|
23
|
+
templateId: string | null;
|
|
24
|
+
format: "json" | "html" | "pdf" | "xml";
|
|
25
|
+
status: "failed" | "pending" | "ready" | "stale";
|
|
26
|
+
storageKey: string | null;
|
|
27
|
+
fileSize: number | null;
|
|
28
|
+
checksum: string | null;
|
|
29
|
+
language: string | null;
|
|
30
|
+
errorMessage: string | null;
|
|
31
|
+
generatedAt: Date | null;
|
|
32
|
+
metadata: unknown;
|
|
33
|
+
createdAt: Date;
|
|
34
|
+
updatedAt: Date;
|
|
35
|
+
} | null>;
|
|
36
|
+
export declare function waitForInvoiceRendition(db: PostgresJsDatabase, invoiceId: string, options?: WaitForInvoiceRenditionOptions): Promise<WaitForInvoiceRenditionResult>;
|
|
37
|
+
export declare function waitFormatForMode(mode: InvoiceRenditionWaitMode): "pdf" | undefined;
|
|
38
|
+
//# sourceMappingURL=service-rendition-wait.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-rendition-wait.d.ts","sourceRoot":"","sources":["../src/service-rendition-wait.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAEjE,OAAO,EAAE,KAAK,gBAAgB,EAAqB,MAAM,aAAa,CAAA;AAEtE,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAA;AAE7D,MAAM,WAAW,8BAA8B;IAC7C,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IACnC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,MAAM,6BAA6B,GACrC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,gBAAgB,CAAA;CAAE,GAChD;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,gBAAgB,CAAA;CAAE,GACjD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAA;CAAE,CAAA;AAoC7D,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,kBAAkB,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,IAAI,CAAC,8BAA8B,EAAE,QAAQ,GAAG,aAAa,CAAM;;;;;;;;;;;;;;;UAc7E;AAED,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,kBAAkB,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,6BAA6B,CAAC,CAuBxC;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,wBAAwB,qBAE/D"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { and, desc, eq, inArray } from "drizzle-orm";
|
|
2
|
+
import { invoiceRenditions } from "./schema.js";
|
|
3
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
4
|
+
const DEFAULT_INTERVAL_MS = 250;
|
|
5
|
+
function sleep(ms) {
|
|
6
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
7
|
+
}
|
|
8
|
+
function clampWaitTimeout(timeoutMs) {
|
|
9
|
+
if (timeoutMs == null || Number.isNaN(timeoutMs))
|
|
10
|
+
return DEFAULT_TIMEOUT_MS;
|
|
11
|
+
return Math.max(0, Math.min(60_000, timeoutMs));
|
|
12
|
+
}
|
|
13
|
+
async function findTerminalRendition(db, invoiceId, options) {
|
|
14
|
+
const conditions = [
|
|
15
|
+
eq(invoiceRenditions.invoiceId, invoiceId),
|
|
16
|
+
inArray(invoiceRenditions.status, ["ready", "failed"]),
|
|
17
|
+
];
|
|
18
|
+
if (options.renditionId)
|
|
19
|
+
conditions.push(eq(invoiceRenditions.id, options.renditionId));
|
|
20
|
+
if (options.format)
|
|
21
|
+
conditions.push(eq(invoiceRenditions.format, options.format));
|
|
22
|
+
const [row] = await db
|
|
23
|
+
.select()
|
|
24
|
+
.from(invoiceRenditions)
|
|
25
|
+
.where(and(...conditions))
|
|
26
|
+
.orderBy(desc(invoiceRenditions.createdAt))
|
|
27
|
+
.limit(1);
|
|
28
|
+
return row ?? null;
|
|
29
|
+
}
|
|
30
|
+
export async function getLatestInvoiceRendition(db, invoiceId, options = {}) {
|
|
31
|
+
const conditions = [eq(invoiceRenditions.invoiceId, invoiceId)];
|
|
32
|
+
if (options.renditionId)
|
|
33
|
+
conditions.push(eq(invoiceRenditions.id, options.renditionId));
|
|
34
|
+
if (options.format)
|
|
35
|
+
conditions.push(eq(invoiceRenditions.format, options.format));
|
|
36
|
+
const [row] = await db
|
|
37
|
+
.select()
|
|
38
|
+
.from(invoiceRenditions)
|
|
39
|
+
.where(and(...conditions))
|
|
40
|
+
.orderBy(desc(invoiceRenditions.createdAt))
|
|
41
|
+
.limit(1);
|
|
42
|
+
return row ?? null;
|
|
43
|
+
}
|
|
44
|
+
export async function waitForInvoiceRendition(db, invoiceId, options = {}) {
|
|
45
|
+
const timeoutMs = clampWaitTimeout(options.timeoutMs);
|
|
46
|
+
const intervalMs = Math.max(10, options.intervalMs ?? DEFAULT_INTERVAL_MS);
|
|
47
|
+
const deadline = Date.now() + timeoutMs;
|
|
48
|
+
while (true) {
|
|
49
|
+
const rendition = await findTerminalRendition(db, invoiceId, options);
|
|
50
|
+
if (rendition) {
|
|
51
|
+
return rendition.status === "ready"
|
|
52
|
+
? { status: "ready", rendition }
|
|
53
|
+
: { status: "failed", rendition };
|
|
54
|
+
}
|
|
55
|
+
const remainingMs = deadline - Date.now();
|
|
56
|
+
if (remainingMs <= 0) {
|
|
57
|
+
return {
|
|
58
|
+
status: "timeout",
|
|
59
|
+
rendition: await getLatestInvoiceRendition(db, invoiceId, options),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
await sleep(Math.min(intervalMs, remainingMs));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export function waitFormatForMode(mode) {
|
|
66
|
+
return mode === "pdf" ? "pdf" : undefined;
|
|
67
|
+
}
|
|
@@ -218,6 +218,12 @@ export declare const invoiceFromBookingSchema: z.ZodObject<{
|
|
|
218
218
|
invoice: "invoice";
|
|
219
219
|
proforma: "proforma";
|
|
220
220
|
}>>;
|
|
221
|
+
wait: z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
|
|
222
|
+
none: "none";
|
|
223
|
+
pdf: "pdf";
|
|
224
|
+
any: "any";
|
|
225
|
+
}>>>;
|
|
226
|
+
waitTimeoutMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
221
227
|
}, z.core.$strip>;
|
|
222
228
|
export declare const insertInvoiceLineItemSchema: z.ZodObject<{
|
|
223
229
|
bookingItemId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
@@ -706,6 +712,12 @@ export declare const renderInvoiceInputSchema: z.ZodObject<{
|
|
|
706
712
|
xml: "xml";
|
|
707
713
|
}>>;
|
|
708
714
|
language: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
715
|
+
wait: z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
|
|
716
|
+
none: "none";
|
|
717
|
+
pdf: "pdf";
|
|
718
|
+
any: "any";
|
|
719
|
+
}>>>;
|
|
720
|
+
waitTimeoutMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
709
721
|
}, z.core.$strip>;
|
|
710
722
|
export declare const generateInvoiceDocumentInputSchema: z.ZodObject<{
|
|
711
723
|
templateId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
@@ -716,8 +728,22 @@ export declare const generateInvoiceDocumentInputSchema: z.ZodObject<{
|
|
|
716
728
|
xml: "xml";
|
|
717
729
|
}>>;
|
|
718
730
|
language: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
731
|
+
wait: z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
|
|
732
|
+
none: "none";
|
|
733
|
+
pdf: "pdf";
|
|
734
|
+
any: "any";
|
|
735
|
+
}>>>;
|
|
736
|
+
waitTimeoutMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
719
737
|
replaceExisting: z.ZodDefault<z.ZodBoolean>;
|
|
720
738
|
}, z.core.$strip>;
|
|
739
|
+
export declare const invoiceDocumentWaitQuerySchema: z.ZodObject<{
|
|
740
|
+
wait: z.ZodOptional<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
|
|
741
|
+
none: "none";
|
|
742
|
+
pdf: "pdf";
|
|
743
|
+
any: "any";
|
|
744
|
+
}>>>;
|
|
745
|
+
waitTimeoutMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
746
|
+
}, z.core.$strip>;
|
|
721
747
|
export declare const generatedInvoiceDocumentResultSchema: z.ZodObject<{
|
|
722
748
|
invoiceId: z.ZodString;
|
|
723
749
|
renderedBodyFormat: z.ZodEnum<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation-billing.d.ts","sourceRoot":"","sources":["../src/validation-billing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA0BvB,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;iBAA+B,CAAA;AAC1E,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;iBAAyC,CAAA;AAepF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAkC,CAAA;AAChF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA4C,CAAA;AA4B1F,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAoB,CAAA;AACpD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA8B,CAAA;AAE9D,eAAO,MAAM,0BAA0B;;;;;;;;;EASrC,CAAA;AAEF,eAAO,MAAM,wBAAwB;;;EAA0B,CAAA;AAE/D,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAajC,CAAA;
|
|
1
|
+
{"version":3,"file":"validation-billing.d.ts","sourceRoot":"","sources":["../src/validation-billing.ts"],"names":[],"mappings":"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"}
|
|
@@ -80,6 +80,17 @@ export const invoiceListQuerySchema = z.object({
|
|
|
80
80
|
limit: z.coerce.number().int().min(1).max(100).default(50),
|
|
81
81
|
offset: z.coerce.number().int().min(0).default(0),
|
|
82
82
|
});
|
|
83
|
+
const invoiceDocumentWaitModeSchema = z.preprocess((value) => {
|
|
84
|
+
if (value === true || value === "true")
|
|
85
|
+
return "pdf";
|
|
86
|
+
if (value === false || value === "false")
|
|
87
|
+
return "none";
|
|
88
|
+
return value;
|
|
89
|
+
}, z.enum(["none", "pdf", "any"]));
|
|
90
|
+
const invoiceDocumentWaitFieldsSchema = z.object({
|
|
91
|
+
wait: invoiceDocumentWaitModeSchema.optional(),
|
|
92
|
+
waitTimeoutMs: z.coerce.number().int().min(0).max(60_000).optional(),
|
|
93
|
+
});
|
|
83
94
|
export const invoiceFromBookingSchema = z.object({
|
|
84
95
|
bookingId: z.string().min(1),
|
|
85
96
|
invoiceNumber: z.string().min(1).max(50).optional(),
|
|
@@ -93,6 +104,8 @@ export const invoiceFromBookingSchema = z.object({
|
|
|
93
104
|
* payment lands and a real invoice replaces it.
|
|
94
105
|
*/
|
|
95
106
|
invoiceType: z.enum(["invoice", "proforma"]).default("invoice"),
|
|
107
|
+
wait: invoiceDocumentWaitModeSchema.optional(),
|
|
108
|
+
waitTimeoutMs: z.coerce.number().int().min(0).max(60_000).optional(),
|
|
96
109
|
});
|
|
97
110
|
const lineItemCoreSchema = z.object({
|
|
98
111
|
bookingItemId: z.string().optional().nullable(),
|
|
@@ -337,10 +350,13 @@ export const renderInvoiceInputSchema = z.object({
|
|
|
337
350
|
templateId: z.string().optional().nullable(),
|
|
338
351
|
format: invoiceRenditionFormatSchema.default("pdf"),
|
|
339
352
|
language: z.string().optional().nullable(),
|
|
353
|
+
wait: invoiceDocumentWaitModeSchema.optional(),
|
|
354
|
+
waitTimeoutMs: z.coerce.number().int().min(0).max(60_000).optional(),
|
|
340
355
|
});
|
|
341
356
|
export const generateInvoiceDocumentInputSchema = renderInvoiceInputSchema.extend({
|
|
342
357
|
replaceExisting: z.boolean().default(true),
|
|
343
358
|
});
|
|
359
|
+
export const invoiceDocumentWaitQuerySchema = invoiceDocumentWaitFieldsSchema;
|
|
344
360
|
export const generatedInvoiceDocumentResultSchema = z.object({
|
|
345
361
|
invoiceId: z.string(),
|
|
346
362
|
renderedBodyFormat: invoiceTemplateBodyFormatSchema,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voyantjs/finance",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.76.0",
|
|
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/action-ledger": "0.
|
|
63
|
-
"@voyantjs/bookings": "0.
|
|
64
|
-
"@voyantjs/core": "0.
|
|
65
|
-
"@voyantjs/db": "0.
|
|
66
|
-
"@voyantjs/hono": "0.
|
|
67
|
-
"@voyantjs/products": "0.
|
|
68
|
-
"@voyantjs/utils": "0.
|
|
69
|
-
"@voyantjs/storage": "0.
|
|
62
|
+
"@voyantjs/action-ledger": "0.76.0",
|
|
63
|
+
"@voyantjs/bookings": "0.76.0",
|
|
64
|
+
"@voyantjs/core": "0.76.0",
|
|
65
|
+
"@voyantjs/db": "0.76.0",
|
|
66
|
+
"@voyantjs/hono": "0.76.0",
|
|
67
|
+
"@voyantjs/products": "0.76.0",
|
|
68
|
+
"@voyantjs/utils": "0.76.0",
|
|
69
|
+
"@voyantjs/storage": "0.76.0"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"typescript": "^6.0.2",
|