fluncle 0.207.0 → 0.209.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.
Files changed (2) hide show
  1. package/bin/fluncle.mjs +21 -9
  2. package/package.json +1 -1
package/bin/fluncle.mjs CHANGED
@@ -610,7 +610,7 @@ function parseVersion(version) {
610
610
  var currentVersion;
611
611
  var init_version = __esm(() => {
612
612
  init_output();
613
- currentVersion = "0.207.0".trim() ? "0.207.0".trim() : "0.1.0";
613
+ currentVersion = "0.209.0".trim() ? "0.209.0".trim() : "0.1.0";
614
614
  });
615
615
 
616
616
  // src/update-notifier.ts
@@ -2452,7 +2452,7 @@ function parseVersion2(version) {
2452
2452
  var currentVersion2, latestReleaseUrl = "https://api.github.com/repos/mauricekleine/fluncle/releases/latest";
2453
2453
  var init_version2 = __esm(() => {
2454
2454
  init_output();
2455
- currentVersion2 = "0.207.0".trim() ? "0.207.0".trim() : "0.1.0";
2455
+ currentVersion2 = "0.209.0".trim() ? "0.209.0".trim() : "0.1.0";
2456
2456
  });
2457
2457
 
2458
2458
  // ../../packages/registry/src/index.ts
@@ -2677,6 +2677,20 @@ var init_src = __esm(() => {
2677
2677
  url: `${SITE}/galaxies`,
2678
2678
  weights: { ssh: "secondary", web: "secondary" }
2679
2679
  },
2680
+ {
2681
+ discoveryUrl: `${SITE}/llms.txt`,
2682
+ exposedContent: [
2683
+ "/identity — look a recording up by ISRC, MusicBrainz recording id, or Log ID",
2684
+ "/identity/:key — one recording's identifiers and platform links, each carrying whether Fluncle found it, looked and found nothing, will not look, or hands out no such link"
2685
+ ],
2686
+ kind: "web_route",
2687
+ name: "web.identity",
2688
+ operatorNotes: "The public face of the identity envelope (lib/server/identity-envelope.ts); the machine twin is `get_track`'s identity projection (?identity= / ?isrc= / ?mbid=), and both read the same module so page and API cannot diverge — except on Apple Music, the one audience-scoped field: the page reads `first-party` and renders an Apple link as /log does, the API answers `unsupported` because Apple's terms bar passing those links on. The DOOR is probeable (always 200, and a bare GET with no ?key= renders the explainer); the keyed page is not, and it renders `noindex, follow` on purpose — one recording is reachable under up to three identifiers, so indexing them would put three near-identical URLs in front of one answer at catalogue scale. Only the door is in the sitemap. Both the page's server fn and the op charge the SAME two dials (identity-dials.ts: 30/min + 1,000/day per caller), so the meter cannot be dodged by switching doors; a spent dial renders as a calm page state, never a fault. The keyed page answers 200 with an honest 'nothing under this identifier' rather than 404ing, because an unknown key is a real question with a real answer.",
2689
+ probeConfig: { cadenceMs: PROBE_CADENCE_MS, kind: "http", timeoutMs: PROBE_TIMEOUT_MS },
2690
+ route: "/identity",
2691
+ url: `${SITE}/identity`,
2692
+ weights: { web: "tertiary" }
2693
+ },
2680
2694
  {
2681
2695
  exposedContent: [
2682
2696
  "the signed-in account door: a listener's Galaxy progress, the findings and sets they saved, the tracks they submitted, and their account settings"
@@ -10831,6 +10845,7 @@ async function runBackfillDiscogs(options, backfillDiscogsCommand2) {
10831
10845
  let cursor;
10832
10846
  let dryRun = options.dryRun;
10833
10847
  let throttled = false;
10848
+ let rateLimitedBy = null;
10834
10849
  while (resolved.length + unresolved.length < limit) {
10835
10850
  const remaining = limit - (resolved.length + unresolved.length);
10836
10851
  const result = await backfillDiscogsCommand2(remaining, options.dryRun, cursor);
@@ -10844,6 +10859,7 @@ async function runBackfillDiscogs(options, backfillDiscogsCommand2) {
10844
10859
  }
10845
10860
  if (result.rateLimited) {
10846
10861
  throttled = true;
10862
+ rateLimitedBy = result.rateLimitedBy;
10847
10863
  break;
10848
10864
  }
10849
10865
  if (result.nextCursor === null) {
@@ -10856,6 +10872,7 @@ async function runBackfillDiscogs(options, backfillDiscogsCommand2) {
10856
10872
  dryRun,
10857
10873
  ok: true,
10858
10874
  rateLimited: throttled,
10875
+ rateLimitedBy,
10859
10876
  resolved,
10860
10877
  resolvedCount: resolved.length,
10861
10878
  skipped,
@@ -11254,20 +11271,15 @@ async function runBackfillLabelImages(options, backfillLabelImagesCommand2) {
11254
11271
  cursor = result.nextCursor;
11255
11272
  }
11256
11273
  if (options.json) {
11257
- printJson({
11274
+ printSweepJson({
11258
11275
  dryRun,
11259
11276
  failed,
11260
- failedCount: failed.length,
11261
11277
  none,
11262
11278
  noneCount: none.length,
11263
- ok: true,
11264
11279
  rateLimited: throttled,
11265
11280
  resolved,
11266
11281
  resolvedCount: resolved.length
11267
- });
11268
- if (failed.length > 0) {
11269
- process.exitCode = 1;
11270
- }
11282
+ }, failed.length);
11271
11283
  return;
11272
11284
  }
11273
11285
  const verb = dryRun ? "Would resolve" : "Resolved";
package/package.json CHANGED
@@ -31,5 +31,5 @@
31
31
  "url": "git+https://github.com/mauricekleine/fluncle.git"
32
32
  },
33
33
  "type": "module",
34
- "version": "0.207.0"
34
+ "version": "0.209.0"
35
35
  }