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.
- package/dashboard/dist/assets/{AchievementBadge-DIHKXKgm.js → AchievementBadge-Ck1DmXtu.js} +1 -1
- package/dashboard/dist/assets/{AchievementsPage-U66jjKFf.js → AchievementsPage-DjvMoc2i.js} +2 -2
- package/dashboard/dist/assets/{AchievementsSection-BAW79xKg.js → AchievementsSection-DvTHE8Vd.js} +1 -1
- package/dashboard/dist/assets/{BadgeDetailModal-IfomOw9B.js → BadgeDetailModal-COa2Rd6M.js} +1 -1
- package/dashboard/dist/assets/{BotAnimated-B33gSUM3.js → BotAnimated-CeR3jSce.js} +1 -1
- package/dashboard/dist/assets/{Card-dtrkef-y.js → Card-bQCEOe_K.js} +1 -1
- package/dashboard/dist/assets/{CloudCheckoutPage-jYPgHJYE.js → CloudCheckoutPage-DDH-3QOd.js} +1 -1
- package/dashboard/dist/assets/{CloudPage-BumdgM5w.js → CloudPage-RygH3R8b.js} +2 -2
- package/dashboard/dist/assets/{CommandPalette-CFEeoIo3.js → CommandPalette-E7YqsdAH.js} +1 -1
- package/dashboard/dist/assets/{CommunityStatsModal-DL3MrPmb.js → CommunityStatsModal-B5heTDUE.js} +1 -1
- package/dashboard/dist/assets/{ConfirmModal-BRdtCv2g.js → ConfirmModal-D3vd882N.js} +1 -1
- package/dashboard/dist/assets/{Controls-Bb-_ZAsT.js → Controls-CK74JkE8.js} +1 -1
- package/dashboard/dist/assets/{DashboardPage-GXwt6DoC.js → DashboardPage-DwTrlQZQ.js} +1 -1
- package/dashboard/dist/assets/{DateRangePopover-CHkFCFkE.js → DateRangePopover-BxVCPuEX.js} +1 -1
- package/dashboard/dist/assets/{DevicePage-Da753sLS.js → DevicePage-B6x5fBdU.js} +1 -1
- package/dashboard/dist/assets/{DialogClose-4A_jISLc.js → DialogClose-teXmwU1d.js} +1 -1
- package/dashboard/dist/assets/DialogDescription-BSCcGkVT.js +1 -0
- package/dashboard/dist/assets/{DialogTitle-C0oQdI9n.js → DialogTitle-B3m-31sy.js} +1 -1
- package/dashboard/dist/assets/{ElectricLogo-Bv-sB-O-.js → ElectricLogo-0wyvks4K.js} +1 -1
- package/dashboard/dist/assets/{FadeIn-Ch2AuGxY.js → FadeIn-C60pLKXu.js} +1 -1
- package/dashboard/dist/assets/{HeaderGithubStar-C_dy8a5K.js → HeaderGithubStar-CCEUzMqo.js} +1 -1
- package/dashboard/dist/assets/{HoverTooltip-iuzo5YeN.js → HoverTooltip-D9RtbhSZ.js} +1 -1
- package/dashboard/dist/assets/{IpCheckPage-BKEID9fw.js → IpCheckPage-BCyW0SWY.js} +1 -1
- package/dashboard/dist/assets/{LandingPage-DZt5JWZ7.js → LandingPage-DCEofDST.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardPage-CYrCQF5P.js → LeaderboardPage-CsTbalIm.js} +2 -2
- package/dashboard/dist/assets/{LeaderboardProBadge-B8vG2SAW.js → LeaderboardProBadge-Crun5RUJ.js} +1 -1
- package/dashboard/dist/assets/{LeaderboardProfileModal-DpAvBJPT.js → LeaderboardProfileModal-Bim9cms6.js} +3 -3
- package/dashboard/dist/assets/{LeaderboardProfilePage-CofOk8GO.js → LeaderboardProfilePage-D9pBE7f4.js} +1 -1
- package/dashboard/dist/assets/{LimitsPage-DXknvxtI.js → LimitsPage-CFhzwKzB.js} +1 -1
- package/dashboard/dist/assets/{LocalOnlyNotice-BBVCEm5Q.js → LocalOnlyNotice-F_qczacX.js} +1 -1
- package/dashboard/dist/assets/{LoginCard-DcPazHo1.js → LoginCard-CQm_T5K2.js} +1 -1
- package/dashboard/dist/assets/{LoginModal-CGXPaeWD.js → LoginModal-BUf4mPCT.js} +1 -1
- package/dashboard/dist/assets/{LoginPage-Ct6Al1pz.js → LoginPage-njdEUQEX.js} +1 -1
- package/dashboard/dist/assets/{PetPage-8NPEAa-c.js → PetPage-COczIU1k.js} +2 -2
- package/dashboard/dist/assets/{PopoverPopup-R69ks89h.js → PopoverPopup-DxB1k4g7.js} +1 -1
- package/dashboard/dist/assets/{ProviderIcon-svF44YE0.js → ProviderIcon-BQfkoaQE.js} +1 -1
- package/dashboard/dist/assets/{ResetPasswordPage-DJIYKu8C.js → ResetPasswordPage-PGRVaPTN.js} +1 -1
- package/dashboard/dist/assets/{Select-BVK4XZD5.js → Select-CQVnpoBO.js} +1 -1
- package/dashboard/dist/assets/{SelectItemText-Bh74D8lr.js → SelectItemText-DmAn7osh.js} +1 -1
- package/dashboard/dist/assets/{SelfHostPage-8gj2lAFp.js → SelfHostPage-BUURA-Vt.js} +1 -1
- package/dashboard/dist/assets/{ServiceStatusPage-CWPV_Mou.js → ServiceStatusPage-DuzSen0Q.js} +1 -1
- package/dashboard/dist/assets/{SessionsPage-Bo5plK6O.js → SessionsPage-DndGq61W.js} +1 -1
- package/dashboard/dist/assets/{SettingsPage-BptJrWn-.js → SettingsPage-CHh0yqsZ.js} +3 -3
- package/dashboard/dist/assets/{SkillsPage-CRgGXnJS.js → SkillsPage-CCaYXQWN.js} +1 -1
- package/dashboard/dist/assets/{TokenGalaxy-dgOy0Eo7.js → TokenGalaxy-CGxUtq9x.js} +1 -1
- package/dashboard/dist/assets/{TooltipPopup-DpGnyoFz.js → TooltipPopup-B_B4qQD-.js} +1 -1
- package/dashboard/dist/assets/{TrendMonitor-BEy_GbMg.js → TrendMonitor-CdRQTLZL.js} +1 -1
- package/dashboard/dist/assets/{WidgetsPage-ChUelFrP.js → WidgetsPage-DP_w32wh.js} +1 -1
- package/dashboard/dist/assets/{WrappedPage-n63RsX8z.js → WrappedPage-C_DCqHUH.js} +1 -1
- package/dashboard/dist/assets/{__vite-browser-external-D_JnEwiu.js → __vite-browser-external-Lw3ipvYF.js} +2 -2
- package/dashboard/dist/assets/{agent-logos-DQ1h5uQF.js → agent-logos-DlnSKc2A.js} +1 -1
- package/dashboard/dist/assets/{arrow-left-Bo3Sg_cg.js → arrow-left-CjLKt_5C.js} +1 -1
- package/dashboard/dist/assets/{arrow-right-DdxkL8Ul.js → arrow-right-Bh-Ezs8y.js} +1 -1
- package/dashboard/dist/assets/{arrow-up-right-CpvelPD2.js → arrow-up-right-C87CvEJ5.js} +1 -1
- package/dashboard/dist/assets/{calendar-days-BvNVya0e.js → calendar-days-B5VHwV9j.js} +1 -1
- package/dashboard/dist/assets/{check-tO40Glrg.js → check-D2uclldH.js} +1 -1
- package/dashboard/dist/assets/{chevron-down-Dnrra3mC.js → chevron-down-Beacyoub.js} +1 -1
- package/dashboard/dist/assets/{cloud-checkout-COC4zB8s.js → cloud-checkout-3Y7NDSG1.js} +1 -1
- package/dashboard/dist/assets/{composite-C0NgnRTl.js → composite-B28yORTL.js} +1 -1
- package/dashboard/dist/assets/{copy-DTKN2SO4.js → copy-C8fZJwms.js} +1 -1
- package/dashboard/dist/assets/{download-CSq2Yd3D.js → download-IIXYYmyo.js} +1 -1
- package/dashboard/dist/assets/{external-link-BtGedmuQ.js → external-link-BEb0dms0.js} +1 -1
- package/dashboard/dist/assets/{flame-ChjXIFSx.js → flame-gmfpE-PO.js} +1 -1
- package/dashboard/dist/assets/{format-tokens-CXqZY114.js → format-tokens-CKwy7NXi.js} +1 -1
- package/dashboard/dist/assets/{gift-YFwBvsUA.js → gift-twpInP_O.js} +1 -1
- package/dashboard/dist/assets/{icons-DCiBpbK0.js → icons-DQfkB5-5.js} +1 -1
- package/dashboard/dist/assets/{index-B7sRX2EC.js → index-ChVgw-dM.js} +1 -1
- package/dashboard/dist/assets/{index-XSya-vft.js → index-ClwErGKW.js} +1 -1
- package/dashboard/dist/assets/{index-DMqIbTL4.js → index-D2-6Msd9.js} +1 -1
- package/dashboard/dist/assets/{index-Dpmdg98T.js → index-DzUxfO5e.js} +1 -1
- package/dashboard/dist/assets/{info-PYzcoobJ.js → info-BvndJDmD.js} +1 -1
- package/dashboard/dist/assets/{link-2-BxSrdKyR.js → link-2-BhU_5JKG.js} +1 -1
- package/dashboard/dist/assets/{loader-circle-CgvCCDTH.js → loader-circle-BR_62BDE.js} +1 -1
- package/dashboard/dist/assets/{local-usage-transfer-eTzMdhbs.js → local-usage-transfer-CfoyR0hM.js} +1 -1
- package/dashboard/dist/assets/{modifiers.esm-B796CRz-.js → modifiers.esm-CnttlnRD.js} +1 -1
- package/dashboard/dist/assets/{monitor-smartphone-M5nbcGRy.js → monitor-smartphone-D4vzGxrq.js} +1 -1
- package/dashboard/dist/assets/{play-12ZzPH9r.js → play-BVWEKYTF.js} +1 -1
- package/dashboard/dist/assets/{plus-OqDA7xZy.js → plus-B9GQ6VvV.js} +1 -1
- package/dashboard/dist/assets/{provider-display-JlEBv1VB.js → provider-display-DCFgR7FO.js} +1 -1
- package/dashboard/dist/assets/{react-CeDcnQho.js → react-BKUD3UPr.js} +1 -1
- package/dashboard/dist/assets/{safePolygon-B_SGhQbo.js → safePolygon-DPIi3FGf.js} +1 -1
- package/dashboard/dist/assets/{search-D9wz4rWp.js → search-BBRJvYNz.js} +1 -1
- package/dashboard/dist/assets/{server-UCMw4AQF.js → server-Cg3zBK6a.js} +1 -1
- package/dashboard/dist/assets/{shield-check-lJ0-Z5Ot.js → shield-check-BBzYplRb.js} +1 -1
- package/dashboard/dist/assets/{skills-api-Da-WZbvW.js → skills-api-CcAQ6fJX.js} +1 -1
- package/dashboard/dist/assets/{sortable.esm-Bj1ZkbqW.js → sortable.esm-kNieGfR9.js} +1 -1
- package/dashboard/dist/assets/{store-Bpwwxxsy.js → store-DQpd_ZKv.js} +1 -1
- package/dashboard/dist/assets/{terminal-BHQMC4hm.js → terminal-zj_c8_SG.js} +1 -1
- package/dashboard/dist/assets/{trash-yTV6vhGX.js → trash-Sl7eOlF7.js} +1 -1
- package/dashboard/dist/assets/{use-community-stats-rrE4Ohic.js → use-community-stats-Bg-4yvQQ.js} +1 -1
- package/dashboard/dist/assets/{use-latest-request-guard-D4Y1aCyd.js → use-latest-request-guard-COF23Bfs.js} +1 -1
- package/dashboard/dist/assets/{use-limits-display-prefs-ChHr4XEF.js → use-limits-display-prefs-QOlhCOgQ.js} +1 -1
- package/dashboard/dist/assets/{use-native-settings-BmoCls3D.js → use-native-settings-CKDqyirL.js} +1 -1
- package/dashboard/dist/assets/{use-ordered-list-BZSSYcLx.js → use-ordered-list-mFHPMcF_.js} +1 -1
- package/dashboard/dist/assets/use-reduced-motion-B4rpC-Zt.js +1 -0
- package/dashboard/dist/assets/{use-transform-CJO1b0Iu.js → use-transform-CO5wZ0ML.js} +1 -1
- package/dashboard/dist/assets/{use-usage-limits-BbAC_LWP.js → use-usage-limits-CeKjW8jG.js} +1 -1
- package/dashboard/dist/assets/{useCurrency-B2enOMwJ.js → useCurrency-WruYNKxG.js} +1 -1
- package/dashboard/dist/assets/{usePositioner-BaoW4QRL.js → usePositioner-C3NGxtZa.js} +1 -1
- package/dashboard/dist/assets/{useTokenFormat-B2bbeEu-.js → useTokenFormat-ObRZ_T9W.js} +1 -1
- package/dashboard/dist/assets/{zap-CT5a8-_j.js → zap-CyZ3Tf1D.js} +1 -1
- package/dashboard/dist/index.html +1 -1
- package/dashboard/dist/ip-check.html +1 -1
- package/dashboard/dist/leaderboard.html +1 -1
- package/dashboard/dist/share.html +1 -1
- package/package.json +1 -1
- package/src/lib/cursor-config.js +11 -34
- package/src/lib/pricing/seed-snapshot.json +1 -1
- package/dashboard/dist/assets/DialogDescription-CiEhDvt9.js +0 -1
- package/dashboard/dist/assets/use-reduced-motion-CKTIXp4-.js +0 -1
- package/src/lib/cursor-safe-storage.js +0 -119
package/src/lib/cursor-config.js
CHANGED
|
@@ -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
|
|
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
|
|
94
|
-
* - userId from cli-config.json → authInfo.authId
|
|
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 {
|
|
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 =
|
|
120
|
-
|
|
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.
|
|
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 (
|
|
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,
|