hunter-mate 0.1.7 → 0.1.8

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 (220) hide show
  1. package/dist/assets/extension/background/service-worker.js +727 -152
  2. package/dist/assets/extension/build-info.json +1 -0
  3. package/dist/assets/extension/content/index.js +22 -4
  4. package/dist/assets/extension/manifest.json +5 -4
  5. package/dist/assets/extension/offscreen/offscreen.html +8 -0
  6. package/dist/assets/extension/offscreen/offscreen.js +149 -0
  7. package/dist/assets/extension/package.json +8 -1
  8. package/dist/assets/extension/sidepanel/index.css +2 -0
  9. package/dist/assets/extension/sidepanel/index.html +7 -394
  10. package/dist/assets/extension/sidepanel/index.js +53 -923
  11. package/dist/assets/server/app.module.js +11 -1
  12. package/dist/assets/server/app.module.js.map +1 -1
  13. package/dist/assets/server/auth/auth.middleware.js +9 -1
  14. package/dist/assets/server/auth/auth.middleware.js.map +1 -1
  15. package/dist/assets/server/build-info.json +1 -1
  16. package/dist/assets/server/customer/customer.controller.d.ts +18 -0
  17. package/dist/assets/server/customer/customer.controller.js +81 -0
  18. package/dist/assets/server/customer/customer.controller.js.map +1 -0
  19. package/dist/assets/server/customer/customer.entity.d.ts +17 -0
  20. package/dist/assets/server/customer/customer.entity.js +82 -0
  21. package/dist/assets/server/customer/customer.entity.js.map +1 -0
  22. package/dist/assets/server/customer/customer.module.d.ts +2 -0
  23. package/dist/assets/server/customer/customer.module.js +28 -0
  24. package/dist/assets/server/customer/customer.module.js.map +1 -0
  25. package/dist/assets/server/customer/customer.service.d.ts +36 -0
  26. package/dist/assets/server/customer/customer.service.js +200 -0
  27. package/dist/assets/server/customer/customer.service.js.map +1 -0
  28. package/dist/assets/server/db/schema-validator.service.d.ts +2 -0
  29. package/dist/assets/server/db/schema-validator.service.js +32 -1
  30. package/dist/assets/server/db/schema-validator.service.js.map +1 -1
  31. package/dist/assets/server/db/sqlite.module.d.ts +1 -0
  32. package/dist/assets/server/db/sqlite.module.js +12 -2
  33. package/dist/assets/server/db/sqlite.module.js.map +1 -1
  34. package/dist/assets/server/devops/devops-sink-init.d.ts +1 -14
  35. package/dist/assets/server/devops/devops-sink-init.js +3 -8
  36. package/dist/assets/server/devops/devops-sink-init.js.map +1 -1
  37. package/dist/assets/server/extension/extension-control.controller.d.ts +12 -0
  38. package/dist/assets/server/extension/extension-control.controller.js +41 -1
  39. package/dist/assets/server/extension/extension-control.controller.js.map +1 -1
  40. package/dist/assets/server/extension/extension-control.service.d.ts +6 -1
  41. package/dist/assets/server/extension/extension-control.service.js +27 -1
  42. package/dist/assets/server/extension/extension-control.service.js.map +1 -1
  43. package/dist/assets/server/extraction/adapter.service.d.ts +3 -0
  44. package/dist/assets/server/extraction/adapter.service.js +127 -6
  45. package/dist/assets/server/extraction/adapter.service.js.map +1 -1
  46. package/dist/assets/server/extraction/anomaly-report.service.js +1 -1
  47. package/dist/assets/server/extraction/anomaly-report.service.js.map +1 -1
  48. package/dist/assets/server/extraction/entities/adapter-rule.entity.d.ts +2 -0
  49. package/dist/assets/server/extraction/entities/adapter-rule.entity.js +10 -0
  50. package/dist/assets/server/extraction/entities/adapter-rule.entity.js.map +1 -1
  51. package/dist/assets/server/extraction/extraction-entity.controller.d.ts +21 -3
  52. package/dist/assets/server/extraction/extraction-entity.controller.js +44 -9
  53. package/dist/assets/server/extraction/extraction-entity.controller.js.map +1 -1
  54. package/dist/assets/server/extraction/extraction.module.js +13 -3
  55. package/dist/assets/server/extraction/extraction.module.js.map +1 -1
  56. package/dist/assets/server/extraction/extraction.service.d.ts +4 -1
  57. package/dist/assets/server/extraction/extraction.service.js +59 -4
  58. package/dist/assets/server/extraction/extraction.service.js.map +1 -1
  59. package/dist/assets/server/extraction/harness-overlay.service.d.ts +41 -0
  60. package/dist/assets/server/extraction/harness-overlay.service.js +319 -0
  61. package/dist/assets/server/extraction/harness-overlay.service.js.map +1 -0
  62. package/dist/assets/server/extraction/liepin-extractor.d.ts +1 -0
  63. package/dist/assets/server/extraction/liepin-extractor.js +172 -0
  64. package/dist/assets/server/extraction/liepin-extractor.js.map +1 -0
  65. package/dist/assets/server/extraction/script-rule.js +4 -0
  66. package/dist/assets/server/extraction/script-rule.js.map +1 -1
  67. package/dist/assets/server/governance/action-audit.entity.d.ts +12 -0
  68. package/dist/assets/server/governance/action-audit.entity.js +66 -0
  69. package/dist/assets/server/governance/action-audit.entity.js.map +1 -0
  70. package/dist/assets/server/governance/governance.controller.d.ts +14 -0
  71. package/dist/assets/server/governance/governance.controller.js +77 -0
  72. package/dist/assets/server/governance/governance.controller.js.map +1 -0
  73. package/dist/assets/server/governance/governance.ingester.d.ts +20 -0
  74. package/dist/assets/server/governance/governance.ingester.js +114 -0
  75. package/dist/assets/server/governance/governance.ingester.js.map +1 -0
  76. package/dist/assets/server/governance/governance.module.d.ts +2 -0
  77. package/dist/assets/server/governance/governance.module.js +26 -0
  78. package/dist/assets/server/governance/governance.module.js.map +1 -0
  79. package/dist/assets/server/governance/governance.service.d.ts +114 -0
  80. package/dist/assets/server/governance/governance.service.js +356 -0
  81. package/dist/assets/server/governance/governance.service.js.map +1 -0
  82. package/dist/assets/server/jobcase/jobcase.controller.d.ts +1 -0
  83. package/dist/assets/server/jobcase/jobcase.entity.d.ts +1 -0
  84. package/dist/assets/server/jobcase/jobcase.entity.js +6 -0
  85. package/dist/assets/server/jobcase/jobcase.entity.js.map +1 -1
  86. package/dist/assets/server/jobcase/jobcase.service.d.ts +2 -0
  87. package/dist/assets/server/jobcase/jobcase.service.js +2 -1
  88. package/dist/assets/server/jobcase/jobcase.service.js.map +1 -1
  89. package/dist/assets/server/main.js +1 -0
  90. package/dist/assets/server/main.js.map +1 -1
  91. package/dist/assets/server/package.json +1 -1
  92. package/dist/assets/server/preference/preference.controller.d.ts +14 -0
  93. package/dist/assets/server/preference/preference.controller.js +66 -0
  94. package/dist/assets/server/preference/preference.controller.js.map +1 -0
  95. package/dist/assets/server/preference/preference.entity.d.ts +13 -0
  96. package/dist/assets/server/preference/preference.entity.js +77 -0
  97. package/dist/assets/server/preference/preference.entity.js.map +1 -0
  98. package/dist/assets/server/preference/preference.module.d.ts +2 -0
  99. package/dist/assets/server/preference/preference.module.js +26 -0
  100. package/dist/assets/server/preference/preference.module.js.map +1 -0
  101. package/dist/assets/server/preference/preference.service.d.ts +33 -0
  102. package/dist/assets/server/preference/preference.service.js +122 -0
  103. package/dist/assets/server/preference/preference.service.js.map +1 -0
  104. package/dist/assets/server/recording/recording-event-queue.service.js +1 -1
  105. package/dist/assets/server/recording/recording-event-queue.service.js.map +1 -1
  106. package/dist/assets/server/recording/recording-retention.service.d.ts +19 -2
  107. package/dist/assets/server/recording/recording-retention.service.js +95 -6
  108. package/dist/assets/server/recording/recording-retention.service.js.map +1 -1
  109. package/dist/assets/server/recording/recording-snapshot.service.d.ts +1 -0
  110. package/dist/assets/server/recording/recording-snapshot.service.js +4 -0
  111. package/dist/assets/server/recording/recording-snapshot.service.js.map +1 -1
  112. package/dist/assets/server/recording/recording.controller.d.ts +10 -0
  113. package/dist/assets/server/recording/recording.controller.js +19 -0
  114. package/dist/assets/server/recording/recording.controller.js.map +1 -1
  115. package/dist/assets/server/recording/recording.gateway.js +11 -0
  116. package/dist/assets/server/recording/recording.gateway.js.map +1 -1
  117. package/dist/assets/server/recording/recording.module.js +6 -1
  118. package/dist/assets/server/recording/recording.module.js.map +1 -1
  119. package/dist/assets/server/recording/recording.service.d.ts +5 -0
  120. package/dist/assets/server/recording/recording.service.js +10 -0
  121. package/dist/assets/server/recording/recording.service.js.map +1 -1
  122. package/dist/assets/server/remark/remark.controller.d.ts +1 -1
  123. package/dist/assets/server/remark/remark.controller.js +1 -10
  124. package/dist/assets/server/remark/remark.controller.js.map +1 -1
  125. package/dist/assets/server/remark/remark.entity.d.ts +1 -1
  126. package/dist/assets/server/remark/remark.entity.js.map +1 -1
  127. package/dist/assets/server/site/entities/site-registry.entity.d.ts +1 -1
  128. package/dist/assets/server/site/entities/site-registry.entity.js +1 -1
  129. package/dist/assets/server/site/entities/site-registry.entity.js.map +1 -1
  130. package/dist/assets/server/site/site.controller.d.ts +1 -1
  131. package/dist/assets/server/site/site.service.d.ts +5 -1
  132. package/dist/assets/server/site/site.service.js +13 -0
  133. package/dist/assets/server/site/site.service.js.map +1 -1
  134. package/dist/assets/server/system/system.controller.d.ts +1 -0
  135. package/dist/assets/server/system/system.controller.js +1 -1
  136. package/dist/assets/server/system/system.controller.js.map +1 -1
  137. package/dist/assets/server/system/system.service.d.ts +1 -0
  138. package/dist/assets/server/system/system.service.js +3 -2
  139. package/dist/assets/server/system/system.service.js.map +1 -1
  140. package/dist/cache/db.js +6 -6
  141. package/dist/commands/addons.js +2 -1
  142. package/dist/commands/cache.js +1 -1
  143. package/dist/commands/case.d.ts +67 -0
  144. package/dist/commands/case.js +101 -0
  145. package/dist/commands/config.d.ts +4 -0
  146. package/dist/commands/config.js +8 -1
  147. package/dist/commands/customer.d.ts +25 -0
  148. package/dist/commands/customer.js +137 -0
  149. package/dist/commands/doctor.js +33 -9
  150. package/dist/commands/extension.js +18 -15
  151. package/dist/commands/extras.d.ts +22 -3
  152. package/dist/commands/extras.js +114 -5
  153. package/dist/commands/init.d.ts +1 -1
  154. package/dist/commands/init.js +3 -4
  155. package/dist/commands/issue-env.d.ts +23 -0
  156. package/dist/commands/issue-env.js +101 -0
  157. package/dist/commands/job.d.ts +2 -1
  158. package/dist/commands/job.js +25 -5
  159. package/dist/commands/login.d.ts +4 -0
  160. package/dist/commands/login.js +30 -3
  161. package/dist/commands/migrate.d.ts +32 -0
  162. package/dist/commands/migrate.js +116 -0
  163. package/dist/commands/note.d.ts +3 -0
  164. package/dist/commands/note.js +75 -0
  165. package/dist/commands/ops.js +64 -13
  166. package/dist/commands/preference.d.ts +6 -0
  167. package/dist/commands/preference.js +80 -0
  168. package/dist/commands/record.js +1 -1
  169. package/dist/commands/report.js +1 -1
  170. package/dist/commands/search.js +1 -1
  171. package/dist/commands/server.d.ts +7 -0
  172. package/dist/commands/server.js +40 -2
  173. package/dist/commands/status.d.ts +4 -0
  174. package/dist/commands/status.js +16 -6
  175. package/dist/commands/update.js +7 -8
  176. package/dist/config.d.ts +21 -0
  177. package/dist/config.js +27 -0
  178. package/dist/i18n/locales/en-US.json +17 -1
  179. package/dist/i18n/locales/zh-CN.json +17 -1
  180. package/dist/index.js +14 -0
  181. package/dist/keychain.d.ts +16 -1
  182. package/dist/keychain.js +43 -16
  183. package/dist/logger.js +2 -2
  184. package/dist/updater.js +2 -2
  185. package/dist/utils/command-error.d.ts +4 -2
  186. package/dist/utils/command-error.js +19 -3
  187. package/dist/utils/link.d.ts +18 -0
  188. package/dist/utils/link.js +83 -0
  189. package/dist/version.js +33 -8
  190. package/dist/watchdog.js +3 -3
  191. package/dist/web/dist/404.html +1 -1
  192. package/dist/web/dist/_next/static/chunks/app/logs/page-d478031d49f7ba00.js +1 -0
  193. package/dist/web/dist/auth/verify.html +1 -1
  194. package/dist/web/dist/auth/verify.txt +1 -1
  195. package/dist/web/dist/companies.html +1 -1
  196. package/dist/web/dist/companies.txt +1 -1
  197. package/dist/web/dist/entity.html +1 -1
  198. package/dist/web/dist/entity.txt +1 -1
  199. package/dist/web/dist/index.html +1 -1
  200. package/dist/web/dist/index.txt +1 -1
  201. package/dist/web/dist/jobs.html +1 -1
  202. package/dist/web/dist/jobs.txt +1 -1
  203. package/dist/web/dist/logs.html +1 -1
  204. package/dist/web/dist/logs.txt +2 -2
  205. package/dist/web/dist/matching/jobs/placeholder/talents.html +1 -1
  206. package/dist/web/dist/matching/jobs/placeholder/talents.txt +1 -1
  207. package/dist/web/dist/matching/portraits/placeholder/jobs.html +1 -1
  208. package/dist/web/dist/matching/portraits/placeholder/jobs.txt +1 -1
  209. package/dist/web/dist/parselog.html +1 -1
  210. package/dist/web/dist/parselog.txt +1 -1
  211. package/dist/web/dist/recordings.html +1 -1
  212. package/dist/web/dist/recordings.txt +1 -1
  213. package/dist/web/dist/snapshots/placeholder/agent-prompt.html +1 -1
  214. package/dist/web/dist/snapshots/placeholder/agent-prompt.txt +1 -1
  215. package/dist/web/dist/talents.html +1 -1
  216. package/dist/web/dist/talents.txt +1 -1
  217. package/package.json +2 -2
  218. package/dist/web/dist/_next/static/chunks/app/logs/page-9f41d44fa1add723.js +0 -1
  219. /package/dist/web/dist/_next/static/{hqJ-7vr4X71DNfzZugHJ- → WdJr3NhHjlu5xN0qOap1k}/_buildManifest.js +0 -0
  220. /package/dist/web/dist/_next/static/{hqJ-7vr4X71DNfzZugHJ- → WdJr3NhHjlu5xN0qOap1k}/_ssgManifest.js +0 -0
