@hs-x/cli 0.2.7 → 0.3.6

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 (285) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +25 -8
  3. package/dist/audit-interactive.d.ts +29 -0
  4. package/dist/audit-interactive.d.ts.map +1 -0
  5. package/dist/audit-interactive.js +156 -0
  6. package/dist/audit-interactive.js.map +1 -0
  7. package/dist/bin/hs-x.js.map +1 -1
  8. package/dist/checkpoint-interactive.d.ts +24 -0
  9. package/dist/checkpoint-interactive.d.ts.map +1 -0
  10. package/dist/checkpoint-interactive.js +65 -0
  11. package/dist/checkpoint-interactive.js.map +1 -0
  12. package/dist/cli/index.d.ts.map +1 -1
  13. package/dist/cli/index.js +266 -39
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/kit.d.ts +1 -1
  16. package/dist/cli/kit.d.ts.map +1 -1
  17. package/dist/cli/kit.js +19 -3
  18. package/dist/cli/kit.js.map +1 -1
  19. package/dist/cloudflare-auth.d.ts +8 -0
  20. package/dist/cloudflare-auth.d.ts.map +1 -1
  21. package/dist/cloudflare-auth.js +12 -2
  22. package/dist/cloudflare-auth.js.map +1 -1
  23. package/dist/cloudflare-oauth-store.d.ts +9 -1
  24. package/dist/cloudflare-oauth-store.d.ts.map +1 -1
  25. package/dist/cloudflare-oauth-store.js +23 -4
  26. package/dist/cloudflare-oauth-store.js.map +1 -1
  27. package/dist/cloudflare-oauth.d.ts +1 -0
  28. package/dist/cloudflare-oauth.d.ts.map +1 -1
  29. package/dist/cloudflare-oauth.js +6 -2
  30. package/dist/cloudflare-oauth.js.map +1 -1
  31. package/dist/commands/account.d.ts +28 -13
  32. package/dist/commands/account.d.ts.map +1 -1
  33. package/dist/commands/account.js +219 -69
  34. package/dist/commands/account.js.map +1 -1
  35. package/dist/commands/api.d.ts.map +1 -1
  36. package/dist/commands/api.js +7 -11
  37. package/dist/commands/api.js.map +1 -1
  38. package/dist/commands/completion.d.ts.map +1 -1
  39. package/dist/commands/completion.js +13 -7
  40. package/dist/commands/completion.js.map +1 -1
  41. package/dist/commands/connect.d.ts.map +1 -1
  42. package/dist/commands/connect.js +239 -125
  43. package/dist/commands/connect.js.map +1 -1
  44. package/dist/commands/control-plane-read.d.ts +71 -10
  45. package/dist/commands/control-plane-read.d.ts.map +1 -1
  46. package/dist/commands/control-plane-read.js +1035 -58
  47. package/dist/commands/control-plane-read.js.map +1 -1
  48. package/dist/commands/deploy-promote.d.ts +25 -3
  49. package/dist/commands/deploy-promote.d.ts.map +1 -1
  50. package/dist/commands/deploy-promote.js +314 -38
  51. package/dist/commands/deploy-promote.js.map +1 -1
  52. package/dist/commands/deploy.d.ts +69 -4
  53. package/dist/commands/deploy.d.ts.map +1 -1
  54. package/dist/commands/deploy.js +1512 -276
  55. package/dist/commands/deploy.js.map +1 -1
  56. package/dist/commands/dev.d.ts +5 -1
  57. package/dist/commands/dev.d.ts.map +1 -1
  58. package/dist/commands/dev.js +502 -107
  59. package/dist/commands/dev.js.map +1 -1
  60. package/dist/commands/doctor.d.ts +14 -0
  61. package/dist/commands/doctor.d.ts.map +1 -1
  62. package/dist/commands/doctor.js +131 -20
  63. package/dist/commands/doctor.js.map +1 -1
  64. package/dist/commands/flags.d.ts +108 -6
  65. package/dist/commands/flags.d.ts.map +1 -1
  66. package/dist/commands/flags.js +996 -75
  67. package/dist/commands/flags.js.map +1 -1
  68. package/dist/commands/help-command.d.ts +14 -0
  69. package/dist/commands/help-command.d.ts.map +1 -1
  70. package/dist/commands/help-command.js +144 -44
  71. package/dist/commands/help-command.js.map +1 -1
  72. package/dist/commands/history.js +14 -10
  73. package/dist/commands/history.js.map +1 -1
  74. package/dist/commands/init.d.ts +4 -2
  75. package/dist/commands/init.d.ts.map +1 -1
  76. package/dist/commands/init.js +98 -17
  77. package/dist/commands/init.js.map +1 -1
  78. package/dist/commands/link.d.ts +2 -3
  79. package/dist/commands/link.d.ts.map +1 -1
  80. package/dist/commands/link.js +201 -101
  81. package/dist/commands/link.js.map +1 -1
  82. package/dist/commands/login.d.ts.map +1 -1
  83. package/dist/commands/login.js +22 -5
  84. package/dist/commands/login.js.map +1 -1
  85. package/dist/commands/migrate.d.ts +37 -17
  86. package/dist/commands/migrate.d.ts.map +1 -1
  87. package/dist/commands/migrate.js +500 -73
  88. package/dist/commands/migrate.js.map +1 -1
  89. package/dist/commands/rollback.d.ts +42 -2
  90. package/dist/commands/rollback.d.ts.map +1 -1
  91. package/dist/commands/rollback.js +422 -58
  92. package/dist/commands/rollback.js.map +1 -1
  93. package/dist/commands/secrets.d.ts +76 -3
  94. package/dist/commands/secrets.d.ts.map +1 -1
  95. package/dist/commands/secrets.js +328 -41
  96. package/dist/commands/secrets.js.map +1 -1
  97. package/dist/commands/status.d.ts +13 -2
  98. package/dist/commands/status.d.ts.map +1 -1
  99. package/dist/commands/status.js +154 -17
  100. package/dist/commands/status.js.map +1 -1
  101. package/dist/commands/unlink.d.ts +2 -2
  102. package/dist/commands/unlink.d.ts.map +1 -1
  103. package/dist/commands/unlink.js +2 -2
  104. package/dist/commands/unlink.js.map +1 -1
  105. package/dist/commands/update.d.ts.map +1 -1
  106. package/dist/commands/update.js +4 -3
  107. package/dist/commands/update.js.map +1 -1
  108. package/dist/commands/validate.d.ts +12 -3
  109. package/dist/commands/validate.d.ts.map +1 -1
  110. package/dist/commands/validate.js +70 -8
  111. package/dist/commands/validate.js.map +1 -1
  112. package/dist/constants.d.ts +1 -1
  113. package/dist/constants.js +1 -1
  114. package/dist/control-plane-fetch.d.ts.map +1 -1
  115. package/dist/control-plane-fetch.js +5 -4
  116. package/dist/control-plane-fetch.js.map +1 -1
  117. package/dist/deploy-revision-capture.d.ts +48 -0
  118. package/dist/deploy-revision-capture.d.ts.map +1 -0
  119. package/dist/deploy-revision-capture.js +125 -0
  120. package/dist/deploy-revision-capture.js.map +1 -0
  121. package/dist/dev/event-bus.d.ts +5 -2
  122. package/dist/dev/event-bus.d.ts.map +1 -1
  123. package/dist/dev/event-bus.js +4 -1
  124. package/dist/dev/event-bus.js.map +1 -1
  125. package/dist/dev/hubspot-logs-poller.d.ts +35 -0
  126. package/dist/dev/hubspot-logs-poller.d.ts.map +1 -0
  127. package/dist/dev/hubspot-logs-poller.js +94 -0
  128. package/dist/dev/hubspot-logs-poller.js.map +1 -0
  129. package/dist/dev/invoke.d.ts +9 -1
  130. package/dist/dev/invoke.d.ts.map +1 -1
  131. package/dist/dev/invoke.js +69 -20
  132. package/dist/dev/invoke.js.map +1 -1
  133. package/dist/dev/keyboard.d.ts +31 -0
  134. package/dist/dev/keyboard.d.ts.map +1 -0
  135. package/dist/dev/keyboard.js +143 -0
  136. package/dist/dev/keyboard.js.map +1 -0
  137. package/dist/dev/log-server.d.ts +7 -0
  138. package/dist/dev/log-server.d.ts.map +1 -1
  139. package/dist/dev/log-server.js +68 -31
  140. package/dist/dev/log-server.js.map +1 -1
  141. package/dist/dev/migrated-card.d.ts +17 -0
  142. package/dist/dev/migrated-card.d.ts.map +1 -0
  143. package/dist/dev/migrated-card.js +114 -0
  144. package/dist/dev/migrated-card.js.map +1 -0
  145. package/dist/dev/stream-filter.d.ts +40 -0
  146. package/dist/dev/stream-filter.d.ts.map +1 -0
  147. package/dist/dev/stream-filter.js +93 -0
  148. package/dist/dev/stream-filter.js.map +1 -0
  149. package/dist/dev/stream-renderer.d.ts +34 -0
  150. package/dist/dev/stream-renderer.d.ts.map +1 -1
  151. package/dist/dev/stream-renderer.js +222 -8
  152. package/dist/dev/stream-renderer.js.map +1 -1
  153. package/dist/errors-registry.d.ts.map +1 -1
  154. package/dist/errors-registry.js +280 -36
  155. package/dist/errors-registry.js.map +1 -1
  156. package/dist/errors.d.ts.map +1 -1
  157. package/dist/errors.js.map +1 -1
  158. package/dist/help.d.ts.map +1 -1
  159. package/dist/help.js +8 -0
  160. package/dist/help.js.map +1 -1
  161. package/dist/hubspot-app-logs.d.ts +76 -0
  162. package/dist/hubspot-app-logs.d.ts.map +1 -0
  163. package/dist/hubspot-app-logs.js +323 -0
  164. package/dist/hubspot-app-logs.js.map +1 -0
  165. package/dist/hubspot-auth.d.ts +8 -2
  166. package/dist/hubspot-auth.d.ts.map +1 -1
  167. package/dist/hubspot-auth.js +9 -9
  168. package/dist/hubspot-auth.js.map +1 -1
  169. package/dist/hubspot-developer-client.js +119 -11
  170. package/dist/hubspot-developer-client.js.map +1 -1
  171. package/dist/index.d.ts +1 -0
  172. package/dist/index.d.ts.map +1 -1
  173. package/dist/index.js +1 -0
  174. package/dist/index.js.map +1 -1
  175. package/dist/init/templates.d.ts +11 -1
  176. package/dist/init/templates.d.ts.map +1 -1
  177. package/dist/init/templates.js +228 -15
  178. package/dist/init/templates.js.map +1 -1
  179. package/dist/link-migration-journal.d.ts +131 -0
  180. package/dist/link-migration-journal.d.ts.map +1 -0
  181. package/dist/link-migration-journal.js +395 -0
  182. package/dist/link-migration-journal.js.map +1 -0
  183. package/dist/link-preflight.d.ts +78 -0
  184. package/dist/link-preflight.d.ts.map +1 -0
  185. package/dist/link-preflight.js +231 -0
  186. package/dist/link-preflight.js.map +1 -0
  187. package/dist/local-project-picker.d.ts +34 -0
  188. package/dist/local-project-picker.d.ts.map +1 -0
  189. package/dist/local-project-picker.js +121 -0
  190. package/dist/local-project-picker.js.map +1 -0
  191. package/dist/logs-interactive.d.ts +37 -0
  192. package/dist/logs-interactive.d.ts.map +1 -0
  193. package/dist/logs-interactive.js +110 -0
  194. package/dist/logs-interactive.js.map +1 -0
  195. package/dist/output-context.d.ts +13 -0
  196. package/dist/output-context.d.ts.map +1 -0
  197. package/dist/output-context.js +46 -0
  198. package/dist/output-context.js.map +1 -0
  199. package/dist/project-context.d.ts +55 -0
  200. package/dist/project-context.d.ts.map +1 -0
  201. package/dist/project-context.js +115 -0
  202. package/dist/project-context.js.map +1 -0
  203. package/dist/project-picker.d.ts +65 -0
  204. package/dist/project-picker.d.ts.map +1 -0
  205. package/dist/project-picker.js +227 -0
  206. package/dist/project-picker.js.map +1 -0
  207. package/dist/prompt.d.ts +8 -0
  208. package/dist/prompt.d.ts.map +1 -1
  209. package/dist/prompt.js +81 -13
  210. package/dist/prompt.js.map +1 -1
  211. package/dist/reporter/human.d.ts +10 -2
  212. package/dist/reporter/human.d.ts.map +1 -1
  213. package/dist/reporter/human.js +82 -14
  214. package/dist/reporter/human.js.map +1 -1
  215. package/dist/reporter/index.d.ts.map +1 -1
  216. package/dist/reporter/index.js +7 -5
  217. package/dist/reporter/index.js.map +1 -1
  218. package/dist/reporter/json.d.ts +2 -1
  219. package/dist/reporter/json.d.ts.map +1 -1
  220. package/dist/reporter/json.js +10 -7
  221. package/dist/reporter/json.js.map +1 -1
  222. package/dist/reporter/style.d.ts +19 -0
  223. package/dist/reporter/style.d.ts.map +1 -1
  224. package/dist/reporter/style.js +126 -6
  225. package/dist/reporter/style.js.map +1 -1
  226. package/dist/reporter/types.d.ts +34 -4
  227. package/dist/reporter/types.d.ts.map +1 -1
  228. package/dist/reporter/types.js.map +1 -1
  229. package/dist/services/account-store.d.ts +3 -1
  230. package/dist/services/account-store.d.ts.map +1 -1
  231. package/dist/services/account-store.js +2 -1
  232. package/dist/services/account-store.js.map +1 -1
  233. package/dist/services/app-paths.d.ts.map +1 -1
  234. package/dist/services/app-paths.js +3 -1
  235. package/dist/services/app-paths.js.map +1 -1
  236. package/dist/services/cloudflare-auth.d.ts +1 -1
  237. package/dist/services/cloudflare-auth.d.ts.map +1 -1
  238. package/dist/services/cloudflare-auth.js +2 -2
  239. package/dist/services/cloudflare-auth.js.map +1 -1
  240. package/dist/services/cloudflare-kv.d.ts.map +1 -1
  241. package/dist/services/cloudflare-kv.js.map +1 -1
  242. package/dist/services/command-history.d.ts.map +1 -1
  243. package/dist/services/command-history.js.map +1 -1
  244. package/dist/services/config.d.ts.map +1 -1
  245. package/dist/services/config.js +1 -1
  246. package/dist/services/config.js.map +1 -1
  247. package/dist/services/control-plane.d.ts.map +1 -1
  248. package/dist/services/control-plane.js +3 -3
  249. package/dist/services/control-plane.js.map +1 -1
  250. package/dist/services/env-loader.d.ts.map +1 -1
  251. package/dist/services/env-loader.js +1 -3
  252. package/dist/services/env-loader.js.map +1 -1
  253. package/dist/services/http.d.ts.map +1 -1
  254. package/dist/services/http.js.map +1 -1
  255. package/dist/services/hubspot-dev-client.d.ts.map +1 -1
  256. package/dist/services/hubspot-dev-client.js +30 -0
  257. package/dist/services/hubspot-dev-client.js.map +1 -1
  258. package/dist/services/live.d.ts +2 -2
  259. package/dist/services/live.d.ts.map +1 -1
  260. package/dist/services/live.js +1 -1
  261. package/dist/services/live.js.map +1 -1
  262. package/dist/services/machine-id.d.ts.map +1 -1
  263. package/dist/services/machine-id.js.map +1 -1
  264. package/dist/services/reporter.d.ts +8 -5
  265. package/dist/services/reporter.d.ts.map +1 -1
  266. package/dist/services/reporter.js +6 -4
  267. package/dist/services/reporter.js.map +1 -1
  268. package/dist/services/tenant-state.d.ts.map +1 -1
  269. package/dist/services/tenant-state.js.map +1 -1
  270. package/dist/state-store.d.ts +4 -0
  271. package/dist/state-store.d.ts.map +1 -1
  272. package/dist/state-store.js +15 -0
  273. package/dist/state-store.js.map +1 -1
  274. package/dist/status-drilldown.d.ts +24 -0
  275. package/dist/status-drilldown.d.ts.map +1 -0
  276. package/dist/status-drilldown.js +50 -0
  277. package/dist/status-drilldown.js.map +1 -0
  278. package/dist/tenant-state.d.ts.map +1 -1
  279. package/dist/tenant-state.js +3 -2
  280. package/dist/tenant-state.js.map +1 -1
  281. package/dist/token-key-custody.d.ts +91 -0
  282. package/dist/token-key-custody.d.ts.map +1 -0
  283. package/dist/token-key-custody.js +375 -0
  284. package/dist/token-key-custody.js.map +1 -0
  285. package/package.json +14 -15
