fluncle 0.199.0 → 0.201.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/bin/fluncle.mjs +40 -25
- package/package.json +1 -1
package/bin/fluncle.mjs
CHANGED
|
@@ -561,7 +561,7 @@ function parseVersion(version) {
|
|
|
561
561
|
var currentVersion;
|
|
562
562
|
var init_version = __esm(() => {
|
|
563
563
|
init_output();
|
|
564
|
-
currentVersion = "0.
|
|
564
|
+
currentVersion = "0.201.0".trim() ? "0.201.0".trim() : "0.1.0";
|
|
565
565
|
});
|
|
566
566
|
|
|
567
567
|
// src/update-notifier.ts
|
|
@@ -797,7 +797,7 @@ var init_env = __esm(() => {
|
|
|
797
797
|
});
|
|
798
798
|
|
|
799
799
|
// src/user-token.ts
|
|
800
|
-
import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
800
|
+
import { chmodSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
801
801
|
import { homedir as homedir3 } from "node:os";
|
|
802
802
|
import { dirname as dirname2, join as join3 } from "node:path";
|
|
803
803
|
function activeProfile() {
|
|
@@ -824,9 +824,14 @@ function readUserToken() {
|
|
|
824
824
|
}
|
|
825
825
|
function writeUserToken(value) {
|
|
826
826
|
const path2 = userTokenPath();
|
|
827
|
-
|
|
827
|
+
const dir = dirname2(path2);
|
|
828
|
+
mkdirSync(dir, { mode: 448, recursive: true });
|
|
829
|
+
try {
|
|
830
|
+
chmodSync(dir, 448);
|
|
831
|
+
} catch {}
|
|
828
832
|
writeFileSync(path2, `${JSON.stringify(value, null, 2)}
|
|
829
833
|
`, { mode: 384 });
|
|
834
|
+
chmodSync(path2, 384);
|
|
830
835
|
}
|
|
831
836
|
function clearUserToken() {
|
|
832
837
|
const path2 = userTokenPath();
|
|
@@ -1395,10 +1400,12 @@ async function resyncYoutube(mixtapeId) {
|
|
|
1395
1400
|
}
|
|
1396
1401
|
async function authYoutubeCommand() {
|
|
1397
1402
|
const response = await adminApiGet("/api/v1/admin/youtube/auth/start");
|
|
1398
|
-
console.log(`Open this
|
|
1403
|
+
console.log(`Open this link in the browser you're logged into /admin with:
|
|
1399
1404
|
|
|
1400
1405
|
${response.authUrl}
|
|
1401
1406
|
|
|
1407
|
+
It hands you off to Google. Signed out? Log in there and it resumes on its own.
|
|
1408
|
+
The link is good for 10 minutes; run this again if it expires.
|
|
1402
1409
|
After approving access, Google returns to the Fluncle admin callback and stores the refresh token server-side.`);
|
|
1403
1410
|
}
|
|
1404
1411
|
async function initiate(mixtapeId, contentLength, contentType) {
|
|
@@ -1566,10 +1573,12 @@ async function resyncMixcloud(mixtapeId) {
|
|
|
1566
1573
|
}
|
|
1567
1574
|
async function authMixcloudCommand() {
|
|
1568
1575
|
const response = await adminApiGet("/api/v1/admin/mixcloud/auth/start");
|
|
1569
|
-
console.log(`Open this
|
|
1576
|
+
console.log(`Open this link in the browser you're logged into /admin with:
|
|
1570
1577
|
|
|
1571
1578
|
${response.authUrl}
|
|
1572
1579
|
|
|
1580
|
+
It hands you off to Mixcloud. Signed out? Log in there and it resumes on its own.
|
|
1581
|
+
The link is good for 10 minutes; run this again if it expires.
|
|
1573
1582
|
After approving access, Mixcloud returns to the Fluncle admin callback and stores the access token server-side.`);
|
|
1574
1583
|
}
|
|
1575
1584
|
function mixtapeDescription(note, logId) {
|
|
@@ -2443,7 +2452,7 @@ function parseVersion2(version) {
|
|
|
2443
2452
|
var currentVersion2, latestReleaseUrl = "https://api.github.com/repos/mauricekleine/fluncle/releases/latest";
|
|
2444
2453
|
var init_version2 = __esm(() => {
|
|
2445
2454
|
init_output();
|
|
2446
|
-
currentVersion2 = "0.
|
|
2455
|
+
currentVersion2 = "0.201.0".trim() ? "0.201.0".trim() : "0.1.0";
|
|
2447
2456
|
});
|
|
2448
2457
|
|
|
2449
2458
|
// ../../packages/registry/src/index.ts
|
|
@@ -2512,18 +2521,6 @@ var init_src = __esm(() => {
|
|
|
2512
2521
|
url: `${SITE}/mix`,
|
|
2513
2522
|
weights: { web: "secondary" }
|
|
2514
2523
|
},
|
|
2515
|
-
{
|
|
2516
|
-
exposedContent: [
|
|
2517
|
-
"the feed-first Stories surface — full-bleed findings",
|
|
2518
|
-
"/stories/:logId — one finding as a Story"
|
|
2519
|
-
],
|
|
2520
|
-
kind: "web_route",
|
|
2521
|
-
name: "web.stories",
|
|
2522
|
-
probeConfig: { cadenceMs: PROBE_CADENCE_MS, kind: "http", timeoutMs: PROBE_TIMEOUT_MS },
|
|
2523
|
-
route: "/stories",
|
|
2524
|
-
url: `${SITE}/stories`,
|
|
2525
|
-
weights: { web: "secondary" }
|
|
2526
|
-
},
|
|
2527
2524
|
{
|
|
2528
2525
|
exposedContent: ["who Fluncle is, what the Galaxy is, how to read a Log ID"],
|
|
2529
2526
|
kind: "web_route",
|
|
@@ -3108,7 +3105,7 @@ var init_src = __esm(() => {
|
|
|
3108
3105
|
exposedContent: ["the XML sitemap index of every public page"],
|
|
3109
3106
|
kind: "discovery",
|
|
3110
3107
|
name: "discovery.sitemap",
|
|
3111
|
-
operatorNotes: "A sitemap INDEX, not a flat urlset: the URLs live in children at /sitemap/<kind>-<n>.xml, ONE CHILD PER ENTITY TYPE (pages/findings/artists/labels/albums/galaxies/logbook), each auto-paged under Google's 50,000-URL ceiling so a breach cannot happen rather than merely not having happened yet. robots.txt still names this one URL — a crawler discovers the children from here. Splitting per entity type is also the diagnostic: Search Console reports coverage PER sitemap, so each entity type gets its own submitted/indexed count.",
|
|
3108
|
+
operatorNotes: "A sitemap INDEX, not a flat urlset: the URLs live in children at /sitemap/<kind>-<n>.xml, ONE CHILD PER ENTITY TYPE (pages/findings/artists/labels/albums/galaxies/logbook/docs), each auto-paged under Google's 50,000-URL ceiling so a breach cannot happen rather than merely not having happened yet. robots.txt still names this one URL — a crawler discovers the children from here. Splitting per entity type is also the diagnostic: Search Console reports coverage PER sitemap, so each entity type gets its own submitted/indexed count.",
|
|
3112
3109
|
probeConfig: { cadenceMs: PROBE_CADENCE_MS, kind: "http", timeoutMs: PROBE_TIMEOUT_MS },
|
|
3113
3110
|
route: "/sitemap.xml",
|
|
3114
3111
|
url: `${SITE}/sitemap.xml`,
|
|
@@ -3117,7 +3114,7 @@ var init_src = __esm(() => {
|
|
|
3117
3114
|
{
|
|
3118
3115
|
apiFormat: "application/xml",
|
|
3119
3116
|
exposedContent: [
|
|
3120
|
-
"one child sitemap, per entity type: the pages / findings / artists / labels / albums / galaxies / logbook URLs, auto-paged"
|
|
3117
|
+
"one child sitemap, per entity type: the pages / findings / artists / labels / albums / galaxies / logbook / docs URLs, auto-paged"
|
|
3121
3118
|
],
|
|
3122
3119
|
kind: "discovery",
|
|
3123
3120
|
name: "discovery.sitemap-shard",
|
|
@@ -3148,6 +3145,16 @@ var init_src = __esm(() => {
|
|
|
3148
3145
|
url: `${SITE}/llms.txt`,
|
|
3149
3146
|
weights: { web: "primary" }
|
|
3150
3147
|
},
|
|
3148
|
+
{
|
|
3149
|
+
apiFormat: "text/markdown",
|
|
3150
|
+
exposedContent: ["one developer-doc page as clean Markdown, at `/docs.md/<slug>`"],
|
|
3151
|
+
kind: "discovery",
|
|
3152
|
+
name: "discovery.docs-markdown",
|
|
3153
|
+
operatorNotes: 'The Markdown twin of every /docs page — front-matter-free, the title as the H1, the description as the lede, then the precompiled body (`includeProcessedMarkdown` in source.config.ts → `page.data.getText("processed")`). It is the endpoint behind the page-actions affordance ("View as Markdown", "Copy page", and the Open in ChatGPT/Claude/Cursor links, which carry this URL so the assistant pulls the clean Markdown), and each /docs page advertises it as `<link rel="alternate" type="text/markdown">` (routes/-docs-head.ts). A machine-FETCHED document rather than a page, so it is catalogued as `discovery` next to llms.txt. No probeConfig: the route is slug-parameterized, so there is no fixed URL to GET-probe (the `discovery.oembed` / `web.artist` precedent) — the post-deploy probe skips it for the same reason it skips /artist/:slug/fresh.xml. Source: apps/web/src/routes/docs[.]md.$.ts (a pure splat, mounted at /docs.md/$).',
|
|
3154
|
+
route: "/docs.md/:slug",
|
|
3155
|
+
url: `${SITE}/docs.md/cli`,
|
|
3156
|
+
weights: { web: "tertiary" }
|
|
3157
|
+
},
|
|
3151
3158
|
{
|
|
3152
3159
|
apiFormat: "text/markdown",
|
|
3153
3160
|
exposedContent: ["the entire archive in one ingestible markdown document, every finding"],
|
|
@@ -5049,10 +5056,12 @@ async function resyncYoutube2(mixtapeId) {
|
|
|
5049
5056
|
}
|
|
5050
5057
|
async function authYoutubeCommand2() {
|
|
5051
5058
|
const response = await adminApiGet("/api/v1/admin/youtube/auth/start");
|
|
5052
|
-
console.log(`Open this
|
|
5059
|
+
console.log(`Open this link in the browser you're logged into /admin with:
|
|
5053
5060
|
|
|
5054
5061
|
${response.authUrl}
|
|
5055
5062
|
|
|
5063
|
+
It hands you off to Google. Signed out? Log in there and it resumes on its own.
|
|
5064
|
+
The link is good for 10 minutes; run this again if it expires.
|
|
5056
5065
|
After approving access, Google returns to the Fluncle admin callback and stores the refresh token server-side.`);
|
|
5057
5066
|
}
|
|
5058
5067
|
async function initiate2(mixtapeId, contentLength, contentType) {
|
|
@@ -6389,11 +6398,13 @@ __export(exports_auth, {
|
|
|
6389
6398
|
});
|
|
6390
6399
|
async function authSpotifyCommand() {
|
|
6391
6400
|
const response = await adminApiGet("/api/v1/admin/spotify/auth/start");
|
|
6392
|
-
console.log(`Open this
|
|
6401
|
+
console.log(`Open this link in the browser you're logged into /admin with:
|
|
6393
6402
|
|
|
6394
6403
|
${response.authUrl}
|
|
6395
6404
|
|
|
6396
|
-
|
|
6405
|
+
It hands you off to Spotify. Signed out? Log in there and it resumes on its own.
|
|
6406
|
+
The link is good for 10 minutes; run this again if it expires.
|
|
6407
|
+
After approving access, Spotify returns to the Fluncle admin callback and stores auth server-side.`);
|
|
6397
6408
|
}
|
|
6398
6409
|
var init_auth = __esm(() => {
|
|
6399
6410
|
init_api();
|
|
@@ -6470,10 +6481,12 @@ async function resyncMixcloud2(mixtapeId) {
|
|
|
6470
6481
|
}
|
|
6471
6482
|
async function authMixcloudCommand2() {
|
|
6472
6483
|
const response = await adminApiGet("/api/v1/admin/mixcloud/auth/start");
|
|
6473
|
-
console.log(`Open this
|
|
6484
|
+
console.log(`Open this link in the browser you're logged into /admin with:
|
|
6474
6485
|
|
|
6475
6486
|
${response.authUrl}
|
|
6476
6487
|
|
|
6488
|
+
It hands you off to Mixcloud. Signed out? Log in there and it resumes on its own.
|
|
6489
|
+
The link is good for 10 minutes; run this again if it expires.
|
|
6477
6490
|
After approving access, Mixcloud returns to the Fluncle admin callback and stores the access token server-side.`);
|
|
6478
6491
|
}
|
|
6479
6492
|
function mixtapeDescription2(note, logId) {
|
|
@@ -6549,10 +6562,12 @@ __export(exports_auth_tiktok, {
|
|
|
6549
6562
|
});
|
|
6550
6563
|
async function authTikTokCommand() {
|
|
6551
6564
|
const response = await adminApiGet("/api/v1/admin/tiktok/auth/start");
|
|
6552
|
-
console.log(`Open this
|
|
6565
|
+
console.log(`Open this link in the browser you're logged into /admin with:
|
|
6553
6566
|
|
|
6554
6567
|
${response.authUrl}
|
|
6555
6568
|
|
|
6569
|
+
It hands you off to TikTok. Signed out? Log in there and it resumes on its own.
|
|
6570
|
+
The link is good for 10 minutes; run this again if it expires.
|
|
6556
6571
|
After approving access, TikTok returns to the Fluncle admin callback and stores the refresh token server-side.`);
|
|
6557
6572
|
}
|
|
6558
6573
|
var init_auth_tiktok = __esm(() => {
|
package/package.json
CHANGED