@msn-control/liftoff 0.6.0 → 0.6.2

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 CHANGED
@@ -68,6 +68,7 @@ write failures.
68
68
  | [Existing repositories](docs/existing-repositories.md) | Understand in-place, child-directory, and migration behavior |
69
69
  | [Prerequisites](docs/prerequisites.md) | Review plan-derived runtimes, tools, authentication, and dependency setup |
70
70
  | [Safety and consent](docs/safety-and-consent.md) | Review staging, overwrite, install, rollback, and ownership guarantees |
71
+ | [Telemetry and privacy](docs/telemetry.md) | Review collected fields, opt-outs, Azure processing, and retention |
71
72
  | [CLI reference](docs/cli-reference.md) | Find commands, flags, terminal modes, JSON, and exit-code contracts |
72
73
  | [Generated project structure](docs/project-structure.md) | Locate workload-specific and conditional generated areas |
73
74
  | [Configuration and manifests](docs/configuration-and-manifests.md) | Edit desired state and understand manifest schema v4 |
package/dist/cli.d.ts CHANGED
@@ -1,2 +1,22 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ import type { Readable } from 'node:stream';
3
+ import { parseArgs } from './args.js';
4
+ import { type CommandContext } from './commands.js';
5
+ import type { ParsedArgs } from './types.js';
6
+ export interface CliTelemetryHooks {
7
+ beforeCommand(stderr: NodeJS.WritableStream, env: NodeJS.ProcessEnv): Promise<boolean>;
8
+ afterCommand(parsed: ParsedArgs, exitCode: number, env: NodeJS.ProcessEnv): Promise<void>;
9
+ }
10
+ export interface RunCliOptions {
11
+ argv?: string[];
12
+ cwd?: string;
13
+ stdin?: Readable;
14
+ stdout?: NodeJS.WritableStream;
15
+ stderr?: NodeJS.WritableStream;
16
+ env?: NodeJS.ProcessEnv;
17
+ runtimeError?: () => string | undefined;
18
+ parse?: typeof parseArgs;
19
+ execute?: (parsed: ParsedArgs, context: CommandContext) => Promise<number>;
20
+ telemetry?: CliTelemetryHooks;
21
+ }
22
+ export declare function runCli(options?: RunCliOptions): Promise<number>;
package/dist/cli.js CHANGED
@@ -1,27 +1,95 @@
1
1
  #!/usr/bin/env node
2
+ import { realpathSync } from 'node:fs';
3
+ import path from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
2
5
  import { parseArgs } from './args.js';
3
6
  import { runCommand } from './commands.js';
4
7
  import { nodeRuntimeError } from './runtime.js';
8
+ import { maybeShowTelemetryNotice, telemetryCommandFor, trackCommand } from './telemetry/index.js';
5
9
  import { PresentationSession } from './terminal.js';