@@ -1,9 +1,11 @@
1
- import { Path } from '@effect/platform';
2
1
  import * as Command from '@effect/cli/Command';
2
+ import { Path } from '@effect/platform';
3
3
  import { validateProject } from '@hs-x/validator';
4
4
  import { Effect, Option } from 'effect';
5
5
  import { exitWith } from '../cli-error.js';
6
6
  import { cwdOption, jsonOption, runHandler } from '../cli/kit.js';
7
+ import { LocalProjectPickerCancelled, resolveLocalProject } from '../local-project-picker.js';
8
+ import { isInteractive, promptSelect } from '../prompt.js';
7
9
  import { Cwd } from '../services/cwd.js';
8
10
  import { Reporter } from '../services/reporter.js';
9
11
  // ─── Native @effect/cli command (Phase 4) ───────────────────────────────────
@@ -20,7 +22,30 @@ function validateBody(command, opts) {
20
22
  const cwd = yield* Cwd;
21
23
  const path = yield* Path.Path;
22
24
  const reporter = yield* Reporter;
23
- const root = Option.getOrElse(opts.cwd, () => cwd);
25
+ let root = Option.getOrElse(opts.cwd, () => cwd);
26
+ if (!opts.json && isInteractive()) {
27
+ const selected = yield* Effect.promise(async () => {
28
+ try {
29
+ return await resolveLocalProject({
30
+ root,
31
+ allowPrompt: true,
32
+ message: `Which local project should ${command} validate?`,
33
+ prompts: { select: promptSelect },
34
+ });
35
+ }
36
+ catch (error) {
37
+ if (error instanceof LocalProjectPickerCancelled)
38
+ return 'cancelled';
39
+ throw error;
40
+ }
41
+ });
42
+ if (selected === 'cancelled') {
43
+ yield* reporter.info('Cancelled.');
44
+ return yield* Effect.fail(exitWith(130));
45
+ }
46
+ if (selected)
47
+ root = selected.root;
48
+ }
24
49
  const result = yield* Effect.promise(() => validateProject({ root }));
25
50
  if (opts.json) {
26
51
  // JSON-shape note: the legacy json output is a FLAT, pretty-printed
@@ -41,23 +66,60 @@ function validateBody(command, opts) {
41
66
  yield* reporter.done('Validated', 0);
42
67
  return;
43
68
  }
44
- yield* step.fail(`${result.diagnostics.length} issue${result.diagnostics.length === 1 ? '' : 's'}`);
45
- for (const d of result.diagnostics) {
46
- const code = d.code ?? 'diagnostic';
47
- const msg = d.message ?? JSON.stringify(d);
48
- yield* reporter.error(code, msg);
69
+ const errors = result.diagnostics.filter((d) => d.severity === 'error').length;
70
+ const warnings = result.diagnostics.filter((d) => d.severity === 'warning').length;
71
+ const summary = [
72
+ ...(errors > 0 ? [`${errors} error${errors === 1 ? '' : 's'}`] : []),
73
+ ...(warnings > 0 ? [`${warnings} warning${warnings === 1 ? '' : 's'}`] : []),
74
+ ].join(' · ');
75
+ if (errors > 0) {
76
+ yield* step.fail(summary);
77
+ }
78
+ else {
79
+ yield* step.warn(summary);
49
80
  }
50
- yield* reporter.done('Failed', 20);
81
+ yield* reporter.rows(result.diagnostics.map(diagnosticRow));
82
+ if (result.ok) {
83
+ // Warnings only: same exit as `--json` mode (`result.ok ? 0 : 1`).
84
+ yield* reporter.done('Validated', 0, { warn: warnings, fail: errors });
85
+ return;
86
+ }
87
+ yield* reporter.done('Failed', 20, { warn: warnings, fail: errors });
51
88
  // The reporter `done(…, 20)` above sets the rendered summary code; the
52
89
  // process exit code stays 1 to match the legacy `result.ok ? 0 : 1`.
53
90
  return yield* Effect.fail(exitWith(1));
54
91
  });
55
92
  }
