@hs-x/cli 0.1.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 (302) hide show
  1. package/README.md +1001 -0
  2. package/dist/account-store.d.ts +51 -0
  3. package/dist/account-store.d.ts.map +1 -0
  4. package/dist/account-store.js +138 -0
  5. package/dist/account-store.js.map +1 -0
  6. package/dist/bin/hs-x.d.ts +3 -0
  7. package/dist/bin/hs-x.d.ts.map +1 -0
  8. package/dist/bin/hs-x.js +47 -0
  9. package/dist/bin/hs-x.js.map +1 -0
  10. package/dist/cli/index.d.ts +3 -0
  11. package/dist/cli/index.d.ts.map +1 -0
  12. package/dist/cli/index.js +595 -0
  13. package/dist/cli/index.js.map +1 -0
  14. package/dist/cli-error.d.ts +36 -0
  15. package/dist/cli-error.d.ts.map +1 -0
  16. package/dist/cli-error.js +40 -0
  17. package/dist/cli-error.js.map +1 -0
  18. package/dist/cloudflare-auth.d.ts +25 -0
  19. package/dist/cloudflare-auth.d.ts.map +1 -0
  20. package/dist/cloudflare-auth.js +251 -0
  21. package/dist/cloudflare-auth.js.map +1 -0
  22. package/dist/cloudflare-kv.d.ts +23 -0
  23. package/dist/cloudflare-kv.d.ts.map +1 -0
  24. package/dist/cloudflare-kv.js +101 -0
  25. package/dist/cloudflare-kv.js.map +1 -0
  26. package/dist/cloudflare-oauth-store.d.ts +16 -0
  27. package/dist/cloudflare-oauth-store.d.ts.map +1 -0
  28. package/dist/cloudflare-oauth-store.js +80 -0
  29. package/dist/cloudflare-oauth-store.js.map +1 -0
  30. package/dist/cloudflare-oauth.d.ts +82 -0
  31. package/dist/cloudflare-oauth.d.ts.map +1 -0
  32. package/dist/cloudflare-oauth.js +336 -0
  33. package/dist/cloudflare-oauth.js.map +1 -0
  34. package/dist/cloudflare-pointer.d.ts +13 -0
  35. package/dist/cloudflare-pointer.d.ts.map +1 -0
  36. package/dist/cloudflare-pointer.js +46 -0
  37. package/dist/cloudflare-pointer.js.map +1 -0
  38. package/dist/command-history.d.ts +7 -0
  39. package/dist/command-history.d.ts.map +1 -0
  40. package/dist/command-history.js +34 -0
  41. package/dist/command-history.js.map +1 -0
  42. package/dist/commands/account.d.ts +7 -0
  43. package/dist/commands/account.d.ts.map +1 -0
  44. package/dist/commands/account.js +315 -0
  45. package/dist/commands/account.js.map +1 -0
  46. package/dist/commands/api.d.ts +36 -0
  47. package/dist/commands/api.d.ts.map +1 -0
  48. package/dist/commands/api.js +521 -0
  49. package/dist/commands/api.js.map +1 -0
  50. package/dist/commands/completion.d.ts +7 -0
  51. package/dist/commands/completion.d.ts.map +1 -0
  52. package/dist/commands/completion.js +121 -0
  53. package/dist/commands/completion.js.map +1 -0
  54. package/dist/commands/connect.d.ts +7 -0
  55. package/dist/commands/connect.d.ts.map +1 -0
  56. package/dist/commands/connect.js +1123 -0
  57. package/dist/commands/connect.js.map +1 -0
  58. package/dist/commands/control-plane-read.d.ts +22 -0
  59. package/dist/commands/control-plane-read.d.ts.map +1 -0
  60. package/dist/commands/control-plane-read.js +350 -0
  61. package/dist/commands/control-plane-read.js.map +1 -0
  62. package/dist/commands/deploy-promote.d.ts +14 -0
  63. package/dist/commands/deploy-promote.d.ts.map +1 -0
  64. package/dist/commands/deploy-promote.js +105 -0
  65. package/dist/commands/deploy-promote.js.map +1 -0
  66. package/dist/commands/deploy.d.ts +18 -0
  67. package/dist/commands/deploy.d.ts.map +1 -0
  68. package/dist/commands/deploy.js +2764 -0
  69. package/dist/commands/deploy.js.map +1 -0
  70. package/dist/commands/dev.d.ts +7 -0
  71. package/dist/commands/dev.d.ts.map +1 -0
  72. package/dist/commands/dev.js +913 -0
  73. package/dist/commands/dev.js.map +1 -0
  74. package/dist/commands/doctor.d.ts +8 -0
  75. package/dist/commands/doctor.d.ts.map +1 -0
  76. package/dist/commands/doctor.js +258 -0
  77. package/dist/commands/doctor.js.map +1 -0
  78. package/dist/commands/flags.d.ts +22 -0
  79. package/dist/commands/flags.d.ts.map +1 -0
  80. package/dist/commands/flags.js +185 -0
  81. package/dist/commands/flags.js.map +1 -0
  82. package/dist/commands/help-command.d.ts +13 -0
  83. package/dist/commands/help-command.d.ts.map +1 -0
  84. package/dist/commands/help-command.js +482 -0
  85. package/dist/commands/help-command.js.map +1 -0
  86. package/dist/commands/history.d.ts +6 -0
  87. package/dist/commands/history.d.ts.map +1 -0
  88. package/dist/commands/history.js +42 -0
  89. package/dist/commands/history.js.map +1 -0
  90. package/dist/commands/init.d.ts +8 -0
  91. package/dist/commands/init.d.ts.map +1 -0
  92. package/dist/commands/init.js +233 -0
  93. package/dist/commands/init.js.map +1 -0
  94. package/dist/commands/link.d.ts +26 -0
  95. package/dist/commands/link.d.ts.map +1 -0
  96. package/dist/commands/link.js +441 -0
  97. package/dist/commands/link.js.map +1 -0
  98. package/dist/commands/login.d.ts +8 -0
  99. package/dist/commands/login.d.ts.map +1 -0
  100. package/dist/commands/login.js +381 -0
  101. package/dist/commands/login.js.map +1 -0
  102. package/dist/commands/migrate.d.ts +8 -0
  103. package/dist/commands/migrate.d.ts.map +1 -0
  104. package/dist/commands/migrate.js +258 -0
  105. package/dist/commands/migrate.js.map +1 -0
  106. package/dist/commands/rollback.d.ts +21 -0
  107. package/dist/commands/rollback.d.ts.map +1 -0
  108. package/dist/commands/rollback.js +301 -0
  109. package/dist/commands/rollback.js.map +1 -0
  110. package/dist/commands/secrets.d.ts +7 -0
  111. package/dist/commands/secrets.d.ts.map +1 -0
  112. package/dist/commands/secrets.js +230 -0
  113. package/dist/commands/secrets.js.map +1 -0
  114. package/dist/commands/status.d.ts +7 -0
  115. package/dist/commands/status.d.ts.map +1 -0
  116. package/dist/commands/status.js +241 -0
  117. package/dist/commands/status.js.map +1 -0
  118. package/dist/commands/unlink.d.ts +21 -0
  119. package/dist/commands/unlink.d.ts.map +1 -0
  120. package/dist/commands/unlink.js +83 -0
  121. package/dist/commands/unlink.js.map +1 -0
  122. package/dist/commands/update.d.ts +11 -0
  123. package/dist/commands/update.d.ts.map +1 -0
  124. package/dist/commands/update.js +154 -0
  125. package/dist/commands/update.js.map +1 -0
  126. package/dist/commands/validate.d.ts +9 -0
  127. package/dist/commands/validate.d.ts.map +1 -0
  128. package/dist/commands/validate.js +39 -0
  129. package/dist/commands/validate.js.map +1 -0
  130. package/dist/config.d.ts +12 -0
  131. package/dist/config.d.ts.map +1 -0
  132. package/dist/config.js +64 -0
  133. package/dist/config.js.map +1 -0
  134. package/dist/constants.d.ts +4 -0
  135. package/dist/constants.d.ts.map +1 -0
  136. package/dist/constants.js +4 -0
  137. package/dist/constants.js.map +1 -0
  138. package/dist/control-plane-fetch.d.ts +34 -0
  139. package/dist/control-plane-fetch.d.ts.map +1 -0
  140. package/dist/control-plane-fetch.js +73 -0
  141. package/dist/control-plane-fetch.js.map +1 -0
  142. package/dist/control-plane-loader.d.ts +16 -0
  143. package/dist/control-plane-loader.d.ts.map +1 -0
  144. package/dist/control-plane-loader.js +24 -0
  145. package/dist/control-plane-loader.js.map +1 -0
  146. package/dist/dev/compat-shim.d.ts +40 -0
  147. package/dist/dev/compat-shim.d.ts.map +1 -0
  148. package/dist/dev/compat-shim.js +65 -0
  149. package/dist/dev/compat-shim.js.map +1 -0
  150. package/dist/dev/event-bus.d.ts +27 -0
  151. package/dist/dev/event-bus.d.ts.map +1 -0
  152. package/dist/dev/event-bus.js +32 -0
  153. package/dist/dev/event-bus.js.map +1 -0
  154. package/dist/dev/log-server.d.ts +52 -0
  155. package/dist/dev/log-server.d.ts.map +1 -0
  156. package/dist/dev/log-server.js +216 -0
  157. package/dist/dev/log-server.js.map +1 -0
  158. package/dist/dev/session-manager.d.ts +33 -0
  159. package/dist/dev/session-manager.d.ts.map +1 -0
  160. package/dist/dev/session-manager.js +132 -0
  161. package/dist/dev/session-manager.js.map +1 -0
  162. package/dist/dev/stream-renderer.d.ts +22 -0
  163. package/dist/dev/stream-renderer.d.ts.map +1 -0
  164. package/dist/dev/stream-renderer.js +65 -0
  165. package/dist/dev/stream-renderer.js.map +1 -0
  166. package/dist/dev/tunnel.d.ts +40 -0
  167. package/dist/dev/tunnel.d.ts.map +1 -0
  168. package/dist/dev/tunnel.js +139 -0
  169. package/dist/dev/tunnel.js.map +1 -0
  170. package/dist/effect-http.d.ts +10 -0
  171. package/dist/effect-http.d.ts.map +1 -0
  172. package/dist/effect-http.js +38 -0
  173. package/dist/effect-http.js.map +1 -0
  174. package/dist/errors-registry.d.ts +11 -0
  175. package/dist/errors-registry.d.ts.map +1 -0
  176. package/dist/errors-registry.js +554 -0
  177. package/dist/errors-registry.js.map +1 -0
  178. package/dist/errors.d.ts +58 -0
  179. package/dist/errors.d.ts.map +1 -0
  180. package/dist/errors.js +30 -0
  181. package/dist/errors.js.map +1 -0
  182. package/dist/help.d.ts +6 -0
  183. package/dist/help.d.ts.map +1 -0
  184. package/dist/help.js +100 -0
  185. package/dist/help.js.map +1 -0
  186. package/dist/history.d.ts +15 -0
  187. package/dist/history.d.ts.map +1 -0
  188. package/dist/history.js +69 -0
  189. package/dist/history.js.map +1 -0
  190. package/dist/hubspot-auth.d.ts +53 -0
  191. package/dist/hubspot-auth.d.ts.map +1 -0
  192. package/dist/hubspot-auth.js +301 -0
  193. package/dist/hubspot-auth.js.map +1 -0
  194. package/dist/hubspot-developer-client.d.ts +10 -0
  195. package/dist/hubspot-developer-client.d.ts.map +1 -0
  196. package/dist/hubspot-developer-client.js +212 -0
  197. package/dist/hubspot-developer-client.js.map +1 -0
  198. package/dist/index.d.ts +5 -0
  199. package/dist/index.d.ts.map +1 -0
  200. package/dist/index.js +4 -0
  201. package/dist/index.js.map +1 -0
  202. package/dist/init/templates.d.ts +18 -0
  203. package/dist/init/templates.d.ts.map +1 -0
  204. package/dist/init/templates.js +239 -0
  205. package/dist/init/templates.js.map +1 -0
  206. package/dist/load-env.d.ts +16 -0
  207. package/dist/load-env.d.ts.map +1 -0
  208. package/dist/load-env.js +69 -0
  209. package/dist/load-env.js.map +1 -0
  210. package/dist/machine-id.d.ts +3 -0
  211. package/dist/machine-id.d.ts.map +1 -0
  212. package/dist/machine-id.js +41 -0
  213. package/dist/machine-id.js.map +1 -0
  214. package/dist/paths.d.ts +4 -0
  215. package/dist/paths.d.ts.map +1 -0
  216. package/dist/paths.js +19 -0
  217. package/dist/paths.js.map +1 -0
  218. package/dist/prompt.d.ts +43 -0
  219. package/dist/prompt.d.ts.map +1 -0
  220. package/dist/prompt.js +379 -0
  221. package/dist/prompt.js.map +1 -0
  222. package/dist/reporter/human.d.ts +28 -0
  223. package/dist/reporter/human.d.ts.map +1 -0
  224. package/dist/reporter/human.js +126 -0
  225. package/dist/reporter/human.js.map +1 -0
  226. package/dist/reporter/index.d.ts +14 -0
  227. package/dist/reporter/index.d.ts.map +1 -0
  228. package/dist/reporter/index.js +37 -0
  229. package/dist/reporter/index.js.map +1 -0
  230. package/dist/reporter/json.d.ts +43 -0
  231. package/dist/reporter/json.d.ts.map +1 -0
  232. package/dist/reporter/json.js +146 -0
  233. package/dist/reporter/json.js.map +1 -0
  234. package/dist/reporter/style.d.ts +34 -0
  235. package/dist/reporter/style.d.ts.map +1 -0
  236. package/dist/reporter/style.js +97 -0
  237. package/dist/reporter/style.js.map +1 -0
  238. package/dist/reporter/types.d.ts +41 -0
  239. package/dist/reporter/types.d.ts.map +1 -0
  240. package/dist/reporter/types.js +2 -0
  241. package/dist/reporter/types.js.map +1 -0
  242. package/dist/result.d.ts +4 -0
  243. package/dist/result.d.ts.map +1 -0
  244. package/dist/result.js +2 -0
  245. package/dist/result.js.map +1 -0
  246. package/dist/services/account-store.d.ts +31 -0
  247. package/dist/services/account-store.d.ts.map +1 -0
  248. package/dist/services/account-store.js +135 -0
  249. package/dist/services/account-store.js.map +1 -0
  250. package/dist/services/app-paths.d.ts +25 -0
  251. package/dist/services/app-paths.d.ts.map +1 -0
  252. package/dist/services/app-paths.js +34 -0
  253. package/dist/services/app-paths.js.map +1 -0
  254. package/dist/services/cloudflare-auth.d.ts +83 -0
  255. package/dist/services/cloudflare-auth.d.ts.map +1 -0
  256. package/dist/services/cloudflare-auth.js +30 -0
  257. package/dist/services/cloudflare-auth.js.map +1 -0
  258. package/dist/services/cloudflare-kv.d.ts +45 -0
  259. package/dist/services/cloudflare-kv.d.ts.map +1 -0
  260. package/dist/services/cloudflare-kv.js +151 -0
  261. package/dist/services/cloudflare-kv.js.map +1 -0
  262. package/dist/services/command-history.d.ts +29 -0
  263. package/dist/services/command-history.d.ts.map +1 -0
  264. package/dist/services/command-history.js +62 -0
  265. package/dist/services/command-history.js.map +1 -0
  266. package/dist/services/control-plane.d.ts +32 -0
  267. package/dist/services/control-plane.d.ts.map +1 -0
  268. package/dist/services/control-plane.js +57 -0
  269. package/dist/services/control-plane.js.map +1 -0
  270. package/dist/services/env-loader.d.ts +18 -0
  271. package/dist/services/env-loader.d.ts.map +1 -0
  272. package/dist/services/env-loader.js +34 -0
  273. package/dist/services/env-loader.js.map +1 -0
  274. package/dist/services/http.d.ts +19 -0
  275. package/dist/services/http.d.ts.map +1 -0
  276. package/dist/services/http.js +9 -0
  277. package/dist/services/http.js.map +1 -0
  278. package/dist/services/live.d.ts +16 -0
  279. package/dist/services/live.d.ts.map +1 -0
  280. package/dist/services/live.js +26 -0
  281. package/dist/services/live.js.map +1 -0
  282. package/dist/services/machine-id.d.ts +18 -0
  283. package/dist/services/machine-id.d.ts.map +1 -0
  284. package/dist/services/machine-id.js +39 -0
  285. package/dist/services/machine-id.js.map +1 -0
  286. package/dist/services/reporter.d.ts +55 -0
  287. package/dist/services/reporter.d.ts.map +1 -0
  288. package/dist/services/reporter.js +49 -0
  289. package/dist/services/reporter.js.map +1 -0
  290. package/dist/state-store.d.ts +39 -0
  291. package/dist/state-store.d.ts.map +1 -0
  292. package/dist/state-store.js +89 -0
  293. package/dist/state-store.js.map +1 -0
  294. package/dist/telemetry.d.ts +13 -0
  295. package/dist/telemetry.d.ts.map +1 -0
  296. package/dist/telemetry.js +129 -0
  297. package/dist/telemetry.js.map +1 -0
  298. package/dist/tenant-state.d.ts +69 -0
  299. package/dist/tenant-state.d.ts.map +1 -0
  300. package/dist/tenant-state.js +161 -0
  301. package/dist/tenant-state.js.map +1 -0
  302. package/package.json +38 -0
