flowershow 0.1.9 → 0.2.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 +246 -10
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +70 -0
- package/dist/cli.js.map +1 -0
- package/dist/lib/api-client.d.ts +68 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +104 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/auth.d.ts +21 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +133 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/commands/auth-login.d.ts +2 -0
- package/dist/lib/commands/auth-login.d.ts.map +1 -0
- package/dist/lib/commands/auth-login.js +55 -0
- package/dist/lib/commands/auth-login.js.map +1 -0
- package/dist/lib/commands/auth-logout.d.ts +2 -0
- package/dist/lib/commands/auth-logout.d.ts.map +1 -0
- package/dist/lib/commands/auth-logout.js +26 -0
- package/dist/lib/commands/auth-logout.js.map +1 -0
- package/dist/lib/commands/auth-status.d.ts +2 -0
- package/dist/lib/commands/auth-status.d.ts.map +1 -0
- package/dist/lib/commands/auth-status.js +36 -0
- package/dist/lib/commands/auth-status.js.map +1 -0
- package/dist/lib/commands/delete.d.ts +2 -0
- package/dist/lib/commands/delete.d.ts.map +1 -0
- package/dist/lib/commands/delete.js +80 -0
- package/dist/lib/commands/delete.js.map +1 -0
- package/dist/lib/commands/list.d.ts +2 -0
- package/dist/lib/commands/list.d.ts.map +1 -0
- package/dist/lib/commands/list.js +42 -0
- package/dist/lib/commands/list.js.map +1 -0
- package/dist/lib/commands/publish.d.ts +2 -0
- package/dist/lib/commands/publish.d.ts.map +1 -0
- package/dist/lib/commands/publish.js +166 -0
- package/dist/lib/commands/publish.js.map +1 -0
- package/dist/lib/const.d.ts +4 -0
- package/dist/lib/const.d.ts.map +1 -0
- package/dist/lib/const.js +4 -0
- package/dist/lib/const.js.map +1 -0
- package/dist/lib/files.d.ts +13 -0
- package/dist/lib/files.d.ts.map +1 -0
- package/dist/lib/files.js +156 -0
- package/dist/lib/files.js.map +1 -0
- package/dist/lib/utils.d.ts +22 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +90 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +39 -28
- package/CHANGELOG.md +0 -74
- package/src/bin/cli.js +0 -97
- package/src/index.js +0 -1
- package/src/lib/Installer.js +0 -185
- package/src/lib/build.js +0 -18
- package/src/lib/buildExport.js +0 -11
- package/src/lib/const.js +0 -1
- package/src/lib/install.js +0 -28
- package/src/lib/preview.js +0 -18
- package/src/lib/publish.js +0 -8
- package/src/lib/upgrade.js +0 -8
- package/src/lib/utils/exit.js +0 -3
- package/src/lib/utils/index.js +0 -5
- package/src/lib/utils/isSubdir.js +0 -6
- package/src/lib/utils/logger.js +0 -19
- package/src/lib/utils/sendEvent.js +0 -5
- package/src/lib/utils/spinner.js +0 -49
package/README.md
CHANGED
|
@@ -1,27 +1,263 @@
|
|
|
1
|
-
#
|
|
1
|
+
# FlowerShow CLI (Alpha 🚧)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A CLI tool for publishing Markdown files and folders directly to FlowerShow with OAuth authentication.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Installation
|
|
6
6
|
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g flowershow
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Then use the `flowershow` command anywhere:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
flowershow auth login
|
|
15
|
+
flowershow publish ./my-notes
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Quick Start
|
|
19
|
+
|
|
20
|
+
### 1. Authenticate
|
|
21
|
+
|
|
22
|
+
Before using any commands, you must authenticate:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
flowershow auth login
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
This will:
|
|
29
|
+
|
|
30
|
+
1. Display a URL and verification code
|
|
31
|
+
2. Open your browser to authorize the CLI
|
|
32
|
+
3. Store your authentication token locally
|
|
33
|
+
|
|
34
|
+
See [Authentication Documentation](docs/authentication.md) for details.
|
|
35
|
+
|
|
36
|
+
### 2. Publish Your Content
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# Publish a folder
|
|
40
|
+
flowershow publish ./my-notes
|
|
41
|
+
|
|
42
|
+
# Publish a single file
|
|
43
|
+
flowershow publish ./my-note.md
|
|
7
44
|
```
|
|
8
|
-
|
|
45
|
+
|
|
46
|
+
## Commands
|
|
47
|
+
|
|
48
|
+
### Authentication
|
|
49
|
+
|
|
50
|
+
#### `flowershow auth login`
|
|
51
|
+
|
|
52
|
+
Authenticate with FlowerShow via browser OAuth flow.
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
flowershow auth login
|
|
9
56
|
```
|
|
10
57
|
|
|
11
|
-
|
|
58
|
+
#### `flowershow auth status`
|
|
59
|
+
|
|
60
|
+
Check your current authentication status.
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
flowershow auth status
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
#### `flowershow auth logout`
|
|
67
|
+
|
|
68
|
+
Remove your stored authentication token.
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
flowershow auth logout
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
See [Authentication Documentation](docs/authentication.md) for detailed information.
|
|
75
|
+
|
|
76
|
+
### Publishing
|
|
77
|
+
|
|
78
|
+
#### `flowershow publish <path> [morePaths...] [options]`
|
|
79
|
+
|
|
80
|
+
Publish files or folders to FlowerShow.
|
|
81
|
+
|
|
82
|
+
**Options:**
|
|
83
|
+
|
|
84
|
+
- `--overwrite` - Overwrite existing site if it already exists
|
|
85
|
+
- `--name <siteName>` - Custom name for the site (defaults to file/folder name)
|
|
86
|
+
|
|
87
|
+
**Examples:**
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
# Publish a single markdown file
|
|
91
|
+
flowershow publish ./my-note.md
|
|
92
|
+
|
|
93
|
+
# Publish multiple files
|
|
94
|
+
flowershow publish ./intro.md ./chapter1.md ./chapter2.md
|
|
95
|
+
|
|
96
|
+
# Publish a folder
|
|
97
|
+
flowershow publish ./my-notes
|
|
98
|
+
|
|
99
|
+
# Overwrite an existing site
|
|
100
|
+
flowershow publish ./my-notes --overwrite
|
|
101
|
+
|
|
102
|
+
# Publish with a custom site name
|
|
103
|
+
flowershow publish ./my-notes --name my-custom-site
|
|
104
|
+
|
|
105
|
+
# Combine options
|
|
106
|
+
flowershow publish ./my-notes --name my-custom-site --overwrite
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**What happens:**
|
|
110
|
+
|
|
111
|
+
1. Files are discovered and filtered (ignores `.git`, `node_modules`, etc.)
|
|
112
|
+
2. Project name is derived from the first file/folder name
|
|
113
|
+
3. Site is created via the FlowerShow API
|
|
114
|
+
4. Presigned URLs are obtained for secure file uploads
|
|
115
|
+
5. Files are uploaded directly to Cloudflare R2 storage
|
|
116
|
+
6. CLI waits for markdown files to be processed
|
|
117
|
+
7. Site URL is displayed
|
|
118
|
+
|
|
119
|
+
**Single file behavior:**
|
|
120
|
+
|
|
121
|
+
- Filename becomes the project name
|
|
122
|
+
- File is saved as `README.md` (or `README.mdx`)
|
|
123
|
+
- Accessible at `/@{username}/{filename}`
|
|
124
|
+
|
|
125
|
+
**Multiple files behavior:**
|
|
126
|
+
|
|
127
|
+
- First filename becomes the project name
|
|
128
|
+
- First file is saved as `README.md` (or `README.mdx`)
|
|
129
|
+
- Subsequent files keep their original names
|
|
130
|
+
- Accessible at `/@{username}/{first-filename}`
|
|
131
|
+
|
|
132
|
+
**Folder behavior:**
|
|
133
|
+
|
|
134
|
+
- Folder name becomes the project name
|
|
135
|
+
- All files maintain their relative paths
|
|
136
|
+
- Accessible at `/@{username}/{foldername}`
|
|
137
|
+
|
|
138
|
+
### Site Management
|
|
139
|
+
|
|
140
|
+
#### `flowershow list`
|
|
141
|
+
|
|
142
|
+
List all sites published by your authenticated user.
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
flowershow list
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Shows site names, URLs, and timestamps.
|
|
149
|
+
|
|
150
|
+
#### `flowershow delete <project-name>`
|
|
151
|
+
|
|
152
|
+
Delete a site and all its files.
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
flowershow delete my-notes
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Removes the site and all its files via the FlowerShow API.
|
|
159
|
+
|
|
160
|
+
## File Filtering
|
|
161
|
+
|
|
162
|
+
The CLI automatically ignores common non-content files and directories:
|
|
163
|
+
|
|
164
|
+
- `.git/`, `node_modules/`, `.cache/`, `dist/`, `build/`
|
|
165
|
+
- `.DS_Store`, `Thumbs.db`
|
|
166
|
+
- `.env*`, `*.log`
|
|
167
|
+
- `.next/`, `.vercel/`, `.turbo/`
|
|
168
|
+
|
|
169
|
+
If `.gitignore` file is present in the published folder, it will also ignore files matched by it.
|
|
170
|
+
|
|
171
|
+
## Site URLs
|
|
172
|
+
|
|
173
|
+
All CLI-published sites are accessible at:
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
https://my.flowershow.app/@{username}/{project-name}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Where `{username}` is your authenticated username.
|
|
180
|
+
|
|
181
|
+
## Troubleshooting
|
|
182
|
+
|
|
183
|
+
### "You must be authenticated to use this command"
|
|
184
|
+
|
|
185
|
+
Run `flowershow auth login` to authenticate.
|
|
186
|
+
|
|
187
|
+
### "Authentication token is invalid or expired"
|
|
188
|
+
|
|
189
|
+
Your token may have been revoked. Re-authenticate:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
flowershow auth login
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### "Site already exists"
|
|
196
|
+
|
|
197
|
+
A site with that name already exists. You can:
|
|
198
|
+
|
|
199
|
+
- Use the `--overwrite` flag: `flowershow publish <path> --overwrite`
|
|
200
|
+
- Delete it first: `flowershow delete <name>`
|
|
201
|
+
- Rename your file/folder
|
|
202
|
+
- Use `flowershow list` to see all existing sites
|
|
203
|
+
|
|
204
|
+
### Files still processing after timeout
|
|
205
|
+
|
|
206
|
+
The site is live, but some pages may not be ready yet. The Cloudflare worker processes files asynchronously. Check your site again in a moment.
|
|
207
|
+
|
|
208
|
+
## Architecture
|
|
209
|
+
|
|
210
|
+
All CLI commands communicate with the FlowerShow API:
|
|
211
|
+
|
|
212
|
+
- **Authentication**: OAuth device flow endpoints
|
|
213
|
+
- **Site Management**: Create, list, and delete sites
|
|
214
|
+
- **File Upload**: Presigned URL generation and status polling
|
|
215
|
+
- **User Info**: Retrieve authenticated user details
|
|
216
|
+
|
|
217
|
+
### Security
|
|
218
|
+
|
|
219
|
+
- **Token Storage**: Authentication tokens are stored in `~/.flowershow/token.json`
|
|
220
|
+
- **Token Format**: CLI tokens use the `fs_cli_` prefix
|
|
221
|
+
- **Token Expiration**: Tokens do not expire by default
|
|
222
|
+
- **Token Revocation**: Revoke tokens from the FlowerShow dashboard or via `flowershow auth logout`
|
|
223
|
+
- **Secure Uploads**: Files are uploaded using time-limited presigned URLs
|
|
224
|
+
- **No Credentials**: CLI never stores database or storage credentials
|
|
225
|
+
|
|
226
|
+
## Development
|
|
227
|
+
|
|
228
|
+
### Setup
|
|
229
|
+
|
|
230
|
+
1. **Clone and install dependencies:**
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
cd cli
|
|
234
|
+
pnpm install
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
2. **Configure environment:**
|
|
238
|
+
|
|
239
|
+
Use local or other non-production API and publish URLs.
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
cp .env.example .env
|
|
243
|
+
```
|
|
12
244
|
|
|
13
245
|
```bash
|
|
14
|
-
|
|
246
|
+
API_URL="http://cloud.localhost:3000"
|
|
247
|
+
APP_URL="http://my.localhost:3000"
|
|
15
248
|
```
|
|
16
249
|
|
|
17
|
-
|
|
250
|
+
3. **Run commands:**
|
|
18
251
|
|
|
19
252
|
```bash
|
|
20
|
-
|
|
253
|
+
pnpm dev auth login
|
|
254
|
+
pnpm dev publish ...
|
|
21
255
|
```
|
|
22
256
|
|
|
23
|
-
|
|
257
|
+
You can also build the project, link it globally and use it as you normally would the npm-installed version:
|
|
24
258
|
|
|
25
259
|
```bash
|
|
26
|
-
|
|
260
|
+
pnpm build
|
|
261
|
+
npm link
|
|
262
|
+
flowershow ...
|
|
27
263
|
```
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { publishCommand } from "./lib/commands/publish.js";
|
|
5
|
+
import { listCommand } from "./lib/commands/list.js";
|
|
6
|
+
import { deleteCommand } from "./lib/commands/delete.js";
|
|
7
|
+
import { authLoginCommand } from "./lib/commands/auth-login.js";
|
|
8
|
+
import { authLogoutCommand } from "./lib/commands/auth-logout.js";
|
|
9
|
+
import { authStatusCommand } from "./lib/commands/auth-status.js";
|
|
10
|
+
const program = new Command();
|
|
11
|
+
program
|
|
12
|
+
.name("flowershow")
|
|
13
|
+
.description("CLI tool for publishing to FlowerShow")
|
|
14
|
+
.version("0.1.0");
|
|
15
|
+
const auth = program
|
|
16
|
+
.command("auth")
|
|
17
|
+
.description("Manage authentication")
|
|
18
|
+
.action(() => {
|
|
19
|
+
auth.help();
|
|
20
|
+
});
|
|
21
|
+
auth
|
|
22
|
+
.command("login")
|
|
23
|
+
.description("Authenticate with FlowerShow via browser")
|
|
24
|
+
.action(async () => {
|
|
25
|
+
console.log(chalk.bold("\n💐 FlowerShow CLI - Authentication\n"));
|
|
26
|
+
await authLoginCommand();
|
|
27
|
+
});
|
|
28
|
+
auth
|
|
29
|
+
.command("logout")
|
|
30
|
+
.description("Remove stored authentication token")
|
|
31
|
+
.action(async () => {
|
|
32
|
+
console.log(chalk.bold("\n💐 FlowerShow CLI - Logout\n"));
|
|
33
|
+
await authLogoutCommand();
|
|
34
|
+
});
|
|
35
|
+
auth
|
|
36
|
+
.command("status")
|
|
37
|
+
.description("Check authentication status")
|
|
38
|
+
.action(async () => {
|
|
39
|
+
console.log(chalk.bold("\n💐 FlowerShow CLI - Auth Status\n"));
|
|
40
|
+
await authStatusCommand();
|
|
41
|
+
});
|
|
42
|
+
program
|
|
43
|
+
.command("publish <path> [morePaths...]")
|
|
44
|
+
.description("Publish file(s) or folder to FlowerShow")
|
|
45
|
+
.option("--overwrite", "Overwrite existing site if it already exists")
|
|
46
|
+
.option("--name <siteName>", "Custom name for the site")
|
|
47
|
+
.action(async (path, morePaths, options) => {
|
|
48
|
+
console.log(chalk.bold("\n💐 FlowerShow CLI - Publish\n"));
|
|
49
|
+
const paths = [path, ...morePaths];
|
|
50
|
+
await publishCommand(paths, options.overwrite || false, options.name);
|
|
51
|
+
});
|
|
52
|
+
program
|
|
53
|
+
.command("list")
|
|
54
|
+
.description("List all published sites")
|
|
55
|
+
.action(async () => {
|
|
56
|
+
console.log(chalk.bold("\n💐 FlowerShow CLI - List Sites\n"));
|
|
57
|
+
await listCommand();
|
|
58
|
+
});
|
|
59
|
+
program
|
|
60
|
+
.command("delete <project-name>")
|
|
61
|
+
.description("Delete a published site")
|
|
62
|
+
.action(async (projectName) => {
|
|
63
|
+
console.log(chalk.bold("\n💐 FlowerShow CLI - Delete Site\n"));
|
|
64
|
+
await deleteCommand(projectName);
|
|
65
|
+
});
|
|
66
|
+
if (process.argv.length === 2) {
|
|
67
|
+
program.help();
|
|
68
|
+
}
|
|
69
|
+
program.parse();
|
|
70
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
interface Site {
|
|
2
|
+
id: string;
|
|
3
|
+
projectName: string;
|
|
4
|
+
url: string;
|
|
5
|
+
userId: string;
|
|
6
|
+
createdAt: string;
|
|
7
|
+
updatedAt?: string;
|
|
8
|
+
fileCount?: number;
|
|
9
|
+
totalSize?: number;
|
|
10
|
+
plan?: "FREE" | "PREMIUM";
|
|
11
|
+
}
|
|
12
|
+
interface CreateSiteResponse {
|
|
13
|
+
site: Site;
|
|
14
|
+
}
|
|
15
|
+
interface GetSitesResponse {
|
|
16
|
+
sites: Site[];
|
|
17
|
+
total: number;
|
|
18
|
+
}
|
|
19
|
+
interface GetSiteResponse {
|
|
20
|
+
site: Site;
|
|
21
|
+
}
|
|
22
|
+
interface DeleteSiteResponse {
|
|
23
|
+
success: boolean;
|
|
24
|
+
message: string;
|
|
25
|
+
deletedFiles: number;
|
|
26
|
+
}
|
|
27
|
+
interface FileMetadata {
|
|
28
|
+
path: string;
|
|
29
|
+
size: number;
|
|
30
|
+
sha: string;
|
|
31
|
+
}
|
|
32
|
+
interface UploadUrl {
|
|
33
|
+
path: string;
|
|
34
|
+
uploadUrl: string;
|
|
35
|
+
blobId: string;
|
|
36
|
+
}
|
|
37
|
+
interface GetUploadUrlsResponse {
|
|
38
|
+
uploadUrls: UploadUrl[];
|
|
39
|
+
expiresIn: number;
|
|
40
|
+
}
|
|
41
|
+
interface BlobStatus {
|
|
42
|
+
path: string;
|
|
43
|
+
syncStatus: "PENDING" | "SUCCESS" | "ERROR";
|
|
44
|
+
syncError?: string;
|
|
45
|
+
}
|
|
46
|
+
interface SiteStatusResponse {
|
|
47
|
+
siteId: string;
|
|
48
|
+
status: string;
|
|
49
|
+
files: {
|
|
50
|
+
total: number;
|
|
51
|
+
pending: number;
|
|
52
|
+
success: number;
|
|
53
|
+
failed: number;
|
|
54
|
+
};
|
|
55
|
+
blobs: BlobStatus[];
|
|
56
|
+
}
|
|
57
|
+
export declare function apiRequest(endpoint: string, options?: RequestInit): Promise<Response>;
|
|
58
|
+
export declare function createSite(projectName: string, overwrite?: boolean): Promise<CreateSiteResponse>;
|
|
59
|
+
export declare function getSites(): Promise<GetSitesResponse>;
|
|
60
|
+
export declare function getSiteById(siteId: string): Promise<GetSiteResponse>;
|
|
61
|
+
export declare function getSiteByName(siteName: string): Promise<GetSiteResponse | null>;
|
|
62
|
+
export declare function deleteSite(siteId: string): Promise<DeleteSiteResponse>;
|
|
63
|
+
export declare function getUploadUrls(siteId: string, files: FileMetadata[]): Promise<GetUploadUrlsResponse>;
|
|
64
|
+
export declare function uploadToR2(uploadUrl: string, content: Buffer, contentType: string): Promise<boolean>;
|
|
65
|
+
export declare function getSiteStatus(siteId: string): Promise<SiteStatusResponse>;
|
|
66
|
+
export declare function hasValidAuth(): boolean;
|
|
67
|
+
export {};
|
|
68
|
+
//# sourceMappingURL=api-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../lib/api-client.ts"],"names":[],"mappings":"AAGA,UAAU,IAAI;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,UAAU,kBAAkB;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,qBAAqB;IAC7B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,kBAAkB;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAQD,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,QAAQ,CAAC,CAanB;AAQD,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,OAAe,GACzB,OAAO,CAAC,kBAAkB,CAAC,CAiB7B;AAMD,wBAAsB,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAW1D;AAOD,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAW1E;AAOD,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAejC;AAOD,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAa5E;AAQD,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,EAAE,GACpB,OAAO,CAAC,qBAAqB,CAAC,CAiBhC;AASD,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CAclB;AAOD,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAW/E;AAMD,wBAAgB,YAAY,IAAI,OAAO,CAEtC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { getAuthHeaders, isAuthenticated } from "./auth.js";
|
|
2
|
+
import { API_URL } from "./const.js";
|
|
3
|
+
export async function apiRequest(endpoint, options = {}) {
|
|
4
|
+
const authHeaders = getAuthHeaders();
|
|
5
|
+
const url = `${API_URL}${endpoint}`;
|
|
6
|
+
const headers = {
|
|
7
|
+
...options.headers,
|
|
8
|
+
...(authHeaders || {}),
|
|
9
|
+
};
|
|
10
|
+
return fetch(url, {
|
|
11
|
+
...options,
|
|
12
|
+
headers,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
export async function createSite(projectName, overwrite = false) {
|
|
16
|
+
const response = await apiRequest("/api/cli/site", {
|
|
17
|
+
method: "POST",
|
|
18
|
+
headers: {
|
|
19
|
+
"Content-Type": "application/json",
|
|
20
|
+
},
|
|
21
|
+
body: JSON.stringify({ projectName, overwrite }),
|
|
22
|
+
});
|
|
23
|
+
if (!response.ok) {
|
|
24
|
+
const error = await response.json().catch(() => ({}));
|
|
25
|
+
throw new Error(error.message || `Failed to create site: ${response.statusText}`);
|
|
26
|
+
}
|
|
27
|
+
return (await response.json());
|
|
28
|
+
}
|
|
29
|
+
export async function getSites() {
|
|
30
|
+
const response = await apiRequest("/api/cli/site/get-all");
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
const error = await response.json().catch(() => ({}));
|
|
33
|
+
throw new Error(error.message || `Failed to fetch sites: ${response.statusText}`);
|
|
34
|
+
}
|
|
35
|
+
return (await response.json());
|
|
36
|
+
}
|
|
37
|
+
export async function getSiteById(siteId) {
|
|
38
|
+
const response = await apiRequest(`/api/cli/site/${siteId}`);
|
|
39
|
+
if (!response.ok) {
|
|
40
|
+
const error = await response.json().catch(() => ({}));
|
|
41
|
+
throw new Error(error.message || `Failed to fetch site: ${response.statusText}`);
|
|
42
|
+
}
|
|
43
|
+
return (await response.json());
|
|
44
|
+
}
|
|
45
|
+
export async function getSiteByName(siteName) {
|
|
46
|
+
const response = await apiRequest(`/api/cli/site/by-name/${siteName}`);
|
|
47
|
+
if (!response.ok) {
|
|
48
|
+
if (response.status === 404) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
const error = await response.json().catch(() => ({}));
|
|
52
|
+
throw new Error(error.message || `Failed to fetch site: ${response.statusText}`);
|
|
53
|
+
}
|
|
54
|
+
return (await response.json());
|
|
55
|
+
}
|
|
56
|
+
export async function deleteSite(siteId) {
|
|
57
|
+
const response = await apiRequest(`/api/cli/site/${siteId}`, {
|
|
58
|
+
method: "DELETE",
|
|
59
|
+
});
|
|
60
|
+
if (!response.ok) {
|
|
61
|
+
const error = await response.json().catch(() => ({}));
|
|
62
|
+
throw new Error(error.message || `Failed to delete site: ${response.statusText}`);
|
|
63
|
+
}
|
|
64
|
+
return (await response.json());
|
|
65
|
+
}
|
|
66
|
+
export async function getUploadUrls(siteId, files) {
|
|
67
|
+
const response = await apiRequest(`/api/cli/site/${siteId}/upload-urls`, {
|
|
68
|
+
method: "POST",
|
|
69
|
+
headers: {
|
|
70
|
+
"Content-Type": "application/json",
|
|
71
|
+
},
|
|
72
|
+
body: JSON.stringify({ files }),
|
|
73
|
+
});
|
|
74
|
+
if (!response.ok) {
|
|
75
|
+
const error = await response.json().catch(() => ({}));
|
|
76
|
+
throw new Error(error.message || `Failed to get upload URLs: ${response.statusText}`);
|
|
77
|
+
}
|
|
78
|
+
return (await response.json());
|
|
79
|
+
}
|
|
80
|
+
export async function uploadToR2(uploadUrl, content, contentType) {
|
|
81
|
+
const response = await fetch(uploadUrl, {
|
|
82
|
+
method: "PUT",
|
|
83
|
+
body: content,
|
|
84
|
+
headers: {
|
|
85
|
+
"Content-Type": contentType,
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
if (!response.ok) {
|
|
89
|
+
throw new Error(`Failed to upload file: ${response.statusText}`);
|
|
90
|
+
}
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
export async function getSiteStatus(siteId) {
|
|
94
|
+
const response = await apiRequest(`/api/cli/site/${siteId}/status`);
|
|
95
|
+
if (!response.ok) {
|
|
96
|
+
const error = await response.json().catch(() => ({}));
|
|
97
|
+
throw new Error(error.message || `Failed to get site status: ${response.statusText}`);
|
|
98
|
+
}
|
|
99
|
+
return (await response.json());
|
|
100
|
+
}
|
|
101
|
+
export function hasValidAuth() {
|
|
102
|
+
return isAuthenticated();
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../lib/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface TokenData {
|
|
2
|
+
token: string;
|
|
3
|
+
username: string;
|
|
4
|
+
savedAt: string;
|
|
5
|
+
}
|
|
6
|
+
interface UserInfo {
|
|
7
|
+
username?: string;
|
|
8
|
+
email?: string;
|
|
9
|
+
id?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function saveToken(token: string, username: string): void;
|
|
12
|
+
export declare function getToken(): TokenData | null;
|
|
13
|
+
export declare function removeToken(): Promise<void>;
|
|
14
|
+
export declare function isAuthenticated(): boolean;
|
|
15
|
+
export declare function getAuthHeaders(): Record<string, string> | null;
|
|
16
|
+
export declare function pollForToken(apiUrl: string, deviceCode: string, interval: number, expiresIn: number): Promise<string>;
|
|
17
|
+
export declare function requireAuth(): void;
|
|
18
|
+
export declare function getAuthenticatedUser(): Promise<UserInfo>;
|
|
19
|
+
export declare function getUserInfo(apiUrl: string, token: string): Promise<UserInfo>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../lib/auth.ts"],"names":[],"mappings":"AASA,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,QAAQ;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAaD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAY/D;AAMD,wBAAgB,QAAQ,IAAI,SAAS,GAAG,IAAI,CAY3C;AAKD,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAYjD;AAMD,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAMD,wBAAgB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAU9D;AAUD,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CA8DjB;AAKD,wBAAgB,WAAW,IAAI,IAAI,CAQlC;AAKD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,QAAQ,CAAC,CAQ9D;AAQD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,QAAQ,CAAC,CAYnB"}
|