@dreamboard-games/cli 0.1.30-alpha.30 → 0.1.30-alpha.31
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/agent-verifier/agent-workspace-verifier.mjs +226 -93
- package/dist/agent-verifier/agent-workspace-verifier.mjs.map +1 -1
- package/dist/agent-verifier/{chunk-FNSHNMDY.mjs → chunk-MIRGCMUC.mjs} +3 -10
- package/dist/agent-verifier/chunk-MIRGCMUC.mjs.map +1 -0
- package/dist/agent-verifier/{chunk-QMOBTQ5G.mjs → chunk-NBRUEJUK.mjs} +3 -3
- package/dist/agent-verifier/{chunk-QMOBTQ5G.mjs.map → chunk-NBRUEJUK.mjs.map} +1 -1
- package/dist/agent-verifier/{global-config-SWWR2LP4.mjs → global-config-2NUESNEQ.mjs} +2 -2
- package/dist/agent-verifier/{keychain-backend-UF3Z26JM.mjs → keychain-backend-FF4I6ODB.mjs} +1 -1
- package/dist/agent-verifier/{keychain-backend-UF3Z26JM.mjs.map → keychain-backend-FF4I6ODB.mjs.map} +1 -1
- package/dist/agent-verifier/{materialize-workspace-K4WYFG5E.mjs → materialize-workspace-MAGKDMK5.mjs} +2 -2
- package/dist/agent-verifier/{static-scaffold-MHVM63HU.mjs → static-scaffold-CLRRWXON.mjs} +2 -2
- package/dist/authoring-compatibility-internal.js +1 -1
- package/dist/{chunk-UI7NWSYA.js → chunk-6NYVJYN4.js} +7 -28
- package/dist/chunk-6NYVJYN4.js.map +1 -0
- package/dist/{chunk-RTNKVNQA.js → chunk-X244CUU4.js} +228 -148
- package/dist/chunk-X244CUU4.js.map +1 -0
- package/dist/{chunk-I4SZ7FA4.js → chunk-YNJVKC2T.js} +3 -9
- package/dist/{chunk-I4SZ7FA4.js.map → chunk-YNJVKC2T.js.map} +1 -1
- package/dist/{global-config-GK2UC2X6.js → global-config-RBMW7IVA.js} +2 -2
- package/dist/index.js +110 -295
- package/dist/index.js.map +1 -1
- package/dist/internal.js +3 -3
- package/dist/internal.js.map +1 -1
- package/dist/{keychain-backend-GO34KGTG.js → keychain-backend-FSNTNTZE.js} +1 -1
- package/dist/{keychain-backend-GO34KGTG.js.map → keychain-backend-FSNTNTZE.js.map} +1 -1
- package/package.json +1 -1
- package/release/authoring-release-set.json +2 -2
- package/dist/agent-verifier/chunk-FNSHNMDY.mjs.map +0 -1
- package/dist/chunk-RTNKVNQA.js.map +0 -1
- package/dist/chunk-UI7NWSYA.js.map +0 -1
- /package/dist/agent-verifier/{global-config-SWWR2LP4.mjs.map → global-config-2NUESNEQ.mjs.map} +0 -0
- /package/dist/agent-verifier/{materialize-workspace-K4WYFG5E.mjs.map → materialize-workspace-MAGKDMK5.mjs.map} +0 -0
- /package/dist/agent-verifier/{static-scaffold-MHVM63HU.mjs.map → static-scaffold-CLRRWXON.mjs.map} +0 -0
- /package/dist/{global-config-GK2UC2X6.js.map → global-config-RBMW7IVA.js.map} +0 -0
|
@@ -4,11 +4,10 @@ import {
|
|
|
4
4
|
loadProjectConfig
|
|
5
5
|
} from "./chunk-M6YNQZCC.mjs";
|
|
6
6
|
import {
|
|
7
|
-
clearCredentials,
|
|
8
7
|
getStoredSession,
|
|
9
8
|
loadGlobalConfig,
|
|
10
9
|
withCredentialLock
|
|
11
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-MIRGCMUC.mjs";
|
|
12
11
|
import "./chunk-GWRZRWCF.mjs";
|
|
13
12
|
import {
|
|
14
13
|
readJsonFile,
|
|
@@ -1134,6 +1133,18 @@ var BUILD_CHANNEL = injectedBuildChannel === "published" ? "published" : "develo
|
|
|
1134
1133
|
var IS_PUBLISHED_BUILD = BUILD_CHANNEL === "published";
|
|
1135
1134
|
var PUBLISHED_ENVIRONMENT = "prod";
|
|
1136
1135
|
|
|
1136
|
+
// src/auth/refresh-error.ts
|
|
1137
|
+
function classifyRefreshError(error) {
|
|
1138
|
+
const message = error.message?.toLowerCase() ?? "";
|
|
1139
|
+
if (error.status === 400 || error.status === 401 || message.includes("invalid_grant") || message.includes("refresh token") || message.includes("expired") || message.includes("revoked")) {
|
|
1140
|
+
return { kind: "permanent_invalid", reason: error.message };
|
|
1141
|
+
}
|
|
1142
|
+
if (error.status === 408 || error.status === 429 || typeof error.status === "number" && error.status >= 500 || message.includes("timeout") || message.includes("network") || message.includes("fetch failed")) {
|
|
1143
|
+
return { kind: "transient", reason: error.message };
|
|
1144
|
+
}
|
|
1145
|
+
return { kind: "unknown", reason: error.message };
|
|
1146
|
+
}
|
|
1147
|
+
|
|
1137
1148
|
// src/auth/clerk-oauth.ts
|
|
1138
1149
|
import crypto from "crypto";
|
|
1139
1150
|
async function refreshClerkOAuthToken(input) {
|
|
@@ -1241,75 +1252,183 @@ async function exchangeDreamboardUserToken(input) {
|
|
|
1241
1252
|
};
|
|
1242
1253
|
}
|
|
1243
1254
|
|
|
1244
|
-
// src/auth/user-
|
|
1245
|
-
var
|
|
1246
|
-
function
|
|
1255
|
+
// src/auth/user-session-manager.ts
|
|
1256
|
+
var DEFAULT_TOKEN_MIN_VALIDITY_MS = 60 * 1e3;
|
|
1257
|
+
function createUserSessionManager(config) {
|
|
1247
1258
|
return {
|
|
1248
|
-
async
|
|
1249
|
-
const localOrInjected = resolveNonStoredToken(config, "dreamboard-api");
|
|
1250
|
-
if (localOrInjected) return localOrInjected;
|
|
1251
|
-
if (!usesStoredSession(config)) return null;
|
|
1259
|
+
async establishRefreshableSession(session) {
|
|
1252
1260
|
return withCredentialLock(async (ops) => {
|
|
1253
|
-
const
|
|
1254
|
-
|
|
1255
|
-
if (apiToken) return apiToken;
|
|
1256
|
-
const clerk = await resolveFreshClerkAccessToken(config, stored);
|
|
1261
|
+
const credentials = credentialsFromRefreshableSession(session);
|
|
1262
|
+
await ops.writeFull(credentials);
|
|
1257
1263
|
const exchanged = await exchangeDreamboardUserToken({
|
|
1258
1264
|
apiBaseUrl: config.apiBaseUrl,
|
|
1259
|
-
clerkAccessToken:
|
|
1265
|
+
clerkAccessToken: credentials.accessToken,
|
|
1260
1266
|
audience: "dreamboard-api"
|
|
1261
1267
|
});
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1268
|
+
const apiToken = toAccessToken(exchanged);
|
|
1269
|
+
await ops.writeFull(withApiToken(credentials, apiToken));
|
|
1270
|
+
return apiToken;
|
|
1271
|
+
});
|
|
1272
|
+
},
|
|
1273
|
+
async establishAccessOnlySession(accessToken) {
|
|
1274
|
+
await withCredentialLock((ops) => ops.writeAccessOnly(accessToken));
|
|
1275
|
+
},
|
|
1276
|
+
async resolveApiToken(options) {
|
|
1277
|
+
const localOrInjected = resolveNonStoredToken(config, "dreamboard-api");
|
|
1278
|
+
if (localOrInjected) return localOrInjected;
|
|
1279
|
+
if (!usesStoredSession(config)) return null;
|
|
1280
|
+
const minValidityMs = options?.minValiditySeconds === void 0 ? DEFAULT_TOKEN_MIN_VALIDITY_MS : Math.max(0, options.minValiditySeconds * 1e3);
|
|
1281
|
+
return withCredentialLock(async (ops) => {
|
|
1282
|
+
const stored = await ops.read();
|
|
1283
|
+
return resolveStoredApiToken(ops, config, stored, minValidityMs);
|
|
1272
1284
|
});
|
|
1273
1285
|
},
|
|
1274
1286
|
async resolveGitToken() {
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
apiBaseUrl: config.apiBaseUrl,
|
|
1278
|
-
clerkAccessToken: config.authToken,
|
|
1279
|
-
audience: "dreamboard-git"
|
|
1280
|
-
});
|
|
1281
|
-
return {
|
|
1282
|
-
token: exchanged.accessToken,
|
|
1283
|
-
expiresAt: exchanged.expiresAt,
|
|
1284
|
-
audience: "dreamboard-git"
|
|
1285
|
-
};
|
|
1286
|
-
}
|
|
1287
|
+
const localOrInjected = resolveNonStoredToken(config, "dreamboard-git");
|
|
1288
|
+
if (localOrInjected) return localOrInjected;
|
|
1287
1289
|
if (!usesStoredSession(config)) {
|
|
1288
|
-
throw
|
|
1289
|
-
|
|
1290
|
+
throw missingSessionError();
|
|
1291
|
+
}
|
|
1292
|
+
return withCredentialLock(async (ops) => {
|
|
1293
|
+
const stored = await ops.read();
|
|
1294
|
+
const clerk = await resolveFreshClerkSession(ops, config, stored);
|
|
1295
|
+
return toAccessToken(
|
|
1296
|
+
await exchangeDreamboardUserToken({
|
|
1297
|
+
apiBaseUrl: config.apiBaseUrl,
|
|
1298
|
+
clerkAccessToken: clerk.accessToken,
|
|
1299
|
+
audience: "dreamboard-git"
|
|
1300
|
+
})
|
|
1290
1301
|
);
|
|
1302
|
+
});
|
|
1303
|
+
},
|
|
1304
|
+
async inspectSession() {
|
|
1305
|
+
const localOrInjected = resolveNonStoredToken(config, "dreamboard-api");
|
|
1306
|
+
if (localOrInjected) {
|
|
1307
|
+
return inspectAccessOnlyToken(localOrInjected);
|
|
1308
|
+
}
|
|
1309
|
+
if (!usesStoredSession(config)) {
|
|
1310
|
+
return { kind: "none" };
|
|
1291
1311
|
}
|
|
1292
1312
|
return withCredentialLock(async (ops) => {
|
|
1293
1313
|
const stored = await ops.read();
|
|
1294
|
-
|
|
1295
|
-
const
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1314
|
+
if (!stored) return { kind: "none" };
|
|
1315
|
+
const cached = freshStoredApiToken(
|
|
1316
|
+
stored,
|
|
1317
|
+
DEFAULT_TOKEN_MIN_VALIDITY_MS
|
|
1318
|
+
);
|
|
1319
|
+
if (cached) {
|
|
1320
|
+
return activeStatus("refreshable", cached, false);
|
|
1321
|
+
}
|
|
1322
|
+
try {
|
|
1323
|
+
const token = await resolveStoredApiToken(
|
|
1324
|
+
ops,
|
|
1325
|
+
config,
|
|
1326
|
+
stored,
|
|
1327
|
+
DEFAULT_TOKEN_MIN_VALIDITY_MS
|
|
1328
|
+
);
|
|
1329
|
+
return activeStatus("refreshable", token, true);
|
|
1330
|
+
} catch (error) {
|
|
1331
|
+
return failedRefreshableStatus(error);
|
|
1332
|
+
}
|
|
1306
1333
|
});
|
|
1307
1334
|
},
|
|
1308
1335
|
async logout() {
|
|
1309
|
-
await
|
|
1336
|
+
await withCredentialLock((ops) => ops.clear("logout_command"));
|
|
1310
1337
|
}
|
|
1311
1338
|
};
|
|
1312
1339
|
}
|
|
1340
|
+
async function resolveStoredApiToken(ops, config, stored, minValidityMs) {
|
|
1341
|
+
const cached = freshStoredApiToken(stored, minValidityMs);
|
|
1342
|
+
if (cached) return cached;
|
|
1343
|
+
const clerk = await resolveFreshClerkSession(ops, config, stored);
|
|
1344
|
+
const exchanged = await exchangeDreamboardUserToken({
|
|
1345
|
+
apiBaseUrl: config.apiBaseUrl,
|
|
1346
|
+
clerkAccessToken: clerk.accessToken,
|
|
1347
|
+
audience: "dreamboard-api"
|
|
1348
|
+
});
|
|
1349
|
+
const apiToken = toAccessToken(exchanged);
|
|
1350
|
+
await ops.writeFull(withApiToken(clerk, apiToken));
|
|
1351
|
+
return apiToken;
|
|
1352
|
+
}
|
|
1353
|
+
async function resolveFreshClerkSession(ops, config, stored) {
|
|
1354
|
+
if (!stored) {
|
|
1355
|
+
throw missingSessionError();
|
|
1356
|
+
}
|
|
1357
|
+
if (!stored.refreshToken) {
|
|
1358
|
+
throw new Error(
|
|
1359
|
+
"Stored Dreamboard session is missing its refresh token. Run `dreamboard auth login` to authenticate again."
|
|
1360
|
+
);
|
|
1361
|
+
}
|
|
1362
|
+
if (stored.accessToken && isFresh(
|
|
1363
|
+
stored.tokenExpiresAt,
|
|
1364
|
+
stored.accessToken,
|
|
1365
|
+
DEFAULT_TOKEN_MIN_VALIDITY_MS
|
|
1366
|
+
)) {
|
|
1367
|
+
return credentialsFromStored(config, stored);
|
|
1368
|
+
}
|
|
1369
|
+
const payload = await refreshClerkOAuthToken({
|
|
1370
|
+
config: {
|
|
1371
|
+
issuer: stored.clerkOAuthIssuer ?? config.clerkOAuthIssuer,
|
|
1372
|
+
clientId: stored.clerkOAuthClientId ?? config.clerkOAuthClientId,
|
|
1373
|
+
tokenUrl: stored.clerkOAuthTokenUrl ?? config.clerkOAuthTokenUrl
|
|
1374
|
+
},
|
|
1375
|
+
refreshToken: stored.refreshToken
|
|
1376
|
+
});
|
|
1377
|
+
const refreshed = {
|
|
1378
|
+
accessToken: payload.accessToken,
|
|
1379
|
+
refreshToken: payload.refreshToken,
|
|
1380
|
+
tokenExpiresAt: payload.expiresAt,
|
|
1381
|
+
dreamboardApiToken: stored.dreamboardApiToken,
|
|
1382
|
+
dreamboardApiExpiresAt: stored.dreamboardApiExpiresAt,
|
|
1383
|
+
clerkOAuthIssuer: stored.clerkOAuthIssuer ?? config.clerkOAuthIssuer,
|
|
1384
|
+
clerkOAuthClientId: stored.clerkOAuthClientId ?? config.clerkOAuthClientId,
|
|
1385
|
+
clerkOAuthTokenUrl: payload.tokenUrl,
|
|
1386
|
+
environment: stored.environment ?? config.environment
|
|
1387
|
+
};
|
|
1388
|
+
await ops.writeFull(refreshed);
|
|
1389
|
+
return refreshed;
|
|
1390
|
+
}
|
|
1391
|
+
function credentialsFromStored(config, stored) {
|
|
1392
|
+
if (!stored.accessToken || !stored.refreshToken) {
|
|
1393
|
+
throw missingSessionError();
|
|
1394
|
+
}
|
|
1395
|
+
return {
|
|
1396
|
+
accessToken: stored.accessToken,
|
|
1397
|
+
refreshToken: stored.refreshToken,
|
|
1398
|
+
tokenExpiresAt: stored.tokenExpiresAt,
|
|
1399
|
+
dreamboardApiToken: stored.dreamboardApiToken,
|
|
1400
|
+
dreamboardApiExpiresAt: stored.dreamboardApiExpiresAt,
|
|
1401
|
+
clerkOAuthIssuer: stored.clerkOAuthIssuer ?? config.clerkOAuthIssuer,
|
|
1402
|
+
clerkOAuthClientId: stored.clerkOAuthClientId ?? config.clerkOAuthClientId,
|
|
1403
|
+
clerkOAuthTokenUrl: stored.clerkOAuthTokenUrl ?? config.clerkOAuthTokenUrl,
|
|
1404
|
+
environment: stored.environment ?? config.environment
|
|
1405
|
+
};
|
|
1406
|
+
}
|
|
1407
|
+
function credentialsFromRefreshableSession(session) {
|
|
1408
|
+
return {
|
|
1409
|
+
accessToken: session.clerkAccessToken,
|
|
1410
|
+
refreshToken: session.refreshToken,
|
|
1411
|
+
tokenExpiresAt: session.clerkAccessExpiresAt,
|
|
1412
|
+
clerkOAuthIssuer: session.clerkOAuthIssuer,
|
|
1413
|
+
clerkOAuthClientId: session.clerkOAuthClientId,
|
|
1414
|
+
clerkOAuthTokenUrl: session.clerkOAuthTokenUrl,
|
|
1415
|
+
environment: session.environment
|
|
1416
|
+
};
|
|
1417
|
+
}
|
|
1418
|
+
function withApiToken(credentials, token) {
|
|
1419
|
+
return {
|
|
1420
|
+
...credentials,
|
|
1421
|
+
dreamboardApiToken: token.token,
|
|
1422
|
+
dreamboardApiExpiresAt: token.expiresAt
|
|
1423
|
+
};
|
|
1424
|
+
}
|
|
1425
|
+
function toAccessToken(token) {
|
|
1426
|
+
return {
|
|
1427
|
+
token: token.accessToken,
|
|
1428
|
+
expiresAt: token.expiresAt,
|
|
1429
|
+
audience: token.audience
|
|
1430
|
+
};
|
|
1431
|
+
}
|
|
1313
1432
|
function resolveNonStoredToken(config, audience) {
|
|
1314
1433
|
if (usesStoredSession(config)) return null;
|
|
1315
1434
|
if (!config.authToken) return null;
|
|
@@ -1319,9 +1438,13 @@ function resolveNonStoredToken(config, audience) {
|
|
|
1319
1438
|
audience
|
|
1320
1439
|
};
|
|
1321
1440
|
}
|
|
1322
|
-
function freshStoredApiToken(stored) {
|
|
1441
|
+
function freshStoredApiToken(stored, minValidityMs) {
|
|
1323
1442
|
if (!stored?.dreamboardApiToken) return null;
|
|
1324
|
-
if (isFresh(
|
|
1443
|
+
if (isFresh(
|
|
1444
|
+
stored.dreamboardApiExpiresAt,
|
|
1445
|
+
stored.dreamboardApiToken,
|
|
1446
|
+
minValidityMs
|
|
1447
|
+
)) {
|
|
1325
1448
|
return {
|
|
1326
1449
|
token: stored.dreamboardApiToken,
|
|
1327
1450
|
expiresAt: stored.dreamboardApiExpiresAt,
|
|
@@ -1330,49 +1453,60 @@ function freshStoredApiToken(stored) {
|
|
|
1330
1453
|
}
|
|
1331
1454
|
return null;
|
|
1332
1455
|
}
|
|
1333
|
-
|
|
1334
|
-
const
|
|
1335
|
-
|
|
1336
|
-
const tokenExpiresAt = stored?.tokenExpiresAt ?? config.clerkAccessExpiresAt;
|
|
1337
|
-
if (!refreshToken) {
|
|
1338
|
-
throw new Error(
|
|
1339
|
-
"Stored Dreamboard session is missing its refresh token. Run `dreamboard auth login` to authenticate again."
|
|
1340
|
-
);
|
|
1341
|
-
}
|
|
1342
|
-
if (accessToken && isFresh(tokenExpiresAt, accessToken)) {
|
|
1456
|
+
function inspectAccessOnlyToken(token) {
|
|
1457
|
+
const expiry = resolveExpiry(token.expiresAt, token.token);
|
|
1458
|
+
if (expiry && expiry.getTime() <= Date.now()) {
|
|
1343
1459
|
return {
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
dreamboardApiToken: stored?.dreamboardApiToken,
|
|
1348
|
-
dreamboardApiExpiresAt: stored?.dreamboardApiExpiresAt,
|
|
1349
|
-
clerkOAuthIssuer: stored?.clerkOAuthIssuer ?? config.clerkOAuthIssuer,
|
|
1350
|
-
clerkOAuthClientId: stored?.clerkOAuthClientId ?? config.clerkOAuthClientId,
|
|
1351
|
-
clerkOAuthTokenUrl: stored?.clerkOAuthTokenUrl ?? config.clerkOAuthTokenUrl,
|
|
1352
|
-
environment: stored?.environment ?? config.environment
|
|
1460
|
+
kind: "invalid",
|
|
1461
|
+
sessionKind: "access-only",
|
|
1462
|
+
message: "Stored Dreamboard access token is expired. Run `dreamboard auth login` to authenticate again."
|
|
1353
1463
|
};
|
|
1354
1464
|
}
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1465
|
+
return activeStatus("access-only", token, false);
|
|
1466
|
+
}
|
|
1467
|
+
function failedRefreshableStatus(error) {
|
|
1468
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
1469
|
+
const errorStatus = typeof error === "object" && error !== null && "status" in error ? error.status : void 0;
|
|
1470
|
+
const classification = classifyRefreshError({
|
|
1471
|
+
message,
|
|
1472
|
+
status: typeof errorStatus === "number" ? errorStatus : void 0
|
|
1362
1473
|
});
|
|
1474
|
+
if (classification.kind === "permanent_invalid") {
|
|
1475
|
+
return {
|
|
1476
|
+
kind: "invalid",
|
|
1477
|
+
sessionKind: "refreshable",
|
|
1478
|
+
message
|
|
1479
|
+
};
|
|
1480
|
+
}
|
|
1363
1481
|
return {
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
clerkOAuthIssuer: stored?.clerkOAuthIssuer ?? config.clerkOAuthIssuer,
|
|
1368
|
-
clerkOAuthClientId: stored?.clerkOAuthClientId ?? config.clerkOAuthClientId,
|
|
1369
|
-
clerkOAuthTokenUrl: payload.tokenUrl,
|
|
1370
|
-
environment: stored?.environment ?? config.environment
|
|
1482
|
+
kind: "degraded",
|
|
1483
|
+
sessionKind: "refreshable",
|
|
1484
|
+
message
|
|
1371
1485
|
};
|
|
1372
1486
|
}
|
|
1373
|
-
function
|
|
1374
|
-
|
|
1375
|
-
|
|
1487
|
+
function activeStatus(sessionKind, apiToken, repaired) {
|
|
1488
|
+
return {
|
|
1489
|
+
kind: "active",
|
|
1490
|
+
sessionKind,
|
|
1491
|
+
apiToken,
|
|
1492
|
+
repaired
|
|
1493
|
+
};
|
|
1494
|
+
}
|
|
1495
|
+
function missingSessionError() {
|
|
1496
|
+
return new Error(
|
|
1497
|
+
"Missing Dreamboard session. Run `dreamboard auth login` to authenticate."
|
|
1498
|
+
);
|
|
1499
|
+
}
|
|
1500
|
+
function isFresh(expiresAt, token, minValidityMs) {
|
|
1501
|
+
const expiry = resolveExpiry(expiresAt, token);
|
|
1502
|
+
return expiry !== null && Number.isFinite(expiry.getTime()) && expiry.getTime() > Date.now() + minValidityMs;
|
|
1503
|
+
}
|
|
1504
|
+
function resolveExpiry(expiresAt, token) {
|
|
1505
|
+
if (expiresAt) {
|
|
1506
|
+
const parsed = new Date(expiresAt);
|
|
1507
|
+
return Number.isFinite(parsed.getTime()) ? parsed : null;
|
|
1508
|
+
}
|
|
1509
|
+
return getJwtExpiry(token);
|
|
1376
1510
|
}
|
|
1377
1511
|
function getJwtExpiry(accessToken) {
|
|
1378
1512
|
if (!accessToken) return null;
|
|
@@ -1479,7 +1613,6 @@ function isLocalAwsUrl(rawUrl) {
|
|
|
1479
1613
|
}
|
|
1480
1614
|
|
|
1481
1615
|
// src/config/resolve.ts
|
|
1482
|
-
var DEFAULT_REFRESH_WINDOW_MS = 5 * 60 * 1e3;
|
|
1483
1616
|
var TRANSIENT_READ_RETRY_DELAYS_MS = [100, 300];
|
|
1484
1617
|
function resolveConfig(globalConfig, flags, project, credentials) {
|
|
1485
1618
|
if (IS_PUBLISHED_BUILD) {
|
|
@@ -1618,7 +1751,7 @@ function assertPublicRuntimeFlags(flags) {
|
|
|
1618
1751
|
}
|
|
1619
1752
|
async function configureClient(config) {
|
|
1620
1753
|
const localHarnessToken = resolveLocalHarnessAccessToken(config);
|
|
1621
|
-
const resolvedToken = localHarnessToken ? { token: localHarnessToken } : await
|
|
1754
|
+
const resolvedToken = localHarnessToken ? { token: localHarnessToken } : await createUserSessionManager(config).resolveApiToken();
|
|
1622
1755
|
const effectiveAccessToken = resolvedToken?.token;
|
|
1623
1756
|
client.setConfig({
|
|
1624
1757
|
baseUrl: config.apiBaseUrl,
|
|
@@ -1879,7 +2012,7 @@ Usage:
|
|
|
1879
2012
|
}
|
|
1880
2013
|
async function materializePreparedWorkspace(args) {
|
|
1881
2014
|
const inputPath = readRequiredOption(args, "--input");
|
|
1882
|
-
const { materializeWorkspaceProject } = await import("./materialize-workspace-
|
|
2015
|
+
const { materializeWorkspaceProject } = await import("./materialize-workspace-MAGKDMK5.mjs");
|
|
1883
2016
|
const input = JSON.parse(await readFile(inputPath, "utf8"));
|
|
1884
2017
|
await materializeWorkspaceProject({
|
|
1885
2018
|
...input,
|
|
@@ -1947,7 +2080,7 @@ async function runCloudLocalVerification(projectRoot, projectConfig, config) {
|
|
|
1947
2080
|
{ assertReducerContractPreflight },
|
|
1948
2081
|
{ getProjectLocalMaintainerRegistry }
|
|
1949
2082
|
] = await Promise.all([
|
|
1950
|
-
import("./static-scaffold-
|
|
2083
|
+
import("./static-scaffold-CLRRWXON.mjs"),
|
|
1951
2084
|
import("./local-files-OF4QFISU.mjs"),
|
|
1952
2085
|
import("./workspace-codegen-SPPVHURX.mjs"),
|
|
1953
2086
|
import("./workspace-dependencies-5HEEKZFP.mjs"),
|