@@ -0,0 +1,356 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var GovernanceService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.GovernanceService = exports.RISK_PROFILE_UNAVAILABLE = void 0;
17
+ exports.assertHardRules = assertHardRules;
18
+ exports.startOfHour = startOfHour;
19
+ exports.startOfDay = startOfDay;
20
+ exports.startOfWeek = startOfWeek;
21
+ exports.startOfMonth = startOfMonth;
22
+ const common_1 = require("@nestjs/common");
23
+ const typeorm_1 = require("@nestjs/typeorm");
24
+ const typeorm_2 = require("typeorm");
25
+ const fs = require("fs");
26
+ const path = require("path");
27
+ const action_audit_entity_1 = require("./action-audit.entity");
28
+ const harness_overlay_service_1 = require("../extraction/harness-overlay.service");
29
+ const ALL_WINDOWS = ['hour', 'day', 'week', 'month'];
30
+ const HARD_RULE_KEYS = [
31
+ 'forbid_api_interception',
32
+ 'forbid_cdp_navigation',
33
+ 'forbid_headless',
34
+ 'captcha_manual_only',
35
+ ];
36
+ exports.RISK_PROFILE_UNAVAILABLE = 'risk_profile_unavailable';
37
+ let GovernanceService = GovernanceService_1 = class GovernanceService {
38
+ auditRepo;
39
+ logger = new common_1.Logger(GovernanceService_1.name);
40
+ profileCache = new Map();
41
+ derivationCache = new Map();
42
+ constructor(auditRepo) {
43
+ this.auditRepo = auditRepo;
44
+ }
45
+ async record(dto) {
46
+ const entity = this.auditRepo.create({
47
+ site: dto.site,
48
+ accountType: dto.accountType,
49
+ actionType: dto.actionType,
50
+ sessionId: dto.sessionId,
51
+ tabId: dto.tabId ?? null,
52
+ detail: dto.detail === undefined ? null : JSON.stringify(dto.detail),
53
+ stopCode: dto.stopCode ?? null,
54
+ });
55
+ return this.auditRepo.save(entity);
56
+ }
57
+ async check(site, accountType, actionType, harnessPath) {
58
+ const profile = this.loadProfile(site, harnessPath);
59
+ if (!profile) {
60
+ return { allowed: false, reason: exports.RISK_PROFILE_UNAVAILABLE, usage: [] };
61
+ }
62
+ assertHardRules(profile, site);
63
+ const quotas = profile.account_quotas?.[accountType]?.[actionType];
64
+ const usage = await this.windowUsage(site, accountType, actionType, profile, quotas);
65
+ const exceeded = usage.filter((u) => u.limit != null && u.used > u.limit);
66
+ if (exceeded.length > 0) {
67
+ const now = new Date();
68
+ const next = exceeded
69
+ .map((u) => windowEnd(u.window, now))
70
+ .reduce((a, b) => (a > b ? a : b));
71
+ const worst = exceeded.reduce((a, b) => ((a.limit ?? 0) - a.used <= (b.limit ?? 0) - b.used ? a : b));
72
+ return {
73
+ allowed: false,
74
+ reason: `quota_exceeded:${worst.window}`,
75
+ nextAllowedAt: next.toISOString(),
76
+ usage,
77
+ advisory: await this.buildAdvisory(profile, site, accountType),
78
+ };
79
+ }
80
+ return { allowed: true, usage, advisory: await this.buildAdvisory(profile, site, accountType) };
81
+ }
82
+ async status(site, accountType, harnessPath) {
83
+ const profile = this.loadProfile(site, harnessPath);
84
+ const advisory = profile
85
+ ? await this.buildAdvisory(profile, site, accountType)
86
+ : emptyAdvisory();
87
+ if (!profile) {
88
+ return {
89
+ available: false,
90
+ reason: exports.RISK_PROFILE_UNAVAILABLE,
91
+ site,
92
+ accountType,
93
+ actions: [],
94
+ advisory,
95
+ };
96
+ }
97
+ const tierQuotas = profile.account_quotas?.[accountType] ?? {};
98
+ const actions = [];
99
+ for (const actionType of Object.keys(tierQuotas)) {
100
+ const usage = await this.windowUsage(site, accountType, actionType, profile, tierQuotas[actionType]);
101
+ actions.push({
102
+ actionType,
103
+ usage,
104
+ basis: {
105
+ source: tierQuotas[actionType]?.source,
106
+ confidence: tierQuotas[actionType]?.confidence,
107
+ },
108
+ });
109
+ }
110
+ return { available: true, site, accountType, actions, advisory };
111
+ }
112
+ async windowUsage(site, accountType, actionType, _profile, quota) {
113
+ const now = new Date();
114
+ const limits = {
115
+ hour: quota?.per_hour ?? null,
116
+ day: quota?.per_day ?? null,
117
+ week: quota?.per_week ?? null,
118
+ month: quota?.per_month ?? null,
119
+ };
120
+ const starts = {
121
+ hour: startOfHour(now),
122
+ day: startOfDay(now),
123
+ week: startOfWeek(now),
124
+ month: startOfMonth(now),
125
+ };
126
+ const usage = [];
127
+ for (const w of ALL_WINDOWS) {
128
+ const used = await this.countSince(site, accountType, actionType, starts[w]);
129
+ usage.push({ window: w, used, limit: limits[w] });
130
+ }
131
+ return usage;
132
+ }
133
+ countSince(site, accountType, actionType, since) {
134
+ return this.auditRepo.count({
135
+ where: {
136
+ site,
137
+ accountType,
138
+ actionType: actionType,
139
+ createdAt: (0, typeorm_2.Between)(since, new Date(864000000000000)),
140
+ },
141
+ });
142
+ }
143
+ async buildAdvisory(profile, site, accountType) {
144
+ const now = new Date();
145
+ const [workStart, workEnd] = profile.schedule?.work_hours_local ?? [0, 24];
146
+ const hour = now.getHours();
147
+ const offHours = hour < workStart || hour >= workEnd;
148
+ const marathonMinutes = await this.marathonMinutesSince(site, accountType, startOfDay(now), now);
149
+ const gapMs = this.sampleGap(profile, offHours, marathonMinutes);
150
+ return { offHours, marathonMinutes, gapMs };
151
+ }
152
+ async marathonMinutesSince(site, accountType, since, now) {
153
+ const first = await this.auditRepo
154
+ .createQueryBuilder('a')
155
+ .select('MIN(a.createdAt)', 'first')
156
+ .where('a.site = :site', { site })
157
+ .andWhere('a.accountType = :accountType', { accountType })
158
+ .andWhere('a.createdAt >= :since', { since })
159
+ .getRawOne();
160
+ if (!first?.first)
161
+ return 0;
162
+ const ms = now.getTime() - new Date(first.first).getTime();
163
+ return Math.max(0, Math.floor(ms / 60000));
164
+ }
165
+ sampleGap(profile, offHours, marathonMinutes = 0) {
166
+ const [min, max] = profile.pacing?.min_action_gap_ms ?? [0, 0];
167
+ let gap = min + Math.random() * Math.max(0, max - min);
168
+ if (offHours)
169
+ gap *= profile.schedule?.off_hours_multiplier ?? 1;
170
+ if (marathonMinutes >= (profile.schedule?.marathon_session_min ?? Number.POSITIVE_INFINITY)) {
171
+ gap *= 2;
172
+ }
173
+ return Math.round(gap);
174
+ }
175
+ resolveHarnessPath(harnessPath) {
176
+ const p = (harnessPath ?? process.env.HUNTER_MATE_HARNESS_PATH ?? '').trim();
177
+ if (p)
178
+ return path.resolve(p);
179
+ try {
180
+ const home = process.env.HUNTER_MATE_HOME || process.env.HOME || process.env.USERPROFILE || '.';
181
+ const cfgFile = path.join(home, '.hunter-mate', 'config.json');
182
+ if (fs.existsSync(cfgFile)) {
183
+ const cfg = JSON.parse(fs.readFileSync(cfgFile, 'utf-8'));
184
+ const fromCfg = String(cfg?.harnessPath ?? '').trim();
185
+ if (fromCfg)
186
+ return path.resolve(fromCfg);
187
+ }
188
+ }
189
+ catch {
190
+ }
191
+ return null;
192
+ }
193
+ loadProfile(site, harnessPath) {
194
+ const root = this.resolveHarnessPath(harnessPath);
195
+ if (!root)
196
+ return null;
197
+ const cacheKey = `${root}|${site}`;
198
+ const cached = this.profileCache.get(cacheKey);
199
+ if (cached)
200
+ return cached;
201
+ try {
202
+ const riskProfileRef = this.resolveRiskProfileRef(site, root);
203
+ if (!riskProfileRef)
204
+ return null;
205
+ const profileFile = path.join(root, 'adapters', riskProfileRef);
206
+ if (!fs.existsSync(profileFile))
207
+ return null;
208
+ const doc = (0, harness_overlay_service_1.parseYamlSubset)(fs.readFileSync(profileFile, 'utf-8'), riskProfileRef);
209
+ if (!doc || typeof doc !== 'object' || !doc.account_quotas || !doc.schedule || !doc.pacing || !doc.hard_rules) {
210
+ this.logger.warn(`risk profile 结构不完整(缺 account_quotas/schedule/pacing/hard_rules): ${profileFile}`);
211
+ return null;
212
+ }
213
+ const profile = normalizeProfile(doc);
214
+ this.profileCache.set(cacheKey, profile);
215
+ return profile;
216
+ }
217
+ catch (e) {
218
+ this.logger.warn(`risk profile 加载失败(site=${site}): ${e?.message || e}`);
219
+ return null;
220
+ }
221
+ }
222
+ loadActionDerivation(site, harnessPath) {
223
+ const root = this.resolveHarnessPath(harnessPath);
224
+ if (!root)
225
+ return null;
226
+ const cacheKey = `${root}|${site}`;
227
+ if (this.derivationCache.has(cacheKey))
228
+ return this.derivationCache.get(cacheKey) ?? null;
229
+ let result = null;
230
+ try {
231
+ const riskProfileRef = this.resolveRiskProfileRef(site, root);
232
+ if (riskProfileRef) {
233
+ const derivationFile = path.join(root, 'adapters', path.dirname(riskProfileRef), 'action-derivation.yaml');
234
+ if (fs.existsSync(derivationFile)) {
235
+ const doc = (0, harness_overlay_service_1.parseYamlSubset)(fs.readFileSync(derivationFile, 'utf-8'), 'action-derivation.yaml');
236
+ const rules = Array.isArray(doc?.url_actions) ? doc.url_actions : [];
237
+ const valid = rules
238
+ .filter((r) => r && typeof r.action === 'string' && typeof r.path_pattern === 'string')
239
+ .map((r) => ({ action: r.action, path_pattern: r.path_pattern }));
240
+ if (valid.length > 0)
241
+ result = valid;
242
+ }
243
+ }
244
+ }
245
+ catch (e) {
246
+ this.logger.warn(`action derivation 加载失败(site=${site}): ${e?.message || e}`);
247
+ }
248
+ this.derivationCache.set(cacheKey, result);
249
+ return result;
250
+ }
251
+ resolveRiskProfileRef(site, root) {
252
+ const adaptersDir = path.join(root, 'adapters');
253
+ const indexFile = path.join(adaptersDir, 'index.yaml');
254
+ if (!fs.existsSync(indexFile))
255
+ return null;
256
+ const index = (0, harness_overlay_service_1.parseYamlSubset)(fs.readFileSync(indexFile, 'utf-8'), 'index.yaml');
257
+ const triggers = Array.isArray(index?.triggers) ? index.triggers : [];
258
+ for (const t of triggers) {
259
+ if (!t?.hostPattern || !t?.riskProfile)
260
+ continue;
261
+ try {
262
+ if (new RegExp(t.hostPattern).test(site)) {
263
+ return String(t.riskProfile);
264
+ }
265
+ }
266
+ catch {
267
+ }
268
+ }
269
+ return null;
270
+ }
271
+ clearProfileCache() {
272
+ this.profileCache.clear();
273
+ this.derivationCache.clear();
274
+ }
275
+ };
276
+ exports.GovernanceService = GovernanceService;
277
+ exports.GovernanceService = GovernanceService = GovernanceService_1 = __decorate([
278
+ (0, common_1.Injectable)(),
279
+ __param(0, (0, typeorm_1.InjectRepository)(action_audit_entity_1.ActionAudit)),
280
+ __metadata("design:paramtypes", [typeorm_2.Repository])
281
+ ], GovernanceService);
282
+ function emptyAdvisory() {
283
+ return { offHours: false, marathonMinutes: 0, gapMs: 0 };
284
+ }
285
+ function assertHardRules(profile, site) {
286
+ const rules = profile.hard_rules;
287
+ const violated = HARD_RULE_KEYS.filter((k) => rules?.[k] !== true);
288
+ if (violated.length > 0) {
289
+ throw new Error(`risk_profile_hard_rules_violated(site=${site}): ${violated.join(',')} 必须为 true — 画像不可用,禁止执行动作`);
290
+ }
291
+ }
292
+ function coercePair(value, fallback) {
293
+ if (Array.isArray(value) && value.length >= 2) {
294
+ return [Number(value[0]), Number(value[1])];
295
+ }
296
+ if (typeof value === 'string') {
297
+ const m = value.match(/^\[\s*(-?\d+(?:\.\d+)?)\s*,\s*(-?\d+(?:\.\d+)?)\s*\]$/);
298
+ if (m)
299
+ return [Number(m[1]), Number(m[2])];
300
+ }
301
+ return fallback;
302
+ }
303
+ function normalizeProfile(raw) {
304
+ const schedule = raw.schedule ?? {};
305
+ const pacing = raw.pacing ?? {};
306
+ return {
307
+ ...raw,
308
+ schedule: {
309
+ ...schedule,
310
+ work_hours_local: coercePair(schedule.work_hours_local, [0, 24]),
311
+ off_hours_multiplier: Number(schedule.off_hours_multiplier ?? 1),
312
+ marathon_session_min: Number(schedule.marathon_session_min ?? 45),
313
+ advisory_escalation: Number(schedule.advisory_escalation ?? 3),
314
+ },
315
+ pacing: {
316
+ ...pacing,
317
+ min_action_gap_ms: coercePair(pacing.min_action_gap_ms, [0, 0]),
318
+ scroll_per_screen_ms: coercePair(pacing.scroll_per_screen_ms, [0, 0]),
319
+ page_turn_gap_ms: coercePair(pacing.page_turn_gap_ms, [0, 0]),
320
+ },
321
+ };
322
+ }
323
+ function startOfHour(d) {
324
+ return new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), 0, 0, 0);
325
+ }
326
+ function startOfDay(d) {
327
+ return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0, 0);
328
+ }
329
+ function startOfWeek(d) {
330
+ const day = (d.getDay() + 6) % 7;
331
+ const s = startOfDay(d);
332
+ s.setDate(s.getDate() - day);
333
+ return s;
334
+ }
335
+ function startOfMonth(d) {
336
+ return new Date(d.getFullYear(), d.getMonth(), 1, 0, 0, 0, 0);
337
+ }
338
+ function windowEnd(w, now) {
339
+ const s = {
340
+ hour: startOfHour(now),
341
+ day: startOfDay(now),
342
+ week: startOfWeek(now),
343
+ month: startOfMonth(now),
344
+ }[w];
345
+ const end = new Date(s);
346
+ if (w === 'hour')
347
+ end.setHours(end.getHours() + 1);
348
+ else if (w === 'day')
349
+ end.setDate(end.getDate() + 1);
350
+ else if (w === 'week')
351
+ end.setDate(end.getDate() + 7);
352
+ else
353
+ end.setMonth(end.getMonth() + 1);
354
+ return end;
355
+ }
356
+ //# sourceMappingURL=governance.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance.service.js","sourceRoot":"","sources":["../../src/governance/governance.service.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export declare class JobcaseController {
6
6
  id: number;
