ses
Version:
Hardened JavaScript for Fearless Cooperation
38 lines (33 loc) • 1.41 kB
JavaScript
// @ts-check
// We import this first to fail as fast as possible if the shim has been
// transformed or embedded in a way that causes it to run in sloppy mode.
// See https://github.com/endojs/endo/blob/master/packages/ses/error-codes/SES_NO_SLOPPY.md
import './assert-sloppy-mode.js';
import { globalThis } from './commons.js';
import { repairIntrinsics } from './lockdown.js';
/** @import {LockdownOptions} from '../types.js' */
/**
* @param {LockdownOptions} [options]
*/
globalThis.lockdown = options => {
const hardenIntrinsics = repairIntrinsics(options);
globalThis.harden = hardenIntrinsics();
};
/**
* @param {LockdownOptions} [options]
*/
globalThis.repairIntrinsics = options => {
const hardenIntrinsics = repairIntrinsics(options);
// Reveal hardenIntrinsics after repairs.
globalThis.hardenIntrinsics = () => {
// Reveal harden after hardenIntrinsics.
// Harden is dangerous before hardenIntrinsics because hardening just
// about anything will inadvertently render intrinsics irreparable.
// Also, for modules that must work both before or after lockdown (code
// that is portable between JS and SES), the existence of harden in global
// scope signals whether such code should attempt to use harden in the
// defense of its own API.
// @ts-ignore harden not yet recognized on globalThis.
globalThis.harden = hardenIntrinsics();
};
};