Commit 0f3325b1 by tdgiang

Correct plan text: token-expiry headroom scaling + NODE_ENV fix for scratch scripts

Two rulings made during Task 4 execution (see ledger): the early-refresh
headroom now scales with token TTL instead of a flat 60s (a flat skew made
the test's short-TTL token already "expired" the instant it was cached),
and every scratch script that requires config/config.js now sets NODE_ENV
before requiring it (the app's real entrypoint always resolves this via
config/init first; the plan's scratch scripts had bypassed that).
Co-Authored-By: 's avatarClaude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017KPzWwuTEeX2vXGXvyGn4q
parent 1011a015
......@@ -407,6 +407,7 @@ cat > scratch/test-sobanle-config.js << 'EOF'
"use strict";
require("dotenv").config({ path: require("path").join(__dirname, "../.env") });
global.__config_path = __dirname + "/../config";
process.env.NODE_ENV = process.env.NODE_ENV || "production";
var config = require("../config/config");
console.log("sobanle block exists:", !!config.sobanle);
......@@ -485,6 +486,7 @@ cat > scratch/test-sobanle-client-token.js << 'EOF'
"use strict";
var http = require("http");
global.__config_path = require("path").join(__dirname, "../config");
process.env.NODE_ENV = process.env.NODE_ENV || "production";
var config = require("../config/config");
var loginCallCount = 0;
......@@ -552,8 +554,12 @@ function login(callback) {
return callback(new Error("SOBANLE_LOGIN_FAILED"));
}
tokenCache.token = body.access_token;
// refresh 60s before real expiry to avoid racing a near-expiry token
tokenCache.expiresAt = Date.now() + (body.expires_in || 0) * 1000 - 60000;
var expiresInMs = (body.expires_in || 0) * 1000;
// Refresh a bit early to avoid racing a near-expiry token. Headroom scales
// with the token's own TTL (capped at 60s) rather than a flat 60s, so a
// short-TTL token isn't already "expired" the instant it's cached.
var earlyRefreshMs = Math.min(60000, expiresInMs * 0.1);
tokenCache.expiresAt = Date.now() + expiresInMs - earlyRefreshMs;
callback(null, body.access_token);
});
}
......@@ -608,6 +614,7 @@ cat > scratch/test-sobanle-client-api.js << 'EOF'
"use strict";
var http = require("http");
global.__config_path = require("path").join(__dirname, "../config");
process.env.NODE_ENV = process.env.NODE_ENV || "production";
var config = require("../config/config");
var loginCalls = 0;
......@@ -833,6 +840,7 @@ cat > scratch/test-sobanle-client-auto-order.js << 'EOF'
"use strict";
var http = require("http");
global.__config_path = require("path").join(__dirname, "../config");
process.env.NODE_ENV = process.env.NODE_ENV || "production";
var config = require("../config/config");
var salesCalls = 0;
......@@ -954,6 +962,7 @@ cat > scratch/test-admin-transaction-sobanle-field.js << 'EOF'
require("dotenv").config();
var mongoose = require("mongoose");
global.__config_path = __dirname + "/../config";
process.env.NODE_ENV = process.env.NODE_ENV || "production";
var config = require("../config/config");
mongoose.connect(config.mongoUri, { useNewUrlParser: true, useUnifiedTopology: true });
......@@ -1041,6 +1050,7 @@ cat > scratch/test-admin-create-transaction-sobanle.js << 'EOF'
require("dotenv").config();
var mongoose = require("mongoose");
global.__config_path = __dirname + "/../config";
process.env.NODE_ENV = process.env.NODE_ENV || "production";
var config = require("../config/config");
mongoose.connect(config.mongoUri, { useNewUrlParser: true, useUnifiedTopology: true });
......@@ -1238,6 +1248,7 @@ cat > scratch/test-admin-epay-ipn-sobanle.js << 'EOF'
require("dotenv").config();
var mongoose = require("mongoose");
global.__config_path = __dirname + "/../config";
process.env.NODE_ENV = process.env.NODE_ENV || "production";
var config = require("../config/config");
var epaySign = require("../app/libs/epaySign");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment