@chenchaolong/plugin-trade-compliance-workbench 0.1.74 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +41 -22
  2. package/dist/assets/templates/CI.xlsx +0 -0
  3. package/dist/assets/templates/CUSTOMS_DECLARATION.xlsx +0 -0
  4. package/dist/assets/templates/PI.xlsx +0 -0
  5. package/dist/assets/templates/PL.xlsx +0 -0
  6. package/dist/index.d.ts +115 -228
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +19 -108
  9. package/dist/index.js.map +1 -1
  10. package/dist/lib/{document-text-extractor.d.ts → adapters/document-text-extractor.d.ts} +2 -2
  11. package/dist/lib/adapters/document-text-extractor.d.ts.map +1 -0
  12. package/dist/lib/{document-text-extractor.js → adapters/document-text-extractor.js} +8 -2
  13. package/dist/lib/adapters/document-text-extractor.js.map +1 -0
  14. package/dist/lib/adapters/file-storage.d.ts +9 -0
  15. package/dist/lib/adapters/file-storage.d.ts.map +1 -0
  16. package/dist/lib/adapters/file-storage.js +37 -0
  17. package/dist/lib/adapters/file-storage.js.map +1 -0
  18. package/dist/lib/{trade-compliance.enrichment.d.ts → adapters/hsbianma.provider.d.ts} +6 -6
  19. package/dist/lib/adapters/hsbianma.provider.d.ts.map +1 -0
  20. package/dist/lib/{trade-compliance.enrichment.js → adapters/hsbianma.provider.js} +1 -1
  21. package/dist/lib/adapters/hsbianma.provider.js.map +1 -0
  22. package/dist/lib/adapters/translation.provider.d.ts +4 -0
  23. package/dist/lib/adapters/translation.provider.d.ts.map +1 -0
  24. package/dist/lib/adapters/translation.provider.js +35 -0
  25. package/dist/lib/adapters/translation.provider.js.map +1 -0
  26. package/dist/lib/constants.d.ts +17 -11
  27. package/dist/lib/constants.d.ts.map +1 -1
  28. package/dist/lib/constants.js +17 -21
  29. package/dist/lib/constants.js.map +1 -1
  30. package/dist/lib/domain/contract-number.d.ts +14 -0
  31. package/dist/lib/domain/contract-number.d.ts.map +1 -0
  32. package/dist/lib/domain/contract-number.js +36 -0
  33. package/dist/lib/domain/contract-number.js.map +1 -0
  34. package/dist/lib/domain/default-settings.d.ts +28 -0
  35. package/dist/lib/domain/default-settings.d.ts.map +1 -0
  36. package/dist/lib/domain/default-settings.js +16 -0
  37. package/dist/lib/domain/default-settings.js.map +1 -0
  38. package/dist/lib/domain/finance.d.ts +37 -0
  39. package/dist/lib/domain/finance.d.ts.map +1 -0
  40. package/dist/lib/domain/finance.js +60 -0
  41. package/dist/lib/domain/finance.js.map +1 -0
  42. package/dist/lib/domain/import-issues.d.ts +10 -0
  43. package/dist/lib/domain/import-issues.d.ts.map +1 -0
  44. package/dist/lib/domain/import-issues.js +23 -0
  45. package/dist/lib/domain/import-issues.js.map +1 -0
  46. package/dist/lib/domain/normalization.d.ts +8 -0
  47. package/dist/lib/domain/normalization.d.ts.map +1 -0
  48. package/dist/lib/domain/normalization.js +50 -0
  49. package/dist/lib/domain/normalization.js.map +1 -0
  50. package/dist/lib/domain/workflow.d.ts +4 -0
  51. package/dist/lib/domain/workflow.d.ts.map +1 -0
  52. package/dist/lib/domain/workflow.js +14 -0
  53. package/dist/lib/domain/workflow.js.map +1 -0
  54. package/dist/lib/entities/base.d.ts +20 -0
  55. package/dist/lib/entities/base.d.ts.map +1 -0
  56. package/dist/lib/entities/base.js +51 -0
  57. package/dist/lib/entities/base.js.map +1 -0
  58. package/dist/lib/entities/catalog.entity.d.ts +80 -0
  59. package/dist/lib/entities/catalog.entity.d.ts.map +1 -0
  60. package/dist/lib/entities/catalog.entity.js +308 -0
  61. package/dist/lib/entities/catalog.entity.js.map +1 -0
  62. package/dist/lib/entities/customer.entity.d.ts +72 -0
  63. package/dist/lib/entities/customer.entity.d.ts.map +1 -0
  64. package/dist/lib/entities/customer.entity.js +276 -0
  65. package/dist/lib/entities/customer.entity.js.map +1 -0
  66. package/dist/lib/entities/index.d.ts +12 -6
  67. package/dist/lib/entities/index.d.ts.map +1 -1
  68. package/dist/lib/entities/index.js +20 -7
  69. package/dist/lib/entities/index.js.map +1 -1
  70. package/dist/lib/entities/procurement.entity.d.ts +99 -0
  71. package/dist/lib/entities/procurement.entity.d.ts.map +1 -0
  72. package/dist/lib/entities/procurement.entity.js +386 -0
  73. package/dist/lib/entities/procurement.entity.js.map +1 -0
  74. package/dist/lib/entities/settings.entity.d.ts +64 -0
  75. package/dist/lib/entities/settings.entity.d.ts.map +1 -0
  76. package/dist/lib/entities/settings.entity.js +243 -0
  77. package/dist/lib/entities/settings.entity.js.map +1 -0
  78. package/dist/lib/entities/shared.entity.d.ts +40 -0
  79. package/dist/lib/entities/shared.entity.d.ts.map +1 -0
  80. package/dist/lib/entities/shared.entity.js +149 -0
  81. package/dist/lib/entities/shared.entity.js.map +1 -0
  82. package/dist/lib/remote-components/trade-compliance-workbench/app.js +245 -2664
  83. package/dist/lib/remote-components/trade-compliance-workbench/editor-source.mjs +53 -0
  84. package/dist/lib/remote-components/trade-compliance-workbench/editor.css +1 -0
  85. package/dist/lib/remote-components/trade-compliance-workbench/editor.js +533 -0
  86. package/dist/lib/sales-file.service.d.ts +29 -0
  87. package/dist/lib/sales-file.service.d.ts.map +1 -0
  88. package/dist/lib/sales-file.service.js +300 -0
  89. package/dist/lib/sales-file.service.js.map +1 -0
  90. package/dist/lib/trade-compliance.config.d.ts +94 -187
  91. package/dist/lib/trade-compliance.config.d.ts.map +1 -1
  92. package/dist/lib/trade-compliance.config.js +12 -96
  93. package/dist/lib/trade-compliance.config.js.map +1 -1
  94. package/dist/lib/types.d.ts +104 -1
  95. package/dist/lib/types.d.ts.map +1 -1
  96. package/dist/lib/types.js +47 -1
  97. package/dist/lib/types.js.map +1 -1
  98. package/dist/lib/workbench-view.provider.d.ts +276 -0
  99. package/dist/lib/workbench-view.provider.d.ts.map +1 -0
  100. package/dist/lib/workbench-view.provider.js +222 -0
  101. package/dist/lib/workbench-view.provider.js.map +1 -0
  102. package/dist/lib/workbench.middleware.d.ts +351 -0
  103. package/dist/lib/workbench.middleware.d.ts.map +1 -0
  104. package/dist/lib/workbench.middleware.js +48 -0
  105. package/dist/lib/workbench.middleware.js.map +1 -0
  106. package/dist/lib/workbench.plugin.d.ts +5 -0
  107. package/dist/lib/workbench.plugin.d.ts.map +1 -0
  108. package/dist/lib/workbench.plugin.js +24 -0
  109. package/dist/lib/workbench.plugin.js.map +1 -0
  110. package/dist/lib/workbench.service.d.ts +257 -0
  111. package/dist/lib/workbench.service.d.ts.map +1 -0
  112. package/dist/lib/workbench.service.js +755 -0
  113. package/dist/lib/workbench.service.js.map +1 -0
  114. package/package.json +19 -25
  115. package/dist/assets/customs-workbook-template.xls +0 -0
  116. package/dist/lib/controlled-goods-extracted-text-store.d.ts +0 -29
  117. package/dist/lib/controlled-goods-extracted-text-store.d.ts.map +0 -1
  118. package/dist/lib/controlled-goods-extracted-text-store.js +0 -42
  119. package/dist/lib/controlled-goods-extracted-text-store.js.map +0 -1
  120. package/dist/lib/controlled-goods-file-parser.d.ts +0 -9
  121. package/dist/lib/controlled-goods-file-parser.d.ts.map +0 -1
  122. package/dist/lib/controlled-goods-file-parser.js +0 -298
  123. package/dist/lib/controlled-goods-file-parser.js.map +0 -1
  124. package/dist/lib/document-text-extractor.d.ts.map +0 -1
  125. package/dist/lib/document-text-extractor.js.map +0 -1
  126. package/dist/lib/entities/controlled-goods-record.entity.d.ts +0 -5
  127. package/dist/lib/entities/controlled-goods-record.entity.d.ts.map +0 -1
  128. package/dist/lib/entities/controlled-goods-record.entity.js +0 -68
  129. package/dist/lib/entities/controlled-goods-record.entity.js.map +0 -1
  130. package/dist/lib/entities/customs-workbook-generation.entity.d.ts +0 -5
  131. package/dist/lib/entities/customs-workbook-generation.entity.d.ts.map +0 -1
  132. package/dist/lib/entities/customs-workbook-generation.entity.js +0 -72
  133. package/dist/lib/entities/customs-workbook-generation.entity.js.map +0 -1
  134. package/dist/lib/entities/trade-compliance-import-batch.entity.d.ts +0 -5
  135. package/dist/lib/entities/trade-compliance-import-batch.entity.d.ts.map +0 -1
  136. package/dist/lib/entities/trade-compliance-import-batch.entity.js +0 -60
  137. package/dist/lib/entities/trade-compliance-import-batch.entity.js.map +0 -1
  138. package/dist/lib/entities/trade-compliance-review-item.entity.d.ts +0 -5
  139. package/dist/lib/entities/trade-compliance-review-item.entity.d.ts.map +0 -1
  140. package/dist/lib/entities/trade-compliance-review-item.entity.js +0 -84
  141. package/dist/lib/entities/trade-compliance-review-item.entity.js.map +0 -1
  142. package/dist/lib/entities/trade-product.entity.d.ts +0 -5
  143. package/dist/lib/entities/trade-product.entity.d.ts.map +0 -1
  144. package/dist/lib/entities/trade-product.entity.js +0 -105
  145. package/dist/lib/entities/trade-product.entity.js.map +0 -1
  146. package/dist/lib/entities/trade-supplier.entity.d.ts +0 -5
  147. package/dist/lib/entities/trade-supplier.entity.d.ts.map +0 -1
  148. package/dist/lib/entities/trade-supplier.entity.js +0 -55
  149. package/dist/lib/entities/trade-supplier.entity.js.map +0 -1
  150. package/dist/lib/trade-compliance-workbench-view.provider.d.ts +0 -129
  151. package/dist/lib/trade-compliance-workbench-view.provider.d.ts.map +0 -1
  152. package/dist/lib/trade-compliance-workbench-view.provider.js +0 -863
  153. package/dist/lib/trade-compliance-workbench-view.provider.js.map +0 -1
  154. package/dist/lib/trade-compliance-workbench.middleware.d.ts +0 -485
  155. package/dist/lib/trade-compliance-workbench.middleware.d.ts.map +0 -1
  156. package/dist/lib/trade-compliance-workbench.middleware.js +0 -494
  157. package/dist/lib/trade-compliance-workbench.middleware.js.map +0 -1
  158. package/dist/lib/trade-compliance-workbench.plugin.d.ts +0 -11
  159. package/dist/lib/trade-compliance-workbench.plugin.d.ts.map +0 -1
  160. package/dist/lib/trade-compliance-workbench.plugin.js +0 -39
  161. package/dist/lib/trade-compliance-workbench.plugin.js.map +0 -1
  162. package/dist/lib/trade-compliance-workbench.service.d.ts +0 -33
  163. package/dist/lib/trade-compliance-workbench.service.d.ts.map +0 -1
  164. package/dist/lib/trade-compliance-workbench.service.js +0 -369
  165. package/dist/lib/trade-compliance-workbench.service.js.map +0 -1
  166. package/dist/lib/trade-compliance-workbench.templates.d.ts +0 -31
  167. package/dist/lib/trade-compliance-workbench.templates.d.ts.map +0 -1
  168. package/dist/lib/trade-compliance-workbench.templates.js +0 -60
  169. package/dist/lib/trade-compliance-workbench.templates.js.map +0 -1
  170. package/dist/lib/trade-compliance-workbook.d.ts +0 -28
  171. package/dist/lib/trade-compliance-workbook.d.ts.map +0 -1
  172. package/dist/lib/trade-compliance-workbook.js +0 -546
  173. package/dist/lib/trade-compliance-workbook.js.map +0 -1
  174. package/dist/lib/trade-compliance.enrichment.d.ts.map +0 -1
  175. package/dist/lib/trade-compliance.enrichment.js.map +0 -1
  176. package/dist/lib/trade-compliance.matching.d.ts +0 -10
  177. package/dist/lib/trade-compliance.matching.d.ts.map +0 -1
  178. package/dist/lib/trade-compliance.matching.js +0 -63
  179. package/dist/lib/trade-compliance.matching.js.map +0 -1
  180. package/dist/xpert-trade-compliance-workbench-assistant.yaml +0 -27
