@unifiedmemory/cli 1.3.7 → 1.3.9
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/lib/token-refresh.js +27 -3
- package/package.json +1 -1
package/lib/token-refresh.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { getToken, saveToken } from './token-storage.js';
|
|
2
2
|
import { config } from './config.js';
|
|
3
3
|
import { parseJWT } from './jwt-utils.js';
|
|
4
|
+
import { getOrgScopedToken } from './clerk-api.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Check if token has expired
|
|
@@ -71,13 +72,36 @@ export async function refreshAccessToken(tokenData) {
|
|
|
71
72
|
|
|
72
73
|
const newTokenData = await response.json();
|
|
73
74
|
|
|
74
|
-
// Parse
|
|
75
|
-
const
|
|
75
|
+
// Parse refreshed JWT
|
|
76
|
+
const refreshedToken = newTokenData.id_token || newTokenData.access_token;
|
|
77
|
+
let finalIdToken = newTokenData.id_token;
|
|
78
|
+
let decoded = parseJWT(refreshedToken);
|
|
79
|
+
|
|
80
|
+
// Debug: log what we got from refresh
|
|
81
|
+
console.error(` Refreshed token has sid: ${decoded?.sid ? 'yes' : 'no'}`);
|
|
82
|
+
console.error(` selectedOrg: ${tokenData.selectedOrg?.id || 'none'}`);
|
|
83
|
+
|
|
84
|
+
// If we have org context, get org-scoped token to ensure JWT has org claims
|
|
85
|
+
if (tokenData.selectedOrg?.id && decoded?.sid) {
|
|
86
|
+
try {
|
|
87
|
+
const orgToken = await getOrgScopedToken(
|
|
88
|
+
decoded.sid,
|
|
89
|
+
tokenData.selectedOrg.id,
|
|
90
|
+
refreshedToken
|
|
91
|
+
);
|
|
92
|
+
finalIdToken = orgToken.jwt;
|
|
93
|
+
decoded = parseJWT(orgToken.jwt);
|
|
94
|
+
} catch (error) {
|
|
95
|
+
// Log warning but continue with base token
|
|
96
|
+
// The subsequent API call may fail, prompting re-login
|
|
97
|
+
console.error(`⚠️ Could not refresh org-scoped token: ${error.message}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
76
100
|
|
|
77
101
|
// Build updated token object, preserving selectedOrg
|
|
78
102
|
const updatedToken = {
|
|
79
103
|
accessToken: newTokenData.access_token,
|
|
80
|
-
idToken:
|
|
104
|
+
idToken: finalIdToken,
|
|
81
105
|
tokenType: newTokenData.token_type || 'Bearer',
|
|
82
106
|
expiresIn: newTokenData.expires_in,
|
|
83
107
|
receivedAt: Date.now(),
|