tokentracker-cli 0.84.7 → 0.84.8

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 (92) hide show
  1. package/dashboard/dist/assets/{AchievementBadge-DAPsTMsx.js → AchievementBadge-DAAenS6A.js} +1 -1
  2. package/dashboard/dist/assets/{AchievementsPage-B9oXfXvm.js → AchievementsPage-DJ9GMKxL.js} +2 -2
  3. package/dashboard/dist/assets/{AchievementsSection-DI_LTZb3.js → AchievementsSection-DtpLrh2Q.js} +1 -1
  4. package/dashboard/dist/assets/{BadgeDetailModal--WCrJWVa.js → BadgeDetailModal-CkE1DwdN.js} +1 -1
  5. package/dashboard/dist/assets/{Card-BzbSN3EC.js → Card-Cs2vVMHG.js} +1 -1
  6. package/dashboard/dist/assets/{ClawdAnimated-Dgxae1At.js → ClawdAnimated-BCSNeob2.js} +1 -1
  7. package/dashboard/dist/assets/{CommandPalette-BiZBYV5A.js → CommandPalette-CFDTjp76.js} +1 -1
  8. package/dashboard/dist/assets/{CommunityStatsModal-C6jZx10_.js → CommunityStatsModal-D2oJpI9i.js} +1 -1
  9. package/dashboard/dist/assets/{ConfirmModal-lD-mHMvO.js → ConfirmModal-D0a_xdwF.js} +1 -1
  10. package/dashboard/dist/assets/{DashboardPage-DCPNoiRG.js → DashboardPage-CMCqvpkA.js} +1 -1
  11. package/dashboard/dist/assets/{DevicePage-DiF2IOjJ.js → DevicePage-c9Fk13gJ.js} +1 -1
  12. package/dashboard/dist/assets/{DialogClose-Crx2EFnI.js → DialogClose-jsfDvF2n.js} +1 -1
  13. package/dashboard/dist/assets/DialogDescription-Dwxj5h5w.js +1 -0
  14. package/dashboard/dist/assets/{DialogTitle-amHXttsp.js → DialogTitle-Dt835L7T.js} +1 -1
  15. package/dashboard/dist/assets/{FadeIn-CIhF_9PP.js → FadeIn-DJssGrj8.js} +1 -1
  16. package/dashboard/dist/assets/{HeaderGithubStar-D6Ph2GuY.js → HeaderGithubStar-B9MwwA-P.js} +1 -1
  17. package/dashboard/dist/assets/{HoverTooltip-BS8eO6tj.js → HoverTooltip-DPLMJkai.js} +1 -1
  18. package/dashboard/dist/assets/{IpCheckPage-Cz1Je6WS.js → IpCheckPage-BXKjxEHe.js} +1 -1
  19. package/dashboard/dist/assets/{LandingPage-DqeXJfwn.js → LandingPage-BJNMQTec.js} +2 -2
  20. package/dashboard/dist/assets/{LeaderboardAvatar-D09yLoVA.js → LeaderboardAvatar-BNwbnOa3.js} +1 -1
  21. package/dashboard/dist/assets/{LeaderboardPage-BetpFetS.js → LeaderboardPage-BOxejyMy.js} +2 -2
  22. package/dashboard/dist/assets/{LeaderboardProfileModal-UW3KnANZ.js → LeaderboardProfileModal-BEqUZCOD.js} +3 -3
  23. package/dashboard/dist/assets/{LeaderboardProfilePage-Chd_2AVY.js → LeaderboardProfilePage-CUDV5iyh.js} +1 -1
  24. package/dashboard/dist/assets/{LimitsPage-uhpNteXJ.js → LimitsPage-ejlJN1vi.js} +1 -1
  25. package/dashboard/dist/assets/{LocalOnlyNotice-CpFFX8ro.js → LocalOnlyNotice-B3BSeCHd.js} +1 -1
  26. package/dashboard/dist/assets/{LoginCard-DkZpGnVu.js → LoginCard-2mAb696j.js} +1 -1
  27. package/dashboard/dist/assets/{LoginModal-CALv6jkD.js → LoginModal-cacKhc6U.js} +1 -1
  28. package/dashboard/dist/assets/{LoginPage-BZuXHYAT.js → LoginPage-rnBlie8p.js} +1 -1
  29. package/dashboard/dist/assets/{PetPage-C1LuDyYr.js → PetPage-D3DhuS6O.js} +1 -1
  30. package/dashboard/dist/assets/{PopoverPopup-CluVhrMr.js → PopoverPopup-CxATX7M9.js} +1 -1
  31. package/dashboard/dist/assets/{ProviderIcon-D3YKjVKb.js → ProviderIcon-B5b9LkmM.js} +1 -1
  32. package/dashboard/dist/assets/{ResetPasswordPage-CzN50nX5.js → ResetPasswordPage-BGKmQ_JW.js} +1 -1
  33. package/dashboard/dist/assets/{SegmentedControl-DFOAcEKU.js → SegmentedControl-BMeYCm2b.js} +1 -1
  34. package/dashboard/dist/assets/{Select-B3W_ihs_.js → Select-CYHXq8im.js} +1 -1
  35. package/dashboard/dist/assets/{SelectItemText-FXRtXnFV.js → SelectItemText-DvI4i06h.js} +1 -1
  36. package/dashboard/dist/assets/{ServiceStatusPage-BItZqH7q.js → ServiceStatusPage-dv26-VvI.js} +1 -1
  37. package/dashboard/dist/assets/{SessionsPage-DVQU-hTH.js → SessionsPage-DBQruqkO.js} +1 -1
  38. package/dashboard/dist/assets/{SettingsPage-ByvrwOi6.js → SettingsPage-BWRbQ3Iq.js} +1 -1
  39. package/dashboard/dist/assets/{SkillsPage-DrGr5Qij.js → SkillsPage-BonhKgAt.js} +1 -1
  40. package/dashboard/dist/assets/{TokenGalaxy-ClF_n9od.js → TokenGalaxy-BBUD1kpU.js} +1 -1
  41. package/dashboard/dist/assets/{ToolbarRootContext-B82hGhAf.js → ToolbarRootContext-DPMm8uYz.js} +1 -1
  42. package/dashboard/dist/assets/{TrendMonitor-DkWm7_1z.js → TrendMonitor-CZVE6gID.js} +1 -1
  43. package/dashboard/dist/assets/{WidgetsPage-DCY4pyR2.js → WidgetsPage-Bz9cieeZ.js} +1 -1
  44. package/dashboard/dist/assets/{WrappedPage-yGQ4DLqj.js → WrappedPage-CruMolZd.js} +1 -1
  45. package/dashboard/dist/assets/{__vite-browser-external-BdRrPLk6.js → __vite-browser-external-C3VH6nS4.js} +2 -2
  46. package/dashboard/dist/assets/{agent-logos-D5SHGOxB.js → agent-logos-HIeYwIqN.js} +1 -1
  47. package/dashboard/dist/assets/{arrow-up-right-CbMcAcss.js → arrow-up-right-n7Bi4Tvd.js} +1 -1
  48. package/dashboard/dist/assets/{check-Dyzh7lTz.js → check-C5Q44G5k.js} +1 -1
  49. package/dashboard/dist/assets/{chevron-right-DT06ZIKC.js → chevron-right-BsnptUU0.js} +1 -1
  50. package/dashboard/dist/assets/{copy-B3Kt3Wrf.js → copy-BGuL9uFa.js} +1 -1
  51. package/dashboard/dist/assets/{download-B3rOytqI.js → download-BljgPwR2.js} +1 -1
  52. package/dashboard/dist/assets/{external-link-BamTP0Ks.js → external-link-B4Oz8hUe.js} +1 -1
  53. package/dashboard/dist/assets/{flame-msy2h1ms.js → flame-ChLG_NZE.js} +1 -1
  54. package/dashboard/dist/assets/{format-tokens-8b1OUM_8.js → format-tokens-DjuNk13Z.js} +1 -1
  55. package/dashboard/dist/assets/{icons-C2NR2_Tf.js → icons-CkO42M-u.js} +1 -1
  56. package/dashboard/dist/assets/{index-x3vFJQFt.js → index-CEsvYBWY.js} +1 -1
  57. package/dashboard/dist/assets/{index-CvTfpiCF.js → index-CGxawuWx.js} +1 -1
  58. package/dashboard/dist/assets/{index-C8sDJzUY.js → index-D87oE_rV.js} +1 -1
  59. package/dashboard/dist/assets/{info-C9j23aGq.js → info-et8xtJ4v.js} +1 -1
  60. package/dashboard/dist/assets/{limits-providers-ySB9Ci5l.js → limits-providers-vO_86yRy.js} +1 -1
  61. package/dashboard/dist/assets/{link-2-rrcyTT6S.js → link-2-Dge2rBkr.js} +1 -1
  62. package/dashboard/dist/assets/{loader-circle-x9x9I8Hv.js → loader-circle-Cs3wpqJe.js} +1 -1
  63. package/dashboard/dist/assets/{maximize-2-7TWFb2k7.js → maximize-2-zn71uZX3.js} +1 -1
  64. package/dashboard/dist/assets/{provider-display-JbSwpvxU.js → provider-display-CTt6mzLe.js} +1 -1
  65. package/dashboard/dist/assets/{react-DK5clHtY.js → react-BbHDQe6Q.js} +1 -1
  66. package/dashboard/dist/assets/{search-DukXRvEV.js → search-3CMhatWb.js} +1 -1
  67. package/dashboard/dist/assets/{skills-api-BUFJuwiR.js → skills-api-Cm1aiqWL.js} +1 -1
  68. package/dashboard/dist/assets/{store-BTh7bv09.js → store-DclXV77t.js} +1 -1
  69. package/dashboard/dist/assets/{terminal-CcUqLtn1.js → terminal-BC7uFcA7.js} +1 -1
  70. package/dashboard/dist/assets/{trash-2-Bq7hnvNq.js → trash-2-BT8V531F.js} +1 -1
  71. package/dashboard/dist/assets/{use-community-stats-qTpx6ugG.js → use-community-stats-DJr59SGu.js} +1 -1
  72. package/dashboard/dist/assets/{use-limits-display-prefs-Di_J4eVv.js → use-limits-display-prefs-DU8OOFVb.js} +1 -1
  73. package/dashboard/dist/assets/{use-native-settings-CIqpv9Z3.js → use-native-settings-BvSwI4BL.js} +1 -1
  74. package/dashboard/dist/assets/{use-ordered-list-OwogSXT7.js → use-ordered-list-Cq5AyV2x.js} +1 -1
  75. package/dashboard/dist/assets/use-reduced-motion-D1_q3aRK.js +1 -0
  76. package/dashboard/dist/assets/{use-session-efficiency-pref-CjAvMh7u.js → use-session-efficiency-pref-WS8NhXuW.js} +1 -1
  77. package/dashboard/dist/assets/{use-transform-KZLdt-NZ.js → use-transform-CLYsi8xc.js} +1 -1
  78. package/dashboard/dist/assets/{use-usage-limits-Tbifa037.js → use-usage-limits-CGoQQDG-.js} +1 -1
  79. package/dashboard/dist/assets/{useCurrency-D2td-bkn.js → useCurrency-D0GtEoJD.js} +1 -1
  80. package/dashboard/dist/assets/{useScrollLock-Cvyfyezc.js → useScrollLock-TIUBSeIM.js} +1 -1
  81. package/dashboard/dist/assets/{useTokenFormat-DYIUS6IH.js → useTokenFormat-B0TBL9La.js} +1 -1
  82. package/dashboard/dist/assets/{zap-B19mEed5.js → zap-D89769CL.js} +1 -1
  83. package/dashboard/dist/index.html +1 -1
  84. package/dashboard/dist/ip-check.html +1 -1
  85. package/dashboard/dist/leaderboard.html +1 -1
  86. package/dashboard/dist/share.html +1 -1
  87. package/package.json +1 -1
  88. package/src/lib/pricing/seed-snapshot.json +1 -1
  89. package/src/lib/qoder-limits.js +2 -205
  90. package/src/lib/usage-limits.js +0 -1
  91. package/dashboard/dist/assets/DialogDescription-CHsHo924.js +0 -1
  92. package/dashboard/dist/assets/use-reduced-motion-5QGGPoom.js +0 -1
@@ -1,16 +1,10 @@
1
1
  "use strict";
2
2
 
3
- const cp = require("node:child_process");
4
3
  const crypto = require("node:crypto");
5
4
  const fs = require("node:fs");
6
5
  const net = require("node:net");
7
6
  const os = require("node:os");
8
7
  const path = require("node:path");
9
- const { promisify } = require("node:util");
10
-
11
- const { readSqliteJsonRowsAsync } = require("./sqlite-reader");
12
-
13
- const execFileAsync = promisify(cp.execFile);
14
8
 
15
9
  const QODER_SITES = {
16
10
  international: {
@@ -50,53 +44,6 @@ MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA8iMH5c02LilrsERw9t6Pv5Nc
50
44
  XcW+ML9FoCI6AOvOzwIDAQAB
51
45
  -----END PUBLIC KEY-----`;
52
46
 
53
- const MACOS_CHROMIUM_BROWSERS = [
54
- {
55
- name: "Google Chrome",
56
- root: ["Library", "Application Support", "Google", "Chrome"],
57
- service: "Chrome Safe Storage",
58
- account: "Chrome",
59
- },
60
- {
61
- name: "Brave",
62
- root: ["Library", "Application Support", "BraveSoftware", "Brave-Browser"],
63
- service: "Brave Safe Storage",
64
- account: "Brave",
65
- },
66
- {
67
- name: "Microsoft Edge",
68
- root: ["Library", "Application Support", "Microsoft Edge"],
69
- service: "Microsoft Edge Safe Storage",
70
- account: "Microsoft Edge",
71
- },
72
- {
73
- name: "Arc",
74
- root: ["Library", "Application Support", "Arc", "User Data"],
75
- service: "Arc Safe Storage",
76
- account: "Arc",
77
- },
78
- {
79
- name: "Chromium",
80
- root: ["Library", "Application Support", "Chromium"],
81
- service: "Chromium Safe Storage",
82
- account: "Chromium",
83
- },
84
- ];
85
-
86
- const CHROMIUM_COOKIE_SQL = `
87
- SELECT
88
- host_key,
89
- name,
90
- value,
91
- hex(encrypted_value) AS encrypted_hex
92
- FROM cookies
93
- WHERE lower(host_key) IN (
94
- '.qoder.com', 'qoder.com', 'www.qoder.com',
95
- '.qoder.com.cn', 'qoder.com.cn', 'www.qoder.com.cn'
96
- )
97
- ORDER BY host_key, name
98
- `;
99
-
100
47
  function finiteNumber(value, field) {
101
48
  const number = Number(value);
102
49
  if (!Number.isFinite(number)) {
@@ -550,147 +497,6 @@ async function fetchQoderActivity(authStatus, fetchImpl = fetch, options = {}) {
550
497
  return normalizeQoderActivityResponse(await response.json(), options);
551
498
  }
552
499
 
553
- function normalizeCookieDomain(hostKey) {
554
- return String(hostKey || "").trim().toLowerCase().replace(/^\./, "");
555
- }
556
-
557
- function decryptChromiumCookie({ encryptedHex, plaintextValue, hostKey, password }) {
558
- if (typeof plaintextValue === "string" && plaintextValue) return plaintextValue;
559
- if (!encryptedHex || !password) return null;
560
- let encrypted;
561
- try {
562
- encrypted = Buffer.from(encryptedHex, "hex");
563
- } catch (_error) {
564
- return null;
565
- }
566
- if (encrypted.length <= 3) return null;
567
- const version = encrypted.subarray(0, 3).toString("ascii");
568
- if (version !== "v10" && version !== "v11") return null;
569
-
570
- try {
571
- const key = crypto.pbkdf2Sync(password, "saltysalt", 1003, 16, "sha1");
572
- const decipher = crypto.createDecipheriv(
573
- "aes-128-cbc",
574
- key,
575
- Buffer.alloc(16, 0x20),
576
- );
577
- let decrypted = Buffer.concat([
578
- decipher.update(encrypted.subarray(3)),
579
- decipher.final(),
580
- ]);
581
- const hostDigest = crypto.createHash("sha256").update(String(hostKey || "")).digest();
582
- if (decrypted.length >= hostDigest.length && decrypted.subarray(0, 32).equals(hostDigest)) {
583
- decrypted = decrypted.subarray(32);
584
- }
585
- const value = decrypted.toString("utf8");
586
- return value || null;
587
- } catch (_error) {
588
- return null;
589
- }
590
- }
591
-
592
- async function readMacosSafeStoragePassword({
593
- service,
594
- account,
595
- securityRunner,
596
- } = {}) {
597
- const runner = securityRunner || (async (args) => {
598
- const result = await execFileAsync("/usr/bin/security", args, {
599
- timeout: 5000,
600
- maxBuffer: 1024 * 1024,
601
- });
602
- return result.stdout;
603
- });
604
- try {
605
- const output = await runner([
606
- "find-generic-password",
607
- "-w",
608
- "-s",
609
- service,
610
- "-a",
611
- account,
612
- ]);
613
- const password = String(output || "").trim();
614
- return password || null;
615
- } catch (_error) {
616
- return null;
617
- }
618
- }
619
-
620
- function chromiumProfileDirs(browserRoot) {
621
- if (!fs.existsSync(browserRoot)) return [];
622
- let entries = [];
623
- try {
624
- entries = fs.readdirSync(browserRoot, { withFileTypes: true });
625
- } catch (_error) {
626
- return [];
627
- }
628
- return entries
629
- .filter((entry) => entry.isDirectory() && (entry.name === "Default" || /^Profile \d+$/.test(entry.name)))
630
- .map((entry) => path.join(browserRoot, entry.name))
631
- .filter((profileDir) => fs.existsSync(path.join(profileDir, "Cookies")));
632
- }
633
-
634
- function cookieHeaderFromRows(rows, password, site) {
635
- const pairs = [];
636
- for (const row of Array.isArray(rows) ? rows : []) {
637
- const domain = normalizeCookieDomain(row?.host_key);
638
- if (!site.domains.has(domain)) continue;
639
- const name = typeof row?.name === "string" ? row.name.trim() : "";
640
- if (!name) continue;
641
- const value = decryptChromiumCookie({
642
- encryptedHex: row.encrypted_hex,
643
- plaintextValue: row.value,
644
- hostKey: row.host_key,
645
- password,
646
- });
647
- if (value) pairs.push(`${name}=${value}`);
648
- }
649
- return pairs.length > 0 ? pairs.join("; ") : null;
650
- }
651
-
652
- async function importMacosQoderSessions({
653
- home = os.homedir(),
654
- platform = process.platform,
655
- securityRunner,
656
- sqliteReader = readSqliteJsonRowsAsync,
657
- } = {}) {
658
- if (platform !== "darwin") return [];
659
- const sessions = [];
660
- for (const browser of MACOS_CHROMIUM_BROWSERS) {
661
- const browserRoot = path.join(home, ...browser.root);
662
- const profiles = chromiumProfileDirs(browserRoot);
663
- if (profiles.length === 0) continue;
664
- const password = await readMacosSafeStoragePassword({
665
- service: browser.service,
666
- account: browser.account,
667
- securityRunner,
668
- });
669
- if (!password) continue;
670
- for (const profileDir of profiles) {
671
- let rows;
672
- try {
673
- rows = await sqliteReader(path.join(profileDir, "Cookies"), CHROMIUM_COOKIE_SQL, {
674
- label: `${browser.name} cookies`,
675
- });
676
- } catch (_error) {
677
- continue;
678
- }
679
- for (const site of Object.values(QODER_SITES)) {
680
- const cookieHeader = cookieHeaderFromRows(rows, password, site);
681
- if (cookieHeader) {
682
- sessions.push({
683
- cookieHeader,
684
- site,
685
- sourceLabel: `${browser.name} ${path.basename(profileDir)}`,
686
- });
687
- }
688
- }
689
- }
690
- }
691
- return sessions;
692
- }
693
-
694
500
  function qoderRequestHeaders(cookieHeader, site) {
695
501
  return {
696
502
  Cookie: cookieHeader,
@@ -834,8 +640,6 @@ async function fetchQoderLimits({
834
640
  home = os.homedir(),
835
641
  env = process.env,
836
642
  platform = process.platform,
837
- securityRunner,
838
- sqliteReader,
839
643
  fetchImpl = fetch,
840
644
  rpcRequest = qoderRpcRequest,
841
645
  nowMs = Date.now(),
@@ -884,10 +688,7 @@ async function fetchQoderLimits({
884
688
  }
885
689
 
886
690
  // Match the Antigravity last-good behavior: once the local service is
887
- // unavailable, prefer a bounded disk snapshot before attempting the much
888
- // slower browser-cookie fallback. On macOS, probing Chromium profiles may
889
- // involve multiple Keychain reads; letting those run first can consume the
890
- // provider timeout and make a perfectly valid cache look intermittent.
691
+ // unavailable, prefer a bounded disk snapshot before any provider fallback.
891
692
  const cachedLimits = readQoderLimitsCache({ home, nowMs });
892
693
  if (cachedLimits) {
893
694
  if (activityWindow) cachedLimits.secondary_window = activityWindow;
@@ -897,7 +698,7 @@ async function fetchQoderLimits({
897
698
  const manualCookie = typeof env.QODER_COOKIE === "string" ? env.QODER_COOKIE.trim() : "";
898
699
  const sessions = manualCookie
899
700
  ? [{ cookieHeader: manualCookie, site: siteFromEnv(env.QODER_SITE), sourceLabel: "QODER_COOKIE" }]
900
- : await importMacosQoderSessions({ home, platform, securityRunner, sqliteReader });
701
+ : [];
901
702
 
902
703
  let lastError = null;
903
704
  for (const session of sessions) {
@@ -963,13 +764,9 @@ async function fetchQoderLimits({
963
764
 
964
765
  module.exports = {
965
766
  QODER_SITES,
966
- CHROMIUM_COOKIE_SQL,
967
767
  normalizeQoderUsageResponse,
968
768
  normalizeQoderRpcUsage,
969
769
  normalizeQoderActivityResponse,
970
- decryptChromiumCookie,
971
- cookieHeaderFromRows,
972
- importMacosQoderSessions,
973
770
  qoderRequestHeaders,
974
771
  fetchQoderUsage,
975
772
  qoderRpcRequest,
@@ -3095,7 +3095,6 @@ async function fetchUsageLimitsUncached({
3095
3095
  home,
3096
3096
  env,
3097
3097
  platform,
3098
- securityRunner,
3099
3098
  fetchImpl: providerFetch,
3100
3099
  }),
3101
3100
  "Qoder",
@@ -1 +0,0 @@
1
- import{r as n,A as a}from"./__vite-browser-external-BdRrPLk6.js";import{u as p}from"./DialogTitle-amHXttsp.js";import{u as c}from"./useScrollLock-Cvyfyezc.js";const x=n.forwardRef(function(e,r){const{render:l,className:u,style:m,id:s,...t}=e,{store:i}=p(),o=c(s);return i.useSyncedValueWithCleanup("descriptionElementId",o),a("p",e,{ref:r,props:[{id:o},t]})});export{x as D};
@@ -1 +0,0 @@
1
- import{r as o}from"./__vite-browser-external-BdRrPLk6.js";import{h as r,i as t,p as s}from"./react-DK5clHtY.js";function i(){!r.current&&t();const[e]=o.useState(s.current);return e}export{i as u};