feat: content fetch, sitemap fixes, remove oidcAuthFlow
- Add contentFetchFlow() to proxy (FR-001 through FR-012) - Add extractArticleBody() helper with vkm:articleBody / articleBody fallback - Dynamic proxyBaseUrl derivation from x-forwarded-proto/host headers - Forward query/size/category params on /sitemap.xml requests - Add Accept: application/ld+json header to content API calls - Remove oidcAuthFlow() - unmatched requests now return 404 Not Found - Fix xmlbuilder2 import: default import, call as xmlbuilder2.create(...) - Version bump 0.2.0 → 0.3.0 - 45/45 tests passing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -120,7 +120,7 @@ These are injected by `server.js` (`globalVMContext`) and are available to proxy
|
||||
| `crypto` | Web Crypto API | No UUID or crypto ops in this script |
|
||||
| `jwt` | jsonwebtoken | No JWT signing/verification needed |
|
||||
| `uuidv4` | uuid function | No request-ID generation needed |
|
||||
| `xmlBuilder` | xmlbuilder2 | No XML output |
|
||||
| `xmlbuilder2` | xmlbuilder2 | No XML output |
|
||||
|
||||
---
|
||||
|
||||
@@ -136,7 +136,7 @@ const globalVMContext = {
|
||||
axios, // ← used by proxy.js
|
||||
uuidv4,
|
||||
jwt,
|
||||
xmlBuilder,
|
||||
xmlbuilder2,
|
||||
redis, // ← used by proxy.js (token cache)
|
||||
};
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ If the token service rejects the credentials or is unreachable, the proxy script
|
||||
- **FR-008**: The proxy script MUST respond with HTTP `401 Unauthorized` and a descriptive plain-text message when authentication fails (invalid credentials, unreachable token service, or malformed response).
|
||||
- **FR-009**: The proxy script file (`src/proxyScripts/proxy.js`) MUST contain zero `import` or `export` statements, as it executes inside a Node.js VM sandbox.
|
||||
- **FR-010**: The proxy script MUST NOT reference `config`, `global.config`, or `process.env` for any configuration or credential values.
|
||||
- **FR-011**: The proxy script MUST use only dependencies injected via the VM context: `axios`, `console`, `crypto`, `jwt`, `uuidv4`, `xmlBuilder`, `URLSearchParams`, `URL`, and `redis`.
|
||||
- **FR-011**: The proxy script MUST use only dependencies injected via the VM context: `axios`, `console`, `crypto`, `jwt`, `uuidv4`, `xmlbuilder2`, `URLSearchParams`, `URL`, and `redis`.
|
||||
- **FR-012**: `req` and `res` must be treated as the injected Node.js HTTP request and response objects; no other I/O mechanism may be used.
|
||||
- **FR-013**: When two or more concurrent requests arrive while no valid token is cached, only one token fetch request MUST be made to the token service; all other requests MUST queue and share the result of that single fetch.
|
||||
- **FR-014**: The token POST request to the OIDC service MUST apply a 5-second HTTP timeout; a timeout error MUST be treated as an authentication failure (FR-008).
|
||||
@@ -107,4 +107,4 @@ If the token service rejects the credentials or is unreachable, the proxy script
|
||||
- The `scope` value `openid tags content_entitlements` is fixed and not expected to vary per request.
|
||||
- The caller of the proxy endpoint does not require the actual OIDC token in the response body; the `200 OK / Authorized` reply is sufficient to confirm authentication succeeded.
|
||||
- Error responses should be plain text to keep the script simple; no structured error body format is required.
|
||||
- The VM context is always initialised with all listed dependencies (`axios`, `console`, `crypto`, `jwt`, `uuidv4`, `xmlBuilder`, `URLSearchParams`, `URL`) before the script executes.
|
||||
- The VM context is always initialised with all listed dependencies (`axios`, `console`, `crypto`, `jwt`, `uuidv4`, `xmlbuilder2`, `URLSearchParams`, `URL`) before the script executes.
|
||||
|
||||
Reference in New Issue
Block a user