Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .changeset/cloudflare-integration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
"@varlock/cloudflare-integration": patch
"@varlock/vite-integration": patch
---

New `@varlock/cloudflare-integration` package for Cloudflare Workers

- `varlockCloudflareVitePlugin()` — Vite plugin that reads secrets from Cloudflare bindings at runtime instead of bundling them into worker code
- `varlock-wrangler` CLI — drop-in wrangler replacement that uploads non-sensitive values as vars and sensitive values as secrets on deploy; injects env into miniflare via Unix named pipe in dev; watches .env files for changes; generates correct Env types
- `@varlock/cloudflare-integration/init` — standalone init module for non-Vite workers
Refactors `@varlock/vite-integration` to remove Cloudflare-specific logic and add generic extension points (`ssrEntryCode`, `ssrEdgeRuntime`, `ssrEntryModuleIds`) for platform integrations.
29 changes: 10 additions & 19 deletions .github/workflows/framework-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ jobs:
outputs:
any-changed: ${{ steps.detect.outputs.any-changed }}
integrations: ${{ steps.detect.outputs.integrations }}
# Per-integration flags — add new ones here as integrations are added
nextjs: ${{ steps.detect.outputs.nextjs }}
steps:
- uses: actions/checkout@v6

Expand All @@ -33,10 +31,7 @@ jobs:
id: detect
run: |
if [[ "${{ github.event.inputs.force-all }}" == "true" ]] || [[ "${{ contains(github.event.pull_request.labels.*.name, 'framework-tests') }}" == "true" ]]; then
# Force all integrations
echo "any-changed=true" >> "$GITHUB_OUTPUT"
echo 'integrations=["nextjs"]' >> "$GITHUB_OUTPUT"
echo "nextjs=true" >> "$GITHUB_OUTPUT"
bun run scripts/detect-changed-integrations.ts --all
else
bun run scripts/detect-changed-integrations.ts
fi
Expand Down Expand Up @@ -83,19 +78,15 @@ jobs:
packages/integrations/*/dist/
retention-days: 1

# ──────────────────────────────────────────────────────
# Next.js framework tests
# To add a new integration, copy this job block and update:
# 1. Job name and if-condition to reference the new integration flag
# 2. The vitest filter pattern to match the new test directory
# 3. Add the integration flag output in detect-integrations job
# 4. Add the package mapping in scripts/detect-changed-integrations.ts
# ──────────────────────────────────────────────────────
test-nextjs:
name: Framework Tests (Next.js)
test:
name: Framework Tests (${{ matrix.integration }})
needs: [detect-integrations, build]
if: needs.detect-integrations.outputs.nextjs == 'true'
if: needs.detect-integrations.outputs.any-changed == 'true'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
integration: ${{ fromJson(needs.detect-integrations.outputs.integrations) }}
steps:
- uses: actions/checkout@v6

Expand Down Expand Up @@ -128,6 +119,6 @@ jobs:
with:
name: built-repo

- name: Run Next.js framework tests
run: cd framework-tests && bun run vitest run --reporter=verbose frameworks/nextjs/
- name: Run ${{ matrix.integration }} framework tests
run: cd framework-tests && bun run vitest run --reporter=verbose frameworks/${{ matrix.integration }}/
timeout-minutes: 15
96 changes: 94 additions & 2 deletions bun.lock

Large diffs are not rendered by default.

119 changes: 119 additions & 0 deletions framework-tests/frameworks/cloudflare/cloudflare-vite.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
/*
Tests varlock + cloudflare integration using the cloudflare vite plugin (and our wrapper)
*/
import {
describe, beforeAll, afterAll,
} from 'vitest';
import { FrameworkTestEnv } from '../../harness/index';

