@loggydev/loggy-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +133 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +186 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/api.d.ts +11 -0
- package/dist/utils/api.d.ts.map +1 -0
- package/dist/utils/api.js +37 -0
- package/dist/utils/api.js.map +1 -0
- package/dist/utils/auth.d.ts +7 -0
- package/dist/utils/auth.d.ts.map +1 -0
- package/dist/utils/auth.js +120 -0
- package/dist/utils/auth.js.map +1 -0
- package/dist/utils/detect-framework.d.ts +10 -0
- package/dist/utils/detect-framework.d.ts.map +1 -0
- package/dist/utils/detect-framework.js +130 -0
- package/dist/utils/detect-framework.js.map +1 -0
- package/dist/utils/detect-package-manager.d.ts +4 -0
- package/dist/utils/detect-package-manager.d.ts.map +1 -0
- package/dist/utils/detect-package-manager.js +35 -0
- package/dist/utils/detect-package-manager.js.map +1 -0
- package/dist/utils/env.d.ts +2 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +54 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/generate-files.d.ts +8 -0
- package/dist/utils/generate-files.d.ts.map +1 -0
- package/dist/utils/generate-files.js +130 -0
- package/dist/utils/generate-files.js.map +1 -0
- package/dist/utils/install.d.ts +3 -0
- package/dist/utils/install.d.ts.map +1 -0
- package/dist/utils/install.js +34 -0
- package/dist/utils/install.js.map +1 -0
- package/dist/utils/project-name.d.ts +2 -0
- package/dist/utils/project-name.d.ts.map +1 -0
- package/dist/utils/project-name.js +20 -0
- package/dist/utils/project-name.js.map +1 -0
- package/dist/utils/ui.d.ts +39 -0
- package/dist/utils/ui.d.ts.map +1 -0
- package/dist/utils/ui.js +121 -0
- package/dist/utils/ui.js.map +1 -0
- package/package.json +54 -0
package/README.md
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Loggy CLI
|
|
2
|
+
|
|
3
|
+
The official CLI tool for setting up [Loggy](https://loggy.dev) in your projects.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx loggy init
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
That's it! The CLI will:
|
|
12
|
+
|
|
13
|
+
1. 🔍 **Detect your framework** (Next.js, Astro, Remix, Express, etc.)
|
|
14
|
+
2. 📦 **Install the SDK** using your package manager
|
|
15
|
+
3. 🔑 **Authenticate you** via browser
|
|
16
|
+
4. 📝 **Create a project** on Loggy
|
|
17
|
+
5. 🚀 **Set up instrumentation** with a ready-to-use utility file
|
|
18
|
+
|
|
19
|
+
## What It Does
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
$ npx loggy init
|
|
23
|
+
|
|
24
|
+
🚀 Welcome to Loggy!
|
|
25
|
+
Let's get your project set up in under 60 seconds.
|
|
26
|
+
|
|
27
|
+
✔ Project detected!
|
|
28
|
+
Framework: Next.js
|
|
29
|
+
Package manager: npm
|
|
30
|
+
Project name: my-app
|
|
31
|
+
|
|
32
|
+
✔ SDK installed!
|
|
33
|
+
|
|
34
|
+
📦 Let's connect to Loggy:
|
|
35
|
+
|
|
36
|
+
? How would you like to authenticate?
|
|
37
|
+
❯ Open browser to sign up / log in
|
|
38
|
+
I already have a project token
|
|
39
|
+
|
|
40
|
+
✔ Authenticated as kevin@example.com
|
|
41
|
+
✔ Project created!
|
|
42
|
+
Project ID: 123
|
|
43
|
+
|
|
44
|
+
✔ Token saved to .env.local
|
|
45
|
+
✔ Instrumentation added!
|
|
46
|
+
✓ Created src/lib/loggy.ts
|
|
47
|
+
|
|
48
|
+
✅ Done! Loggy is ready to go.
|
|
49
|
+
|
|
50
|
+
Your logs will appear at:
|
|
51
|
+
https://loggy.dev/dash
|
|
52
|
+
|
|
53
|
+
Try it out:
|
|
54
|
+
import { loggy } from '@/lib/loggy';
|
|
55
|
+
loggy.info('Hello from Loggy! 🎉');
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Supported Frameworks
|
|
59
|
+
|
|
60
|
+
| Framework | Detected By | Env File | Lib Path |
|
|
61
|
+
| ----------- | ------------------ | ------------ | ------------------- |
|
|
62
|
+
| Next.js | `next` | `.env.local` | `src/lib/loggy.ts` |
|
|
63
|
+
| Astro | `astro` | `.env` | `src/lib/loggy.ts` |
|
|
64
|
+
| Remix | `@remix-run/*` | `.env` | `app/lib/loggy.ts` |
|
|
65
|
+
| SvelteKit | `@sveltejs/kit` | `.env` | `src/lib/loggy.ts` |
|
|
66
|
+
| Nuxt | `nuxt` | `.env` | `lib/loggy.ts` |
|
|
67
|
+
| Express | `express` | `.env` | `lib/loggy.ts` |
|
|
68
|
+
| Fastify | `fastify` | `.env` | `lib/loggy.ts` |
|
|
69
|
+
| Hono | `hono` | `.env` | `lib/loggy.ts` |
|
|
70
|
+
| Node.js | (default) | `.env` | `lib/loggy.ts` |
|
|
71
|
+
|
|
72
|
+
## Options
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
npx loggy init [options]
|
|
76
|
+
|
|
77
|
+
Options:
|
|
78
|
+
--skip-install Skip SDK installation
|
|
79
|
+
--skip-config Skip config file modifications
|
|
80
|
+
--token <token> Use existing project token
|
|
81
|
+
-h, --help Display help
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Manual Installation
|
|
85
|
+
|
|
86
|
+
If you prefer to set up manually:
|
|
87
|
+
|
|
88
|
+
1. Install the SDK:
|
|
89
|
+
```bash
|
|
90
|
+
npm install @loggydev/loggy-node
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
2. Create a utility file (e.g., `lib/loggy.ts`):
|
|
94
|
+
```typescript
|
|
95
|
+
import { CreateLoggy } from "@loggydev/loggy-node";
|
|
96
|
+
|
|
97
|
+
export const loggy = CreateLoggy({
|
|
98
|
+
identifier: "my-app",
|
|
99
|
+
remote: {
|
|
100
|
+
token: process.env.LOGGY_TOKEN || "",
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
3. Add your token to `.env`:
|
|
106
|
+
```
|
|
107
|
+
LOGGY_TOKEN=your-project-token
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
4. Use it anywhere:
|
|
111
|
+
```typescript
|
|
112
|
+
import { loggy } from "@/lib/loggy";
|
|
113
|
+
|
|
114
|
+
loggy.info("Hello from Loggy!");
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Development
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# Install dependencies
|
|
121
|
+
npm install
|
|
122
|
+
|
|
123
|
+
# Build
|
|
124
|
+
npm run build
|
|
125
|
+
|
|
126
|
+
# Run locally
|
|
127
|
+
node dist/index.js init
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## License
|
|
131
|
+
|
|
132
|
+
MIT
|
|
133
|
+
# loggy-cli
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAeA,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA6M9D"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import inquirer from "inquirer";
|
|
2
|
+
import ora from "ora";
|
|
3
|
+
import { createProject } from "../utils/api.js";
|
|
4
|
+
import { authenticateUser } from "../utils/auth.js";
|
|
5
|
+
import { detectFramework } from "../utils/detect-framework.js";
|
|
6
|
+
import { detectPackageManager, } from "../utils/detect-package-manager.js";
|
|
7
|
+
import { updateEnvFile } from "../utils/env.js";
|
|
8
|
+
import { generateFiles } from "../utils/generate-files.js";
|
|
9
|
+
import { installSdk } from "../utils/install.js";
|
|
10
|
+
import { getProjectName } from "../utils/project-name.js";
|
|
11
|
+
import { ui } from "../utils/ui.js";
|
|
12
|
+
export async function init(options) {
|
|
13
|
+
// Welcome banner
|
|
14
|
+
ui.welcome();
|
|
15
|
+
const cwd = process.cwd();
|
|
16
|
+
// Step 1: Detect framework
|
|
17
|
+
const detectSpinner = ora({
|
|
18
|
+
text: ui.dim("Scanning project..."),
|
|
19
|
+
spinner: "dots12",
|
|
20
|
+
color: "yellow",
|
|
21
|
+
}).start();
|
|
22
|
+
let framework;
|
|
23
|
+
let packageManager;
|
|
24
|
+
let projectName;
|
|
25
|
+
try {
|
|
26
|
+
framework = await detectFramework(cwd);
|
|
27
|
+
packageManager = await detectPackageManager(cwd);
|
|
28
|
+
projectName = await getProjectName(cwd);
|
|
29
|
+
detectSpinner.succeed(ui.success("Project detected"));
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
detectSpinner.fail(ui.error("Could not detect project"));
|
|
33
|
+
ui.line(ui.warn("Make sure you're in a Node.js project with a package.json file."));
|
|
34
|
+
console.log();
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
// Show detected info in a nice format
|
|
38
|
+
ui.detected("⚡", "Framework", framework.name);
|
|
39
|
+
ui.detected("📦", "Package manager", packageManager);
|
|
40
|
+
ui.detected("📁", "Project", projectName);
|
|
41
|
+
console.log();
|
|
42
|
+
// Step 2: Install SDK
|
|
43
|
+
if (!options.skipInstall) {
|
|
44
|
+
const installSpinner = ora({
|
|
45
|
+
text: ui.dim(`Installing ${ui.coral("@loggydev/loggy-node")}...`),
|
|
46
|
+
spinner: "dots12",
|
|
47
|
+
color: "yellow",
|
|
48
|
+
}).start();
|
|
49
|
+
try {
|
|
50
|
+
await installSdk(packageManager, cwd);
|
|
51
|
+
installSpinner.succeed(ui.success("SDK installed"));
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
installSpinner.fail(ui.error("Failed to install SDK"));
|
|
55
|
+
ui.line(ui.warn(`Try: ${packageManager} ${packageManager === "npm" ? "install" : "add"} @loggydev/loggy-node`));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Step 3: Authenticate or use existing token
|
|
59
|
+
let token = options.token;
|
|
60
|
+
let userEmail;
|
|
61
|
+
let projectId;
|
|
62
|
+
if (!token) {
|
|
63
|
+
ui.section("🔐 Authentication");
|
|
64
|
+
const { authChoice } = await inquirer.prompt([
|
|
65
|
+
{
|
|
66
|
+
type: "list",
|
|
67
|
+
name: "authChoice",
|
|
68
|
+
message: ui.coral("How would you like to authenticate?"),
|
|
69
|
+
choices: [
|
|
70
|
+
{
|
|
71
|
+
name: `${ui.symbols.rocket} Open browser to sign up / log in`,
|
|
72
|
+
value: "browser",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: `${ui.symbols.key} I already have a project token`,
|
|
76
|
+
value: "token",
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
prefix: " ",
|
|
80
|
+
},
|
|
81
|
+
]);
|
|
82
|
+
if (authChoice === "browser") {
|
|
83
|
+
const authSpinner = ora({
|
|
84
|
+
text: ui.dim("Opening browser..."),
|
|
85
|
+
spinner: "dots12",
|
|
86
|
+
color: "yellow",
|
|
87
|
+
}).start();
|
|
88
|
+
try {
|
|
89
|
+
const authResult = await authenticateUser();
|
|
90
|
+
token = authResult.token;
|
|
91
|
+
userEmail = authResult.email;
|
|
92
|
+
authSpinner.succeed(ui.success(`Authenticated as ${ui.bold(userEmail || "user")}`));
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
authSpinner.fail(ui.error("Authentication failed"));
|
|
96
|
+
ui.line(ui.warn("Please try again or use an existing token."));
|
|
97
|
+
console.log();
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
// Step 4: Create project
|
|
101
|
+
const projectSpinner = ora({
|
|
102
|
+
text: ui.dim(`Creating project "${projectName}"...`),
|
|
103
|
+
spinner: "dots12",
|
|
104
|
+
color: "yellow",
|
|
105
|
+
}).start();
|
|
106
|
+
try {
|
|
107
|
+
const project = await createProject(token, projectName, framework.name);
|
|
108
|
+
token = project.token;
|
|
109
|
+
projectId = project.id;
|
|
110
|
+
projectSpinner.succeed(ui.success(`Project created ${ui.dim(`(ID: ${project.id})`)}`));
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
if (error.code === "PROJECT_LIMIT_REACHED") {
|
|
114
|
+
projectSpinner.fail(ui.error("Project limit reached"));
|
|
115
|
+
ui.line(ui.warn(error.message));
|
|
116
|
+
ui.line(ui.info("Upgrade at: https://loggy.dev/pricing"));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
projectSpinner.fail(ui.error("Failed to create project"));
|
|
120
|
+
ui.line(ui.warn(error.message || "Please try again."));
|
|
121
|
+
}
|
|
122
|
+
console.log();
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
const { existingToken } = await inquirer.prompt([
|
|
128
|
+
{
|
|
129
|
+
type: "input",
|
|
130
|
+
name: "existingToken",
|
|
131
|
+
message: ui.coral("Enter your project token:"),
|
|
132
|
+
validate: (input) => input.length > 0 || "Token is required",
|
|
133
|
+
prefix: " ",
|
|
134
|
+
},
|
|
135
|
+
]);
|
|
136
|
+
token = existingToken;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Step 5: Save token to .env file
|
|
140
|
+
const envSpinner = ora({
|
|
141
|
+
text: ui.dim(`Saving token to ${framework.envFile}...`),
|
|
142
|
+
spinner: "dots12",
|
|
143
|
+
color: "yellow",
|
|
144
|
+
}).start();
|
|
145
|
+
try {
|
|
146
|
+
await updateEnvFile(cwd, framework.envFile, token);
|
|
147
|
+
envSpinner.succeed(ui.success(`Token saved to ${ui.bold(framework.envFile)}`));
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
envSpinner.fail(ui.error(`Failed to save token to ${framework.envFile}`));
|
|
151
|
+
}
|
|
152
|
+
// Step 6: Generate setup files
|
|
153
|
+
if (!options.skipConfig) {
|
|
154
|
+
const filesSpinner = ora({
|
|
155
|
+
text: ui.dim("Generating configuration..."),
|
|
156
|
+
spinner: "dots12",
|
|
157
|
+
color: "yellow",
|
|
158
|
+
}).start();
|
|
159
|
+
try {
|
|
160
|
+
const generatedFiles = await generateFiles(cwd, framework, token);
|
|
161
|
+
filesSpinner.succeed(ui.success("Configuration complete"));
|
|
162
|
+
for (const file of generatedFiles) {
|
|
163
|
+
ui.line(`${ui.symbols.check} ${file.action === "created" ? "Created" : "Updated"} ${ui.bold(file.path)}`, 5);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
filesSpinner.fail(ui.error("Failed to generate config"));
|
|
168
|
+
ui.line(ui.warn("You can manually set up Loggy at https://loggy.dev/docs"));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Step 7: Success message
|
|
172
|
+
const logsUrl = projectId
|
|
173
|
+
? `https://loggy.dev/project/${projectId}/logs`
|
|
174
|
+
: "https://loggy.dev/dash";
|
|
175
|
+
ui.successBox("Ready to go!", [
|
|
176
|
+
`${ui.symbols.check} Loggy is now configured for ${ui.bold(projectName)}`,
|
|
177
|
+
"",
|
|
178
|
+
`${ui.dim("View your logs:")} ${ui.coral(logsUrl)}`,
|
|
179
|
+
"",
|
|
180
|
+
`${ui.dim("Try it out:")}`,
|
|
181
|
+
` ${ui.info(`import { loggy } from '${framework.importPath}';`)}`,
|
|
182
|
+
` ${ui.info("loggy.info('Hello from Loggy! 🎉');")}`,
|
|
183
|
+
]);
|
|
184
|
+
console.log();
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { init } from "./commands/init.js";
|
|
4
|
+
const program = new Command();
|
|
5
|
+
program
|
|
6
|
+
.name("loggy")
|
|
7
|
+
.description("CLI tool for setting up Loggy in your projects")
|
|
8
|
+
.version("0.1.0");
|
|
9
|
+
program
|
|
10
|
+
.command("init")
|
|
11
|
+
.description("Initialize Loggy in your project")
|
|
12
|
+
.option("--skip-install", "Skip SDK installation")
|
|
13
|
+
.option("--skip-config", "Skip config file modifications")
|
|
14
|
+
.option("--token <token>", "Use existing project token")
|
|
15
|
+
.action(init);
|
|
16
|
+
program.parse();
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,gDAAgD,CAAC;KAC7D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,gBAAgB,EAAE,uBAAuB,CAAC;KACjD,MAAM,CAAC,eAAe,EAAE,gCAAgC,CAAC;KACzD,MAAM,CAAC,iBAAiB,EAAE,4BAA4B,CAAC;KACvD,MAAM,CAAC,IAAI,CAAC,CAAC;AAEhB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface Project {
|
|
2
|
+
id: number;
|
|
3
|
+
title: string;
|
|
4
|
+
description: string;
|
|
5
|
+
token: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ApiError extends Error {
|
|
8
|
+
code?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function createProject(authToken: string, name: string, framework: string): Promise<Project>;
|
|
11
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAS,SAAQ,KAAK;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CA2BlB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const LOGGY_URL = process.env.LOGGY_URL || "https://loggy.dev";
|
|
2
|
+
export async function createProject(authToken, name, framework) {
|
|
3
|
+
const response = await fetch(`${LOGGY_URL}/api/projects`, {
|
|
4
|
+
method: "POST",
|
|
5
|
+
headers: {
|
|
6
|
+
"Content-Type": "application/json",
|
|
7
|
+
"x-auth-token": authToken,
|
|
8
|
+
},
|
|
9
|
+
body: JSON.stringify({
|
|
10
|
+
title: name,
|
|
11
|
+
description: `${framework} project initialized via Loggy CLI`,
|
|
12
|
+
icon: getFrameworkIcon(framework),
|
|
13
|
+
}),
|
|
14
|
+
});
|
|
15
|
+
if (!response.ok) {
|
|
16
|
+
const data = (await response.json().catch(() => ({})));
|
|
17
|
+
const error = new Error(data.error || "Failed to create project");
|
|
18
|
+
error.code = data.code;
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
return response.json();
|
|
22
|
+
}
|
|
23
|
+
function getFrameworkIcon(framework) {
|
|
24
|
+
const icons = {
|
|
25
|
+
"Next.js": "▲",
|
|
26
|
+
Astro: "🚀",
|
|
27
|
+
Remix: "💿",
|
|
28
|
+
SvelteKit: "🔥",
|
|
29
|
+
Nuxt: "💚",
|
|
30
|
+
Express: "⚡",
|
|
31
|
+
Fastify: "🚀",
|
|
32
|
+
Hono: "🔥",
|
|
33
|
+
"Node.js": "📦",
|
|
34
|
+
};
|
|
35
|
+
return icons[framework] || "📦";
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,mBAAmB,CAAC;AAa/D,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAiB,EACjB,IAAY,EACZ,SAAiB;IAEjB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,eAAe,EAAE;QACxD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,cAAc,EAAE,SAAS;SAC1B;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,GAAG,SAAS,oCAAoC;YAC7D,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC;SAClC,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAGpD,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,IAAI,CAAC,KAAK,IAAI,0BAA0B,CAC7B,CAAC;QACd,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,KAAK,CAAC;IACd,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAsB,CAAC;AAC7C,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB;IACzC,MAAM,KAAK,GAA2B;QACpC,SAAS,EAAE,GAAG;QACd,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,GAAG;QACZ,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,IAAI;KAChB,CAAC;IACF,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC,CA0H5D"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { createServer } from "node:http";
|
|
2
|
+
import open from "open";
|
|
3
|
+
const LOGGY_URL = process.env.LOGGY_URL || "https://loggy.dev";
|
|
4
|
+
const CLI_PORT = 9876;
|
|
5
|
+
export async function authenticateUser() {
|
|
6
|
+
return new Promise((resolve, reject) => {
|
|
7
|
+
const server = createServer((req, res) => {
|
|
8
|
+
const url = new URL(req.url || "/", `http://localhost:${CLI_PORT}`);
|
|
9
|
+
if (url.pathname === "/callback") {
|
|
10
|
+
const token = url.searchParams.get("token");
|
|
11
|
+
const email = url.searchParams.get("email");
|
|
12
|
+
const userId = url.searchParams.get("userId");
|
|
13
|
+
if (token && email && userId) {
|
|
14
|
+
// Send success page
|
|
15
|
+
res.writeHead(200, { "Content-Type": "text/html" });
|
|
16
|
+
res.end(`
|
|
17
|
+
<!DOCTYPE html>
|
|
18
|
+
<html>
|
|
19
|
+
<head>
|
|
20
|
+
<title>Loggy CLI - Authentication Successful</title>
|
|
21
|
+
<style>
|
|
22
|
+
body {
|
|
23
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
24
|
+
display: flex;
|
|
25
|
+
justify-content: center;
|
|
26
|
+
align-items: center;
|
|
27
|
+
height: 100vh;
|
|
28
|
+
margin: 0;
|
|
29
|
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
30
|
+
color: white;
|
|
31
|
+
}
|
|
32
|
+
.container {
|
|
33
|
+
text-align: center;
|
|
34
|
+
padding: 40px;
|
|
35
|
+
background: rgba(255,255,255,0.1);
|
|
36
|
+
border-radius: 16px;
|
|
37
|
+
backdrop-filter: blur(10px);
|
|
38
|
+
}
|
|
39
|
+
h1 { margin-bottom: 10px; }
|
|
40
|
+
p { opacity: 0.9; }
|
|
41
|
+
.checkmark {
|
|
42
|
+
font-size: 64px;
|
|
43
|
+
margin-bottom: 20px;
|
|
44
|
+
}
|
|
45
|
+
</style>
|
|
46
|
+
</head>
|
|
47
|
+
<body>
|
|
48
|
+
<div class="container">
|
|
49
|
+
<div class="checkmark">✅</div>
|
|
50
|
+
<h1>Authentication Successful!</h1>
|
|
51
|
+
<p>You can close this window and return to your terminal.</p>
|
|
52
|
+
</div>
|
|
53
|
+
</body>
|
|
54
|
+
</html>
|
|
55
|
+
`);
|
|
56
|
+
server.close();
|
|
57
|
+
resolve({ token, email, userId });
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
res.writeHead(400, { "Content-Type": "text/html" });
|
|
61
|
+
res.end(`
|
|
62
|
+
<!DOCTYPE html>
|
|
63
|
+
<html>
|
|
64
|
+
<head>
|
|
65
|
+
<title>Loggy CLI - Authentication Failed</title>
|
|
66
|
+
<style>
|
|
67
|
+
body {
|
|
68
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
69
|
+
display: flex;
|
|
70
|
+
justify-content: center;
|
|
71
|
+
align-items: center;
|
|
72
|
+
height: 100vh;
|
|
73
|
+
margin: 0;
|
|
74
|
+
background: linear-gradient(135deg, #e74c3c 0%, #c0392b 100%);
|
|
75
|
+
color: white;
|
|
76
|
+
}
|
|
77
|
+
.container {
|
|
78
|
+
text-align: center;
|
|
79
|
+
padding: 40px;
|
|
80
|
+
background: rgba(255,255,255,0.1);
|
|
81
|
+
border-radius: 16px;
|
|
82
|
+
backdrop-filter: blur(10px);
|
|
83
|
+
}
|
|
84
|
+
h1 { margin-bottom: 10px; }
|
|
85
|
+
p { opacity: 0.9; }
|
|
86
|
+
.icon { font-size: 64px; margin-bottom: 20px; }
|
|
87
|
+
</style>
|
|
88
|
+
</head>
|
|
89
|
+
<body>
|
|
90
|
+
<div class="container">
|
|
91
|
+
<div class="icon">❌</div>
|
|
92
|
+
<h1>Authentication Failed</h1>
|
|
93
|
+
<p>Please try again from your terminal.</p>
|
|
94
|
+
</div>
|
|
95
|
+
</body>
|
|
96
|
+
</html>
|
|
97
|
+
`);
|
|
98
|
+
server.close();
|
|
99
|
+
reject(new Error("Authentication failed - missing credentials"));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
res.writeHead(404);
|
|
104
|
+
res.end("Not found");
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
server.listen(CLI_PORT, () => {
|
|
108
|
+
// Open browser to Loggy auth page with callback URL
|
|
109
|
+
const callbackUrl = encodeURIComponent(`http://localhost:${CLI_PORT}/callback`);
|
|
110
|
+
const authUrl = `${LOGGY_URL}/cli-auth?callback=${callbackUrl}`;
|
|
111
|
+
open(authUrl);
|
|
112
|
+
});
|
|
113
|
+
// Timeout after 5 minutes
|
|
114
|
+
setTimeout(() => {
|
|
115
|
+
server.close();
|
|
116
|
+
reject(new Error("Authentication timed out"));
|
|
117
|
+
}, 5 * 60 * 1000);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,mBAAmB,CAAC;AAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC;AAQtB,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACvC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,oBAAoB,QAAQ,EAAE,CAAC,CAAC;YAEpE,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAE9C,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC7B,oBAAoB;oBACpB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAuCP,CAAC,CAAC;oBAEH,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBACpC,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAoCP,CAAC,CAAC;oBACH,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC3B,oDAAoD;YACpD,MAAM,WAAW,GAAG,kBAAkB,CACpC,oBAAoB,QAAQ,WAAW,CACxC,CAAC;YACF,MAAM,OAAO,GAAG,GAAG,SAAS,sBAAsB,WAAW,EAAE,CAAC;YAChE,IAAI,CAAC,OAAO,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,UAAU,CACR,GAAG,EAAE;YACH,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;QAChD,CAAC,EACD,CAAC,GAAG,EAAE,GAAG,IAAI,CACd,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface Framework {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
envFile: string;
|
|
5
|
+
importPath: string;
|
|
6
|
+
libPath: string;
|
|
7
|
+
configFile?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function detectFramework(cwd: string): Promise<Framework>;
|
|
10
|
+
//# sourceMappingURL=detect-framework.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-framework.d.ts","sourceRoot":"","sources":["../../src/utils/detect-framework.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAqED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CA2DrE"}
|