tokentracker-cli 1.5.7 → 1.5.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 (111) hide show
  1. package/dashboard/dist/assets/{AchievementBadge-DIHKXKgm.js → AchievementBadge-Ck1DmXtu.js} +1 -1
  2. package/dashboard/dist/assets/{AchievementsPage-U66jjKFf.js → AchievementsPage-DjvMoc2i.js} +2 -2
  3. package/dashboard/dist/assets/{AchievementsSection-BAW79xKg.js → AchievementsSection-DvTHE8Vd.js} +1 -1
  4. package/dashboard/dist/assets/{BadgeDetailModal-IfomOw9B.js → BadgeDetailModal-COa2Rd6M.js} +1 -1
  5. package/dashboard/dist/assets/{BotAnimated-B33gSUM3.js → BotAnimated-CeR3jSce.js} +1 -1
  6. package/dashboard/dist/assets/{Card-dtrkef-y.js → Card-bQCEOe_K.js} +1 -1
  7. package/dashboard/dist/assets/{CloudCheckoutPage-jYPgHJYE.js → CloudCheckoutPage-DDH-3QOd.js} +1 -1
  8. package/dashboard/dist/assets/{CloudPage-BumdgM5w.js → CloudPage-RygH3R8b.js} +2 -2
  9. package/dashboard/dist/assets/{CommandPalette-CFEeoIo3.js → CommandPalette-E7YqsdAH.js} +1 -1
  10. package/dashboard/dist/assets/{CommunityStatsModal-DL3MrPmb.js → CommunityStatsModal-B5heTDUE.js} +1 -1
  11. package/dashboard/dist/assets/{ConfirmModal-BRdtCv2g.js → ConfirmModal-D3vd882N.js} +1 -1
  12. package/dashboard/dist/assets/{Controls-Bb-_ZAsT.js → Controls-CK74JkE8.js} +1 -1
  13. package/dashboard/dist/assets/{DashboardPage-GXwt6DoC.js → DashboardPage-DwTrlQZQ.js} +1 -1
  14. package/dashboard/dist/assets/{DateRangePopover-CHkFCFkE.js → DateRangePopover-BxVCPuEX.js} +1 -1
  15. package/dashboard/dist/assets/{DevicePage-Da753sLS.js → DevicePage-B6x5fBdU.js} +1 -1
  16. package/dashboard/dist/assets/{DialogClose-4A_jISLc.js → DialogClose-teXmwU1d.js} +1 -1
  17. package/dashboard/dist/assets/DialogDescription-BSCcGkVT.js +1 -0
  18. package/dashboard/dist/assets/{DialogTitle-C0oQdI9n.js → DialogTitle-B3m-31sy.js} +1 -1
  19. package/dashboard/dist/assets/{ElectricLogo-Bv-sB-O-.js → ElectricLogo-0wyvks4K.js} +1 -1
  20. package/dashboard/dist/assets/{FadeIn-Ch2AuGxY.js → FadeIn-C60pLKXu.js} +1 -1
  21. package/dashboard/dist/assets/{HeaderGithubStar-C_dy8a5K.js → HeaderGithubStar-CCEUzMqo.js} +1 -1
  22. package/dashboard/dist/assets/{HoverTooltip-iuzo5YeN.js → HoverTooltip-D9RtbhSZ.js} +1 -1
  23. package/dashboard/dist/assets/{IpCheckPage-BKEID9fw.js → IpCheckPage-BCyW0SWY.js} +1 -1
  24. package/dashboard/dist/assets/{LandingPage-DZt5JWZ7.js → LandingPage-DCEofDST.js} +2 -2
  25. package/dashboard/dist/assets/{LeaderboardPage-CYrCQF5P.js → LeaderboardPage-CsTbalIm.js} +2 -2
  26. package/dashboard/dist/assets/{LeaderboardProBadge-B8vG2SAW.js → LeaderboardProBadge-Crun5RUJ.js} +1 -1
  27. package/dashboard/dist/assets/{LeaderboardProfileModal-DpAvBJPT.js → LeaderboardProfileModal-Bim9cms6.js} +3 -3
  28. package/dashboard/dist/assets/{LeaderboardProfilePage-CofOk8GO.js → LeaderboardProfilePage-D9pBE7f4.js} +1 -1
  29. package/dashboard/dist/assets/{LimitsPage-DXknvxtI.js → LimitsPage-CFhzwKzB.js} +1 -1
  30. package/dashboard/dist/assets/{LocalOnlyNotice-BBVCEm5Q.js → LocalOnlyNotice-F_qczacX.js} +1 -1
  31. package/dashboard/dist/assets/{LoginCard-DcPazHo1.js → LoginCard-CQm_T5K2.js} +1 -1
  32. package/dashboard/dist/assets/{LoginModal-CGXPaeWD.js → LoginModal-BUf4mPCT.js} +1 -1
  33. package/dashboard/dist/assets/{LoginPage-Ct6Al1pz.js → LoginPage-njdEUQEX.js} +1 -1
  34. package/dashboard/dist/assets/{PetPage-8NPEAa-c.js → PetPage-COczIU1k.js} +2 -2
  35. package/dashboard/dist/assets/{PopoverPopup-R69ks89h.js → PopoverPopup-DxB1k4g7.js} +1 -1
  36. package/dashboard/dist/assets/{ProviderIcon-svF44YE0.js → ProviderIcon-BQfkoaQE.js} +1 -1
  37. package/dashboard/dist/assets/{ResetPasswordPage-DJIYKu8C.js → ResetPasswordPage-PGRVaPTN.js} +1 -1
  38. package/dashboard/dist/assets/{Select-BVK4XZD5.js → Select-CQVnpoBO.js} +1 -1
  39. package/dashboard/dist/assets/{SelectItemText-Bh74D8lr.js → SelectItemText-DmAn7osh.js} +1 -1
  40. package/dashboard/dist/assets/{SelfHostPage-8gj2lAFp.js → SelfHostPage-BUURA-Vt.js} +1 -1
  41. package/dashboard/dist/assets/{ServiceStatusPage-CWPV_Mou.js → ServiceStatusPage-DuzSen0Q.js} +1 -1
  42. package/dashboard/dist/assets/{SessionsPage-Bo5plK6O.js → SessionsPage-DndGq61W.js} +1 -1
  43. package/dashboard/dist/assets/{SettingsPage-BptJrWn-.js → SettingsPage-CHh0yqsZ.js} +3 -3
  44. package/dashboard/dist/assets/{SkillsPage-CRgGXnJS.js → SkillsPage-CCaYXQWN.js} +1 -1
  45. package/dashboard/dist/assets/{TokenGalaxy-dgOy0Eo7.js → TokenGalaxy-CGxUtq9x.js} +1 -1
  46. package/dashboard/dist/assets/{TooltipPopup-DpGnyoFz.js → TooltipPopup-B_B4qQD-.js} +1 -1
  47. package/dashboard/dist/assets/{TrendMonitor-BEy_GbMg.js → TrendMonitor-CdRQTLZL.js} +1 -1
  48. package/dashboard/dist/assets/{WidgetsPage-ChUelFrP.js → WidgetsPage-DP_w32wh.js} +1 -1
  49. package/dashboard/dist/assets/{WrappedPage-n63RsX8z.js → WrappedPage-C_DCqHUH.js} +1 -1
  50. package/dashboard/dist/assets/{__vite-browser-external-D_JnEwiu.js → __vite-browser-external-Lw3ipvYF.js} +2 -2
  51. package/dashboard/dist/assets/{agent-logos-DQ1h5uQF.js → agent-logos-DlnSKc2A.js} +1 -1
  52. package/dashboard/dist/assets/{arrow-left-Bo3Sg_cg.js → arrow-left-CjLKt_5C.js} +1 -1
  53. package/dashboard/dist/assets/{arrow-right-DdxkL8Ul.js → arrow-right-Bh-Ezs8y.js} +1 -1
  54. package/dashboard/dist/assets/{arrow-up-right-CpvelPD2.js → arrow-up-right-C87CvEJ5.js} +1 -1
  55. package/dashboard/dist/assets/{calendar-days-BvNVya0e.js → calendar-days-B5VHwV9j.js} +1 -1
  56. package/dashboard/dist/assets/{check-tO40Glrg.js → check-D2uclldH.js} +1 -1
  57. package/dashboard/dist/assets/{chevron-down-Dnrra3mC.js → chevron-down-Beacyoub.js} +1 -1
  58. package/dashboard/dist/assets/{cloud-checkout-COC4zB8s.js → cloud-checkout-3Y7NDSG1.js} +1 -1
  59. package/dashboard/dist/assets/{composite-C0NgnRTl.js → composite-B28yORTL.js} +1 -1
  60. package/dashboard/dist/assets/{copy-DTKN2SO4.js → copy-C8fZJwms.js} +1 -1
  61. package/dashboard/dist/assets/{download-CSq2Yd3D.js → download-IIXYYmyo.js} +1 -1
  62. package/dashboard/dist/assets/{external-link-BtGedmuQ.js → external-link-BEb0dms0.js} +1 -1
  63. package/dashboard/dist/assets/{flame-ChjXIFSx.js → flame-gmfpE-PO.js} +1 -1
  64. package/dashboard/dist/assets/{format-tokens-CXqZY114.js → format-tokens-CKwy7NXi.js} +1 -1
  65. package/dashboard/dist/assets/{gift-YFwBvsUA.js → gift-twpInP_O.js} +1 -1
  66. package/dashboard/dist/assets/{icons-DCiBpbK0.js → icons-DQfkB5-5.js} +1 -1
  67. package/dashboard/dist/assets/{index-B7sRX2EC.js → index-ChVgw-dM.js} +1 -1
  68. package/dashboard/dist/assets/{index-XSya-vft.js → index-ClwErGKW.js} +1 -1
  69. package/dashboard/dist/assets/{index-DMqIbTL4.js → index-D2-6Msd9.js} +1 -1
  70. package/dashboard/dist/assets/{index-Dpmdg98T.js → index-DzUxfO5e.js} +1 -1
  71. package/dashboard/dist/assets/{info-PYzcoobJ.js → info-BvndJDmD.js} +1 -1
  72. package/dashboard/dist/assets/{link-2-BxSrdKyR.js → link-2-BhU_5JKG.js} +1 -1
  73. package/dashboard/dist/assets/{loader-circle-CgvCCDTH.js → loader-circle-BR_62BDE.js} +1 -1
  74. package/dashboard/dist/assets/{local-usage-transfer-eTzMdhbs.js → local-usage-transfer-CfoyR0hM.js} +1 -1
  75. package/dashboard/dist/assets/{modifiers.esm-B796CRz-.js → modifiers.esm-CnttlnRD.js} +1 -1
  76. package/dashboard/dist/assets/{monitor-smartphone-M5nbcGRy.js → monitor-smartphone-D4vzGxrq.js} +1 -1
  77. package/dashboard/dist/assets/{play-12ZzPH9r.js → play-BVWEKYTF.js} +1 -1
  78. package/dashboard/dist/assets/{plus-OqDA7xZy.js → plus-B9GQ6VvV.js} +1 -1
  79. package/dashboard/dist/assets/{provider-display-JlEBv1VB.js → provider-display-DCFgR7FO.js} +1 -1
  80. package/dashboard/dist/assets/{react-CeDcnQho.js → react-BKUD3UPr.js} +1 -1
  81. package/dashboard/dist/assets/{safePolygon-B_SGhQbo.js → safePolygon-DPIi3FGf.js} +1 -1
  82. package/dashboard/dist/assets/{search-D9wz4rWp.js → search-BBRJvYNz.js} +1 -1
  83. package/dashboard/dist/assets/{server-UCMw4AQF.js → server-Cg3zBK6a.js} +1 -1
  84. package/dashboard/dist/assets/{shield-check-lJ0-Z5Ot.js → shield-check-BBzYplRb.js} +1 -1
  85. package/dashboard/dist/assets/{skills-api-Da-WZbvW.js → skills-api-CcAQ6fJX.js} +1 -1
  86. package/dashboard/dist/assets/{sortable.esm-Bj1ZkbqW.js → sortable.esm-kNieGfR9.js} +1 -1
  87. package/dashboard/dist/assets/{store-Bpwwxxsy.js → store-DQpd_ZKv.js} +1 -1
  88. package/dashboard/dist/assets/{terminal-BHQMC4hm.js → terminal-zj_c8_SG.js} +1 -1
  89. package/dashboard/dist/assets/{trash-yTV6vhGX.js → trash-Sl7eOlF7.js} +1 -1
  90. package/dashboard/dist/assets/{use-community-stats-rrE4Ohic.js → use-community-stats-Bg-4yvQQ.js} +1 -1
  91. package/dashboard/dist/assets/{use-latest-request-guard-D4Y1aCyd.js → use-latest-request-guard-COF23Bfs.js} +1 -1
  92. package/dashboard/dist/assets/{use-limits-display-prefs-ChHr4XEF.js → use-limits-display-prefs-QOlhCOgQ.js} +1 -1
  93. package/dashboard/dist/assets/{use-native-settings-BmoCls3D.js → use-native-settings-CKDqyirL.js} +1 -1
  94. package/dashboard/dist/assets/{use-ordered-list-BZSSYcLx.js → use-ordered-list-mFHPMcF_.js} +1 -1
  95. package/dashboard/dist/assets/use-reduced-motion-B4rpC-Zt.js +1 -0
  96. package/dashboard/dist/assets/{use-transform-CJO1b0Iu.js → use-transform-CO5wZ0ML.js} +1 -1
  97. package/dashboard/dist/assets/{use-usage-limits-BbAC_LWP.js → use-usage-limits-CeKjW8jG.js} +1 -1
  98. package/dashboard/dist/assets/{useCurrency-B2enOMwJ.js → useCurrency-WruYNKxG.js} +1 -1
  99. package/dashboard/dist/assets/{usePositioner-BaoW4QRL.js → usePositioner-C3NGxtZa.js} +1 -1
  100. package/dashboard/dist/assets/{useTokenFormat-B2bbeEu-.js → useTokenFormat-ObRZ_T9W.js} +1 -1
  101. package/dashboard/dist/assets/{zap-CT5a8-_j.js → zap-CyZ3Tf1D.js} +1 -1
  102. package/dashboard/dist/index.html +1 -1
  103. package/dashboard/dist/ip-check.html +1 -1
  104. package/dashboard/dist/leaderboard.html +1 -1
  105. package/dashboard/dist/share.html +1 -1
  106. package/package.json +1 -1
  107. package/src/lib/cursor-config.js +11 -34
  108. package/src/lib/pricing/seed-snapshot.json +1 -1
  109. package/dashboard/dist/assets/DialogDescription-CiEhDvt9.js +0 -1
  110. package/dashboard/dist/assets/use-reduced-motion-CKTIXp4-.js +0 -1
  111. package/src/lib/cursor-safe-storage.js +0 -119
