@magpiecloud/mags 1.8.5 → 1.8.6
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/bin/mags.js +5 -5
- package/package.json +1 -1
- package/python/dist/magpie_mags-1.3.3-py3-none-any.whl +0 -0
- package/python/dist/magpie_mags-1.3.3.tar.gz +0 -0
- package/python/src/magpie_mags.egg-info/PKG-INFO +20 -2
- package/website/api.html +4 -6
- package/website/claude-skill.html +6 -8
- package/website/cookbook/hn-marketing.sh +25 -33
- package/website/cookbook.html +22 -19
- package/website/index.html +50 -17
- package/website/login.html +9 -28
- package/website/tokens.html +4 -7
- package/website/usage.html +4 -7
package/bin/mags.js
CHANGED
|
@@ -595,8 +595,8 @@ async function runJob(args) {
|
|
|
595
595
|
if (baseWorkspace) log('blue', `Base workspace: ${baseWorkspace} (read-only)`);
|
|
596
596
|
if (persistent) log('yellow', 'Persistent: VM will stay alive');
|
|
597
597
|
|
|
598
|
-
// Poll for completion
|
|
599
|
-
const maxAttempts =
|
|
598
|
+
// Poll for completion (200ms intervals, 600 attempts = 2 min timeout)
|
|
599
|
+
const maxAttempts = 600;
|
|
600
600
|
let attempt = 0;
|
|
601
601
|
|
|
602
602
|
while (attempt < maxAttempts) {
|
|
@@ -609,7 +609,7 @@ async function runJob(args) {
|
|
|
609
609
|
// If --url requested, wait until VM is actually assigned (vm_id populated)
|
|
610
610
|
if (enableUrl && !status.vm_id) {
|
|
611
611
|
process.stdout.write('.');
|
|
612
|
-
await sleep(
|
|
612
|
+
await sleep(200);
|
|
613
613
|
attempt++;
|
|
614
614
|
continue;
|
|
615
615
|
}
|
|
@@ -633,7 +633,7 @@ async function runJob(args) {
|
|
|
633
633
|
}
|
|
634
634
|
|
|
635
635
|
process.stdout.write('.');
|
|
636
|
-
await sleep(
|
|
636
|
+
await sleep(200);
|
|
637
637
|
attempt++;
|
|
638
638
|
}
|
|
639
639
|
|
|
@@ -1452,7 +1452,7 @@ async function sshToJob(nameOrId) {
|
|
|
1452
1452
|
process.exit(1);
|
|
1453
1453
|
}
|
|
1454
1454
|
process.stdout.write('.');
|
|
1455
|
-
await sleep(
|
|
1455
|
+
await sleep(300);
|
|
1456
1456
|
}
|
|
1457
1457
|
console.log('');
|
|
1458
1458
|
}
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: magpie-mags
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.3
|
|
4
4
|
Summary: Mags SDK - Execute scripts on Magpie's instant VM infrastructure
|
|
5
5
|
Author: Magpie Cloud
|
|
6
6
|
License: MIT
|
|
@@ -91,6 +91,19 @@ m.run_and_wait(
|
|
|
91
91
|
)
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
+
### Always-On VMs
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
# VM that never auto-sleeps — stays running 24/7
|
|
98
|
+
job = m.run(
|
|
99
|
+
"python3 server.py",
|
|
100
|
+
workspace_id="my-api",
|
|
101
|
+
persistent=True,
|
|
102
|
+
no_sleep=True,
|
|
103
|
+
)
|
|
104
|
+
# Auto-recovers if the host goes down
|
|
105
|
+
```
|
|
106
|
+
|
|
94
107
|
### Enable URL / SSH Access
|
|
95
108
|
|
|
96
109
|
```python
|
|
@@ -141,8 +154,13 @@ print(f"Jobs: {usage['total_jobs']}, VM seconds: {usage['vm_seconds']:.0f}")
|
|
|
141
154
|
|
|
142
155
|
| Method | Description |
|
|
143
156
|
|--------|-------------|
|
|
144
|
-
| `run(script, **opts)` | Submit a job (
|
|
157
|
+
| `run(script, **opts)` | Submit a job (`persistent`, `no_sleep`, `workspace_id`, ...) |
|
|
145
158
|
| `run_and_wait(script, **opts)` | Submit and block until done |
|
|
159
|
+
| `new(name, **opts)` | Create a persistent VM workspace |
|
|
160
|
+
| `find_job(name_or_id)` | Find a running/sleeping job by name or workspace |
|
|
161
|
+
| `exec(name_or_id, command)` | Run a command on an existing VM via SSH |
|
|
162
|
+
| `stop(name_or_id)` | Stop a running job |
|
|
163
|
+
| `resize(workspace, disk_gb)` | Resize a workspace's disk |
|
|
146
164
|
| `status(request_id)` | Get job status |
|
|
147
165
|
| `logs(request_id)` | Get job logs |
|
|
148
166
|
| `list_jobs(page, page_size)` | List recent jobs |
|
package/website/api.html
CHANGED
|
@@ -109,11 +109,10 @@
|
|
|
109
109
|
</div>
|
|
110
110
|
<nav class="nav-links">
|
|
111
111
|
<a href="index.html">Home</a>
|
|
112
|
-
<a href="index.html#quickstart">
|
|
113
|
-
<a href="index.html#sdk">SDKs</a>
|
|
112
|
+
<a href="index.html#quickstart">Docs</a>
|
|
114
113
|
<a href="cookbook.html">Cookbook</a>
|
|
114
|
+
<a href="https://discord.gg/3avpC2nS" target="_blank" rel="noreferrer">Discord</a>
|
|
115
115
|
<a href="login.html">Login</a>
|
|
116
|
-
<a href="tokens.html">Tokens</a>
|
|
117
116
|
</nav>
|
|
118
117
|
<div class="nav-cta">
|
|
119
118
|
<a class="button ghost" href="tokens.html">Get API token</a>
|
|
@@ -924,11 +923,10 @@ mags cron remove <id></code></pre>
|
|
|
924
923
|
</div>
|
|
925
924
|
<div class="footer-links">
|
|
926
925
|
<a href="index.html">Home</a>
|
|
926
|
+
<a href="cookbook.html">Cookbook</a>
|
|
927
927
|
<a href="https://pypi.org/project/magpie-mags/" rel="noreferrer">Python SDK</a>
|
|
928
928
|
<a href="https://www.npmjs.com/package/@magpiecloud/mags" rel="noreferrer">Node.js SDK</a>
|
|
929
|
-
<a href="
|
|
930
|
-
<a href="tokens.html">Tokens</a>
|
|
931
|
-
<a href="usage.html">Usage</a>
|
|
929
|
+
<a href="https://discord.gg/3avpC2nS" target="_blank" rel="noreferrer">Discord</a>
|
|
932
930
|
<a href="login.html">Login</a>
|
|
933
931
|
</div>
|
|
934
932
|
</div>
|
|
@@ -24,9 +24,10 @@
|
|
|
24
24
|
</div>
|
|
25
25
|
<nav class="nav-links">
|
|
26
26
|
<a href="index.html">Home</a>
|
|
27
|
-
<a href="index.html#
|
|
28
|
-
<a href="api.html">API
|
|
27
|
+
<a href="index.html#quickstart">Docs</a>
|
|
28
|
+
<a href="api.html">API</a>
|
|
29
29
|
<a href="cookbook.html">Cookbook</a>
|
|
30
|
+
<a href="https://discord.gg/3avpC2nS" target="_blank" rel="noreferrer">Discord</a>
|
|
30
31
|
<a href="login.html">Login</a>
|
|
31
32
|
</nav>
|
|
32
33
|
<div class="nav-cta">
|
|
@@ -467,13 +468,10 @@ Use workspace "monitors" so the log persists</code></pre>
|
|
|
467
468
|
</div>
|
|
468
469
|
<div class="footer-links">
|
|
469
470
|
<a href="index.html">Home</a>
|
|
470
|
-
<a href="
|
|
471
|
-
<a href="usage.html">Usage</a>
|
|
472
|
-
<a href="tokens.html">Tokens</a>
|
|
471
|
+
<a href="api.html">API</a>
|
|
473
472
|
<a href="cookbook.html">Cookbook</a>
|
|
474
|
-
<a href="https://
|
|
475
|
-
<a href="
|
|
476
|
-
<a href="https://github.com/magpiecloud/mags" rel="noreferrer">GitHub</a>
|
|
473
|
+
<a href="https://discord.gg/3avpC2nS" target="_blank" rel="noreferrer">Discord</a>
|
|
474
|
+
<a href="login.html">Login</a>
|
|
477
475
|
</div>
|
|
478
476
|
</div>
|
|
479
477
|
</footer>
|
|
@@ -1,50 +1,42 @@
|
|
|
1
1
|
#!/bin/sh
|
|
2
|
-
# hn-marketing.sh — Fetch top HN stories and
|
|
2
|
+
# hn-marketing.sh — Fetch top 10 HN stories and save to CSV
|
|
3
3
|
# Dependencies: curl, jq (install with: apk add -q curl jq)
|
|
4
4
|
|
|
5
5
|
set -e
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
CSV="${HN_CSV:-./hn-top10.csv}"
|
|
8
|
+
TIMESTAMP=$(date -u +"%Y-%m-%d %H:%M:%S UTC")
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
echo ""
|
|
12
|
-
|
|
13
|
-
IDS=$(curl -sf "https://hacker-news.firebaseio.com/v0/topstories.json" | jq -r '.[0:100] | .[]')
|
|
14
|
-
|
|
15
|
-
if [ -z "$IDS" ]; then
|
|
16
|
-
echo "Error: could not fetch story IDs"
|
|
17
|
-
exit 1
|
|
10
|
+
# Write CSV header if file doesn't exist
|
|
11
|
+
if [ ! -f "$CSV" ]; then
|
|
12
|
+
echo "timestamp,rank,score,title,url,hn_link" > "$CSV"
|
|
18
13
|
fi
|
|
19
14
|
|
|
20
|
-
|
|
15
|
+
echo "=== HN Top 10 ==="
|
|
16
|
+
echo "Fetched at: $TIMESTAMP"
|
|
17
|
+
echo ""
|
|
18
|
+
|
|
19
|
+
# Get top 10 story IDs
|
|
20
|
+
IDS=$(curl -sf "https://hacker-news.firebaseio.com/v0/topstories.json" | jq -r '.[0:10] | .[]')
|
|
21
21
|
|
|
22
|
+
RANK=0
|
|
22
23
|
for ID in $IDS; do
|
|
24
|
+
RANK=$((RANK + 1))
|
|
23
25
|
ITEM=$(curl -sf "https://hacker-news.firebaseio.com/v0/item/${ID}.json")
|
|
24
|
-
TITLE=$(echo "$ITEM" | jq -r '.title // empty')
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
TITLE=$(echo "$ITEM" | jq -r '.title // "untitled"' | tr -d '\n\r' | sed 's/,/;/g')
|
|
28
|
+
URL=$(echo "$ITEM" | jq -r '.url // ""' | tr -d '\n\r')
|
|
29
|
+
SCORE=$(echo "$ITEM" | jq -r '.score // 0')
|
|
30
|
+
HN_LINK="https://news.ycombinator.com/item?id=$ID"
|
|
29
31
|
|
|
30
|
-
|
|
32
|
+
[ -z "$URL" ] && URL="$HN_LINK"
|
|
31
33
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
TIME=$(echo "$ITEM" | jq -r '.time // 0')
|
|
36
|
-
COUNT=$((COUNT + 1))
|
|
34
|
+
echo "[$RANK] $TITLE"
|
|
35
|
+
echo " Score: $SCORE | $URL"
|
|
36
|
+
echo ""
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
echo " Score: $SCORE | Link: $URL"
|
|
40
|
-
echo " HN: https://news.ycombinator.com/item?id=$ID"
|
|
41
|
-
echo ""
|
|
42
|
-
fi
|
|
38
|
+
echo "$TIMESTAMP,$RANK,$SCORE,$TITLE,$URL,$HN_LINK" >> "$CSV"
|
|
43
39
|
done
|
|
44
40
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
else
|
|
48
|
-
echo "---"
|
|
49
|
-
echo "Found $COUNT marketing-related stories."
|
|
50
|
-
fi
|
|
41
|
+
echo "---"
|
|
42
|
+
echo "Saved to $CSV"
|
package/website/cookbook.html
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
/>
|
|
11
11
|
<meta name="api-base" content="https://api.magpiecloud.com" />
|
|
12
12
|
<meta name="auth-base" content="https://api.magpiecloud.com" />
|
|
13
|
-
<link rel="stylesheet" href="styles.css?v=
|
|
13
|
+
<link rel="stylesheet" href="styles.css?v=6" />
|
|
14
14
|
<script src="env.js"></script>
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|
|
@@ -24,13 +24,10 @@
|
|
|
24
24
|
</div>
|
|
25
25
|
<nav class="nav-links">
|
|
26
26
|
<a href="index.html">Home</a>
|
|
27
|
-
<a href="index.html#quickstart">
|
|
28
|
-
<a href="
|
|
29
|
-
<a href="
|
|
27
|
+
<a href="index.html#quickstart">Docs</a>
|
|
28
|
+
<a href="api.html">API</a>
|
|
29
|
+
<a href="https://discord.gg/3avpC2nS" target="_blank" rel="noreferrer">Discord</a>
|
|
30
30
|
<a href="login.html">Login</a>
|
|
31
|
-
<a href="usage.html">Usage</a>
|
|
32
|
-
<a href="tokens.html">Tokens</a>
|
|
33
|
-
<a href="claude-skill.html">Claude Skill</a>
|
|
34
31
|
</nav>
|
|
35
32
|
<div class="nav-cta">
|
|
36
33
|
<a class="button ghost" href="index.html#quickstart">Get started</a>
|
|
@@ -171,18 +168,25 @@ mags logs <job-id></code></pre>
|
|
|
171
168
|
</article>
|
|
172
169
|
<article class="recipe-item" data-reveal>
|
|
173
170
|
<div class="recipe-header">
|
|
174
|
-
<h3>HN
|
|
171
|
+
<h3>HN Top 10 Digest</h3>
|
|
175
172
|
<span class="pill">Cron</span>
|
|
176
173
|
</div>
|
|
177
|
-
<pre><code># Upload script + install deps
|
|
178
|
-
mags run -f
|
|
179
|
-
'
|
|
174
|
+
<pre><code># Upload script + install deps (file lands in /root/)
|
|
175
|
+
mags run -f hn-marketing.sh -w hn-digest \
|
|
176
|
+
'chmod +x /root/hn-marketing.sh && apk add -q curl jq'
|
|
177
|
+
|
|
178
|
+
# Run it once (saves to /root/hn-top10.csv)
|
|
179
|
+
mags run -w hn-digest 'HN_CSV=/root/hn-top10.csv sh /root/hn-marketing.sh'
|
|
180
180
|
|
|
181
|
-
#
|
|
182
|
-
mags cron add --name "hn-
|
|
181
|
+
# Schedule it (every 2 hours, results append to CSV)
|
|
182
|
+
mags cron add --name "hn-top10" \
|
|
183
183
|
--schedule "0 */2 * * *" -w hn-digest \
|
|
184
|
-
'sh /root/hn-marketing.sh'</code></pre>
|
|
185
|
-
<p class="label"
|
|
184
|
+
'HN_CSV=/root/hn-top10.csv sh /root/hn-marketing.sh'</code></pre>
|
|
185
|
+
<p class="label">
|
|
186
|
+
<a href="cookbook/hn-marketing.sh" download>Download hn-marketing.sh</a>
|
|
187
|
+
·
|
|
188
|
+
<a href="cookbook/hn-marketing.html">Full recipe + live demo →</a>
|
|
189
|
+
</p>
|
|
186
190
|
</article>
|
|
187
191
|
</div>
|
|
188
192
|
</div>
|
|
@@ -264,11 +268,10 @@ curl -X POST https://api.magpiecloud.com/api/v1/mags-cron \
|
|
|
264
268
|
</div>
|
|
265
269
|
<div class="footer-links">
|
|
266
270
|
<a href="index.html">Home</a>
|
|
267
|
-
<a href="
|
|
268
|
-
<a href="usage.html">Usage</a>
|
|
269
|
-
<a href="tokens.html">Tokens</a>
|
|
271
|
+
<a href="api.html">API</a>
|
|
270
272
|
<a href="claude-skill.html">Claude Skill</a>
|
|
271
|
-
<a href="https://
|
|
273
|
+
<a href="https://discord.gg/3avpC2nS" target="_blank" rel="noreferrer">Discord</a>
|
|
274
|
+
<a href="login.html">Login</a>
|
|
272
275
|
</div>
|
|
273
276
|
</div>
|
|
274
277
|
</footer>
|
package/website/index.html
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
/>
|
|
11
11
|
<meta name="api-base" content="https://api.magpiecloud.com" />
|
|
12
12
|
<meta name="auth-base" content="https://api.magpiecloud.com" />
|
|
13
|
-
<link rel="stylesheet" href="styles.css?v=
|
|
13
|
+
<link rel="stylesheet" href="styles.css?v=6" />
|
|
14
14
|
<script src="env.js"></script>
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|
|
@@ -23,11 +23,10 @@
|
|
|
23
23
|
<span class="tag">Secure cloud sandboxes for the AI age</span>
|
|
24
24
|
</div>
|
|
25
25
|
<nav class="nav-links">
|
|
26
|
-
<a href="#
|
|
27
|
-
<a href="
|
|
28
|
-
<a href="
|
|
29
|
-
<a href="
|
|
30
|
-
<a href="api.html">API Docs</a>
|
|
26
|
+
<a href="#quickstart">Docs</a>
|
|
27
|
+
<a href="api.html">API</a>
|
|
28
|
+
<a href="cookbook.html">Cookbook</a>
|
|
29
|
+
<a href="https://discord.gg/3avpC2nS" target="_blank" rel="noreferrer">Discord</a>
|
|
31
30
|
<a href="login.html" id="nav-auth-link">Login</a>
|
|
32
31
|
</nav>
|
|
33
32
|
<div class="nav-cta">
|
|
@@ -41,22 +40,16 @@
|
|
|
41
40
|
<section class="hero" id="overview">
|
|
42
41
|
<div class="container hero-grid">
|
|
43
42
|
<div class="hero-copy">
|
|
44
|
-
<span class="pill">New: Python SDK</span>
|
|
45
43
|
<h1>Secure sandboxes that boot in milliseconds. Your data stays.</h1>
|
|
46
44
|
<p class="lead">
|
|
47
|
-
Give your AI agents
|
|
48
|
-
completely isolated, boots
|
|
49
|
-
automatically.
|
|
50
|
-
needs to run without risk.
|
|
45
|
+
Give your AI agents an instant home. Every sandbox is
|
|
46
|
+
completely isolated, boots in ~300ms, and syncs your files to the cloud
|
|
47
|
+
automatically. CLI, Python, and Node.js — pick your tool.
|
|
51
48
|
</p>
|
|
52
49
|
<div class="hero-actions">
|
|
53
50
|
<a class="button" href="#quickstart">Quickstart</a>
|
|
54
51
|
<a class="button ghost" href="api.html">API Reference</a>
|
|
55
52
|
</div>
|
|
56
|
-
<div class="hero-meta">
|
|
57
|
-
<span>CLI, Python, and Node.js — pick your tool.</span>
|
|
58
|
-
<span>Sandboxes in ~300ms. Files persist to the cloud between runs.</span>
|
|
59
|
-
</div>
|
|
60
53
|
</div>
|
|
61
54
|
<div class="hero-card tab-group" aria-label="Mags example">
|
|
62
55
|
<div class="tab-bar">
|
|
@@ -513,6 +506,45 @@ await mags.cronCreate({
|
|
|
513
506
|
</div>
|
|
514
507
|
</section>
|
|
515
508
|
|
|
509
|
+
<!-- ── Always-On Servers ──────────────────────────── -->
|
|
510
|
+
<section class="section" id="always-on">
|
|
511
|
+
<div class="container">
|
|
512
|
+
<div class="section-title">
|
|
513
|
+
<p>Always-On Servers</p>
|
|
514
|
+
<h2>Keep your sandboxes running forever.</h2>
|
|
515
|
+
</div>
|
|
516
|
+
<div class="grid split">
|
|
517
|
+
<article class="panel" data-reveal>
|
|
518
|
+
<h3>Never auto-sleep</h3>
|
|
519
|
+
<p>By default, persistent sandboxes auto-sleep after 10 minutes of inactivity to save resources. With the <code>--no-sleep</code> flag, your VM stays running 24/7 — perfect for web servers, workers, and background processes.</p>
|
|
520
|
+
<pre><code># CLI
|
|
521
|
+
mags run -w my-api -p --no-sleep --url --port 3000 'node server.js'
|
|
522
|
+
|
|
523
|
+
# Python
|
|
524
|
+
m.run("node server.js",
|
|
525
|
+
workspace_id="my-api", persistent=True, no_sleep=True)
|
|
526
|
+
|
|
527
|
+
# Node.js
|
|
528
|
+
await mags.run('node server.js', {
|
|
529
|
+
workspaceId: 'my-api', persistent: true, noSleep: true,
|
|
530
|
+
});</code></pre>
|
|
531
|
+
</article>
|
|
532
|
+
<article class="panel" data-reveal>
|
|
533
|
+
<h3>Auto-recovery</h3>
|
|
534
|
+
<p>Always-on sandboxes are automatically monitored. If the host goes down, your VM is re-provisioned on a healthy server within ~60 seconds — no manual intervention needed.</p>
|
|
535
|
+
<h3 style="margin-top:1.2rem">How it works</h3>
|
|
536
|
+
<ul class="list">
|
|
537
|
+
<li>Requires <code>-p</code> (persistent) flag</li>
|
|
538
|
+
<li>VM stays in <code>running</code> state indefinitely</li>
|
|
539
|
+
<li>Combine with <code>--url</code> to expose a public HTTPS endpoint</li>
|
|
540
|
+
<li>Use <code>--startup-command</code> to auto-restart your process if the VM recovers</li>
|
|
541
|
+
<li>Files persist to the cloud via workspace sync</li>
|
|
542
|
+
</ul>
|
|
543
|
+
</article>
|
|
544
|
+
</div>
|
|
545
|
+
</div>
|
|
546
|
+
</section>
|
|
547
|
+
|
|
516
548
|
<!-- ── SDKs + API ──────────────────────────────────── -->
|
|
517
549
|
<section class="section" id="sdk">
|
|
518
550
|
<div class="container">
|
|
@@ -692,6 +724,7 @@ console.log(result.logs);</code></pre>
|
|
|
692
724
|
<a href="api.html">API Reference</a>
|
|
693
725
|
<a href="claude-skill.html">Claude Skill</a>
|
|
694
726
|
<a href="cookbook.html">Cookbook</a>
|
|
727
|
+
<a href="https://discord.gg/3avpC2nS" rel="noreferrer" target="_blank">Discord</a>
|
|
695
728
|
<a href="https://github.com/magpiecloud/mags/issues" rel="noreferrer">Issues</a>
|
|
696
729
|
</div>
|
|
697
730
|
</div>
|
|
@@ -704,8 +737,8 @@ console.log(result.logs);</code></pre>
|
|
|
704
737
|
if (token) {
|
|
705
738
|
var nav = document.getElementById('nav-auth-link');
|
|
706
739
|
var cta = document.getElementById('cta-auth-link');
|
|
707
|
-
if (nav) { nav.textContent = '
|
|
708
|
-
if (cta) { cta.textContent = 'Dashboard'; cta.href = '
|
|
740
|
+
if (nav) { nav.textContent = 'Usage'; nav.href = 'usage.html'; }
|
|
741
|
+
if (cta) { cta.textContent = 'Dashboard'; cta.href = 'usage.html'; }
|
|
709
742
|
}
|
|
710
743
|
})();
|
|
711
744
|
</script>
|
package/website/login.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="utf-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
6
|
<title>Mags Login</title>
|
|
7
|
-
<meta name="description" content="Sign in to Mags with Google
|
|
7
|
+
<meta name="description" content="Sign in to Mags with Google." />
|
|
8
8
|
<meta name="api-base" content="https://api.magpiecloud.com" />
|
|
9
9
|
<meta name="auth-base" content="https://api.magpiecloud.com" />
|
|
10
10
|
<link rel="stylesheet" href="styles.css?v=2" />
|
|
@@ -21,9 +21,10 @@
|
|
|
21
21
|
</div>
|
|
22
22
|
<nav class="nav-links">
|
|
23
23
|
<a href="index.html">Home</a>
|
|
24
|
-
<a href="index.html#quickstart">
|
|
25
|
-
<a href="
|
|
26
|
-
<a href="
|
|
24
|
+
<a href="index.html#quickstart">Docs</a>
|
|
25
|
+
<a href="api.html">API</a>
|
|
26
|
+
<a href="cookbook.html">Cookbook</a>
|
|
27
|
+
<a href="https://discord.gg/3avpC2nS" target="_blank" rel="noreferrer">Discord</a>
|
|
27
28
|
</nav>
|
|
28
29
|
<div class="nav-cta">
|
|
29
30
|
<a class="button ghost" href="index.html">Back to home</a>
|
|
@@ -37,30 +38,10 @@
|
|
|
37
38
|
<div>
|
|
38
39
|
<span class="pill">Login</span>
|
|
39
40
|
<h1 class="auth-title">Sign in to Mags.</h1>
|
|
40
|
-
<p class="auth-subtitle">
|
|
41
|
+
<p class="auth-subtitle">Sign in with your Google account to get started.</p>
|
|
41
42
|
</div>
|
|
42
43
|
|
|
43
44
|
<button class="button full" type="button" data-google-login>Continue with Google</button>
|
|
44
|
-
|
|
45
|
-
<div class="auth-divider"><span>or</span></div>
|
|
46
|
-
|
|
47
|
-
<form class="login-form" data-login-form>
|
|
48
|
-
<div class="form-group">
|
|
49
|
-
<label class="form-label" for="login-email">Email</label>
|
|
50
|
-
<input class="input" type="email" id="login-email" name="email" required />
|
|
51
|
-
</div>
|
|
52
|
-
<div class="form-group">
|
|
53
|
-
<label class="form-label" for="login-password">Password</label>
|
|
54
|
-
<input class="input" type="password" id="login-password" name="password" required />
|
|
55
|
-
</div>
|
|
56
|
-
<button class="button full" type="submit">Sign in</button>
|
|
57
|
-
<p class="form-message" data-login-message></p>
|
|
58
|
-
</form>
|
|
59
|
-
|
|
60
|
-
<div class="form-links">
|
|
61
|
-
<a data-auth-link="/auth/forgot-password" href="#">Forgot password?</a>
|
|
62
|
-
<a data-auth-link="/auth/register" href="#">Create an account</a>
|
|
63
|
-
</div>
|
|
64
45
|
</div>
|
|
65
46
|
</div>
|
|
66
47
|
</main>
|
|
@@ -76,9 +57,9 @@
|
|
|
76
57
|
</div>
|
|
77
58
|
<div class="footer-links">
|
|
78
59
|
<a href="index.html">Home</a>
|
|
79
|
-
<a href="
|
|
80
|
-
<a href="
|
|
81
|
-
<a href="
|
|
60
|
+
<a href="api.html">API</a>
|
|
61
|
+
<a href="cookbook.html">Cookbook</a>
|
|
62
|
+
<a href="https://discord.gg/3avpC2nS" target="_blank" rel="noreferrer">Discord</a>
|
|
82
63
|
</div>
|
|
83
64
|
</div>
|
|
84
65
|
</footer>
|
package/website/tokens.html
CHANGED
|
@@ -24,13 +24,10 @@
|
|
|
24
24
|
</div>
|
|
25
25
|
<nav class="nav-links">
|
|
26
26
|
<a href="index.html">Home</a>
|
|
27
|
-
<a href="index.html#quickstart">Quickstart</a>
|
|
28
|
-
<a href="index.html#cli">CLI</a>
|
|
29
|
-
<a href="index.html#api">API</a>
|
|
30
|
-
<a href="login.html">Login</a>
|
|
31
27
|
<a href="usage.html">Usage</a>
|
|
32
|
-
<a href="
|
|
28
|
+
<a href="api.html">API</a>
|
|
33
29
|
<a href="cookbook.html">Cookbook</a>
|
|
30
|
+
<a href="https://discord.gg/3avpC2nS" target="_blank" rel="noreferrer">Discord</a>
|
|
34
31
|
</nav>
|
|
35
32
|
<div class="nav-cta">
|
|
36
33
|
<a class="button ghost" href="/api-keys">Manage tokens</a>
|
|
@@ -158,10 +155,10 @@ mags whoami</code></pre>
|
|
|
158
155
|
</div>
|
|
159
156
|
<div class="footer-links">
|
|
160
157
|
<a href="index.html">Home</a>
|
|
161
|
-
<a href="login.html">Login</a>
|
|
162
158
|
<a href="usage.html">Usage</a>
|
|
163
|
-
<a href="
|
|
159
|
+
<a href="api.html">API</a>
|
|
164
160
|
<a href="cookbook.html">Cookbook</a>
|
|
161
|
+
<a href="https://discord.gg/3avpC2nS" target="_blank" rel="noreferrer">Discord</a>
|
|
165
162
|
</div>
|
|
166
163
|
</div>
|
|
167
164
|
</footer>
|
package/website/usage.html
CHANGED
|
@@ -24,13 +24,10 @@
|
|
|
24
24
|
</div>
|
|
25
25
|
<nav class="nav-links">
|
|
26
26
|
<a href="index.html">Home</a>
|
|
27
|
-
<a href="index.html#quickstart">Quickstart</a>
|
|
28
|
-
<a href="index.html#cli">CLI</a>
|
|
29
|
-
<a href="index.html#api">API</a>
|
|
30
|
-
<a href="login.html">Login</a>
|
|
31
27
|
<a href="tokens.html">Tokens</a>
|
|
32
|
-
<a href="
|
|
28
|
+
<a href="api.html">API</a>
|
|
33
29
|
<a href="cookbook.html">Cookbook</a>
|
|
30
|
+
<a href="https://discord.gg/3avpC2nS" target="_blank" rel="noreferrer">Discord</a>
|
|
34
31
|
</nav>
|
|
35
32
|
<div class="nav-cta">
|
|
36
33
|
<a class="button ghost" href="/mags">Open console</a>
|
|
@@ -174,10 +171,10 @@ mags cron add --name "backup" \
|
|
|
174
171
|
</div>
|
|
175
172
|
<div class="footer-links">
|
|
176
173
|
<a href="index.html">Home</a>
|
|
177
|
-
<a href="login.html">Login</a>
|
|
178
174
|
<a href="tokens.html">Tokens</a>
|
|
179
|
-
<a href="
|
|
175
|
+
<a href="api.html">API</a>
|
|
180
176
|
<a href="cookbook.html">Cookbook</a>
|
|
177
|
+
<a href="https://discord.gg/3avpC2nS" target="_blank" rel="noreferrer">Discord</a>
|
|
181
178
|
</div>
|
|
182
179
|
</div>
|
|
183
180
|
</footer>
|