@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.
- package/README.md +1001 -0
- package/dist/account-store.d.ts +51 -0
- package/dist/account-store.d.ts.map +1 -0
- package/dist/account-store.js +138 -0
- package/dist/account-store.js.map +1 -0
- package/dist/bin/hs-x.d.ts +3 -0
- package/dist/bin/hs-x.d.ts.map +1 -0
- package/dist/bin/hs-x.js +47 -0
- package/dist/bin/hs-x.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +595 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli-error.d.ts +36 -0
- package/dist/cli-error.d.ts.map +1 -0
- package/dist/cli-error.js +40 -0
- package/dist/cli-error.js.map +1 -0
- package/dist/cloudflare-auth.d.ts +25 -0
- package/dist/cloudflare-auth.d.ts.map +1 -0
- package/dist/cloudflare-auth.js +251 -0
- package/dist/cloudflare-auth.js.map +1 -0
- package/dist/cloudflare-kv.d.ts +23 -0
- package/dist/cloudflare-kv.d.ts.map +1 -0
- package/dist/cloudflare-kv.js +101 -0
- package/dist/cloudflare-kv.js.map +1 -0
- package/dist/cloudflare-oauth-store.d.ts +16 -0
- package/dist/cloudflare-oauth-store.d.ts.map +1 -0
- package/dist/cloudflare-oauth-store.js +80 -0
- package/dist/cloudflare-oauth-store.js.map +1 -0
- package/dist/cloudflare-oauth.d.ts +82 -0
- package/dist/cloudflare-oauth.d.ts.map +1 -0
- package/dist/cloudflare-oauth.js +336 -0
- package/dist/cloudflare-oauth.js.map +1 -0
- package/dist/cloudflare-pointer.d.ts +13 -0
- package/dist/cloudflare-pointer.d.ts.map +1 -0
- package/dist/cloudflare-pointer.js +46 -0
- package/dist/cloudflare-pointer.js.map +1 -0
- package/dist/command-history.d.ts +7 -0
- package/dist/command-history.d.ts.map +1 -0
- package/dist/command-history.js +34 -0
- package/dist/command-history.js.map +1 -0
- package/dist/commands/account.d.ts +7 -0
- package/dist/commands/account.d.ts.map +1 -0
- package/dist/commands/account.js +315 -0
- package/dist/commands/account.js.map +1 -0
- package/dist/commands/api.d.ts +36 -0
- package/dist/commands/api.d.ts.map +1 -0
- package/dist/commands/api.js +521 -0
- package/dist/commands/api.js.map +1 -0
- package/dist/commands/completion.d.ts +7 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +121 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/connect.d.ts +7 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +1123 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/control-plane-read.d.ts +22 -0
- package/dist/commands/control-plane-read.d.ts.map +1 -0
- package/dist/commands/control-plane-read.js +350 -0
- package/dist/commands/control-plane-read.js.map +1 -0
- package/dist/commands/deploy-promote.d.ts +14 -0
- package/dist/commands/deploy-promote.d.ts.map +1 -0
- package/dist/commands/deploy-promote.js +105 -0
- package/dist/commands/deploy-promote.js.map +1 -0
- package/dist/commands/deploy.d.ts +18 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +2764 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/dev.d.ts +7 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +913 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/doctor.d.ts +8 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +258 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/flags.d.ts +22 -0
- package/dist/commands/flags.d.ts.map +1 -0
- package/dist/commands/flags.js +185 -0
- package/dist/commands/flags.js.map +1 -0
- package/dist/commands/help-command.d.ts +13 -0
- package/dist/commands/help-command.d.ts.map +1 -0
- package/dist/commands/help-command.js +482 -0
- package/dist/commands/help-command.js.map +1 -0
- package/dist/commands/history.d.ts +6 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +42 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +233 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/link.d.ts +26 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/link.js +441 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/login.d.ts +8 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +381 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/migrate.d.ts +8 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +258 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/rollback.d.ts +21 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +301 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/secrets.d.ts +7 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +230 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +241 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/unlink.d.ts +21 -0
- package/dist/commands/unlink.d.ts.map +1 -0
- package/dist/commands/unlink.js +83 -0
- package/dist/commands/unlink.js.map +1 -0
- package/dist/commands/update.d.ts +11 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +154 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.d.ts +9 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +39 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +64 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +4 -0
- package/dist/constants.js.map +1 -0
- package/dist/control-plane-fetch.d.ts +34 -0
- package/dist/control-plane-fetch.d.ts.map +1 -0
- package/dist/control-plane-fetch.js +73 -0
- package/dist/control-plane-fetch.js.map +1 -0
- package/dist/control-plane-loader.d.ts +16 -0
- package/dist/control-plane-loader.d.ts.map +1 -0
- package/dist/control-plane-loader.js +24 -0
- package/dist/control-plane-loader.js.map +1 -0
- package/dist/dev/compat-shim.d.ts +40 -0
- package/dist/dev/compat-shim.d.ts.map +1 -0
- package/dist/dev/compat-shim.js +65 -0
- package/dist/dev/compat-shim.js.map +1 -0
- package/dist/dev/event-bus.d.ts +27 -0
- package/dist/dev/event-bus.d.ts.map +1 -0
- package/dist/dev/event-bus.js +32 -0
- package/dist/dev/event-bus.js.map +1 -0
- package/dist/dev/log-server.d.ts +52 -0
- package/dist/dev/log-server.d.ts.map +1 -0
- package/dist/dev/log-server.js +216 -0
- package/dist/dev/log-server.js.map +1 -0
- package/dist/dev/session-manager.d.ts +33 -0
- package/dist/dev/session-manager.d.ts.map +1 -0
- package/dist/dev/session-manager.js +132 -0
- package/dist/dev/session-manager.js.map +1 -0
- package/dist/dev/stream-renderer.d.ts +22 -0
- package/dist/dev/stream-renderer.d.ts.map +1 -0
- package/dist/dev/stream-renderer.js +65 -0
- package/dist/dev/stream-renderer.js.map +1 -0
- package/dist/dev/tunnel.d.ts +40 -0
- package/dist/dev/tunnel.d.ts.map +1 -0
- package/dist/dev/tunnel.js +139 -0
- package/dist/dev/tunnel.js.map +1 -0
- package/dist/effect-http.d.ts +10 -0
- package/dist/effect-http.d.ts.map +1 -0
- package/dist/effect-http.js +38 -0
- package/dist/effect-http.js.map +1 -0
- package/dist/errors-registry.d.ts +11 -0
- package/dist/errors-registry.d.ts.map +1 -0
- package/dist/errors-registry.js +554 -0
- package/dist/errors-registry.js.map +1 -0
- package/dist/errors.d.ts +58 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +30 -0
- package/dist/errors.js.map +1 -0
- package/dist/help.d.ts +6 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +100 -0
- package/dist/help.js.map +1 -0
- package/dist/history.d.ts +15 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +69 -0
- package/dist/history.js.map +1 -0
- package/dist/hubspot-auth.d.ts +53 -0
- package/dist/hubspot-auth.d.ts.map +1 -0
- package/dist/hubspot-auth.js +301 -0
- package/dist/hubspot-auth.js.map +1 -0
- package/dist/hubspot-developer-client.d.ts +10 -0
- package/dist/hubspot-developer-client.d.ts.map +1 -0
- package/dist/hubspot-developer-client.js +212 -0
- package/dist/hubspot-developer-client.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/init/templates.d.ts +18 -0
- package/dist/init/templates.d.ts.map +1 -0
- package/dist/init/templates.js +239 -0
- package/dist/init/templates.js.map +1 -0
- package/dist/load-env.d.ts +16 -0
- package/dist/load-env.d.ts.map +1 -0
- package/dist/load-env.js +69 -0
- package/dist/load-env.js.map +1 -0
- package/dist/machine-id.d.ts +3 -0
- package/dist/machine-id.d.ts.map +1 -0
- package/dist/machine-id.js +41 -0
- package/dist/machine-id.js.map +1 -0
- package/dist/paths.d.ts +4 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +19 -0
- package/dist/paths.js.map +1 -0
- package/dist/prompt.d.ts +43 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +379 -0
- package/dist/prompt.js.map +1 -0
- package/dist/reporter/human.d.ts +28 -0
- package/dist/reporter/human.d.ts.map +1 -0
- package/dist/reporter/human.js +126 -0
- package/dist/reporter/human.js.map +1 -0
- package/dist/reporter/index.d.ts +14 -0
- package/dist/reporter/index.d.ts.map +1 -0
- package/dist/reporter/index.js +37 -0
- package/dist/reporter/index.js.map +1 -0
- package/dist/reporter/json.d.ts +43 -0
- package/dist/reporter/json.d.ts.map +1 -0
- package/dist/reporter/json.js +146 -0
- package/dist/reporter/json.js.map +1 -0
- package/dist/reporter/style.d.ts +34 -0
- package/dist/reporter/style.d.ts.map +1 -0
- package/dist/reporter/style.js +97 -0
- package/dist/reporter/style.js.map +1 -0
- package/dist/reporter/types.d.ts +41 -0
- package/dist/reporter/types.d.ts.map +1 -0
- package/dist/reporter/types.js +2 -0
- package/dist/reporter/types.js.map +1 -0
- package/dist/result.d.ts +4 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +2 -0
- package/dist/result.js.map +1 -0
- package/dist/services/account-store.d.ts +31 -0
- package/dist/services/account-store.d.ts.map +1 -0
- package/dist/services/account-store.js +135 -0
- package/dist/services/account-store.js.map +1 -0
- package/dist/services/app-paths.d.ts +25 -0
- package/dist/services/app-paths.d.ts.map +1 -0
- package/dist/services/app-paths.js +34 -0
- package/dist/services/app-paths.js.map +1 -0
- package/dist/services/cloudflare-auth.d.ts +83 -0
- package/dist/services/cloudflare-auth.d.ts.map +1 -0
- package/dist/services/cloudflare-auth.js +30 -0
- package/dist/services/cloudflare-auth.js.map +1 -0
- package/dist/services/cloudflare-kv.d.ts +45 -0
- package/dist/services/cloudflare-kv.d.ts.map +1 -0
- package/dist/services/cloudflare-kv.js +151 -0
- package/dist/services/cloudflare-kv.js.map +1 -0
- package/dist/services/command-history.d.ts +29 -0
- package/dist/services/command-history.d.ts.map +1 -0
- package/dist/services/command-history.js +62 -0
- package/dist/services/command-history.js.map +1 -0
- package/dist/services/control-plane.d.ts +32 -0
- package/dist/services/control-plane.d.ts.map +1 -0
- package/dist/services/control-plane.js +57 -0
- package/dist/services/control-plane.js.map +1 -0
- package/dist/services/env-loader.d.ts +18 -0
- package/dist/services/env-loader.d.ts.map +1 -0
- package/dist/services/env-loader.js +34 -0
- package/dist/services/env-loader.js.map +1 -0
- package/dist/services/http.d.ts +19 -0
- package/dist/services/http.d.ts.map +1 -0
- package/dist/services/http.js +9 -0
- package/dist/services/http.js.map +1 -0
- package/dist/services/live.d.ts +16 -0
- package/dist/services/live.d.ts.map +1 -0
- package/dist/services/live.js +26 -0
- package/dist/services/live.js.map +1 -0
- package/dist/services/machine-id.d.ts +18 -0
- package/dist/services/machine-id.d.ts.map +1 -0
- package/dist/services/machine-id.js +39 -0
- package/dist/services/machine-id.js.map +1 -0
- package/dist/services/reporter.d.ts +55 -0
- package/dist/services/reporter.d.ts.map +1 -0
- package/dist/services/reporter.js +49 -0
- package/dist/services/reporter.js.map +1 -0
- package/dist/state-store.d.ts +39 -0
- package/dist/state-store.d.ts.map +1 -0
- package/dist/state-store.js +89 -0
- package/dist/state-store.js.map +1 -0
- package/dist/telemetry.d.ts +13 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +129 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tenant-state.d.ts +69 -0
- package/dist/tenant-state.d.ts.map +1 -0
- package/dist/tenant-state.js +161 -0
- package/dist/tenant-state.js.map +1 -0
- 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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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"}
|
package/dist/load-env.js
ADDED
|
@@ -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 @@
|
|
|
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"}
|