@nucypher/taco
Version:
### [`nucypher/taco-web`](../../README.md)
66 lines • 2.36 kB
JavaScript
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