mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-02 04:10:23 +00:00
refactor(plugin-sdk): share auth, routing, and stream/account helpers
This commit is contained in:
@@ -3,6 +3,11 @@ type RouteLike = {
|
||||
sessionKey: string;
|
||||
};
|
||||
|
||||
type RoutePeerLike = {
|
||||
kind: string;
|
||||
id: string | number;
|
||||
};
|
||||
|
||||
export function createInboundEnvelopeBuilder<TConfig, TEnvelope>(params: {
|
||||
cfg: TConfig;
|
||||
route: RouteLike;
|
||||
@@ -39,3 +44,107 @@ export function createInboundEnvelopeBuilder<TConfig, TEnvelope>(params: {
|
||||
return { storePath, body };
|
||||
};
|
||||
}
|
||||
|
||||
export function resolveInboundRouteEnvelopeBuilder<
|
||||
TConfig,
|
||||
TEnvelope,
|
||||
TRoute extends RouteLike,
|
||||
>(params: {
|
||||
cfg: TConfig;
|
||||
channel: string;
|
||||
accountId: string;
|
||||
peer: RoutePeerLike;
|
||||
resolveAgentRoute: (params: {
|
||||
cfg: TConfig;
|
||||
channel: string;
|
||||
accountId: string;
|
||||
peer: RoutePeerLike;
|
||||
}) => TRoute;
|
||||
sessionStore?: string;
|
||||
resolveStorePath: (store: string | undefined, opts: { agentId: string }) => string;
|
||||
readSessionUpdatedAt: (params: { storePath: string; sessionKey: string }) => number | undefined;
|
||||
resolveEnvelopeFormatOptions: (cfg: TConfig) => TEnvelope;
|
||||
formatAgentEnvelope: (params: {
|
||||
channel: string;
|
||||
from: string;
|
||||
timestamp?: number;
|
||||
previousTimestamp?: number;
|
||||
envelope: TEnvelope;
|
||||
body: string;
|
||||
}) => string;
|
||||
}): {
|
||||
route: TRoute;
|
||||
buildEnvelope: ReturnType<typeof createInboundEnvelopeBuilder<TConfig, TEnvelope>>;
|
||||
} {
|
||||
const route = params.resolveAgentRoute({
|
||||
cfg: params.cfg,
|
||||
channel: params.channel,
|
||||
accountId: params.accountId,
|
||||
peer: params.peer,
|
||||
});
|
||||
const buildEnvelope = createInboundEnvelopeBuilder({
|
||||
cfg: params.cfg,
|
||||
route,
|
||||
sessionStore: params.sessionStore,
|
||||
resolveStorePath: params.resolveStorePath,
|
||||
readSessionUpdatedAt: params.readSessionUpdatedAt,
|
||||
resolveEnvelopeFormatOptions: params.resolveEnvelopeFormatOptions,
|
||||
formatAgentEnvelope: params.formatAgentEnvelope,
|
||||
});
|
||||
return { route, buildEnvelope };
|
||||
}
|
||||
|
||||
type InboundRouteEnvelopeRuntime<TConfig, TEnvelope, TRoute extends RouteLike> = {
|
||||
routing: {
|
||||
resolveAgentRoute: (params: {
|
||||
cfg: TConfig;
|
||||
channel: string;
|
||||
accountId: string;
|
||||
peer: RoutePeerLike;
|
||||
}) => TRoute;
|
||||
};
|
||||
session: {
|
||||
resolveStorePath: (store: string | undefined, opts: { agentId: string }) => string;
|
||||
readSessionUpdatedAt: (params: { storePath: string; sessionKey: string }) => number | undefined;
|
||||
};
|
||||
reply: {
|
||||
resolveEnvelopeFormatOptions: (cfg: TConfig) => TEnvelope;
|
||||
formatAgentEnvelope: (params: {
|
||||
channel: string;
|
||||
from: string;
|
||||
timestamp?: number;
|
||||
previousTimestamp?: number;
|
||||
envelope: TEnvelope;
|
||||
body: string;
|
||||
}) => string;
|
||||
};
|
||||
};
|
||||
|
||||
export function resolveInboundRouteEnvelopeBuilderWithRuntime<
|
||||
TConfig,
|
||||
TEnvelope,
|
||||
TRoute extends RouteLike,
|
||||
>(params: {
|
||||
cfg: TConfig;
|
||||
channel: string;
|
||||
accountId: string;
|
||||
peer: RoutePeerLike;
|
||||
runtime: InboundRouteEnvelopeRuntime<TConfig, TEnvelope, TRoute>;
|
||||
sessionStore?: string;
|
||||
}): {
|
||||
route: TRoute;
|
||||
buildEnvelope: ReturnType<typeof createInboundEnvelopeBuilder<TConfig, TEnvelope>>;
|
||||
} {
|
||||
return resolveInboundRouteEnvelopeBuilder({
|
||||
cfg: params.cfg,
|
||||
channel: params.channel,
|
||||
accountId: params.accountId,
|
||||
peer: params.peer,
|
||||
resolveAgentRoute: (routeParams) => params.runtime.routing.resolveAgentRoute(routeParams),
|
||||
sessionStore: params.sessionStore,
|
||||
resolveStorePath: params.runtime.session.resolveStorePath,
|
||||
readSessionUpdatedAt: params.runtime.session.readSessionUpdatedAt,
|
||||
resolveEnvelopeFormatOptions: params.runtime.reply.resolveEnvelopeFormatOptions,
|
||||
formatAgentEnvelope: params.runtime.reply.formatAgentEnvelope,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user