@sentroy-co/client-sdk 2.12.0 → 2.13.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/AGENTS.md +14 -0
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +34 -6
- package/dist/vault/index.js.map +1 -1
- package/package.json +1 -1
- package/src/vault/index.ts +41 -5
package/AGENTS.md
CHANGED
|
@@ -767,6 +767,20 @@ function ConfigPanel() {
|
|
|
767
767
|
| `apiKey` | `string` | `process.env.NEXT_PUBLIC_SENTROY_ENV_API_KEY` | Bearer token for browser polling |
|
|
768
768
|
| `refreshIntervalMs` | `number` | `300000` (5 min) | `0` to disable polling |
|
|
769
769
|
|
|
770
|
+
### Debug logging (`SENTROY_ENV_DEBUG`)
|
|
771
|
+
|
|
772
|
+
Set `SENTROY_ENV_DEBUG=1` (or `true`) on the consuming app to surface every fetch, cache hit, and fallback through `console.log`. Sample output:
|
|
773
|
+
|
|
774
|
+
```
|
|
775
|
+
[env-vault] fetching https://sentroy.com/api/env-vault/fetch
|
|
776
|
+
[env-vault] fetched 7 var(s) from sentroy-core/prod in 234ms
|
|
777
|
+
[env-vault] BETTER_AUTH_TURNSTILE_SECRET: vault hit
|
|
778
|
+
[env-vault] IPINFO_TOKEN: vault miss → process.env fallback
|
|
779
|
+
[env-vault] AI_GATEWAY_API_KEY: vault error (...) → process.env fallback
|
|
780
|
+
```
|
|
781
|
+
|
|
782
|
+
Default is off — turn on temporarily after a deploy to verify migrations are reading from the right source, then turn off to keep prod logs clean.
|
|
783
|
+
|
|
770
784
|
### Migration helper: `getEnvWithFallback(key)`
|
|
771
785
|
|
|
772
786
|
For codebases moving from `process.env` to vault gradually, use `getEnvWithFallback` — it tries vault first, falls back to `process.env[key]` on cache miss / fetch failure / missing token. The point is *zero downtime*: deploy the code change before populating the vault, and nothing breaks; fill the vault later, and the same code starts reading from there.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vault/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;CACpB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vault/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;CACpB;AAsBD,UAAU,aAAa;IACrB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAcD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,aAAkB,GAAG,IAAI,CAYpE;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,8EAA8E;AAC9E,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAGrD;AAED,2EAA2E;AAC3E,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhD;AAmED;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAGrE;AAED,8EAA8E;AAC9E,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAwB7B;AAED,4DAA4D;AAC5D,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAKlE;AAED,gEAAgE;AAChE,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAOrE;AAID,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,wBAAwB,CAAA;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACtC,qDAAqD;IACrD,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,eAAe;IACf,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,gCAAgC;IAC/C;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACjE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AA8BD;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gCAAgC,GACxC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAmDzC"}
|
package/dist/vault/index.js
CHANGED
|
@@ -38,6 +38,21 @@ exports.getPublicEnvs = getPublicEnvs;
|
|
|
38
38
|
exports.createVaultWebhookHandler = createVaultWebhookHandler;
|
|
39
39
|
const DEFAULT_TTL_MS = 5 * 60 * 1000;
|
|
40
40
|
const DEFAULT_BASE_URL = "https://sentroy.com";
|
|
41
|
+
/**
|
|
42
|
+
* Opt-in runtime logging — `SENTROY_ENV_DEBUG=1` set edilirse her fetch
|
|
43
|
+
* (success/fail), cache hit ve fallback satırı stdout'a yazılır. Default
|
|
44
|
+
* kapalı; migration verification + prod sorunu debug için.
|
|
45
|
+
*/
|
|
46
|
+
function isDebug() {
|
|
47
|
+
const v = readEnv("SENTROY_ENV_DEBUG");
|
|
48
|
+
return v === "1" || v === "true";
|
|
49
|
+
}
|
|
50
|
+
function debugLog(...parts) {
|
|
51
|
+
if (isDebug()) {
|
|
52
|
+
// eslint-disable-next-line no-console
|
|
53
|
+
console.log("[env-vault]", ...parts);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
41
56
|
let resolvedBaseUrl = DEFAULT_BASE_URL;
|
|
42
57
|
let resolvedApiKey;
|
|
43
58
|
let cacheTtlMs = DEFAULT_TTL_MS;
|
|
@@ -90,12 +105,15 @@ async function fetchVariables() {
|
|
|
90
105
|
"Set it on the platform (Coolify env) or call configureEnvClient({ apiKey: ... }) at boot.");
|
|
91
106
|
}
|
|
92
107
|
const url = `${resolvedBaseUrl}/api/env-vault/fetch`;
|
|
108
|
+
const started = Date.now();
|
|
109
|
+
debugLog(`fetching ${url}`);
|
|
93
110
|
const res = await fetch(url, {
|
|
94
111
|
headers: { Authorization: `Bearer ${resolvedApiKey}` },
|
|
95
112
|
signal: AbortSignal.timeout(fetchTimeoutMs),
|
|
96
113
|
cache: "no-store",
|
|
97
114
|
});
|
|
98
115
|
if (!res.ok) {
|
|
116
|
+
debugLog(`fetch failed: ${res.status} ${res.statusText} (${Date.now() - started}ms)`);
|
|
99
117
|
throw new Error(`env-vault fetch failed: ${res.status} ${res.statusText} (url=${url})`);
|
|
100
118
|
}
|
|
101
119
|
const json = (await res.json());
|
|
@@ -104,6 +122,7 @@ async function fetchVariables() {
|
|
|
104
122
|
const map = new Map();
|
|
105
123
|
for (const v of json.data.variables)
|
|
106
124
|
map.set(v.key, v);
|
|
125
|
+
debugLog(`fetched ${map.size} var(s) from ${json.data.project}/${json.data.environment} in ${Date.now() - started}ms`);
|
|
107
126
|
return {
|
|
108
127
|
fetchedAt: Date.now(),
|
|
109
128
|
variables: map,
|
|
@@ -170,17 +189,26 @@ async function getEnvOrThrow(key) {
|
|
|
170
189
|
async function getEnvWithFallback(key) {
|
|
171
190
|
// Token yoksa bypass — vault fetch denemeyelim, log spam etmeyelim.
|
|
172
191
|
const apiKey = resolvedApiKey ?? readEnv("SENTROY_ENV_API_KEY");
|
|
173
|
-
if (!apiKey)
|
|
174
|
-
|
|
192
|
+
if (!apiKey) {
|
|
193
|
+
const pe = readEnv(key);
|
|
194
|
+
debugLog(`${key}: no-token bypass → ${pe !== undefined ? "process.env hit" : "miss"}`);
|
|
195
|
+
return pe;
|
|
196
|
+
}
|
|
175
197
|
try {
|
|
176
198
|
const v = await getEnv(key);
|
|
177
|
-
if (v !== undefined)
|
|
199
|
+
if (v !== undefined) {
|
|
200
|
+
debugLog(`${key}: vault hit`);
|
|
178
201
|
return v;
|
|
202
|
+
}
|
|
203
|
+
const pe = readEnv(key);
|
|
204
|
+
debugLog(`${key}: vault miss → ${pe !== undefined ? "process.env fallback" : "undefined"}`);
|
|
205
|
+
return pe;
|
|
179
206
|
}
|
|
180
|
-
catch {
|
|
181
|
-
|
|
207
|
+
catch (err) {
|
|
208
|
+
const pe = readEnv(key);
|
|
209
|
+
debugLog(`${key}: vault error (${err instanceof Error ? err.message : String(err)}) → ${pe !== undefined ? "process.env fallback" : "undefined"}`);
|
|
210
|
+
return pe;
|
|
182
211
|
}
|
|
183
|
-
return readEnv(key);
|
|
184
212
|
}
|
|
185
213
|
/** Tüm env'leri map olarak döner (dump için kullanışlı). */
|
|
186
214
|
async function getAllEnvs() {
|
package/dist/vault/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vault/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vault/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;AA+DH,gDAYC;AAGD,wCAEC;AAGD,0CAGC;AAGD,gCAEC;AAwED,wBAGC;AAGD,sCAQC;AAmBD,gDA0BC;AAGD,gCAKC;AAGD,sCAOC;AA2ED,8DAqDC;AAhWD,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;AACpC,MAAM,gBAAgB,GAAG,qBAAqB,CAAA;AAE9C;;;;GAIG;AACH,SAAS,OAAO;IACd,MAAM,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACtC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,MAAM,CAAA;AAClC,CAAC;AAED,SAAS,QAAQ,CAAC,GAAG,KAAgB;IACnC,IAAI,OAAO,EAAE,EAAE,CAAC;QACd,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,KAAK,CAAC,CAAA;IACtC,CAAC;AACH,CAAC;AAaD,IAAI,eAAe,GAAG,gBAAgB,CAAA;AACtC,IAAI,cAAkC,CAAA;AACtC,IAAI,UAAU,GAAG,cAAc,CAAA;AAC/B,IAAI,cAAc,GAAG,IAAI,CAAA;AACzB,IAAI,KAAK,GAAyB,IAAI,CAAA;AACtC,IAAI,cAAc,GAAyB,IAAI,CAAA;AAE/C,SAAS,OAAO,CAAC,IAAY;IAC3B,IAAI,OAAO,OAAO,KAAK,WAAW;QAAE,OAAO,SAAS,CAAA;IACpD,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,UAAyB,EAAE;IAC5D,IAAI,OAAO,CAAC,OAAO;QAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;;QAExE,eAAe,GAAG,CAChB,OAAO,CAAC,iCAAiC,CAAC;YAC1C,OAAO,CAAC,qBAAqB,CAAC;YAC9B,OAAO,CAAC,0BAA0B,CAAC;YACnC,gBAAgB,CACjB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACvB,cAAc,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAA;IACjE,IAAI,OAAO,CAAC,UAAU;QAAE,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAA;IAC9D,IAAI,OAAO,CAAC,SAAS;QAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAA;AAC3D,CAAC;AAED,8EAA8E;AAC9E,SAAgB,cAAc,CAAC,OAAe;IAC5C,UAAU,GAAG,OAAO,GAAG,IAAI,CAAA;AAC7B,CAAC;AAED,8EAA8E;AACvE,KAAK,UAAU,eAAe;IACnC,KAAK,GAAG,IAAI,CAAA;IACZ,MAAM,WAAW,EAAE,CAAA;AACrB,CAAC;AAED,2EAA2E;AACpE,KAAK,UAAU,UAAU;IAC9B,MAAM,WAAW,EAAE,CAAA;AACrB,CAAC;AAED,KAAK,UAAU,cAAc;IAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,iEAAiE;QACjE,kBAAkB,EAAE,CAAA;IACtB,CAAC;IACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,gEAAgE;YAC9D,2FAA2F,CAC9F,CAAA;IACH,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,eAAe,sBAAsB,CAAA;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC1B,QAAQ,CAAC,YAAY,GAAG,EAAE,CAAC,CAAA;IAC3B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,cAAc,EAAE,EAAE;QACtD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC;QAC3C,KAAK,EAAE,UAAU;KAClB,CAAC,CAAA;IACF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,QAAQ,CAAC,iBAAiB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,KAAK,CAAC,CAAA;QACrF,MAAM,IAAI,KAAK,CACb,2BAA2B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,SAAS,GAAG,GAAG,CACvE,CAAA;IACH,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAM7B,CAAA;IACD,IAAI,CAAC,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACtE,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAA;IAC1C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS;QAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACtD,QAAQ,CACN,WAAW,GAAG,CAAC,IAAI,gBAAgB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,IAAI,CAC7G,CAAA;IACD,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,SAAS,EAAE,GAAG;QACd,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;QAC1B,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;KACnC,CAAA;AACH,CAAC;AAED,KAAK,UAAU,WAAW;IACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,IAAI,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,UAAU;QAAE,OAAO,KAAK,CAAA;IAC7D,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,cAAc,CAAA;QACpB,IAAI,KAAK;YAAE,OAAO,KAAK,CAAA;IACzB,CAAC;IACD,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;QAC3B,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,cAAc,EAAE,CAAA;QAChC,CAAC;gBAAS,CAAC;YACT,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IACJ,MAAM,cAAc,CAAA;IACpB,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;IAC9D,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,MAAM,CAAC,GAAW;IACtC,MAAM,CAAC,GAAG,MAAM,WAAW,EAAE,CAAA;IAC7B,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,CAAA;AACpC,CAAC;AAED,8EAA8E;AACvE,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAA;IAC3B,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,gCAAgC,GAAG,4BAA4B,KAAK,EAAE,OAAO,IAAI,GAAG,SAAS,KAAK,EAAE,WAAW,IAAI,GAAG,GAAG,CAC1H,CAAA;IACH,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACI,KAAK,UAAU,kBAAkB,CACtC,GAAW;IAEX,oEAAoE;IACpE,MAAM,MAAM,GAAG,cAAc,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAA;IAC/D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QACvB,QAAQ,CAAC,GAAG,GAAG,uBAAuB,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QACtF,OAAO,EAAE,CAAA;IACX,CAAC;IACD,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,QAAQ,CAAC,GAAG,GAAG,aAAa,CAAC,CAAA;YAC7B,OAAO,CAAC,CAAA;QACV,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QACvB,QAAQ,CAAC,GAAG,GAAG,kBAAkB,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;QAC3F,OAAO,EAAE,CAAA;IACX,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QACvB,QAAQ,CACN,GAAG,GAAG,kBAAkB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,WAAW,EAAE,CACzI,CAAA;QACD,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,4DAA4D;AACrD,KAAK,UAAU,UAAU;IAC9B,MAAM,CAAC,GAAG,MAAM,WAAW,EAAE,CAAA;IAC7B,MAAM,GAAG,GAA2B,EAAE,CAAA;IACtC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAA;IAClD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,gEAAgE;AACzD,KAAK,UAAU,aAAa;IACjC,MAAM,CAAC,GAAG,MAAM,WAAW,EAAE,CAAA;IAC7B,MAAM,GAAG,GAA2B,EAAE,CAAA;IACtC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,MAAM;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAA;IAChC,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAkCD,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;AAExC,KAAK,UAAU,kBAAkB,CAAC,CAAS,EAAE,CAAS;IACpD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACvC,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;IAC3C,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,CAAA;AACnB,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,MAAc,EAAE,IAAY;IACvD,sDAAsD;IACtD,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;IACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CACvC,KAAK,EACL,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EACtB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EACjC,KAAK,EACL,CAAC,MAAM,CAAC,CACT,CAAA;IACD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IACvE,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;IACjC,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC7D,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,yBAAyB,CACvC,OAAyC;IAEzC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,kBAAkB,CAAA;IACvD,OAAO,KAAK,EAAE,OAAgB,EAAE,EAAE;QAChC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAA;QAClE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;QACtD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,QAAQ,CAAC,iDAAiD,EAAE;gBACrE,MAAM,EAAE,GAAG;aACZ,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;QAC1C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAA;QACjC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAC1D,IAAI,CAAC,CAAC,MAAM,kBAAkB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;YACvD,OAAO,IAAI,QAAQ,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC5D,CAAC;QAED,IAAI,OAA4B,CAAA;QAChC,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAwB,CAAA;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,QAAQ,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,CAAA;YACjD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,QAAQ,EAAE,CAAC;gBACvD,OAAO,IAAI,QAAQ,CAAC,6CAA6C,EAAE;oBACjE,MAAM,EAAE,GAAG;iBACZ,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YACjC,CAAC;iBAAM,CAAC;gBACN,MAAM,eAAe,EAAE,CAAA;YACzB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,QAAQ,CACjB,kBAAkB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACpE,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;QACH,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;YAChD,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
package/src/vault/index.ts
CHANGED
|
@@ -42,6 +42,23 @@ export interface EnvCacheState {
|
|
|
42
42
|
const DEFAULT_TTL_MS = 5 * 60 * 1000
|
|
43
43
|
const DEFAULT_BASE_URL = "https://sentroy.com"
|
|
44
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Opt-in runtime logging — `SENTROY_ENV_DEBUG=1` set edilirse her fetch
|
|
47
|
+
* (success/fail), cache hit ve fallback satırı stdout'a yazılır. Default
|
|
48
|
+
* kapalı; migration verification + prod sorunu debug için.
|
|
49
|
+
*/
|
|
50
|
+
function isDebug(): boolean {
|
|
51
|
+
const v = readEnv("SENTROY_ENV_DEBUG")
|
|
52
|
+
return v === "1" || v === "true"
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function debugLog(...parts: unknown[]): void {
|
|
56
|
+
if (isDebug()) {
|
|
57
|
+
// eslint-disable-next-line no-console
|
|
58
|
+
console.log("[env-vault]", ...parts)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
45
62
|
interface ClientOptions {
|
|
46
63
|
/** Sentroy core URL (defaults to env or https://sentroy.com). */
|
|
47
64
|
baseUrl?: string
|
|
@@ -111,12 +128,15 @@ async function fetchVariables(): Promise<EnvCacheState> {
|
|
|
111
128
|
)
|
|
112
129
|
}
|
|
113
130
|
const url = `${resolvedBaseUrl}/api/env-vault/fetch`
|
|
131
|
+
const started = Date.now()
|
|
132
|
+
debugLog(`fetching ${url}`)
|
|
114
133
|
const res = await fetch(url, {
|
|
115
134
|
headers: { Authorization: `Bearer ${resolvedApiKey}` },
|
|
116
135
|
signal: AbortSignal.timeout(fetchTimeoutMs),
|
|
117
136
|
cache: "no-store",
|
|
118
137
|
})
|
|
119
138
|
if (!res.ok) {
|
|
139
|
+
debugLog(`fetch failed: ${res.status} ${res.statusText} (${Date.now() - started}ms)`)
|
|
120
140
|
throw new Error(
|
|
121
141
|
`env-vault fetch failed: ${res.status} ${res.statusText} (url=${url})`,
|
|
122
142
|
)
|
|
@@ -131,6 +151,9 @@ async function fetchVariables(): Promise<EnvCacheState> {
|
|
|
131
151
|
if (!json.data) throw new Error("env-vault fetch: malformed response")
|
|
132
152
|
const map = new Map<string, EnvVariable>()
|
|
133
153
|
for (const v of json.data.variables) map.set(v.key, v)
|
|
154
|
+
debugLog(
|
|
155
|
+
`fetched ${map.size} var(s) from ${json.data.project}/${json.data.environment} in ${Date.now() - started}ms`,
|
|
156
|
+
)
|
|
134
157
|
return {
|
|
135
158
|
fetchedAt: Date.now(),
|
|
136
159
|
variables: map,
|
|
@@ -201,14 +224,27 @@ export async function getEnvWithFallback(
|
|
|
201
224
|
): Promise<string | undefined> {
|
|
202
225
|
// Token yoksa bypass — vault fetch denemeyelim, log spam etmeyelim.
|
|
203
226
|
const apiKey = resolvedApiKey ?? readEnv("SENTROY_ENV_API_KEY")
|
|
204
|
-
if (!apiKey)
|
|
227
|
+
if (!apiKey) {
|
|
228
|
+
const pe = readEnv(key)
|
|
229
|
+
debugLog(`${key}: no-token bypass → ${pe !== undefined ? "process.env hit" : "miss"}`)
|
|
230
|
+
return pe
|
|
231
|
+
}
|
|
205
232
|
try {
|
|
206
233
|
const v = await getEnv(key)
|
|
207
|
-
if (v !== undefined)
|
|
208
|
-
|
|
209
|
-
|
|
234
|
+
if (v !== undefined) {
|
|
235
|
+
debugLog(`${key}: vault hit`)
|
|
236
|
+
return v
|
|
237
|
+
}
|
|
238
|
+
const pe = readEnv(key)
|
|
239
|
+
debugLog(`${key}: vault miss → ${pe !== undefined ? "process.env fallback" : "undefined"}`)
|
|
240
|
+
return pe
|
|
241
|
+
} catch (err) {
|
|
242
|
+
const pe = readEnv(key)
|
|
243
|
+
debugLog(
|
|
244
|
+
`${key}: vault error (${err instanceof Error ? err.message : String(err)}) → ${pe !== undefined ? "process.env fallback" : "undefined"}`,
|
|
245
|
+
)
|
|
246
|
+
return pe
|
|
210
247
|
}
|
|
211
|
-
return readEnv(key)
|
|
212
248
|
}
|
|
213
249
|
|
|
214
250
|
/** Tüm env'leri map olarak döner (dump için kullanışlı). */
|