@httpland/coop-middleware
Version:
HTTP cross-origin opener policy(COOP) middleware
42 lines (41 loc) • 1.52 kB
JavaScript
;
// Copyright 2023-latest the httpland authors. All rights reserved. MIT license.
// This module is browser compatible.
Object.defineProperty(exports, "__esModule", { value: true });
exports.coop = void 0;
const constants_js_1 = require("./constants.js");
const deps_js_1 = require("./deps.js");
const utils_js_1 = require("./utils.js");
/** Create cross-origin opener policy middleware.
*
* @example
* ```ts
* import {
* coop,
* type Handler,
* } from "https://deno.land/x/coop_middleware@$VERSION/mod.ts";
* import { assert } from "https://deno.land/std/testing/asserts.ts";
*
* declare const request: Request;
* declare const handler: Handler;
*
* const middleware = coop();
* const response = await middleware(request, handler);
*
* assert(response.headers.has("cross-origin-opener-policy"));
* ```
*/
function coop(options) {
const { policy: value = constants_js_1.CrossOriginOpenerPolicyValue.SameOrigin, reportOnly, reportTo, } = options ?? {};
const fieldValue = (0, utils_js_1.stringifyCrossOriginOpenerPolicy)({ value, reportTo });
const fieldName = reportOnly
? constants_js_1.PolicyHeader.CrossOriginOpenerPolicyReportOnly
: constants_js_1.PolicyHeader.CrossOriginOpenerPolicy;
return async (request, next) => {
const response = await next(request);
if (response.headers.has(fieldName))
return response;
return (0, deps_js_1.withHeader)(response, fieldName, fieldValue);
};
}
exports.coop = coop;