7
7
  externalId: string;
8
8
  status: import("./jobcase.entity").JobCaseStatus;
9
+ customerId: number | undefined;
9
10
  }>;
10
11
  findAll(req: any): Promise<import("./jobcase.entity").JobCase[]>;
11
12
  findOne(id: string): Promise<import("./jobcase.entity").JobCase>;
@@ -7,6 +7,7 @@ export declare class JobCase {
7
7
  rawFiles?: Record<string, string>;
8
8
  requirements?: Record<string, any>;
9
9
  status: JobCaseStatus;
10
+ customerId?: number;
10
11
  ownerId?: number;
11
12
  createdAt: Date;
12
13
  updatedAt: Date;
@@ -19,6 +19,7 @@ let JobCase = class JobCase {
19
19
  rawFiles;
20
20
  requirements;
21
21
  status;
22
+ customerId;
22
23
  ownerId;
23
24
  createdAt;
24
25
  updatedAt;
@@ -53,6 +54,11 @@ __decorate([
53
54
  (0, typeorm_1.Column)({ type: 'simple-enum', enum: ['draft', 'active', 'archived'], default: 'draft' }),
54
55
  __metadata("design:type", String)
55
56
  ], JobCase.prototype, "status", void 0);
57
+ __decorate([
58
+ (0, typeorm_1.Index)(),
59
+ (0, typeorm_1.Column)({ type: 'int', nullable: true }),
60
+ __metadata("design:type", Number)
61
+ ], JobCase.prototype, "customerId", void 0);
56
62
  __decorate([
57
63
  (0, typeorm_1.Column)({ type: 'int', nullable: true }),
58
64
  __metadata("design:type", Number)
@@ -1 +1 @@
1
- {"version":3,"file":"jobcase.entity.js","sourceRoot":"","sources":["../../src/jobcase/jobcase.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAOiB;AAKV,IAAM,OAAO,GAAb,MAAM,OAAO;IAElB,EAAE,CAAS;IAGX,KAAK,CAAU;IAIf,UAAU,CAAS;IAGnB,UAAU,CAAU;IAGpB,QAAQ,CAA0B;IAGlC,YAAY,CAAuB;IAGnC,MAAM,CAAgB;IAGtB,OAAO,CAAU;IAGjB,SAAS,CAAO;IAGhB,SAAS,CAAO;CACjB,CAAA;AA/BY,0BAAO;AAElB;IADC,IAAA,gCAAsB,GAAE;;mCACd;AAGX;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sCAC1C;AAIf;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;2CACrB;AAGnB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACrC;AAGpB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yCACd;AAGlC;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACb;AAGnC;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;;uCACnE;AAGtB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;wCACvB;AAGjB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;0CAAC;AAGhB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;0CAAC;kBA9BL,OAAO;IADnB,IAAA,gBAAM,EAAC,WAAW,CAAC;GACP,OAAO,CA+BnB"}
1
+ {"version":3,"file":"jobcase.entity.js","sourceRoot":"","sources":["../../src/jobcase/jobcase.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAOiB;AAKV,IAAM,OAAO,GAAb,MAAM,OAAO;IAElB,EAAE,CAAS;IAGX,KAAK,CAAU;IAIf,UAAU,CAAS;IAGnB,UAAU,CAAU;IAGpB,QAAQ,CAA0B;IAGlC,YAAY,CAAuB;IAGnC,MAAM,CAAgB;IAKtB,UAAU,CAAU;IAGpB,OAAO,CAAU;IAGjB,SAAS,CAAO;IAGhB,SAAS,CAAO;CACjB,CAAA;AApCY,0BAAO;AAElB;IADC,IAAA,gCAAsB,GAAE;;mCACd;AAGX;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sCAC1C;AAIf;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;2CACrB;AAGnB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACrC;AAGpB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yCACd;AAGlC;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACb;AAGnC;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;;uCACnE;AAKtB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACpB;AAGpB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;wCACvB;AAGjB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;0CAAC;AAGhB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;0CAAC;kBAnCL,OAAO;IADnB,IAAA,gBAAM,EAAC,WAAW,CAAC;GACP,OAAO,CAoCnB"}
@@ -6,6 +6,7 @@ export interface CreateJobCaseDto {
6
6
  folderPath?: string;
7
7
  rawFiles?: Record<string, string>;
8
8
  requirements?: Record<string, any>;
9
+ customerId?: number;
9
10
  ownerId?: number;
10
11
  }
11
12
  export declare class JobcaseService {
@@ -15,6 +16,7 @@ export declare class JobcaseService {
15
16
  id: number;
16
17
  externalId: string;
17
18
  status: import("./jobcase.entity").JobCaseStatus;
19
+ customerId: number | undefined;
18
20
  }>;
19
21
  findAll(ownerId?: number): Promise<JobCase[]>;
20
22
  findOne(id: number): Promise<JobCase>;
@@ -29,11 +29,12 @@ let JobcaseService = class JobcaseService {
29
29
  folderPath: dto.folderPath,
30
30
  rawFiles: dto.rawFiles,
31
31
  requirements: dto.requirements,
32
+ customerId: dto.customerId,
32
33
  ownerId: dto.ownerId,
33
34
  status: 'draft',
34
35
  });
35
36
  const saved = await this.repo.save(entity);
36
- return { id: saved.id, externalId: saved.externalId, status: saved.status };
37
+ return { id: saved.id, externalId: saved.externalId, status: saved.status, customerId: saved.customerId };
37
38
  }
38
39
  async findAll(ownerId) {
39
40
  const where = ownerId ? { ownerId } : {};
@@ -1 +1 @@
1
- {"version":3,"file":"jobcase.service.js","sourceRoot":"","sources":["../../src/jobcase/jobcase.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA+D;AAC/D,6CAAmD;AACnD,qCAAqC;AACrC,qDAA2C;AAYpC,IAAM,cAAc,GAApB,MAAM,cAAc;IAGN;IAFnB,YAEmB,IAAyB;QAAzB,SAAI,GAAJ,IAAI,CAAqB;IACzC,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,GAAqB;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC9B,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAgB;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,0BAAiB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAA;AAhCY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,wBAAO,CAAC,CAAA;qCACH,oBAAU;GAHxB,cAAc,CAgC1B"}
1
+ {"version":3,"file":"jobcase.service.js","sourceRoot":"","sources":["../../src/jobcase/jobcase.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA+D;AAC/D,6CAAmD;AACnD,qCAAqC;AACrC,qDAA2C;AAapC,IAAM,cAAc,GAApB,MAAM,cAAc;IAGN;IAFnB,YAEmB,IAAyB;QAAzB,SAAI,GAAJ,IAAI,CAAqB;IACzC,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,GAAqB;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC9B,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;IAC5G,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAgB;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,0BAAiB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAA;AAjCY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,wBAAO,CAAC,CAAA;qCACH,oBAAU;GAHxB,cAAc,CAiC1B"}
@@ -17,6 +17,7 @@ process.on('unhandledRejection', (reason) => {
17
17
  });
18
18
  async function bootstrap() {
19
19
  const app = await core_1.NestFactory.create(app_module_1.AppModule);
20
+ app.useBodyParser('json', { limit: '32mb' });
20
21
  app.useWebSocketAdapter(new platform_ws_1.WsAdapter(app));
21
22
  app.useGlobalPipes(new common_1.ValidationPipe({ whitelist: true, transform: true }));
22
23
  app.enableCors({ origin: '*' });
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;AAAA,yBAAuB;AACvB,uCAA2C;AAC3C,2CAAgD;AAChD,qDAAgD;AAChD,6CAAyC;AAEzC,qCAAsC;AAEtC,IAAA,mBAAU,GAAE,CAAC;AAIb,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;IACtC,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,CAAC,CAAC;IAChD,GAAG,CAAC,mBAAmB,CAAC,IAAI,uBAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,GAAG,CAAC,cAAc,CAAC,IAAI,uBAAc,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7E,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,GAAG,CAAC,mBAAmB,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC;IAGvC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC;IAC7C,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,uCAAuC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;AACrE,CAAC;AACD,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;AAAA,yBAAuB;AACvB,uCAA2C;AAC3C,2CAAgD;AAChD,qDAAgD;AAEhD,6CAAyC;AAEzC,qCAAsC;AAEtC,IAAA,mBAAU,GAAE,CAAC;AAIb,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;IACtC,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAyB,sBAAS,CAAC,CAAC;IAGxE,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7C,GAAG,CAAC,mBAAmB,CAAC,IAAI,uBAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,GAAG,CAAC,cAAc,CAAC,IAAI,uBAAc,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7E,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,GAAG,CAAC,mBAAmB,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC;IAGvC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC;IAC7C,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,uCAAuC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;AACrE,CAAC;AACD,SAAS,EAAE,CAAC"}
@@ -11,7 +11,7 @@
11
11
  "typecheck": "tsc --noEmit"
12
12
  },
13
13
  "dependencies": {
14
- "@chromepilot/kit": "^0.1.1",
14
+ "@chromepilot/kit": "^0.1.3",
15
15
  "@chromepilot/logger-kit": "^0.1.4",
16
16
  "@hunter-mate/shared": "0.1.5",
17
17
  "@nestjs/axios": "^3.1.3",
@@ -0,0 +1,14 @@
1
+ import { PreferenceService, PutPreferencesDto, PreferenceScope } from './preference.service';
2
+ export declare class PreferenceController {
3
+ private readonly service;
4
+ constructor(service: PreferenceService);
5
+ put(dto: PutPreferencesDto, req: any): Promise<import("./preference.entity").Preference[]>;
6
+ getMerged(req: any, scope?: PreferenceScope, scopeId?: string, customerId?: string): Promise<{
7
+ case: import("./preference.entity").Preference[];
8
+ customer: import("./preference.entity").Preference[];
9
+ user: import("./preference.entity").Preference[];
10
+ }>;
11
+ remove(id: string): Promise<{
12
+ deleted: number;
13
+ }>;
14
+ }
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.PreferenceController = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const preference_service_1 = require("./preference.service");
18
+ let PreferenceController = class PreferenceController {
19
+ service;
20
+ constructor(service) {
21
+ this.service = service;
22
+ }
23
+ put(dto, req) {
24
+ return this.service.put({ ...dto, userId: req.user?.userId ?? dto.userId });
25
+ }
26
+ getMerged(req, scope, scopeId, customerId) {
27
+ return this.service.getMerged(scope, Number(scopeId), {
28
+ customerId: customerId ? parseInt(customerId, 10) : undefined,
29
+ userId: req?.user?.userId,
30
+ });
31
+ }
32
+ remove(id) {
33
+ return this.service.remove(parseInt(id, 10));
34
+ }
35
+ };
36
+ exports.PreferenceController = PreferenceController;
37
+ __decorate([
38
+ (0, common_1.Put)(),
39
+ __param(0, (0, common_1.Body)()),
40
+ __param(1, (0, common_1.Request)()),
41
+ __metadata("design:type", Function),
42
+ __metadata("design:paramtypes", [Object, Object]),
43
+ __metadata("design:returntype", void 0)
44
+ ], PreferenceController.prototype, "put", null);
45
+ __decorate([
46
+ (0, common_1.Get)(),
47
+ __param(0, (0, common_1.Request)()),
48
+ __param(1, (0, common_1.Query)('scope')),
49
+ __param(2, (0, common_1.Query)('scopeId')),
50
+ __param(3, (0, common_1.Query)('customerId')),
51
+ __metadata("design:type", Function),
52
+ __metadata("design:paramtypes", [Object, String, String, String]),
53
+ __metadata("design:returntype", void 0)
54
+ ], PreferenceController.prototype, "getMerged", null);
55
+ __decorate([
56
+ (0, common_1.Delete)(':id'),
57
+ __param(0, (0, common_1.Param)('id')),
58
+ __metadata("design:type", Function),
59
+ __metadata("design:paramtypes", [String]),
60
+ __metadata("design:returntype", void 0)
61
+ ], PreferenceController.prototype, "remove", null);
62
+ exports.PreferenceController = PreferenceController = __decorate([
63
+ (0, common_1.Controller)('preferences'),
64
+ __metadata("design:paramtypes", [preference_service_1.PreferenceService])
65
+ ], PreferenceController);
66
+ //# sourceMappingURL=preference.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preference.controller.js","sourceRoot":"","sources":["../../src/preference/preference.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA2F;AAC3F,6DAA6F;AAGtF,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IACF;IAA7B,YAA6B,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;IAAG,CAAC;IAI3D,GAAG,CAAS,GAAsB,EAAa,GAAQ;QACrD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9E,CAAC;IAID,SAAS,CACI,GAAQ,EACH,KAAuB,EACrB,OAAgB,EACb,UAAmB;QAExC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;YACpD,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YAC7D,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM;SAC1B,CAAC,CAAC;IACL,CAAC;IAGD,MAAM,CAAc,EAAU;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;CACF,CAAA;AA3BY,oDAAoB;AAK/B;IADC,IAAA,YAAG,GAAE;IACD,WAAA,IAAA,aAAI,GAAE,CAAA;IAA0B,WAAA,IAAA,gBAAO,GAAE,CAAA;;;;+CAE7C;AAID;IADC,IAAA,YAAG,GAAE;IAEH,WAAA,IAAA,gBAAO,GAAE,CAAA;IACT,WAAA,IAAA,cAAK,EAAC,OAAO,CAAC,CAAA;IACd,WAAA,IAAA,cAAK,EAAC,SAAS,CAAC,CAAA;IAChB,WAAA,IAAA,cAAK,EAAC,YAAY,CAAC,CAAA;;;;qDAMrB;AAGD;IADC,IAAA,eAAM,EAAC,KAAK,CAAC;IACN,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;kDAElB;+BA1BU,oBAAoB;IADhC,IAAA,mBAAU,EAAC,aAAa,CAAC;qCAEc,sCAAiB;GAD5C,oBAAoB,CA2BhC"}
@@ -0,0 +1,13 @@
1
+ export declare class Preference {
2
+ id: number;
3
+ scope: 'user' | 'customer' | 'case';
4
+ scopeId: number;
5
+ userId?: number;
6
+ dimension: string;
7
+ value: any;
8
+ valueKey: string;
9
+ weight: number;
10
+ evidence?: string;
11
+ createdAt: Date;
12
+ updatedAt: Date;
13
+ }