Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | 1x 68x 1x | import { z } from "zod";
import { Metadata } from "../domain/ast.js";
import {
absRefValueRegex,
destRegex,
markRegex,
metricsRegex,
relRefValueRegex,
sourceRegex,
} from "./regex.js";
interface Tx {
ref: string;
use?: string;
asset: string;
sources: string[];
destinations: string[];
}
interface Tr8Script {
id: string;
type: "REQ" | "PARTIAL_NOTIF" | "NOTIF";
metadata: Metadata;
txs: Tx[];
metrics: string[];
callbackUrl: string;
}
const metadataSchema: z.ZodSchema<Metadata> = z.lazy(() =>
z.record(z.union([z.string(), z.array(z.string()), metadataSchema])),
);
const scriptParser = z.object({
id: z.string(),
type: z.union([
z.literal("REQ"),
z.literal("PARTIAL_NOTIF"),
z.literal("NOTIF"),
]),
metadata: metadataSchema,
txs: z.array(
z.object({
ref: z.union([
z.string().regex(absRefValueRegex),
z.string().regex(relRefValueRegex),
]),
use: z.string().regex(markRegex).optional(),
asset: z.string(),
sources: z.array(z.string().regex(sourceRegex)),
destinations: z.array(z.string().regex(destRegex)),
}),
),
metrics: z.array(z.string().regex(metricsRegex)),
callbackUrl: z.string().url(),
});
export { scriptParser };
export type { Tr8Script };
|