@hs-x/cli 0.2.6 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) 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/cloudflare-worker-versions.d.ts +184 -0
  32. package/dist/cloudflare-worker-versions.d.ts.map +1 -0
  33. package/dist/cloudflare-worker-versions.js +360 -0
  34. package/dist/cloudflare-worker-versions.js.map +1 -0
  35. package/dist/commands/account.d.ts +28 -13
  36. package/dist/commands/account.d.ts.map +1 -1
  37. package/dist/commands/account.js +219 -69
  38. package/dist/commands/account.js.map +1 -1
  39. package/dist/commands/api.d.ts +1 -1
  40. package/dist/commands/api.d.ts.map +1 -1
  41. package/dist/commands/api.js +6 -10
  42. package/dist/commands/api.js.map +1 -1
  43. package/dist/commands/completion.d.ts.map +1 -1
  44. package/dist/commands/completion.js +13 -7
  45. package/dist/commands/completion.js.map +1 -1
  46. package/dist/commands/connect.d.ts.map +1 -1
  47. package/dist/commands/connect.js +239 -125
  48. package/dist/commands/connect.js.map +1 -1
  49. package/dist/commands/control-plane-read.d.ts +72 -11
  50. package/dist/commands/control-plane-read.d.ts.map +1 -1
  51. package/dist/commands/control-plane-read.js +1035 -58
  52. package/dist/commands/control-plane-read.js.map +1 -1
  53. package/dist/commands/deploy-promote.d.ts +25 -3
  54. package/dist/commands/deploy-promote.d.ts.map +1 -1
  55. package/dist/commands/deploy-promote.js +314 -38
  56. package/dist/commands/deploy-promote.js.map +1 -1
  57. package/dist/commands/deploy.d.ts +67 -4
  58. package/dist/commands/deploy.d.ts.map +1 -1
  59. package/dist/commands/deploy.js +1333 -255
  60. package/dist/commands/deploy.js.map +1 -1
  61. package/dist/commands/dev.d.ts +5 -1
  62. package/dist/commands/dev.d.ts.map +1 -1
  63. package/dist/commands/dev.js +502 -107
  64. package/dist/commands/dev.js.map +1 -1
  65. package/dist/commands/doctor.d.ts +15 -1
  66. package/dist/commands/doctor.d.ts.map +1 -1
  67. package/dist/commands/doctor.js +131 -20
  68. package/dist/commands/doctor.js.map +1 -1
  69. package/dist/commands/flags.d.ts +108 -6
  70. package/dist/commands/flags.d.ts.map +1 -1
  71. package/dist/commands/flags.js +996 -75
  72. package/dist/commands/flags.js.map +1 -1
  73. package/dist/commands/help-command.d.ts +14 -0
  74. package/dist/commands/help-command.d.ts.map +1 -1
  75. package/dist/commands/help-command.js +144 -44
  76. package/dist/commands/help-command.js.map +1 -1
  77. package/dist/commands/history.js +14 -10
  78. package/dist/commands/history.js.map +1 -1
  79. package/dist/commands/init.d.ts +4 -2
  80. package/dist/commands/init.d.ts.map +1 -1
  81. package/dist/commands/init.js +69 -12
  82. package/dist/commands/init.js.map +1 -1
  83. package/dist/commands/link.d.ts +2 -3
  84. package/dist/commands/link.d.ts.map +1 -1
  85. package/dist/commands/link.js +201 -101
  86. package/dist/commands/link.js.map +1 -1
  87. package/dist/commands/login.d.ts +2 -2
  88. package/dist/commands/login.d.ts.map +1 -1
  89. package/dist/commands/login.js +22 -5
  90. package/dist/commands/login.js.map +1 -1
  91. package/dist/commands/migrate.d.ts +23 -3
  92. package/dist/commands/migrate.d.ts.map +1 -1
  93. package/dist/commands/migrate.js +500 -73
  94. package/dist/commands/migrate.js.map +1 -1
  95. package/dist/commands/rollback.d.ts +42 -2
  96. package/dist/commands/rollback.d.ts.map +1 -1
  97. package/dist/commands/rollback.js +422 -58
  98. package/dist/commands/rollback.js.map +1 -1
  99. package/dist/commands/secrets.d.ts +76 -3
  100. package/dist/commands/secrets.d.ts.map +1 -1
  101. package/dist/commands/secrets.js +328 -41
  102. package/dist/commands/secrets.js.map +1 -1
  103. package/dist/commands/status.d.ts +13 -2
  104. package/dist/commands/status.d.ts.map +1 -1
  105. package/dist/commands/status.js +154 -17
  106. package/dist/commands/status.js.map +1 -1
  107. package/dist/commands/unlink.d.ts +2 -2
  108. package/dist/commands/unlink.d.ts.map +1 -1
  109. package/dist/commands/unlink.js +2 -2
  110. package/dist/commands/unlink.js.map +1 -1
  111. package/dist/commands/update.d.ts.map +1 -1
  112. package/dist/commands/update.js +4 -3
  113. package/dist/commands/update.js.map +1 -1
  114. package/dist/commands/validate.d.ts +12 -3
  115. package/dist/commands/validate.d.ts.map +1 -1
  116. package/dist/commands/validate.js +70 -8
  117. package/dist/commands/validate.js.map +1 -1
  118. package/dist/constants.d.ts +1 -1
  119. package/dist/constants.js +1 -1
  120. package/dist/control-plane-fetch.d.ts.map +1 -1
  121. package/dist/control-plane-fetch.js +5 -4
  122. package/dist/control-plane-fetch.js.map +1 -1
  123. package/dist/deploy-revision-capture.d.ts +48 -0
  124. package/dist/deploy-revision-capture.d.ts.map +1 -0
  125. package/dist/deploy-revision-capture.js +125 -0
  126. package/dist/deploy-revision-capture.js.map +1 -0
  127. package/dist/dev/compat-shim.d.ts.map +1 -1
  128. package/dist/dev/compat-shim.js +10 -35
  129. package/dist/dev/compat-shim.js.map +1 -1
  130. package/dist/dev/event-bus.d.ts +5 -2
  131. package/dist/dev/event-bus.d.ts.map +1 -1
  132. package/dist/dev/event-bus.js +4 -1
  133. package/dist/dev/event-bus.js.map +1 -1
  134. package/dist/dev/hubspot-logs-poller.d.ts +35 -0
  135. package/dist/dev/hubspot-logs-poller.d.ts.map +1 -0
  136. package/dist/dev/hubspot-logs-poller.js +94 -0
  137. package/dist/dev/hubspot-logs-poller.js.map +1 -0
  138. package/dist/dev/invoke.d.ts +9 -1
  139. package/dist/dev/invoke.d.ts.map +1 -1
  140. package/dist/dev/invoke.js +69 -20
  141. package/dist/dev/invoke.js.map +1 -1
  142. package/dist/dev/keyboard.d.ts +31 -0
  143. package/dist/dev/keyboard.d.ts.map +1 -0
  144. package/dist/dev/keyboard.js +143 -0
  145. package/dist/dev/keyboard.js.map +1 -0
  146. package/dist/dev/log-server.d.ts +7 -0
  147. package/dist/dev/log-server.d.ts.map +1 -1
  148. package/dist/dev/log-server.js +68 -31
  149. package/dist/dev/log-server.js.map +1 -1
  150. package/dist/dev/migrated-card.d.ts +17 -0
  151. package/dist/dev/migrated-card.d.ts.map +1 -0
  152. package/dist/dev/migrated-card.js +114 -0
  153. package/dist/dev/migrated-card.js.map +1 -0
  154. package/dist/dev/stream-filter.d.ts +40 -0
  155. package/dist/dev/stream-filter.d.ts.map +1 -0
  156. package/dist/dev/stream-filter.js +93 -0
  157. package/dist/dev/stream-filter.js.map +1 -0
  158. package/dist/dev/stream-renderer.d.ts +34 -0
  159. package/dist/dev/stream-renderer.d.ts.map +1 -1
  160. package/dist/dev/stream-renderer.js +222 -8
  161. package/dist/dev/stream-renderer.js.map +1 -1
  162. package/dist/errors-registry.d.ts.map +1 -1
  163. package/dist/errors-registry.js +280 -36
  164. package/dist/errors-registry.js.map +1 -1
  165. package/dist/errors.d.ts.map +1 -1
  166. package/dist/errors.js.map +1 -1
  167. package/dist/help.d.ts.map +1 -1
  168. package/dist/help.js +8 -0
  169. package/dist/help.js.map +1 -1
  170. package/dist/hubspot-app-logs.d.ts +76 -0
  171. package/dist/hubspot-app-logs.d.ts.map +1 -0
  172. package/dist/hubspot-app-logs.js +323 -0
  173. package/dist/hubspot-app-logs.js.map +1 -0
  174. package/dist/hubspot-auth.d.ts +8 -2
  175. package/dist/hubspot-auth.d.ts.map +1 -1
  176. package/dist/hubspot-auth.js +36 -12
  177. package/dist/hubspot-auth.js.map +1 -1
  178. package/dist/hubspot-developer-client.js +119 -11
  179. package/dist/hubspot-developer-client.js.map +1 -1
  180. package/dist/index.d.ts +1 -0
  181. package/dist/index.d.ts.map +1 -1
  182. package/dist/index.js +1 -0
  183. package/dist/index.js.map +1 -1
  184. package/dist/init/templates.d.ts +10 -0
  185. package/dist/init/templates.d.ts.map +1 -1
  186. package/dist/init/templates.js +157 -14
  187. package/dist/init/templates.js.map +1 -1
  188. package/dist/link-migration-journal.d.ts +131 -0
  189. package/dist/link-migration-journal.d.ts.map +1 -0
  190. package/dist/link-migration-journal.js +395 -0
  191. package/dist/link-migration-journal.js.map +1 -0
  192. package/dist/link-preflight.d.ts +78 -0
  193. package/dist/link-preflight.d.ts.map +1 -0
  194. package/dist/link-preflight.js +231 -0
  195. package/dist/link-preflight.js.map +1 -0
  196. package/dist/local-project-picker.d.ts +34 -0
  197. package/dist/local-project-picker.d.ts.map +1 -0
  198. package/dist/local-project-picker.js +121 -0
  199. package/dist/local-project-picker.js.map +1 -0
  200. package/dist/logs-interactive.d.ts +37 -0
  201. package/dist/logs-interactive.d.ts.map +1 -0
  202. package/dist/logs-interactive.js +110 -0
  203. package/dist/logs-interactive.js.map +1 -0
  204. package/dist/output-context.d.ts +13 -0
  205. package/dist/output-context.d.ts.map +1 -0
  206. package/dist/output-context.js +46 -0
  207. package/dist/output-context.js.map +1 -0
  208. package/dist/project-context.d.ts +55 -0
  209. package/dist/project-context.d.ts.map +1 -0
  210. package/dist/project-context.js +115 -0
  211. package/dist/project-context.js.map +1 -0
  212. package/dist/project-picker.d.ts +65 -0
  213. package/dist/project-picker.d.ts.map +1 -0
  214. package/dist/project-picker.js +227 -0
  215. package/dist/project-picker.js.map +1 -0
  216. package/dist/prompt.d.ts +8 -0
  217. package/dist/prompt.d.ts.map +1 -1
  218. package/dist/prompt.js +81 -13
  219. package/dist/prompt.js.map +1 -1
  220. package/dist/reporter/human.d.ts +10 -2
  221. package/dist/reporter/human.d.ts.map +1 -1
  222. package/dist/reporter/human.js +82 -14
  223. package/dist/reporter/human.js.map +1 -1
  224. package/dist/reporter/index.d.ts.map +1 -1
  225. package/dist/reporter/index.js +7 -5
  226. package/dist/reporter/index.js.map +1 -1
  227. package/dist/reporter/json.d.ts +2 -1
  228. package/dist/reporter/json.d.ts.map +1 -1
  229. package/dist/reporter/json.js +10 -7
  230. package/dist/reporter/json.js.map +1 -1
  231. package/dist/reporter/style.d.ts +19 -0
  232. package/dist/reporter/style.d.ts.map +1 -1
  233. package/dist/reporter/style.js +126 -6
  234. package/dist/reporter/style.js.map +1 -1
  235. package/dist/reporter/types.d.ts +34 -4
  236. package/dist/reporter/types.d.ts.map +1 -1
  237. package/dist/reporter/types.js.map +1 -1
  238. package/dist/rollback-traffic.d.ts +85 -0
  239. package/dist/rollback-traffic.d.ts.map +1 -0
  240. package/dist/rollback-traffic.js +204 -0
  241. package/dist/rollback-traffic.js.map +1 -0
  242. package/dist/services/account-store.d.ts +3 -1
  243. package/dist/services/account-store.d.ts.map +1 -1
  244. package/dist/services/account-store.js +2 -1
  245. package/dist/services/account-store.js.map +1 -1
  246. package/dist/services/app-paths.d.ts.map +1 -1
  247. package/dist/services/app-paths.js +3 -1
  248. package/dist/services/app-paths.js.map +1 -1
  249. package/dist/services/cloudflare-auth.d.ts +1 -1
  250. package/dist/services/cloudflare-auth.d.ts.map +1 -1
  251. package/dist/services/cloudflare-auth.js +2 -2
  252. package/dist/services/cloudflare-auth.js.map +1 -1
  253. package/dist/services/cloudflare-kv.d.ts.map +1 -1
  254. package/dist/services/cloudflare-kv.js.map +1 -1
  255. package/dist/services/command-history.d.ts.map +1 -1
  256. package/dist/services/command-history.js.map +1 -1
  257. package/dist/services/config.d.ts.map +1 -1
  258. package/dist/services/config.js +1 -1
  259. package/dist/services/config.js.map +1 -1
  260. package/dist/services/control-plane.d.ts.map +1 -1
  261. package/dist/services/control-plane.js +3 -3
  262. package/dist/services/control-plane.js.map +1 -1
  263. package/dist/services/env-loader.d.ts.map +1 -1
  264. package/dist/services/env-loader.js +1 -3
  265. package/dist/services/env-loader.js.map +1 -1
  266. package/dist/services/http.d.ts.map +1 -1
  267. package/dist/services/http.js.map +1 -1
  268. package/dist/services/hubspot-dev-client.d.ts.map +1 -1
  269. package/dist/services/hubspot-dev-client.js +30 -0
  270. package/dist/services/hubspot-dev-client.js.map +1 -1
  271. package/dist/services/live.d.ts +2 -2
  272. package/dist/services/live.d.ts.map +1 -1
  273. package/dist/services/live.js +1 -1
  274. package/dist/services/live.js.map +1 -1
  275. package/dist/services/machine-id.d.ts.map +1 -1
  276. package/dist/services/machine-id.js.map +1 -1
  277. package/dist/services/reporter.d.ts +8 -5
  278. package/dist/services/reporter.d.ts.map +1 -1
  279. package/dist/services/reporter.js +6 -4
  280. package/dist/services/reporter.js.map +1 -1
  281. package/dist/services/tenant-state.d.ts.map +1 -1
  282. package/dist/services/tenant-state.js.map +1 -1
  283. package/dist/state-store.d.ts +4 -0
  284. package/dist/state-store.d.ts.map +1 -1
  285. package/dist/state-store.js +15 -0
  286. package/dist/state-store.js.map +1 -1
  287. package/dist/status-drilldown.d.ts +24 -0
  288. package/dist/status-drilldown.d.ts.map +1 -0
  289. package/dist/status-drilldown.js +50 -0
  290. package/dist/status-drilldown.js.map +1 -0
  291. package/dist/tenant-state.d.ts.map +1 -1
  292. package/dist/tenant-state.js +3 -2
  293. package/dist/tenant-state.js.map +1 -1
  294. package/dist/token-key-custody.d.ts +91 -0
  295. package/dist/token-key-custody.d.ts.map +1 -0
  296. package/dist/token-key-custody.js +375 -0
  297. package/dist/token-key-custody.js.map +1 -0
  298. package/package.json +13 -14
