@oaysus/cli 0.1.15 → 0.1.16

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
@@ -182,6 +182,18 @@ Authentication and account management.
182
182
  | `oaysus switch` | Switch between your websites |
183
183
  | `oaysus logout` | Clear authentication tokens |
184
184
 
185
+ ### Telemetry Commands
186
+
187
+ Manage anonymous usage analytics.
188
+
189
+ | Command | Description |
190
+ |---------|-------------|
191
+ | `oaysus telemetry status` | Show current telemetry status |
192
+ | `oaysus telemetry enable` | Enable anonymous usage tracking |
193
+ | `oaysus telemetry disable` | Disable anonymous usage tracking |
194
+
195
+ Oaysus CLI collects anonymous usage data to help improve the tool. No personal data, file contents, or source code is collected. You can also disable telemetry via the `OAYSUS_TELEMETRY_DISABLED=1` environment variable.
196
+
185
197
  ## Project Structure
186
198
 
187
199
  ```
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA0CA;;;GAGG;AAEH;;;GAGG;AACH,wBAAsB,MAAM,kBAsP3B"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAgDA;;;GAGG;AAEH;;;GAGG;AACH,wBAAsB,MAAM,kBA8R3B"}
package/dist/cli.js CHANGED
@@ -19,10 +19,12 @@ import { SitePublishScreen } from './screens/site/SitePublishScreen.js';
19
19
  import { SitePullScreen } from './screens/site/SitePullScreen.js';
20
20
  import { SiteInitScreen } from './screens/site/SiteInitScreen.js';
21
21
  import { App } from './components/App.js';
22
+ import { TelemetryScreen } from './screens/TelemetryScreen.js';
22
23
  import { saveCommandToHistory } from './lib/shared/command-history.js';
23
24
  import { push } from './lib/push.js';
24
25
  import { switchCommand } from './commands/switch.js';
25
26
  import { checkAuthForCommand } from './lib/shared/auth-middleware.js';
27
+ import { initTelemetry, trackCommand, flushEvents, } from './lib/shared/telemetry.js';
26
28
  // Get package version function
27
29
  const __filename = fileURLToPath(import.meta.url);
28
30
  const __dirname = path.dirname(__filename);
@@ -47,8 +49,21 @@ async function getVersion() {
47
49
  export async function runCli() {
48
50
  const args = process.argv.slice(2);
49
51
  const command = args[0];
50
- // Handle exit callback
51
- const handleExit = () => {
52
+ const startTime = Date.now();
53
+ // Initialize telemetry and show first-run notice if needed
54
+ const telemetryStatus = await initTelemetry();
55
+ if (telemetryStatus.showNotice) {
56
+ console.log('\nOaysus CLI collects anonymous usage data to help improve the tool.');
57
+ console.log('Run `oaysus telemetry disable` to opt out.\n');
58
+ }
59
+ // Handle exit callback with telemetry flush
60
+ const handleExit = async () => {
61
+ // Track command completion
62
+ if (command && command !== 'telemetry') {
63
+ const durationMs = Date.now() - startTime;
64
+ await trackCommand(command, { success: true, durationMs });
65
+ await flushEvents();
66
+ }
52
67
  process.exit(0);
53
68
  };
54
69
  // Handle version flag
@@ -89,6 +104,7 @@ Global Commands
89
104
  logout Clear authentication tokens
90
105
  whoami Display current user information
91
106
  switch Switch between your websites
107
+ telemetry <action> Manage telemetry (status, enable, disable)
92
108
 
93
109
  Options
94
110
  --help, -h Show this help message
@@ -253,6 +269,20 @@ For more information, visit https://oaysus.com/docs/cli
253
269
  render(React.createElement(SwitchScreen, { onExit: handleExit }));
254
270
  }
255
271
  break;
272
+ case 'telemetry': {
273
+ const action = args[1];
274
+ if (!action || !['status', 'enable', 'disable'].includes(action)) {
275
+ console.error('Usage: oaysus telemetry <status|enable|disable>');
276
+ console.log('');
277
+ console.log('Available actions:');
278
+ console.log(' status Show current telemetry status');
279
+ console.log(' enable Enable telemetry');
280
+ console.log(' disable Disable telemetry');
281
+ process.exit(1);
282
+ }
283
+ render(React.createElement(TelemetryScreen, { action, onExit: handleExit }));
284
+ break;
285
+ }
256
286
  default:
257
287
  console.error(`Unknown command: ${command}`);
258
288
  console.log('');
@@ -263,8 +293,16 @@ For more information, visit https://oaysus.com/docs/cli
263
293
  console.log(' oaysus logout Clear authentication');
264
294
  console.log(' oaysus whoami Display current user');
265
295
  console.log(' oaysus switch Switch websites');
296
+ console.log(' oaysus telemetry Manage telemetry settings');
266
297
  console.log('');
267
298
  console.log('Run "oaysus --help" for more information');
299
+ // Track unknown command
300
+ await trackCommand(command, {
301
+ success: false,
302
+ errorType: 'UnknownCommand',
303
+ errorMessage: `Unknown command: ${command}`,
304
+ });
305
+ await flushEvents();
268
306
  process.exit(1);
269
307
  }
270
308
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * CLI Telemetry Module
3
+ *
4
+ * Tracks anonymous usage data to help improve the Oaysus CLI.
5
+ * Users can opt out via:
6
+ * - Command: oaysus telemetry disable
7
+ * - Env var: OAYSUS_TELEMETRY_DISABLED=1
8
+ * - Config file: ~/.oaysus/config.json -> telemetryEnabled: false
9
+ */
10
+ /**
11
+ * Telemetry event structure
12
+ */
13
+ export interface TelemetryEvent {
14
+ eventName: string;
15
+ cliVersion: string;
16
+ timestamp?: string;
17
+ userId?: string;
18
+ email?: string;
19
+ websiteId?: string;
20
+ nodeVersion?: string;
21
+ osPlatform?: string;
22
+ osArch?: string;
23
+ command?: string;
24
+ success?: string;
25
+ durationMs?: number;
26
+ errorType?: string;
27
+ errorMessage?: string;
28
+ properties?: Record<string, unknown>;
29
+ }
30
+ /**
31
+ * Check if telemetry is enabled
32
+ * Priority: Env var > Config file > Default (enabled)
33
+ */
34
+ export declare function isTelemetryEnabled(): Promise<boolean>;
35
+ /**
36
+ * Enable or disable telemetry
37
+ */
38
+ export declare function setTelemetryEnabled(enabled: boolean): Promise<void>;
39
+ /**
40
+ * Check if the telemetry notice has been shown
41
+ */
42
+ export declare function hasSeenTelemetryNotice(): Promise<boolean>;
43
+ /**
44
+ * Mark the telemetry notice as shown
45
+ */
46
+ export declare function markTelemetryNoticeShown(): Promise<void>;
47
+ /**
48
+ * Get telemetry status for display
49
+ */
50
+ export declare function getTelemetryStatus(): Promise<{
51
+ enabled: boolean;
52
+ noticeShown: boolean;
53
+ envDisabled: boolean;
54
+ }>;
55
+ /**
56
+ * Track a telemetry event (queued for batching)
57
+ */
58
+ export declare function trackEvent(eventName: string, properties?: Record<string, unknown>): Promise<void>;
59
+ /**
60
+ * Track a CLI command execution
61
+ */
62
+ export declare function trackCommand(command: string, options?: {
63
+ success?: boolean;
64
+ durationMs?: number;
65
+ errorType?: string;
66
+ errorMessage?: string;
67
+ properties?: Record<string, unknown>;
68
+ }): Promise<void>;
69
+ /**
70
+ * Flush all queued events to the backend
71
+ * GA4 forwarding is handled server-side to keep credentials secure
72
+ */
73
+ export declare function flushEvents(): Promise<void>;
74
+ /**
75
+ * Initialize telemetry on CLI startup
76
+ * Shows first-run notice if needed
77
+ */
78
+ export declare function initTelemetry(): Promise<{
79
+ enabled: boolean;
80
+ showNotice: boolean;
81
+ }>;
82
+ /**
83
+ * Graceful shutdown - flush any remaining events
84
+ */
85
+ export declare function shutdownTelemetry(): Promise<void>;
86
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../../src/lib/shared/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAqBH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AA2CD;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAU3D;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzE;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG/D;AAED;;GAEG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAI9D;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC,CAUD;AAgCD;;GAEG;AACH,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CA+Cf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC,GACA,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAED;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBjD;AA8BD;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC,CAmBD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CASvD"}
@@ -0,0 +1,310 @@
1
+ /**
2
+ * CLI Telemetry Module
3
+ *
4
+ * Tracks anonymous usage data to help improve the Oaysus CLI.
5
+ * Users can opt out via:
6
+ * - Command: oaysus telemetry disable
7
+ * - Env var: OAYSUS_TELEMETRY_DISABLED=1
8
+ * - Config file: ~/.oaysus/config.json -> telemetryEnabled: false
9
+ */
10
+ import fs from 'fs/promises';
11
+ import path from 'path';
12
+ import os from 'os';
13
+ import axios from 'axios';
14
+ import { CONFIG_DIR, SSO_BASE_URL, IS_LOCAL_DEV, debug as log, debugError as logError } from './config.js';
15
+ import { loadCredentials } from './auth.js';
16
+ // GA4 is handled server-side in FastAPI to keep credentials secure
17
+ // Events sent to our backend are automatically forwarded to GA4
18
+ // Telemetry config file path
19
+ const TELEMETRY_CONFIG_PATH = path.join(CONFIG_DIR, 'config.json');
20
+ // Event queue for batching
21
+ let eventQueue = [];
22
+ let flushTimeout = null;
23
+ const FLUSH_INTERVAL_MS = 5000; // Flush every 5 seconds
24
+ const MAX_QUEUE_SIZE = 10; // Flush when queue reaches this size
25
+ /**
26
+ * Load telemetry configuration from disk
27
+ */
28
+ async function loadTelemetryConfig() {
29
+ try {
30
+ const data = await fs.readFile(TELEMETRY_CONFIG_PATH, 'utf-8');
31
+ return JSON.parse(data);
32
+ }
33
+ catch {
34
+ // Default config: enabled with notice not shown
35
+ return {
36
+ telemetryEnabled: true,
37
+ telemetryNoticeShown: false,
38
+ };
39
+ }
40
+ }
41
+ /**
42
+ * Save telemetry configuration to disk
43
+ */
44
+ async function saveTelemetryConfig(config) {
45
+ const configDir = path.dirname(TELEMETRY_CONFIG_PATH);
46
+ // Create config directory if it doesn't exist
47
+ await fs.mkdir(configDir, { recursive: true });
48
+ // Write config
49
+ await fs.writeFile(TELEMETRY_CONFIG_PATH, JSON.stringify(config, null, 2), { mode: 0o600 });
50
+ }
51
+ /**
52
+ * Check if telemetry is enabled
53
+ * Priority: Env var > Config file > Default (enabled)
54
+ */
55
+ export async function isTelemetryEnabled() {
56
+ // Check environment variable first (highest priority)
57
+ if (process.env.OAYSUS_TELEMETRY_DISABLED === '1' ||
58
+ process.env.OAYSUS_TELEMETRY_DISABLED === 'true') {
59
+ return false;
60
+ }
61
+ // Check config file
62
+ const config = await loadTelemetryConfig();
63
+ return config.telemetryEnabled;
64
+ }
65
+ /**
66
+ * Enable or disable telemetry
67
+ */
68
+ export async function setTelemetryEnabled(enabled) {
69
+ const config = await loadTelemetryConfig();
70
+ config.telemetryEnabled = enabled;
71
+ await saveTelemetryConfig(config);
72
+ }
73
+ /**
74
+ * Check if the telemetry notice has been shown
75
+ */
76
+ export async function hasSeenTelemetryNotice() {
77
+ const config = await loadTelemetryConfig();
78
+ return config.telemetryNoticeShown;
79
+ }
80
+ /**
81
+ * Mark the telemetry notice as shown
82
+ */
83
+ export async function markTelemetryNoticeShown() {
84
+ const config = await loadTelemetryConfig();
85
+ config.telemetryNoticeShown = true;
86
+ await saveTelemetryConfig(config);
87
+ }
88
+ /**
89
+ * Get telemetry status for display
90
+ */
91
+ export async function getTelemetryStatus() {
92
+ const envDisabled = process.env.OAYSUS_TELEMETRY_DISABLED === '1' ||
93
+ process.env.OAYSUS_TELEMETRY_DISABLED === 'true';
94
+ const config = await loadTelemetryConfig();
95
+ return {
96
+ enabled: !envDisabled && config.telemetryEnabled,
97
+ noticeShown: config.telemetryNoticeShown,
98
+ envDisabled,
99
+ };
100
+ }
101
+ /**
102
+ * Get current CLI version from package.json
103
+ */
104
+ async function getCliVersion() {
105
+ try {
106
+ // Try to find package.json relative to this file
107
+ const possiblePaths = [
108
+ path.join(import.meta.dirname || __dirname || process.cwd(), '../../package.json'),
109
+ path.join(import.meta.dirname || __dirname || process.cwd(), '../../../package.json'),
110
+ path.join(process.cwd(), 'package.json'),
111
+ ];
112
+ for (const pkgPath of possiblePaths) {
113
+ try {
114
+ const data = await fs.readFile(pkgPath, 'utf-8');
115
+ const pkg = JSON.parse(data);
116
+ if (pkg.name === '@oaysus/cli' || pkg.name === 'oaysus-cli') {
117
+ return pkg.version || '0.0.0';
118
+ }
119
+ }
120
+ catch {
121
+ continue;
122
+ }
123
+ }
124
+ return '0.0.0';
125
+ }
126
+ catch {
127
+ return '0.0.0';
128
+ }
129
+ }
130
+ /**
131
+ * Track a telemetry event (queued for batching)
132
+ */
133
+ export async function trackEvent(eventName, properties) {
134
+ // Check if telemetry is enabled
135
+ const enabled = await isTelemetryEnabled();
136
+ if (!enabled) {
137
+ return;
138
+ }
139
+ try {
140
+ // Get user context if logged in
141
+ const credentials = await loadCredentials();
142
+ const cliVersion = await getCliVersion();
143
+ const event = {
144
+ eventName,
145
+ cliVersion,
146
+ timestamp: new Date().toISOString(),
147
+ nodeVersion: process.version,
148
+ osPlatform: os.platform(),
149
+ osArch: os.arch(),
150
+ properties,
151
+ };
152
+ // Add user context if available
153
+ if (credentials) {
154
+ event.userId = credentials.userId;
155
+ event.email = credentials.email;
156
+ event.websiteId = credentials.websiteId;
157
+ }
158
+ // Add to queue
159
+ eventQueue.push(event);
160
+ // Flush if queue is full
161
+ if (eventQueue.length >= MAX_QUEUE_SIZE) {
162
+ await flushEvents();
163
+ }
164
+ else if (!flushTimeout) {
165
+ // Set up delayed flush
166
+ flushTimeout = setTimeout(() => {
167
+ flushEvents().catch(() => {
168
+ // Silently ignore flush errors
169
+ });
170
+ }, FLUSH_INTERVAL_MS);
171
+ }
172
+ }
173
+ catch (error) {
174
+ // Silently ignore telemetry errors - never interrupt user flow
175
+ log('[TELEMETRY] Error tracking event:', error);
176
+ }
177
+ }
178
+ /**
179
+ * Track a CLI command execution
180
+ */
181
+ export async function trackCommand(command, options) {
182
+ const enabled = await isTelemetryEnabled();
183
+ if (!enabled) {
184
+ return;
185
+ }
186
+ try {
187
+ const credentials = await loadCredentials();
188
+ const cliVersion = await getCliVersion();
189
+ const event = {
190
+ eventName: 'cli_command',
191
+ cliVersion,
192
+ timestamp: new Date().toISOString(),
193
+ nodeVersion: process.version,
194
+ osPlatform: os.platform(),
195
+ osArch: os.arch(),
196
+ command,
197
+ success: options?.success !== undefined ? String(options.success) : undefined,
198
+ durationMs: options?.durationMs,
199
+ errorType: options?.errorType,
200
+ errorMessage: options?.errorMessage,
201
+ properties: options?.properties,
202
+ };
203
+ // Add user context if available
204
+ if (credentials) {
205
+ event.userId = credentials.userId;
206
+ event.email = credentials.email;
207
+ event.websiteId = credentials.websiteId;
208
+ }
209
+ // Add to queue
210
+ eventQueue.push(event);
211
+ // Flush if queue is full
212
+ if (eventQueue.length >= MAX_QUEUE_SIZE) {
213
+ await flushEvents();
214
+ }
215
+ else if (!flushTimeout) {
216
+ flushTimeout = setTimeout(() => {
217
+ flushEvents().catch(() => { });
218
+ }, FLUSH_INTERVAL_MS);
219
+ }
220
+ }
221
+ catch (error) {
222
+ log('[TELEMETRY] Error tracking command:', error);
223
+ }
224
+ }
225
+ /**
226
+ * Flush all queued events to the backend
227
+ * GA4 forwarding is handled server-side to keep credentials secure
228
+ */
229
+ export async function flushEvents() {
230
+ if (eventQueue.length === 0) {
231
+ return;
232
+ }
233
+ // Clear timeout
234
+ if (flushTimeout) {
235
+ clearTimeout(flushTimeout);
236
+ flushTimeout = null;
237
+ }
238
+ // Get events to send and clear queue
239
+ const eventsToSend = [...eventQueue];
240
+ eventQueue = [];
241
+ // Send to FastAPI backend (which forwards to GA4 server-side)
242
+ await sendToBackend(eventsToSend);
243
+ }
244
+ /**
245
+ * Send events to FastAPI backend
246
+ */
247
+ async function sendToBackend(events) {
248
+ try {
249
+ const baseUrl = SSO_BASE_URL.replace('/sso', '').replace('auth.', 'api.');
250
+ // For local dev, use localhost
251
+ const apiUrl = IS_LOCAL_DEV
252
+ ? 'http://localhost:3003/oaysus/cli-telemetry/events'
253
+ : `${baseUrl}/oaysus/cli-telemetry/events`;
254
+ log('[TELEMETRY] Sending to backend:', apiUrl);
255
+ await axios.post(apiUrl, { events }, {
256
+ timeout: 5000, // 5 second timeout
257
+ headers: {
258
+ 'Content-Type': 'application/json',
259
+ },
260
+ });
261
+ log('[TELEMETRY] Successfully sent to backend');
262
+ }
263
+ catch (error) {
264
+ // Log but don't throw - telemetry should never interrupt user flow
265
+ logError('[TELEMETRY] Failed to send to backend:', error);
266
+ }
267
+ }
268
+ /**
269
+ * Initialize telemetry on CLI startup
270
+ * Shows first-run notice if needed
271
+ */
272
+ export async function initTelemetry() {
273
+ const status = await getTelemetryStatus();
274
+ // If env var disabled, telemetry is off
275
+ if (status.envDisabled) {
276
+ return { enabled: false, showNotice: false };
277
+ }
278
+ // Check if we need to show the first-run notice
279
+ const showNotice = status.enabled && !status.noticeShown;
280
+ if (showNotice) {
281
+ await markTelemetryNoticeShown();
282
+ }
283
+ return {
284
+ enabled: status.enabled,
285
+ showNotice,
286
+ };
287
+ }
288
+ /**
289
+ * Graceful shutdown - flush any remaining events
290
+ */
291
+ export async function shutdownTelemetry() {
292
+ if (flushTimeout) {
293
+ clearTimeout(flushTimeout);
294
+ flushTimeout = null;
295
+ }
296
+ if (eventQueue.length > 0) {
297
+ await flushEvents();
298
+ }
299
+ }
300
+ // Handle process exit - try to flush events
301
+ process.on('exit', () => {
302
+ // Note: async operations don't work in exit handler
303
+ // Events will be lost if not flushed before exit
304
+ });
305
+ // Handle SIGINT (Ctrl+C) - flush events before exit
306
+ process.on('SIGINT', async () => {
307
+ await shutdownTelemetry();
308
+ process.exit(0);
309
+ });
310
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../src/lib/shared/telemetry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface TelemetryScreenProps {
3
+ action: 'status' | 'enable' | 'disable';
4
+ onExit?: () => void;
5
+ }
6
+ export declare function TelemetryScreen({ action, onExit }: TelemetryScreenProps): React.JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=TelemetryScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelemetryScreen.d.ts","sourceRoot":"","sources":["../../src/screens/TelemetryScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAOnD,UAAU,oBAAoB;IAC5B,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,oBAAoB,qBAwGvE"}
@@ -0,0 +1,72 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { Box, Text, useApp } from 'ink';
3
+ import { getTelemetryStatus, setTelemetryEnabled, } from '../lib/shared/telemetry.js';
4
+ export function TelemetryScreen({ action, onExit }) {
5
+ const { exit } = useApp();
6
+ const [status, setStatus] = useState(null);
7
+ const [message, setMessage] = useState('');
8
+ const [done, setDone] = useState(false);
9
+ useEffect(() => {
10
+ async function handleAction() {
11
+ try {
12
+ if (action === 'status') {
13
+ const currentStatus = await getTelemetryStatus();
14
+ setStatus(currentStatus);
15
+ setDone(true);
16
+ }
17
+ else if (action === 'enable') {
18
+ await setTelemetryEnabled(true);
19
+ setMessage('Telemetry has been enabled.');
20
+ setDone(true);
21
+ }
22
+ else if (action === 'disable') {
23
+ await setTelemetryEnabled(false);
24
+ setMessage('Telemetry has been disabled.');
25
+ setDone(true);
26
+ }
27
+ }
28
+ catch (error) {
29
+ setMessage(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
30
+ setDone(true);
31
+ }
32
+ }
33
+ handleAction();
34
+ }, [action]);
35
+ useEffect(() => {
36
+ if (done) {
37
+ const timer = setTimeout(() => {
38
+ if (onExit) {
39
+ onExit();
40
+ }
41
+ exit();
42
+ }, 100);
43
+ return () => clearTimeout(timer);
44
+ }
45
+ }, [done, exit, onExit]);
46
+ if (action === 'status' && status) {
47
+ return (React.createElement(Box, { flexDirection: "column", padding: 1 },
48
+ React.createElement(Box, { marginBottom: 1 },
49
+ React.createElement(Text, { bold: true }, "Oaysus CLI Telemetry Status")),
50
+ React.createElement(Box, { flexDirection: "column" },
51
+ React.createElement(Box, null,
52
+ React.createElement(Text, null, "Status: "),
53
+ status.enabled ? (React.createElement(Text, { color: "green", bold: true }, "Enabled")) : (React.createElement(Text, { color: "red", bold: true }, "Disabled"))),
54
+ status.envDisabled && (React.createElement(Box, { marginTop: 1 },
55
+ React.createElement(Text, { color: "yellow" }, "Note: Telemetry is disabled via OAYSUS_TELEMETRY_DISABLED environment variable."))),
56
+ React.createElement(Box, { marginTop: 1, flexDirection: "column" },
57
+ React.createElement(Text, { dimColor: true }, "Oaysus CLI collects anonymous usage data to help improve the tool."),
58
+ React.createElement(Text, { dimColor: true }, "No personal data, file contents, or source code is collected.")),
59
+ React.createElement(Box, { marginTop: 1, flexDirection: "column" },
60
+ React.createElement(Text, { dimColor: true }, "Commands:"),
61
+ React.createElement(Text, { dimColor: true }, " oaysus telemetry enable - Enable telemetry"),
62
+ React.createElement(Text, { dimColor: true }, " oaysus telemetry disable - Disable telemetry"),
63
+ React.createElement(Text, { dimColor: true }, " oaysus telemetry status - Show current status")))));
64
+ }
65
+ if (message) {
66
+ return (React.createElement(Box, { padding: 1 },
67
+ React.createElement(Text, null, message)));
68
+ }
69
+ return (React.createElement(Box, { padding: 1 },
70
+ React.createElement(Text, null, "Processing...")));
71
+ }
72
+ //# sourceMappingURL=TelemetryScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelemetryScreen.js","sourceRoot":"","sources":["../../src/screens/TelemetryScreen.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oaysus/cli",
3
- "version": "0.1.15",
3
+ "version": "0.1.16",
4
4
  "description": "Oaysus CLI - Professional developer tool for component uploads",
5
5
  "type": "module",
6
6
  "bin": {