@atproto/api
Version:
Client library for atproto and Bluesky
90 lines • 3.8 kB
JavaScript
import { AppBskyAgeassuranceDefs } from './client/index.js';
import { ids } from './client/lexicons.js';
export const ageAssuranceRuleIDs = {
Default: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleDefault`,
IfDeclaredOverAge: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfDeclaredOverAge`,
IfDeclaredUnderAge: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfDeclaredUnderAge`,
IfAssuredOverAge: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfAssuredOverAge`,
IfAssuredUnderAge: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfAssuredUnderAge`,
IfAccountNewerThan: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfAccountNewerThan`,
IfAccountOlderThan: `${ids.AppBskyAgeassuranceDefs}#configRegionRuleIfAccountOlderThan`,
};
/**
* Returns the first matched region configuration based on the provided geolocation.
*/
export function getAgeAssuranceRegionConfig(config, geolocation) {
const { regions } = config;
return regions.find(({ countryCode, regionCode }) => {
if (countryCode === geolocation.countryCode) {
return !regionCode || regionCode === geolocation.regionCode;
}
});
}
export function computeAgeAssuranceRegionAccess(region, data) {
// first match wins
for (const rule of region.rules) {
if (AppBskyAgeassuranceDefs.isConfigRegionRuleIfAccountNewerThan(rule)) {
if (data?.accountCreatedAt && !data?.assuredAge) {
const accountCreatedAt = new Date(data.accountCreatedAt);
const threshold = new Date(rule.date);
if (accountCreatedAt >= threshold) {
return {
access: rule.access,
reason: rule.$type,
};
}
}
}
else if (AppBskyAgeassuranceDefs.isConfigRegionRuleIfAccountOlderThan(rule)) {
if (data?.accountCreatedAt && !data?.assuredAge) {
const accountCreatedAt = new Date(data.accountCreatedAt);
const threshold = new Date(rule.date);
if (accountCreatedAt < threshold) {
return {
access: rule.access,
reason: rule.$type,
};
}
}
}
else if (AppBskyAgeassuranceDefs.isConfigRegionRuleIfDeclaredOverAge(rule)) {
if (data?.declaredAge !== undefined && data.declaredAge >= rule.age) {
return {
access: rule.access,
reason: rule.$type,
};
}
}
else if (AppBskyAgeassuranceDefs.isConfigRegionRuleIfDeclaredUnderAge(rule)) {
if (data?.declaredAge !== undefined && data.declaredAge < rule.age) {
return {
access: rule.access,
reason: rule.$type,
};
}
}
else if (AppBskyAgeassuranceDefs.isConfigRegionRuleIfAssuredOverAge(rule)) {
if (data?.assuredAge && data.assuredAge >= rule.age) {
return {
access: rule.access,
reason: rule.$type,
};
}
}
else if (AppBskyAgeassuranceDefs.isConfigRegionRuleIfAssuredUnderAge(rule)) {
if (data?.assuredAge && data.assuredAge < rule.age) {
return {
access: rule.access,
reason: rule.$type,
};
}
}
else if (AppBskyAgeassuranceDefs.isConfigRegionRuleDefault(rule)) {
return {
access: rule.access,
reason: rule.$type,
};
}
}
}
//# sourceMappingURL=age-assurance.js.map