36 lines
1.2 KiB
JavaScript
36 lines
1.2 KiB
JavaScript
import { readFile } from 'node:fs/promises';
|
|
import path from 'node:path';
|
|
import { fail, pass, repositoryRoot } from './lib.mjs';
|
|
|
|
const failures = [];
|
|
const example = await readFile(path.join(repositoryRoot, '.env.example'), 'utf8');
|
|
const implementation = await readFile(
|
|
path.join(repositoryRoot, 'src/lib/integrations/environment.ts'),
|
|
'utf8',
|
|
);
|
|
const keys = [
|
|
'NEXT_PUBLIC_DEMO_ENABLED',
|
|
'DEMO_SUBMISSION_MODE',
|
|
'DEMO_REQUEST_TIMEOUT_MS',
|
|
'DEMO_IDEMPOTENCY_TTL_SECONDS',
|
|
'DEMO_TEST_SCENARIOS_ENABLED',
|
|
'DEMO_LOCAL_TEST_MODE',
|
|
'NEXT_PUBLIC_ANALYTICS_MODE',
|
|
];
|
|
for (const key of keys) {
|
|
if (!example.includes(`${key}=`)) failures.push(`.env.example omits ${key}.`);
|
|
if (!implementation.includes(key)) failures.push(`Environment validator omits ${key}.`);
|
|
}
|
|
if (!example.includes('DEMO_SUBMISSION_MODE=blocked')) {
|
|
failures.push('Safe production example does not default demo submission to blocked.');
|
|
}
|
|
if (!example.includes('NEXT_PUBLIC_ANALYTICS_MODE=disabled')) {
|
|
failures.push('Safe production example does not default analytics to disabled.');
|
|
}
|
|
|
|
if (failures.length) fail(failures);
|
|
else
|
|
pass(
|
|
'Phase 14 environment inventory is explicit and defaults production integrations to blocked.',
|
|
);
|