@@ -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.6";
1
+ export declare const CLI_VERSION = "0.3.0";
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.6';
5
+ export const CLI_VERSION = '0.3.0';
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 +1 @@
1
- {"version":3,"file":"compat-shim.d.ts","sourceRoot":"","sources":["../../src/dev/compat-shim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,oBAAoB,EAAE,CAC7B,KAAK,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAC/E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,OAAO,CAAC,SAAS,CAAC,CAAC;IACxB,QAAQ,CAAC,sBAAsB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,qBAAqB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IACvD,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,MAAM,CAAC;IAC3C,QAAQ,CAAC,uBAAuB,EAAE,MAAM,MAAM,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;CAC3D;AAgBD,wBAAsB,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CA4DtD"}
1
+ {"version":3,"file":"compat-shim.d.ts","sourceRoot":"","sources":["../../src/dev/compat-shim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,oBAAoB,EAAE,CAC7B,KAAK,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAC/E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,OAAO,CAAC,SAAS,CAAC,CAAC;IACxB,QAAQ,CAAC,sBAAsB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,QAAQ,CAAC,qBAAqB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IACvD,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,MAAM,CAAC;IAC3C,QAAQ,CAAC,uBAAuB,EAAE,MAAM,MAAM,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;CAC3D;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CA8BtD"}
@@ -8,21 +8,6 @@
8
8
  * @hubspot/project-parsing-lib 0.16.0
9
9
  * @hubspot/ui-extensions-dev-server 2.0.7
10
10
  */
11
- import { HsxHttpClientRaw, HttpClient, HttpClientRequest, HttpClientResponse, } from '@hs-x/types';
12
- import { Cause, Effect, Exit, Option, Schema } from 'effect';
13
- const UnknownJsonObject = Schema.Record({ key: Schema.String, value: Schema.Unknown });
14
- const runDevStackProgram = async (program) => {
15
- const exit = await Effect.runPromiseExit(program);
16
- return Exit.match(exit, {
17
- onSuccess: (value) => value,
18
- onFailure: (cause) => {
19
- const failure = Cause.failureOption(cause);
20
- if (Option.isSome(failure))
21
- throw failure.value;
22
- throw new Error(Cause.pretty(cause));
23
- },
24
- });
25
- };
26
11
  export async function loadDevStack() {
27
12
  const portManager = await import('@hubspot/local-dev-lib/portManager');
28
13
  const config = await import('@hubspot/local-dev-lib/config');
@@ -35,31 +20,21 @@ export async function loadDevStack() {
35
20
  translateForLocalDev: parsing.translateForLocalDev,
36
21
  startPortManagerServer: portManager.startPortManagerServer,
37
22
  stopPortManagerServer: portManager.stopPortManagerServer,
38
- getActiveServers: async () => {
39
- const body = await runDevStackProgram(Effect.gen(function* () {
40
- const client = yield* HttpClient.HttpClient;
41
- const response = yield* client
42
- .execute(HttpClientRequest.get(`${portManager.BASE_URL}/servers`))
43
- .pipe(Effect.scoped, Effect.mapError((error) => new Error(`Port manager request failed while listing active servers: ${error}`)));
44
- if (response.status < 200 || response.status >= 300) {
45
- return yield* Effect.fail(new Error(`Port manager returned ${response.status} while listing active servers.`));
46
- }
47
- return yield* HttpClientResponse.schemaBodyJson(UnknownJsonObject)(response).pipe(Effect.mapError((error) => new Error(`Port manager returned malformed active server data: ${error}`)));
48
- }).pipe(Effect.provide(HsxHttpClientRaw)));
49
- const servers = body.servers;
50
- if (Array.isArray(servers)) {
51
- return Object.fromEntries(servers
52
- .filter((server) => server.id && typeof server.port === 'number')
53
- .map((server) => [server.id, server.port]));
54
- }
55
- return (servers ?? {});
56
- },
23
+ getActiveServers: () => portManager.getActiveServers(),
57
24
  requestPorts: portManager.requestPorts,
58
25
  getHubSpotApiOrigin: () => urls.getHubSpotApiOrigin('prod'),
59
26
  getHubSpotWebsiteOrigin: () => urls.getHubSpotWebsiteOrigin('prod'),
60
27
  logger: loggerMod.logger,
61
28
  uie: uie.DevModeUnifiedInterface,
62
- getAccountConfig: config.getAccountConfig,
29
+ getAccountConfig: (accountId) => {
30
+ try {
31
+ return config.getConfigAccountIfExists(accountId);
32
+ }
33
+ catch {
34
+ // v5 throws when no HubSpot CLI config file exists at all.
35
+ return undefined;
36
+ }
37
+ },
63
38
  };
64
39
  }
65
40
  //# sourceMappingURL=compat-shim.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compat-shim.js","sourceRoot":"","sources":["../../src/dev/compat-shim.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compat-shim.js","sourceRoot":"","sources":["../../src/dev/compat-shim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAiCH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAErC,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,wCAAwC,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC;IAE9D,OAAO;QACL,oBAAoB,EAAE,OAAO,CAAC,oBAAwD;QACtF,sBAAsB,EAAE,WAAW,CAAC,sBAAsB;QAC1D,qBAAqB,EAAE,WAAW,CAAC,qBAAqB;QACxD,gBAAgB,EAAE,GAA0B,EAAE,CAAC,WAAW,CAAC,gBAAgB,EAAE;QAC7E,YAAY,EAAE,WAAW,CAAC,YAAY;QACtC,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAC3D,uBAAuB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;QACnE,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,GAAG,EAAE,GAAG,CAAC,uBAAuB;QAChC,gBAAgB,EAAE,CAAC,SAAiB,EAAE,EAAE;YACtC,IAAI,CAAC;gBACH,OAAO,MAAM,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;YACpD,CAAC;YAAC,MAAM,CAAC;gBACP,2DAA2D;gBAC3D,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -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"}