@oaysus/cli 0.1.14 → 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 +47 -12
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +40 -2
- package/dist/cli.js.map +1 -1
- package/dist/lib/shared/telemetry.d.ts +86 -0
- package/dist/lib/shared/telemetry.d.ts.map +1 -0
- package/dist/lib/shared/telemetry.js +310 -0
- package/dist/lib/shared/telemetry.js.map +1 -0
- package/dist/screens/TelemetryScreen.d.ts +8 -0
- package/dist/screens/TelemetryScreen.d.ts.map +1 -0
- package/dist/screens/TelemetryScreen.js +72 -0
- package/dist/screens/TelemetryScreen.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -53,8 +53,8 @@
|
|
|
53
53
|
Watch how fast you can go from code to a published website with Oaysus.
|
|
54
54
|
|
|
55
55
|
```bash
|
|
56
|
-
oaysus init
|
|
57
|
-
oaysus push
|
|
56
|
+
oaysus theme init # Pick your framework. Name your project.
|
|
57
|
+
oaysus theme push # Your component builds and deploys in seconds.
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
No build pipelines. No complex deployments. Your marketing team creates pages visually, and you get back to building features.
|
|
@@ -74,13 +74,13 @@ Requires Node.js 20 or higher.
|
|
|
74
74
|
oaysus login
|
|
75
75
|
|
|
76
76
|
# 2. Create a new theme pack project
|
|
77
|
-
oaysus init my-components
|
|
77
|
+
oaysus theme init my-components
|
|
78
78
|
|
|
79
79
|
# 3. Navigate to the project
|
|
80
80
|
cd my-components
|
|
81
81
|
|
|
82
82
|
# 4. Push your components to Oaysus
|
|
83
|
-
oaysus push
|
|
83
|
+
oaysus theme push
|
|
84
84
|
```
|
|
85
85
|
|
|
86
86
|
That's it. Your components are now available in the visual page builder.
|
|
@@ -148,16 +148,51 @@ Marketing edits these props in the visual editor. You never touch the code again
|
|
|
148
148
|
|
|
149
149
|
## Commands
|
|
150
150
|
|
|
151
|
+
### Theme Pack Commands
|
|
152
|
+
|
|
153
|
+
Build and manage reusable component libraries.
|
|
154
|
+
|
|
155
|
+
| Command | Description |
|
|
156
|
+
|---------|-------------|
|
|
157
|
+
| `oaysus theme init` | Create a new theme pack project |
|
|
158
|
+
| `oaysus theme create` | Add a component to your theme pack |
|
|
159
|
+
| `oaysus theme validate` | Validate theme pack structure |
|
|
160
|
+
| `oaysus theme push` | Build and upload to Oaysus |
|
|
161
|
+
| `oaysus theme delete` | Delete a theme pack from Oaysus |
|
|
162
|
+
|
|
163
|
+
### Site Commands
|
|
164
|
+
|
|
165
|
+
Manage website pages and content.
|
|
166
|
+
|
|
167
|
+
| Command | Description |
|
|
168
|
+
|---------|-------------|
|
|
169
|
+
| `oaysus site init` | Create a new website project |
|
|
170
|
+
| `oaysus site validate` | Validate pages against installed components |
|
|
171
|
+
| `oaysus site publish` | Publish pages to your website |
|
|
172
|
+
| `oaysus site pull` | Download pages from server to local files |
|
|
173
|
+
|
|
174
|
+
### Global Commands
|
|
175
|
+
|
|
176
|
+
Authentication and account management.
|
|
177
|
+
|
|
151
178
|
| Command | Description |
|
|
152
179
|
|---------|-------------|
|
|
153
|
-
| `oaysus
|
|
154
|
-
| `oaysus
|
|
155
|
-
| `oaysus
|
|
156
|
-
| `oaysus
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
180
|
+
| `oaysus login` | Authenticate with your Oaysus account |
|
|
181
|
+
| `oaysus whoami` | Display current user information |
|
|
182
|
+
| `oaysus switch` | Switch between your websites |
|
|
183
|
+
| `oaysus logout` | Clear authentication tokens |
|
|
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.
|
|
161
196
|
|
|
162
197
|
## Project Structure
|
|
163
198
|
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";
|
|
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
|
-
|
|
51
|
-
|
|
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":";AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;
|
|
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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"}
|