UNPKG

@atproto/api

Version:

Client library for atproto and Bluesky

90 lines 3.8 kB
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