UNPKG

@nucypher/taco

Version:

### [`nucypher/taco-web`](../../README.md)

66 lines 2.36 kB
import { JSONPath } from '@astronautlabs/jsonpath'; import { USER_ADDRESS_PARAM_DEFAULT } from '@nucypher/taco-auth'; import { z } from 'zod'; import { CONTEXT_PARAM_PREFIX, CONTEXT_PARAM_REGEXP } from '../const'; // We want to discriminate between ContextParams and plain strings // If a string starts with `:`, it's a ContextParam export const plainStringSchema = z .string() .refine((str) => { return !str.startsWith(CONTEXT_PARAM_PREFIX); }, { message: `String must not be a context parameter i.e. not start with "${CONTEXT_PARAM_PREFIX}"`, }) .describe(`Any string that is not a Context Parameter i.e. does not start with \`${CONTEXT_PARAM_PREFIX}\`.`); export const UserAddressSchema = z .literal(USER_ADDRESS_PARAM_DEFAULT) .describe('This is a context variable that will be replaced at decryption time. It represents the Ethereum address of the requester attempting decryption.'); export const baseConditionSchema = z.object({ conditionType: z.string(), }); // Source: https://github.com/colinhacks/zod/issues/831#issuecomment-1063481764 const createUnion = (values) => { const zodLiterals = values.map((value) => z.literal(value)); return z.union(zodLiterals); }; function createUnionSchema(values) { if (values.length === 0) { return z.never(); } if (values.length === 1) { return z.literal(values[0]); } return createUnion(values); } export default createUnionSchema; const validateJSONPath = (jsonPath) => { // account for embedded context variables if (CONTEXT_PARAM_REGEXP.test(jsonPath)) { // skip validation return true; } try { JSONPath.parse(jsonPath); return true; } catch (error) { return false; } }; export const jsonPathSchema = z .string() .refine((val) => validateJSONPath(val), { message: 'Invalid JSONPath expression', }) .describe('A string containing either a valid JSON Path Expression, or a Context Parameter.'); const validateHttpsURL = (url) => { return URL.canParse(url) && url.startsWith('https://'); }; // Use our own URL refinement check due to https://github.com/colinhacks/zod/issues/2236 export const httpsURLSchema = z .string() .url() .refine((url) => validateHttpsURL(url), { message: 'Invalid URL', }); //# sourceMappingURL=common.js.map