@hs-x/cli 0.4.12 → 0.4.14
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 +21 -7
- package/dist/commands/completion.d.ts.map +1 -1
- package/dist/commands/completion.js +3 -0
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/deploy.d.ts +10 -0
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +37 -13
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts +1 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +346 -32
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +22 -6
- package/dist/commands/help-command.js.map +1 -1
- package/dist/commands/project-lifecycle.d.ts +10 -0
- package/dist/commands/project-lifecycle.d.ts.map +1 -1
- package/dist/commands/project-lifecycle.js +120 -33
- package/dist/commands/project-lifecycle.js.map +1 -1
- package/dist/commands/project.d.ts +3 -0
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +2 -0
- package/dist/commands/project.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/dev/account-selection.d.ts +55 -0
- package/dist/dev/account-selection.d.ts.map +1 -1
- package/dist/dev/account-selection.js +120 -0
- package/dist/dev/account-selection.js.map +1 -1
- package/dist/dev/browser-log-bridge.d.ts +13 -8
- package/dist/dev/browser-log-bridge.d.ts.map +1 -1
- package/dist/dev/browser-log-bridge.js +37 -17
- package/dist/dev/browser-log-bridge.js.map +1 -1
- package/dist/dev/clipboard.d.ts +9 -0
- package/dist/dev/clipboard.d.ts.map +1 -0
- package/dist/dev/clipboard.js +42 -0
- package/dist/dev/clipboard.js.map +1 -0
- package/dist/dev/compat-shim.d.ts +19 -4
- package/dist/dev/compat-shim.d.ts.map +1 -1
- package/dist/dev/compat-shim.js +31 -4
- package/dist/dev/compat-shim.js.map +1 -1
- package/dist/dev/component-selection.d.ts +12 -0
- package/dist/dev/component-selection.d.ts.map +1 -1
- package/dist/dev/component-selection.js +29 -0
- package/dist/dev/component-selection.js.map +1 -1
- package/dist/dev/frontend-log-relay.d.ts +12 -0
- package/dist/dev/frontend-log-relay.d.ts.map +1 -1
- package/dist/dev/frontend-log-relay.js +31 -20
- package/dist/dev/frontend-log-relay.js.map +1 -1
- package/dist/dev/hubspot-log-lane.d.ts +27 -0
- package/dist/dev/hubspot-log-lane.d.ts.map +1 -0
- package/dist/dev/hubspot-log-lane.js +73 -0
- package/dist/dev/hubspot-log-lane.js.map +1 -0
- package/dist/dev/hubspot-logs-poller.d.ts +7 -1
- package/dist/dev/hubspot-logs-poller.d.ts.map +1 -1
- package/dist/dev/hubspot-logs-poller.js +28 -1
- package/dist/dev/hubspot-logs-poller.js.map +1 -1
- package/dist/dev/keyboard.d.ts +21 -3
- package/dist/dev/keyboard.d.ts.map +1 -1
- package/dist/dev/keyboard.js +106 -6
- package/dist/dev/keyboard.js.map +1 -1
- package/dist/dev/local-proxy.d.ts +90 -0
- package/dist/dev/local-proxy.d.ts.map +1 -0
- package/dist/dev/local-proxy.js +186 -0
- package/dist/dev/local-proxy.js.map +1 -0
- package/dist/dev/log-server.d.ts +9 -0
- package/dist/dev/log-server.d.ts.map +1 -1
- package/dist/dev/log-server.js +46 -3
- package/dist/dev/log-server.js.map +1 -1
- package/dist/dev/production-app-check.d.ts +23 -0
- package/dist/dev/production-app-check.d.ts.map +1 -0
- package/dist/dev/production-app-check.js +28 -0
- package/dist/dev/production-app-check.js.map +1 -0
- package/dist/dev/session-manager.d.ts +51 -1
- package/dist/dev/session-manager.d.ts.map +1 -1
- package/dist/dev/session-manager.js +155 -12
- package/dist/dev/session-manager.js.map +1 -1
- package/dist/dev/startup-progress.d.ts +7 -0
- package/dist/dev/startup-progress.d.ts.map +1 -0
- package/dist/dev/startup-progress.js +27 -0
- package/dist/dev/startup-progress.js.map +1 -0
- package/dist/dev/stream-event-format.d.ts +10 -1
- package/dist/dev/stream-event-format.d.ts.map +1 -1
- package/dist/dev/stream-event-format.js +157 -5
- package/dist/dev/stream-event-format.js.map +1 -1
- package/dist/dev/stream-renderer.d.ts +34 -1
- package/dist/dev/stream-renderer.d.ts.map +1 -1
- package/dist/dev/stream-renderer.js +371 -60
- package/dist/dev/stream-renderer.js.map +1 -1
- package/dist/dev/trace-markdown.d.ts +25 -0
- package/dist/dev/trace-markdown.d.ts.map +1 -0
- package/dist/dev/trace-markdown.js +159 -0
- package/dist/dev/trace-markdown.js.map +1 -0
- package/dist/hubspot-app-logs.d.ts +9 -0
- package/dist/hubspot-app-logs.d.ts.map +1 -1
- package/dist/hubspot-app-logs.js +6 -4
- package/dist/hubspot-app-logs.js.map +1 -1
- package/dist/hubspot-developer-client.js +3 -0
- package/dist/hubspot-developer-client.js.map +1 -1
- package/dist/hubspot-project.d.ts +2 -0
- package/dist/hubspot-project.d.ts.map +1 -1
- package/dist/hubspot-project.js +13 -1
- package/dist/hubspot-project.js.map +1 -1
- package/dist/prompt.d.ts +15 -0
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +66 -15
- package/dist/prompt.js.map +1 -1
- package/dist/reporter/human.d.ts.map +1 -1
- package/dist/reporter/human.js +6 -1
- package/dist/reporter/human.js.map +1 -1
- package/dist/reporter/style.d.ts +10 -0
- package/dist/reporter/style.d.ts.map +1 -1
- package/dist/reporter/style.js +39 -0
- package/dist/reporter/style.js.map +1 -1
- package/dist/services/hubspot-dev-client.js +3 -0
- package/dist/services/hubspot-dev-client.js.map +1 -1
- package/package.json +9 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontend-log-relay.js","sourceRoot":"","sources":["../../src/dev/frontend-log-relay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,CAAC,MAAM,sBAAsB,GAAG,iCAAiC,CAAC;AAExE,MAAM,cAAc,GAAG,iCAAiC,CAAC;AACzD,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,sBAAsB,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"frontend-log-relay.js","sourceRoot":"","sources":["../../src/dev/frontend-log-relay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type HubSpotLogsResolution } from '../hubspot-app-logs.js';
|
|
2
|
+
import type { HubSpotAccount } from '../hubspot-auth.js';
|
|
3
|
+
import type { DevEventBus } from './event-bus.js';
|
|
4
|
+
import { startHubSpotLogsPoller } from './hubspot-logs-poller.js';
|
|
5
|
+
export type HubSpotLogsLaneState = {
|
|
6
|
+
readonly active: true;
|
|
7
|
+
readonly appId: number;
|
|
8
|
+
readonly developerAccountId: number;
|
|
9
|
+
} | {
|
|
10
|
+
readonly active: false;
|
|
11
|
+
readonly pending?: boolean;
|
|
12
|
+
readonly reason: string;
|
|
13
|
+
};
|
|
14
|
+
export declare const HUBSPOT_LOGS_POLL_INTERVAL_MS = 30000;
|
|
15
|
+
/** Optional remote log discovery must not hold up local compilation or serving. */
|
|
16
|
+
export declare function startHubSpotLogLane(input: {
|
|
17
|
+
readonly root: string;
|
|
18
|
+
readonly bus: DevEventBus;
|
|
19
|
+
readonly account?: HubSpotAccount | undefined;
|
|
20
|
+
readonly resolveSource?: () => Promise<HubSpotLogsResolution>;
|
|
21
|
+
readonly startPoller?: typeof startHubSpotLogsPoller;
|
|
22
|
+
}): {
|
|
23
|
+
readonly state: HubSpotLogsLaneState;
|
|
24
|
+
ready: Promise<void>;
|
|
25
|
+
stop(): void;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=hubspot-log-lane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hubspot-log-lane.d.ts","sourceRoot":"","sources":["../../src/dev/hubspot-log-lane.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAA4B,MAAM,wBAAwB,CAAC;AAC9F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAA0B,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAE1F,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,GACtF;IAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpF,eAAO,MAAM,6BAA6B,QAAS,CAAC;AAEpD,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC9D,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,sBAAsB,CAAC;CACtD;;;;EAiEA"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { resolveHubSpotLogsSource } from '../hubspot-app-logs.js';
|
|
2
|
+
import { startHubSpotLogsPoller } from './hubspot-logs-poller.js';
|
|
3
|
+
export const HUBSPOT_LOGS_POLL_INTERVAL_MS = 30_000;
|
|
4
|
+
/** Optional remote log discovery must not hold up local compilation or serving. */
|
|
5
|
+
export function startHubSpotLogLane(input) {
|
|
6
|
+
let stopped = false;
|
|
7
|
+
let poller;
|
|
8
|
+
let state = {
|
|
9
|
+
active: false,
|
|
10
|
+
pending: true,
|
|
11
|
+
reason: 'Connecting in the background',
|
|
12
|
+
};
|
|
13
|
+
const resolveSource = input.resolveSource ??
|
|
14
|
+
(() => resolveHubSpotLogsSource({
|
|
15
|
+
cwd: input.root,
|
|
16
|
+
...(input.account?.personalAccessKey
|
|
17
|
+
? {
|
|
18
|
+
credentials: {
|
|
19
|
+
developerAccountId: input.account.portalId,
|
|
20
|
+
personalAccessKey: input.account.personalAccessKey,
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
: {}),
|
|
24
|
+
}));
|
|
25
|
+
const ready = (async () => {
|
|
26
|
+
try {
|
|
27
|
+
const result = await resolveSource();
|
|
28
|
+
if (stopped)
|
|
29
|
+
return;
|
|
30
|
+
if (!result.ok) {
|
|
31
|
+
state = { active: false, reason: result.reason };
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
poller = (input.startPoller ?? startHubSpotLogsPoller)({
|
|
35
|
+
bus: input.bus,
|
|
36
|
+
source: result.source,
|
|
37
|
+
intervalMs: HUBSPOT_LOGS_POLL_INTERVAL_MS,
|
|
38
|
+
catchUpMs: 2 * 60_000,
|
|
39
|
+
});
|
|
40
|
+
state = {
|
|
41
|
+
active: true,
|
|
42
|
+
appId: result.source.appId,
|
|
43
|
+
developerAccountId: result.source.developerAccountId,
|
|
44
|
+
};
|
|
45
|
+
await poller.poll();
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (cause) {
|
|
50
|
+
if (stopped)
|
|
51
|
+
return;
|
|
52
|
+
poller?.stop();
|
|
53
|
+
state = { active: false, reason: cause instanceof Error ? cause.message : String(cause) };
|
|
54
|
+
}
|
|
55
|
+
input.bus.emit({
|
|
56
|
+
lane: 'hubspot',
|
|
57
|
+
level: 'warn',
|
|
58
|
+
ts: Date.now(),
|
|
59
|
+
msg: `HubSpot app logs unavailable: ${state.active ? '' : state.reason}`,
|
|
60
|
+
});
|
|
61
|
+
})();
|
|
62
|
+
return {
|
|
63
|
+
get state() {
|
|
64
|
+
return state;
|
|
65
|
+
},
|
|
66
|
+
ready,
|
|
67
|
+
stop() {
|
|
68
|
+
stopped = true;
|
|
69
|
+
poller?.stop();
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=hubspot-log-lane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hubspot-log-lane.js","sourceRoot":"","sources":["../../src/dev/hubspot-log-lane.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAG9F,OAAO,EAA0B,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAM1F,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC;AAEpD,mFAAmF;AACnF,MAAM,UAAU,mBAAmB,CAAC,KAMnC;IACC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,MAAqC,CAAC;IAC1C,IAAI,KAAK,GAAyB;QAChC,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,8BAA8B;KACvC,CAAC;IACF,MAAM,aAAa,GACjB,KAAK,CAAC,aAAa;QACnB,CAAC,GAAG,EAAE,CACJ,wBAAwB,CAAC;YACvB,GAAG,EAAE,KAAK,CAAC,IAAI;YACf,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,iBAAiB;gBAClC,CAAC,CAAC;oBACE,WAAW,EAAE;wBACX,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ;wBAC1C,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB;qBACnD;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC,CAAC;IACR,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;YACrC,IAAI,OAAO;gBAAE,OAAO;YACpB,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,KAAK,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,sBAAsB,CAAC,CAAC;oBACrD,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,UAAU,EAAE,6BAA6B;oBACzC,SAAS,EAAE,CAAC,GAAG,MAAM;iBACtB,CAAC,CAAC;gBACH,KAAK,GAAG;oBACN,MAAM,EAAE,IAAI;oBACZ,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;oBAC1B,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,kBAAkB;iBACrD,CAAC;gBACF,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO;gBAAE,OAAO;YACpB,MAAM,EAAE,IAAI,EAAE,CAAC;YACf,KAAK,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5F,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,MAAM;YACb,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,GAAG,EAAE,iCAAiC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE;SACzE,CAAC,CAAC;IACL,CAAC,CAAC,EAAE,CAAC;IACL,OAAO;QACL,IAAI,KAAK;YACP,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK;QACL,IAAI;YACF,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,EAAE,IAAI,EAAE,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -15,8 +15,14 @@ export interface HubSpotLogsPollerOptions {
|
|
|
15
15
|
readonly bus: DevEventBus;
|
|
16
16
|
readonly source: HubSpotLogsSource;
|
|
17
17
|
readonly intervalMs?: number;
|
|
18
|
-
/** Emit only entries at/after this time (default: poller start). */
|
|
18
|
+
/** Emit only entries at/after this time (default: poller start minus `catchUpMs`). */
|
|
19
19
|
readonly sessionStartMs?: number;
|
|
20
|
+
/**
|
|
21
|
+
* How far before poller start the first poll reaches back, so a lane that
|
|
22
|
+
* is working shows recent activity right away instead of looking dead
|
|
23
|
+
* until the card acts again. Default 0 (nothing before start).
|
|
24
|
+
*/
|
|
25
|
+
readonly catchUpMs?: number;
|
|
20
26
|
readonly systemTypes?: readonly SystemType[];
|
|
21
27
|
/**
|
|
22
28
|
* Called when HubSpot rejects the poll as unauthorized. Resolves `true` when
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hubspot-logs-poller.d.ts","sourceRoot":"","sources":["../../src/dev/hubspot-logs-poller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAEvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAoBlD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,
|
|
1
|
+
{"version":3,"file":"hubspot-logs-poller.d.ts","sourceRoot":"","sources":["../../src/dev/hubspot-logs-poller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAEvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAoBlD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,sFAAsF;IACtF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,sEAAsE;IACtE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE;QAC9B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;QACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;KAC7C,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,IAAI,IAAI,CAAC;CACd;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,wBAAwB,GAAG,iBAAiB,CAyI3F"}
|
|
@@ -14,7 +14,9 @@ const POLL_LIMIT = 50;
|
|
|
14
14
|
export function startHubSpotLogsPoller(options) {
|
|
15
15
|
const fetchPayload = options.fetchPayload ?? fetchHubSpotLogsPayload;
|
|
16
16
|
const systemTypes = options.systemTypes ?? DEV_POLL_SYSTEM_TYPES;
|
|
17
|
-
const
|
|
17
|
+
const catchUpMs = Math.max(0, options.catchUpMs ?? 0);
|
|
18
|
+
const sessionStartMs = options.sessionStartMs ?? Date.now() - catchUpMs;
|
|
19
|
+
let firstPollReported = false;
|
|
18
20
|
const onUnauthorized = options.onUnauthorized ?? (() => repairHubSpotAccessToken(options.source.developerAccountId));
|
|
19
21
|
const seen = new Set();
|
|
20
22
|
let stopped = false;
|
|
@@ -85,12 +87,32 @@ export function startHubSpotLogsPoller(options) {
|
|
|
85
87
|
return Number.isFinite(ts) && ts >= sessionStartMs;
|
|
86
88
|
})
|
|
87
89
|
.sort((a, b) => String(a.timestamp).localeCompare(String(b.timestamp)));
|
|
90
|
+
if (!firstPollReported) {
|
|
91
|
+
// Say once that the lane is live, and what the catch-up window held:
|
|
92
|
+
// silence right after start is otherwise indistinguishable from a
|
|
93
|
+
// broken credential.
|
|
94
|
+
firstPollReported = true;
|
|
95
|
+
const minutes = Math.max(1, Math.round(catchUpMs / 60_000));
|
|
96
|
+
const window = catchUpMs > 0 ? ` in the last ${minutes} min` : '';
|
|
97
|
+
const count = fresh.length === 0
|
|
98
|
+
? `no entries${window}`
|
|
99
|
+
: `${fresh.length} entr${fresh.length === 1 ? 'y' : 'ies'}${window}`;
|
|
100
|
+
options.bus.emit({
|
|
101
|
+
lane: 'hubspot',
|
|
102
|
+
level: 'debug',
|
|
103
|
+
ts: Date.now(),
|
|
104
|
+
msg: `app logs live — ${count}; new ones appear within ~30s of the card acting`,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
88
107
|
for (const row of fresh) {
|
|
89
108
|
const errorType = typeof row.errorType === 'string' ? row.errorType : undefined;
|
|
90
109
|
const source = typeof row.source === 'string' ? row.source : 'app-log';
|
|
91
110
|
const target = typeof row.target === 'string' ? row.target : undefined;
|
|
92
111
|
const durationMs = typeof row.durationMs === 'number' ? row.durationMs : undefined;
|
|
93
112
|
const invocationId = typeof row.invocationId === 'string' ? row.invocationId : undefined;
|
|
113
|
+
const portalId = typeof row.portalId === 'number' ? row.portalId : undefined;
|
|
114
|
+
const traceId = typeof row.traceId === 'string' ? row.traceId : undefined;
|
|
115
|
+
const systemType = typeof row.systemType === 'string' ? row.systemType : undefined;
|
|
94
116
|
options.bus.emit({
|
|
95
117
|
lane: 'hubspot',
|
|
96
118
|
level: errorType ? 'error' : 'info',
|
|
@@ -100,6 +122,11 @@ export function startHubSpotLogsPoller(options) {
|
|
|
100
122
|
fields: {
|
|
101
123
|
...(durationMs !== undefined ? { durationMs } : {}),
|
|
102
124
|
...(invocationId ? { invocationId } : {}),
|
|
125
|
+
...(portalId !== undefined ? { portalId } : {}),
|
|
126
|
+
...(traceId ? { traceId } : {}),
|
|
127
|
+
...(systemType ? { systemType } : {}),
|
|
128
|
+
...(target ? { target } : {}),
|
|
129
|
+
...(errorType ? { errorType } : {}),
|
|
103
130
|
},
|
|
104
131
|
});
|
|
105
132
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hubspot-logs-poller.js","sourceRoot":"","sources":["../../src/dev/hubspot-logs-poller.ts"],"names":[],"mappings":"AAWA,OAAO,EAGL,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,iBAAiB,EACjB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AAEnC,iEAAiE;AACjE,MAAM,qBAAqB,GAA0B;IACnD,wBAAwB;IACxB,kBAAkB;IAClB,eAAe;IACf,iBAAiB;CAClB,CAAC;AAEF,MAAM,wBAAwB,GAAG,MAAM,CAAC;AACxC,gEAAgE;AAChE,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,UAAU,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"hubspot-logs-poller.js","sourceRoot":"","sources":["../../src/dev/hubspot-logs-poller.ts"],"names":[],"mappings":"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"}
|
package/dist/dev/keyboard.d.ts
CHANGED
|
@@ -1,19 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Raw-mode keyboard controller for `hs-x dev` — drives the stream renderer's
|
|
3
|
-
* filter/pause/
|
|
3
|
+
* filter/pause/details surface with single keystrokes:
|
|
4
4
|
*
|
|
5
5
|
* f cycle lane: all → frontend → backend → request → hubspot
|
|
6
6
|
* 1 2 3 4 jump to frontend / backend / request / hubspot (again: back to all)
|
|
7
7
|
* a all lanes
|
|
8
8
|
* e toggle errors-only w toggle warnings-and-up
|
|
9
9
|
* / search (type · Enter apply · Esc cancel · Ctrl+U clear)
|
|
10
|
-
* d
|
|
10
|
+
* d ↑ open the details browser on the latest matching event
|
|
11
11
|
* c reset to the launch filter (--only selectors, or everything)
|
|
12
12
|
* p pause / resume (buffered rows flush on resume)
|
|
13
13
|
* ? h key help
|
|
14
14
|
* q ^C stop the dev server
|
|
15
15
|
*
|
|
16
|
-
*
|
|
16
|
+
* Inside the details browser (list beside the selected event's details):
|
|
17
|
+
*
|
|
18
|
+
* ↑ ↓ k j move the selection (older / newer)
|
|
19
|
+
* PgUp PgDn scroll the detail pane
|
|
20
|
+
* Home End g G jump to the oldest / newest event
|
|
21
|
+
* t toggle related trace/context events
|
|
22
|
+
* y copy a redacted Markdown trace to the clipboard
|
|
23
|
+
* Esc d back to the stream
|
|
24
|
+
*
|
|
25
|
+
* Filter keys keep working in the browser and re-derive the list. The same
|
|
26
|
+
* selector grammar backs the `--only` flag (stream-filter.ts), so a
|
|
17
27
|
* keystroke session and a scripted run can never disagree about semantics.
|
|
18
28
|
* No-ops entirely when stdin is not a TTY (CI, piped, dev-in-tmux-pane).
|
|
19
29
|
*/
|
|
@@ -28,5 +38,13 @@ export interface DevKeyboardOptions {
|
|
|
28
38
|
export interface DevKeyboard {
|
|
29
39
|
stop(): void;
|
|
30
40
|
}
|
|
41
|
+
type NavigationKey = 'up' | 'down' | 'pageUp' | 'pageDown' | 'home' | 'end';
|
|
42
|
+
/**
|
|
43
|
+
* Decode the cursor-key escape sequences terminals send in raw mode: CSI
|
|
44
|
+
* (`ESC [ A`) and SS3 (`ESC O A`, application cursor mode) letter forms, plus
|
|
45
|
+
* the VT `ESC [ n ~` forms for page/home/end. Anything else stays opaque.
|
|
46
|
+
*/
|
|
47
|
+
export declare function decodeNavigationKey(data: string): NavigationKey | undefined;
|
|
31
48
|
export declare function attachDevKeyboard(opts: DevKeyboardOptions): DevKeyboard;
|
|
49
|
+
export {};
|
|
32
50
|
//# sourceMappingURL=keyboard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/dev/keyboard.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/dev/keyboard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACnC,qDAAqD;IACrD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,IAAI,IAAI,CAAC;CACd;AAeD,KAAK,aAAa,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,CAAC;AAE5E;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAyB3E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,GAAG,WAAW,CAkLvE"}
|
package/dist/dev/keyboard.js
CHANGED
|
@@ -1,32 +1,77 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Raw-mode keyboard controller for `hs-x dev` — drives the stream renderer's
|
|
3
|
-
* filter/pause/
|
|
3
|
+
* filter/pause/details surface with single keystrokes:
|
|
4
4
|
*
|
|
5
5
|
* f cycle lane: all → frontend → backend → request → hubspot
|
|
6
6
|
* 1 2 3 4 jump to frontend / backend / request / hubspot (again: back to all)
|
|
7
7
|
* a all lanes
|
|
8
8
|
* e toggle errors-only w toggle warnings-and-up
|
|
9
9
|
* / search (type · Enter apply · Esc cancel · Ctrl+U clear)
|
|
10
|
-
* d
|
|
10
|
+
* d ↑ open the details browser on the latest matching event
|
|
11
11
|
* c reset to the launch filter (--only selectors, or everything)
|
|
12
12
|
* p pause / resume (buffered rows flush on resume)
|
|
13
13
|
* ? h key help
|
|
14
14
|
* q ^C stop the dev server
|
|
15
15
|
*
|
|
16
|
-
*
|
|
16
|
+
* Inside the details browser (list beside the selected event's details):
|
|
17
|
+
*
|
|
18
|
+
* ↑ ↓ k j move the selection (older / newer)
|
|
19
|
+
* PgUp PgDn scroll the detail pane
|
|
20
|
+
* Home End g G jump to the oldest / newest event
|
|
21
|
+
* t toggle related trace/context events
|
|
22
|
+
* y copy a redacted Markdown trace to the clipboard
|
|
23
|
+
* Esc d back to the stream
|
|
24
|
+
*
|
|
25
|
+
* Filter keys keep working in the browser and re-derive the list. The same
|
|
26
|
+
* selector grammar backs the `--only` flag (stream-filter.ts), so a
|
|
17
27
|
* keystroke session and a scripted run can never disagree about semantics.
|
|
18
28
|
* No-ops entirely when stdin is not a TTY (CI, piped, dev-in-tmux-pane).
|
|
19
29
|
*/
|
|
20
30
|
import { DEV_LANES, cycleLane } from './stream-filter.js';
|
|
21
31
|
const HELP_TEXT = [
|
|
22
32
|
' keys f cycle lane 1/2/3/4 jump lane (again: all) a all lanes',
|
|
23
|
-
' e errors only w warnings / search
|
|
33
|
+
' e errors only w warnings / search c reset p pause q quit',
|
|
34
|
+
' d or ↑ open details ↑/↓ move t related y copy trace pgup/pgdn scroll esc back',
|
|
24
35
|
].join('\n');
|
|
25
36
|
const CTRL_C = '\x03';
|
|
26
37
|
const CTRL_U = '\x15';
|
|
27
38
|
const ESC = '\x1b';
|
|
28
39
|
const ENTER = '\r';
|
|
29
40
|
const BACKSPACE = '\x7f';
|
|
41
|
+
const DETAIL_PAGE_LINES = 10;
|
|
42
|
+
/**
|
|
43
|
+
* Decode the cursor-key escape sequences terminals send in raw mode: CSI
|
|
44
|
+
* (`ESC [ A`) and SS3 (`ESC O A`, application cursor mode) letter forms, plus
|
|
45
|
+
* the VT `ESC [ n ~` forms for page/home/end. Anything else stays opaque.
|
|
46
|
+
*/
|
|
47
|
+
export function decodeNavigationKey(data) {
|
|
48
|
+
if (data.length < 3 || data[0] !== ESC)
|
|
49
|
+
return undefined;
|
|
50
|
+
const introducer = data[1];
|
|
51
|
+
if (introducer !== '[' && introducer !== 'O')
|
|
52
|
+
return undefined;
|
|
53
|
+
const body = data.slice(2);
|
|
54
|
+
switch (body) {
|
|
55
|
+
case 'A':
|
|
56
|
+
return 'up';
|
|
57
|
+
case 'B':
|
|
58
|
+
return 'down';
|
|
59
|
+
case 'H':
|
|
60
|
+
case '1~':
|
|
61
|
+
case '7~':
|
|
62
|
+
return 'home';
|
|
63
|
+
case 'F':
|
|
64
|
+
case '4~':
|
|
65
|
+
case '8~':
|
|
66
|
+
return 'end';
|
|
67
|
+
case '5~':
|
|
68
|
+
return 'pageUp';
|
|
69
|
+
case '6~':
|
|
70
|
+
return 'pageDown';
|
|
71
|
+
default:
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
30
75
|
export function attachDevKeyboard(opts) {
|
|
31
76
|
const stdin = opts.stdin ?? process.stdin;
|
|
32
77
|
const isTTY = opts.isTTY ?? Boolean(stdin.isTTY);
|
|
@@ -50,8 +95,25 @@ export function attachDevKeyboard(opts) {
|
|
|
50
95
|
const drawSearch = () => {
|
|
51
96
|
renderer.setPrompt(`/${search ?? ''}▏ enter apply · esc cancel`);
|
|
52
97
|
};
|
|
53
|
-
const
|
|
54
|
-
|
|
98
|
+
const navigate = (key) => {
|
|
99
|
+
switch (key) {
|
|
100
|
+
case 'up':
|
|
101
|
+
return renderer.moveDetailsSelection(-1);
|
|
102
|
+
case 'down':
|
|
103
|
+
return renderer.moveDetailsSelection(1);
|
|
104
|
+
case 'pageUp':
|
|
105
|
+
return renderer.scrollDetails(-DETAIL_PAGE_LINES);
|
|
106
|
+
case 'pageDown':
|
|
107
|
+
return renderer.scrollDetails(DETAIL_PAGE_LINES);
|
|
108
|
+
case 'home':
|
|
109
|
+
return renderer.jumpDetailsSelection('first');
|
|
110
|
+
case 'end':
|
|
111
|
+
return renderer.jumpDetailsSelection('last');
|
|
112
|
+
default:
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
const onKey = (data) => {
|
|
55
117
|
// Search mode consumes every key until Enter/Esc.
|
|
56
118
|
if (search !== undefined) {
|
|
57
119
|
if (data === ENTER || data === '\n')
|
|
@@ -77,6 +139,35 @@ export function attachDevKeyboard(opts) {
|
|
|
77
139
|
}
|
|
78
140
|
return;
|
|
79
141
|
}
|
|
142
|
+
const navigation = decodeNavigationKey(data);
|
|
143
|
+
if (navigation) {
|
|
144
|
+
// Only ↑ opens the browser from the stream — ↓ / page keys there would
|
|
145
|
+
// be surprising. Inside the browser every navigation key is live.
|
|
146
|
+
if (renderer.isShowingDetails() || navigation === 'up')
|
|
147
|
+
navigate(navigation);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
if (renderer.isShowingDetails()) {
|
|
151
|
+
switch (data) {
|
|
152
|
+
case ESC:
|
|
153
|
+
case 'd':
|
|
154
|
+
return renderer.toggleLatestDetails();
|
|
155
|
+
case 'k':
|
|
156
|
+
return navigate('up');
|
|
157
|
+
case 'j':
|
|
158
|
+
return navigate('down');
|
|
159
|
+
case 'g':
|
|
160
|
+
return navigate('home');
|
|
161
|
+
case 'G':
|
|
162
|
+
return navigate('end');
|
|
163
|
+
case 't':
|
|
164
|
+
return renderer.toggleRelatedDetails();
|
|
165
|
+
case 'y':
|
|
166
|
+
return renderer.copyDetailsTrace();
|
|
167
|
+
default:
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
80
171
|
switch (data) {
|
|
81
172
|
case CTRL_C:
|
|
82
173
|
case 'q':
|
|
@@ -130,6 +221,15 @@ export function attachDevKeyboard(opts) {
|
|
|
130
221
|
return;
|
|
131
222
|
}
|
|
132
223
|
};
|
|
224
|
+
const onData = (chunk) => {
|
|
225
|
+
// A stream chunk is not a key: terminals can deliver several keystrokes
|
|
226
|
+
// (including a search and Enter) in one read. Keep complete CSI/SS3 and
|
|
227
|
+
// Alt sequences opaque so their trailing letters never become commands.
|
|
228
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: terminal key protocol.
|
|
229
|
+
const keys = chunk.toString('utf8').match(/\x1b(?:\[[0-?]*[ -/]*[@-~]|O.|.)?|[^\x1b]/gu) ?? [];
|
|
230
|
+
for (const key of keys)
|
|
231
|
+
onKey(key);
|
|
232
|
+
};
|
|
133
233
|
stdin.setRawMode(true);
|
|
134
234
|
stdin.resume();
|
|
135
235
|
stdin.on('data', onData);
|
package/dist/dev/keyboard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../src/dev/keyboard.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../src/dev/keyboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HubSpot's dev server reads `<app root>/local.json` and, when it carries a
|
|
3
|
+
* `proxy` map, switches `hubspot.fetch` into local proxy mode: every request to
|
|
4
|
+
* a mapped origin is rewritten to the local target and issued from the CLI
|
|
5
|
+
* process instead of HubSpot's backend proxy. A mapping whose target is not
|
|
6
|
+
* listening therefore fails every `hubspot.fetch` to that origin with an empty
|
|
7
|
+
* `ECONNREFUSED` aggregate error. Surface the mappings and their reachability
|
|
8
|
+
* so that failure is visible at start-up rather than as blank card errors.
|
|
9
|
+
*/
|
|
10
|
+
export interface HubSpotLocalProxyMapping {
|
|
11
|
+
readonly from: string;
|
|
12
|
+
readonly to: string;
|
|
13
|
+
}
|
|
14
|
+
export interface HubSpotLocalProxyProbe extends HubSpotLocalProxyMapping {
|
|
15
|
+
readonly reachable: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare const HUBSPOT_LOCAL_CONFIG_FILENAME = "local.json";
|
|
18
|
+
export declare function readHubSpotLocalProxyMappings(appRoot: string): Promise<readonly HubSpotLocalProxyMapping[]>;
|
|
19
|
+
export declare function probeHubSpotLocalProxyMappings(mappings: readonly HubSpotLocalProxyMapping[], probe?: (target: string) => Promise<boolean>): Promise<readonly HubSpotLocalProxyProbe[]>;
|
|
20
|
+
/** True when something accepts a TCP connection at the target URL's host:port. */
|
|
21
|
+
export declare function isTcpTargetListening(target: string): Promise<boolean>;
|
|
22
|
+
/**
|
|
23
|
+
* `--local-proxy` modes:
|
|
24
|
+
* - `auto` (default): enter proxy mode only when local.json has mappings and
|
|
25
|
+
* every target is listening — exactly where `hs project dev` would send the
|
|
26
|
+
* app's fetches. With a dead target (or no local.json) the file is hidden so
|
|
27
|
+
* `hubspot.fetch` keeps going through HubSpot's own proxy, signed. Proxy mode
|
|
28
|
+
* sends unmapped fetches straight to their origins from this machine, and
|
|
29
|
+
* backends that verify HubSpot signatures reject those, so hs-x never turns
|
|
30
|
+
* it on uninvited.
|
|
31
|
+
* - `always`: apply the map regardless (dead targets fail loud), and enter
|
|
32
|
+
* proxy mode even without local.json — the explicit opt-in for card logs on
|
|
33
|
+
* apps whose backends accept unsigned dev traffic.
|
|
34
|
+
* - `never`: ignore local.json and keep HubSpot's own proxy for every fetch.
|
|
35
|
+
*/
|
|
36
|
+
export type HubSpotLocalProxyMode = 'auto' | 'always' | 'never';
|
|
37
|
+
export declare const HUBSPOT_LOCAL_PROXY_MODES: readonly ["auto", "always", "never"];
|
|
38
|
+
export declare const DEFAULT_HUBSPOT_LOCAL_PROXY_MODE: HubSpotLocalProxyMode;
|
|
39
|
+
export declare function resolveHubSpotLocalProxyMode(raw: string | undefined): HubSpotLocalProxyMode;
|
|
40
|
+
/** Whether HubSpot's dev server should enter local proxy mode for this run. */
|
|
41
|
+
export declare function hubSpotLocalProxyApplies(mode: HubSpotLocalProxyMode, probes: readonly HubSpotLocalProxyProbe[]): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* The origin the card's log bridge posts to through `hubspot.fetch`. It only
|
|
44
|
+
* has to be a syntactically valid origin: in proxy mode the dev server rewrites
|
|
45
|
+
* it to hs-x's local sidecar before any network is involved, and the card
|
|
46
|
+
* iframe never resolves it.
|
|
47
|
+
*/
|
|
48
|
+
export declare const HSX_LOCAL_PROXY_ORIGIN = "https://hsx-dev.local";
|
|
49
|
+
export declare const HSX_LOCAL_PROXY_RELAY_PATH = "/__hsx/relay";
|
|
50
|
+
export interface HubSpotLocalProxyPlan {
|
|
51
|
+
/** The `proxy` map the dev server will see, or undefined to hide local.json. */
|
|
52
|
+
readonly proxy: Readonly<Record<string, string>> | undefined;
|
|
53
|
+
/** User mappings and whether each one made it into the map. */
|
|
54
|
+
readonly mappings: readonly (HubSpotLocalProxyProbe & {
|
|
55
|
+
readonly applied: boolean;
|
|
56
|
+
})[];
|
|
57
|
+
/** True when the hs-x relay mapping is part of the map. */
|
|
58
|
+
readonly relay: boolean;
|
|
59
|
+
}
|
|
60
|
+
/** Why proxy mode stayed off (and with it the card's log channel). */
|
|
61
|
+
export type HubSpotLocalProxyBlocker = 'never' | 'no-mappings' | 'dead-target';
|
|
62
|
+
export interface HubSpotLocalProxyPlanInput {
|
|
63
|
+
readonly mode: HubSpotLocalProxyMode;
|
|
64
|
+
readonly probes: readonly HubSpotLocalProxyProbe[];
|
|
65
|
+
readonly relayTarget?: string | undefined;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Decide the proxy map for one start. Proxy mode is all-or-nothing for the
|
|
69
|
+
* app's fetches, so it is entered only where `hs project dev` would enter it
|
|
70
|
+
* (all mappings live) or on explicit `always`; the hs-x relay mapping rides
|
|
71
|
+
* along whenever proxy mode is on and a sidecar URL is given.
|
|
72
|
+
*/
|
|
73
|
+
export declare function planHubSpotLocalProxy(input: HubSpotLocalProxyPlanInput): HubSpotLocalProxyPlan & {
|
|
74
|
+
readonly blocker?: HubSpotLocalProxyBlocker;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Run one upstream dev-server start with `<appRoot>/local.json` presented as
|
|
78
|
+
* `{ proxy }` — the user's file (if any) is never touched. HubSpot's
|
|
79
|
+
* `loadLocalConfig` probes `fs.existsSync` and then `fs.readFileSync`, both
|
|
80
|
+
* through the default `fs` export, so both are answered for that one path.
|
|
81
|
+
*/
|
|
82
|
+
export declare function withHubSpotLocalProxyMappings<T>(appRoot: string, proxy: Readonly<Record<string, string>>, operation: () => Promise<T>): Promise<T>;
|
|
83
|
+
/**
|
|
84
|
+
* Run one upstream dev-server start with `<appRoot>/local.json` hidden from
|
|
85
|
+
* `fs.existsSync`, which is the only probe HubSpot's `loadLocalConfig` makes
|
|
86
|
+
* before reading the file. Nothing on disk changes, and the original method
|
|
87
|
+
* is restored as soon as the operation settles.
|
|
88
|
+
*/
|
|
89
|
+
export declare function withHubSpotLocalProxyHidden<T>(appRoot: string, operation: () => Promise<T>): Promise<T>;
|
|
90
|
+
//# sourceMappingURL=local-proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-proxy.d.ts","sourceRoot":"","sources":["../../src/dev/local-proxy.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAuB,SAAQ,wBAAwB;IACtE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,eAAO,MAAM,6BAA6B,eAAe,CAAC;AAG1D,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,wBAAwB,EAAE,CAAC,CAsB9C;AAED,wBAAsB,8BAA8B,CAClD,QAAQ,EAAE,SAAS,wBAAwB,EAAE,EAC7C,KAAK,GAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAwB,GACjE,OAAO,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAI5C;AAED,kFAAkF;AAClF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBrE;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAChE,eAAO,MAAM,yBAAyB,sCAAuC,CAAC;AAC9E,eAAO,MAAM,gCAAgC,EAAE,qBAA8B,CAAC;AAE9E,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,qBAAqB,CAG3F;AAED,+EAA+E;AAC/E,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,SAAS,sBAAsB,EAAE,GACxC,OAAO,CAKT;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAC9D,eAAO,MAAM,0BAA0B,iBAAiB,CAAC;AAEzD,MAAM,WAAW,qBAAqB;IACpC,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAC7D,+DAA+D;IAC/D,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,sBAAsB,GAAG;QAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,EAAE,CAAC;IACvF,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,sEAAsE;AACtE,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,aAAa,GAAG,aAAa,CAAC;AAE/E,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACnD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3C;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,qBAAqB,GAAG;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,wBAAwB,CAAA;CAAE,CAyBzE;AAOD;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAAC,CAAC,EACnD,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACvC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAsCZ;AAED;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAAC,CAAC,EACjD,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAoBZ"}
|