@@ -4,7 +4,6 @@ const fs = require("node:fs");
4
4
 
5
5
  const { readJson } = require("./fs");
6
6
  const { readSqliteFirstValue } = require("./sqlite-reader");
7
- const { decodeCursorAccessToken } = require("./cursor-safe-storage");
8
7
 
9
8
  // ── Path resolution ──
10
9
 
@@ -55,11 +54,7 @@ function cursorDebugLog(message, env = process.env) {
55
54
  }
56
55
 
57
56
  function readCursorAccessTokenFromStateDb(stateDbPath, deps = {}) {
58
- return readCursorStateValue(stateDbPath, CURSOR_ACCESS_TOKEN_SQL, deps);
59
- }
60
-
61
- function readCursorStateValue(stateDbPath, sql, deps = {}) {
62
- return readSqliteFirstValue(stateDbPath, sql, "value", {
57
+ return readSqliteFirstValue(stateDbPath, CURSOR_ACCESS_TOKEN_SQL, "value", {
63
58
  execFileSync: deps.execFileSync,
64
59
  requireFn: deps.requireFn,
65
60
  env: deps.env,
@@ -70,28 +65,13 @@ function readCursorStateValue(stateDbPath, sql, deps = {}) {
70
65
  });
71
66
  }
72
67
 
73
- // Identity lookup does not access the OS secret store or decrypt the token.
74
- function readCursorUserIdFromStateDb(stateDbPath, deps = {}) {
75
- const profile = readCursorStateValue(stateDbPath,
76
- "SELECT value FROM ItemTable WHERE key = 'cursorAuth/cachedScopedProfile';", deps);
77
- try {
78
- const userId = normalizeCursorSubject(JSON.parse(profile)?.authId);
79
- if (userId) return userId;
80
- } catch {
81
- // A missing or malformed cache must not prevent the membership fallback.
82
- }
83
- const membership = readCursorStateValue(stateDbPath,
84
- "SELECT value FROM ItemTable WHERE key = 'cursorAuth/stripeMembershipAuthId';", deps);
85
- return normalizeCursorSubject(membership);
86
- }
87
-
88
68
  /**
89
69
  * Extract Cursor session cookie from local SQLite + cli-config.json.
90
70
  * Returns { cookie, userId } or null on failure.
91
71
  *
92
72
  * Cookie format: WorkosCursorSessionToken=<userId>%3A%3A<jwt>
93
- * - JWT (plaintext or safeStorage) from state.vscdb → cursorAuth/accessToken
94
- * - userId from cli-config.json → authInfo.authId, state.vscdb, or JWT subject
73
+ * - JWT from state.vscdb → ItemTable → cursorAuth/accessToken
74
+ * - userId from cli-config.json → authInfo.authId
95
75
  * - native Cursor email/password: "auth0|user_XXXXX" → "user_XXXXX"
96
76
  * - Google sign-in via WorkOS: "google-oauth2|<numeric>" → kept verbatim
97
77
  * - other WorkOS subjects: "github|…", "oidc|…" → kept verbatim
@@ -109,21 +89,20 @@ function extractCursorSessionToken({ home, platform, env, deps } = {}) {
109
89
  * extractCursorSessionToken so the token is not propagated unnecessarily.
110
90
  */
111
91
  function extractCursorAuth({ home, platform, env, deps } = {}) {
112
- const { appDir, stateDbPath, cliConfigPath } = resolveCursorPaths({ home, platform, env });
92
+ const { stateDbPath, cliConfigPath } = resolveCursorPaths({ home, platform, env });
113
93
 
114
94
  // 1. Extract JWT from SQLite
115
95
  if (!fs.existsSync(stateDbPath)) {
116
96
  cursorDebugLog(`Cursor state DB not found at ${stateDbPath}`, deps?.env);
117
97
  return null;
118
98
  }
119
- const jwt = decodeCursorAccessToken(readCursorAccessTokenFromStateDb(stateDbPath, deps), {
120
- platform, appDir, deps,
121
- });
122
- if (!jwt) return null;
99
+ const jwt = readCursorAccessTokenFromStateDb(stateDbPath, deps);
100
+ // Encrypted Cursor Safe Storage values must not be treated as JWTs and must
101
+ // never trigger OS keychain decryption (see #1029 revert / #1043).
102
+ if (!jwt || jwt.length < 10 || jwt.startsWith('cursor-safe-storage:')) return null;
123
103
 
124
- // 2. New Cursor versions keep identity in SQLite instead of cli-config.json.
125
- let userId = extractUserIdFromCliConfig(cliConfigPath)
126
- || readCursorUserIdFromStateDb(stateDbPath, deps);
104
+ // 2. Extract userId — try cli-config.json first, fall back to JWT decode
105
+ let userId = extractUserIdFromCliConfig(cliConfigPath);
127
106
  if (!userId) {
128
107
  userId = extractUserIdFromJwt(jwt);
129
108
  }
@@ -139,8 +118,7 @@ function extractCursorAuth({ home, platform, env, deps } = {}) {
139
118
  const WORKOS_OAUTH_SUBJECT_RE = /^(google-oauth2|github|oidc|auth0)\|[^|]+$/;
140
119
 
141
120
  function normalizeCursorSubject(subject) {
142
- if (typeof subject !== "string" || !subject || /[\s;\x00-\x1f\x7f]/.test(subject)) return null;
143
- if (/^user_[A-Za-z0-9_]+$/.test(subject)) return subject;
121
+ if (!subject) return null;
144
122
  // Native Cursor: "auth0|user_XXXXX" → strip provider prefix, return "user_XXXXX"
145
123
  const native = subject.match(/\|(user_[A-Za-z0-9_]+)$/);
146
124
  if (native) return native[1];
@@ -631,7 +609,6 @@ module.exports = {
631
609
  resolveCursorPaths,
632
610
  isCursorInstalled,
633
611
  readCursorAccessTokenFromStateDb,
634
- readCursorUserIdFromStateDb,
635
612
  extractCursorAuth,
636
613
  extractCursorSessionToken,
637
614
  fetchCursorUsageCsv,