fix(agentstack): reject malformed CoinPay DIDs (#83)

This commit is contained in:
RissRIce 2026-06-22 06:24:46 -06:00 committed by GitHub
parent 895bb9989e
commit 2f07f74126
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 15 additions and 12 deletions

View file

@ -26,11 +26,12 @@ describe("DID helpers", () => {
expect(parseDid(agentDid("abc"))).toEqual({ kind: "agent", id: "abc" }); expect(parseDid(agentDid("abc"))).toEqual({ kind: "agent", id: "abc" });
}); });
it("rejects non-CoinPay DIDs", () => { it("rejects non-CoinPay DIDs", () => {
expect(parseDid("did:web:example.com")).toBeNull(); expect(parseDid("did:web:example.com")).toBeNull();
expect(parseDid("did:coinpay:bot:abc")).toBeNull(); expect(parseDid("did:coinpay:bot:abc")).toBeNull();
}); expect(parseDid("did:coinpay:user:abc:extra")).toBeNull();
}); });
});
describe("AgentStack manifest", () => { describe("AgentStack manifest", () => {
it("is a valid LogicSRC plugin manifest", () => { it("is a valid LogicSRC plugin manifest", () => {

View file

@ -22,13 +22,15 @@ export const userDid = (id: string) => makeDid("user", id);
export const agentDid = (id: string) => makeDid("agent", id); export const agentDid = (id: string) => makeDid("agent", id);
/** Parse a CoinPay DID into its kind and id, or return null if it is not one. */ /** Parse a CoinPay DID into its kind and id, or return null if it is not one. */
export function parseDid(did: string): { kind: DidKind; id: string } | null { export function parseDid(did: string): { kind: DidKind; id: string } | null {
const prefix = `${DID_METHOD}:`; const prefix = `${DID_METHOD}:`;
if (!did.startsWith(prefix)) return null; if (!did.startsWith(prefix)) return null;
const [kind, id] = did.slice(prefix.length).split(":"); const parts = did.slice(prefix.length).split(":");
if ((kind !== "user" && kind !== "agent") || !id) return null; if (parts.length !== 2) return null;
return { kind, id }; const [kind, id] = parts;
} if ((kind !== "user" && kind !== "agent") || !id) return null;
return { kind, id };
}
export function isDidTask(value: unknown): value is DidTask { export function isDidTask(value: unknown): value is DidTask {
return ( return (