93
+ /**
94
+ * One railed row per diagnostic: severity glyph (error→fail, warning→warn,
95
+ * anything else unglyphed), code as the cyan key, message at full brightness,
96
+ * `file:line` as the dim detail tail. Shared with `hs-x status`, whose
97
+ * validation section renders the same diagnostics.
98
+ */
99
+ export function diagnosticRow(diagnostic) {
100
+ return {
101
+ key: diagnostic.code,
102
+ value: diagnostic.message,
103
+ ...(diagnostic.severity === 'error'
104
+ ? { status: 'fail' }
105
+ : diagnostic.severity === 'warning'
106
+ ? { status: 'warn' }
107
+ : {}),
108
+ ...(diagnostic.file
109
+ ? {
110
+ detail: `${diagnostic.file}${diagnostic.line !== undefined ? `:${diagnostic.line}` : ''}`,
111
+ }
112
+ : {}),
113
+ };
114
+ }
56
115
  export function checkHelpText(command) {
57
116
  return `hs-x ${command}
58
117
 
59
118
  Validate project source and report diagnostics.
60
119
 
120
+ Interactive terminals discover local hsx.config.ts projects beneath a parent
121
+ workspace. Scripts select the project root explicitly with --cwd.
122
+
61
123
  Flags:
62
124
  --cwd <path> Project directory (defaults to current working directory)
63
125
  --json Emit JSON result
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export declare const CLI_VERSION = "0.2.7";
1
+ export declare const CLI_VERSION = "0.3.6";
2
2
  /** Brand orange (#ff5e1f) as ANSI 24-bit foreground SGR parameters. */
3
3
  export declare const BRAND_ORANGE_SGR = "38;2;255;94;31";
4
4
  //# sourceMappingURL=constants.d.ts.map
package/dist/constants.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // `^${CLI_VERSION}` @hs-x/* dependency ranges. MUST equal package.json's
3
3
  // version (version-sync.test.ts enforces it): @hs-x/cli@0.1.3 shipped
4
4
  // reporting 0.1.0, which read as a stale install.
5
- export const CLI_VERSION = '0.2.7';
5
+ export const CLI_VERSION = '0.3.6';
6
6
  /** Brand orange (#ff5e1f) as ANSI 24-bit foreground SGR parameters. */
7
7
  export const BRAND_ORANGE_SGR = '38;2;255;94;31';
8
8
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"control-plane-fetch.d.ts","sourceRoot":"","sources":["../src/control-plane-fetch.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,+BAA+B;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,+BAA+B;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAkB,IAAI,2BAA2B;IACjD,QAAQ,CAAC,IAAI,EAAE,qBAAqB,GAAG,uBAAuB,CAAC;gBACnD,IAAI,EAAE,qBAAqB,GAAG,uBAAuB,EAAE,OAAO,EAAE,MAAM;CAInF;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoCxF;AASD;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAMjC"}
1
+ {"version":3,"file":"control-plane-fetch.d.ts","sourceRoot":"","sources":["../src/control-plane-fetch.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,+BAA+B;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IAClC,+BAA+B;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,SAAkB,IAAI,2BAA2B;IACjD,QAAQ,CAAC,IAAI,EAAE,qBAAqB,GAAG,uBAAuB,CAAC;gBACnD,IAAI,EAAE,qBAAqB,GAAG,uBAAuB,EAAE,OAAO,EAAE,MAAM;CAInF;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAqCxF;AASD;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAMjC"}
@@ -1,5 +1,5 @@
1
- import { activeSession, defaultStorePath, loadStore, } from './account-store.js';
2
1
  import { HttpClientRequest } from '@hs-x/types';
2
+ import { activeSession, defaultStorePath, loadStore, } from './account-store.js';
3
3
  import { executeCliHttp } from './effect-http.js';
4
4
  export class ControlPlaneAuthError extends Error {
5
5
  name = 'ControlPlaneAuthError';
@@ -17,12 +17,13 @@ export class ControlPlaneAuthError extends Error {
17
17
  * so the caller can branch on status.
18
18
  */
19
19
  export async function controlPlaneFetch(input) {
20
- const session = await loadUserSession(input.storePath);
20
+ const storePath = input.storePath ?? defaultStorePath();
21
+ const session = await loadUserSession(storePath);
21
22
  if (!session) {
22
- throw new ControlPlaneAuthError('HSX_E_NOT_LOGGED_IN', 'No local HS-X session. Run `hs-x login` first.');
23
+ throw new ControlPlaneAuthError('HSX_E_NOT_LOGGED_IN', `No local HS-X session in ${storePath}. Run \`hs-x login\` in this CLI environment first.`);
23
24
  }
