@cortexkit/antigravity-auth-core 1.0.1 → 2.0.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.
- package/dist/account-manager.d.ts +281 -0
- package/dist/account-manager.d.ts.map +1 -0
- package/dist/account-manager.js +1378 -0
- package/dist/account-manager.js.map +1 -0
- package/dist/account-storage.d.ts +162 -0
- package/dist/account-storage.d.ts.map +1 -0
- package/dist/account-storage.js +635 -0
- package/dist/account-storage.js.map +1 -0
- package/dist/account-types.d.ts +136 -0
- package/dist/account-types.d.ts.map +1 -0
- package/dist/account-types.js +9 -0
- package/dist/account-types.js.map +1 -0
- package/dist/agy-request-metadata.d.ts +61 -0
- package/dist/agy-request-metadata.d.ts.map +1 -0
- package/dist/agy-request-metadata.js +197 -0
- package/dist/agy-request-metadata.js.map +1 -0
- package/dist/agy-transport.d.ts +2 -2
- package/dist/agy-transport.d.ts.map +1 -1
- package/dist/agy-transport.js +88 -74
- package/dist/agy-transport.js.map +1 -1
- package/dist/antigravity/oauth.d.ts +3 -2
- package/dist/antigravity/oauth.d.ts.map +1 -1
- package/dist/antigravity/oauth.js +65 -55
- package/dist/antigravity/oauth.js.map +1 -1
- package/dist/atomic-write.d.ts +23 -0
- package/dist/atomic-write.d.ts.map +1 -0
- package/dist/atomic-write.js +47 -0
- package/dist/atomic-write.js.map +1 -0
- package/dist/auth-types.d.ts +2 -2
- package/dist/auth-types.d.ts.map +1 -1
- package/dist/auth.d.ts +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +9 -6
- package/dist/auth.js.map +1 -1
- package/dist/constants.d.ts +19 -12
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +52 -45
- package/dist/constants.js.map +1 -1
- package/dist/fetch-timeout.d.ts +26 -0
- package/dist/fetch-timeout.d.ts.map +1 -0
- package/dist/fetch-timeout.js +43 -0
- package/dist/fetch-timeout.js.map +1 -0
- package/dist/file-lock.d.ts +79 -0
- package/dist/file-lock.d.ts.map +1 -0
- package/dist/file-lock.js +438 -0
- package/dist/file-lock.js.map +1 -0
- package/dist/fingerprint.d.ts +13 -7
- package/dist/fingerprint.d.ts.map +1 -1
- package/dist/fingerprint.js +34 -24
- package/dist/fingerprint.js.map +1 -1
- package/dist/index.d.ts +23 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -8
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +10 -10
- package/dist/logger.js.map +1 -1
- package/dist/model-registry.d.ts +6 -5
- package/dist/model-registry.d.ts.map +1 -1
- package/dist/model-registry.js +124 -91
- package/dist/model-registry.js.map +1 -1
- package/dist/project.d.ts +1 -1
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +53 -25
- package/dist/project.js.map +1 -1
- package/dist/quota-manager.d.ts +140 -0
- package/dist/quota-manager.d.ts.map +1 -0
- package/dist/quota-manager.js +481 -0
- package/dist/quota-manager.js.map +1 -0
- package/dist/quota-types.d.ts +49 -0
- package/dist/quota-types.d.ts.map +1 -0
- package/dist/quota-types.js +10 -0
- package/dist/quota-types.js.map +1 -0
- package/dist/rotation.d.ts +175 -0
- package/dist/rotation.d.ts.map +1 -0
- package/dist/rotation.js +391 -0
- package/dist/rotation.js.map +1 -0
- package/dist/transform/claude.d.ts +1 -1
- package/dist/transform/claude.d.ts.map +1 -1
- package/dist/transform/claude.js +63 -41
- package/dist/transform/claude.js.map +1 -1
- package/dist/transform/cross-model-sanitizer.d.ts +1 -1
- package/dist/transform/cross-model-sanitizer.d.ts.map +1 -1
- package/dist/transform/cross-model-sanitizer.js +19 -16
- package/dist/transform/cross-model-sanitizer.js.map +1 -1
- package/dist/transform/gemini.d.ts +10 -3
- package/dist/transform/gemini.d.ts.map +1 -1
- package/dist/transform/gemini.js +142 -73
- package/dist/transform/gemini.js.map +1 -1
- package/dist/transform/index.d.ts +9 -9
- package/dist/transform/index.d.ts.map +1 -1
- package/dist/transform/index.js +6 -6
- package/dist/transform/index.js.map +1 -1
- package/dist/transform/model-resolver.d.ts +5 -5
- package/dist/transform/model-resolver.d.ts.map +1 -1
- package/dist/transform/model-resolver.js +118 -76
- package/dist/transform/model-resolver.js.map +1 -1
- package/dist/transform/types.d.ts +5 -5
- package/dist/transform/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +14 -16
- package/dist/version.js.map +1 -1
- package/package.json +16 -10
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { generatePKCE } from
|
|
2
|
-
import { ANTIGRAVITY_CLIENT_ID, ANTIGRAVITY_CLIENT_SECRET, ANTIGRAVITY_REDIRECT_URI, ANTIGRAVITY_SCOPES, ANTIGRAVITY_ENDPOINT_FALLBACKS, ANTIGRAVITY_LOAD_ENDPOINTS, GEMINI_CLI_HEADERS, } from "../constants.js";
|
|
3
|
-
import { createLogger } from "../logger.js";
|
|
4
|
-
import { calculateTokenExpiry } from "../auth.js";
|
|
1
|
+
import { generatePKCE } from '@openauthjs/openauth/pkce';
|
|
5
2
|
import { fetchWithAgyCliTransport } from "../agy-transport.js";
|
|
3
|
+
import { calculateTokenExpiry } from "../auth.js";
|
|
4
|
+
import { ANTIGRAVITY_CLIENT_ID, ANTIGRAVITY_CLIENT_SECRET, ANTIGRAVITY_ENDPOINT_FALLBACKS, ANTIGRAVITY_LOAD_ENDPOINTS, ANTIGRAVITY_REDIRECT_URI, ANTIGRAVITY_SCOPES, GEMINI_CLI_HEADERS, } from "../constants.js";
|
|
5
|
+
import { fetchWithActiveTimeout } from "../fetch-timeout.js";
|
|
6
6
|
import { buildAntigravityHarnessBootstrapHeaders, buildAntigravityLoadCodeAssistMetadata, } from "../fingerprint.js";
|
|
7
|
-
|
|
7
|
+
import { createLogger } from "../logger.js";
|
|
8
|
+
const log = createLogger('oauth');
|
|
8
9
|
/**
|
|
9
10
|
* Refresh an Antigravity OAuth access token using a bare refresh token.
|
|
10
11
|
* Harness-agnostic: performs only the token POST and returns the new
|
|
@@ -12,19 +13,19 @@ const log = createLogger("oauth");
|
|
|
12
13
|
*/
|
|
13
14
|
export async function refreshAntigravityToken(refreshToken) {
|
|
14
15
|
const startTime = Date.now();
|
|
15
|
-
const response = await
|
|
16
|
-
method:
|
|
17
|
-
headers: {
|
|
16
|
+
const response = await fetchWithActiveTimeout('https://oauth2.googleapis.com/token', {
|
|
17
|
+
method: 'POST',
|
|
18
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
18
19
|
body: new URLSearchParams({
|
|
19
|
-
grant_type:
|
|
20
|
+
grant_type: 'refresh_token',
|
|
20
21
|
refresh_token: refreshToken,
|
|
21
22
|
client_id: ANTIGRAVITY_CLIENT_ID,
|
|
22
23
|
client_secret: ANTIGRAVITY_CLIENT_SECRET,
|
|
23
24
|
}),
|
|
24
25
|
});
|
|
25
26
|
if (!response.ok) {
|
|
26
|
-
const errorText = await response.text().catch(() =>
|
|
27
|
-
throw new Error(`Antigravity token refresh failed (${response.status} ${response.statusText})${errorText ? ` - ${errorText}` :
|
|
27
|
+
const errorText = await response.text().catch(() => '');
|
|
28
|
+
throw new Error(`Antigravity token refresh failed (${response.status} ${response.statusText})${errorText ? ` - ${errorText}` : ''}`);
|
|
28
29
|
}
|
|
29
30
|
const payload = (await response.json());
|
|
30
31
|
return {
|
|
@@ -37,68 +38,74 @@ export async function refreshAntigravityToken(refreshToken) {
|
|
|
37
38
|
* Encode an object into a URL-safe base64 string.
|
|
38
39
|
*/
|
|
39
40
|
function encodeState(payload) {
|
|
40
|
-
return Buffer.from(JSON.stringify(payload),
|
|
41
|
+
return Buffer.from(JSON.stringify(payload), 'utf8').toString('base64url');
|
|
41
42
|
}
|
|
42
43
|
/**
|
|
43
44
|
* Decode an OAuth state parameter back into its structured representation.
|
|
44
45
|
*/
|
|
45
46
|
function decodeState(state) {
|
|
46
|
-
const normalized = state.replace(/-/g,
|
|
47
|
-
const padded = normalized.padEnd(normalized.length + ((4 - normalized.length % 4) % 4),
|
|
48
|
-
const json = Buffer.from(padded,
|
|
47
|
+
const normalized = state.replace(/-/g, '+').replace(/_/g, '/');
|
|
48
|
+
const padded = normalized.padEnd(normalized.length + ((4 - (normalized.length % 4)) % 4), '=');
|
|
49
|
+
const json = Buffer.from(padded, 'base64').toString('utf8');
|
|
49
50
|
const parsed = JSON.parse(json);
|
|
50
|
-
if (typeof parsed.verifier !==
|
|
51
|
-
throw new Error(
|
|
51
|
+
if (typeof parsed.verifier !== 'string') {
|
|
52
|
+
throw new Error('Missing PKCE verifier in state');
|
|
52
53
|
}
|
|
53
54
|
return {
|
|
54
55
|
verifier: parsed.verifier,
|
|
55
|
-
projectId: typeof parsed.projectId ===
|
|
56
|
+
projectId: typeof parsed.projectId === 'string' ? parsed.projectId : '',
|
|
56
57
|
};
|
|
57
58
|
}
|
|
58
59
|
/**
|
|
59
60
|
* Build the Antigravity OAuth authorization URL including PKCE and optional project metadata.
|
|
60
61
|
*/
|
|
61
|
-
export async function authorizeAntigravity(projectId =
|
|
62
|
+
export async function authorizeAntigravity(projectId = '') {
|
|
62
63
|
const pkce = (await generatePKCE());
|
|
63
|
-
const url = new URL(
|
|
64
|
-
url.searchParams.set(
|
|
65
|
-
url.searchParams.set(
|
|
66
|
-
url.searchParams.set(
|
|
67
|
-
url.searchParams.set(
|
|
68
|
-
url.searchParams.set(
|
|
69
|
-
url.searchParams.set(
|
|
70
|
-
url.searchParams.set(
|
|
71
|
-
url.searchParams.set(
|
|
72
|
-
url.searchParams.set(
|
|
64
|
+
const url = new URL('https://accounts.google.com/o/oauth2/v2/auth');
|
|
65
|
+
url.searchParams.set('client_id', ANTIGRAVITY_CLIENT_ID);
|
|
66
|
+
url.searchParams.set('response_type', 'code');
|
|
67
|
+
url.searchParams.set('redirect_uri', ANTIGRAVITY_REDIRECT_URI);
|
|
68
|
+
url.searchParams.set('scope', ANTIGRAVITY_SCOPES.join(' '));
|
|
69
|
+
url.searchParams.set('code_challenge', pkce.challenge);
|
|
70
|
+
url.searchParams.set('code_challenge_method', 'S256');
|
|
71
|
+
url.searchParams.set('state', encodeState({ verifier: pkce.verifier, projectId: projectId || '' }));
|
|
72
|
+
url.searchParams.set('access_type', 'offline');
|
|
73
|
+
url.searchParams.set('prompt', 'consent');
|
|
73
74
|
return {
|
|
74
75
|
url: url.toString(),
|
|
75
76
|
verifier: pkce.verifier,
|
|
76
|
-
projectId: projectId ||
|
|
77
|
+
projectId: projectId || '',
|
|
77
78
|
};
|
|
78
79
|
}
|
|
79
80
|
async function fetchProjectID(accessToken) {
|
|
80
81
|
const errors = [];
|
|
81
82
|
const loadHeaders = buildAntigravityHarnessBootstrapHeaders(accessToken);
|
|
82
|
-
const loadEndpoints = Array.from(new Set([
|
|
83
|
+
const loadEndpoints = Array.from(new Set([
|
|
84
|
+
...ANTIGRAVITY_LOAD_ENDPOINTS,
|
|
85
|
+
...ANTIGRAVITY_ENDPOINT_FALLBACKS,
|
|
86
|
+
]));
|
|
83
87
|
for (const baseEndpoint of loadEndpoints) {
|
|
84
88
|
try {
|
|
85
89
|
const url = `${baseEndpoint}/v1internal:loadCodeAssist`;
|
|
86
90
|
const response = await fetchWithAgyCliTransport(url, {
|
|
87
|
-
method:
|
|
91
|
+
method: 'POST',
|
|
88
92
|
headers: loadHeaders,
|
|
89
|
-
body: JSON.stringify({
|
|
93
|
+
body: JSON.stringify({
|
|
94
|
+
metadata: buildAntigravityLoadCodeAssistMetadata(),
|
|
95
|
+
}),
|
|
90
96
|
}, { timeoutMs: 10000 });
|
|
91
97
|
if (!response.ok) {
|
|
92
|
-
const message = await response.text().catch(() =>
|
|
93
|
-
errors.push(`loadCodeAssist ${response.status} at ${baseEndpoint}${message ? `: ${message}` :
|
|
98
|
+
const message = await response.text().catch(() => '');
|
|
99
|
+
errors.push(`loadCodeAssist ${response.status} at ${baseEndpoint}${message ? `: ${message}` : ''}`);
|
|
94
100
|
continue;
|
|
95
101
|
}
|
|
96
102
|
const data = await response.json();
|
|
97
|
-
if (typeof data.cloudaicompanionProject ===
|
|
103
|
+
if (typeof data.cloudaicompanionProject === 'string' &&
|
|
104
|
+
data.cloudaicompanionProject) {
|
|
98
105
|
return data.cloudaicompanionProject;
|
|
99
106
|
}
|
|
100
107
|
if (data.cloudaicompanionProject &&
|
|
101
|
-
typeof data.cloudaicompanionProject.id ===
|
|
108
|
+
typeof data.cloudaicompanionProject.id === 'string' &&
|
|
102
109
|
data.cloudaicompanionProject.id) {
|
|
103
110
|
return data.cloudaicompanionProject.id;
|
|
104
111
|
}
|
|
@@ -109,9 +116,11 @@ async function fetchProjectID(accessToken) {
|
|
|
109
116
|
}
|
|
110
117
|
}
|
|
111
118
|
if (errors.length) {
|
|
112
|
-
log.warn(
|
|
119
|
+
log.warn('Failed to resolve Antigravity project via loadCodeAssist', {
|
|
120
|
+
errors: errors.join('; '),
|
|
121
|
+
});
|
|
113
122
|
}
|
|
114
|
-
return
|
|
123
|
+
return '';
|
|
115
124
|
}
|
|
116
125
|
/**
|
|
117
126
|
* Exchange an authorization code for Antigravity CLI access and refresh tokens.
|
|
@@ -120,32 +129,32 @@ export async function exchangeAntigravity(code, state) {
|
|
|
120
129
|
try {
|
|
121
130
|
const { verifier, projectId } = decodeState(state);
|
|
122
131
|
const startTime = Date.now();
|
|
123
|
-
const tokenResponse = await
|
|
124
|
-
method:
|
|
132
|
+
const tokenResponse = await fetchWithActiveTimeout('https://oauth2.googleapis.com/token', {
|
|
133
|
+
method: 'POST',
|
|
125
134
|
headers: {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
135
|
+
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
|
|
136
|
+
Accept: '*/*',
|
|
137
|
+
'Accept-Encoding': 'gzip, deflate, br',
|
|
138
|
+
'User-Agent': GEMINI_CLI_HEADERS['User-Agent'],
|
|
130
139
|
},
|
|
131
140
|
body: new URLSearchParams({
|
|
132
141
|
client_id: ANTIGRAVITY_CLIENT_ID,
|
|
133
142
|
client_secret: ANTIGRAVITY_CLIENT_SECRET,
|
|
134
143
|
code,
|
|
135
|
-
grant_type:
|
|
144
|
+
grant_type: 'authorization_code',
|
|
136
145
|
redirect_uri: ANTIGRAVITY_REDIRECT_URI,
|
|
137
146
|
code_verifier: verifier,
|
|
138
147
|
}),
|
|
139
148
|
});
|
|
140
149
|
if (!tokenResponse.ok) {
|
|
141
150
|
const errorText = await tokenResponse.text();
|
|
142
|
-
return { type:
|
|
151
|
+
return { type: 'failed', error: errorText };
|
|
143
152
|
}
|
|
144
153
|
const tokenPayload = (await tokenResponse.json());
|
|
145
|
-
const userInfoResponse = await
|
|
154
|
+
const userInfoResponse = await fetchWithActiveTimeout('https://www.googleapis.com/oauth2/v1/userinfo?alt=json', {
|
|
146
155
|
headers: {
|
|
147
156
|
Authorization: `Bearer ${tokenPayload.access_token}`,
|
|
148
|
-
|
|
157
|
+
'User-Agent': GEMINI_CLI_HEADERS['User-Agent'],
|
|
149
158
|
},
|
|
150
159
|
});
|
|
151
160
|
const userInfo = userInfoResponse.ok
|
|
@@ -153,26 +162,27 @@ export async function exchangeAntigravity(code, state) {
|
|
|
153
162
|
: {};
|
|
154
163
|
const refreshToken = tokenPayload.refresh_token;
|
|
155
164
|
if (!refreshToken) {
|
|
156
|
-
return { type:
|
|
165
|
+
return { type: 'failed', error: 'Missing refresh token in response' };
|
|
157
166
|
}
|
|
158
167
|
let effectiveProjectId = projectId;
|
|
159
168
|
if (!effectiveProjectId) {
|
|
160
169
|
effectiveProjectId = await fetchProjectID(tokenPayload.access_token);
|
|
161
170
|
}
|
|
162
|
-
const storedRefresh = `${refreshToken}|${effectiveProjectId ||
|
|
171
|
+
const storedRefresh = `${refreshToken}|${effectiveProjectId || ''}`;
|
|
163
172
|
return {
|
|
164
|
-
type:
|
|
173
|
+
type: 'success',
|
|
165
174
|
refresh: storedRefresh,
|
|
166
175
|
access: tokenPayload.access_token,
|
|
167
176
|
expires: calculateTokenExpiry(startTime, tokenPayload.expires_in),
|
|
168
177
|
email: userInfo.email,
|
|
169
|
-
|
|
178
|
+
label: userInfo.name?.trim() || undefined,
|
|
179
|
+
projectId: effectiveProjectId || '',
|
|
170
180
|
};
|
|
171
181
|
}
|
|
172
182
|
catch (error) {
|
|
173
183
|
return {
|
|
174
|
-
type:
|
|
175
|
-
error: error instanceof Error ? error.message :
|
|
184
|
+
type: 'failed',
|
|
185
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
176
186
|
};
|
|
177
187
|
}
|
|
178
188
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/antigravity/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/antigravity/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,8BAA8B,EAC9B,0BAA0B,EAC1B,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EACL,uCAAuC,EACvC,sCAAsC,GACvC,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;AA8CjC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,YAAoB;IAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC5B,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAC3C,qCAAqC,EACrC;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;QAChE,IAAI,EAAE,IAAI,eAAe,CAAC;YACxB,UAAU,EAAE,eAAe;YAC3B,aAAa,EAAE,YAAY;YAC3B,SAAS,EAAE,qBAAqB;YAChC,aAAa,EAAE,yBAAyB;SACzC,CAAC;KACH,CACF,CAAA;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;QACvD,MAAM,IAAI,KAAK,CACb,qCAAqC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACpH,CAAA;IACH,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAIrC,CAAA;IAED,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,YAAY;QAC5B,OAAO,EAAE,OAAO,CAAC,aAAa,IAAI,YAAY;QAC9C,OAAO,EAAE,oBAAoB,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC;KAC7D,CAAA;AACH,CAAC;AAaD;;GAEG;AACH,SAAS,WAAW,CAAC,OAA6B;IAChD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AAC3E,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC9D,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAC9B,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EACvD,GAAG,CACJ,CAAA;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;KACxE,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAAS,GAAG,EAAE;IAEd,MAAM,IAAI,GAAG,CAAC,MAAM,YAAY,EAAE,CAAa,CAAA;IAE/C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,8CAA8C,CAAC,CAAA;IACnE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAA;IACxD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;IAC7C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAA;IAC9D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IACtD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAA;IACrD,GAAG,CAAC,YAAY,CAAC,GAAG,CAClB,OAAO,EACP,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC,CACrE,CAAA;IACD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;IAC9C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IAEzC,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,SAAS,EAAE,SAAS,IAAI,EAAE;KAC3B,CAAA;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,WAAmB;IAC/C,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,WAAW,GAAG,uCAAuC,CAAC,WAAW,CAAC,CAAA;IAExE,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAC9B,IAAI,GAAG,CAAS;QACd,GAAG,0BAA0B;QAC7B,GAAG,8BAA8B;KAClC,CAAC,CACH,CAAA;IAED,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,GAAG,YAAY,4BAA4B,CAAA;YACvD,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAC7C,GAAG,EACH;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,WAAW;gBACpB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,QAAQ,EAAE,sCAAsC,EAAE;iBACnD,CAAC;aACH,EACD,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB,CAAA;YAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;gBACrD,MAAM,CAAC,IAAI,CACT,kBAAkB,QAAQ,CAAC,MAAM,OAAO,YAAY,GAClD,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,EAC7B,EAAE,CACH,CAAA;gBACD,SAAQ;YACV,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YAClC,IACE,OAAO,IAAI,CAAC,uBAAuB,KAAK,QAAQ;gBAChD,IAAI,CAAC,uBAAuB,EAC5B,CAAC;gBACD,OAAO,IAAI,CAAC,uBAAuB,CAAA;YACrC,CAAC;YACD,IACE,IAAI,CAAC,uBAAuB;gBAC5B,OAAO,IAAI,CAAC,uBAAuB,CAAC,EAAE,KAAK,QAAQ;gBACnD,IAAI,CAAC,uBAAuB,CAAC,EAAE,EAC/B,CAAC;gBACD,OAAO,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAA;YACxC,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,wCAAwC,YAAY,EAAE,CAAC,CAAA;QACrE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CACT,2BAA2B,YAAY,KACrC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAC3C,EAAE,CACH,CAAA;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,GAAG,CAAC,IAAI,CAAC,0DAA0D,EAAE;YACnE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;SAC1B,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAY,EACZ,KAAa;IAEb,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;QAElD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC5B,MAAM,aAAa,GAAG,MAAM,sBAAsB,CAChD,qCAAqC,EACrC;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,iDAAiD;gBACjE,MAAM,EAAE,KAAK;gBACb,iBAAiB,EAAE,mBAAmB;gBACtC,YAAY,EAAE,kBAAkB,CAAC,YAAY,CAAC;aAC/C;YACD,IAAI,EAAE,IAAI,eAAe,CAAC;gBACxB,SAAS,EAAE,qBAAqB;gBAChC,aAAa,EAAE,yBAAyB;gBACxC,IAAI;gBACJ,UAAU,EAAE,oBAAoB;gBAChC,YAAY,EAAE,wBAAwB;gBACtC,aAAa,EAAE,QAAQ;aACxB,CAAC;SACH,CACF,CAAA;QAED,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAA;YAC5C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;QAC7C,CAAC;QAED,MAAM,YAAY,GAChB,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,CAA6B,CAAA;QAE1D,MAAM,gBAAgB,GAAG,MAAM,sBAAsB,CACnD,wDAAwD,EACxD;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,YAAY,CAAC,YAAY,EAAE;gBACpD,YAAY,EAAE,kBAAkB,CAAC,YAAY,CAAC;aAC/C;SACF,CACF,CAAA;QAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,EAAE;YAClC,CAAC,CAAE,CAAC,MAAM,gBAAgB,CAAC,IAAI,EAAE,CAAyB;YAC1D,CAAC,CAAC,EAAE,CAAA;QAEN,MAAM,YAAY,GAAG,YAAY,CAAC,aAAa,CAAA;QAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAA;QACvE,CAAC;QAED,IAAI,kBAAkB,GAAG,SAAS,CAAA;QAClC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,kBAAkB,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;QACtE,CAAC;QAED,MAAM,aAAa,GAAG,GAAG,YAAY,IAAI,kBAAkB,IAAI,EAAE,EAAE,CAAA;QAEnE,OAAO;YACL,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,aAAa;YACtB,MAAM,EAAE,YAAY,CAAC,YAAY;YACjC,OAAO,EAAE,oBAAoB,CAAC,SAAS,EAAE,YAAY,CAAC,UAAU,CAAC;YACjE,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,SAAS;YACzC,SAAS,EAAE,kBAAkB,IAAI,EAAE;SACpC,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAA;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atomic JSON file writer.
|
|
3
|
+
*
|
|
4
|
+
* Stages the payload at `${path}.${randomUUID()}.tmp` (same directory as
|
|
5
|
+
* the target so the rename is atomic on POSIX, and uses the same NTFS
|
|
6
|
+
* volume on Windows) and renames onto `path`. The `0o600` mode is enforced
|
|
7
|
+
* on the staged file; on POSIX the rename replaces the target's inode so
|
|
8
|
+
* the new file inherits the staged mode bits. Windows ignores POSIX mode
|
|
9
|
+
* bits and relies on the current user's inherited ACL — we do not attempt
|
|
10
|
+
* to harden ACLs from Node.
|
|
11
|
+
*
|
|
12
|
+
* Failures are deliberately NOT masked by a copy fallback: a blind
|
|
13
|
+
* copy-then-unlink after a failing replace can paper over partial writes
|
|
14
|
+
* and let concurrent writers silently corrupt state. The caller decides
|
|
15
|
+
* whether to retry, surface, or back off.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Atomically serialize `value` as pretty-printed JSON and rename it onto
|
|
19
|
+
* `path`. Throws if any step fails; the staged temp file is removed before
|
|
20
|
+
* rethrow so no `${path}.<uuid>.tmp` is left behind.
|
|
21
|
+
*/
|
|
22
|
+
export declare function writeJsonAtomic(path: string, value: unknown): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=atomic-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-write.d.ts","sourceRoot":"","sources":["../src/atomic-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC,CAsBf"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Atomic JSON file writer.
|
|
3
|
+
*
|
|
4
|
+
* Stages the payload at `${path}.${randomUUID()}.tmp` (same directory as
|
|
5
|
+
* the target so the rename is atomic on POSIX, and uses the same NTFS
|
|
6
|
+
* volume on Windows) and renames onto `path`. The `0o600` mode is enforced
|
|
7
|
+
* on the staged file; on POSIX the rename replaces the target's inode so
|
|
8
|
+
* the new file inherits the staged mode bits. Windows ignores POSIX mode
|
|
9
|
+
* bits and relies on the current user's inherited ACL — we do not attempt
|
|
10
|
+
* to harden ACLs from Node.
|
|
11
|
+
*
|
|
12
|
+
* Failures are deliberately NOT masked by a copy fallback: a blind
|
|
13
|
+
* copy-then-unlink after a failing replace can paper over partial writes
|
|
14
|
+
* and let concurrent writers silently corrupt state. The caller decides
|
|
15
|
+
* whether to retry, surface, or back off.
|
|
16
|
+
*/
|
|
17
|
+
import { randomUUID } from 'node:crypto';
|
|
18
|
+
import { mkdir, rename, rm, writeFile } from 'node:fs/promises';
|
|
19
|
+
import { dirname } from 'node:path';
|
|
20
|
+
/**
|
|
21
|
+
* Atomically serialize `value` as pretty-printed JSON and rename it onto
|
|
22
|
+
* `path`. Throws if any step fails; the staged temp file is removed before
|
|
23
|
+
* rethrow so no `${path}.<uuid>.tmp` is left behind.
|
|
24
|
+
*/
|
|
25
|
+
export async function writeJsonAtomic(path, value) {
|
|
26
|
+
const serialized = `${JSON.stringify(value, null, 2)}\n`;
|
|
27
|
+
const tempPath = `${path}.${randomUUID()}.tmp`;
|
|
28
|
+
await mkdir(dirname(path), { recursive: true });
|
|
29
|
+
let renamed = false;
|
|
30
|
+
try {
|
|
31
|
+
await writeFile(tempPath, serialized, {
|
|
32
|
+
encoding: 'utf8',
|
|
33
|
+
mode: 0o600,
|
|
34
|
+
});
|
|
35
|
+
await rename(tempPath, path);
|
|
36
|
+
renamed = true;
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
if (!renamed) {
|
|
40
|
+
// Cleanup the staged temp whether `writeFile` threw after a partial
|
|
41
|
+
// write or `rename` failed. `force: true` makes the call a no-op
|
|
42
|
+
// when the file never landed on disk.
|
|
43
|
+
await rm(tempPath, { force: true }).catch(() => { });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=atomic-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-write.js","sourceRoot":"","sources":["../src/atomic-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,KAAc;IAEd,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAA;IACxD,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,UAAU,EAAE,MAAM,CAAA;IAE9C,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAE/C,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE;YACpC,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,KAAK;SACZ,CAAC,CAAA;QACF,MAAM,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC5B,OAAO,GAAG,IAAI,CAAA;IAChB,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,oEAAoE;YACpE,iEAAiE;YACjE,sCAAsC;YACtC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACrD,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/auth-types.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export interface OAuthAuthDetails {
|
|
2
|
-
type:
|
|
2
|
+
type: 'oauth';
|
|
3
3
|
refresh: string;
|
|
4
4
|
access?: string;
|
|
5
5
|
expires?: number;
|
|
6
6
|
}
|
|
7
7
|
export interface ApiKeyAuthDetails {
|
|
8
|
-
type:
|
|
8
|
+
type: 'api_key';
|
|
9
9
|
key: string;
|
|
10
10
|
}
|
|
11
11
|
export interface NonOAuthAuthDetails {
|
package/dist/auth-types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-types.d.ts","sourceRoot":"","sources":["../src/auth-types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,SAAS,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"auth-types.d.ts","sourceRoot":"","sources":["../src/auth-types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,SAAS,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,MAAM,WAAW,GACnB,gBAAgB,GAChB,iBAAiB,GACjB,mBAAmB,CAAA;AAEvB,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;AAEhD,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,gBAAgB,CAAA;IACtB,kBAAkB,EAAE,MAAM,CAAA;CAC3B"}
|
package/dist/auth.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { OAuthAuthDetails, RefreshParts } from
|
|
1
|
+
import type { OAuthAuthDetails, RefreshParts } from './auth-types.ts';
|
|
2
2
|
export declare function isOAuthAuth(auth: unknown): auth is OAuthAuthDetails;
|
|
3
3
|
/**
|
|
4
4
|
* Splits a packed refresh string into its constituent refresh token and project IDs.
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAIrE,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,gBAAgB,CAOnE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAS/D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAI9D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAKlE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,OAAO,GACxB,MAAM,CAOR"}
|
package/dist/auth.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
const ACCESS_TOKEN_EXPIRY_BUFFER_MS = 60 * 1000;
|
|
2
2
|
export function isOAuthAuth(auth) {
|
|
3
|
-
return typeof auth ===
|
|
3
|
+
return (typeof auth === 'object' &&
|
|
4
|
+
auth !== null &&
|
|
5
|
+
'type' in auth &&
|
|
6
|
+
auth.type === 'oauth');
|
|
4
7
|
}
|
|
5
8
|
/**
|
|
6
9
|
* Splits a packed refresh string into its constituent refresh token and project IDs.
|
|
7
10
|
*/
|
|
8
11
|
export function parseRefreshParts(refresh) {
|
|
9
|
-
const [refreshToken =
|
|
12
|
+
const [refreshToken = '', projectId = '', managedProjectId = ''] = (refresh ?? '').split('|');
|
|
10
13
|
return {
|
|
11
14
|
refreshToken,
|
|
12
15
|
projectId: projectId || undefined,
|
|
@@ -17,7 +20,7 @@ export function parseRefreshParts(refresh) {
|
|
|
17
20
|
* Serializes refresh token parts into the stored string format.
|
|
18
21
|
*/
|
|
19
22
|
export function formatRefreshParts(parts) {
|
|
20
|
-
const projectSegment = parts.projectId ??
|
|
23
|
+
const projectSegment = parts.projectId ?? '';
|
|
21
24
|
const base = `${parts.refreshToken}|${projectSegment}`;
|
|
22
25
|
return parts.managedProjectId ? `${base}|${parts.managedProjectId}` : base;
|
|
23
26
|
}
|
|
@@ -25,7 +28,7 @@ export function formatRefreshParts(parts) {
|
|
|
25
28
|
* Determines whether an access token is expired or missing, with buffer for clock skew.
|
|
26
29
|
*/
|
|
27
30
|
export function accessTokenExpired(auth) {
|
|
28
|
-
if (!auth.access || typeof auth.expires !==
|
|
31
|
+
if (!auth.access || typeof auth.expires !== 'number') {
|
|
29
32
|
return true;
|
|
30
33
|
}
|
|
31
34
|
return auth.expires <= Date.now() + ACCESS_TOKEN_EXPIRY_BUFFER_MS;
|
|
@@ -36,9 +39,9 @@ export function accessTokenExpired(auth) {
|
|
|
36
39
|
* @param expiresInSeconds The duration returned by the server
|
|
37
40
|
*/
|
|
38
41
|
export function calculateTokenExpiry(requestTimeMs, expiresInSeconds) {
|
|
39
|
-
const seconds = typeof expiresInSeconds ===
|
|
42
|
+
const seconds = typeof expiresInSeconds === 'number' ? expiresInSeconds : 3600;
|
|
40
43
|
// Safety check for bad data - if it's not a positive number, treat as immediately expired
|
|
41
|
-
if (isNaN(seconds) || seconds <= 0) {
|
|
44
|
+
if (Number.isNaN(seconds) || seconds <= 0) {
|
|
42
45
|
return requestTimeMs;
|
|
43
46
|
}
|
|
44
47
|
return requestTimeMs + seconds * 1000;
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAEA,MAAM,6BAA6B,GAAG,EAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAEA,MAAM,6BAA6B,GAAG,EAAE,GAAG,IAAI,CAAA;AAE/C,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,MAAM,IAAI,IAAI;QACd,IAAI,CAAC,IAAI,KAAK,OAAO,CACtB,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,CAAC,YAAY,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,EAAE,gBAAgB,GAAG,EAAE,CAAC,GAAG,CACjE,OAAO,IAAI,EAAE,CACd,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACZ,OAAO;QACL,YAAY;QACZ,SAAS,EAAE,SAAS,IAAI,SAAS;QACjC,gBAAgB,EAAE,gBAAgB,IAAI,SAAS;KAChD,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IACpD,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAA;IAC5C,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,YAAY,IAAI,cAAc,EAAE,CAAA;IACtD,OAAO,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAsB;IACvD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,6BAA6B,CAAA;AACnE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,aAAqB,EACrB,gBAAyB;IAEzB,MAAM,OAAO,GAAG,OAAO,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAA;IAC9E,0FAA0F;IAC1F,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAC1C,OAAO,aAAa,CAAA;IACtB,CAAC;IACD,OAAO,aAAa,GAAG,OAAO,GAAG,IAAI,CAAA;AACvC,CAAC"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export declare const ANTIGRAVITY_SCOPES: readonly string[];
|
|
|
16
16
|
export declare const ANTIGRAVITY_REDIRECT_URI = "http://localhost:51121/oauth-callback";
|
|
17
17
|
/**
|
|
18
18
|
* Root endpoints for the Antigravity API (in fallback order).
|
|
19
|
-
* Live agy CLI 1.
|
|
19
|
+
* Live agy CLI 1.1.6 traffic uses daily-cloudcode-pa.googleapis.com.
|
|
20
20
|
*/
|
|
21
21
|
export declare const ANTIGRAVITY_ENDPOINT_DAILY = "https://daily-cloudcode-pa.googleapis.com";
|
|
22
22
|
export declare const ANTIGRAVITY_ENDPOINT_AUTOPUSH = "https://autopush-cloudcode-pa.sandbox.googleapis.com";
|
|
@@ -53,16 +53,23 @@ export declare function getAntigravityVersion(): string;
|
|
|
53
53
|
* Subsequent calls are silently ignored to prevent accidental mutation.
|
|
54
54
|
*/
|
|
55
55
|
export declare function setAntigravityVersion(version: string): void;
|
|
56
|
+
/**
|
|
57
|
+
* Test-only: reset the version lock so `setAntigravityVersion` can run again.
|
|
58
|
+
* Bun has no Vitest-style module reset hook, and module state lives in this
|
|
59
|
+
* singleton — tests that exercise the lock need a way to start clean per
|
|
60
|
+
* scenario.
|
|
61
|
+
*/
|
|
62
|
+
export declare function __resetAntigravityVersionForTesting(): void;
|
|
56
63
|
/** @deprecated Use getAntigravityVersion() for runtime access. */
|
|
57
64
|
export declare const ANTIGRAVITY_VERSION = "1.18.3";
|
|
58
65
|
export declare function getAntigravityHeaders(): HeaderSet & {
|
|
59
|
-
|
|
66
|
+
'Client-Metadata': string;
|
|
60
67
|
};
|
|
61
68
|
/** @deprecated Use getAntigravityHeaders() for runtime access. */
|
|
62
69
|
export declare const ANTIGRAVITY_HEADERS: {
|
|
63
|
-
readonly
|
|
64
|
-
readonly
|
|
65
|
-
readonly
|
|
70
|
+
readonly 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Antigravity/1.18.3 Chrome/138.0.7204.235 Electron/37.3.1 Safari/537.36";
|
|
71
|
+
readonly 'X-Goog-Api-Client': "google-cloud-sdk vscode_cloudshelleditor/0.1";
|
|
72
|
+
readonly 'Client-Metadata': "{\"ideType\":\"ANTIGRAVITY\",\"platform\":\"WINDOWS\",\"pluginType\":\"GEMINI\"}" | "{\"ideType\":\"ANTIGRAVITY\",\"platform\":\"MACOS\",\"pluginType\":\"GEMINI\"}";
|
|
66
73
|
};
|
|
67
74
|
export declare const GEMINI_CLI_VERSION = "1.0.0";
|
|
68
75
|
/**
|
|
@@ -78,17 +85,17 @@ export declare const GEMINI_CLI_DEFAULT_MODEL = "gemini-2.5-pro";
|
|
|
78
85
|
export declare function buildGeminiCliUserAgent(model?: string): string;
|
|
79
86
|
/** @deprecated Use buildGeminiCliUserAgent() for runtime access. */
|
|
80
87
|
export declare const GEMINI_CLI_HEADERS: {
|
|
81
|
-
readonly
|
|
82
|
-
readonly
|
|
83
|
-
readonly
|
|
88
|
+
readonly 'User-Agent': "google-api-nodejs-client/9.15.1";
|
|
89
|
+
readonly 'X-Goog-Api-Client': "gl-node/22.17.0";
|
|
90
|
+
readonly 'Client-Metadata': "ideType=IDE_UNSPECIFIED,platform=PLATFORM_UNSPECIFIED,pluginType=GEMINI";
|
|
84
91
|
};
|
|
85
92
|
export type HeaderSet = {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
93
|
+
'User-Agent': string;
|
|
94
|
+
'X-Goog-Api-Client'?: string;
|
|
95
|
+
'Client-Metadata'?: string;
|
|
89
96
|
};
|
|
90
97
|
export declare function getRandomizedHeaders(style: HeaderStyle, model?: string): HeaderSet;
|
|
91
|
-
export type HeaderStyle =
|
|
98
|
+
export type HeaderStyle = 'antigravity' | 'gemini-cli';
|
|
92
99
|
/**
|
|
93
100
|
* Provider identifier shared between the plugin loader and credential store.
|
|
94
101
|
*/
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,eAAO,MAAM,qBAAqB,8EAC2C,CAAA;AAE7E;;GAEG;AACH,eAAO,MAAM,yBAAyB,wCAAwC,CAAA;AAE9E;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAM/C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,0CAA0C,CAAA;AAE/E;;;GAGG;AACH,eAAO,MAAM,0BAA0B,8CACM,CAAA;AAC7C,eAAO,MAAM,6BAA6B,yDACc,CAAA;AACxD,eAAO,MAAM,yBAAyB,wCAAwC,CAAA;AAE9E;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,+FAGjC,CAAA;AACV;;;GAGG;AACH,eAAO,MAAM,0BAA0B,+FAG7B,CAAA;AACV;;GAEG;AACH,eAAO,MAAM,oBAAoB,8CAA6B,CAAA;AAE9D;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,wCAA4B,CAAA;AAE5D;;GAEG;AACH,eAAO,MAAM,8BAA8B,sBAAsB,CAAA;AAEjE,eAAO,MAAM,4BAA4B,WAAW,CAAA;AAIpD,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI3D;AAED;;;;;GAKG;AACH,wBAAgB,mCAAmC,IAAI,IAAI,CAG1D;AAED,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,WAA+B,CAAA;AAE/D,wBAAgB,qBAAqB,IAAI,SAAS,GAAG;IACnD,iBAAiB,EAAE,MAAM,CAAA;CAC1B,CAMA;AAED,kEAAkE;AAClE,eAAO,MAAM,mBAAmB;;;;CAItB,CAAA;AAEV,eAAO,MAAM,kBAAkB,UAAU,CAAA;AAEzC;;GAEG;AACH,eAAO,MAAM,wBAAwB,mBAAmB,CAAA;AAExD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAK9D;AAED,oEAAoE;AACpE,eAAO,MAAM,kBAAkB;;;;CAKrB,CAAA;AACV,MAAM,MAAM,SAAS,GAAG;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAClB,KAAK,CAAC,EAAE,MAAM,GACb,SAAS,CAWX;AAED,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,YAAY,CAAA;AAEtD;;GAEG;AACH,eAAO,MAAM,uBAAuB,WAAW,CAAA;AAM/C;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,4zBAWiD,CAAA;AAE5F;;;GAGG;AACH,eAAO,MAAM,yBAAyB,kDAAwC,CAAA;AAE9E,eAAO,MAAM,6BAA6B,iBAAiB,CAAA;AAC3D,eAAO,MAAM,oCAAoC,mCACf,CAAA;AAElC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sBAAsB,qCAAqC,CAAA;AAMxE;;;GAGG;AACH,eAAO,MAAM,YAAY,qBAAqB,CAAA;AAE9C;;GAEG;AACH,eAAO,MAAM,2BAA2B,QAAQ,CAAA;AAEhD;;GAEG;AACH,eAAO,MAAM,2BAA2B,OAAO,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAQ,CAAA;AAEtC;;GAEG;AACH,eAAO,MAAM,yBAAyB,qlBAYY,CAAA"}
|