6
- try {
7
- const runtimeError = nodeRuntimeError();
8
- if (runtimeError) {
9
- throw new Error(runtimeError);
10
- }
11
- const parsed = parseArgs(process.argv.slice(2));
12
- process.exitCode = await runCommand(parsed, {
13
- cwd: process.cwd(),
14
- stdin: process.stdin,
15
- stdout: process.stdout,
16
- stderr: process.stderr
17
- });
18
- }
19
- catch (error) {
10
+ import { liftoffVersion } from './version.js';
11
+ const defaultTelemetryHooks = {
12
+ beforeCommand: (stderr, env) => maybeShowTelemetryNotice({ stderr, env }),
13
+ afterCommand: async (parsed, exitCode, env) => {
14
+ const command = telemetryCommandFor(parsed);
15
+ if (command) {
16
+ await trackCommand(command, liftoffVersion, exitCode, { env });
17
+ }
18
+ }
19
+ };
20
+ function renderEntrypointError(error, stdout, stderr) {
20
21
  const presentation = new PresentationSession({
21
- stdout: process.stdout,
22
- stderr: process.stderr
22
+ stdout,
23
+ stderr
23
24
  });
24
25
  presentation.error(error instanceof Error ? error.message : String(error), 'Run `liftoff help` to review accepted commands and options.');
25
- process.exitCode = 1;
26
+ }
27
+ async function safelyPrepareTelemetry(action) {
28
+ try {
29
+ return await action();
30
+ }
31
+ catch {
32
+ // Telemetry hooks are isolated from CLI behavior.
33
+ return false;
34
+ }
35
+ }
36
+ async function safelyRunTelemetry(action) {
37
+ try {
38
+ await action();
39
+ }
40
+ catch {
41
+ // Telemetry hooks are isolated from CLI behavior.
42
+ }
43
+ }
44
+ export async function runCli(options = {}) {
45
+ const stdout = options.stdout ?? process.stdout;
46
+ const stderr = options.stderr ?? process.stderr;
47
+ const env = options.env ?? process.env;
48
+ const runtimeError = options.runtimeError ?? nodeRuntimeError;
49
+ const parse = options.parse ?? parseArgs;
50
+ const execute = options.execute ?? runCommand;
51
+ const telemetry = options.telemetry ?? defaultTelemetryHooks;
52
+ let parsed;
53
+ try {
54
+ const error = runtimeError();
55
+ if (error) {
56
+ throw new Error(error);
57
+ }
58
+ parsed = parse(options.argv ?? process.argv.slice(2));
59
+ }
60
+ catch (error) {
61
+ renderEntrypointError(error, stdout, stderr);
62
+ return 1;
63
+ }
64
+ const telemetryReady = await safelyPrepareTelemetry(() => telemetry.beforeCommand(stderr, env));
65
+ let exitCode;
66
+ try {
67
+ exitCode = await execute(parsed, {
68
+ cwd: options.cwd ?? process.cwd(),
69
+ stdin: options.stdin ?? process.stdin,
70
+ stdout,
71
+ stderr
72
+ });
73
+ }
74
+ catch (error) {
75
+ renderEntrypointError(error, stdout, stderr);
76
+ exitCode = 1;
77
+ }
78
+ if (telemetryReady) {
79
+ await safelyRunTelemetry(() => telemetry.afterCommand(parsed, exitCode, env));
80
+ }
81
+ return exitCode;
82
+ }
83
+ function canonicalEntrypointPath(filePath) {
84
+ try {
85
+ return realpathSync(filePath);
86
+ }
87
+ catch {
88
+ return path.resolve(filePath);
89
+ }
90
+ }
91
+ if (process.argv[1] &&
92
+ canonicalEntrypointPath(process.argv[1]) === canonicalEntrypointPath(fileURLToPath(import.meta.url))) {
93
+ process.exitCode = await runCli();
26
94
  }
27
95
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,IAAI,CAAC;IACH,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;IACxC,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,QAAQ,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE;QAC1C,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,MAAM,YAAY,GAAG,IAAI,mBAAmB,CAAC;QAC3C,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IACH,YAAY,CAAC,KAAK,CAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACtD,6DAA6D,CAC9D,CAAC;IACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface TelemetryConfigPathOptions {
2
+ env?: NodeJS.ProcessEnv;
3
+ platform?: NodeJS.Platform;
4
+ homedir?: string;
5
+ }
6
+ export interface TelemetryConfigFileSystem {
7
+ readText(filePath: string): Promise<string>;
8
+ makeDirectory(directoryPath: string): Promise<void>;
9
+ writeExclusive(filePath: string, content: string): Promise<void>;
10
+ replaceFile(sourcePath: string, targetPath: string): Promise<void>;
11
+ removeFile(filePath: string): Promise<void>;
12
+ }
13
+ export interface TelemetryConfigOptions extends TelemetryConfigPathOptions {
14
+ configPath?: string;
15
+ fileSystem?: TelemetryConfigFileSystem;
16
+ }
17
+ export declare const nodeTelemetryConfigFileSystem: TelemetryConfigFileSystem;
18
+ export declare function getTelemetryConfigPath(options?: TelemetryConfigPathOptions): string;
19
+ export declare function readTelemetryNoticeVersion(options?: TelemetryConfigOptions): Promise<number | undefined>;
20
+ export declare function recordTelemetryNotice(options?: TelemetryConfigOptions): Promise<boolean>;
@@ -0,0 +1,105 @@
1
+ import { mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { telemetryNoticeVersion } from './contract.js';
5
+ const configDirectoryName = 'liftoff';
6
+ const configFileName = 'config.json';
7
+ let temporarySequence = 0;
8
+ export const nodeTelemetryConfigFileSystem = {
9
+ readText: (filePath) => readFile(filePath, 'utf8'),
10
+ makeDirectory: async (directoryPath) => {
11
+ await mkdir(directoryPath, { recursive: true });
12
+ },
13
+ writeExclusive: async (filePath, content) => {
14
+ await writeFile(filePath, content, { encoding: 'utf8', flag: 'wx', mode: 0o600 });
15
+ },
16
+ replaceFile: (sourcePath, targetPath) => rename(sourcePath, targetPath),
17
+ removeFile: async (filePath) => {
18
+ await rm(filePath, { force: true });
19
+ }
20
+ };
21
+ function isJsonObject(value) {
22
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
23
+ }
24
+ function platformPath(platform) {
25
+ return platform === 'win32' ? path.win32 : path.posix;
26
+ }
27
+ export function getTelemetryConfigPath(options = {}) {
28
+ const env = options.env ?? process.env;
29
+ const platform = options.platform ?? process.platform;
30
+ const paths = platformPath(platform);
31
+ const xdgConfigHome = env.XDG_CONFIG_HOME;
32
+ if (xdgConfigHome) {
33
+ return paths.join(xdgConfigHome, configDirectoryName, configFileName);
34
+ }
35
+ const homedir = options.homedir ?? os.homedir();
36
+ if (platform === 'win32') {
37
+ const appData = env.APPDATA ?? paths.join(homedir, 'AppData', 'Roaming');
38
+ return paths.join(appData, configDirectoryName, configFileName);
39
+ }
40
+ return paths.join(homedir, '.config', configDirectoryName, configFileName);
41
+ }
42
+ function resolveConfigPath(options) {
43
+ return options.configPath ?? getTelemetryConfigPath(options);
44
+ }
45
+ async function readConfig(options) {
46
+ const fileSystem = options.fileSystem ?? nodeTelemetryConfigFileSystem;
47
+ try {
48
+ const parsed = JSON.parse(await fileSystem.readText(resolveConfigPath(options)));
49
+ return isJsonObject(parsed)
50
+ ? { status: 'valid', config: parsed }
51
+ : { status: 'invalid', config: {} };
52
+ }
53
+ catch (error) {
54
+ if (error.code === 'ENOENT') {
55
+ return { status: 'missing', config: {} };
56
+ }
57
+ return { status: 'invalid', config: {} };
58
+ }
59
+ }
60
+ export async function readTelemetryNoticeVersion(options = {}) {
61
+ const result = await readConfig(options);
62
+ if (result.status !== 'valid') {
63
+ return undefined;
64
+ }
65
+ const telemetry = result.config.telemetry;
66
+ if (!isJsonObject(telemetry)) {
67
+ return undefined;
68
+ }
69
+ return Number.isInteger(telemetry.noticeVersion) && Number(telemetry.noticeVersion) >= 0
70
+ ? Number(telemetry.noticeVersion)
71
+ : undefined;
72
+ }
73
+ export async function recordTelemetryNotice(options = {}) {
74
+ const fileSystem = options.fileSystem ?? nodeTelemetryConfigFileSystem;
75
+ const configPath = resolveConfigPath(options);
76
+ const result = await readConfig(options);
77
+ if (result.status === 'invalid') {
78
+ return false;
79
+ }
80
+ const existingTelemetry = isJsonObject(result.config.telemetry)
81
+ ? result.config.telemetry
82
+ : {};
83
+ const config = {
84
+ ...result.config,
85
+ telemetry: {
86
+ ...existingTelemetry,
87
+ noticeVersion: telemetryNoticeVersion
88
+ }
89
+ };
90
+ const paths = platformPath(options.platform ?? process.platform);
91
+ const directory = paths.dirname(configPath);
92
+ temporarySequence += 1;
93
+ const temporaryPath = paths.join(directory, `.${paths.basename(configPath)}.${process.pid}.${temporarySequence}.tmp`);
94
+ try {
95
+ await fileSystem.makeDirectory(directory);
96
+ await fileSystem.writeExclusive(temporaryPath, `${JSON.stringify(config, null, 2)}\n`);
97
+ await fileSystem.replaceFile(temporaryPath, configPath);
98
+ return true;
99
+ }
100
+ catch {
101
+ await fileSystem.removeFile(temporaryPath).catch(() => undefined);
102
+ return false;
103
+ }
104
+ }
105
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/telemetry/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,QAAQ,EACR,MAAM,EACN,EAAE,EACF,SAAS,EACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEvD,MAAM,mBAAmB,GAAG,SAAS,CAAC;AACtC,MAAM,cAAc,GAAG,aAAa,CAAC;AACrC,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAuB1B,MAAM,CAAC,MAAM,6BAA6B,GAA8B;IACtE,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAClD,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE;QACrC,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,cAAc,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAC1C,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,WAAW,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC;IACvE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QAC7B,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;CACF,CAAC;AAOF,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,YAAY,CAAC,QAAyB;IAC7C,OAAO,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAO,GAA+B,EAAE;IAC7E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACtD,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,aAAa,GAAG,GAAG,CAAC,eAAe,CAAC;IAC1C,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,mBAAmB,EAAE,cAAc,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAChD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,EAAE,cAAc,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,cAAc,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,iBAAiB,CAAC,OAA+B;IACxD,OAAO,OAAO,CAAC,UAAU,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAA+B;IACvD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,6BAA6B,CAAC;IACvE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAY,CAAC;QAC5F,OAAO,YAAY,CAAC,MAAM,CAAC;YACzB,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;YACrC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAAO,GAA2B,EAAE;IAEpC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;IAC1C,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC;QACtF,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC;QACjC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAO,GAA2B,EAAE;IAEpC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,6BAA6B,CAAC;IACvE,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7D,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS;QACzB,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG;QACb,GAAG,MAAM,CAAC,MAAM;QAChB,SAAS,EAAE;YACT,GAAG,iBAAiB;YACpB,aAAa,EAAE,sBAAsB;SACtC;KACF,CAAC;IACF,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,iBAAiB,IAAI,CAAC,CAAC;IACvB,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAC9B,SAAS,EACT,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,iBAAiB,MAAM,CACzE,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,UAAU,CAAC,cAAc,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACvF,MAAM,UAAU,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,33 @@
1
+ export declare const telemetrySchemaVersion: 1;
2
+ export declare const telemetryEventName: 'command_executed';
3
+ export declare const telemetryNoticeVersion: 1;
4
+ export declare const telemetryClientFields: readonly ['schemaVersion', 'event', 'command', 'cliVersion', 'outcome'];
5
+ export declare const telemetryStorageFields: readonly ['TimeGenerated', 'EventName', 'SchemaVersion', 'Command', 'CliVersion', 'Outcome'];
6
+ export declare const telemetryCommands: readonly ['help', 'version', 'init', 'plan', 'patterns', 'providers', 'regions', 'regions:search', 'validate', 'update', 'migrate', 'doctor', 'dev', 'dev:up', 'dev:down', 'dev:logs', 'dev:reset', 'infra', 'infra:init', 'infra:plan', 'infra:apply', 'infra:output'];
7
+ export type TelemetryCommand = (typeof telemetryCommands)[number];
8
+ export type TelemetryOutcome = 'success' | 'failure';
9
+ export interface TelemetryEvent {
10
+ schemaVersion: typeof telemetrySchemaVersion;
11
+ event: typeof telemetryEventName;
12
+ command: TelemetryCommand;
13
+ cliVersion: string;
14
+ outcome: TelemetryOutcome;
15
+ }
16
+ export interface TelemetryStorageRecord {
17
+ TimeGenerated: string;
18
+ EventName: typeof telemetryEventName;
19
+ SchemaVersion: typeof telemetrySchemaVersion;
20
+ Command: TelemetryCommand;
21
+ CliVersion: string;
22
+ Outcome: TelemetryOutcome;
23
+ }
24
+ export interface TelemetryCommandInput {
25
+ command?: string;
26
+ subcommand?: string;
27
+ flags: Readonly<Record<string, unknown>>;
28
+ }
29
+ export declare function isTelemetryCommand(value: unknown): value is TelemetryCommand;
30
+ export declare function isTelemetryCliVersion(value: unknown): value is string;
31
+ export declare function canonicalTelemetryCommand(input: TelemetryCommandInput): TelemetryCommand | undefined;
32
+ export declare function createTelemetryEvent(command: TelemetryCommand, cliVersion: string, exitCode: number): TelemetryEvent;
33
+ export declare function createTelemetryStorageRecord(event: TelemetryEvent, generatedAt: Date): TelemetryStorageRecord;
@@ -0,0 +1,82 @@
1
+ export const telemetrySchemaVersion = 1;
2
+ export const telemetryEventName = 'command_executed';
3
+ export const telemetryNoticeVersion = 1;
4
+ export const telemetryClientFields = [
5
+ 'schemaVersion',
6
+ 'event',
7
+ 'command',
8
+ 'cliVersion',
9
+ 'outcome'
10
+ ];
11
+ export const telemetryStorageFields = [
12
+ 'TimeGenerated',
13
+ 'EventName',
14
+ 'SchemaVersion',
15
+ 'Command',
16
+ 'CliVersion',
17
+ 'Outcome'
18
+ ];
19
+ export const telemetryCommands = [
20
+ 'help',
21
+ 'version',
22
+ 'init',
23
+ 'plan',
24
+ 'patterns',
25
+ 'providers',
26
+ 'regions',
27
+ 'regions:search',
28
+ 'validate',
29
+ 'update',
30
+ 'migrate',
31
+ 'doctor',
32
+ 'dev',
33
+ 'dev:up',
34
+ 'dev:down',
35
+ 'dev:logs',
36
+ 'dev:reset',
37
+ 'infra',
38
+ 'infra:init',
39
+ 'infra:plan',
40
+ 'infra:apply',
41
+ 'infra:output'
42
+ ];
43
+ const telemetryCommandSet = new Set(telemetryCommands);
44
+ const telemetryCliVersionPattern = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-(?:alpha|beta|rc)(?:\.(0|[1-9]\d*))?)?$/;
45
+ export function isTelemetryCommand(value) {
46
+ return typeof value === 'string' && telemetryCommandSet.has(value);
47
+ }
48
+ export function isTelemetryCliVersion(value) {
49
+ return typeof value === 'string' && telemetryCliVersionPattern.test(value);
50
+ }
51
+ export function canonicalTelemetryCommand(input) {
52
+ if (input.command === undefined ||
53
+ input.command === 'help' ||
54
+ input.command === '--help' ||
55
+ input.flags.help === true) {
56
+ return 'help';
57
+ }
58
+ const candidate = input.subcommand
59
+ ? `${input.command}:${input.subcommand}`
60
+ : input.command;
61
+ return isTelemetryCommand(candidate) ? candidate : undefined;
62
+ }
63
+ export function createTelemetryEvent(command, cliVersion, exitCode) {
64
+ return {
65
+ schemaVersion: telemetrySchemaVersion,
66
+ event: telemetryEventName,
67
+ command,
68
+ cliVersion,
69
+ outcome: exitCode === 0 ? 'success' : 'failure'
70
+ };
71
+ }
72
+ export function createTelemetryStorageRecord(event, generatedAt) {
73
+ return {
74
+ TimeGenerated: generatedAt.toISOString(),
75
+ EventName: event.event,
76
+ SchemaVersion: event.schemaVersion,
77
+ Command: event.command,
78
+ CliVersion: event.cliVersion,
79
+ Outcome: event.outcome
80
+ };
81
+ }
82
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/telemetry/contract.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAU,CAAC;AACjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAA2B,CAAC;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAU,CAAC;AACjD,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,eAAe;IACf,OAAO;IACP,SAAS;IACT,YAAY;IACZ,SAAS;CACD,CAAC;AACX,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,eAAe;IACf,WAAW;IACX,eAAe;IACf,SAAS;IACT,YAAY;IACZ,SAAS;CACD,CAAC;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,MAAM;IACN,SAAS;IACT,MAAM;IACN,MAAM;IACN,UAAU;IACV,WAAW;IACX,SAAS;IACT,gBAAgB;IAChB,UAAU;IACV,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,UAAU;IACV,UAAU;IACV,WAAW;IACX,OAAO;IACP,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,cAAc;CACN,CAAC;AA4BX,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAC5E,MAAM,0BAA0B,GAC9B,sFAAsF,CAAC;AAEzF,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAA4B;IACpE,IACE,KAAK,CAAC,OAAO,KAAK,SAAS;QAC3B,KAAK,CAAC,OAAO,KAAK,MAAM;QACxB,KAAK,CAAC,OAAO,KAAK,QAAQ;QAC1B,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,EACzB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU;QAChC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,UAAU,EAAE;QACxC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IAClB,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,OAAyB,EACzB,UAAkB,EAClB,QAAgB;IAEhB,OAAO;QACL,aAAa,EAAE,sBAAsB;QACrC,KAAK,EAAE,kBAAkB;QACzB,OAAO;QACP,UAAU;QACV,OAAO,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,KAAqB,EACrB,WAAiB;IAEjB,OAAO;QACL,aAAa,EAAE,WAAW,CAAC,WAAW,EAAE;QACxC,SAAS,EAAE,KAAK,CAAC,KAAK;QACtB,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ParsedArgs } from '../types.js';
2
+ import { type TelemetryCommand } from './contract.js';
3
+ import { type TelemetryConfigOptions } from './config.js';
4
+ export declare const productionTelemetryEndpoint = "https://ca-liftoff-telemetry-f5be1618.politetree-7a65ae27.koreacentral.azurecontainerapps.io/api/events";
5
+ export declare const telemetryRequestTimeoutMs = 1000;
6
+ export declare const telemetryNotice: string;
7
+ export type TelemetryFetch = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
8
+ export interface TelemetryRuntimeOptions {
9
+ env?: NodeJS.ProcessEnv;
10
+ endpoint?: string;
11
+ fetch?: TelemetryFetch;
12
+ timeoutMs?: number;
13
+ config?: TelemetryConfigOptions;
14
+ stderr?: NodeJS.WritableStream;
15
+ }
16
+ export declare function isTelemetryEnabled(env?: NodeJS.ProcessEnv): boolean;
17
+ export declare function telemetryCommandFor(parsed: ParsedArgs): TelemetryCommand | undefined;
18
+ export declare function maybeShowTelemetryNotice(options?: TelemetryRuntimeOptions): Promise<boolean>;
19
+ export declare function trackCommand(command: TelemetryCommand, cliVersion: string, exitCode: number, options?: TelemetryRuntimeOptions): Promise<void>;
@@ -0,0 +1,97 @@
1
+ import { canonicalTelemetryCommand, createTelemetryEvent, telemetryNoticeVersion } from './contract.js';
2
+ import { readTelemetryNoticeVersion, recordTelemetryNotice } from './config.js';
3
+ export const productionTelemetryEndpoint = 'https://ca-liftoff-telemetry-f5be1618.politetree-7a65ae27.koreacentral.azurecontainerapps.io/api/events';
4
+ export const telemetryRequestTimeoutMs = 1_000;
5
+ export const telemetryNotice = 'Telemetry: Liftoff sends command name, CLI version, and zero/nonzero outcome with no persistent identifier. ' +
6
+ 'Opt out with LIFTOFF_TELEMETRY=0 or DO_NOT_TRACK=1.\n';
7
+ export function isTelemetryEnabled(env = process.env) {
8
+ return (env.LIFTOFF_TELEMETRY !== '0' &&
9
+ env.DO_NOT_TRACK !== '1' &&
10
+ env.CI !== 'true');
11
+ }
12
+ export function telemetryCommandFor(parsed) {
13
+ return canonicalTelemetryCommand(parsed);
14
+ }
15
+ export async function maybeShowTelemetryNotice(options = {}) {
16
+ if (!isTelemetryEnabled(options.env)) {
17
+ return false;
18
+ }
19
+ try {
20
+ const seenVersion = await readTelemetryNoticeVersion(options.config);
21
+ if (seenVersion !== undefined && seenVersion >= telemetryNoticeVersion) {
22
+ return true;
23
+ }
24
+ if (!(await writeTelemetryNotice(options.stderr ?? process.stderr))) {
25
+ return false;
26
+ }
27
+ await recordTelemetryNotice(options.config);
28
+ return true;
29
+ }
30
+ catch {
31
+ // Telemetry disclosure state must never affect command execution.
32
+ return false;
33
+ }
34
+ }
35
+ function writeTelemetryNotice(stderr) {
36
+ return new Promise((resolve) => {
37
+ let settled = false;
38
+ const finish = (success, awaitErrorEvent = false) => {
39
+ if (settled) {
40
+ return;
41
+ }
42
+ settled = true;
43
+ if (!awaitErrorEvent) {
44
+ stderr.removeListener('error', onError);
45
+ }
46
+ resolve(success);
47
+ };
48
+ const onError = () => {
49
+ finish(false);
50
+ };
51
+ stderr.once('error', onError);
52
+ try {
53
+ stderr.write(telemetryNotice, (error) => {
54
+ finish(error == null, error != null);
55
+ });
56
+ }
57
+ catch {
58
+ finish(false);
59
+ }
60
+ });
61
+ }
62
+ export async function trackCommand(command, cliVersion, exitCode, options = {}) {
63
+ if (!isTelemetryEnabled(options.env)) {
64
+ return;
65
+ }
66
+ const endpoint = options.endpoint ?? productionTelemetryEndpoint;
67
+ if (!endpoint) {
68
+ return;
69
+ }
70
+ let url;
71
+ try {
72
+ url = new URL(endpoint);
73
+ }
74
+ catch {
75
+ return;
76
+ }
77
+ if (url.protocol !== 'https:') {
78
+ return;
79
+ }
80
+ const fetchTelemetry = options.fetch ?? globalThis.fetch.bind(globalThis);
81
+ try {
82
+ const response = await fetchTelemetry(url, {
83
+ method: 'POST',
84
+ headers: { 'content-type': 'application/json' },
85
+ body: JSON.stringify(createTelemetryEvent(command, cliVersion, exitCode)),
86
+ redirect: 'error',
87
+ signal: AbortSignal.timeout(options.timeoutMs ?? telemetryRequestTimeoutMs)
88
+ });
89
+ if (!response.ok) {
90
+ return;
91
+ }
92
+ }
93
+ catch {
94
+ // Delivery is deliberately best-effort and never retried or persisted.
95
+ }
96
+ }
97
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"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"}
@@ -87,6 +87,7 @@ export declare class TerminalRenderer {
87
87
  tableSection(title: string, headers: readonly string[], rows: readonly (readonly string[])[]): string;
88
88
  status(kind: StatusKind, label: string, detail?: string): string;
89
89
  command(value: string): string;
90
+ recommendedCommand(value: string): string;
90
91
  prompt(label: string, defaultValue?: string): string;
91
92
  promptContext(label: string, detail?: string): string;
92
93
  remedy(value: string): string;
@@ -94,7 +95,7 @@ export declare class TerminalRenderer {
94
95
  warning(value: string): string;
95
96
  error(value: string, remedy?: string): string;
96
97
  cancellation(value: string): string;
97
- completion(label: string, detail?: string, items?: readonly DefinitionItem[], nextCommand?: string): string;
98
+ completion(label: string, detail?: string, items?: readonly DefinitionItem[], recommendedCommand?: string): string;
98
99
  confirmation(value: string): string;
99
100
  }
100
101
  export declare class PresentationSession {
@@ -117,7 +118,7 @@ export declare class PresentationSession {
117
118
  command(value: string): void;
118
119
  remedy(value: string): void;
119
120
  cancellation(value: string): void;
120
- completion(label: string, detail?: string, items?: readonly DefinitionItem[], nextCommand?: string): void;
121
+ completion(label: string, detail?: string, items?: readonly DefinitionItem[], recommendedCommand?: string): void;
121
122
  error(message: string, remedy?: string): void;
122
123
  rawStdout(value: string): void;
123
124
  rawStderr(value: string): void;
package/dist/terminal.js CHANGED
@@ -453,6 +453,19 @@ export class TerminalRenderer {
453
453
  ? ''
454
454
  : `${this.style('command', '$')} ${this.colors.bold(value)}\n`;
455
455
  }
456
+ recommendedCommand(value) {
457
+ const rendered = this.command(value);
458
+ if (!rendered) {
459
+ return '';
460
+ }
461
+ const title = 'Next recommended command';
462
+ const heading = this.layout === 'plain'
463
+ ? `${wrapVisible(title, this.columns)
464
+ .map((line) => this.colors.bold(line))
465
+ .join('\n')}\n`
466
+ : this.heading(title);
467
+ return `${heading}${rendered}\n`;
468
+ }
456
469
  prompt(label, defaultValue) {
457
470
  if (this.jsonMode) {
458
471
  return '';
@@ -496,11 +509,13 @@ export class TerminalRenderer {
496
509
  cancellation(value) {
497
510
  return this.status('info', 'Cancelled', value);
498
511
  }
499
- completion(label, detail, items = [], nextCommand) {
512
+ completion(label, detail, items = [], recommendedCommand) {
500
513
  return [
501
514
  this.status('success', label, detail),
502
515
  ...(items.length > 0 ? [this.definitionList('Completion', items)] : []),
503
- ...(nextCommand ? [this.command(nextCommand)] : [])
516
+ ...(recommendedCommand
517
+ ? [this.recommendedCommand(recommendedCommand)]
518
+ : [])
504
519
  ].join('');
505
520
  }
506
521
  confirmation(value) {
@@ -569,8 +584,8 @@ export class PresentationSession {
569
584
  cancellation(value) {
570
585
  this.stdout.write(this.stdout.cancellation(value));
571
586
  }
572
- completion(label, detail, items = [], nextCommand) {
573
- this.stdout.write(this.stdout.completion(label, detail, items, nextCommand));
587
+ completion(label, detail, items = [], recommendedCommand) {
588
+ this.stdout.write(this.stdout.completion(label, detail, items, recommendedCommand));
574
589
  }
575
590
  error(message, remedy) {
576
591
  if (this.stderr.jsonMode) {
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"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"}
@@ -122,6 +122,10 @@ the first question.
122
122
  - Narrow or redirected output is deterministic plain text without ANSI
123
123
  sequences or decorative borders.
124
124
 
125
+ Successful completion may include a section labeled `Next recommended command`.
126
+ The `$`-prefixed command is a suggested next action for the developer to review
127
+ and run; Liftoff has not executed it automatically.
128
+
125
129
  Set `NO_COLOR=1` to keep the selected layout without ANSI color:
126
130
 
127
131
  ```bash
@@ -98,6 +98,23 @@ does not claim framework-owned files in durable artifact hashes.
98
98
  One-time seed content is also omitted from durable hashes so it can follow its
99
99
  own lifecycle after generation.
100
100
 
101
+ ## Telemetry boundary
102
+
103
+ Liftoff sends only a recognized command name, CLI version, and zero/nonzero
104
+ outcome after a command completes. It creates no persistent installation or
105
+ session identifier and sends no arguments, paths, project data, errors, timing,
106
+ or host details.
107
+
108
+ Telemetry is enabled by default after a one-time disclosure. Set
109
+ `LIFTOFF_TELEMETRY=0` or `DO_NOT_TRACK=1` to disable it; `CI=true` disables it
110
+ automatically. Delivery is one bounded HTTPS attempt and cannot change command
111
+ output or exit status.
112
+
113
+ Azure necessarily handles a source network address while routing HTTPS, but
114
+ Liftoff does not include it in the event, derive geolocation from it, or persist
115
+ it in the product telemetry table. See [telemetry and privacy](telemetry.md) for
116
+ the exact fields, Azure boundary, OpenTofu deployment, and 180-day retention.
117
+
101
118
  ## Credentials and external actions
102
119
 
103
120
  Generated files contain configuration boundaries, not real credentials.
@@ -0,0 +1,168 @@
1
+ # Telemetry and privacy
2
+
3
+ Liftoff collects a small aggregate event to understand which CLI commands are
4
+ useful and whether they exit with zero or nonzero status. Telemetry is enabled
5
+ by default, disclosed before the first eligible command, and never required for
6
+ the CLI to work. It creates no persistent installation or session identifier.
7
+
8
+ ## Event contract
9
+
10
+ Each recognized command can send at most one event after it finishes:
11
+
12
+ ```json
13
+ {
14
+ "schemaVersion": 1,
15
+ "event": "command_executed",
16
+ "command": "infra:plan",
17
+ "cliVersion": "0.6.1",
18
+ "outcome": "success"
19
+ }
20
+ ```
21
+
22
+ `outcome` is `success` for exit code zero and `failure` for every nonzero exit
23
+ code. It is an exit-status class, not an error diagnosis. Help requests are
24
+ recorded as `help`, and rejected input that never resolves to a recognized
25
+ command is not recorded.
26
+
27
+ Liftoff does **not** send:
28
+
29
+ - An installation, user, device, or session identifier.
30
+ - A client timestamp or duration.
31
+ - Arguments, flags, paths, project names, config values, manifests, or generated
32
+ content.
33
+ - Error text, stack traces, operating-system details, Node.js version, cloud,
34
+ workload, region, or environment choices.
35
+ - A source IP address or derived location in the event.
36
+
37
+ Liftoff creates no telemetry queue and stores no event locally. Its only local
38
+ telemetry state is a numeric disclosure version in the platform configuration
39
+ directory.
40
+
41
+ ## Disable telemetry
42
+
43
+ Set either variable before running Liftoff:
44
+
45
+ ```bash
46
+ export LIFTOFF_TELEMETRY=0
47
+ export DO_NOT_TRACK=1
48
+ ```
49
+
50
+ On PowerShell:
51
+
52
+ ```powershell
53
+ $env:LIFTOFF_TELEMETRY = "0"
54
+ $env:DO_NOT_TRACK = "1"
55
+ ```
56
+
57
+ Telemetry is also disabled when `CI=true`. Disabled runs do not show the notice,
58
+ create telemetry state, or initialize network transport.
59
+
60
+ ## Delivery and failure behavior
61
+
62
+ The CLI makes one HTTPS request after command completion with a maximum
63
+ one-second delivery budget. It does not retry, buffer, read a response body, or
64
+ report telemetry failures. Offline use, command output, JSON stdout, and the
65
+ original exit status remain unchanged when the service is unavailable.
66
+
67
+ ## Azure processing and retention
68
+
69
+ The public endpoint is a strict-schema plain Node.js service in Azure Container
70
+ Apps. It counts streamed bytes before parsing, rejects unknown or additional
71
+ fields, and adds server-side `TimeGenerated`. A managed identity then writes only
72
+ these Liftoff-defined columns through an Azure Monitor data collection rule:
73
+
74
+ ```text
75
+ TimeGenerated, EventName, SchemaVersion, Command, CliVersion, Outcome
76
+ ```
77
+
78
+ Azure Monitor adds standard workspace system columns after the data collection
79
+ rule transformation. Those platform columns contain tenant, type, item, and
80
+ billing metadata; they are not additional Liftoff event fields and are not
81
+ populated from the request body, source IP, or derived geolocation.
82
+
83
+ Azure networking necessarily handles the source network address while routing
84
+ HTTPS. Liftoff does not copy that address into the event, derive geolocation
85
+ from it, forward it to the data collection rule, or configure the product
86
+ workspace to persist Container Apps ingress or console telemetry. The Container
87
+ Apps environment has persistent platform logs disabled, and the gateway has no
88
+ Application Insights connection string or instrumentation key.
89
+
90
+ Accepted events are stored in `LiftoffCommandEvents_CL` in the operator-selected
91
+ Azure region for 180 days of analytics and total retention, with no additional
92
+ long-term retention. Query access uses Microsoft Entra ID and Azure RBAC.
93
+ Aggregate counts are directional because a public, unauthenticated endpoint can
94
+ receive forged events.
95
+
96
+ ## Operator deployment boundary
97
+
98
+ Production telemetry resources are created and managed in the fixed resource
99
+ group `rg-liftoff-prod`. OpenTofu owns the group, applies deletion protection,
100
+ and deploys ACR Basic, a commit-pinned ACR build task, a Container Apps
101
+ environment, one warm Container App replica, managed identity, workspace,
102
+ custom table, data collection endpoint, and data collection rule.
103
+
104
+ The registry contains only the already-public gateway image. Administrator
105
+ credentials and anonymous pull are disabled; the Container App uses its
106
+ resource-scoped `AcrPull` identity. A full public Git commit SHA identifies the
107
+ build tag; the running Container App is pinned to the resolved `sha256` manifest
108
+ digest, never a branch, `latest`, or tag-only reference.
109
+
110
+ OpenTofu state storage remains in a separate enforced Azure Network Security
111
+ Perimeter. Its explicit operator IPv4 `/32` CIDRs live only in ignored local
112
+ inputs, and Entra authentication plus storage-scoped RBAC remain required. The
113
+ Container App needs no Function host/deployment storage, package blob, or Azure
114
+ Files share.
115
+
116
+ The gateway uses the smallest Container Apps Consumption allocation: 0.25 vCPU,
117
+ 0.5 GiB, one minimum replica, and five maximum replicas. Keeping one replica
118
+ ready prevents scale-to-zero cold starts from consuming the client's one-second
119
+ delivery budget. It adds reduced idle compute cost plus ACR Basic cost.
120
+
121
+ From the repository root, operators build and validate with:
122
+
123
+ ```bash
124
+ npm ci --prefix services/telemetry-ingest
125
+ npm run check --prefix services/telemetry-ingest
126
+ npm run package --prefix services/telemetry-ingest
127
+ npm run smoke:container --prefix services/telemetry-ingest
128
+ tofu -chdir=infrastructure/opentofu/telemetry fmt -check
129
+ tofu -chdir=infrastructure/opentofu/telemetry init -backend=false
130
+ tofu -chdir=infrastructure/opentofu/telemetry validate
131
+ ```
132
+
133
+ Real environments must use access-controlled remote state and Entra
134
+ authentication. Before apply, review the subscription, region, unique resource
135
+ suffix, full public source revision, immutable image digest,
136
+ `rg-liftoff-prod` deletion protection, ACR administrator and anonymous-access
137
+ disablement, managed-identity roles, one-to-five replica bounds, disabled
138
+ persistent platform logs, six-column schema, 180-day retention, ingestion
139
+ quota, and state perimeter rules. Operator CIDRs live only in ignored local
140
+ inputs. If the operator IP changes, update and apply the bootstrap access rule
141
+ through the Azure control plane before retrying backend access. Use the same
142
+ reviewed production variable file for every plan, apply, and emergency
143
+ disablement so region, image revision, and quota inputs cannot fall back to
144
+ defaults.
145
+ Every infrastructure lifecycle action uses `tofu`; Liftoff does not use Bicep,
146
+ `azd`, Terraform CLI, or ad hoc Azure resource commands for this service.
147
+
148
+ Standard GitHub-hosted runners run static validation only. They do not plan or
149
+ apply production because their dynamic networks are not admitted to the
150
+ perimeter.
151
+
152
+ After apply, operators must verify the registry identity boundary, one ready
153
+ replica, sub-second endpoint response, synthetic allowlisted event, six
154
+ Liftoff-defined columns, expected Azure system columns, server time, retention,
155
+ and absence of request, IP, geolocation, Container Apps platform/console, or
156
+ Application Insights records before compiling the endpoint into a Liftoff
157
+ release.
158
+
159
+ The final production architecture contains no Function App, FC1 plan, product
160
+ storage, OneDeploy action, or production storage-perimeter association.
161
+
162
+ For emergency disablement, apply the OpenTofu configuration with
163
+ `ingestion_enabled=false`, then publish a patch with client delivery disabled.
164
+ Rollback preserves `rg-liftoff-prod`; do not destroy the protected production
165
+ resource group.
166
+
167
+ Normal `liftoff` commands never authenticate to Azure, read OpenTofu state, or
168
+ deploy telemetry infrastructure.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@msn-control/liftoff",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
4
  "description": "Interactive CLI for governed GenAI, API, and Power Apps code app projects.",
5
5
  "type": "module",
6
6
  "license": "GPL-3.0-only",