describe('Cloudflare Workers w/ vite plugin', () => {
const cloudflareViteEnv = new FrameworkTestEnv({
testDir: import.meta.dirname,
framework: 'cloudflare-vite',
packageManager: 'bun',
dependencies: {
varlock: 'will-be-replaced',
'@varlock/cloudflare-integration': 'will-be-replaced',
vite: '^6',
wrangler: '^4',
'@cloudflare/vite-plugin': '^1',
},
templateFiles: {
'.env.schema': 'schemas/.env.schema',
'.env.dev': 'schemas/.env.dev',
},
});
beforeAll(() => cloudflareViteEnv.setup(), 180_000);
afterAll(() => cloudflareViteEnv.teardown());

cloudflareViteEnv.describeDevScenario('basic worker', {
command: 'vite dev --port 15173',
readyPattern: /Local:\s+http/,
readyTimeout: 30_000,
templateFiles: {
'src/index.ts': 'workers/basic-worker.ts',
'vite.config.ts': 'vite-configs/vite.config.ts',
'wrangler.jsonc': '_base-wrangler/wrangler.jsonc',
'tsconfig.json': '_base-wrangler/tsconfig.json',
},
requests: [
{
path: '/',
bodyAssertions: {
shouldContain: [
// varlock ENV proxy - non-sensitive
'public_var::public-test-value',
'api_url::https://api.example.com',
// varlock ENV proxy - sensitive (accessible but value not leaked)
'has_sensitive::yes',
// cloudflare native env access
'native_public_var::public-test-value',
'native_has_secret::yes',
],
shouldNotContain: ['super-secret-value'],
},
},
],
outputAssertions: [
{
description: 'sensitive value is redacted in console output',
shouldContain: ['secret-log-test::'],
shouldNotContain: ['super-secret-value'],
},
],
});

cloudflareViteEnv.describeDevScenario('leaky worker', {
command: 'vite dev --port 15174',
readyPattern: /Local:\s+http/,
readyTimeout: 30_000,
templateFiles: {
'src/index.ts': 'workers/leaky-worker.ts',
'vite.config.ts': 'vite-configs/vite.config.ts',
'wrangler.jsonc': '_base-wrangler/wrangler.jsonc',
'tsconfig.json': '_base-wrangler/tsconfig.json',
},
requests: [
{
path: '/',
expectedStatus: 500,
bodyAssertions: {
shouldNotContain: ['super-secret-value'],
},
},
],
outputAssertions: [
{
description: 'leak detection message appears',
shouldContain: ['DETECTED LEAKED SENSITIVE CONFIG'],
},
],
});

cloudflareViteEnv.describeDevScenario('large env (chunking)', {
command: 'vite dev --port 15175',
readyPattern: /Local:\s+http/,
readyTimeout: 30_000,
templateFiles: {
'src/index.ts': 'workers/large-env-worker.ts',
'vite.config.ts': 'vite-configs/vite.config.ts',
'wrangler.jsonc': '_base-wrangler/wrangler.jsonc',
'tsconfig.json': '_base-wrangler/tsconfig.json',
'.env.schema': 'schemas/.env.schema.large',
},
requests: [
{
path: '/',
bodyAssertions: {
shouldContain: [
'public_var::public-test-value',
// two 3000-char vars — verify they survived __VARLOCK_ENV chunking
'large_var_a_length::3000',
'large_var_b_length::3000',
'has_secret::yes',
],
},
},
],
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"compilerOptions": {
"target": "ES2022",
"module": "ES2022",
"moduleResolution": "bundler",
"strict": true,
"noEmit": true,
"skipLibCheck": true
},
"include": ["src/**/*.ts"]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"name": "test-worker",
"main": "src/index.ts",
"compatibility_date": "2024-09-23",
"compatibility_flags": ["nodejs_compat"]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
APP_ENV=dev
12 changes: 12 additions & 0 deletions framework-tests/frameworks/cloudflare/files/schemas/.env.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# @defaultSensitive=false @defaultRequired=infer
# @currentEnv=$APP_ENV
# ---

# @type=enum(dev, prod)
APP_ENV=dev

PUBLIC_VAR=public-test-value
API_URL=https://api.example.com

# @sensitive
SECRET_KEY=super-secret-value
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# @defaultSensitive=false @defaultRequired=infer
# @currentEnv=$APP_ENV
# ---

# @type=enum(dev, prod)
APP_ENV=dev

PUBLIC_VAR=public-test-value
API_URL=https://api.example.com

# @sensitive
SECRET_KEY=super-secret-value

# two large vars to push __VARLOCK_ENV over the 5KB CF secret limit and trigger chunking
LARGE_VAR_A=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
LARGE_VAR_B=BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { defineConfig } from 'vite';
import { varlockCloudflareVitePlugin } from '@varlock/cloudflare-integration';

export default defineConfig({
plugins: [varlockCloudflareVitePlugin()],
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { ENV } from 'varlock/env';

export default {
async fetch(_request: Request, env: Record<string, string>): Promise<Response> {
// this should be redacted in varlock-wrangler output
console.log('secret-log-test::', ENV.SECRET_KEY);

return new Response([
// varlock ENV proxy - non-sensitive vars
`public_var::${ENV.PUBLIC_VAR}`,
`api_url::${ENV.API_URL}`,
// varlock ENV proxy - sensitive var (check accessible without leaking value)
`has_sensitive::${ENV.SECRET_KEY ? 'yes' : 'no'}`,
// cloudflare native env access (injected by varlock-wrangler --env-file)
`native_public_var::${env.PUBLIC_VAR}`,
`native_has_secret::${env.SECRET_KEY ? 'yes' : 'no'}`,
].join('\n'));
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { ENV } from 'varlock/env';

export default {
async fetch(): Promise<Response> {
return new Response([
`public_var::${ENV.PUBLIC_VAR}`,
`large_var_a_length::${ENV.LARGE_VAR_A?.length ?? 0}`,
`large_var_b_length::${ENV.LARGE_VAR_B?.length ?? 0}`,
`has_secret::${ENV.SECRET_KEY ? 'yes' : 'no'}`,
].join('\n'));
},
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { ENV } from 'varlock/env';

export default {
async fetch(): Promise<Response> {
// Deliberately leak the sensitive value in the response body
return new Response(`SECRET_KEY=${ENV.SECRET_KEY}`);
},
};
Loading
Loading