@@ -0,0 +1,212 @@
1
+ import { createHubSpotDeveloperClient, } from '@hs-x/hubspot-cli';
2
+ import { HttpClientRequest, Schema, schemas } from '@hs-x/types';
3
+ import { controlPlaneAuthHeaders } from './control-plane-fetch.js';
4
+ import { executeCliHttp } from './effect-http.js';
5
+ import { discoverHubSpotAccounts } from './hubspot-auth.js';
6
+ export async function createDeployHubSpotDeveloperClient({ argv, local, allowedOperations, cwd = process.cwd(), }) {
7
+ if (local) {
8
+ if (hasFlag(argv, '--control-plane-url') || hasFlag(argv, '--account-id')) {
9
+ await requestControlPlaneHubSpotLease(argv, allowedOperations);
10
+ }
11
+ return createHubSpotDeveloperClient({
12
+ developerAccountId: Number(resolveFlag(argv, '--developer-account-id') ?? '12345'),
13
+ adapter: createLocalHubSpotDeployAdapter(),
14
+ });
15
+ }
16
+ const lease = await requestControlPlaneHubSpotLease(argv, allowedOperations);
17
+ if (lease) {
18
+ if (!lease.personalAccessKey) {
19
+ throw new Error('Control-plane HubSpot lease did not include PAK material.');
20
+ }
21
+ return createHubSpotDeveloperClient({
22
+ developerAccountId: lease.developerAccountId,
23
+ personalAccessKey: lease.personalAccessKey,
24
+ ...(lease.developerApiKey ? { developerApiKey: lease.developerApiKey } : {}),
25
+ });
26
+ }
27
+ let developerAccountId = resolveFlag(argv, '--developer-account-id') ?? process.env.HSX_HUBSPOT_DEVELOPER_ACCOUNT_ID;
28
+ let personalAccessKey = resolveFlag(argv, '--pak') ?? process.env.HSX_HUBSPOT_PAK;
29
+ const developerApiKey = resolveFlag(argv, '--developer-api-key') ?? process.env.HSX_HUBSPOT_DEVELOPER_API_KEY;
30
+ // Fall back to the HubSpot CLI config (~/.hscli/config.yml, hubspot.config.yml)
31
+ // that `hs-x doctor` already reads, so a configured machine can deploy without
32
+ // re-passing --pak / --developer-account-id. Both are taken from one account
33
+ // (the default, or the sole configured account) to stay coherent; an explicit
34
+ // flag/env always wins.
35
+ if (!developerAccountId || !personalAccessKey) {
36
+ const discovered = await discoverHubSpotAccounts(cwd);
37
+ const account = discovered?.accounts.find((candidate) => candidate.isDefault) ??
38
+ (discovered?.accounts.length === 1 ? discovered.accounts[0] : undefined);
39
+ if (account) {
40
+ developerAccountId ??= String(account.portalId);
41
+ personalAccessKey ??= account.personalAccessKey;
42
+ }
43
+ }
44
+ if (!developerAccountId) {
45
+ throw new Error('HubSpot developer account id is required. Pass --developer-account-id, set HSX_HUBSPOT_DEVELOPER_ACCOUNT_ID, or configure a HubSpot CLI account (see `hs-x doctor`).');
46
+ }
47
+ if (!personalAccessKey) {
48
+ throw new Error('HubSpot PAK is required. Pass --pak, set HSX_HUBSPOT_PAK, or configure a HubSpot CLI account (see `hs-x doctor`).');
49
+ }
50
+ return createHubSpotDeveloperClient({
51
+ developerAccountId,
52
+ personalAccessKey,
53
+ ...(developerApiKey ? { developerApiKey } : {}),
54
+ });
55
+ }
56
+ async function requestControlPlaneHubSpotLease(argv, allowedOperations) {
57
+ const controlPlaneUrl = resolveFlag(argv, '--control-plane-url') ?? process.env.HSX_CONTROL_PLANE_URL;
58
+ const accountId = resolveFlag(argv, '--account-id') ?? process.env.HSX_ACCOUNT_ID;
59
+ if (!controlPlaneUrl && !accountId) {
60
+ return undefined;
61
+ }
62
+ if (!controlPlaneUrl || !accountId) {
63
+ throw new Error('Control-plane lease requires both --control-plane-url/HSX_CONTROL_PLANE_URL and --account-id/HSX_ACCOUNT_ID.');
64
+ }
65
+ const userId = resolveFlag(argv, '--user-id') ?? process.env.HSX_USER_ID ?? 'local-cli-user';
66
+ const response = await hostedHttp({
67
+ url: new URL(`/v1/accounts/${encodeURIComponent(accountId)}/hubspot/lease`, controlPlaneUrl),
68
+ method: 'POST',
69
+ headers: await controlPlaneAuthHeaders(userId),
70
+ body: {
71
+ deployId: resolveFlag(argv, '--deploy-id'),
72
+ allowedOperations,
73
+ },
74
+ });
75
+ const body = await response.json();
76
+ if (!response.ok) {
77
+ throw new Error(isRecord(body) && typeof body.message === 'string'
78
+ ? body.message
79
+ : `Control-plane HubSpot lease failed with status ${response.status}`);
80
+ }
81
+ return Schema.decodeUnknownSync(schemas.HubSpotDeveloperLease)(body);
82
+ }
83
+ async function hostedHttp(input) {
84
+ const headers = { ...(input.headers ?? {}) };
85
+ let request = HttpClientRequest.make(input.method ?? 'GET')(input.url).pipe(HttpClientRequest.setHeaders(headers));
86
+ if (input.body !== undefined) {
87
+ headers['content-type'] = headers['content-type'] ?? 'application/json';
88
+ request = request.pipe(HttpClientRequest.setHeaders(headers), HttpClientRequest.bodyText(typeof input.body === 'string' ? input.body : JSON.stringify(input.body), headers['content-type']));
89
+ }
90
+ return executeCliHttp(request);
91
+ }
92
+ function createLocalHubSpotDeployAdapter() {
93
+ return {
94
+ async uploadProject(_accountId, projectName) {
95
+ return { buildId: deterministicNumber(`build:${projectName}`, 10_000) };
96
+ },
97
+ async deployProjectV2(_accountId, projectName, buildId) {
98
+ return { deployId: deterministicNumber(`deploy:${projectName}:${buildId}`, 10_000) };
99
+ },
100
+ async getBuildStatus(_accountId, projectName, buildId) {
101
+ return { projectName, buildId, status: 'SUCCESS' };
102
+ },
103
+ async getDeployStatus(_accountId, projectName, deployId) {
104
+ return { projectName, deployId, status: 'SUCCESS' };
105
+ },
106
+ async fetchProject(_accountId, projectName) {
107
+ return { id: deterministicNumber(`project:${projectName}`, 10_000), name: projectName };
108
+ },
109
+ async createProject(_accountId, projectName) {
110
+ return { id: deterministicNumber(`project:${projectName}`, 10_000), name: projectName };
111
+ },
112
+ async fetchProjectComponentsMetadata(_accountId, projectId) {
113
+ return {
114
+ topLevelComponentMetadata: [
115
+ {
116
+ componentName: `project-${projectId}`,
117
+ type: { name: 'private-app' },
118
+ deployOutput: { appId: 321 },
119
+ featureComponents: [],
120
+ },
121
+ ],
122
+ };
123
+ },
124
+ async fetchAppMetadataBySourceId(_accountId, projectId, appUid) {
125
+ return { id: 321, projectId, sourceId: appUid };
126
+ },
127
+ async fetchAppMetadataByUid(_accountId, appUid) {
128
+ return { id: 321, sourceId: appUid };
129
+ },
130
+ async listMigrationApps() {
131
+ return { results: [{ appId: 321, name: 'Local migrated App Card app' }] };
132
+ },
133
+ async migrateCardViews(_accountId, request) {
134
+ return {
135
+ accepted: true,
136
+ appId: request.appId,
137
+ legacyCrmCardId: request.legacyCrmCardId,
138
+ replacementAppCardId: request.replacementAppCardId,
139
+ ...(request.helpDeskAppCardId ? { helpDeskAppCardId: request.helpDeskAppCardId } : {}),
140
+ };
141
+ },
142
+ async listProperties(_accountId, objectType) {
143
+ return {
144
+ objectType,
145
+ results: objectType === 'contacts' ? [{ name: 'email', type: 'string' }] : [],
146
+ };
147
+ },
148
+ async createProperty(_accountId, objectType, request) {
149
+ return { objectType, name: request.name, label: request.label, type: request.type };
150
+ },
151
+ async updateProperty(_accountId, objectType, propertyName, request) {
152
+ return {
153
+ objectType,
154
+ name: propertyName,
155
+ type: request.type ?? 'string',
156
+ ...(request.label ? { label: request.label } : {}),
157
+ };
158
+ },
159
+ async listSchemas() {
160
+ return { results: [] };
161
+ },
162
+ async createSchema(_accountId, request) {
163
+ return {
164
+ name: request.name,
165
+ labels: request.labels,
166
+ ...(request.properties
167
+ ? {
168
+ properties: request.properties.map((property) => ({
169
+ name: property.name,
170
+ label: property.label,
171
+ type: property.type,
172
+ ...(property.fieldType ? { fieldType: property.fieldType } : {}),
173
+ ...(property.groupName ? { groupName: property.groupName } : {}),
174
+ })),
175
+ }
176
+ : {}),
177
+ };
178
+ },
179
+ };
180
+ }
181
+ function deterministicNumber(input, modulo) {
182
+ let hash = 2_166_136_261;
183
+ for (let index = 0; index < input.length; index += 1) {
184
+ hash ^= input.charCodeAt(index);
185
+ hash = Math.imul(hash, 16_777_619);
186
+ }
187
+ return Math.abs(hash >>> 0) % modulo;
188
+ }
189
+ function hasFlag(argv, flag) {
190
+ return argv.includes(flag);
191
+ }
192
+ function isFlagValue(value) {
193
+ return value !== undefined && value.length > 0 && !value.startsWith('-');
194
+ }
195
+ function resolveFlag(argv, flag) {
196
+ const index = argv.indexOf(flag);
197
+ if (index !== -1) {
198
+ const next = argv[index + 1];
199
+ if (isFlagValue(next))
200
+ return next;
201
+ }
202
+ const prefix = `${flag}=`;
203
+ const found = argv.find((arg) => arg.startsWith(prefix));
204
+ if (!found)
205
+ return undefined;
206
+ const value = found.slice(prefix.length);
207
+ return value.length > 0 ? value : undefined;
208
+ }
209
+ function isRecord(value) {
210
+ return typeof value === 'object' && value !== null;
211
+ }
212
+ //# sourceMappingURL=hubspot-developer-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hubspot-developer-client.js","sourceRoot":"","sources":["../src/hubspot-developer-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { runCli } from './cli/index.js';
2
+ export type { CliResult } from './result.js';
3
+ export { CLI_VERSION } from './constants.js';
4
+ export { DEFAULT_CONTROL_PLANE_URL, resolveControlPlaneUrl } from './config.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { runCli } from './cli/index.js';
2
+ export { CLI_VERSION } from './constants.js';
3
+ export { DEFAULT_CONTROL_PLANE_URL, resolveControlPlaneUrl } from './config.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,18 @@
1
+ export type TemplateId = 'deals-tagger' | 'empty' | 'sync-source';
2
+ export type TemplateType = TemplateId | 'workflow-action' | 'app' | 'blank' | 'data-sync';
3
+ export interface TemplateFile {
4
+ readonly path: string;
5
+ readonly contents: string;
6
+ }
7
+ export interface Template {
8
+ readonly id: TemplateId;
9
+ readonly label: string;
10
+ readonly description: string;
11
+ files(name: string, options?: {
12
+ readonly appName?: string;
13
+ }): readonly TemplateFile[];
14
+ }
15
+ export declare const TEMPLATES: readonly Template[];
16
+ export declare function getTemplate(id: TemplateId): Template;
17
+ export declare function resolveTemplateType(type: string | undefined): TemplateId | undefined;
18
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/init/templates.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,OAAO,GAAG,aAAa,CAAC;AAClE,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,iBAAiB,GAAG,KAAK,GAAG,OAAO,GAAG,WAAW,CAAC;AAE1F,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,YAAY,EAAE,CAAC;CACvF;AA2OD,eAAO,MAAM,SAAS,EAAE,SAAS,QAAQ,EAAqC,CAAC;AAE/E,wBAAgB,WAAW,CAAC,EAAE,EAAE,UAAU,GAAG,QAAQ,CAIpD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAiBpF"}
@@ -0,0 +1,239 @@
1
+ import { CLI_VERSION } from '../constants.js';
2
+ // Scaffolded apps are installed by an external user OUTSIDE this monorepo, so
3
+ // their package.json must reference PUBLISHED npm version ranges — never
4
+ // `workspace:*`, which only resolves inside the workspace and makes a stranger's
5
+ // `bun install` fail with "Workspace dependency not found". A caret range on the
6
+ // current CLI version also resolves to the local workspace packages when an app
7
+ // is scaffolded inside the monorepo (local versions satisfy the range), so one
8
+ // value works in both contexts.
9
+ const HSX_DEP_RANGE = `^${CLI_VERSION}`;
10
+ function configFile(name, scopes, appName = name) {
11
+ const scopeLines = scopes.map((s) => ` "${s}",`).join('\n');
12
+ return {
13
+ path: 'hsx.config.ts',
14
+ contents: `import { defineApp } from "@hs-x/sdk";
15
+
16
+ export default defineApp({
17
+ name: "${appName}",
18
+ distribution: "private",
19
+ auth: "oauth",
20
+ platformVersion: "2026.03",
21
+ scopes: [
22
+ ${scopeLines}
23
+ ],
24
+ });
25
+ `,
26
+ };
27
+ }
28
+ // npm package names must be lowercase, url-safe slugs. Derive one from the
29
+ // project/app name so package.json, hsx.config.ts, and the generated
30
+ // hsproject.json all agree on the project identity (a mismatch previously made
31
+ // deploys target the wrong HubSpot project and collided in the workspace).
32
+ function slugifyPackageName(value) {
33
+ const slug = value
34
+ .toLowerCase()
35
+ .replace(/[^a-z0-9._-]+/g, '-')
36
+ .replace(/^[-_.]+|[-_.]+$/g, '');
37
+ return slug.length > 0 ? slug : 'hsx-app';
38
+ }
39
+ function packageJsonFile(name, appName) {
40
+ return {
41
+ path: 'package.json',
42
+ contents: `${JSON.stringify({
43
+ name: slugifyPackageName(appName ?? name),
44
+ private: true,
45
+ type: 'module',
46
+ scripts: {
47
+ check: 'hs-x check',
48
+ dev: 'hs-x dev',
49
+ deploy: 'hs-x deploy',
50
+ },
51
+ dependencies: {
52
+ '@hs-x/runtime': HSX_DEP_RANGE,
53
+ '@hs-x/sdk': HSX_DEP_RANGE,
54
+ },
55
+ // The `hs-x` CLI is installed globally (`npm i -g hs-x` / `bunx hs-x`),
56
+ // NOT pinned as a project devDependency: it drags the whole HubSpot
57
+ // local-dev toolchain (ui-extensions-dev-server → webpack/babel) into
58
+ // every scaffold install, turning a starter `bun install` into a
59
+ // multi-minute wait. The `scripts` below call the CLI from PATH.
60
+ }, null, 2)}\n`,
61
+ };
62
+ }
63
+ // A standalone tsconfig so a fresh `hs-x init` project type-checks in an editor
64
+ // and via `tsc` out of the box. Deliberately self-contained (no `extends`, no
65
+ // path aliases) — @hs-x/* resolve from node_modules once `bun install` runs.
66
+ // `noEmit` because HS-X bundles the worker on deploy; tsc here is for the IDE.
67
+ function tsconfigFile() {
68
+ return {
69
+ path: 'tsconfig.json',
70
+ contents: `${JSON.stringify({
71
+ compilerOptions: {
72
+ target: 'ES2022',
73
+ module: 'ESNext',
74
+ moduleResolution: 'Bundler',
75
+ lib: ['ES2023'],
76
+ types: [],
77
+ strict: true,
78
+ noUncheckedIndexedAccess: true,
79
+ verbatimModuleSyntax: true,
80
+ isolatedModules: true,
81
+ esModuleInterop: true,
82
+ skipLibCheck: true,
83
+ resolveJsonModule: true,
84
+ noEmit: true,
85
+ },
86
+ include: ['src', 'hsx.config.ts'],
87
+ }, null, 2)}\n`,
88
+ };
89
+ }
90
+ // Tracks the `.hs-x/` split from the SDK/DX spec: generated refs/types/manifest
91
+ // are regenerated on every `dev`/`deploy` and ignored, while
92
+ // `.hs-x/alchemy.run.ts` (the leaveability artifact) is checked in.
93
+ function gitignoreFile() {
94
+ return {
95
+ path: '.gitignore',
96
+ contents: `node_modules/
97
+ dist/
98
+ *.tsbuildinfo
99
+
100
+ # Env / secrets
101
+ .env
102
+ .env.local
103
+ .dev.vars
104
+
105
+ # Cloudflare / Alchemy local state
106
+ .wrangler/
107
+ .alchemy/
108
+
109
+ # HS-X generated (regenerated on dev/deploy).
110
+ # .hs-x/alchemy.run.ts is the leaveability artifact and IS tracked.
111
+ .hs-x/*
112
+ !.hs-x/alchemy.run.ts
113
+
114
+ # Logs / OS
115
+ *.log
116
+ .DS_Store
117
+ `,
118
+ };
119
+ }
120
+ const dealsTagger = {
121
+ id: 'deals-tagger',
122
+ label: 'Workflow action',
123
+ description: 'A callable HubSpot workflow action with a Worker handler',
124
+ files(name, options = {}) {
125
+ return [
126
+ packageJsonFile(name, options.appName),
127
+ tsconfigFile(),
128
+ gitignoreFile(),
129
+ configFile(name, ['crm.objects.deals.read', 'crm.objects.deals.write'], options.appName),
130
+ {
131
+ path: 'src/workers/deals.ts',
132
+ contents: `import { defineWorker, ok } from "@hs-x/sdk";
133
+
134
+ const worker = defineWorker("deals");
135
+
136
+ worker.tool("tag-high-value-deals", {
137
+ label: "Tag high value deals",
138
+ objectType: "deal",
139
+ input: {
140
+ threshold: { type: "number", label: "Amount threshold", default: 50000 },
141
+ },
142
+ output: {
143
+ tagged: { type: "boolean" },
144
+ },
145
+ async handler({ input, enrolledObject }) {
146
+ const amount = Number(enrolledObject.properties.amount ?? 0);
147
+ return ok({ tagged: amount >= input.threshold });
148
+ },
149
+ });
150
+
151
+ export default worker;
152
+ `,
153
+ },
154
+ ];
155
+ },
156
+ };
157
+ const empty = {
158
+ id: 'empty',
159
+ label: 'Empty app',
160
+ description: 'Bare HS-X project structure; add capabilities later',
161
+ files(name, options = {}) {
162
+ return [
163
+ packageJsonFile(name, options.appName),
164
+ tsconfigFile(),
165
+ gitignoreFile(),
166
+ configFile(name, ['crm.objects.contacts.read'], options.appName),
167
+ {
168
+ path: 'src/workers/.gitkeep',
169
+ contents: '',
170
+ },
171
+ ];
172
+ },
173
+ };
174
+ const syncSource = {
175
+ id: 'sync-source',
176
+ label: 'Data sync source',
177
+ description: 'Webhook-driven sync into a HubSpot custom object',
178
+ files(name, options = {}) {
179
+ return [
180
+ packageJsonFile(name, options.appName),
181
+ tsconfigFile(),
182
+ gitignoreFile(),
183
+ configFile(name, ['crm.objects.custom.read', 'crm.objects.custom.write', 'crm.schemas.custom.read'], options.appName),
184
+ {
185
+ path: 'src/workers/sync.ts',
186
+ contents: `import { defineSource, defineWorker } from "@hs-x/sdk";
187
+
188
+ const incomingCustomers = defineSource.push({
189
+ name: "incoming-customers",
190
+ auth: { type: "hmac", secret: process.env.INCOMING_CUSTOMERS_WEBHOOK_SECRET },
191
+ async receive({ payload }) {
192
+ return { rows: [payload] };
193
+ },
194
+ });
195
+
196
+ const worker = defineWorker("sync");
197
+
198
+ worker.sync(incomingCustomers, {
199
+ schedule: "event",
200
+ into: "p_customer",
201
+ schema: {
202
+ email: "string",
203
+ external_id: "string",
204
+ },
205
+ manageSchema: "full",
206
+ });
207
+
208
+ export default worker;
209
+ `,
210
+ },
211
+ ];
212
+ },
213
+ };
214
+ export const TEMPLATES = [dealsTagger, empty, syncSource];
215
+ export function getTemplate(id) {
216
+ const t = TEMPLATES.find((x) => x.id === id);
217
+ if (!t)
218
+ throw new Error(`Unknown template: ${id}`);
219
+ return t;
220
+ }
221
+ export function resolveTemplateType(type) {
222
+ switch (type) {
223
+ case undefined:
224
+ return undefined;
225
+ case 'deals-tagger':
226
+ case 'workflow-action':
227
+ return 'deals-tagger';
228
+ case 'sync-source':
229
+ case 'data-sync':
230
+ return 'sync-source';
231
+ case 'empty':
232
+ case 'app':
233
+ case 'blank':
234
+ return 'empty';
235
+ default:
236
+ return undefined;
237
+ }
238
+ }
239
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/init/templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * bun auto-loads `.env`/`.env.local` from the CWD only. When `hs-x deploy` runs
3
+ * from a nested app directory, a repo-root `.env.local` — where developers keep
4
+ * `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_API_TOKEN`, HubSpot creds, etc. — is
5
+ * invisible, so a deploy from the app dir fails for want of vars that *are* set
6
+ * at the repo root. This walks up from `start` and fills in any dotenv vars that
7
+ * aren't already present in `process.env`.
8
+ *
9
+ * Already-set vars always win (so a real shell export or the CWD's own
10
+ * bun-loaded `.env.local` is never clobbered), and nearer ancestors win over
11
+ * farther ones. `.env.local` takes precedence over `.env` at the same level.
12
+ */
13
+ export declare function hydrateAncestorEnv(start?: string): void;
14
+ /** Minimal dotenv parser: `KEY=value`, optional `export`, `#` comments, quotes. */
15
+ export declare function parseDotenv(content: string): ReadonlyArray<readonly [string, string]>;
16
+ //# sourceMappingURL=load-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-env.d.ts","sourceRoot":"","sources":["../src/load-env.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,GAAE,MAAsB,GAAG,IAAI,CAUtE;AAgBD,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAqBrF"}
@@ -0,0 +1,69 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { dirname, join, resolve } from 'node:path';
3
+ /**
4
+ * bun auto-loads `.env`/`.env.local` from the CWD only. When `hs-x deploy` runs
5
+ * from a nested app directory, a repo-root `.env.local` — where developers keep
6
+ * `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_API_TOKEN`, HubSpot creds, etc. — is
7
+ * invisible, so a deploy from the app dir fails for want of vars that *are* set
8
+ * at the repo root. This walks up from `start` and fills in any dotenv vars that
9
+ * aren't already present in `process.env`.
10
+ *
11
+ * Already-set vars always win (so a real shell export or the CWD's own
12
+ * bun-loaded `.env.local` is never clobbered), and nearer ancestors win over
13
+ * farther ones. `.env.local` takes precedence over `.env` at the same level.
14
+ */
15
+ export function hydrateAncestorEnv(start = process.cwd()) {
16
+ let dir = resolve(start);
17
+ for (;;) {
18
+ for (const name of ['.env.local', '.env']) {
19
+ applyDotenvFile(join(dir, name));
20
+ }
21
+ const parent = dirname(dir);
22
+ if (parent === dir)
23
+ break;
24
+ dir = parent;
25
+ }
26
+ }
27
+ function applyDotenvFile(path) {
28
+ let content;
29
+ try {
30
+ content = readFileSync(path, 'utf8');
31
+ }
32
+ catch {
33
+ return; // missing/unreadable file — nothing to load here
34
+ }
35
+ for (const [key, value] of parseDotenv(content)) {
36
+ if (process.env[key] === undefined) {
37
+ process.env[key] = value;
38
+ }
39
+ }
40
+ }
41
+ /** Minimal dotenv parser: `KEY=value`, optional `export`, `#` comments, quotes. */
42
+ export function parseDotenv(content) {
43
+ const entries = [];
44
+ for (const rawLine of content.split(/\r?\n/)) {
45
+ const line = rawLine.trim();
46
+ if (line === '' || line.startsWith('#'))
47
+ continue;
48
+ const match = line.match(/^(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/);
49
+ if (!match)
50
+ continue;
51
+ const key = match[1];
52
+ let value = (match[2] ?? '').trim();
53
+ const quote = value[0];
54
+ if ((quote === '"' || quote === "'") && value.endsWith(quote) && value.length >= 2) {
55
+ value = value.slice(1, -1);
56
+ if (quote === '"')
57
+ value = value.replace(/\\n/g, '\n').replace(/\\r/g, '\r');
58
+ }
59
+ else {
60
+ // Strip an inline comment from an unquoted value (` # ...`).
61
+ const hash = value.indexOf(' #');
62
+ if (hash !== -1)
63
+ value = value.slice(0, hash).trim();
64
+ }
65
+ entries.push([key, value]);
66
+ }
67
+ return entries;
68
+ }
69
+ //# sourceMappingURL=load-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-env.js","sourceRoot":"","sources":["../src/load-env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function defaultMachineIdPath(): string;
2
+ export declare function getMachineId(path?: string): Promise<string>;
3
+ //# sourceMappingURL=machine-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine-id.d.ts","sourceRoot":"","sources":["../src/machine-id.ts"],"names":[],"mappings":"AAOA,wBAAgB,oBAAoB,IAAI,MAAM,CAI7C;AAED,wBAAsB,YAAY,CAAC,IAAI,GAAE,MAA+B,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBzF"}