accounts
Version:
Tempo Accounts SDK
42 lines • 1.7 kB
JavaScript
import { Provider } from 'ox';
import * as z from 'zod/mini';
import { flattenIssues } from './internal/zodIssues.js';
import * as Schema from './Schema.js';
import * as Request from './zod/request.js';
import * as Rpc from './zod/rpc.js';
const metadata = z.object({
id: z.optional(z.union([z.string(), z.number(), z.null()])),
jsonrpc: z.optional(z.literal('2.0')),
origin: z.optional(z.string()),
});
export function parse(value, options = {}) {
const request = Request.validate(Schema.Request, value)._decoded;
if (options.method && request.method !== options.method)
throw new Provider.ProviderRpcError(-32602, `Method mismatch: expected "${options.method}" but got "${request.method}".`);
if (options.strict ?? true)
validateParameters(request);
return {
...request,
...parseMetadata(value),
};
}
function parseMetadata(value) {
const result = z.safeParse(metadata, value);
if (result.error)
throw new Provider.ProviderRpcError(-32600, `Invalid request: ${formatIssues(result.error.issues)}`);
return result.data;
}
function validateParameters(request) {
const schema = Rpc.strictParameters[request.method];
if (!schema || !('params' in request) || request.params?.[0] == null)
return;
const result = z.safeParse(schema, request.params[0]);
if (result.error)
throw new Provider.ProviderRpcError(-32602, `Invalid params: ${formatIssues(result.error.issues)}`);
}
function formatIssues(issues) {
return flattenIssues(issues)
.map((issue) => `${issue.path.map(String).join('.')}: ${issue.message}`)
.join(', ');
}
//# sourceMappingURL=ProviderRequest.js.map