@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-context.js","sourceRoot":"","sources":["../src/output-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAUrD,MAAM,aAAa,GAAmB;IACpC,IAAI,EAAE,KAAK;IACX,UAAU,EAAE,KAAK;IACjB,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,KAAK;CACb,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAkB,CAAC;AAExD,MAAM,UAAU,qBAAqB,CAAC,IAAuB;IAC3D,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC7B,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC1C,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtD,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QACnC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAI,KAAqB,EAAE,KAAc;IACzE,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,aAAa,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAC;IACtC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,6EAA6E;IAC7E,6DAA6D;IAC7D,IAAI,KAAK,CAAC,IAAI;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,UAAU;QAAE,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAG,qBAAqB,EAAE,CAAC;IACtC,OAAO,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC;AACxC,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { type ProjectBinding } from './project-binding.js';
2
+ import type { StateStore } from './state-store.js';
3
+ export type ResolutionSource = 'option' | 'env' | 'project-binding' | 'hubspot-binding' | 'tenant-binding' | 'active-deploy';
4
+ export interface Resolved<T> {
5
+ readonly value: T;
6
+ readonly source: ResolutionSource;
7
+ }
8
+ export interface HubSpotProjectBinding {
9
+ readonly appId?: number;
10
+ readonly projectName?: string;
11
+ readonly developerAccountId?: number;
12
+ }
13
+ export interface LocalProjectContext {
14
+ readonly projectBinding?: ProjectBinding;
15
+ readonly hubSpotBinding?: HubSpotProjectBinding;
16
+ /** True when hubspot.json exists but cannot provide any valid authoritative fields. */
17
+ readonly invalidHubSpotBinding?: boolean;
18
+ }
19
+ export declare function readHubSpotProjectBinding(root: string): Promise<HubSpotProjectBinding | undefined>;
20
+ export declare function readLocalProjectContext(root: string): Promise<LocalProjectContext>;
21
+ export declare function resolveProjectId(input: {
22
+ readonly explicit?: string | undefined;
23
+ readonly env?: string | undefined;
24
+ readonly local?: LocalProjectContext | undefined;
25
+ }): Resolved<string> | undefined;
26
+ export declare function resolveHubSpotAppId(input: {
27
+ readonly explicit?: number | undefined;
28
+ readonly env?: string | undefined;
29
+ readonly compatibilityEnv?: string | undefined;
30
+ readonly local?: LocalProjectContext | undefined;
31
+ }): Resolved<number> | undefined;
32
+ export declare function canDiscoverHubSpotAppIdFromTenantBindings(input: {
33
+ readonly explicit?: number | undefined;
34
+ readonly env?: string | undefined;
35
+ readonly compatibilityEnv?: string | undefined;
36
+ readonly local?: LocalProjectContext | undefined;
37
+ }): boolean;
38
+ /**
39
+ * Resolve app identity only from bindings scoped to the already-resolved
40
+ * project and environment. A unique app is safe; ambiguity is surfaced rather
41
+ * than guessing across installations.
42
+ */
43
+ export declare function resolveHubSpotAppIdFromTenantBindings(input: {
44
+ readonly stateStore: StateStore;
45
+ readonly projectId: string;
46
+ readonly environment: string;
47
+ }): Promise<Resolved<number> | undefined>;
48
+ export declare function resolveRuntimeOrigin(input: {
49
+ readonly explicit?: string | undefined;
50
+ readonly env?: string | undefined;
51
+ readonly stateStore: StateStore;
52
+ readonly projectId: string;
53
+ readonly environment: string;
54
+ }): Promise<Resolved<string> | undefined>;
55
+ //# sourceMappingURL=project-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-context.d.ts","sourceRoot":"","sources":["../src/project-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ import { access, readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { readProjectBinding } from './project-binding.js';
4
+ function positiveInteger(value) {
5
+ const parsed = typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : Number.NaN;
6
+ return Number.isInteger(parsed) && parsed > 0 ? parsed : undefined;
7
+ }
8
+ export async function readHubSpotProjectBinding(root) {
9
+ try {
10
+ const parsed = JSON.parse(await readFile(join(root, '.hs-x', 'hubspot.json'), 'utf8'));
11
+ const appId = positiveInteger(parsed.appId);
12
+ const developerAccountId = positiveInteger(parsed.developerAccountId);
13
+ const projectName = typeof parsed.projectName === 'string' && parsed.projectName.length > 0
14
+ ? parsed.projectName
15
+ : undefined;
16
+ if (appId === undefined && developerAccountId === undefined && projectName === undefined) {
17
+ return undefined;
18
+ }
19
+ return {
20
+ ...(appId === undefined ? {} : { appId }),
21
+ ...(developerAccountId === undefined ? {} : { developerAccountId }),
22
+ ...(projectName === undefined ? {} : { projectName }),
23
+ };
24
+ }
25
+ catch {
26
+ return undefined;
27
+ }
28
+ }
29
+ export async function readLocalProjectContext(root) {
30
+ const hubSpotBindingPath = join(root, '.hs-x', 'hubspot.json');
31
+ const [projectBinding, hubSpotBinding, hubSpotBindingExists] = await Promise.all([
32
+ readProjectBinding(root),
33
+ readHubSpotProjectBinding(root),
34
+ access(hubSpotBindingPath).then(() => true, () => false),
35
+ ]);
36
+ return {
37
+ ...(projectBinding === undefined ? {} : { projectBinding }),
38
+ ...(hubSpotBinding === undefined ? {} : { hubSpotBinding }),
39
+ ...(hubSpotBindingExists && hubSpotBinding === undefined
40
+ ? { invalidHubSpotBinding: true }
41
+ : {}),
42
+ };
43
+ }
44
+ export function resolveProjectId(input) {
45
+ if (input.explicit)
46
+ return { value: input.explicit, source: 'option' };
47
+ if (input.env)
48
+ return { value: input.env, source: 'env' };
49
+ const value = input.local?.projectBinding?.projectId;
50
+ return value ? { value, source: 'project-binding' } : undefined;
51
+ }
52
+ export function resolveHubSpotAppId(input) {
53
+ if (input.explicit !== undefined) {
54
+ const value = positiveInteger(input.explicit);
55
+ return value === undefined ? undefined : { value, source: 'option' };
56
+ }
57
+ if (input.env) {
58
+ const value = positiveInteger(input.env);
59
+ return value === undefined ? undefined : { value, source: 'env' };
60
+ }
61
+ if (input.compatibilityEnv) {
62
+ const value = positiveInteger(input.compatibilityEnv);
63
+ return value === undefined ? undefined : { value, source: 'env' };
64
+ }
65
+ const value = input.local?.hubSpotBinding?.appId;
66
+ return value === undefined ? undefined : { value, source: 'hubspot-binding' };
67
+ }
68
+ export function canDiscoverHubSpotAppIdFromTenantBindings(input) {
69
+ return (input.explicit === undefined &&
70
+ !input.env &&
71
+ !input.compatibilityEnv &&
72
+ input.local?.hubSpotBinding?.appId === undefined &&
73
+ input.local?.invalidHubSpotBinding !== true);
74
+ }
75
+ /**
76
+ * Resolve app identity only from bindings scoped to the already-resolved
77
+ * project and environment. A unique app is safe; ambiguity is surfaced rather
78
+ * than guessing across installations.
79
+ */
80
+ export async function resolveHubSpotAppIdFromTenantBindings(input) {
81
+ const bindings = await input.stateStore.listBindings({
82
+ projectId: input.projectId,
83
+ environment: input.environment,
84
+ });
85
+ const appIds = [
86
+ ...new Set(bindings
87
+ .map((binding) => positiveInteger(binding.hubSpotAppId))
88
+ .filter((appId) => appId !== undefined)),
89
+ ];
90
+ if (appIds.length === 0)
91
+ return undefined;
92
+ if (appIds.length > 1) {
93
+ throw new Error(`Multiple tenant bindings match ${input.projectId}/${input.environment} (apps ${appIds.join(', ')}). Pass --app-id to choose one.`);
94
+ }
95
+ return { value: appIds[0], source: 'tenant-binding' };
96
+ }
97
+ export async function resolveRuntimeOrigin(input) {
98
+ if (input.explicit)
99
+ return { value: input.explicit, source: 'option' };
100
+ if (input.env)
101
+ return { value: input.env, source: 'env' };
102
+ const active = await input.stateStore.getActive({
103
+ projectId: input.projectId,
104
+ environment: input.environment,
105
+ });
106
+ if (!active)
107
+ return undefined;
108
+ const deploy = await input.stateStore.getDeploy({
109
+ projectId: input.projectId,
110
+ deployId: active.deployId,
111
+ });
112
+ const value = deploy?.workerUrls.find((url) => url.trim().length > 0);
113
+ return value ? { value, source: 'active-deploy' } : undefined;
114
+ }
115
+ //# sourceMappingURL=project-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-context.js","sourceRoot":"","sources":["../src/project-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { type FlagAuthoringClient } from '@hs-x/runtime';
2
+ import { type Project } from '@hs-x/types';
3
+ import { type ProjectRuntimeBinding } from '@hs-x/types/schemas';
4
+ import type { SelectOptions } from './prompt.js';
5
+ export interface ProjectPickerPrompts {
6
+ readonly select: <T extends string>(options: SelectOptions<T>) => Promise<T | undefined>;
7
+ }
8
+ export interface ProjectSelectionCandidate {
9
+ readonly id: string;
10
+ readonly displayName: string;
11
+ readonly lastDeployAt?: string | undefined;
12
+ }
13
+ export declare class ProjectPickerCancelled extends Error {
14
+ constructor();
15
+ }
16
+ export interface ControlPlaneRequestAdapter {
17
+ readonly request: (input: {
18
+ readonly path: string;
19
+ readonly method?: 'GET' | 'POST';
20
+ readonly body?: unknown;
21
+ }) => Promise<Response>;
22
+ }
23
+ export declare function resolveAccountId(input: {
24
+ readonly explicitAccountId?: string;
25
+ readonly envAccountId?: string;
26
+ readonly localAccountId?: string;
27
+ readonly defaultAccountId?: string;
28
+ }): string | undefined;
29
+ export declare function discoverProjects(input: {
30
+ readonly accountId: string;
31
+ readonly controlPlane: ControlPlaneRequestAdapter;
32
+ }): Promise<readonly Project[]>;
33
+ export declare function discoverProjectRuntimeBindings(input: {
34
+ readonly accountId: string;
35
+ readonly projectId: string;
36
+ readonly controlPlane: ControlPlaneRequestAdapter;
37
+ }): Promise<readonly ProjectRuntimeBinding[]>;
38
+ export declare function resolveProjectSelection<T extends ProjectSelectionCandidate>(input: {
39
+ readonly accountId: string;
40
+ readonly projects: readonly T[];
41
+ readonly explicitProjectId?: string;
42
+ readonly localProjectId?: string;
43
+ readonly allowPrompt: boolean;
44
+ readonly prompts?: ProjectPickerPrompts;
45
+ readonly message?: string;
46
+ /** Logs preserves its existing visible picker even for a one-project account. */
47
+ readonly promptWhenSingle?: boolean;
48
+ }): Promise<T>;
49
+ export declare function resolveRuntimeBinding(input: {
50
+ readonly project: Project;
51
+ readonly bindings: readonly ProjectRuntimeBinding[];
52
+ readonly explicitEnvironment?: string;
53
+ readonly explicitAppId?: number;
54
+ readonly localAppId?: number;
55
+ readonly allowPrompt: boolean;
56
+ readonly prompts?: ProjectPickerPrompts;
57
+ }): Promise<ProjectRuntimeBinding>;
58
+ export declare function createControlPlaneFlagAuthoringClient(input: {
59
+ readonly accountId: string;
60
+ readonly projectId: string;
61
+ readonly environment: string;
62
+ readonly hubSpotAppId: number;
63
+ readonly controlPlane: ControlPlaneRequestAdapter;
64
+ }): FlagAuthoringClient;
65
+ //# sourceMappingURL=project-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-picker.d.ts","sourceRoot":"","sources":["../src/project-picker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,227 @@
1
+ import { RuntimeFlagAuthoringError } from '@hs-x/runtime';
2
+ import { Schema, schemas } from '@hs-x/types';
3
+ import { ListProjectRuntimeBindingsResponse, } from '@hs-x/types/schemas';
4
+ export class ProjectPickerCancelled extends Error {
5
+ constructor() {
6
+ super('Cancelled.');
7
+ }
8
+ }
9
+ export function resolveAccountId(input) {
10
+ return (input.explicitAccountId ?? input.envAccountId ?? input.localAccountId ?? input.defaultAccountId);
11
+ }
12
+ export async function discoverProjects(input) {
13
+ const response = await input.controlPlane.request({
14
+ path: `/v1/accounts/${encodeURIComponent(input.accountId)}/projects`,
15
+ });
16
+ const body = await readResponseBody(response);
17
+ if (!response.ok)
18
+ throw controlPlaneResponseError(response, body, 'Project discovery failed');
19
+ return Schema.decodeUnknownSync(schemas.ListProjectsResponse)(body).projects;
20
+ }
21
+ export async function discoverProjectRuntimeBindings(input) {
22
+ const response = await input.controlPlane.request({
23
+ path: `/v1/accounts/${encodeURIComponent(input.accountId)}/projects/${encodeURIComponent(input.projectId)}/runtime-bindings`,
24
+ });
25
+ const body = await readResponseBody(response);
26
+ if (!response.ok) {
27
+ if (response.status === 404 && responseMessage(body) === 'not_found') {
28
+ throw new Error('Remote flag discovery is not available on this control plane yet. Deploy the current HS-X control plane, or run this command from a deployed project checkout.');
29
+ }
30
+ throw controlPlaneResponseError(response, body, 'Runtime binding discovery failed');
31
+ }
32
+ return Schema.decodeUnknownSync(ListProjectRuntimeBindingsResponse)(body).bindings;
33
+ }
34
+ export async function resolveProjectSelection(input) {
35
+ const projects = [...input.projects];
36
+ if (input.explicitProjectId) {
37
+ const selected = projects.find((project) => project.id === input.explicitProjectId);
38
+ if (!selected) {
39
+ throw new Error(`Project ${input.explicitProjectId} is not available in account ${input.accountId}. Pass --project-id for a project in this account.`);
40
+ }
41
+ return selected;
42
+ }
43
+ if (projects.length === 0) {
44
+ throw new Error('No projects are available in this HS-X account. Run `hs-x deploy` first.');
45
+ }
46
+ if (projects.length === 1 && !input.promptWhenSingle)
47
+ return projects[0];
48
+ const ordered = projects.sort((left, right) => {
49
+ if (left.id === input.localProjectId)
50
+ return -1;
51
+ if (right.id === input.localProjectId)
52
+ return 1;
53
+ return left.displayName.localeCompare(right.displayName) || left.id.localeCompare(right.id);
54
+ });
55
+ if (!input.allowPrompt || !input.prompts) {
56
+ throw new Error(`Multiple projects are available in account ${input.accountId} (${ordered.map((project) => project.displayName).join(', ')}). Pass --project-id to choose one.`);
57
+ }
58
+ const selectedId = await input.prompts.select({
59
+ message: input.message ?? 'Which project?',
60
+ ...(input.localProjectId && ordered.some((project) => project.id === input.localProjectId)
61
+ ? { default: input.localProjectId }
62
+ : {}),
63
+ options: ordered.map((project) => ({
64
+ value: project.id,
65
+ label: project.displayName,
66
+ description: [
67
+ project.id,
68
+ project.id === input.localProjectId ? 'current directory' : undefined,
69
+ project.lastDeployAt ? `last deploy ${project.lastDeployAt}` : undefined,
70
+ ]
71
+ .filter(Boolean)
72
+ .join(' · '),
73
+ })),
74
+ });
75
+ if (selectedId === undefined)
76
+ throw new ProjectPickerCancelled();
77
+ return ordered.find((project) => project.id === selectedId);
78
+ }
79
+ export async function resolveRuntimeBinding(input) {
80
+ let environmentRows = [...input.bindings];
81
+ if (input.explicitAppId !== undefined) {
82
+ if (!Number.isInteger(input.explicitAppId) || input.explicitAppId <= 0) {
83
+ throw new Error('Require a valid integer --app-id (or HSX_APP_ID).');
84
+ }
85
+ const appRows = environmentRows.filter((binding) => binding.hubSpotAppId === input.explicitAppId);
86
+ if (appRows.length === 0) {
87
+ throw new Error(`HubSpot app ${input.explicitAppId} is not registered for ${input.project.displayName}. Pass --app-id for an app in this project.`);
88
+ }
89
+ environmentRows = appRows;
90
+ }
91
+ if (environmentRows.length === 0) {
92
+ throw new Error(`No runtime binding is registered for ${input.project.displayName}. Re-deploy as a linked project to provision flag authoring.`);
93
+ }
94
+ let environment = input.explicitEnvironment;
95
+ if (environment) {
96
+ if (!['dev', 'staging', 'production'].includes(environment)) {
97
+ throw new Error('Require --environment to be dev, staging, or production.');
98
+ }
99
+ if (!environmentRows.some((binding) => binding.environment === environment)) {
100
+ const suffix = input.explicitAppId === undefined ? '' : ` and HubSpot app ${input.explicitAppId}`;
101
+ throw new Error(`No runtime binding matches environment ${environment}${suffix} in ${input.project.displayName}.`);
102
+ }
103
+ }
104
+ else {
105
+ const environments = [...new Set(environmentRows.map((binding) => binding.environment))].sort();
106
+ if (environments.length === 1) {
107
+ environment = environments[0];
108
+ }
109
+ else if (input.allowPrompt && input.prompts) {
110
+ const selected = await input.prompts.select({
111
+ message: 'Which environment?',
112
+ options: environments.map((value) => {
113
+ const rows = environmentRows.filter((binding) => binding.environment === value);
114
+ const ready = rows.filter((binding) => binding.flagAuthoringReady).length;
115
+ const latest = [...rows].sort((a, b) => b.updatedAt.localeCompare(a.updatedAt))[0];
116
+ return {
117
+ value,
118
+ label: value,
119
+ description: `${rows.length} app${rows.length === 1 ? '' : 's'} · ${ready} ready${latest ? ` · updated ${latest.updatedAt}` : ''}`,
120
+ };
121
+ }),
122
+ });
123
+ if (selected === undefined)
124
+ throw new ProjectPickerCancelled();
125
+ environment = selected;
126
+ }
127
+ else {
128
+ throw new Error(`Multiple runtime environments are available for ${input.project.displayName} (${environments.join(', ')}). Pass --environment to choose one.`);
129
+ }
130
+ }
131
+ const appRows = environmentRows
132
+ .filter((binding) => binding.environment === environment)
133
+ .sort((left, right) => left.hubSpotAppId - right.hubSpotAppId);
134
+ let selected;
135
+ if (input.explicitAppId !== undefined) {
136
+ selected = appRows.find((binding) => binding.hubSpotAppId === input.explicitAppId);
137
+ }
138
+ else if (appRows.length === 1) {
139
+ selected = appRows[0];
140
+ }
141
+ else if (input.allowPrompt && input.prompts) {
142
+ const selectedId = await input.prompts.select({
143
+ message: 'Which HubSpot app?',
144
+ ...(input.localAppId && appRows.some((binding) => binding.hubSpotAppId === input.localAppId)
145
+ ? { default: String(input.localAppId) }
146
+ : {}),
147
+ options: appRows.map((binding) => ({
148
+ value: String(binding.hubSpotAppId),
149
+ label: `HubSpot app ${binding.hubSpotAppId}`,
150
+ description: `${input.project.displayName} · ${binding.flagAuthoringReady ? 'flag authoring ready' : 'needs redeploy'} · updated ${binding.updatedAt}`,
151
+ })),
152
+ });
153
+ if (selectedId === undefined)
154
+ throw new ProjectPickerCancelled();
155
+ selected = appRows.find((binding) => binding.hubSpotAppId === Number(selectedId));
156
+ }
157
+ else {
158
+ throw new Error(`Multiple HubSpot apps are registered for ${input.project.displayName}/${environment} (apps ${appRows.map((binding) => binding.hubSpotAppId).join(', ')}). Pass --app-id to choose one.`);
159
+ }
160
+ if (!selected) {
161
+ throw new Error(`No HubSpot app binding is registered for ${input.project.displayName}/${environment}.`);
162
+ }
163
+ if (!selected.flagAuthoringReady) {
164
+ throw new Error(`Flag authoring is not ready for ${input.project.displayName}/${environment} (app ${selected.hubSpotAppId}). Re-deploy as a linked project.`);
165
+ }
166
+ return selected;
167
+ }
168
+ export function createControlPlaneFlagAuthoringClient(input) {
169
+ const basePath = `/v1/accounts/${encodeURIComponent(input.accountId)}/projects/${encodeURIComponent(input.projectId)}/hubspot-apps/${input.hubSpotAppId}/flags`;
170
+ const post = async (action, body) => {
171
+ const response = await input.controlPlane.request({
172
+ path: `${basePath}/${action}?environment=${encodeURIComponent(input.environment)}`,
173
+ method: 'POST',
174
+ body,
175
+ });
176
+ const payload = await readResponseBody(response);
177
+ if (!response.ok) {
178
+ const message = responseMessage(payload) ?? `Control-plane flag ${action} failed.`;
179
+ throw new RuntimeFlagAuthoringError(response.status, message);
180
+ }
181
+ return payload;
182
+ };
183
+ return {
184
+ async listFlags(options) {
185
+ const payload = (await post('list', options?.limit === undefined ? {} : { limit: options.limit }));
186
+ return (payload.flags ?? []).map((flag) => Schema.decodeUnknownSync(schemas.FlagDefinition)(flag));
187
+ },
188
+ async defineFlag(definition) {
189
+ const payload = (await post('define', definition));
190
+ if (!Number.isInteger(payload.syncedSnapshots) || Number(payload.syncedSnapshots) < 0) {
191
+ throw new Error('Control-plane flag define returned an invalid sync count.');
192
+ }
193
+ return {
194
+ flag: Schema.decodeUnknownSync(schemas.FlagDefinition)(payload.flag),
195
+ syncedSnapshots: Number(payload.syncedSnapshots),
196
+ };
197
+ },
198
+ };
199
+ }
200
+ async function readResponseBody(response) {
201
+ const text = await response.text();
202
+ if (text.length === 0)
203
+ return {};
204
+ try {
205
+ return JSON.parse(text);
206
+ }
207
+ catch {
208
+ return { message: text };
209
+ }
210
+ }
211
+ function responseMessage(body) {
212
+ if (!body || typeof body !== 'object')
213
+ return undefined;
214
+ const record = body;
215
+ if (typeof record.message === 'string')
216
+ return record.message;
217
+ if (typeof record.error === 'string')
218
+ return record.error;
219
+ return undefined;
220
+ }
221
+ function controlPlaneResponseError(response, body, fallback) {
222
+ if (response.status === 401) {
223
+ return new Error('Your HS-X login is missing or expired. Run `hs-x login` again.');
224
+ }
225
+ return new Error(`${responseMessage(body) ?? fallback} (status ${response.status}).`);
226
+ }
227
+ //# sourceMappingURL=project-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-picker.js","sourceRoot":"","sources":["../src/project-picker.ts"],"names":[],"mappings":"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"}
package/dist/prompt.d.ts CHANGED
@@ -18,6 +18,14 @@ export declare function promptText(opts: PromptOptions & {
18
18
  readonly allowBack: true;
19
19
  }): Promise<string | undefined | typeof BACK>;
20
20
  export declare function promptText(opts: PromptOptions): Promise<string | undefined>;
21
+ /**
22
+ * Like {@link promptText} but masks what is typed — for secrets (e.g. an OAuth
23
+ * client secret). Readline's own output stays fully muted so the real value can
24
+ * never echo; a separate keypress listener renders one bullet per character
25
+ * (and erases bullets on backspace) so paste activity is still visible. Returns
26
+ * the entered value, or `undefined` off a TTY / on Esc / Ctrl+C / empty input.
27
+ */
28
+ export declare function promptPassword(opts: PromptOptions): Promise<string | undefined>;
21
29
  export declare function isInteractive(stdin?: NodeJS.ReadableStream, stderr?: NodeJS.WritableStream): boolean;
22
30
  export interface ConfirmOptions {
23
31
  readonly message: string;
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}