forked from jsnbuchanan/crowd-funder-for-time-pwa
New branch for cleanup and web push
This commit is contained in:
@@ -112,27 +112,15 @@ export function isHiddenDid(did: string) {
|
|||||||
/**
|
/**
|
||||||
always returns text, maybe UNNAMED_VISIBLE or UNKNOWN_ENTITY
|
always returns text, maybe UNNAMED_VISIBLE or UNKNOWN_ENTITY
|
||||||
**/
|
**/
|
||||||
export function didInfo(
|
export function didInfo(did: string, activeDid: string, allMyDids: string[], contacts: Contact[]): string {
|
||||||
did: string,
|
const myId = R.find(R.equals(did), allMyDids);
|
||||||
activeDid: string,
|
if (myId) return `You${myId !== activeDid ? " (Alt ID)" : ""}`;
|
||||||
allMyDids: Array<string>,
|
|
||||||
contacts: Array<Contact>,
|
const contact = R.find(c => c.did === did, contacts);
|
||||||
): string {
|
return contact ? contact.name || "Someone Unnamed in Contacts" :
|
||||||
const myId: string | undefined = R.find(R.equals(did), allMyDids);
|
!did ? "Unspecified Person" :
|
||||||
if (myId) {
|
isHiddenDid(did) ? "Someone Not In Network" :
|
||||||
return "You" + (myId !== activeDid ? " (Alt ID)" : "");
|
"Someone Not In Contacts";
|
||||||
} else {
|
|
||||||
const contact: Contact | undefined = R.find((c) => c.did === did, contacts);
|
|
||||||
if (contact) {
|
|
||||||
return contact.name || "Someone Unnamed in Contacts";
|
|
||||||
} else if (!did) {
|
|
||||||
return "Unspecified Person";
|
|
||||||
} else if (isHiddenDid(did)) {
|
|
||||||
return "Someone Not In Network";
|
|
||||||
} else {
|
|
||||||
return "Someone Not In Contacts";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ResultWithType {
|
export interface ResultWithType {
|
||||||
@@ -171,30 +159,16 @@ export async function createAndSubmitGive(
|
|||||||
fulfillsProjectHandleId?: string,
|
fulfillsProjectHandleId?: string,
|
||||||
): Promise<CreateAndSubmitGiveResult> {
|
): Promise<CreateAndSubmitGiveResult> {
|
||||||
try {
|
try {
|
||||||
// Make a claim
|
|
||||||
const vcClaim: GiveVerifiableCredential = {
|
const vcClaim: GiveVerifiableCredential = {
|
||||||
"@context": "https://schema.org",
|
"@context": "https://schema.org",
|
||||||
"@type": "GiveAction",
|
"@type": "GiveAction",
|
||||||
|
recipient: toDid ? { identifier: toDid } : undefined,
|
||||||
|
agent: fromDid ? { identifier: fromDid } : undefined,
|
||||||
|
description: description || undefined,
|
||||||
|
object: hours ? { amountOfThisGood: hours, unitCode: "HUR" } : undefined,
|
||||||
|
fulfills: fulfillsProjectHandleId ? { "@type": "PlanAction", identifier: fulfillsProjectHandleId } : undefined,
|
||||||
};
|
};
|
||||||
if (toDid) {
|
|
||||||
vcClaim.recipient = { identifier: toDid };
|
|
||||||
}
|
|
||||||
if (fromDid) {
|
|
||||||
vcClaim.agent = { identifier: fromDid };
|
|
||||||
}
|
|
||||||
if (description) {
|
|
||||||
vcClaim.description = description;
|
|
||||||
}
|
|
||||||
if (hours) {
|
|
||||||
vcClaim.object = { amountOfThisGood: hours, unitCode: "HUR" };
|
|
||||||
}
|
|
||||||
if (fulfillsProjectHandleId) {
|
|
||||||
vcClaim.fulfills = {
|
|
||||||
"@type": "PlanAction",
|
|
||||||
identifier: fulfillsProjectHandleId,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
// Make a payload for the claim
|
|
||||||
const vcPayload = {
|
const vcPayload = {
|
||||||
vc: {
|
vc: {
|
||||||
"@context": ["https://www.w3.org/2018/credentials/v1"],
|
"@context": ["https://www.w3.org/2018/credentials/v1"],
|
||||||
@@ -205,14 +179,7 @@ export async function createAndSubmitGive(
|
|||||||
|
|
||||||
// Create a signature using private key of identity
|
// Create a signature using private key of identity
|
||||||
const firstKey = identity.keys[0];
|
const firstKey = identity.keys[0];
|
||||||
if (!firstKey || !firstKey.privateKeyHex) {
|
const privateKeyHex = firstKey?.privateKeyHex;
|
||||||
throw {
|
|
||||||
error: "No private key",
|
|
||||||
message: `Your identifier ${identity.did} is not configured correctly. Use a different identifier.`,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
const privateKeyHex = firstKey.privateKeyHex;
|
|
||||||
|
|
||||||
if (!privateKeyHex) {
|
if (!privateKeyHex) {
|
||||||
throw {
|
throw {
|
||||||
@@ -222,56 +189,40 @@ export async function createAndSubmitGive(
|
|||||||
}
|
}
|
||||||
|
|
||||||
const signer = await SimpleSigner(privateKeyHex);
|
const signer = await SimpleSigner(privateKeyHex);
|
||||||
const alg = undefined;
|
|
||||||
|
|
||||||
// Create a JWT for the request
|
// Create a JWT for the request
|
||||||
|
|
||||||
const vcJwt: string = await didJwt.createJWT(vcPayload, {
|
const vcJwt: string = await didJwt.createJWT(vcPayload, {
|
||||||
alg: alg,
|
|
||||||
issuer: identity.did,
|
issuer: identity.did,
|
||||||
signer: signer,
|
signer,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Make the xhr request payload
|
// Make the xhr request payload
|
||||||
|
|
||||||
const payload = JSON.stringify({ jwtEncoded: vcJwt });
|
const payload = JSON.stringify({ jwtEncoded: vcJwt });
|
||||||
const url = apiServer + "/api/v2/claim";
|
const url = `${apiServer}/api/v2/claim`;
|
||||||
const token = await accessToken(identity);
|
const token = await accessToken(identity);
|
||||||
const headers = {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
Authorization: "Bearer " + token,
|
|
||||||
};
|
|
||||||
|
|
||||||
const response = await axios.post(url, payload, { headers });
|
const response = await axios.post(url, payload, {
|
||||||
return {
|
headers: {
|
||||||
type: "success",
|
"Content-Type": "application/json",
|
||||||
response,
|
Authorization: `Bearer ${token}`,
|
||||||
};
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return { type: "success", response };
|
||||||
|
|
||||||
} catch (error: unknown) {
|
} catch (error: unknown) {
|
||||||
let errorMessage: string;
|
const errorMessage: string =
|
||||||
|
error instanceof Error ? error.message :
|
||||||
if (error instanceof Error) {
|
(typeof error === "object" && error?.message) ? error.message :
|
||||||
// If it's a JavaScript Error object
|
"Unknown error";
|
||||||
errorMessage = error.message;
|
|
||||||
} else if (
|
|
||||||
typeof error === "object" &&
|
|
||||||
error !== null &&
|
|
||||||
"message" in error
|
|
||||||
) {
|
|
||||||
// If it's an object that has a 'message' property
|
|
||||||
errorMessage = (error as { message: string }).message;
|
|
||||||
} else {
|
|
||||||
// Unknown error shape, default message
|
|
||||||
errorMessage = "Unknown error";
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
type: "error",
|
type: "error",
|
||||||
error: {
|
error: {
|
||||||
error: errorMessage,
|
error: errorMessage,
|
||||||
userMessage: "Failed to create and submit the claim.",
|
userMessage: "Failed to create and submit the claim."
|
||||||
},
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user