@voyantjs/legal 0.44.0 → 0.46.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/README.md CHANGED
@@ -25,12 +25,31 @@ const app = createApp({
25
25
  ### Contracts
26
26
 
27
27
  - **Contracts** (`cont`) — legal document instances with status lifecycle
28
- - **Contract templates** (`ctpl`) — reusable templates with variable schemas
28
+ - **Contract templates** (`ctpl`) — reusable templates with variable schemas,
29
+ optional channel scope, and explicit storefront defaults
29
30
  - **Contract template versions** (`ctpv`) — immutable version snapshots
30
31
  - **Contract signatures** (`ctsi`) — signing records (who/when/method/ip)
31
32
  - **Contract number series** (`ctns`) — series definitions with auto-increment
32
33
  - **Contract attachments** (`ctat`) — rendered PDFs and appendices
33
34
 
35
+ ## Default Storefront Contract Templates
36
+
37
+ Contract templates can be marked with `isDefault: true`. At most one default
38
+ template can exist for a given `(scope, channelId, language)` selector. A
39
+ default with `channelId: null` is the global fallback for that scope/language;
40
+ a channel-specific default wins when callers pass `channelId`.
41
+
42
+ Storefronts can resolve the active customer-safe template through:
43
+
44
+ - `GET /v1/public/legal/contracts/templates/default`
45
+ - `GET /v1/admin/legal/contracts/templates/default`
46
+
47
+ Supported query parameters are `scope` (defaults to `customer`), `channelId`,
48
+ `language`, and comma-separated `fallbackLanguages`. Selection checks requested
49
+ and fallback languages in order, prefers channel-specific defaults over global
50
+ defaults, ignores inactive templates, and falls back to the newest active
51
+ matching template only when no explicit default exists for that selector.
52
+
34
53
  ### Policies
35
54
 
36
55
  - **Policies** (`pol`) — policy definitions by kind (cancellation, payment, T&C, etc.)
@@ -16,5 +16,5 @@ export type { CloudBrowserGoToOptions, CloudBrowserPdfInput, CloudBrowserPdfOpti
16
16
  export { createBrowserRenderedPdfContractDocumentSerializer, defaultContractHtmlWrapper, } from "./service-documents-browser.js";
17
17
  export type { ContractTemplateLiquidSnippet, ContractTemplateVariableCategory, ContractTemplateVariableDefinition, ContractTemplateVariableType, } from "./template-authoring.js";
18
18
  export { contractTemplateLiquidSnippets, contractTemplateVariableCatalog, } from "./template-authoring.js";
19
- export { contractBodyFormatSchema, contractListQuerySchema, contractNumberResetStrategySchema, contractScopeSchema, contractSignatureMethodSchema, contractStatusSchema, contractTemplateListQuerySchema, generateContractDocumentInputSchema, generatedContractDocumentAttachmentSchema, generatedContractDocumentResultSchema, insertContractAttachmentSchema, insertContractNumberSeriesSchema, insertContractSchema, insertContractSignatureSchema, insertContractTemplateSchema, insertContractTemplateVersionSchema, renderTemplateInputSchema, updateContractAttachmentSchema, updateContractNumberSeriesSchema, updateContractSchema, updateContractTemplateSchema, } from "./validation.js";
19
+ export { contractBodyFormatSchema, contractListQuerySchema, contractNumberResetStrategySchema, contractScopeSchema, contractSignatureMethodSchema, contractStatusSchema, contractTemplateDefaultQuerySchema, contractTemplateListQuerySchema, generateContractDocumentInputSchema, generatedContractDocumentAttachmentSchema, generatedContractDocumentResultSchema, insertContractAttachmentSchema, insertContractNumberSeriesSchema, insertContractSchema, insertContractSignatureSchema, insertContractTemplateSchema, insertContractTemplateVersionSchema, renderTemplateInputSchema, updateContractAttachmentSchema, updateContractNumberSeriesSchema, updateContractSchema, updateContractTemplateSchema, } from "./validation.js";
20
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAExD,YAAY,EACV,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAErF,eAAO,MAAM,gBAAgB,EAAE,kBAK9B,CAAA;AAED,eAAO,MAAM,wBAAwB,EAAE,kBAKtC,CAAA;AAED,eAAO,MAAM,iBAAiB;;;CAG7B,CAAA;AAED,YAAY,EACV,QAAQ,EACR,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,EACT,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,gBAAgB,EAChB,6BAA6B,EAC7B,cAAc,EACd,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,cAAc,CAAA;AACrB,YAAY,EACV,8BAA8B,EAC9B,gCAAgC,EAChC,8BAA8B,EAC9B,iCAAiC,EACjC,+BAA+B,EAC/B,6CAA6C,EAC7C,uCAAuC,EACvC,mCAAmC,GACpC,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACL,kCAAkC,EAClC,4CAA4C,EAC5C,oCAAoC,EACpC,8CAA8C,GAC/C,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,yDAAyD,GAC1D,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,kDAAkD,EAClD,0BAA0B,GAC3B,MAAM,gCAAgC,CAAA;AACvC,YAAY,EACV,6BAA6B,EAC7B,gCAAgC,EAChC,kCAAkC,EAClC,4BAA4B,GAC7B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,iCAAiC,EACjC,mBAAmB,EACnB,6BAA6B,EAC7B,oBAAoB,EACpB,+BAA+B,EAC/B,mCAAmC,EACnC,yCAAyC,EACzC,qCAAqC,EACrC,8BAA8B,EAC9B,gCAAgC,EAChC,oBAAoB,EACpB,6BAA6B,EAC7B,4BAA4B,EAC5B,mCAAmC,EACnC,yBAAyB,EACzB,8BAA8B,EAC9B,gCAAgC,EAChC,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAExD,YAAY,EACV,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAErF,eAAO,MAAM,gBAAgB,EAAE,kBAK9B,CAAA;AAED,eAAO,MAAM,wBAAwB,EAAE,kBAKtC,CAAA;AAED,eAAO,MAAM,iBAAiB;;;CAG7B,CAAA;AAED,YAAY,EACV,QAAQ,EACR,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,SAAS,EACT,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,gBAAgB,EAChB,6BAA6B,EAC7B,cAAc,EACd,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,cAAc,CAAA;AACrB,YAAY,EACV,8BAA8B,EAC9B,gCAAgC,EAChC,8BAA8B,EAC9B,iCAAiC,EACjC,+BAA+B,EAC/B,6CAA6C,EAC7C,uCAAuC,EACvC,mCAAmC,GACpC,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EACL,kCAAkC,EAClC,4CAA4C,EAC5C,oCAAoC,EACpC,8CAA8C,GAC/C,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,yDAAyD,GAC1D,MAAM,gCAAgC,CAAA;AACvC,OAAO,EACL,kDAAkD,EAClD,0BAA0B,GAC3B,MAAM,gCAAgC,CAAA;AACvC,YAAY,EACV,6BAA6B,EAC7B,gCAAgC,EAChC,kCAAkC,EAClC,4BAA4B,GAC7B,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,yBAAyB,CAAA;AAChC,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,iCAAiC,EACjC,mBAAmB,EACnB,6BAA6B,EAC7B,oBAAoB,EACpB,kCAAkC,EAClC,+BAA+B,EAC/B,mCAAmC,EACnC,yCAAyC,EACzC,qCAAqC,EACrC,8BAA8B,EAC9B,gCAAgC,EAChC,oBAAoB,EACpB,6BAA6B,EAC7B,4BAA4B,EAC5B,mCAAmC,EACnC,yBAAyB,EACzB,8BAA8B,EAC9B,gCAAgC,EAChC,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,iBAAiB,CAAA"}
@@ -20,4 +20,4 @@ export { allocateContractNumber, ContractTemplateSyntaxError, contractsService,
20
20
  export { createPdfContractDocumentGenerator, createStorageBackedContractDocumentGenerator, defaultPdfContractDocumentSerializer, defaultStorageBackedContractDocumentSerializer, } from "./service-documents.js";
21
21
  export { createBrowserRenderedPdfContractDocumentSerializer, defaultContractHtmlWrapper, } from "./service-documents-browser.js";
22
22
  export { contractTemplateLiquidSnippets, contractTemplateVariableCatalog, } from "./template-authoring.js";
23
- export { contractBodyFormatSchema, contractListQuerySchema, contractNumberResetStrategySchema, contractScopeSchema, contractSignatureMethodSchema, contractStatusSchema, contractTemplateListQuerySchema, generateContractDocumentInputSchema, generatedContractDocumentAttachmentSchema, generatedContractDocumentResultSchema, insertContractAttachmentSchema, insertContractNumberSeriesSchema, insertContractSchema, insertContractSignatureSchema, insertContractTemplateSchema, insertContractTemplateVersionSchema, renderTemplateInputSchema, updateContractAttachmentSchema, updateContractNumberSeriesSchema, updateContractSchema, updateContractTemplateSchema, } from "./validation.js";
23
+ export { contractBodyFormatSchema, contractListQuerySchema, contractNumberResetStrategySchema, contractScopeSchema, contractSignatureMethodSchema, contractStatusSchema, contractTemplateDefaultQuerySchema, contractTemplateListQuerySchema, generateContractDocumentInputSchema, generatedContractDocumentAttachmentSchema, generatedContractDocumentResultSchema, insertContractAttachmentSchema, insertContractNumberSeriesSchema, insertContractSchema, insertContractSignatureSchema, insertContractTemplateSchema, insertContractTemplateVersionSchema, renderTemplateInputSchema, updateContractAttachmentSchema, updateContractNumberSeriesSchema, updateContractSchema, updateContractTemplateSchema, } from "./validation.js";
@@ -35,6 +35,8 @@ export declare function createContractsAdminRoutes(options?: ContractsRouteOptio
35
35
  body: string;
36
36
  variableSchema: import("hono/utils/types").JSONValue;
37
37
  currentVersionId: string | null;
38
+ channelId: string | null;
39
+ isDefault: boolean;
38
40
  active: boolean;
39
41
  createdAt: string;
40
42
  updatedAt: string;
@@ -60,18 +62,20 @@ export declare function createContractsAdminRoutes(options?: ContractsRouteOptio
60
62
  input: {};
61
63
  output: {
62
64
  data: {
63
- id: string;
64
65
  name: string;
65
- slug: string;
66
- scope: "customer" | "partner" | "supplier" | "other" | "channel";
67
- language: string;
66
+ id: string;
68
67
  description: string | null;
68
+ createdAt: string;
69
+ updatedAt: string;
70
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
71
+ slug: string;
72
+ active: boolean;
69
73
  body: string;
74
+ language: string;
75
+ channelId: string | null;
70
76
  variableSchema: import("hono/utils/types").JSONValue;
77
+ isDefault: boolean;
71
78
  currentVersionId: string | null;
72
- active: boolean;
73
- createdAt: string;
74
- updatedAt: string;
75
79
  };
76
80
  };
77
81
  outputFormat: "json";
@@ -94,7 +98,9 @@ export declare function createContractsAdminRoutes(options?: ContractsRouteOptio
94
98
  active: boolean;
95
99
  body: string;
96
100
  language: string;
101
+ channelId: string | null;
97
102
  variableSchema: import("hono/utils/types").JSONValue;
103
+ isDefault: boolean;
98
104
  currentVersionId: string | null;
99
105
  } | null;
100
106
  };
@@ -132,6 +138,8 @@ export declare function createContractsAdminRoutes(options?: ContractsRouteOptio
132
138
  body: string;
133
139
  variableSchema: import("hono/utils/types").JSONValue;
134
140
  currentVersionId: string | null;
141
+ channelId: string | null;
142
+ isDefault: boolean;
135
143
  active: boolean;
136
144
  createdAt: string;
137
145
  updatedAt: string;
@@ -171,6 +179,8 @@ export declare function createContractsAdminRoutes(options?: ContractsRouteOptio
171
179
  body: string;
172
180
  variableSchema: import("hono/utils/types").JSONValue;
173
181
  currentVersionId: string | null;
182
+ channelId: string | null;
183
+ isDefault: boolean;
174
184
  active: boolean;
175
185
  createdAt: string;
176
186
  updatedAt: string;
@@ -554,6 +564,7 @@ export declare function createContractsAdminRoutes(options?: ContractsRouteOptio
554
564
  status: "executed" | "void" | "draft" | "issued" | "sent" | "signed" | "expired";
555
565
  bookingId: string | null;
556
566
  language: string;
567
+ channelId: string | null;
557
568
  variables: import("hono/utils/types").JSONValue;
558
569
  personId: string | null;
559
570
  supplierId: string | null;
@@ -561,7 +572,6 @@ export declare function createContractsAdminRoutes(options?: ContractsRouteOptio
561
572
  title: string;
562
573
  templateVersionId: string | null;
563
574
  seriesId: string | null;
564
- channelId: string | null;
565
575
  sentAt: string | null;
566
576
  contractNumber: string | null;
567
577
  issuedAt: string | null;
@@ -1520,6 +1530,8 @@ export declare const contractsAdminRoutes: import("hono/hono-base").HonoBase<Env
1520
1530
  body: string;
1521
1531
  variableSchema: import("hono/utils/types").JSONValue;
1522
1532
  currentVersionId: string | null;
1533
+ channelId: string | null;
1534
+ isDefault: boolean;
1523
1535
  active: boolean;
1524
1536
  createdAt: string;
1525
1537
  updatedAt: string;
@@ -1545,18 +1557,20 @@ export declare const contractsAdminRoutes: import("hono/hono-base").HonoBase<Env
1545
1557
  input: {};
1546
1558
  output: {
1547
1559
  data: {
1548
- id: string;
1549
1560
  name: string;
1550
- slug: string;
1551
- scope: "customer" | "partner" | "supplier" | "other" | "channel";
1552
- language: string;
1561
+ id: string;
1553
1562
  description: string | null;
1563
+ createdAt: string;
1564
+ updatedAt: string;
1565
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
1566
+ slug: string;
1567
+ active: boolean;
1554
1568
  body: string;
1569
+ language: string;
1570
+ channelId: string | null;
1555
1571
  variableSchema: import("hono/utils/types").JSONValue;
1572
+ isDefault: boolean;
1556
1573
  currentVersionId: string | null;
1557
- active: boolean;
1558
- createdAt: string;
1559
- updatedAt: string;
1560
1574
  };
1561
1575
  };
1562
1576
  outputFormat: "json";
@@ -1579,7 +1593,9 @@ export declare const contractsAdminRoutes: import("hono/hono-base").HonoBase<Env
1579
1593
  active: boolean;
1580
1594
  body: string;
1581
1595
  language: string;
1596
+ channelId: string | null;
1582
1597
  variableSchema: import("hono/utils/types").JSONValue;
1598
+ isDefault: boolean;
1583
1599
  currentVersionId: string | null;
1584
1600
  } | null;
1585
1601
  };
@@ -1617,6 +1633,8 @@ export declare const contractsAdminRoutes: import("hono/hono-base").HonoBase<Env
1617
1633
  body: string;
1618
1634
  variableSchema: import("hono/utils/types").JSONValue;
1619
1635
  currentVersionId: string | null;
1636
+ channelId: string | null;
1637
+ isDefault: boolean;
1620
1638
  active: boolean;
1621
1639
  createdAt: string;
1622
1640
  updatedAt: string;
@@ -1656,6 +1674,8 @@ export declare const contractsAdminRoutes: import("hono/hono-base").HonoBase<Env
1656
1674
  body: string;
1657
1675
  variableSchema: import("hono/utils/types").JSONValue;
1658
1676
  currentVersionId: string | null;
1677
+ channelId: string | null;
1678
+ isDefault: boolean;
1659
1679
  active: boolean;
1660
1680
  createdAt: string;
1661
1681
  updatedAt: string;
@@ -2039,6 +2059,7 @@ export declare const contractsAdminRoutes: import("hono/hono-base").HonoBase<Env
2039
2059
  status: "executed" | "void" | "draft" | "issued" | "sent" | "signed" | "expired";
2040
2060
  bookingId: string | null;
2041
2061
  language: string;
2062
+ channelId: string | null;
2042
2063
  variables: import("hono/utils/types").JSONValue;
2043
2064
  personId: string | null;
2044
2065
  supplierId: string | null;
@@ -2046,7 +2067,6 @@ export declare const contractsAdminRoutes: import("hono/hono-base").HonoBase<Env
2046
2067
  title: string;
2047
2068
  templateVersionId: string | null;
2048
2069
  seriesId: string | null;
2049
- channelId: string | null;
2050
2070
  sentAt: string | null;
2051
2071
  contractNumber: string | null;
2052
2072
  issuedAt: string | null;
@@ -3003,18 +3023,20 @@ export declare function createContractsPublicRoutes(): import("hono/hono-base").
3003
3023
  input: {};
3004
3024
  output: {
3005
3025
  data: {
3006
- id: string;
3007
3026
  name: string;
3008
- slug: string;
3009
- scope: "customer" | "partner" | "supplier" | "other" | "channel";
3010
- language: string;
3027
+ id: string;
3011
3028
  description: string | null;
3029
+ createdAt: string;
3030
+ updatedAt: string;
3031
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
3032
+ slug: string;
3033
+ active: boolean;
3012
3034
  body: string;
3035
+ language: string;
3036
+ channelId: string | null;
3013
3037
  variableSchema: import("hono/utils/types").JSONValue;
3038
+ isDefault: boolean;
3014
3039
  currentVersionId: string | null;
3015
- active: boolean;
3016
- createdAt: string;
3017
- updatedAt: string;
3018
3040
  };
3019
3041
  };
3020
3042
  outputFormat: "json";
@@ -3225,18 +3247,20 @@ export declare const contractsPublicRoutes: import("hono/hono-base").HonoBase<En
3225
3247
  input: {};
3226
3248
  output: {
3227
3249
  data: {
3228
- id: string;
3229
3250
  name: string;
3230
- slug: string;
3231
- scope: "customer" | "partner" | "supplier" | "other" | "channel";
3232
- language: string;
3251
+ id: string;
3233
3252
  description: string | null;
3253
+ createdAt: string;
3254
+ updatedAt: string;
3255
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
3256
+ slug: string;
3257
+ active: boolean;
3234
3258
  body: string;
3259
+ language: string;
3260
+ channelId: string | null;
3235
3261
  variableSchema: import("hono/utils/types").JSONValue;
3262
+ isDefault: boolean;
3236
3263
  currentVersionId: string | null;
3237
- active: boolean;
3238
- createdAt: string;
3239
- updatedAt: string;
3240
3264
  };
3241
3265
  };
3242
3266
  outputFormat: "json";
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/contracts/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAUjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAoB/C,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,yBAAyB,GAAG,UAAU,CAChD,OAAO,gBAAgB,CAAC,wBAAwB,CACjD,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;AAEjB,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,EAAE,yBAAyB,CAAA;IAC7C,wBAAwB,CAAC,EAAE,CACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,yBAAyB,GAAG,SAAS,CAAA;IAC1C,0BAA0B,CAAC,EAAE,CAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAA;IAC3C,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;IACxC,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,eAAe,GAAG,IAAI,GAAG,SAAS,CAAA;IAClG,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,QAAQ,GAAG,SAAS,CAAA;CAC9E;AAkHD,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,qBAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCA6V7E;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAA+B,CAAA;AAEhE,wBAAgB,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA6D1C;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAAgC,CAAA;AAElE,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAC9D,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAA"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/contracts/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAUjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAoB/C,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,yBAAyB,GAAG,UAAU,CAChD,OAAO,gBAAgB,CAAC,wBAAwB,CACjD,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;AAEjB,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,CAAC,EAAE,yBAAyB,CAAA;IAC7C,wBAAwB,CAAC,EAAE,CACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,yBAAyB,GAAG,SAAS,CAAA;IAC1C,0BAA0B,CAAC,EAAE,CAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAA;IAC3C,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;IACxC,sBAAsB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,eAAe,GAAG,IAAI,GAAG,SAAS,CAAA;IAClG,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,QAAQ,GAAG,SAAS,CAAA;CAC9E;AAkHD,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,qBAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCA6V7E;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAA+B,CAAA;AAEhE,wBAAgB,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA6D1C;AAED,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAAgC,CAAA;AAElE,MAAM,MAAM,oBAAoB,GAAG,OAAO,oBAAoB,CAAA;AAC9D,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAA"}
@@ -160,6 +160,40 @@ export declare const contractTemplates: import("drizzle-orm/pg-core").PgTableWit
160
160
  identity: undefined;
161
161
  generated: undefined;
162
162
  }, {}, {}>;
163
+ channelId: import("drizzle-orm/pg-core").PgColumn<{
164
+ name: string;
165
+ tableName: "contract_templates";
166
+ dataType: "string";
167
+ columnType: "PgText";
168
+ data: string;
169
+ driverParam: string;
170
+ notNull: false;
171
+ hasDefault: false;
172
+ isPrimaryKey: false;
173
+ isAutoincrement: false;
174
+ hasRuntimeDefault: false;
175
+ enumValues: [string, ...string[]];
176
+ baseColumn: never;
177
+ identity: undefined;
178
+ generated: undefined;
179
+ }, {}, {}>;
180
+ isDefault: import("drizzle-orm/pg-core").PgColumn<{
181
+ name: "is_default";
182
+ tableName: "contract_templates";
183
+ dataType: "boolean";
184
+ columnType: "PgBoolean";
185
+ data: boolean;
186
+ driverParam: boolean;
187
+ notNull: true;
188
+ hasDefault: true;
189
+ isPrimaryKey: false;
190
+ isAutoincrement: false;
191
+ hasRuntimeDefault: false;
192
+ enumValues: undefined;
193
+ baseColumn: never;
194
+ identity: undefined;
195
+ generated: undefined;
196
+ }, {}, {}>;
163
197
  active: import("drizzle-orm/pg-core").PgColumn<{
164
198
  name: "active";
165
199
  tableName: "contract_templates";
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/contracts/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/contracts/schema.ts"],"names":[],"mappings":"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"}
@@ -47,18 +47,28 @@ export const contractTemplates = pgTable("contract_templates", {
47
47
  body: text("body").notNull(),
48
48
  variableSchema: jsonb("variable_schema"),
49
49
  currentVersionId: typeIdRef("current_version_id"),
50
+ channelId: typeIdRef("channel_id"),
51
+ isDefault: boolean("is_default").notNull().default(false),
50
52
  active: boolean("active").notNull().default(true),
51
53
  createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
52
54
  updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow(),
53
55
  }, (table) => [
54
56
  index("idx_contract_templates_scope").on(table.scope),
55
57
  index("idx_contract_templates_language").on(table.language),
58
+ index("idx_contract_templates_channel").on(table.channelId),
56
59
  index("idx_contract_templates_active").on(table.active),
60
+ index("idx_contract_templates_default_selector").on(table.scope, table.channelId, table.language, table.isDefault, table.active),
57
61
  index("idx_contract_templates_scope_updated").on(table.scope, table.updatedAt),
58
62
  index("idx_contract_templates_language_updated").on(table.language, table.updatedAt),
59
63
  index("idx_contract_templates_active_updated").on(table.active, table.updatedAt),
60
64
  index("idx_contract_templates_scope_active_updated").on(table.scope, table.active, table.updatedAt),
61
65
  uniqueIndex("uq_contract_templates_slug").on(table.slug),
66
+ uniqueIndex("uidx_contract_templates_default_global")
67
+ .on(table.scope, table.language)
68
+ .where(sql `${table.isDefault} = true AND ${table.channelId} IS NULL`),
69
+ uniqueIndex("uidx_contract_templates_default_channel")
70
+ .on(table.scope, table.channelId, table.language)
71
+ .where(sql `${table.isDefault} = true AND ${table.channelId} IS NOT NULL`),
62
72
  ]);
63
73
  // ---------- contract_template_versions ----------
64
74
  export const contractTemplateVersions = pgTable("contract_template_versions", {
@@ -75,6 +75,7 @@ export declare const contractRecordsService: {
75
75
  status: "executed" | "void" | "draft" | "issued" | "sent" | "signed" | "expired";
76
76
  bookingId: string | null;
77
77
  language: string;
78
+ channelId: string | null;
78
79
  variables: unknown;
79
80
  personId: string | null;
80
81
  supplierId: string | null;
@@ -82,7 +83,6 @@ export declare const contractRecordsService: {
82
83
  title: string;
83
84
  templateVersionId: string | null;
84
85
  seriesId: string | null;
85
- channelId: string | null;
86
86
  sentAt: Date | null;
87
87
  contractNumber: string | null;
88
88
  issuedAt: Date | null;
@@ -1,9 +1,10 @@
1
1
  import { type TemplateSyntaxIssue } from "@voyantjs/utils/template-renderer";
2
2
  import type { PostgresJsDatabase } from "drizzle-orm/postgres-js";
3
3
  import type { z } from "zod";
4
- import type { contractListQuerySchema, contractTemplateListQuerySchema, insertContractAttachmentSchema, insertContractNumberSeriesSchema, insertContractSchema, insertContractSignatureSchema, insertContractTemplateSchema, insertContractTemplateVersionSchema, renderTemplateInputSchema, updateContractAttachmentSchema, updateContractNumberSeriesSchema, updateContractSchema, updateContractTemplateSchema } from "./validation.js";
4
+ import type { contractListQuerySchema, contractTemplateDefaultQuerySchema, contractTemplateListQuerySchema, insertContractAttachmentSchema, insertContractNumberSeriesSchema, insertContractSchema, insertContractSignatureSchema, insertContractTemplateSchema, insertContractTemplateVersionSchema, renderTemplateInputSchema, updateContractAttachmentSchema, updateContractNumberSeriesSchema, updateContractSchema, updateContractTemplateSchema } from "./validation.js";
5
5
  export type ContractListQuery = z.infer<typeof contractListQuerySchema>;
6
6
  export type ContractTemplateListQuery = z.infer<typeof contractTemplateListQuerySchema>;
7
+ export type ContractTemplateDefaultQuery = z.infer<typeof contractTemplateDefaultQuerySchema>;
7
8
  export type CreateContractTemplateInput = z.infer<typeof insertContractTemplateSchema>;
8
9
  export type UpdateContractTemplateInput = z.infer<typeof updateContractTemplateSchema>;
9
10
  export type CreateContractTemplateVersionInput = z.infer<typeof insertContractTemplateVersionSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"service-shared.d.ts","sourceRoot":"","sources":["../../src/contracts/service-shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service-shared.d.ts","sourceRoot":"","sources":["../../src/contracts/service-shared.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { PostgresJsDatabase } from "drizzle-orm/postgres-js";
2
- import { type ContractTemplateListQuery, type CreateContractTemplateInput, type CreateContractTemplateVersionInput, type RenderTemplateInput, type UpdateContractTemplateInput } from "./service-shared.js";
2
+ import { type ContractTemplateDefaultQuery, type ContractTemplateListQuery, type CreateContractTemplateInput, type CreateContractTemplateVersionInput, type RenderTemplateInput, type UpdateContractTemplateInput } from "./service-shared.js";
3
3
  export declare const contractTemplatesService: {
4
4
  listTemplates(db: PostgresJsDatabase, query: ContractTemplateListQuery): Promise<{
5
5
  data: {
@@ -12,6 +12,8 @@ export declare const contractTemplatesService: {
12
12
  body: string;
13
13
  variableSchema: unknown;
14
14
  currentVersionId: string | null;
15
+ channelId: string | null;
16
+ isDefault: boolean;
15
17
  active: boolean;
16
18
  createdAt: Date;
17
19
  updatedAt: Date;
@@ -30,6 +32,8 @@ export declare const contractTemplatesService: {
30
32
  body: string;
31
33
  variableSchema: unknown;
32
34
  currentVersionId: string | null;
35
+ channelId: string | null;
36
+ isDefault: boolean;
33
37
  active: boolean;
34
38
  createdAt: Date;
35
39
  updatedAt: Date;
@@ -48,27 +52,27 @@ export declare const contractTemplatesService: {
48
52
  body: string;
49
53
  variableSchema: unknown;
50
54
  currentVersionId: string | null;
55
+ channelId: string | null;
56
+ isDefault: boolean;
51
57
  active: boolean;
52
58
  createdAt: Date;
53
59
  updatedAt: Date;
54
60
  } | null>;
55
- getDefaultTemplate(db: PostgresJsDatabase, query: {
56
- scope: "customer" | "supplier" | "partner" | "channel" | "other";
57
- language?: string;
58
- fallbackLanguages?: string[];
59
- }): Promise<{
60
- id: string;
61
+ getDefaultTemplate(db: PostgresJsDatabase, query: ContractTemplateDefaultQuery): Promise<{
61
62
  name: string;
62
- slug: string;
63
- scope: "customer" | "partner" | "supplier" | "other" | "channel";
64
- language: string;
63
+ id: string;
65
64
  description: string | null;
65
+ createdAt: Date;
66
+ updatedAt: Date;
67
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
68
+ slug: string;
69
+ active: boolean;
66
70
  body: string;
71
+ language: string;
72
+ channelId: string | null;
67
73
  variableSchema: unknown;
74
+ isDefault: boolean;
68
75
  currentVersionId: string | null;
69
- active: boolean;
70
- createdAt: Date;
71
- updatedAt: Date;
72
76
  } | null>;
73
77
  createTemplate(db: PostgresJsDatabase, data: CreateContractTemplateInput): Promise<{
74
78
  name: string;
@@ -81,7 +85,9 @@ export declare const contractTemplatesService: {
81
85
  active: boolean;
82
86
  body: string;
83
87
  language: string;
88
+ channelId: string | null;
84
89
  variableSchema: unknown;
90
+ isDefault: boolean;
85
91
  currentVersionId: string | null;
86
92
  } | null>;
87
93
  /**
@@ -109,6 +115,8 @@ export declare const contractTemplatesService: {
109
115
  body: string;
110
116
  variableSchema: unknown;
111
117
  currentVersionId: string | null;
118
+ channelId: string | null;
119
+ isDefault: boolean;
112
120
  active: boolean;
113
121
  createdAt: Date;
114
122
  updatedAt: Date;
@@ -1 +1 @@
1
- {"version":3,"file":"service-templates.d.ts","sourceRoot":"","sources":["../../src/contracts/service-templates.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAGjE,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,kCAAkC,EAEvC,KAAK,mBAAmB,EAExB,KAAK,2BAA2B,EAEjC,MAAM,qBAAqB,CAAA;AAE5B,eAAO,MAAM,wBAAwB;sBACX,kBAAkB,SAAS,yBAAyB;;;;;;;;;;;;;;;;;;;wBA6BlD,kBAAkB,MAAM,MAAM;;;;;;;;;;;;;;IAQxD;;;OAGG;2BAC0B,kBAAkB,QAAQ,MAAM;;;;;;;;;;;;;;2BASvD,kBAAkB,SACf;QACL,KAAK,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;QAChE,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;KAC7B;;;;;;;;;;;;;;uBAgCsB,kBAAkB,QAAQ,2BAA2B;;;;;;;;;;;;;;IAK9E;;;;;;;;;;;;;;OAcG;uBACsB,kBAAkB,MAAM,MAAM,QAAQ,2BAA2B;;;;;;;;;;;;;;uBAyDjE,kBAAkB,MAAM,MAAM;;;6BAO9B,kBAAkB,cAAc,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAO9B,kBAAkB,MAAM,MAAM;;;;;;;;;;8BASzD,kBAAkB,cACV,MAAM,QACZ,kCAAkC;;;;;;;;;;yBAoCrB,mBAAmB,GAAG,MAAM;CAKlD,CAAA"}
1
+ {"version":3,"file":"service-templates.d.ts","sourceRoot":"","sources":["../../src/contracts/service-templates.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAGjE,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,kCAAkC,EAEvC,KAAK,mBAAmB,EAExB,KAAK,2BAA2B,EAEjC,MAAM,qBAAqB,CAAA;AA+B5B,eAAO,MAAM,wBAAwB;sBACX,kBAAkB,SAAS,yBAAyB;;;;;;;;;;;;;;;;;;;;;wBA8BlD,kBAAkB,MAAM,MAAM;;;;;;;;;;;;;;;;IAQxD;;;OAGG;2BAC0B,kBAAkB,QAAQ,MAAM;;;;;;;;;;;;;;;;2BAQhC,kBAAkB,SAAS,4BAA4B;;;;;;;;;;;;;;;;uBA4C3D,kBAAkB,QAAQ,2BAA2B;;;;;;;;;;;;;;;;IA0B9E;;;;;;;;;;;;;;OAcG;uBACsB,kBAAkB,MAAM,MAAM,QAAQ,2BAA2B;;;;;;;;;;;;;;;;uBAiFjE,kBAAkB,MAAM,MAAM;;;6BAO9B,kBAAkB,cAAc,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAO9B,kBAAkB,MAAM,MAAM;;;;;;;;;;8BASzD,kBAAkB,cACV,MAAM,QACZ,kCAAkC;;;;;;;;;;yBAoCrB,mBAAmB,GAAG,MAAM;CAKlD,CAAA"}
@@ -1,6 +1,24 @@
1
- import { and, desc, eq, ilike, or, sql } from "drizzle-orm";
1
+ import { and, desc, eq, ilike, isNull, ne, or, sql } from "drizzle-orm";
2
2
  import { contractTemplates, contractTemplateVersions } from "./schema.js";
3
3
  import { paginate, renderTemplate, validateContractTemplateBody, } from "./service-shared.js";
4
+ function normalizeLanguage(value) {
5
+ const normalized = value?.trim().toLowerCase();
6
+ return normalized || null;
7
+ }
8
+ function buildLanguageFallbackOrder(query) {
9
+ return [query.language, ...(query.fallbackLanguages ?? [])]
10
+ .map(normalizeLanguage)
11
+ .filter((value, index, values) => Boolean(value) && values.indexOf(value) === index);
12
+ }
13
+ function pickBestDefaultTemplate(rows, channelId) {
14
+ const channelDefault = channelId
15
+ ? rows.find((row) => row.isDefault && row.channelId === channelId)
16
+ : null;
17
+ const globalDefault = rows.find((row) => row.isDefault && row.channelId === null);
18
+ const channelFallback = channelId ? rows.find((row) => row.channelId === channelId) : null;
19
+ const globalFallback = rows.find((row) => row.channelId === null);
20
+ return channelDefault ?? globalDefault ?? channelFallback ?? globalFallback ?? null;
21
+ }
4
22
  export const contractTemplatesService = {
5
23
  async listTemplates(db, query) {
6
24
  const conditions = [];
@@ -8,6 +26,8 @@ export const contractTemplatesService = {
8
26
  conditions.push(eq(contractTemplates.scope, query.scope));
9
27
  if (query.language)
10
28
  conditions.push(eq(contractTemplates.language, query.language));
29
+ if (query.channelId)
30
+ conditions.push(eq(contractTemplates.channelId, query.channelId));
11
31
  if (query.active !== undefined)
12
32
  conditions.push(eq(contractTemplates.active, query.active));
13
33
  if (query.search) {
@@ -44,31 +64,44 @@ export const contractTemplatesService = {
44
64
  return row ?? null;
45
65
  },
46
66
  async getDefaultTemplate(db, query) {
67
+ const channelId = query.channelId?.trim() || undefined;
68
+ const channelConditions = channelId
69
+ ? or(eq(contractTemplates.channelId, channelId), isNull(contractTemplates.channelId))
70
+ : isNull(contractTemplates.channelId);
47
71
  const rows = await db
48
72
  .select()
49
73
  .from(contractTemplates)
50
- .where(and(eq(contractTemplates.scope, query.scope), eq(contractTemplates.active, true)))
51
- .orderBy(desc(contractTemplates.updatedAt));
74
+ .where(and(eq(contractTemplates.scope, query.scope), eq(contractTemplates.active, true), channelConditions))
75
+ .orderBy(desc(contractTemplates.updatedAt), desc(contractTemplates.createdAt), desc(contractTemplates.id));
52
76
  if (rows.length === 0) {
53
77
  return null;
54
78
  }
55
- const preferredLanguages = [
56
- query.language?.trim().toLowerCase(),
57
- ...(query.fallbackLanguages ?? []).map((value) => value.trim().toLowerCase()),
58
- ].filter((value, index, values) => Boolean(value) && values.indexOf(value) === index);
79
+ const preferredLanguages = buildLanguageFallbackOrder(query);
59
80
  if (preferredLanguages.length === 0) {
60
- return rows[0] ?? null;
81
+ return pickBestDefaultTemplate(rows, channelId);
61
82
  }
62
83
  for (const language of preferredLanguages) {
63
- const match = rows.find((row) => row.language.trim().toLowerCase() === language);
84
+ const match = pickBestDefaultTemplate(rows.filter((row) => row.language.trim().toLowerCase() === language), channelId);
64
85
  if (match) {
65
86
  return match;
66
87
  }
67
88
  }
68
- return rows[0] ?? null;
89
+ return pickBestDefaultTemplate(rows, channelId);
69
90
  },
70
91
  async createTemplate(db, data) {
71
92
  validateContractTemplateBody(data.body);
93
+ if (data.isDefault) {
94
+ const [existingDefault] = await db
95
+ .select({ id: contractTemplates.id })
96
+ .from(contractTemplates)
97
+ .where(and(eq(contractTemplates.scope, data.scope), eq(contractTemplates.language, data.language), data.channelId
98
+ ? eq(contractTemplates.channelId, data.channelId)
99
+ : isNull(contractTemplates.channelId), eq(contractTemplates.isDefault, true)))
100
+ .limit(1);
101
+ if (existingDefault) {
102
+ throw new Error("A default contract template already exists for this scope/channel/language");
103
+ }
104
+ }
72
105
  const [row] = await db.insert(contractTemplates).values(data).returning();
73
106
  return row ?? null;
74
107
  },
@@ -103,6 +136,19 @@ export const contractTemplatesService = {
103
136
  if (!existing)
104
137
  return null;
105
138
  const changedBody = typeof data.body === "string" && data.body !== existing.body ? data.body : null;
139
+ const nextTemplate = { ...existing, ...data };
140
+ if (nextTemplate.isDefault) {
141
+ const [existingDefault] = await tx
142
+ .select({ id: contractTemplates.id })
143
+ .from(contractTemplates)
144
+ .where(and(eq(contractTemplates.scope, nextTemplate.scope), eq(contractTemplates.language, nextTemplate.language), nextTemplate.channelId
145
+ ? eq(contractTemplates.channelId, nextTemplate.channelId)
146
+ : isNull(contractTemplates.channelId), eq(contractTemplates.isDefault, true), ne(contractTemplates.id, id)))
147
+ .limit(1);
148
+ if (existingDefault) {
149
+ throw new Error("A default contract template already exists for this scope/channel/language");
150
+ }
151
+ }
106
152
  let nextCurrentVersionId = existing.currentVersionId;
107
153
  if (changedBody !== null) {
108
154
  const [maxRow] = await tx
@@ -87,6 +87,7 @@ export declare const contractsService: {
87
87
  status: "executed" | "void" | "draft" | "issued" | "sent" | "signed" | "expired";
88
88
  bookingId: string | null;
89
89
  language: string;
90
+ channelId: string | null;
90
91
  variables: unknown;
91
92
  personId: string | null;
92
93
  supplierId: string | null;
@@ -94,7 +95,6 @@ export declare const contractsService: {
94
95
  title: string;
95
96
  templateVersionId: string | null;
96
97
  seriesId: string | null;
97
- channelId: string | null;
98
98
  sentAt: Date | null;
99
99
  contractNumber: string | null;
100
100
  issuedAt: Date | null;
@@ -1370,6 +1370,8 @@ export declare const contractsService: {
1370
1370
  body: string;
1371
1371
  variableSchema: unknown;
1372
1372
  currentVersionId: string | null;
1373
+ channelId: string | null;
1374
+ isDefault: boolean;
1373
1375
  active: boolean;
1374
1376
  createdAt: Date;
1375
1377
  updatedAt: Date;
@@ -1388,6 +1390,8 @@ export declare const contractsService: {
1388
1390
  body: string;
1389
1391
  variableSchema: unknown;
1390
1392
  currentVersionId: string | null;
1393
+ channelId: string | null;
1394
+ isDefault: boolean;
1391
1395
  active: boolean;
1392
1396
  createdAt: Date;
1393
1397
  updatedAt: Date;
@@ -1402,27 +1406,27 @@ export declare const contractsService: {
1402
1406
  body: string;
1403
1407
  variableSchema: unknown;
1404
1408
  currentVersionId: string | null;
1409
+ channelId: string | null;
1410
+ isDefault: boolean;
1405
1411
  active: boolean;
1406
1412
  createdAt: Date;
1407
1413
  updatedAt: Date;
1408
1414
  } | null>;
1409
- getDefaultTemplate(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, query: {
1410
- scope: "customer" | "supplier" | "partner" | "channel" | "other";
1411
- language?: string;
1412
- fallbackLanguages?: string[];
1413
- }): Promise<{
1414
- id: string;
1415
+ getDefaultTemplate(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, query: import("./service-shared.js").ContractTemplateDefaultQuery): Promise<{
1415
1416
  name: string;
1416
- slug: string;
1417
- scope: "customer" | "partner" | "supplier" | "other" | "channel";
1418
- language: string;
1417
+ id: string;
1419
1418
  description: string | null;
1419
+ createdAt: Date;
1420
+ updatedAt: Date;
1421
+ scope: "customer" | "partner" | "supplier" | "other" | "channel";
1422
+ slug: string;
1423
+ active: boolean;
1420
1424
  body: string;
1425
+ language: string;
1426
+ channelId: string | null;
1421
1427
  variableSchema: unknown;
1428
+ isDefault: boolean;
1422
1429
  currentVersionId: string | null;
1423
- active: boolean;
1424
- createdAt: Date;
1425
- updatedAt: Date;
1426
1430
  } | null>;
1427
1431
  createTemplate(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, data: import("./service-shared.js").CreateContractTemplateInput): Promise<{
1428
1432
  name: string;
@@ -1435,7 +1439,9 @@ export declare const contractsService: {
1435
1439
  active: boolean;
1436
1440
  body: string;
1437
1441
  language: string;
1442
+ channelId: string | null;
1438
1443
  variableSchema: unknown;
1444
+ isDefault: boolean;
1439
1445
  currentVersionId: string | null;
1440
1446
  } | null>;
1441
1447
  updateTemplate(db: import("drizzle-orm/postgres-js").PostgresJsDatabase, id: string, data: import("./service-shared.js").UpdateContractTemplateInput): Promise<{
@@ -1448,6 +1454,8 @@ export declare const contractsService: {
1448
1454
  body: string;
1449
1455
  variableSchema: unknown;
1450
1456
  currentVersionId: string | null;
1457
+ channelId: string | null;
1458
+ isDefault: boolean;
1451
1459
  active: boolean;
1452
1460
  createdAt: Date;
1453
1461
  updatedAt: Date;
@@ -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;;mBAM2oT,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAAvpQ,CAAC;yBAAgC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CADnjD,CAAA"}
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;;mBAM2oT,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CADxqT,CAAA"}
@@ -45,6 +45,8 @@ export declare const insertContractTemplateSchema: z.ZodObject<{
45
45
  description: z.ZodNullable<z.ZodOptional<z.ZodString>>;
46
46
  body: z.ZodString;
47
47
  variableSchema: z.ZodNullable<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
48
+ channelId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
49
+ isDefault: z.ZodDefault<z.ZodBoolean>;
48
50
  active: z.ZodDefault<z.ZodBoolean>;
49
51
  }, z.core.$strip>;
50
52
  export declare const updateContractTemplateSchema: z.ZodObject<{
@@ -61,6 +63,8 @@ export declare const updateContractTemplateSchema: z.ZodObject<{
61
63
  description: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
62
64
  body: z.ZodOptional<z.ZodString>;
63
65
  variableSchema: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>>;
66
+ channelId: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
67
+ isDefault: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
64
68
  active: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
65
69
  }, z.core.$strip>;
66
70
  export declare const contractTemplateListQuerySchema: z.ZodObject<{
@@ -74,6 +78,7 @@ export declare const contractTemplateListQuerySchema: z.ZodObject<{
74
78
  channel: "channel";
75
79
  }>>;
76
80
  language: z.ZodOptional<z.ZodString>;
81
+ channelId: z.ZodOptional<z.ZodString>;
77
82
  active: z.ZodOptional<z.ZodCoercedBoolean<unknown>>;
78
83
  search: z.ZodOptional<z.ZodString>;
79
84
  }, z.core.$strip>;
@@ -85,6 +90,7 @@ export declare const contractTemplateDefaultQuerySchema: z.ZodObject<{
85
90
  other: "other";
86
91
  channel: "channel";
87
92
  }>>;
93
+ channelId: z.ZodOptional<z.ZodString>;
88
94
  language: z.ZodOptional<z.ZodString>;
89
95
  fallbackLanguages: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<string[], string | undefined>>;
90
96
  }, z.core.$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/contracts/validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,mBAAmB;;;;;;EAAkE,CAAA;AAElG,eAAO,MAAM,oBAAoB;;;;;;;;EAQ/B,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;;;EAAwD,CAAA;AAElG,eAAO,MAAM,iCAAiC;;;;EAAyC,CAAA;AAEvF,eAAO,MAAM,wBAAwB;;;;EAA+C,CAAA;AAoCpF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;iBAA6B,CAAA;AACtE,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;iBAAuC,CAAA;AAEhF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;iBAK1C,CAAA;AAEF,eAAO,MAAM,kCAAkC;;;;;;;;;;iBAc7C,CAAA;AAIF,eAAO,MAAM,mCAAmC;;;;;iBAK9C,CAAA;AAcF,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;iBAAiC,CAAA;AAC9E,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;iBAA2C,CAAA;AAsBxF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAqB,CAAA;AACtD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA+B,CAAA;AAEhE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;iBASlC,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;iBAGpC,CAAA;AAEF,eAAO,MAAM,sCAAsC;;iBAEjD,CAAA;AAEF,eAAO,MAAM,mCAAmC;;;;iBAI9C,CAAA;AAEF,eAAO,MAAM,yCAAyC;;;;;;;;;;;iBAWpD,CAAA;AAEF,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMhD,CAAA;AAkBF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;iBAA8B,CAAA;AAcxE,eAAO,MAAM,8BAA8B;;;;;;;;iBAA+B,CAAA;AAC1E,eAAO,MAAM,8BAA8B;;;;;;;;iBAAyC,CAAA;AAEpF,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAA"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/contracts/validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,mBAAmB;;;;;;EAAkE,CAAA;AAElG,eAAO,MAAM,oBAAoB;;;;;;;;EAQ/B,CAAA;AAEF,eAAO,MAAM,6BAA6B;;;;;EAAwD,CAAA;AAElG,eAAO,MAAM,iCAAiC;;;;EAAyC,CAAA;AAEvF,eAAO,MAAM,wBAAwB;;;;EAA+C,CAAA;AAsCpF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;iBAA6B,CAAA;AACtE,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;iBAAuC,CAAA;AAEhF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;iBAM1C,CAAA;AAEF,eAAO,MAAM,kCAAkC;;;;;;;;;;;iBAe7C,CAAA;AAIF,eAAO,MAAM,mCAAmC;;;;;iBAK9C,CAAA;AAcF,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;iBAAiC,CAAA;AAC9E,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;iBAA2C,CAAA;AAsBxF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAqB,CAAA;AACtD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA+B,CAAA;AAEhE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;iBASlC,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;iBAGpC,CAAA;AAEF,eAAO,MAAM,sCAAsC;;iBAEjD,CAAA;AAEF,eAAO,MAAM,mCAAmC;;;;iBAI9C,CAAA;AAEF,eAAO,MAAM,yCAAyC;;;;;;;;;;;iBAWpD,CAAA;AAEF,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMhD,CAAA;AAkBF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;iBAA8B,CAAA;AAcxE,eAAO,MAAM,8BAA8B;;;;;;;;iBAA+B,CAAA;AAC1E,eAAO,MAAM,8BAA8B;;;;;;;;iBAAyC,CAAA;AAEpF,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAA"}
@@ -41,6 +41,8 @@ const contractTemplateCoreSchema = z.object({
41
41
  description: z.string().max(2000).optional().nullable(),
42
42
  body: contractTemplateBodySchema,
43
43
  variableSchema: z.record(z.string(), z.unknown()).optional().nullable(),
44
+ channelId: z.string().optional().nullable(),
45
+ isDefault: z.boolean().default(false),
44
46
  active: z.boolean().default(true),
45
47
  });
46
48
  export const insertContractTemplateSchema = contractTemplateCoreSchema;
@@ -48,11 +50,13 @@ export const updateContractTemplateSchema = contractTemplateCoreSchema.partial()
48
50
  export const contractTemplateListQuerySchema = paginationSchema.extend({
49
51
  scope: contractScopeSchema.optional(),
50
52
  language: z.string().optional(),
53
+ channelId: z.string().optional(),
51
54
  active: z.coerce.boolean().optional(),
52
55
  search: z.string().optional(),
53
56
  });
54
57
  export const contractTemplateDefaultQuerySchema = z.object({
55
58
  scope: contractScopeSchema.default("customer"),
59
+ channelId: z.string().optional(),
56
60
  language: z.string().min(2).max(10).optional(),
57
61
  fallbackLanguages: z
58
62
  .string()
@@ -546,8 +546,8 @@ export declare const policiesAdminRoutes: import("hono/hono-base").HonoBase<Env,
546
546
  updatedAt: string;
547
547
  scope: "supplier" | "organization" | "channel" | "product" | "market" | "global";
548
548
  organizationId: string | null;
549
- supplierId: string | null;
550
549
  channelId: string | null;
550
+ supplierId: string | null;
551
551
  productId: string | null;
552
552
  priority: number;
553
553
  validFrom: string | null;
@@ -1166,8 +1166,8 @@ export declare const policiesCoreService: {
1166
1166
  updatedAt: Date;
1167
1167
  scope: "supplier" | "organization" | "channel" | "product" | "market" | "global";
1168
1168
  organizationId: string | null;
1169
- supplierId: string | null;
1170
1169
  channelId: string | null;
1170
+ supplierId: string | null;
1171
1171
  productId: string | null;
1172
1172
  priority: number;
1173
1173
  validFrom: string | null;
@@ -1166,8 +1166,8 @@ export declare const policiesService: {
1166
1166
  updatedAt: Date;
1167
1167
  scope: "supplier" | "organization" | "channel" | "product" | "market" | "global";
1168
1168
  organizationId: string | null;
1169
- supplierId: string | null;
1170
1169
  channelId: string | null;
1170
+ supplierId: string | null;
1171
1171
  productId: string | null;
1172
1172
  priority: number;
1173
1173
  validFrom: string | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyantjs/legal",
3
- "version": "0.44.0",
3
+ "version": "0.46.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/bookings": "0.44.0",
63
- "@voyantjs/core": "0.44.0",
64
- "@voyantjs/crm": "0.44.0",
65
- "@voyantjs/db": "0.44.0",
66
- "@voyantjs/hono": "0.44.0",
67
- "@voyantjs/suppliers": "0.44.0",
68
- "@voyantjs/utils": "0.44.0",
69
- "@voyantjs/storage": "0.44.0"
62
+ "@voyantjs/bookings": "0.46.0",
63
+ "@voyantjs/core": "0.46.0",
64
+ "@voyantjs/crm": "0.46.0",
65
+ "@voyantjs/db": "0.46.0",
66
+ "@voyantjs/hono": "0.46.0",
67
+ "@voyantjs/suppliers": "0.46.0",
68
+ "@voyantjs/utils": "0.46.0",
69
+ "@voyantjs/storage": "0.46.0"
70
70
  },
71
71
  "devDependencies": {
72
72
  "typescript": "^6.0.2",