mirror of
https://github.com/morluto/rea.git
synced 2026-10-31 20:06:14 +00:00
36 lines
1.3 KiB
TypeScript
36 lines
1.3 KiB
TypeScript
import type { AnalysisOperation } from "./AnalysisProvider.js";
|
|
import { AnalysisOutputError } from "../domain/analysisErrorCore.js";
|
|
import type { AnalysisError } from "../domain/analysisErrorBase.js";
|
|
import type { JsonValue } from "../domain/jsonValue.js";
|
|
import { err, ok, type Result } from "../domain/result.js";
|
|
|
|
type AnalysisCall = (
|
|
operation: AnalysisOperation,
|
|
parameters: Readonly<Record<string, JsonValue>>,
|
|
signal?: AbortSignal,
|
|
) => Promise<Result<JsonValue, AnalysisError>>;
|
|
|
|
/** Resolve a caller selector to an observed provider procedure identity. */
|
|
export const resolveProcedureAddress = async (
|
|
call: AnalysisCall,
|
|
procedure: string,
|
|
signal?: AbortSignal,
|
|
): Promise<Result<string, AnalysisError>> => {
|
|
const result = await call("procedure_address", { procedure }, signal);
|
|
if (!result.ok) return result;
|
|
return parseProcedureAddress(result.value);
|
|
};
|
|
|
|
/** Validate the provider-owned canonical identity without changing its source value. */
|
|
export const parseProcedureAddress = (
|
|
value: JsonValue,
|
|
): Result<string, AnalysisError> =>
|
|
typeof value === "string" && value.length > 0
|
|
? ok(value)
|
|
: err(
|
|
new AnalysisOutputError(
|
|
"procedure_address",
|
|
"provider returned no canonical procedure address",
|
|
),
|
|
);
|