package/dist/lib/types.js CHANGED
@@ -1,2 +1,48 @@
1
- export {};
1
+ export const SourceDocumentTypes = ['CONTROLLED_CATALOG', 'SANCTION_CATALOG', 'PURCHASE_CONTRACT', 'CUSTOMER_CONTRACT'];
2
+ export const SourceFileFormats = ['PDF', 'DOC', 'DOCX', 'XLS', 'XLSX', 'PNG', 'JPEG', 'WEBP'];
3
+ export const ImportModes = ['APPEND', 'REPLACE_BATCH'];
4
+ export const CatalogTypes = ['DUAL_USE', 'OVERSEAS_SANCTION'];
5
+ export const CompanyRiskSubjectTypes = ['SUPPLIER', 'CUSTOMER'];
6
+ export const SalesFileTypes = ['PI', 'CI', 'PL', 'CUSTOMS_DECLARATION'];
7
+ export const PricingProfitRateSources = ['CUSTOMER_DEFAULT', 'ORDER_OVERRIDE'];
8
+ export const ProfitMetricTypes = ['PRICING_MARKUP', 'COMPLIANCE_PROFIT'];
9
+ export const ImportTaskStatuses = ['QUEUED', 'EXTRACTING', 'AI_PARSING', 'VALIDATING', 'AWAITING_REVIEW', 'PERSISTING', 'SUCCEEDED', 'FAILED', 'TIMED_OUT'];
10
+ export const HsCodeStatuses = ['UNCONFIRMED', 'AI_CONFIRMED', 'MANUALLY_CONFIRMED'];
11
+ export const HsCodeSources = ['CONTRACT_EXTRACTED', 'HS_LOOKUP', 'MANUAL'];
12
+ export const EnglishNameSources = ['HS_LOOKUP', 'AI_TRANSLATION', 'MANUAL'];
13
+ export const CatalogRecordSourceTypes = ['FILE_IMPORT', 'MANUAL_ENTRY'];
14
+ export const PurchaseOrderLineSourceTypes = ['CONTRACT_EXTRACTED', 'MANUAL_ENTRY'];
15
+ export const BankAccountTypes = ['OVERSEAS_CNY', 'OVERSEAS_USD'];
16
+ export const DeleteOperations = ['USER_DELETE', 'CATALOG_REPLACE', 'SANCTION_CATALOG_REPLACE', 'SOURCE_CASCADE'];
17
+ export const RiskMatchInvalidationReasons = ['SOURCE_CHANGED', 'CATALOG_CHANGED'];
18
+ export const RiskLevels = ['LOW', 'MEDIUM', 'HIGH'];
19
+ export const ClauseTypes = ['CONTRACT_AMOUNT', 'TAX_RATE', 'PRICE_TERMS', 'TRANSPORT', 'WARRANTY', 'BREACH_LIABILITY', 'PAYMENT_TERMS'];
20
+ export const DomainErrorCodes = {
21
+ INVALID_INPUT: 'INVALID_INPUT',
22
+ NOT_FOUND: 'NOT_FOUND',
23
+ DUPLICATE_CATALOG_RECORD: 'DUPLICATE_CATALOG_RECORD',
24
+ DUPLICATE_CONTRACT: 'DUPLICATE_CONTRACT',
25
+ INVALID_CONTRACT_NO: 'INVALID_CONTRACT_NO',
26
+ DERIVED_LINK_CONFLICT: 'DERIVED_LINK_CONFLICT',
27
+ CUSTOMER_PROFIT_RATE_REQUIRED: 'CUSTOMER_PROFIT_RATE_REQUIRED',
28
+ RECEIVED_AMOUNT_EXCEEDED: 'RECEIVED_AMOUNT_EXCEEDED',
29
+ PROFIT_RULE_UNCONFIGURED: 'PROFIT_RULE_UNCONFIGURED',
30
+ PROFIT_RATE_BELOW_MINIMUM: 'PROFIT_RATE_BELOW_MINIMUM',
31
+ EXCHANGE_COST_OUT_OF_RANGE: 'EXCHANGE_COST_OUT_OF_RANGE',
32
+ EXCHANGE_RATE_REQUIRED: 'EXCHANGE_RATE_REQUIRED',
33
+ BANK_ACCOUNT_REQUIRED: 'BANK_ACCOUNT_REQUIRED',
34
+ TRANSLATION_FAILED: 'TRANSLATION_FAILED',
35
+ TEMPLATE_INVALID: 'TEMPLATE_INVALID',
36
+ FILE_TOO_LARGE: 'FILE_TOO_LARGE',
37
+ UNSUPPORTED_FILE_FORMAT: 'UNSUPPORTED_FILE_FORMAT',
38
+ IMPORT_TIMED_OUT: 'IMPORT_TIMED_OUT'
39
+ };
40
+ export class DomainError extends Error {
41
+ constructor(code, message, details = {}) {
42
+ super(message);
43
+ this.code = code;
44
+ this.details = details;
45
+ this.name = 'DomainError';
46
+ }
47
+ }
2
48
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,276 @@
1
+ import { TradeComplianceWorkbenchService } from './workbench.service.js';
2
+ import { SalesFileService } from './sales-file.service.js';
3
+ import { TradeComplianceFileStorage } from './adapters/file-storage.js';
4
+ export declare class TradeComplianceWorkbenchViewProvider {
5
+ private readonly service;
6
+ private readonly salesFiles;
7
+ private readonly storage;
8
+ constructor(service: TradeComplianceWorkbenchService, salesFiles: SalesFileService, storage: TradeComplianceFileStorage);
9
+ supports(context: any): boolean;
10
+ getViewManifests(_context: any, slot: string): {
11
+ key: string;
12
+ title: {
13
+ en_US: string;
14
+ zh_Hans: string;
15
+ };
16
+ description: {
17
+ en_US: string;
18
+ zh_Hans: string;
19
+ };
20
+ icon: {
21
+ type: string;
22
+ value: string;
23
+ };
24
+ hostType: string;
25
+ slot: string;
26
+ order: number;
27
+ refreshable: boolean;
28
+ activation: {
29
+ requiredFeatures: string[];
30
+ };
31
+ source: {
32
+ provider: string;
33
+ plugin: string;
34
+ };
35
+ view: {
36
+ type: string;
37
+ runtime: string;
38
+ protocolVersion: number;
39
+ component: {
40
+ isolation: string;
41
+ entry: string;
42
+ };
43
+ dataSource: {
44
+ mode: string;
45
+ };
46
+ };
47
+ dataSource: {
48
+ mode: string;
49
+ querySchema: {
50
+ supportsPagination: boolean;
51
+ supportsSearch: boolean;
52
+ supportsParameters: boolean;
53
+ defaultPageSize: number;
54
+ };
55
+ cache: {
56
+ enabled: boolean;
57
+ };
58
+ };
59
+ clientCommands: {
60
+ key: string;
61
+ label: {
62
+ en_US: string;
63
+ zh_Hans: string;
64
+ };
65
+ }[];
66
+ actions: {
67
+ key: string;
68
+ label: {
69
+ en_US: string;
70
+ zh_Hans: string;
71
+ };
72
+ icon: string;
73
+ actionType: string;
74
+ }[];
75
+ }[];
76
+ getRemoteComponentEntry(_context: any, viewKey: string, component: any): Promise<{
77
+ html: string;
78
+ contentType: string;
79
+ }>;
80
+ getViewData(context: any, _viewKey: string, query: any): Promise<{
81
+ items: never[];
82
+ total: number;
83
+ summary: {
84
+ dashboard: {
85
+ riskNotice: import("./entities/shared.entity.js").RiskNoticeSettings;
86
+ controlledRiskCount: number;
87
+ sanctionRiskCount: number;
88
+ unlinkedPurchaseCount: number;
89
+ unlinkedCustomerCount: number;
90
+ };
91
+ controlledGoods: {
92
+ items: import("./entities/catalog.entity.js").ControlledGoodsRecord[];
93
+ total: number;
94
+ page: number;
95
+ pageSize: number;
96
+ };
97
+ controlledBatches: {
98
+ items: import("./entities/catalog.entity.js").ControlledCatalogBatch[];
99
+ total: number;
100
+ page: number;
101
+ pageSize: number;
102
+ };
103
+ sanctionedCompanies: {
104
+ items: import("./entities/catalog.entity.js").SanctionedCompanyRecord[];
105
+ total: number;
106
+ page: number;
107
+ pageSize: number;
108
+ };
109
+ sanctionBatches: {
110
+ items: import("./entities/catalog.entity.js").SanctionCatalogBatch[];
111
+ total: number;
112
+ page: number;
113
+ pageSize: number;
114
+ };
115
+ suppliers: {
116
+ items: import("./entities/procurement.entity.js").Supplier[];
117
+ total: number;
118
+ page: number;
119
+ pageSize: number;
120
+ };
121
+ purchaseOrders: {
122
+ items: import("./entities/procurement.entity.js").PurchaseOrder[];
123
+ total: number;
124
+ page: number;
125
+ pageSize: number;
126
+ };
127
+ purchaseLines: {
128
+ items: import("./entities/procurement.entity.js").PurchaseOrderLine[];
129
+ total: number;
130
+ page: number;
131
+ pageSize: number;
132
+ };
133
+ customers: {
134
+ items: import("./entities/customer.entity.js").Customer[];
135
+ total: number;
136
+ page: number;
137
+ pageSize: number;
138
+ };
139
+ customerContracts: {
140
+ items: import("./entities/customer.entity.js").CustomerContract[];
141
+ total: number;
142
+ page: number;
143
+ pageSize: number;
144
+ };
145
+ derivedSalesOrders: import("./types.js").DerivedSalesOrder[];
146
+ generatedFiles: {
147
+ items: import("./entities/settings.entity.js").GeneratedSalesFile[];
148
+ total: number;
149
+ page: number;
150
+ pageSize: number;
151
+ };
152
+ settings: {
153
+ risk: import("./entities/shared.entity.js").RiskNoticeSettings;
154
+ company: import("./entities/settings.entity.js").CompanySettings | null;
155
+ banks: import("./entities/settings.entity.js").BankAccountSettings[];
156
+ profit: import("./entities/settings.entity.js").ProfitRuleSettings;
157
+ rates: import("./entities/settings.entity.js").MonthlySafeExchangeRate[];
158
+ };
159
+ analytics: {
160
+ purchase: {
161
+ count: number;
162
+ totalCny: any;
163
+ paidCny: any;
164
+ unpaidCny: any;
165
+ rows: Record<string, any>[];
166
+ };
167
+ sales: {
168
+ count: number;
169
+ totalCny: any;
170
+ paidCny: any;
171
+ unpaidCny: any;
172
+ rows: Record<string, any>[];
173
+ };
174
+ annualPurchaseCount: number;
175
+ annualSalesCount: number;
176
+ purchaseTop5: {
177
+ name: string;
178
+ amountCny: string;
179
+ }[];
180
+ salesTop5: {
181
+ name: string;
182
+ amountCny: string;
183
+ }[];
184
+ filters: Record<string, unknown>;
185
+ };
186
+ importTasks: {
187
+ items: import("./entities/shared.entity.js").ImportTask[];
188
+ total: number;
189
+ page: number;
190
+ pageSize: number;
191
+ };
192
+ };
193
+ }>;
194
+ executeViewAction(context: any, _viewKey: string, actionKey: string, request: any): Promise<{
195
+ success: boolean;
196
+ message: {
197
+ en_US: string;
198
+ zh_Hans: string;
199
+ };
200
+ data: unknown;
201
+ refresh: boolean;
202
+ } | {
203
+ success: boolean;
204
+ message: {
205
+ en_US: string;
206
+ zh_Hans: string;
207
+ };
208
+ error: {
209
+ code: import("./types.js").DomainErrorCode;
210
+ message: string;
211
+ details: Record<string, unknown>;
212
+ };
213
+ refresh: boolean;
214
+ } | {
215
+ success: boolean;
216
+ refresh: boolean;
217
+ message: {
218
+ en_US: string;
219
+ zh_Hans: string;
220
+ };
221
+ }>;
222
+ executeViewFileAction(context: any, viewKey: string, actionKey: string, request: any, file: any): Promise<{
223
+ success: boolean;
224
+ message: {
225
+ en_US: string;
226
+ zh_Hans: string;
227
+ };
228
+ error: {
229
+ code: import("./types.js").DomainErrorCode;
230
+ message: string;
231
+ details: Record<string, unknown>;
232
+ };
233
+ refresh: boolean;
234
+ } | {
235
+ success: boolean;
236
+ refresh: boolean;
237
+ message: {
238
+ en_US: string;
239
+ zh_Hans: string;
240
+ };
241
+ data: {
242
+ task: import("./entities/shared.entity.js").ImportTask;
243
+ commands: {
244
+ commandKey: string;
245
+ payload: {
246
+ text: string;
247
+ clientMessageId: string;
248
+ files: {
249
+ id: any;
250
+ fileId: any;
251
+ fileAssetId: any;
252
+ workspacePath: any;
253
+ filePath: any;
254
+ name: string;
255
+ originalName: string;
256
+ mimeType: any;
257
+ size: any;
258
+ role: string;
259
+ }[];
260
+ followUpMode: string;
261
+ state: {
262
+ tradeComplianceWorkbench: {
263
+ actionKey: any;
264
+ importTaskId: any;
265
+ };
266
+ };
267
+ };
268
+ }[];
269
+ polling: {
270
+ intervalMs: number;
271
+ timeoutMs: number;
272
+ };
273
+ };
274
+ }>;
275
+ }
276
+ //# sourceMappingURL=workbench-view.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench-view.provider.d.ts","sourceRoot":"","sources":["../../src/lib/workbench-view.provider.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAA;AASvE,qBAEa,oCAAoC;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAAmC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAAoB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAjH,OAAO,EAAE,+BAA+B,EAAmB,UAAU,EAAE,gBAAgB,EAAmB,OAAO,EAAE,0BAA0B;IAE1K,QAAQ,CAAC,OAAO,EAAE,GAAG;IAErB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAatC,uBAAuB,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG;;;;IAYtE,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAQtD,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAoCjF,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBtG"}
@@ -0,0 +1,222 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { Injectable } from '@nestjs/common';
3
+ import { createRequire } from 'node:module';
4
+ import { dirname, join } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { readFile } from 'node:fs/promises';
7
+ import { renderRemoteReactIframeHtml, ViewExtensionProvider } from '@xpert-ai/plugin-sdk';
8
+ import { FIXED_SLOT, FEATURE, ICON, MAIN_SLOT, PLUGIN_NAME, REMOTE_ENTRY_KEY, TOOL_NAMES, VIEW_KEY, VIEW_PROVIDER_KEY } from './constants.js';
9
+ import { TradeComplianceWorkbenchService } from './workbench.service.js';
10
+ import { SalesFileService } from './sales-file.service.js';
11
+ import { TradeComplianceFileStorage } from './adapters/file-storage.js';
12
+ import { extractDocumentText } from './adapters/document-text-extractor.js';
13
+ import { getHsBianmaCodeDetail, searchHsBianmaCodes } from './adapters/hsbianma.provider.js';
14
+ import { DomainError, DomainErrorCodes, SourceFileFormats } from './types.js';
15
+ const moduleDir = dirname(fileURLToPath(import.meta.url));
16
+ const requireFromHere = createRequire(import.meta.url);
17
+ const text = (en_US, zh_Hans) => ({ en_US, zh_Hans });
18
+ let TradeComplianceWorkbenchViewProvider = class TradeComplianceWorkbenchViewProvider {
19
+ constructor(service, salesFiles, storage) {
20
+ this.service = service;
21
+ this.salesFiles = salesFiles;
22
+ this.storage = storage;
23
+ }
24
+ supports(context) { return context.hostType === 'agent'; }
25
+ getViewManifests(_context, slot) {
26
+ if (slot !== MAIN_SLOT && slot !== FIXED_SLOT)
27
+ return [];
28
+ return [{
29
+ key: VIEW_KEY, title: text('Trade Compliance Workbench', '外贸合规工作台'), description: text('Trade compliance catalog, contracts, sales files and analytics.', '管理风险目录、采购合同、客户合同、销售文件与数据分析。'),
30
+ icon: { type: 'svg', value: ICON }, hostType: 'agent', slot, order: 40, refreshable: true,
31
+ activation: { requiredFeatures: [FEATURE] }, source: { provider: VIEW_PROVIDER_KEY, plugin: PLUGIN_NAME },
32
+ view: { type: 'remote_component', runtime: 'react', protocolVersion: 1, component: { isolation: 'iframe', entry: REMOTE_ENTRY_KEY }, dataSource: { mode: 'platform' } },
33
+ dataSource: { mode: 'platform', querySchema: { supportsPagination: true, supportsSearch: true, supportsParameters: true, defaultPageSize: 20 }, cache: { enabled: false } },
34
+ clientCommands: [{ key: 'assistant.chat.send_message', label: text('Send to assistant', '发送到智能体') }],
35
+ actions: actionManifests()
36
+ }];
37
+ }
38
+ async getRemoteComponentEntry(_context, viewKey, component) {
39
+ if (viewKey !== VIEW_KEY || component.entry !== REMOTE_ENTRY_KEY)
40
+ return { html: '<!doctype html><html><body>Unsupported component.</body></html>', contentType: 'text/html; charset=utf-8' };
41
+ const [appScript, editorScript, editorCss, reactUmd, reactDomUmd] = await Promise.all([
42
+ readFile(join(moduleDir, 'remote-components', REMOTE_ENTRY_KEY, 'app.js'), 'utf8'),
43
+ readFile(join(moduleDir, 'remote-components', REMOTE_ENTRY_KEY, 'editor.js'), 'utf8'),
44
+ readFile(join(moduleDir, 'remote-components', REMOTE_ENTRY_KEY, 'editor.css'), 'utf8'),
45
+ readPackageFile('react', 'umd/react.production.min.js'), readPackageFile('react-dom', 'umd/react-dom.production.min.js')
46
+ ]);
47
+ const spreadsheetRuntime = `(()=>{const style=document.createElement('style');style.textContent=${JSON.stringify(editorCss)};document.head.appendChild(style)})();\n${editorScript}\n${appScript}`;
48
+ return { html: renderRemoteReactIframeHtml({ title: '外贸合规工作台', lang: 'zh-Hans', reactUmd, reactDomUmd, appScript: spreadsheetRuntime }), contentType: 'text/html; charset=utf-8' };
49
+ }
50
+ async getViewData(context, _viewKey, query) {
51
+ const scope = scopeFromContext(context);
52
+ const all = { page: 1, pageSize: 200, search: query?.search, parameters: query?.parameters ?? {} };
53
+ const [dashboard, controlledGoods, controlledBatches, sanctionedCompanies, sanctionBatches, suppliers, purchaseOrders, purchaseLines, customers, customerContracts, derivedSalesOrders, generatedFiles, settings, analytics, importTasks] = await Promise.all([
54
+ this.service.dashboard(scope), this.service.listControlledGoods(scope, all), this.service.listControlledBatches(scope, all), this.service.listSanctionedCompanies(scope, all), this.service.listSanctionBatches(scope, all), this.service.listSuppliers(scope, all), this.service.listPurchaseOrders(scope, undefined, all), this.service.listPurchaseLines(scope, undefined, all), this.service.listCustomers(scope, all), this.service.listCustomerContracts(scope, all), this.service.listDerivedSalesOrders(scope), this.service.listGeneratedFiles(scope, all), this.service.settings(scope), this.service.analytics(scope, { ...(query?.parameters ?? {}), search: query?.search }), this.service.listImportTasks(scope, all)
55
+ ]);
56
+ return { items: [], total: 0, summary: { dashboard, controlledGoods, controlledBatches, sanctionedCompanies, sanctionBatches, suppliers, purchaseOrders, purchaseLines, customers, customerContracts, derivedSalesOrders, generatedFiles, settings, analytics, importTasks } };
57
+ }
58
+ async executeViewAction(context, _viewKey, actionKey, request) {
59
+ const scope = scopeFromContext(context);
60
+ const input = record(request?.input);
61
+ try {
62
+ let data;
63
+ switch (actionKey) {
64
+ case 'refresh': return { success: true, refresh: true, message: text('Refreshed', '已刷新') };
65
+ case 'save_controlled_goods':
66
+ data = await this.service.saveControlledGoods(scope, input);
67
+ break;
68
+ case 'update_controlled_goods':
69
+ data = await this.service.updateControlledGoods(scope, requiredString(input.id, 'id'), input);
70
+ break;
71
+ case 'save_sanctioned_company':
72
+ data = await this.service.saveSanctionedCompany(scope, input);
73
+ break;
74
+ case 'update_sanctioned_company':
75
+ data = await this.service.updateSanctionedCompany(scope, requiredString(input.id, 'id'), input);
76
+ break;
77
+ case 'save_purchase_review':
78
+ data = await this.service.savePurchaseDraft(scope, requiredString(input.importTaskId, 'importTaskId'), input.draft);
79
+ break;
80
+ case 'save_customer_contract_review':
81
+ data = await this.service.saveCustomerContractDraft(scope, requiredString(input.importTaskId, 'importTaskId'), input.draft);
82
+ break;
83
+ case 'update_supplier':
84
+ data = await this.service.updateSupplier(scope, requiredString(input.id, 'id'), input);
85
+ break;
86
+ case 'update_purchase_order':
87
+ data = await this.service.updatePurchaseOrder(scope, requiredString(input.id, 'id'), input);
88
+ break;
89
+ case 'add_purchase_line':
90
+ data = await this.service.addPurchaseLine(scope, requiredString(input.purchaseOrderId, 'purchaseOrderId'), input);
91
+ break;
92
+ case 'update_purchase_line':
93
+ data = await this.service.updatePurchaseLine(scope, requiredString(input.id, 'id'), input);
94
+ break;
95
+ case 'update_customer':
96
+ data = await this.service.updateCustomer(scope, requiredString(input.id, 'id'), input);
97
+ break;
98
+ case 'save_customer_profit_rate':
99
+ data = await this.service.saveCustomerProfitRate(scope, requiredString(input.customerId, 'customerId'), requiredString(input.rate, 'rate'));
100
+ break;
101
+ case 'save_derived_manual_data':
102
+ data = await this.service.saveDerivedManualData(scope, requiredString(input.customerContractId, 'customerContractId'), requiredString(input.purchaseOrderId, 'purchaseOrderId'), input);
103
+ break;
104
+ case 'get_customer_contract_review':
105
+ data = await this.service.getCustomerContractReview(scope, requiredString(input.id, 'id'));
106
+ break;
107
+ case 'update_customer_contract_review':
108
+ data = await this.service.updateCustomerContractReview(scope, requiredString(input.id, 'id'), input);
109
+ break;
110
+ case 'delete_entity':
111
+ data = await this.service.softDelete(scope, requiredString(input.entityType, 'entityType'), requiredString(input.id, 'id'));
112
+ break;
113
+ case 'save_settings':
114
+ data = await this.service.saveSettings(scope, input.settingsType, record(input.values));
115
+ break;
116
+ case 'generate_sales_file':
117
+ data = await this.salesFiles.generate(scope, input);
118
+ break;
119
+ case 'download_sales_file': {
120
+ const result = await this.salesFiles.download(scope, requiredString(input.id, 'id'));
121
+ data = { fileName: result.item.fileName, mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', base64: result.buffer.toString('base64') };
122
+ break;
123
+ }
124
+ case 'download_import_issues': {
125
+ const result = await this.service.downloadImportIssues(scope, input.documentType, requiredString(input.batchId, 'batchId'));
126
+ data = { fileName: result.fileName, mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', base64: result.buffer.toString('base64') };
127
+ break;
128
+ }
129
+ case 'download_source_file': {
130
+ const buffer = await this.storage.read(requiredString(input.sourceFileId, 'sourceFileId'));
131
+ data = { fileName: requiredString(input.fileName, 'fileName'), mimeType: 'application/octet-stream', base64: buffer.toString('base64') };
132
+ break;
133
+ }
134
+ case 'save_edited_sales_file':
135
+ data = await this.salesFiles.saveEditedWorkbook(scope, requiredString(input.id, 'id'), Buffer.from(requiredString(input.base64, 'base64'), 'base64'));
136
+ break;
137
+ case 'search_hs_code':
138
+ data = await searchHsBianmaCodes({ keywords: requiredString(input.keywords, 'keywords'), page: numberValue(input.page, 1), filterFailureCode: true, displayChapter: false, displayEnName: true }, hsConfig());
139
+ break;
140
+ case 'get_hs_code_detail':
141
+ data = await getHsBianmaCodeDetail({ code: stringValue(input.code), detailUrl: stringValue(input.detailUrl) }, hsConfig());
142
+ break;
143
+ default: throw new DomainError(DomainErrorCodes.INVALID_INPUT, '不支持的操作', { actionKey });
144
+ }
145
+ return success(data);
146
+ }
147
+ catch (error) {
148
+ return failure(error);
149
+ }
150
+ }
151
+ async executeViewFileAction(context, viewKey, actionKey, request, file) {
152
+ if (viewKey !== VIEW_KEY)
153
+ return failure(new DomainError(DomainErrorCodes.INVALID_INPUT, '不支持的视图'));
154
+ const scope = scopeFromContext(context);
155
+ const input = record(request?.input);
156
+ try {
157
+ const fileName = fileNameOf(file, input);
158
+ const format = formatOf(fileName);
159
+ const size = Number(file?.size ?? 0);
160
+ if (!format)
161
+ throw new DomainError(DomainErrorCodes.UNSUPPORTED_FILE_FORMAT, '仅支持 PDF、Word、Excel 和常见图片格式');
162
+ if (size > 20 * 1024 * 1024)
163
+ throw new DomainError(DomainErrorCodes.FILE_TOO_LARGE, '文件不能超过 20 MB');
164
+ const buffer = bufferOf(file) ?? await bufferFromPath(input);
165
+ if (!buffer?.length)
166
+ throw new DomainError(DomainErrorCodes.INVALID_INPUT, '无法读取上传文件内容');
167
+ const documentType = documentTypeForAction(actionKey);
168
+ const storageFileId = await this.storage.save(buffer, fileName, 'uploads');
169
+ const task = await this.service.createImportTask(scope, { documentType, sourceFileId: storageFileId, sourceFileName: fileName, sourceFileFormat: format, status: 'EXTRACTING' });
170
+ let extracted = { text: '', chunks: [], kind: 'image', originalLength: 0 };
171
+ if (!['PNG', 'JPEG', 'WEBP'].includes(format))
172
+ extracted = await extractDocumentText({ buffer, fileName, mimeType: file?.mimetype ?? file?.type, maxChars: 100000 });
173
+ const parsingTask = await this.service.markImportTaskParsing(scope, task.id);
174
+ const command = buildAssistantCommand({ actionKey, file, input, task, extracted, catalogType: input.catalogType, replaceBatchId: input.replaceBatchId });
175
+ return { success: true, refresh: false, message: text('Parsing started', '文件已进入解析中,请勿重复操作'), data: { task: parsingTask, commands: [command], polling: { intervalMs: 2000, timeoutMs: 1200000 } } };
176
+ }
177
+ catch (error) {
178
+ return failure(error);
179
+ }
180
+ }
181
+ };
182
+ TradeComplianceWorkbenchViewProvider = __decorate([
183
+ Injectable(),
184
+ ViewExtensionProvider(VIEW_PROVIDER_KEY),
185
+ __metadata("design:paramtypes", [TradeComplianceWorkbenchService, SalesFileService, TradeComplianceFileStorage])
186
+ ], TradeComplianceWorkbenchViewProvider);
187
+ export { TradeComplianceWorkbenchViewProvider };
188
+ function actionManifests() {
189
+ const invoke = (key, label, icon = 'ri-edit-line') => ({ key, label: text(key, label), icon, actionType: 'invoke' });
190
+ const upload = (key, label) => ({ ...invoke(key, label, 'ri-upload-cloud-line'), transport: 'file', placement: 'toolbar' });
191
+ return [invoke('refresh', '刷新', 'ri-refresh-line'), upload('upload_controlled_catalog', '上传管控目录'), upload('upload_sanction_catalog', '上传制裁目录'), upload('upload_purchase_contract', '上传采购合同'), upload('upload_customer_contract', '上传客户合同'),
192
+ ...['save_controlled_goods', 'update_controlled_goods', 'save_sanctioned_company', 'update_sanctioned_company', 'save_purchase_review', 'save_customer_contract_review', 'update_supplier', 'update_purchase_order', 'add_purchase_line', 'update_purchase_line', 'update_customer', 'save_customer_profit_rate', 'save_derived_manual_data', 'get_customer_contract_review', 'update_customer_contract_review', 'delete_entity', 'save_settings', 'generate_sales_file', 'download_sales_file', 'download_import_issues', 'download_source_file', 'save_edited_sales_file', 'search_hs_code', 'get_hs_code_detail'].map(key => invoke(key, key))];
193
+ }
194
+ function buildAssistantCommand({ actionKey, file, input, task, extracted, catalogType, replaceBatchId }) {
195
+ const toolName = actionKey === 'upload_controlled_catalog' ? TOOL_NAMES.saveControlledCatalog : actionKey === 'upload_sanction_catalog' ? TOOL_NAMES.saveSanctionCatalog : actionKey === 'upload_purchase_contract' ? TOOL_NAMES.savePurchaseDraft : TOOL_NAMES.saveCustomerContractDraft;
196
+ const requirements = actionKey === 'upload_controlled_catalog' ? '完整提取管控商品名称、海关编码、管控说明、来源位置和来源原文。管控说明只能来自文件原文。' : actionKey === 'upload_sanction_catalog' ? '完整提取公司名称、国家或地区、制裁名单来源、原因、生效日期、备注、来源位置和来源原文。' : actionKey === 'upload_purchase_contract' ? '一份文件对应一个采购订单,完整提取供应商主档、采购订单和全部商品明细。' : '完整提取唯一客户、客户合同编码及合同金额、税率、价格、运输、质保、违约责任、付款条款七类内容,并用中文给出风险提示和修改建议。';
197
+ const source = extracted.chunks?.length ? extracted.chunks.map((chunk, index) => `\n--- 原文分块 ${index + 1}/${extracted.chunks.length} ---\n${chunk}`).join('') : '请直接读取附件内容。';
198
+ const fixed = JSON.stringify({ importTaskId: task.id, sourceFileId: task.sourceFileId, sourceFileName: task.sourceFileName, catalogType, replaceBatchId });
199
+ return { commandKey: 'assistant.chat.send_message', payload: { text: `请解析上传的外贸合规文件。${requirements}\n解析完成后必须调用工具 ${toolName} 保存结果,以下固定参数必须原样传入:${fixed}\n统一使用中文说明,不要遗漏文件中的记录。${source}`, clientMessageId: `trade-compliance:${task.id}`, files: [assistantFile(file, input, task.sourceFileName)], followUpMode: 'queue', state: { tradeComplianceWorkbench: { actionKey, importTaskId: task.id } } } };
200
+ }
201
+ function assistantFile(file, input, fileName) { const workspace = record(input.workspaceFile); return { id: input.fileAssetId ?? input.fileId ?? file?.fileAssetId ?? file?.fileId, fileId: input.fileAssetId ?? input.fileId ?? file?.fileAssetId ?? file?.fileId, fileAssetId: input.fileAssetId ?? input.fileId ?? file?.fileAssetId ?? file?.fileId, workspacePath: workspace.workspacePath ?? input.workspacePath, filePath: workspace.filePath ?? input.filePath, name: fileName, originalName: fileName, mimeType: file?.mimetype ?? file?.type, size: file?.size, role: 'source_file' }; }
202
+ function documentTypeForAction(action) { const map = { upload_controlled_catalog: 'CONTROLLED_CATALOG', upload_sanction_catalog: 'SANCTION_CATALOG', upload_purchase_contract: 'PURCHASE_CONTRACT', upload_customer_contract: 'CUSTOMER_CONTRACT' }; const value = map[action]; if (!value)
203
+ throw new DomainError(DomainErrorCodes.INVALID_INPUT, '不支持的上传操作', { action }); return value; }
204
+ function formatOf(fileName) { const extension = fileName.split('.').pop()?.toUpperCase(); const normalized = extension === 'JPG' ? 'JPEG' : extension; return SourceFileFormats.includes(normalized) ? normalized : null; }
205
+ function scopeFromContext(context) { if (!context.tenantId || !context.organizationId)
206
+ throw new DomainError(DomainErrorCodes.INVALID_INPUT, '请求上下文缺少租户或组织标识'); return { tenantId: context.tenantId, organizationId: context.organizationId, userId: context.userId }; }
207
+ function success(data) { return { success: true, message: text('Saved', '已保存'), data, refresh: true }; }
208
+ function failure(error) { const domain = error instanceof DomainError ? error : new DomainError(DomainErrorCodes.INVALID_INPUT, error instanceof Error ? error.message : String(error)); return { success: false, message: text(domain.message, domain.message), error: { code: domain.code, message: domain.message, details: domain.details }, refresh: false }; }
209
+ function record(value) { return value && typeof value === 'object' && !Array.isArray(value) ? value : {}; }
210
+ function requiredString(value, field) { const result = String(value ?? '').trim(); if (!result)
211
+ throw new DomainError(DomainErrorCodes.INVALID_INPUT, `缺少 ${field}`); return result; }
212
+ function stringValue(value) { const result = String(value ?? '').trim(); return result || undefined; }
213
+ function numberValue(value, fallback) { const result = Number(value); return Number.isFinite(result) ? result : fallback; }
214
+ function fileNameOf(file, input) { return String(file?.originalname ?? file?.name ?? input.fileName ?? 'uploaded-file'); }
215
+ function bufferOf(file) { const value = file?.buffer; if (Buffer.isBuffer(value))
216
+ return value; if (value instanceof ArrayBuffer)
217
+ return Buffer.from(value); if (ArrayBuffer.isView(value))
218
+ return Buffer.from(value.buffer, value.byteOffset, value.byteLength); return null; }
219
+ async function bufferFromPath(input) { const workspace = record(input.workspaceFile); const path = stringValue(workspace.workspacePath ?? workspace.filePath ?? input.workspacePath ?? input.filePath); return path ? readFile(path) : null; }
220
+ async function readPackageFile(packageName, filePath) { const root = dirname(requireFromHere.resolve(`${packageName}/package.json`)); return readFile(join(root, filePath), 'utf8'); }
221
+ function hsConfig() { return { baseUrl: process.env.TRADE_COMPLIANCE_HS_BASE_URL, timeoutMs: Number(process.env.TRADE_COMPLIANCE_HS_TIMEOUT_MS || 15000) }; }
222
+ //# sourceMappingURL=workbench-view.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workbench-view.provider.js","sourceRoot":"","sources":["../../src/lib/workbench-view.provider.ts"],"names":[],"mappings":"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"}