@singi-labs/sifa-sdk 0.4.1 → 0.5.0

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/industry-taxonomy.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-truncate.ts","../src/format/time-utils.ts","../src/format/wcag-contrast.ts","../src/index.ts"],"names":[],"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,EACJ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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","/** 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 * 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 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\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 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 * 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 INDUSTRY_OPTIONS,\n findIndustry,\n getIndustryLabelKey,\n PLATFORM_LABELS,\n PLATFORM_OPTIONS,\n SKILL_CATEGORIES,\n dedupeSkills,\n getContinent,\n getFaviconUrl,\n getPlatformLabel,\n groupSkillsByCategory,\n isKnownPlatform,\n type ContinentCode,\n type IndustryOption,\n type MergedProfileSkill,\n type PlatformId,\n type SkillCategory,\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 meetsContrastAA,\n parseLocationString,\n pdsProviderFromApi,\n relativeLuminance,\n rgbToString,\n sanitizeHandleInput,\n singleDateExtractor,\n sortByDateDesc,\n truncateGraphemes,\n type PdsProvider,\n type RgbColor,\n} from './format/index.js';\n"]}
1
+ {"version":3,"sources":["../src/taxonomy/continents.ts","../src/taxonomy/countries.ts","../src/taxonomy/industry-taxonomy.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-truncate.ts","../src/format/time-utils.ts","../src/format/wcag-contrast.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","/** 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 * 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 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\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 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","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 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 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 INDUSTRY_OPTIONS,\n findIndustry,\n getIndustryLabelKey,\n PLATFORM_LABELS,\n PLATFORM_OPTIONS,\n SKILL_CATEGORIES,\n dedupeSkills,\n getContinent,\n getFaviconUrl,\n getPlatformLabel,\n groupSkillsByCategory,\n isKnownPlatform,\n type ContinentCode,\n type IndustryOption,\n type MergedProfileSkill,\n type PlatformId,\n type SkillCategory,\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 meetsContrastAA,\n parseLocationString,\n pdsProviderFromApi,\n relativeLuminance,\n rgbToString,\n sanitizeHandleInput,\n singleDateExtractor,\n sortByDateDesc,\n truncateGraphemes,\n type PdsProvider,\n type RgbColor,\n} from './format/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"]}
package/dist/index.d.cts CHANGED
@@ -1,3 +1,6 @@
1
+ export { EndorsementConfirmationRecord, EndorsementConfirmationRecordSchema, EndorsementRecord, EndorsementRecordSchema, GraphFollowRecord, GraphFollowRecordSchema, ProfileCertificationRecord, ProfileCertificationRecordSchema, ProfileCourseRecord, ProfileCourseRecordSchema, ProfileEducationRecord, ProfileEducationRecordSchema, ProfileExternalAccountRecord, ProfileExternalAccountRecordSchema, ProfileHonorRecord, ProfileHonorRecordSchema, ProfileLanguageRecord, ProfileLanguageRecordSchema, ProfilePositionRecord, ProfilePositionRecordSchema, ProfileProjectRecord, ProfileProjectRecordSchema, ProfilePublicationRecord, ProfilePublicationRecordSchema, ProfileSelfRecord, ProfileSelfRecordSchema, ProfileSkillRecord, ProfileSkillRecordSchema, ProfileVolunteeringRecord, ProfileVolunteeringRecordSchema, PublicationAuthor, PublicationAuthorSchema, atUriSchema, cidSchema, datetimeSchema, didSchema, languageTagSchema, maxGraphemes, selfLabelsSchema, strongRefSchema, uriSchema } from './schemas/index.cjs';
2
+ import 'zod';
3
+
1
4
  interface LocationValue {
2
5
  city?: string;
3
6
  /** community.lexicon.location.address field -- preferred over `city`. */
package/dist/index.d.ts CHANGED
@@ -1,3 +1,6 @@
1
+ export { EndorsementConfirmationRecord, EndorsementConfirmationRecordSchema, EndorsementRecord, EndorsementRecordSchema, GraphFollowRecord, GraphFollowRecordSchema, ProfileCertificationRecord, ProfileCertificationRecordSchema, ProfileCourseRecord, ProfileCourseRecordSchema, ProfileEducationRecord, ProfileEducationRecordSchema, ProfileExternalAccountRecord, ProfileExternalAccountRecordSchema, ProfileHonorRecord, ProfileHonorRecordSchema, ProfileLanguageRecord, ProfileLanguageRecordSchema, ProfilePositionRecord, ProfilePositionRecordSchema, ProfileProjectRecord, ProfileProjectRecordSchema, ProfilePublicationRecord, ProfilePublicationRecordSchema, ProfileSelfRecord, ProfileSelfRecordSchema, ProfileSkillRecord, ProfileSkillRecordSchema, ProfileVolunteeringRecord, ProfileVolunteeringRecordSchema, PublicationAuthor, PublicationAuthorSchema, atUriSchema, cidSchema, datetimeSchema, didSchema, languageTagSchema, maxGraphemes, selfLabelsSchema, strongRefSchema, uriSchema } from './schemas/index.js';
2
+ import 'zod';
3
+
1
4
  interface LocationValue {
2
5
  city?: string;
3
6
  /** community.lexicon.location.address field -- preferred over `city`. */