You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.2 KiB
94 lines
2.2 KiB
// kinds.ts |
|
var BadgeAward = 8; |
|
var ProfileBadges = 30008; |
|
var BadgeDefinition = 30009; |
|
|
|
// nip58.ts |
|
function generateBadgeDefinitionEventTemplate({ |
|
d, |
|
description, |
|
image, |
|
name, |
|
thumbs |
|
}) { |
|
const tags = [["d", d]]; |
|
name && tags.push(["name", name]); |
|
description && tags.push(["description", description]); |
|
image && tags.push(["image", ...image]); |
|
if (thumbs) { |
|
for (const thumb of thumbs) { |
|
tags.push(["thumb", ...thumb]); |
|
} |
|
} |
|
const eventTemplate = { |
|
content: "", |
|
created_at: Math.floor(Date.now() / 1e3), |
|
kind: BadgeDefinition, |
|
tags |
|
}; |
|
return eventTemplate; |
|
} |
|
function validateBadgeDefinitionEvent(event) { |
|
if (event.kind !== BadgeDefinition) |
|
return false; |
|
const requiredTags = ["d"]; |
|
for (const tag of requiredTags) { |
|
if (!event.tags.find(([t]) => t == tag)) |
|
return false; |
|
} |
|
return true; |
|
} |
|
function generateBadgeAwardEventTemplate({ a, p }) { |
|
const tags = [["a", a]]; |
|
for (const _p of p) { |
|
tags.push(["p", ..._p]); |
|
} |
|
const eventTemplate = { |
|
content: "", |
|
created_at: Math.floor(Date.now() / 1e3), |
|
kind: BadgeAward, |
|
tags |
|
}; |
|
return eventTemplate; |
|
} |
|
function validateBadgeAwardEvent(event) { |
|
if (event.kind !== BadgeAward) |
|
return false; |
|
const requiredTags = ["a", "p"]; |
|
for (const tag of requiredTags) { |
|
if (!event.tags.find(([t]) => t == tag)) |
|
return false; |
|
} |
|
return true; |
|
} |
|
function generateProfileBadgesEventTemplate({ badges }) { |
|
const tags = [["d", "profile_badges"]]; |
|
for (const badge of badges) { |
|
tags.push(["a", badge.a], ["e", ...badge.e]); |
|
} |
|
const eventTemplate = { |
|
content: "", |
|
created_at: Math.floor(Date.now() / 1e3), |
|
kind: ProfileBadges, |
|
tags |
|
}; |
|
return eventTemplate; |
|
} |
|
function validateProfileBadgesEvent(event) { |
|
if (event.kind !== ProfileBadges) |
|
return false; |
|
const requiredTags = ["d"]; |
|
for (const tag of requiredTags) { |
|
if (!event.tags.find(([t]) => t == tag)) |
|
return false; |
|
} |
|
return true; |
|
} |
|
export { |
|
generateBadgeAwardEventTemplate, |
|
generateBadgeDefinitionEventTemplate, |
|
generateProfileBadgesEventTemplate, |
|
validateBadgeAwardEvent, |
|
validateBadgeDefinitionEvent, |
|
validateProfileBadgesEvent |
|
};
|
|
|