@adminide-stack/yantra-mobile 12.0.73 → 12.0.74-alpha.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phoneNumberRules.js","sources":["../../../src/features/messaging/phoneNumberRules.ts"],"sourcesContent":["/* eslint-disable */\n/**\n * Per region: the lengths and the pattern of a MOBILE national number (no country code, no\n * trunk 0). GENERATED by scripts/generate-phone-countries.mjs from libphonenumber-js metadata -\n * do not edit by hand, rerun the script. 245 entries.\n */\nexport interface MobileNumberRule {\n lengths: readonly number[];\n pattern: string;\n}\n\nexport const MOBILE_NUMBER_RULES: Readonly<Record<string, MobileNumberRule>> = {\n AF: { lengths: [9], pattern: '7\\\\d{8}' },\n AX: { lengths: [6, 7, 8, 9, 10], pattern: '4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}' },\n AL: { lengths: [9], pattern: '6(?:[78][2-9]|9\\\\d)\\\\d{6}' },\n DZ: { lengths: [9], pattern: '5(?:4[0-29]|6[0-4])\\\\d{6}|(?:55|6\\\\d|7[7-9])\\\\d{7}' },\n AS: { lengths: [10], pattern: '684(?:2(?:48|5[2468]|7[246])|7(?:3[13]|70|82))\\\\d{4}' },\n AD: { lengths: [6, 9], pattern: '690\\\\d{6}|[356]\\\\d{5}' },\n AO: { lengths: [9], pattern: '9[1-79]\\\\d{7}' },\n AI: { lengths: [10], pattern: '264(?:235|4(?:69|7[67])|5(?:3[6-9]|8[1-4])|7(?:29|72))\\\\d{4}' },\n AG: { lengths: [10], pattern: '268(?:464|7(?:1[3-9]|[28]\\\\d|3[0246]|64|7[0-689]))\\\\d{4}' },\n AR: {\n lengths: [10, 11],\n pattern:\n '93(?:7(?:1[15]|81)|8(?:21|4[16]|69|9[12]))[46]\\\\d{5}|9(?:2(?:2(?:2[59]|44|52)|3(?:26|44)|47[35]|9(?:[07]2|2[26]|34|46))|3327)[45]\\\\d{5}|9(?:2(?:657|9(?:54|66))|3(?:48[27]|7(?:55|77)|8(?:65|78)))[2-8]\\\\d{5}|9(?:2(?:284|3(?:02|23)|477|622|920)|3(?:4(?:46|89|92)|541))[2-7]\\\\d{5}|(?:675\\\\d|9(?:11[1-8]\\\\d|2(?:2(?:0[45]|1[2-6]|3[3-6])|3(?:[06]4|7[45])|494|6(?:04|1[2-8]|[36][45]|4[3-6])|80[45]|9(?:[17][4-6]|[48][45]|9[3-6]))|3(?:364|4(?:1[2-8]|[25][4-6]|3[3-6]|84)|5(?:1[2-9]|[38][4-6])|6(?:2[45]|44)|7[069][45]|8(?:0[45]|1[2-7]|3[4-6]|5[3-6]|7[2-6]|8[3-68]))))\\\\d{6}|9(?:2(?:2(?:62|81)|320|9(?:42|83))|3(?:329|4(?:62|7[16])|5(?:43|64)|7(?:18|5[17])))[2-6]\\\\d{5}|92(?:2(?:21|4[23]|6[145]|7[1-4]|8[356]|9[267])|3(?:16|3[13-8]|43|5[346-8]|9[3-5])|6(?:2[46]|4[78]|5[1568])|9(?:03|2[1457-9]|3[1356]|4[08]|[56][23]|82))4\\\\d{5}|9(?:2(?:257|3(?:24|46|92)|9(?:01|23|64))|3(?:4(?:42|64)|5(?:25|37|4[47]|71)|7(?:35|72)|825))[3-6]\\\\d{5}|9(?:2(?:2(?:02|2[3467]|4[156]|5[45]|6[6-8]|91)|3(?:1[47]|25|[45][25]|96)|47[48]|625|932)|3(?:38[2578]|4(?:0[0-24-9]|3[78]|4[457]|58|6[035-9]|72|83|9[136-8])|5(?:2[124]|[368][23]|4[2689]|7[2-6])|7(?:16|2[15]|3[14]|4[13]|5[468]|7[3-5]|8[26])|8(?:2[67]|3[278]|4[3-5]|5[78]|6[1-378]|[78]7|94)))[4-6]\\\\d{5}',\n },\n AM: { lengths: [8], pattern: '(?:33|4[1349]|55|77|88|9[13-9])\\\\d{6}' },\n AW: {\n lengths: [7],\n pattern: '(?:290|5[69]\\\\d|6(?:[03]0|22|4[0-2]|[69]\\\\d)|7(?:[34]\\\\d|7[07])|9(?:6[45]|9[4-8]))\\\\d{4}',\n },\n AC: { lengths: [5], pattern: '4\\\\d{4}' },\n AU: {\n lengths: [9],\n pattern: '4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}',\n },\n AT: { lengths: [7, 8, 9, 10, 11, 12, 13], pattern: '6(?:485|(?:5[0-3579]|6[013-9]|[7-9]\\\\d)\\\\d)\\\\d{3,9}' },\n AZ: { lengths: [9], pattern: '36554\\\\d{4}|(?:[16]0|4[04]|5[015]|7[07]|99)\\\\d{7}' },\n BS: {\n lengths: [10],\n pattern:\n '242(?:3(?:5[79]|7[56]|95)|4(?:[23][1-9]|4[1-35-9]|5[1-8]|6[2-8]|7\\\\d|81)|5(?:2[45]|3[35]|44|5[1-46-9]|65|77)|6[34]6|7(?:27|38)|8(?:0[1-9]|1[02-9]|2\\\\d|3[0-4]|[89]9))\\\\d{4}',\n },\n BH: {\n lengths: [8],\n pattern: '(?:3(?:[0-79]\\\\d|8[0-57-9])\\\\d|6(?:3(?:00|33|6[16])|441|6(?:3[03-9]|[69]\\\\d|7[0-689])))\\\\d{4}',\n },\n BD: { lengths: [10], pattern: '(?:1[13-9]\\\\d|644)\\\\d{7}|(?:3[78]|44|66)[02-9]\\\\d{7}' },\n BB: {\n lengths: [10],\n pattern:\n '246(?:(?:2(?:[3568]\\\\d|4[0-57-9])|3(?:5[2-9]|6[0-6])|4(?:46|5\\\\d)|69[5-7]|8(?:[2-5]\\\\d|83))\\\\d|52(?:1[147]|20))\\\\d{3}',\n },\n BY: { lengths: [9], pattern: '(?:2(?:5[5-79]|9[1-9])|(?:33|44)\\\\d)\\\\d{6}' },\n BE: { lengths: [9], pattern: '4[5-9]\\\\d{7}' },\n BZ: { lengths: [7], pattern: '6[0-35-7]\\\\d{5}' },\n BJ: { lengths: [10], pattern: '01(?:2[5-9]|[4-69]\\\\d)\\\\d{6}' },\n BM: { lengths: [10], pattern: '441(?:[2378]\\\\d|5[0-39]|9[02])\\\\d{5}' },\n BT: { lengths: [8], pattern: '(?:1[67]|[78]7)\\\\d{6}' },\n BO: { lengths: [8], pattern: '(?:57|[67]\\\\d)\\\\d{6}' },\n BA: { lengths: [8, 9], pattern: '6040\\\\d{5}|6(?:03|[1-356]|44|7\\\\d)\\\\d{6}' },\n BW: { lengths: [8], pattern: '(?:321|7(?:[1-8]\\\\d|9[03]))\\\\d{5}' },\n BR: { lengths: [10, 11], pattern: '(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])(?:7|9\\\\d)\\\\d{7}' },\n IO: { lengths: [7], pattern: '38\\\\d{5}' },\n VG: {\n lengths: [10],\n pattern: '284(?:245|3(?:0[0-3]|4[0-7]|68|9[34])|4(?:4[0-6]|68|9[69])|5(?:4[0-7]|68|9[69]))\\\\d{4}',\n },\n BN: { lengths: [7], pattern: '(?:22[89]|[78]\\\\d\\\\d)\\\\d{4}' },\n BG: { lengths: [8, 9], pattern: '(?:43[07-9]|99[69]\\\\d)\\\\d{5}|(?:8[7-9]|98)\\\\d{7}' },\n BF: { lengths: [8], pattern: '(?:0[1-7]|4[4-6]|5[0-8]|[67]\\\\d)\\\\d{6}' },\n BI: { lengths: [8], pattern: '(?:29|6[1-9]|7[125-9])\\\\d{6}' },\n KH: {\n lengths: [8, 9],\n pattern:\n '(?:(?:1[28]|3[18]|9[67])\\\\d|6[016-9]|7(?:[07-9]|[16]\\\\d)|8(?:[013-79]|8\\\\d))\\\\d{6}|(?:1\\\\d|9[0-57-9])\\\\d{6}|(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])48\\\\d{5}',\n },\n CM: { lengths: [9], pattern: '(?:24[23]|6(?:[25-9]\\\\d|4[01]))\\\\d{6}' },\n CA: {\n lengths: [10],\n pattern:\n '(?:2(?:04|[23]6|[48]9|5[07]|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42))[2-9]\\\\d{6}',\n },\n CV: { lengths: [7], pattern: '(?:36|5[1-389]|9\\\\d)\\\\d{5}' },\n BQ: { lengths: [7], pattern: '(?:31(?:8[14-8]|9[14578])|416[14-9]|7(?:0[01]|7[07]|8\\\\d|9[056])\\\\d)\\\\d{3}' },\n KY: {\n lengths: [10],\n pattern:\n '345(?:32[1-9]|4(?:1[2-6]|2[0-4])|5(?:1[67]|2[5-79]|4[6-9]|50|76)|649|82[56]|9(?:1[679]|2[2-9]|3[06-9]|90))\\\\d{4}',\n },\n CF: { lengths: [8], pattern: '7[02-7]\\\\d{6}' },\n TD: { lengths: [8], pattern: '(?:3[01]|[69]\\\\d|77|8[5-7])\\\\d{6}' },\n CL: {\n lengths: [9],\n pattern:\n '2(?:1982[0-6]|3314[05-9])\\\\d{3}|(?:2(?:1(?:160|962)|3(?:(?:[24]\\\\d|50)\\\\d|3(?:[034679]\\\\d|1[0-35-9]|2[1-9]|5[0-24-9]|8[0-389])|600)|646[59])|80[1-8]\\\\d\\\\d|9(?:(?:10[0-2]|7[1-9]\\\\d)\\\\d|3(?:[0-57-9]\\\\d\\\\d|6(?:0[02-9]|[1-9]\\\\d))|6(?:[0-8]\\\\d\\\\d|9(?:[02-79]\\\\d|1[05-9]))|9(?:[03-9]\\\\d\\\\d|1(?:[0235-9]\\\\d|4[0-24-9])|2(?:[0-79]\\\\d|8[0-46-9]))))\\\\d{4}|(?:22|3[2-5]|[47][1-35]|5[1-3578]|6[13-57]|8[1-9]|9[2458])\\\\d{7}',\n },\n CN: { lengths: [11], pattern: '1740[0-5]\\\\d{6}|1(?:[38]\\\\d|4[57]|[59][0-35-9]|6[25-7]|7[0-35-8])\\\\d{8}' },\n CX: {\n lengths: [9],\n pattern: '4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}',\n },\n CC: {\n lengths: [9],\n pattern: '4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}',\n },\n CO: {\n lengths: [10],\n pattern:\n '333301[0-5]\\\\d{3}|3333(?:00|2[5-9]|[3-9]\\\\d)\\\\d{4}|(?:3(?:(?:0[0-5]|1\\\\d|5[01]|70)\\\\d|2(?:[0-3]\\\\d|4[1-9])|3(?:00|3[0-24-9]))|9(?:101|408))\\\\d{6}',\n },\n KM: { lengths: [7], pattern: '[34]\\\\d{6}' },\n CG: { lengths: [9], pattern: '026(?:1[0-5]|6[6-9])\\\\d{4}|0(?:[14-6]\\\\d\\\\d|2(?:40|5[5-8]|6[07-9]))\\\\d{5}' },\n CD: { lengths: [7, 9], pattern: '88\\\\d{5}|(?:8[0-69]|9[016-9])\\\\d{7}' },\n CK: { lengths: [5], pattern: '[578]\\\\d{4}' },\n CR: { lengths: [8], pattern: '(?:3005\\\\d|6500[01])\\\\d{3}|(?:5[07]|6[0-4]|7[0-3]|8[3-9])\\\\d{6}' },\n CI: { lengths: [10], pattern: '0[157]\\\\d{8}' },\n HR: {\n lengths: [8, 9],\n pattern: '9(?:(?:0[1-9]|[12589]\\\\d)\\\\d\\\\d|7(?:[0679]\\\\d\\\\d|5(?:[01]\\\\d|44|55|77|9[5-79])))\\\\d{4}|98\\\\d{6}',\n },\n CU: { lengths: [8], pattern: '(?:5\\\\d|6[2-4])\\\\d{6}' },\n CW: { lengths: [7, 8], pattern: '953[01]\\\\d{4}|9(?:5[12467]|6[5-9])\\\\d{5}' },\n CY: { lengths: [8], pattern: '9(?:10|[4-79]\\\\d)\\\\d{5}' },\n CZ: { lengths: [9], pattern: '7060\\\\d{5}|(?:60[1-8]|7(?:0[2-5]|19|[2379]\\\\d))\\\\d{6}' },\n DK: {\n lengths: [8],\n pattern: '(?:2[6-8]|37|6[78]|96)\\\\d{6}|(?:2[0-59]|3[0-689]|[457]\\\\d|6[0-69]|8[126-9]|9[1-47-9])[1-9]\\\\d{5}',\n },\n DJ: { lengths: [8], pattern: '77\\\\d{6}' },\n DM: { lengths: [10], pattern: '767(?:2(?:[2-4689]5|7[5-7])|31[5-7]|61[1-8]|70[1-6])\\\\d{4}' },\n DO: { lengths: [10], pattern: '8[024]9[2-9]\\\\d{6}' },\n EC: { lengths: [9], pattern: '964[0-2]\\\\d{5}|9(?:39|[57][89]|6[0-36-9]|[89]\\\\d)\\\\d{6}' },\n EG: { lengths: [10], pattern: '1[0-25]\\\\d{8}' },\n SV: { lengths: [8], pattern: '[5-7]\\\\d{7}' },\n GQ: { lengths: [9], pattern: '(?:222|55\\\\d)\\\\d{6}' },\n ER: { lengths: [7], pattern: '(?:17[1-3]|7\\\\d\\\\d)\\\\d{4}' },\n EE: {\n lengths: [7, 8],\n pattern:\n '(?:5\\\\d{5}|8(?:1(?:0(?:0(?:00|[178]\\\\d)|[3-9]\\\\d\\\\d)|(?:1(?:0[2-6]|1\\\\d)|[2-79]\\\\d\\\\d)\\\\d)|2(?:0(?:0(?:00|4\\\\d)|(?:19|[2-7]\\\\d)\\\\d)|(?:(?:[124-69]\\\\d|3[5-9])\\\\d|7(?:[0-79]\\\\d|8[013-9])|8(?:[2-6]\\\\d|7[01]))\\\\d)|[349]\\\\d{4}))\\\\d\\\\d|5(?:(?:[02]\\\\d|5[0-478])\\\\d|1(?:[0-8]\\\\d|95)|6(?:4[0-4]|5[1-589]))\\\\d{3}',\n },\n SZ: { lengths: [8], pattern: '7[5-9]\\\\d{6}' },\n ET: {\n lengths: [9],\n pattern: '700[1-9]\\\\d{5}|(?:7(?:0[1-9]|1[0-8]|2[1-35-79]|3\\\\d|77|86|99)|(?:8[01]|9\\\\d)\\\\d)\\\\d{6}',\n },\n FK: { lengths: [5], pattern: '[56]\\\\d{4}' },\n FO: { lengths: [6], pattern: '(?:[27][1-9]|5\\\\d|9[16])\\\\d{4}' },\n FJ: { lengths: [7], pattern: '(?:[279]\\\\d|45|5[01568]|8[034679])\\\\d{5}' },\n FI: { lengths: [6, 7, 8, 9, 10], pattern: '4946\\\\d{2,6}|(?:4[0-8]|50)\\\\d{4,8}' },\n FR: { lengths: [9], pattern: '(?:6(?:[0-24-8]\\\\d|3[0-8]|9[589])|7[3-9]\\\\d)\\\\d{6}' },\n GF: { lengths: [9], pattern: '(?:694(?:[0-249]\\\\d|3[0-8])|7093[0-3])\\\\d{4}' },\n PF: { lengths: [8], pattern: '8[7-9]\\\\d{6}' },\n GA: { lengths: [7, 8], pattern: '(?:(?:0[2-7]|7[467])\\\\d|6(?:0[0-4]|10|[256]\\\\d))\\\\d{5}|[2-7]\\\\d{6}' },\n GM: { lengths: [7], pattern: '556\\\\d{4}|(?:[23679]\\\\d|4[015]|5[0-489]|8[4-7])\\\\d{5}' },\n GE: {\n lengths: [9],\n pattern:\n '5(?:(?:(?:0555|1(?:[17]77|555))[5-9]|757(?:7[7-9]|8[01]))\\\\d|22252[0-4])\\\\d\\\\d|5(?:0(?:0(?:1[09]|70)|505)|1(?:0[01]0|1(?:07|33|51))|2(?:0[02]0|2[25]2)|3(?:0[03]0|3[35]3)|(?:40[04]|900)0|5222)[0-4]\\\\d{3}|(?:5(?:0(?:0(?:0\\\\d|1[12]|22|3[0-6]|44|5[05]|77|88|9[09])|(?:[14]\\\\d|77)\\\\d|22[02])|1(?:1(?:[03][01]|[124]\\\\d|5[2-6]|7[0-6])|4\\\\d\\\\d)|[23]555|4(?:4\\\\d\\\\d|555)|5(?:[0157-9]\\\\d\\\\d|200|333|4(?:44|55))|6[89]\\\\d\\\\d|7(?:(?:[0147-9]\\\\d|22)\\\\d|5(?:00|[57]5))|8(?:0(?:[018]\\\\d|2[0-4])|5(?:55|8[89])|8(?:55|88))|9(?:090|[1-35-9]\\\\d\\\\d))|790\\\\d\\\\d)\\\\d{4}',\n },\n DE: { lengths: [10, 11], pattern: '1(?:6[023]|7\\\\d)\\\\d{7,8}|15(?:[0-25-9]\\\\d\\\\d|3(?:10|33))\\\\d{6}' },\n GH: { lengths: [9], pattern: '(?:2(?:[0346-9]\\\\d|5[67])|5(?:[03-7]\\\\d|9[1-9]))\\\\d{6}' },\n GI: { lengths: [8], pattern: '5251[0-4]\\\\d{3}|(?:5(?:[146-8]\\\\d\\\\d|250)|60(?:1[01]|6\\\\d))\\\\d{4}' },\n GR: { lengths: [10], pattern: '68[57-9]\\\\d{7}|(?:69|94)\\\\d{8}' },\n GL: { lengths: [6], pattern: '[245]\\\\d{5}' },\n GD: { lengths: [10], pattern: '473(?:4(?:0[2-79]|1[04-9]|2[0-5]|49|5[6-8])|5(?:2[01]|3[3-8])|901)\\\\d{4}' },\n GP: { lengths: [9], pattern: '(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))|7090[0-4])\\\\d{4}' },\n GU: {\n lengths: [10],\n pattern:\n '671(?:2\\\\d\\\\d|3(?:00|3[39]|4[349]|55|6[26])|4(?:00|56|7[1-9]|8[02-9])|5(?:55|6[2-5]|88)|6(?:3[2-578]|4[24-9]|5[34]|78|8[235-9])|7(?:[0479]7|2[0167]|3[45]|8[7-9])|8(?:[2-57-9]8|6[478])|9(?:2[29]|6[79]|7[1279]|8[7-9]|9[16-9]))\\\\d{4}',\n },\n GT: { lengths: [8], pattern: '(?:[3-5]\\\\d\\\\d|80[0-4])\\\\d{5}' },\n GG: { lengths: [10], pattern: '7(?:(?:781|839)\\\\d|911[17])\\\\d{5}' },\n GN: { lengths: [9], pattern: '6[0-356]\\\\d{7}' },\n GW: { lengths: [9], pattern: '9(?:5\\\\d|6[569]|77)\\\\d{6}' },\n GY: { lengths: [7], pattern: '(?:51[01]|6\\\\d\\\\d|7(?:[0-5]\\\\d|6[0-79]|70))\\\\d{4}' },\n HT: { lengths: [8], pattern: '(?:[34]\\\\d|5[568])\\\\d{6}' },\n HN: { lengths: [8], pattern: '[37-9]\\\\d{7}' },\n HK: {\n lengths: [8],\n pattern:\n '(?:4(?:(?:09|24)[3-6]|44[0-35-9]|6(?:4[0-57-9]|6[0-6])|7(?:4[0-48]|6[0-5]))|5(?:25[3-7]|35[4-8]|73[0-6]|95[0-8])|6(?:26[013-8]|(?:66|78)[0-5])|70(?:7[1-8]|8[0-8])|84(?:4[0-2]|8[0-35-9])|9(?:29[013-9]|39[014-9]|59[0-467]|899))\\\\d{4}|(?:4(?:4[0-35-9]|6[0-357-9]|7[0-35])|5(?:[1-59][0-46-9]|6[0-4689]|7[0-246-9])|6(?:0[1-9]|[13-59]\\\\d|[268][0-57-9]|7[0-79])|70[1-59]|84[0-39]|9(?:0[1-9]|1[02-9]|[2358][0-8]|[467]\\\\d))\\\\d{5}',\n },\n HU: { lengths: [9], pattern: '(?:[257]0|3[01])\\\\d{7}' },\n IS: {\n lengths: [7, 9],\n pattern:\n '(?:38[589]\\\\d\\\\d|6(?:1[1-8]|2[0-6]|3[026-9]|4[014679]|5[0159]|6[0-69]|70|8[06-8]|9\\\\d)|7(?:5[057]|[6-9]\\\\d)|8(?:2[0-59]|[3-69]\\\\d|8[238]))\\\\d{4}',\n },\n IN: {\n lengths: [10],\n pattern:\n '(?:6(?:1279|828[01489])|7(?:887[02-9]|9(?:313|79[07-9]))|8(?:079[04-9]|(?:84|91)7[02-8]))\\\\d{5}|(?:160[01]|6(?:(?:12|[2-4]1|5[17]|6[13]|80)[0189]|7(?:1[0189]|86))|7(?:1(?:2[0189]|9[0-5])|3(?:2[5-8]|[34][017-9]|9[016-9])|5(?:[15][017-9]|2[04-9]|9[7-9])|6(?:0[0-47]|1[0-257-9]|2[0-4]|3[19]|5[4589])|70[0289]|88[089]|97[02-8])|8(?:0(?:6[67]|7[02-8])|70[017-9]|84[01489]|91[0-289]))\\\\d{6}|(?:731|8(?:16|2[014]|3[126]|6[136]|7[78]|83))(?:[0189]\\\\d|7[02-8])\\\\d{5}|(?:6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578])\\\\d|7(?:[23569]\\\\d|4[0189]|8[0-57-9])|8(?:[14-6]\\\\d|2[0-79]))|7(?:1(?:[013-8]\\\\d|9[6-9])|3(?:2[0-49]|9[2-5])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]|881))[0189]\\\\d{5}|(?:6(?:[09]\\\\d|1[04679]|2[03689]|3[05-9]|4[0489]|50|6[069]|7[07]|8[7-9])|7(?:[024]\\\\d|3[05-8]|5[0346-8]|6[6-9]|7[1-9]|8[0-79]|9[089])|8(?:0[01589]|1[0-57-9]|2[235-9]|3[03-57-9]|[45]\\\\d|6[02457-9]|7[1-69]|8[0-25-9]|9[02-9])|9\\\\d\\\\d)\\\\d{7}',\n },\n ID: { lengths: [9, 10, 11, 12], pattern: '8[1-35-9]\\\\d{7,10}' },\n IR: {\n lengths: [10],\n pattern:\n '9(?:(?:0[0-5]|[13]\\\\d|2[0-3])\\\\d\\\\d|9(?:[0-46]\\\\d\\\\d|5(?:10|5\\\\d)|8(?:[12]\\\\d|88)|9(?:[01359]\\\\d|21|69|77|8[7-9])))\\\\d{5}',\n },\n IQ: { lengths: [10], pattern: '7[3-9]\\\\d{8}' },\n IE: { lengths: [9], pattern: '8(?:22|[35-9]\\\\d)\\\\d{6}' },\n IM: { lengths: [10], pattern: '76245[06]\\\\d{4}|7(?:4576|[59]24\\\\d|624[0-4689])\\\\d{5}' },\n IL: {\n lengths: [9],\n pattern:\n '55(?:4(?:0[0-3]|[16]0)|57[0-289])\\\\d{4}|5(?:(?:[0-2][02-9]|[36]\\\\d|[49][2-9]|8[3-7])\\\\d|5(?:01|2\\\\d|3[0-3]|4[3-5]|5[0-25689]|6[6-8]|7[0-267]|8[7-9]|9[1-9]))\\\\d{5}',\n },\n IT: { lengths: [9, 10], pattern: '3[2-9]\\\\d{7,8}|(?:31|43)\\\\d{8}' },\n JM: {\n lengths: [10],\n pattern:\n '(?:6582(?:[0-4]\\\\d|95)|876(?:2(?:0[1-9]|[13-9]\\\\d|2[013-9])|[348]\\\\d\\\\d|5(?:0[1-9]|[1-9]\\\\d)|6(?:4[89]|6[67])|7(?:0[07]|7\\\\d|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579])))\\\\d{4}',\n },\n JP: { lengths: [10], pattern: '[6-9]0[1-9]\\\\d{7}' },\n JE: { lengths: [10], pattern: '7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97\\\\d))\\\\d{5}' },\n JO: { lengths: [9], pattern: '(?:427|7(?:[78][0-25-9]|9\\\\d))\\\\d{6}' },\n KZ: { lengths: [10], pattern: '7(?:0[0-25-8]|47|6[0-4]|7[15-8]|85)\\\\d{7}' },\n KE: { lengths: [9], pattern: '(?:1(?:0[0-8]|1\\\\d|2[014]|30|4[0-5])|7\\\\d\\\\d)\\\\d{6}' },\n KI: {\n lengths: [8],\n pattern:\n '(?:6200[01]|7(?:310[1-9]|5(?:02[03-9]|12[0-47-9]|22[0-7]|[34](?:0[1-9]|8[02-9])|50[1-9])))\\\\d{3}|(?:63\\\\d\\\\d|7(?:(?:[0146-9]\\\\d|2[0-689])\\\\d|3(?:[02-9]\\\\d|1[1-9])|5(?:[0-2][013-9]|[34][1-79]|5[1-9]|[6-9]\\\\d)))\\\\d{4}',\n },\n XK: { lengths: [8], pattern: '4[3-9]\\\\d{6}' },\n KW: {\n lengths: [8],\n pattern:\n '(?:41\\\\d\\\\d|5(?:(?:[05]\\\\d|1[0-7]|6[56])\\\\d|2(?:22|5[25])|7(?:55|77)|88[58])|6(?:(?:0[034679]|5[015-9]|6\\\\d)\\\\d|1(?:00|11|6[16])|2[26]2|3[36]3|4[46]4|7(?:0[013-9]|[67]\\\\d)|8[68]8|9(?:[069]\\\\d|3[039]))|9(?:(?:[04679]\\\\d|8[057-9])\\\\d|1(?:00|1[01]|99)|2(?:00|2\\\\d)|3(?:00|3[03])|5(?:00|5\\\\d)))\\\\d{4}',\n },\n KG: {\n lengths: [9],\n pattern:\n '312(?:58\\\\d|973)\\\\d{3}|(?:2(?:0[0-35]|2\\\\d)|5[0-24-7]\\\\d|600|7(?:[07]\\\\d|55)|88[08]|9(?:12|9[05-9]))\\\\d{6}',\n },\n LA: { lengths: [9, 10], pattern: '(?:20(?:[23579]\\\\d|8[78])|30[24]\\\\d)\\\\d{6}|30\\\\d{7}' },\n LV: { lengths: [8], pattern: '2333[0-8]\\\\d{3}|2(?:[0-24-9]\\\\d\\\\d|3(?:0[07]|[14-9]\\\\d|2[02-9]|3[0-24-9]))\\\\d{4}' },\n LB: { lengths: [7, 8], pattern: '(?:(?:3|81)\\\\d|7(?:[01]\\\\d|6[013-9]|8[7-9]|9[0-4]))\\\\d{5}' },\n LS: { lengths: [8], pattern: '[56]\\\\d{7}' },\n LR: { lengths: [7, 9], pattern: '(?:(?:(?:22|33)0|555|7(?:6[01]|7\\\\d)|88\\\\d)\\\\d|4(?:240|[67]))\\\\d{5}|[56]\\\\d{6}' },\n LY: { lengths: [9], pattern: '9[1-6]\\\\d{7}' },\n LI: {\n lengths: [7, 9],\n pattern: '(?:6(?:(?:4[5-9]|5\\\\d)\\\\d|6(?:[024-68]\\\\d|1[01]|3[7-9]|70))\\\\d|7(?:[37-9]\\\\d|42|56))\\\\d{4}',\n },\n LT: { lengths: [8], pattern: '6\\\\d{7}' },\n LU: { lengths: [9], pattern: '6(?:[26][18]|5[1568]|7[189]|81|9[128])\\\\d{6}' },\n MO: {\n lengths: [8],\n pattern: '6800[0-79]\\\\d{3}|6(?:[235]\\\\d\\\\d|6(?:0[0-5]|[1-9]\\\\d)|8(?:0[1-9]|[14-8]\\\\d|2[5-9]|[39][0-4]))\\\\d{4}',\n },\n MG: { lengths: [9], pattern: '3[2-9]\\\\d{7}' },\n MW: { lengths: [9], pattern: '111\\\\d{6}|(?:2[12]|31|77|[89][89])\\\\d{7}' },\n MY: {\n lengths: [9, 10],\n pattern:\n '1(?:(?:1888[689]|4400|8(?:47|8[27])[0-4])\\\\d{4}|9\\\\d{7,8})|1(?:0(?:[23568]\\\\d|4[0-6]|7[016-9]|9[0-8])|1(?:[1-5]\\\\d\\\\d|6(?:0[5-9]|[1-9]\\\\d)|7(?:[0-4]\\\\d|5[0-79]|6[02-4]|8[02-5]))|(?:[26]\\\\d|[37][1-9]|4[235-9])\\\\d|5(?:31|9\\\\d\\\\d)|8(?:1[23]|[236]\\\\d|4[06]|5(?:46|[7-9])|7[016-9]|8[01]|9[0-8]))\\\\d{5}',\n },\n MV: { lengths: [7], pattern: '(?:46[46]|[79]\\\\d\\\\d)\\\\d{4}' },\n ML: { lengths: [8], pattern: '2(?:0(?:01|79)|17\\\\d)\\\\d{4}|(?:5[0-3]|[679]\\\\d|8[2-59])\\\\d{6}' },\n MT: { lengths: [8], pattern: '(?:7(?:210|[79]\\\\d\\\\d)|9(?:[29]\\\\d\\\\d|69[67]|8(?:1[1-3]|89|97)))\\\\d{4}' },\n MH: { lengths: [7], pattern: '(?:(?:23|54)5|329|45[35-8])\\\\d{4}' },\n MQ: { lengths: [9], pattern: '(?:69[67]\\\\d\\\\d|7091[0-3])\\\\d{4}' },\n MR: { lengths: [8], pattern: '[2-4][0-46-9]\\\\d{6}' },\n MU: {\n lengths: [8],\n pattern:\n '5(?:4(?:2[1-389]|7[1-9])|87[15-8])\\\\d{4}|(?:5(?:2[5-9]|4[3-689]|[57]\\\\d|8[0-689]|9[0-8])|7(?:0[0-7]|3[013]))\\\\d{5}',\n },\n YT: { lengths: [9], pattern: '(?:639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])|7093[5-7])\\\\d{4}' },\n MX: {\n lengths: [10],\n pattern:\n '(?:2(?:2\\\\d|3[1-35-8]|4[13-9]|7[1-689]|8[1-578]|9[467])|3(?:1[1-79]|[2458][1-9]|3\\\\d|7[1-8]|9[1-5])|4(?:1[1-57-9]|[267][1-9]|3[1-8]|[45]\\\\d|8[1-35-9]|9[2-689])|5(?:[56]\\\\d|88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-36-9]|6[0-57-9]|7[1-7]|8[67]|9[4-8])|7(?:[1346][1-9]|[27]\\\\d|5[13-9]|8[1-69]|9[17])|8(?:1\\\\d|2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[0-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69]\\\\d|7[12]|8[1-8]))\\\\d{7}',\n },\n FM: {\n lengths: [7],\n pattern: '31(?:00[67]|208|309)\\\\d\\\\d|(?:3(?:[2357]0[1-9]|602|804|905)|(?:820|9[2-7]\\\\d)\\\\d)\\\\d{3}',\n },\n MD: { lengths: [8], pattern: '562\\\\d{5}|(?:6\\\\d|7[16-9])\\\\d{6}' },\n MC: { lengths: [8, 9], pattern: '4(?:[46]\\\\d|5[1-9])\\\\d{5}|(?:3|[67]\\\\d)\\\\d{7}' },\n MN: { lengths: [8], pattern: '(?:87[01]|92[0139])\\\\d{5}|(?:5[05]|6[069]|7[28]|8[0135689]|9[013-9])\\\\d{6}' },\n ME: { lengths: [8], pattern: '6(?:[07-9]\\\\d|3[024]|6[0-25])\\\\d{5}' },\n MS: { lengths: [10], pattern: '664(?:3(?:49|9[1-6])|49[2-6])\\\\d{4}' },\n MA: { lengths: [9], pattern: '(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\d{6}' },\n MZ: { lengths: [9], pattern: '8[2-79]\\\\d{7}' },\n MM: {\n lengths: [7, 8, 9, 10],\n pattern:\n '(?:17[01]|9(?:2(?:[0-4]|[56]\\\\d\\\\d)|(?:3(?:[0-36]|4\\\\d)|(?:6\\\\d|8[89]|9[4-8])\\\\d|7(?:3|40|[5-9]\\\\d))\\\\d|4(?:(?:[0245]\\\\d|[1379])\\\\d|88)|5[0-6])\\\\d)\\\\d{4}|9[69]1\\\\d{6}|9(?:[68]\\\\d|9[089])\\\\d{5}',\n },\n NA: { lengths: [9], pattern: '(?:60|8[1245])\\\\d{7}' },\n NR: { lengths: [7], pattern: '(?:222|55[3-9]|666|777|8\\\\d\\\\d|999)\\\\d{4}' },\n NP: { lengths: [10], pattern: '9(?:00|6[0-3]|7[0-24-6]|8[0-24-68])\\\\d{7}' },\n NL: { lengths: [9, 11], pattern: '(?:6[1-58]|970\\\\d)\\\\d{7}' },\n NC: { lengths: [6], pattern: '(?:[579]\\\\d|8[0-79])\\\\d{4}' },\n NZ: { lengths: [8, 9, 10], pattern: '2(?:[0-27-9]\\\\d|6)\\\\d{6,7}|2(?:1\\\\d|75)\\\\d{5}' },\n NI: {\n lengths: [8],\n pattern: '(?:5(?:5[0-7]|[78]\\\\d)|6(?:20|3[035]|4[045]|5[05]|77|8[1-9]|9[059])|(?:7[5-8]|8\\\\d)\\\\d)\\\\d{5}',\n },\n NE: { lengths: [8], pattern: '(?:23|7[0467]|[89]\\\\d)\\\\d{6}' },\n NG: {\n lengths: [10],\n pattern: '(?:702[0-24-9]|819[01])\\\\d{6}|(?:7(?:0[13-9]|[12]\\\\d)|8(?:0[1-9]|1[0-8])|9(?:0[1-9]|1[1-6]))\\\\d{7}',\n },\n NU: { lengths: [4, 7], pattern: '(?:[56]|888[1-9])\\\\d{3}' },\n NF: { lengths: [6], pattern: '(?:14|3[58])\\\\d{4}' },\n KP: { lengths: [10], pattern: '19[1-3]\\\\d{7}' },\n MK: {\n lengths: [8],\n pattern:\n '7(?:3555|(?:474|9[019]7)7)\\\\d{3}|7(?:[0-25-8]\\\\d\\\\d|3(?:[1-478]\\\\d|6[01])|4(?:2\\\\d|60|7[01578])|9(?:[2-4]\\\\d|5[01]|7[015]))\\\\d{4}',\n },\n MP: {\n lengths: [10],\n pattern:\n '670(?:2(?:3[3-7]|56|8[4-8])|32[1-38]|4(?:33|8[348])|5(?:32|55|88)|6(?:64|70|82)|78[3589]|8[3-9]8|989)\\\\d{4}',\n },\n NO: { lengths: [8], pattern: '[49]\\\\d{7}' },\n OM: { lengths: [8], pattern: '(?:1505|90[1-9]\\\\d)\\\\d{4}|(?:7[124-9]|9[1-9])\\\\d{6}' },\n PK: { lengths: [10], pattern: '3(?:[0-247]\\\\d|3[0-79]|55|64)\\\\d{7}' },\n PW: { lengths: [7], pattern: '(?:(?:46|83)[0-5]|(?:6[2-4689]|78)0)\\\\d{4}|(?:45|77|88)\\\\d{5}' },\n PS: { lengths: [9], pattern: '5[69]\\\\d{7}' },\n PA: { lengths: [7, 8], pattern: '(?:1[16]1|21[89]|6\\\\d{3}|8(?:1[01]|7[23]))\\\\d{4}' },\n PG: { lengths: [8], pattern: '(?:7\\\\d|8[1-48])\\\\d{6}' },\n PY: { lengths: [9], pattern: '9(?:51|6[129]|7[1-6]|8[1-7]|9[1-5])\\\\d{6}' },\n PE: { lengths: [9], pattern: '9\\\\d{8}' },\n PH: {\n lengths: [10],\n pattern: '(?:8(?:1[37]|9[5-8])|9(?:0[5-9]|1[0-24-9]|[235-7]\\\\d|4[2-9]|8[135-9]|9[1-9]))\\\\d{7}',\n },\n PL: { lengths: [9], pattern: '21(?:1[013-5]|2\\\\d|3[1-9])\\\\d{5}|(?:45|5[0137]|6[069]|7[2389]|88)\\\\d{7}' },\n PT: {\n lengths: [9],\n pattern:\n '6(?:[06]92(?:30|9\\\\d)|[35]92(?:[049]\\\\d|3[034]))\\\\d{3}|(?:(?:16|6[0356])93|9(?:[1-36]\\\\d\\\\d|480))\\\\d{5}',\n },\n PR: { lengths: [10], pattern: '(?:787|939)[2-9]\\\\d{6}' },\n QA: { lengths: [8], pattern: '[35-7]\\\\d{7}' },\n RE: {\n lengths: [9],\n pattern:\n '(?:69(?:2\\\\d\\\\d|3(?:[06][0-6]|1[0-3]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))|7092[0-3])\\\\d{4}',\n },\n RO: {\n lengths: [9],\n pattern: '(?:630|702)0\\\\d{5}|(?:6(?:00|2\\\\d)|7(?:0[013-9]|1[0-3]|[2-7]\\\\d|8[03-8]|9[0-39]))\\\\d{6}',\n },\n RU: { lengths: [10], pattern: '9\\\\d{9}' },\n RW: { lengths: [9], pattern: '7[237-9]\\\\d{7}' },\n WS: { lengths: [7, 10], pattern: '(?:7[1-35-8]|8(?:[3-7]|9\\\\d{3}))\\\\d{5}' },\n SM: { lengths: [8], pattern: '6[16]\\\\d{6}' },\n ST: { lengths: [7], pattern: '900[5-9]\\\\d{3}|9(?:0[1-9]|[89]\\\\d)\\\\d{4}' },\n SA: { lengths: [9], pattern: '579[0-8]\\\\d{5}|5(?:[013-689]\\\\d|7[0-8])\\\\d{6}' },\n SN: { lengths: [9], pattern: '7(?:[015-8]\\\\d|21|90)\\\\d{6}' },\n RS: { lengths: [8, 9, 10], pattern: '6(?:[0-689]|7\\\\d)\\\\d{6,7}' },\n SC: { lengths: [7], pattern: '2[125-8]\\\\d{5}' },\n SL: { lengths: [8], pattern: '(?:25|3[0-5]|66|7\\\\d|8[08]|9[09])\\\\d{6}' },\n SG: { lengths: [8], pattern: '80[1-9]\\\\d{5}|(?:8[1-9]|9[0-8])\\\\d{6}' },\n SX: { lengths: [10], pattern: '7215(?:1[02]|2\\\\d|5[034679]|8[0-24-8])\\\\d{4}' },\n SK: { lengths: [9], pattern: '909[1-9]\\\\d{5}|9(?:0[1-8]|1[0-24-9]|4[03-57-9]|5\\\\d)\\\\d{6}' },\n SI: { lengths: [8], pattern: '65(?:[178]\\\\d|5[56]|6[01])\\\\d{4}|(?:[37][01]|4[013]|51|6[489])\\\\d{6}' },\n SB: {\n lengths: [5, 7],\n pattern:\n '48\\\\d{3}|(?:(?:6[89]|7[1-9]|8[4-9])\\\\d|9(?:1[2-9]|2[013-9]|3[0-2]|[46]\\\\d|5[0-46-9]|7[0-689]|8[0-79]|9[0-8]))\\\\d{4}',\n },\n SO: {\n lengths: [7, 8, 9],\n pattern:\n '(?:(?:15|(?:3[59]|4[89]|6\\\\d|7[0-35-9]|8[08])\\\\d|9(?:0\\\\d|[2-9]))\\\\d|2(?:4\\\\d|8))\\\\d{5}|(?:[67]\\\\d\\\\d|904)\\\\d{5}',\n },\n ZA: {\n lengths: [5, 6, 7, 8, 9],\n pattern:\n '(?:1(?:3492[0-25]|4495[0235]|549(?:20|5[01]))|4[34]492[01])\\\\d{3}|8[1-4]\\\\d{3,7}|(?:2[27]|47|54)4950\\\\d{3}|(?:1(?:049[2-4]|9[12]\\\\d\\\\d)|(?:50[0-2]|[67]\\\\d\\\\d)\\\\d\\\\d|8(?:5\\\\d{3}|7(?:08[67]|158|28[5-9]|310)))\\\\d{4}|(?:1[6-8]|28|3[2-69]|4[025689]|5[36-8])4920\\\\d{3}|(?:12|[2-5]1)492\\\\d{4}',\n },\n KR: {\n lengths: [9, 10],\n pattern: '1(?:05(?:[0-8]\\\\d|9[0-6])|22[13]\\\\d)\\\\d{4,5}|1(?:0[0-46-9]|[16-9]\\\\d|2[013-9])\\\\d{6,7}',\n },\n SS: { lengths: [9], pattern: '(?:12|9[1257-9])\\\\d{7}' },\n ES: { lengths: [9], pattern: '96906(?:09|10)\\\\d\\\\d|(?:590(?:10[0-2]|600)|97390\\\\d)\\\\d{3}|(?:6\\\\d|7[1-48])\\\\d{7}' },\n LK: { lengths: [9], pattern: '7(?:[0-25-8]\\\\d|4[0-4])\\\\d{6}' },\n BL: { lengths: [9], pattern: '(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))|7090[0-4])\\\\d{4}' },\n SH: { lengths: [5], pattern: '[56]\\\\d{4}' },\n KN: { lengths: [10], pattern: '869(?:48[89]|55[6-8]|66\\\\d|76[02-7])\\\\d{4}' },\n LC: {\n lengths: [10],\n pattern: '758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2\\\\d|3[0-3])|812)\\\\d{4}',\n },\n MF: { lengths: [9], pattern: '(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))|7090[0-4])\\\\d{4}' },\n PM: { lengths: [6, 9], pattern: '708(?:4[0-5]|5[0-6])\\\\d{4}|(?:[236-9]\\\\d|4[02-489]|5[02-9])\\\\d{4}' },\n VC: { lengths: [10], pattern: '784(?:4(?:3[0-5]|5[45]|89|9[0-8])|5(?:2[6-9]|3[0-4])|720)\\\\d{4}' },\n SD: { lengths: [9], pattern: '(?:1[0-2]|9[0-3569])\\\\d{7}' },\n SR: { lengths: [7], pattern: '(?:6[08]|7[124-7]|8[1-9])\\\\d{5}' },\n SJ: { lengths: [8], pattern: '[49]\\\\d{7}' },\n SE: { lengths: [9], pattern: '7[02369]\\\\d{7}' },\n CH: { lengths: [9], pattern: '(?:6[89]|7[235-9])\\\\d{7}' },\n SY: { lengths: [9], pattern: '(?:50|9[1-9])\\\\d{7}' },\n TW: { lengths: [9], pattern: '(?:40001[0-2]|9[0-8]\\\\d{4})\\\\d{3}' },\n TJ: {\n lengths: [9],\n pattern:\n '(?:33[03-9]|4(?:1[18]|4[02-479])|81[1-9])\\\\d{6}|(?:[09]\\\\d|1[0-27-9]|2[0-27]|3[08]|40|5[05]|66|7[0157-9]|8[07-9])\\\\d{7}',\n },\n TZ: { lengths: [9], pattern: '(?:6[1-35-9]|7[013-9])\\\\d{7}' },\n TH: { lengths: [9], pattern: '(?:(?:14|[89]\\\\d)\\\\d\\\\d|6(?:[1-6]\\\\d\\\\d|7(?:1[0-8]|2[4-7]|3[1-6])))\\\\d{5}' },\n TL: { lengths: [8], pattern: '7[2-8]\\\\d{6}' },\n TG: { lengths: [8], pattern: '(?:7[0-289]|9[0-36-9])\\\\d{6}' },\n TK: { lengths: [4, 5, 6, 7], pattern: '7[2-4]\\\\d{2,5}' },\n TO: { lengths: [7], pattern: '(?:5(?:4[0-5]|5[4-6])|6(?:[09]\\\\d|3[02]|8[15-9])|(?:7\\\\d|8[46-9])\\\\d|999)\\\\d{4}' },\n TT: {\n lengths: [10],\n pattern: '868(?:(?:2[5-9]|3\\\\d)\\\\d|4(?:3[0-6]|[6-9]\\\\d)|6(?:20|78|8\\\\d)|7(?:0[1-9]|1[02-9]|[2-9]\\\\d))\\\\d{4}',\n },\n TA: { lengths: [4], pattern: '8\\\\d{3}' },\n TN: { lengths: [8], pattern: '3(?:001|[12]40)\\\\d{4}|(?:(?:[259]\\\\d|4[0-8])\\\\d|3(?:1[1-35]|6[0-4]|91))\\\\d{5}' },\n TR: { lengths: [10], pattern: '561(?:011|61\\\\d)\\\\d{4}|5(?:[03-5]\\\\d|1[06]|24|6[24]|7[245]|9[46])\\\\d{7}' },\n TM: { lengths: [8], pattern: '(?:6\\\\d|71)\\\\d{6}' },\n TC: { lengths: [10], pattern: '649(?:2(?:3[129]|4[1-79])|3\\\\d\\\\d|4[34][1-3])\\\\d{4}' },\n TV: { lengths: [6, 7], pattern: '(?:7[01]\\\\d|90)\\\\d{4}' },\n VI: {\n lengths: [10],\n pattern:\n '340(?:2(?:0\\\\d|10|2[06-8]|4[49]|77)|3(?:32|44)|4(?:2[23]|44|7[34]|89)|5(?:1[34]|55)|6(?:2[56]|4[23]|77|9[023])|7(?:1[2-57-9]|2[57]|7\\\\d)|884|998)\\\\d{4}',\n },\n UG: { lengths: [9], pattern: '7280\\\\d{5}|7(?:[014-8]\\\\d|2[01467]|3[016]|9[0-589])\\\\d{6}' },\n UA: { lengths: [9], pattern: '790\\\\d{6}|(?:39|50|6[36-8]|7[1-357]|9[1-9])\\\\d{7}' },\n AE: { lengths: [9], pattern: '5[02-68]\\\\d{7}' },\n GB: {\n lengths: [10],\n pattern:\n '7(?:457[0-57-9]|700[01]|911[028])\\\\d{5}|7(?:[1-3]\\\\d\\\\d|4(?:[0-46-9]\\\\d|5[0-689])|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\\\d|8[02-9]|9[0-689])|8(?:[014-9]\\\\d|[23][0-8])|9(?:[024-9]\\\\d|1[02-9]|3[0-689]))\\\\d{6}',\n },\n US: {\n lengths: [10],\n pattern:\n '(?:274[27]|(?:472|983)[2-47-9])\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-3]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-2478]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\\\d{6}',\n },\n UY: { lengths: [8], pattern: '9[1-9]\\\\d{6}' },\n UZ: {\n lengths: [9],\n pattern:\n '(?:(?:[25]0|33|8[078]|9[0-57-9])\\\\d{3}|6(?:1(?:2(?:2[01]|98)|35[0-4]|50\\\\d|61[23]|7(?:[01][017]|4\\\\d|55|9[5-9]))|2(?:(?:11|7\\\\d)\\\\d|2(?:[12]1|9[01379])|5(?:[126]\\\\d|3[0-4]))|5(?:19[01]|2(?:27|9[26])|(?:30|59|7\\\\d)\\\\d)|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|(?:3[79]|9[0-3])\\\\d|4(?:56|83)|7(?:[07]\\\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79]))|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\\\d|[39][07])|9(?:0\\\\d|7[079])))|7(?:[07]\\\\d{3}|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\\\d|7(?:0\\\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|(?:33|9[4-6])\\\\d|5(?:0[0-4]|5[579]|9\\\\d)|7(?:[0-3579]\\\\d|4[0467]|6[67]|8[078]))|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\\\d|9[5-9])|7(?:0\\\\d|1[024589]|2[0-27]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\\\d))|5(?:112|2(?:0\\\\d|2[29]|[49]4)|3[1568]\\\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\\\d|8[78]|9[079]))|9(?:22[128]|3(?:2[0-4]|7\\\\d)|57[02569]|7(?:2[05-9]|3[37]|4\\\\d|60|7[2579]|87|9[07]))))\\\\d{4}',\n },\n VU: { lengths: [7], pattern: '(?:[58]\\\\d|7[0-7])\\\\d{5}' },\n VA: { lengths: [9, 10], pattern: '3[1-9]\\\\d{8}|3[2-9]\\\\d{7}' },\n VE: { lengths: [10], pattern: '4(?:1[24-8]|2[246])\\\\d{7}' },\n VN: {\n lengths: [9],\n pattern:\n '121[0-3]\\\\d{5}|(?:160|(?:3\\\\d|7[06-9])\\\\d|5(?:[1689]\\\\d|2[238]|59)|8(?:[1-8]\\\\d|9[6-9])|9(?:[0-8]\\\\d|9[013-9]))\\\\d{6}',\n },\n WF: { lengths: [6], pattern: '(?:72|8[23])\\\\d{4}' },\n EH: { lengths: [9], pattern: '(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\d{6}' },\n YE: { lengths: [9], pattern: '7[01378]\\\\d{7}' },\n ZM: { lengths: [9], pattern: '(?:[59][5-8]|7[5-9])\\\\d{7}' },\n ZW: { lengths: [9], pattern: '7(?:[1278]\\\\d|3[1-9])\\\\d{6}' },\n};\n"],"names":[],"mappings":"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"}
@@ -1,69 +1,24 @@
1
- const TRUNK_PREFIXES = {
1
+ import {PHONE_COUNTRIES}from'./phoneCountries.js';const TRUNK_PREFIXES = {
2
2
  // The overwhelmingly common case: a single leading 0.
3
3
  DEFAULT: "0",
4
4
  // Italy is the notable exception - the leading 0 is part of the number.
5
5
  IT: ""
6
6
  };
7
- const CALLING_CODES = {
8
- US: "1",
9
- CA: "1",
10
- GB: "44",
11
- IE: "353",
12
- FR: "33",
13
- DE: "49",
14
- ES: "34",
15
- IT: "39",
16
- NL: "31",
17
- BE: "32",
18
- CH: "41",
19
- AT: "43",
20
- SE: "46",
21
- NO: "47",
22
- DK: "45",
23
- FI: "358",
24
- PL: "48",
25
- PT: "351",
26
- GR: "30",
27
- CZ: "420",
28
- RO: "40",
29
- HU: "36",
30
- UA: "380",
31
- RU: "7",
32
- TR: "90",
33
- IL: "972",
34
- AE: "971",
35
- SA: "966",
36
- QA: "974",
37
- KW: "965",
38
- IN: "91",
39
- PK: "92",
40
- BD: "880",
41
- LK: "94",
42
- NP: "977",
43
- CN: "86",
44
- JP: "81",
45
- KR: "82",
46
- TW: "886",
47
- HK: "852",
48
- SG: "65",
49
- MY: "60",
50
- TH: "66",
51
- VN: "84",
52
- PH: "63",
53
- ID: "62",
54
- AU: "61",
55
- NZ: "64",
56
- ZA: "27",
57
- NG: "234",
58
- KE: "254",
59
- EG: "20",
60
- GH: "233",
61
- BR: "55",
62
- MX: "52",
63
- AR: "54",
64
- CL: "56",
65
- CO: "57",
66
- PE: "51"
7
+ const CALLING_CODES = Object.fromEntries(PHONE_COUNTRIES.map((c) => [c.code, c.callingCode.slice(1)]));
8
+ const MAIN_REGION_FOR_CODE = {
9
+ "1": "US",
10
+ "7": "RU",
11
+ "39": "IT",
12
+ "44": "GB",
13
+ "47": "NO",
14
+ "61": "AU",
15
+ "64": "NZ",
16
+ "212": "MA",
17
+ "262": "RE",
18
+ "290": "SH",
19
+ "358": "FI",
20
+ "590": "GP",
21
+ "599": "CW"
67
22
  };
68
23
  const MIN_E164_DIGITS = 7;
69
24
  const MAX_E164_DIGITS = 15;
@@ -97,12 +52,13 @@ function regionFromE164(e164) {
97
52
  const digits = e164.slice(1);
98
53
  let best = null;
99
54
  for (const [region, cc] of Object.entries(CALLING_CODES)) {
100
- if (digits.startsWith(cc) && (!best || cc.length > best.len)) best = {
55
+ if (digits.startsWith(cc) && (!best || cc.length > best.cc.length)) best = {
101
56
  region,
102
- len: cc.length
57
+ cc
103
58
  };
104
59
  }
105
- return (_a = best == null ? void 0 : best.region) != null ? _a : null;
60
+ if (!best) return null;
61
+ return (_a = MAIN_REGION_FOR_CODE[best.cc]) != null ? _a : best.region;
106
62
  }
107
63
  function contactE164s(phoneNumbers, defaultRegion) {
108
64
  const regions = Array.isArray(defaultRegion) ? defaultRegion : [defaultRegion];
@@ -121,14 +77,16 @@ function normalizeContacts(contacts, defaultRegion, viewerE164) {
121
77
  const out = [];
122
78
  for (const c of contacts) {
123
79
  const e164 = contactE164s((_a = c.phoneNumbers) != null ? _a : [], defaultRegion);
124
- if (!e164.length || e164.some((n) => mine.has(n))) continue;
125
- out.push({
126
- id: c.id,
127
- displayName: c.displayName,
128
- imageUri: (_b = c.imageUri) != null ? _b : null,
129
- e164,
130
- rawNumbers: ((_c = c.phoneNumbers) != null ? _c : []).map((n) => n.trim()).filter(Boolean)
131
- });
80
+ const isViewer = !e164.length || e164.some((n) => mine.has(n));
81
+ if (!isViewer) {
82
+ out.push({
83
+ id: c.id,
84
+ displayName: c.displayName,
85
+ imageUri: (_b = c.imageUri) != null ? _b : null,
86
+ e164,
87
+ rawNumbers: ((_c = c.phoneNumbers) != null ? _c : []).map((n) => n.trim()).filter(Boolean)
88
+ });
89
+ }
132
90
  }
133
91
  return out;
134
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"phoneNumbers.js","sources":["../../../src/features/messaging/phoneNumbers.ts"],"sourcesContent":["/**\n * Turning what the address book gives you into something matchable.\n *\n * This lives in the REMOTE, not the host, on purpose: it is pure logic with no\n * native dependency, it is where contact-matching actually goes wrong, and\n * keeping it here means a normalisation bug is a surface deploy rather than an\n * App Store release. The `contacts` seam hands over RAW strings plus a region\n * hint precisely so this can own the problem.\n *\n * Deliberately NOT libphonenumber. That library is ~500KB and every byte ships\n * in the remote bundle on every cold launch. What follows handles the cases\n * that actually occur in an address book; anything it cannot confidently place\n * is DROPPED rather than guessed, because a wrong match shows someone a\n * stranger's name attached to their friend's number, which is far worse than\n * simply not finding them.\n */\n\n/** National trunk prefixes stripped before applying a country code. */\nconst TRUNK_PREFIXES: Record<string, string> = {\n // The overwhelmingly common case: a single leading 0.\n DEFAULT: '0',\n // Italy is the notable exception - the leading 0 is part of the number.\n IT: '',\n};\n\n/** Country calling codes for the regions a device is likely to report. */\nconst CALLING_CODES: Record<string, string> = {\n US: '1',\n CA: '1',\n GB: '44',\n IE: '353',\n FR: '33',\n DE: '49',\n ES: '34',\n IT: '39',\n NL: '31',\n BE: '32',\n CH: '41',\n AT: '43',\n SE: '46',\n NO: '47',\n DK: '45',\n FI: '358',\n PL: '48',\n PT: '351',\n GR: '30',\n CZ: '420',\n RO: '40',\n HU: '36',\n UA: '380',\n RU: '7',\n TR: '90',\n IL: '972',\n AE: '971',\n SA: '966',\n QA: '974',\n KW: '965',\n IN: '91',\n PK: '92',\n BD: '880',\n LK: '94',\n NP: '977',\n CN: '86',\n JP: '81',\n KR: '82',\n TW: '886',\n HK: '852',\n SG: '65',\n MY: '60',\n TH: '66',\n VN: '84',\n PH: '63',\n ID: '62',\n AU: '61',\n NZ: '64',\n ZA: '27',\n NG: '234',\n KE: '254',\n EG: '20',\n GH: '233',\n BR: '55',\n MX: '52',\n AR: '54',\n CL: '56',\n CO: '57',\n PE: '51',\n};\n\n/** Longest calling code is 4 digits; shortest E.164 subscriber part is ~4. */\nconst MIN_E164_DIGITS = 7;\nconst MAX_E164_DIGITS = 15;\n\n/**\n * Normalise one raw address-book string to E.164 (`+<digits>`), or null.\n *\n * Returns null rather than a best guess whenever the result would be\n * speculative - see the file header for why a miss beats a wrong match.\n */\nexport function toE164(raw: string, defaultRegion?: string | null): string | null {\n if (typeof raw !== 'string') return null;\n\n // Strip everything a human might type: spaces, dashes, dots, parens,\n // and the invisible bidi marks iOS inserts around RTL-locale numbers.\n const cleaned = raw.replace(/[\\s\\-().‎‏؜]/g, '');\n if (!cleaned) return null;\n\n // Extensions are not diallable identity - \"555123456x89\" is one person.\n const withoutExt = cleaned.split(/[,;xX#]/)[0];\n if (!withoutExt) return null;\n\n let digits: string;\n if (withoutExt.startsWith('+')) {\n digits = withoutExt.slice(1).replace(/\\D/g, '');\n } else if (withoutExt.startsWith('00')) {\n // The international prefix used across most of Europe and Asia.\n digits = withoutExt.slice(2).replace(/\\D/g, '');\n } else {\n const region = (defaultRegion ?? '').toUpperCase();\n const cc = CALLING_CODES[region];\n // No region and no international prefix: the number is meaningless\n // without knowing where it was dialled from. Drop it.\n if (!cc) return null;\n\n let national = withoutExt.replace(/\\D/g, '');\n const trunk = region in TRUNK_PREFIXES ? TRUNK_PREFIXES[region] : TRUNK_PREFIXES.DEFAULT;\n if (trunk && national.startsWith(trunk)) national = national.slice(trunk.length);\n\n // A number that already begins with its own country code and is\n // plausibly full-length is international-without-the-plus, not a\n // national number that happens to start with those digits.\n digits =\n national.startsWith(cc) && national.length >= MIN_E164_DIGITS + cc.length - 1 ? national : cc + national;\n }\n\n if (digits.length < MIN_E164_DIGITS || digits.length > MAX_E164_DIGITS) return null;\n // A leading zero after the country code means the trunk prefix survived.\n if (digits.startsWith('0')) return null;\n\n return `+${digits}`;\n}\n\n/**\n * Region implied by an E.164 number's calling code (longest match wins), or null.\n * `+1` resolves to US, which parses identically to CA.\n */\nexport function regionFromE164(e164: string | null | undefined): string | null {\n if (!e164 || !e164.startsWith('+')) return null;\n const digits = e164.slice(1);\n let best: { region: string; len: number } | null = null;\n for (const [region, cc] of Object.entries(CALLING_CODES)) {\n if (digits.startsWith(cc) && (!best || cc.length > best.len)) best = { region, len: cc.length };\n }\n return best?.region ?? null;\n}\n\n/**\n * Every distinct E.164 number a contact has, in address-book order.\n *\n * De-duplicated because the same person routinely appears with the same number\n * written two ways (\"+1 555…\" and \"(555) …\"), and matching the same number\n * twice would show them twice in the results.\n */\nexport function contactE164s(\n phoneNumbers: readonly string[],\n defaultRegion?: string | null | readonly (string | null | undefined)[],\n): string[] {\n // A number saved without a country code is ambiguous, so each candidate region\n // contributes an interpretation. The server only matches verified member numbers,\n // so extra candidates cannot produce a match that is not real.\n const regions = Array.isArray(defaultRegion) ? defaultRegion : [defaultRegion as string | null | undefined];\n const seen = new Set<string>();\n for (const raw of phoneNumbers) {\n for (const region of regions) {\n const e164 = toE164(raw, region);\n if (e164) seen.add(e164);\n }\n }\n return Array.from(seen);\n}\n\nexport interface NormalizedContact {\n /** The device's stable id, echoed back so a match can be re-attached. */\n id: string;\n displayName: string;\n imageUri?: string | null;\n /** Distinct E.164 candidates; never empty (contacts without any are dropped). */\n e164: string[];\n /** Numbers exactly as saved in the address book, for display and SMS. */\n rawNumbers?: string[];\n}\n\n/**\n * Normalise a whole address book, dropping anything unmatchable.\n *\n * Also drops the viewer's OWN number, so nobody is offered a chat with\n * themselves - which happens on essentially every real device, because people\n * save their own contact card.\n */\nexport function normalizeContacts(\n contacts: ReadonlyArray<{ id: string; displayName: string; phoneNumbers: string[]; imageUri?: string | null }>,\n defaultRegion?: string | null | readonly (string | null | undefined)[],\n viewerE164?: string | null,\n): NormalizedContact[] {\n const mine = new Set(viewerE164 ? contactE164s([viewerE164], defaultRegion) : []);\n const out: NormalizedContact[] = [];\n for (const c of contacts) {\n const e164 = contactE164s(c.phoneNumbers ?? [], defaultRegion);\n // Any interpretation equal to the viewer's own number means this is their own card.\n if (!e164.length || e164.some((n) => mine.has(n))) continue;\n out.push({\n id: c.id,\n displayName: c.displayName,\n imageUri: c.imageUri ?? null,\n e164,\n rawNumbers: (c.phoneNumbers ?? []).map((n) => n.trim()).filter(Boolean),\n });\n }\n return out;\n}\n\n/**\n * The full set of numbers to ask the server about, capped.\n *\n * Address books of several thousand entries are ordinary, and the cap keeps one\n * request from becoming megabytes. Callers page through the rest.\n */\nexport function collectLookupNumbers(contacts: readonly NormalizedContact[], limit = 1000): string[] {\n const seen = new Set<string>();\n for (const c of contacts) {\n for (const n of c.e164) {\n seen.add(n);\n if (seen.size >= limit) return Array.from(seen);\n }\n }\n return Array.from(seen);\n}\n\n/**\n * Format a phone number string (user input) to E.164 format.\n * Used by the registration screen to normalize phone input before verification.\n */\nexport function formatPhoneNumber(input: string, defaultRegion?: string): string | null {\n return toE164(input, defaultRegion);\n}\n\n/**\n * Validate if a phone number string is a valid E.164 number.\n * Returns true if the number can be normalized to E.164 format.\n */\nexport function isValidPhoneNumber(phoneNumber: string | null): boolean {\n if (!phoneNumber) return false;\n if (!phoneNumber.startsWith('+')) return false;\n const digits = phoneNumber.slice(1).replace(/\\D/g, '');\n return digits.length >= MIN_E164_DIGITS && digits.length <= MAX_E164_DIGITS;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"phoneNumbers.js","sources":["../../../src/features/messaging/phoneNumbers.ts"],"sourcesContent":["/**\n * Turning what the address book gives you into something matchable.\n *\n * This lives in the REMOTE, not the host, on purpose: it is pure logic with no\n * native dependency, it is where contact-matching actually goes wrong, and\n * keeping it here means a normalisation bug is a surface deploy rather than an\n * App Store release. The `contacts` seam hands over RAW strings plus a region\n * hint precisely so this can own the problem.\n *\n * Deliberately NOT libphonenumber. That library is ~500KB and every byte ships\n * in the remote bundle on every cold launch. What follows handles the cases\n * that actually occur in an address book; anything it cannot confidently place\n * is DROPPED rather than guessed, because a wrong match shows someone a\n * stranger's name attached to their friend's number, which is far worse than\n * simply not finding them.\n */\n\nimport { PHONE_COUNTRIES } from './phoneCountries';\n\n/** National trunk prefixes stripped before applying a country code. */\nconst TRUNK_PREFIXES: Record<string, string> = {\n // The overwhelmingly common case: a single leading 0.\n DEFAULT: '0',\n // Italy is the notable exception - the leading 0 is part of the number.\n IT: '',\n};\n\n/**\n * Country calling codes for every region, from the generated table (see\n * scripts/generate-phone-countries.mjs) - the registration picker offers all of them, so a\n * number typed under any of them must normalise.\n */\nconst CALLING_CODES: Record<string, string> = Object.fromEntries(\n PHONE_COUNTRIES.map((c) => [c.code, c.callingCode.slice(1)]),\n);\n\n/**\n * Where a calling code is shared, the region a bare number is taken to be in. Without this\n * `+1` would resolve to whichever of the two dozen NANP regions sorts first.\n */\nconst MAIN_REGION_FOR_CODE: Record<string, string> = {\n '1': 'US',\n '7': 'RU',\n '39': 'IT',\n '44': 'GB',\n '47': 'NO',\n '61': 'AU',\n '64': 'NZ',\n '212': 'MA',\n '262': 'RE',\n '290': 'SH',\n '358': 'FI',\n '590': 'GP',\n '599': 'CW',\n};\n\n/** Longest calling code is 4 digits; shortest E.164 subscriber part is ~4. */\nconst MIN_E164_DIGITS = 7;\nconst MAX_E164_DIGITS = 15;\n\n/**\n * Normalise one raw address-book string to E.164 (`+<digits>`), or null.\n *\n * Returns null rather than a best guess whenever the result would be\n * speculative - see the file header for why a miss beats a wrong match.\n */\nexport function toE164(raw: string, defaultRegion?: string | null): string | null {\n if (typeof raw !== 'string') return null;\n\n // Strip everything a human might type: spaces, dashes, dots, parens,\n // and the invisible bidi marks iOS inserts around RTL-locale numbers.\n const cleaned = raw.replace(/[\\s\\-().‎‏؜]/g, '');\n if (!cleaned) return null;\n\n // Extensions are not diallable identity - \"555123456x89\" is one person.\n const withoutExt = cleaned.split(/[,;xX#]/)[0];\n if (!withoutExt) return null;\n\n let digits: string;\n if (withoutExt.startsWith('+')) {\n digits = withoutExt.slice(1).replace(/\\D/g, '');\n } else if (withoutExt.startsWith('00')) {\n // The international prefix used across most of Europe and Asia.\n digits = withoutExt.slice(2).replace(/\\D/g, '');\n } else {\n const region = (defaultRegion ?? '').toUpperCase();\n const cc = CALLING_CODES[region];\n // No region and no international prefix: the number is meaningless\n // without knowing where it was dialled from. Drop it.\n if (!cc) return null;\n\n let national = withoutExt.replace(/\\D/g, '');\n const trunk = region in TRUNK_PREFIXES ? TRUNK_PREFIXES[region] : TRUNK_PREFIXES.DEFAULT;\n if (trunk && national.startsWith(trunk)) national = national.slice(trunk.length);\n\n // A number that already begins with its own country code and is\n // plausibly full-length is international-without-the-plus, not a\n // national number that happens to start with those digits.\n digits =\n national.startsWith(cc) && national.length >= MIN_E164_DIGITS + cc.length - 1 ? national : cc + national;\n }\n\n if (digits.length < MIN_E164_DIGITS || digits.length > MAX_E164_DIGITS) return null;\n // A leading zero after the country code means the trunk prefix survived.\n if (digits.startsWith('0')) return null;\n\n return `+${digits}`;\n}\n\n/**\n * Region implied by an E.164 number's calling code (longest match wins), or null.\n * `+1` resolves to US, which parses identically to CA.\n */\nexport function regionFromE164(e164: string | null | undefined): string | null {\n if (!e164 || !e164.startsWith('+')) return null;\n const digits = e164.slice(1);\n let best: { region: string; cc: string } | null = null;\n for (const [region, cc] of Object.entries(CALLING_CODES)) {\n if (digits.startsWith(cc) && (!best || cc.length > best.cc.length)) best = { region, cc };\n }\n if (!best) return null;\n return MAIN_REGION_FOR_CODE[best.cc] ?? best.region;\n}\n\n/**\n * Every distinct E.164 number a contact has, in address-book order.\n *\n * De-duplicated because the same person routinely appears with the same number\n * written two ways (\"+1 555…\" and \"(555) …\"), and matching the same number\n * twice would show them twice in the results.\n */\nexport function contactE164s(\n phoneNumbers: readonly string[],\n defaultRegion?: string | null | readonly (string | null | undefined)[],\n): string[] {\n // A number saved without a country code is ambiguous, so each candidate region\n // contributes an interpretation. The server only matches verified member numbers,\n // so extra candidates cannot produce a match that is not real.\n const regions = Array.isArray(defaultRegion) ? defaultRegion : [defaultRegion as string | null | undefined];\n const seen = new Set<string>();\n for (const raw of phoneNumbers) {\n for (const region of regions) {\n const e164 = toE164(raw, region);\n if (e164) seen.add(e164);\n }\n }\n return Array.from(seen);\n}\n\nexport interface NormalizedContact {\n /** The device's stable id, echoed back so a match can be re-attached. */\n id: string;\n displayName: string;\n imageUri?: string | null;\n /** Distinct E.164 candidates; never empty (contacts without any are dropped). */\n e164: string[];\n /** Numbers exactly as saved in the address book, for display and SMS. */\n rawNumbers?: string[];\n}\n\n/**\n * Normalise a whole address book, dropping anything unmatchable.\n *\n * Also drops the viewer's OWN number, so nobody is offered a chat with\n * themselves - which happens on essentially every real device, because people\n * save their own contact card.\n */\nexport function normalizeContacts(\n contacts: ReadonlyArray<{ id: string; displayName: string; phoneNumbers: string[]; imageUri?: string | null }>,\n defaultRegion?: string | null | readonly (string | null | undefined)[],\n viewerE164?: string | null,\n): NormalizedContact[] {\n const mine = new Set(viewerE164 ? contactE164s([viewerE164], defaultRegion) : []);\n const out: NormalizedContact[] = [];\n for (const c of contacts) {\n const e164 = contactE164s(c.phoneNumbers ?? [], defaultRegion);\n // Any interpretation equal to the viewer's own number means this is their own card.\n const isViewer = !e164.length || e164.some((n) => mine.has(n));\n if (!isViewer) {\n out.push({\n id: c.id,\n displayName: c.displayName,\n imageUri: c.imageUri ?? null,\n e164,\n rawNumbers: (c.phoneNumbers ?? []).map((n) => n.trim()).filter(Boolean),\n });\n }\n }\n return out;\n}\n\n/**\n * The full set of numbers to ask the server about, capped.\n *\n * Address books of several thousand entries are ordinary, and the cap keeps one\n * request from becoming megabytes. Callers page through the rest.\n */\nexport function collectLookupNumbers(contacts: readonly NormalizedContact[], limit = 1000): string[] {\n const seen = new Set<string>();\n for (const c of contacts) {\n for (const n of c.e164) {\n seen.add(n);\n if (seen.size >= limit) return Array.from(seen);\n }\n }\n return Array.from(seen);\n}\n\n/**\n * Format a phone number string (user input) to E.164 format.\n * Used by the registration screen to normalize phone input before verification.\n */\nexport function formatPhoneNumber(input: string, defaultRegion?: string): string | null {\n return toE164(input, defaultRegion);\n}\n\n/**\n * Validate if a phone number string is a valid E.164 number.\n * Returns true if the number can be normalized to E.164 format.\n */\nexport function isValidPhoneNumber(phoneNumber: string | null): boolean {\n if (!phoneNumber) return false;\n if (!phoneNumber.startsWith('+')) return false;\n const digits = phoneNumber.slice(1).replace(/\\D/g, '');\n return digits.length >= MIN_E164_DIGITS && digits.length <= MAX_E164_DIGITS;\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import {useState,useCallback}from'react';import {useSendPhoneOtpCodeMutation,useVerifyPhoneOtpCodeMutation}from'common/graphql';import {formatPhoneNumber,isValidPhoneNumber}from'./phoneNumbers.js';import {useObtainSystemToken}from'../../hooks/useObtainSystemToken.js';import {config}from'../../config/env-config.js';const CHAT_REGISTRATION_TEST_OTP = "123456";
1
+ import {useState,useCallback}from'react';import {useSendPhoneOtpCodeMutation,useVerifyPhoneOtpCodeMutation}from'common/graphql';import {formatPhoneNumber,isValidPhoneNumber}from'./phoneNumbers.js';import {checkMobileNumber}from'./mobileNumberCheck.js';import {useObtainSystemToken}from'../../hooks/useObtainSystemToken.js';import {config}from'../../config/env-config.js';const CHAT_REGISTRATION_TEST_OTP = "123456";
2
2
  function isChatTestOtpCode(code) {
3
3
  return code.replace(/\D/g, "") === CHAT_REGISTRATION_TEST_OTP;
4
4
  }
@@ -23,7 +23,6 @@ function usePhoneVerification(defaultCountryCode) {
23
23
  } = useObtainSystemToken();
24
24
  const resetToInput = useCallback(() => {
25
25
  setStage("input");
26
- setInputPhone("");
27
26
  setOtp("");
28
27
  setError(null);
29
28
  setVerifiedPhone(null);
@@ -45,11 +44,12 @@ function usePhoneVerification(defaultCountryCode) {
45
44
  var _a;
46
45
  clearError();
47
46
  setTestOtpMode(false);
48
- const normalized = formatPhoneNumber(inputPhone, countryCode);
49
- if (!normalized || !isValidPhoneNumber(normalized)) {
50
- setError("Please enter a valid mobile number");
51
- return;
47
+ const check = checkMobileNumber(inputPhone, countryCode);
48
+ if (!check.ok) {
49
+ setError(check.message);
50
+ return false;
52
51
  }
52
+ const normalized = check.e164;
53
53
  setLoading(true);
54
54
  try {
55
55
  const systemToken = await obtainSystemToken();
@@ -70,8 +70,10 @@ function usePhoneVerification(defaultCountryCode) {
70
70
  setOtp("");
71
71
  setStage("otp");
72
72
  setError(null);
73
+ return true;
73
74
  } catch (err) {
74
75
  setError(err instanceof Error ? err.message : "Failed to send OTP");
76
+ return false;
75
77
  } finally {
76
78
  setLoading(false);
77
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"usePhoneVerification.js","sources":["../../../src/features/messaging/usePhoneVerification.ts"],"sourcesContent":["/**\n * Phone number verification flow for Yantra Chat registration.\n *\n * Manages the OTP verification process for phone-number-based membership.\n * Uses adminIde's existing `sendPhoneOTP` / `verifyPhoneOtp` mutations and Auth0's\n * `passwordlessLogin` endpoint.\n *\n * Phone numbers are normalized to E.164 format and serve as the member ID.\n */\nimport { useCallback, useState } from 'react';\nimport { useSendPhoneOtpCodeMutation, useVerifyPhoneOtpCodeMutation } from 'common/graphql';\nimport { formatPhoneNumber, isValidPhoneNumber } from './phoneNumbers';\nimport { useObtainSystemToken } from '../../hooks/useObtainSystemToken';\nimport { config } from '../../config/env-config';\n\n/** Fixed code for \"Continue with test OTP\" (CHAT_ALLOW_TEST_OTP builds only; no SMS verify). */\nexport const CHAT_REGISTRATION_TEST_OTP = '123456';\n\nfunction isChatTestOtpCode(code: string): boolean {\n return code.replace(/\\D/g, '') === CHAT_REGISTRATION_TEST_OTP;\n}\n\n/**\n * The test OTP exists only when CHAT_ALLOW_TEST_OTP=true (dev.env locally, the build profile's env\n * in eas.json). Everywhere else the option is hidden and 123456 is checked like any code.\n */\nexport function isChatTestOtpEnabled(): boolean {\n return config.CHAT_ALLOW_TEST_OTP === true;\n}\n\nexport interface PhoneVerificationState {\n /** Current stage of the verification flow. */\n stage: 'input' | 'otp' | 'verifying' | 'verified' | 'error';\n /** The phone number in E.164 format, if successfully verified. */\n verifiedPhone: string | null;\n /** The user-entered phone (raw input, before normalization). */\n inputPhone: string;\n /** Country code (ISO-3166 alpha-2) for phone normalization. */\n countryCode: string;\n /** OTP entered by the user. */\n otp: string;\n /** Error message if verification failed. */\n error: string | null;\n /** Busy: waiting for server response. */\n loading: boolean;\n /** User chose \"Continue with test OTP\" — skip server verify when code is 123456. */\n testOtpMode: boolean;\n}\n\nexport interface PhoneVerificationActions {\n setCountryCode: (code: string) => void;\n setInputPhone: (phone: string) => void;\n setOtp: (code: string) => void;\n sendOtp: () => Promise<void>;\n verifyOtp: () => Promise<void>;\n continueWithTestOtp: () => void;\n resetToInput: () => void;\n clearError: () => void;\n /** Registration after a verified code failed: back to the code step with the reason shown. */\n registrationFailed: (message: string) => void;\n}\n\nexport interface UsePhoneVerificationResult extends PhoneVerificationState, PhoneVerificationActions {}\n\n/**\n * Manages the phone verification lifecycle.\n *\n * Starts with phone input, sends OTP, then prompts for the code.\n * On success, `verifiedPhone` contains the E.164 number ready to become\n * a member ID.\n */\nexport function usePhoneVerification(defaultCountryCode?: string): UsePhoneVerificationResult {\n const [stage, setStage] = useState<PhoneVerificationState['stage']>('input');\n const [inputPhone, setInputPhone] = useState('');\n const [countryCode, setCountryCode] = useState(defaultCountryCode || 'US');\n const [otp, setOtp] = useState('');\n const [verifiedPhone, setVerifiedPhone] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [testOtpMode, setTestOtpMode] = useState(false);\n\n const [sendPhoneOtpMutation] = useSendPhoneOtpCodeMutation();\n const [verifyPhoneOtpMutation] = useVerifyPhoneOtpCodeMutation();\n\n const clearError = useCallback(() => setError(null), []);\n const { obtainSystemToken, getLastError: getLastTokenError } = useObtainSystemToken();\n\n const resetToInput = useCallback(() => {\n setStage('input');\n setInputPhone('');\n setOtp('');\n setError(null);\n setVerifiedPhone(null);\n setTestOtpMode(false);\n }, []);\n\n const continueWithTestOtp = useCallback(() => {\n if (!isChatTestOtpEnabled()) return;\n clearError();\n const normalized = formatPhoneNumber(inputPhone, countryCode);\n if (!normalized || !isValidPhoneNumber(normalized)) {\n setError('Please enter a valid mobile number');\n return;\n }\n setTestOtpMode(true);\n setOtp(CHAT_REGISTRATION_TEST_OTP);\n setStage('otp');\n }, [inputPhone, countryCode, clearError]);\n\n const sendOtp = useCallback(async () => {\n clearError();\n setTestOtpMode(false);\n const normalized = formatPhoneNumber(inputPhone, countryCode);\n\n if (!normalized || !isValidPhoneNumber(normalized)) {\n setError('Please enter a valid mobile number');\n return;\n }\n\n setLoading(true);\n try {\n const systemToken = await obtainSystemToken();\n if (!systemToken) throw new Error(getLastTokenError() || 'Unable to obtain cdecli system token');\n\n const result = await sendPhoneOtpMutation({\n variables: { phoneNumber: { phoneNumber: normalized } },\n context: { headers: { 'x-cdecli-system-token': systemToken } },\n });\n\n if (!result.data?.sendPhoneOTPCode) throw new Error('Failed to send OTP');\n setOtp('');\n setStage('otp');\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to send OTP');\n } finally {\n setLoading(false);\n }\n }, [inputPhone, countryCode, sendPhoneOtpMutation, clearError, obtainSystemToken, getLastTokenError]);\n\n const verifyOtp = useCallback(async () => {\n clearError();\n\n const code = otp.replace(/\\D/g, '');\n if (!code || code.length !== 6) {\n setError('Please enter a valid 6-digit OTP');\n return;\n }\n\n const normalized = formatPhoneNumber(inputPhone, countryCode);\n if (!normalized) {\n setError('Please enter a valid phone number');\n return;\n }\n\n // Test path (CHAT_ALLOW_TEST_OTP builds only): 123456 skips the server\n // verify and goes straight on to registration and chat.\n if (isChatTestOtpEnabled() && isChatTestOtpCode(code)) {\n setVerifiedPhone(normalized);\n setStage('verified');\n setTestOtpMode(false);\n setError(null);\n return;\n }\n\n setStage('verifying');\n setLoading(true);\n try {\n const systemToken = await obtainSystemToken();\n if (!systemToken) throw new Error(getLastTokenError() || 'Unable to obtain cdecli system token');\n\n const result = await verifyPhoneOtpMutation({\n variables: { phoneNumber: { phoneNumber: normalized }, otp: code },\n context: { headers: { 'x-cdecli-system-token': systemToken } },\n });\n\n if (!result.data?.verifyPhoneOTPCode) throw new Error('Invalid or expired OTP');\n setVerifiedPhone(normalized);\n setStage('verified');\n setTestOtpMode(false);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to verify OTP');\n setStage('otp');\n } finally {\n setLoading(false);\n }\n }, [\n otp,\n inputPhone,\n countryCode,\n testOtpMode,\n verifyPhoneOtpMutation,\n clearError,\n obtainSystemToken,\n getLastTokenError,\n ]);\n\n const registrationFailed = useCallback((message: string) => {\n setVerifiedPhone(null);\n setLoading(false);\n setError(message);\n setStage('otp');\n }, []);\n\n return {\n stage,\n verifiedPhone,\n inputPhone,\n countryCode,\n otp,\n error,\n loading,\n testOtpMode,\n setCountryCode,\n setInputPhone,\n setOtp,\n sendOtp,\n verifyOtp,\n continueWithTestOtp,\n resetToInput,\n clearError,\n registrationFailed,\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usePhoneVerification.js","sources":["../../../src/features/messaging/usePhoneVerification.ts"],"sourcesContent":["/**\n * Phone number verification flow for Yantra Chat registration.\n *\n * Manages the OTP verification process for phone-number-based membership.\n * Uses adminIde's existing `sendPhoneOTP` / `verifyPhoneOtp` mutations and Auth0's\n * `passwordlessLogin` endpoint.\n *\n * Phone numbers are normalized to E.164 format and serve as the member ID.\n */\nimport { useCallback, useState } from 'react';\nimport { useSendPhoneOtpCodeMutation, useVerifyPhoneOtpCodeMutation } from 'common/graphql';\nimport { formatPhoneNumber, isValidPhoneNumber } from './phoneNumbers';\nimport { checkMobileNumber } from './mobileNumberCheck';\nimport { useObtainSystemToken } from '../../hooks/useObtainSystemToken';\nimport { config } from '../../config/env-config';\n\n/** Fixed code for \"Continue with test OTP\" (CHAT_ALLOW_TEST_OTP builds only; no SMS verify). */\nexport const CHAT_REGISTRATION_TEST_OTP = '123456';\n\nfunction isChatTestOtpCode(code: string): boolean {\n return code.replace(/\\D/g, '') === CHAT_REGISTRATION_TEST_OTP;\n}\n\n/**\n * The test OTP exists only when CHAT_ALLOW_TEST_OTP=true (dev.env locally, the build profile's env\n * in eas.json). Everywhere else the option is hidden and 123456 is checked like any code.\n */\nexport function isChatTestOtpEnabled(): boolean {\n return config.CHAT_ALLOW_TEST_OTP === true;\n}\n\nexport interface PhoneVerificationState {\n /** Current stage of the verification flow. */\n stage: 'input' | 'otp' | 'verifying' | 'verified' | 'error';\n /** The phone number in E.164 format, if successfully verified. */\n verifiedPhone: string | null;\n /** The user-entered phone (raw input, before normalization). */\n inputPhone: string;\n /** Country code (ISO-3166 alpha-2) for phone normalization. */\n countryCode: string;\n /** OTP entered by the user. */\n otp: string;\n /** Error message if verification failed. */\n error: string | null;\n /** Busy: waiting for server response. */\n loading: boolean;\n /** User chose \"Continue with test OTP\" — skip server verify when code is 123456. */\n testOtpMode: boolean;\n}\n\nexport interface PhoneVerificationActions {\n setCountryCode: (code: string) => void;\n setInputPhone: (phone: string) => void;\n setOtp: (code: string) => void;\n /** Resolves true once the code was sent. */\n sendOtp: () => Promise<boolean>;\n verifyOtp: () => Promise<void>;\n continueWithTestOtp: () => void;\n resetToInput: () => void;\n clearError: () => void;\n /** Registration after a verified code failed: back to the code step with the reason shown. */\n registrationFailed: (message: string) => void;\n}\n\nexport interface UsePhoneVerificationResult extends PhoneVerificationState, PhoneVerificationActions {}\n\n/**\n * Manages the phone verification lifecycle.\n *\n * Starts with phone input, sends OTP, then prompts for the code.\n * On success, `verifiedPhone` contains the E.164 number ready to become\n * a member ID.\n */\nexport function usePhoneVerification(defaultCountryCode?: string): UsePhoneVerificationResult {\n const [stage, setStage] = useState<PhoneVerificationState['stage']>('input');\n const [inputPhone, setInputPhone] = useState('');\n const [countryCode, setCountryCode] = useState(defaultCountryCode || 'US');\n const [otp, setOtp] = useState('');\n const [verifiedPhone, setVerifiedPhone] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [testOtpMode, setTestOtpMode] = useState(false);\n\n const [sendPhoneOtpMutation] = useSendPhoneOtpCodeMutation();\n const [verifyPhoneOtpMutation] = useVerifyPhoneOtpCodeMutation();\n\n const clearError = useCallback(() => setError(null), []);\n const { obtainSystemToken, getLastError: getLastTokenError } = useObtainSystemToken();\n\n const resetToInput = useCallback(() => {\n setStage('input');\n setOtp('');\n setError(null);\n setVerifiedPhone(null);\n setTestOtpMode(false);\n }, []);\n\n const continueWithTestOtp = useCallback(() => {\n if (!isChatTestOtpEnabled()) return;\n clearError();\n const normalized = formatPhoneNumber(inputPhone, countryCode);\n if (!normalized || !isValidPhoneNumber(normalized)) {\n setError('Please enter a valid mobile number');\n return;\n }\n setTestOtpMode(true);\n setOtp(CHAT_REGISTRATION_TEST_OTP);\n setStage('otp');\n }, [inputPhone, countryCode, clearError]);\n\n const sendOtp = useCallback(async (): Promise<boolean> => {\n clearError();\n setTestOtpMode(false);\n const check = checkMobileNumber(inputPhone, countryCode);\n if (!check.ok) {\n setError(check.message);\n return false;\n }\n const normalized = check.e164;\n\n setLoading(true);\n try {\n const systemToken = await obtainSystemToken();\n if (!systemToken) throw new Error(getLastTokenError() || 'Unable to obtain cdecli system token');\n\n const result = await sendPhoneOtpMutation({\n variables: { phoneNumber: { phoneNumber: normalized } },\n context: { headers: { 'x-cdecli-system-token': systemToken } },\n });\n\n if (!result.data?.sendPhoneOTPCode) throw new Error('Failed to send OTP');\n setOtp('');\n setStage('otp');\n setError(null);\n return true;\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to send OTP');\n return false;\n } finally {\n setLoading(false);\n }\n }, [inputPhone, countryCode, sendPhoneOtpMutation, clearError, obtainSystemToken, getLastTokenError]);\n\n const verifyOtp = useCallback(async () => {\n clearError();\n\n const code = otp.replace(/\\D/g, '');\n if (!code || code.length !== 6) {\n setError('Please enter a valid 6-digit OTP');\n return;\n }\n\n const normalized = formatPhoneNumber(inputPhone, countryCode);\n if (!normalized) {\n setError('Please enter a valid phone number');\n return;\n }\n\n // Test path (CHAT_ALLOW_TEST_OTP builds only): 123456 skips the server\n // verify and goes straight on to registration and chat.\n if (isChatTestOtpEnabled() && isChatTestOtpCode(code)) {\n setVerifiedPhone(normalized);\n setStage('verified');\n setTestOtpMode(false);\n setError(null);\n return;\n }\n\n setStage('verifying');\n setLoading(true);\n try {\n const systemToken = await obtainSystemToken();\n if (!systemToken) throw new Error(getLastTokenError() || 'Unable to obtain cdecli system token');\n\n const result = await verifyPhoneOtpMutation({\n variables: { phoneNumber: { phoneNumber: normalized }, otp: code },\n context: { headers: { 'x-cdecli-system-token': systemToken } },\n });\n\n if (!result.data?.verifyPhoneOTPCode) throw new Error('Invalid or expired OTP');\n setVerifiedPhone(normalized);\n setStage('verified');\n setTestOtpMode(false);\n setError(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to verify OTP');\n setStage('otp');\n } finally {\n setLoading(false);\n }\n }, [\n otp,\n inputPhone,\n countryCode,\n testOtpMode,\n verifyPhoneOtpMutation,\n clearError,\n obtainSystemToken,\n getLastTokenError,\n ]);\n\n const registrationFailed = useCallback((message: string) => {\n setVerifiedPhone(null);\n setLoading(false);\n setError(message);\n setStage('otp');\n }, []);\n\n return {\n stage,\n verifiedPhone,\n inputPhone,\n countryCode,\n otp,\n error,\n loading,\n testOtpMode,\n setCountryCode,\n setInputPhone,\n setOtp,\n sendOtp,\n verifyOtp,\n continueWithTestOtp,\n resetToInput,\n clearError,\n registrationFailed,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -92,7 +92,7 @@ function ChatNativeScreen() {
92
92
  }
93
93
  return /* @__PURE__ */ jsx(View, { style: [styles.fill, {
94
94
  backgroundColor: theme.colors.background
95
- }], children: /* @__PURE__ */ jsx(RegistrationScreen, { onRegistrationComplete: handleRegistrationComplete, theme, testID: "chat-registration-screen" }) });
95
+ }], children: /* @__PURE__ */ jsx(RegistrationScreen, { onRegistrationComplete: handleRegistrationComplete, onClose: navigation.canGoBack() ? () => navigation.goBack() : void 0, theme, testID: "chat-registration-screen" }) });
96
96
  }
97
97
  return /* @__PURE__ */ jsx(SafeAreaView, { style: [styles.fill, isDark && styles.fillDark, {
98
98
  backgroundColor: theme.colors.background
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/screens/ChatNative/index.tsx"],"sourcesContent":["/**\n * Native Chats screen - the host route for the federated CHAT surface.\n *\n * Same delivery contract as CanvasBoard and Characters: the App (the MF host)\n * registers the federated component and injects the seams it owns; this screen\n * only reads the registry and contributes the two things the remote cannot\n * know - who is signed in, and where navigation should go.\n *\n * Opening it triggers the runtime fetch of `chat_native/Chat` from the\n * chat-native surface; in a release build none of that code ships in the\n * binary.\n *\n * If the user is not yet registered with Yantra Chat (phone-based membership),\n * they are prompted to register before accessing the chat surface.\n */\nimport React, { useCallback, useEffect } from 'react';\nimport { StyleSheet, Text, View } from 'react-native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { useNavigation, useRoute } from '@react-navigation/native';\nimport { getNativeChatExperience } from '../../features/messaging/nativeChatRegistry';\nimport { useChatViewer } from '../../features/messaging/useChatViewer';\nimport { RegistrationScreen } from '../../features/messaging/RegistrationScreen';\nimport { mobileColors } from '../../theme/mobileTokens';\nimport { useAppTheme } from '../../theme/AppThemeProvider';\n\nexport interface ChatNativeRouteParams {\n /** Deep link from a push tap or an Apps tile: open straight into a thread. */\n channelId?: string;\n /** From a chat invite link (`/chat/invite?by=&n=`): open the conversation with the inviter. */\n inviterId?: string;\n inviterName?: string;\n /** When the invite link was opened; makes reopening the same link a fresh attempt. */\n inviteAt?: number;\n orgName?: string;\n}\n\n/** Only `setParams` is used; the header flag is read by the host stack, not by this screen. */\ntype ChatNativeNavigation = {\n setParams(params: Partial<ChatNativeRouteParams> & { hideNavigationHeader?: boolean }): void;\n goBack(): void;\n};\n\nfunction buildRegistrationTheme(isDark: boolean) {\n const c = mobileColors(isDark);\n return {\n colors: {\n background: c.bg,\n card: c.surface,\n text: c.text,\n textSecondary: c.textMuted,\n placeholder: isDark ? '#64748b' : '#94a3b8',\n primary: c.primary,\n error: c.dangerText,\n border: c.border,\n },\n fonts: {\n regular: { fontFamily: 'system' },\n medium: { fontFamily: 'system', fontWeight: '500' as const },\n bold: { fontFamily: 'system', fontWeight: '700' as const },\n },\n };\n}\n\nexport default function ChatNativeScreen() {\n const route = useRoute();\n const navigation = useNavigation<ChatNativeNavigation>();\n const { isDark } = useAppTheme();\n const theme = buildRegistrationTheme(isDark);\n\n const Chat = getNativeChatExperience();\n const { viewer, error, ready, needsRegistration, registerForChat, membershipLoading } = useChatViewer();\n\n const params = route.params as ChatNativeRouteParams | undefined;\n const channelId = typeof params?.channelId === 'string' ? params.channelId : undefined;\n const inviterId = typeof params?.inviterId === 'string' ? params.inviterId : undefined;\n const inviterName = typeof params?.inviterName === 'string' ? params.inviterName : null;\n const inviteAt = typeof params?.inviteAt === 'number' ? params.inviteAt : 0;\n const initialPeer = React.useMemo(\n () => (inviterId ? { userId: inviterId, name: inviterName } : undefined),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- inviteAt: a new object per link open\n [inviterId, inviterName, inviteAt],\n );\n\n const handleRegistrationComplete = useCallback(\n async (phoneNumber: string) => {\n try {\n await registerForChat(phoneNumber);\n } catch (err) {\n console.error('[ChatNative] Yantra Chat registration failed', err);\n throw err;\n }\n },\n [registerForChat],\n );\n\n const handleInternalRouteChange = useCallback(\n (internal: 'list' | 'thread' | 'contacts' | 'register') => {\n navigation.setParams({ hideNavigationHeader: internal !== 'list' });\n },\n [navigation],\n );\n\n // Hide stack header on registration, thread, and contacts — each screen owns its top bar.\n useEffect(() => {\n const hide = needsRegistration || membershipLoading;\n navigation.setParams({ hideNavigationHeader: hide });\n }, [needsRegistration, membershipLoading, navigation]);\n\n if (!Chat) {\n // A build without the federation host (or before App registered it).\n // Say so instead of rendering a blank screen.\n return (\n <SafeAreaView style={[styles.fill, isDark && styles.fillDark]}>\n <View style={styles.center}>\n <Text style={[styles.title, isDark && styles.textLight]}>Chat unavailable</Text>\n <Text style={[styles.detail, isDark && styles.textMuted]}>\n This build does not carry the federation host runtime.\n </Text>\n </View>\n </SafeAreaView>\n );\n }\n\n // Show registration screen if user is not registered yet\n if (needsRegistration || membershipLoading) {\n if (membershipLoading && !needsRegistration) {\n return (\n <View\n style={[\n styles.fill,\n { backgroundColor: theme.colors.background, justifyContent: 'center', alignItems: 'center' },\n ]}\n >\n <Text style={{ color: theme.colors.textSecondary }}>Loading…</Text>\n </View>\n );\n }\n return (\n <View style={[styles.fill, { backgroundColor: theme.colors.background }]}>\n <RegistrationScreen\n onRegistrationComplete={handleRegistrationComplete}\n theme={theme}\n testID=\"chat-registration-screen\"\n />\n </View>\n );\n }\n\n return (\n <SafeAreaView\n style={[styles.fill, isDark && styles.fillDark, { backgroundColor: theme.colors.background }]}\n edges={['left', 'right', 'bottom']}\n >\n <Chat\n viewer={viewer}\n sessionError={ready ? error : null}\n initialChannelId={channelId}\n initialPeer={initialPeer}\n onClose={() => navigation.goBack()}\n onInternalRouteChange={handleInternalRouteChange}\n />\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n fill: { flex: 1, backgroundColor: '#f8fafc' },\n fillDark: { backgroundColor: '#0f172a' },\n center: { flex: 1, alignItems: 'center', justifyContent: 'center', padding: 24 },\n title: { fontSize: 17, fontWeight: '600', color: '#0f172a', marginBottom: 6 },\n detail: { fontSize: 13, color: '#64748b', textAlign: 'center' },\n textLight: { color: '#f1f5f9' },\n textMuted: { color: '#94a3b8' },\n});\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/screens/ChatNative/index.tsx"],"sourcesContent":["/**\n * Native Chats screen - the host route for the federated CHAT surface.\n *\n * Same delivery contract as CanvasBoard and Characters: the App (the MF host)\n * registers the federated component and injects the seams it owns; this screen\n * only reads the registry and contributes the two things the remote cannot\n * know - who is signed in, and where navigation should go.\n *\n * Opening it triggers the runtime fetch of `chat_native/Chat` from the\n * chat-native surface; in a release build none of that code ships in the\n * binary.\n *\n * If the user is not yet registered with Yantra Chat (phone-based membership),\n * they are prompted to register before accessing the chat surface.\n */\nimport React, { useCallback, useEffect } from 'react';\nimport { StyleSheet, Text, View } from 'react-native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { useNavigation, useRoute } from '@react-navigation/native';\nimport { getNativeChatExperience } from '../../features/messaging/nativeChatRegistry';\nimport { useChatViewer } from '../../features/messaging/useChatViewer';\nimport { RegistrationScreen } from '../../features/messaging/RegistrationScreen';\nimport { mobileColors } from '../../theme/mobileTokens';\nimport { useAppTheme } from '../../theme/AppThemeProvider';\n\nexport interface ChatNativeRouteParams {\n /** Deep link from a push tap or an Apps tile: open straight into a thread. */\n channelId?: string;\n /** From a chat invite link (`/chat/invite?by=&n=`): open the conversation with the inviter. */\n inviterId?: string;\n inviterName?: string;\n /** When the invite link was opened; makes reopening the same link a fresh attempt. */\n inviteAt?: number;\n orgName?: string;\n}\n\n/** Only `setParams` is used; the header flag is read by the host stack, not by this screen. */\ntype ChatNativeNavigation = {\n setParams(params: Partial<ChatNativeRouteParams> & { hideNavigationHeader?: boolean }): void;\n goBack(): void;\n canGoBack(): boolean;\n};\n\nfunction buildRegistrationTheme(isDark: boolean) {\n const c = mobileColors(isDark);\n return {\n colors: {\n background: c.bg,\n card: c.surface,\n text: c.text,\n textSecondary: c.textMuted,\n placeholder: isDark ? '#64748b' : '#94a3b8',\n primary: c.primary,\n error: c.dangerText,\n border: c.border,\n },\n fonts: {\n regular: { fontFamily: 'system' },\n medium: { fontFamily: 'system', fontWeight: '500' as const },\n bold: { fontFamily: 'system', fontWeight: '700' as const },\n },\n };\n}\n\nexport default function ChatNativeScreen() {\n const route = useRoute();\n const navigation = useNavigation<ChatNativeNavigation>();\n const { isDark } = useAppTheme();\n const theme = buildRegistrationTheme(isDark);\n\n const Chat = getNativeChatExperience();\n const { viewer, error, ready, needsRegistration, registerForChat, membershipLoading } = useChatViewer();\n\n const params = route.params as ChatNativeRouteParams | undefined;\n const channelId = typeof params?.channelId === 'string' ? params.channelId : undefined;\n const inviterId = typeof params?.inviterId === 'string' ? params.inviterId : undefined;\n const inviterName = typeof params?.inviterName === 'string' ? params.inviterName : null;\n const inviteAt = typeof params?.inviteAt === 'number' ? params.inviteAt : 0;\n const initialPeer = React.useMemo(\n () => (inviterId ? { userId: inviterId, name: inviterName } : undefined),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- inviteAt: a new object per link open\n [inviterId, inviterName, inviteAt],\n );\n\n const handleRegistrationComplete = useCallback(\n async (phoneNumber: string) => {\n try {\n await registerForChat(phoneNumber);\n } catch (err) {\n console.error('[ChatNative] Yantra Chat registration failed', err);\n throw err;\n }\n },\n [registerForChat],\n );\n\n const handleInternalRouteChange = useCallback(\n (internal: 'list' | 'thread' | 'contacts' | 'register') => {\n navigation.setParams({ hideNavigationHeader: internal !== 'list' });\n },\n [navigation],\n );\n\n // Hide stack header on registration, thread, and contacts — each screen owns its top bar.\n useEffect(() => {\n const hide = needsRegistration || membershipLoading;\n navigation.setParams({ hideNavigationHeader: hide });\n }, [needsRegistration, membershipLoading, navigation]);\n\n if (!Chat) {\n // A build without the federation host (or before App registered it).\n // Say so instead of rendering a blank screen.\n return (\n <SafeAreaView style={[styles.fill, isDark && styles.fillDark]}>\n <View style={styles.center}>\n <Text style={[styles.title, isDark && styles.textLight]}>Chat unavailable</Text>\n <Text style={[styles.detail, isDark && styles.textMuted]}>\n This build does not carry the federation host runtime.\n </Text>\n </View>\n </SafeAreaView>\n );\n }\n\n // Show registration screen if user is not registered yet\n if (needsRegistration || membershipLoading) {\n if (membershipLoading && !needsRegistration) {\n return (\n <View\n style={[\n styles.fill,\n { backgroundColor: theme.colors.background, justifyContent: 'center', alignItems: 'center' },\n ]}\n >\n <Text style={{ color: theme.colors.textSecondary }}>Loading…</Text>\n </View>\n );\n }\n return (\n <View style={[styles.fill, { backgroundColor: theme.colors.background }]}>\n <RegistrationScreen\n onRegistrationComplete={handleRegistrationComplete}\n onClose={navigation.canGoBack() ? () => navigation.goBack() : undefined}\n theme={theme}\n testID=\"chat-registration-screen\"\n />\n </View>\n );\n }\n\n return (\n <SafeAreaView\n style={[styles.fill, isDark && styles.fillDark, { backgroundColor: theme.colors.background }]}\n edges={['left', 'right', 'bottom']}\n >\n <Chat\n viewer={viewer}\n sessionError={ready ? error : null}\n initialChannelId={channelId}\n initialPeer={initialPeer}\n onClose={() => navigation.goBack()}\n onInternalRouteChange={handleInternalRouteChange}\n />\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n fill: { flex: 1, backgroundColor: '#f8fafc' },\n fillDark: { backgroundColor: '#0f172a' },\n center: { flex: 1, alignItems: 'center', justifyContent: 'center', padding: 24 },\n title: { fontSize: 17, fontWeight: '600', color: '#0f172a', marginBottom: 6 },\n detail: { fontSize: 13, color: '#64748b', textAlign: 'center' },\n textLight: { color: '#f1f5f9' },\n textMuted: { color: '#94a3b8' },\n});\n"],"names":["React"],"mappings":"smBA2CA,SAAS,uBAAuB,MAAiB,EAAA;AAC/C,EAAM,MAAA,CAAA,GAAI,aAAa,MAAM,CAAA;AAC7B,EAAO,OAAA;AAAA,IACL,MAAQ,EAAA;AAAA,MACN,YAAY,CAAE,CAAA,EAAA;AAAA,MACd,MAAM,CAAE,CAAA,OAAA;AAAA,MACR,MAAM,CAAE,CAAA,IAAA;AAAA,MACR,eAAe,CAAE,CAAA,SAAA;AAAA,MACjB,WAAA,EAAa,SAAS,SAAY,GAAA,SAAA;AAAA,MAClC,SAAS,CAAE,CAAA,OAAA;AAAA,MACX,OAAO,CAAE,CAAA,UAAA;AAAA,MACT,QAAQ,CAAE,CAAA;AAAA,KACZ;AAAA,IACA,KAAO,EAAA;AAAA,MACL,OAAS,EAAA;AAAA,QACP,UAAY,EAAA;AAAA,OACd;AAAA,MACA,MAAQ,EAAA;AAAA,QACN,UAAY,EAAA,QAAA;AAAA,QACZ,UAAY,EAAA;AAAA,OACd;AAAA,MACA,IAAM,EAAA;AAAA,QACJ,UAAY,EAAA,QAAA;AAAA,QACZ,UAAY,EAAA;AAAA;AACd;AACF,GACF;AACF;AACA,SAAwB,gBAAmB,GAAA;AACzC,EAAA,MAAM,QAAQ,QAAS,EAAA;AACvB,EAAA,MAAM,aAAa,aAAoC,EAAA;AACvD,EAAM,MAAA;AAAA,IACJ;AAAA,MACE,WAAY,EAAA;AAChB,EAAM,MAAA,KAAA,GAAQ,uBAAuB,MAAM,CAAA;AAC3C,EAAA,MAAM,OAAO,uBAAwB,EAAA;AACrC,EAAM,MAAA;AAAA,IACJ,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,MACE,aAAc,EAAA;AAClB,EAAA,MAAM,SAAS,KAAM,CAAA,MAAA;AACrB,EAAA,MAAM,YAAY,QAAO,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,SAAc,CAAA,KAAA,QAAA,GAAW,OAAO,SAAY,GAAA,MAAA;AAC7E,EAAA,MAAM,YAAY,QAAO,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,SAAc,CAAA,KAAA,QAAA,GAAW,OAAO,SAAY,GAAA,MAAA;AAC7E,EAAA,MAAM,cAAc,QAAO,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,WAAgB,CAAA,KAAA,QAAA,GAAW,OAAO,WAAc,GAAA,IAAA;AACnF,EAAA,MAAM,WAAW,QAAO,MAAA,IAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAQ,QAAa,CAAA,KAAA,QAAA,GAAW,OAAO,QAAW,GAAA,CAAA;AAC1E,EAAA,MAAM,cAAcA,cAAM,CAAA,OAAA;AAAA,IAAQ,MAAM,SAAY,GAAA;AAAA,MAClD,MAAQ,EAAA,SAAA;AAAA,MACR,IAAM,EAAA;AAAA,KACJ,GAAA,MAAA;AAAA;AAAA,IAEJ,CAAC,SAAW,EAAA,WAAA,EAAa,QAAQ;AAAA,GAAC;AAClC,EAAM,MAAA,0BAAA,GAA6B,WAAY,CAAA,OAAO,WAAwB,KAAA;AAC5E,IAAI,IAAA;AACF,MAAA,MAAM,gBAAgB,WAAW,CAAA;AAAA,aAC1B,GAAK,EAAA;AACZ,MAAQ,OAAA,CAAA,KAAA,CAAM,gDAAgD,GAAG,CAAA;AACjE,MAAM,MAAA,GAAA;AAAA;AACR,GACF,EAAG,CAAC,eAAe,CAAC,CAAA;AACpB,EAAM,MAAA,yBAAA,GAA4B,WAAY,CAAA,CAAC,QAA0D,KAAA;AACvG,IAAA,UAAA,CAAW,SAAU,CAAA;AAAA,MACnB,sBAAsB,QAAa,KAAA;AAAA,KACpC,CAAA;AAAA,GACH,EAAG,CAAC,UAAU,CAAC,CAAA;AAGf,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,OAAO,iBAAqB,IAAA,iBAAA;AAClC,IAAA,UAAA,CAAW,SAAU,CAAA;AAAA,MACnB,oBAAsB,EAAA;AAAA,KACvB,CAAA;AAAA,GACA,EAAA,CAAC,iBAAmB,EAAA,iBAAA,EAAmB,UAAU,CAAC,CAAA;AACrD,EAAA,IAAI,CAAC,IAAM,EAAA;AAGT,IAAA,uBAAQ,GAAA,CAAA,YAAA,EAAA,EAAa,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA,MAAA,IAAU,MAAO,CAAA,QAAQ,CACvD,EAAA,QAAA,kBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,OAAO,MAChB,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,IAAA,EAAA,EAAK,OAAO,CAAC,MAAA,CAAO,OAAO,MAAU,IAAA,MAAA,CAAO,SAAS,CAAA,EAAG,QAAgB,EAAA,kBAAA,EAAA,CAAA;AAAA,sBACzE,GAAA,CAAC,IAAK,EAAA,EAAA,KAAA,EAAO,CAAC,MAAA,CAAO,QAAQ,MAAU,IAAA,MAAA,CAAO,SAAS,CAAA,EAAG,QAE1D,EAAA,wDAAA,EAAA;AAAA,KAAA,EACJ,CACJ,EAAA,CAAA;AAAA;AAIV,EAAA,IAAI,qBAAqB,iBAAmB,EAAA;AAC1C,IAAI,IAAA,iBAAA,IAAqB,CAAC,iBAAmB,EAAA;AAC3C,MAAA,uBAAQ,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA;AAAA,QAChC,eAAA,EAAiB,MAAM,MAAO,CAAA,UAAA;AAAA,QAC9B,cAAgB,EAAA,QAAA;AAAA,QAChB,UAAY,EAAA;AAAA,OACb,CAAA,EACa,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA;AAAA,QACvB,KAAA,EAAO,MAAM,MAAO,CAAA;AAAA,OACtB,EAAG,2BAAQ,CACH,EAAA,CAAA;AAAA;AAEZ,IAAA,uBAAQ,GAAA,CAAA,IAAA,EAAA,EAAK,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA;AAAA,MAChC,eAAA,EAAiB,MAAM,MAAO,CAAA;AAAA,KAC/B,CACW,EAAA,QAAA,kBAAA,GAAA,CAAC,sBAAmB,sBAAwB,EAAA,0BAAA,EAA4B,SAAS,UAAW,CAAA,SAAA,EAAc,GAAA,MAAM,WAAW,MAAO,EAAA,GAAI,QAAW,KAAc,EAAA,MAAA,EAAO,4BAA2B,CACrM,EAAA,CAAA;AAAA;AAEV,EAAO,uBAAA,GAAA,CAAC,gBAAa,KAAO,EAAA,CAAC,OAAO,IAAM,EAAA,MAAA,IAAU,OAAO,QAAU,EAAA;AAAA,IACnE,eAAA,EAAiB,MAAM,MAAO,CAAA;AAAA,GAC/B,CAAG,EAAA,KAAA,EAAO,CAAC,MAAA,EAAQ,SAAS,QAAQ,CAAA,EAC3B,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,MAAgB,EAAA,YAAA,EAAc,QAAQ,KAAQ,GAAA,IAAA,EAAM,gBAAkB,EAAA,SAAA,EAAW,WAA0B,EAAA,OAAA,EAAS,MAAM,UAAA,CAAW,MAAO,EAAA,EAAG,qBAAuB,EAAA,yBAAA,EAA2B,CAC3M,EAAA,CAAA;AACR;AACA,MAAM,MAAA,GAAS,WAAW,MAAO,CAAA;AAAA,EAC/B,IAAM,EAAA;AAAA,IACJ,IAAM,EAAA,CAAA;AAAA,IACN,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,QAAU,EAAA;AAAA,IACR,eAAiB,EAAA;AAAA,GACnB;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,CAAA;AAAA,IACN,UAAY,EAAA,QAAA;AAAA,IACZ,cAAgB,EAAA,QAAA;AAAA,IAChB,OAAS,EAAA;AAAA,GACX;AAAA,EACA,KAAO,EAAA;AAAA,IACL,QAAU,EAAA,EAAA;AAAA,IACV,UAAY,EAAA,KAAA;AAAA,IACZ,KAAO,EAAA,SAAA;AAAA,IACP,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,QAAU,EAAA,EAAA;AAAA,IACV,KAAO,EAAA,SAAA;AAAA,IACP,SAAW,EAAA;AAAA,GACb;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAO,EAAA;AAAA,GACT;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAO,EAAA;AAAA;AAEX,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adminide-stack/yantra-mobile",
3
- "version": "12.0.73",
3
+ "version": "12.0.74-alpha.1",
4
4
  "description": "Sample core for higher packages to depend on",
5
5
  "license": "ISC",
6
6
  "author": "CDMBase LLC",
@@ -26,7 +26,8 @@
26
26
  "uuid": "^9.0.0"
27
27
  },
28
28
  "devDependencies": {
29
- "common": "^12.0.73"
29
+ "common": "12.0.71",
30
+ "libphonenumber-js": "^1.13.3"
30
31
  },
31
32
  "peerDependencies": {
32
33
  "@admin-layout/gluestack-ui-mobile": "*",
@@ -42,7 +43,7 @@
42
43
  "@messenger-box/platform-mobile": "*",
43
44
  "@react-native-async-storage/async-storage": "*",
44
45
  "@react-navigation/native": "*",
45
- "common": "12.0.70",
46
+ "common": "12.0.71",
46
47
  "expo-constants": "*",
47
48
  "expo-secure-store": "*",
48
49
  "expo-web-browser": "*",
@@ -59,5 +60,5 @@
59
60
  "typescript": {
60
61
  "definition": "lib/index.d.ts"
61
62
  },
62
- "gitHead": "91ca20011b578fe254c932776892872efc71dc6c"
63
+ "gitHead": "ef9718b8c40a27c7052db83fa34f4661d2ef8724"
63
64
  }