24
25
  if (sessionExpired(session)) {
25
- throw new ControlPlaneAuthError('HSX_E_SESSION_EXPIRED', 'Stored HS-X session has expired. Run `hs-x login` again.');
26
+ throw new ControlPlaneAuthError('HSX_E_SESSION_EXPIRED', `The HS-X session in ${storePath} has expired. Run \`hs-x login\` in this CLI environment again.`);
26
27
  }
27
28
  const fetchImpl = input.fetchImpl ?? fetch;
28
29
  const url = new URL(input.path, input.controlPlaneUrl);
@@ -1 +1 @@
1
- {"version":3,"file":"control-plane-fetch.js","sourceRoot":"","sources":["../src/control-plane-fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"control-plane-fetch.js","sourceRoot":"","sources":["../src/control-plane-fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Deploy-time revision capture (ADR-021 R03).
3
+ *
4
+ * After a Worker deploy, HS-X reads back Cloudflare's *confirmed* active
5
+ * deployment through the R01 adapter, takes the version id VERBATIM (never
6
+ * fabricated), fingerprints the deployed bindings via the shared
7
+ * `computeBindingFingerprint`, and returns a {@link DeployRevision} to attach to
8
+ * the deploy record. Capture is a pure READ: re-running it after a
9
+ * CF-success / CP-failure re-reads the same active deployment and yields the
10
+ * same version id, so a retry converges with zero duplicate deployments.
11
+ *
12
+ * A malformed/absent version id fails `DeployRevision` decode and surfaces as a
13
+ * thrown error; the deploy flow treats capture as best-effort and records the
14
+ * deploy WITHOUT a revision rather than fabricating one or failing the deploy.
15
+ */
16
+ import type { DeployBindingConfig, DeployRevision } from '@hs-x/types';
17
+ import { type CloudflareWorkerVersionsClient } from '@hs-x/types/rollback';
18
+ /**
19
+ * Reduce a Cloudflare version `resources` block to the deterministic
20
+ * {@link DeployBindingConfig} the fingerprint is derived from. Opaque and
21
+ * best-effort: unknown shapes yield an empty binding list rather than throwing,
22
+ * because a stable-but-empty fingerprint is still a valid drift baseline.
23
+ */
24
+ export declare function bindingConfigFromVersionResources(resources: unknown): DeployBindingConfig;
25
+ export interface CaptureDeployRevisionInput {
26
+ /** Cloudflare account id — used verbatim as the Worker identity's first half. */
27
+ readonly cloudflareAccountId: string;
28
+ /** Worker script name — authoritative, never renamed (T03). Second half of the Worker identity. */
29
+ readonly scriptName: string;
30
+ readonly apiToken: string;
31
+ /** ISO-8601 capture time; defaults to now. */
32
+ readonly capturedAt?: string;
33
+ /** Injection seam for tests / alternate transports. */
34
+ readonly createClient?: (input: {
35
+ readonly accountId: string;
36
+ readonly scriptName: string;
37
+ readonly apiToken: string;
38
+ }) => CloudflareWorkerVersionsClient;
39
+ readonly fetchImpl?: typeof fetch;
40
+ }
41
+ /**
42
+ * Read back Cloudflare's confirmed active deployment and build the verifiable
43
+ * {@link DeployRevision} for it. Throws if there is no active deployment/version
44
+ * or the id fails `DeployRevision` decode — the caller records without a
45
+ * revision in that case. Never fabricates an id.
46
+ */
47
+ export declare function captureDeployRevision(input: CaptureDeployRevisionInput): Promise<DeployRevision>;
48
+ //# sourceMappingURL=deploy-revision-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-revision-capture.d.ts","sourceRoot":"","sources":["../src/deploy-revision-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EACL,KAAK,8BAA8B,EAEpC,MAAM,sBAAsB,CAAC;AAmC9B;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAAC,SAAS,EAAE,OAAO,GAAG,mBAAmB,CA6BzF;AAED,MAAM,WAAW,0BAA0B;IACzC,iFAAiF;IACjF,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,mGAAmG;IACnG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,uDAAuD;IACvD,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE;QAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B,KAAK,8BAA8B,CAAC;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CACnC;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,cAAc,CAAC,CAyCzB"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Deploy-time revision capture (ADR-021 R03).
3
+ *
4
+ * After a Worker deploy, HS-X reads back Cloudflare's *confirmed* active
5
+ * deployment through the R01 adapter, takes the version id VERBATIM (never
6
+ * fabricated), fingerprints the deployed bindings via the shared
7
+ * `computeBindingFingerprint`, and returns a {@link DeployRevision} to attach to
8
+ * the deploy record. Capture is a pure READ: re-running it after a
9
+ * CF-success / CP-failure re-reads the same active deployment and yields the
10
+ * same version id, so a retry converges with zero duplicate deployments.
11
+ *
12
+ * A malformed/absent version id fails `DeployRevision` decode and surfaces as a
13
+ * thrown error; the deploy flow treats capture as best-effort and records the
14
+ * deploy WITHOUT a revision rather than fabricating one or failing the deploy.
15
+ */
16
+ import { Schema, computeBindingFingerprint, schemas } from '@hs-x/types';
17
+ import { createWorkerVersionsClient, } from '@hs-x/types/rollback';
18
+ /**
19
+ * Binding fields, in priority order, that carry the stable identity of the
20
+ * resource a binding points at. The first present one becomes the binding's
21
+ * fingerprint `target`. Value-only bindings (see {@link VALUE_ONLY_BINDINGS})
22
+ * never contribute a target so no secret/plaintext *value* is fingerprinted.
23
+ */
24
+ const TARGET_IDENTITY_FIELDS = [
25
+ 'namespace_id',
26
+ 'database_id',
27
+ 'id',
28
+ 'bucket_name',
29
+ 'queue_name',
30
+ 'class_name',
31
+ 'service',
32
+ 'certificate_id',
33
+ 'dataset',
34
+ 'index_name',
35
+ 'pipeline',
36
+ 'store_id',
37
+ 'project',
38
+ ];
39
+ /** Binding kinds whose identity is their (secret/plaintext) value — excluded from the fingerprint target. */
40
+ const VALUE_ONLY_BINDINGS = new Set(['plain_text', 'secret_text', 'json', 'secret_key']);
41
+ function asRecord(value) {
42
+ return typeof value === 'object' && value !== null ? value : {};
43
+ }
44
+ function asString(value) {
45
+ return typeof value === 'string' ? value : undefined;
46
+ }
47
+ /**
48
+ * Reduce a Cloudflare version `resources` block to the deterministic
49
+ * {@link DeployBindingConfig} the fingerprint is derived from. Opaque and
50
+ * best-effort: unknown shapes yield an empty binding list rather than throwing,
51
+ * because a stable-but-empty fingerprint is still a valid drift baseline.
52
+ */
53
+ export function bindingConfigFromVersionResources(resources) {
54
+ const record = asRecord(resources);
55
+ const runtime = asRecord(record.script_runtime);
56
+ const rawBindings = Array.isArray(record.bindings) ? record.bindings : [];
57
+ const bindings = rawBindings.flatMap((raw) => {
58
+ const binding = asRecord(raw);
59
+ const type = asString(binding.type);
60
+ const name = asString(binding.name);
61
+ if (!type || !name)
62
+ return [];
63
+ const target = VALUE_ONLY_BINDINGS.has(type)
64
+ ? undefined
65
+ : (() => {
66
+ for (const field of TARGET_IDENTITY_FIELDS) {
67
+ const value = asString(binding[field]);
68
+ if (value)
69
+ return value;
70
+ }
71
+ return undefined;
72
+ })();
73
+ return [{ type, name, ...(target !== undefined ? { target } : {}) }];
74
+ });
75
+ const compatibilityFlags = Array.isArray(runtime.compatibility_flags)
76
+ ? runtime.compatibility_flags.filter((flag) => typeof flag === 'string')
77
+ : undefined;
78
+ const compatibilityDate = asString(runtime.compatibility_date);
79
+ return {
80
+ ...(compatibilityDate !== undefined ? { compatibilityDate } : {}),
81
+ ...(compatibilityFlags !== undefined ? { compatibilityFlags } : {}),
82
+ bindings,
83
+ };
84
+ }
85
+ /**
86
+ * Read back Cloudflare's confirmed active deployment and build the verifiable
87
+ * {@link DeployRevision} for it. Throws if there is no active deployment/version
88
+ * or the id fails `DeployRevision` decode — the caller records without a
89
+ * revision in that case. Never fabricates an id.
90
+ */
91
+ export async function captureDeployRevision(input) {
92
+ const client = input.createClient
93
+ ? input.createClient({
94
+ accountId: input.cloudflareAccountId,
95
+ scriptName: input.scriptName,
96
+ apiToken: input.apiToken,
97
+ })
98
+ : createWorkerVersionsClient({
99
+ accountId: input.cloudflareAccountId,
100
+ scriptName: input.scriptName,
101
+ apiToken: input.apiToken,
102
+ ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {}),
103
+ });
104
+ const active = await client.getActiveDeployment();
105
+ const versionId = active?.versions.find((split) => split.percentage > 0)?.versionId ??
106
+ active?.versions[0]?.versionId;
107
+ if (!active || !versionId) {
108
+ throw new Error(`Cloudflare reported no active deployment for Worker "${input.scriptName}"; nothing to capture.`);
109
+ }
110
+ // Read the full version for its bindings/runtime (fingerprint input) and the
111
+ // sequential version number. The version id itself is already authoritative
112
+ // from the active deployment split.
113
+ const detail = await client.getVersion(versionId);
114
+ const bindingFingerprint = computeBindingFingerprint(bindingConfigFromVersionResources(detail.resources));
115
+ return Schema.decodeUnknownSync(schemas.DeployRevision)({
116
+ schemaVersion: 1,
117
+ cloudflareAccountId: input.cloudflareAccountId,
118
+ scriptName: input.scriptName,
119
+ versionId,
120
+ ...(typeof detail.number === 'number' ? { versionNumber: detail.number } : {}),
121
+ bindingFingerprint,
122
+ capturedAt: input.capturedAt ?? new Date().toISOString(),
123
+ });
124
+ }
125
+ //# sourceMappingURL=deploy-revision-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-revision-capture.js","sourceRoot":"","sources":["../src/deploy-revision-capture.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,17 @@
1
1
  /**
2
2
  * In-process event bus for `hs-x dev` unified output.
3
3
  *
4
- * Three lanes:
4
+ * Four lanes:
5
5
  * - frontend: logs from card iframe (via @hs-x/sdk-ui `logger` → /__hsx/log)
6
6
  * - backend: stdout/stderr from local handler process (e.g. wrangler dev) — lane wired later
7
7
  * - request: inbound proxied request summaries from local dev-proxy receiver — lane wired later
8
+ * - hubspot: HubSpot's own app-log entries (card/extension renders, proxy
9
+ * executions) polled from the app-logs API — failures that happen before
10
+ * a request ever reaches our Worker only show up here
8
11
  *
9
12
  * Subscribers (the reporter renderer) interleave events by arrival order.
10
13
  */
11
- export type DevLane = 'frontend' | 'backend' | 'request';
14
+ export type DevLane = 'frontend' | 'backend' | 'request' | 'hubspot';
12
15
  export type DevLevel = 'debug' | 'info' | 'warn' | 'error';
13
16
  export interface DevEvent {
14
17
  readonly lane: DevLane;
@@ -1 +1 @@
1
- {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/dev/event-bus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AACzD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI,CAAC;CACnD;AAED,wBAAgB,iBAAiB,IAAI,WAAW,CAmB/C"}
1
+ {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../src/dev/event-bus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AACrE,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI,CAAC;CACnD;AAED,wBAAgB,iBAAiB,IAAI,WAAW,CAmB/C"}
@@ -1,10 +1,13 @@
1
1
  /**
2
2
  * In-process event bus for `hs-x dev` unified output.
3
3
  *
4
- * Three lanes:
4
+ * Four lanes:
5
5
  * - frontend: logs from card iframe (via @hs-x/sdk-ui `logger` → /__hsx/log)
6
6
  * - backend: stdout/stderr from local handler process (e.g. wrangler dev) — lane wired later
7
7
  * - request: inbound proxied request summaries from local dev-proxy receiver — lane wired later
8
+ * - hubspot: HubSpot's own app-log entries (card/extension renders, proxy
9
+ * executions) polled from the app-logs API — failures that happen before
10
+ * a request ever reaches our Worker only show up here
8
11
  *
9
12
  * Subscribers (the reporter renderer) interleave events by arrival order.
10
13
  */
@@ -1 +1 @@
1
- {"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../src/dev/event-bus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqBH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC9C,OAAO;QACL,IAAI,CAAC,KAAK;YACR,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACH,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC;gBAAC,MAAM,CAAC;oBACP,oFAAoF;gBACtF,CAAC;YACH,CAAC;QACH,CAAC;QACD,SAAS,CAAC,QAAQ;YAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE;gBACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"event-bus.js","sourceRoot":"","sources":["../../src/dev/event-bus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAqBH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC9C,OAAO;QACL,IAAI,CAAC,KAAK;YACR,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACH,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC;gBAAC,MAAM,CAAC;oBACP,oFAAoF;gBACtF,CAAC;YACH,CAAC;QACH,CAAC;QACD,SAAS,CAAC,QAAQ;YAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE;gBACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * HubSpot app-logs → dev-stream bridge.
3
+ *
4
+ * The dev sidecar only sees what reaches our Worker (or the card iframe's
5
+ * logger). A card that fails inside HubSpot — render error, proxy failure,
6
+ * frontend logger output swallowed by the prod path — is invisible to it,
7
+ * which is exactly the "nothing shows up" dead end. This poller pulls the
8
+ * HubSpot-side system types on an interval and emits them as `hubspot`-lane
9
+ * events, so the dev stream is the same one-timeline surface as `hs-x logs`.
10
+ */
11
+ import type { SystemType } from '@hs-x/hubspot-cli';
12
+ import { type HubSpotLogsPayload, type HubSpotLogsSource } from '../hubspot-app-logs.js';
13
+ import type { DevEventBus } from './event-bus.js';
14
+ export interface HubSpotLogsPollerOptions {
15
+ readonly bus: DevEventBus;
16
+ readonly source: HubSpotLogsSource;
17
+ readonly intervalMs?: number;
18
+ /** Emit only entries at/after this time (default: poller start). */
19
+ readonly sessionStartMs?: number;
20
+ readonly systemTypes?: readonly SystemType[];
21
+ /** Injectable fetch for tests; defaults to the real app-logs read. */
22
+ readonly fetchPayload?: (input: {
23
+ readonly source: HubSpotLogsSource;
24
+ readonly sinceMinutes: number;
25
+ readonly limit: number;
26
+ readonly systemTypes: readonly SystemType[];
27
+ }) => Promise<HubSpotLogsPayload>;
28
+ }
29
+ export interface HubSpotLogsPoller {
30
+ /** One poll cycle — exposed for tests and for an eager first tick. */
31
+ poll(): Promise<void>;
32
+ stop(): void;
33
+ }
34
+ export declare function startHubSpotLogsPoller(options: HubSpotLogsPollerOptions): HubSpotLogsPoller;
35
+ //# sourceMappingURL=hubspot-logs-poller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubspot-logs-poller.d.ts","sourceRoot":"","sources":["../../src/dev/hubspot-logs-poller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAEvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAelD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7C,sEAAsE;IACtE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE;QAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;QACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;KAC7C,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,IAAI,IAAI,CAAC;CACd;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,wBAAwB,GAAG,iBAAiB,CAiF3F"}
@@ -0,0 +1,94 @@
1
+ import { fetchHubSpotLogsPayload, } from '../hubspot-app-logs.js';
2
+ /** The types where HubSpot sees things our Worker never does. */
3
+ const DEV_POLL_SYSTEM_TYPES = [
4
+ 'CRM_EXTENSIBILITY_CARD',
5
+ 'EXTENSION_RENDER',
6
+ 'EXTENSION_LOG',
7
+ 'PROXY_EXECUTION',
8
+ ];
9
+ const DEFAULT_POLL_INTERVAL_MS = 30_000;
10
+ /** Query window per poll; overlap is deduplicated by log id. */
11
+ const LOOKBACK_MINUTES = 5;
12
+ const POLL_LIMIT = 50;
13
+ export function startHubSpotLogsPoller(options) {
14
+ const fetchPayload = options.fetchPayload ?? fetchHubSpotLogsPayload;
15
+ const systemTypes = options.systemTypes ?? DEV_POLL_SYSTEM_TYPES;
16
+ const sessionStartMs = options.sessionStartMs ?? Date.now();
17
+ const seen = new Set();
18
+ let stopped = false;
19
+ let warnedError;
20
+ const poll = async () => {
21
+ if (stopped)
22
+ return;
23
+ let payload;
24
+ try {
25
+ payload = await fetchPayload({
26
+ source: options.source,
27
+ sinceMinutes: LOOKBACK_MINUTES,
28
+ limit: POLL_LIMIT,
29
+ systemTypes,
30
+ });
31
+ }
32
+ catch (cause) {
33
+ payload = { rows: [], error: cause instanceof Error ? cause.message : String(cause) };
34
+ }
35
+ if (stopped)
36
+ return;
37
+ if (payload.error) {
38
+ // Surface a broken HubSpot leg once (not every 30s), then stay quiet
39
+ // until the error message changes.
40
+ if (payload.error !== warnedError) {
41
+ warnedError = payload.error;
42
+ options.bus.emit({
43
+ lane: 'hubspot',
44
+ level: 'warn',
45
+ ts: Date.now(),
46
+ msg: `HubSpot app logs unavailable: ${payload.error}`,
47
+ });
48
+ }
49
+ return;
50
+ }
51
+ warnedError = undefined;
52
+ const fresh = payload.rows
53
+ .filter((row) => {
54
+ const id = typeof row.invocationId === 'string' ? row.invocationId : undefined;
55
+ if (!id || seen.has(id))
56
+ return false;
57
+ seen.add(id);
58
+ const ts = typeof row.timestamp === 'string' ? Date.parse(row.timestamp) : Number.NaN;
59
+ return Number.isFinite(ts) && ts >= sessionStartMs;
60
+ })
61
+ .sort((a, b) => String(a.timestamp).localeCompare(String(b.timestamp)));
62
+ for (const row of fresh) {
63
+ const errorType = typeof row.errorType === 'string' ? row.errorType : undefined;
64
+ const source = typeof row.source === 'string' ? row.source : 'app-log';
65
+ const target = typeof row.target === 'string' ? row.target : undefined;
66
+ const durationMs = typeof row.durationMs === 'number' ? row.durationMs : undefined;
67
+ const invocationId = typeof row.invocationId === 'string' ? row.invocationId : undefined;
68
+ options.bus.emit({
69
+ lane: 'hubspot',
70
+ level: errorType ? 'error' : 'info',
71
+ ts: Date.parse(String(row.timestamp)),
72
+ msg: `${target ?? source}${errorType ? ` — ${errorType}` : ''}`,
73
+ source,
74
+ fields: {
75
+ ...(durationMs !== undefined ? { durationMs } : {}),
76
+ ...(invocationId ? { invocationId } : {}),
77
+ },
78
+ });
79
+ }
80
+ };
81
+ const timer = setInterval(() => {
82
+ void poll();
83
+ }, options.intervalMs ?? DEFAULT_POLL_INTERVAL_MS);
84
+ // Do not keep the dev process alive on our account.
85
+ timer.unref?.();
86
+ return {
87
+ poll,
88
+ stop() {
89
+ stopped = true;
90
+ clearInterval(timer);
91
+ },
92
+ };
93
+ }
94
+ //# sourceMappingURL=hubspot-logs-poller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubspot-logs-poller.js","sourceRoot":"","sources":["../../src/dev/hubspot-logs-poller.ts"],"names":[],"mappings":"AAWA,OAAO,EAGL,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAGhC,iEAAiE;AACjE,MAAM,qBAAqB,GAA0B;IACnD,wBAAwB;IACxB,kBAAkB;IAClB,eAAe;IACf,iBAAiB;CAClB,CAAC;AAEF,MAAM,wBAAwB,GAAG,MAAM,CAAC;AACxC,gEAAgE;AAChE,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,UAAU,GAAG,EAAE,CAAC;AAwBtB,MAAM,UAAU,sBAAsB,CAAC,OAAiC;IACtE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,uBAAuB,CAAC;IACrE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,qBAAqB,CAAC;IACjE,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAC5D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,WAA+B,CAAC;IAEpC,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;QACrC,IAAI,OAAO;YAAE,OAAO;QACpB,IAAI,OAA2B,CAAC;QAChC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,YAAY,CAAC;gBAC3B,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,YAAY,EAAE,gBAAgB;gBAC9B,KAAK,EAAE,UAAU;gBACjB,WAAW;aACZ,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACxF,CAAC;QACD,IAAI,OAAO;YAAE,OAAO;QACpB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,qEAAqE;YACrE,mCAAmC;YACnC,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;gBAClC,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,MAAM;oBACb,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;oBACd,GAAG,EAAE,iCAAiC,OAAO,CAAC,KAAK,EAAE;iBACtD,CAAC,CAAC;YACL,CAAC;YACD,OAAO;QACT,CAAC;QACD,WAAW,GAAG,SAAS,CAAC;QAExB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI;aACvB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YACd,MAAM,EAAE,GAAG,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/E,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,OAAO,KAAK,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,MAAM,EAAE,GAAG,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACtF,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,cAAc,CAAC;QACrD,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAE1E,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YAChF,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YACvE,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YACvE,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;YACnF,MAAM,YAAY,GAAG,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;YACzF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;gBACnC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACrC,GAAG,EAAE,GAAG,MAAM,IAAI,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC/D,MAAM;gBACN,MAAM,EAAE;oBACN,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnD,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC1C;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,KAAK,IAAI,EAAE,CAAC;IACd,CAAC,EAAE,OAAO,CAAC,UAAU,IAAI,wBAAwB,CAAC,CAAC;IACnD,oDAAoD;IACpD,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAEhB,OAAO;QACL,IAAI;QACJ,IAAI;YACF,OAAO,GAAG,IAAI,CAAC;YACf,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -53,7 +53,15 @@ export declare function describeInvocationError(error: unknown): string;
53
53
  * invocation; a missing file just means an empty env.
54
54
  */
55
55
  export declare function loadDevVars(root: string): Promise<Record<string, string>>;
56
- /** Import every src/workers module and read its manifest. */
56
+ /**
57
+ * Import the project's worker modules and read their manifests.
58
+ *
59
+ * Two layouts exist: the legacy `src/workers/*.ts` layout (each module
60
+ * default-exports a defineWorker), and the defineApp layout (hsx.config.ts
61
+ * holds the defineApp config; the defineWorker default export lives in
62
+ * src/index.ts or any other module under src/). When src/workers/ yields
63
+ * nothing, fall back to scanning src/ the way the `hs-x dev` server does.
64
+ */
57
65
  export declare function loadProjectWorkers(root: string): Promise<readonly LoadedWorker[]>;
58
66
  /** Invoke one capability through the production runtime router, in process. */
59
67
  export declare function invokeCapabilityLocally(request: DevInvokeRequest): Promise<DevInvokeOutcome>;
@@ -1 +1 @@
1
- {"version":3,"file":"invoke.d.ts","sourceRoot":"","sources":["../../src/dev/invoke.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"invoke.d.ts","sourceRoot":"","sources":["../../src/dev/invoke.ts"],"names":[],"mappings":"AAgBA,UAAU,YAAY;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC;QACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KAC1D,CAAC,CAAC;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAC7C;AAED,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,IAAI,EACT,sBAAsB,GACtB,8BAA8B,GAC9B,8BAA8B;IAElC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;gBALb,IAAI,EACT,sBAAsB,GACtB,8BAA8B,GAC9B,8BAA8B,EAClC,OAAO,EAAE,MAAM,EACN,IAAI,CAAC,EAAE,MAAM,YAAA;CAIzB;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CA6B9D;AAMD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAa/E;AAuCD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CA4EvF;AA6CD,+EAA+E;AAC/E,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAqH3B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,iEAAiE;AACjE,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAU9F;AAED,+EAA+E;AAC/E,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAe7E;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,GAAG,OAAO,CAAC,MAAM,CAAC,CAgClB;AAED,wFAAwF;AACxF,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC,GAAG,OAAO,CAAC;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CA0B/D"}