@singi-labs/sifa-sdk 0.9.4 → 0.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/taxonomy/continents.ts","../src/taxonomy/countries.ts","../src/taxonomy/employment-type.ts","../src/taxonomy/industry-taxonomy.ts","../src/taxonomy/open-to.ts","../src/taxonomy/workplace-type.ts","../src/taxonomy/platforms.ts","../src/taxonomy/skill-categories.ts","../src/taxonomy/skill-grouping.ts","../src/format/format-time.ts","../src/format/sort-by-date.ts","../src/format/handle-utils.ts","../src/format/location-utils.ts","../src/format/pds-utils.ts","../src/format/text-sanitize.ts","../src/format/text-truncate.ts","../src/format/time-utils.ts","../src/format/wcag-contrast.ts","../src/logic/profile-completeness.ts","../src/logic/profile-dimensions.ts","../src/schemas/shared.ts","../src/schemas/endorsement-confirmation.ts","../src/schemas/endorsement.ts","../src/schemas/graph-follow.ts","../src/schemas/profile-certification.ts","../src/schemas/profile-course.ts","../src/schemas/profile-education.ts","../src/schemas/profile-external-account.ts","../src/schemas/profile-honor.ts","../src/schemas/profile-language.ts","../src/schemas/profile-position.ts","../src/schemas/profile-project.ts","../src/schemas/profile-publication.ts","../src/schemas/profile-self.ts","../src/schemas/profile-skill.ts","../src/schemas/profile-volunteering.ts","../src/index.ts"],"names":["z"],"mappings":";;;;;AAEO,IAAM,UAAA,GAAmE;AAAA,EAC9E,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,QAAA,EAAS;AAAA,EAC7B,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,YAAA,EAAa;AAAA,EACjC,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAA,EAAO;AAAA,EAC3B,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,QAAA,EAAS;AAAA,EAC7B,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,eAAA,EAAgB;AAAA,EACpC,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,SAAA,EAAU;AAAA,EAC9B,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,eAAA;AACtB;AAEA,IAAM,oBAAA,GAAsD;AAAA,EAC1D,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EA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","file":"index.cjs","sourcesContent":["export type ContinentCode = 'AF' | 'AN' | 'AS' | 'EU' | 'NA' | 'OC' | 'SA';\n\nexport const CONTINENTS: ReadonlyArray<{ code: ContinentCode; name: string }> = [\n { code: 'AF', name: 'Africa' },\n { code: 'AN', name: 'Antarctica' },\n { code: 'AS', name: 'Asia' },\n { code: 'EU', name: 'Europe' },\n { code: 'NA', name: 'North America' },\n { code: 'OC', name: 'Oceania' },\n { code: 'SA', name: 'South America' },\n];\n\nconst COUNTRY_TO_CONTINENT: Record<string, ContinentCode> = {\n AD: 'EU',\n AE: 'AS',\n AF: 'AS',\n AG: 'NA',\n AL: 'EU',\n AM: 'AS',\n AO: 'AF',\n AR: 'SA',\n AT: 'EU',\n AU: 'OC',\n AZ: 'AS',\n BA: 'EU',\n BB: 'NA',\n BD: 'AS',\n BE: 'EU',\n BF: 'AF',\n BG: 'EU',\n BH: 'AS',\n BI: 'AF',\n BJ: 'AF',\n BN: 'AS',\n BO: 'SA',\n BR: 'SA',\n BS: 'NA',\n BT: 'AS',\n BW: 'AF',\n BY: 'EU',\n BZ: 'NA',\n CA: 'NA',\n CD: 'AF',\n CF: 'AF',\n CG: 'AF',\n CH: 'EU',\n CI: 'AF',\n CL: 'SA',\n CM: 'AF',\n CN: 'AS',\n CO: 'SA',\n CR: 'NA',\n CU: 'NA',\n CV: 'AF',\n CY: 'AS',\n CZ: 'EU',\n DE: 'EU',\n DJ: 'AF',\n DK: 'EU',\n DM: 'NA',\n DO: 'NA',\n DZ: 'AF',\n EC: 'SA',\n EE: 'EU',\n EG: 'AF',\n ER: 'AF',\n ES: 'EU',\n ET: 'AF',\n FI: 'EU',\n FJ: 'OC',\n FR: 'EU',\n GA: 'AF',\n GB: 'EU',\n GD: 'NA',\n GE: 'AS',\n GH: 'AF',\n GM: 'AF',\n GN: 'AF',\n GQ: 'AF',\n GR: 'EU',\n GT: 'NA',\n GW: 'AF',\n GY: 'SA',\n HK: 'AS',\n HN: 'NA',\n HR: 'EU',\n HT: 'NA',\n HU: 'EU',\n ID: 'AS',\n IE: 'EU',\n IL: 'AS',\n IN: 'AS',\n IQ: 'AS',\n IR: 'AS',\n IS: 'EU',\n IT: 'EU',\n JM: 'NA',\n JO: 'AS',\n JP: 'AS',\n KE: 'AF',\n KG: 'AS',\n KH: 'AS',\n KM: 'AF',\n KN: 'NA',\n KP: 'AS',\n KR: 'AS',\n KW: 'AS',\n KZ: 'AS',\n LA: 'AS',\n LB: 'AS',\n LC: 'NA',\n LI: 'EU',\n LK: 'AS',\n LR: 'AF',\n LS: 'AF',\n LT: 'EU',\n LU: 'EU',\n LV: 'EU',\n LY: 'AF',\n MA: 'AF',\n MC: 'EU',\n MD: 'EU',\n ME: 'EU',\n MG: 'AF',\n MK: 'EU',\n ML: 'AF',\n MM: 'AS',\n MN: 'AS',\n MO: 'AS',\n MR: 'AF',\n MT: 'EU',\n MU: 'AF',\n MV: 'AS',\n MW: 'AF',\n MX: 'NA',\n MY: 'AS',\n MZ: 'AF',\n NA: 'AF',\n NE: 'AF',\n NG: 'AF',\n NI: 'NA',\n NL: 'EU',\n NO: 'EU',\n NP: 'AS',\n NZ: 'OC',\n OM: 'AS',\n PA: 'NA',\n PE: 'SA',\n PG: 'OC',\n PH: 'AS',\n PK: 'AS',\n PL: 'EU',\n PR: 'NA',\n PS: 'AS',\n PT: 'EU',\n PY: 'SA',\n QA: 'AS',\n RO: 'EU',\n RS: 'EU',\n RU: 'EU',\n RW: 'AF',\n SA: 'AS',\n SB: 'OC',\n SC: 'AF',\n SD: 'AF',\n SE: 'EU',\n SG: 'AS',\n SI: 'EU',\n SK: 'EU',\n SL: 'AF',\n SM: 'EU',\n SN: 'AF',\n SO: 'AF',\n SR: 'SA',\n SS: 'AF',\n ST: 'AF',\n SV: 'NA',\n SY: 'AS',\n SZ: 'AF',\n TD: 'AF',\n TG: 'AF',\n TH: 'AS',\n TJ: 'AS',\n TL: 'AS',\n TM: 'AS',\n TN: 'AF',\n TO: 'OC',\n TR: 'AS',\n TT: 'NA',\n TW: 'AS',\n TZ: 'AF',\n UA: 'EU',\n UG: 'AF',\n US: 'NA',\n UY: 'SA',\n UZ: 'AS',\n VA: 'EU',\n VC: 'NA',\n VE: 'SA',\n VN: 'AS',\n VU: 'OC',\n WS: 'OC',\n XK: 'EU',\n YE: 'AS',\n ZA: 'AF',\n ZM: 'AF',\n ZW: 'AF',\n};\n\nexport function getContinent(countryCode: string): ContinentCode | null {\n if (!countryCode) return null;\n return COUNTRY_TO_CONTINENT[countryCode.toUpperCase()] ?? null;\n}\n","/** ISO 3166-1 country list for local fallback when GeoNames is unavailable. */\nexport const COUNTRIES: ReadonlyArray<{ code: string; name: string }> = [\n { code: 'AF', name: 'Afghanistan' },\n { code: 'AL', name: 'Albania' },\n { code: 'DZ', name: 'Algeria' },\n { code: 'AD', name: 'Andorra' },\n { code: 'AO', name: 'Angola' },\n { code: 'AG', name: 'Antigua and Barbuda' },\n { code: 'AR', name: 'Argentina' },\n { code: 'AM', name: 'Armenia' },\n { code: 'AU', name: 'Australia' },\n { code: 'AT', name: 'Austria' },\n { code: 'AZ', name: 'Azerbaijan' },\n { code: 'BS', name: 'Bahamas' },\n { code: 'BH', name: 'Bahrain' },\n { code: 'BD', name: 'Bangladesh' },\n { code: 'BB', name: 'Barbados' },\n { code: 'BY', name: 'Belarus' },\n { code: 'BE', name: 'Belgium' },\n { code: 'BZ', name: 'Belize' },\n { code: 'BJ', name: 'Benin' },\n { code: 'BT', name: 'Bhutan' },\n { code: 'BO', name: 'Bolivia' },\n { code: 'BA', name: 'Bosnia and Herzegovina' },\n { code: 'BW', name: 'Botswana' },\n { code: 'BR', name: 'Brazil' },\n { code: 'BN', name: 'Brunei' },\n { code: 'BG', name: 'Bulgaria' },\n { code: 'BF', name: 'Burkina Faso' },\n { code: 'BI', name: 'Burundi' },\n { code: 'CV', name: 'Cabo Verde' },\n { code: 'KH', name: 'Cambodia' },\n { code: 'CM', name: 'Cameroon' },\n { code: 'CA', name: 'Canada' },\n { code: 'CF', name: 'Central African Republic' },\n { code: 'TD', name: 'Chad' },\n { code: 'CL', name: 'Chile' },\n { code: 'CN', name: 'China' },\n { code: 'CO', name: 'Colombia' },\n { code: 'KM', name: 'Comoros' },\n { code: 'CG', name: 'Congo' },\n { code: 'CD', name: 'Congo (DRC)' },\n { code: 'CR', name: 'Costa Rica' },\n { code: 'CI', name: \"Cote d'Ivoire\" },\n { code: 'HR', name: 'Croatia' },\n { code: 'CU', name: 'Cuba' },\n { code: 'CY', name: 'Cyprus' },\n { code: 'CZ', name: 'Czechia' },\n { code: 'DK', name: 'Denmark' },\n { code: 'DJ', name: 'Djibouti' },\n { code: 'DM', name: 'Dominica' },\n { code: 'DO', name: 'Dominican Republic' },\n { code: 'EC', name: 'Ecuador' },\n { code: 'EG', name: 'Egypt' },\n { code: 'SV', name: 'El Salvador' },\n { code: 'GQ', name: 'Equatorial Guinea' },\n { code: 'ER', name: 'Eritrea' },\n { code: 'EE', name: 'Estonia' },\n { code: 'SZ', name: 'Eswatini' },\n { code: 'ET', name: 'Ethiopia' },\n { code: 'FJ', name: 'Fiji' },\n { code: 'FI', name: 'Finland' },\n { code: 'FR', name: 'France' },\n { code: 'GA', name: 'Gabon' },\n { code: 'GM', name: 'Gambia' },\n { code: 'GE', name: 'Georgia' },\n { code: 'DE', name: 'Germany' },\n { code: 'GH', name: 'Ghana' },\n { code: 'GR', name: 'Greece' },\n { code: 'GD', name: 'Grenada' },\n { code: 'GT', name: 'Guatemala' },\n { code: 'GN', name: 'Guinea' },\n { code: 'GW', name: 'Guinea-Bissau' },\n { code: 'GY', name: 'Guyana' },\n { code: 'HT', name: 'Haiti' },\n { code: 'HN', name: 'Honduras' },\n { code: 'HU', name: 'Hungary' },\n { code: 'IS', name: 'Iceland' },\n { code: 'IN', name: 'India' },\n { code: 'ID', name: 'Indonesia' },\n { code: 'IR', name: 'Iran' },\n { code: 'IQ', name: 'Iraq' },\n { code: 'IE', name: 'Ireland' },\n { code: 'IL', name: 'Israel' },\n { code: 'IT', name: 'Italy' },\n { code: 'JM', name: 'Jamaica' },\n { code: 'JP', name: 'Japan' },\n { code: 'JO', name: 'Jordan' },\n { code: 'KZ', name: 'Kazakhstan' },\n { code: 'KE', name: 'Kenya' },\n { code: 'KI', name: 'Kiribati' },\n { code: 'KP', name: 'North Korea' },\n { code: 'KR', name: 'South Korea' },\n { code: 'KW', name: 'Kuwait' },\n { code: 'KG', name: 'Kyrgyzstan' },\n { code: 'LA', name: 'Laos' },\n { code: 'LV', name: 'Latvia' },\n { code: 'LB', name: 'Lebanon' },\n { code: 'LS', name: 'Lesotho' },\n { code: 'LR', name: 'Liberia' },\n { code: 'LY', name: 'Libya' },\n { code: 'LI', name: 'Liechtenstein' },\n { code: 'LT', name: 'Lithuania' },\n { code: 'LU', name: 'Luxembourg' },\n { code: 'MG', name: 'Madagascar' },\n { code: 'MW', name: 'Malawi' },\n { code: 'MY', name: 'Malaysia' },\n { code: 'MV', name: 'Maldives' },\n { code: 'ML', name: 'Mali' },\n { code: 'MT', name: 'Malta' },\n { code: 'MH', name: 'Marshall Islands' },\n { code: 'MR', name: 'Mauritania' },\n { code: 'MU', name: 'Mauritius' },\n { code: 'MX', name: 'Mexico' },\n { code: 'FM', name: 'Micronesia' },\n { code: 'MD', name: 'Moldova' },\n { code: 'MC', name: 'Monaco' },\n { code: 'MN', name: 'Mongolia' },\n { code: 'ME', name: 'Montenegro' },\n { code: 'MA', name: 'Morocco' },\n { code: 'MZ', name: 'Mozambique' },\n { code: 'MM', name: 'Myanmar' },\n { code: 'NA', name: 'Namibia' },\n { code: 'NR', name: 'Nauru' },\n { code: 'NP', name: 'Nepal' },\n { code: 'NL', name: 'Netherlands' },\n { code: 'NZ', name: 'New Zealand' },\n { code: 'NI', name: 'Nicaragua' },\n { code: 'NE', name: 'Niger' },\n { code: 'NG', name: 'Nigeria' },\n { code: 'MK', name: 'North Macedonia' },\n { code: 'NO', name: 'Norway' },\n { code: 'OM', name: 'Oman' },\n { code: 'PK', name: 'Pakistan' },\n { code: 'PW', name: 'Palau' },\n { code: 'PS', name: 'Palestine' },\n { code: 'PA', name: 'Panama' },\n { code: 'PG', name: 'Papua New Guinea' },\n { code: 'PY', name: 'Paraguay' },\n { code: 'PE', name: 'Peru' },\n { code: 'PH', name: 'Philippines' },\n { code: 'PL', name: 'Poland' },\n { code: 'PT', name: 'Portugal' },\n { code: 'QA', name: 'Qatar' },\n { code: 'RO', name: 'Romania' },\n { code: 'RU', name: 'Russia' },\n { code: 'RW', name: 'Rwanda' },\n { code: 'KN', name: 'Saint Kitts and Nevis' },\n { code: 'LC', name: 'Saint Lucia' },\n { code: 'VC', name: 'Saint Vincent and the Grenadines' },\n { code: 'WS', name: 'Samoa' },\n { code: 'SM', name: 'San Marino' },\n { code: 'ST', name: 'Sao Tome and Principe' },\n { code: 'SA', name: 'Saudi Arabia' },\n { code: 'SN', name: 'Senegal' },\n { code: 'RS', name: 'Serbia' },\n { code: 'SC', name: 'Seychelles' },\n { code: 'SL', name: 'Sierra Leone' },\n { code: 'SG', name: 'Singapore' },\n { code: 'SK', name: 'Slovakia' },\n { code: 'SI', name: 'Slovenia' },\n { code: 'SB', name: 'Solomon Islands' },\n { code: 'SO', name: 'Somalia' },\n { code: 'ZA', name: 'South Africa' },\n { code: 'SS', name: 'South Sudan' },\n { code: 'ES', name: 'Spain' },\n { code: 'LK', name: 'Sri Lanka' },\n { code: 'SD', name: 'Sudan' },\n { code: 'SR', name: 'Suriname' },\n { code: 'SE', name: 'Sweden' },\n { code: 'CH', name: 'Switzerland' },\n { code: 'SY', name: 'Syria' },\n { code: 'TW', name: 'Taiwan' },\n { code: 'TJ', name: 'Tajikistan' },\n { code: 'TZ', name: 'Tanzania' },\n { code: 'TH', name: 'Thailand' },\n { code: 'TL', name: 'Timor-Leste' },\n { code: 'TG', name: 'Togo' },\n { code: 'TO', name: 'Tonga' },\n { code: 'TT', name: 'Trinidad and Tobago' },\n { code: 'TN', name: 'Tunisia' },\n { code: 'TR', name: 'Turkey' },\n { code: 'TM', name: 'Turkmenistan' },\n { code: 'TV', name: 'Tuvalu' },\n { code: 'UG', name: 'Uganda' },\n { code: 'UA', name: 'Ukraine' },\n { code: 'AE', name: 'United Arab Emirates' },\n { code: 'GB', name: 'United Kingdom' },\n { code: 'US', name: 'United States' },\n { code: 'UY', name: 'Uruguay' },\n { code: 'UZ', name: 'Uzbekistan' },\n { code: 'VU', name: 'Vanuatu' },\n { code: 'VA', name: 'Vatican City' },\n { code: 'VE', name: 'Venezuela' },\n { code: 'VN', name: 'Vietnam' },\n { code: 'YE', name: 'Yemen' },\n { code: 'ZM', name: 'Zambia' },\n { code: 'ZW', name: 'Zimbabwe' },\n] as const;\n","/**\n * Employment-type taxonomy. Mirrors `id.sifa.defs#employmentType.knownValues`\n * from sifa-lexicons. Surfaces both a flat NSID→label map (for read-only\n * display) and a grouped structure (for editor dropdowns).\n */\n\nexport interface EmploymentTypeOption {\n value: string;\n label: string;\n}\n\nexport interface EmploymentTypeGroup {\n label: string;\n items: EmploymentTypeOption[];\n}\n\nexport const EMPLOYMENT_TYPE_GROUPS: EmploymentTypeGroup[] = [\n {\n label: 'Employee',\n items: [\n { value: 'id.sifa.defs#fullTime', label: 'Full-time' },\n { value: 'id.sifa.defs#partTime', label: 'Part-time' },\n { value: 'id.sifa.defs#temporary', label: 'Temporary' },\n { value: 'id.sifa.defs#seasonal', label: 'Seasonal' },\n ],\n },\n {\n label: 'Independent',\n items: [\n { value: 'id.sifa.defs#contract', label: 'Contract' },\n { value: 'id.sifa.defs#freelance', label: 'Freelance' },\n { value: 'id.sifa.defs#selfEmployed', label: 'Self-employed' },\n { value: 'id.sifa.defs#independentWork', label: 'Independent work' },\n ],\n },\n {\n label: 'Training & early-career',\n items: [\n { value: 'id.sifa.defs#internship', label: 'Internship' },\n { value: 'id.sifa.defs#apprenticeship', label: 'Apprenticeship' },\n { value: 'id.sifa.defs#fellowship', label: 'Fellowship' },\n { value: 'id.sifa.defs#trainee', label: 'Trainee' },\n ],\n },\n {\n label: 'Other',\n items: [{ value: 'id.sifa.defs#volunteer', label: 'Volunteer' }],\n },\n];\n\nexport const EMPLOYMENT_TYPE_LABELS: Record<string, string> = Object.fromEntries(\n EMPLOYMENT_TYPE_GROUPS.flatMap((g) => g.items).map((o) => [o.value, o.label]),\n);\n\n/** Resolve a label for an employment-type token. Falls back to the raw value. */\nexport function getEmploymentTypeLabel(value: string | undefined | null): string | undefined {\n if (!value) return undefined;\n return EMPLOYMENT_TYPE_LABELS[value] ?? value;\n}\n","/** Two-level industry/domain taxonomy for profile classification. */\n\nexport interface IndustryOption {\n value: string;\n labelKey: string;\n domains: { value: string; labelKey: string }[];\n}\n\nexport const INDUSTRY_OPTIONS: IndustryOption[] = [\n {\n value: 'id.sifa.defs#industryTechnology',\n labelKey: 'industryTechnology',\n domains: [\n { value: 'id.sifa.defs#domainSoftwareEngineering', labelKey: 'domainSoftwareEngineering' },\n { value: 'id.sifa.defs#domainDataScience', labelKey: 'domainDataScience' },\n { value: 'id.sifa.defs#domainCybersecurity', labelKey: 'domainCybersecurity' },\n { value: 'id.sifa.defs#domainDevops', labelKey: 'domainDevops' },\n { value: 'id.sifa.defs#domainProductDesign', labelKey: 'domainProductDesign' },\n { value: 'id.sifa.defs#domainGameDev', labelKey: 'domainGameDev' },\n ],\n },\n {\n value: 'id.sifa.defs#industryFinance',\n labelKey: 'industryFinance',\n domains: [\n { value: 'id.sifa.defs#domainBanking', labelKey: 'domainBanking' },\n { value: 'id.sifa.defs#domainFintech', labelKey: 'domainFintech' },\n { value: 'id.sifa.defs#domainInsurance', labelKey: 'domainInsurance' },\n { value: 'id.sifa.defs#domainInvestmentMgmt', labelKey: 'domainInvestmentMgmt' },\n ],\n },\n {\n value: 'id.sifa.defs#industryHealthcare',\n labelKey: 'industryHealthcare',\n domains: [\n { value: 'id.sifa.defs#domainClinicalResearch', labelKey: 'domainClinicalResearch' },\n { value: 'id.sifa.defs#domainHealthtech', labelKey: 'domainHealthtech' },\n { value: 'id.sifa.defs#domainPharma', labelKey: 'domainPharma' },\n ],\n },\n {\n value: 'id.sifa.defs#industryEducation',\n labelKey: 'industryEducation',\n domains: [\n { value: 'id.sifa.defs#domainHigherEd', labelKey: 'domainHigherEd' },\n { value: 'id.sifa.defs#domainEdtech', labelKey: 'domainEdtech' },\n { value: 'id.sifa.defs#domainPrimarySecondary', labelKey: 'domainPrimarySecondary' },\n ],\n },\n {\n value: 'id.sifa.defs#industryMedia',\n labelKey: 'industryMedia',\n domains: [\n { value: 'id.sifa.defs#domainJournalism', labelKey: 'domainJournalism' },\n { value: 'id.sifa.defs#domainFilmVideo', labelKey: 'domainFilmVideo' },\n { value: 'id.sifa.defs#domainGaming', labelKey: 'domainGaming' },\n { value: 'id.sifa.defs#domainAdvertising', labelKey: 'domainAdvertising' },\n ],\n },\n {\n value: 'id.sifa.defs#industryRetail',\n labelKey: 'industryRetail',\n domains: [\n { value: 'id.sifa.defs#domainEcommerce', labelKey: 'domainEcommerce' },\n { value: 'id.sifa.defs#domainSupplyChain', labelKey: 'domainSupplyChain' },\n ],\n },\n {\n value: 'id.sifa.defs#industryManufacturing',\n labelKey: 'industryManufacturing',\n domains: [\n { value: 'id.sifa.defs#domainAutomotive', labelKey: 'domainAutomotive' },\n { value: 'id.sifa.defs#domainAerospace', labelKey: 'domainAerospace' },\n { value: 'id.sifa.defs#domainHardware', labelKey: 'domainHardware' },\n ],\n },\n {\n value: 'id.sifa.defs#industryEnergy',\n labelKey: 'industryEnergy',\n domains: [\n { value: 'id.sifa.defs#domainRenewables', labelKey: 'domainRenewables' },\n { value: 'id.sifa.defs#domainOilGas', labelKey: 'domainOilGas' },\n { value: 'id.sifa.defs#domainClimateTech', labelKey: 'domainClimateTech' },\n ],\n },\n {\n value: 'id.sifa.defs#industryGovernment',\n labelKey: 'industryGovernment',\n domains: [\n { value: 'id.sifa.defs#domainPublicPolicy', labelKey: 'domainPublicPolicy' },\n { value: 'id.sifa.defs#domainDefense', labelKey: 'domainDefense' },\n ],\n },\n {\n value: 'id.sifa.defs#industryLegal',\n labelKey: 'industryLegal',\n domains: [\n { value: 'id.sifa.defs#domainIpLaw', labelKey: 'domainIpLaw' },\n { value: 'id.sifa.defs#domainCompliance', labelKey: 'domainCompliance' },\n ],\n },\n {\n value: 'id.sifa.defs#industryConsulting',\n labelKey: 'industryConsulting',\n domains: [\n { value: 'id.sifa.defs#domainManagementConsulting', labelKey: 'domainManagementConsulting' },\n { value: 'id.sifa.defs#domainDevrel', labelKey: 'domainDevrel' },\n { value: 'id.sifa.defs#domainHrRecruitment', labelKey: 'domainHrRecruitment' },\n ],\n },\n {\n value: 'id.sifa.defs#industryNonprofit',\n labelKey: 'industryNonprofit',\n domains: [\n { value: 'id.sifa.defs#domainHumanRights', labelKey: 'domainHumanRights' },\n { value: 'id.sifa.defs#domainOpenSource', labelKey: 'domainOpenSource' },\n ],\n },\n {\n value: 'id.sifa.defs#industryRealEstate',\n labelKey: 'industryRealEstate',\n domains: [{ value: 'id.sifa.defs#domainProptech', labelKey: 'domainProptech' }],\n },\n {\n value: 'id.sifa.defs#industryTransport',\n labelKey: 'industryTransport',\n domains: [\n { value: 'id.sifa.defs#domainAutonomousVehicles', labelKey: 'domainAutonomousVehicles' },\n { value: 'id.sifa.defs#domainLogistics', labelKey: 'domainLogistics' },\n ],\n },\n {\n value: 'id.sifa.defs#industryAgriculture',\n labelKey: 'industryAgriculture',\n domains: [\n { value: 'id.sifa.defs#domainAgritech', labelKey: 'domainAgritech' },\n { value: 'id.sifa.defs#domainFoodTech', labelKey: 'domainFoodTech' },\n ],\n },\n {\n value: 'id.sifa.defs#industryHospitality',\n labelKey: 'industryHospitality',\n domains: [\n { value: 'id.sifa.defs#domainHotels', labelKey: 'domainHotels' },\n { value: 'id.sifa.defs#domainTravelTourism', labelKey: 'domainTravelTourism' },\n { value: 'id.sifa.defs#domainFoodBeverage', labelKey: 'domainFoodBeverage' },\n ],\n },\n {\n value: 'id.sifa.defs#industryTelecom',\n labelKey: 'industryTelecom',\n domains: [\n { value: 'id.sifa.defs#domainNetworkInfra', labelKey: 'domainNetworkInfra' },\n { value: 'id.sifa.defs#domainMobileServices', labelKey: 'domainMobileServices' },\n ],\n },\n {\n value: 'id.sifa.defs#industryMining',\n labelKey: 'industryMining',\n domains: [\n { value: 'id.sifa.defs#domainExtraction', labelKey: 'domainExtraction' },\n { value: 'id.sifa.defs#domainGeological', labelKey: 'domainGeological' },\n ],\n },\n {\n value: 'id.sifa.defs#industryFashion',\n labelKey: 'industryFashion',\n domains: [\n { value: 'id.sifa.defs#domainFashionDesign', labelKey: 'domainFashionDesign' },\n { value: 'id.sifa.defs#domainTextileManufacturing', labelKey: 'domainTextileManufacturing' },\n ],\n },\n {\n value: 'id.sifa.defs#industryMaritime',\n labelKey: 'industryMaritime',\n domains: [\n { value: 'id.sifa.defs#domainShipping', labelKey: 'domainShipping' },\n { value: 'id.sifa.defs#domainPortOperations', labelKey: 'domainPortOperations' },\n { value: 'id.sifa.defs#domainNavalArchitecture', labelKey: 'domainNavalArchitecture' },\n ],\n },\n {\n value: 'id.sifa.defs#industryOther',\n labelKey: 'industryOther',\n domains: [],\n },\n];\n\n/** Find the industry option for a given industry value. */\nexport function findIndustry(value: string | undefined | null): IndustryOption | undefined {\n if (!value) return undefined;\n return INDUSTRY_OPTIONS.find((i) => i.value === value);\n}\n\n/** Get the label key for an industry or domain token, falling back to the raw value. */\nexport function getIndustryLabelKey(value: string): string {\n for (const industry of INDUSTRY_OPTIONS) {\n if (industry.value === value) return industry.labelKey;\n for (const domain of industry.domains) {\n if (domain.value === value) return domain.labelKey;\n }\n }\n return value;\n}\n","/**\n * \"Open to\" taxonomy. Mirrors `id.sifa.defs#openToWorkStatus.knownValues` from\n * sifa-lexicons. Surfaces a single source of truth for the editor (where the\n * user picks values) and the IdentityCard (where badges are rendered).\n *\n * Shape matches `INDUSTRY_OPTIONS`: `{ value, labelKey }` so consumers can run\n * `labelKey` through their own i18n layer (e.g. next-intl `useTranslations`).\n */\n\nexport interface OpenToOption {\n value: string;\n labelKey: string;\n}\n\nexport const OPEN_TO_OPTIONS: OpenToOption[] = [\n { value: 'id.sifa.defs#fullTimeRoles', labelKey: 'fullTimeRoles' },\n { value: 'id.sifa.defs#partTimeRoles', labelKey: 'partTimeRoles' },\n { value: 'id.sifa.defs#contractRoles', labelKey: 'contractRoles' },\n { value: 'id.sifa.defs#commissions', labelKey: 'commissions' },\n { value: 'id.sifa.defs#boardPositions', labelKey: 'boardPositions' },\n { value: 'id.sifa.defs#mentoringOthers', labelKey: 'mentoringOthers' },\n { value: 'id.sifa.defs#beingMentored', labelKey: 'beingMentored' },\n { value: 'id.sifa.defs#collaborations', labelKey: 'collaborations' },\n];\n\n/**\n * Legacy aliases — tokens the lexicon used to expose but doesn't anymore.\n * Records written before the lexicon migration may still carry them; resolve\n * them to the closest current `labelKey` for display.\n */\nconst OPEN_TO_LEGACY_ALIASES: Record<string, string> = {\n 'id.sifa.defs#mentoring': 'mentoringOthers',\n};\n\nconst OPEN_TO_LABEL_KEY_MAP: Record<string, string> = {\n ...Object.fromEntries(OPEN_TO_OPTIONS.map((o) => [o.value, o.labelKey])),\n ...OPEN_TO_LEGACY_ALIASES,\n};\n\n/**\n * Resolve a `labelKey` for an `openToWorkStatus` token. Returns `undefined`\n * for tokens not in the canonical set or the legacy alias map, so callers\n * can choose their own fallback (e.g. render the raw value).\n */\nexport function getOpenToLabelKey(value: string | undefined | null): string | undefined {\n if (!value) return undefined;\n return OPEN_TO_LABEL_KEY_MAP[value];\n}\n","/**\n * Workplace-type taxonomy. Mirrors `id.sifa.defs#workplaceType.knownValues`\n * from sifa-lexicons. `remote` is retained for legacy records but the scoped\n * variants (`remoteLocal`, `remoteRegion`, `remoteGlobal`) are preferred for\n * new records per the lexicon description.\n */\n\nexport interface WorkplaceTypeOption {\n value: string;\n label: string;\n}\n\nexport const WORKPLACE_TYPE_OPTIONS: WorkplaceTypeOption[] = [\n { value: 'id.sifa.defs#onSite', label: 'On-site' },\n { value: 'id.sifa.defs#hybrid', label: 'Hybrid' },\n { value: 'id.sifa.defs#remoteLocal', label: 'Remote (same country)' },\n { value: 'id.sifa.defs#remoteRegion', label: 'Remote (same region)' },\n { value: 'id.sifa.defs#remoteGlobal', label: 'Remote (anywhere)' },\n];\n\nexport const WORKPLACE_TYPE_LABELS: Record<string, string> = {\n ...Object.fromEntries(WORKPLACE_TYPE_OPTIONS.map((o) => [o.value, o.label])),\n 'id.sifa.defs#remote': 'Remote',\n};\n\n/** Resolve a label for a workplace-type token. Falls back to the raw value. */\nexport function getWorkplaceTypeLabel(value: string | undefined | null): string | undefined {\n if (!value) return undefined;\n return WORKPLACE_TYPE_LABELS[value] ?? value;\n}\n","/**\n * Platform identifiers, labels, and URL helpers used in profile external accounts.\n *\n * This file is intentionally data-only -- icon mapping is platform-specific\n * (React DOM components on web, React Native components on mobile) and lives\n * in the consumer.\n */\n\nexport const PLATFORM_LABELS = {\n bluesky: 'Bluesky',\n github: 'GitHub',\n codeberg: 'Codeberg',\n gitlab: 'GitLab',\n forgejo: 'Forgejo',\n gitea: 'Gitea',\n linkedin: 'LinkedIn',\n youtube: 'YouTube',\n twitter: 'X (Twitter)',\n instagram: 'Instagram',\n substack: 'Substack',\n tangled: 'Tangled',\n dns: 'Domain',\n website: 'Website',\n rss: 'RSS',\n fediverse: 'Fediverse',\n orcid: 'ORCID',\n keyoxide: 'Keyoxide',\n} as const;\n\nexport type PlatformId = keyof typeof PLATFORM_LABELS;\n\nexport function isKnownPlatform(platform: string): platform is PlatformId {\n return platform in PLATFORM_LABELS;\n}\n\nexport function getPlatformLabel(platform: string): string {\n return isKnownPlatform(platform) ? PLATFORM_LABELS[platform] : PLATFORM_LABELS.website;\n}\n\n/** Platforms excluded from the \"Add Links\" dropdown (auto-derived or not accepted by API). */\nconst EXCLUDED_FROM_DROPDOWN = new Set<PlatformId>(['bluesky', 'dns', 'tangled']);\n\n/** Platforms available in the \"Add Links\" dropdown. */\nexport const PLATFORM_OPTIONS: ReadonlyArray<{ value: PlatformId; label: string }> = (\n Object.entries(PLATFORM_LABELS) as [PlatformId, string][]\n)\n .filter(([value]) => !EXCLUDED_FROM_DROPDOWN.has(value))\n .map(([value, label]) => ({ value, label }));\n\n/**\n * Build a favicon URL for a given site URL using Google's public favicon service.\n * Returns `null` if the URL cannot be parsed.\n */\nexport function getFaviconUrl(siteUrl: string): string | null {\n try {\n const { hostname } = new URL(siteUrl);\n return `https://www.google.com/s2/favicons?domain=${encodeURIComponent(hostname)}&sz=32`;\n } catch {\n return null;\n }\n}\n","export const SKILL_CATEGORIES = [\n { value: 'technical', label: 'Technical' },\n { value: 'business', label: 'Business' },\n { value: 'creative', label: 'Creative' },\n { value: 'interpersonal', label: 'Interpersonal' },\n { value: 'industry', label: 'Industry' },\n { value: 'community', label: 'Community' },\n { value: 'security', label: 'Security' },\n] as const;\n\nexport type SkillCategory = (typeof SKILL_CATEGORIES)[number]['value'];\n\nexport const CATEGORY_ORDER: ReadonlyArray<SkillCategory> = SKILL_CATEGORIES.map((c) => c.value);\n\nexport const CATEGORY_LABELS: Record<SkillCategory | 'other', string> = {\n ...(Object.fromEntries(SKILL_CATEGORIES.map((c) => [c.value, c.label])) as Record<\n SkillCategory,\n string\n >),\n other: 'Other',\n};\n","import type { ProfileSkill } from '../types/index.js';\n\nimport { CATEGORY_ORDER } from './skill-categories.js';\n\nexport type MergedProfileSkill = ProfileSkill & {\n mergedRkeys: string[];\n positionRkeys?: string[];\n};\n\n/**\n * Collapses skills that resolve to the same name (case-insensitive, trimmed).\n *\n * LinkedIn import creates one skill record per (skill, position) pair, so a\n * profile can have several \"Ruby\" rows. We surface them as a single chip with\n * all underlying rkeys exposed via `mergedRkeys` so edit/delete can fan out.\n */\nexport function dedupeSkills(skills: ProfileSkill[]): MergedProfileSkill[] {\n const groups = new Map<string, MergedProfileSkill>();\n\n for (const skill of skills) {\n const key = skill.name.trim().toLowerCase();\n const existing = groups.get(key);\n const positions = (skill as ProfileSkill & { positionRkeys?: string[] }).positionRkeys ?? [];\n\n if (!existing) {\n groups.set(key, {\n ...skill,\n mergedRkeys: [skill.rkey],\n positionRkeys: [...positions],\n });\n continue;\n }\n\n existing.mergedRkeys.push(skill.rkey);\n if (!existing.category && skill.category) existing.category = skill.category;\n if ((skill.endorsementCount ?? 0) > (existing.endorsementCount ?? 0)) {\n existing.endorsementCount = skill.endorsementCount;\n }\n if (skill.endorsed) existing.endorsed = true;\n if (skill.activityBacked) existing.activityBacked = true;\n const merged = new Set([...(existing.positionRkeys ?? []), ...positions]);\n existing.positionRkeys = Array.from(merged);\n }\n\n return Array.from(groups.values());\n}\n\n/**\n * Groups skills by category in CATEGORY_ORDER, with unknown/empty categories\n * collected under \"other\". Within each group: sorted by endorsementCount desc,\n * then alphabetical by name. Empty groups are omitted.\n */\nexport function groupSkillsByCategory<T extends ProfileSkill>(skills: T[]): [string, T[]][] {\n const grouped = new Map<string, T[]>();\n\n for (const skill of skills) {\n const normalised = skill.category?.toLowerCase().trim() ?? '';\n const key = (CATEGORY_ORDER as readonly string[]).includes(normalised) ? normalised : 'other';\n const bucket = grouped.get(key) ?? [];\n bucket.push(skill);\n grouped.set(key, bucket);\n }\n\n for (const [, groupSkills] of grouped) {\n groupSkills.sort((a, b) => {\n const countDiff = (b.endorsementCount ?? 0) - (a.endorsementCount ?? 0);\n if (countDiff !== 0) return countDiff;\n return a.name.localeCompare(b.name);\n });\n }\n\n const ordered: [string, T[]][] = [];\n for (const cat of CATEGORY_ORDER) {\n const group = grouped.get(cat);\n if (group?.length) ordered.push([cat, group]);\n }\n const otherGroup = grouped.get('other');\n if (otherGroup?.length) ordered.push(['other', otherGroup]);\n\n return ordered;\n}\n","/**\n * Format a date string as a relative time (e.g. \"5m ago\", \"3d ago\").\n * Returns an empty string for invalid or future dates.\n */\nexport function formatRelativeTime(dateString: string): string {\n const date = new Date(dateString);\n if (isNaN(date.getTime())) return '';\n\n const now = Date.now();\n const diffMs = now - date.getTime();\n if (diffMs < 0) return '';\n\n const seconds = Math.floor(diffMs / 1000);\n if (seconds < 60) return `${seconds}s ago`;\n\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m ago`;\n\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h ago`;\n\n const days = Math.floor(hours / 24);\n if (days < 30) return `${days}d ago`;\n\n const months = Math.floor(days / 30);\n if (months < 12) return `${months}mo ago`;\n\n const years = Math.floor(months / 12);\n return `${years}y ago`;\n}\n","/**\n * Sort profile section items from newest to oldest.\n *\n * Rules:\n * - Items with no end date (ongoing/current) sort to the top.\n * - Primary sort: end date descending (newest first).\n * - Secondary sort: start date descending (newest first).\n * - Items with no dates sort to the bottom.\n *\n * Date strings are ISO-ish (\"2024\", \"2024-03\", \"2024-03-15\") and\n * lexicographic comparison works correctly for them.\n */\n\ninterface DateRange {\n startDate?: string;\n endDate?: string;\n current?: boolean;\n}\n\ntype DateExtractor<T> = (item: T) => DateRange;\n\nconst FAR_FUTURE = '9999-12-31';\nconst FAR_PAST = '0000-01-01';\n\nexport function sortByDateDesc<T>(items: T[], extract: DateExtractor<T>): T[] {\n return [...items].sort((a, b) => {\n const da = extract(a);\n const db = extract(b);\n\n const endA = da.current ? FAR_FUTURE : (da.endDate ?? '');\n const endB = db.current ? FAR_FUTURE : (db.endDate ?? '');\n\n // Items with any date beat items with no dates at all\n const hasDateA = endA || da.startDate;\n const hasDateB = endB || db.startDate;\n if (hasDateA && !hasDateB) return -1;\n if (!hasDateA && hasDateB) return 1;\n\n // Primary: end date descending\n if (endA !== endB) return endB.localeCompare(endA);\n\n // Secondary: start date descending\n const startA = da.startDate ?? FAR_PAST;\n const startB = db.startDate ?? FAR_PAST;\n return startB.localeCompare(startA);\n });\n}\n\n/**\n * Convenience extractor for items that use `startDate` / `endDate` fields directly.\n * Used by volunteering, projects, and other sections that still use startDate/endDate.\n */\nexport function dateRangeExtractor<\n T extends { startDate?: string; endDate?: string; current?: boolean },\n>(item: T): DateRange {\n return { startDate: item.startDate, endDate: item.endDate, current: item.current };\n}\n\n/**\n * Extractor for lexicon-aligned items that use `startedAt` / `endedAt` fields.\n * Used by positions and education (current derived from !endedAt).\n */\nexport function lexiconDateExtractor<T extends { startedAt?: string; endedAt?: string }>(\n item: T,\n): DateRange {\n return { startDate: item.startedAt, endDate: item.endedAt, current: !item.endedAt };\n}\n\n/**\n * Convenience extractor for items with a single `date` field.\n */\nexport function singleDateExtractor<T extends { date?: string }>(item: T): DateRange {\n return { endDate: item.date };\n}\n\n/**\n * Extractor for certifications which use `issueDate` / `expiryDate`.\n */\nexport function certDateExtractor<T extends { issueDate?: string; expiryDate?: string }>(\n item: T,\n): DateRange {\n return { startDate: item.issueDate, endDate: item.expiryDate ?? item.issueDate };\n}\n","/**\n * Sanitize raw user input into a valid AT Protocol identifier (handle or DID).\n *\n * Handles common mistakes:\n * - Pasting a full Bluesky profile URL\n * - Pasting a raw HTTPS URL to a PDS domain\n * - Using an at:// URI\n * - Prefixing with @\n * - Entering a bare username without .bsky.social\n */\nexport function sanitizeHandleInput(raw: string): string {\n let identifier = raw\n .trim()\n .replace(/^https?:\\/\\/bsky\\.app\\/profile\\//i, '')\n .replace(/^at:\\/\\//i, '')\n .replace(/^@/, '')\n .replace(/^https?:\\/\\//i, '');\n if (!identifier.startsWith('did:')) {\n identifier = identifier.split('/')[0] ?? identifier;\n }\n identifier = identifier.replace(/\\.$/, '');\n if (!identifier.startsWith('did:')) {\n identifier = identifier.toLowerCase();\n }\n\n // Auto-append .bsky.social for bare usernames (no dots, not a DID)\n if (identifier && !identifier.startsWith('did:') && !identifier.includes('.')) {\n identifier = `${identifier}.bsky.social`;\n }\n\n return identifier;\n}\n","import type { LocationValue } from '../types/index.js';\n\n/**\n * Format a LocationValue for display.\n *\n * Prefers `locality` (the community.lexicon.location.address field) and\n * falls back to the legacy `city` slot so values produced before the\n * sifa-api alias migration still render correctly during the additive\n * transition window.\n */\nexport function formatLocation(loc: LocationValue | null | undefined): string {\n if (!loc) return '';\n const locality = loc.locality ?? loc.city;\n const parts = [locality, loc.region, loc.country].filter(Boolean);\n if (loc.postalCode && !locality) {\n return `${loc.postalCode}, ${loc.country}`;\n }\n return parts.join(', ');\n}\n\n/** Parse a display string back into a LocationValue (best-effort for legacy data) */\nexport function parseLocationString(str: string): LocationValue | null {\n if (!str.trim()) return null;\n const parts = str\n .split(',')\n .map((p) => p.trim())\n .filter(Boolean);\n if (parts.length >= 3) {\n return {\n city: parts[0],\n region: parts[1],\n country: parts[parts.length - 1]!,\n };\n }\n if (parts.length === 2) {\n return {\n city: parts[0],\n country: parts[1]!,\n };\n }\n return { country: parts[0]! };\n}\n\n/** Convert ISO 3166-1 alpha-2 country code to flag emoji */\nexport function countryCodeToFlag(code: string | undefined): string {\n if (!code || code.length !== 2) return '';\n const upper = code.toUpperCase();\n const a = upper.codePointAt(0);\n const b = upper.codePointAt(1);\n if (a === undefined || b === undefined) return '';\n return String.fromCodePoint(a - 0x41 + 0x1f1e6, b - 0x41 + 0x1f1e6);\n}\n","import type { PdsProviderInfo } from '../types/index.js';\n\nexport interface PdsProvider {\n name: string;\n profileUrl: string;\n host?: string;\n}\n\nconst BSKY_PROFILE_BASE = 'https://bsky.app/profile/';\n\nconst PDS_PROVIDERS: { suffix: string; name: string }[] = [\n { suffix: '.bsky.social', name: 'bluesky' },\n { suffix: '.blacksky.app', name: 'blacksky' },\n { suffix: '.eurosky.social', name: 'eurosky' },\n { suffix: '.northsky.social', name: 'northsky' },\n];\n\nconst KNOWN_PROVIDER_NAMES = new Set(PDS_PROVIDERS.map((p) => p.name));\n\nconst ICON_ONLY_PROVIDERS = new Set(['selfhosted-social', 'selfhosted']);\n\nexport function pdsProviderFromApi(\n apiProvider: PdsProviderInfo | null | undefined,\n handle: string,\n): PdsProvider | null {\n if (!apiProvider) return null;\n if (ICON_ONLY_PROVIDERS.has(apiProvider.name)) {\n return { name: apiProvider.name, profileUrl: '', host: apiProvider.host };\n }\n if (!KNOWN_PROVIDER_NAMES.has(apiProvider.name)) return null;\n return {\n name: apiProvider.name,\n profileUrl: `${BSKY_PROFILE_BASE}${handle}`,\n host: apiProvider.host,\n };\n}\n\nexport function getHandleStem(handle: string): string {\n const lower = handle.toLowerCase();\n for (const provider of PDS_PROVIDERS) {\n if (lower.endsWith(provider.suffix) && lower.length > provider.suffix.length) {\n return handle.slice(0, -provider.suffix.length);\n }\n }\n return handle;\n}\n\nexport function getDisplayLabel(displayName: string | undefined, handle: string): string {\n if (displayName) return displayName;\n return getHandleStem(handle);\n}\n\n/**\n * Combine optional structured name fields (`id.sifa.profile.self.givenName`,\n * `familyName`) into a single string in Schema.org `Person` order — given\n * before family. Returns `undefined` when both are absent so callers can\n * fall back to `displayName`. Whitespace-only inputs are treated as absent.\n * Does not impose cultural ordering: users whose preferred presentation\n * differs (e.g. Eastern name order) should set `displayName` accordingly,\n * which this helper deliberately does not consult.\n */\nexport function formatStructuredName(\n givenName: string | undefined,\n familyName: string | undefined,\n): string | undefined {\n const given = givenName?.trim();\n const family = familyName?.trim();\n if (given && family) return `${given} ${family}`;\n return given || family || undefined;\n}\n\nconst PDS_DISPLAY_NAMES: Record<string, string> = {\n bluesky: 'Bluesky',\n blacksky: 'BlackSky',\n eurosky: 'EuroSky',\n northsky: 'NorthSky',\n 'selfhosted-social': 'Self-hosted',\n selfhosted: 'Self-hosted',\n};\n\nexport function getPdsDisplayName(providerName: string): string {\n return PDS_DISPLAY_NAMES[providerName] ?? providerName;\n}\n\nexport function detectPdsProvider(handle: string): PdsProvider | null {\n const lower = handle.toLowerCase();\n for (const provider of PDS_PROVIDERS) {\n if (lower.endsWith(provider.suffix)) {\n return {\n name: provider.name,\n profileUrl: `${BSKY_PROFILE_BASE}${handle}`,\n };\n }\n }\n return null;\n}\n","const COMBINING_MARK = /\\p{M}/u;\nconst BIDI_CONTROLS = /[‎‏‪-‮⁦-⁩]/gu;\n\n/**\n * Limit runs of Unicode combining marks (`\\p{M}`) to at most `maxPerBase`\n * marks following any single base character. Defuses \"Zalgo\" text where\n * dozens of stacked combining marks render outside the line box and bleed\n * into neighbouring UI.\n *\n * `maxPerBase` defaults to 4 — high enough to preserve legitimate stacks\n * in Thai, Arabic, Vietnamese, and IPA, low enough to neutralise the\n * vertical-overflow attack vector.\n */\nexport function limitCombiningMarks(value: string, maxPerBase = 4): string {\n if (!value || !COMBINING_MARK.test(value)) return value;\n\n let out = '';\n let combiningRun = 0;\n for (const char of value) {\n if (/\\p{M}/u.test(char)) {\n if (combiningRun < maxPerBase) {\n out += char;\n combiningRun += 1;\n }\n } else {\n out += char;\n combiningRun = 0;\n }\n }\n return out;\n}\n\n/**\n * Sanitise untrusted display text from PDS records before rendering in UI:\n * - strips bidi formatting controls (LRM/RLM/LRE/RLE/PDF/LRO/RLO/LRI/RLI/FSI/PDI)\n * that can hijack reading order or crash `next/og` (see Satori LRM+emoji bug)\n * - limits stacked combining marks (Zalgo defence)\n *\n * Preserves ZWJ (U+200D) so emoji sequences keep rendering.\n */\nexport function sanitizeDisplayText(value: string, maxCombiningPerBase = 4): string {\n if (!value) return value;\n return limitCombiningMarks(value.replace(BIDI_CONTROLS, ''), maxCombiningPerBase);\n}\n","const ELLIPSIS = '\\u2026';\n\n/**\n * Truncate a string to at most `maxLen` grapheme clusters, appending an\n * ellipsis when the string was shortened. Grapheme-aware so it never splits\n * emoji sequences (ZWJ, regional indicators, combining marks, surrogate pairs).\n */\nexport function truncateGraphemes(value: string, maxLen: number): string {\n if (maxLen <= 0) return '';\n const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n const graphemes = Array.from(segmenter.segment(value), (s) => s.segment);\n if (graphemes.length <= maxLen) return value;\n if (maxLen === 1) return ELLIPSIS;\n return graphemes.slice(0, maxLen - 1).join('') + ELLIPSIS;\n}\n","/**\n * Format a date as a relative time string (e.g. \"2 minutes ago\", \"3 days ago\").\n */\nexport function formatDistanceToNow(date: Date): string {\n const seconds = Math.floor((Date.now() - date.getTime()) / 1000);\n if (seconds < 60) return 'just now';\n\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m ago`;\n\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h ago`;\n\n const days = Math.floor(hours / 24);\n if (days < 7) return `${days}d ago`;\n\n const weeks = Math.floor(days / 7);\n if (weeks < 5) return `${weeks}w ago`;\n\n const months = Math.floor(days / 30);\n return `${months}mo ago`;\n}\n","/**\n * WCAG 2.2 contrast ratio utilities for validating publication theme colors.\n * Implements the relative luminance and contrast ratio formulas from\n * https://www.w3.org/TR/WCAG22/#dfn-relative-luminance\n */\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n}\n\n/**\n * Return true when the value is an RgbColor with all channels as integers in [0, 255].\n * Use this before passing untrusted data to the luminance / contrast functions.\n */\nexport function isValidRgbColor(value: unknown): value is RgbColor {\n if (value == null || typeof value !== 'object') return false;\n const { r, g, b } = value as Record<string, unknown>;\n return (\n typeof r === 'number' &&\n typeof g === 'number' &&\n typeof b === 'number' &&\n Number.isFinite(r) &&\n Number.isFinite(g) &&\n Number.isFinite(b) &&\n r >= 0 &&\n r <= 255 &&\n g >= 0 &&\n g <= 255 &&\n b >= 0 &&\n b <= 255\n );\n}\n\n/**\n * Serialize an RgbColor to a CSS `rgb(...)` string.\n * Channels are floored to integers to prevent sub-pixel drift.\n */\nexport function rgbToString(color: RgbColor): string {\n return `rgb(${Math.floor(color.r)}, ${Math.floor(color.g)}, ${Math.floor(color.b)})`;\n}\n\n/**\n * Calculate relative luminance of an sRGB color per WCAG 2.2.\n * Input channels must be numbers in [0, 255].\n */\nexport function relativeLuminance(color: RgbColor): number {\n const [rs, gs, bs] = [color.r / 255, color.g / 255, color.b / 255];\n\n const r = rs <= 0.04045 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const g = gs <= 0.04045 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const b = bs <= 0.04045 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n\n/**\n * Calculate WCAG 2.2 contrast ratio between two colors.\n * Returns a value between 1 (identical) and 21 (black/white).\n */\nexport function contrastRatio(color1: RgbColor, color2: RgbColor): number {\n const l1 = relativeLuminance(color1);\n const l2 = relativeLuminance(color2);\n const lighter = Math.max(l1, l2);\n const darker = Math.min(l1, l2);\n return (lighter + 0.05) / (darker + 0.05);\n}\n\n/**\n * Check if two colors meet WCAG 2.2 AA contrast requirement (4.5:1 for normal text).\n */\nexport function meetsContrastAA(foreground: RgbColor, background: RgbColor): boolean {\n return contrastRatio(foreground, background) >= 4.5;\n}\n","/**\n * Profile completeness scoring.\n *\n * Six binary signals, equal weight: headline filled, about filled, has at least\n * one position, education, skill, certification.\n *\n * Score: integer 0..6. Percent: round(score / 6 * 100) -- discrete values\n * {0, 17, 33, 50, 67, 83, 100}.\n *\n * Canonical source of truth for completeness scoring across Sifa clients.\n * sifa-api computes the underlying `ProfileCompletion` shape inline (in SQL\n * for admin-stats queries, in route handlers elsewhere) but defers scoring\n * to this module.\n */\n\nexport const COMPLETENESS_MAX_SCORE = 6;\n\nexport interface ProfileCompletion {\n hasHeadline: boolean;\n hasAbout: boolean;\n positionCount: number;\n educationCount: number;\n skillCount: number;\n certificationCount: number;\n}\n\n/** Pure-TS computation of the 0..6 score. */\nexport function completenessScore(c: ProfileCompletion): number {\n let filled = 0;\n if (c.hasHeadline) filled++;\n if (c.hasAbout) filled++;\n if (c.positionCount > 0) filled++;\n if (c.educationCount > 0) filled++;\n if (c.skillCount > 0) filled++;\n if (c.certificationCount > 0) filled++;\n return filled;\n}\n\n/** Completion as a rounded 0..100 integer percent (matches API serialisation). */\nexport function completenessPercent(c: ProfileCompletion): number {\n return Math.round((completenessScore(c) / COMPLETENESS_MAX_SCORE) * 100);\n}\n","/**\n * Profile dimensions -- the routing signal used by the Sifa homepage to choose\n * between the V3 \"still building\" and V4 \"established\" variants.\n *\n * Six binary signals, equal weight: avatar, headline, about, current position,\n * minimum-skill threshold, and at least one education entry. The routing\n * threshold itself (e.g. \">= 4 of 6 -> ESTABLISHED\") lives in the consumer\n * because different surfaces may want to cut at different bars over time.\n *\n * Canonical source of truth for dimension scoring across Sifa clients.\n * sifa-api computes the underlying `ProfileDimensionInputs` shape inline\n * (in SQL on the session route) but defers scoring to this module so the\n * frontend and backend cannot drift on what \"filled\" means.\n *\n * See `docs/plans/2026-04-27-homepage-variants.md` (sifa-web) for the\n * history of why these six were chosen over the original eight.\n */\n\nimport type { Profile, ProfilePosition } from '../types/index.js';\n\nexport const DIMENSIONS_MAX_SCORE = 6;\nexport const MIN_SKILLS = 3;\n\nexport type DimensionKey =\n | 'avatar'\n | 'headline'\n | 'about'\n | 'currentPosition'\n | 'skills'\n | 'education';\n\nexport type DimensionMap = Record<DimensionKey, boolean>;\n\n/**\n * Minimal raw inputs needed to compute the dimension map. sifa-api can\n * populate this from a single composite SQL query without loading the full\n * Profile shape, which is the whole point of putting this in the SDK.\n */\nexport interface ProfileDimensionInputs {\n hasAvatar: boolean;\n hasHeadline: boolean;\n hasAbout: boolean;\n currentPositionCount: number;\n skillCount: number;\n educationCount: number;\n}\n\nfunction nonEmptyString(value: string | undefined | null): boolean {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\n/**\n * Pure-TS computation of the 6-key boolean map from minimal inputs.\n * Use this when you already have aggregate counts (e.g. server-side).\n */\nexport function dimensionsFromInputs(inputs: ProfileDimensionInputs): DimensionMap {\n return {\n avatar: inputs.hasAvatar,\n headline: inputs.hasHeadline,\n about: inputs.hasAbout,\n currentPosition: inputs.currentPositionCount > 0,\n skills: inputs.skillCount >= MIN_SKILLS,\n education: inputs.educationCount > 0,\n };\n}\n\n/**\n * Derives `ProfileDimensionInputs` from a full Profile. Use this on the\n * client when you already have the profile loaded.\n */\nexport function profileToDimensionInputs(profile: Profile): ProfileDimensionInputs {\n const positions = profile.positions ?? [];\n const skills = profile.skills ?? [];\n const education = profile.education ?? [];\n const currentPositionCount = positions.filter((p: ProfilePosition) => !p.endedAt).length;\n return {\n hasAvatar: nonEmptyString(profile.avatar),\n hasHeadline: nonEmptyString(profile.headline),\n hasAbout: nonEmptyString(profile.about),\n currentPositionCount,\n skillCount: skills.length,\n educationCount: education.length,\n };\n}\n\n/** Convenience: full Profile -> dimension boolean map. */\nexport function getFilledDimensionsMap(profile: Profile): DimensionMap {\n return dimensionsFromInputs(profileToDimensionInputs(profile));\n}\n\n/** Count of filled dimensions, 0..6. Accepts either raw inputs or a full Profile. */\nexport function countFilledDimensions(input: ProfileDimensionInputs | Profile): number {\n const map = 'hasAvatar' in input ? dimensionsFromInputs(input) : getFilledDimensionsMap(input);\n let n = 0;\n for (const v of Object.values(map)) {\n if (v) n++;\n }\n return n;\n}\n","import { z } from 'zod';\n\n/**\n * Grapheme-aware refinement matching the AT Protocol lexicon `maxGraphemes`\n * constraint. JS strings are sequences of UTF-16 code units, but lexicon\n * `maxGraphemes` counts user-perceived characters (grapheme clusters), so\n * emoji sequences, regional indicators, ZWJ joins, and combining marks all\n * count as one unit each. We use `Intl.Segmenter` to enforce this correctly.\n */\nexport function maxGraphemes(max: number) {\n return (value: string): boolean => {\n const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n let count = 0;\n for (const _ of segmenter.segment(value)) {\n count++;\n if (count > max) return false;\n }\n return true;\n };\n}\n\n/** Decentralized identifier, AT Protocol `format: did`. */\nexport const didSchema = z.string().regex(/^did:[a-z]+:[a-zA-Z0-9._:%-]+$/, 'Invalid DID');\n\n/** RFC 3339 datetime with timezone offset, AT Protocol `format: datetime`. */\nexport const datetimeSchema = z.string().datetime({ offset: true });\n\n/** Generic AT-URI, AT Protocol `format: at-uri`. */\nexport const atUriSchema = z.string().regex(/^at:\\/\\/[^\\s]+$/, 'Invalid AT-URI');\n\n/** Content identifier, AT Protocol `format: cid`. Loose validation -- accepts CIDv0 and CIDv1. */\nexport const cidSchema = z\n .string()\n .regex(/^(Qm[1-9A-HJ-NP-Za-km-z]{44}|b[A-Za-z0-9+/=]+)$/, 'Invalid CID');\n\n/** BCP 47 language tag, AT Protocol `format: language`. */\nexport const languageTagSchema = z\n .string()\n .regex(/^[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*$/, 'Invalid BCP 47 language tag');\n\n/** Generic URI, AT Protocol `format: uri`. */\nexport const uriSchema = z.string().url();\n\n/**\n * StrongRef shape from `com.atproto.repo.strongRef` -- pins a record by both\n * AT-URI (identity) and CID (version).\n */\nexport const strongRefSchema = z.object({\n uri: atUriSchema,\n cid: cidSchema,\n});\n\n/**\n * Self-labels shape from `com.atproto.label.defs#selfLabels`. Modelled\n * permissively because clients rarely construct this directly; the AppView\n * handles label validation.\n */\nexport const selfLabelsSchema = z.object({\n $type: z.literal('com.atproto.label.defs#selfLabels').optional(),\n values: z.array(z.object({ val: z.string() })),\n});\n","import { z } from 'zod';\n\nimport { datetimeSchema, strongRefSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.endorsement.confirmation` records.\n * Lives in the endorsee's PDS to approve display of an endorsement.\n */\nexport const EndorsementConfirmationRecordSchema = z.object({\n endorsement: strongRefSchema,\n createdAt: datetimeSchema,\n});\n\nexport type EndorsementConfirmationRecord = z.infer<typeof EndorsementConfirmationRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes, strongRefSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.endorsement` records. Lives in the endorser's PDS;\n * the endorser identity is implicit (whoever owns the repository).\n */\nexport const EndorsementRecordSchema = z.object({\n subject: didSchema,\n skill: strongRefSchema,\n skillName: z.string().min(1).refine(maxGraphemes(64)).max(640),\n comment: z.string().refine(maxGraphemes(300)).max(3000).optional(),\n createdAt: datetimeSchema,\n});\n\nexport type EndorsementRecord = z.infer<typeof EndorsementRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.graph.follow` records.\n * One-way professional follow; lives in the follower's PDS.\n */\nexport const GraphFollowRecordSchema = z.object({\n subject: didSchema,\n createdAt: datetimeSchema,\n});\n\nexport type GraphFollowRecord = z.infer<typeof GraphFollowRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes, selfLabelsSchema, uriSchema } from './shared.js';\n\n/** Zod schema for `id.sifa.profile.certification` records. */\nexport const ProfileCertificationRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n authority: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n authorityDid: didSchema.optional(),\n credentialId: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n credentialUrl: uriSchema.optional(),\n issuedAt: datetimeSchema.optional(),\n expiresAt: datetimeSchema.optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileCertificationRecord = z.infer<typeof ProfileCertificationRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes, strongRefSchema } from './shared.js';\n\n/** Zod schema for `id.sifa.profile.course` records. */\nexport const ProfileCourseRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(200)).max(2000),\n number: z.string().refine(maxGraphemes(50)).max(500).optional(),\n institution: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n education: strongRefSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileCourseRecord = z.infer<typeof ProfileCourseRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes, selfLabelsSchema } from './shared.js';\n\n/** Zod schema for `id.sifa.profile.education` records. */\nexport const ProfileEducationRecordSchema = z.object({\n institution: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n institutionDid: didSchema.optional(),\n degree: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n fieldOfStudy: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n grade: z.string().refine(maxGraphemes(50)).max(500).optional(),\n activities: z.string().refine(maxGraphemes(1000)).max(10000).optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n location: z.unknown().optional(),\n startedAt: datetimeSchema.optional(),\n endedAt: datetimeSchema.optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileEducationRecord = z.infer<typeof ProfileEducationRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes, uriSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.profile.externalAccount` records.\n *\n * `platform` is advisory (`knownValues` in the lexicon) -- known values live\n * under `id.sifa.defs#platform*` but unknown values are accepted.\n */\nexport const ProfileExternalAccountRecordSchema = z.object({\n platform: z.string(),\n url: uriSchema,\n label: z.string().refine(maxGraphemes(64)).max(640).optional(),\n feedUrl: uriSchema.optional(),\n isPrimary: z.boolean().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileExternalAccountRecord = z.infer<typeof ProfileExternalAccountRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes } from './shared.js';\n\n/** Zod schema for `id.sifa.profile.honor` records. */\nexport const ProfileHonorRecordSchema = z.object({\n title: z.string().min(1).refine(maxGraphemes(200)).max(2000),\n issuer: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n issuerDid: didSchema.optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n awardedAt: datetimeSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileHonorRecord = z.infer<typeof ProfileHonorRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.profile.language` records.\n *\n * `proficiency` is advisory (`knownValues` in the lexicon) -- known values\n * are the five-level LinkedIn-compatible scale under `id.sifa.defs#*`.\n */\nexport const ProfileLanguageRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(64)).max(640),\n proficiency: z.string().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileLanguageRecord = z.infer<typeof ProfileLanguageRecordSchema>;\n","import { z } from 'zod';\n\nimport {\n datetimeSchema,\n didSchema,\n maxGraphemes,\n selfLabelsSchema,\n strongRefSchema,\n} from './shared.js';\n\n/** Zod schema for `id.sifa.profile.position` records. */\nexport const ProfilePositionRecordSchema = z.object({\n company: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n companyDid: didSchema.optional(),\n title: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n employmentType: z.string().optional(),\n workplaceType: z.string().optional(),\n location: z.unknown().optional(),\n startedAt: datetimeSchema,\n endedAt: datetimeSchema.optional(),\n skills: z.array(strongRefSchema).max(50).optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfilePositionRecord = z.infer<typeof ProfilePositionRecordSchema>;\n","import { z } from 'zod';\n\nimport {\n datetimeSchema,\n maxGraphemes,\n selfLabelsSchema,\n strongRefSchema,\n uriSchema,\n} from './shared.js';\n\n/** Zod schema for `id.sifa.profile.project` records. */\nexport const ProfileProjectRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n url: uriSchema.optional(),\n position: strongRefSchema.optional(),\n startedAt: datetimeSchema.optional(),\n endedAt: datetimeSchema.optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileProjectRecord = z.infer<typeof ProfileProjectRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes, uriSchema } from './shared.js';\n\n/** Author shape from `id.sifa.profile.publication#author`. */\nexport const PublicationAuthorSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n did: didSchema.optional(),\n});\n\nexport type PublicationAuthor = z.infer<typeof PublicationAuthorSchema>;\n\n/** Zod schema for `id.sifa.profile.publication` records. */\nexport const ProfilePublicationRecordSchema = z.object({\n title: z.string().min(1).refine(maxGraphemes(200)).max(2000),\n publisher: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n url: uriSchema.optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n authors: z.array(PublicationAuthorSchema).max(50).optional(),\n publishedAt: datetimeSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfilePublicationRecord = z.infer<typeof ProfilePublicationRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, languageTagSchema, maxGraphemes, selfLabelsSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.profile.self` records. Singleton (record key `self`).\n *\n * `knownValues` on `openTo` and `preferredWorkplace` are advisory per the\n * lexicon spec -- unknown values are allowed, but documented options live\n * under the `id.sifa.defs#*` namespace.\n */\nexport const ProfileSelfRecordSchema = z.object({\n headline: z.string().refine(maxGraphemes(120)).max(1200).optional(),\n about: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n industry: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n givenName: z.string().refine(maxGraphemes(64)).max(640).optional(),\n familyName: z.string().refine(maxGraphemes(64)).max(640).optional(),\n location: z.unknown().optional(),\n openTo: z.array(z.string()).max(10).optional(),\n preferredWorkplace: z.array(z.string()).max(3).optional(),\n langs: z.array(languageTagSchema).max(3).optional(),\n labels: selfLabelsSchema.optional(),\n discoverable: z.boolean().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileSelfRecord = z.infer<typeof ProfileSelfRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.profile.skill` records.\n *\n * `category` is advisory (`knownValues` in the lexicon) -- known values live\n * under `id.sifa.defs#*` but unknown values are accepted.\n */\nexport const ProfileSkillRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(64)).max(640),\n category: z.string().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileSkillRecord = z.infer<typeof ProfileSkillRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes } from './shared.js';\n\n/** Zod schema for `id.sifa.profile.volunteering` records. */\nexport const ProfileVolunteeringRecordSchema = z.object({\n organization: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n organizationDid: didSchema.optional(),\n role: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n cause: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n startedAt: datetimeSchema.optional(),\n endedAt: datetimeSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileVolunteeringRecord = z.infer<typeof ProfileVolunteeringRecordSchema>;\n","/**\n * Sifa SDK -- public client library for the Sifa AppView on AT Protocol.\n *\n * Pre-1.0: the public API is unstable and may change in any minor release.\n *\n * @see https://github.com/singi-labs/sifa-sdk\n */\n\ndeclare const __SIFA_SDK_VERSION__: string;\n\nexport const SIFA_SDK_VERSION: string = __SIFA_SDK_VERSION__;\n\nexport type {\n ActiveApp,\n Endorsement,\n EndorsementData,\n ExternalAccount,\n ExternalAccountKeytraceClaim,\n FeedItem,\n LanguageProficiency,\n LocationValue,\n PdsProviderInfo,\n Profile,\n ProfileCertification,\n ProfileCourse,\n ProfileEducation,\n ProfileHonor,\n ProfileIndustry,\n ProfileLanguage,\n ProfileLocation,\n ProfileOverrideSource,\n ProfilePosition,\n ProfileProject,\n ProfilePublication,\n ProfileSkill,\n ProfileVolunteering,\n PublicationContributor,\n SkillRef,\n SkillSuggestion,\n TrustStat,\n VerifiedAccount,\n} from './types/index.js';\n\nexport {\n CATEGORY_LABELS,\n CATEGORY_ORDER,\n CONTINENTS,\n COUNTRIES,\n EMPLOYMENT_TYPE_GROUPS,\n EMPLOYMENT_TYPE_LABELS,\n INDUSTRY_OPTIONS,\n OPEN_TO_OPTIONS,\n findIndustry,\n getEmploymentTypeLabel,\n getIndustryLabelKey,\n getOpenToLabelKey,\n getWorkplaceTypeLabel,\n PLATFORM_LABELS,\n PLATFORM_OPTIONS,\n SKILL_CATEGORIES,\n WORKPLACE_TYPE_LABELS,\n WORKPLACE_TYPE_OPTIONS,\n dedupeSkills,\n getContinent,\n getFaviconUrl,\n getPlatformLabel,\n groupSkillsByCategory,\n isKnownPlatform,\n type ContinentCode,\n type EmploymentTypeGroup,\n type EmploymentTypeOption,\n type IndustryOption,\n type MergedProfileSkill,\n type OpenToOption,\n type PlatformId,\n type SkillCategory,\n type WorkplaceTypeOption,\n} from './taxonomy/index.js';\n\nexport {\n certDateExtractor,\n contrastRatio,\n countryCodeToFlag,\n dateRangeExtractor,\n detectPdsProvider,\n formatDistanceToNow,\n formatLocation,\n formatRelativeTime,\n getDisplayLabel,\n getHandleStem,\n getPdsDisplayName,\n isValidRgbColor,\n lexiconDateExtractor,\n limitCombiningMarks,\n meetsContrastAA,\n parseLocationString,\n pdsProviderFromApi,\n relativeLuminance,\n rgbToString,\n sanitizeDisplayText,\n sanitizeHandleInput,\n singleDateExtractor,\n sortByDateDesc,\n truncateGraphemes,\n type PdsProvider,\n type RgbColor,\n} from './format/index.js';\n\nexport {\n COMPLETENESS_MAX_SCORE,\n completenessPercent,\n completenessScore,\n DIMENSIONS_MAX_SCORE,\n MIN_SKILLS,\n countFilledDimensions,\n dimensionsFromInputs,\n getFilledDimensionsMap,\n profileToDimensionInputs,\n type DimensionKey,\n type DimensionMap,\n type ProfileCompletion,\n type ProfileDimensionInputs,\n} from './logic/index.js';\n\nexport {\n EndorsementConfirmationRecordSchema,\n EndorsementRecordSchema,\n GraphFollowRecordSchema,\n ProfileCertificationRecordSchema,\n ProfileCourseRecordSchema,\n ProfileEducationRecordSchema,\n ProfileExternalAccountRecordSchema,\n ProfileHonorRecordSchema,\n ProfileLanguageRecordSchema,\n ProfilePositionRecordSchema,\n ProfileProjectRecordSchema,\n ProfilePublicationRecordSchema,\n ProfileSelfRecordSchema,\n ProfileSkillRecordSchema,\n ProfileVolunteeringRecordSchema,\n PublicationAuthorSchema,\n atUriSchema,\n cidSchema,\n datetimeSchema,\n didSchema,\n languageTagSchema,\n maxGraphemes,\n selfLabelsSchema,\n strongRefSchema,\n uriSchema,\n type EndorsementConfirmationRecord,\n type EndorsementRecord,\n type GraphFollowRecord,\n type ProfileCertificationRecord,\n type ProfileCourseRecord,\n type ProfileEducationRecord,\n type ProfileExternalAccountRecord,\n type ProfileHonorRecord,\n type ProfileLanguageRecord,\n type ProfilePositionRecord,\n type ProfileProjectRecord,\n type ProfilePublicationRecord,\n type ProfileSelfRecord,\n type ProfileSkillRecord,\n type ProfileVolunteeringRecord,\n type PublicationAuthor,\n} from './schemas/index.js';\n"]}
1
+ {"version":3,"sources":["../src/taxonomy/continents.ts","../src/taxonomy/countries.ts","../src/taxonomy/employment-type.ts","../src/taxonomy/industry-taxonomy.ts","../src/taxonomy/open-to.ts","../src/taxonomy/workplace-type.ts","../src/taxonomy/platforms.ts","../src/taxonomy/skill-categories.ts","../src/taxonomy/skill-grouping.ts","../src/taxonomy/activity-tiers.json","../src/taxonomy/activity-tiers.ts","../src/format/format-time.ts","../src/format/sort-by-date.ts","../src/format/handle-utils.ts","../src/format/location-utils.ts","../src/format/pds-utils.ts","../src/format/text-sanitize.ts","../src/format/text-truncate.ts","../src/format/time-utils.ts","../src/format/wcag-contrast.ts","../src/cards/app-url-patterns.ts","../src/cards/resolve-card-url.ts","../src/logic/profile-completeness.ts","../src/logic/profile-dimensions.ts","../src/schemas/shared.ts","../src/schemas/endorsement-confirmation.ts","../src/schemas/endorsement.ts","../src/schemas/graph-follow.ts","../src/schemas/profile-certification.ts","../src/schemas/profile-course.ts","../src/schemas/profile-education.ts","../src/schemas/profile-external-account.ts","../src/schemas/profile-honor.ts","../src/schemas/profile-language.ts","../src/schemas/profile-position.ts","../src/schemas/profile-project.ts","../src/schemas/profile-publication.ts","../src/schemas/profile-self.ts","../src/schemas/profile-skill.ts","../src/schemas/profile-volunteering.ts","../src/index.ts"],"names":["z","parsed"],"mappings":";;;;;AAEO,IAAM,UAAA,GAAmE;AAAA,EAC9E,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,QAAA,EAAS;AAAA,EAC7B,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,YAAA,EAAa;AAAA,EACjC,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAA,EAAO;AAAA,EAC3B,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,QAAA,EAAS;AAAA,EAC7B,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,eAAA,EAAgB;AAAA,EACpC,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,SAAA,EAAU;AAAA,EAC9B,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,eAAA;AACtB;AAEA,IAAM,oBAAA,GAAsD;AAAA,EAC1D,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EA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","file":"index.cjs","sourcesContent":["export type ContinentCode = 'AF' | 'AN' | 'AS' | 'EU' | 'NA' | 'OC' | 'SA';\n\nexport const CONTINENTS: ReadonlyArray<{ code: ContinentCode; name: string }> = [\n { code: 'AF', name: 'Africa' },\n { code: 'AN', name: 'Antarctica' },\n { code: 'AS', name: 'Asia' },\n { code: 'EU', name: 'Europe' },\n { code: 'NA', name: 'North America' },\n { code: 'OC', name: 'Oceania' },\n { code: 'SA', name: 'South America' },\n];\n\nconst COUNTRY_TO_CONTINENT: Record<string, ContinentCode> = {\n AD: 'EU',\n AE: 'AS',\n AF: 'AS',\n AG: 'NA',\n AL: 'EU',\n AM: 'AS',\n AO: 'AF',\n AR: 'SA',\n AT: 'EU',\n AU: 'OC',\n AZ: 'AS',\n BA: 'EU',\n BB: 'NA',\n BD: 'AS',\n BE: 'EU',\n BF: 'AF',\n BG: 'EU',\n BH: 'AS',\n BI: 'AF',\n BJ: 'AF',\n BN: 'AS',\n BO: 'SA',\n BR: 'SA',\n BS: 'NA',\n BT: 'AS',\n BW: 'AF',\n BY: 'EU',\n BZ: 'NA',\n CA: 'NA',\n CD: 'AF',\n CF: 'AF',\n CG: 'AF',\n CH: 'EU',\n CI: 'AF',\n CL: 'SA',\n CM: 'AF',\n CN: 'AS',\n CO: 'SA',\n CR: 'NA',\n CU: 'NA',\n CV: 'AF',\n CY: 'AS',\n CZ: 'EU',\n DE: 'EU',\n DJ: 'AF',\n DK: 'EU',\n DM: 'NA',\n DO: 'NA',\n DZ: 'AF',\n EC: 'SA',\n EE: 'EU',\n EG: 'AF',\n ER: 'AF',\n ES: 'EU',\n ET: 'AF',\n FI: 'EU',\n FJ: 'OC',\n FR: 'EU',\n GA: 'AF',\n GB: 'EU',\n GD: 'NA',\n GE: 'AS',\n GH: 'AF',\n GM: 'AF',\n GN: 'AF',\n GQ: 'AF',\n GR: 'EU',\n GT: 'NA',\n GW: 'AF',\n GY: 'SA',\n HK: 'AS',\n HN: 'NA',\n HR: 'EU',\n HT: 'NA',\n HU: 'EU',\n ID: 'AS',\n IE: 'EU',\n IL: 'AS',\n IN: 'AS',\n IQ: 'AS',\n IR: 'AS',\n IS: 'EU',\n IT: 'EU',\n JM: 'NA',\n JO: 'AS',\n JP: 'AS',\n KE: 'AF',\n KG: 'AS',\n KH: 'AS',\n KM: 'AF',\n KN: 'NA',\n KP: 'AS',\n KR: 'AS',\n KW: 'AS',\n KZ: 'AS',\n LA: 'AS',\n LB: 'AS',\n LC: 'NA',\n LI: 'EU',\n LK: 'AS',\n LR: 'AF',\n LS: 'AF',\n LT: 'EU',\n LU: 'EU',\n LV: 'EU',\n LY: 'AF',\n MA: 'AF',\n MC: 'EU',\n MD: 'EU',\n ME: 'EU',\n MG: 'AF',\n MK: 'EU',\n ML: 'AF',\n MM: 'AS',\n MN: 'AS',\n MO: 'AS',\n MR: 'AF',\n MT: 'EU',\n MU: 'AF',\n MV: 'AS',\n MW: 'AF',\n MX: 'NA',\n MY: 'AS',\n MZ: 'AF',\n NA: 'AF',\n NE: 'AF',\n NG: 'AF',\n NI: 'NA',\n NL: 'EU',\n NO: 'EU',\n NP: 'AS',\n NZ: 'OC',\n OM: 'AS',\n PA: 'NA',\n PE: 'SA',\n PG: 'OC',\n PH: 'AS',\n PK: 'AS',\n PL: 'EU',\n PR: 'NA',\n PS: 'AS',\n PT: 'EU',\n PY: 'SA',\n QA: 'AS',\n RO: 'EU',\n RS: 'EU',\n RU: 'EU',\n RW: 'AF',\n SA: 'AS',\n SB: 'OC',\n SC: 'AF',\n SD: 'AF',\n SE: 'EU',\n SG: 'AS',\n SI: 'EU',\n SK: 'EU',\n SL: 'AF',\n SM: 'EU',\n SN: 'AF',\n SO: 'AF',\n SR: 'SA',\n SS: 'AF',\n ST: 'AF',\n SV: 'NA',\n SY: 'AS',\n SZ: 'AF',\n TD: 'AF',\n TG: 'AF',\n TH: 'AS',\n TJ: 'AS',\n TL: 'AS',\n TM: 'AS',\n TN: 'AF',\n TO: 'OC',\n TR: 'AS',\n TT: 'NA',\n TW: 'AS',\n TZ: 'AF',\n UA: 'EU',\n UG: 'AF',\n US: 'NA',\n UY: 'SA',\n UZ: 'AS',\n VA: 'EU',\n VC: 'NA',\n VE: 'SA',\n VN: 'AS',\n VU: 'OC',\n WS: 'OC',\n XK: 'EU',\n YE: 'AS',\n ZA: 'AF',\n ZM: 'AF',\n ZW: 'AF',\n};\n\nexport function getContinent(countryCode: string): ContinentCode | null {\n if (!countryCode) return null;\n return COUNTRY_TO_CONTINENT[countryCode.toUpperCase()] ?? null;\n}\n","/** ISO 3166-1 country list for local fallback when GeoNames is unavailable. */\nexport const COUNTRIES: ReadonlyArray<{ code: string; name: string }> = [\n { code: 'AF', name: 'Afghanistan' },\n { code: 'AL', name: 'Albania' },\n { code: 'DZ', name: 'Algeria' },\n { code: 'AD', name: 'Andorra' },\n { code: 'AO', name: 'Angola' },\n { code: 'AG', name: 'Antigua and Barbuda' },\n { code: 'AR', name: 'Argentina' },\n { code: 'AM', name: 'Armenia' },\n { code: 'AU', name: 'Australia' },\n { code: 'AT', name: 'Austria' },\n { code: 'AZ', name: 'Azerbaijan' },\n { code: 'BS', name: 'Bahamas' },\n { code: 'BH', name: 'Bahrain' },\n { code: 'BD', name: 'Bangladesh' },\n { code: 'BB', name: 'Barbados' },\n { code: 'BY', name: 'Belarus' },\n { code: 'BE', name: 'Belgium' },\n { code: 'BZ', name: 'Belize' },\n { code: 'BJ', name: 'Benin' },\n { code: 'BT', name: 'Bhutan' },\n { code: 'BO', name: 'Bolivia' },\n { code: 'BA', name: 'Bosnia and Herzegovina' },\n { code: 'BW', name: 'Botswana' },\n { code: 'BR', name: 'Brazil' },\n { code: 'BN', name: 'Brunei' },\n { code: 'BG', name: 'Bulgaria' },\n { code: 'BF', name: 'Burkina Faso' },\n { code: 'BI', name: 'Burundi' },\n { code: 'CV', name: 'Cabo Verde' },\n { code: 'KH', name: 'Cambodia' },\n { code: 'CM', name: 'Cameroon' },\n { code: 'CA', name: 'Canada' },\n { code: 'CF', name: 'Central African Republic' },\n { code: 'TD', name: 'Chad' },\n { code: 'CL', name: 'Chile' },\n { code: 'CN', name: 'China' },\n { code: 'CO', name: 'Colombia' },\n { code: 'KM', name: 'Comoros' },\n { code: 'CG', name: 'Congo' },\n { code: 'CD', name: 'Congo (DRC)' },\n { code: 'CR', name: 'Costa Rica' },\n { code: 'CI', name: \"Cote d'Ivoire\" },\n { code: 'HR', name: 'Croatia' },\n { code: 'CU', name: 'Cuba' },\n { code: 'CY', name: 'Cyprus' },\n { code: 'CZ', name: 'Czechia' },\n { code: 'DK', name: 'Denmark' },\n { code: 'DJ', name: 'Djibouti' },\n { code: 'DM', name: 'Dominica' },\n { code: 'DO', name: 'Dominican Republic' },\n { code: 'EC', name: 'Ecuador' },\n { code: 'EG', name: 'Egypt' },\n { code: 'SV', name: 'El Salvador' },\n { code: 'GQ', name: 'Equatorial Guinea' },\n { code: 'ER', name: 'Eritrea' },\n { code: 'EE', name: 'Estonia' },\n { code: 'SZ', name: 'Eswatini' },\n { code: 'ET', name: 'Ethiopia' },\n { code: 'FJ', name: 'Fiji' },\n { code: 'FI', name: 'Finland' },\n { code: 'FR', name: 'France' },\n { code: 'GA', name: 'Gabon' },\n { code: 'GM', name: 'Gambia' },\n { code: 'GE', name: 'Georgia' },\n { code: 'DE', name: 'Germany' },\n { code: 'GH', name: 'Ghana' },\n { code: 'GR', name: 'Greece' },\n { code: 'GD', name: 'Grenada' },\n { code: 'GT', name: 'Guatemala' },\n { code: 'GN', name: 'Guinea' },\n { code: 'GW', name: 'Guinea-Bissau' },\n { code: 'GY', name: 'Guyana' },\n { code: 'HT', name: 'Haiti' },\n { code: 'HN', name: 'Honduras' },\n { code: 'HU', name: 'Hungary' },\n { code: 'IS', name: 'Iceland' },\n { code: 'IN', name: 'India' },\n { code: 'ID', name: 'Indonesia' },\n { code: 'IR', name: 'Iran' },\n { code: 'IQ', name: 'Iraq' },\n { code: 'IE', name: 'Ireland' },\n { code: 'IL', name: 'Israel' },\n { code: 'IT', name: 'Italy' },\n { code: 'JM', name: 'Jamaica' },\n { code: 'JP', name: 'Japan' },\n { code: 'JO', name: 'Jordan' },\n { code: 'KZ', name: 'Kazakhstan' },\n { code: 'KE', name: 'Kenya' },\n { code: 'KI', name: 'Kiribati' },\n { code: 'KP', name: 'North Korea' },\n { code: 'KR', name: 'South Korea' },\n { code: 'KW', name: 'Kuwait' },\n { code: 'KG', name: 'Kyrgyzstan' },\n { code: 'LA', name: 'Laos' },\n { code: 'LV', name: 'Latvia' },\n { code: 'LB', name: 'Lebanon' },\n { code: 'LS', name: 'Lesotho' },\n { code: 'LR', name: 'Liberia' },\n { code: 'LY', name: 'Libya' },\n { code: 'LI', name: 'Liechtenstein' },\n { code: 'LT', name: 'Lithuania' },\n { code: 'LU', name: 'Luxembourg' },\n { code: 'MG', name: 'Madagascar' },\n { code: 'MW', name: 'Malawi' },\n { code: 'MY', name: 'Malaysia' },\n { code: 'MV', name: 'Maldives' },\n { code: 'ML', name: 'Mali' },\n { code: 'MT', name: 'Malta' },\n { code: 'MH', name: 'Marshall Islands' },\n { code: 'MR', name: 'Mauritania' },\n { code: 'MU', name: 'Mauritius' },\n { code: 'MX', name: 'Mexico' },\n { code: 'FM', name: 'Micronesia' },\n { code: 'MD', name: 'Moldova' },\n { code: 'MC', name: 'Monaco' },\n { code: 'MN', name: 'Mongolia' },\n { code: 'ME', name: 'Montenegro' },\n { code: 'MA', name: 'Morocco' },\n { code: 'MZ', name: 'Mozambique' },\n { code: 'MM', name: 'Myanmar' },\n { code: 'NA', name: 'Namibia' },\n { code: 'NR', name: 'Nauru' },\n { code: 'NP', name: 'Nepal' },\n { code: 'NL', name: 'Netherlands' },\n { code: 'NZ', name: 'New Zealand' },\n { code: 'NI', name: 'Nicaragua' },\n { code: 'NE', name: 'Niger' },\n { code: 'NG', name: 'Nigeria' },\n { code: 'MK', name: 'North Macedonia' },\n { code: 'NO', name: 'Norway' },\n { code: 'OM', name: 'Oman' },\n { code: 'PK', name: 'Pakistan' },\n { code: 'PW', name: 'Palau' },\n { code: 'PS', name: 'Palestine' },\n { code: 'PA', name: 'Panama' },\n { code: 'PG', name: 'Papua New Guinea' },\n { code: 'PY', name: 'Paraguay' },\n { code: 'PE', name: 'Peru' },\n { code: 'PH', name: 'Philippines' },\n { code: 'PL', name: 'Poland' },\n { code: 'PT', name: 'Portugal' },\n { code: 'QA', name: 'Qatar' },\n { code: 'RO', name: 'Romania' },\n { code: 'RU', name: 'Russia' },\n { code: 'RW', name: 'Rwanda' },\n { code: 'KN', name: 'Saint Kitts and Nevis' },\n { code: 'LC', name: 'Saint Lucia' },\n { code: 'VC', name: 'Saint Vincent and the Grenadines' },\n { code: 'WS', name: 'Samoa' },\n { code: 'SM', name: 'San Marino' },\n { code: 'ST', name: 'Sao Tome and Principe' },\n { code: 'SA', name: 'Saudi Arabia' },\n { code: 'SN', name: 'Senegal' },\n { code: 'RS', name: 'Serbia' },\n { code: 'SC', name: 'Seychelles' },\n { code: 'SL', name: 'Sierra Leone' },\n { code: 'SG', name: 'Singapore' },\n { code: 'SK', name: 'Slovakia' },\n { code: 'SI', name: 'Slovenia' },\n { code: 'SB', name: 'Solomon Islands' },\n { code: 'SO', name: 'Somalia' },\n { code: 'ZA', name: 'South Africa' },\n { code: 'SS', name: 'South Sudan' },\n { code: 'ES', name: 'Spain' },\n { code: 'LK', name: 'Sri Lanka' },\n { code: 'SD', name: 'Sudan' },\n { code: 'SR', name: 'Suriname' },\n { code: 'SE', name: 'Sweden' },\n { code: 'CH', name: 'Switzerland' },\n { code: 'SY', name: 'Syria' },\n { code: 'TW', name: 'Taiwan' },\n { code: 'TJ', name: 'Tajikistan' },\n { code: 'TZ', name: 'Tanzania' },\n { code: 'TH', name: 'Thailand' },\n { code: 'TL', name: 'Timor-Leste' },\n { code: 'TG', name: 'Togo' },\n { code: 'TO', name: 'Tonga' },\n { code: 'TT', name: 'Trinidad and Tobago' },\n { code: 'TN', name: 'Tunisia' },\n { code: 'TR', name: 'Turkey' },\n { code: 'TM', name: 'Turkmenistan' },\n { code: 'TV', name: 'Tuvalu' },\n { code: 'UG', name: 'Uganda' },\n { code: 'UA', name: 'Ukraine' },\n { code: 'AE', name: 'United Arab Emirates' },\n { code: 'GB', name: 'United Kingdom' },\n { code: 'US', name: 'United States' },\n { code: 'UY', name: 'Uruguay' },\n { code: 'UZ', name: 'Uzbekistan' },\n { code: 'VU', name: 'Vanuatu' },\n { code: 'VA', name: 'Vatican City' },\n { code: 'VE', name: 'Venezuela' },\n { code: 'VN', name: 'Vietnam' },\n { code: 'YE', name: 'Yemen' },\n { code: 'ZM', name: 'Zambia' },\n { code: 'ZW', name: 'Zimbabwe' },\n] as const;\n","/**\n * Employment-type taxonomy. Mirrors `id.sifa.defs#employmentType.knownValues`\n * from sifa-lexicons. Surfaces both a flat NSID→label map (for read-only\n * display) and a grouped structure (for editor dropdowns).\n */\n\nexport interface EmploymentTypeOption {\n value: string;\n label: string;\n}\n\nexport interface EmploymentTypeGroup {\n label: string;\n items: EmploymentTypeOption[];\n}\n\nexport const EMPLOYMENT_TYPE_GROUPS: EmploymentTypeGroup[] = [\n {\n label: 'Employee',\n items: [\n { value: 'id.sifa.defs#fullTime', label: 'Full-time' },\n { value: 'id.sifa.defs#partTime', label: 'Part-time' },\n { value: 'id.sifa.defs#temporary', label: 'Temporary' },\n { value: 'id.sifa.defs#seasonal', label: 'Seasonal' },\n ],\n },\n {\n label: 'Independent',\n items: [\n { value: 'id.sifa.defs#contract', label: 'Contract' },\n { value: 'id.sifa.defs#freelance', label: 'Freelance' },\n { value: 'id.sifa.defs#selfEmployed', label: 'Self-employed' },\n { value: 'id.sifa.defs#independentWork', label: 'Independent work' },\n ],\n },\n {\n label: 'Training & early-career',\n items: [\n { value: 'id.sifa.defs#internship', label: 'Internship' },\n { value: 'id.sifa.defs#apprenticeship', label: 'Apprenticeship' },\n { value: 'id.sifa.defs#fellowship', label: 'Fellowship' },\n { value: 'id.sifa.defs#trainee', label: 'Trainee' },\n ],\n },\n {\n label: 'Other',\n items: [{ value: 'id.sifa.defs#volunteer', label: 'Volunteer' }],\n },\n];\n\nexport const EMPLOYMENT_TYPE_LABELS: Record<string, string> = Object.fromEntries(\n EMPLOYMENT_TYPE_GROUPS.flatMap((g) => g.items).map((o) => [o.value, o.label]),\n);\n\n/** Resolve a label for an employment-type token. Falls back to the raw value. */\nexport function getEmploymentTypeLabel(value: string | undefined | null): string | undefined {\n if (!value) return undefined;\n return EMPLOYMENT_TYPE_LABELS[value] ?? value;\n}\n","/** Two-level industry/domain taxonomy for profile classification. */\n\nexport interface IndustryOption {\n value: string;\n labelKey: string;\n domains: { value: string; labelKey: string }[];\n}\n\nexport const INDUSTRY_OPTIONS: IndustryOption[] = [\n {\n value: 'id.sifa.defs#industryTechnology',\n labelKey: 'industryTechnology',\n domains: [\n { value: 'id.sifa.defs#domainSoftwareEngineering', labelKey: 'domainSoftwareEngineering' },\n { value: 'id.sifa.defs#domainDataScience', labelKey: 'domainDataScience' },\n { value: 'id.sifa.defs#domainCybersecurity', labelKey: 'domainCybersecurity' },\n { value: 'id.sifa.defs#domainDevops', labelKey: 'domainDevops' },\n { value: 'id.sifa.defs#domainProductDesign', labelKey: 'domainProductDesign' },\n { value: 'id.sifa.defs#domainGameDev', labelKey: 'domainGameDev' },\n ],\n },\n {\n value: 'id.sifa.defs#industryFinance',\n labelKey: 'industryFinance',\n domains: [\n { value: 'id.sifa.defs#domainBanking', labelKey: 'domainBanking' },\n { value: 'id.sifa.defs#domainFintech', labelKey: 'domainFintech' },\n { value: 'id.sifa.defs#domainInsurance', labelKey: 'domainInsurance' },\n { value: 'id.sifa.defs#domainInvestmentMgmt', labelKey: 'domainInvestmentMgmt' },\n ],\n },\n {\n value: 'id.sifa.defs#industryHealthcare',\n labelKey: 'industryHealthcare',\n domains: [\n { value: 'id.sifa.defs#domainClinicalResearch', labelKey: 'domainClinicalResearch' },\n { value: 'id.sifa.defs#domainHealthtech', labelKey: 'domainHealthtech' },\n { value: 'id.sifa.defs#domainPharma', labelKey: 'domainPharma' },\n ],\n },\n {\n value: 'id.sifa.defs#industryEducation',\n labelKey: 'industryEducation',\n domains: [\n { value: 'id.sifa.defs#domainHigherEd', labelKey: 'domainHigherEd' },\n { value: 'id.sifa.defs#domainEdtech', labelKey: 'domainEdtech' },\n { value: 'id.sifa.defs#domainPrimarySecondary', labelKey: 'domainPrimarySecondary' },\n ],\n },\n {\n value: 'id.sifa.defs#industryMedia',\n labelKey: 'industryMedia',\n domains: [\n { value: 'id.sifa.defs#domainJournalism', labelKey: 'domainJournalism' },\n { value: 'id.sifa.defs#domainFilmVideo', labelKey: 'domainFilmVideo' },\n { value: 'id.sifa.defs#domainGaming', labelKey: 'domainGaming' },\n { value: 'id.sifa.defs#domainAdvertising', labelKey: 'domainAdvertising' },\n ],\n },\n {\n value: 'id.sifa.defs#industryRetail',\n labelKey: 'industryRetail',\n domains: [\n { value: 'id.sifa.defs#domainEcommerce', labelKey: 'domainEcommerce' },\n { value: 'id.sifa.defs#domainSupplyChain', labelKey: 'domainSupplyChain' },\n ],\n },\n {\n value: 'id.sifa.defs#industryManufacturing',\n labelKey: 'industryManufacturing',\n domains: [\n { value: 'id.sifa.defs#domainAutomotive', labelKey: 'domainAutomotive' },\n { value: 'id.sifa.defs#domainAerospace', labelKey: 'domainAerospace' },\n { value: 'id.sifa.defs#domainHardware', labelKey: 'domainHardware' },\n ],\n },\n {\n value: 'id.sifa.defs#industryEnergy',\n labelKey: 'industryEnergy',\n domains: [\n { value: 'id.sifa.defs#domainRenewables', labelKey: 'domainRenewables' },\n { value: 'id.sifa.defs#domainOilGas', labelKey: 'domainOilGas' },\n { value: 'id.sifa.defs#domainClimateTech', labelKey: 'domainClimateTech' },\n ],\n },\n {\n value: 'id.sifa.defs#industryGovernment',\n labelKey: 'industryGovernment',\n domains: [\n { value: 'id.sifa.defs#domainPublicPolicy', labelKey: 'domainPublicPolicy' },\n { value: 'id.sifa.defs#domainDefense', labelKey: 'domainDefense' },\n ],\n },\n {\n value: 'id.sifa.defs#industryLegal',\n labelKey: 'industryLegal',\n domains: [\n { value: 'id.sifa.defs#domainIpLaw', labelKey: 'domainIpLaw' },\n { value: 'id.sifa.defs#domainCompliance', labelKey: 'domainCompliance' },\n ],\n },\n {\n value: 'id.sifa.defs#industryConsulting',\n labelKey: 'industryConsulting',\n domains: [\n { value: 'id.sifa.defs#domainManagementConsulting', labelKey: 'domainManagementConsulting' },\n { value: 'id.sifa.defs#domainDevrel', labelKey: 'domainDevrel' },\n { value: 'id.sifa.defs#domainHrRecruitment', labelKey: 'domainHrRecruitment' },\n ],\n },\n {\n value: 'id.sifa.defs#industryNonprofit',\n labelKey: 'industryNonprofit',\n domains: [\n { value: 'id.sifa.defs#domainHumanRights', labelKey: 'domainHumanRights' },\n { value: 'id.sifa.defs#domainOpenSource', labelKey: 'domainOpenSource' },\n ],\n },\n {\n value: 'id.sifa.defs#industryRealEstate',\n labelKey: 'industryRealEstate',\n domains: [{ value: 'id.sifa.defs#domainProptech', labelKey: 'domainProptech' }],\n },\n {\n value: 'id.sifa.defs#industryTransport',\n labelKey: 'industryTransport',\n domains: [\n { value: 'id.sifa.defs#domainAutonomousVehicles', labelKey: 'domainAutonomousVehicles' },\n { value: 'id.sifa.defs#domainLogistics', labelKey: 'domainLogistics' },\n ],\n },\n {\n value: 'id.sifa.defs#industryAgriculture',\n labelKey: 'industryAgriculture',\n domains: [\n { value: 'id.sifa.defs#domainAgritech', labelKey: 'domainAgritech' },\n { value: 'id.sifa.defs#domainFoodTech', labelKey: 'domainFoodTech' },\n ],\n },\n {\n value: 'id.sifa.defs#industryHospitality',\n labelKey: 'industryHospitality',\n domains: [\n { value: 'id.sifa.defs#domainHotels', labelKey: 'domainHotels' },\n { value: 'id.sifa.defs#domainTravelTourism', labelKey: 'domainTravelTourism' },\n { value: 'id.sifa.defs#domainFoodBeverage', labelKey: 'domainFoodBeverage' },\n ],\n },\n {\n value: 'id.sifa.defs#industryTelecom',\n labelKey: 'industryTelecom',\n domains: [\n { value: 'id.sifa.defs#domainNetworkInfra', labelKey: 'domainNetworkInfra' },\n { value: 'id.sifa.defs#domainMobileServices', labelKey: 'domainMobileServices' },\n ],\n },\n {\n value: 'id.sifa.defs#industryMining',\n labelKey: 'industryMining',\n domains: [\n { value: 'id.sifa.defs#domainExtraction', labelKey: 'domainExtraction' },\n { value: 'id.sifa.defs#domainGeological', labelKey: 'domainGeological' },\n ],\n },\n {\n value: 'id.sifa.defs#industryFashion',\n labelKey: 'industryFashion',\n domains: [\n { value: 'id.sifa.defs#domainFashionDesign', labelKey: 'domainFashionDesign' },\n { value: 'id.sifa.defs#domainTextileManufacturing', labelKey: 'domainTextileManufacturing' },\n ],\n },\n {\n value: 'id.sifa.defs#industryMaritime',\n labelKey: 'industryMaritime',\n domains: [\n { value: 'id.sifa.defs#domainShipping', labelKey: 'domainShipping' },\n { value: 'id.sifa.defs#domainPortOperations', labelKey: 'domainPortOperations' },\n { value: 'id.sifa.defs#domainNavalArchitecture', labelKey: 'domainNavalArchitecture' },\n ],\n },\n {\n value: 'id.sifa.defs#industryOther',\n labelKey: 'industryOther',\n domains: [],\n },\n];\n\n/** Find the industry option for a given industry value. */\nexport function findIndustry(value: string | undefined | null): IndustryOption | undefined {\n if (!value) return undefined;\n return INDUSTRY_OPTIONS.find((i) => i.value === value);\n}\n\n/** Get the label key for an industry or domain token, falling back to the raw value. */\nexport function getIndustryLabelKey(value: string): string {\n for (const industry of INDUSTRY_OPTIONS) {\n if (industry.value === value) return industry.labelKey;\n for (const domain of industry.domains) {\n if (domain.value === value) return domain.labelKey;\n }\n }\n return value;\n}\n","/**\n * \"Open to\" taxonomy. Mirrors `id.sifa.defs#openToWorkStatus.knownValues` from\n * sifa-lexicons. Surfaces a single source of truth for the editor (where the\n * user picks values) and the IdentityCard (where badges are rendered).\n *\n * Shape matches `INDUSTRY_OPTIONS`: `{ value, labelKey }` so consumers can run\n * `labelKey` through their own i18n layer (e.g. next-intl `useTranslations`).\n */\n\nexport interface OpenToOption {\n value: string;\n labelKey: string;\n}\n\nexport const OPEN_TO_OPTIONS: OpenToOption[] = [\n { value: 'id.sifa.defs#fullTimeRoles', labelKey: 'fullTimeRoles' },\n { value: 'id.sifa.defs#partTimeRoles', labelKey: 'partTimeRoles' },\n { value: 'id.sifa.defs#contractRoles', labelKey: 'contractRoles' },\n { value: 'id.sifa.defs#commissions', labelKey: 'commissions' },\n { value: 'id.sifa.defs#boardPositions', labelKey: 'boardPositions' },\n { value: 'id.sifa.defs#mentoringOthers', labelKey: 'mentoringOthers' },\n { value: 'id.sifa.defs#beingMentored', labelKey: 'beingMentored' },\n { value: 'id.sifa.defs#collaborations', labelKey: 'collaborations' },\n];\n\n/**\n * Legacy aliases — tokens the lexicon used to expose but doesn't anymore.\n * Records written before the lexicon migration may still carry them; resolve\n * them to the closest current `labelKey` for display.\n */\nconst OPEN_TO_LEGACY_ALIASES: Record<string, string> = {\n 'id.sifa.defs#mentoring': 'mentoringOthers',\n};\n\nconst OPEN_TO_LABEL_KEY_MAP: Record<string, string> = {\n ...Object.fromEntries(OPEN_TO_OPTIONS.map((o) => [o.value, o.labelKey])),\n ...OPEN_TO_LEGACY_ALIASES,\n};\n\n/**\n * Resolve a `labelKey` for an `openToWorkStatus` token. Returns `undefined`\n * for tokens not in the canonical set or the legacy alias map, so callers\n * can choose their own fallback (e.g. render the raw value).\n */\nexport function getOpenToLabelKey(value: string | undefined | null): string | undefined {\n if (!value) return undefined;\n return OPEN_TO_LABEL_KEY_MAP[value];\n}\n","/**\n * Workplace-type taxonomy. Mirrors `id.sifa.defs#workplaceType.knownValues`\n * from sifa-lexicons. `remote` is retained for legacy records but the scoped\n * variants (`remoteLocal`, `remoteRegion`, `remoteGlobal`) are preferred for\n * new records per the lexicon description.\n */\n\nexport interface WorkplaceTypeOption {\n value: string;\n label: string;\n}\n\nexport const WORKPLACE_TYPE_OPTIONS: WorkplaceTypeOption[] = [\n { value: 'id.sifa.defs#onSite', label: 'On-site' },\n { value: 'id.sifa.defs#hybrid', label: 'Hybrid' },\n { value: 'id.sifa.defs#remoteLocal', label: 'Remote (same country)' },\n { value: 'id.sifa.defs#remoteRegion', label: 'Remote (same region)' },\n { value: 'id.sifa.defs#remoteGlobal', label: 'Remote (anywhere)' },\n];\n\nexport const WORKPLACE_TYPE_LABELS: Record<string, string> = {\n ...Object.fromEntries(WORKPLACE_TYPE_OPTIONS.map((o) => [o.value, o.label])),\n 'id.sifa.defs#remote': 'Remote',\n};\n\n/** Resolve a label for a workplace-type token. Falls back to the raw value. */\nexport function getWorkplaceTypeLabel(value: string | undefined | null): string | undefined {\n if (!value) return undefined;\n return WORKPLACE_TYPE_LABELS[value] ?? value;\n}\n","/**\n * Platform identifiers, labels, and URL helpers used in profile external accounts.\n *\n * This file is intentionally data-only -- icon mapping is platform-specific\n * (React DOM components on web, React Native components on mobile) and lives\n * in the consumer.\n */\n\nexport const PLATFORM_LABELS = {\n bluesky: 'Bluesky',\n github: 'GitHub',\n codeberg: 'Codeberg',\n gitlab: 'GitLab',\n forgejo: 'Forgejo',\n gitea: 'Gitea',\n linkedin: 'LinkedIn',\n youtube: 'YouTube',\n twitter: 'X (Twitter)',\n instagram: 'Instagram',\n substack: 'Substack',\n tangled: 'Tangled',\n dns: 'Domain',\n website: 'Website',\n rss: 'RSS',\n fediverse: 'Fediverse',\n orcid: 'ORCID',\n keyoxide: 'Keyoxide',\n} as const;\n\nexport type PlatformId = keyof typeof PLATFORM_LABELS;\n\nexport function isKnownPlatform(platform: string): platform is PlatformId {\n return platform in PLATFORM_LABELS;\n}\n\nexport function getPlatformLabel(platform: string): string {\n return isKnownPlatform(platform) ? PLATFORM_LABELS[platform] : PLATFORM_LABELS.website;\n}\n\n/** Platforms excluded from the \"Add Links\" dropdown (auto-derived or not accepted by API). */\nconst EXCLUDED_FROM_DROPDOWN = new Set<PlatformId>(['bluesky', 'dns', 'tangled']);\n\n/** Platforms available in the \"Add Links\" dropdown. */\nexport const PLATFORM_OPTIONS: ReadonlyArray<{ value: PlatformId; label: string }> = (\n Object.entries(PLATFORM_LABELS) as [PlatformId, string][]\n)\n .filter(([value]) => !EXCLUDED_FROM_DROPDOWN.has(value))\n .map(([value, label]) => ({ value, label }));\n\n/**\n * Build a favicon URL for a given site URL using Google's public favicon service.\n * Returns `null` if the URL cannot be parsed.\n */\nexport function getFaviconUrl(siteUrl: string): string | null {\n try {\n const { hostname } = new URL(siteUrl);\n return `https://www.google.com/s2/favicons?domain=${encodeURIComponent(hostname)}&sz=32`;\n } catch {\n return null;\n }\n}\n","export const SKILL_CATEGORIES = [\n { value: 'technical', label: 'Technical' },\n { value: 'business', label: 'Business' },\n { value: 'creative', label: 'Creative' },\n { value: 'interpersonal', label: 'Interpersonal' },\n { value: 'industry', label: 'Industry' },\n { value: 'community', label: 'Community' },\n { value: 'security', label: 'Security' },\n] as const;\n\nexport type SkillCategory = (typeof SKILL_CATEGORIES)[number]['value'];\n\nexport const CATEGORY_ORDER: ReadonlyArray<SkillCategory> = SKILL_CATEGORIES.map((c) => c.value);\n\nexport const CATEGORY_LABELS: Record<SkillCategory | 'other', string> = {\n ...(Object.fromEntries(SKILL_CATEGORIES.map((c) => [c.value, c.label])) as Record<\n SkillCategory,\n string\n >),\n other: 'Other',\n};\n","import type { ProfileSkill } from '../types/index.js';\n\nimport { CATEGORY_ORDER } from './skill-categories.js';\n\nexport type MergedProfileSkill = ProfileSkill & {\n mergedRkeys: string[];\n positionRkeys?: string[];\n};\n\n/**\n * Collapses skills that resolve to the same name (case-insensitive, trimmed).\n *\n * LinkedIn import creates one skill record per (skill, position) pair, so a\n * profile can have several \"Ruby\" rows. We surface them as a single chip with\n * all underlying rkeys exposed via `mergedRkeys` so edit/delete can fan out.\n */\nexport function dedupeSkills(skills: ProfileSkill[]): MergedProfileSkill[] {\n const groups = new Map<string, MergedProfileSkill>();\n\n for (const skill of skills) {\n const key = skill.name.trim().toLowerCase();\n const existing = groups.get(key);\n const positions = (skill as ProfileSkill & { positionRkeys?: string[] }).positionRkeys ?? [];\n\n if (!existing) {\n groups.set(key, {\n ...skill,\n mergedRkeys: [skill.rkey],\n positionRkeys: [...positions],\n });\n continue;\n }\n\n existing.mergedRkeys.push(skill.rkey);\n if (!existing.category && skill.category) existing.category = skill.category;\n if ((skill.endorsementCount ?? 0) > (existing.endorsementCount ?? 0)) {\n existing.endorsementCount = skill.endorsementCount;\n }\n if (skill.endorsed) existing.endorsed = true;\n if (skill.activityBacked) existing.activityBacked = true;\n const merged = new Set([...(existing.positionRkeys ?? []), ...positions]);\n existing.positionRkeys = Array.from(merged);\n }\n\n return Array.from(groups.values());\n}\n\n/**\n * Groups skills by category in CATEGORY_ORDER, with unknown/empty categories\n * collected under \"other\". Within each group: sorted by endorsementCount desc,\n * then alphabetical by name. Empty groups are omitted.\n */\nexport function groupSkillsByCategory<T extends ProfileSkill>(skills: T[]): [string, T[]][] {\n const grouped = new Map<string, T[]>();\n\n for (const skill of skills) {\n const normalised = skill.category?.toLowerCase().trim() ?? '';\n const key = (CATEGORY_ORDER as readonly string[]).includes(normalised) ? normalised : 'other';\n const bucket = grouped.get(key) ?? [];\n bucket.push(skill);\n grouped.set(key, bucket);\n }\n\n for (const [, groupSkills] of grouped) {\n groupSkills.sort((a, b) => {\n const countDiff = (b.endorsementCount ?? 0) - (a.endorsementCount ?? 0);\n if (countDiff !== 0) return countDiff;\n return a.name.localeCompare(b.name);\n });\n }\n\n const ordered: [string, T[]][] = [];\n for (const cat of CATEGORY_ORDER) {\n const group = grouped.get(cat);\n if (group?.length) ordered.push([cat, group]);\n }\n const otherGroup = grouped.get('other');\n if (otherGroup?.length) ordered.push(['other', otherGroup]);\n\n return ordered;\n}\n","{\n \"$schema\": \"https://sifa.id/schemas/activity-tiers/v1.json\",\n \"version\": \"1.0.0\",\n \"updated\": \"2026-05-28\",\n \"tiers\": {\n \"creation\": {\n \"label\": \"Made\",\n \"description\": \"Substantive records the actor authored: posts, articles, repos, galleries, livestreams, RSVPs, CV entries. Surfaced on the public profile and in the network timeline.\",\n \"shownOnPublicProfile\": true\n },\n \"action\": {\n \"label\": \"Did\",\n \"description\": \"Engagement records (likes, reposts, follows, votes, stars, reactions). Visible to the actor on the 'What is public about me' page and on the originating app, but not surfaced on the Sifa public profile.\",\n \"shownOnPublicProfile\": false\n },\n \"filtered\": {\n \"label\": null,\n \"description\": \"Configuration, infrastructure, moderation, game state, ephemeral consumption signals (bookmarks, highlights), and other records Sifa does not display anywhere. The records remain public on the actor's PDS regardless.\",\n \"shownOnPublicProfile\": false\n }\n },\n \"lexicons\": {\n \"app.bsky.feed.post\": {\n \"tier\": \"creation\",\n \"app\": \"bluesky\",\n \"notes\": \"Ambiguous: many posts are casual, but the lexicon also carries long-form posts and threads. Treated as creation; empty quote-posts (no text + record embed) are filtered at the consumer layer, not here.\"\n },\n \"app.bsky.feed.like\": { \"tier\": \"action\", \"app\": \"bluesky\" },\n \"app.bsky.feed.repost\": { \"tier\": \"action\", \"app\": \"bluesky\" },\n \"app.bsky.feed.generator\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"Feed generator definition record, not personal activity.\"\n },\n \"app.bsky.graph.follow\": { \"tier\": \"action\", \"app\": \"bluesky\" },\n \"app.bsky.graph.block\": { \"tier\": \"filtered\", \"app\": \"bluesky\", \"notes\": \"Moderation record.\" },\n \"app.bsky.graph.mute\": { \"tier\": \"filtered\", \"app\": \"bluesky\", \"notes\": \"Moderation record.\" },\n \"app.bsky.graph.listblock\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"Moderation record.\"\n },\n \"app.bsky.graph.listitem\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"List membership; rendered via the parent list, not as standalone activity.\"\n },\n \"app.bsky.graph.list\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"User-curated list metadata; not surfaced as profile activity.\"\n },\n \"app.bsky.graph.starterpack\": { \"tier\": \"filtered\", \"app\": \"bluesky\" },\n \"app.bsky.actor.profile\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"Profile metadata record.\"\n },\n\n \"sh.tangled.repo\": { \"tier\": \"creation\", \"app\": \"tangled\" },\n \"sh.tangled.repo.issue\": { \"tier\": \"creation\", \"app\": \"tangled\" },\n \"sh.tangled.repo.pull\": { \"tier\": \"creation\", \"app\": \"tangled\" },\n \"sh.tangled.feed.star\": { \"tier\": \"action\", \"app\": \"tangled\" },\n \"sh.tangled.graph.follow\": { \"tier\": \"action\", \"app\": \"tangled\" },\n \"sh.tangled.actor.profile\": {\n \"tier\": \"filtered\",\n \"app\": \"tangled\",\n \"notes\": \"Profile metadata record.\"\n },\n\n \"community.lexicon.calendar.rsvp\": {\n \"tier\": \"creation\",\n \"app\": \"smokesignal\",\n \"notes\": \"Ambiguous: RSVPs are reactions to events, but they are public commitments and the only Smoke Signal record Sifa scans today. Classified as creation.\"\n },\n \"events.smokesignal.profile\": {\n \"tier\": \"filtered\",\n \"app\": \"smokesignal\",\n \"notes\": \"Profile metadata record.\"\n },\n\n \"blue.flashes.feed.post\": { \"tier\": \"creation\", \"app\": \"flashes\" },\n\n \"social.grain.gallery\": { \"tier\": \"creation\", \"app\": \"grain\" },\n \"social.grain.gallery.item\": {\n \"tier\": \"filtered\",\n \"app\": \"grain\",\n \"notes\": \"Item-within-gallery; rendered via parent gallery.\"\n },\n \"social.grain.photo\": {\n \"tier\": \"filtered\",\n \"app\": \"grain\",\n \"notes\": \"Raw photo asset; surfaced via the gallery that references it.\"\n },\n \"social.grain.photo.exif\": {\n \"tier\": \"filtered\",\n \"app\": \"grain\",\n \"notes\": \"EXIF metadata for a photo.\"\n },\n \"social.grain.story\": {\n \"tier\": \"filtered\",\n \"app\": \"grain\",\n \"notes\": \"Ephemeral story format.\"\n },\n\n \"com.whtwnd.blog.entry\": { \"tier\": \"creation\", \"app\": \"whitewind\" },\n\n \"fyi.unravel.frontpage.post\": { \"tier\": \"creation\", \"app\": \"frontpage\" },\n \"fyi.unravel.frontpage.vote\": { \"tier\": \"action\", \"app\": \"frontpage\" },\n\n \"social.psky.feed.post\": { \"tier\": \"creation\", \"app\": \"picosky\" },\n\n \"link.pastesphere.snippet\": { \"tier\": \"creation\", \"app\": \"pastesphere\" },\n\n \"site.standard.document\": { \"tier\": \"creation\", \"app\": \"standard\" },\n\n \"computer.aetheros.page\": { \"tier\": \"creation\", \"app\": \"aetheros\" },\n\n \"space.roomy.space.personal\": { \"tier\": \"creation\", \"app\": \"roomy\" },\n\n \"dev.keytrace.claim\": { \"tier\": \"creation\", \"app\": \"keytrace\" },\n\n \"social.popfeed.feed.review\": { \"tier\": \"creation\", \"app\": \"popfeed\" },\n \"social.popfeed.feed.post\": { \"tier\": \"creation\", \"app\": \"popfeed\" },\n \"social.popfeed.feed.note\": { \"tier\": \"creation\", \"app\": \"popfeed\" },\n \"social.popfeed.feed.like\": { \"tier\": \"action\", \"app\": \"popfeed\" },\n \"social.popfeed.challenge.participation\": {\n \"tier\": \"filtered\",\n \"app\": \"popfeed\",\n \"notes\": \"Challenge participation tracking.\"\n },\n \"social.popfeed.actor.profile\": {\n \"tier\": \"filtered\",\n \"app\": \"popfeed\",\n \"notes\": \"Profile metadata record.\"\n },\n\n \"place.stream.livestream\": { \"tier\": \"creation\", \"app\": \"streamplace\" },\n \"place.stream.broadcast.origin\": {\n \"tier\": \"filtered\",\n \"app\": \"streamplace\",\n \"notes\": \"Broadcast origin/infrastructure record.\"\n },\n \"place.stream.key\": {\n \"tier\": \"filtered\",\n \"app\": \"streamplace\",\n \"notes\": \"Stream key — sensitive infrastructure record.\"\n },\n \"place.stream.metadata.configuration\": {\n \"tier\": \"filtered\",\n \"app\": \"streamplace\",\n \"notes\": \"Stream configuration metadata.\"\n },\n \"place.stream.chat.message\": {\n \"tier\": \"filtered\",\n \"app\": \"streamplace\",\n \"notes\": \"Ephemeral chat message.\"\n },\n \"place.stream.chat.profile\": {\n \"tier\": \"filtered\",\n \"app\": \"streamplace\",\n \"notes\": \"Chat profile metadata.\"\n },\n\n \"app.sidetrail.trail\": { \"tier\": \"creation\", \"app\": \"semble\" },\n \"app.sidetrail.walk\": { \"tier\": \"creation\", \"app\": \"semble\" },\n\n \"at.youandme.connection\": { \"tier\": \"creation\", \"app\": \"youandme\" },\n\n \"pub.leaflet.comment\": { \"tier\": \"creation\", \"app\": \"leaflet\" },\n \"pub.leaflet.interactions.recommend\": { \"tier\": \"action\", \"app\": \"leaflet\" },\n \"pub.leaflet.authFullPermissions\": {\n \"tier\": \"filtered\",\n \"app\": \"leaflet\",\n \"notes\": \"OAuth permission record.\"\n },\n\n \"social.colibri.membership\": { \"tier\": \"creation\", \"app\": \"colibri\" },\n \"social.colibri.message\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Chat message — high-volume conversational signal, not portfolio.\"\n },\n \"social.colibri.reaction\": { \"tier\": \"filtered\", \"app\": \"colibri\", \"notes\": \"Chat reaction.\" },\n \"social.colibri.channel\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Channel definition.\"\n },\n \"social.colibri.community\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Community definition.\"\n },\n \"social.colibri.approval\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Moderation approval record.\"\n },\n \"social.colibri.category\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Category metadata.\"\n },\n \"social.colibri.channel.read\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Read-state marker.\"\n },\n \"social.colibri.actor.data\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Actor metadata.\"\n },\n \"social.colibri.richtext.facet\": {\n \"tier\": \"filtered\",\n \"app\": \"colibri\",\n \"notes\": \"Richtext facet sub-record.\"\n },\n\n \"app.collectivesocial.feed.list\": {\n \"tier\": \"creation\",\n \"app\": \"collectivesocial\",\n \"notes\": \"Auto-created default Inbox lists are filtered at the consumer layer via isDefault=true predicate.\"\n },\n\n \"net.alternativeproto.vote\": {\n \"tier\": \"action\",\n \"notes\": \"Vote record on a third-party protocol.\"\n },\n \"network.cosmik.collection\": {\n \"tier\": \"filtered\",\n \"notes\": \"Stale registry id — Cosmik formerly in app registry.\"\n },\n \"network.cosmik.collectionLink\": { \"tier\": \"filtered\" },\n \"network.cosmik.connection\": { \"tier\": \"filtered\" },\n \"network.cosmik.follow\": { \"tier\": \"filtered\" },\n \"network.cosmik.card\": { \"tier\": \"filtered\", \"notes\": \"Link-in-bio card; consumption signal.\" },\n\n \"social.pinksky.app.preference\": {\n \"tier\": \"filtered\",\n \"app\": \"bluesky\",\n \"notes\": \"Pinkleap (Bluesky client) app preferences.\"\n },\n\n \"at.margin.bookmark\": {\n \"tier\": \"filtered\",\n \"notes\": \"Bookmark — consumption signal, not creation.\"\n },\n \"at.margin.highlight\": {\n \"tier\": \"filtered\",\n \"notes\": \"Highlight — consumption signal, not creation.\"\n },\n \"community.lexicon.bookmarks.bookmark\": {\n \"tier\": \"filtered\",\n \"notes\": \"Bookmark — consumption signal.\"\n },\n \"blue.linkat.board\": { \"tier\": \"filtered\", \"notes\": \"Link-in-bio board; consumption signal.\" },\n\n \"dev.skyboard.board\": { \"tier\": \"filtered\", \"notes\": \"Skyboard task-board metadata.\" },\n \"dev.skyboard.op\": { \"tier\": \"filtered\", \"notes\": \"Skyboard operation log.\" },\n \"dev.skyboard.task\": { \"tier\": \"filtered\", \"notes\": \"Skyboard task record.\" },\n\n \"net.anisota.player.state\": { \"tier\": \"filtered\", \"notes\": \"Anisota game player state.\" },\n \"xyz.statusphere.status\": {\n \"tier\": \"filtered\",\n \"notes\": \"Statusphere emoji status — leisure signal.\"\n },\n\n \"id.sifa.profile.self\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\",\n \"notes\": \"Sifa professional profile root.\"\n },\n \"id.sifa.profile.position\": { \"tier\": \"creation\", \"app\": \"sifa\" },\n \"id.sifa.profile.education\": { \"tier\": \"creation\", \"app\": \"sifa\" },\n \"id.sifa.profile.skill\": { \"tier\": \"creation\", \"app\": \"sifa\" },\n \"id.sifa.profile.certification\": { \"tier\": \"creation\", \"app\": \"sifa\" },\n \"id.sifa.profile.project\": { \"tier\": \"creation\", \"app\": \"sifa\" },\n \"id.sifa.profile.volunteering\": { \"tier\": \"creation\", \"app\": \"sifa\" },\n \"id.sifa.profile.publication\": { \"tier\": \"creation\", \"app\": \"sifa\" },\n \"id.sifa.profile.course\": { \"tier\": \"creation\", \"app\": \"sifa\" },\n \"id.sifa.profile.honor\": { \"tier\": \"creation\", \"app\": \"sifa\" },\n \"id.sifa.profile.language\": { \"tier\": \"creation\", \"app\": \"sifa\" },\n \"id.sifa.profile.externalAccount\": { \"tier\": \"creation\", \"app\": \"sifa\" },\n \"id.sifa.profile.location\": { \"tier\": \"creation\", \"app\": \"sifa\" },\n \"id.sifa.endorsement\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\",\n \"notes\": \"Endorsement authored by the actor about another profile.\"\n },\n \"id.sifa.endorsement.confirmation\": {\n \"tier\": \"action\",\n \"app\": \"sifa\",\n \"notes\": \"Confirmation/acceptance of an endorsement received.\"\n },\n \"id.sifa.graph.follow\": { \"tier\": \"action\", \"app\": \"sifa\" },\n \"id.sifa.graph.connection\": {\n \"tier\": \"creation\",\n \"app\": \"sifa\",\n \"notes\": \"Mutual professional connection record.\"\n },\n \"id.sifa.project.self\": { \"tier\": \"creation\", \"app\": \"sifa\" },\n \"id.sifa.project.member\": { \"tier\": \"creation\", \"app\": \"sifa\" },\n \"id.sifa.project.membership\": { \"tier\": \"creation\", \"app\": \"sifa\" },\n \"id.sifa.meeting\": { \"tier\": \"creation\", \"app\": \"sifa\" },\n \"id.sifa.authProfile\": { \"tier\": \"filtered\", \"app\": \"sifa\", \"notes\": \"OAuth scope record.\" },\n \"id.sifa.authProfileAccess\": {\n \"tier\": \"filtered\",\n \"app\": \"sifa\",\n \"notes\": \"OAuth profile-access record.\"\n },\n \"id.sifa.authProject\": { \"tier\": \"filtered\", \"app\": \"sifa\", \"notes\": \"OAuth scope record.\" },\n \"id.sifa.authConnection\": { \"tier\": \"filtered\", \"app\": \"sifa\", \"notes\": \"OAuth scope record.\" },\n \"id.sifa.authMeet\": { \"tier\": \"filtered\", \"app\": \"sifa\", \"notes\": \"OAuth scope record.\" },\n\n \"forum.barazo.post\": { \"tier\": \"creation\", \"app\": \"barazo\" },\n \"forum.barazo.community.member\": { \"tier\": \"creation\", \"app\": \"barazo\" },\n \"forum.barazo.reputation.event\": { \"tier\": \"creation\", \"app\": \"barazo\" },\n \"forum.barazo.reaction\": { \"tier\": \"action\", \"app\": \"barazo\" },\n \"forum.barazo.reply\": {\n \"tier\": \"action\",\n \"app\": \"barazo\",\n \"notes\": \"Short conversational reply — engagement signal.\"\n },\n \"forum.barazo.flag\": { \"tier\": \"filtered\", \"app\": \"barazo\", \"notes\": \"Moderation flag.\" }\n }\n}\n","import { z } from 'zod';\n\nimport rawTaxonomy from './activity-tiers.json' with { type: 'json' };\n\nexport type ActivityTier = 'creation' | 'action' | 'filtered';\n\nexport interface TierMeta {\n label: string | null;\n description: string;\n shownOnPublicProfile: boolean;\n}\n\nexport interface LexiconEntry {\n tier: ActivityTier;\n app?: string;\n notes?: string;\n}\n\nexport interface ActivityTaxonomy {\n version: string;\n updated: string;\n tiers: Record<ActivityTier, TierMeta>;\n lexicons: Record<string, LexiconEntry>;\n}\n\nconst tierMetaSchema = z.object({\n label: z.string().nullable(),\n description: z.string(),\n shownOnPublicProfile: z.boolean(),\n});\n\nconst lexiconEntrySchema = z.object({\n tier: z.enum(['creation', 'action', 'filtered']),\n app: z.string().optional(),\n notes: z.string().optional(),\n});\n\nconst taxonomySchema = z.object({\n version: z.string(),\n updated: z.string(),\n tiers: z.object({\n creation: tierMetaSchema,\n action: tierMetaSchema,\n filtered: tierMetaSchema,\n }),\n lexicons: z.record(z.string(), lexiconEntrySchema),\n});\n\nconst parsed: ActivityTaxonomy = taxonomySchema.parse(rawTaxonomy);\n\nexport const ACTIVITY_TIERS: Readonly<ActivityTaxonomy> = Object.freeze(parsed);\n\n/**\n * Returns the activity tier for a given AT Protocol NSID.\n * Returns 'filtered' for unknown/unclassified NSIDs (safe default — won't\n * leak unknown records to public profile surfaces).\n */\nexport function getActivityTier(nsid: string): ActivityTier {\n if (!nsid) return 'filtered';\n const entry = ACTIVITY_TIERS.lexicons[nsid];\n return entry ? entry.tier : 'filtered';\n}\n\n/**\n * Returns the full lexicon entry (tier + app + notes), or null if unknown.\n */\nexport function getLexiconEntry(nsid: string): LexiconEntry | null {\n if (!nsid) return null;\n const entry = ACTIVITY_TIERS.lexicons[nsid];\n return entry ?? null;\n}\n\n/**\n * Returns tier metadata (label, description, public visibility).\n */\nexport function getTierMeta(tier: ActivityTier): TierMeta {\n return ACTIVITY_TIERS.tiers[tier];\n}\n\n/**\n * Returns the taxonomy version + updated date for diagnostics and\n * version-skew detection between SDK consumers and the canonical taxonomy.\n */\nexport function getActivityTaxonomyVersion(): { version: string; updated: string } {\n return { version: ACTIVITY_TIERS.version, updated: ACTIVITY_TIERS.updated };\n}\n","/**\n * Format a date string as a relative time (e.g. \"5m ago\", \"3d ago\").\n * Returns an empty string for invalid or future dates.\n */\nexport function formatRelativeTime(dateString: string): string {\n const date = new Date(dateString);\n if (isNaN(date.getTime())) return '';\n\n const now = Date.now();\n const diffMs = now - date.getTime();\n if (diffMs < 0) return '';\n\n const seconds = Math.floor(diffMs / 1000);\n if (seconds < 60) return `${seconds}s ago`;\n\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m ago`;\n\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h ago`;\n\n const days = Math.floor(hours / 24);\n if (days < 30) return `${days}d ago`;\n\n const months = Math.floor(days / 30);\n if (months < 12) return `${months}mo ago`;\n\n const years = Math.floor(months / 12);\n return `${years}y ago`;\n}\n","/**\n * Sort profile section items from newest to oldest.\n *\n * Rules:\n * - Items with no end date (ongoing/current) sort to the top.\n * - Primary sort: end date descending (newest first).\n * - Secondary sort: start date descending (newest first).\n * - Items with no dates sort to the bottom.\n *\n * Date strings are ISO-ish (\"2024\", \"2024-03\", \"2024-03-15\") and\n * lexicographic comparison works correctly for them.\n */\n\ninterface DateRange {\n startDate?: string;\n endDate?: string;\n current?: boolean;\n}\n\ntype DateExtractor<T> = (item: T) => DateRange;\n\nconst FAR_FUTURE = '9999-12-31';\nconst FAR_PAST = '0000-01-01';\n\nexport function sortByDateDesc<T>(items: T[], extract: DateExtractor<T>): T[] {\n return [...items].sort((a, b) => {\n const da = extract(a);\n const db = extract(b);\n\n const endA = da.current ? FAR_FUTURE : (da.endDate ?? '');\n const endB = db.current ? FAR_FUTURE : (db.endDate ?? '');\n\n // Items with any date beat items with no dates at all\n const hasDateA = endA || da.startDate;\n const hasDateB = endB || db.startDate;\n if (hasDateA && !hasDateB) return -1;\n if (!hasDateA && hasDateB) return 1;\n\n // Primary: end date descending\n if (endA !== endB) return endB.localeCompare(endA);\n\n // Secondary: start date descending\n const startA = da.startDate ?? FAR_PAST;\n const startB = db.startDate ?? FAR_PAST;\n return startB.localeCompare(startA);\n });\n}\n\n/**\n * Convenience extractor for items that use `startDate` / `endDate` fields directly.\n * Used by volunteering, projects, and other sections that still use startDate/endDate.\n */\nexport function dateRangeExtractor<\n T extends { startDate?: string; endDate?: string; current?: boolean },\n>(item: T): DateRange {\n return { startDate: item.startDate, endDate: item.endDate, current: item.current };\n}\n\n/**\n * Extractor for lexicon-aligned items that use `startedAt` / `endedAt` fields.\n * Used by positions and education (current derived from !endedAt).\n */\nexport function lexiconDateExtractor<T extends { startedAt?: string; endedAt?: string }>(\n item: T,\n): DateRange {\n return { startDate: item.startedAt, endDate: item.endedAt, current: !item.endedAt };\n}\n\n/**\n * Convenience extractor for items with a single `date` field.\n */\nexport function singleDateExtractor<T extends { date?: string }>(item: T): DateRange {\n return { endDate: item.date };\n}\n\n/**\n * Extractor for certifications which use `issueDate` / `expiryDate`.\n */\nexport function certDateExtractor<T extends { issueDate?: string; expiryDate?: string }>(\n item: T,\n): DateRange {\n return { startDate: item.issueDate, endDate: item.expiryDate ?? item.issueDate };\n}\n","/**\n * Sanitize raw user input into a valid AT Protocol identifier (handle or DID).\n *\n * Handles common mistakes:\n * - Pasting a full Bluesky profile URL\n * - Pasting a raw HTTPS URL to a PDS domain\n * - Using an at:// URI\n * - Prefixing with @\n * - Entering a bare username without .bsky.social\n */\nexport function sanitizeHandleInput(raw: string): string {\n let identifier = raw\n .trim()\n .replace(/^https?:\\/\\/bsky\\.app\\/profile\\//i, '')\n .replace(/^at:\\/\\//i, '')\n .replace(/^@/, '')\n .replace(/^https?:\\/\\//i, '');\n if (!identifier.startsWith('did:')) {\n identifier = identifier.split('/')[0] ?? identifier;\n }\n identifier = identifier.replace(/\\.$/, '');\n if (!identifier.startsWith('did:')) {\n identifier = identifier.toLowerCase();\n }\n\n // Auto-append .bsky.social for bare usernames (no dots, not a DID)\n if (identifier && !identifier.startsWith('did:') && !identifier.includes('.')) {\n identifier = `${identifier}.bsky.social`;\n }\n\n return identifier;\n}\n","import type { LocationValue } from '../types/index.js';\n\n/**\n * Format a LocationValue for display.\n *\n * Prefers `locality` (the community.lexicon.location.address field) and\n * falls back to the legacy `city` slot so values produced before the\n * sifa-api alias migration still render correctly during the additive\n * transition window.\n */\nexport function formatLocation(loc: LocationValue | null | undefined): string {\n if (!loc) return '';\n const locality = loc.locality ?? loc.city;\n const parts = [locality, loc.region, loc.country].filter(Boolean);\n if (loc.postalCode && !locality) {\n return `${loc.postalCode}, ${loc.country}`;\n }\n return parts.join(', ');\n}\n\n/** Parse a display string back into a LocationValue (best-effort for legacy data) */\nexport function parseLocationString(str: string): LocationValue | null {\n if (!str.trim()) return null;\n const parts = str\n .split(',')\n .map((p) => p.trim())\n .filter(Boolean);\n if (parts.length >= 3) {\n return {\n city: parts[0],\n region: parts[1],\n country: parts[parts.length - 1]!,\n };\n }\n if (parts.length === 2) {\n return {\n city: parts[0],\n country: parts[1]!,\n };\n }\n return { country: parts[0]! };\n}\n\n/** Convert ISO 3166-1 alpha-2 country code to flag emoji */\nexport function countryCodeToFlag(code: string | undefined): string {\n if (!code || code.length !== 2) return '';\n const upper = code.toUpperCase();\n const a = upper.codePointAt(0);\n const b = upper.codePointAt(1);\n if (a === undefined || b === undefined) return '';\n return String.fromCodePoint(a - 0x41 + 0x1f1e6, b - 0x41 + 0x1f1e6);\n}\n","import type { PdsProviderInfo } from '../types/index.js';\n\nexport interface PdsProvider {\n name: string;\n profileUrl: string;\n host?: string;\n}\n\nconst BSKY_PROFILE_BASE = 'https://bsky.app/profile/';\n\nconst PDS_PROVIDERS: { suffix: string; name: string }[] = [\n { suffix: '.bsky.social', name: 'bluesky' },\n { suffix: '.blacksky.app', name: 'blacksky' },\n { suffix: '.eurosky.social', name: 'eurosky' },\n { suffix: '.northsky.social', name: 'northsky' },\n];\n\nconst KNOWN_PROVIDER_NAMES = new Set(PDS_PROVIDERS.map((p) => p.name));\n\nconst ICON_ONLY_PROVIDERS = new Set(['selfhosted-social', 'selfhosted']);\n\nexport function pdsProviderFromApi(\n apiProvider: PdsProviderInfo | null | undefined,\n handle: string,\n): PdsProvider | null {\n if (!apiProvider) return null;\n if (ICON_ONLY_PROVIDERS.has(apiProvider.name)) {\n return { name: apiProvider.name, profileUrl: '', host: apiProvider.host };\n }\n if (!KNOWN_PROVIDER_NAMES.has(apiProvider.name)) return null;\n return {\n name: apiProvider.name,\n profileUrl: `${BSKY_PROFILE_BASE}${handle}`,\n host: apiProvider.host,\n };\n}\n\nexport function getHandleStem(handle: string): string {\n const lower = handle.toLowerCase();\n for (const provider of PDS_PROVIDERS) {\n if (lower.endsWith(provider.suffix) && lower.length > provider.suffix.length) {\n return handle.slice(0, -provider.suffix.length);\n }\n }\n return handle;\n}\n\nexport function getDisplayLabel(displayName: string | undefined, handle: string): string {\n if (displayName) return displayName;\n return getHandleStem(handle);\n}\n\n/**\n * Combine optional structured name fields (`id.sifa.profile.self.givenName`,\n * `familyName`) into a single string in Schema.org `Person` order — given\n * before family. Returns `undefined` when both are absent so callers can\n * fall back to `displayName`. Whitespace-only inputs are treated as absent.\n * Does not impose cultural ordering: users whose preferred presentation\n * differs (e.g. Eastern name order) should set `displayName` accordingly,\n * which this helper deliberately does not consult.\n */\nexport function formatStructuredName(\n givenName: string | undefined,\n familyName: string | undefined,\n): string | undefined {\n const given = givenName?.trim();\n const family = familyName?.trim();\n if (given && family) return `${given} ${family}`;\n return given || family || undefined;\n}\n\nconst PDS_DISPLAY_NAMES: Record<string, string> = {\n bluesky: 'Bluesky',\n blacksky: 'BlackSky',\n eurosky: 'EuroSky',\n northsky: 'NorthSky',\n 'selfhosted-social': 'Self-hosted',\n selfhosted: 'Self-hosted',\n};\n\nexport function getPdsDisplayName(providerName: string): string {\n return PDS_DISPLAY_NAMES[providerName] ?? providerName;\n}\n\nexport function detectPdsProvider(handle: string): PdsProvider | null {\n const lower = handle.toLowerCase();\n for (const provider of PDS_PROVIDERS) {\n if (lower.endsWith(provider.suffix)) {\n return {\n name: provider.name,\n profileUrl: `${BSKY_PROFILE_BASE}${handle}`,\n };\n }\n }\n return null;\n}\n","const COMBINING_MARK = /\\p{M}/u;\nconst BIDI_CONTROLS = /[‎‏‪-‮⁦-⁩]/gu;\n\n/**\n * Limit runs of Unicode combining marks (`\\p{M}`) to at most `maxPerBase`\n * marks following any single base character. Defuses \"Zalgo\" text where\n * dozens of stacked combining marks render outside the line box and bleed\n * into neighbouring UI.\n *\n * `maxPerBase` defaults to 4 — high enough to preserve legitimate stacks\n * in Thai, Arabic, Vietnamese, and IPA, low enough to neutralise the\n * vertical-overflow attack vector.\n */\nexport function limitCombiningMarks(value: string, maxPerBase = 4): string {\n if (!value || !COMBINING_MARK.test(value)) return value;\n\n let out = '';\n let combiningRun = 0;\n for (const char of value) {\n if (/\\p{M}/u.test(char)) {\n if (combiningRun < maxPerBase) {\n out += char;\n combiningRun += 1;\n }\n } else {\n out += char;\n combiningRun = 0;\n }\n }\n return out;\n}\n\n/**\n * Sanitise untrusted display text from PDS records before rendering in UI:\n * - strips bidi formatting controls (LRM/RLM/LRE/RLE/PDF/LRO/RLO/LRI/RLI/FSI/PDI)\n * that can hijack reading order or crash `next/og` (see Satori LRM+emoji bug)\n * - limits stacked combining marks (Zalgo defence)\n *\n * Preserves ZWJ (U+200D) so emoji sequences keep rendering.\n */\nexport function sanitizeDisplayText(value: string, maxCombiningPerBase = 4): string {\n if (!value) return value;\n return limitCombiningMarks(value.replace(BIDI_CONTROLS, ''), maxCombiningPerBase);\n}\n","const ELLIPSIS = '\\u2026';\n\n/**\n * Truncate a string to at most `maxLen` grapheme clusters, appending an\n * ellipsis when the string was shortened. Grapheme-aware so it never splits\n * emoji sequences (ZWJ, regional indicators, combining marks, surrogate pairs).\n */\nexport function truncateGraphemes(value: string, maxLen: number): string {\n if (maxLen <= 0) return '';\n const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n const graphemes = Array.from(segmenter.segment(value), (s) => s.segment);\n if (graphemes.length <= maxLen) return value;\n if (maxLen === 1) return ELLIPSIS;\n return graphemes.slice(0, maxLen - 1).join('') + ELLIPSIS;\n}\n","/**\n * Format a date as a relative time string (e.g. \"2 minutes ago\", \"3 days ago\").\n */\nexport function formatDistanceToNow(date: Date): string {\n const seconds = Math.floor((Date.now() - date.getTime()) / 1000);\n if (seconds < 60) return 'just now';\n\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m ago`;\n\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h ago`;\n\n const days = Math.floor(hours / 24);\n if (days < 7) return `${days}d ago`;\n\n const weeks = Math.floor(days / 7);\n if (weeks < 5) return `${weeks}w ago`;\n\n const months = Math.floor(days / 30);\n return `${months}mo ago`;\n}\n","/**\n * WCAG 2.2 contrast ratio utilities for validating publication theme colors.\n * Implements the relative luminance and contrast ratio formulas from\n * https://www.w3.org/TR/WCAG22/#dfn-relative-luminance\n */\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n}\n\n/**\n * Return true when the value is an RgbColor with all channels as integers in [0, 255].\n * Use this before passing untrusted data to the luminance / contrast functions.\n */\nexport function isValidRgbColor(value: unknown): value is RgbColor {\n if (value == null || typeof value !== 'object') return false;\n const { r, g, b } = value as Record<string, unknown>;\n return (\n typeof r === 'number' &&\n typeof g === 'number' &&\n typeof b === 'number' &&\n Number.isFinite(r) &&\n Number.isFinite(g) &&\n Number.isFinite(b) &&\n r >= 0 &&\n r <= 255 &&\n g >= 0 &&\n g <= 255 &&\n b >= 0 &&\n b <= 255\n );\n}\n\n/**\n * Serialize an RgbColor to a CSS `rgb(...)` string.\n * Channels are floored to integers to prevent sub-pixel drift.\n */\nexport function rgbToString(color: RgbColor): string {\n return `rgb(${Math.floor(color.r)}, ${Math.floor(color.g)}, ${Math.floor(color.b)})`;\n}\n\n/**\n * Calculate relative luminance of an sRGB color per WCAG 2.2.\n * Input channels must be numbers in [0, 255].\n */\nexport function relativeLuminance(color: RgbColor): number {\n const [rs, gs, bs] = [color.r / 255, color.g / 255, color.b / 255];\n\n const r = rs <= 0.04045 ? rs / 12.92 : Math.pow((rs + 0.055) / 1.055, 2.4);\n const g = gs <= 0.04045 ? gs / 12.92 : Math.pow((gs + 0.055) / 1.055, 2.4);\n const b = bs <= 0.04045 ? bs / 12.92 : Math.pow((bs + 0.055) / 1.055, 2.4);\n\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n}\n\n/**\n * Calculate WCAG 2.2 contrast ratio between two colors.\n * Returns a value between 1 (identical) and 21 (black/white).\n */\nexport function contrastRatio(color1: RgbColor, color2: RgbColor): number {\n const l1 = relativeLuminance(color1);\n const l2 = relativeLuminance(color2);\n const lighter = Math.max(l1, l2);\n const darker = Math.min(l1, l2);\n return (lighter + 0.05) / (darker + 0.05);\n}\n\n/**\n * Check if two colors meet WCAG 2.2 AA contrast requirement (4.5:1 for normal text).\n */\nexport function meetsContrastAA(foreground: RgbColor, background: RgbColor): boolean {\n return contrastRatio(foreground, background) >= 4.5;\n}\n","/**\n * URL patterns per app, mirroring the sifa-web registry.\n *\n * These describe how to build a clickable URL for an activity card given\n * the author's handle/did and the record rkey. The patterns are templates\n * with `{handle}`, `{did}`, and `{rkey}` placeholders; each variable is\n * URI-encoded when interpolated.\n *\n * Tier semantics:\n * - `urlPattern`: per-item URL (a specific post/event/repo). Preferred.\n * - `profileUrlPattern`: per-user profile URL on the app. Fallback.\n *\n * Apps without either pattern are not clickable.\n */\nexport interface AppUrlPatterns {\n urlPattern?: string;\n profileUrlPattern?: string;\n}\n\nexport const APP_URL_PATTERNS: Readonly<Record<string, AppUrlPatterns>> = Object.freeze({\n bluesky: {\n urlPattern: 'https://bsky.app/profile/{handle}/post/{rkey}',\n profileUrlPattern: 'https://bsky.app/profile/{handle}',\n },\n tangled: {\n profileUrlPattern: 'https://tangled.sh/{handle}',\n },\n smokesignal: {\n urlPattern: 'https://smokesignal.events/{did}/{rkey}',\n profileUrlPattern: 'https://smokesignal.events/{did}',\n },\n whitewind: {\n urlPattern: 'https://whtwnd.com/{handle}/{rkey}',\n profileUrlPattern: 'https://whtwnd.com/{handle}',\n },\n frontpage: {\n urlPattern: 'https://frontpage.fyi/post/{did}/{rkey}',\n profileUrlPattern: 'https://frontpage.fyi/profile/{did}',\n },\n linkat: {\n profileUrlPattern: 'https://linkat.blue/{handle}',\n },\n pastesphere: {\n urlPattern: 'https://pastesphere.link/user/{handle}/snippet/{rkey}',\n profileUrlPattern: 'https://pastesphere.link/user/{handle}',\n },\n kipclip: {\n profileUrlPattern: 'https://kipclip.com/{handle}',\n },\n keytrace: {\n profileUrlPattern: 'https://keytrace.dev/@{handle}',\n },\n sifa: {\n profileUrlPattern: 'https://sifa.id/p/{handle}',\n },\n popfeed: {\n urlPattern: 'https://popfeed.social/profile/{handle}',\n profileUrlPattern: 'https://popfeed.social/profile/{handle}',\n },\n streamplace: {\n profileUrlPattern: 'https://stream.place/{handle}',\n },\n semble: {\n profileUrlPattern: 'https://semble.so/profile/{handle}',\n },\n grain: {\n urlPattern: 'https://grain.social/profile/{did}/gallery/{rkey}',\n profileUrlPattern: 'https://grain.social/profile/{did}',\n },\n youandme: { profileUrlPattern: 'https://youandme.at' },\n anisota: { profileUrlPattern: 'https://anisota.net' },\n margin: { profileUrlPattern: 'https://margin.at' },\n beaconbits: { profileUrlPattern: 'https://beaconbits.app' },\n bookhive: { profileUrlPattern: 'https://bookhive.buzz/profile/{handle}' },\n colibri: { profileUrlPattern: 'https://colibri.social' },\n collectivesocial: { profileUrlPattern: 'https://app.collectivesocial.app' },\n github: {},\n});\n\n/**\n * Map collection NSID prefixes to app ids. Order matters: longer / more\n * specific prefixes must come before broader ones.\n */\nexport const COLLECTION_TO_APP: ReadonlyArray<readonly [prefix: string, appId: string]> = [\n ['app.bsky.', 'bluesky'],\n ['sh.tangled.', 'tangled'],\n ['events.smokesignal.', 'smokesignal'],\n ['community.lexicon.calendar.', 'smokesignal'],\n ['community.lexicon.bookmarks.', 'kipclip'],\n ['com.kipclip.', 'kipclip'],\n ['blue.flashes.', 'flashes'],\n ['social.grain.', 'grain'],\n ['com.whtwnd.', 'whitewind'],\n ['fyi.unravel.frontpage.', 'frontpage'],\n ['social.psky.', 'picosky'],\n ['blue.linkat.', 'linkat'],\n ['link.pastesphere.', 'pastesphere'],\n ['site.standard.', 'standard'],\n ['computer.aetheros.', 'aetheros'],\n ['space.roomy.', 'roomy'],\n ['dev.keytrace.', 'keytrace'],\n ['social.popfeed.', 'popfeed'],\n ['app.popsky.', 'popfeed'],\n ['place.stream.', 'streamplace'],\n ['app.sidetrail.', 'semble'],\n ['network.cosmik.', 'cosmik'],\n ['id.sifa.', 'sifa'],\n ['forum.barazo.', 'barazo'],\n ['xyz.statusphere.', 'statusphere'],\n ['at.youandme.', 'youandme'],\n ['net.anisota.', 'anisota'],\n ['at.margin.', 'margin'],\n ['app.beaconbits.', 'beaconbits'],\n ['buzz.bookhive.', 'bookhive'],\n ['social.colibri.', 'colibri'],\n];\n","import { APP_URL_PATTERNS, COLLECTION_TO_APP } from './app-url-patterns.js';\n\n/**\n * An activity item as consumed by the Sifa activity-card components and\n * the sifa-api external-URL health scanner. The shape mirrors the props\n * the cards already use, so the resolver returns the same URL the UI\n * renders.\n */\nexport interface ActivityItemForUrl {\n /** Collection NSID, e.g. \"sh.tangled.graph.repo\". */\n collection: string;\n /** The raw record from the PDS / API. */\n record: Record<string, unknown>;\n /** Full at-uri of the record (used by collections that derive URL from uri). */\n uri: string;\n /** Record key. */\n rkey: string;\n /** DID of the author of the record. */\n authorDid: string;\n /** Optional handle (cards prefer handle in URL paths when available). */\n authorHandle?: string;\n}\n\n/**\n * Map a collection NSID to its app id, mirroring the sifa-web prefix map.\n *\n * Falls back to the first two NSID segments (e.g. \"org.hyperboards\") when\n * the prefix is not registered, matching the existing card behaviour.\n */\nexport function getAppIdForCollection(collection: string): string {\n for (const [prefix, appId] of COLLECTION_TO_APP) {\n if (collection.startsWith(prefix)) return appId;\n }\n const parts = collection.split('.');\n if (parts.length >= 2) return `${parts[0]}.${parts[1]}`;\n return collection;\n}\n\nfunction interpolate(pattern: string, vars: Record<string, string | undefined>): string | null {\n let result = pattern;\n for (const [key, value] of Object.entries(vars)) {\n if (result.includes(`{${key}}`)) {\n if (!value) return null;\n result = result.replaceAll(`{${key}}`, encodeURIComponent(value));\n }\n }\n return result;\n}\n\nfunction patternUrl(\n appId: string,\n vars: { handle?: string; did?: string; rkey?: string },\n): string | null {\n const patterns = APP_URL_PATTERNS[appId];\n if (!patterns) return null;\n\n if (patterns.urlPattern) {\n const url = interpolate(patterns.urlPattern, vars);\n if (url) return url;\n }\n if (patterns.profileUrlPattern) {\n const url = interpolate(patterns.profileUrlPattern, vars);\n if (url) return url;\n }\n return null;\n}\n\nfunction stringOrNull(value: unknown): string | null {\n if (typeof value !== 'string') return null;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\n// at://did:plc:xxx/community.lexicon.calendar.event/rkey\n// -> { did: \"did:plc:xxx\", rkey: \"rkey\" }\nfunction parseAtUri(atUri: string): { did: string; rkey: string } | null {\n const match = atUri.match(/^at:\\/\\/(did:[^/]+)\\/[^/]+\\/(.+)$/);\n if (!match || !match[1] || !match[2]) return null;\n return { did: match[1], rkey: match[2] };\n}\n\n/**\n * Resolve the canonical clickable URL for an activity item — the same URL\n * the activity-card UI in sifa-web renders.\n *\n * Returns `null` when no link is appropriate (the card would render\n * non-clickable, or hide itself entirely).\n *\n * Used by:\n * - sifa-web activity cards (single source of truth for href)\n * - sifa-api external-URL health scanner (must match what the UI links to,\n * so broken-link detection lines up with what users actually click)\n *\n * Resolution order:\n * 1. Per-collection bespoke logic (tangled, kipclip, margin, smokesignal\n * rsvp, standard documents). These mirror the inline logic in the\n * individual card components.\n * 2. Generic `record.url` field (used by hyperboards and similar).\n * 3. Pattern-based per-item / profile URL from the registry.\n */\nexport function resolveCardUrl(item: ActivityItemForUrl): string | null {\n const { collection, record, uri, rkey, authorDid, authorHandle } = item;\n const appId = getAppIdForCollection(collection);\n\n // --- Per-collection bespoke logic (mirrors the card components) ---\n\n // Tangled: prefer per-repo URL `https://tangled.sh/{handle}/{record.name}`\n if (collection.startsWith('sh.tangled.')) {\n const repoName = stringOrNull(record.name);\n if (repoName && authorHandle) {\n return `https://tangled.sh/${authorHandle}/${repoName}`;\n }\n return patternUrl('tangled', { handle: authorHandle, did: authorDid, rkey });\n }\n\n // Kipclip / community.lexicon.bookmarks: the bookmark subject IS the URL\n if (\n collection.startsWith('com.kipclip.') ||\n collection.startsWith('community.lexicon.bookmarks.')\n ) {\n const subject = stringOrNull(record.subject);\n if (subject) return subject;\n return patternUrl('kipclip', { handle: authorHandle, did: authorDid, rkey });\n }\n\n // Margin bookmark: card returns null entirely without record.source\n if (collection === 'at.margin.bookmark') {\n const source = stringOrNull(record.source);\n if (source) return source;\n return null;\n }\n\n // Margin annotation: target.source -> fall back to margin app URL\n if (collection === 'at.margin.annotation') {\n const target = record.target;\n if (target != null && typeof target === 'object') {\n const source = stringOrNull((target as Record<string, unknown>).source);\n if (source) return source;\n }\n return APP_URL_PATTERNS.margin?.profileUrlPattern ?? null;\n }\n\n // Smokesignal RSVP: parse the linked event uri\n if (collection === 'community.lexicon.calendar.rsvp') {\n const subject = record.subject;\n if (subject != null && typeof subject === 'object') {\n const subjectUri = stringOrNull((subject as Record<string, unknown>).uri);\n if (subjectUri) {\n const parsed = parseAtUri(subjectUri);\n if (parsed) {\n return `https://smokesignal.events/${parsed.did}/${parsed.rkey}`;\n }\n }\n }\n return null;\n }\n\n // Smokesignal event itself: use item's own uri\n if (collection === 'community.lexicon.calendar.event') {\n const parsed = parseAtUri(uri);\n if (parsed) {\n return `https://smokesignal.events/${parsed.did}/${parsed.rkey}`;\n }\n return null;\n }\n\n // Standard documents: siteUrl + path (or just siteUrl)\n if (collection.startsWith('site.standard.')) {\n const siteUrl = stringOrNull(record.siteUrl);\n const path = stringOrNull(record.path);\n if (siteUrl && path) return `${siteUrl}${path}`;\n if (siteUrl) return siteUrl;\n // Fall through to generic record.url / patterns\n }\n\n // --- Generic fallbacks ---\n\n // record.url is a common ad-hoc per-item URL (hyperboards, etc.)\n const recordUrl = stringOrNull(record.url);\n if (recordUrl) return recordUrl;\n\n // Pattern-based fallback\n return patternUrl(appId, { handle: authorHandle, did: authorDid, rkey });\n}\n","/**\n * Profile completeness scoring.\n *\n * Six binary signals, equal weight: headline filled, about filled, has at least\n * one position, education, skill, certification.\n *\n * Score: integer 0..6. Percent: round(score / 6 * 100) -- discrete values\n * {0, 17, 33, 50, 67, 83, 100}.\n *\n * Canonical source of truth for completeness scoring across Sifa clients.\n * sifa-api computes the underlying `ProfileCompletion` shape inline (in SQL\n * for admin-stats queries, in route handlers elsewhere) but defers scoring\n * to this module.\n */\n\nexport const COMPLETENESS_MAX_SCORE = 6;\n\nexport interface ProfileCompletion {\n hasHeadline: boolean;\n hasAbout: boolean;\n positionCount: number;\n educationCount: number;\n skillCount: number;\n certificationCount: number;\n}\n\n/** Pure-TS computation of the 0..6 score. */\nexport function completenessScore(c: ProfileCompletion): number {\n let filled = 0;\n if (c.hasHeadline) filled++;\n if (c.hasAbout) filled++;\n if (c.positionCount > 0) filled++;\n if (c.educationCount > 0) filled++;\n if (c.skillCount > 0) filled++;\n if (c.certificationCount > 0) filled++;\n return filled;\n}\n\n/** Completion as a rounded 0..100 integer percent (matches API serialisation). */\nexport function completenessPercent(c: ProfileCompletion): number {\n return Math.round((completenessScore(c) / COMPLETENESS_MAX_SCORE) * 100);\n}\n","/**\n * Profile dimensions -- the routing signal used by the Sifa homepage to choose\n * between the V3 \"still building\" and V4 \"established\" variants.\n *\n * Six binary signals, equal weight: avatar, headline, about, current position,\n * minimum-skill threshold, and at least one education entry. The routing\n * threshold itself (e.g. \">= 4 of 6 -> ESTABLISHED\") lives in the consumer\n * because different surfaces may want to cut at different bars over time.\n *\n * Canonical source of truth for dimension scoring across Sifa clients.\n * sifa-api computes the underlying `ProfileDimensionInputs` shape inline\n * (in SQL on the session route) but defers scoring to this module so the\n * frontend and backend cannot drift on what \"filled\" means.\n *\n * See `docs/plans/2026-04-27-homepage-variants.md` (sifa-web) for the\n * history of why these six were chosen over the original eight.\n */\n\nimport type { Profile, ProfilePosition } from '../types/index.js';\n\nexport const DIMENSIONS_MAX_SCORE = 6;\nexport const MIN_SKILLS = 3;\n\nexport type DimensionKey =\n | 'avatar'\n | 'headline'\n | 'about'\n | 'currentPosition'\n | 'skills'\n | 'education';\n\nexport type DimensionMap = Record<DimensionKey, boolean>;\n\n/**\n * Minimal raw inputs needed to compute the dimension map. sifa-api can\n * populate this from a single composite SQL query without loading the full\n * Profile shape, which is the whole point of putting this in the SDK.\n */\nexport interface ProfileDimensionInputs {\n hasAvatar: boolean;\n hasHeadline: boolean;\n hasAbout: boolean;\n currentPositionCount: number;\n skillCount: number;\n educationCount: number;\n}\n\nfunction nonEmptyString(value: string | undefined | null): boolean {\n return typeof value === 'string' && value.trim().length > 0;\n}\n\n/**\n * Pure-TS computation of the 6-key boolean map from minimal inputs.\n * Use this when you already have aggregate counts (e.g. server-side).\n */\nexport function dimensionsFromInputs(inputs: ProfileDimensionInputs): DimensionMap {\n return {\n avatar: inputs.hasAvatar,\n headline: inputs.hasHeadline,\n about: inputs.hasAbout,\n currentPosition: inputs.currentPositionCount > 0,\n skills: inputs.skillCount >= MIN_SKILLS,\n education: inputs.educationCount > 0,\n };\n}\n\n/**\n * Derives `ProfileDimensionInputs` from a full Profile. Use this on the\n * client when you already have the profile loaded.\n */\nexport function profileToDimensionInputs(profile: Profile): ProfileDimensionInputs {\n const positions = profile.positions ?? [];\n const skills = profile.skills ?? [];\n const education = profile.education ?? [];\n const currentPositionCount = positions.filter((p: ProfilePosition) => !p.endedAt).length;\n return {\n hasAvatar: nonEmptyString(profile.avatar),\n hasHeadline: nonEmptyString(profile.headline),\n hasAbout: nonEmptyString(profile.about),\n currentPositionCount,\n skillCount: skills.length,\n educationCount: education.length,\n };\n}\n\n/** Convenience: full Profile -> dimension boolean map. */\nexport function getFilledDimensionsMap(profile: Profile): DimensionMap {\n return dimensionsFromInputs(profileToDimensionInputs(profile));\n}\n\n/** Count of filled dimensions, 0..6. Accepts either raw inputs or a full Profile. */\nexport function countFilledDimensions(input: ProfileDimensionInputs | Profile): number {\n const map = 'hasAvatar' in input ? dimensionsFromInputs(input) : getFilledDimensionsMap(input);\n let n = 0;\n for (const v of Object.values(map)) {\n if (v) n++;\n }\n return n;\n}\n","import { z } from 'zod';\n\n/**\n * Grapheme-aware refinement matching the AT Protocol lexicon `maxGraphemes`\n * constraint. JS strings are sequences of UTF-16 code units, but lexicon\n * `maxGraphemes` counts user-perceived characters (grapheme clusters), so\n * emoji sequences, regional indicators, ZWJ joins, and combining marks all\n * count as one unit each. We use `Intl.Segmenter` to enforce this correctly.\n */\nexport function maxGraphemes(max: number) {\n return (value: string): boolean => {\n const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n let count = 0;\n for (const _ of segmenter.segment(value)) {\n count++;\n if (count > max) return false;\n }\n return true;\n };\n}\n\n/** Decentralized identifier, AT Protocol `format: did`. */\nexport const didSchema = z.string().regex(/^did:[a-z]+:[a-zA-Z0-9._:%-]+$/, 'Invalid DID');\n\n/** RFC 3339 datetime with timezone offset, AT Protocol `format: datetime`. */\nexport const datetimeSchema = z.string().datetime({ offset: true });\n\n/** Generic AT-URI, AT Protocol `format: at-uri`. */\nexport const atUriSchema = z.string().regex(/^at:\\/\\/[^\\s]+$/, 'Invalid AT-URI');\n\n/** Content identifier, AT Protocol `format: cid`. Loose validation -- accepts CIDv0 and CIDv1. */\nexport const cidSchema = z\n .string()\n .regex(/^(Qm[1-9A-HJ-NP-Za-km-z]{44}|b[A-Za-z0-9+/=]+)$/, 'Invalid CID');\n\n/** BCP 47 language tag, AT Protocol `format: language`. */\nexport const languageTagSchema = z\n .string()\n .regex(/^[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*$/, 'Invalid BCP 47 language tag');\n\n/** Generic URI, AT Protocol `format: uri`. */\nexport const uriSchema = z.string().url();\n\n/**\n * StrongRef shape from `com.atproto.repo.strongRef` -- pins a record by both\n * AT-URI (identity) and CID (version).\n */\nexport const strongRefSchema = z.object({\n uri: atUriSchema,\n cid: cidSchema,\n});\n\n/**\n * Self-labels shape from `com.atproto.label.defs#selfLabels`. Modelled\n * permissively because clients rarely construct this directly; the AppView\n * handles label validation.\n */\nexport const selfLabelsSchema = z.object({\n $type: z.literal('com.atproto.label.defs#selfLabels').optional(),\n values: z.array(z.object({ val: z.string() })),\n});\n","import { z } from 'zod';\n\nimport { datetimeSchema, strongRefSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.endorsement.confirmation` records.\n * Lives in the endorsee's PDS to approve display of an endorsement.\n */\nexport const EndorsementConfirmationRecordSchema = z.object({\n endorsement: strongRefSchema,\n createdAt: datetimeSchema,\n});\n\nexport type EndorsementConfirmationRecord = z.infer<typeof EndorsementConfirmationRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes, strongRefSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.endorsement` records. Lives in the endorser's PDS;\n * the endorser identity is implicit (whoever owns the repository).\n */\nexport const EndorsementRecordSchema = z.object({\n subject: didSchema,\n skill: strongRefSchema,\n skillName: z.string().min(1).refine(maxGraphemes(64)).max(640),\n comment: z.string().refine(maxGraphemes(300)).max(3000).optional(),\n createdAt: datetimeSchema,\n});\n\nexport type EndorsementRecord = z.infer<typeof EndorsementRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.graph.follow` records.\n * One-way professional follow; lives in the follower's PDS.\n */\nexport const GraphFollowRecordSchema = z.object({\n subject: didSchema,\n createdAt: datetimeSchema,\n});\n\nexport type GraphFollowRecord = z.infer<typeof GraphFollowRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes, selfLabelsSchema, uriSchema } from './shared.js';\n\n/** Zod schema for `id.sifa.profile.certification` records. */\nexport const ProfileCertificationRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n authority: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n authorityDid: didSchema.optional(),\n credentialId: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n credentialUrl: uriSchema.optional(),\n issuedAt: datetimeSchema.optional(),\n expiresAt: datetimeSchema.optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileCertificationRecord = z.infer<typeof ProfileCertificationRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes, strongRefSchema } from './shared.js';\n\n/** Zod schema for `id.sifa.profile.course` records. */\nexport const ProfileCourseRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(200)).max(2000),\n number: z.string().refine(maxGraphemes(50)).max(500).optional(),\n institution: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n education: strongRefSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileCourseRecord = z.infer<typeof ProfileCourseRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes, selfLabelsSchema } from './shared.js';\n\n/** Zod schema for `id.sifa.profile.education` records. */\nexport const ProfileEducationRecordSchema = z.object({\n institution: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n institutionDid: didSchema.optional(),\n degree: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n fieldOfStudy: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n grade: z.string().refine(maxGraphemes(50)).max(500).optional(),\n activities: z.string().refine(maxGraphemes(1000)).max(10000).optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n location: z.unknown().optional(),\n startedAt: datetimeSchema.optional(),\n endedAt: datetimeSchema.optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileEducationRecord = z.infer<typeof ProfileEducationRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes, uriSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.profile.externalAccount` records.\n *\n * `platform` is advisory (`knownValues` in the lexicon) -- known values live\n * under `id.sifa.defs#platform*` but unknown values are accepted.\n */\nexport const ProfileExternalAccountRecordSchema = z.object({\n platform: z.string(),\n url: uriSchema,\n label: z.string().refine(maxGraphemes(64)).max(640).optional(),\n feedUrl: uriSchema.optional(),\n isPrimary: z.boolean().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileExternalAccountRecord = z.infer<typeof ProfileExternalAccountRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes } from './shared.js';\n\n/** Zod schema for `id.sifa.profile.honor` records. */\nexport const ProfileHonorRecordSchema = z.object({\n title: z.string().min(1).refine(maxGraphemes(200)).max(2000),\n issuer: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n issuerDid: didSchema.optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n awardedAt: datetimeSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileHonorRecord = z.infer<typeof ProfileHonorRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.profile.language` records.\n *\n * `proficiency` is advisory (`knownValues` in the lexicon) -- known values\n * are the five-level LinkedIn-compatible scale under `id.sifa.defs#*`.\n */\nexport const ProfileLanguageRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(64)).max(640),\n proficiency: z.string().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileLanguageRecord = z.infer<typeof ProfileLanguageRecordSchema>;\n","import { z } from 'zod';\n\nimport {\n datetimeSchema,\n didSchema,\n maxGraphemes,\n selfLabelsSchema,\n strongRefSchema,\n} from './shared.js';\n\n/** Zod schema for `id.sifa.profile.position` records. */\nexport const ProfilePositionRecordSchema = z.object({\n company: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n companyDid: didSchema.optional(),\n title: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n employmentType: z.string().optional(),\n workplaceType: z.string().optional(),\n location: z.unknown().optional(),\n startedAt: datetimeSchema,\n endedAt: datetimeSchema.optional(),\n skills: z.array(strongRefSchema).max(50).optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfilePositionRecord = z.infer<typeof ProfilePositionRecordSchema>;\n","import { z } from 'zod';\n\nimport {\n datetimeSchema,\n maxGraphemes,\n selfLabelsSchema,\n strongRefSchema,\n uriSchema,\n} from './shared.js';\n\n/** Zod schema for `id.sifa.profile.project` records. */\nexport const ProfileProjectRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n url: uriSchema.optional(),\n position: strongRefSchema.optional(),\n startedAt: datetimeSchema.optional(),\n endedAt: datetimeSchema.optional(),\n labels: selfLabelsSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileProjectRecord = z.infer<typeof ProfileProjectRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes, uriSchema } from './shared.js';\n\n/** Author shape from `id.sifa.profile.publication#author`. */\nexport const PublicationAuthorSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n did: didSchema.optional(),\n});\n\nexport type PublicationAuthor = z.infer<typeof PublicationAuthorSchema>;\n\n/** Zod schema for `id.sifa.profile.publication` records. */\nexport const ProfilePublicationRecordSchema = z.object({\n title: z.string().min(1).refine(maxGraphemes(200)).max(2000),\n publisher: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n url: uriSchema.optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n authors: z.array(PublicationAuthorSchema).max(50).optional(),\n publishedAt: datetimeSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfilePublicationRecord = z.infer<typeof ProfilePublicationRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, languageTagSchema, maxGraphemes, selfLabelsSchema } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.profile.self` records. Singleton (record key `self`).\n *\n * `knownValues` on `openTo` and `preferredWorkplace` are advisory per the\n * lexicon spec -- unknown values are allowed, but documented options live\n * under the `id.sifa.defs#*` namespace.\n */\nexport const ProfileSelfRecordSchema = z.object({\n headline: z.string().refine(maxGraphemes(120)).max(1200).optional(),\n about: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n industry: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n givenName: z.string().refine(maxGraphemes(64)).max(640).optional(),\n familyName: z.string().refine(maxGraphemes(64)).max(640).optional(),\n location: z.unknown().optional(),\n openTo: z.array(z.string()).max(10).optional(),\n preferredWorkplace: z.array(z.string()).max(3).optional(),\n langs: z.array(languageTagSchema).max(3).optional(),\n labels: selfLabelsSchema.optional(),\n discoverable: z.boolean().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileSelfRecord = z.infer<typeof ProfileSelfRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, maxGraphemes } from './shared.js';\n\n/**\n * Zod schema for `id.sifa.profile.skill` records.\n *\n * `category` is advisory (`knownValues` in the lexicon) -- known values live\n * under `id.sifa.defs#*` but unknown values are accepted.\n */\nexport const ProfileSkillRecordSchema = z.object({\n name: z.string().min(1).refine(maxGraphemes(64)).max(640),\n category: z.string().optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileSkillRecord = z.infer<typeof ProfileSkillRecordSchema>;\n","import { z } from 'zod';\n\nimport { datetimeSchema, didSchema, maxGraphemes } from './shared.js';\n\n/** Zod schema for `id.sifa.profile.volunteering` records. */\nexport const ProfileVolunteeringRecordSchema = z.object({\n organization: z.string().min(1).refine(maxGraphemes(100)).max(1000),\n organizationDid: didSchema.optional(),\n role: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n cause: z.string().refine(maxGraphemes(100)).max(1000).optional(),\n description: z.string().refine(maxGraphemes(5000)).max(50000).optional(),\n startedAt: datetimeSchema.optional(),\n endedAt: datetimeSchema.optional(),\n createdAt: datetimeSchema,\n});\n\nexport type ProfileVolunteeringRecord = z.infer<typeof ProfileVolunteeringRecordSchema>;\n","/**\n * Sifa SDK -- public client library for the Sifa AppView on AT Protocol.\n *\n * Pre-1.0: the public API is unstable and may change in any minor release.\n *\n * @see https://github.com/singi-labs/sifa-sdk\n */\n\ndeclare const __SIFA_SDK_VERSION__: string;\n\nexport const SIFA_SDK_VERSION: string = __SIFA_SDK_VERSION__;\n\nexport type {\n ActiveApp,\n Endorsement,\n EndorsementData,\n ExternalAccount,\n ExternalAccountKeytraceClaim,\n FeedItem,\n LanguageProficiency,\n LocationValue,\n PdsProviderInfo,\n Profile,\n ProfileCertification,\n ProfileCourse,\n ProfileEducation,\n ProfileHonor,\n ProfileIndustry,\n ProfileLanguage,\n ProfileLocation,\n ProfileOverrideSource,\n ProfilePosition,\n ProfileProject,\n ProfilePublication,\n ProfileSkill,\n ProfileVolunteering,\n PublicationContributor,\n SkillRef,\n SkillSuggestion,\n TrustStat,\n VerifiedAccount,\n} from './types/index.js';\n\nexport {\n ACTIVITY_TIERS,\n CATEGORY_LABELS,\n CATEGORY_ORDER,\n CONTINENTS,\n COUNTRIES,\n EMPLOYMENT_TYPE_GROUPS,\n EMPLOYMENT_TYPE_LABELS,\n INDUSTRY_OPTIONS,\n OPEN_TO_OPTIONS,\n findIndustry,\n getActivityTaxonomyVersion,\n getActivityTier,\n getEmploymentTypeLabel,\n getIndustryLabelKey,\n getLexiconEntry,\n getOpenToLabelKey,\n getTierMeta,\n getWorkplaceTypeLabel,\n PLATFORM_LABELS,\n PLATFORM_OPTIONS,\n SKILL_CATEGORIES,\n WORKPLACE_TYPE_LABELS,\n WORKPLACE_TYPE_OPTIONS,\n dedupeSkills,\n getContinent,\n getFaviconUrl,\n getPlatformLabel,\n groupSkillsByCategory,\n isKnownPlatform,\n type ActivityTaxonomy,\n type ActivityTier,\n type ContinentCode,\n type EmploymentTypeGroup,\n type EmploymentTypeOption,\n type IndustryOption,\n type LexiconEntry,\n type MergedProfileSkill,\n type OpenToOption,\n type PlatformId,\n type SkillCategory,\n type TierMeta,\n type WorkplaceTypeOption,\n} from './taxonomy/index.js';\n\nexport {\n certDateExtractor,\n contrastRatio,\n countryCodeToFlag,\n dateRangeExtractor,\n detectPdsProvider,\n formatDistanceToNow,\n formatLocation,\n formatRelativeTime,\n getDisplayLabel,\n getHandleStem,\n getPdsDisplayName,\n isValidRgbColor,\n lexiconDateExtractor,\n limitCombiningMarks,\n meetsContrastAA,\n parseLocationString,\n pdsProviderFromApi,\n relativeLuminance,\n rgbToString,\n sanitizeDisplayText,\n sanitizeHandleInput,\n singleDateExtractor,\n sortByDateDesc,\n truncateGraphemes,\n type PdsProvider,\n type RgbColor,\n} from './format/index.js';\n\nexport {\n APP_URL_PATTERNS,\n COLLECTION_TO_APP,\n getAppIdForCollection,\n resolveCardUrl,\n type ActivityItemForUrl,\n type AppUrlPatterns,\n} from './cards/index.js';\n\nexport {\n COMPLETENESS_MAX_SCORE,\n completenessPercent,\n completenessScore,\n DIMENSIONS_MAX_SCORE,\n MIN_SKILLS,\n countFilledDimensions,\n dimensionsFromInputs,\n getFilledDimensionsMap,\n profileToDimensionInputs,\n type DimensionKey,\n type DimensionMap,\n type ProfileCompletion,\n type ProfileDimensionInputs,\n} from './logic/index.js';\n\nexport {\n EndorsementConfirmationRecordSchema,\n EndorsementRecordSchema,\n GraphFollowRecordSchema,\n ProfileCertificationRecordSchema,\n ProfileCourseRecordSchema,\n ProfileEducationRecordSchema,\n ProfileExternalAccountRecordSchema,\n ProfileHonorRecordSchema,\n ProfileLanguageRecordSchema,\n ProfilePositionRecordSchema,\n ProfileProjectRecordSchema,\n ProfilePublicationRecordSchema,\n ProfileSelfRecordSchema,\n ProfileSkillRecordSchema,\n ProfileVolunteeringRecordSchema,\n PublicationAuthorSchema,\n atUriSchema,\n cidSchema,\n datetimeSchema,\n didSchema,\n languageTagSchema,\n maxGraphemes,\n selfLabelsSchema,\n strongRefSchema,\n uriSchema,\n type EndorsementConfirmationRecord,\n type EndorsementRecord,\n type GraphFollowRecord,\n type ProfileCertificationRecord,\n type ProfileCourseRecord,\n type ProfileEducationRecord,\n type ProfileExternalAccountRecord,\n type ProfileHonorRecord,\n type ProfileLanguageRecord,\n type ProfilePositionRecord,\n type ProfileProjectRecord,\n type ProfilePublicationRecord,\n type ProfileSelfRecord,\n type ProfileSkillRecord,\n type ProfileVolunteeringRecord,\n type PublicationAuthor,\n} from './schemas/index.js';\n"]}