UNPKG

accounts

Version:

Tempo Accounts SDK

42 lines 1.7 kB
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